
    `Vg                       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c mc 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)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        `/var/www/html/hubwallet-dev/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 | _        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.
        )printing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._evaluateq   sG     LLNiimm		*{{1{//r   N)r5   r6   r7   r8   r9   r(   r.   r   r   r?   r?   l   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.formats.printingioformatsr!   pandas.core.computation.exprr
   	frozensetr   r   ABCMetar   r?   rH   rL   __annotations__r.   r   r   <module>rY      s    # 
   0
 . -1:-.
&:s{{ :z0N 0"> " ,	( r   