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
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
U
­ý°d±Ðã@shddlZddlZddlZddlmZmZddlmm    Z
ddl Z ddl m Z mZmZmZmZddlmZddlmZejddgdd„d    d
d „ƒZejdejd e
jd gdd„d    dd„ƒZdd„ZGdd„dƒZGdd„dƒZGdd„dƒZe
jGdd„dƒƒZ e
jGdd„de ƒƒZ!Gdd„de ƒZ"Gdd „d e!ƒZ#Gd!d"„d"ƒZ$Gd#d$„d$ƒZ%Gd%d&„d&ƒZ&dS)'éN)ÚNumExprClobberingErrorÚUndefinedVariableError)Ú    DataFrameÚIndexÚ
MultiIndexÚSeriesÚ
date_range)ÚNUMEXPR_INSTALLEDÚpythonÚpandascCs|S©N©©Úxr r úYd:\z\workplace\vscode\pyvenv\venv\Lib\site-packages\pandas/tests/frame/test_query_eval.pyÚ<lambda>ór)ÚparamsÚidscCs|jSr ©Úparam©Úrequestr r rÚparsersrÚnumexpr)ZmarkscCs|Sr r rr r rrrcCs|jSr rrr r rÚenginesrcCs |dkrt dt|ƒ›¡dS)Nr zcannot evaluate with parser )ÚpytestÚskipÚrepr)rr r rÚskip_if_no_pandas_parser$src@sVeZdZejdd„ƒZejdd„ƒZejdd„ƒZdd„Zd    d
„Z    d d „Z
d d„Z dS)Ú
TestCompatcCstddddgiƒS)NÚAééé©r©Úselfr r rÚdf*sz TestCompat.dfcCs||jdkS)Nr©r!©r'r(r r rÚ    expected1.szTestCompat.expected1cCs
|jdS©Nr"r)r*r r rÚ    expected22szTestCompat.expected2cCs4| d¡}t ||¡| d¡}tj||dddS)NúA>0úA+1F©Z check_names©ÚqueryÚtmÚassert_frame_equalÚevalÚassert_series_equal©r'r(r+r-Úresultr r rÚtest_query_default6s
 
zTestCompat.test_query_defaultcCs<|jddd}t ||¡|jddd}tj||dddS)Nr.©rr/Fr0r1r7r r rÚtest_query_None>s zTestCompat.test_query_NonecCs<|jddd}t ||¡|jddd}tj||dddS)Nr.r
r:r/Fr0r1r7r r rÚtest_query_pythonDs zTestCompat.test_query_pythonc    Cs–tr>|jddd}t ||¡|jddd}tj||ddnTd}tjt|d|jdddW5QRXtjt|d|jdddW5QRXdS)    Nr.rr:r/Fr0z~'numexpr' is not installed or an unsupported version. Cannot use engine='numexpr' for query/eval if 'numexpr' is not installed©Úmatch)    r    r2r3r4r5r6rÚraisesÚ ImportError)r'r(r+r-r8Úmsgr r rÚtest_query_numexprJs ÿzTestCompat.test_query_numexprN) Ú__name__Ú
__module__Ú __qualname__rÚfixturer(r+r-r9r;r<rBr r r rr )s
 
 
r c@sleZdZej dddg¡ej dddddg¡d    d
„ƒƒZd d „Zd d„Zdd„Z    dd„Z
dd„Z dd„Z dS)ÚTestDataFrameEvalÚnéi z op_str,op,rop)ú+Ú__add__Ú__radd__)ú-Ú__sub__Ú__rsub__)Ú*Ú__mul__Ú__rmul__)ú/Ú __truediv__Ú __rtruediv__c
CsÀtdt|ƒtdƒd}d|jd<| ¡}tt |j|¡ |d¡tdƒd}t    d|›d    ƒ}t    d
|›d    ƒ}    t
  |    |¡|d kršt ||ƒ|ƒ}    t
  |    |¡n"|d kr¼t ||ƒ|ƒ}    t
  |    |¡dS) Nr"Zabcd©ÚindexÚcolumnsr#réÿÿÿÿ©rXzbase z dfzm )rJrP)rMrS) rÚrangeÚlistÚilocZmeanÚnpZtileÚvaluesZreshaper5r3r4Úgetattr)
r'Zop_strÚopZroprHr(ÚmÚbaseÚexpectedr8r r rÚtest_ops^s 
ÿ zTestDataFrameEval.test_opscCsdtdtj d¡iƒ}tj|jdd…<dt |jdd…¡}dt |¡jdd…}t ||¡dS)Nr!i¨arér"é)    rr^ÚrandomÚrandnÚnanr]Úisnanr3r4)r'r(rdr8r r rÚtest_dataframe_sub_numexpr_path„s
z1TestDataFrameEval.test_dataframe_sub_numexpr_pathc    Csntdddgdddgdœƒ}d}tjt|d| d    d
„¡W5QRXtjt|d| d ¡W5QRXdS) Nr"r#r$ÚaÚb©r!ÚBz%expr must be a string to be evaluatedr=cSs
|jdkS)Nrn)rprr r rr“rz6TestDataFrameEval.test_query_non_str.<locals>.<lambda>éo©rrr?Ú
ValueErrorr2©r'r(rAr r rÚtest_query_non_strs z$TestDataFrameEval.test_query_non_strc    Cs>tddddgiƒ}d}tjt|d| d¡W5QRXdS)Nr!r"r#r$zexpr cannot be an empty stringr=Úrrrtr r rÚtest_query_empty_string˜sz)TestDataFrameEval.test_query_empty_stringcCszttj dd¡tdƒd}ddi}ddi}|jd||gd    |d|dksPt‚tjd||gd    |d|dksvt‚dS)
r#ÚabrZrmr"rnúa + b©Ú    resolvers)rr^rhrir\r5ÚAssertionErrorÚpd)r'r(Údict1Zdict2r r rÚtest_eval_resolvers_as_list s
&z-TestDataFrameEval.test_eval_resolvers_as_listcCsZttj dd¡tdƒd}ddi}|jd|gd}|d|d    |d}t ||¡dS)
Nrxr#ryrZÚcz    a + b * cr{rmrn)rr^rhrir\r5r3r6)r'r(rr8rdr r rÚtest_eval_resolvers_combined¨s
z.TestDataFrameEval.test_eval_resolvers_combinedcCs@tdddgiƒ}| d¡}tddgddgdœƒ}t ||¡dS)NÚa1ÚYÚNzc = ((a1 == 'Y') & True)TF)rƒr)rr5r3r4)r'r(Úresrdr r rÚtest_eval_object_dtype_binop³s
z.TestDataFrameEval.test_eval_object_dtype_binopN) rCrDrErÚmarkÚ parametrizererlrurwr€r‚r‡r r r rrG\s üþ           rGc@s,eZdZdd„Zdd„Zdd„Zdd„Zd    S)
Ú TestDataFrameQueryWithMultiIndexc Cs$t|ƒtjjddgdd}tjjddgdd}tj||gddgd    }ttj dd
¡|d }t|j     
d¡j |dd }|j d ||d}|j d||d}    ||dk}
t  ||
¡t  |    |
¡|j d||d}|j d||d}    ||dk}
t  ||
¡t  |    |
¡|j d||d}|j d||d}    || dg¡}
t  ||
¡t  |    |
¡|j d||d}|j d||d}    || dg¡}
t  ||
¡t  |    |
¡|j d||d}|j d||d}    || dg¡}
t  ||
¡t  |    |
¡|j d||d}|j d||d}    || dg¡}
t  ||
¡t  |    |
¡dS)NÚredÚgreenrx©ÚsizeÚeggsÚhamÚcolorZfood)Únamesr#©rW©rWÚnamezcolor == "red"©rrz"red" == colorzcolor != "red"z"red" != colorzcolor == ["red"]z["red"] == colorzcolor != ["red"]z["red"] != colorz["red"] in colorz"red" in colorz["red"] not in colorz"red" not in color©rr^rhÚchoicerÚ from_arraysrrirrWÚget_level_valuesr_r2r3r4Úisin© r'rrrmrnrWr(ÚindZres1Zres2Úexpr r rÚ test_query_with_named_multiindex¼sP ÿ             zATestDataFrameQueryWithMultiIndex.test_query_with_named_multiindexc CsÜt|ƒtjjddgdd}tjjddgdd}t ||g¡}ttj dd¡|d}t|j     
d    ¡j |d}|j d
||d }|j d ||d }    ||dk}
t  ||
¡t  |    |
¡|j d ||d }|j d||d }    ||dk}
t  ||
¡t  |    |
¡|j d||d }|j d||d }    || dg¡}
t  ||
¡t  |    |
¡|j d||d }|j d||d }    || dg¡}
t  ||
¡t  |    |
¡|j d||d }|j d||d }    || dg¡}
t  ||
¡t  |    |
¡|j d||d }|j d||d }    || dg¡}
t  ||
¡t  |    |
¡t|j     
d¡j |d}|j d||d }|j d||d }    ||dk}
t  ||
¡t  |    |
¡|j d||d }|j d||d }    ||dk}
t  ||
¡t  |    |
¡|j d||d }|j d||d }    || dg¡}
t  ||
¡t  |    |
¡|j d||d }|j d||d }    || dg¡}
t  ||
¡t  |    |
¡|j d ||d }|j d!||d }    || dg¡}
t  ||
¡t  |    |
¡|j d"||d }|j d#||d }    || dg¡}
t  ||
¡t  |    |
¡dS)$Nr‹rŒrxrrrr#r“rúilevel_0 == "red"r–z"red" == ilevel_0úilevel_0 != "red"z"red" != ilevel_0zilevel_0 == ["red"]z["red"] == ilevel_0zilevel_0 != ["red"]z["red"] != ilevel_0z["red"] in ilevel_0z"red" in ilevel_0z["red"] not in ilevel_0z"red" not in ilevel_0r"zilevel_1 == "eggs"z"eggs" == ilevel_1zilevel_1 != "eggs"z"eggs" != ilevel_1zilevel_1 == ["eggs"]z["eggs"] == ilevel_1zilevel_1 != ["eggs"]z["eggs"] != ilevel_1z["eggs"] in ilevel_1z"eggs" in ilevel_1z["eggs"] not in ilevel_1z"eggs" not in ilevel_1r—rœr r rÚ"test_query_with_unnamed_multiindexîs†                           zCTestDataFrameQueryWithMultiIndex.test_query_with_unnamed_multiindexc
CsTt|ƒtjjddgdd}t d¡}t ||g¡}ddg|_ttj     dd¡|d}|j
d||d    }t |j   d¡j|dd
}||d k}    t ||    ¡|j
d ||d    }t |j   d¡j|dd
}||d k}    t ||    ¡|j
d ||d    }t |j   d¡j|d}||dk}    t ||    ¡|j
d||d    }t |j   d¡j|d}||dk}    t ||    ¡dS)Nr‹rŒrxrZratingr#r“z rating == 1r–r”r"z rating != 1r rr¡)rr^rhr˜Úarangerr™r’rrir2rrWršr_r3r4)
r'rrrmrnrWr(r†rržr r rÚ*test_query_with_partially_named_multiindexFs<
 
 ÿ   ÿ     zKTestDataFrameQueryWithMultiIndex.test_query_with_partially_named_multiindexcCsªtjdddddgd}| ¡}dd„}|j ¡}|j|||jdƒ||jdƒ|d    œ}| ¡D]J\}}t|tƒr€|     ||¡s¤t
‚qZt|t ƒrœt  |||¡qZt
d
ƒ‚qZdS) Nrxr$r#Úspamr)Z r_idx_nlevelsZ r_idx_namescSs| |¡}| ¡}||_|Sr )ršÚ    to_seriesrW)ÚmiÚlevelZ level_valuesÚsr r rr¦ks
z]TestDataFrameQueryWithMultiIndex.test_query_multiindex_get_index_resolvers.<locals>.to_series)rWrXr¥rZC0z object must be a Series or Index) r3ZmakeCustomDataframeZ_get_index_resolversrXr¦rWÚitemsÚ
isinstancerÚis_r}rr6)r'r(r|r¦Z
col_seriesrdÚkÚvr r rÚ)test_query_multiindex_get_index_resolverses*ÿ
 
 
û
 
zJTestDataFrameQueryWithMultiIndex.test_query_multiindex_get_index_resolversN)rCrDrErŸr¢r¤r¯r r r rrŠ»s2XrŠc@s
eZdZedd„ƒZedd„ƒZdd„Zdd„Zd    d
„Zd d „Z    d d„Z
dd„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd„Zdd „Zd!d"„Zd#d$„Zd%d&„Zd'd(„Zd)d*„Zd+d,„Zd-d.„Zd/d0„Zej d1d2ej gd3ej!gg¡d4d5„ƒZ"d6d7„Z#d8d9„Z$d:S);ÚTestDataFrameQueryNumExprPandascCsd|_d|_dS)Nrr ©rr©Úclsr r rÚ setup_class„sz+TestDataFrameQueryNumExprPandas.setup_classcCs |`|`dSr r±r²r r rÚteardown_class‰sz.TestDataFrameQueryNumExprPandas.teardown_classcCs|j|j}}t|ƒttj dd¡ƒ}tddd|d<tddd|d<tddd|d    <|jd
||d }||j    d kd |j
k@}t   ||¡dS) Nrfr$ú1/1/2012©ÚperiodsÚdates1ú1/1/2013Údates2ú1/1/2014Údates3z"@df.dates1 < 20130101 < @df.dates3r±Ú20130101) rrrrr^rhrirr2r¹r½r3r4©r'rrr(r†Úexpecr r rÚ%test_date_query_with_attribute_accesssÿzETestDataFrameQueryNumExprPandas.test_date_query_with_attribute_accesscCsˆ|j|j}}ttj dd¡ƒ}tddd|d<tddd|d<tddd|d    <|jd
||d }||jd kd |j    k@}t
  ||¡dS) Nrfr$r¶r·r¹rºr»r¼r½údates1 < 20130101 < dates3r±r¾© rrrr^rhrirr2r¹r½r3r4r¿r r rÚ#test_date_query_no_attribute_accessšszCTestDataFrameQueryNumExprPandas.test_date_query_no_attribute_accesscCsÄ|j|j}}d}ttj |d¡ƒ}td|d|d<td|d|d<td|d|d    <tj|j    tj 
|¡d
kdf<tj|j    tj 
|¡d
kd    f<|j d ||d }||j d kd |j k@}t ||¡dS)Nrxr$r¶r·r¹rºr»r¼r½çà?rÂr±r¾©rrrr^rhrirr~ÚNaTÚlocÚrandr2r¹r½r3r4©r'rrrHr(r†rÀr r rÚtest_date_query_with_NaT¤sz8TestDataFrameQueryNumExprPandas.test_date_query_with_NaTcCs˜|j|j}}d}ttj |d¡ƒ}td|d|d<td|d|d<|jdddd    }|dks`t‚|j    d
||d }||j
d kd |j k@}t   ||¡dS) Nrxr$r¶r·r¹r¼r½T©ZinplaceZdropúindex < 20130101 < dates3r±r¾©rrrr^rhrirÚ    set_indexr}r2rWr½r3r4©r'rrrHr(Ú return_valuer†rÀr r rÚtest_date_index_query±s z5TestDataFrameQueryNumExprPandas.test_date_index_querycCs®|j|j}}d}ttj |d¡ƒ dti¡}td|d|d<td|d|d<t    j
|j d    <|j dd
d
d }|dksvt ‚|jd ||d }||jdkd|jk@}t ||¡dS)Nrxr$rr¶r·r¹r¼r½©rrTrÌrÍr±r¾©rrrr^rhriÚastypeÚobjectrr~rÇr]rÏr}r2rWr½r3r4rÐr r rÚtest_date_index_query_with_NaT½s  z>TestDataFrameQueryNumExprPandas.test_date_index_query_with_NaTc    Cs²|j|j}}d}i}td|d|d<td|d|d<t|ƒ}tj|jtj     |¡dkdf<|j
dddd    }|dksvt ‚|j d
||d }||j  ¡d kd |jk@}t ||¡dS) Nrxr¶r·r¹r¼r½rÅTrÌrÂr±r¾)rrrrr~rÇrÈr^rhrÉrÏr}r2rWr¦r½r3r4)    r'rrrHÚdr(rÑr†rÀr r rÚ)test_date_index_query_with_NaT_duplicatesËs zITestDataFrameQueryNumExprPandas.test_date_index_query_with_NaT_duplicatesc
Cs®|j|j}}d}ttd|dt |¡dœƒ}|jd||d}t|ƒdksNt‚|jd||d}t     
||¡d    }d
D]6}t j t |d |jd |›d ||dW5QRXqrdS)Nrxr¶r·)ÚdatesZnondatezdates == nondater–rzdates != nondatez=Invalid comparison between dtype=datetime64\[ns\] and ndarray)ú<ú>ú<=ú>=r=zdates z nondate)rrrrr^r£r2Úlenr}r3r4rr?Ú    TypeError)r'rrrHr(r8rArar r rÚtest_date_query_with_non_dateÙsÿ z=TestDataFrameQueryNumExprPandas.test_date_query_with_non_datec    Cs`|j|j}}ttdƒtddƒtddƒdœƒ}d}tjt|d|jd    ||d
W5QRXdS) Nrxr$é rIé)ÚirJÚrzinvalid syntaxr=zi - +r±)rrrr[rr?Ú SyntaxErrorr2)r'rrr(rAr r rÚtest_query_syntax_errorìs
 z7TestDataFrameQueryNumExprPandas.test_query_syntax_errorc    Csæ|j|j}}t|ƒttj dd¡tdƒd}d\}}|jd||d}||j    |j
k}t   ||¡|jd||d}|||j
k}t   ||¡t jtd    d
|jd ||dW5QRXt jtd d
|jd ||dW5QRXdS)Nér#ryrZ)r"r#za > br±z@a > bú!local variable 'c' is not definedr=z @a > b > @czname 'c' is not definedz
@a > b > c)rrrrr^rhrir\r2rmrnr3r4rr?r)r'rrr(rmrnr†rdr r rÚtest_query_scopeós"  ÿz0TestDataFrameQueryNumExprPandas.test_query_scopec    Csd|j|j}}d}}ttjj||dfdtdƒd}tjt    dd|j
d||d    W5QRXdS)
Nrxr$rÚabcrZzname 'sin' is not definedr=úsin > 5r±) rrrr^rhÚrandintr\rr?rr2)r'rrrHrbr(r r rÚtest_query_doesnt_pickup_local s
 z>TestDataFrameQueryNumExprPandas.test_query_doesnt_pickup_localc    Csp|j|j}}d}}ttjj||dfdtdƒd}d|j_d}t    j
t |d|j d    ||d
W5QRXdS) Nrxr$rrërZÚsinzVariables in expression.+r=rìr±) rrrr^rhrír\rWr•rr?rr2)r'rrrHrbr(rAr r rÚtest_query_builtins z2TestDataFrameQueryNumExprPandas.test_query_builtincCs‚|j|j}}ttj dd¡dddgd}t |jd||d||j    |j
k¡t |jd    ||d||j    |j
|j
|j k¡dS)
Nrxr$rmrnrrZúa < br±z a + b > b * c) rrrr^rhrir3r4r2rmrnr©r'rrr(r r rÚ
test_query sÿþz*TestDataFrameQueryNumExprPandas.test_querycCs |j|j}}ttjjdddttdƒdddddgd    }|jd
||d }||j    d k|j
|j k@}t   ||¡|jd ||d }||j    |j k}t   ||¡dS)Nrx©rxr$rZblob©r•rmrnrrVz(blob < 5) & (a < b)r±rfzblob < b)rrrr^rhrírr[r2rWrmrnr3r4r¿r r rÚtest_query_index_with_name,sý z:TestDataFrameQueryNumExprPandas.test_query_index_with_namecCsŒ|j|j}}ttjjdddtdƒdddgd}|jd||d    }||j|j    k}t
  ||¡|jd
||d    }||jd k}t
  ||¡dS) NrxrôrrmrnrrVz    index < br±z    index < 5rf) rrrr^rhrír[r2rWrnr3r4r¿r r rÚtest_query_index_without_name<sý z=TestDataFrameQueryNumExprPandas.test_query_index_without_namecCsô|j}|j}t|ƒttj dd¡ƒ}ttj dd¡ƒ}||dk|dk@}|jd||d}t     ||¡t
j d||d}t     ||¡t
j d||d}||dk|dk@||dkdk@}t     ||¡t
j d||d}|jd    ||d}t     ||¡dS)
Nrfr$rz(@df > 0) & (@df2 > 0)r±zdf[df > 0 and df2 > 0]z)df[df > 0 and df2 > 0 and df[df > 0] > 0]zdf[(df>0) & (df2>0)]ú(@df>0) & (@df2>0)) rrrrr^rhrir2r3r4r~r5)r'rrr(Údf2rdr8r r rÚtest_nested_scopeNs(  ÿ$ z1TestDataFrameQueryNumExprPandas.test_nested_scopec    CsDttj dd¡ƒ}tjtdd|jd|j|j    dW5QRXdS)Nrfr$úname 'df' is not definedr=zdf > 0r±)
rr^rhrirr?rr2rrr*r r rÚ*test_nested_raises_on_local_self_referencehszJTestDataFrameQueryNumExprPandas.test_nested_raises_on_local_self_referencecCst|jƒ|j|j}}ttj dd¡tdƒd}d}||j|k}|j    d||d}t
  ||¡||j|j k}|j    d||d}t
  ||¡dS)    NédrxZ
abcdefghijrZr"za < @br±rñ) rrrrr^rhrir\rmr2r3r4rn)r'rrr(rnÚexpectr8r r rÚtest_local_syntaxos
 z1TestDataFrameQueryNumExprPandas.test_local_syntaxcCsšt|jƒ|j|j}}tdƒ}ttj dt|ƒ¡|d}|j    d||d}|j
|j k|j |j k@|j   |j
¡@|j   |j ¡@}||}t ||¡dS)NrërýrZz!a < b < c and a not in b not in cr±)rrrr\rr^rhrirßr2rmrnrr›r3r4)r'rrÚcolsr(r†rrÀr r rÚtest_chained_cmp_and_in}s
ÿ8z7TestDataFrameQueryNumExprPandas.test_chained_cmp_and_incCsÒ|j|j}}t|ƒttjjddddd}ttjjddddd}t||dœƒ}|j|j    d     
|¡}|j d
||d }t   ||¡ttjjddddd}|j|d     
|¡}|j d ||d }t   ||¡dS) Nr$érrmrõrxrn©rmrnr"z
b - 1 in ar±z @b - 1 in a)rrrrr^rhrírrÈrnr›r2r3r4)r'rrrmrnr(rdr8r r rÚtest_local_variable_with_in‰s z;TestDataFrameQueryNumExprPandas.test_local_variable_with_incCs`|j|j}}t|ƒd}tdddddddgiƒ}|jd||d}||jdk}t ||¡dS)Nr"rmrnz@cz    a == "@c"r±)rrrrr2rmr3r4)r'rrrr(r8rdr r rÚtest_at_inside_string™sz5TestDataFrameQueryNumExprPandas.test_at_inside_stringc    Cs^|j|j}}t|ƒttj dd¡tdƒd}tj    t
dd|j d||dW5QRXdS)    Nrxr#ryrZrér=za == @cr±) rrrrr^rhrÉr\rr?rr2ròr r rÚtest_query_undefined_local¢sÿz:TestDataFrameQueryNumExprPandas.test_query_undefined_localcCs:d}tjddd…}t|tj |j¡dœƒ}d|j_|jd|j    |j
d}||ddk}t   ||¡t|tj |j¡dœƒ}|jd    |j    |j
d}|j |j|jdk}t   ||¡t|tj |j¡d
œƒ}d |j_|jd |j    |j
d}||jdk}t   ||¡|jd|j    |j
d}|j |j|jdk}t   ||¡dS) Nr"rèée)rWrnrWz    index > 5r±rfz ilevel_0 > 5rrmza > 5)r^Zr_rrhrirŽrWr•r2rrr3r4rÈrm)r'rHrmr(r8rdr r rÚ:test_index_resolvers_come_after_columns_with_the_same_name¬s&   zZTestDataFrameQueryNumExprPandas.test_index_resolvers_come_after_columns_with_the_same_namezop, fú==ú!=cCszd}ttj |¡tj |¡dœƒ}tj|jddd…df<d|›d}|||jtjƒ}|j||j|j    d}t
  ||¡dS)Nrxrr#rúa z infr±) rr^rhrÉÚinfrÈrmr2rrr3r4)r'raÚfrHr(Úqrdr8r r rÚtest_infÅs z(TestDataFrameQueryNumExprPandas.test_infcCsf|}tddd|dd}t|d}t|d}| d¡}t ||¡t|ƒ}| ¡ d¡}t ||¡dS)Nz
2019-01-01Z1drxÚtime)ÚstartÚfreqr¸Útzr•r“z"2018-01-03 00:00:00+00" < time)rrr2r3r4Z reset_index)r'Ztz_aware_fixturerZdf_indexrdr(r8r r rÚtest_check_tz_aware_index_queryÏsÿ
 
 
 z?TestDataFrameQueryNumExprPandas.test_check_tz_aware_index_querycCsÆd}tdtj |¡tj |¡dœƒ}||d d¡dk}|jd|j|jd}t     ||¡tt 
tj |¡d    ktj tj  |¡¡tj  |¡dœƒ}||d  ¡}|jd
|j|jd}t     ||¡dS) Nrxr#rrmÚintrza.astype('int') == 0r±rÅz a.notnull())rr^rhrÉrÕr2rrr3r4ÚwhererjriZnotnull)r'rHr(rdr8r r rÚtest_method_calls_in_queryÞs""ÿ "
þÿz:TestDataFrameQueryNumExprPandas.test_method_calls_in_queryN)%rCrDrEÚ classmethodr´rµrÁrÄrËrÒr×rÙrárçrêrîrðrórör÷rúrürÿrrrrrrrˆr‰ÚoperatorÚeqÚnerrrr r r rr°‚s<
 
 
             
 
    r°csXeZdZe‡fdd„ƒZdd„Zdd„Zdd„Zd    d
„Zd d „Z    d d„Z
dd„Z ‡Z S)ÚTestDataFrameQueryNumExprPythoncstƒ ¡d|_d|_dS)Nrr
©Úsuperr´rrr²©Ú    __class__r rr´õs
z+TestDataFrameQueryNumExprPython.setup_classcCsˆ|j|j}}ttj dd¡ƒ}tddd|d<tddd|d<tddd|d    <|jd
||d }||jd kd |j    k@}t
  ||¡dS) Nrfr$r¶r·r¹rºr»r¼r½ú)(dates1 < 20130101) & (20130101 < dates3)r±r¾rÃr¿r r rrÄûsÿzCTestDataFrameQueryNumExprPython.test_date_query_no_attribute_accesscCsÄ|j|j}}d}ttj |d¡ƒ}td|d|d<td|d|d<td|d|d    <tj|j    tj 
|¡d
kdf<tj|j    tj 
|¡d
kd    f<|j d ||d }||j d kd |j k@}t ||¡dS)Nrxr$r¶r·r¹rºr»r¼r½rÅr!r±r¾rÆrÊr r rrËsÿz8TestDataFrameQueryNumExprPython.test_date_query_with_NaTcCs˜|j|j}}d}ttj |d¡ƒ}td|d|d<td|d|d<|jdddd    }|dks`t‚|j    d
||d }||j
d kd |j k@}t   ||¡dS) Nrxr$r¶r·r¹r¼r½TrÌú((index < 20130101) & (20130101 < dates3)r±r¾rÎrÐr r rrÒs ÿz5TestDataFrameQueryNumExprPython.test_date_index_querycCs®|j|j}}d}ttj |d¡ƒ dti¡}td|d|d<td|d|d<t    j
|j d    <|j dd
d
d }|dksvt ‚|jd ||d }||jdkd|jk@}t ||¡dS)Nrxr$rr¶r·r¹r¼r½rÓTrÌr"r±r¾rÔrÐr r rr×$s  ÿz>TestDataFrameQueryNumExprPython.test_date_index_query_with_NaTc    Cs®|j|j}}d}ttj |d¡ƒ}td|d|d<td|d|d<tj|j    tj 
|¡dkdf<|j dd    d    d
}|dks|t ‚d }t jt|d |jd ||dW5QRXdS)Nrxr$r¶r·r¹r¼r½rÅTrÌú"'BoolOp' nodes are not implementedr=rÍr±)rrrr^rhrirr~rÇrÈrÉrÏr}rr?ÚNotImplementedErrorr2)r'rrrHr(rÑrAr r rrÙ4s zITestDataFrameQueryNumExprPython.test_date_index_query_with_NaT_duplicatesc        Cs|j}|j}d}tjd||d}|dks,t‚ttj dd¡ƒ}ttj dd¡ƒ}d}t    j
t |d|j d    ||dW5QRXt    j
t d
d|j d ||dW5QRX||d k|d k@}tjd ||d}t ||¡||d k|d k@||d kd k@}tjd||d}t ||¡dS)Nr"zx + 1r±r#rfr$z5The '@' prefix is only supported by the pandas parserr=rørûz(df>0) & (df2>0)rzdf[(df > 0) & (df2 > 0)]z+df[(df > 0) & (df2 > 0) & (df[df > 0] > 0)])rrr~r5r}rr^rhrirr?rær2rr3r4)    r'rrrr8r(rùrArdr r rrúAs,  $ÿz1TestDataFrameQueryNumExprPython.test_nested_scopec    Csntdddgdddgdœƒ}d}tjt|d    | d
¡W5QRXd }tjt|d    | d ¡W5QRXdS) Nr"r#r$rIrfé)ÚminÚmaxzMVariables in expression \"\(min\) == \(1\)\" overlap with builtins: \('min'\)r=zmin == 1zMVariables in expression \"\(max\) == \(1\)\" overlap with builtins: \('max'\)zmax == 1)rrr?rr2)r'r(Zregex_to_matchr r rÚ+test_query_numexpr_with_min_and_max_columns^sÿÿzKTestDataFrameQueryNumExprPython.test_query_numexpr_with_min_and_max_columns) rCrDrErr´rÄrËrÒr×rÙrúr(Ú __classcell__r r rrrós  rcs(eZdZe‡fdd„ƒZdd„Z‡ZS)ÚTestDataFrameQueryPythonPandascstƒ ¡d|_d|_dS)Nr
r rr²rr rr´ps
z*TestDataFrameQueryPythonPandas.setup_classcCsl|j|j}}d}}ttjj||dfdtdƒd}d|j_||jdk}|j    d||d    }t
  ||¡dS©
Nrxr$rrërZrïrfrìr±© rrrr^rhrír\rWr•r2r3r4©r'rrrHrbr(rdr8r r rrðvs z1TestDataFrameQueryPythonPandas.test_query_builtin©rCrDrErr´rðr)r r rrr*osr*cs(eZdZe‡fdd„ƒZdd„Z‡ZS)ÚTestDataFrameQueryPythonPythoncstƒ ¡d|_|_dS)Nr
rr²rr rr´ƒs
z*TestDataFrameQueryPythonPython.setup_classcCsl|j|j}}d}}ttjj||dfdtdƒd}d|j_||jdk}|j    d||d    }t
  ||¡dSr+r,r-r r rrðˆs z1TestDataFrameQueryPythonPython.test_query_builtinr.r r rrr/‚sr/c@s‚eZdZdd„Zdd„Zdd„Zdd„Zd    d
„Zd d „Ze    j
  d de j gde jgde jgde jgg¡dd„ƒZdd„Zdd„ZdS)ÚTestDataFrameQueryStringsc
Csœttj dd¡dgd}ttdƒƒ|d<||jdk}|dkräd}d    }|gd
|gd
}|ddd …}d \}    }
d
|    g|
g} d } t|| |ƒD]P\}} }|›d| ›d|›}tj    t
| d|j |||d|jidW5QRXqn´|j d||d}t   ||¡|j d||d}t   ||¡t   |||j dg¡¡||jdk}|j d||d}t   ||¡|j d||d}t   ||¡t   |||j dg¡¡dS)Nrxr"rnrZÚ
aabbccddeeÚstringsrmr z"a"r#rY©r    r
ú$'(Not)?In' nodes are not implementedú r=)rrZ
local_dictz"a" == stringsr±zstrings == "a"zstrings != "a"z"a" != strings)rr^rhrirr\r2Úziprr?r$r2r3r4r›©r'rrr(rþÚcolÚlstÚlhsÚrhsrrÚopsrAraÚexr†r r rÚtest_str_query_method•s>ü    z/TestDataFrameQueryStrings.test_str_query_methodc
Cslttj dd¡dgd}ttdƒƒ|d<||j ddg¡}|dkrâd}d    }|gd
|gd
}|ddd …}d \}    }
d
|    g|
g} d } t|| |ƒD]H\}} }|›d| ›d|›}t    j
t | d|j |||dW5QRXq–n†|j d||d}t  ||¡|j d||d}t  ||¡||j ddg¡}|j d||d}t  ||¡|j d||d}t  ||¡dS)Nrxr"rnrZr1r2rmr z
["a", "b"]r#rYr3r4r5r=r±zstrings == ["a", "b"]z["a", "b"] == stringszstrings != ["a", "b"]z["a", "b"] != strings)rr^rhrirr\r2r›r6rr?r$r2r3r4r7r r rÚtest_str_list_query_method¾s0   z4TestDataFrameQueryStrings.test_str_list_query_methodc    Csttdƒtdƒtjjdddtjjddddœƒ}|dkr¤|jd    ||d
}||j |j¡}t     
||¡|jd ||d
}||j |j¡|j |j k@}t     
||¡n\d }t jt|d |jd    ||d
W5QRXd}t jt|d |jd ||d
W5QRXdS)NÚ aaaabbbbccccÚ aabbccddeeffrfé ré    ©rmrnrrØr za in br–za in b and c < dr4r=r#)rr\r^rhrír2rmr›rnr3r4rrØrr?r$)r'rrr(r†rÀrAr r rÚtest_query_with_string_columnsás(üÿ z8TestDataFrameQueryStrings.test_query_with_string_columnscCsŽttdƒtdƒtjjdddtjjddddœƒ}|jd||d    }||j|jk}t     ||¡|jd
||d    }||j|jk}t     ||¡dS) Nr@rArfrBrrCrDza == br–za != b)
rr\r^rhrír2rmrnr3r4)r'rrr(r†ržr r rÚtest_object_array_eq_neûsüÿ z1TestDataFrameQueryStrings.test_object_array_eq_nec    CsŽt|ƒdd„tddƒDƒd}tdddd    }td
ddd    }tt dd ¡ d¡|| |¡d œƒ}||jd k}|j    d||d}t
  ||¡dS)NcSs&g|]}dD]}d|›d|›‘q qS))ÚloadÚexitzpage r5r )Ú.0rHZactr r rÚ
<listcomp>szLTestDataFrameQueryStrings.test_query_with_nested_strings.<locals>.<listcomp>r"rIr#z2014-01-01 0:00:01Z30sr%)rr¸z2014-02-01 1:00:01é)ÚidÚeventÚ    timestampz "page 1 load"z'"page 1 load"' in eventr–) rr[rrr^r£ÚrepeatÚappendrMr2r3r4)    r'rrÚeventsZstamps1Zstamps2r(rdr†r r rÚtest_query_with_nested_strings s"ÿþýÿz8TestDataFrameQueryStrings.test_query_with_nested_stringscCsPt|ƒtdddgdddgdœƒ}|jd||d    }||jdk}t ||¡dS)
Nrmrnz test & testr"r#r$rza == "test & test"r–)rrr2rmr3r4)r'rrr(r†rÀr r rÚ(test_query_with_nested_special_characters
zBTestDataFrameQueryStrings.test_query_with_nested_special_characterzop, funcrÛrÜrÝrÞc
Cslttj tdƒd¡ƒ}tt |j¡ƒ}t||dœƒ}|jd|›d||d}|||j    dƒ}    t
  ||    ¡dS)NZabcderè)ÚXr„zX z "d"r±rØ) rr^rhr˜r\r£rŽrr2rTr3r4)
r'rrraÚfuncrmrnr(r†rdr r rÚtest_query_lex_compare_strings&s
z8TestDataFrameQueryStrings.test_query_lex_compare_stringscCs^d}tjjddt|ƒfd t¡}t||d}|jd||d}||j|j    @}t
  ||¡dS)N)ÚbidZbidsizeÚaskZasksizer#r"rrZz    bid & askr±) r^rhrírßrÕÚboolrr2rWrXr3r4)r'rrrXÚdatar(r†rdr r rÚ"test_query_single_element_booleans8s  z<TestDataFrameQueryStrings.test_query_single_element_booleanscCsXt|ƒtddddgddddgdœƒ}||jdk}d}|jd||d    }t ||¡dS)
NzBUD USzIBM USgÍÌÌÌÌl[@g®Gázn[@gš™™™™éf@g33333ëf@)ÚSymbolZPricezSymbol == @symbr–)rrr\r2r3r4)r'rrr(ÚeZsymbrår r rÚ!test_query_string_scalar_variable@s
 
þÿz;TestDataFrameQueryStrings.test_query_string_scalar_variableN)rCrDrEr>r?rErFrRrSrrˆr‰rÚltÚgtÚleÚgerVr[r^r r r rr0”s")#üþ    
    r0c@sHeZdZejdd„ƒZdd„Zdd„Zej     ddd    d
d g¡d d „ƒZ
dS)ÚTestDataFrameEvalWithFramecCsttj dd¡tdƒdS)Nrxr$rërZ)rr^rhrir\r&r r rÚframeOsz TestDataFrameEvalWithFrame.framecCs,|jd||d}|j|j}t ||¡dS)Nrzr±©r5rmrnr3r6©r'rdrrr†rþr r rÚtest_simple_exprSs z+TestDataFrameEvalWithFrame.test_simple_exprcCs6|jd||d}|j|jdk|j}t ||¡dS)Nz a[a < 1] + br±r"rerfr r rÚtest_bool_arith_exprXsz/TestDataFrameEvalWithFrame.test_bool_arith_exprrarJrMrPrSc    CsPtddgddgdœƒ}d}tjt|d|jd|›d    ||d
W5QRXdS) Nr"r#rrØrz3unsupported operand type\(s\) for .+: '.+' and '.+'r=r z br±)rrr?ràr5)r'rrrar(rAr r rÚ%test_invalid_type_for_operator_raises]sz@TestDataFrameEvalWithFrame.test_invalid_type_for_operator_raisesN) rCrDrErrFrdrgrhrˆr‰rir r r rrcNs 
rcc@s,eZdZejdd„ƒZdd„Zdd„Zdd„Zd    d
„Z    d d „Z
d d„Z dd„Z dd„Z dd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd „Zd!d"„Zd#d$„Zd%d&„Zd'd(„Zd)d*„Zd+d,„Zd-d.„Zd/d0„Zd1d2„Zd3d4„Zej  d5d6d7d8g¡d9d:„ƒZ!ej  d;d<d=g¡ej  d5d6d7d8g¡d>d?„ƒƒZ"d@S)AÚ!TestDataFrameQueryBacktickQuotingccsÀtdddgdddgdddgdddgdd    d
gd dd gdddgddd
gdddgd
d dgdddgdddgdddgdddgd
d dgddd    gdddgdddgd    ddgdddgdddgddd    gd œƒVdS)zÄ
        Yields a dataframe with strings that may or may not need escaping
        by backticks. The last two columns cannot be escaped by backticks
        and should raise a ValueError.
        r"r#r$rIrfr%rKérCrxé r)r!úB BúC CúC  CÚC_CúD_D DúE.EúF-FÚ1e1ÚdefúA (x)zB(x)zB (x)õ  &^ :!€$?(} >    <++*''  rvú Aú  zit'szthat'su☺zfoo#barr"Nr%r&r r rr(gs2êÿz$TestDataFrameQueryBacktickQuoting.dfcCs*| d¡}|d|dk}t ||¡dS)Nz    1 < `B B`r"rm©r2r3r4©r'r(r†rþr r rÚ#test_single_backtick_variable_query‰s
zETestDataFrameQueryBacktickQuoting.test_single_backtick_variable_querycCs6| d¡}|d|dkd|dk@}t ||¡dS)Nz1 < `B B` and 4 < `C C`r"rmrIrnrzr{r r rÚ!test_two_backtick_variables_queryŽs
zCTestDataFrameQueryBacktickQuoting.test_two_backtick_variables_querycCs*| d¡}|d|d}t ||¡dS)Nz    A + `B B`r!rm©r5r3r6r{r r rÚ"test_single_backtick_variable_expr“s
zDTestDataFrameQueryBacktickQuoting.test_single_backtick_variable_exprcCs*| d¡}|d|d}t ||¡dS)Nz `B B` + `C C`rmrnr~r{r r rÚ test_two_backtick_variables_expr˜s
zBTestDataFrameQueryBacktickQuoting.test_two_backtick_variables_exprcCs*| d¡}|d|d}t ||¡dS)Nz    `C_C` + Arpr!r~r{r r rÚ test_already_underscore_variables
zBTestDataFrameQueryBacktickQuoting.test_already_underscore_variablecCs*| d¡}|d|d}t ||¡dS)Nz C_C + `C C`rprnr~r{r r rÚtest_same_name_but_underscores¢s
z@TestDataFrameQueryBacktickQuoting.test_same_name_but_underscorescCs*| d¡}|d|d}t ||¡dS)Nz A + `D_D D`r!rqr~r{r r rÚ!test_mixed_underscores_and_spaces§s
zCTestDataFrameQueryBacktickQuoting.test_mixed_underscores_and_spacescCs*| d¡}|d|d}t ||¡dS)Nz    A + `C_C`r!rpr~r{r r rÚ'test_backtick_quote_name_with_no_spaces¬s
zITestDataFrameQueryBacktickQuoting.test_backtick_quote_name_with_no_spacescCs2| d¡}|d|d|d}t ||¡dS)Nz`E.E` + `F-F` - Arrrsr!r~r{r r rÚtest_special_characters±s
z9TestDataFrameQueryBacktickQuoting.test_special_characterscCs*| d¡}|d|d}t ||¡dS)Nz    A + `1e1`r!rtr~r{r r rÚtest_start_with_digit¶s
z7TestDataFrameQueryBacktickQuoting.test_start_with_digitcCs*| d¡}|d|d}t ||¡dS)Nz    A + `def`r!rur~r{r r rÚ test_keyword»s
z.TestDataFrameQueryBacktickQuoting.test_keywordcCs*| d¡}||ddk}t ||¡dS)Nz`A` > 2r!r#rzr{r r rÚtest_unneeded_quotingÀs
z7TestDataFrameQueryBacktickQuoting.test_unneeded_quotingcCs*| d¡}||ddk}t ||¡dS)Nz `A (x)` > 2rvr#rzr{r r rÚtest_parenthesisÅs
z2TestDataFrameQueryBacktickQuoting.test_parenthesiscCs*| d¡}||ddk}t ||¡dS)Nz`` > 5rvrfrzr{r r rÚtest_empty_stringÊs
z3TestDataFrameQueryBacktickQuoting.test_empty_stringcCs*| d¡}||ddk}t ||¡dS)Nz
`C  C` > 5rorfrzr{r r rÚtest_multiple_spacesÏs
z6TestDataFrameQueryBacktickQuoting.test_multiple_spacescCs*| d¡}|d|d}t ||¡dS)Nz ` A` + `  `rxryr~r{r r rÚtest_start_with_spacesÔs
z8TestDataFrameQueryBacktickQuoting.test_start_with_spacescCs*| d¡}||ddk}t ||¡dS)Nu"`  &^ :!€$?(} >    <++*''  ` > 4rwrIrzr{r r rÚtest_lots_of_operators_stringÙs
z?TestDataFrameQueryBacktickQuoting.test_lots_of_operators_stringc    Cs,d}tjt|d| d¡W5QRXdS)Nz(module 'pandas' has no attribute 'thing'r=z    @pd.thing)rr?ÚAttributeErrorr5)r'r(Úmessager r rÚtest_missing_attributeÞsz8TestDataFrameQueryBacktickQuoting.test_missing_attributec    Cs,d}tjt|d| d¡W5QRXdS)Nú6(Could not convert ).*( to a valid Python identifier.)r=z`it's` > `that's`©rr?rær2rtr r rÚtest_failing_quoteãsz4TestDataFrameQueryBacktickQuoting.test_failing_quotec    Cs,d}tjt|d| d¡W5QRXdS)Nr‘r=u    `☺` > 4r’rtr r rÚ$test_failing_character_outside_rangeèszFTestDataFrameQueryBacktickQuoting.test_failing_character_outside_rangec    Cs,d}tjt|d| d¡W5QRXdS)NzFailed to parse backticksr=z `foo#bar` > 4r’rtr r rÚtest_failing_hashtagísz6TestDataFrameQueryBacktickQuoting.test_failing_hashtagc    Csddd„}|g}| d¡tjtdd| d¡W5QRXtjtdd| d¡W5QRXdS)    zí
        Only attributes and variables ('named functions') can be called.
        .__call__() is not an allowed attribute because that would allow
        calling anything.
        https://github.com/pandas-dev/pandas/pull/32460
        cWsdSr,r )Ú_r r rrUúszNTestDataFrameQueryBacktickQuoting.test_call_non_named_expression.<locals>.funcz@func()z"Only named functions are supportedr=z @funcs[0]()z@funcs[0].__call__()N)r5rr?rà)r'r(rUÚfuncsr r rÚtest_call_non_named_expressionòs
z@TestDataFrameQueryBacktickQuoting.test_call_non_named_expressionc    Cs~tddgddggddg|d}tr&tnd}t |¡| d¡}W5QRXtdddgdddggddd    g|d}t ||¡dS)
Nr"r#r$rIrmrn©rXÚdtypez    c = b - ar©rr    ÚRuntimeWarningr3Úassert_produces_warningr5r4)r'Úany_numeric_ea_and_arrow_dtyper(Úwarningr8rdr r rÚtest_ea_dtypessÿ  ýz0TestDataFrameQueryBacktickQuoting.test_ea_dtypesc    Cs~tddgddggddgdd}tr&tnd}t |¡| d    ¡}W5QRXtdddgdddggddd
gdd}t ||¡dS) Nr"r#r$rIrmrnZFloat64r™z    c = b - 1rr›)r'r(rŸr8rdr r rÚtest_ea_dtypes_and_scalars  ÿz;TestDataFrameQueryBacktickQuoting.test_ea_dtypes_and_scalarcCsrtddgddggddg|d}| d¡}ttddg|d    tddg|d    tddg|d
jd    d œƒ}t ||¡dS) Nr"r#r$rIrmrnr™z    c = 2 - 1©ršr)rmrnr)rr5rršr3r4)r'ržr(r8rdr r rÚ#test_ea_dtypes_and_scalar_operation!sÿ
ýÿzETestDataFrameQueryBacktickQuoting.test_ea_dtypes_and_scalar_operationršÚint64ÚInt64úint64[pyarrow]c    CsŽ|dkrt d¡tdtddg|diƒ}dh}|dkr@tr@tnd}t |¡| d¡}W5QRXtdtdg|dgd    iƒ}t     ||¡dS)
Nr¦Úpyarrowrmr"r#r¢r¥z    a in @ref©ršrW)
rÚ importorskiprrr    rœr3rr2r4)r'ršr(ÚrefrŸr8rdr r rÚtest_query_ea_dtypes0s
 z6TestDataFrameQueryBacktickQuoting.test_query_ea_dtypesrr
rc    CsÈ|dkr tnd}|dkr&ts&t d¡|dkr8t d¡ttdddgddtdddg|dd    œƒ}t |¡|j    d
|d }W5QRXttddgdd dgd tddg|d dgd d    œƒ}t 
||¡dS)Nrznumexpr not installedr¦r§r"r#r¥r¢rozA == Br:rr¨) rœr    rrr©rrr3rr2r4)r'ršrrŸr(r8rdr r rÚ!test_query_ea_equality_comparison=s  
 
$ÿ þÿzCTestDataFrameQueryBacktickQuoting.test_query_ea_equality_comparisonN)#rCrDrErrFr(r|r}rr€rr‚rƒr„r…r†r‡rˆr‰rŠr‹rŒrrr“r”r•r˜r r¡r£rˆr‰r«r¬r r r rrjfs@
! 
rj)'rÚnumpyr^rZ pandas.errorsrrZpandas.util._test_decoratorsÚutilZ_test_decoratorsÚtdr r~rrrrrZpandas._testingZ_testingr3Zpandas.core.computation.checkr    rFrrZ skip_if_no_nerrr rGrŠr°rr*r/r0rcrjr r r rÚ<module>s@  
ÿ
3_Hr{;