
    I j0;                       S SK Jr  S SKJrJr  S SKrS SKJrJ	r
JrJr  S SKJr  S SKJr  S SKJrJr  S SKJrJr  S S	KJr  S S
KJr  S SKJr  S SKJr  S SK J!r!J"r"  S SK#J$r$J%r%  \(       a"  S SK&J'r'J(r(  S SK)J*r*J+r+J,r,J-r-  S SK.J/r/  S SK J0r0J1r1          SS jr2        S S jr3S!S jr4      S"S jr5    S#S jr6          S$S jr7 " S S5      r8S%S jr9S&S jr:S'S jr;S(S jr<g))    )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                  ^ U=(       a    US:H  nUS:X  a   [        XU5      nUS   R                  XQ5      $ [        U 5      S:  a  U S   S   R                  S:  a  U S   S   R                  S   R
                  mT[        R                  [        R                  4;   aT  [        U4S jU  5       5      (       a:  [        U 5      S:  a+  [        S U 5       5      n[        XT5      n[        U4U5      $ [        XU5      n[        U5      S:X  a  US   nUR                  SS9n	Xl        U	$ / n
[        U5       GH  u  pUS   nUR                   n[#        U5      (       a  U Vs/ s H  oR                   R$                  PM     nnUR&                  (       d  [        R(                  " USS9nO:[+        UR
                  5      (       a  [-        USSS	9n[/        US
S9nO
[-        USS9n[1        U5      nUR$                  R
                  UR
                  :H  nO[3        XS9nSnU(       a  UR5                  UUS9nO
[7        UUS9nU
R9                  U5        GM     [        [        U
5      U5      $ s  snf )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  @   >#    U  H  u  p[        UT5      v   M     g 7fN)_is_homogeneous_mgr).0mgr_first_dtypes      m/root/GenerationalWealth/GenerationalWealth/venv/lib/python3.13/site-packages/pandas/core/internals/concat.py	<genexpr>'concatenate_managers.<locals>.<genexpr>b   s     Vfc'[99s      c              3  8   #    U  H  n[        U5      v   M     g 7fr$   )len)r&   xs     r*   r+   r,   g   s     3dc!ffds   FdeepaxisTr4   ea_compat_axis   )ndim)copy)	placement)_maybe_reindex_columns_na_proxyconcat_horizontalr/   nblocksblocksdtypenpfloat64float32alltuple_concat_homogeneous_fastpathr   r9   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_indexersrF   concat_axisr9   
needs_copymgrsshapenbr'   outr>   r:   
join_unitsunitblkjuvalsrJ   fastpathbr)   s                       @r*   concatenate_managersr^   =   s;   $ *+*J a.tJOAw((44
=A-"21"5"="="A#A&q)003992::rzz22
 VVVV&* 3d331-T#RE400*4
KD
4yA~1ghhEh"
F "4D!9	!}jj!*--.89jHHOOjD9## 15$SYY//&t!DI+F;&t!43F;Fzz''6<<7H,ZCFH))&I)FAVy9AaG ":J ft,,A :s   !I*c                    / nU Hb  u  pEUR                  5        H  u  pgUR                  X   UUSSSS9nM     U(       a  U(       d  UR                  SS9nUR                  U5        Md     U$ )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)r4   
only_slice
allow_dupsuse_na_proxyr1   )itemsreindex_indexerr9   rO   )rF   rP   rR   new_mgrsr'   indexersiindexers           r*   r;   r;      s}     H& #..*JA%%! & C + h(((%C '  O    c                    U R                   S:w  a  gU R                  S   nUR                  R                  (       a$  UR                  R                  R
                  S:X  d  gUR                  U:H  $ )z;
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)   rY   s      r*   r%   r%      sV     {{a
**Q-CLL&&3<<+@+@+E+E+J99##ri   c           	     (   [        S U  5       5      (       a  U  VVs/ s H(  u  p4UR                  S   R                  R                  PM*     nnn[        R
                  " U5      R                  n[        R                  " [        US   5      5      n[        Xg5      nU$ [        R                  " XS9nU[        R                  :X  a  [        R                  n	O[        R                  n	Sn
U  Hp  u  p;UR                  S   nX-   nSU;   a-  U	" UR                  S   R                  US   USS2X24   5        O!UR                  S   R                  USS2X24'   X-  n
Mr     [        R                  " [        US   5      5      n[        Xg5      nU$ s  snnf )z`
With single-Block managers with homogeneous dtypes (that can already hold nan),
we avoid [...]
c              3  4   #    U  H  u  pU(       + v   M     g 7fr$    )r&   r(   rf   s      r*   r+   /_concat_homogeneous_fastpath.<locals>.<genexpr>   s     
9=KAx<<=s   r   )r?   r-   N)rC   r>   rJ   Tr@   rL   libinternalsr!   slicer   emptyrA   libalgostake_2d_axis0_float64_float64take_2d_axis0_float32_float32rT   )rP   rT   r)   r'   r(   arrsarrbprU   	take_funcstartrf   mgr_lenends                 r*   rE   rE      s\    
9=
9995BC]63

1$$&&]CnnT"$$((uQx9#"	
((5
,Cbjj ::	::	E&))A,o=

1$$AuyL! !$

1 4 4C59 '  
	$	$U58_	5B	c	BIA Ds   /Fc           	   #  <  #    U S   R                   S   nU  Vs/ s H  o"R                  PM     nn[        R                  " U5      nU HJ  u  pV/ n[	        U 5       H/  u  pXX   n	[        X&XS9n
[        U
5      nUR                  U5        M1     Xg4v   ML     g s  snf 7f)Nr   )max_len)rT   blknosrt   get_concat_blkno_indexers	enumerate_get_block_for_concat_planJoinUnitrO   )rS   r   r'   blknos_listpairsr   r|   units_for_bpkblknorU   rX   s               r*   rG   rG      s      1gmmAG)-.#::K.22;?E
 oFAIE+CULBB<D% &   /s   BBA.Bc                  U R                   U   n[        U5      [        UR                  5      :X  aC  UR                  R                  (       a(  UR                  R                  R
                  S:X  a  UnU$ U R                  UR                     n[        R                  " Xc5      n[        U[        5      (       a  UR                  U5      nU$ UR                  U5      nU$ )Nr-   )r>   r/   rk   rl   rm   rn   blklocsrh   r	   maybe_indices_to_slice
isinstanceru   slice_block_columnstake_block_columns)r'   r|   r   r   rY   rU   ax0_blk_indexerslcs           r*   r   r     s     **U
C 2w#cll##""s||'<'<'A'AQ'F I ++bjj1((B c5!!((-B
 I '',B Iri   c                  P    \ rS rSrS	S jrS
S jrSS jr\SS j5       rSS jr	Sr
g)r   i-  c                    Xl         g r$   rH   )selfrH   s     r*   __init__JoinUnit.__init__.  s    
ri   c                N    [        U 5      R                   SU R                  < S3$ )N())type__name__rH   )r   s    r*   __repr__JoinUnit.__repr__1  s$    t*%%&a

~Q77ri   c                  ^ U R                   (       d  gU R                  nUR                  R                  S:X  a  gUR                  [        :X  a.  UR
                  n[        U4S jUR                  SS9 5       5      $ UR                  nU[        L a  UR                  T:w  a  gU[        L a  [        T5      (       a  g[        UT5      $ )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  <   >#    U  H  n[        UT5      v   M     g 7fr$   r   )r&   r0   r?   s     r*   r+   ,JoinUnit._is_valid_na_for.<locals>.<genexpr>B  s     X@W1,Q66@Ws   K)order)is_narH   r?   kindobjectrJ   rC   ravel
fill_valuer   r
   r   r   )r   r?   rY   rJ   na_values    `   r*   _is_valid_na_forJoinUnit._is_valid_na_for4  s    
 zzjj99>>S 99ZZFXSV@WXXX>>s?syyE1 r>1%88  %Xu55ri   c                R    U R                   nUR                  R                  S:X  a  gg)Nr   TFrH   r?   r   )r   rY   s     r*   r   JoinUnit.is_naT  s!    jj99>>S ri   c                   Uc:  U R                   R                  R                  S:w  a  U R                   R                  $ UnU R	                  U5      (       a  U R                   R                  nU[
        R                  " S5      :X  aG  [        [
        R                  U R                   R                  5      nUR                  (       a  US   c  S n[        XR                   R                  U5      $ U R                   R                  $ )Nr   r   )r   r   )rH   r?   r   rJ   r   r@   r   ndarraysizer   rT   )r   empty_dtypeupcasted_nar   	blk_dtyperJ   s         r*   get_reindexed_valuesJoinUnit.get_reindexed_values[  s     4::#3#3#8#8C#?::$$$$J$$[11 JJ,,	 22 ""**djj.?.?@F{{vd|';%)
$[**2B2BJOO::$$$ri   r   N)rH   r    returnNone)r   str)r?   r   r   bool)r   r   )r   r   r   r   )r   
__module____qualname____firstlineno__r   r   r   r   r   r   __static_attributes__rq   ri   r*   r   r   -  s+    86@  %ri   r   c                   [        U 5      n[        S U  5       5      n[        X#5      nU  Vs/ s H  nUR                  X$S9PM     nn[        S U 5       5      (       aN  U Vs/ s H(  n[	        UR
                  5      (       a  UOUSSS24   PM*     nn[        USSS9n[        US5      nU$ [        US	S
9nU$ s  snf s  snf )z:
Concatenate values from several join units along axis=1.
c              3  f   #    U  H'  oR                   R                  R                  S :H  v   M)     g7fr   Nr   r&   rX   s     r*   r+   *_concatenate_join_units.<locals>.<genexpr>{  #     N:4****//36:   /1)r   r   c              3  L   #    U  H  n[        UR                  5      v   M     g 7fr$   )r   r?   )r&   ts     r*   r+   r     s     
;Aqww''s   "$r   NTr5   r7   r-   r3   )_get_empty_dtypeany_dtype_to_na_valuer   r   r?   r   r   )	rW   r9   r   has_none_blocksr   rZ   	to_concatr   concat_valuess	            r*   rM   rM   u  s     #:.KN:NNO$[BK B 	KQ  
 
;
;;; 
 %QWW--A1QT7: 	 
 &iaM*=!<
  &ia8)
s   B9#/B>c                   [        U [        5      (       a  U R                  $ U R                  S;   a  U R	                  S5      $ U R                  S;   a  U R	                  S5      $ U R                  S:X  a  gU R                  S;   a  U(       d  g[
        R                  $ U R                  S:X  a  [
        R                  $ [        e)	z*
Find the NA value to go with this dtype.
mMr   fcNaNr]   NiuO)r   r   r   r   r   r@   nanNotImplementedError)r?   r   s     r*   r   r     s     %((~~	t	zz%  	t	zz%  	s		t	vv	s	vv
ri   c                   [         R                  " U  Vs/ s H  oR                  R                  PM     sn5      (       a  U S   R                  R                  nU$ [	        S U  5       5      nU  Vs/ s H+  oDR
                  (       a  M  UR                  R                  PM-     nn[        U5      nU(       a  [        U5      nU$ s  snf s  snf )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  f   #    U  H'  oR                   R                  R                  S :H  v   M)     g7fr   r   r   s     r*   r+   #_get_empty_dtype.<locals>.<genexpr>  r   r   )r	   dtypes_all_equalrH   r?   r   r   r   r   )rW   rZ   r   r   rX   dtypesr?   s          r*   r   r     s     jAjXX^^jABB m))//N:NNO+5H:4ZZdjj:FHV$E(/L B Is   C1C		C	c                   ^ U S   R                   mTR                  R                  S:X  a  g[        U4S jU  5       5      =(       a.    [        U4S jU  5       5      =(       a    [        S U  5       5      $ )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  d   >#    U  H%  n[        UR                  5      [        T5      L v   M'     g 7fr$   )r   rH   r&   rZ   firsts     r*   r+   )_is_uniform_join_units.<locals>.<genexpr>  s"     ?JbDNd5k)Js   -0c              3     >#    U  HR  nUR                   R                  TR                  :H  =(       d#    UR                   R                  R                  S ;   v   MT     g7f)iubNr   r   s     r*   r+   r     sO      

 !	 HHNNekk) , xx~~""e+, !s   AAc              3  |   #    U  H2  oR                   (       + =(       d    UR                  R                  v   M4     g 7fr$   )r   rH   rK   )r&   rZ   s     r*   r+   r     s&     GJbL1BHH111Js   :<)rH   r?   r   rC   )rW   r   s    @r*   rI   rI     ss     qME{{3 	?J?? 	H 	 

 !
 	
	H 	GJGGri   )rF   list[Index]rQ   r   r9   r   r   r   )rF   r   rP   z0list[tuple[BlockManager, dict[int, np.ndarray]]]rR   r   r   list[BlockManager])r'   r   r)   r   r   r   )rT   r   r)   znp.dtyper   r    )rS   r   r   z0Generator[tuple[BlockPlacement, list[JoinUnit]]])
r'   r   r|   r!   r   intr   r   r   r    )rW   list[JoinUnit]r9   r   r   r   )r?   r   r   r   )rW   zSequence[JoinUnit]r   r   )rW   r   r   r   )=
__future__r   typingr   r   numpyr@   pandas._libsr   r   rw   r   rt   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%   rE   rG   r   r   rM   r   r   rI   rq   ri   r*   <module>r      s@   "
   $ 2 4 4 < C
 
  ^-$^-3:^-BF^-^-B
C  	B
$,,.6,
,^
5,	)25CF
8E% E%P@.2ri   