o
    �¨Êh  ã                   @  s  d Z ddlmZ ddlmZmZ ddlmZmZ ddl	Z	ddl
ZddlmZ ddlmZ ddlmZmZ dd	lmZ ddlm  mZ dd
lmZ ercddlmZ ddlmZ ddlm Z  ddl!m"Z" d&dd„Z#d'dd„Z$d(dd„Z%d)dd„Z&e&d d!„ ƒZ'd"d#„ Z(d$d%„ Z)dS )*z!
Core eval alignment algorithms.
é    )Úannotations)ÚpartialÚwraps)ÚTYPE_CHECKINGÚCallableN)ÚPerformanceWarning)Úfind_stack_level)ÚABCDataFrameÚ	ABCSeries)ÚPandasObject)Úresult_type_many)ÚSequence)ÚF)ÚNDFrame)ÚIndexÚreturnú7tuple[partial | type[NDFrame], dict[str, Index] | None]c                 C  sX   d }t | jtjƒrttj| jjd�}||fS t| jƒ}t| jdƒr(t	|| jj
ƒ}||fS )N)ÚdtypeÚaxes)Ú
isinstanceÚvalueÚnpÚndarrayr   Ú
asanyarrayr   ÚtypeÚhasattrÚ_zip_axes_from_typer   )Útermr   Útyp© r   úO/var/www/html/env/lib/python3.10/site-packages/pandas/core/computation/align.pyÚ_align_core_single_unary_op'   s   
ür!   r   útype[NDFrame]Únew_axesúSequence[Index]údict[str, Index]c                   s   ‡ fdd„t | jƒD ƒS )Nc                   s   i | ]	\}}|ˆ | “qS r   r   )Ú.0ÚiÚname©r#   r   r    Ú
<dictcomp>:   s    z'_zip_axes_from_type.<locals>.<dictcomp>)Ú	enumerateÚ_AXIS_ORDERS)r   r#   r   r)   r    r   7   s   r   Úboolc                 C  s   t dd„ | D ƒƒS )zB
    Check a sequence of terms for instances of PandasObject.
    c                 s  s   � | ]	}t |jtƒV  qd S ©N)r   r   r   ©r&   r   r   r   r    Ú	<genexpr>A   s   € z&_any_pandas_objects.<locals>.<genexpr>)Úany©Útermsr   r   r    Ú_any_pandas_objects=   s   r4   úCallable[[F], F]c                   s   t ˆ ƒ‡ fdd„ƒ}|S )Nc                   sB   t | ƒdkrt| d ƒS dd„ | D ƒ}t| ƒst|Ž d fS ˆ | ƒS )Né   r   c                 s  ó   � | ]}|j V  qd S r.   ©r   r/   r   r   r    r0   K   ó   € z9_filter_special_cases.<locals>.wrapper.<locals>.<genexpr>)Úlenr!   r4   r   )r3   Úterm_values©Úfr   r    ÚwrapperE   s   z&_filter_special_cases.<locals>.wrapper)r   )r=   r>   r   r<   r    Ú_filter_special_casesD   s   r?   c              	     s  dd„ t ˆ ƒD ƒ}‡ fdd„|D ƒ}ddlm} |tt||ƒƒƒ}ˆ | ¡  j}|j}|j}t	|ƒ}|dk}	‡ fdd„|D ƒD ]5}
t
|
tƒ}|oI|	}t |
jƒD ]$\}}|r^|d |
j}}n||}}||  |¡ss||  |¡||< qOq?| ¡ D ]�\}}tt|ƒ|ƒD ]j\}}ˆ | j}t|d	ƒrît
|tƒoš|dk}|r£||d  n|}t	|j| ƒ}t	|ƒ}t tdt|| ƒƒ¡}|dkrß|d
krßd|› dtˆ | jƒ› d|d›d�}tj|ttƒ d� |j||dd�}ˆ |  |¡ q„ˆ |  ˆ | jj¡ qy|t||ƒfS )Nc                 S  s    g | ]\}}t |jd ƒr|‘qS )r   )r   r   )r&   r'   r   r   r   r    Ú
<listcomp>X   s     z_align_core.<locals>.<listcomp>c                   s   g | ]}ˆ | j j‘qS r   )r   Úndim©r&   r'   r2   r   r    r@   Y   s    r   )ÚSeriesr6   c                 3  s   � | ]}ˆ | j V  qd S r.   r8   rB   r2   r   r    r0   f   s   € z_align_core.<locals>.<genexpr>Úreindexi'  zAlignment difference on axis z. is larger than an order of magnitude on term z, by more than z.4gz; performance may suffer.)ÚcategoryÚ
stacklevelF)ÚaxisÚcopy) r+   ÚpandasrC   ÚdictÚzipÚidxmaxr   Ú_constructorr   r:   r   r
   ÚindexÚis_ÚunionÚitemsÚranger   r   Úlog10ÚmaxÚabsÚreprr(   ÚwarningsÚwarnr   r   rD   ÚupdateÚvaluesr   )r3   Ú
term_indexÚ	term_dimsrC   ÚndimsÚbiggestr   r   ÚnaxesÚgt_than_one_axisr   Ú	is_seriesÚis_series_and_gt_one_axisrG   rQ   ÚaxÚitmr'   rA   ÚtiÚ	transposeÚ	reindexerÚterm_axis_sizeÚreindexer_sizeÚordmÚwÚobjr   r2   r    Ú_align_coreV   sX   

€ù	

ÿþÿÿ€rm   c                 C  s¤   z	t t | ¡ƒ} W n) ty2   t| jttfƒr(t| jƒ}|t	|| jj
ƒf Y S t | j¡df Y S w tdd„ | D ƒƒrHtdd„ | D ƒŽ jdfS t| ƒ\}}||fS )z
    Align a set of terms.
    Nc                 s  r7   r.   )Ú	is_scalarr/   r   r   r    r0       r9   zalign_terms.<locals>.<genexpr>c                 s  r7   r.   r8   r/   r   r   r    r0   ¡   r9   )ÚlistÚcomÚflattenÚ	TypeErrorr   r   r
   r	   r   r   r   r   Úresult_typeÚallr   rm   )r3   r   r   r   r   r    Úalign_terms‘   s   
ûru   c                 C  sÊ   z| j } W n	 ty   Y nw t |j|¡}t| tƒs*t| tƒr*| |fd|i|¤ŽS t	|dƒr@| tj
kr@|tj
kr@|  |¡}|S | |ƒ |¡}t|jƒdkrct|ƒdkrct|tjƒsct |g¡ |¡}|S )a°  
    Reconstruct an object given its type, raw value, and possibly empty
    (None) axes.

    Parameters
    ----------
    typ : object
        A type
    obj : object
        The value to use in the type constructor
    axes : dict
        The axes to use to construct the resulting pandas object

    Returns
    -------
    ret : typ
        An object of type ``typ`` with the value `obj` and possible axes
        `axes`.
    r   r   r6   )r   ÚAttributeErrorr   rs   r   r   r   Ú
issubclassr   r   Úbool_Úastyper:   Úshaper   Úarray)r   rl   r   r   Úres_tÚ	ret_valuer   r   r    Úreconstruct_object¨   s$   
ÿ
õ
ÿr~   )r   r   )r   r"   r#   r$   r   r%   )r   r-   )r   r5   )*Ú__doc__Ú
__future__r   Ú	functoolsr   r   Útypingr   r   rW   Únumpyr   Úpandas.errorsr   Úpandas.util._exceptionsr   Úpandas.core.dtypes.genericr	   r
   Úpandas.core.baser   Úpandas.core.commonÚcoreÚcommonrp   Úpandas.core.computation.commonr   Úcollections.abcr   Úpandas._typingr   Úpandas.core.genericr   Úpandas.core.indexes.apir   r!   r   r4   r?   rm   ru   r~   r   r   r   r    Ú<module>   s2    




: