
    Mh                       % S r SSKJr  SSKrSSKJr  SSKJr  SSKJ	r	J
r
  SSKJrJr  SSKJr  \(       a  SS	KJr  \" \\-   5      rSS
 jr " S S\R*                  S9r " S S\5      r " S S\5      r\\S.rS\S'   g)z)
Engine classes for :func:`~pandas.eval`
    )annotationsN)TYPE_CHECKING)NumExprClobberingError)align_termsreconstruct_object)MATHOPS
REDUCTIONS)printing)Exprc                    U R                   nU[        -  nU(       a=  SR                  U Vs/ s H  n[        U5      PM     sn5      n[	        SU  SU S35      egs  snf )zm
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        Q/var/www/html/env/lib/python3.13/site-packages/pandas/core/computation/engines.py_check_ne_builtin_clashr      sc     JJEl"GII01tAw01$'v-Gs!L
 	
 0s   Ac                  r    \ rS rSrSrSrSS jrSS jrSS jr\	SS j5       r
\R                  S 5       rS	rg
)AbstractEngine/   z/Object serving as a base class for all engines.Fc                ,    Xl         S U l        S U l        g N)r   aligned_axesresult_type)selfr   s     r   __init__AbstractEngine.__init__4   s    	     c                B    [         R                  " U R                  5      $ )zW
Convert an expression for evaluation.

Defaults to return the expression as a string.
)r
   pprint_thingr   r   s    r   convertAbstractEngine.convert9   s     $$TYY//r"   c                   U R                   (       d,  [        U R                  R                  5      u  U l        U l        U R                  5       n[        U R                  XR
                  U R                  R                  R                  5      $ )z
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   evaluateAbstractEngine.evaluateA   sf     2=diioo2N/Dd/ nn!c#4#4diioo6Q6Q
 	
r"   c                H    U R                   S L=(       a    U R                  S L$ r   )r   r   r%   s    r   r)   AbstractEngine._is_alignedV   s#      ,M1A1A1MMr"   c                    g)z
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+   AbstractEngine._evaluateZ   s    r"   )r   r   r   NreturnNone)r6   str)r6   object)r6   bool)__name__
__module____qualname____firstlineno____doc__has_neg_fracr    r&   r.   propertyr)   abcabstractmethodr+   __static_attributes__r3   r"   r   r   r   /   sI    9L 
0
* N N 	 r"   r   )	metaclassc                  "    \ rS rSrSrSrS rSrg)NumExprEnginek   zNumExpr engine classTc                    SS K nU R                  5       nU R                  R                  nUR                  n[        U R                  5        UR                  X$S9$ )Nr   )
local_dict)numexprr&   r   env
full_scoper   r.   )r   ner   rL   scopes        r   r+   NumExprEngine._evaluatep   sE     LLNiimm		*{{1{//r"   r3   N)r;   r<   r=   r>   r?   r@   r+   rD   r3   r"   r   rG   rG   k   s    L	0r"   rG   c                  ,    \ rS rSrSrSrS rSS jrSrg)	PythonEngine|   zG
Evaluate an expression in Python space.

Mostly for testing purposes.
Fc                "    U R                  5       $ r   )r   r%   s    r   r.   PythonEngine.evaluate   s    yy{r"   c                    g r   r3   r%   s    r   r+   PythonEngine._evaluate   s    r"   r3   Nr5   )	r;   r<   r=   r>   r?   r@   r.   r+   rD   r3   r"   r   rR   rR   |   s     Lr"   rR   )rK   pythonzdict[str, type[AbstractEngine]]ENGINES)r   r   r6   r7   )r?   
__future__r   rB   typingr   pandas.errorsr   pandas.core.computation.alignr   r   pandas.core.computation.opsr   r	   pandas.io.formatsr
   pandas.core.computation.exprr   	frozensetr   r   ABCMetar   rG   rR   rY   __annotations__r3   r"   r   <module>rd      s    # 
   0
 '1:-.
&9s{{ 9x0N 0"> " ,	( r"   