a
    Of                     @  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rddlmZ ddlmZ ddlm Z  ddl!m"Z" ddddZ#ddddddZ$ddddZ%d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)Indexz7tuple[partial | type[NDFrame], dict[str, Index] | None])returnc                 C  sR   d }t | jtjr&ttj| jjd}n$t| j}t| jdrJt	|| jj
}||fS )N)dtypeaxes)
isinstancevaluenpndarrayr   Z
asanyarrayr   typehasattr_zip_axes_from_typer   )termr   typ r   V/var/www/ai-form-bot/venv/lib/python3.9/site-packages/pandas/core/computation/align.py_align_core_single_unary_op'   s    
r   ztype[NDFrame]zSequence[Index]zdict[str, Index])r   new_axesr   c                   s    fddt | jD S )Nc                   s   i | ]\}}| | qS r   r   ).0inamer    r   r   
<dictcomp>:       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   r&   z&_any_pandas_objects.<locals>.<genexpr>)anytermsr   r   r   _any_pandas_objects=   s    r/   z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  s   | ]}|j V  qd S r)   r   r*   r   r   r   r+   K   r&   z9_filter_special_cases.<locals>.wrapper.<locals>.<genexpr>)lenr   r/   r   )r.   Zterm_valuesfr   r   wrapperE   s    z&_filter_special_cases.<locals>.wrapper)r   )r4   r5   r   r3   r   _filter_special_casesD   s    r6   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 ]j}
t
|
t}|o|	}t |
jD ]H\}}|r|d |
j }}n
|| }}|| |s|| |||< qq~| D ]\}}tt||D ]\}} | j}t|d	r
t
|to:|dk}|rN||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   r&   z_align_core.<locals>.<listcomp>c                   s   g | ]} | j jqS r   )r   ndimr!   r"   r-   r   r   r7   Y   r&   r   )Seriesr0   c                 3  s   | ]} | j V  qd S r)   r1   r9   r-   r   r   r+   f   r&   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'   Zpandasr:   dictzipZidxmaxr   Z_constructorr   r2   r   r
   indexis_unionitemsranger   r   log10maxabsreprr#   warningswarnr   r   r;   updatevaluesr   )r.   Z
term_indexZ	term_dimsr:   ZndimsZbiggestr   r   ZnaxesZgt_than_one_axisr   Z	is_seriesZis_series_and_gt_one_axisr>   rE   axZitmr"   r8   tiZ	transposeZ	reindexerZterm_axis_sizeZreindexer_sizeordmwobjr   r-   r   _align_coreV   sR    


rT   c                 C  s   zt t| } W nR tyd   t| jttfrPt| j}|t	|| jj
f Y S t| jdf Y S 0 tdd | D rtdd | D  jdfS t| \}}||fS )z
    Align a set of terms.
    Nc                 s  s   | ]}|j V  qd S r)   )Z	is_scalarr*   r   r   r   r+      r&   zalign_terms.<locals>.<genexpr>c                 s  s   | ]}|j V  qd S r)   r1   r*   r   r   r   r+      r&   )listcomflatten	TypeErrorr   r   r
   r	   r   r   r   r   result_typeallr   rT   )r.   r   r   r   r   r   align_terms   s    
r[   c                 C  s   z
| j } W n ty   Y n0 t|j|}t| tsTt| trT| |fd|i|S t	|dr~| tj
kr~|tj
kr~| |}nF| ||}t|jdkrt|dkrt|tjst|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   r0   )r   AttributeErrorr   rY   r   r   r   
issubclassr   r   Zbool_Zastyper2   shaper   array)r   rS   r   r   Zres_tZ	ret_valuer   r   r   reconstruct_object   s$    


r`   )*__doc__
__future__r   	functoolsr   r   typingr   r   rK   numpyr   Zpandas.errorsr   Zpandas.util._exceptionsr   Zpandas.core.dtypes.genericr	   r
   Zpandas.core.baser   Zpandas.core.commoncorecommonrV   Zpandas.core.computation.commonr   collections.abcr   Zpandas._typingr   Zpandas.core.genericr   Zpandas.core.indexes.apir   r   r   r/   r6   rT   r[   r`   r   r   r   r   <module>   s0   
: