
    i                        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rdd	lmZ  eeez         Zdd
Z G d dej*                        Z G d de      Z G d de      ZeedZded<   y)z)
Engine classes for :func:`~pandas.eval`
    )annotationsN)TYPE_CHECKING)NumExprClobberingError)align_termsreconstruct_object)MATHOPS
REDUCTIONS)printing)Exprc                    | j                   }|t        z  }|r:dj                  |D cg c]  }t        |       c}      }t	        d|  d| d      yc c}w )z
    Attempt to prevent foot-shooting in a helpful way.

    Parameters
    ----------
    expr : Expr
        Terms can contain
    z, zVariables in expression "z" overlap with builtins: ()N)names_ne_builtinsjoinreprr   )exprr   overlapxss        \/app/cer_product_mecsu/.venv/lib/python3.12/site-packages/pandas/core/computation/engines.py_check_ne_builtin_clashr      s_     JJEl"GII01tAw01$'v-Gs!L
 	
 0s   Ac                  b    e Zd ZdZdZd	dZd
dZddZedd       Z	e
j                  d        Zy)AbstractEnginez/Object serving as a base class for all engines.Fc                <    || _         d | _        d | _        d | _        y N)r   aligned_axesresult_typeresult_name)selfr   s     r   __init__zAbstractEngine.__init__5   s!    	     c                @    t        j                  | j                        S )zo
        Convert an expression for evaluation.

        Defaults to return the expression as a string.
        )r
   pprint_thingr   r   s    r   convertzAbstractEngine.convert;   s     $$TYY//r!   c                4   | j                   s2t        | j                  j                        \  | _        | _        | _        | j                         }t        | j                  || 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   r   	_evaluater   return_type)r   ress     r   evaluatezAbstractEngine.evaluateC   s}     DO		EADd/1A
 nn!IIOO''
 	
r!   c                >    | j                   d uxr | j                  d uS r   )r   r   r$   s    r   r'   zAbstractEngine._is_aligned^   s#      ,M1A1A1MMr!   c                     y)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.
        N r$   s    r   r)   zAbstractEngine._evaluateb   s    r!   NreturnNone)r1   str)r1   object)r1   bool)__name__
__module____qualname____doc__has_neg_fracr    r%   r,   propertyr'   abcabstractmethodr)   r/   r!   r   r   r   0   sI    9L 0
6 N N 	 r!   r   )	metaclassc                      e Zd ZdZdZd Zy)NumExprEnginezNumExpr engine classTc                    dd l }| j                         }| j                  j                  }|j                  }t        | j                         |j                  ||      S )Nr   )
local_dict)numexprr%   r   env
full_scoper   r,   )r   ner   rD   scopes        r   r)   zNumExprEngine._evaluatex   sG     LLNiimm		*{{1{//r!   N)r6   r7   r8   r9   r:   r)   r/   r!   r   r@   r@   s   s    L	0r!   r@   c                  "    e Zd ZdZdZd ZddZy)PythonEnginezS
    Evaluate an expression in Python space.

    Mostly for testing purposes.
    Fc                "    | j                         S r   )r   r$   s    r   r,   zPythonEngine.evaluate   s    yy{r!   c                     y r   r/   r$   s    r   r)   zPythonEngine._evaluate   s    r!   Nr0   )r6   r7   r8   r9   r:   r,   r)   r/   r!   r   rI   rI      s     Lr!   rI   )rC   pythonzdict[str, type[AbstractEngine]]ENGINES)r   r   r1   r2   )r9   
__future__r   r<   typingr   pandas.errorsr   pandas.core.computation.alignr   r   pandas.core.computation.opsr   r	   pandas.io.formatsr
   pandas.core.computation.exprr   	frozensetr   r   ABCMetar   r@   rI   rM   __annotations__r/   r!   r   <module>rX      s    # 
   0
 '1:-.
&@s{{ @F0N 0"> " ,	( r!   