Ë
    *�£jL;  ã                  ó¼  — d dl mZ d dlmZm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mZ d dlmZmZ d d	l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% er"d dl&m'Z'm(Z( d dl)m*Z*m+Z+m,Z,m-Z- d dl.m/Z/ d dl m0Z0m1Z1 	 	 	 	 	 	 	 	 dd„Z2	 	 	 	 	 	 	 	 d d„Z3d!d„Z4	 	 	 	 	 	 d"d„Z5	 	 	 	 d#d„Z6	 	 	 	 	 	 	 	 	 	 d$d„Z7 G d„ d«      Z8d%d„Z9d&d„Z:d'd„Z;d(d„Z<y))é    )Úannotations)ÚTYPE_CHECKINGÚcastN)ÚNaTÚalgosÚ	internalsÚlib)ÚNA)Úcache_readonly)Úensure_dtype_can_hold_naÚfind_common_type)Úis_1d_only_ea_dtypeÚneeds_i8_conversion)Úconcat_compat)ÚExtensionDtype©Úis_valid_na_for_dtype)Úensure_wrapped_if_datetimelike)Úensure_block_shapeÚnew_block_2d)ÚBlockManagerÚmake_na_array)Ú	GeneratorÚSequence)Ú	ArrayLikeÚAxisIntÚDtypeObjÚShape)ÚIndex)ÚBlockÚBlockPlacementc                óÆ  ‡— |xr |dk(  }|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 g }
t        |«      D �]  \  }}|d   }|j                   }t#        |«      r´|D �cg c]  }|j                   j$                  ‘Œ }}|j&                  st        j(                  |d¬«      }n>t+        |j
                  «      rt-        |dd¬	«      }t/        |d
¬«      }nt-        |d¬«      }t1        |«      }|j$                  j
                  |j
                  k(  }nt3        ||¬«      }d}|r|j5                  ||¬«      }nt7        ||¬«      }|
j9                  |«       �Œ 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      €ú>C:\FundamentalWorkbench\vendor\pandas\core\internals\concat.pyÚ	<genexpr>z'concatenate_managers.<locals>.<genexpr>b   s   øè ø€ ÐVÉ¹f¸cÀ1Ô'¨¨[×9Éùs   ƒé   c              3  ó2   K  — | ]  }t        |«      –— Œ y ­wr$   )Úlen)r&   Úxs     r*   r+   z'concatenate_managers.<locals>.<genexpr>g   s   è ø€ Ð3©d¨œc !Ÿf©dùs   ‚F©Údeep©ÚaxisT©r3   Úea_compat_axisé   )Úndim)Úcopy)Ú	placement)Ú_maybe_reindex_columns_na_proxyÚconcat_horizontalr.   ÚnblocksÚblocksÚdtypeÚnpÚfloat64Úfloat32ÚallÚtupleÚ_concat_homogeneous_fastpathr   r8   ÚaxesÚ_get_combined_planÚblockÚ_is_uniform_join_unitsÚvaluesÚis_extensionÚconcatenater   r   r   r   Ú_concatenate_join_unitsÚmake_block_same_classr   Úappend)Úmgrs_indexersrE   Úconcat_axisr8   Ú
needs_copyÚmgrsÚshapeÚnbr'   Úoutr=   r9   Ú
join_unitsÚunitÚblkÚjuÚvalsrI   ÚfastpathÚbr)   s                       @r*   Úconcatenate_managersr]   =   sB  ø€ ð$ Ò*˜+¨Ñ*€Jð �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Ó"ˆØˆŒØˆ
à€Fô "4°D×!9Ñˆ	�:Ø˜!‰}ˆØ�j‰jˆä! *Ô-Ù.8Ó9©j¨�B—H‘H—O“O¨jˆ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   ÅIc           
     óÐ   — g }|D ]^  \  }}|j                  «       D ]  \  }}|j                  | |   ||ddd¬«      }Œ! |r|s|j                  d¬«      }|j                  |«       Œ` |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.
    T)r3   Ú
only_sliceÚ
allow_dupsÚuse_na_proxyr0   )ÚitemsÚreindex_indexerr8   rN   )rE   rO   rQ   Únew_mgrsr'   ÚindexersÚiÚindexers           r*   r:   r:   ž   sƒ   € ð €Hã&‰ˆˆXð #Ÿ.™.Ö*‰JˆAˆwØ×%Ñ%Ø�Q‘ØØØØØ!ð &ó ‰Cð +ñ ™hØ—(‘( �(Ó%ˆCà�‰˜Õð 'ð  €Oó    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   )r<   r=   Úmgr_locsÚis_slice_likeÚas_sliceÚstepr>   )r'   r)   rX   s      r*   r%   r%   ¿   sV   € ð ‡{�{�aÒØØ
�*‰*�Q‰-€CØ�L‰L×&Ò&¨3¯<©<×+@Ñ+@×+EÑ+EÈÒ+JØà�9‰9˜Ñ#Ð#rh   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r$   © )r&   r(   re   s      r*   r+   z/_concat_homogeneous_fastpath.<locals>.<genexpr>Ö   s   è ø€ Ð
9©=™K˜A˜xˆxŒ<©=ùs   ‚r   )r>   r,   N)rB   r=   rI   ÚTr?   rK   Úlibinternalsr!   Úslicer   Úemptyr@   ÚlibalgosÚtake_2d_axis0_float64_float64Útake_2d_axis0_float32_float32rS   )rO   rS   r)   r'   r(   ÚarrsÚarrÚbprT   Ú	take_funcÚstartre   Úmgr_lenÚends                 r*   rD   rD   Ì   sk  € ô Ñ
9©=Ó
9Ô9á5BÔC±]©6¨3°�—
‘
˜1‘×$Ñ$×&Ó&°]ˆÑ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              #  ó@  K  — | d   j                   d   }| D �cg c]  }|j                  ‘Œ }}t        j                  |«      }|D ]P  \  }}g }t	        | «      D ]5  \  }}||   }	t        |||	|¬«      }
t        |
«      }|j                  |«       Œ7 ||f–— ŒR y c c}w ­w)Nr   )Úmax_len)rS   Úblknosrr   Úget_concat_blkno_indexersÚ	enumerateÚ_get_block_for_concat_planÚJoinUnitrN   )rR   r€   r'   Úblknos_listÚpairsr�   rz   Úunits_for_bpÚkÚblknorT   rW   s               r*   rF   rF   û   s«   è ø€ ð �1‰g�m‰m˜AÑ€Gá)-Ó.© #�3—:“:¨€KÐ.Ü×2Ñ2°;Ó?€EÛ‰
ˆ�ð ˆÜ –o‰FˆAˆsØ˜1‘IˆEä+¨C°°UÀGÔLˆBÜ˜B“<ˆDØ×Ñ Õ%ð &ð �,ÐÓñ ùò /ùs   ‚B™B¬A2B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,   )r=   r.   rj   rk   rl   rm   Úblklocsrg   r	   Úmaybe_indices_to_sliceÚ
isinstancers   Úslice_block_columnsÚtake_block_columns)r'   rz   rŠ   r€   rX   rT   Úax0_blk_indexerÚslcs           r*   r„   r„     s»   € ð �*‰*�UÑ
€Cô ˆ2ƒw”#�c—l‘lÓ#Ò#Ø�‰×"Ò" s§|¡|×'<Ñ'<×'AÑ'AÀQÒ'Fàˆð €Ið Ÿ+™+ b§j¡jÑ1ˆä×(Ñ(¨¸'ÓBˆô �cœ5Ô!Ø×(Ñ(¨Ó-ˆBð
 €Ið ×'Ñ'¨Ó,ˆBð €Irh   c                  ó>   — e Zd Zdd„Zdd„Zd	d„Zed
d„«       Zdd„Zy)r…   c                ó   — || _         y r$   )rG   )ÚselfrG   s     r*   Ú__init__zJoinUnit.__init__.  s	   € Øˆ�
rh   c                óL   — t        | «      j                  › d| j                  ›d�S )NÚ(Ú))ÚtypeÚ__name__rG   )r•   s    r*   Ú__repr__zJoinUnit.__repr__1  s$   € Ü�t“*×%Ñ%Ð& a¨¯
©
 ~°QÐ7Ð7rh   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r$   r   )r&   r/   r>   s     €r*   r+   z,JoinUnit._is_valid_na_for.<locals>.<genexpr>B  s   øè ø€ ÐXÑ@W¸1Ô,¨Q°×6Ñ@Wùs   ƒÚK)Úorder)Úis_narG   r>   ÚkindÚobjectrI   rB   ÚravelÚ
fill_valuer   r
   r   r   )r•   r>   rX   rI   Úna_values    `   r*   Ú_is_valid_na_forzJoinUnit._is_valid_na_for4  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Ð5rh   c                óP   — | j                   }|j                  j                  dk(  ryy)Nrž   TF©rG   r>   r£   )r•   rX   s     r*   r¢   zJoinUnit.is_naT  s!   € à�j‰jˆØ�9‰9�>‰>˜SÒ ØØrh   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   )rG   r>   r£   rI   r¨   r?   r   ÚndarrayÚsizer   rS   )r•   Úempty_dtypeÚupcasted_nar¦   Ú	blk_dtyperI   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à—:‘:×$Ñ$Ð$rh   N)rG   r    ÚreturnÚNone)r²   Ústr)r>   r   r²   Úbool)r²   rµ   )r®   r   r²   r   )	r›   Ú
__module__Ú__qualname__r–   rœ   r¨   r   r¢   r±   rp   rh   r*   r…   r…   -  s+   „ óó8ó6ð@ òó ðô%rh   r…   c                ó|  — t        | «      }t        d„ | D «       «      }t        ||«      }| D �cg c]  }|j                  ||¬«      ‘Œ }}t        d„ |D «       «      rI|D �cg c]"  }t	        |j
                  «      r|n|ddd…f   ‘Œ$ }}t        |dd¬«      }t        |d«      }|S t        |d	¬
«      }|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ª   ©r&   rW   s     r*   r+   z*_concatenate_join_units.<locals>.<genexpr>{  ó&   è ø€ ÐNÁ:¸4˜$Ÿ*™*×*Ñ*×/Ñ/°3Õ6Á:ùó   ‚-/)r®   r¯   c              3  óF   K  — | ]  }t        |j                  «      –— Œ y ­wr$   )r   r>   )r&   Úts     r*   r+   z*_concatenate_join_units.<locals>.<genexpr>ƒ  s   è ø€ Ð
;±¨AÔ˜qŸw™w×'±ùs   ‚!r   NTr4   r6   r,   r2   )Ú_get_empty_dtypeÚanyÚ_dtype_to_na_valuer±   r   r>   r   r   )	rV   r8   r®   Úhas_none_blocksr¯   rY   Ú	to_concatr¿   Úconcat_valuess	            r*   rL   rL   u  sè   € ô # :Ó.€KäÑNÁ:ÓNÓN€OÜ$ [°/ÓB€Kñ óáˆBð 	×Ñ¨KÀ[ÐÕQØð ð ô
 Ñ
;±Ó
;Ô;ñ ó
á�ô % Q§W¡WÔ-‰A°1°Qº°T±7Ñ:Øð 	ð 
ô & i°aÈÔMˆÜ*¨=¸!Ó<ˆð
 Ðô & i°aÔ8ˆàÐùò)ùò
s   ®B4Á 'B9c                ó�  — t        | t        «      r| j                  S | j                  dv r(| j	                  dt        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   r   ÚfcÚNaNr\   NÚiuÚO)	rŽ   r   r§   r£   rš   r?   Údatetime_dataÚnanÚNotImplementedError)r>   rÃ   s     r*   rÂ   rÂ   •  s¥   € ô �%œÔ(Ø�~‰~ÐØ	�‰�tÑ	Ø�z‰z˜%¤×!1Ñ!1°%Ó!8¸Ñ!;Ó<Ð<Ø	�‰�tÑ	Ø�z‰z˜%Ó Ð Ø	�‰�sÒ	àØ	�‰�tÑ	ÙàÜ�v‰vˆØ	�‰�sÒ	Ü�v‰vˆÜ
Ðrh   c                ór  — t        j                  | D �cg c]  }|j                  j                  ‘Œ c}«      r| d   j                  j                  }|S t	        d„ | D «       «      }| D �cg c]%  }|j
                  rŒ|j                  j                  ‘Œ' }}t        |«      }|rt        |«      }|S 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*   r+   z#_get_empty_dtype.<locals>.<genexpr>º  r¼   r½   )r	   Údtypes_all_equalrG   r>   rÁ   r¢   r   r   )rV   rY   r®   rÃ   rW   Údtypesr>   s          r*   rÀ   rÀ   ¬  s    € ô ×Ñ±jÓA±j°˜RŸX™XŸ^›^°jÑAÔBØ  ‘m×)Ñ)×/Ñ/ˆØÐäÑNÁ:ÓNÓN€Oá+5ÓH©: 4¸T¿Z»Zˆd�j‰j×Ó¨:€FÐHä˜VÓ$€EÙÜ(¨Ó/ˆà€Lùò Bùò Is   ”B/Á)B4Á;B4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r$   )rš   rG   ©r&   rY   Úfirsts     €r*   r+   z)_is_uniform_join_units.<locals>.<genexpr>Ñ  s#   øè ø€ Ð?±J¨bŒD�—‘‹Nœd 5›kÔ)±Jùs   ƒ*-c              3  ó¬   •K  — | ]K  }|j                   j                  ‰j                  k(  xs" |j                   j                  j                  d v –— ŒM y­w)ÚiubNrª   rÕ   s     €r*   r+   z)_is_uniform_join_units.<locals>.<genexpr>Ô  sP   øè ø€ ð 
ñ
 !�ð	 �H‰H�N‰N˜eŸk™kÑ)ò ,ð �x‰x�~‰~×"Ñ" eÐ+ó,ñ !ùs   ƒAAc              3  óf   K  — | ])  }|j                    xs |j                  j                  –— Œ+ y ­wr$   )r¢   rG   rJ   )r&   rY   s     r*   r+   z)_is_uniform_join_units.<locals>.<genexpr>Þ  s)   è ø€ ÐG¹J°b�—‘ˆLÒ1˜BŸH™H×1Ñ1Ó1¹Jùs   ‚/1)rG   r>   r£   rB   )rV   rÖ   s    @r*   rH   rH   Å  ss   ø€ ð �q‰M×Ñ€EØ‡{�{×Ñ˜3ÒØô 	Ó?±JÓ?Ó?ò 	Hô 	ó 
ñ
 !ó
ó 	
ò	Hô 	ÑG¹JÓGÓGðrh   )rE   úlist[Index]rP   r   r8   rµ   r²   r   )rE   rÚ   rO   z0list[tuple[BlockManager, dict[int, np.ndarray]]]rQ   rµ   r²   úlist[BlockManager])r'   r   r)   r   r²   rµ   )rS   r   r)   znp.dtyper²   r    )rR   rÛ   r²   z0Generator[tuple[BlockPlacement, list[JoinUnit]]])
r'   r   rz   r!   rŠ   Úintr€   rÜ   r²   r    )rV   úlist[JoinUnit]r8   rµ   r²   r   )r>   r   rÃ   rµ   )rV   zSequence[JoinUnit]r²   r   )rV   rÝ   r²   rµ   )=Ú
__future__r   Útypingr   r   Únumpyr?   Úpandas._libsr   r   ru   r   rr   r	   Úpandas._libs.missingr
   Úpandas.util._decoratorsr   Úpandas.core.dtypes.castr   r   Úpandas.core.dtypes.commonr   r   Úpandas.core.dtypes.concatr   Úpandas.core.dtypes.dtypesr   Úpandas.core.dtypes.missingr   Úpandas.core.constructionr   Úpandas.core.internals.blocksr   r   Úpandas.core.internals.managersr   r   Úcollections.abcr   r   Úpandas._typingr   r   r   r   Úpandasr   r    r!   r]   r:   r%   rD   rF   r„   r…   rL   rÂ   rÀ   rH   rp   rh   r*   Ú<module>rï      s@  ðÝ "÷ó
 ÷ó õ $Ý 2÷÷õ 4Ý 4Ý <å C÷÷ñ
 ÷÷
ó õ ÷ð^-Ø$ð^-Ø3:ð^-ØBFð^-àó^-ðBØ
ðàCðð ðð ó	óB
$ð,Øð,Ø.6ð,à
ó,ð^Ø
ðà5óð,Ø	ðØ)ðØ25ðØCFðà
ó÷8E%ñ E%óPó@ó.ô2rh   