o
    �¨Êhò  ã                   @  sÎ   U d Z ddlm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mZ ddlmZ er7dd	lmZ eee ƒZddd„ZG dd„ dejd�ZG dd„ deƒZG dd„ deƒZeedœZded< dS )z)
Engine classes for :func:`~pandas.eval`
é    )ÚannotationsN)ÚTYPE_CHECKING)ÚNumExprClobberingError)Úalign_termsÚreconstruct_object)ÚMATHOPSÚ
REDUCTIONS)Úprinting)ÚExprÚexprr
   ÚreturnÚNonec                 C  s@   | j }|t@ }|rd dd„ |D ƒ¡}td| › d|› d�ƒ‚dS )z…
    Attempt to prevent foot-shooting in a helpful way.

    Parameters
    ----------
    expr : Expr
        Terms can contain
    z, c                 S  s   g | ]}t |ƒ‘qS © )Úrepr)Ú.0Úxr   r   úQ/var/www/html/env/lib/python3.10/site-packages/pandas/core/computation/engines.pyÚ
<listcomp>)   s    z+_check_ne_builtin_clash.<locals>.<listcomp>zVariables in expression "z" overlap with builtins: (ú)N)ÚnamesÚ_ne_builtinsÚjoinr   )r   r   ÚoverlapÚsr   r   r   Ú_check_ne_builtin_clash   s   	ÿþr   c                   @  sN   e Zd ZdZdZddd„Zddd	„Zddd„Zeddd„ƒZ	e
jdd„ ƒZdS )ÚAbstractEnginez/Object serving as a base class for all engines.Fr   r   c                 C  s   || _ d | _d | _d S ©N)r   Úaligned_axesÚresult_type)Úselfr   r   r   r   Ú__init__4   s   
zAbstractEngine.__init__Ústrc                 C  s   t  | j¡S )zo
        Convert an expression for evaluation.

        Defaults to return the expression as a string.
        )r	   Úpprint_thingr   ©r   r   r   r   Úconvert9   s   zAbstractEngine.convertÚobjectc                 C  s:   | j st| jjƒ\| _| _|  ¡ }t| j|| j| jjjƒS )a*  
        Run the engine on the expression.

        This method performs alignment which is necessary no matter what engine
        is being used, thus its implementation is in the base class.

        Returns
        -------
        object
            The result of the passed expression.
        )	Ú_is_alignedr   r   Útermsr   r   Ú	_evaluater   Úreturn_type)r   Úresr   r   r   ÚevaluateA   s   ÿzAbstractEngine.evaluateÚboolc                 C  s   | j d uo	| jd uS r   )r   r   r#   r   r   r   r&   V   s   zAbstractEngine._is_alignedc                 C  s   dS )a  
        Return an evaluated expression.

        Parameters
        ----------
        env : Scope
            The local and global environment in which to evaluate an
            expression.

        Notes
        -----
        Must be implemented by subclasses.
        Nr   r#   r   r   r   r(   Z   s    zAbstractEngine._evaluateN©r   r   )r   r!   )r   r%   )r   r,   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úhas_neg_fracr    r$   r+   Úpropertyr&   ÚabcÚabstractmethodr(   r   r   r   r   r   /   s    


r   )Ú	metaclassc                   @  s   e Zd ZdZdZdd„ ZdS )ÚNumExprEnginezNumExpr engine classTc                 C  s6   dd l }|  ¡ }| jj}|j}t| jƒ |j||d�S )Nr   )Ú
local_dict)Únumexprr$   r   ÚenvÚ
full_scoper   r+   )r   Úner   r:   Úscoper   r   r   r(   p   s   
zNumExprEngine._evaluateN)r.   r/   r0   r1   r2   r(   r   r   r   r   r7   k   s    r7   c                   @  s&   e Zd ZdZdZdd„ Zd
dd„Zd	S )ÚPythonEnginezS
    Evaluate an expression in Python space.

    Mostly for testing purposes.
    Fc                 C  s   |   ¡ S r   )r   r#   r   r   r   r+   …   s   zPythonEngine.evaluater   r   c                 C  s   d S r   r   r#   r   r   r   r(   ˆ   s   zPythonEngine._evaluateNr-   )r.   r/   r0   r1   r2   r+   r(   r   r   r   r   r>   |   s
    r>   )r9   Úpythonzdict[str, type[AbstractEngine]]ÚENGINES)r   r
   r   r   )r1   Ú
__future__r   r4   Útypingr   Úpandas.errorsr   Úpandas.core.computation.alignr   r   Úpandas.core.computation.opsr   r   Úpandas.io.formatsr	   Úpandas.core.computation.exprr
   Ú	frozensetr   r   ÚABCMetar   r7   r>   r@   Ú__annotations__r   r   r   r   Ú<module>   s$    
<þ