a
    Oªf  ã                   @  sØ   d dl mZ d dlmZmZ d dlmZ erhd 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dœdd„Zddddœdd„Zd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Ú
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   úR/var/www/ai-form-bot/venv/lib/python3.9/site-packages/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 ]`\}}}}}}	|||ƒ}
|rP|sPt|
dƒrPt|
jƒsP|
 dd¡}
|	 |
¡}t||ƒ | |¡ qt|ƒt	|ƒ|j
dd}|S )NÚreshaper   éÿÿÿÿF)ÚaxesZverify_integrity)r$   Úhasattrr   Zdtyper%   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_blockwise9   s"    
ÿþýü

	r.   zlist[Block]ÚNone)r-   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    r)   r	   r   ztuple[ArrayLike, ArrayLike])Úlblkr   r   r   r   c                 C  sð   | j }|j }|jjsJ |jƒ‚|sX|sX||jjdd…f }|j|jksèJ |j|jfƒ‚n|r~|r~|j|jksèJ |j|jfƒ‚nj|rÀ||jjdd…f }|jd dks®J |jƒ‚|ddd…f }n(|jd dksØJ |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_liker!   Úshape)r1   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
    r5   N)Ú
__future__r   Útypingr   r   Zpandas.core.dtypes.commonr   Úcollections.abcr   Zpandas._libs.internalsr   Zpandas._typingr   Zpandas.core.internals.blocksr	   Zpandas.core.internals.managersr
   r   r$   r.   r)   r"   r5   r   r   r   r   Ú<module>   s   	'&