Ë
    *�£j†  ã                  óü   — 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        úAC:\FundamentalWorkbench\vendor\pandas\core\computation\engines.pyÚ_check_ne_builtin_clashr      sc   € ð �J‰J€EØ”lÑ"€GáØ�I‰I©Ó0© 1”t˜A•w¨Ñ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   € ô ×$Ñ$ T§Y¡YÓ/Ð/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ÑAˆDÔ˜dÔ/°Ô1Að
 �n‰nÓˆÜ!Ø×ÑØØ×ÑØ�I‰I�O‰O×'Ñ'Ø×Ñó
ð 	
r!   c                ó>   — | j                   d uxr | j                  d uS r   )r   r   r$   s    r   r'   zAbstractEngine._is_aligned^   s#   € à× Ñ ¨Ð,ÒM°×1AÑ1AÈÐ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   € Ûð �L‰L‹Nˆà�i‰i�m‰mˆØ—‘ˆÜ §	¡	Ô*Ø�{‰{˜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   € Ø�y‰y‹{Ð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0�Nô 0ô"�>ô ð" Øñ,€Ð	(ô r!   