
    Pi0;                    |   d dl mZ d dlmZmZ d dlZd dlmZm	Z
mZmZ d dlmZ d dlmZ d dlmZmZ d dlmZmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dl m!Z!m"Z" d dl#m$Z$m%Z% er"d dl&m'Z'm(Z( d dl)m*Z*m+Z+m,Z,m-Z- d dl.m/Z/ d dl m0Z0m1Z1 d?dZ2d@d Z3dAd$Z4dBd)Z5dCd,Z6dDd2Z7 G d3 d4          Z8dEd8Z9dFd;Z:dGd=Z;dHd>Z<dS )I    )annotations)TYPE_CHECKINGcastN)NaTalgos	internalslib)NA)cache_readonly)ensure_dtype_can_hold_nafind_common_type)is_1d_only_ea_dtypeneeds_i8_conversion)concat_compat)ExtensionDtypeis_valid_na_for_dtype)ensure_wrapped_if_datetimelike)ensure_block_shapenew_block_2d)BlockManagermake_na_array)	GeneratorSequence)	ArrayLikeAxisIntDtypeObjShape)Index)BlockBlockPlacementaxeslist[Index]concat_axisr   copyboolreturnr   c                $   |o|dk    }|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 g }
t          |          D ]\  }}|d         }|j        }t#          |          rd |D             }|j        st          j        |d          }nIt)          |j                  r$t+          |dd	
          }t-          |d          }nt+          |d          }t/          |          }|j        j        |j        k    }nt3          ||          }d}|r|                    ||          }nt7          ||          }|
                    |           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      p/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/pandas/core/internals/concat.py	<genexpr>z'concatenate_managers.<locals>.<genexpr>b   s2      VVfc1'[99VVVVVV       c              3  4   K   | ]}t          |          V  d S r*   )len)r,   xs     r0   r1   z'concatenate_managers.<locals>.<genexpr>g   s(      33c!ff333333r2   Fdeepc                &    g | ]}|j         j        S  )blockvaluesr,   jus     r0   
<listcomp>z(concatenate_managers.<locals>.<listcomp>{   s    999BHO999r2   axisTrA   ea_compat_axis   )ndim)r%   )	placement)_maybe_reindex_columns_na_proxyconcat_horizontalr5   nblocksblocksdtypenpfloat64float32alltuple_concat_homogeneous_fastpathr   r%   r"   _get_combined_planr;   _is_uniform_join_unitsis_extensionconcatenater   r   r   r   r<   _concatenate_join_unitsmake_block_same_classr   append)mgrs_indexersr"   r$   r%   
needs_copymgrsshapenbr-   outrJ   rF   
join_unitsunitblkvalsr<   fastpathbr/   s                      @r0   concatenate_managersre   =   s   $ *+*J 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""
F "4D!9!9 # #	:!}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,,,r2   rY   0list[tuple[BlockManager, dict[int, np.ndarray]]]rZ   list[BlockManager]c           
         g }|D ]o\  }}|                                 D ]&\  }}|                    | |         ||ddd          }'|r|s|                    d          }|                    |           p|S )z
    Reindex along columns so that all of the BlockManagers being concatenated
    have matching columns.

    Columns added in this reindexing have dtype=np.void, indicating they
    should be ignored when choosing a column's final dtype.
    T)rA   
only_slice
allow_dupsuse_na_proxyr7   )itemsreindex_indexerr%   rX   )r"   rY   rZ   new_mgrsr-   indexersiindexers           r0   rG   rG      s     H&  X #..** 	 	JAw%%Q! &  CC  	&h 	&(((%%COr2   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.
    r3   Fr   )rI   rJ   mgr_locsis_slice_likeas_slicesteprK   )r-   r/   ra   s      r0   r+   r+      sR     {au
*Q-CL& 3<+@+E+J+Ju9##r2   r\   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 r*   r:   )r,   r.   ro   s      r0   r1   z/_concat_homogeneous_fastpath.<locals>.<genexpr>   s(      
9
9KAxx<
9
9
9
9
9
9r2   c                B    g | ]\  }}|j         d          j        j        S )r   )rJ   r<   T)r,   r-   r.   s      r0   r?   z0_concat_homogeneous_fastpath.<locals>.<listcomp>   s(    CCC63
1$&CCCr2   r   )rK   r3   N)rO   rL   rU   r{   libinternalsr!   slicer   emptyrM   libalgostake_2d_axis0_float64_float64take_2d_axis0_float32_float32r\   rJ   r<   )rY   r\   r/   arrsarrbpr]   	take_funcstartr-   ro   mgr_lenends                r0   rQ   rQ      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Ir2   r[   0Generator[tuple[BlockPlacement, list[JoinUnit]]]c              #  8  K   | d         j         d         }d | D             }t          j        |          }|D ]a\  }}g }t          |           D ]D\  }}||         }	t	          |||	|          }
t          |
          }|                    |           E||fV  bd S )Nr   c                    g | ]	}|j         
S r:   )blknos)r,   r-   s     r0   r?   z&_get_combined_plan.<locals>.<listcomp>   s    ...#3:...r2   )max_len)r\   r|   get_concat_blkno_indexers	enumerate_get_block_for_concat_planJoinUnitrX   )r[   r   blknos_listpairsr   r   units_for_bpkr-   blknor]   r`   s               r0   rR   rR      s       1gmAG.....K2;??E  
 oo 	& 	&FAs1IE+CUGLLLBB<<D%%%%, r2   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 )Nr3   )rJ   r5   rs   rt   ru   rv   blklocsrq   r	   maybe_indices_to_slice
isinstancer}   slice_block_columnstake_block_columns)r-   r   r   r   ra   r]   ax0_blk_indexerslcs           r0   r   r     s     *U
C 2ww#cl####" $'*|'<'AQ'F'F+bj1('BB c5!! 	-((--BB'',,B Ir2   c                  F    e Zd ZddZddZddZedd            ZddZdS )r   r;   r    r'   Nonec                    || _         d S r*   )r;   )selfr;   s     r0   __init__zJoinUnit.__init__.  s    


r2   strc                @    t          |           j         d| j        dS )N())type__name__r;   )r   s    r0   __repr__zJoinUnit.__repr__1  s$    t**%77
7777r2   rK   r   r&   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 r*   r   )r,   r6   rK   s     r0   r1   z,JoinUnit._is_valid_na_for.<locals>.<genexpr>B  s.      XX1,Q66XXXXXXr2   K)order)is_nar;   rK   kindobjectr<   rO   ravel
fill_valuer   r
   r   r   )r   rK   ra   r<   na_values    `   r0   _is_valid_na_forzJoinUnit._is_valid_na_for4  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5r2   c                8    | j         }|j        j        dk    rdS dS )Nr   TFr;   rK   r   )r   ra   s     r0   r   zJoinUnit.is_naT  s"    j9>S  4ur2   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   )r;   rK   r   r<   r   rL   r   ndarraysizer   r\   )r   r   upcasted_nar   	blk_dtyper<   s         r0   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:$$r2   N)r;   r    r'   r   )r'   r   )rK   r   r'   r&   )r'   r&   )r   r   r'   r   )	r   
__module____qualname__r   r   r   r   r   r   r:   r2   r0   r   r   -  s           8 8 8 86 6 6 6@    ^% % % % % %r2   r   r_   list[JoinUnit]r   c                J   t          |           t          d | D                       }t          |          fd| D             }t          d |D                       r/d |D             }t          |dd          }t	          |d          }nt          |d	
          }|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,   r`   s     r0   r1   z*_concatenate_join_units.<locals>.<genexpr>{  /      NN4$**/36NNNNNNr2   c                >    g | ]}|                                S ))r   r   )r   )r,   r>   r   r   s     r0   r?   z+_concatenate_join_units.<locals>.<listcomp>~  s<        	K[QQ  r2   c              3  >   K   | ]}t          |j                  V  d S r*   r   rK   r,   ts     r0   r1   z*_concatenate_join_units.<locals>.<genexpr>  s-      
;
;Aqw''
;
;
;
;
;
;r2   c                R    g | ]$}t          |j                  r|n|d ddf         %S )r   Nr   r   s     r0   r?   z+_concatenate_join_units.<locals>.<listcomp>  sG     
 
 
 %QW--:AA1QT7
 
 
r2   r   TrB   rD   r3   r@   )_get_empty_dtypeany_dtype_to_na_valuer   r   )r_   r%   has_none_blocks	to_concatconcat_valuesr   r   s        @@r0   rV   rV   u  s     #:..KNN:NNNNNO$[/BBK      I
 
;
;
;
;
;;; 9

 

 
 
	 &iaMMM*=!<< &ia888r2   rK   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NaNrd   NiuO)r   r   r   r   r   rL   nanNotImplementedError)rK   r   s     r0   r   r     s     %(( ~	t		zz%   	t		zz%   	s		t	t		 	4v	s		v
r2   Sequence[JoinUnit]c                    t          j        d | D                       r| d         j        j        }|S t	          d | D                       }d | D             }t          |          }|rt          |          }|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 r:   )r;   rK   r=   s     r0   r?   z$_get_empty_dtype.<locals>.<listcomp>  s    AAARX^AAAr2   r   c              3  @   K   | ]}|j         j        j        d k    V  dS r   r   r   s     r0   r1   z#_get_empty_dtype.<locals>.<genexpr>  r   r2   c                4    g | ]}|j         	|j        j        S r:   )r   r;   rK   r   s     r0   r?   z$_get_empty_dtype.<locals>.<listcomp>  s$    HHH4TZHdjHHHr2   )r	   dtypes_all_equalr;   rK   r   r   r   )r_   r   r   dtypesrK   s        r0   r   r     s     AAjAAABB  m)/NN:NNNNNOHH:HHHFV$$E 0(//Lr2   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 r*   )r   r;   r,   r>   firsts     r0   r1   z)_is_uniform_join_units.<locals>.<genexpr>  s6      ??bDNNd5kk)??????r2   c              3  h   K   | ],}|j         j        j        k    p|j         j        j        d v V  -dS )iubNr   r   s     r0   r1   z)_is_uniform_join_units.<locals>.<genexpr>  sZ       
 

 	 HNek) , x~"e+	
 
 
 
 
 
r2   c              3  >   K   | ]}|j          p|j        j        V  d S r*   )r   r;   rT   r=   s     r0   r1   z)_is_uniform_join_units.<locals>.<genexpr>  s0      GGbL1BH1GGGGGGr2   )r;   rK   r   rO   )r_   r   s    @r0   rS   rS     s     qME{3u 	????J????? 	H 	 
 
 
 

 !
 
 
 	
 	
	H 	GGJGGGGGr2   )r"   r#   r$   r   r%   r&   r'   r   )r"   r#   rY   rf   rZ   r&   r'   rg   )r-   r   r/   r   r'   r&   )r\   r   r/   rw   r'   r    )r[   rg   r'   r   )
r-   r   r   r!   r   r   r   r   r'   r    )r_   r   r%   r&   r'   r   )rK   r   r   r&   )r_   r   r'   r   )r_   r   r'   r&   )=
__future__r   typingr   r   numpyrL   pandas._libsr   r   r   r   r|   r	   pandas._libs.missingr
   pandas.util._decoratorsr   pandas.core.dtypes.castr   r   pandas.core.dtypes.commonr   r   pandas.core.dtypes.concatr   pandas.core.dtypes.dtypesr   pandas.core.dtypes.missingr   pandas.core.constructionr   pandas.core.internals.blocksr   r   pandas.core.internals.managersr   r   collections.abcr   r   pandas._typingr   r   r   r   pandasr   r    r!   re   rG   r+   rQ   rR   r   r   rV   r   r   rS   r:   r2   r0   <module>r      sN   " " " " " "       
                $ # # # # # 2 2 2 2 2 2               4 3 3 3 3 3 4 4 4 4 4 4 < < < < < < C C C C C C              
         
                   ^- ^- ^- ^-B   B
$ 
$ 
$ 
$, , , ,^   ,   8E% E% E% E% E% E% E% E%P   @   .   2     r2   