U
    cP                     @  s   d dl mZ d dlmZmZmZ d dlmZ erTd dlm	Z	 d dl
mZ d dlmZ G dd deZd	d	d
dddZd	d	d	dddZddddZddddddddZd	d	ddddZdS )    )annotations)TYPE_CHECKINGIterator
NamedTuple)	ArrayLike)BlockPlacement)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   =/tmp/pip-unpacked-wheel-g7fro6k3/pandas/core/internals/ops.pyr
      s   
r
   r	   zIterator[BlockPairInfo])leftrightreturnc              	   c  sz   | j D ]n}|j}|j}|jdk}|j|jdd\}}|D ]:}|jjdk}	t||||	\}
}t|
||||	|}|V  q8qd S )N   T)Z
only_slice)blocksmgr_locsvaluesndimZ_slice_take_blocks_ax0indexer_get_same_shape_valuesr
   )r   r   Zblkr   Zblk_valsr   Zrblks_r   r   r   r   infor   r   r   _iter_block_pairs   s    

r$   c                 C  s   g }t | |D ]V\}}}}}}	|||}
|rF|sFt|
drF|
dd}
|	|
}t|| || qt|t||jdd}|S )Nreshaper   F)axesZverify_integrity)	r$   hasattrr%   Z_split_op_result_reset_block_mgr_locsextendtypetupler'   )r   r   Zarray_opZres_blksr   r   r   r   r   r   Z
res_valuesnbsZnew_mgrr   r   r   operate_blockwise7   s    


	r.   zlist[Block])r-   c                 C  s    | D ]}||j j }||_ qdS )zA
    Reset mgr_locs to correspond to our original DataFrame.
    N)r   r    )r-   r   nbZnblocsr   r   r   r)   Y   s    r)   r   r   ztuple[ArrayLike, ArrayLike])lblkr   r   r   r   c                 C  s   | j }|j }|jjst|j|sX|sX||jjddf }|j|jkst|j|jfn|r~|r~|j|jkst|j|jfnj|r||jjddf }|jd dkst|j|dddf }n(|jd dkst|j|dddf }||fS )zH
    Slice lblk.values to align with rblk.  Squeeze if we have EAs.
    Nr   r   )r   r   Zis_slice_likeAssertionErrorr    shape)r0   r   r   r   r   r   r   r   r   r!   e   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
    r5   N)
__future__r   typingr   r   r   Zpandas._typingr   Zpandas._libs.internalsr   Zpandas.core.internals.blocksr   Zpandas.core.internals.managersr	   r
   r$   r.   r)   r!   r5   r   r   r   r   <module>   s   	"&