o
    ŀg                     @  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   
asanyarrayr   typehasattr_zip_axes_from_typer   )termr   typ r   Q/var/www/html/myenv/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	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 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    




: