o
    ҷh                     @  s   d dl mZ d dlmZmZ d dlmZ er4d dlmZ d dl	m
Z
 d dlmZ d dlmZ d dlmZ G d	d
 d
eZd%ddZd&ddZd'ddZd(d d!Zd)d"d#Zd$S )*    )annotations)TYPE_CHECKING
NamedTuple)is_1d_only_ea_dtype)Iterator)BlockPlacement)	ArrayLike)Block)BlockManagerc                   @  s>   e Zd ZU ded< ded< ded< ded< ded< d	ed
< dS )BlockPairInfor   lvalsrvalsr   locsboolleft_earight_ear	   rblkN)__name__
__module____qualname____annotations__ r   r   L/var/www/html/venv/lib/python3.10/site-packages/pandas/core/internals/ops.pyr      s   
 r   leftr
   rightreturnIterator[BlockPairInfo]c              	   c  sx    | j D ]5}|j}|j}|jdk}|j|jdd}|D ]}|jjdk}t||||\}	}
t|	|
||||}|V  qqd S )N   T)
only_slice)blocksmgr_locsvaluesndim_slice_take_blocks_ax0indexer_get_same_shape_valuesr   )r   r   blkr   blk_valsr   rblksr   r   r   r   infor   r   r   _iter_block_pairs   s   

r*   c                 C  s   g }t | |D ]0\}}}}}}	|||}
|r(|s(t|
dr(t|
js(|
dd}
|	|
}t|| || qt|t	||j
dd}|S )Nreshaper   F)axesverify_integrity)r*   hasattrr   dtyper+   _split_op_result_reset_block_mgr_locsextendtypetupler-   )r   r   array_opres_blksr   r   r   r   r   r   
res_valuesnbsnew_mgrr   r   r   operate_blockwise9   s"   


	r;   r9   list[Block]Nonec                 C  s    | D ]}||j j }||_ qdS )zA
    Reset mgr_locs to correspond to our original DataFrame.
    N)r    r$   )r9   r   nbnblocsr   r   r   r2   `   s   r2   lblkr	   r   r   r   r   tuple[ArrayLike, ArrayLike]c                 C  s  | j }|j }|jjsJ |j|s/|s/||jjddf }|j|jks+J |j|jf||fS |rE|rE|j|jksAJ |j|jf||fS |ri||jjddf }|jd dks]J |j|dddf }||fS |jd dksuJ |j|dddf }||fS )zH
    Slice lblk.values to align with rblk.  Squeeze if we have EAs.
    Nr   r   )r!   r    is_slice_liker$   shape)r@   r   r   r   r   r   r   r   r   r%   l   s$   r%   c                 C  s,   t | |D ]}||j|j}|s dS qdS )z$
    Blockwise `all` reduction.
    FT)r*   r   r   )r   r   opr)   resr   r   r   blockwise_all   s   rF   N)r   r
   r   r
   r   r   )r   r
   r   r
   r   r
   )r9   r<   r   r=   )
r@   r	   r   r	   r   r   r   r   r   rA   )r   r
   r   r
   r   r   )
__future__r   typingr   r   pandas.core.dtypes.commonr   collections.abcr   pandas._libs.internalsr   pandas._typingr   pandas.core.internals.blocksr	   pandas.core.internals.managersr
   r   r*   r;   r2   r%   rF   r   r   r   r   <module>   s    
	

'
&