B
    W0d                 @  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  s~   xx| j D ]n}|j}|j}|jdk}|j|jdd}xB|D ]:}|jjdk}t||||\}	}
t|	|
||||}|V  q8W qW 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   K/var/www/html/venv/lib/python3.7/site-packages/pandas/core/internals/ops.py_iter_block_pairs   s    

r   c             C  s   g }xdt | |D ]V\}}}}}}	|||}
|rH|sHt|
drH|
dd}
|	|
}t|| || qW 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$   x| D ]}||j j }||_ qW 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.   x(t | |D ]}||j|j}|sdS qW 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   "(