
    EgJ                       d dl mZ d dlmZmZ d dlZd dlZd dlm	Z	m
ZmZmZ d dlmZ d dlmZ d dlmZ d dlmZmZ d d	lmZmZmZ d d
lmZ d dlmZm Z  d dl!m"Z"m#Z#m$Z$ d dl%m&Z& d dl'm(Z( d dl)m*Z*m+Z+ d dl,m-Z-m.Z. er"d dl/m0Z0 d dl1m2Z2m3Z3m4Z4m5Z5m6Z6 d dl7m8Z8 d dl)m9Z9m:Z: dEdZ;dFd Z<dGd%Z=dHd*Z>dId/Z?dJd1Z@dKd7ZA G d8 d9          ZBdLd=ZCdMd@ZDdNdCZEdOdDZFdS )P    )annotations)TYPE_CHECKINGcastN)NaTalgos	internalslib)NA)cache_readonly)find_stack_level)ensure_dtype_can_hold_nafind_common_type)is_1d_only_ea_dtype	is_scalarneeds_i8_conversion)concat_compat)ExtensionDtypeSparseDtype)is_valid_na_for_dtypeisnaisna_all)ensure_wrapped_if_datetimelike)ArrayManager)ensure_block_shapenew_block_2d)BlockManagermake_na_array)Sequence)	ArrayLikeAxisIntDtypeObj	Manager2DShape)Index)BlockBlockPlacementmgrslist[ArrayManager]axeslist[Index]concat_axisr    returnr"   c                    |dk    r| d                              | |          S |dk    sJ | d                             | |          S )z
    Concatenate array managers into one.

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

    Returns
    -------
    ArrayManager
       r   )concat_verticalconcat_horizontal)r'   r)   r+   s      Q/var/www/sysmax/venv/lib/python3.11/site-packages/pandas/core/internals/concat.py_concatenate_array_managersr2   F   sV      aAw&&tT222 aAw((t444    copyboolc                   |o|dk    }t          | d         d         t                    r"t          || |          }t          |||          S |dk    r-t          || |          }|d                             ||          S t          |           dk    r| d         d         j        dk    r| d         d         j        d         j        t          j
        t          j        fv rit          fd| D                       rNt          |           dk    r;t          d |D                       }t          | |          }t          |f|          S t          || |          }t          |          dk    r'|d         }|                    d          }	||	_        |	S t%          |          }
g }|
D ]\  }}|d         }|j        }t)          |          rd |D             }|j        st          j        |d          }nIt/          |j                  r$t1          |dd	
          }t3          |d          }nt1          |d          }t5          |          }|j        j        |j        k    }nt9          ||          }d}|r|                    ||          }nt=          ||          }|                    |           t          t          |          |          S )z
    Concatenate block managers into one.

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

    Returns
    -------
    BlockManager
    r   c              3  >   K   | ]\  }}t          |          V  d S N)_is_homogeneous_mgr).0mgr_first_dtypes      r1   	<genexpr>z'concatenate_managers.<locals>.<genexpr>   s2      VVfc1'[99VVVVVVr3   r.   c              3  4   K   | ]}t          |          V  d S r8   )len)r:   xs     r1   r>   z'concatenate_managers.<locals>.<genexpr>   s(      33c!ff333333r3   F)deepc                &    g | ]}|j         j        S  )blockvaluesr:   jus     r1   
<listcomp>z(concatenate_managers.<locals>.<listcomp>   s    999BHO999r3   axisTrK   ea_compat_axis   )ndim)r4   )	placement) 
isinstancer   _maybe_reindex_columns_na_proxyr2   r0   r@   nblocksblocksdtypenpfloat64float32alltuple_concat_homogeneous_fastpathr   r4   r)   _get_combined_planrE   _is_uniform_join_unitsis_extensionconcatenater   r   r   r   rF   _concatenate_join_unitsmake_block_same_classr   append)mgrs_indexersr)   r+   r4   
needs_copyr'   shapenbr;   outconcat_planrT   rP   
join_unitsunitblkvalsrF   fastpathbr=   s                       @r1   concatenate_managersro   ^   s   $ *+*J -"1%|44 
.t]JOO +$
 
 	
 a.t]JOOAw((t444
=A-"21"5"="A"A#A&q)0392:rz222 VVVVVVVVV1&&** 33d333331-TT#RE4000*4
KKD
4yyA~~1ghhEh""
$T**KF "- # #	:!}j!*-- 	99j999D# 5 1555$SY// 5&t!DIII+F;;;&t!4443F;;Fz'6<7HH,ZdCCCFH 	:))&I)FFAAVy999Aaft,,,r3   rc   0list[tuple[BlockManager, dict[int, np.ndarray]]]rd   list[BlockManager]c                    g }|D ]t\  }}|                                 D ]-\  }}|                    | |         ||         |dddd          }.|r|s|                                }|                    |           u|S )z
    Reindex along columns so that all of the BlockManagers being concatenated
    have matching columns.

    Columns added in this reindexing have dtype=np.void, indicating they
    should be ignored when choosing a column's final dtype.
    FT)rK   r4   
only_slice
allow_dupsuse_na_proxy)itemsreindex_indexerr4   rb   )r)   rc   rd   new_mgrsr;   indexersiindexers           r1   rR   rR      s     H&  X #..** 		 		JAw%%Q! &  CC  	h 	((**COr3   r;   r   r=   r!   c                    | j         dk    rdS | j        d         }|j        j        r|j        j        j        dk    sdS |j        |k    S )zC
    Check if this Manager can be treated as a single ndarray.
    r.   Fr   )rS   rT   mgr_locsis_slice_likeas_slicesteprU   )r;   r=   rk   s      r1   r9   r9      sR     {au
*Q-CL& 3<+@+E+J+Ju9##r3   re   r#   np.dtyper%   c           	        t          d | D                       r^d | D             }t          j        |          j        }t	          j        t          |d                             }t          ||          }|S t          j        ||          }|t          j	        k    rt          j        }nt          j        }d}| D ]k\  }	}
|	j        d         }||z   }d|
v r0 ||	j        d         j        |
d         |dd||f                    n|	j        d         j        |dd||f<   ||z  }lt	          j        t          |d                             }t          ||          }|S )zl
    With single-Block managers with homogeneous dtypes (that can already hold nan),
    we avoid [...]
    c              3  "   K   | ]
\  }}| V  d S r8   rD   )r:   r<   ry   s      r1   r>   z/_concat_homogeneous_fastpath.<locals>.<genexpr>  s(      
9
9KAxx<
9
9
9
9
9
9r3   c                B    g | ]\  }}|j         d          j        j        S )r   )rT   rF   T)r:   r;   r<   s      r1   rI   z0_concat_homogeneous_fastpath.<locals>.<listcomp>  s(    CCC63
1$&CCCr3   r   )rU   r.   N)rY   rV   r_   r   libinternalsr&   slicer   emptyrW   libalgostake_2d_axis0_float64_float64take_2d_axis0_float32_float32re   rT   rF   )rc   re   r=   arrsarrbprf   	take_funcstartr;   ry   mgr_lenends                r1   r[   r[      sy    
9
9=
9
9
999 CC]CCCnT""$(uQx99#r""	
(5
,
,
,Cbj  :		:	E&  X)A,go==I
1$AAAuSyL!    !$
1 4C59		$U58__	5	5B	c2		BIr3   +list[tuple[BlockPlacement, list[JoinUnit]]]c                z   g }| d         j         d         }d | D             }t          j        |          }t          |          D ]u\  }\  }}g }t          |           D ]D\  }	}
||	         }t	          |
|||          }t          |          }|                    |           E|                    ||f           v|S )Nr   c                    g | ]	}|j         
S rD   )blknos)r:   r;   s     r1   rI   z&_get_combined_plan.<locals>.<listcomp>/  s    ...#3:...r3   )max_len)re   r   get_concat_blkno_indexers	enumerate_get_block_for_concat_planJoinUnitrb   )r'   planr   blknos_listpairsindr   r   units_for_bpkr;   blknorf   rj   s                 r1   r\   r\   (  s     D1gmAG.....K2;??E&u-- ( (\fb oo 	& 	&FAs1IE+CUGLLLBB<<D%%%%R&''''Kr3   r   r&   r   intr   c                  | j         |         }t          |          t          |j                  k    r$|j        j        r|j        j        j        dk    r|}ng| j        |j                 }t          j	        ||          }t          |t                    r|                    |          }n|                    |          }|S )Nr.   )rT   r@   r}   r~   r   r   blklocsr{   r	   maybe_indices_to_slicerQ   r   slice_block_columnstake_block_columns)r;   r   r   r   rk   rf   ax0_blk_indexerslcs           r1   r   r   B  s     *U
C 2ww#cl####" $'*|'<'AQ'F'F+bj1('BB c5!! 	-((--BB'',,B Ir3   c                  ^    e Zd ZddZddZddZedd            Zedd            ZddZ	dS )r   rE   r%   r,   Nonec                    || _         d S r8   )rE   )selfrE   s     r1   __init__zJoinUnit.__init___  s    


r3   strc                Z    t          |           j         dt          | j                   dS )N())type__name__reprrE   )r   s    r1   __repr__zJoinUnit.__repr__b  s,    t**%;;TZ(8(8;;;;r3   rU   r!   r5   c                b   | j         sdS | j        }|j        j        dk    rdS |j        t          k    r6|j        }t          fd|                    d          D                       S |j        }|t          u r|j        k    rdS |t          u rt                    rdS t          |          S )z
        Check that we are all-NA of a type/dtype that is compatible with this dtype.
        Augments `self.is_na` with an additional check of the type of NA values.
        FVTc              3  8   K   | ]}t          |          V  d S r8   )r   )r:   rA   rU   s     r1   r>   z,JoinUnit._is_valid_na_for.<locals>.<genexpr>s  s.      XX1,Q66XXXXXXr3   K)order)is_narE   rU   kindobjectrF   rY   ravel
fill_valuer   r
   r   r   )r   rU   rk   rF   na_values    `   r1   _is_valid_na_forzJoinUnit._is_valid_na_fore  s    
 z 	5j9>S  49ZFXXXXSV@W@WXXXXXX>s??syE11 5r>>1%88> 5 %Xu555r3   c                   | j         }|j        j        dk    rdS |j        sdS |j        }|j        dk    rdS t          |j        t                    rdS |j        dk    r7|d         }t          |          rt          |          sdS t          |          S |d         d         }t          |          rt          |          sdS t          d |D                       S )Nr   TFr   r.   c              3  4   K   | ]}t          |          V  d S r8   )r   )r:   rows     r1   r>   z!JoinUnit.is_na.<locals>.<genexpr>  s(      77x}}777777r3   )rE   rU   r   _can_hold_narF   sizerQ   r   rO   r   r   r   rY   )r   rk   rF   vals       r1   r   zJoinUnit.is_na  s    j9>S  4 	5;!4flK00 	5;!)CS>> c uF###)A,CS>> c u77777777r3   c                8    | j         }|j        j        dk    rdS dS )z{
        Will self.is_na be True after values.size == 0 deprecation and isna_all
        deprecation are enforced?
        r   TFrE   rU   r   )r   rk   s     r1   )is_na_after_size_and_isna_all_deprecationz2JoinUnit.is_na_after_size_and_isna_all_deprecation  s$     j9>S  4ur3   empty_dtyper   c                v   |!| j         j        j        dk    r| j         j        S |}|                     |          rt| j         j        }|t          j        d          k    r5t          t
          j        | j         j                  }|j        r
|d         d }t          || j         j
        |          S | j         j        S )Nr   r   )r   r   )rE   rU   r   rF   r   rV   r   ndarrayr   r   re   )r   r   upcasted_nar   	blk_dtyperF   s         r1   get_reindexed_valueszJoinUnit.get_reindexed_values  s     4:#3#8C#?#?:$$$J$$[11 P J,	 2 222 ""*dj.?@@F{ *vd|';%)
$[$*2BJOOO:$$r3   N)rE   r%   r,   r   )r,   r   )rU   r!   r,   r5   )r,   r5   )r   r!   r,   r   )
r   
__module____qualname__r   r   r   r   r   r   r   rD   r3   r1   r   r   ^  s           < < < <6 6 6 6@ 8 8 8 ^8<    ^% % % % % %r3   r   ri   list[JoinUnit]r   c                   t          |           \  }t          d | D                       }t          |          fd| D             }t          d |D                       r/d |D             }t          |dd          }t	          |d          }nt          |d	
          }|k    r3|j        k    r(t          j        dt          t                                 |S )zB
    Concatenate values from several join units along axis=1.
    c              3  @   K   | ]}|j         j        j        d k    V  dS r   Nr   r:   rj   s     r1   r>   z*_concatenate_join_units.<locals>.<genexpr>  /      NN4$**/36NNNNNNr3   c                >    g | ]}|                                S ))r   r   )r   )r:   rH   r   r   s     r1   rI   z+_concatenate_join_units.<locals>.<listcomp>  s<        	K[QQ  r3   c              3  >   K   | ]}t          |j                  V  d S r8   r   rU   r:   ts     r1   r>   z*_concatenate_join_units.<locals>.<genexpr>  s-      
;
;Aqw''
;
;
;
;
;
;r3   c                R    g | ]$}t          |j                  r|n|d ddf         %S )r   Nr   r   s     r1   rI   z+_concatenate_join_units.<locals>.<listcomp>  sL     
 
 
  #17++AA1aaa4
 
 
r3   r   TrL   rN   r.   rJ   a  The behavior of DataFrame concatenation with empty or all-NA entries is deprecated. In a future version, this will no longer exclude empty or all-NA columns when determining the result dtypes. To retain the old behavior, exclude the relevant entries before the concat operation.)
stacklevel)
_get_empty_dtypeany_dtype_to_na_valuer   r   rU   warningswarnFutureWarningr   )ri   r4   empty_dtype_futurehas_none_blocks	to_concatconcat_valuesr   r   s         @@r1   r`   r`     s;    '7z&B&B#K#NN:NNNNNO$[/BBK      I
 
;
;
;
;
;;; 9

 
 	
 
 
	 &iaMMM*=!<< &ia888(((----M(
 +--    r3   rU   r   c                :   t          | t                    r| j        S | j        dv r|                     d          S | j        dv r|                     d          S | j        dk    rdS | j        dv r|sdS t
          j        S | j        dk    rt
          j        S t          )	z2
    Find the NA value to go with this dtype.
    mMr   fcNaNrn   NiuO)rQ   r   r   r   r   rV   nanNotImplementedError)rU   r   s     r1   r   r     s     %(( ~	t		zz%   	t		zz%   	s		t	t		 	4v	s		v
r3   Sequence[JoinUnit]tuple[DtypeObj, DtypeObj]c                D   t          j        d | D                       r| d         j        j        }||fS t	          d | D                       }d | D             }t          |          sd | D             }t          |          }|rt          |          }|}t          |          t          |           k    rgd | D             }t          |          sd | D             }t          |          t          |          k    r t          |          }|rt          |          }||fS )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
    c                &    g | ]}|j         j        S rD   )rE   rU   rG   s     r1   rI   z$_get_empty_dtype.<locals>.<listcomp>  s    AAARX^AAAr3   r   c              3  @   K   | ]}|j         j        j        d k    V  dS r   r   r   s     r1   r>   z#_get_empty_dtype.<locals>.<genexpr>  r   r3   c                4    g | ]}|j         	|j        j        S rD   )r   rE   rU   r   s     r1   rI   z$_get_empty_dtype.<locals>.<listcomp>  s$    HHH4TZHdjHHHr3   c                P    g | ]#}|j         j        j        d k    |j         j        $S r   r   r   s     r1   rI   z$_get_empty_dtype.<locals>.<listcomp>   s7     
 
 
!%tz7G7LPS7S7SDJ7S7S7Sr3   c                4    g | ]}|j         	|j        j        S rD   )r   rE   rU   r   s     r1   rI   z$_get_empty_dtype.<locals>.<listcomp>*  s6     
 
 
A
J
 
 
r3   c                P    g | ]#}|j         j        j        d k    |j         j        $S r   r   r   s     r1   rI   z$_get_empty_dtype.<locals>.<listcomp>0  s7       %)4:;K;PTW;W;W
 ;W;W;Wr3   )r	   dtypes_all_equalrE   rU   r   r@   r   r   )ri   r   r   dtypesrU   dtype_futuredtypes_futures          r1   r   r     sr    AAjAAABB ( m)/K''NN:NNNNNOHH:HHHFv;; 

 
)3
 
 
 V$$E 0(//L
6{{c*oo%%
 
"
 
 

 =!! 	 -7  M v;;#m,,,,+M::L F7EE,r3   c                    | d         j         j        j        dk    rdS t          fd| D                       o3t          fd| D                       ot          d | D                       S )z
    Check if the join units consist of blocks of uniform type that can
    be concatenated using Block.concat_same_type instead of the generic
    _concatenate_join_units (which uses `concat_compat`).

    r   r   Fc              3  ^   K   | ]'}t          |j                  t                    u V  (d S r8   )r   rE   r:   rH   firsts     r1   r>   z)_is_uniform_join_units.<locals>.<genexpr>H  s6      ??bDNNd5kk)??????r3   c              3  h   K   | ],}|j         j        j        k    p|j         j        j        d v V  -dS )iubNr   r  s     r1   r>   z)_is_uniform_join_units.<locals>.<genexpr>K  sZ       
 

 	 HNek) , x~"e+	
 
 
 
 
 
r3   c              3  >   K   | ]}|j          p|j        j        V  d S r8   )r   rE   r^   rG   s     r1   r>   z)_is_uniform_join_units.<locals>.<genexpr>U  s0      GGbL1BH1GGGGGGr3   )rE   rU   r   rY   )ri   r  s    @r1   r]   r]   <  s     qME{3u 	????J????? 	H 	 
 
 
 

 !
 
 
 	
 	
	H 	GGJGGGGGr3   )r'   r(   r)   r*   r+   r    r,   r"   )r)   r*   r+   r    r4   r5   r,   r"   )r)   r*   rc   rp   rd   r5   r,   rq   )r;   r   r=   r!   r,   r5   )re   r#   r=   r   r,   r%   )r'   rq   r,   r   )
r;   r   r   r&   r   r   r   r   r,   r%   )ri   r   r4   r5   r,   r   )rU   r!   r   r5   )ri   r   r,   r   )ri   r   r,   r5   )G
__future__r   typingr   r   r   numpyrV   pandas._libsr   r   r   r   r   r	   pandas._libs.missingr
   pandas.util._decoratorsr   pandas.util._exceptionsr   pandas.core.dtypes.castr   r   pandas.core.dtypes.commonr   r   r   pandas.core.dtypes.concatr   pandas.core.dtypes.dtypesr   r   pandas.core.dtypes.missingr   r   r   pandas.core.constructionr   #pandas.core.internals.array_managerr   pandas.core.internals.blocksr   r   pandas.core.internals.managersr   r   collections.abcr   pandas._typingr   r    r!   r"   r#   pandasr$   r%   r&   r2   ro   rR   r9   r[   r\   r   r   r`   r   r   r]   rD   r3   r1   <module>r     s   " " " " " "                        $ # # # # # 2 2 2 2 2 2 4 4 4 4 4 4                
 4 3 3 3 3 3                 D C C C C C < < < < < <              
  ((((((                     5 5 5 50i- i- i- i-X   D
$ 
$ 
$ 
$, , , ,^   4   8h% h% h% h% h% h% h% h%V+ + + +\   .+ + + +\     r3   