o
    ‡Å€g  ã                   @  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   úM/var/www/html/myenv/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    
	

'
&