12
12
)
13
13
from pandas .core .computation import expressions as expr
14
14
15
- _frame = DataFrame (np .random .randn (10000 , 4 ), columns = list ("ABCD" ), dtype = "float64" )
15
+ _frame = DataFrame (np .random .randn (10001 , 4 ), columns = list ("ABCD" ), dtype = "float64" )
16
16
_frame2 = DataFrame (np .random .randn (100 , 4 ), columns = list ("ABCD" ), dtype = "float64" )
17
17
_mixed = DataFrame (
18
18
{
36
36
_integer2 = DataFrame (
37
37
np .random .randint (1 , 100 , size = (101 , 4 )), columns = list ("ABCD" ), dtype = "int64"
38
38
)
39
+ _array = _frame ["A" ].values .copy ()
40
+ _array2 = _frame2 ["A" ].values .copy ()
41
+
42
+ _array_mixed = _mixed ["D" ].values .copy ()
43
+ _array_mixed2 = _mixed2 ["D" ].values .copy ()
39
44
40
45
41
46
@pytest .mark .skipif (not expr .USE_NUMEXPR , reason = "not using numexpr" )
42
47
class TestExpressions :
43
48
def setup_method (self , method ):
44
49
45
50
self .frame = _frame .copy ()
51
+ self .array = _array .copy ()
46
52
self .frame2 = _frame2 .copy ()
53
+ self .array2 = _array2 .copy ()
47
54
self .mixed = _mixed .copy ()
48
55
self .mixed2 = _mixed2 .copy ()
49
56
self ._MIN_ELEMENTS = expr ._MIN_ELEMENTS
@@ -134,33 +141,29 @@ def test_invalid(self):
134
141
135
142
# no op
136
143
result = expr ._can_use_numexpr (
137
- operator .add , None , self .frame , self .frame , "evaluate"
138
- )
139
- assert not result
140
-
141
- # mixed
142
- result = expr ._can_use_numexpr (
143
- operator .add , "+" , self .mixed , self .frame , "evaluate"
144
+ operator .add , None , self .array , self .array , "evaluate"
144
145
)
145
146
assert not result
146
147
147
148
# min elements
148
149
result = expr ._can_use_numexpr (
149
- operator .add , "+" , self .frame2 , self .frame2 , "evaluate"
150
+ operator .add , "+" , self .array2 , self .array2 , "evaluate"
150
151
)
151
152
assert not result
152
153
153
154
# ok, we only check on first part of expression
154
155
result = expr ._can_use_numexpr (
155
- operator .add , "+" , self .frame , self .frame2 , "evaluate"
156
+ operator .add , "+" , self .array , self .array2 , "evaluate"
156
157
)
157
158
assert result
158
159
159
160
@pytest .mark .parametrize (
160
161
"opname,op_str" ,
161
162
[("add" , "+" ), ("sub" , "-" ), ("mul" , "*" ), ("truediv" , "/" ), ("pow" , "**" )],
162
163
)
163
- @pytest .mark .parametrize ("left,right" , [(_frame , _frame2 ), (_mixed , _mixed2 )])
164
+ @pytest .mark .parametrize (
165
+ "left,right" , [(_array , _array2 ), (_array_mixed , _array_mixed2 )]
166
+ )
164
167
def test_binary_ops (self , opname , op_str , left , right ):
165
168
def testit ():
166
169
@@ -170,16 +173,9 @@ def testit():
170
173
171
174
op = getattr (operator , opname )
172
175
173
- result = expr ._can_use_numexpr (op , op_str , left , left , "evaluate" )
174
- assert result != left ._is_mixed_type
175
-
176
176
result = expr .evaluate (op , left , left , use_numexpr = True )
177
177
expected = expr .evaluate (op , left , left , use_numexpr = False )
178
-
179
- if isinstance (result , DataFrame ):
180
- tm .assert_frame_equal (result , expected )
181
- else :
182
- tm .assert_numpy_array_equal (result , expected .values )
178
+ tm .assert_numpy_array_equal (result , expected )
183
179
184
180
result = expr ._can_use_numexpr (op , op_str , right , right , "evaluate" )
185
181
assert not result
@@ -203,23 +199,19 @@ def testit():
203
199
("ne" , "!=" ),
204
200
],
205
201
)
206
- @pytest .mark .parametrize ("left,right" , [(_frame , _frame2 ), (_mixed , _mixed2 )])
202
+ @pytest .mark .parametrize (
203
+ "left,right" , [(_array , _array2 ), (_array_mixed , _array_mixed2 )]
204
+ )
207
205
def test_comparison_ops (self , opname , op_str , left , right ):
208
206
def testit ():
209
207
f12 = left + 1
210
208
f22 = right + 1
211
209
212
210
op = getattr (operator , opname )
213
211
214
- result = expr ._can_use_numexpr (op , op_str , left , f12 , "evaluate" )
215
- assert result != left ._is_mixed_type
216
-
217
212
result = expr .evaluate (op , left , f12 , use_numexpr = True )
218
213
expected = expr .evaluate (op , left , f12 , use_numexpr = False )
219
- if isinstance (result , DataFrame ):
220
- tm .assert_frame_equal (result , expected )
221
- else :
222
- tm .assert_numpy_array_equal (result , expected .values )
214
+ tm .assert_numpy_array_equal (result , expected )
223
215
224
216
result = expr ._can_use_numexpr (op , op_str , right , f22 , "evaluate" )
225
217
assert not result
0 commit comments