§
    Ð! hò  ã                  ó  — 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     úYc:\xampp_lite_8_4\www\timesheet\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                ó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   € õ Ô$ T¤YÑ/Ô/Ð/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=¸d¼i¼oÑ2NÔ2NÑ/ˆDÔ˜dÔ/ð �nŠnÑÔˆÝ!ØÔ˜c 4Ô#4°d´i´oÔ6Qñ
ô 
ð 	
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   € ØÐÐÐð �LŠL‰NŒNˆàŒiŒmˆØ”ˆÝ ¤	Ñ*Ô*Ð*Ø�{Š{˜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   € Ø�yŠy‰{Œ{Ð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ð 0�Nñ 0ô 0ð 0ð"ð ð ð ð �>ñ ô ð ð" Øð,ð ,€ð ð ð ñ ð ð r   