
    `Vgd                    
   d dl mZ d dlZd dlZd dlmZmZmZ d dlZ	d dl
mZmZ d dlmZ d dlmZ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mZ d d
lm Z m!Z! d dl"m#Z#m$Z$ d dl%m&Z&m'Z'm(Z( d dl)m*c m+Z, d dl-m.Z.m/Z/ d dl0m1Z1 d dl2m3Z3 d dl4m5Z5m6Z6 d dl7m8Z8m9Z9 d dl:m;Z; erd dl<m=Z= d dl7m>Z> 	 	 	 	 	 	 	 	 d#dZ?d$dZ@	 	 	 	 	 	 	 	 d#dZA	 	 	 	 	 	 d%dZBd&dZC G d d      ZD	 	 	 	 	 	 	 	 d'dZEd(dZFd)dZGd*dZHd+d ZId,d!ZJd-d"ZKy).    )annotationsN)TYPE_CHECKINGSequencecast)NaT	internals)NA)	ArrayLikeDtypeObjManagerShape)cache_readonly)ensure_dtype_can_hold_nafind_common_type)is_1d_only_ea_dtypeis_dtype_equal	is_scalarneeds_i8_conversion)cast_to_common_typeconcat_compat)DatetimeTZDtypeExtensionDtype)is_valid_na_for_dtypeisnaisna_all)DatetimeArrayExtensionArray)SparseDtype)ensure_wrapped_if_datetimelike)ArrayManagerNullArrayProxy)ensure_block_shapenew_block_2d)BlockManager)Index)Blockc                   g }| D ]m  \  }}d}|j                         D ])  \  }}	|j                  ||   |	|dd      }|dk(  s%|	(d}+ |r|dk(  r|s|j                         }|j                  |       o |dk(  rjt	        t        |d   j                              D 
cg c]=  }
t        t	        t        |            D cg c]  }||   j                  |
    c}      ? }}
}nG|dk(  sJ t        t        j                  j                  |D cg c]  }|j                   c}            }t        ||d   |d   gd      }|S c c}w c c}}
w c c}w )z
    Concatenate array managers into one.

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

    Returns
    -------
    ArrayManager
    FT)axis
allow_dupsuse_na_proxy   r   )verify_integrity)itemsreindex_indexercopyappendrangelenarraysconcat_arrayslist	itertoolschainfrom_iterabler    )mgrs_indexersaxesconcat_axisr/   mgrsmgrindexersaxis1_made_copyaxindexerjir3   new_mgrs                 ]/var/www/html/hubwallet-dev/venv/lib/python3.12/site-packages/pandas/core/internals/concat.py_concatenate_array_managersrF   H   sa   $ D& X#>>+ 	'KB%%R't$ & C Qw7."&	' K1$_((*CC a
 3tAw~~./
 eCI6FG47>>!,GH
 
 aioo3344PCSZZ4PQR6DGT!W#5NGN H
 5Qs    E>E	EEEc                F   | D cg c]  }t        |t              r| }}|D ch c]  }|j                   }}t        |      dk(  }|r|d   j                  }nUt	        d |D              r t        j                  t        |      g       }n#t        |D cg c]  }|j                   c}      }| D cg c]/  }t        |t              r|j                  |      nt        ||      1 } }t        | d   t              rt        | d         }|j                  |       S t        j                  |       }t        |      dk(  rJ|D 	ch c]  }	|	j                  j                   }
}	t        |
      dk7  rd|
v r|j                  t               }|S c c}w c c}w c c}w c c}w c c}	w )a  
    Alternative for concat_compat but specialized for use in the ArrayManager.

    Differences: only deals with 1D arrays (no axis keyword), assumes
    ensure_wrapped_if_datetimelike and does not skip empty arrays to determine
    the dtype.
    In addition ensures that all NullArrayProxies get replaced with actual
    arrays.

    Parameters
    ----------
    to_concat : list of arrays

    Returns
    -------
    np.ndarray or ExtensionArray
    r+   r   c              3  p   K   | ].  }|j                   d v xr t        |t        j                         0 yw))rC   ubN)kind
isinstancenpdtype).0xs     rE   	<genexpr>z concat_arrays.<locals>.<genexpr>   s,     SqQVV&B:a+BBSs   46rJ   )rL   r!   rN   r2   allrM   r   r5   to_arrayr   r   type_concat_same_typeconcatenaterK   astypeobject)	to_concatrP   to_concat_no_proxydtypessingle_dtypetarget_dtypearrclsresultobjkindss              rE   r4   r4   x   s   & &/TjN6S!TT12!agg2F2v;!#L)!,22	SFS	S**4<<'>P(Qs(QR 	  c>* 	\" l3	4I  )A,/9Q< $$Y//^^I&F 6{a+=>C>>u:?e|v.ME U2 )R" ?s!   F
F
FF34FFc                   t        | d   d   t              rt        | |||      S t        ||       } | D cg c]  \  }}t	        ||       }}}t        ||      }g }|D ]E  \  }	}
|
d   }|j                  }t        |
      dk(  rA|
d   j                  s2|j                  }|r|j                         }n|j                         }d}nt        |
      r|
D cg c]  }|j                  j                   }}|j                  st        j                  |d      }nt!        |d      }t#        |d      }t%        |      }|j                  j&                  |j&                  k(  }nt)        |
||      }d}|r|j+                  ||		      }nt-        ||		      }|j/                  |       H t1        t3        |      |      S c c}}w 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   r+   Tr(      )ndim)r/   F)	placement)rL   r    rF   _maybe_reindex_columns_na_proxy_get_mgr_concatenation_plan_combine_concat_plansblockr2   r>   valuesr/   view_is_uniform_join_unitsis_extensionrM   rV   r   r"   r   rN   _concatenate_join_unitsmake_block_same_classr#   r0   r$   tuple)r9   r:   r;   r/   r=   r>   concat_plansconcat_planblocksrg   
join_unitsunitblkrl   fastpathjuvalsrJ   s                     rE   concatenate_managersr|      s   $ -"1%|4*=$TRR3D-HM IV7DsH#C2L  (kBKF!, $	:!}jjz?a
1(>(>ZZFH#J/.89BHHOO9D9## 15 't!4+F;3F;Fzz''6<<7H,Z4PFH))&I)FAVy9AaI$L ft,,Y$ :s   F=Gc           
         g }|D ]a  \  }}d|v rE|j                  | d   |d   ddddd      }|j                         }|d= |j                  ||f       O|j                  ||f       c |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.
    r   FT)r(   r/   
only_slicer)   r*   )r.   r/   r0   )r:   r9   new_mgrs_indexersr=   r>   rD   new_indexerss          rE   rh   rh      s     & 6X=))Q! * G $==?LQ$$g|%<=$$c8_5!6$     c                   t        | j                        }|j                         D ]  \  }}t        |      ||<    t	        |      }d|vsJ | j
                  r)| j                  d   }|j                  t        |||      fgS | j                  }| j                  }g }	t        j                  |d      D ]-  \  }
}|j                  sJ |
dk7  sJ |j                         }t        |      }t        |      |d<   t	        |      }| j                  |
   }||j                     }t        |      t        |j                        k(  xrc |j                  j                  xr# |j                  j                   j"                  dk(  xs& t%        j&                  |      dk(  j)                         }|r|j+                  dd       n||d<   t        |||      }|	j-                  ||f       0 |	S )z
    Construct concatenation plan for given block manager and indexers.

    Parameters
    ----------
    mgr : BlockManager
    indexers : dict of {axis: indexer}

    Returns
    -------
    plan : list of (BlockPlacement, JoinUnit) tuples

    r   F)groupr+   N)r5   shaper-   r2   rr   is_single_blockru   mgr_locsJoinUnitblknosblklocslibinternalsget_blkno_placementsis_slice_liker/   rA   as_slicesteprM   diffrR   popr0   )r=   r>   mgr_shape_listr@   rA   	mgr_shaperx   r   r   planblkno
placementsjoin_unit_indexers
shape_listr   ax0_blk_indexerunit_no_ax0_reindexingrw   s                     rE   ri   ri     s     #))_N~~' *G \r*n%IH
jjmxYABCCZZFkkGD)>>vUS '(z''''{{%]]_)_
J
1j!jj!*"4"45 
Os3<<00  ++O0E0E0J0Ja0O 6
 )Q.335 	$ """1d+$3q!U$67Z&'O'(R Kr   c                  d    e Zd Zd	d
dZddZedd       Zedd       ZddZedd       Z	ddZ
y)r   Nc                6    |i }|| _         || _        || _        y Nrk   r>   r   )selfrk   r   r>   s       rE   __init__zJoinUnit.__init__b  s$     H
 
r   c                x    t        |       j                   dt        | j                         d| j                   dS )N(z, ))rT   __name__reprrk   r>   )r   s    rE   __repr__zJoinUnit.__repr__k  s4    t*%%&aTZZ(8'9DMM?!LLr   c                l    | j                   j                         D ]  }|dk(  j                         s y y)Nr   TF)r>   rl   any)r   rA   s     rE   needs_fillingzJoinUnit.needs_fillingn  s6    }}++- 	G2""$	
 r   c                    | j                   }|j                  j                  j                  dk(  rt	        d      | j
                  s|j                  S t        |j                        S )NVzBlock is None, no dtype)rk   rl   rN   rK   AssertionErrorr   r   )r   rx   s     rE   rN   zJoinUnit.dtypew  sQ    jj::  C' !:;;!!99'		22r   c                   | j                   sy| j                  j                  j                  dk(  ry| j                  t        k(  r:| j                  j
                  }t        fd|j                  d      D              S | j                  j                  }|t        u rt        | j                        s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.
        Fr   Tc              3  6   K   | ]  }t        |        y wr   )r   )rO   rP   rN   s     rE   rQ   z,JoinUnit._is_valid_na_for.<locals>.<genexpr>  s     X1,Q6Xs   Korder)is_nark   rN   rK   rX   rl   rR   ravel
fill_valuer   r   r	   r   r   )r   rN   rl   na_values    `  rE   _is_valid_na_forzJoinUnit._is_valid_na_for  s    
 zz::  C'::ZZ&&FXSV@WXXX::((s?>$**e#D r>1%8  %Xu55r   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r   )r   )rO   rows     rE   rQ   z!JoinUnit.is_na.<locals>.<genexpr>  s     7x}7s   )rk   rN   rK   _can_hold_narl   sizerL   r   rf   r   r   r   rR   )r   rx   rl   vals       rE   r   zJoinUnit.is_na  s    jj99>>S ;;!fllK0;;!)CS>cF##)A,CS>c7777r   c                p   |U| j                   j                  j                  dk7  r2| j                   j                  }| j                   j	                         }n|}| j                  |      r| j                   j                  }|t        j                  d      k(  r8| j                   j                  j                  d      }t        |      r|d   d }t        |t              r7t        j                  | j                  |j                        }t        ||      S t!        |      rt#        ||      r| j$                  rnt'        t(        |      }|j+                         }|j-                  g |      }| j                  \  }	}
|	dk(  sJ |	       dt        j.                  |
ft        j0                        z  }|j3                  |d	|
      S t        |t(              r4|j+                         }|j5                  | j                  |      }||d d  |S t        j6                  | j                  |      }|j9                  |       |S | j$                  s,| j                   j:                  s| j                   j                  S | j                   j<                  r9| j                   j?                  t        j                  d            j                  }n| j                   j                  }| j$                  s|jA                         }|S | j$                  jC                         D ]  \  }}tE        jF                  |||      } |S )Nr   rX   r   r   r   )rN   r+   r   T)
allow_fillr   )r   rN   rd   )$rk   rN   rK   r   
get_valuesr   rM   rl   r   r2   rL   r   fullr   valuer   r   r   r>   r   r   construct_array_type_from_sequenceonesintptake_emptyemptyfill_can_consolidateis_boolrW   rm   r-   algostake_nd)r   empty_dtypeupcasted_nar   rl   	blk_dtypei8valuesr_   missing_arrncolsnrows	empty_arrr@   rA   s                 rE   get_reindexed_valueszJoinUnit.get_reindexed_values  s    4::#3#3#8#8C#?..JZZ**,F$J$$[1 JJ,,	 22 "ZZ..4434?F6{vay'8%)
k?;!wwtzz:3C3CDH(EE(5%i=$-- &*>;&G)>>@&)&8&8;&8&O'+zzu$z050z$&%)I$I	*//%$:  0     ^< &::<C"%**4::[*"QK%/KN&& #%((4::["IK$$Z0&&MMDJJ,G,Gzz(((zz!! **288H+=>EE **}} [[]F   $}}224 AGvwR@A r   r   )rk   r&   r   r   )returnstrr   bool)r   r   )rN   r   r   r   )r   r   r   r
   )r   
__module____qualname__r   r   r   r   rN   r   r   r    r   rE   r   r   a  sT    M   3 36< 8 88Pr   r   c                v   |dk(  rt        |       dkD  rt        d      t        |       }t        d | D              }t	        ||      }| D cg c]  }|j                  ||       }}t        |      dk(  rQ|d   }|rHt        |t        j                        r|j                  "|j                         }|S |j                         }|S t        d |D              rI|D 	cg c]"  }	t        |	j                        r|	n|	dddf   $ }}	t        |dd	      }t        |d
      }|S t        ||      }|S c c}w c c}	w )zI
    Concatenate values from several join units along selected axis.
    r   r+   z$Concatenating join units along axis0c              3  b   K   | ]'  }|j                   j                  j                  d k(   ) ywr   Nrk   rN   rK   rO   rw   s     rE   rQ   z*_concatenate_join_units.<locals>.<genexpr>  %     N4$****//36N   -/)r   r   Nc              3  F   K   | ]  }t        |j                          y wr   )r   rN   )rO   ts     rE   rQ   z*_concatenate_join_units.<locals>.<genexpr>/  s     =a )=s   !T)r(   ea_compat_axisre   rd   )r2   r   _get_empty_dtyper   _dtype_to_na_valuer   rL   rM   ndarraybaser/   r   rN   r   r"   )
rv   r;   r/   r   has_none_blocksr   rz   rY   concat_valuesr   s
             rE   rp   rp     sn    aC
Oa/CDD":.KN:NNO$[/BK  	K[QI 
 9~!!-4 !%%1$1$6$6$8M0 - !. 2 2 4, ) 
=9=	= 	
  #177+ 1a4
	 
 &iaM*=!<
  &ikBK2
s   D1'D6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.
    )mMr   )fcNaNrJ   N)rC   rI   O)rL   r   r   rK   rT   rM   nanNotImplementedError)rN   r   s     rE   r   r   F  s     %(~~	z	!zz%  	z	!zz%  	s		z	!vv	s	vv
r   c                   t        |       dk(  r| d   j                  }|j                  S t        |       r| d   j                  j                  }|S t	        d | D              }| D cg c]  }|j
                  r|j                   }}t        |      s=| D cg c]2  }|j                  j                  j                  dk7  s'|j                  4 }}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+   r   c              3  b   K   | ]'  }|j                   j                  j                  d k(   ) ywr   r   r   s     rE   rQ   z#_get_empty_dtype.<locals>.<genexpr>o  r   r   r   )	r2   rk   rN   _is_uniform_reindexr   r   rK   r   r   )rv   rx   r   r   rw   r[   rN   s          rE   r   r   ]  s     :!m!!yy:& m))//N:NNO%/BTtzzdjjBFBv;)3Ttzz7G7G7L7LPS7S$**TTV$E(/L CTs   &C*8C*(C/ C/c                   | d   j                   j                  j                  dk(  ryt        fd| D              xrL t        fd| D              xr6 t        d | D              xr" t        d | D              xr t	        |       dkD  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   )rT   rk   rO   rz   firsts     rE   rQ   z)_is_uniform_join_units.<locals>.<genexpr>  s"     ?bDNd5k)?s   *-c              3     K   | ]R  }t        |j                  j                  j                        xs" |j                  j                  j                  d v  T yw))rJ   rC   rI   N)r   rk   rN   rK   r   s     rE   rQ   z)_is_uniform_join_units.<locals>.<genexpr>  sP      

 	 288>>5;;7 6 xx~~""o56
s   AAc              3  f   K   | ])  }|j                    xs |j                  j                   + y wr   )r   rk   ro   rO   rz   s     rE   rQ   z)_is_uniform_join_units.<locals>.<genexpr>  s(     GbL1BHH111Gs   /1c              3  6   K   | ]  }|j                      y wr   )r>   r   s     rE   rQ   z)_is_uniform_join_units.<locals>.<genexpr>  s     1O1s   r+   )rk   rN   rK   rR   r2   )rv   r   s    @rE   rn   rn   {  s     qME{{3 	?J?? 	 	 

 !
 	
	 	GJGG	  	1j11!	& 	J!+r   c                    t        d | D              xr: t        | D ch c]"  }|j                  j                  j                  $ c}      dk(  S c c}w )Nc              3  H   K   | ]  }|j                   j                    y wr   )rk   ro   r   s     rE   rQ   z&_is_uniform_reindex.<locals>.<genexpr>  s     7bBHH!!7s    "r+   )rR   r2   rk   rN   name)rv   rz   s     rE   r   r     sH     	7J77 	Az:$$:;q@ ;s   'Ac                .   d| j                   vrj| j                   }| j                  d}n| j                  j                  t        |d            }| j                  j                  t        |            | _        nU| j                  }t	        j                  | j                         }|d   |d |d<   | j                   d   d| | j                   d<   | j
                  d   |z
  f| j
                  dd z   }|f| j
                  dd z   | _        t        |||      S )z
    Reduce join_unit's shape along item axis to length.

    Extra items that didn't fit are returned as a separate block.
    r   Nr+   r   )r>   rk   getitem_blockslicer/   r   r   )	join_unitlengthextra_indexersextra_blockextra_shapes        rE   _trim_join_unitr    s    		""""++??"K#//77fd8KLK'oo;;E&MJIOoo9#5#56*1-fg6q ) 2 21 5gv >	1??1%.09??123FFKi)//!""55IO+kRRr   c              #  L  K   t        |       dk(  r| d   D ]  }|d   |d   gf  y|dk(  rJd}| D ]B  }d}|D ]  \  }}|j                  |      |gf |} |*||j                  j                  z  }D ydgfd}t	        t        t        |             } t	        t        ||             }	d   t        |	      k7  rd   dkD  rt        d      t        |	 \  }
}t	        t        t         |
            }t        |      t        |      }}||k(  r|
d   |f t        ||       |	dd ned}dgt        |	      z  }t        |	      D ]@  \  }\  }}|||<   t        |      |kD  r||d t        ||      f|	|<   1|} || |         |	|<   B ||f d   t        |	      k7  ryyw)z`
    Combine multiple concatenation plans into one.

    existing_plan is updated in-place.
    r+   r   Nc                >    t        | d       }|dxx   dz  cc<   |S )Nr   r+   )next)seqretval	num_endeds     rE   _next_or_nonez,_combine_concat_plans.<locals>._next_or_none  s&    #t_F~!!Mr   zPlan shapes are not aligned)r2   addr   stopr5   mapiter
ValueErrorzipminmax	enumerater  )plansr;   poffsetr   last_plcplcrw   r  
next_itemsr   unitslengthsmin_lenmax_lenyielded_placementyielded_unitsrC   r  s                     @rE   rj   rj     s     5zQq 	AA$1,	 
	 	1DH! 	Tggfov-- #(++000	1 C		 Su%&#mU34
lc*o-|a !>?? #Z 0J3sJ/0G"7|S\WG'! mU** #M5 9
1$(!!%Z 8&/
&; @NA{T'+M!$3x') *-WXg8V(W
1,/)(5eAh(?
1@ (663 lc*o-s   AF$EF$"F$)r:   list[Index]r;   intr/   r   r   r   )rY   r5   r   r
   )r:   r*  r9   0list[tuple[BlockManager, dict[int, np.ndarray]]]r   r,  )r=   r$   r>   zdict[int, np.ndarray])rv   list[JoinUnit]r;   r+  r/   r   r   r
   )rN   r   r   r   )rv   zSequence[JoinUnit]r   r   )rv   r-  r   r   r   )r  r   r	  r+  r   r   )r;   r+  )L
__future__r   r/   r6   typingr   r   r   numpyrM   pandas._libsr   r   r   pandas._libs.missingr	   pandas._typingr
   r   r   r   pandas.util._decoratorsr   pandas.core.dtypes.castr   r   pandas.core.dtypes.commonr   r   r   r   pandas.core.dtypes.concatr   r   pandas.core.dtypes.dtypesr   r   pandas.core.dtypes.missingr   r   r   pandas.core.algorithmscore
algorithmsr   pandas.core.arraysr   r   pandas.core.arrays.sparser   pandas.core.constructionr   #pandas.core.internals.array_managerr    r!   pandas.core.internals.blocksr"   r#   pandas.core.internals.managersr$   pandasr%   r&   rF   r4   r|   rh   ri   r   rp   r   r   rn   r   r  rj   r   r   rE   <module>rD     sU   "     $  3   ' & 2 C 82-$-36->B--`5pC-$C-36C->BC-C-L
&V5@HVk k\44-048<44n.< FS6<7r   