
    Eg                       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<   dS )z)
Engine classes for :func:`~pandas.eval`
    )annotationsN)TYPE_CHECKING)NumExprClobberingError)align_termsreconstruct_object)MATHOPS
REDUCTIONS)printing)Exprexprr   returnNonec                    | j         }|t          z  }|r5d                    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                ,    g | ]}t          |          S  )repr).0xs     T/var/www/sysmax/venv/lib/python3.11/site-packages/pandas/core/computation/engines.py
<listcomp>z+_check_ne_builtin_clash.<locals>.<listcomp>)   s    0001tAww000    zVariables in expression "z" overlap with builtins: ()N)names_ne_builtinsjoinr   )r   r   overlapss       r   _check_ne_builtin_clashr      so     JEl"G 
II0000011$LLLLLL
 
 	

 
r   c                  f    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dS )AbstractEnginez/Object serving as a base class for all engines.Fr   r   c                0    || _         d | _        d | _        d S N)r   aligned_axesresult_type)selfr   s     r   __init__zAbstractEngine.__init__4   s    	 r   strc                4    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     $TY///r   objectc                    | 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%   ress     r   evaluatezAbstractEngine.evaluateA   se      	O2=dio2N2N/Dd/ nn!c4#4dio6Q
 
 	
r   boolc                &    | j         d uo| j        d uS r"   )r#   r$   r*   s    r   r.   zAbstractEngine._is_alignedV   s     ,M1A1MMr   c                    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*   s    r   r0   zAbstractEngine._evaluateZ   s      r   Nr   r   )r   r'   )r   r,   )r   r4   )__name__
__module____qualname____doc__has_neg_fracr&   r+   r3   propertyr.   abcabstractmethodr0   r   r   r   r    r    /   s        99L       
0 0 0 0
 
 
 
* N N N XN 	    r   r    )	metaclassc                      e Zd ZdZdZd ZdS )NumExprEnginezNumExpr engine classTc                    dd l }|                                 }| j        j        }|j        }t          | j                   |                    ||          S )Nr   )
local_dict)numexprr+   r   env
full_scoper   r3   )r%   ner   rF   scopes        r   r0   zNumExprEngine._evaluatep   sS     LLNNim	***{{1{///r   N)r8   r9   r:   r;   r<   r0   r   r   r   rB   rB   k   s.        L	0 	0 	0 	0 	0r   rB   c                  $    e Zd ZdZdZd ZddZdS )	PythonEnginezS
    Evaluate an expression in Python space.

    Mostly for testing purposes.
    Fc                *    |                                  S r"   )r   r*   s    r   r3   zPythonEngine.evaluate   s    yy{{r   r   r   c                    d S r"   r   r*   s    r   r0   zPythonEngine._evaluate   s    r   Nr7   )r8   r9   r:   r;   r<   r3   r0   r   r   r   rK   rK   |   sH          L       r   rK   )rE   pythonzdict[str, type[AbstractEngine]]ENGINES)r   r   r   r   )r;   
__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    rB   rK   rO   __annotations__r   r   r   <module>rZ      s     # " " " " " 



             0 0 0 0 0 0              
 ' & & & & & 2111111y:-..
 
 
 
&9 9 9 9 9s{ 9 9 9 9x0 0 0 0 0N 0 0 0"    >   " , ,      r   