ó
    Ñ]j†  ã                  ó  • % S r SSKJr  SSKrSSKJr  SSKJr  SSKJ	r	J
r
  SSKJrJr  SSKJr  \(       a  SS	KJr  \" \\-   5      rSS
 jr " S S\R*                  S9r " S S\5      r " S S\5      r\\S.rS\S'   g)z)
Engine classes for :func:`~pandas.eval`
é    )ÚannotationsN)ÚTYPE_CHECKING)ÚNumExprClobberingError)Úalign_termsÚreconstruct_object)ÚMATHOPSÚ
REDUCTIONS)Úprinting)ÚExprc                óÀ   • U R                   nU[        -  nU(       a=  SR                  U Vs/ s H  n[        U5      PM     sn5      n[	        SU  SU S35      egs  snf )zm
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        Ú\/home/mande/repo/quber/.venv/lib/python3.13/site-packages/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                  ór   • \ rS rSrSrSrSS jrSS jrSS jr\	SS j5       r
\R                  S 5       rS	rg
)ÚAbstractEngineé0   z/Object serving as a base class for all engines.Fc                ó:   • Xl         S U l        S U l        S U l        g ©N)r   Úaligned_axesÚresult_typeÚresult_name)Úselfr   s     r   Ú__init__ÚAbstractEngine.__init__5   s   € ØŒ	Ø ˆÔØˆÔØˆÕó    c                óB   • [         R                  " U R                  5      $ )zW
Convert an expression for evaluation.

Defaults to return the expression as a string.
)r
   Úpprint_thingr   ©r    s    r   ÚconvertÚAbstractEngine.convert;   s   € ô ×$Ò$ T§Y¡YÓ/Ð/r#   c                ó>  • U R                   (       d2  [        U R                  R                  5      u  U l        U l        U l        U R                  5       n[        U R                  UU R
                  U R                  R                  R                  U R                  5      $ )zê
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   ÚevaluateÚAbstractEngine.evaluateC   s}   € ð ××ÜDOØ—	‘	—‘óEÑAˆDÔ˜dÔ/°Ô1Að
 �n‰nÓˆÜ!Ø×ÑØØ×ÑØ�I‰I�O‰O×'Ñ'Ø×Ñó
ð 	
r#   c                óH   • U R                   S L=(       a    U R                  S L$ r   )r   r   r&   s    r   r*   ÚAbstractEngine._is_aligned^   s#   € à× Ñ ¨Ð,×M°×1AÑ1AÈÐ1MÐMr#   c                ó   • g)zÁ
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,   ÚAbstractEngine._evaluateb   s   � r#   )r   r   r   r   N©ÚreturnÚNone)r7   Ústr)r7   Úobject)r7   Úbool)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Úhas_neg_fracr!   r'   r/   Úpropertyr*   ÚabcÚabstractmethodr,   Ú__static_attributes__r4   r#   r   r   r   0   sI   † Ù9à€Lô ô0ô
ð6 óNó ðNð 	×Ññó ór#   r   )Ú	metaclassc                  ó"   • \ rS rSrSrSrS rSrg)ÚNumExprEngineés   zNumExpr engine classTc                ó¶   • SS K nU R                  5       nU R                  R                  nUR                  n[        U R                  5        UR                  X$S9$ )Nr   )Ú
local_dict)Únumexprr'   r   ÚenvÚ
full_scoper   r/   )r    Úner   rM   Úscopes        r   r,   ÚNumExprEngine._evaluatex   sE   € Ûð �L‰L‹Nˆà�i‰i�m‰mˆØ—‘ˆÜ §	¡	Ô*Ø�{‰{˜1ˆ{Ð/Ð/r#   r4   N)r<   r=   r>   r?   r@   rA   r,   rE   r4   r#   r   rH   rH   s   s   † Ùà€Lõ	0r#   rH   c                  ó,   • \ rS rSrSrSrS rSS jrSrg)	ÚPythonEngineé„   zG
Evaluate an expression in Python space.

Mostly for testing purposes.
Fc                ó"   • U R                  5       $ r   )r   r&   s    r   r/   ÚPythonEngine.evaluate�   s   € Ø�y‰y‹{Ðr#   c                ó   • g r   r4   r&   s    r   r,   ÚPythonEngine._evaluate�   s   € Ør#   r4   Nr6   )	r<   r=   r>   r?   r@   rA   r/   r,   rE   r4   r#   r   rS   rS   „   s   † ñð €Lò÷r#   rS   )rL   Úpythonzdict[str, type[AbstractEngine]]ÚENGINES)r   r   r7   r8   )r@   Ú
__future__r   rC   Útypingr   Úpandas.errorsr   Úpandas.core.computation.alignr   r   Úpandas.core.computation.opsr   r	   Úpandas.io.formatsr
   Úpandas.core.computation.exprr   Ú	frozensetr   r   ÚABCMetar   rH   rS   rZ   Ú__annotations__r4   r#   r   Ú<module>re      sƒ   ðòõ #ã 
Ý  å 0÷÷õ
 'æÝ1á˜ :Ñ-Ó.€ô
ô&@˜sŸ{™{ò @ôF0�Nô 0ô"�>ô ð" Øñ,€Ð	(ô r#   