
    Owg                        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        V/var/www/horilla/myenv/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 | _        y N)r   aligned_axesresult_type)selfr   s     r   __init__zAbstractEngine.__init__4   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.convert9   s     $$TYY//r    c                   | j                   s,t        | j                  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   ress     r   evaluatezAbstractEngine.evaluateA   sh     2=diioo2N/Dd/ nn!c4#4#4diioo6Q6Q
 	
r    c                >    | j                   d uxr | j                  d uS r   )r   r   r#   s    r   r&   zAbstractEngine._is_alignedV   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._evaluateZ   s    r    NreturnNone)r0   str)r0   object)r0   bool)__name__
__module____qualname____doc__has_neg_fracr   r$   r+   propertyr&   abcabstractmethodr(   r.   r    r   r   r   /   sI    9L 
0
* 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   rC   scopes        r   r(   zNumExprEngine._evaluatep   sG     LLNiimm		*{{1{//r    N)r5   r6   r7   r8   r9   r(   r.   r    r   r?   r?   k   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    Nr/   )r5   r6   r7   r8   r9   r+   r(   r.   r    r   rH   rH   |   s     Lr    rH   )rB   pythonzdict[str, type[AbstractEngine]]ENGINES)r   r   r0   r1   )r8   
__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?   rH   rL   __annotations__r.   r    r   <module>rW      s    # 
   0
 '1:-.
&9s{{ 9x0N 0"> " ,	( r    