U
    f/e                     @  s   d dl mZ d dlmZ d dlmZmZ d dlmZ erPd dl	m
Z
 d dlmZ eddd	d
dddg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)
namedtuple)TYPE_CHECKINGIterator)	ArrayLike)Block)BlockManagerBlockPairInfolvalsrvalslocsleft_earight_earblkr   zIterator[BlockPairInfo])leftrightreturnc              	   c  sv   | j D ]j}|j}|j}|jdk}|j|jdd}|D ]:}|jjdk}t||||\}	}
t|	|
||||}|V  q4q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rblksr   r   r
   r   info r   =/tmp/pip-unpacked-wheel-tiezk1ph/pandas/core/internals/ops.py_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_blockwise1   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"   S   s    r"   r   boolz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)r*   r   r   r   r
   r   r   r   r   r   _   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
    r/   N)
__future__r   collectionsr   typingr   r   Zpandas._typingr   Zpandas.core.internals.blocksr   Zpandas.core.internals.managersr   r	   r   r'   r"   r   r/   r   r   r   r   <module>   s    "(