
    Eg                        d dl mZ d dl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 d dlmZ d dlmZ  G d	 d
e          Zd dZd!dZd"dZd#dZd$dZdS )%    )annotations)TYPE_CHECKING
NamedTuple)is_1d_only_ea_dtype)Iterator)BlockPlacement)	ArrayLike)Block)BlockManagerc                  L    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__     N/var/www/sysmax/venv/lib/python3.11/site-packages/pandas/core/internals/ops.pyr   r      sO         MMMNNNKKKKKr   r   leftr   rightreturnIterator[BlockPairInfo]c           
   #    K   | j         D ]y}|j        }|j        }|j        dk    }|                    |j        d          }|D ]?}|j        j        dk    }t          ||||          \  }	}
t          |	|
||||          }|V  @zd 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   infos               r   _iter_block_pairsr.      s       {  |:-1$,,T\d,KK  	 	D{'1,H1#tWhOOLE5 tWhMMDJJJJ	 r   c                   g }t          | |          D ]\  }}}}}}	 |||          }
|r<|s:t          |
d          r*t          |
j                  s|
                    dd          }
|	                    |
          }t          ||           |                    |            t          |          t          |          |j
        d          }|S )Nreshaper!   F)axesverify_integrity)r.   hasattrr   dtyper0   _split_op_result_reset_block_mgr_locsextendtypetupler2   )r   r   array_opres_blksr   r   r   r   r   r   
res_valuesnbsnew_mgrs                r   operate_blockwiser@   9   s     H7Hu7U7U  3udGXtXeU++
	3	3 
I..	3 (
(899		3 $++Ar22J##J// 	c4((( d5kk%//
USSSGNr   r>   list[Block]Nonec                B    | D ]}||j         j                 }||_         dS )zA
    Reset mgr_locs to correspond to our original DataFrame.
    N)r$   r(   )r>   r   nbnblocss       r   r7   r7   `   s5       bk)* r   lblkr
   r   r   r   r   tuple[ArrayLike, ArrayLike]c                   | j         }|j         }|j        j        sJ |j                    |s?|s=||j        j        ddf         }|j        |j        k    sJ |j        |j        f            n|r)|r'|j        |j        k    sJ |j        |j        f            nq|rC||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$   is_slice_liker(   shape)rF   r   r   r   r   r   s         r   r)   r)   l   sQ    KEKE =&55555  x  dm+QQQ./{ek)))EK+E))))	 X {ek)))EK+E))))	 
 dm+QQQ./{1~"""EK"""ad {1~"""EK""" ad%<r   c                b    t          | |          D ]} ||j        |j                  }|s dS dS )z$
    Blockwise `all` reduction.
    FT)r.   r   r   )r   r   opr-   ress        r   blockwise_allrN      sK     "$..  bTZ(( 	55	4r   N)r   r   r   r   r   r   )r   r   r   r   r   r   )r>   rA   r   rB   )
rF   r
   r   r
   r   r   r   r   r   rG   )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@   r7   r)   rN   r   r   r   <module>rW      sO   " " " " " "       
 : 9 9 9 9 9 <((((((555555((((((222222;;;;;;    J      8$ $ $ $N   # # # #L     r   