Ë
    ¤ehÏJ  ã                  ó  — d dl mZ d dlmZmZ d dlZd dlZd dlm	Z	m
ZmZmZ d dlmZ d dlmZ d dlmZ d dlmZmZ d d	lmZmZmZ d d
lmZ d dlmZm Z  d dl!m"Z"m#Z#m$Z$ d dl%m&Z& d dl'm(Z( d dl)m*Z*m+Z+ d dl,m-Z-m.Z. er"d dl/m0Z0 d dl1m2Z2m3Z3m4Z4m5Z5m6Z6 d dl7m8Z8 d dl)m9Z9m:Z: 	 	 	 	 	 	 	 	 d"d„Z;	 	 	 	 	 	 	 	 d#d„Z<	 	 	 	 	 	 	 	 d$d„Z=d%d„Z>	 	 	 	 	 	 d&d„Z?	 	 	 	 d'd„Z@	 	 	 	 	 	 	 	 	 	 d(d„ZA G d„ d«      ZBd)d„ZCd*d„ZDd+d „ZEd,d!„ZFy)-é    )Úannotations)ÚTYPE_CHECKINGÚcastN)ÚNaTÚalgosÚ	internalsÚlib)ÚNA)Úcache_readonly)Úfind_stack_level)Úensure_dtype_can_hold_naÚfind_common_type)Úis_1d_only_ea_dtypeÚ	is_scalarÚneeds_i8_conversion)Úconcat_compat)ÚExtensionDtypeÚSparseDtype)Úis_valid_na_for_dtypeÚisnaÚisna_all)Úensure_wrapped_if_datetimelike)ÚArrayManager)Úensure_block_shapeÚnew_block_2d)ÚBlockManagerÚmake_na_array)ÚSequence)Ú	ArrayLikeÚAxisIntÚDtypeObjÚ	Manager2DÚShape)ÚIndex)ÚBlockÚBlockPlacementc                ón   — |dk(  r| d   j                  | |«      S |dk(  sJ ‚| d   j                  | |«      S )zí
    Concatenate array managers into one.

    Parameters
    ----------
    mgrs_indexers : list of (ArrayManager, {axis: indexer,...}) tuples
    axes : list of Index
    concat_axis : int

    Returns
    -------
    ArrayManager
    é   r   )Úconcat_verticalÚconcat_horizontal)ÚmgrsÚaxesÚconcat_axiss      úZ/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/pandas/core/internals/concat.pyÚ_concatenate_array_managersr/   F   sJ   € ð  �aÒØ�A‰w×&Ñ& t¨TÓ2Ð2ð ˜aÒÐÐØ�A‰w×(Ñ(¨¨tÓ4Ð4ó    c                ó*  ‡— |xr |dk(  }t        | d   d   t        «      rt        || |«      }t        |||«      S |dk(  r"t        || |«      }|d   j	                  ||«      S t        | «      dkD  r¤| d   d   j                  dkD  r�| d   d   j                  d   j                  Š‰t        j                  t        j                  fv rNt        ˆfd„| D «       «      r:t        | «      dkD  r,t        d„ |D «       «      }t        | |‰«      }t        |f|«      S t        || |«      }t        |«      dk(  r |d   }|j!                  d¬«      }	||	_        |	S t%        |«      }
g }|
D �]  \  }}|d   }|j&                  }t)        |«      r´|D �cg c]  }|j&                  j*                  ‘Œ }}|j,                  st        j.                  |d¬«      }n>t1        |j                  «      rt3        |dd¬	«      }t5        |d
¬«      }nt3        |d¬«      }t7        |«      }|j*                  j                  |j                  k(  }nt9        ||¬«      }d}|r|j;                  ||¬«      }nt=        ||¬«      }|j?                  |«       �Œ t        t        |«      |«      S c c}w )zý
    Concatenate block managers into one.

    Parameters
    ----------
    mgrs_indexers : list of (BlockManager, {axis: indexer,...}) tuples
    axes : list of Index
    concat_axis : int
    copy : bool

    Returns
    -------
    BlockManager
    r   c              3  ó<   •K  — | ]  \  }}t        |‰«      –— Œ y ­w©N)Ú_is_homogeneous_mgr)Ú.0ÚmgrÚ_Úfirst_dtypes      €r.   ú	<genexpr>z'concatenate_managers.<locals>.<genexpr>Œ   s   øè ø€ ÒV¹f¸cÀ1Ô'¨¨[×9ÑVùs   ƒr(   c              3  ó2   K  — | ]  }t        |«      –— Œ y ­wr3   )Úlen)r5   Úxs     r.   r9   z'concatenate_managers.<locals>.<genexpr>‘   s   è ø€ Ò3¨œc !ŸfÑ3ùó   ‚F)Údeep©ÚaxisT©r@   Úea_compat_axisé   )Úndim)Úcopy)Ú	placement) Ú
isinstancer   Ú_maybe_reindex_columns_na_proxyr/   r*   r;   ÚnblocksÚblocksÚdtypeÚnpÚfloat64Úfloat32ÚallÚtupleÚ_concat_homogeneous_fastpathr   rE   r,   Ú_get_combined_planÚblockÚ_is_uniform_join_unitsÚvaluesÚis_extensionÚconcatenater   r   r   r   Ú_concatenate_join_unitsÚmake_block_same_classr   Úappend)Úmgrs_indexersr,   r-   rE   Ú
needs_copyr+   ÚshapeÚnbr6   ÚoutÚconcat_planrJ   rF   Ú
join_unitsÚunitÚblkÚjuÚvalsrU   ÚfastpathÚbr8   s                        @r.   Úconcatenate_managersrh   ^   s…  ø€ ð$ Ò*˜+¨Ñ*€Jô �- Ñ" 1Ñ%¤|Ô4Ü.¨t°]ÀJÓOˆô +Ø�$˜ó
ð 	
ð �aÒÜ.¨t°]ÀJÓOˆØ�A‰w×(Ñ(¨¨tÓ4Ð4ä
ˆ=Ó˜AÒ -°Ñ"2°1Ñ"5×"=Ñ"=ÀÒ"AØ# AÑ& qÑ)×0Ñ0°Ñ3×9Ñ9ˆØœ2Ÿ:™:¤r§z¡zÐ2Ñ2ô ÓVÈÔVÔVÜ˜Ó&¨Ò*ô Ñ3¨dÔ3Ó3�Ü1°-ÀÈÓT�Ü# R E¨4Ó0Ð0ä*¨4°À
ÓK€Dä
ˆ4ƒy�A‚~Ø�1‰gˆØ�h‰h˜EˆhÓ"ˆØˆŒØˆ
ä$ TÓ*€Kà€Fð "-ó #Ñˆ	�:Ø˜!‰}ˆØ�j‰jˆä! *Ô-Ø.8Ö9¨�B—H‘H—O“OÐ9ˆDÐ9à×#Ò#ô Ÿ™¨°1Ô5‘Ü$ S§Y¡YÔ/ä& t°!ÀDÔI�Ü+¨F¸Ô;‘ä& t°!Ô4�ä3°FÓ;ˆFà—z‘z×'Ñ'¨6¯<©<Ñ7‰Hä,¨Z¸dÔCˆFØˆHáØ×)Ñ)¨&¸IÐ)ÓF‰Aä˜V¨yÔ9ˆAà�‰�aÖðG#ôJ œ˜f› tÓ,Ð,ùòA :s   ÆJc                óÔ   — g }|D ]`  \  }}|j                  «       D ]#  \  }}|j                  | |   ||   |dddd¬«      }Œ% |r|s|j                  «       }|j                  |«       Œb |S )zô
    Reindex along columns so that all of the BlockManagers being concatenated
    have matching columns.

    Columns added in this reindexing have dtype=np.void, indicating they
    should be ignored when choosing a column's final dtype.
    FT)r@   rE   Ú
only_sliceÚ
allow_dupsÚuse_na_proxy)ÚitemsÚreindex_indexerrE   rZ   )r,   r[   r\   Únew_mgrsr6   ÚindexersÚiÚindexers           r.   rH   rH   Ê   s�   € ð €Hà&ò ‰ˆˆXð #Ÿ.™.Ó*ò 		‰JˆAˆwØ×%Ñ%Ø�Q‘Ø˜‘ØØØØØ!ð &ó ‰Cð		ñ ™hØ—(‘(“*ˆCà�‰˜Õð!ð" €Or0   c                óÒ   — | j                   dk7  ry| j                  d   }|j                  j                  r#|j                  j                  j
                  dk(  sy|j                  |k(  S )zC
    Check if this Manager can be treated as a single ndarray.
    r(   Fr   )rI   rJ   Úmgr_locsÚis_slice_likeÚas_sliceÚsteprK   )r6   r8   rc   s      r.   r4   r4   ì   sV   € ð ‡{�{�aÒØØ
�*‰*�Q‰-€CØ�L‰L×&Ò&¨3¯<©<×+@Ñ+@×+EÑ+EÈÒ+JØà�9‰9˜Ñ#Ð#r0   c           	     ó  — t        d„ | D «       «      rƒ| D ��cg c](  \  }}|j                  d   j                  j                  ‘Œ* }}}t	        j
                  |«      j                  }t        j                  t        |d   «      «      }t        ||«      }|S t	        j                  ||¬«      }|t        j                  k(  rt        j                  }	nt        j                  }	d}
| D ]r  \  }}|j                  d   }|
|z   }d|v r. |	|j                  d   j                  |d   |dd…|
|…f   «       n"|j                  d   j                  |dd…|
|…f<   |
|z  }
Œt t        j                  t        |d   «      «      }t        ||«      }|S c c}}w )zl
    With single-Block managers with homogeneous dtypes (that can already hold nan),
    we avoid [...]
    c              3  ó(   K  — | ]
  \  }}| –— Œ y ­wr3   © )r5   r7   rp   s      r.   r9   z/_concat_homogeneous_fastpath.<locals>.<genexpr>  s   è ø€ Ò
9™K˜A˜xˆxŒ<Ñ
9ùs   ‚r   )rK   r(   N)rO   rJ   rU   ÚTrL   rW   Úlibinternalsr&   Úslicer   ÚemptyrM   ÚlibalgosÚtake_2d_axis0_float64_float64Útake_2d_axis0_float32_float32r]   )r[   r]   r8   r6   r7   ÚarrsÚarrÚbpr^   Ú	take_funcÚstartrp   Úmgr_lenÚends                 r.   rQ   rQ   ù   so  € ô Ñ
9¨=Ô
9Ô9à5B×C©6¨3°�—
‘
˜1‘×$Ñ$×&Ó&ÐCˆÑCÜ�n‰n˜TÓ"×$Ñ$ˆÜ×(Ñ(¬¨u°Q©x«Ó9ˆÜ˜#˜rÓ"ˆØˆ	ä
�(‰(�5 Ô
,€Cà”b—j‘jÒ Ü×:Ñ:‰	ä×:Ñ:ˆ	à€EØ&ò ‰ˆˆXØ—)‘)˜A‘,ˆØ�g‰oˆà�‰=ÙØ—
‘
˜1‘×$Ñ$Ø˜‘Ø’A�u˜S�y�LÑ!õð !$§
¡
¨1¡× 4Ñ 4ˆC’�5˜�9�Ñà�Ñ‰ðô  
×	$Ñ	$¤U¨5°©8£_Ó	5€BÜ	�c˜2Ó	€BØ€IùóA Ds   ˜-F	c                óp  — g }| d   j                   d   }| D �cg c]  }|j                  ‘Œ }}t        j                  |«      }t	        |«      D ]`  \  }\  }}g }	t	        | «      D ]5  \  }
}||
   }t        ||||¬«      }t        |«      }|	j                  |«       Œ7 |j                  ||	f«       Œb |S c c}w )Nr   )Úmax_len)r]   Úblknosr|   Úget_concat_blkno_indexersÚ	enumerateÚ_get_block_for_concat_planÚJoinUnitrZ   )r+   ÚplanrŠ   r6   Úblknos_listÚpairsÚindr‹   r„   Úunits_for_bpÚkÚblknor^   rb   s                 r.   rR   rR   (  sÌ   € ð €Dà�1‰g�m‰m˜AÑ€Gà)-Ö. #�3—:“:Ð.€KÐ.Ü×2Ñ2°;Ó?€EÜ& uÓ-ò (Ñˆ‰\ˆf�bð ˆÜ “oò 	&‰FˆAˆsØ˜1‘IˆEä+¨C°°UÀGÔLˆBÜ˜B“<ˆDØ×Ñ Õ%ð	&ð 	�‰�R˜Ð&Õ'ð(ð €Kùò! /s   ™B3c               ó¦  — | j                   |   }t        |«      t        |j                  «      k(  r=|j                  j                  r'|j                  j                  j
                  dk(  r|}|S | j                  |j                     }t        j                  ||«      }t        |t        «      r|j                  |«      }|S |j                  |«      }|S )Nr(   )rJ   r;   rt   ru   rv   rw   Úblklocsrr   r	   Úmaybe_indices_to_slicerG   r}   Úslice_block_columnsÚtake_block_columns)r6   r„   r–   rŠ   rc   r^   Úax0_blk_indexerÚslcs           r.   rŽ   rŽ   B  s»   € ð �*‰*�UÑ
€Cô ˆ2ƒw”#�c—l‘lÓ#Ò#Ø�‰×"Ò" s§|¡|×'<Ñ'<×'AÑ'AÀQÒ'Fàˆð €Ið Ÿ+™+ b§j¡jÑ1ˆä×(Ñ(¨¸'ÓBˆô �cœ5Ô!Ø×(Ñ(¨Ó-ˆBð
 €Ið ×'Ñ'¨Ó,ˆBð €Ir0   c                  óP   — e Zd Zdd„Zd	d„Zd
d„Zedd„«       Zedd„«       Zdd„Z	y)r�   c                ó   — || _         y r3   )rS   )ÚselfrS   s     r.   Ú__init__zJoinUnit.__init___  s	   € Øˆ�
r0   c                ó^   — t        | «      j                  › dt        | j                  «      › d�S )Nú(ú))ÚtypeÚ__name__ÚreprrS   )r    s    r.   Ú__repr__zJoinUnit.__repr__b  s*   € Ü�t“*×%Ñ%Ð& a¬¨T¯Z©ZÓ(8Ð'9¸Ð;Ð;r0   c                óx  ‡— | j                   sy| j                  }|j                  j                  dk(  ry|j                  t        k(  r0|j
                  }t        ˆfd„|j                  d¬«      D «       «      S |j                  }|t        u r|j                  ‰k7  ry|t        u rt        ‰«      ryt        |‰«      S )z¯
        Check that we are all-NA of a type/dtype that is compatible with this dtype.
        Augments `self.is_na` with an additional check of the type of NA values.
        FÚVTc              3  ó6   •K  — | ]  }t        |‰«      –— Œ y ­wr3   )r   )r5   r<   rK   s     €r.   r9   z,JoinUnit._is_valid_na_for.<locals>.<genexpr>s  s   øè ø€ ÒX¸1Ô,¨Q°×6ÑXùs   ƒÚK)Úorder)Úis_narS   rK   ÚkindÚobjectrU   rO   ÚravelÚ
fill_valuer   r
   r   r   )r    rK   rc   rU   Úna_values    `   r.   Ú_is_valid_na_forzJoinUnit._is_valid_na_fore  s    ø€ ð
 �zŠzØà�j‰jˆØ�9‰9�>‰>˜SÒ Øà�9‰9œÒØ—Z‘ZˆFÜÓXÀÇÁÐSVÀÓ@WÔXÓXÐXà—>‘>ˆØ”s‰?˜sŸy™y¨EÒ1ð à”r‰>Ô1°%Ô8ð ô % X¨uÓ5Ð5r0   c                ó¤  — | j                   }|j                  j                  dk(  ry|j                  sy|j                  }|j
                  dk(  ryt        |j                  t        «      ry|j                  dk(  r'|d   }t        |«      rt        |«      syt        |«      S |d   d   }t        |«      rt        |«      syt        d„ |D «       «      S )Nrª   TFr   r(   c              3  ó2   K  — | ]  }t        |«      –— Œ y ­wr3   )r   )r5   Úrows     r.   r9   z!JoinUnit.is_na.<locals>.<genexpr>¢  s   è ø€ Ò7¨”x —}Ñ7ùr=   )rS   rK   r¯   Ú_can_hold_narU   ÚsizerG   r   rD   r   r   r   rO   )r    rc   rU   Úvals       r.   r®   zJoinUnit.is_na…  s±   € à�j‰jˆØ�9‰9�>‰>˜SÒ Øà×ÒØà—‘ˆØ�;‰;˜!Òàä�f—l‘l¤KÔ0Øà�;‰;˜!Òà˜‘)ˆCÜ˜S”>¬¨c¬àÜ˜FÓ#Ð#à˜‘)˜A‘,ˆCÜ˜S”>¬¨c¬àÜÑ7°Ô7Ó7Ð7r0   c                óP   — | j                   }|j                  j                  dk(  ryy)z{
        Will self.is_na be True after values.size == 0 deprecation and isna_all
        deprecation are enforced?
        rª   TF©rS   rK   r¯   )r    rc   s     r.   Ú)is_na_after_size_and_isna_all_deprecationz2JoinUnit.is_na_after_size_and_isna_all_deprecation¤  s#   € ð �j‰jˆØ�9‰9�>‰>˜SÒ ØØr0   c                óê  — |€9| j                   j                  j                  dk7  r| j                   j                  S |}| j	                  |«      r�| j                   j                  }|t        j                  d«      k(  rAt        t
        j                  | j                   j                  «      }|j                  r|d   €d }t        || j                   j                  |«      S | j                   j                  S )Nrª   r°   )r   r   )rS   rK   r¯   rU   r´   rL   r   Úndarrayr¹   r   r]   )r    Úempty_dtypeÚupcasted_nar²   Ú	blk_dtyperU   s         r.   Úget_reindexed_valueszJoinUnit.get_reindexed_values¯  s¾   € ð Ð 4§:¡:×#3Ñ#3×#8Ñ#8¸CÒ#?à—:‘:×$Ñ$Ð$à$ˆJà×$Ñ$ [Ô1à ŸJ™J×,Ñ,�	à¤§¡¨Ó 2Ò2ô "¤"§*¡*¨d¯j©j×.?Ñ.?Ó@�FØ—{’{ v¨d¡|Ð';Ø%)˜
ä$ [°$·*±*×2BÑ2BÀJÓOÐOà—:‘:×$Ñ$Ð$r0   N)rS   r%   ÚreturnÚNone)rÄ   Ústr)rK   r!   rÄ   Úbool)rÄ   rÇ   )rÀ   r!   rÄ   r   )
r¦   Ú
__module__Ú__qualname__r¡   r¨   r´   r   r®   r½   rÃ   rz   r0   r.   r�   r�   ^  s?   „ óó<ó6ð@ ò8ó ð8ð< òó ðô%r0   r�   c                óð  — t        | «      \  }}t        d„ | D «       «      }t        ||«      }| D �cg c]  }|j                  ||¬«      ‘Œ }}t        d„ |D «       «      rH|D �cg c]"  }t	        |j
                  «      r|n|ddd…f   ‘Œ$ }}t        |dd¬«      }	t        |	d«      }	nt        |d	¬
«      }	||k7  r3||	j
                  k(  r$t        j                  dt        t        «       ¬«       |	S c c}w c c}w )zB
    Concatenate values from several join units along axis=1.
    c              3  ób   K  — | ]'  }|j                   j                  j                  d k(  –— Œ) y­w©rª   Nr¼   ©r5   rb   s     r.   r9   z*_concatenate_join_units.<locals>.<genexpr>Ï  ó%   è ø€ ÒN¸4˜$Ÿ*™*×*Ñ*×/Ñ/°3Õ6ÑNùó   ‚-/)rÀ   rÁ   c              3  óF   K  — | ]  }t        |j                  «      –— Œ y ­wr3   )r   rK   )r5   Úts     r.   r9   z*_concatenate_join_units.<locals>.<genexpr>×  s   è ø€ Ò
;¨AÔ˜qŸw™w×'Ñ
;ùs   ‚!r   NTrA   rC   r(   r?   a  The behavior of DataFrame concatenation with empty or all-NA entries is deprecated. In a future version, this will no longer exclude empty or all-NA columns when determining the result dtypes. To retain the old behavior, exclude the relevant entries before the concat operation.)Ú
stacklevel)Ú_get_empty_dtypeÚanyÚ_dtype_to_na_valuerÃ   r   rK   r   r   ÚwarningsÚwarnÚFutureWarningr   )
ra   rE   rÀ   Úempty_dtype_futureÚhas_none_blocksrÁ   rd   Ú	to_concatrÑ   Úconcat_valuess
             r.   rX   rX   É  s  € ô '7°zÓ&BÑ#€KÐ#äÑNÀ:ÔNÓN€OÜ$ [°/ÓB€Kð öàð 	×Ñ¨KÀ[ÐÕQð€Ið ô
 Ñ
;°Ô
;Ô;ð ö	
ð ô # 1§7¡7Ô+ñ à�1’a�4‘ñð
ˆ	ð 
ô & i°aÈÔMˆÜ*¨=¸!Ó<‰ô & i°aÔ8ˆàÐ(Ò(Ø˜-×-Ñ-Ò-ä�M‰Mð(ô
 Ü+Ó-õð ÐùòEùò
s   ±C.Á#'C3c                ób  — t        | t        «      r| j                  S | j                  dv r| j	                  d«      S | j                  dv r| j	                  d«      S | j                  dk(  ry| j                  dv r|syt
        j                  S | j                  dk(  rt
        j                  S t        ‚)	z2
    Find the NA value to go with this dtype.
    ÚmMr   ÚfcÚNaNrg   NÚiuÚO)rG   r   r³   r¯   r¥   rL   ÚnanÚNotImplementedError)rK   rÚ   s     r.   rÕ   rÕ   ÷  s“   € ô �%œÔ(Ø�~‰~ÐØ	�‰�tÑ	Ø�z‰z˜%Ó Ð Ø	�‰�tÑ	Ø�z‰z˜%Ó Ð Ø	�‰�sÒ	àØ	�‰�tÑ	ÙàÜ�v‰vˆØ	�‰�sÒ	Ü�v‰vˆÜ
Ðr0   c                óÎ  — t        j                  | D �cg c]  }|j                  j                  ‘Œ c}«      r| d   j                  j                  }||fS t	        d„ | D «       «      }| D �cg c]%  }|j
                  rŒ|j                  j                  ‘Œ' }}t        |«      sG| D �cg c]<  }|j                  j                  j                  dk7  sŒ'|j                  j                  ‘Œ> }}t        |«      }|rt        |«      }|}t        |«      t        | «      k7  r°| D �cg c]$  }|j                  s|j                  j                  ‘Œ& }}t        |«      sG| D �cg c]<  }|j                  j                  j                  dk7  sŒ'|j                  j                  ‘Œ> }}t        |«      t        |«      k7  rt        |«      }|rt        |«      }||fS c c}w c c}w c c}w c c}w c c}w )zÂ
    Return dtype and N/A values to use when concatenating specified units.

    Returned N/A value may be None which means there was no casting involved.

    Returns
    -------
    dtype
    r   c              3  ób   K  — | ]'  }|j                   j                  j                  d k(  –— Œ) y­wrÌ   r¼   rÍ   s     r.   r9   z#_get_empty_dtype.<locals>.<genexpr>  rÎ   rÏ   rª   )r	   Údtypes_all_equalrS   rK   rÔ   r®   r;   r¯   r   r   r½   )	ra   rd   rÀ   rÚ   rb   ÚdtypesrK   Údtype_futureÚdtypes_futures	            r.   rÓ   rÓ     s²  € ô ×Ñ°jÖA°˜RŸX™XŸ^›^ÒAÔBØ  ‘m×)Ñ)×/Ñ/ˆØ˜KÐ'Ð'äÑNÀ:ÔNÓN€Oà+5ÖH 4¸T¿Z»Zˆd�j‰j×ÓÐH€FÐHÜˆvŒ;à)3ö
Ø!%°t·z±z×7GÑ7G×7LÑ7LÐPSÓ7SˆD�J‰J×Óð
ˆð 
ô ˜VÓ$€EÙÜ(¨Ó/ˆà€LÜ
ˆ6ƒ{”c˜*“oÒ%ð #ö
àØ×AÒAð �J‰J×Óð
ˆð 
ô
 �=Ô!à-7öØ%)¸4¿:¹:×;KÑ;K×;PÑ;PÐTWÓ;W�—
‘
× Ó ðˆMð ô ˆv‹;œ#˜mÓ,Ò,Ü+¨MÓ:ˆLÙÜ7¸ÓE�à�,ÐÐùòC Bùò Iùò
ùò
ùòs/   ”GÁ+GÁ=GÂ&(GÃGÄ)GÅ(G"ÆG"c                óÒ   ‡— | d   j                   Š‰j                  j                  dk(  ryt        ˆfd„| D «       «      xr( t        ˆfd„| D «       «      xr t        d„ | D «       «      S )zÏ
    Check if the join units consist of blocks of uniform type that can
    be concatenated using Block.concat_same_type instead of the generic
    _concatenate_join_units (which uses `concat_compat`).

    r   rª   Fc              3  ó^   •K  — | ]$  }t        |j                  «      t        ‰«      u –— Œ& y ­wr3   )r¥   rS   ©r5   rd   Úfirsts     €r.   r9   z)_is_uniform_join_units.<locals>.<genexpr>H  s"   øè ø€ Ò?¨bŒD�—‘‹Nœd 5›kÔ)Ñ?ùs   ƒ*-c              3  ó¬   •K  — | ]K  }|j                   j                  ‰j                  k(  xs" |j                   j                  j                  d v –— ŒM y­w)ÚiubNr¼   rí   s     €r.   r9   z)_is_uniform_join_units.<locals>.<genexpr>K  sN   øè ø€ ò 
ð
 ð	 �H‰H�N‰N˜eŸk™kÑ)ò ,ð �x‰x�~‰~×"Ñ" eÐ+ó,ñ
ùs   ƒAAc              3  óf   K  — | ])  }|j                    xs |j                  j                  –— Œ+ y ­wr3   )r®   rS   rV   )r5   rd   s     r.   r9   z)_is_uniform_join_units.<locals>.<genexpr>U  s(   è ø€ ÒG°b�—‘ˆLÒ1˜BŸH™H×1Ñ1Ó1ÑGùs   ‚/1)rS   rK   r¯   rO   )ra   rî   s    @r.   rT   rT   <  ss   ø€ ð �q‰M×Ñ€EØ‡{�{×Ñ˜3ÒØô 	Ó?°JÔ?Ó?ò 	Hô 	ó 
ð
 !ô
ó 	
ò	Hô 	ÑG¸JÔGÓGðr0   )r+   zlist[ArrayManager]r,   úlist[Index]r-   r    rÄ   r"   )r,   rò   r-   r    rE   rÇ   rÄ   r"   )r,   rò   r[   z0list[tuple[BlockManager, dict[int, np.ndarray]]]r\   rÇ   rÄ   úlist[BlockManager])r6   r   r8   r!   rÄ   rÇ   )r]   r#   r8   znp.dtyperÄ   r%   )r+   ró   rÄ   z+list[tuple[BlockPlacement, list[JoinUnit]]])
r6   r   r„   r&   r–   ÚintrŠ   rô   rÄ   r%   )ra   úlist[JoinUnit]rE   rÇ   rÄ   r   )rK   r!   rÚ   rÇ   )ra   zSequence[JoinUnit]rÄ   ztuple[DtypeObj, DtypeObj])ra   rõ   rÄ   rÇ   )GÚ
__future__r   Útypingr   r   rÖ   ÚnumpyrL   Úpandas._libsr   r   r   r   r|   r	   Úpandas._libs.missingr
   Úpandas.util._decoratorsr   Úpandas.util._exceptionsr   Úpandas.core.dtypes.castr   r   Úpandas.core.dtypes.commonr   r   r   Úpandas.core.dtypes.concatr   Úpandas.core.dtypes.dtypesr   r   Úpandas.core.dtypes.missingr   r   r   Úpandas.core.constructionr   Ú#pandas.core.internals.array_managerr   Úpandas.core.internals.blocksr   r   Úpandas.core.internals.managersr   r   Úcollections.abcr   Úpandas._typingr   r    r!   r"   r#   Úpandasr$   r%   r&   r/   rh   rH   r4   rQ   rR   rŽ   r�   rX   rÕ   rÓ   rT   rz   r0   r.   ú<module>r	     s~  ðÝ "÷ó ã ÷ó õ $Ý 2Ý 4÷÷ñ õ
 4÷÷ñ õ DÝ <÷÷ñ
 Ý(÷õ õ ÷ð5Ø
ð5Ø$/ð5Ø>Eð5àó5ð0i-Ø$ði-Ø3:ði-ØBFði-àói-ðXØ
ðàCðð ðð ó	óD
$ð,Øð,Ø.6ð,à
ó,ð^Ø
ðà0óð4Ø	ðØ)ðØ25ðØCFðà
ó÷8h%ñ h%óV+ó\ó.+ô\r0   