§
    	�’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<   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     úMC:\Projects\DSCons\.venv\Lib\site-packages\pandas\core\computation\engines.pyú
<listcomp>z+_check_ne_builtin_clash.<locals>.<listcomp>*   s   € Ð0Ð0Ð0 1•t˜A‘w”wÐ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   € ð ŒJ€EØ•lÑ"€Gàð 
Ø�IŠIÐ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                ó>   — || _         d | _        d | _        d | _        d S ©N)r   Úaligned_axesÚresult_typeÚresult_name)Úselfr   s     r   Ú__init__zAbstractEngine.__init__5   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.convert;   s   € õ Ô$ T¤YÑ/Ô/Ð/r   Úobjectc                óò   — | j         s,t          | 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   sy   € ð Ôð 	ÝDOØ”	”ñEô EÑAˆDÔ˜dÔ/°Ô1Að
 �nŠnÑÔˆÝ!ØÔØØÔØŒIŒOÔ'ØÔñ
ô 
ð 	
r   Úboolc                ó&   — | j         d uo| j        d uS r"   )r#   r$   r+   s    r   r/   zAbstractEngine._is_aligned^   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   r1   zAbstractEngine._evaluateb   s   € € € r   N©r   r   )r   r(   )r   r-   )r   r5   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úhas_neg_fracr'   r,   r4   Úpropertyr/   ÚabcÚabstractmethodr1   r   r   r   r    r    0   sž   € € € € € Ø9Ð9à€Lð ð  ð  ð  ð0ð 0ð 0ð 0ð
ð 
ð 
ð 
ð6 ð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   r4   )r&   Úner   rG   Úscopes        r   r1   zNumExprEngine._evaluatex   sS   € ØÐÐÐð �LŠL‰NŒNˆàŒiŒmˆØ”ˆÝ ¤	Ñ*Ô*Ð*Ø�{Š{˜1¨ˆ{Ñ/Ô/Ð/r   N)r9   r:   r;   r<   r=   r1   r   r   r   rC   rC   s   s.   € € € € € ØÐà€Lð	0ð 	0ð 	0ð 	0ð 	0r   rC   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   r4   zPythonEngine.evaluate�   s   € Ø�yŠy‰{Œ{Ðr   r   r   c                ó   — d S r"   r   r+   s    r   r1   zPythonEngine._evaluate�   s   € Øˆr   Nr8   )r9   r:   r;   r<   r=   r4   r1   r   r   r   rL   rL   „   sH   € € € € € ðð ð €Lðð ð ðð ð ð ð ð r   rL   )rF   Ú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    rC   rL   rP   Ú__annotations__r   r   r   ú<module>r[      s¼  ððð ð ð #Ð "Ð "Ð "Ð "Ð "à 
€
€
€
Ø  Ð  Ð  Ð  Ð  Ð  à 0Ð 0Ð 0Ð 0Ð 0Ð 0ðð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð
 'Ð &Ð &Ð &Ð &Ð &àð 2Ø1Ð1Ð1Ð1Ð1Ð1àˆy˜ :Ñ-Ñ.Ô.€ð
ð 
ð 
ð 
ð&@ð @ð @ð @ð @˜sœ{ð @ñ @ô @ð @ðF0ð 0ð 0ð 0ð 0�Nñ 0ô 0ð 0ð"ð ð ð ð �>ñ ô ð ð" Øð,ð ,€ð ð ð ñ ð ð r   