o
    kìEiÏJ  ã                   @  s¼  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: dPdd„Z;dQd!d"„Z<dRd'd(„Z=dSd-d.„Z>dTd3d4„Z?dUd6d7„Z@dVd=d>„ZAG d?d@„ d@ƒZBdWdDdE„ZCdXdHdI„ZDdYdLdM„ZEdZdNdO„ZFdS )[é    )Ú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                 C  s4   |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*   © r/   úY/var/www/agentarbitrage/venv/lib/python3.10/site-packages/pandas/core/internals/concat.pyÚ_concatenate_array_managersF   s   r1   ÚcopyÚboolc                   s  |o|dk}t | d d tƒrt|| |ƒ}t|||ƒS |dkr-t|| |ƒ}|d  ||¡S t| ƒdkrt| d d jdkrt| d d jd j‰ ˆ t	j
t	jfv rtt‡ fdd„| D ƒƒrtt| ƒdkrttdd„ |D ƒƒ}t| |ˆ ƒ}t|f|ƒS t|| |ƒ}t|ƒdkr�|d }|jdd�}	||	_|	S t|ƒ}
g }|
D ]c\}}|d }|j}t|ƒrÝdd	„ |D ƒ}|js¸t	j|dd
�}nt|jƒrËt|ddd�}t|dd�}nt|dd
�}t|ƒ}|jj|jk}nt||d�}d}|rï|j||d�}nt||d�}| |¡ q—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  s   � | ]
\}}t |ˆ ƒV  qd S ©N)Ú_is_homogeneous_mgr©Ú.0ÚmgrÚ_©Úfirst_dtyper/   r0   Ú	<genexpr>Œ   ó   € z'concatenate_managers.<locals>.<genexpr>r,   c                 s  ó   � | ]}t |ƒV  qd S r4   )Úlen©r7   Úxr/   r/   r0   r<   ‘   ó   € F)Údeepc                 S  ó   g | ]}|j j‘qS r/   )ÚblockÚvalues©r7   Újur/   r/   r0   Ú
<listcomp>§   ó    z(concatenate_managers.<locals>.<listcomp>©ÚaxisT©rL   Úea_compat_axisé   )Úndim)r2   )Ú	placement) Ú
isinstancer   Ú_maybe_reindex_columns_na_proxyr1   r.   r?   ÚnblocksÚblocksÚdtypeÚnpÚfloat64Úfloat32ÚallÚtupleÚ_concat_homogeneous_fastpathr   r2   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*   r2   Ú
needs_copyr&   ÚshapeÚnbr8   ÚoutÚconcat_planrU   rQ   Ú
join_unitsÚunitÚblkÚvalsrF   ÚfastpathÚbr/   r:   r0   Úconcatenate_managers^   s\   ÿ
ÿ
rp   rd   ú0list[tuple[BlockManager, dict[int, np.ndarray]]]re   úlist[BlockManager]c                 C  sb   g }|D ]*\}}|  ¡ D ]\}}|j| | || |ddddd�}q|r)|s)| ¡ }| |¡ q|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)rL   r2   Ú
only_sliceÚ
allow_dupsÚuse_na_proxy)ÚitemsÚreindex_indexerr2   rc   )r(   rd   re   Únew_mgrsr8   ÚindexersÚiÚindexerr/   r/   r0   rS   Ê   s    ù	rS   r8   r   r;   r    c                 C  s<   | 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   )rT   rU   Úmgr_locsÚis_slice_likeÚas_sliceÚsteprV   )r8   r;   rl   r/   r/   r0   r5   ì   s   


r5   rf   r"   únp.dtyper$   c                 C  s  t dd„ | D ƒƒr&dd„ | D ƒ}t |¡j}t t|d ƒ¡}t||ƒ}|S tj||d�}|tj	kr6t
j}nt
j}d}| D ]8\}	}
|	jd }|| }d|
v rc||	jd j|
d |dd…||…f ƒ n|	jd j|dd…||…f< ||7 }q=t t|d ƒ¡}t||ƒ}|S )	zl
    With single-Block managers with homogeneous dtypes (that can already hold nan),
    we avoid [...]
    c                 s  s   � | ]\}}| V  qd S r4   r/   )r7   r9   ry   r/   r/   r0   r<     ó   € z/_concat_homogeneous_fastpath.<locals>.<genexpr>c                 S  s   g | ]\}}|j d  jj‘qS )r   )rU   rF   ÚTr6   r/   r/   r0   rI     s    z0_concat_homogeneous_fastpath.<locals>.<listcomp>r   ©rV   r,   N)rZ   rW   r`   r‚   Úlibinternalsr%   Úslicer   ÚemptyrX   ÚlibalgosÚtake_2d_axis0_float64_float64Útake_2d_axis0_float32_float32rf   rU   rF   )rd   rf   r;   ÚarrsÚarrÚbprg   Ú	take_funcÚstartr8   ry   Úmgr_lenÚendr/   r/   r0   r\   ù   s2   




ý

r\   ú+list[tuple[BlockPlacement, list[JoinUnit]]]c                 C  s’   g }| d j d }dd„ | D ƒ}t |¡}t|ƒD ]-\}\}}g }t| ƒD ]\}	}
||	 }t|
|||d�}t|ƒ}| |¡ q%| ||f¡ q|S )Nr   c                 S  s   g | ]}|j ‘qS r/   )Úblknos)r7   r8   r/   r/   r0   rI   /  s    z&_get_combined_plan.<locals>.<listcomp>)Úmax_len)rf   r„   Úget_concat_blkno_indexersÚ	enumerateÚ_get_block_for_concat_planÚJoinUnitrc   )r&   Úplanr“   Úblknos_listÚpairsÚindr’   rŒ   Úunits_for_bpÚkr8   Úblknorg   rk   r/   r/   r0   r]   (  s   
r]   rŒ   r%   rž   Úintr“   c                C  sx   | j | }t|ƒt|jƒkr|jjr|jjjdkr|}|S | j|j }t 	||¡}t
|tƒr5| |¡}|S | |¡}|S )Nr,   )rU   r?   r|   r}   r~   r   Úblklocsr{   r   Úmaybe_indices_to_slicerR   r…   Úslice_block_columnsÚtake_block_columns)r8   rŒ   rž   r“   rl   rg   Úax0_blk_indexerÚslcr/   r/   r0   r–   B  s   
ÿõ


ýr–   c                   @  sP   e Zd Zddd„Zddd	„Zddd„Zeddd„ƒZeddd„ƒZddd„Z	dS )r—   rE   r$   r+   ÚNonec                 C  s
   || _ d S r4   )rE   )ÚselfrE   r/   r/   r0   Ú__init___  s   
zJoinUnit.__init__Ústrc                 C  s   t | ƒj› dt| jƒ› d�S )Nú(ú))ÚtypeÚ__name__ÚreprrE   )r§   r/   r/   r0   Ú__repr__b  s   zJoinUnit.__repr__rV   r    r3   c                   sˆ   | j sdS | j}|jjdkrdS |jtkr'|j}t‡ fdd„|jdd�D ƒƒS |j}|t	u r5|jˆ kr5d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  s   � | ]}t |ˆ ƒV  qd S r4   )r   r@   rƒ   r/   r0   r<   s  r�   z,JoinUnit._is_valid_na_for.<locals>.<genexpr>ÚK)Úorder)Úis_narE   rV   ÚkindÚobjectrF   rZ   ÚravelÚ
fill_valuer   r	   r   r   )r§   rV   rl   rF   Úna_valuer/   rƒ   r0   Ú_is_valid_na_fore  s   

zJoinUnit._is_valid_na_forc                 C  s¤   | 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r9|d }t	|ƒr3t
|ƒs5dS t|ƒS |d d }t	|ƒrGt
|ƒsIdS tdd„ |D ƒƒS )Nr°   TFr   r,   c                 s  r>   r4   )r   )r7   Úrowr/   r/   r0   r<   ¢  rB   z!JoinUnit.is_na.<locals>.<genexpr>)rE   rV   r´   Ú_can_hold_narF   ÚsizerR   r   rP   r   r   r   rZ   )r§   rl   rF   Úvalr/   r/   r0   r³   …  s&   

zJoinUnit.is_nac                 C  s   | 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   rV   r´   )r§   rl   r/   r/   r0   Ú)is_na_after_size_and_isna_all_deprecation¤  s   z2JoinUnit.is_na_after_size_and_isna_all_deprecationÚempty_dtyper   c                 C  s€   |d u r| j jjdkr| j jS |}|  |¡r<| j j}|t d¡kr4ttj| j jƒ}|jr4|d d u r4d }t	|| j j
|ƒS | j jS )Nr°   rµ   )r   r   )rE   rV   r´   rF   r¹   rW   r   Úndarrayr¼   r   rf   )r§   rÀ   Úupcasted_nar·   Ú	blk_dtyperF   r/   r/   r0   Úget_reindexed_values¯  s   
zJoinUnit.get_reindexed_valuesN)rE   r$   r+   r¦   )r+   r©   )rV   r    r+   r3   )r+   r3   )rÀ   r    r+   r   )
r­   Ú
__module__Ú__qualname__r¨   r¯   r¹   r
   r³   r¿   rÄ   r/   r/   r/   r0   r—   ^  s    


 
r—   rj   úlist[JoinUnit]r   c                   sª   t | ƒ\‰ }tdd„ | D ƒƒ}tˆ |ƒ‰‡ ‡fdd„| D ƒ}tdd„ |D ƒƒr;dd„ |D ƒ}t|ddd	�}t|d
ƒ}nt|dd�}ˆ |krSˆ |jkrStjdtt	ƒ d� |S )zB
    Concatenate values from several join units along axis=1.
    c                 s  ó   � | ]
}|j jjd kV  qdS ©r°   Nr¾   ©r7   rk   r/   r/   r0   r<   Ï  r=   z*_concatenate_join_units.<locals>.<genexpr>c                   s   g | ]	}|j ˆ ˆd �‘qS )©rÀ   rÂ   )rÄ   rG   rË   r/   r0   rI   Ò  s    ÿÿz+_concatenate_join_units.<locals>.<listcomp>c                 s  s   � | ]}t |jƒV  qd S r4   ©r   rV   ©r7   Útr/   r/   r0   r<   ×  r�   c                 S  s*   g | ]}t |jƒr|n|d dd…f ‘qS )r   NrÌ   rÍ   r/   r/   r0   rI   Ü  s    þÿýr   TrM   rO   r,   rK   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   rV   ÚwarningsÚwarnÚFutureWarningr   )rj   r2   Úempty_dtype_futureÚhas_none_blocksÚ	to_concatÚconcat_valuesr/   rË   r0   ra   É  s*   
þü
ù	ra   rV   r×   c                 C  sr   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r7tjS t‚)	z2
    Find the NA value to go with this dtype.
    ÚmMr   ÚfcÚNaNro   NÚiuÚO)rR   r   r¸   r´   r¬   rW   ÚnanÚNotImplementedError)rV   r×   r/   r/   r0   rÒ   ÷  s   







rÒ   úSequence[JoinUnit]útuple[DtypeObj, DtypeObj]c                 C  sÖ   t  dd„ | D ƒ¡r| d jj}||fS tdd„ | D ƒƒ}dd„ | D ƒ}t|ƒs/dd„ | D ƒ}t|ƒ}|r9t|ƒ}|}t|ƒt| ƒkrgdd„ | D ƒ}t|ƒsUd	d„ | D ƒ}t|ƒt|ƒkrgt|ƒ}|rgt|ƒ}||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                 S  rD   r/   )rE   rV   rG   r/   r/   r0   rI     rJ   z$_get_empty_dtype.<locals>.<listcomp>r   c                 s  rÈ   rÉ   r¾   rÊ   r/   r/   r0   r<     r=   z#_get_empty_dtype.<locals>.<genexpr>c                 S  ó   g | ]	}|j s|jj‘qS r/   )r³   rE   rV   rÊ   r/   r/   r0   rI     s    c                 S  ó"   g | ]}|j jjd kr|j j‘qS ©r°   r¾   rÊ   r/   r/   r0   rI      ó    c                 S  rã   r/   )r¿   rE   rV   rÊ   r/   r/   r0   rI   *  s    ýÿc                 S  rä   rå   r¾   rÊ   r/   r/   r0   rI   0  ræ   )r   Údtypes_all_equalrE   rV   rÑ   r?   r   r   )rj   rÀ   r×   ÚdtypesrV   Údtype_futureÚdtypes_futurer/   r/   r0   rÐ     s4   
ÿþÿrÐ   c                   sX   | d j ‰ ˆ jjdkrdS t‡ fdd„| D ƒƒo+t‡ fdd„| D ƒƒo+td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  s"   � | ]}t |jƒt ˆ ƒu V  qd S r4   )r¬   rE   rG   ©Úfirstr/   r0   r<   H  s   €  z)_is_uniform_join_units.<locals>.<genexpr>c                 3  s,   � | ]}|j jˆ jkp|j jjd v V  qdS )ÚiubNr¾   rG   rë   r/   r0   r<   K  s   € ü
üc                 s  s    � | ]}|j  p|jjV  qd S r4   )r³   rE   r_   rG   r/   r/   r0   r<   U  s   € )rE   rV   r´   rZ   )rj   r/   rë   r0   r^   <  s   
ûýñr^   )r&   r'   r(   r)   r*   r   r+   r!   )r(   r)   r*   r   r2   r3   r+   r!   )r(   r)   rd   rq   re   r3   r+   rr   )r8   r   r;   r    r+   r3   )rf   r"   r;   r€   r+   r$   )r&   rr   r+   r‘   )
r8   r   rŒ   r%   rž   rŸ   r“   rŸ   r+   r$   )rj   rÇ   r2   r3   r+   r   )rV   r    r×   r3   )rj   rá   r+   râ   )rj   rÇ   r+   r3   )GÚ
__future__r   Útypingr   r   rÓ   ÚnumpyrW   Ú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%   r1   rp   rS   r5   r\   r]   r–   r—   ra   rÒ   rÐ   r^   r/   r/   r/   r0   Ú<module>   sD    


l
"

/

k
.
.