o
    ¹iP  ã                   @  sš   d dl mZ d dlmZmZmZ d dlmZ er*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Ú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   úT/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/pandas/core/internals/ops.pyr
      s   
 r
   Úleftr	   ÚrightÚreturnúIterator[BlockPairInfo]c              	   c  s|    | j D ]7}|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   ÚrblksÚ_r   r   r   r   Úinfor   r   r   Ú_iter_block_pairs   s   €

ûòr*   c                 C  s‚   g }t | |ƒD ]+\}}}}}}	|||ƒ}
|r#|s#t|
dƒr#|
 dd¡}
|	 |
¡}t||ƒ | |¡ qt|ƒt|ƒ|jdd}|S )NÚreshaper   éÿÿÿÿF)ÚaxesÚverify_integrity)	r*   Úhasattrr+   Ú_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_blockwise7   s   


	r:   r8   úlist[Block]c                 C  s    | D ]}||j j }||_ qdS )zA
    Reset mgr_locs to correspond to our original DataFrame.
    N)r   r#   )r8   r   ÚnbÚnblocsr   r   r   r1   Y   s   þr1   Ú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$   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   ÿrD   N)r   r	   r   r	   r   r   )r   r	   r   r	   r   r	   )r8   r;   )
r>   r   r   r   r   r   r   r   r   r?   )r   r	   r   r	   r   r   )Ú
__future__r   Útypingr   r   r   Úpandas._typingr   Úpandas._libs.internalsr   Úpandas.core.internals.blocksr   Úpandas.core.internals.managersr	   r
   r*   r:   r1   r$   rD   r   r   r   r   Ú<module>   s    
	

"
&