o
    7?e                     @  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return7tuple[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   Z
asanyarrayr   typehasattr_zip_axes_from_typer   )termr   typ r   ^/home/www/facesmatcher.com/pyenv/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>)	enumerateZ_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   r2   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   r.   K       z9_filter_special_cases.<locals>.wrapper.<locals>.<genexpr>)lenr    r2   r   )r1   Zterm_valuesfr   r   wrapperE   s   z&_filter_special_cases.<locals>.wrapper)r   )r:   r;   r   r9   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 ]7}
t
|
t}|oI|	}t |
jD ]&\}}|r^|d |
j}}n||}}|| |su|| j|d	d
||< qOq?| D ]\}}tt||D ]j\}} | j}t|drt
|to|dk}|r||d  n|}t	|j| }t	|}ttdt|| }|dkr|dkrd| dt | j d|dd}tj|tt d |j||dd} | | q |  | jj q{|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&   r0   r   r   r=   Y   s    r   )Seriesr4   c                 3  s    | ]} | j V  qd S r,   r6   r?   r0   r   r   r.   f   s    z_align_core.<locals>.<genexpr>outer)how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*   Zpandasr@   dictzipZidxmaxr   Z_constructorr   r8   r   r
   indexis_joinitemsranger   r   log10maxabsreprr'   warningswarnr   r   rC   updatevaluesr   )r1   Z
term_indexZ	term_dimsr@   ZndimsZbiggestr   r   ZnaxesZgt_than_one_axisr   Z	is_seriesZis_series_and_gt_one_axisrF   rM   axZitmr&   r>   tiZ	transposeZ	reindexerZterm_axis_sizeZreindexer_sizeordmwobjr   r0   r   _align_coreV   sX   

	

r\   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  r5   r,   )Z	is_scalarr-   r   r   r   r.      r7   zalign_terms.<locals>.<genexpr>c                 s  r5   r,   r6   r-   r   r   r   r.      r7   )listcomflatten	TypeErrorr   r   r
   r	   r   r   r   r   result_typeallr   r\   )r1   r   r   r   r   r   align_terms   s   
rc   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   r4   )r   AttributeErrorr   ra   r   r   r   
issubclassr   r   Zbool_Zastyper8   shaper   array)r   r[   r   r   Zres_tZ	ret_valuer   r   r   reconstruct_object   s(   



rh   )r   r   )r   r!   r"   r#   r   r$   )r   r+   )r   r3   )*__doc__
__future__r   	functoolsr   r   typingr   r   rS   numpyr   Zpandas.errorsr   Zpandas.util._exceptionsr   Zpandas.core.dtypes.genericr	   r
   Zpandas.core.baser   Zpandas.core.commoncorecommonr^   Zpandas.core.computation.commonr   collections.abcr   Zpandas._typingr   Zpandas.core.genericr   Zpandas.core.indexes.apir   r    r   r2   r<   r\   rc   rh   r   r   r   r   <module>   s2    




: