a
    Of                     @  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rndd	lmZ eee Zd
d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)Exprr
   None)exprreturnc                 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   X/var/www/ai-form-bot/venv/lib/python3.9/site-packages/pandas/core/computation/engines.py
<listcomp>)       z+_check_ne_builtin_clash.<locals>.<listcomp>zVariables in expression "z" overlap with builtins: ()N)names_ne_builtinsjoinr   )r   r   Zoverlapsr   r   r   _check_ne_builtin_clash   s    	r   c                   @  s^   e Zd ZdZdZddddZdddd	Zd
dddZed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	   Z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   Z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)__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   )Z
local_dict)numexprr$   r   envZ
full_scoper   r*   )r    ner   r7   scoper   r   r   r'   p   s    
zNumExprEngine._evaluateN)r,   r-   r.   r/   r0   r'   r   r   r   r   r5   k   s   r5   c                   @  s*   e Zd ZdZdZdd Zd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._evaluateN)r,   r-   r.   r/   r0   r*   r'   r   r   r   r   r:   |   s   r:   )r6   pythonzdict[str, type[AbstractEngine]]ENGINES)r/   
__future__r   r2   typingr   Zpandas.errorsr   Zpandas.core.computation.alignr   r   Zpandas.core.computation.opsr   r   Zpandas.io.formatsr	   Zpandas.core.computation.exprr
   	frozensetr   r   ABCMetar   r5   r:   r<   __annotations__r   r   r   r   <module>   s"   <