U
    MäfM  ã                   @  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-eb6vo0j3/pandas/core/internals/ops.pyr
      s   
r
   r	   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   Ú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sèt|j|jfƒ‚n|r~|r~|j|jksèt|j|jfƒ‚nj|rÀ||jjdd…f }|jd dks®t|jƒ‚|ddd…f }n(|jd dksØt|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!   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
    r4   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!   r4   r   r   r   r   Ú<module>   s   	"&