Ë
    ¤ehèa  ã                  ó~  — d Z ddlmZ ddlZddlmZmZ ddlmZ ddl	Z	ddl
mZmZmZ ddlZddlmZ ddlmc mZ ddlmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$ dd	l%m&Z&m'Z' dd
l(m)Z) ddl*m+Z+ d,d„Z,d,d„Z-d,d„Z.d„ Z/d„ Z0 e0e.e-e,e&«      f	 	 	 d-d„Z1d„ Z2 e2e3«      Z4 e2e5«      Z6 e7d„ d„  e8e«      D «       D «       «      Z9e9fd„Z: e7d„ e9D «       «      Z; e:ejx                  «      Z= e:ej|                  «      Z? e:ej€                  «      ZA e:ej„                  «      ZC e:ejˆ                  «      ZE e:ejŒ                  «      ZG e:ej�                  «      ZI e:ej”                  «      ZK e:ej˜                  «      ZM e:ejœ                  «      ZO e:ej                   «      ZQ e:ej                  «      ZR e:ej¦                  «      ZT e7g d¢«      ZU e7g d¢«      ZVe?e=z  eOz  eQz  eRz  eTz  eCz  eVz  eUz
  ZWe;eWz
  eUz  ZXeWeXz  ZYdeY› �ZZeYrJ eZ«       ‚d.d„Z[ ed«      Z\d/d„Z]d„ Z^ee#dœZ_d„ Z` e]eW«       e`e_«       G d „ d!ejÂ                  «      «       «       Zb e7g d"¢«      Zc e7eez   «      Zd e]eWecz  eE e7g d#¢«      z  z
  «       G d$„ d%eb«      «       Ze e]eWecz   e7d&g«      z  «       G d'„ d(eb«      «       Zf G d)„ d*«      Zgefeed+œZhy)0z
:func:`~pandas.eval` parsers.
é    )ÚannotationsN)ÚpartialÚreduce©Ú	iskeyword)ÚCallableÚClassVarÚTypeVar)ÚUndefinedVariableError)ÚARITH_OPS_SYMSÚBOOL_OPS_SYMSÚCMP_OPS_SYMSÚ	LOCAL_TAGÚMATHOPSÚ
REDUCTIONSÚUNARY_OPS_SYMSÚBinOpÚConstantÚFuncNodeÚOpÚTermÚUnaryOpÚis_term)Úclean_backtick_quoted_toksÚtokenize_string)ÚScope)Úprintingc                ó$   — | \  }}||dk(  rdfS |fS )a`  
    Rewrite the assignment operator for PyTables expressions that use ``=``
    as a substitute for ``==``.

    Parameters
    ----------
    tok : tuple of int, str
        ints correspond to the all caps constants in the tokenize module

    Returns
    -------
    tuple of int, str
        Either the input or token or the replacement values
    ú=ú==© ©ÚtokÚtoknumÚtokvals      úZ/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/pandas/core/computation/expr.pyÚ_rewrite_assignr'   1   s&   € ð �N€FˆFØ˜6 Sš=�4Ð4Ð4¨fÐ4Ð4ó    c                óž   — | \  }}|t         j                  k(  r2|dk(  rt         j                  dfS |dk(  rt         j                  dfS ||fS ||fS )aj  
    Replace ``&`` with ``and`` and ``|`` with ``or`` so that bitwise
    precedence is changed to boolean precedence.

    Parameters
    ----------
    tok : tuple of int, str
        ints correspond to the all caps constants in the tokenize module

    Returns
    -------
    tuple of int, str
        Either the input or token or the replacement values
    ú&Úandú|Úor)ÚtokenizeÚOPÚNAMEr"   s      r&   Ú_replace_booleansr1   D   sY   € ð �N€FˆFØ”—‘ÒØ�SŠ=Ü—=‘= %Ð'Ð'Ø�sŠ]Ü—=‘= $Ð&Ð&Ø�vˆ~ÐØ�6ˆ>Ðr(   c                óp   — | \  }}|t         j                  k(  r|dk(  rt         j                  t        fS ||fS )a(  
    Replace local variables with a syntactically valid name.

    Parameters
    ----------
    tok : tuple of int, str
        ints correspond to the all caps constants in the tokenize module

    Returns
    -------
    tuple of int, str
        Either the input or token or the replacement values

    Notes
    -----
    This is somewhat of a hack in that we rewrite a string such as ``'@a'`` as
    ``'__pd_eval_local_a'`` by telling the tokenizer that ``__pd_eval_local_``
    is a ``tokenize.OP`` and to replace the ``'@'`` symbol with it.
    ú@)r.   r/   r   r"   s      r&   Ú_replace_localsr4   ]   s8   € ð( �N€FˆFØ”—‘Ò ¨3¢Ü�{‰{œIÐ%Ð%Ø�6ˆ>Ðr(   c                ó   ‡ ‡— ˆ ˆfd„S )z
    Compose 2 callables.
    c                 ó    •—  ‰ ‰| i |¤Ž«      S ©Nr!   )ÚargsÚkwargsÚfÚgs     €€r&   ú<lambda>z_compose2.<locals>.<lambda>{   s   ø€ ¡1¡Q¨Ð%7°Ñ%7Ó#8€ r(   r!   )r:   r;   s   ``r&   Ú	_compose2r=   w   s   ù€ ô 9Ð8r(   c                 óL   — t        | «      dkD  sJ d«       ‚t        t        | «      S )z&
    Compose 2 or more callables.
    é   z.At least 2 callables must be passed to compose)Úlenr   r=   )Úfuncss    r&   Ú_composerB   ~   s'   € ô ˆu‹:˜Š>ÐKÐKÓKˆ>Ü”)˜UÓ#Ð#r(   c                óv   ‡— t        ‰«      sJ d«       ‚t        j                  ˆfd„t        | «      D «       «      S )aÒ  
    Compose a collection of tokenization functions.

    Parameters
    ----------
    source : str
        A Python source code string
    f : callable
        This takes a tuple of (toknum, tokval) as its argument and returns a
        tuple with the same structure but possibly different elements. Defaults
        to the composition of ``_rewrite_assign``, ``_replace_booleans``, and
        ``_replace_locals``.

    Returns
    -------
    str
        Valid Python source code

    Notes
    -----
    The `f` parameter can be any callable that takes *and* returns input of the
    form ``(toknum, tokval)``, where ``toknum`` is one of the constants from
    the ``tokenize`` module and ``tokval`` is a string.
    zf must be callablec              3  ó.   •K  — | ]  } ‰|«      –— Œ y ­wr7   r!   )Ú.0Úxr:   s     €r&   ú	<genexpr>z_preparse.<locals>.<genexpr>¥   s   øè ø€ ÒE¨™q ŸtÑEùs   ƒ)Úcallabler.   Ú
untokenizer   ©Úsourcer:   s    `r&   Ú	_preparserL   †   s3   ø€ ô< �AŒ;Ð,Ð,Ó,ˆ;Ü×ÑÓE¬_¸VÓ-DÔEÓEÐEr(   c                ó   ‡ — ˆ fd„S )zO
    Factory for a type checking function of type ``t`` or tuple of types.
    c                ó0   •— t        | j                  ‰«      S r7   )Ú
isinstanceÚvalue)rF   Úts    €r&   r<   z_is_type.<locals>.<lambda>¬   s   ø€ ”Z §¡¨Ó+€ r(   r!   )rQ   s   `r&   Ú_is_typerR   ¨   s   ø€ ó ,Ð+r(   c              #  ót   K  — | ]0  }t        |t        «      rt        |t        j                  «      r|–— Œ2 y ­wr7   )rO   ÚtypeÚ
issubclassÚastÚAST)rE   Únodes     r&   rG   rG   ´   s/   è ø€ ò àÜ�$œÔ¤*¨T´3·7±7Ô";ô 	ñùs   ‚68c              #  ó<   K  — | ]  }t        t        |«      –— Œ y ­wr7   )ÚgetattrrV   )rE   Únames     r&   rG   rG   ¶   s   è ø€ Ò9¨”œ˜d×#Ñ9ùs   ‚c                ó0   ‡ — ˆ fd„|D «       }t        |«      S )zE
    Filter out AST nodes that are subclasses of ``superclass``.
    c              3  óP   •K  — | ]  }t        |‰«      sŒ|j                  –— Œ y ­wr7   )rU   Ú__name__)rE   rX   Ú
superclasss     €r&   rG   z _filter_nodes.<locals>.<genexpr>¿   s   øè ø€ ÒV D¼ÀDÈ*Õ9U�$—-•-ÑVùs   ƒ&•&)Ú	frozenset)r_   Ú	all_nodesÚ
node_namess   `  r&   Ú_filter_nodesrc   »   s   ø€ ó W¨IÔV€JÜ�ZÓ Ð r(   c              #  ó4   K  — | ]  }|j                   –— Œ y ­wr7   )r^   ©rE   rF   s     r&   rG   rG   Ã   s   è ø€ Ò;¨1˜AŸJ�JÑ;ùó   ‚)ÚAssignÚModuleÚExpr)ÚYieldÚGeneratorExpÚIfExpÚDictCompÚSetCompÚReprÚLambdaÚSetrW   ÚIsÚIsNotz$cannot both support and not support c                ó   ‡ — ˆ fd„}|S )zV
    Return a function that raises a NotImplementedError with a passed node name.
    c                ó"   •— t        d‰› d�«      ‚)Nú'z' nodes are not implemented)ÚNotImplementedError)Úselfr8   r9   Ú	node_names      €r&   r:   z _node_not_implemented.<locals>.f  s   ø€ Ü! A i [Ð0KÐ"LÓMÐMr(   r!   )ry   r:   s   ` r&   Ú_node_not_implementedrz   ü   s   ø€ ô
Nð €Hr(   Ú_Tc                ó   ‡ — dˆ fd„}|S )z‹
    Decorator to disallow certain nodes from parsing. Raises a
    NotImplementedError instead.

    Returns
    -------
    callable
    c                óŠ   •— d| _         ‰D ]5  }t        |«      }d|› �}| xj                   |fz  c_         t        | ||«       Œ7 | S )Nr!   Úvisit_)Úunsupported_nodesrz   Úsetattr)ÚclsrX   Ú
new_methodr[   Únodess       €r&   Ú
disallowedzdisallow.<locals>.disallowed  sU   ø€ à "ˆÔØò 	+ˆDÜ.¨tÓ4ˆJØ˜D˜6�?ˆDà×!Ò! d WÑ,Õ!Ü�C˜˜zÕ*ð	+ð ˆ
r(   )r�   útype[_T]Úreturnr…   r!   )rƒ   r„   s   ` r&   Údisallowr‡     s   ø€ õ	ð Ðr(   c                ó   ‡ ‡— ˆ ˆfd„}|S )zw
    Return a function to create an op class with its symbol already passed.

    Returns
    -------
    callable
    c                ó$   •— t        ‰‰g|¢­i |¤ŽS )z’
        Return a partial function with an Op subclass with an operator already passed.

        Returns
        -------
        callable
        )r   )rx   rX   r8   r9   Úop_classÚ	op_symbols       €€r&   r:   z_op_maker.<locals>.f.  s   ø€ ô �x Ð<¨TÒ<°VÑ<Ð<r(   r!   )rŠ   r‹   r:   s   `` r&   Ú	_op_makerrŒ   %  s   ù€ õ=ð €Hr(   )ÚbinaryÚunaryc                ó   ‡ — ˆ fd„}|S )z9
    Decorator to add default implementation of ops.
    c                óÊ   •— ‰j                  «       D ]N  \  }}t        | |› d�«      }t        | |› d�«      }|D ]&  }||   }|€Œt        ||«      }t        | d|› �|«       Œ( ŒP | S )NÚ_opsÚ_op_nodes_mapr~   )ÚitemsrZ   rŒ   r€   )	r�   Úop_attr_namerŠ   ÚopsÚops_mapÚopÚop_nodeÚmade_opÚ
op_classess	           €r&   r:   zadd_ops.<locals>.fC  sŠ   ø€ Ø&0×&6Ñ&6Ó&8ò 	>Ñ"ˆL˜(Ü˜# , ¨tÐ4Ó5ˆCÜ˜c l ^°=Ð#AÓBˆGØò >�Ø! "™+�ØÑ&Ü'¨°"Ó5�GÜ˜C 6¨'¨Ð!3°WÕ=ñ	>ð	>ð ˆ
r(   r!   )rš   r:   s   ` r&   Úadd_opsr›   >  s   ø€ ô
	ð €Hr(   c                  ó
  — e Zd ZU dZeZded<   eZded<   e	e
z   ez   ZdZ e eee«      «      ZeZdZ e eee«      «      Zej,                  ej.                  ej0                  ej2                  ej.                  ej.                  ej2                  ej2                  iZded<   efd%d	„Zd
„ Zd„ Zd„ Zd„ Z d&d„Z!d„ Z"d„ Z#	 	 d'd„Z$d„ Z%d„ Z&d(d„Z'd(d„Z(d(d„Z)d(d„Z*d(d„Z+d(d„Z,e,Z-d„ Z.d(d„Z/d)d„Z0d„ Z1d„ Z2d*d „Z3d!„ Z4d"„ Z5d#„ Z6d$„ Z7y)+ÚBaseExprVisitorzÌ
    Custom ast walker. Parsers of other engines should subclass this class
    if necessary.

    Parameters
    ----------
    env : Scope
    engine : str
    parser : str
    preparser : callable
    zClassVar[type[Term]]Ú
const_typeÚ	term_type)ÚGtÚLtÚGtEÚLtEÚEqÚNotEqÚInÚNotInÚBitAndÚBitOrÚAndÚOrÚAddÚSubÚMultÚDivÚPowÚFloorDivÚMod)ÚUAddÚUSubÚInvertÚNotztuple[str, ...]r   c                óJ   — || _         || _        || _        || _        d | _        y r7   )ÚenvÚengineÚparserÚ	preparserÚassigner)rx   r¸   r¹   rº   r»   s        r&   Ú__init__zBaseExprVisitor.__init__ˆ  s%   € ØˆŒØˆŒØˆŒØ"ˆŒØˆ�r(   c                ód  — t        |t        «      r:| j                  |«      }	 t        j                  t        j
                  |«      «      }dt        |«      j                  › �}t        | |«      } ||fi |¤ŽS # t        $ r.}t        d„ |j                  «       D «       «      rd|_	        |‚d }~ww xY w)Nc              3  ó2   K  — | ]  }t        |«      –— Œ y ­wr7   r   re   s     r&   rG   z(BaseExprVisitor.visit.<locals>.<genexpr>•  s   è ø€ Ò;¨”y —|Ñ;ùs   ‚z4Python keyword not valid identifier in numexpr queryr~   )rO   Ústrr»   rV   Úfix_missing_locationsÚparseÚSyntaxErrorÚanyÚsplitÚmsgrT   r^   rZ   )rx   rX   r9   ÚcleanÚeÚmethodÚvisitors          r&   ÚvisitzBaseExprVisitor.visit�  sŸ   € Ü�dœCÔ Ø—N‘N 4Ó(ˆEðÜ×0Ñ0´·±¸5Ó1AÓB�ð œ$˜t›*×-Ñ-Ð.Ð/ˆÜ˜$ Ó'ˆÙ�tÑ&˜vÑ&Ð&øô ò ÜÑ;¨U¯[©[«]Ô;Ô;ØR�A”EØ�ûðús   £(A8 Á8	B/Â)B*Â*B/c                óŒ   — t        |j                  «      dk7  rt        d«      ‚|j                  d   } | j                  |fi |¤ŽS )Nr?   z#only a single expression is allowedr   )r@   ÚbodyrÃ   rË   )rx   rX   r9   Úexprs       r&   Úvisit_ModulezBaseExprVisitor.visit_Module�  sA   € Üˆt�y‰y‹>˜QÒÜÐCÓDÐDØ�y‰y˜‰|ˆØˆt�z‰z˜$Ñ) &Ñ)Ð)r(   c                ó<   —  | j                   |j                  fi |¤ŽS r7   ©rË   rP   ©rx   rX   r9   s      r&   Ú
visit_ExprzBaseExprVisitor.visit_Expr£  s   € Øˆt�z‰z˜$Ÿ*™*Ñ/¨Ñ/Ð/r(   c                óB  — |j                   }t        |«      }t        |«      rçt        |«      rÜ|| j                  v rÎt	        t
        ||f«      \  }}t	        t        ||f«      \  }}	|s|s|s|	r | j                  |   «       }|	rB| j                  j                  |j                  g«      }
| j                  |
| j                  «      }|rB| j                  j                  |j                  g«      }
| j                  |
| j                  «      }| j                  |«      }||||fS r7   )r—   rT   r   Úrewrite_mapÚmapÚ_is_listÚ_is_strr¸   Úadd_tmprP   rŸ   rË   )rx   rX   ÚleftÚrightÚop_instanceÚop_typeÚ	left_listÚ
right_listÚleft_strÚ	right_strr[   r—   s               r&   Ú_rewrite_membership_opz&BaseExprVisitor._rewrite_membership_op¦  sü   € à—g‘gˆÜ�{Ó#ˆô �4Œ=œW Uœ^°¸4×;KÑ;KÑ0KÜ$'¬°4¸°-Ó$@Ñ!ˆI�zÜ"%¤g°°e¨}Ó"=ÑˆH�iñ ™J©(±iØ7˜d×.Ñ.¨wÑ7Ó9�ñ Ø—x‘x×'Ñ'¨¯©¨Ó6�ØŸ™ t¨T¯X©XÓ6�áØ—x‘x×'Ñ'¨¯©¨Ó5�Ø—~‘~ d¨D¯H©HÓ5�à�Z‰Z˜Ó$ˆØ�;  eÐ+Ð+r(   Nc                óº   — |€| j                  |j                  d¬«      }|€| j                  |j                  d¬«      }| j                  |||«      \  }}}}||||fS )NrÚ   )ÚsiderÛ   )rË   rÚ   rÛ   râ   )rx   rX   rÚ   rÛ   r—   rŠ   s         r&   Ú_maybe_transform_eq_nez&BaseExprVisitor._maybe_transform_eq_neÁ  sd   € Øˆ<Ø—:‘:˜dŸi™i¨f�:Ó5ˆDØˆ=Ø—J‘J˜tŸz™z°�JÓ8ˆEØ$(×$?Ñ$?ÀÀdÈEÓ$RÑ!ˆˆH�d˜EØ�8˜T 5Ð(Ð(r(   c                ól  — t        j                  t         j                  «      }|j                  r{t	        |d«      ro|j                  sc|j
                  |k(  rT| j                  j                  t        j                  |j                  «      «      }| j                  || j                  «      }|j                  r{t	        |d«      ro|j                  sc|j
                  |k(  rT| j                  j                  t        j                  |j                  «      «      }| j                  || j                  «      }||fS )NrP   )
ÚnpÚdtypeÚfloat32Ú	is_scalarÚhasattrÚreturn_typer¸   rÙ   rP   rŸ   )rx   rÚ   rÛ   Úf32r[   s        r&   Ú_maybe_downcast_constantsz)BaseExprVisitor._maybe_downcast_constantsÉ  sØ   € Ü�h‰h”r—z‘zÓ"ˆà�NŠNÜ˜˜gÔ&Ø—O’OØ×!Ñ! SÒ(ð —8‘8×#Ñ#¤B§J¡J¨t¯z©zÓ$:Ó;ˆDØ—>‘> $¨¯©Ó1ˆDà�OŠOÜ˜˜wÔ'Ø—N’NØ× Ñ  CÒ'ð —8‘8×#Ñ#¤B§J¡J¨u¯{©{Ó$;Ó<ˆDØ—N‘N 4¨¯©Ó2ˆEà�Uˆ{Ðr(   c                ó|   — |j                  | j                  | j                  | j                  | j                  |«      S r7   )Úevaluater¸   r¹   rº   rŸ   )rx   ÚbinopÚeval_in_pythons      r&   Ú_maybe_evalzBaseExprVisitor._maybe_evalà  s0   € ð �~‰~Ø�H‰H�d—k‘k 4§;¡;°·±Àó
ð 	
r(   c           	     ó  —  |||«      }|j                   r3t        d|j                  › d|j                  › d|j                  › d�«      ‚| j                  dk7  rH|j                  t
        v rt        |dd«      st        |dd«      r| j                  || j                  «      S |j                  |v r| j                  ||«      S | j                  dk7  r=t        |dd «      t        k(  st        |dd «      t        k(  r| j                  |||z   «      S |S )	Nz unsupported operand type(s) for z: 'z' and 'rv   ÚpytablesÚis_datetimeFrì   )
Úhas_invalid_return_typeÚ	TypeErrorr—   rT   r¹   r   rZ   ró   Ú
binary_opsÚobject)rx   r—   rŠ   ÚlhsÚrhsrò   Úmaybe_eval_in_pythonÚress           r&   Ú_maybe_evaluate_binopz%BaseExprVisitor._maybe_evaluate_binopë  s  € ñ ��c‹lˆà×&Ò&ÜØ2°3·6±6°(ð ;Ø—H‘H�:˜W S§X¡X J¨að1óð ð
 �;‰;˜*Ò$Ø�F‰F”lÑ"Ü˜˜]¨EÔ2Ü�s˜M¨5Ô1ð ×#Ñ# C¨¯©Ó9Ð9à�6‰6�^Ñ#à×#Ñ# C¨Ó8Ð8Ø�[‰[˜JÒ&ä˜˜]¨DÓ1´VÒ;Ü˜3 ¨tÓ4¼Ò>ð ×'Ñ'¨¨^Ð>RÑ-RÓSÐSØˆ
r(   c                ó€   — | j                  |«      \  }}}}| j                  ||«      \  }}| j                  ||||«      S r7   )rå   rî   rÿ   )rx   rX   r9   r—   rŠ   rÚ   rÛ   s          r&   Úvisit_BinOpzBaseExprVisitor.visit_BinOp  sH   € Ø$(×$?Ñ$?ÀÓ$EÑ!ˆˆH�d˜EØ×4Ñ4°T¸5ÓA‰ˆˆeØ×)Ñ)¨"¨h¸¸eÓDÐDr(   c                ó~   — | j                  |j                  «      }| j                  |j                  «      } ||«      S r7   )rË   r—   Úoperand)rx   rX   r9   r—   r  s        r&   Úvisit_UnaryOpzBaseExprVisitor.visit_UnaryOp  s0   € Ø�Z‰Z˜Ÿ™Ó ˆØ—*‘*˜TŸ\™\Ó*ˆÙ�'‹{Ðr(   c                óR   —  | j                   |j                  | j                  fi |¤ŽS r7   )rŸ   Úidr¸   rÒ   s      r&   Ú
visit_NamezBaseExprVisitor.visit_Name  s"   € Øˆt�~‰~˜dŸg™g t§x¡xÑ:°6Ñ:Ð:r(   c                óN   — | j                  |j                  | j                  «      S r7   ©rž   rP   r¸   rÒ   s      r&   Úvisit_NameConstantz"BaseExprVisitor.visit_NameConstant   ó   € Ø�‰˜tŸz™z¨4¯8©8Ó4Ð4r(   c                óN   — | j                  |j                  | j                  «      S r7   r	  rÒ   s      r&   Ú	visit_NumzBaseExprVisitor.visit_Num$  r  r(   c                óN   — | j                  |j                  | j                  «      S r7   r	  rÒ   s      r&   Úvisit_ConstantzBaseExprVisitor.visit_Constant'  r  r(   c                ó„   — | j                   j                  |j                  «      }| j                  || j                   «      S r7   )r¸   rÙ   ÚsrŸ   )rx   rX   r9   r[   s       r&   Ú	visit_StrzBaseExprVisitor.visit_Str+  s/   € Ø�x‰x×Ñ §¡Ó'ˆØ�~‰~˜d D§H¡HÓ-Ð-r(   c           	     óè   — | j                   j                  |j                  D �cg c]#  } | j                  |«      | j                   «      ‘Œ% c}«      }| j	                  || j                   «      S c c}w r7   )r¸   rÙ   ÚeltsrË   rŸ   )rx   rX   r9   rÈ   r[   s        r&   Ú
visit_ListzBaseExprVisitor.visit_List/  sS   € Ø�x‰x×ÑÀ$Ç)Á)Ö L¸Q  §¡¨A£¨t¯x©xÕ!8Ò LÓMˆØ�~‰~˜d D§H¡HÓ-Ð-ùò !Ms   ¤(A/c                ó8   — | j                  |j                  «      S )zdf.index[4]rÑ   rÒ   s      r&   Úvisit_IndexzBaseExprVisitor.visit_Index5  s   € à�z‰z˜$Ÿ*™*Ó%Ð%r(   c                óÚ  — ddl m} | j                  |j                  «      }| j                  |j                  «      } ||| j
                  | j                  | j                  ¬«      }	 |j                  |   }| j
                  j                  |«      }	| j                  |	| j
                  ¬«      S # t        $ r2  ||| j
                  | j                  | j                  ¬«      }||   }Y Œrw xY w)Nr   )Úeval)Ú
local_dictr¹   rº   )r¸   )Úpandasr  rË   rP   Úslicer¸   r¹   rº   ÚAttributeErrorrÙ   rŸ   )
rx   rX   r9   Úpd_evalrP   ÚslobjÚresultÚvrû   r[   s
             r&   Úvisit_SubscriptzBaseExprVisitor.visit_Subscript9  sÃ   € Ý*à—
‘
˜4Ÿ:™:Ó&ˆØ—
‘
˜4Ÿ:™:Ó&ˆÙØ˜dŸh™h¨t¯{©{À4Ç;Á;ô
ˆð	à—‘˜FÑ#ˆAð �x‰x×Ñ Ó"ˆØ�~‰~˜d¨¯©ˆ~Ó1Ð1øô ò 	áØ $§(¡(°4·;±;ÀtÇ{Á{ôˆCð �F‘ŠAð	ús   Á(B/ Â/8C*Ã)C*c                ó  — |j                   }|�| j                  |«      j                  }|j                  }|�| j                  |«      j                  }|j                  }|�| j                  |«      j                  }t        |||«      S )zdf.index[slice(4,6)])ÚlowerrË   rP   ÚupperÚstepr  )rx   rX   r9   r$  r%  r&  s         r&   Úvisit_SlicezBaseExprVisitor.visit_SliceM  sz   € à—
‘
ˆØÐØ—J‘J˜uÓ%×+Ñ+ˆEØ—
‘
ˆØÐØ—J‘J˜uÓ%×+Ñ+ˆEØ�y‰yˆØÐØ—:‘:˜dÓ#×)Ñ)ˆDä�U˜E 4Ó(Ð(r(   c                ó  — t        |j                  «      dk7  rt        d«      ‚t        |j                  d   t        j
                  «      st        d«      ‚| j                  j                  €t        d«      ‚	  | j                  |j                  d   fi |¤Ž}t        |d|«      | _        | j                  €t        d«      ‚ | j                  |j                  fi |¤ŽS # t        $ r |j                  d   j                  }Y Œjw xY w)zÄ
        support a single assignment node, like

        c = a + b

        set the assigner at the top level, must be a Name node which
        might or might not exist in the resolvers

        r?   z#can only assign a single expressionr   z5left hand side of an assignment must be a single namez%cannot assign without a target objectr[   z@left hand side of an assignment must be a single resolvable name)r@   ÚtargetsrÃ   rO   rV   ÚNamer¸   ÚtargetÚ
ValueErrorrË   r   r  rZ   r¼   rP   )rx   rX   r9   r¼   s       r&   Úvisit_AssignzBaseExprVisitor.visit_Assign[  së   € ô ˆt�|‰|Ó Ò!ÜÐCÓDÐDÜ˜$Ÿ,™, q™/¬3¯8©8Ô4ÜÐUÓVÐVØ�8‰8�?‰?Ð"ÜÐDÓEÐEð	*Ø!�t—z‘z $§,¡,¨q¡/Ñ<°VÑ<ˆHô   ¨&°(Ó;ˆŒØ�=‰=Ð ÜØRóð ð ˆt�z‰z˜$Ÿ*™*Ñ/¨Ñ/Ð/øô &ò 	*Ø—|‘| A‘×)Ñ)ŠHð	*ús   Á8 C Ã"DÄDc                óô  — |j                   }|j                  }|j                  }t        |t        j
                  «      r_| j                  |«      j                  }	 t        ||«      }| j                  j                  |«      }| j                  || j                  «      S t        dt        |«      j                   › �«      ‚# t        $ r/ t        |t        j                  «      r|j                  |k(  r|cY S ‚ w xY w)NzInvalid Attribute context )ÚattrrP   ÚctxrO   rV   ÚLoadrË   rZ   r¸   rÙ   rŸ   r  r*  r  r,  rT   r^   )	rx   rX   r9   r/  rP   r0  Úresolvedr!  r[   s	            r&   Úvisit_AttributezBaseExprVisitor.visit_Attributey  sË   € Ø�y‰yˆØ—
‘
ˆà�h‰hˆÜ�cœ3Ÿ8™8Ô$à—z‘z %Ó(×.Ñ.ˆHðÜ˜H dÓ+�Ø—x‘x×'Ñ'¨Ó*�Ø—~‘~ d¨D¯H©HÓ5Ð5ô Ð5´d¸3³i×6HÑ6HÐ5IÐJÓKÐKøô "ò ä˜e¤S§X¡XÔ.°5·8±8¸tÒ3CØ#’OØð	ús   ÁAB? Â?4C7Ã5C7c                ó*  — t        |j                  t        j                  «      r5|j                  j                  dk7  r| j                  |j                  «      }nKt        |j                  t        j                  «      st        d«      ‚	 | j                  |j                  «      }|€"t        d|j                  j                  › �«      ‚t        |d«      r|j                  }t        |t        «      rR|j                  D �cg c]  }| j                  |«      ‘Œ }}|j                   rt        d|j"                  › d�«      ‚ ||Ž S |j                  D �cg c]#  } | j                  |«      | j$                  «      ‘Œ% }}|j                   D ]„  }t        |t        j&                  «      s#t        d|j                  j                  › d�«      ‚|j(                  sŒM | j                  |j                  «      | j$                  «      ||j(                  <   Œ† | j$                  j+                   ||i |¤Ž«      }| j-                  || j$                  ¬	«      S # t        $ r3 	 t        |j                  j                  «      }n# t        $ r ‚ w xY wY �Œâw xY wc c}w c c}w )
NÚ__call__z"Only named functions are supportedzInvalid function call rP   z
Function "z$" does not support keyword argumentsz keyword error in function call 'rv   )r[   r¸   )rO   ÚfuncrV   Ú	Attributer/  r3  r*  rø   rË   r   r   r  r,  rë   rP   r8   Úkeywordsr[   r¸   ÚkeywordÚargrÙ   rŸ   )	rx   rX   rä   r9   rþ   r:  Únew_argsÚkeyr[   s	            r&   Ú
visit_CallzBaseExprVisitor.visit_Call�  s&  € Ü�d—i‘i¤§¡Ô/°D·I±I·N±NÀjÒ4PØ×&Ñ& t§y¡yÓ1‰CÜ˜DŸI™I¤s§x¡xÔ0ÜÐ@ÓAÐAðØ—j‘j §¡Ó+�ð ˆ;äØ(¨¯©¯©¨Ð7óð ô �3˜Ô Ø—)‘)ˆCä�cœ8Ô$Ø37·9±9Ö=¨C˜Ÿ
™
 3�Ð=ˆHÐ=à�}Š}ÜØ  §¡ 
Ð*NÐOóð ñ ˜�>Ð!ð >B¿Y¹YÖG°c˜˜Ÿ
™
 3›¨¯©Õ1ÐGˆHÐGà—}‘}ò 	F�Ü! #¤s§{¡{Ô3ä$ðØ ŸI™IŸL™L˜>¨ð,óð ð
 —7“7Ø&; d§j¡j°·±Ó&;¸D¿H¹HÓ&E�F˜3Ÿ7™7’Oð	Fð —8‘8×#Ñ#¡C¨Ð$<°VÑ$<Ó=ˆDØ—>‘> t°·±�>Ó:Ð:øôS *ò ðÜ" 4§9¡9§<¡<Ó0‘CøÜ!ò àðúò ðüò" >ùò Hs6   Â
I Ã?JÅ(JÉ	JÉI6É5JÉ6JÊJÊJc                ó   — |S r7   r!   )rx   r—   s     r&   Útranslate_InzBaseExprVisitor.translate_InÀ  s   € Øˆ	r(   c           
     ó,  — |j                   }|j                  }t        |«      dk(  rJ| j                  |d   «      }t	        j
                  ||j                  |d   ¬«      }| j                  |«      S |j                  }g }t        ||«      D ]P  \  }}	| j                  t	        j                  |	g|| j                  |«      g¬«      «      }
|	}|j                  |
«       ŒR | j                  t	        j                  t	        j                  «       |¬«      «      S )Nr?   r   )r—   rÚ   rÛ   )ÚcomparatorsrÚ   r•   )r—   Úvalues)r•   rA  r@   r?  rV   r   rÚ   rË   ÚzipÚCompareÚappendÚBoolOprª   )rx   rX   r9   r•   Úcompsr—   rñ   rÚ   rB  ÚcompÚnew_nodes              r&   Úvisit_ComparezBaseExprVisitor.visit_CompareÃ  sí   € Ø�h‰hˆØ× Ñ ˆô ˆu‹:˜Š?Ø×"Ñ" 3 q¡6Ó*ˆBÜ—I‘I ¨$¯)©)¸5À¹8ÔDˆEØ—:‘:˜eÓ$Ð$ð �y‰yˆØˆÜ˜C ›ò 	$‰HˆB�Ø—z‘zÜ—‘¨¨°TÀ×@QÑ@QÐRTÓ@UÐ?VÔWóˆHð ˆDØ�M‰M˜(Õ#ð	$ð �z‰zœ#Ÿ*™*¬¯©«	¸&ÔAÓBÐBr(   c                óT   — t        |t        t        f«      r|S | j                  |«      S r7   )rO   r   r   rË   )rx   Úbops     r&   Ú_try_visit_binopz BaseExprVisitor._try_visit_binopØ  s#   € Ü�cœB¤˜:Ô&ØˆJØ�z‰z˜#‹Ðr(   c                óB   ‡ ‡— ˆˆ fd„}‰j                   }t        ||«      S )Nc                ó´   •— ‰j                  | «      }‰j                  |«      }‰j                  ‰||«      \  }}}}‰j                  |‰j                  ||«      S r7   )rM  rå   rÿ   r—   )rF   Úyrû   rü   r—   rŠ   rX   rx   s         €€r&   rÊ   z-BaseExprVisitor.visit_BoolOp.<locals>.visitorÞ  s[   ø€ Ø×'Ñ'¨Ó*ˆCØ×'Ñ'¨Ó*ˆCà%)×%@Ñ%@ÀÀsÈCÓ%PÑ"ˆB�˜#˜sØ×-Ñ-¨b°$·'±'¸3ÀÓDÐDr(   )rB  r   )rx   rX   r9   rÊ   Úoperandss   ``   r&   Úvisit_BoolOpzBaseExprVisitor.visit_BoolOpÝ  s!   ù€ õ	Eð —;‘;ˆÜ�g˜xÓ(Ð(r(   ©r†   ÚNone)NN))Úinznot in)r    z!=ú<ú>z<=z>=)r†   r   )r†   r  r7   )8r^   Ú
__module__Ú__qualname__Ú__doc__r   rž   Ú__annotations__r   rŸ   r   r   r   rù   Úbinary_op_nodesÚdictrC  Úbinary_op_nodes_mapr   Ú	unary_opsÚunary_op_nodesÚunary_op_nodes_maprV   r¤   r¦   r¥   r§   rÕ   rL   r½   rË   rÏ   rÓ   râ   rå   rî   ró   rÿ   r  r  r  r
  r  r  r  r  Úvisit_Tupler  r"  r'  r-  r3  r=  r?  rJ  rM  rR  r!   r(   r&   r�   r�   Q  sH  … ñ
ð (0€JÐ$Ó/Ø&*€IÐ#Ó*à Ñ-°Ñ>€Jð€Oñ* ™s :¨Ó?Ó@Ðà€IØ4€NÙ™c )¨^Ó<Ó=Ðð 	�‰�—‘Ø�	‰	�3—9‘9Ø�‰�—‘Ø�	‰	�3—9‘9ð	€Kð 'Ó&à6?ô ò'ò*ò0ò,ó6)òò.	
ð" (Ø?ó%òNEò
ó
;ó5ó5ó5ó.ó.ð €Kò&ó2ó()ò0ò<Ló(1;òfòCò*ó
	)r(   r�   )ÚDictrF  r¦   r§   )rF  r7  r¦   r§   ÚTuplec                  óF   ‡ — e Zd Z ee eeee«      ¬«      f	 dˆ fd„Z	ˆ xZ
S )ÚPandasExprVisitor)r:   c                ó*   •— t         ‰| �  ||||«       y r7   ©Úsuperr½   ©rx   r¸   r¹   rº   r»   Ú	__class__s        €r&   r½   zPandasExprVisitor.__init__ò  s   ø€ ô 	‰Ñ˜˜f f¨iÕ8r(   rS  )r^   rX  rY  r   rL   rB   r4   r1   r   r½   Ú__classcell__©rk  s   @r&   rf  rf  í  s2   ø„ ñ ØÙ�Ð(9Ð;UÓVô
ð
9ð 
÷
9ñ 
9r(   rf  r¶   c                  ó*   ‡ — e Zd Zdd„f	 dˆ fd„Zˆ xZS )ÚPythonExprVisitorc                ó   — | S r7   r!   rJ   s     r&   r<   zPythonExprVisitor.<lambda>  s   € ÀF€ r(   c                ó,   •— t         ‰| �  ||||¬«       y )N)r»   rh  rj  s        €r&   r½   zPythonExprVisitor.__init__  s   ø€ ô 	‰Ñ˜˜f f¸	ÐÕBr(   r7   rS  )r^   rX  rY  r½   rl  rm  s   @r&   ro  ro  ÿ  s   ø„ ò .KðCà	÷Cñ Cr(   ro  c                  ó�   — e Zd ZU dZded<   ded<   ded<   	 	 	 	 d	 	 	 	 	 	 	 	 	 dd„Zed	„ «       Zd
„ Zdd„Z	dd„Z
d„ Zed„ «       Zy)ri   a  
    Object encapsulating an expression.

    Parameters
    ----------
    expr : str
    engine : str, optional, default 'numexpr'
    parser : str, optional, default 'pandas'
    env : Scope, optional, default None
    level : int, optional, default 2
    r   r¸   rÀ   r¹   rº   Nc                óî   — || _         |xs t        |dz   ¬«      | _        || _        || _        t        |   | j                  | j                  | j                  «      | _        | j                  «       | _        y )Nr?   )Úlevel)	rÎ   r   r¸   r¹   rº   ÚPARSERSÚ_visitorrÂ   Úterms)rx   rÎ   r¹   rº   r¸   rt  s         r&   r½   zExpr.__init__  s[   € ð ˆŒ	ØÒ0œ% e¨a¡iÔ0ˆŒØˆŒØˆŒÜ ™¨¯©°$·+±+¸t¿{¹{ÓKˆŒØ—Z‘Z“\ˆ�
r(   c                ó0   — t        | j                  dd «      S )Nr¼   )rZ   rv  ©rx   s    r&   r¼   zExpr.assigner'  s   € ä�t—}‘} j°$Ó7Ð7r(   c                ó8   — | j                  | j                  «      S r7   )rw  r¸   ry  s    r&   r5  zExpr.__call__+  s   € Ø�z‰z˜$Ÿ(™(Ó#Ð#r(   c                ó@   — t        j                  | j                  «      S r7   )r   Úpprint_thingrw  ry  s    r&   Ú__repr__zExpr.__repr__.  s   € Ü×$Ñ$ T§Z¡ZÓ0Ð0r(   c                ó,   — t        | j                  «      S r7   )r@   rÎ   ry  s    r&   Ú__len__zExpr.__len__1  s   € Ü�4—9‘9‹~Ðr(   c                óL   — | j                   j                  | j                  «      S )z&
        Parse an expression.
        )rv  rË   rÎ   ry  s    r&   rÂ   z
Expr.parse4  s   € ð �}‰}×"Ñ" 4§9¡9Ó-Ð-r(   c                óÊ   — t        | j                  «      r t        | j                  j                  g«      S t        d„ t	        j
                  | j                  «      D «       «      S )z1
        Get the names in an expression.
        c              3  ó4   K  — | ]  }|j                   –— Œ y ­wr7   )r[   )rE   Úterms     r&   rG   zExpr.names.<locals>.<genexpr>A  s   è ø€ ÒG t˜Ÿ�ÑGùrf   )r   rw  r`   r[   ÚcomÚflattenry  s    r&   Únamesz
Expr.names:  sD   € ô
 �4—:‘:ÔÜ˜dŸj™jŸo™oÐ.Ó/Ð/ÜÑG¬s¯{©{¸4¿:¹:Ó/FÔGÓGÐGr(   )Únumexprr  Nr   )
r¹   rÀ   rº   rÀ   r¸   zScope | Nonert  Úintr†   rT  )r†   rÀ   )r†   rˆ  )r^   rX  rY  rZ  r[  r½   Úpropertyr¼   r5  r}  r  rÂ   r†  r!   r(   r&   ri   ri     s›   … ñ
ð 
ƒJØƒKØƒKð
  ØØ Øð"ð ð"ð ð	"ð
 ð"ð ð"ð 
ó"ð ñ8ó ð8ò$ó1óò.ð ñHó ñHr(   ri   )Úpythonr  )r#   útuple[int, str]r†   r‹  )rK   rÀ   r†   rÀ   )ry   rÀ   r†   zCallable[..., None])rƒ   zset[str]r†   zCallable[[type[_T]], type[_T]])irZ  Ú
__future__r   rV   Ú	functoolsr   r   r9  r   r.   Útypingr   r	   r
   Únumpyrç   Úpandas.errorsr   Úpandas.core.commonÚcoreÚcommonr„  Úpandas.core.computation.opsr   r   r   r   r   r   r   r   r   r   r   r   r   r   Úpandas.core.computation.parsingr   r   Úpandas.core.computation.scoper   Úpandas.io.formatsr   r'   r1   r4   r=   rB   rL   rR   Úlistr×   rÀ   rØ   r`   ÚdirÚ
_all_nodesrc   Ú_all_node_namesÚmodÚ
_mod_nodesÚstmtÚ_stmt_nodesrÎ   Ú_expr_nodesÚexpr_contextÚ_expr_context_nodesÚboolopÚ_boolop_nodesÚoperatorÚ_operator_nodesÚunaryopÚ_unary_op_nodesÚcmpopÚ_cmp_op_nodesÚcomprehensionÚ_comprehension_nodesÚexcepthandlerÚ_handler_nodesÚ	argumentsÚ_arguments_nodesÚ_keyword_nodesÚaliasÚ_alias_nodesÚ_hacked_nodesÚ_unsupported_expr_nodesÚ_unsupported_nodesÚ_base_supported_nodesÚintersectionÚ_msgrz   r{   r‡   rŒ   Ú_op_classesr›   ÚNodeVisitorr�   Ú_python_not_supportedÚ_numexpr_supported_callsrf  ro  ri   ru  r!   r(   r&   ú<module>r¾     so  ðñõ #ã 
÷õ Û ÷ñ ó å 0ç  Ð  ÷÷ ÷ ÷ ÷ õ 0å &ó5ó&ó2ò49ò$ñ ØÐ*¨OÐ=WóðFØðFð
 	óFòD,ñ �D‹>€Ù
�3‹-€ñ ñ á9±°C³Ô9ôó €
ð )3ó !ñ Ñ;°
Ô;Ó;€Ù˜3Ÿ7™7Ó#€
Ù˜CŸH™HÓ%€Ù˜CŸH™HÓ%€Ù# C×$4Ñ$4Ó5Ð Ù˜cŸj™jÓ)€Ù §¡Ó-€Ù §¡Ó,€Ù˜cŸi™iÓ(€Ù$ S×%6Ñ%6Ó7Ð Ù˜s×0Ñ0Ó1€Ù  §¡Ó/Ð Ù˜sŸ{™{Ó+€Ù˜SŸY™YÓ'€ñ Ò6Ó7€ñ $òóÐ ð$ Øñàñð ñð ñ	ð
 ñð ñð ñð ñ	Ð ð )Ð+=Ñ=ÀÑNÐ Ø!Ð$9Ñ9€Ø	-¨l¨^Ð<€ÙÐ ˜Ó Ðóñ ˆTƒ]€óò0ð, ¨Ñ1€òñ& 
Ð
ÓÙˆÓôS)�c—o‘oó S)ó ó ðS)ñl "Ò"CÓDÐ Ù$ Z°'Ñ%9Ó:Ð ñ 
ØÐ/Ñ/Ø‘yÒ!PÓQÑQñSóô9˜ó 9ó	ð9ñ 
Ð
Ð4Ñ
4±yÀ%ÀÓ7IÑ
IÓJôC˜ó Có KðC÷:Hñ :Hðz 'Ð2CÑ
D�r(   