
    I j9W                   P   S SK Jr  S SKJrJrJr  S SKrS SKJrJ	r	J
r
JrJrJrJr  S SKrS SKrS SKJr  S SKJrJrJr  S SKJrJr  S SK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)J*r*J+r+  S SK,J-r-J.r.J/r/  S SK0J1r1J2r2J3r3J4r4  S SK5J6r6J7r7  S SK8J9r9J:r:  S SK;J<s  J=r  S SK>J?r?  S SK@JArA  S SKBJCrC  S SKDJErEJFrF  S SKGJHrH  S SKIJJrJJKrKJLrL  S SKMJNrNJOrOJPrPJQrQJRrRJSrSJTrTJUrU  S SKVJWrWJXrX  \(       a  S SKJYrY  S SKZJ[r[J\r\J]r]J^r^J_r_J`r`  S SKaJbrb  S0S jrcS1S jrd " S S \C5      re " S! S"\R                  \e5      rf " S# S$\e5      rg  S2         S3S% jjrh          S4S& jri S5         S6S' jjrjS7S( jrkS8S) jrlS9S* jrmS:S+ jrnS;S, jro        S<S- jrp      S=S. jrqS>S/ jrrg)?    )annotations)CallableHashableSequenceN)TYPE_CHECKINGAnyLiteralNoReturnSelfcastfinal)
get_option)algos	internalslib)BlockPlacementBlockValuesRefs)	Timestamp)AbstractMethodErrorPerformanceWarning)cache_readonly)find_stack_level)validate_bool_kwarg)find_common_typeinfer_dtype_from_scalarnp_can_hold_element)ensure_platform_intis_1d_only_ea_dtypeis_list_like)CategoricalDtypeDatetimeTZDtypeExtensionDtypeSparseDtype)ABCDataFrame	ABCSeries)array_equalsisna)DatetimeArray)NDArrayBackedExtensionArray)PandasObject)ensure_wrapped_if_datetimelikeextract_array)maybe_convert_indices)Indexdefault_indexensure_index)Block
NumpyBlockensure_block_shapeextend_blocksget_block_typemaybe_coerce_values	new_blocknew_block_2d)blockwise_alloperate_blockwise)	Generator)	ArrayLikeAxisIntDtypeObjQuantileInterpolationShapenpt)ExtensionArrayc                :    [        U 5      (       d  g[        U 5      $ )z
Find the common dtype for `blocks`.

Parameters
----------
blocks : List[DtypeObj]

Returns
-------
dtype : np.dtype, ExtensionDtype, or None
    None is returned when `blocks` is empty.
N)lenr   )dtypess    o/root/GenerationalWealth/GenerationalWealth/venv/lib/python3.13/site-packages/pandas/core/internals/managers.pyinterleaved_dtyperG   o   s     v;;F##    c                B   [        U [        5      (       a(  U R                  n [        [        R
                  U 5      n U $ [        U [        5      (       a  [        R
                  " S5      n U $ U [        R
                  " [        5      :X  a  [        R
                  " S5      n U $ )Nobject)
isinstancer#   subtyper   npdtyper"   strrN   s    rF   ensure_np_dtyperQ      sz     %%%RXXu%
 L	 
E>	*	*" L 
"((3-	"LrH   c                  V   \ rS rSr% SrSrS\S'   S\S'   S\S'   S	\S
'   \SLS j5       rS\S'   S\S'   SMSNS jjr	\
SLS j5       r\SOS j5       r\SPS j5       r\SQS j5       r\SQS j5       rSRSSS jjrSTS jrSUS jr\
SUS j5       r\STS j5       r\SVS j5       rSWS jrSXS jrSYS jrSZS jrS[S  jr\S\S! j5       rS]S" jrS^S# jr\
S_S$ j5       r SR   S`S% jjr \
SSS& j5       r!\
SaS' j5       r"\
SbS( j5       r#\
SMSbS) jj5       r$\
ScS* j5       r%\
SdS+ j5       r&\
SSS, j5       r'\
  Se         SfS. jj5       r(SdS/ jr)SdS0 jr*SgS1 jr+SSS2 jr,ShS3 jr-SiSjS4 jjr.SSS5 jr/S6 r0S7SS8.   SkS9 jjr1\STS: j5       r2\STS; j5       r3SlS< jr4SSS= jr5SSS> jr6SRSmS? jjr7\SLS@ j5       r8SnSA jr9STSB jr:SSSC jr;SoSD jr<\
  Sp       SqSE jj5       r=   SrS-SF.             SsSG jjjr>\?R                  S-4S-S-SH.         StSI jjjrA Sp     SuSJ jjrB  Sv       SwSK jjrCSrDg)xBaseBlockManager   a  
Core internal data structure to implement DataFrame, Series, etc.

Manage a bunch of labeled 2D mixed-type ndarrays. Essentially it's a
lightweight blocked set of labeled data to be manipulated by the DataFrame
public API class

Attributes
----------
shape
ndim
axes
values
items

Methods
-------
set_axis(axis, new_labels)
copy(deep=True)

get_dtypes

apply(func, axes, block_filter_fn)

get_bool_data
get_numeric_data

get_slice(slice_like, axis)
get(label)
iget(loc)

take(indexer, axis)
reindex_axis(new_labels, axis)
reindex_indexer(new_labels, indexer, axis)

delete(label)
insert(loc, label, value)
set(label, value)

Parameters
----------
blocks: Sequence of Block
axes: Sequence of Index
verify_integrity: bool, default True

Notes
-----
This is *not* a public API class
 npt.NDArray[np.intp]_blknos_blklocstuple[Block, ...]blockslist[Index]axesc                    [         eNNotImplementedErrorselfs    rF   ndimBaseBlockManager.ndim       !!rH   bool_known_consolidated_is_consolidatedc                    [         er^   r_   )rb   rZ   r\   verify_integritys       rF   __init__BaseBlockManager.__init__   s    !!rH   c                ,    [        U R                  5      $ r^   )rD   itemsra   s    rF   __len__BaseBlockManager.__len__   s    4::rH   c                :    [        S U R                   5       5      $ )Nc              3  8   #    U  H  n[        U5      v   M     g 7fr^   rD   .0axs     rF   	<genexpr>)BaseBlockManager.shape.<locals>.<genexpr>   s     1ySWWy   )tupler\   ra   s    rF   shapeBaseBlockManager.shape   s    1tyy111rH   c                    [         er^   r_   clsrZ   r\   s      rF   from_blocksBaseBlockManager.from_blocks   re   rH   c                T    U R                   c  U R                  5         U R                   $ )z
Suppose we want to find the array corresponding to our i'th column.

blknos[i] identifies the block from self.blocks that contains this column.

blklocs[i] identifies the column of interest within
self.blocks[self.blknos[i]]
)rW   _rebuild_blknos_and_blklocsra   s    rF   blknosBaseBlockManager.blknos   s$     <<,,.||rH   c                T    U R                   c  U R                  5         U R                   $ )z
See blknos.__doc__
)rX   r   ra   s    rF   blklocsBaseBlockManager.blklocs   s$    
 == ,,.}}rH   Nc                P   Uc  [        S5      /U R                  SS QnU R                  S:X  a]  [        U [        5      (       d   eU R
                  S   nUR                  SS n[        [        SS5      5      nUR                  X4S9nU/nO/ n[        U 5      R                  Xa5      $ )z9return an empty BlockManager with the items axis of len 0Nr      	placement)r/   r\   rc   rK   SingleBlockManagerrZ   valuesr   slicemake_block_same_classtyper   )rb   r\   blkarrbpnbrZ   s          rF   
make_emptyBaseBlockManager.make_empty   s    <!!$5tyy}5D 99>d$67777++a.C**Ra.Ca,B**3*=BTFFDz%%f33rH   c                    gNTrU   ra   s    rF   __bool__BaseBlockManager.__bool__      rH   c                B    U R                  X5        X R                  U'   g r^   )_validate_set_axisr\   )rb   axis
new_labelss      rF   set_axisBaseBlockManager.set_axis  s    1$		$rH   c                    [        U R                  U   5      n[        U5      nUS:X  a  [        U R                  5      S:X  a  g XC:w  a  [        SU SU S35      eg )Nr   r   z#Length mismatch: Expected axis has z elements, new values have z	 elements)rD   r\   rn   
ValueError)rb   r   r   old_lennew_lens        rF   r   #BaseBlockManager._validate_set_axis  sj     diio&j/19TZZA- 5gY ?&iy2   rH   c                2    [        U R                  5      S:H  $ Nr   rD   rZ   ra   s    rF   is_single_block BaseBlockManager.is_single_block%  s     4;;1$$rH   c                     U R                   S   $ Nr   r\   ra   s    rF   rn   BaseBlockManager.items*      yy|rH   c                B    U R                   U   nU R                  U5      $ )
Check for column `i` if it has references.
(whether it references another array or is itself being referenced)
Returns True if the column has no references.
)r   _has_no_reference_block)rb   iblknos      rF   _has_no_reference"BaseBlockManager._has_no_reference.  s"     A++E22rH   c                Z    U R                   U   R                  R                  5       (       + $ )z
Check for block `i` if it has references.
(whether it references another array or is itself being referenced)
Returns True if the block has no references.
rZ   refshas_reference)rb   r   s     rF   r   (BaseBlockManager._has_no_reference_block7  s%     ;;u%**88:::rH   c                   [        U R                  5      [        UR                  5      :w  a  g[        U R                  5       H>  u  p#UR                  U   R                  Ul        UR                  R	                  U5        M@     g)zn
Adds the references from one manager to another. We assume that both
managers have the same block structure.
N)rD   rZ   	enumerater   add_reference)rb   mgrr   r   s       rF   add_referencesBaseBlockManager.add_references?  s\    
 t{{s3::.,FAzz!}))CHHH""3' -rH   c                   ^ U R                   U   m[        U4S jUR                   U   R                  R                   5       5      $ )z^
Checks if two blocks from two different block managers reference the
same underlying values.
c              3  6   >#    U  H  nTU" 5       L v   M     g 7fr^   rU   )ru   refr   s     rF   rw   :BaseBlockManager.references_same_values.<locals>.<genexpr>Q  s     T+SC3#%<+Ss   )rZ   anyr   referenced_blocks)rb   r   r   r   s      @rF   references_same_values'BaseBlockManager.references_same_valuesK  s9    
 kk% T3::e+<+A+A+S+STTTrH   c                    [         R                  " U R                   Vs/ s H  oR                  PM     sn[        S9nUR                  U R                  5      $ s  snf NrP   )rM   arrayrZ   rN   rJ   taker   rb   r   rE   s      rF   
get_dtypesBaseBlockManager.get_dtypesS  s?    <99<FK{{4;;'' =s   Ac                X    U R                    Vs/ s H  oR                  PM     sn$ s  snf )a}  
Quick access to the backing arrays of the Blocks.

Only for compatibility with ArrayManager for testing convenience.
Not to be used in actual code, and return value is not the same as the
ArrayManager method (list of 1D arrays vs iterator of 2D ndarrays / 1D EAs).

Warning! The returned arrays don't handle Copy-on-Write, so this should
be used with caution (only in read-mode).
rZ   r   )rb   r   s     rF   arraysBaseBlockManager.arraysW  s"     '+kk2ks

k222s   'c                    [        U 5      R                  n[        U R                  5       H   u  p#US:X  a
  USU 3-  nM  USU SU 3-  nM"     U R                   H  nUSU 3-  nM     U$ )Nr   z
Items: z
Axis z: 
)r   __name__r   r\   rZ   )rb   outputr   rv   blocks        rF   __repr__BaseBlockManager.__repr__g  sz    d$$tyy)EAAvIbT**GA3b--	 * [[E5'l"F !rH   c                    [        U 5      e)zy
To be implemented by the subclasses. Only check the column values
assuming shape and indexes have already been checked.
)r   rb   others     rF   _equal_valuesBaseBlockManager._equal_valuess  s    
 "$''rH   c           	         [        U[        U 5      5      (       d  gU R                  UR                  p2[        U5      [        U5      :w  a  g[	        S [        X#SS9 5       5      (       d  gU R                  U5      $ )z%
Implementation for DataFrame.equals
Fc              3  H   #    U  H  u  pUR                  U5      v   M     g 7fr^   )equals)ru   ax1ax2s      rF   rw   *BaseBlockManager.equals.<locals>.<genexpr>  s       
,SCJJsOO,Ss    "Tstrict)rK   r   r\   rD   allzipr   )rb   r   	self_axes
other_axess       rF   r   BaseBlockManager.equalsz  sq    
 %d,, $		5:::y>S_, 
,/	d,S
 
 
 !!%((rH   c                0   SU;  d   eU=(       d    / n/ nU Vs0 s H  oUX5   _M	     nnU R                    GH  nU(       a  UR                  5        H  u  pX[        U[        [        45      (       av  UR
                  S:X  a1  UR                  UR                  R                     R                  X5'   Ma  UR                  SS2UR                  R                  4   R                  X5'   M  XR                  R                     X5'   M     [        U5      (       a  UR                  " U40 UD6n	O[        Xq5      " S0 UD6n	[        X5      nGM     [        U 5      R                  X@R                    V
s/ s H  oR#                  5       PM     sn
5      nU$ s  snf s  sn
f )a  
Iterate over the blocks, collect and create a new BlockManager.

Parameters
----------
f : str or callable
    Name of the Block method to apply.
align_keys: List[str] or None, default None
**kwargs
    Keywords to pass to `f`

Returns
-------
BlockManager
filterr   NrU   )rZ   rn   rK   r%   r$   rc   ilocmgr_locsindexer_valuescallableapplygetattrr4   r   r   r\   view)rb   f
align_keyskwargsresult_blockskaligned_argsbobjappliedrv   outs               rF   r   BaseBlockManager.apply  sQ   * v%%%%2
%' /99j69j9A*002FA!#	<'@AA 88q=(+1C1C(D(L(LFI(+AJJ4F4F1F(G(O(OFI %(

(:(:$;	 3 {{''!.v.!!-1&1)'AM% ( 4j$$]4S2WWY4ST
/ :, 5Ts   F,F
c                "    U R                  SUS9$ )Nr   )funcr   )rb   r  s     rF   r'   BaseBlockManager.isna  s    zz'z--rH   c                V    Ub  [         R                  " S US9nU R                  SUUUS9$ )N)limitfillna)valuer
  inplace)libalgosvalidate_limitr   )rb   r  r
  r  s       rF   r  BaseBlockManager.fillna  s<    ++D>Ezz	  
 	
rH   c                X    U(       a  SS/nOS/n[        USS9nU R                  SUUUS9$ )Nr   condTextract_numpywhere)r   r   r  r,   r   )rb   r   r  alignr   s        rF   r  BaseBlockManager.where  sD    !6*J J!%t<Ezz!	  
 	
rH   c                X    U(       a  SS/nOS/n[        USS9nU R                  SUUUS9$ )NnewmaskTr  putmask)r   r  r  r  )rb   r  r  r  r   s        rF   r  BaseBlockManager.putmask  sC    J J48Czz!	  
 	
rH   c                "    U R                  SUS9$ )Nround)decimalsr  )rb   r   s     rF   r  BaseBlockManager.round  s    zz'Hz55rH   c                    [        US5      n[        R                  " U5      (       a   e[        R                  " U5      (       a   eU R                  SUUUS9$ )Nr  replace)
to_replacer  r  )r   r   r   r   )rb   r$  r  r  s       rF   r#  BaseBlockManager.replace  s^    %gy9##J////##E****zz!	  
 	
rH   c                &    U R                   " S0 UD6$ )N)_replace_regexr  rb   r   s     rF   replace_regexBaseBlockManager.replace_regex   s    zz5f55rH   Fc                d    [        US5      nU R                  SUUUUS9nUR                  5         U$ )zdo a list replacer  replace_list)src_list	dest_listr  regex)r   r   _consolidate_inplace)rb   r-  r.  r  r/  bms         rF   r,  BaseBlockManager.replace_list  sE     &gy9ZZ  
 	!	rH   c                *    U R                   " SSU0UD6$ )Nr  )interpolater  rb   r  r   s      rF   r4  BaseBlockManager.interpolate  s    zzCCFCCrH   c                *    U R                   " SSU0UD6$ )Nr  )pad_or_backfillr  r5  s      rF   r8   BaseBlockManager.pad_or_backfill  s    zzGWGGGrH   c                L    U[         R                  L a  S nU R                  SXS9$ )Nshift)periods
fill_value)r   
no_defaultr   )rb   r<  r=  s      rF   r;  BaseBlockManager.shift  s&    'Jzz'7zJJrH   c                   [        U[        R                  5      (       a2  UR                  U R                  :  a  [	        SU R                   35      eU R                  S5      (       Gd   U R                  S:X  Ga  [        U[        5      (       Ga  U R                  US      n[        U5      (       a&  UR                  S:X  a  [        R                  " USS9nO[        U5      (       d  U/n[        U5      S:X  a  U R                  SS9$ U R                  S   R                  nUR                  S:X  Ga'  XC   nU R                  SX45        [        U5      n[         R"                  " US   5      (       a  SnO:[        U5      S:  a  [%        S5      nO[        R&                  " [        U5      5      nXQS'   US   n[        U[        R                  5      (       a%  UR                  S:X  a  [        R                  " USS9n[        U[        R                  5      (       a  [        U5      S:X  a  U $ XaS'   U R                  S   R)                  [        U5      U5        U $ U R                  S	S9n U R+                  S
XS9$ )zQ
Set values with indexer.

For SingleBlockManager, this backs s[indexer] = value
zCannot set values with ndim > r      r   r   FdeepNTsetitem)r   r  )rK   rM   ndarrayrc   r   r   rz   r   r   squeezerD   copyrZ   r   _iset_split_blocklistr   
is_integerr   arangerE  r   )rb   r   r  blk_locr   col_indexerrow_indexers          rF   rE  BaseBlockManager.setitem%  s     grzz**w||dii/G=dii[IJJ%%a(( yyA~*We"<"<,,wqz2((W\\Q-> jjq9G%g..&iGw<1$99%900Q..;;!##_F**7 #7mG~~gaj11&'W)&+Dk&(iiG&=!,AJ")!*K!+rzz::{?O?OST?T&(jj1&E!+rzz::s;?OST?T  $!,AJKKN**5>5AK 99$9'Dzz)WzBBrH   c                "    U R                  SUS9$ )Ndiff)nr  )rb   rS  s     rF   rR  BaseBlockManager.diff^  s    zz&Az&&rH   c                "    U R                  SXS9$ )Nastype)rN   errorsr  )rb   rN   rW  s      rF   rV  BaseBlockManager.astypeb  s    zz(%z??rH   c                $    U R                  S5      $ )Nconvertr  ra   s    rF   rZ  BaseBlockManager.converte  s    zz)$$rH   c                &    U R                   " S0 UD6$ )N)convert_dtypesr  r(  s     rF   r]  BaseBlockManager.convert_dtypesh  s    zz5f55rH   nan)na_repquotingc          	     *    U R                  SUUUUUS9$ )ze
Convert values to native types (strings / python objects) that are used
in formatting (repr / csv).
get_values_for_csv)r`  ra  float_formatdate_formatdecimalr  )rb   rd  re  rf  r`  ra  s         rF   rc  #BaseBlockManager.get_values_for_csvk  s,     zz %#  
 	
rH   c                :    [        S U R                   5       5      $ )z>Whether any of the blocks in this manager are extension blocksc              3  8   #    U  H  oR                   v   M     g 7fr^   is_extensionru   r   s     rF   rw   7BaseBlockManager.any_extension_types.<locals>.<genexpr>~  s     ?;%%%;ry   )r   rZ   ra   s    rF   any_extension_types$BaseBlockManager.any_extension_types{  s     ?4;;???rH   c                h    [        U R                  5      S:X  a  U R                  S   R                  $ g)z8return a boolean if we are a single block and are a viewr   r   F)rD   rZ   is_viewra   s    rF   rq  BaseBlockManager.is_view  s.     t{{q ;;q>))) rH   c                    U R                    Vs/ s H  o!" UR                  5      (       d  M  UPM     nnU R                  U5      $ s  snf r^   )rZ   r   _combine)rb   	predicater   rZ   s       rF   _get_data_subset!BaseBlockManager._get_data_subset  s:    !%F#	#**0E#F}}V$$ Gs
   AAc                   / nU R                    Hc  nUR                  [        :X  a  UR                  U5        M*  UR                  (       d  M=  UR                  S UR                  5        5       5        Me     U R                  U5      $ )z[
Select blocks that are bool-dtype and columns from object-dtype blocks
that are all-bool.
c              3  J   #    U  H  oR                   (       d  M  Uv   M     g 7fr^   )is_boolru   r   s     rF   rw   1BaseBlockManager.get_bool_data.<locals>.<genexpr>  s     !J|zz""|s   #	#)rZ   rN   rf   append	is_objectextend_splitrt  )rb   
new_blocksr   s      rF   get_bool_dataBaseBlockManager.get_bool_data  se     
;;CyyD !!#&!!!Jszz|!JJ  }}Z((rH   c                    U R                    Vs/ s H  oR                  (       d  M  UPM     nn[        U5      [        U R                   5      :X  a  U $ U R                  U5      $ s  snf r^   )rZ   
is_numericrD   rt  )rb   r   numeric_blockss      rF   get_numeric_data!BaseBlockManager.get_numeric_data  sP    )-G##G~#dkk"22 K}}^,, Hs
   A$A$c                    [        U5      S:X  ae  U R                  S:X  aE  Ub  U R                  SS U/nOU R                  SS /U R                  SS QnU R	                  U5      $ U R	                  5       $ [
        R                  " [
        R                  " U Vs/ s H  oDR                  R                  PM     sn5      5      n[        R                  " XPR                  S   5      n/ nU HI  nUR                  SS9n[        XhR                  R                     5      Ul        UR!                  U5        MK     [#        U R                  5      nUb  X#S'   U R                  R%                  U5      US'   ['        U 5      R)                  Xs5      $ s  snf )z$return a new manager with the blocksr   rA  Nr   FrC  )rD   rc   rn   r\   r   rM   sortconcatenater   as_arrayr   get_reverse_indexerr{   rH  r   r   r}  rJ  r   r   r   )	rb   rZ   indexr\   r   r   inv_indexerr  r   s	            rF   rt  BaseBlockManager._combine  sK   v;!yyA~$ JJrNE2D JJrN;TYYqr];Dt,,??$$ ''"..v)Nv!***=*=v)NOP--gzz!}E"$
AU#B([[5H5H)IJBKb! 
 DIIH**//'*QDz%%j77 *Os   Fc                ,    [        U R                  5      $ r^   r   ra   s    rF   nblocksBaseBlockManager.nblocks  s    4;;rH   c               b   U R                    Vs/ s H  o"R                  5       PM     nnU R                  SUS9nX4l         U R                  S:  aC  U R                  nUb4  UR                  5       Ul        U R                  R                  5       Ul        U(       a  UR                  5         U$ s  snf )z
Make deep or shallow copy of BlockManager

Parameters
----------
deep : bool, string or None, default True
    If False, return a shallow copy (do not copy data)

Returns
-------
BlockManager
rH  rC  r   )r\   r   r   rc   rW   rH  rX   r0  )rb   rD  rv   new_axesresr   s         rF   rH  BaseBlockManager.copy  s     )-		2	"GGI	2jjdj+99q=\\F!$kkm#}}113$$&
 3s   B,c                    gr   rU   ra   s    rF   is_consolidated BaseBlockManager.is_consolidated  r   rH   c                    U R                  5       (       a  U $ [        U 5      " U R                  U R                  SS9nSUl        UR                  5         U$ )zJ
Join together blocks having same dtype

Returns
-------
y : BlockManager
Frj   )r  r   rZ   r\   rh   r0  )rb   r1  s     rF   consolidateBaseBlockManager.consolidate  sM     !!K $ZTYYG#
!	rH   c                    g r^   rU   ra   s    rF   r0  %BaseBlockManager._consolidate_inplace   s    rH   c                h    U R                   U   R                  U5      u  pU R                  UUUUUS9$ )z$
Conform data manager to new index.
)r   r=  
only_slice)r\   reindexreindex_indexer)rb   	new_indexr   r=  r  r   s         rF   reindex_axisBaseBlockManager.reindex_axis  sF     "YYt_44Y?	##!! $ 
 	
rH   )use_na_proxyc          	        UcL  XR                   U   L a  U $ U R                  SS9n[        U R                   5      Ul         XR                   U'   U$ [        U[        R
                  5      (       d   eU(       d  U R                   U   R                  U5        X0R                  :  a  [        S5      eUS:X  a  [        U R                  UUUUS95      n	O/ n	U R                   H  n
U
R                  [        R                  :X  aj  [        R                  " U
R                  R                  S   [!        U5      4[        R                  S9nU	R#                  [%        XR&                  SS95        M  U	R#                  U
R)                  US	Ub  UOU
R*                  S
95        M     [        U R                   5      nXU'   U R                  S:X  a&  U R                   S	U-
     R-                  5       US	U-
  '   [/        U 5      R1                  X5      nUS	:X  a>  U R2                  R                  5       Ul        U R6                  R                  5       Ul        U$ )at  
Parameters
----------
new_axis : Index
indexer : ndarray[intp] or None
axis : int
fill_value : object, default None
allow_dups : bool, default False
only_slice : bool, default False
    Whether to take views, not copies, along columns.
use_na_proxy : bool, default False
    Whether to use an np.void ndarray for newly introduced columns.

pandas-indexer with -1's only.
FrC  #Requested axis not found in managerr   )r=  r  r  rP   rA  rc   r   )r   r=  )r\   rH  rJ  rK   rM   rF  _validate_can_reindexrc   
IndexError_slice_take_blocks_ax0rZ   rN   voidemptyr   r{   rD   r}  r2   r   take_ndr=  r   r   r   r   rW   r   rX   )rb   new_axisr   r   r=  
allow_dupsr  r  resultr  r   valsr  new_mgrs                 rF   r   BaseBlockManager.reindex_indexer  s   4 ?99T?*YYEY*Ftyy/FK (KKM '2::.... IIdO11':99BCC19++))!-	 , J J{{99' 88SZZ%5%5a%8#g,$GrwwWD%%j||!&LM%%#!".8.D
#..	 $  #$ 		?!99>!%1t8!4!9!9!;HQXt*((>19"kk..0GO#||002GrH   )r  ref_inplace_opc          	   #    #    U[         R                  Ln[        XR                  S   US9u  pxn	U R                  (       a  U R
                  S   n
US:X  a.  U	S:X  a  g[        [        SU	5      5      nU
R                  XS9v   gU(       a  U R                  S:X  a  U(       a  Uc  U
R                  nU(       dD  U(       a=  [        U5       H-  u  pU
R                  [        XS-   5      [        U5      US9v   M/     g[        [        SU	5      5      nU
R                  USUUS9v   gUS:X  a  U R                  U   nU R                  U   nOB[        R                  " U R                  US	US
9n[        R                  " U R                  US	US
9nU(       + n[         R"                  " UUS9 GH  u  nnUS	:X  aj  [%        U5      u  nn['        U5      (       a+  [)        U5      S:  a  U Vs/ s H  n[        U5      PM     nnOU/nU H  nU R+                  UUUS9v   M     Mw  U R
                  U   n
U
R,                  (       dN  U
R.                  (       d=  SnU H3  nU
R1                  US9n[        [        UUS-   5      5      Ul        Uv   M5     M  UUR4                     n[7        [)        U5      UR7                  5       S-   5      n[         R8                  " UU5      n[;        U[        5      (       a  U
R                  UUS9nUv   GM]  U(       aD  [=        UUSS9 H2  u  p[        XS-   5      n[        U5      nU
R                  UUS9nUv   M4     GM  U
R                  USUS9nUv   GM     gs  snf 7f)a<  
Slice/take blocks along axis=0.

Overloaded for SingleBlock

Parameters
----------
slice_or_indexer : slice or np.ndarray[int64]
fill_value : scalar, default lib.no_default
only_slice : bool, default False
    If True, we always return views on existing arrays, never copies.
    This is used when called from ops.blockwise.operate_blockwise.
use_na_proxy : bool, default False
    Whether to use an np.void ndarray for newly introduced columns.
ref_inplace_op: bool, default False
    Don't track refs if True because we operate inplace

Yields
------
Block : New Block
r   )
allow_fillr   N)new_mgr_locsr   )r  r  )r   r  r=  r  )r=  r  group)r   r=  r  FrC  Tr   )r   r  )r   r>  _preprocess_slice_or_indexerr{   r   rZ   r   r   getitem_block_columnsrc   r=  r   r  r   r   r   libinternalsget_blkno_placementsr   r   rD   _make_na_block_can_consolidate_validate_ndimrH  r   r   maxmaybe_indices_to_slicerK   r   )rb   slice_or_indexerr=  r  r  r  r  sl_typeslobjsllenr   r   r   mlr   r   r  r   r   rN   _col_idx
placementsr   rD  mgr_locnewblktakermax_lenr   slcs                                  rF   r  'BaseBlockManager._slice_take_blocks_ax0o  sZ    <  s~~5
 <jjm
!
 ++a.C'! A:#E!UO4///GG499>*"4!$J!j "+5!1!77!"1f-)7):+9 8   "2  (a8B++%'#-	 &   g[['Fll5)G]]UrjF mmezG +@@uUOE8{ 3:>q&u--#h-!2C JR!Rg."9J!RJ"*J!+I--"+#-%1 .   ", kk%( ++C4F4F
 !D#+!$t!4*8wRS9T*U$ $, $H$4$45E!#h-qAG66ugFE!%// 66u86T # &)%FEA"'q5/C!/!3B!$!:!:3R!:!PB"$H &G ![[QX[N m  V "Ss   G$M0&M+;E5M0c                h   U(       aN  Ub   e[        U5      U R                  S   4n[        R                  " U[        R                  S9n[        XQSS9nU$ Ub  U[        R                  L a  [        R                  n[        U R                   Vs/ s H  owR                  PM     sn5      nUbE  [        R                  " UR                  [        R                  5      (       a  UR                  U5      n[        U5      U R                  S   4n[        U5      u  p[        XU5      n	[        XS9$ s  snf )Nr   rP   rA  r  r   )rD   r{   rM   r  r  r2   r_  rG   rZ   rN   
issubdtyper   floatingr   make_na_arrayr8   )
rb   r   r=  r  r{   r  r   r   rN   block_valuess
             rF   r  BaseBlockManager._make_na_block  s    
 %%%^TZZ]3E88E1DD!4BIrvv!5J%DKK&HKSyyK&HIE R]]5::r{{%K%K"ZZ
3
YA/3J?$U:>L>> 'Is   D/c                    U R                   U   n[        XUS9nU R                  U   R                  U5      nU R	                  UUUSS9$ )a  
Take items along any axis.

indexer : np.ndarray[np.intp]
axis : int, default 1
verify : bool, default True
    Check that all entries are between 0 and len(self) - 1, inclusive.
    Pass verify=False if this check has been done by the caller.

Returns
-------
BlockManager
)verifyT)r  r   r   r  )r{   r-   r\   r   r  )rb   r   r   r  rS  r   s         rF   r   BaseBlockManager.take  sZ    * JJt'6BYYt_))'2
##	 $ 
 	
rH   )returnintT)rj   rf   r  None)r  r@   rZ   list[Block]r\   r[   r  r   )r  rV   r^   r  r   r  rf   )r   r=   r   r.   r  r  r  r.   r   r  r  rf   )r   r  r  rf   )r   rS   r  r  )r   rS   r   r  r  rf   r  znpt.NDArray[np.object_])r  list[ArrayLike])r  rO   r   r   r  rf   )r   rJ   r  rf   )r   zlist[str] | Noner  r   )r
  z
int | Noner  rf   r  r   )r  rf   r  r   )r   r  r  r   )r  rf   r  r   )FF)
r-  	list[Any]r.  r  r  rf   r/  rf   r  r   )r<  r  r  r   )rS  r  r  r   )raise)rW  rO   r  r   )r`  rO   r  r   )ru  r   r  r   )rZ   r  r  zIndex | Noner  r   )rD  rf   r  r   r  r  )NF)r  r.   r   r=   r  rf   r  r   )NFF)r  r.   r   znpt.NDArray[np.intp] | Noner   r=   r  rf   r  rf   r  rf   r  r   )
r  slice | np.ndarrayr  rf   r  rf   r  rf   r  zGenerator[Block])r   r   r  rf   r  r1   )r   T)r   rV   r   r=   r  rf   r  r   )Er   
__module____qualname____firstlineno____doc__	__slots____annotations__propertyrc   rk   r   ro   r{   classmethodr   r   r   r   r   r   r   r   rn   r   r   r   r   r   r   r   r   r   r   r'   r  r  r  r  r#  r)  r,  r4  r8  r;  rE  rR  rV  rZ  r]  rc  rn  rq  rv  r  r  rt  r  rH  r  r  r0  r  r  r   r>  r  r  r   __static_attributes__rU   rH   rF   rS   rS      sM   0d I!!""
" " "   2 2 " "    4$%
    % %  3;
(U( 3 3
( ) )( (,2 %2
 
2h . . 

 

 
 
 
 
 6 6 

 

 6 6 
   	
  
 (DHK7Cr'@%6 DIRV
=@
	
  @ @  %)"-8<    <" 
  

 

 
 

 
2   U #UU -U 	U U U U 
Ut >> 	J! #$J!,J! 	J! J! J! 
J!Z PU?'?HL?	?8 	
%
 
 	

 

 
rH   rS   c                  N   \ rS rSrSrSr S&       S'S jjrS(S jr\S)S j5       r	S*S jr
S&S+S jjrS,S	 jr\S-S
 j5       r  S.         S/S jjr  S0         S1S jjr S2             S3S jjr S4       S5S jjrS2S6S jjrS(S jrS(S jrS7S jrS8S jrS8S jrS9S jrS:S jrSS.     S;S jjrS7S jrS<S jrSS\R>                  4       S=S jjr S\R>                  4     S>S jjr!S?S  jr"S(S! jr#S(S" jr$\S@S# j5       r%\S@S$ j5       r&S%r'g)ABlockManageri5  z(
BaseBlockManager that holds 2D blocks.
rA  c                    U(       aZ  U HC  nU R                   UR                   :w  d  M  [        SUR                    SU R                    S35      e   U R                  5         g g )NzNumber of Block dimensions (z) must equal number of axes ())rc   AssertionError_verify_integrity)rb   rZ   r\   rj   r   s        rF   rk   BlockManager.__init__?  sd       99

*(6uzzl C++/99+Q8    ""$ rH   c                j   U R                   n[        S U R                   5       5      nU R                   H>  nUR                   SS  USS  :w  d  M  [        X#R                   SS  U R                  5        M@     [        U R                  5      U:w  a$  [        S[        U R                  5       SU 35      eg )Nc              3  L   #    U  H  n[        UR                  5      v   M     g 7fr^   )rD   r   )ru   xs     rF   rw   1BlockManager._verify_integrity.<locals>.<genexpr>W  s     =AAJJ   "$r   zINumber of manager items must equal union of block items
# manager items: z, # tot_items: )r{   sumrZ   raise_construction_errorr\   rD   rn   r  )rb   	mgr_shape	tot_itemsr   s       rF   r  BlockManager._verify_integrityU  s    JJ	===	[[E{{12)AB-/(KKOTYYO ! tzz?i' 114TZZ0A B'[*  (rH   c                    U " XSS9$ )J
Constructor for BlockManager and SingleBlockManager with same signature.
Fr  rU   r~   s      rF   r   BlockManager.from_blocksb  s    
 6%88rH   c                L   [        U R                  5      S:X  a  U R                  S   R                  [        S5      U45      n[	        [        S[        U5      5      5      n[        UUSU R                  S   R                  S9n[        X@R                  S   R                  5       5      $ [        U R                   Vs/ s H  oUR                  PM     sn5      n[        U 5      n[        U[        5      (       a  [        R                  " U[         S9nO[        R                  " XvS9n[#        U5      nU R                   H  n[%        UR&                  5       H  u  pUR                  X45      n
UR                  R(                  S;   a  [*        R,                  " U
5      (       aq  [/        U
5      (       aa  [        UR                  [0        5      (       aB  UR                  R(                  S:X  a  [         nO[        R2                  nUR5                  U5      nXU	'   M     M     [        U[        5      (       a  UR7                  5       nUR9                  X&S9n[	        [        S[        U5      5      5      n[        X#SS9n[        X@R                  S   R                  5       5      $ s  snf )	z
Return the array corresponding to `frame.iloc[loc]`.

Parameters
----------
loc : int

Returns
-------
np.ndarray or ExtensionArray
r   r   Nr   rc   r   rP   iubr   r   rc   )rD   rZ   igetr   r   r7   r   r   r\   r   rG   rN   rK   r"   rM   r  rJ   r+   r   r   kindr   is_floatr'   r    float64rV  construct_array_type_from_sequence)rb   locr  r   r   r   rN   rS  r   rlitem	new_dtyper   s                rF   fast_xsBlockManager.fast_xsl  s    t{{q  37++a.2E2Etc"3F  aV 56B[[^((	E &eYYq\->->-@AA!"D99"DEIe^,,
 XXav.FXXa-F3F;F;;C #3<<0xx)LL%%.T**T

"399.>?? ||((C/$*	$&JJ	#]]95F!r
% 1 . e^,,,,.C'''<FE!S[12&Q7!%1):):)<==W #Es   =J!c                F   U R                   U R                  U      nUR                  U R                  U   5      n[	        [        S[        U5      5      5      n[        U5      " XESU(       a  UR                  OSS9n[        X`R                  S   R                  5       5      $ )z*
Return the data as a SingleBlockManager.
r   r   Nr  )rZ   r   r  r   r   r   rD   r   r   r   r\   r   )rb   r   	track_refr   r   r   r   s          rF   r  BlockManager.iget  s     DKKN+DLLO, E!S[12%[qYuzzD
 ""iil&7&7&9::rH   c                z    U R                   U R                  U      nUR                  U R                  U   5      nU$ )z
Return the data for column i as the values (ndarray or ExtensionArray).

Warning! The returned array is a view but doesn't handle Copy-on-Write,
so this should be used with caution.
)rZ   r   r  r   )rb   r   r   r   s       rF   iget_valuesBlockManager.iget_values  s5     DKKN+DLLO,rH   c                   S/[        U R                  5      -  nU R                   H\  nUR                  nUR                  R                  5       nUR                  S:X  a	  XAUS   '   MB  [        U5       H  u  pVXE   X'   M     M^     U$ )z
Used in the JSON C code to access column arrays.
This optimizes compared to using `iget_values` by converting each

Warning! This doesn't handle Copy-on-Write, so should be used with
caution (current use case of consuming this in the JSON code is fine).
Nr   r   )rD   rn   rZ   	_mgr_locsarray_values_values_for_jsonrc   r   )rb   r  r   r   r   r   r  s          rF   column_arraysBlockManager.column_arrays  s~     ,0&3tzz?*B;;C}}H%%668F{{a&,x{# (1FA"()FK 2  rH   FNc           	     R	  ^^^ U R                   c   U R                  S:  a  U R                  5         [        TR                  5      nU(       dR  TR                  S:X  a  TR
                  mO
[        TSS9mTR                  SS U R                  SS :w  a  [        S5      e[        R                  " U5      (       a^  [        [        U5      nU R                  U   nU R                  U   n[        UR                   5      S:X  a  U R#                  UTUUUTS9$ U/nU(       a  U4S jnOU4S jnU R                  U   n	U R$                  U   R'                  5       n
/ n/ n/ m[(        R*                  " U	S	S
9 GH  u  pU R                  U   nXR,                     nU(       a^  UR/                  T5      (       aH  U R1                  U5      (       d  U R3                  XU" U5      TS9  Mo  UR5                  X" U5      5        M  UR7                  UR8                  R:                  U   5        UR7                  U5        [        U5      [        UR8                  5      :X  a  TR7                  U5        M  U R3                  XTS9  GM	     T(       a  [<        R>                  " U R@                  [<        RB                  S9nS	UT'   [<        RD                  " U R@                  [<        RF                  S9nURI                  S5        [<        RJ                  " U R@                  [        T5      -
  5      UU) '   UU RL                     U l&        [O        U4S j[Q        U R                  5       5       5      U l        U(       Ga:  [<        RR                  " U5      n[        U5      n/ nU(       ae  URU                  UU4S jU 5       5        [<        RJ                  " U5      [        U R                  5      -   U RL                  U'   SU R                   U'   OUS   R7                  USS 5      nUR7                  [W        U" U5      [Y        U5      TS95        [        U R                  5      U RL                  U'   [<        RJ                  " U5      U R                   U'   U =R                  [O        U5      -  sl        SU l-        gg)zj
Set new item in-place. Does not consolidate. Adds new Block if not
contained in the current set of items
Nr   rA  r  z9Shape of new values must be compatible with manager shape)r  r   r   r   c                   > T$ r^   rU   r   r  s    rF   value_getitem(BlockManager.iset.<locals>.value_getitem$  s    rH   c                "   > TU R                      $ r^   )r   r+  s    rF   r,  r-  )  s    Y..//rH   Tr  r   rP   r  c              3  N   >#    U  H  u  pU[        T5      ;  d  M  Uv   M     g 7fr^   )set)ru   r   r   removed_blknoss      rF   rw   $BlockManager.iset.<locals>.<genexpr>T  s%       "8ASEX<X"8s   %	%c              3  d   >#    U  H%  n[        T[        [        XS -   5      5      TS9v   M'     g7f)r   r   r   r   N)r8   r   r   )ru   r  r   r  s     rF   rw   r3  a  s8      " $. !$"0w!1L"M!
 $.s   -0r   r5  F).rX   rc   r   r   rN   Tr3   r{   r  r   rK  r   r  r   rZ   rD   r$  _iset_singler   rH  r  r  r   should_storer   rI  set_inplacer}  r   r  rM   zerosr  bool_r  intpfillrL  rW   rz   r   r  r  r8   r   rg   )rb   r  r  r  r   value_is_extension_typer   r   r,  r   r   unfit_mgr_locsunfit_val_locsblkno_lval_locsblk_locs
is_deleted
new_blknos
unfit_idxrunfit_countr  unfit_val_itemsr2  s     ` `                 @rF   isetBlockManager.iset  s    == TYY],,. #6ekk"B&zzQ*5q9{{12$**QR.0$O  >># sC.CKK$E++e$C3==!Q&((# )   %C #
0 S!,,s#((*!-!B!B6QU!VG++g&C//0H3++E2233G<<**=+B +  OOHmH.EF%%cll&;&;H&EF%%h/ x=C$55"))'2 **74*H- "W0 $,,bhh?J)-J~&$,,bgg>JOOB&(iis>?R0R&SJ
{#%dll3DL  "+DKK"8  DK 7Jj/K&(J& !! " $."  ,.99[+ACDT+TZ(,-j) #1"3":":>!";M"N!! ,_="0"<! ,/t{{+;Z(,.IIk,Bj)KK5,,K (-D$O rH   c                &   U R                   U   nU R                  c  U R                  5         [        UR	                  U5      5      nUb.  UR
                  R                  U   n[        U[        U5      US9nOUS   n[        USS 5      n[        U R                   5      n	/ U R                   SU QUPU R                   US-   S QUQ7n
Xl         U(       d  Ub  g[        R                  " [        U5      5      U R                  UR
                  R                  '   [        U5       Hj  u  p[        R                  " [        U5      5      U R                  UR
                  R                  '   X-   U R                  UR
                  R                  '   Ml     g)a  Removes columns from a block by splitting the block.

Avoids copying the whole block through slicing and updates the manager
after determining the new block structure. Optionally adds a new block,
otherwise has to be done by the caller.

Parameters
----------
blkno_l: The block number to operate on, relevant for updating the manager
blk_locs: The locations of our block that should be deleted.
value: The value to set as a replacement.
refs: The reference tracking object of the value to set.
Nr/  r   r   )rZ   rX   r   rz   deleter   r  r8   r   rD   rM   rL  r   r   rW   )rb   rA  rC  r  r   r   nbs_tuplocsfirst_nb	nr_blocks
blocks_tupr   r   s                rF   rI  BlockManager._iset_split_block  s]   ( kk'"== ,,.

8,-<<((2D#E>$+?dKHqzHGABK(G$	
[['"

 [[1'
 	

 !5,3599S]3Kh''//0w'EA133r71CDMM"++--.01DLL,,- (rH   c                0   U(       aX  UR                  U5      (       aB  U R                  U5      (       + nU R                  U   nUR                  [	        XS-   5      X'S9  g[        X%R                  US9n	U R                  n
/ U
SU QU	PXS-   S Q7nXl        g)z
Fastpath for iset when we are only setting a single position and
the Block currently in that position is itself single-column.

In this case we can swap out the entire Block and blklocs and blknos
are unaffected.
r   )rH  Nr   r   )r8  r   r   r9  r   r8   r$  rZ   )rb   r  r  r  r   r   r   rH  r   r   
old_blocksr  s               rF   r7  BlockManager._iset_single  s    $ s''..33E::D<<$DOOE$q15OD%==tD[[
Hz&5)H2H
19;0GH
 rH   c                   U R                  U5      (       dp  U R                  U   nU R                  U   nU R                  U   R                  nUR
                  S:X  a  UR                  5       nOXv/   nU R                  XV/U5        U R                  USS9nU(       a  UR                  X#5        gUR                  U4U5      n	U R                  XR                  R                  SS9  g)z
Set values ("setitem") into a single column (not setting the full column).

This is a method on the BlockManager level, to avoid creating an
intermediate Series at the DataFrame level (`s = df[loc]; s[idx] = value`)
r   F)r  T)r  N)r   r   r   rZ   r   rc   rH  rI  r  setitem_inplacerE  rI  _block)
rb   r  idxr  inplace_onlyr   rM  r   col_mgrr  s
             rF   column_setitemBlockManager.column_setitem  s     %%c**KK$Ell3'G[['..F{{a  	*""5)V< ))C5)1##C/oosfe4GIIc>>00$I?rH   c                Z   U R                   R                  X5      nUR                  S:X  a>  UR                  n[	        U5      S:  a"  [        SUR                  R                   35      eO[        X0R                  S9n[        [        XS-   5      5      n[        X6US9n[	        U R                  5      (       dS  [        R                  " S/[        R                  S9U l        [        R                  " S/[        R                  S9U l        O"U R#                  U5        U R%                  U5        XPR&                  S'   U =R                  U4-  sl        SU l        [+        S	5      (       aD  [-        S
 U R                   5       5      S:  a#  [.        R0                  " S[2        [5        5       S9  ggg)z
Insert item at selected position.

Parameters
----------
loc : int
item : hashable
value : np.ndarray or ExtensionArray
refs : The reference tracking object of the value to set.
rA  r   z-Expected a 1D array, got an array with shape r  r5  r   rP   Fperformance_warningsc              3  B   #    U  H  oR                   (       + v   M     g 7fr^   rj  rl  s     rF   rw   &BlockManager.insert.<locals>.<genexpr>  s     Du****s   d   a   DataFrame is highly fragmented.  This is usually the result of calling `frame.insert` many times, which has poor performance.  Consider joining all columns at once using pd.concat(axis=1) instead. To get a de-fragmented frame, use `newframe = frame.copy()`)
stacklevelN)rn   insertrc   r6  rD   r   r{   r3   r   r   r8   rZ   rM   r   r<  rX   rW   _insert_update_mgr_locs!_insert_update_blklocs_and_blknosr\   rg   r   r  warningswarnr   r   )rb   r  r  r  r   r  r   r   s           rF   re  BlockManager.insert  sU    ::$$S/::?GGE5zA~ CEGGMM?S  
 'u99=EE#Qw/0EdC4;;HHaS8DM88QCrww7DL((-2237		!x#(  -..DDDsJMMW #+- K /rH   c                    [         R                  " U R                  US 5      R                  5       S   nU H2  nU R                  U   nUR
                  R                  U5      Ul        M4     g)zm
When inserting a new Block at location 'loc', we increment
all of the mgr_locs of blocks above that by one.
Nr   )rM   bincountr   nonzerorZ   r$  increment_above)rb   r  r   r   r   s        rF   rf  $BlockManager._insert_update_mgr_locs&  sY     T[[./779!<E++e$CMM99#>CM rH   c                l   XR                   R                  S   :X  a`  [        R                  " U R                  S5      U l        [        R                  " U R
                  [        U R                  5      5      U l        gUS:X  ad  [        R                  " S/U R                  /5      U l        [        R                  " [        U R                  5      /U R
                  /5      U l        g[        R                  " U R                   U R                  U[        U R                  5      5      u  p#X l        X0l        g)zS
When inserting a new Block at location 'loc', we update our
_blklocs and _blknos.
r   N)r   r{   rM   r}  rX   rW   rD   rZ   r  r  update_blklocs_and_blknosr   )rb   r  new_blklocsrE  s       rF   rg  .BlockManager._insert_update_blklocs_and_blknos2  s     ,,$$Q''IIdmmQ7DM99T\\3t{{3CDDLAXNNQC+?@DM>>C,<+=t||*LMDL&2&L&Ldkk3DKK0@'#K (M%LrH   c                (   [         R                  " U R                  S   [         R                  S9nSX!'   U) R	                  5       S   nU R                  USSS9nU R                  U)    nXPR                  S   /n[        U 5      " [        U5      USS9$ )z:
Delete selected locations, returning a new BlockManager.
r   rP   T)r  r  r   Fr  )
rM   r:  r{   r;  rm  r  rn   r\   r   rz   )rb   r   rD  r  nbsnew_columnsr\   s          rF   ideleteBlockManager.ideleteH  s     XXdjjm288<
"
%%'*))%DQU)Vjj*-YYq\*Dz%*dUCCrH   c                   / nU R                    He  nUR                  (       a5  UR                  5        H  nUR                  U5      n[	        XR5      nM!     MI  UR                  U5      n[	        XR5      nMg     [        U5      S:X  a  SnOUS   R                  R                  S   n[        U5      n[        U 5      R                  X R                  S   R                  5       U/5      $ )z
Apply grouped reduction function blockwise, returning a new BlockManager.

Parameters
----------
func : grouped reduction function

Returns
-------
BlockManager
r   r  )rZ   r~  r  r   r4   rD   r   r{   r/   r   r   r\   r   )rb   r  r   r   sbr  nrowsr  s           rF   grouped_reduceBlockManager.grouped_reduceX  s     &(;;C}} **,B hhtnG$1'$IM ' ))D/ -g E  }"E!!$++11"5Ee$ Dz%%miil6G6G6I55QRRrH   c                    U R                   S:X  d   eU R                   Vs/ s H  o"R                  U5      PM     nn[        S5      n[	        U 5      R                  X0R                  U/5      nU$ s  snf )z
Apply reduction function blockwise, returning a single-row BlockManager.

Parameters
----------
func : reduction function

Returns
-------
BlockManager
rA  r   )rc   rZ   reducer/   r   r   rn   )rb   r  r   
res_blocksr  r  s         rF   r  BlockManager.reducez  sd     yyA~~26++>+3jj&+
>a t*((jj%5HI	 ?s   A0c                    [        XU5      $ )z?
Apply array_op blockwise with another (aligned) BlockManager.
)r:   )rb   r   array_ops      rF   r:   BlockManager.operate_blockwise  s     !h77rH   c                "    [        X[        5      $ ){
Used in .equals defined in base class. Only check the column values
assuming shape and indexes have already been checked.
)r9   r&   r   s     rF   r   BlockManager._equal_values  s    
 T,77rH   linear)interpolationc               0   U R                   S:  d   e[        U5      (       d   eU R                  S   R                  5       [	        U[
        R                  S9/nU R                   Vs/ s H  oDR                  XS9PM     nn[        U 5      " XS5      $ s  snf )a/  
Iterate over blocks applying quantile reduction.
This routine is intended for reduction type operations and
will do inference on the generated blocks.

Parameters
----------
interpolation : type of interpolation, default 'linear'
qs : list of the quantiles to be computed

Returns
-------
BlockManager
rA  r   rP   )qsr  )
rc   r   r\   r   r.   rM   r  rZ   quantiler   )rb   r  r  r  r   rZ   s         rF   r  BlockManager.quantile  s    , yyA~~BIIaL%%'r)DE IM
HSLLBL< 	 
 Dz&++	
s   (Bc                ,   UR                  U R                  5      nUR                  nUR                  (       + nU(       a4  UR                  ) R
                  " UR                  6 nUR                  SS9nO&[        R                  " UR                  S   [        S9n/ n/ n	[        U R                  5      S:X  a  Sn
O=[        U5      [        U R                  5      -  nU[        U5      :X  d   e[        U5      n
U R                   H}  nUR                  nUR                  U
5      nUR!                  UUUUS9u  nnUR#                  U5        U	R#                  U5        UR%                  5       [%        S U 5       5      :X  a  M}   e   X9   n['        XU/SS9nU$ )	z
Return a BlockManager with all blocks unstacked.

Parameters
----------
unstacker : reshape._Unstacker
fill_value : Any
    fill_value for newly introduced missing values.

Returns
-------
unstacked : BlockManager
r   rB  r   rP   )new_placementneeds_maskingc              3  L   #    U  H  n[        UR                  5      v   M     g 7fr^   )rD   r$  r{  s     rF   rw   'BlockManager.unstack.<locals>.<genexpr>  s     $H2S%6%6r  Fr  )get_new_columnsrn   r  mask_allr  reshape
full_shaper   rM   r:  rf   rD   r  rZ   r   tile_for_unstack_unstackr  r  r  )rb   	unstackerr=  rv  r  r  
new_mask2Dr  r  columns_maskfactorfacr   r   r  rZ   r  r1  s                     rF   unstackBlockManager.unstack  sv     //

;''	"+++
 %>>/22I4H4HIJ&NNN2MHHY%9%9!%<DIM"$
)+tzz?aFk"S_4C#c(?"?XF;;C||H$55f=M<<++	 ( LFD f%% 88:$H$H!HHHH ( "/*I&>QVW	rH   c              #     #    S n[         R                  " [        U R                  US9US9 H"  u  p#X R	                  [        U5      5      4v   M$     g7f)zm
Yield a tuple of (str(dtype), BlockManager)

Returns
-------
values : a tuple of (str(dtype), BlockManager)
c                ,    [        U R                  5      $ r^   )rO   rN   )r   s    rF   <lambda>+BlockManager.to_iter_dict.<locals>.<lambda>  s    C,rH   keyN)	itertoolsgroupbysortedrZ   rt  rJ  )rb   r  rN   rZ   s       rF   to_iter_dictBlockManager.to_iter_dict  sH      -&..vdkks/KQTUMEtF|444 Vs   AAc                   [         R                  " U5      =(       a    [        U5      n[        U R                  5      S:X  a3  [
        R                  " U R                  [        S9nUR                  5       $ U R                  (       Ga?  U R                  S   nU[         R                  La0  [         R                  " UR                  S5      (       a  U(       a  OSnUR                  (       a5  UR                  R!                  UUUS9R#                  UR                  5      nOFU(       d   [
        R$                  " UR                  US9nO[
        R&                  " UR                  XS9nU(       a1  UR                  R(                  S;   a  X5[        UR                  5      '   U(       d!  UR+                  5       nSUR,                  l        OU R1                  XS	9nU[         R                  L a   UR                  5       $ UR                  R(                  S:X  a  U(       a   UR                  5       $ X5[        U5      '   UR                  5       $ )
a  
Convert the blockmanager data into a numpy array.

Parameters
----------
dtype : np.dtype or None, default None
    Data type of the return array.
copy : bool, default False
    If True then guarantee that a copy is returned. A value of
    False does not guarantee that the underlying data is not
    copied.
na_value : object, default lib.no_default
    Value to be used as the missing value sentinel.

Returns
-------
arr : ndarray
r   rP   r   T)rN   na_valuerH  )rN   rH  mMFrN   r  )r   r  r'   rD   rZ   rM   r  r{   float	transposer   r>  is_np_dtyperN   rk  r   to_numpyr  asarrayr   r  r   flags	writeable_interleave)rb   rN   rH  r  
passed_nanr   r   s          rF   r  BlockManager.as_array	  s   0 \\(+>X
t{{q ((4::U3C==?"++a.Cs~~- ??399c22zD
 jj))% *  '#))$	 
 jj59hhszzBciinn4(0D$%hhj&+		#"""BC s~~% }} YY^^s"z }} &S	N}}rH   c                   U(       d/  [        U R                   Vs/ s H  o3R                  PM     sn5      n[        U5      n[        R
                  " U R                  US9n[        R                  " U R                  S   5      nU[        R                  " S5      :X  aa  U[        R                  L aN  U R                   H<  nUR                  nUR                  U5      nXtUR                  '   SXVR                  '   M>     U$ U R                   H  nUR                  nUR                  (       a  UR                  R                  UUS9nOUR                  U5      nXtUR                  '   U[        R                  La4  UR                  R                   S;   a  X$UR                     [#        U5      '   SXVR                  '   M     UR%                  5       (       d  ['        S5      eU$ s  snf )z\
Return ndarray from blocks with specified item order
Items must be contained in the blocks
rP   r   rJ   r   r  r  z'Some items were not contained in blocks)rG   rZ   rN   rQ   rM   r  r{   r:  r   r>  r   
get_valuesr   rk  r   r  r  r'   r   r  )rb   rN   r  r   r  itemmaskr  r   s           rF   r  BlockManager._interleaveU  s~     &&*kk2ksk2E  &$**E288DJJqM*BHHX&&8s~~+E{{\\nnU+%(rzz"'($	 #
 M;;CB
 jj))% * 
 nnU+!$2::s~~-#))..D2H08rzz"49-#$HZZ ! $ ||~~ !JKKQ 3s   G c                \    U R                   (       d  U R                  5         U R                  $ )z8
Return True if more than one block with the same dtype
)rg   _consolidate_checkrh   ra   s    rF   r  BlockManager.is_consolidated  s%     ''##%$$$rH   c                &   [        U R                  5      S:X  a  SU l        SU l        g U R                   Vs/ s H!  oR                  (       d  M  UR
                  PM#     nn[        U5      [        [        U5      5      :H  U l        SU l        g s  snf )Nr   T)rD   rZ   rh   rg   r  rN   r1  r   s      rF   r  BlockManager._consolidate_check  sr    t{{q $(D!'+D$'+{{K{6J6J)#)){K #Fs3v;/? ?#'  Ls   BBc                    U R                  5       (       d9  [        U R                  5      U l        SU l        SU l        U R                  5         g g r   )r  _consolidaterZ   rh   rg   r   ra   s    rF   r0  !BlockManager._consolidate_inplace  sB    ##%%&t{{3DK$(D!'+D$,,.	 &rH   c                0   Sn/ nU Hy  nUR                    HN  nUR                  [        S5      5      nUR                  R	                  U5      Ul        UR                  U5        MP     U[        UR                  5      -  nM{     U " [        U5      U5      nU$ )z;
Concatenate uniformly-indexed BlockManagers horizontally.
r   N)	rZ   slice_block_columnsr   r$  addr}  rD   rn   rz   )	r   mgrsr\   offsetrZ   r   r   r   r  s	            rF   concat_horizontalBlockManager.concat_horizontal  s    
  Czz ,,U4[9!||//7b! " c#))n$F  eFmT*rH   c                    [        S5      e)z9
Concatenate uniformly-indexed BlockManagers vertically.
z.This logic lives (for now) in internals.concatr_   )r   r  r\   s      rF   concat_verticalBlockManager.concat_vertical  s    
 ""RSSrH   )rX   rW   rh   rg   rZ   r  )rZ   zSequence[Block]r\   zSequence[Index]rj   rf   r  r  r  r  )r  r  r  r   )r   r  r  rf   r  r   )r   r  r  r<   )r  zlist[np.ndarray])FN)
r  int | slice | np.ndarrayr  r<   r  rf   r   BlockValuesRefs | Noner  r  )NN)
rA  r  rC  znp.ndarray | list[int]r  zArrayLike | Noner   r  r  r  r^   )r  r  r  r<   r  rf   r   r  r   r1   r   r  r  r  F)r  r  rZ  r  r[  rf   r  r  )r  r  r  r   r  r<   r  r  )r  r  )r  r   r  r   )r   r  r  r  )rb   r  r   r  r  rf   )r  r.   r  r?   r  r   )r  zGenerator[tuple[str, Self]])rN   np.dtype | NonerH  rf   r  rJ   r  
np.ndarray)rN   r  r  rJ   r  r  r  )r  z
list[Self]r\   r[   r  r   )(r   r  r  r  r  rc   rk   r  r  r   r  r  r!  r  r'  rI  rI  r7  r]  re  rf  rg  rw  r|  r  r:   r   r  r  r  r   r>  r  r  r  r  r0  r  r  r  rU   rH   rF   r  r  5  s    D "&	%% % 	%
 
%, 9 9G>R;
  > '+T-%T- T- 	T-
 %T- 
T-t #''+2>2> )2>  	2>
 %2> 
2>v (,  	
   % 
> TY@@5@LP@	@@1f
?&,D  SD*88 08	, , -	,
 
,F;z5 "&>>	JJ J 	J
 
J\ "&>>66 6 
	6v%(/  * T TrH   r  c                     \ rS rSrSr\S$S j5       rSrSrSr	Sr
 S%       S&S jjr\      S'S j5       r\ S(       S)S	 jj5       rS*S
 jrS+S,S jjrS rS-S jrS-S jr\S.S j5       r\\S/S j5       5       r\S-S j5       r\S-S j5       rS0S jrS+S1S jjr\S2S j5       r\S3S j5       rS4S jrS rS r S5S jr!S6S jr"\S7S j5       r#S-S jr$S8S jr%S r&S9S  jr'S:S! jr(S" r)S#r*g);r   i  zmanage a single block withc                    gr   rU   ra   s    rF   rc   SingleBlockManager.ndim  s    rH   TrU   c                $    U/U l         U4U l        g r^   r\   rZ   )rb   r   r   rj   s       rF   rk   SingleBlockManager.__init__  s     F	hrH   c                b    [        U5      S:X  d   e[        U5      S:X  d   eU " US   US   SS9$ )r  r   r   Fr  rs   r~   s      rF   r   SingleBlockManager.from_blocks  s=     6{a4yA~~6!9d1g>>rH   Nc                z    [        U5      n[        [        S[        U5      5      5      n[	        XSUS9nU " XR5      $ )z>
Constructor for if we have an array that is not yet a Block.
r   r   r  )r6   r   r   rD   r7   )r   r   r  r   r   r   s         rF   
from_arraySingleBlockManager.from_array  s<     $E*E!SZ01%ADA5  rH   c                    U R                   S   n[        UR                  SS9n[        S5      n[	        U5      " X4SUR
                  S9nXR                  S   R                  5       /n[        U/USS9$ )z%
Manager analogue of Series.to_frame
r   rA  r  r  F)r\   rj   )	rZ   r3   r   r   r   r   r\   r   r  )rb   columnsr   r   r   new_blkr\   s          rF   	to_2d_mgrSingleBlockManager.to_2d_mgr  sk     kk!n !4As)CACHHE1**,-WID5IIrH   c                Z    U R                   S   R                  R                  5       (       + $ )r   r   r   )rb   r   s     rF   r   $SingleBlockManager._has_no_reference  s$     ;;q>&&44666rH   c                   U R                    Vs/ s H  oR                  PM     nnU R                    Vs/ s H%  oR                  UR                  R                     PM'     nn[        U R                  5      nSUU R                    Vs/ s H&  nUR                  UR                  R                  S.PM(     snS.0nXBX54$ s  snf s  snf s  snf )N0.14.1)r   r   r  )rZ   r   rn   r   r   rJ  r\   )rb   r   r  block_items
axes_arrayextra_states         rF   __getstate__SingleBlockManager.__getstate__  s    *.++6+Q+6?C{{K{!zz!**"4"45{K$))_
 " "[[(  !xxQZZ5G5GH(
 AA! 7Ks   B>,C-Cc                l  ^^ S	S jm[        U[        5      (       ax  [        U5      S:  ai  SUS   ;   a`  US   S   nUS    Vs/ s H  n[        U5      PM     snU l        [        U R                  5      m[        UU4S jUS    5       5      U l        O[        S5      eU R                  5         g s  snf )
Nc                    [        U SS9n [        U[        5      (       d  [        U5      n[        U 5      n [	        XUS9$ )NTr  r  )r,   rK   r   r6   r7   )r   r   rc   s      rF   unpickle_block7SingleBlockManager.__setstate__.<locals>.unpickle_block#  s>     #6>Fh77)(3(0FVdCCrH      r     r\   c              3  @   >#    U  H  nT" US    US   TS9v   M     g7f)r   r   r  NrU   )ru   r   rc   r  s     rF   rw   2SingleBlockManager.__setstate__.<locals>.<genexpr>1  s)       (A q{AjME(s   rZ   z*pre-0.14.1 pickles are no longer supported)rc   r  r  r1   )rK   rz   rD   r0   r\   rZ   r`   _post_setstate)rb   staterv   rc   r  s      @@rF   __setstate__SingleBlockManager.__setstate__"  s    	D eU##E
aHa<P!HX&E49&MBMbb)MBDItyy>D  x  DK
 &&RSS Cs   B1c                    g r^   rU   ra   s    rF   r  !SingleBlockManager._post_setstate:  s    rH   c                     U R                   S   $ r   )rZ   ra   s    rF   rY  SingleBlockManager._block=  s    {{1~rH   c                4    U R                   S   R                  $ )z1
Quick access to the backing array of the Block.
r   r   ra   s    rF   r   SingleBlockManager.arrayA  s     {{1~$$$rH   c                    gzcompat with BlockManagerNrU   ra   s    rF   rW   SingleBlockManager._blknosJ       rH   c                    gr   rU   ra   s    rF   rX   SingleBlockManager._blklocsP  r  rH   c                    U R                   n[        U5      S:  a>  UR                  5       (       a)  [        U 5      " UR	                  SS9U R
                  5      $ UR                  U   n[        U[        R                  5      (       a  UR                  R                  S:X  a  S nOUR                  n[        [        S[        U5      5      5      n[        U5      " X5SUS9nU R
                  U   n[        U 5      " Xg5      $ )Nr   FrC  r   r   r  )rY  rD   r   r   rH  r  r   rK   rM   rF  rN   r  r   r   r   )rb   r   r   r   r   r   r   new_idxs           rF   get_rows_with_mask%SingleBlockManager.get_rows_with_maskU  s    kkw<!:chhEh2DJJ??

7#grzz**w}}/A/AS/HD 88DE!SZ01S	%ADA**W%Dz%))rH   c                6   X R                   :  a  [        S5      eU R                  nUR                  U   n[	        [        S[        U5      5      5      n[        U5      " XESUR                  S9nU R                  R                  U5      n[        U 5      " Xg5      $ )Nr  r   r   r  )rc   r  rY  r   r   r   rD   r   r   r  _getitem_slice)rb   r  r   r   r   r   r   r  s           rF   	get_sliceSingleBlockManager.get_slicei  s     99BCCkk

5!E!SZ01 S	%ACHHEJJ--e4	Dz%++rH   c                     U R                   S   $ r   r   ra   s    rF   r  SingleBlockManager.indexx  r   rH   c                .    U R                   R                  $ r^   )rY  rN   ra   s    rF   rN   SingleBlockManager.dtype|  s    {{   rH   c                ^    [         R                  " U R                  R                  /[        S9$ r   )rM   r   rY  rN   rJ   ra   s    rF   r   SingleBlockManager.get_dtypes  s     xx**+6::rH   c                6    U R                   R                  5       $ )z$The array that Series.values returns)rY  external_valuesra   s    rF   r  "SingleBlockManager.external_values  s    {{**,,rH   c                .    U R                   R                  $ )z%The array that Series._values returns)rY  r   ra   s    rF   internal_values"SingleBlockManager.internal_values  s    {{!!!rH   c                .    U R                   R                  $ )z#The array that Series.array returns)rY  r%  ra   s    rF   r%  SingleBlockManager.array_values      {{'''rH   c                v    U R                   R                  (       a  U R                  SS9$ U R                  5       $ )NFrC  )rY  r  rH  r   ra   s    rF   r  #SingleBlockManager.get_numeric_data  s-    ;;!!99%9((  rH   c                .    U R                   R                  $ r^   )rY  _can_hold_nara   s    rF   r  SingleBlockManager._can_hold_na  r  rH   c                   U R                  S5      (       d/  U R                  R                  SS94U l        U R	                  5         U R
                  n[        U[        R                  5      (       a  [        UR                  U5      n[        U[        R                  5      (       a$  UR                  S:X  a  [        U5      S:X  a  US   nX#U'   g)z
Set values with indexer.

For SingleBlockManager, this backs s[indexer] = value

This is an inplace version of `setitem()`, mutating the manager/values
in place, not returning a new Manager (and Block), and thus never changing
the dtype.
r   TrC  r   )r   .N)r   rY  rH  rZ   _reset_cacher   rK   rM   rF  r   rN   rc   rD   )rb   r   r  r   s       rF   rX  "SingleBlockManager.setitem_inplace  s     %%a((;;+++68DKjj c2::&& (		59EeRZZ((UZZ1_Uq&MEGrH   c                    U R                   R                  U5      S   nU4U l        U R                  S   R                  U5      U R                  S'   U R	                  5         U $ )za
Delete single location from SingleBlockManager.

Ensures that self.blocks doesn't become empty.
r   )rY  rL  rZ   r\   r"  )rb   r   r   s      rF   rw  SingleBlockManager.idelete  sW     [[(+eyy|**73		!rH   c                    [        S5      e)zA
fast path for getting a cross-section
return a view of the data
zUse series._values[loc] insteadr_   )rb   r  s     rF   r  SingleBlockManager.fast_xs  s    
 ""CDDrH   c                    XR                   S   l        [        [        [	        U5      5      5      U R                   S   l        g)z
Set the values of the single block in place.

Use at your own risk! This does not check if the passed values are
valid for the current Block/SingleBlockManager (length, dtype, etc),
and this does not properly keep track of references.
r   N)rZ   r   r   r   rD   r$  )rb   r   s     rF   
set_valuesSingleBlockManager.set_values  s0     !'A#1%F2D#EA rH   c                    UR                   S:w  a  gU R                  S   R                  nUR                  S   R                  n[        X#5      $ )r  r   Fr   )rc   rZ   r   r&   )rb   r   leftrights       rF   r    SingleBlockManager._equal_values  sC     ::?{{1~$$Q&&D((rH   c                    U R                   nU" U5      n[        [        U5      5      n[        U 5      R	                  X45      nU$ r^   )r   r/   rD   r   r  )rb   r  r   r  r  r   s         rF   r|  !SingleBlockManager.grouped_reduce  s;    jj3ic#h'4j##C/
rH   r  )r  z
Literal[1]r  )r   r1   r   r.   rj   rf   r  r  r  r^   )r   r<   r  r.   r   r  r  r   )r  r.   r  r  )r   r  r  )r  r1   )r  r<   )r   znpt.NDArray[np.bool_]r  r   )r  r   r   r=   r  r   r  )r  r>   r  )r  rB   r  r  )r  r   )r   r<   r  r  r  )+r   r  r  r  r  r  rc   rh   rg   r  r   rk   r  r   r  r  r   r  r  r  r   rY  r   r   rW   rX   r  r  r  rN   r   r  r  r%  r  r  rX  rw  r  r)  r   r|  r  rU   rH   rF   r   r     s   $  IO "'	  	
 
 
?
? 
? 
	
? 
? LP	!	!&+	!3I	!		! 	!	J7B&0   %  %  
  *(,   ! !;-"(!
 ( (8
EF
)rH   r   c                    [        XUS9nU(       a  WR                  5         W$ ! [         aY  nU  Vs/ s H  ofR                  PM     Os  snf nn[        S U 5       5      n[	        XS   R
                  SS  X5         S nANwS nAff = f)Nr  c              3  >   #    U  H  oR                   S    v   M     g7f)r   N)r{   )ru   r   s     rF   rw   3create_block_manager_from_blocks.<locals>.<genexpr>  s     7		!s   r   r   )r  r   r   r  r  r{   r0  )	rZ   r\   r  rj   r   errr   r   r  s	            rF    create_block_manager_from_blocksr5    s    L6:JK   "J  L(./**//777	 1IOOAB,?KKLs   
% 
BBA	6BBc                     [        XU5      n[        XASS9nU(       a  WR                  5         W$ ! [         a-  n[        [	        U 5      U S   R
                  X5         S nANKS nAff = f)NFr  r   )_form_blocksr  r   r  rD   r{   r0  )r   r\   r  r   rZ   r   es          rF   'create_block_manager_from_column_arraysr9  	  se    "Hf486%@   "J	  H VfQiootGGHs   1 
A(#A##A(c                   [        [        [        U /UQ5      5      n[        U5      S::  a  USSS2   n[        S U 5       5      n[        U5      S::  a  USSS2   nXE:X  a  Ub  UeUS   S:X  a  [	        S5      e[	        SU SU 35      e)	z.raise a helpful message about our constructionrA  Nr  c              3  8   #    U  H  n[        U5      v   M     g 7fr^   rs   rt   s     rF   rw   +raise_construction_error.<locals>.<genexpr>.	  s     +dCGGdry   r   z)Empty data passed with indices specified.zShape of passed values is z, indices imply )rz   mapr  rD   r   )r  block_shaper\   r8  passedimplieds         rF   r  r  "	  s     3sY5567F
6{a"+d++G
7|q$B$- Q]1~DEE
1&9I'S
TTrH   c                f    U S   R                   n[        U5      (       a  [        U5      nX!4$ SnX!4$ )Nr   r   )rN   r   id)tuprN   seps      rF   _grouping_funcrE  ?	  s>    FLLE5!! i : :rH   c                >   [        U 5      nU(       d  [        X25      $ [        R                  " U[        5      n/ nU GHQ  u  u  pgn[        U5      n	[        U[        R                  5      (       a  UR                  S;   n
[        UR                  [        [        45      (       a  [        R                  " [        5      n[        X5      u  pU
(       a  [!        U5      nU	" U[#        U5      SS9nUR%                  U5        M  ['        U5      (       a;  U Vs/ s H  nU	" US   [#        US   5      SS9PM     nnUR)                  U5        GM  U Vs/ s H$  nU	" [+        US   S5      [#        US   5      SS9PM&     nnUR)                  U5        GMT     U$ s  snf s  snf )Nr  rA  r  r   r   )r    _tuples_to_blocks_no_consolidater  r  rE  r5   rK   rM   rN   r  
issubclassr   rO   bytesrJ   _stack_arraysr+   r   r}  r   r  r3   )r   r  r   tuplesgrouperru  r  rN   	tup_block
block_type	is_dtliker   r   r   r  dtype_blockss                   rF   r7  r7  L	  s   vF/== 7GC!(
I#E*
eRXX&&

d*I%**sEl33( -i ?F7?V~i/HqQCJJsO '' #"A 1Q4>!A$+?aH"   JJ|$ #	 #A &qtQ/>!A$;OVW #	   JJ|$; ")< Js   !F+Fc                    [        XSS9 VVVs/ s H$  u  u  p#n[        [        USS9[        U5      US9PM&     snnn$ s  snnnf )NTr   rA  r  rT  )r   r8   r3   r   )rK  r   r   r   r   s        rF   rG  rG  z	  sR      #6=	  >OXas 	s+~a7Hs	
  >	  s   +?c                    [        U SS06u  p#US   n[        U5      /UR                  Q7n[        R                  " XQS9n[        U5       H	  u  pxXU'   M     Xb4$ )Nr   Tr   rP   )r   rD   r{   rM   r  r   )	rK  rN   r   r   firstr{   stackedr   r   s	            rF   rJ  rJ  	  sc    V1D1I1IE['5;;'Ehhu*GF#
 $ rH   c                    S n[         R                  " [        XS9U5      n/ nU H(  u  u  pEn[        [	        U5      XTS9u  px[        Xs5      nM*     [        U5      $ )zB
Merge blocks having same dtype, exclude non-consolidating blocks
c                    U R                   $ r^   )_consolidate_key)r  s    rF   r  _consolidate.<locals>.<lambda>	  s
    Q''rH   r  )rN   can_consolidate)r  r  r  _merge_blocksrJ  r4   rz   )	rZ   gkeyrL  r  r  rN   group_blocksmerged_blocksr  s	            rF   r  r  	  sh    
 (Dv 8$?G J3:/!	<(e
 #==
	 4;
 rH   c                   [        U 5      S:X  a  U S4$ U(       Ga  [        R                  " U  Vs/ s H  o3R                  R                  PM     sn5      n[        U S   R                  [        R                  5      (       a1  [        R                  " U  Vs/ s H  o3R                  PM     sn5      nOEU  Vs/ s H  ofR                  PM     nn[        [        [           U5      nUS   R                  USS9n[        R                  " U5      n	XY   nXI   n[        U5      n
[        XZS9/S4$ U S4$ s  snf s  snf s  snf )Nr   Fr   rB  r   T)rD   rM   r  r   r  rK   rN   vstackr   r   r   r)   _concat_same_typeargsortr   r8   )rZ   rN   rY  r   r  
new_valuesr   bvalsbvals2ra  r   s              rF   rZ  rZ  	  s    6{au} ~~F&KFqzz':':F&KL fQioorxx00
 f#=fHHf#=>J+126CZZ6E2(#>?GF44V!4DJ**\*(
#,L)Z67== 5=/ 'L $>2s   D1D67D;c                j   [        U [        5      (       a  SU [        R                  " X5      4$ [        U [        R
                  5      (       a  U R                  R                  S:w  a"  [        U SS 5      n[        [        U 5      U5      e[        U 5      nU(       d  [        XA5      nSU[        U5      4$ )Nr   r   rN   fancy)rK   r   r  	slice_lenrM   rF  rN   r  r   	TypeErrorr   r   r-   rD   )r  lengthr  rN   r   s        rF   r  r  	  s     "E**""#3<
 	
 +RZZ88%%**c1,gt<ED!12E::%&67+G<GW--rH   c                $   [        U [        5      (       aw  [        U5      R                  U R                  5      n[
        R                  " XR                  5      nUR                  SU R                   S35      n[        R                  " XPS9$ [        U 5      (       ay  [        [        U 5      n U R                  5       nUR                  / U S9nUu  pUS:X  d   U5       eS[
        R                   " U	4[
        R"                  S9-  n
UR%                  U
SUS9$ [        U [        5      (       a%  U R                  5       nUR'                  XS9nX'S S & U$ [
        R(                  " XS9nUR+                  U5        U R,                  S	;   a  [/        U5      nU$ )
NzM8[]rP   r   r  T)r  r=  )r{   rN   r  )rK   r!   r   as_unitunitrM   full_valuer   r(   _simple_newr   r   r"   r  r  onesr<  r   _emptyr  r=  r  r+   )rN   r{   r=  tsi8values
dt64valuesr   missing_arrncolsr{  	empty_arrmissing_arr_nps               rF   r  r  	  s_   %))z"**5::6775)),]]SA#67
((AA	U	#	#^U+((*((5(9z 5 z%99		dzRR	E>	*	* ((*jjuj:#A %5J'::;NKNrH   )rE   zlist[DtypeObj]r  zDtypeObj | None)rN   r>   r  np.dtype)TT)
rZ   r  r\   r[   r  rf   rj   rf   r  r  )
r   r  r\   r[   r  rf   r   rJ  r  r  r^   )
r  r  r>  r@   r\   r[   r8  zValueError | Noner  r
   )rC  ztuple[int, ArrayLike]r  ztuple[int, DtypeObj])r   r  r  rf   r   rJ  r  r  )r  r  )rN   rz  )rZ   rY   r  rY   )rZ   r  rN   r>   rY  rf   r  ztuple[list[Block], bool])r  r  ri  r  r  rf   )rN   r>   r{   r@   r  r<   )s
__future__r   collections.abcr   r   r   r  typingr   r   r	   r
   r   r   r   rh  numpyrM   pandas._config.configr   pandas._libsr   r  r   r  r   pandas._libs.internalsr   r   pandas._libs.tslibsr   pandas.errorsr   r   pandas.util._decoratorsr   pandas.util._exceptionsr   pandas.util._validatorsr   pandas.core.dtypes.castr   r   r   pandas.core.dtypes.commonr   r   r   pandas.core.dtypes.dtypesr    r!   r"   r#   pandas.core.dtypes.genericr$   r%   pandas.core.dtypes.missingr&   r'   pandas.core.algorithmscore
algorithmspandas.core.arraysr(   pandas.core.arrays._mixinsr)   pandas.core.baser*   pandas.core.constructionr+   r,   pandas.core.indexersr-   pandas.core.indexes.apir.   r/   r0   pandas.core.internals.blocksr1   r2   r3   r4   r5   r6   r7   r8   pandas.core.internals.opsr9   r:   r;   pandas._typingr<   r=   r>   r?   r@   rA   pandas.api.extensionsrB   rG   rQ   rS   r  r   r5  r9  r  rE  r7  rG  rJ  r  rZ  r  r  rU   rH   rF   <module>r     s   " 
      , 
 * 3 4 7 
 
 
 ' & , B ) 7 
	 	 	
 )  5$&
c
| c
LRT<,,.> RTj\) \L	 !	
  	
 4
  	
 >  	UUU U 	U
 U:
+\
"   ( ;?  F.(.25.CG.. rH   