o
    ŀg                     @  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   S/var/www/html/myenv/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$    
<