o
    •7?e  ã                   @  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   úZ/home/www/facesmatcher.com/pyenv/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)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 ]0\}}}}}}	|||ƒ}
|r(|s(t|
dƒr(t|
jƒs(|
 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/   r.   úlist[Block]ÚNonec                 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*   Ú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   Zis_slice_liker"   Úshape)r3   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   ÿr8   N)r   r
   r   r
   r   r   )r   r
   r   r
   r   r
   )r.   r0   r   r1   )
r3   r	   r   r	   r   r   r   r   r   r4   )r   r
   r   r
   r   r   )Ú
__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#   r8   r   r   r   r   Ú<module>   s    
	

'
&