zmc
2023-12-22 9fdbf60165db0400c2e8e6be2dc6e88138ac719a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
U
¬ý°d¡dã @s dZddlmZddlZddlmZmZddlmZddl    Z    ddl
m Z m Z ddl ZddlmZddlmZddlmmZdd    lmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&dd
l'm(Z(m)Z)dd l*m+Z+dd l,m-Z-d d dœdd„Z.d d dœdd„Z/d d dœdd„Z0dd„Z1dd„Z2e2e0e/e.e(ƒfdddœdd„Z3dd„Z4e4e5ƒZ6e4e7ƒZ8e9dd „d!d „e:eƒDƒDƒƒZ;e;fd"d#„Z<e9e=d$d%„e;ƒƒZ>e<ej?ƒZ@e<ejAƒZBe<ejCƒZDe<ejEƒZFe<ejGƒZHe<ejIƒZJe<ejKƒZLe<ejMƒZNe<ejOƒZPe<ejQƒZRe<ejSƒZTe<ejƒZUe<ejVƒZWes0e<ejXƒZYe9d&d'd(gƒZZe9d)d*d+d,d-d.d/d0d1d2d3g ƒZ[eBe@BeRBeTBeUBeWBeFBe[BeZZ\e>e\eZBZ]e\e]@Z^d4e^›Z_e^r¬t`e_ƒ‚dd5d6œd7d8„Zae d9ƒZbd:d;d<œd=d>„Zcd?d@„Zdee%dAœZedBdC„Zfece\ƒefeeƒGdDdE„dEejgƒƒƒZhe9dFdGdHdIgƒZie9eeƒZjece\eiBeHe9dGdJdHdIdKgƒBƒGdLdM„dMehƒƒZkece\eiBe9dNgƒBƒGdOdP„dPehƒƒZlGdQd(„d(ƒZmelekdRœZndS)Sz
:func:`~pandas.eval` parsers.
é)Ú annotationsN)ÚpartialÚreduce©Ú    iskeyword)ÚCallableÚTypeVar)ÚPY39)ÚUndefinedVariableError)ÚARITH_OPS_SYMSÚ BOOL_OPS_SYMSÚ CMP_OPS_SYMSÚ    LOCAL_TAGÚMATHOPSÚ
REDUCTIONSÚUNARY_OPS_SYMSÚBinOpÚConstantÚDivÚFuncNodeÚOpÚTermÚUnaryOpÚis_term)Úclean_backtick_quoted_toksÚtokenize_string)ÚScope)Úprintingztuple[int, str])ÚtokÚreturncCs|\}}||dkrdn|fS)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
    ú=ú==©©rÚtoknumÚtokvalr"r"úSd:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\pandas/core/computation/expr.pyÚ_rewrite_assign2sr'cCsF|\}}|tjkr>|dkr$tjdfS|dkr6tjdfS||fS||fS)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#r"r"r&Ú_replace_booleansEs
 
 
r/cCs,|\}}|tjkr$|dkr$tjtfS||fS)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-rr#r"r"r&Ú_replace_locals^s
r1cs‡‡fdd„S)z
    Compose 2 callables.
    csˆˆ||ŽƒS©Nr")ÚargsÚkwargs©ÚfÚgr"r&Ú<lambda>|óz_compose2.<locals>.<lambda>r"r5r"r5r&Ú    _compose2xsr:cGst|ƒdkstdƒ‚tt|ƒS)z&
    Compose 2 or more callables.
    éz.At least 2 callables must be passed to compose)ÚlenÚAssertionErrorrr:)Úfuncsr"r"r&Ú_composesr?Ústr)Úsourcercs,tˆƒstdƒ‚t ‡fdd„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.
    zf must be callablec3s|]}ˆ|ƒVqdSr2r"©Ú.0Úx©r6r"r&Ú    <genexpr>¦sz_preparse.<locals>.<genexpr>)Úcallabler=r,Ú
untokenizer©rAr6r"rEr&Ú    _preparse‡srJcs ‡fdd„S)zO
    Factory for a type checking function of type ``t`` or tuple of types.
    cs t|jˆƒSr2)Ú
isinstanceÚvalue©rD©Útr"r&r8­r9z_is_type.<locals>.<lambda>r"rNr"rNr&Ú_is_type©srPccs(|] }t|tƒrt|tjƒr|VqdSr2)rKÚtypeÚ
issubclassÚastÚAST©rCÚnoder"r"r&rFµs
þrFccs|]}tt|ƒVqdSr2)ÚgetattrrS)rCÚnamer"r"r&rF·scs‡fdd„|Dƒ}t|ƒS)zE
    Filter out AST nodes that are subclasses of ``superclass``.
    c3s|]}t|ˆƒr|jVqdSr2)rRÚ__name__rU©Ú
superclassr"r&rFÀs
z _filter_nodes.<locals>.<genexpr>)Ú    frozenset)r[Z    all_nodesZ
node_namesr"rZr&Ú _filter_nodes¼sr]cCs|jSr2)rYrMr"r"r&r8Är9r8ZAssignÚModuleÚExprZYieldZ GeneratorExpZIfExpZDictCompZSetCompÚReprÚLambdaÚSetrTZIsZIsNotz$cannot both support and not support zCallable[(Ellipsis, None)])Ú    node_namercs‡fdd„}|S)zV
    Return a function that raises a NotImplementedError with a passed node name.
    cstdˆ›dƒ‚dS)Nú'z' nodes are not implemented)ÚNotImplementedError)Úselfr3r4©rcr"r&r6sz _node_not_implemented.<locals>.fr")rcr6r"rgr&Ú_node_not_implementeds rhÚ_Tzset[str]zCallable[[type[_T]], type[_T]])Únodesrcsdddœ‡fdd„ }|S)z‹
    Decorator to disallow certain nodes from parsing. Raises a
    NotImplementedError instead.
 
    Returns
    -------
    callable
    ztype[_T])ÚclsrcsBd|_ˆD]2}t|ƒ}d|›}|j|f7_t|||ƒq
|S)Nr"Úvisit_)Úunsupported_nodesrhÚsetattr)rkrVZ
new_methodrX©rjr"r&Ú
disalloweds
zdisallow.<locals>.disallowedr")rjrpr"ror&Údisallows
 rqcs‡‡fdd„}|S)zw
    Return a function to create an op class with its symbol already passed.
 
    Returns
    -------
    callable
    cstˆˆf|ž|ŽS)z’
        Return a partial function with an Op subclass with an operator already passed.
 
        Returns
        -------
        callable
        )r)rfrVr3r4©Úop_classÚ    op_symbolr"r&r62sz_op_maker.<locals>.fr")rsrtr6r"rrr&Ú    _op_maker)s    
ru)ÚbinaryZunarycs‡fdd„}|S)z9
    Decorator to add default implementation of ops.
    cslˆ ¡D]^\}}t||›dƒ}t||›dƒ}|D]0}||}|dk    r4t||ƒ}t|d|›|ƒq4q|S)NZ_opsZ _op_nodes_maprl)ÚitemsrWrurn)rkZ op_attr_namersÚopsZops_mapÚopZop_nodeZmade_op©Ú
op_classesr"r&r6Gs
zadd_ops.<locals>.fr")r{r6r"rzr&Úadd_opsBs r|c@sˆeZdZUdZeZded<eZe    e
e Z dZ eee e ƒƒZeZdZeeeeƒƒZejejejejejejejejiZded<efdd    œd
d „Zd d „Zdd„Zdd„Zdd„Z dFdd„Z!dd„Z"dd„Z#dGdd„Z$dd „Z%d!d"„Z&d#d$„Z'd%d&„Z(d'd    œd(d)„Z)d'd    œd*d+„Z*d'd    œd,d-„Z+d.d/„Z,d0d1„Z-e-Z.d2d3„Z/d4d5„Z0d6d7„Z1d8d9„Z2d:d;„Z3dHd<d=„Z4d>d?„Z5d@dA„Z6dBdC„Z7dDdE„Z8dS)IÚBaseExprVisitorzÌ
    Custom ast walker. Parsers of other engines should subclass this class
    if necessary.
 
    Parameters
    ----------
    env : Scope
    engine : str
    parser : str
    preparser : callable
    z
type[Term]Ú
const_type)ZGtZLtZGtEZLtEÚEqÚNotEqÚInÚNotInZBitAndZBitOrÚAndÚOrZAddZSubZMultNZPowZFloorDivZMod)ZUAddZUSubZInvertÚNotztuple[str, ...]rmÚNone©rcCs"||_||_||_||_d|_dSr2)ÚenvÚengineÚparserÚ    preparserÚassigner©rfrˆr‰rŠr‹r"r"r&Ú__init__Œs
zBaseExprVisitor.__init__c
Ks’t|tƒrl| |¡}zt t |¡¡}WnBtk
rj}z$tdd„| ¡DƒƒrVd|_    |‚W5d}~XYnXdt
|ƒj ›}t ||ƒ}||f|ŽS)Ncss|]}t|ƒVqdSr2rrBr"r"r&rF™sz(BaseExprVisitor.visit.<locals>.<genexpr>z4Python keyword not valid identifier in numexpr queryrl) rKr@r‹rSZfix_missing_locationsÚparseÚ SyntaxErrorÚanyÚsplitÚmsgrQrYrW)rfrVr4ÚcleanÚeÚmethodÚvisitorr"r"r&Úvisit“s
 
 
zBaseExprVisitor.visitcKs.t|jƒdkrtdƒ‚|jd}|j|f|ŽS)Nr;z#only a single expression is allowedr)r<Úbodyrr˜)rfrVr4Úexprr"r"r&Ú visit_Module¡s
zBaseExprVisitor.visit_ModulecKs|j|jf|ŽSr2©r˜rL©rfrVr4r"r"r&Ú
visit_Expr§szBaseExprVisitor.visit_Exprc CsÂ|j}t|ƒ}t|ƒr¬t|ƒr¬||jkr¬tt||fƒ\}}tt||fƒ\}}    |s\|s\|s\|    rh|j|ƒ}|    rŠ|j |j    g¡}
|
|j¡}|r¬|j |j    g¡}
|
|j¡}|  |¡} | |||fSr2) ryrQrÚ rewrite_mapÚmapÚ_is_listÚ_is_strrˆÚadd_tmprLÚ    term_typer˜) rfrVÚleftÚrightZ op_instanceZop_typeZ    left_listZ
right_listZleft_strZ    right_strrXryr"r"r&Ú_rewrite_membership_opªs 
z&BaseExprVisitor._rewrite_membership_opNcCsR|dkr|j|jdd}|dkr0|j|jdd}| |||¡\}}}}||||fS)Nr¥)Úsider¦)r˜r¥r¦r§)rfrVr¥r¦ryrsr"r"r&Ú_maybe_transform_eq_neÅs z&BaseExprVisitor._maybe_transform_eq_necCs˜t tj¡}|jrNt|dƒrN|jsN|j|krN|j t |j¡¡}|     ||j¡}|jrt|dƒr|js|j|kr|j t |j¡¡}|     ||j¡}||fS)NrL)
ÚnpZdtypeÚfloat32Z    is_scalarÚhasattrÚ return_typerˆr£rLr¤)rfr¥r¦Zf32rXr"r"r&Ú_maybe_downcast_constantsÍs, ÿþýüÿþýüz)BaseExprVisitor._maybe_downcast_constantscCs| |j|j|j|j|¡Sr2)Úevaluaterˆr‰rŠr¤)rfÚbinopÚeval_in_pythonr"r"r&Ú _maybe_evaläsÿzBaseExprVisitor._maybe_eval©Úinznot in©r!z!=ú<ú>z<=z>=cCsÀ|||ƒ}|jr2td|j›d|j›d|j›dƒ‚|jdkrl|jtkrRt|ddƒs^t|ddƒrl| ||j¡S|j|kr‚| ||¡S|jdkr¼t|ddƒt    ks¬t|ddƒt    kr¼| |||¡S|S)    Nz unsupported operand type(s) for z: 'z' and 'rdZpytablesZ is_datetimeFr­)
Zhas_invalid_return_typeÚ    TypeErrorryrQr‰r rWr²Ú
binary_opsÚobject)rfryrsÚlhsÚrhsr±Zmaybe_eval_in_pythonÚresr"r"r&Ú_maybe_evaluate_binopïs,    
ÿ
ÿ
þ
ý
 
ÿþz%BaseExprVisitor._maybe_evaluate_binopcKs2| |¡\}}}}| ||¡\}}| ||||¡Sr2)r©r®r¾)rfrVr4ryrsr¥r¦r"r"r&Ú visit_BinOpszBaseExprVisitor.visit_BinOpcKsdd„S)NcSs
t||ƒSr2)r)r»r¼r"r"r&r8r9z+BaseExprVisitor.visit_Div.<locals>.<lambda>r"rr"r"r&Ú    visit_DivszBaseExprVisitor.visit_DivcKs | |j¡}| |j¡}||ƒSr2)r˜ryÚoperand)rfrVr4ryrÁr"r"r&Ú visit_UnaryOps  zBaseExprVisitor.visit_UnaryOpcKs|j|j|jf|ŽSr2)r¤Úidrˆrr"r"r&Ú
visit_Name#szBaseExprVisitor.visit_NamercKs| |j|j¡Sr2)r~rLrˆrr"r"r&Úvisit_NameConstant&sz"BaseExprVisitor.visit_NameConstantcKs| |j|j¡Sr2©r~Únrˆrr"r"r&Ú    visit_Num)szBaseExprVisitor.visit_NumcKs| |j|j¡Sr2rÆrr"r"r&Úvisit_Constant,szBaseExprVisitor.visit_ConstantcKs|j |j¡}| ||j¡Sr2)rˆr£Úsr¤©rfrVr4rXr"r"r&Ú    visit_Str/szBaseExprVisitor.visit_Strc s*ˆj ‡fdd„|jDƒ¡}ˆ |ˆj¡S)Ncsg|]}ˆ |¡ˆjƒ‘qSr"©r˜rˆ)rCr•©rfr"r&Ú
<listcomp>4sz.BaseExprVisitor.visit_List.<locals>.<listcomp>)rˆr£Zeltsr¤rËr"rÎr&Ú
visit_List3szBaseExprVisitor.visit_ListcKs | |j¡S)z df.index[4]rœrr"r"r&Ú visit_Index9szBaseExprVisitor.visit_Indexc
    Ks˜ddlm}| |j¡}| |j¡}|||j|j|jd}z|j|}Wn2tk
rz|||j|j|jd}||}YnX|j     |¡}    |j
|    |jdS)Nr)Úeval)Z
local_dictr‰rŠ)rˆ) ÚpandasrÒr˜rLÚslicerˆr‰rŠÚAttributeErrorr£r¤)
rfrVr4Zpd_evalrLZslobjÚresultÚvr»rXr"r"r&Úvisit_Subscript=s*   ÿÿ zBaseExprVisitor.visit_SubscriptcKsZ|j}|dk    r| |¡j}|j}|dk    r4| |¡j}|j}|dk    rN| |¡j}t|||ƒS)zdf.index[slice(4,6)]N)Úlowerr˜rLÚupperÚsteprÔ)rfrVr4rÙrÚrÛr"r"r&Ú visit_SliceQs   zBaseExprVisitor.visit_SlicecKs®t|jƒdkrtdƒ‚t|jdtjƒs0tdƒ‚|jjdkrDtdƒ‚z|j    |jdf|Ž}Wn t
k
r||jdj }YnXt |d|ƒ|_ |j dkržtdƒ‚|j    |jf|ŽS)    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 expressionrz5left hand side of an assignment must be a single nameNz%cannot assign without a target objectrXz@left hand side of an assignment must be a single resolvable name)r<ÚtargetsrrKrSÚNamerˆÚtargetÚ
ValueErrorr˜r
rÃrWrŒrL)rfrVr4rŒr"r"r&Ú visit_Assign_s 
 
ÿzBaseExprVisitor.visit_Assignc    Ksž|j}|j}|j}t|tjƒr†| |¡j}z&t||ƒ}|j     |¡}| 
||j¡WSt k
r„t|tj ƒr~|j |kr~|YS‚YnXtdt|ƒj›ƒ‚dS)NzInvalid Attribute context )ÚattrrLÚctxrKrSÚLoadr˜rWrˆr£r¤rÕrÞrÃràrQrY)    rfrVr4rârLrãZresolvedr×rXr"r"r&Úvisit_Attribute}s  
 zBaseExprVisitor.visit_Attributec s€t|jtjƒr(|jjdkr(ˆ |j¡}nft|jtjƒs@tdƒ‚nNzˆ |j¡}Wn<t    k
rŒzt
|jj ƒ}Wnt k
r†‚YnXYnX|dkr¨t d|jj ›ƒ‚t |dƒr¸|j}t|t
ƒrö‡fdd„|jDƒ}|jrîtd|j›dƒ‚||ŽS‡fd    d„|jDƒ}|jD]H}t|tjƒs6t d
|jj ›d ƒ‚|jrˆ |j¡ˆjƒ||j<qˆj |||Ž¡}ˆj|ˆjd SdS) NÚ__call__z"Only named functions are supportedzInvalid function call rLcsg|]}ˆ |¡‘qSr")r˜©rCÚargrÎr"r&rϪsz.BaseExprVisitor.visit_Call.<locals>.<listcomp>z
Function "z$" does not support keyword argumentscsg|]}ˆ |¡ˆjƒ‘qSr"rÍrçrÎr"r&rÏ´sz keyword error in function call 'rd)rXrˆ)rKÚfuncrSÚ    AttributerârårÞr¸r˜r
rrÃràr¬rLr3ÚkeywordsrXÚkeywordrèrˆr£r¤)rfrVr¨r4r½Únew_argsÚkeyrXr"rÎr&Ú
visit_Call‘sD
 ÿ
 
 ÿ
ÿzBaseExprVisitor.visit_CallcCs|Sr2r")rfryr"r"r&Ú translate_InÄszBaseExprVisitor.translate_Inc     Ksª|j}|j}t|ƒdkrF| |d¡}tj||j|dd}| |¡S|j}g}t||ƒD]6\}}    | tj    |    g|| |¡gd¡}
|    }| 
|
¡qZ| tj t  ¡|d¡S)Nr;r)ryr¥r¦)Ú comparatorsr¥rx)ryÚvalues) rxrñr<rðrSrr¥r˜ÚzipZCompareÚappendÚBoolOprƒ) rfrVr4rxÚcompsryr°r¥ròÚcompZnew_noder"r"r&Ú visit_CompareÇs 
ÿ zBaseExprVisitor.visit_ComparecCst|ttfƒr|S| |¡Sr2)rKrrr˜)rfZbopr"r"r&Ú_try_visit_binopÜsz BaseExprVisitor._try_visit_binopc s‡‡fdd„}ˆj}t||ƒS)Ncs<ˆ |¡}ˆ |¡}ˆ ˆ||¡\}}}}ˆ |ˆj||¡Sr2)rùr©r¾ry)rDÚyr»r¼ryrs©rVrfr"r&r—âs
 
z-BaseExprVisitor.visit_BoolOp.<locals>.visitor)ròr)rfrVr4r—Zoperandsr"rûr&Ú visit_BoolOpászBaseExprVisitor.visit_BoolOp)NN)r³rµ)N)9rYÚ
__module__Ú __qualname__Ú__doc__rr~Ú__annotations__rr¤r r r r¹Zbinary_op_nodesÚdictróZbinary_op_nodes_maprZ    unary_opsZunary_op_nodesZunary_op_nodes_maprSrrr€r‚rŸrJrŽr˜r›ržr§r©r®r²r¾r¿rÀrÂrÄrÅrÈrÉrÌrÐZ visit_TuplerÑrØrÜrárårïrðrørùrür"r"r"r&r}Usd
  ü
ù
'
3r}ÚDictrõrr‚rêÚTuplecs6eZdZeeeeeeƒdfddœ‡fdd„ Z    ‡Z
S)ÚPandasExprVisitorrEr†r‡cstƒ ||||¡dSr2©ÚsuperrŽr©Ú    __class__r"r&rŽös
zPandasExprVisitor.__init__) rYrýrþrrJr?r1r/rrŽÚ __classcell__r"r"rr&rñs
 
 
þûrr…cs,eZdZddd„fddœ‡fdd„ Z‡ZS)    ÚPythonExprVisitorNcCs|Sr2r"rIr"r"r&r8r9zPythonExprVisitor.<lambda>r†r‡cstƒj||||ddS)N)r‹rrrr"r&rŽszPythonExprVisitor.__init__)N)rYrýrþrŽr    r"r"rr&r
sÿr
c@s†eZdZUdZded<ded<ded<dddd d d dœdd„Zedd„ƒZdd„Zddœdd„Z    d dœdd„Z
dd„Z edd„ƒZ d    S)r_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
    rrˆr@r‰rŠÚnumexprrÓNrz Scope | NoneÚintr†)r‰rŠrˆÚlevelrcCsL||_|pt|dd|_||_||_t||j|j|jƒ|_| ¡|_dS)Nr;)r )    ršrrˆr‰rŠÚPARSERSÚ_visitorrÚterms)rfršr‰rŠrˆr r"r"r&rŽs z Expr.__init__cCst|jddƒS)NrŒ)rWrrÎr"r"r&rŒ+sz Expr.assignercCs | |j¡Sr2)rrˆrÎr"r"r&ræ/sz Expr.__call__r‡cCs t |j¡Sr2)rZ pprint_thingrrÎr"r"r&Ú__repr__2sz Expr.__repr__cCs
t|jƒSr2)r<ršrÎr"r"r&Ú__len__5sz Expr.__len__cCs|j |j¡S)z&
        Parse an expression.
        )rr˜ršrÎr"r"r&r8sz
Expr.parsecCs2t|jƒrt|jjgƒStdd„t |j¡DƒƒS)z1
        Get the names in an expression.
        css|] }|jVqdSr2)rX)rCZtermr"r"r&rFEszExpr.names.<locals>.<genexpr>)rrr\rXÚcomÚflattenrÎr"r"r&Únames>s
z
Expr.names)r rÓNr) rYrýrþrÿrrŽÚpropertyrŒrærrrrr"r"r"r&r_ s"
 ú
)ÚpythonrÓ)orÿÚ
__future__rrSÚ    functoolsrrrìrr,ÚtypingrrÚnumpyrªZ pandas.compatr    Z pandas.errorsr
Zpandas.core.commonÚcoreÚcommonrZpandas.core.computation.opsr r r rrrrrrrrrrrrZpandas.core.computation.parsingrrZpandas.core.computation.scoperZpandas.io.formatsrr'r/r1r:r?rJrPÚlistr¡r@r¢r\ÚdirZ
_all_nodesr]r Z_all_node_namesÚmodZ
_mod_nodesZstmtZ _stmt_nodesršZ _expr_nodesZ expr_contextZ_expr_context_nodesZboolopZ _boolop_nodesÚoperatorZ_operator_nodesZunaryopZ_unary_op_nodesZcmpopZ _cmp_op_nodesZ comprehensionZ_comprehension_nodesZ excepthandlerZ_handler_nodesÚ    argumentsZ_arguments_nodesZ_keyword_nodesÚaliasZ _alias_nodesrÔZ _slice_nodesZ _hacked_nodesZ_unsupported_expr_nodesZ_unsupported_nodesZ_base_supported_nodesÚ intersectionÚ_msgr=rhrirqruZ _op_classesr|Z NodeVisitorr}Z_python_not_supportedZ_numexpr_supported_callsrr
r_rr"r"r"r&Ú<module>sÚ    D  
ÿþ"þ 
 
 
 
 
 
 
 
 
 
 
 
 
 
õÿÿþýüûúù÷ 
 
 ÿÿ=