Ë
    ¤e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<   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        ú]/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/pandas/core/computation/engines.pyÚ_check_ne_builtin_clashr      s_   € ð �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 | _        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.
        )r
   Úpprint_thingr   ©r   s    r   ÚconvertzAbstractEngine.convert9   s   € ô ×$Ñ$ T§Y¡YÓ/Ð/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=¸d¿i¹i¿o¹oÓ2NÑ/ˆDÔ˜dÔ/ð �n‰nÓˆÜ!Ø×Ñ˜c 4×#4Ñ#4°d·i±i·o±o×6QÑ6Qó
ð 	
r    c                ó>   — | j                   d uxr | j                  d uS r   )r   r   r#   s    r   r&   zAbstractEngine._is_alignedV   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._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._evaluatep   sG   € Ûð �L‰L‹Nˆà�i‰i�m‰mˆØ—‘ˆÜ §	¡	Ô*Ø�{‰{˜1¨ˆ{Ó/Ð/r    N)r5   r6   r7   r8   r9   r(   r.   r    r   r?   r?   k   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    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.formatsr
   Úpandas.core.computation.exprr   Ú	frozensetr   r   ÚABCMetar   r?   rH   rL   Ú__annotations__r.   r    r   ú<module>rW      s�   ðòõ #ã 
Ý  å 0÷÷õ
 'áÝ1á˜ :Ñ-Ó.€ó
ô&9˜sŸ{™{õ 9ôx0�Nô 0ô"�>ô ð" Øñ,€Ð	(ô r    