18
18
from pandas .util .testing import makeCustomDataframe as mkdf
19
19
20
20
from pandas .computation import pytables
21
- from pandas .computation .expressions import _USE_NUMEXPR
22
21
from pandas .computation .engines import _engines
23
22
from pandas .computation .expr import PythonExprVisitor , PandasExprVisitor
24
23
from pandas .computation .ops import (_binary_ops_dict ,
37
36
_scalar_skip = 'in' , 'not in'
38
37
39
38
40
- def skip_if_no_ne (engine = 'numexpr' ):
41
- if not _USE_NUMEXPR and engine == 'numexpr' :
42
- raise nose .SkipTest ("numexpr engine not installed or disabled" )
43
-
44
-
45
39
def engine_has_neg_frac (engine ):
46
40
return _engines [engine ].has_neg_frac
47
41
@@ -110,7 +104,7 @@ class TestEvalNumexprPandas(tm.TestCase):
110
104
@classmethod
111
105
def setUpClass (cls ):
112
106
super (TestEvalNumexprPandas , cls ).setUpClass ()
113
- skip_if_no_ne ()
107
+ tm . skip_if_no_ne ()
114
108
import numexpr as ne
115
109
cls .ne = ne
116
110
cls .engine = 'numexpr'
@@ -428,7 +422,7 @@ def check_single_invert_op(self, lhs, cmp1, rhs):
428
422
assert_array_equal (expected , result )
429
423
430
424
for engine in self .current_engines :
431
- skip_if_no_ne (engine )
425
+ tm . skip_if_no_ne (engine )
432
426
assert_array_equal (result , pd .eval ('~elb' , engine = engine ,
433
427
parser = self .parser ))
434
428
@@ -459,7 +453,7 @@ def check_compound_invert_op(self, lhs, cmp1, rhs):
459
453
460
454
# make sure the other engines work the same as this one
461
455
for engine in self .current_engines :
462
- skip_if_no_ne (engine )
456
+ tm . skip_if_no_ne (engine )
463
457
ev = pd .eval (ex , engine = self .engine , parser = self .parser )
464
458
assert_array_equal (ev , result )
465
459
@@ -711,7 +705,7 @@ class TestEvalNumexprPython(TestEvalNumexprPandas):
711
705
@classmethod
712
706
def setUpClass (cls ):
713
707
super (TestEvalNumexprPython , cls ).setUpClass ()
714
- skip_if_no_ne ()
708
+ tm . skip_if_no_ne ()
715
709
import numexpr as ne
716
710
cls .ne = ne
717
711
cls .engine = 'numexpr'
@@ -790,7 +784,7 @@ class TestAlignment(object):
790
784
lhs_index_types = index_types + ('s' ,) # 'p'
791
785
792
786
def check_align_nested_unary_op (self , engine , parser ):
793
- skip_if_no_ne (engine )
787
+ tm . skip_if_no_ne (engine )
794
788
s = 'df * ~2'
795
789
df = mkdf (5 , 3 , data_gen_f = f )
796
790
res = pd .eval (s , engine = engine , parser = parser )
@@ -801,7 +795,7 @@ def test_align_nested_unary_op(self):
801
795
yield self .check_align_nested_unary_op , engine , parser
802
796
803
797
def check_basic_frame_alignment (self , engine , parser ):
804
- skip_if_no_ne (engine )
798
+ tm . skip_if_no_ne (engine )
805
799
args = product (self .lhs_index_types , self .index_types ,
806
800
self .index_types )
807
801
for lr_idx_type , rr_idx_type , c_idx_type in args :
@@ -817,7 +811,7 @@ def test_basic_frame_alignment(self):
817
811
yield self .check_basic_frame_alignment , engine , parser
818
812
819
813
def check_frame_comparison (self , engine , parser ):
820
- skip_if_no_ne (engine )
814
+ tm . skip_if_no_ne (engine )
821
815
args = product (self .lhs_index_types , repeat = 2 )
822
816
for r_idx_type , c_idx_type in args :
823
817
df = mkdf (10 , 10 , data_gen_f = f , r_idx_type = r_idx_type ,
@@ -835,7 +829,7 @@ def test_frame_comparison(self):
835
829
yield self .check_frame_comparison , engine , parser
836
830
837
831
def check_medium_complex_frame_alignment (self , engine , parser ):
838
- skip_if_no_ne (engine )
832
+ tm . skip_if_no_ne (engine )
839
833
args = product (self .lhs_index_types , self .index_types ,
840
834
self .index_types , self .index_types )
841
835
@@ -852,7 +846,7 @@ def test_medium_complex_frame_alignment(self):
852
846
yield self .check_medium_complex_frame_alignment , engine , parser
853
847
854
848
def check_basic_frame_series_alignment (self , engine , parser ):
855
- skip_if_no_ne (engine )
849
+ tm . skip_if_no_ne (engine )
856
850
857
851
def testit (r_idx_type , c_idx_type , index_name ):
858
852
df = mkdf (10 , 10 , data_gen_f = f , r_idx_type = r_idx_type ,
@@ -880,7 +874,7 @@ def test_basic_frame_series_alignment(self):
880
874
yield self .check_basic_frame_series_alignment , engine , parser
881
875
882
876
def check_basic_series_frame_alignment (self , engine , parser ):
883
- skip_if_no_ne (engine )
877
+ tm . skip_if_no_ne (engine )
884
878
885
879
def testit (r_idx_type , c_idx_type , index_name ):
886
880
df = mkdf (10 , 7 , data_gen_f = f , r_idx_type = r_idx_type ,
@@ -913,7 +907,7 @@ def test_basic_series_frame_alignment(self):
913
907
yield self .check_basic_series_frame_alignment , engine , parser
914
908
915
909
def check_series_frame_commutativity (self , engine , parser ):
916
- skip_if_no_ne (engine )
910
+ tm . skip_if_no_ne (engine )
917
911
args = product (self .lhs_index_types , self .index_types , ('+' , '*' ),
918
912
('index' , 'columns' ))
919
913
for r_idx_type , c_idx_type , op , index_name in args :
@@ -936,7 +930,7 @@ def test_series_frame_commutativity(self):
936
930
yield self .check_series_frame_commutativity , engine , parser
937
931
938
932
def check_complex_series_frame_alignment (self , engine , parser ):
939
- skip_if_no_ne (engine )
933
+ tm . skip_if_no_ne (engine )
940
934
941
935
import random
942
936
args = product (self .lhs_index_types , self .index_types ,
@@ -980,7 +974,7 @@ def test_complex_series_frame_alignment(self):
980
974
yield self .check_complex_series_frame_alignment , engine , parser
981
975
982
976
def check_performance_warning_for_poor_alignment (self , engine , parser ):
983
- skip_if_no_ne (engine )
977
+ tm . skip_if_no_ne (engine )
984
978
df = DataFrame (randn (1000 , 10 ))
985
979
s = Series (randn (10000 ))
986
980
if engine == 'numexpr' :
@@ -1036,7 +1030,7 @@ class TestOperationsNumExprPandas(tm.TestCase):
1036
1030
@classmethod
1037
1031
def setUpClass (cls ):
1038
1032
super (TestOperationsNumExprPandas , cls ).setUpClass ()
1039
- skip_if_no_ne ()
1033
+ tm . skip_if_no_ne ()
1040
1034
cls .engine = 'numexpr'
1041
1035
cls .parser = 'pandas'
1042
1036
cls .arith_ops = expr ._arith_ops_syms + expr ._cmp_ops_syms
@@ -1196,7 +1190,7 @@ def test_assignment_fails(self):
1196
1190
local_dict = {'df' : df , 'df2' : df2 })
1197
1191
1198
1192
def test_assignment_column (self ):
1199
- skip_if_no_ne ('numexpr' )
1193
+ tm . skip_if_no_ne ('numexpr' )
1200
1194
df = DataFrame (np .random .randn (5 , 2 ), columns = list ('ab' ))
1201
1195
orig_df = df .copy ()
1202
1196
@@ -1347,10 +1341,9 @@ class TestOperationsNumExprPython(TestOperationsNumExprPandas):
1347
1341
@classmethod
1348
1342
def setUpClass (cls ):
1349
1343
super (TestOperationsNumExprPython , cls ).setUpClass ()
1350
- if not _USE_NUMEXPR :
1351
- raise nose .SkipTest ("numexpr engine not installed" )
1352
1344
cls .engine = 'numexpr'
1353
1345
cls .parser = 'python'
1346
+ tm .skip_if_no_ne (cls .engine )
1354
1347
cls .arith_ops = expr ._arith_ops_syms + expr ._cmp_ops_syms
1355
1348
cls .arith_ops = filter (lambda x : x not in ('in' , 'not in' ),
1356
1349
cls .arith_ops )
@@ -1437,7 +1430,7 @@ def setUpClass(cls):
1437
1430
class TestScope (object ):
1438
1431
1439
1432
def check_global_scope (self , e , engine , parser ):
1440
- skip_if_no_ne (engine )
1433
+ tm . skip_if_no_ne (engine )
1441
1434
assert_array_equal (_var_s * 2 , pd .eval (e , engine = engine ,
1442
1435
parser = parser ))
1443
1436
@@ -1447,7 +1440,7 @@ def test_global_scope(self):
1447
1440
yield self .check_global_scope , e , engine , parser
1448
1441
1449
1442
def check_no_new_locals (self , engine , parser ):
1450
- skip_if_no_ne (engine )
1443
+ tm . skip_if_no_ne (engine )
1451
1444
x = 1
1452
1445
lcls = locals ().copy ()
1453
1446
pd .eval ('x + 1' , local_dict = lcls , engine = engine , parser = parser )
@@ -1460,7 +1453,7 @@ def test_no_new_locals(self):
1460
1453
yield self .check_no_new_locals , engine , parser
1461
1454
1462
1455
def check_no_new_globals (self , engine , parser ):
1463
- skip_if_no_ne (engine )
1456
+ tm . skip_if_no_ne (engine )
1464
1457
x = 1
1465
1458
gbls = globals ().copy ()
1466
1459
pd .eval ('x + 1' , engine = engine , parser = parser )
@@ -1473,21 +1466,21 @@ def test_no_new_globals(self):
1473
1466
1474
1467
1475
1468
def test_invalid_engine ():
1476
- skip_if_no_ne ()
1469
+ tm . skip_if_no_ne ()
1477
1470
assertRaisesRegexp (KeyError , 'Invalid engine \' asdf\' passed' ,
1478
1471
pd .eval , 'x + y' , local_dict = {'x' : 1 , 'y' : 2 },
1479
1472
engine = 'asdf' )
1480
1473
1481
1474
1482
1475
def test_invalid_parser ():
1483
- skip_if_no_ne ()
1476
+ tm . skip_if_no_ne ()
1484
1477
assertRaisesRegexp (KeyError , 'Invalid parser \' asdf\' passed' ,
1485
1478
pd .eval , 'x + y' , local_dict = {'x' : 1 , 'y' : 2 },
1486
1479
parser = 'asdf' )
1487
1480
1488
1481
1489
1482
def check_is_expr_syntax (engine ):
1490
- skip_if_no_ne (engine )
1483
+ tm . skip_if_no_ne (engine )
1491
1484
s = 1
1492
1485
valid1 = 's + 1'
1493
1486
valid2 = '__y + _xx'
@@ -1496,7 +1489,7 @@ def check_is_expr_syntax(engine):
1496
1489
1497
1490
1498
1491
def check_is_expr_names (engine ):
1499
- skip_if_no_ne (engine )
1492
+ tm . skip_if_no_ne (engine )
1500
1493
r , s = 1 , 2
1501
1494
valid = 's + r'
1502
1495
invalid = '__y + __x'
@@ -1519,7 +1512,7 @@ def test_is_expr_names():
1519
1512
1520
1513
1521
1514
def check_disallowed_nodes (engine , parser ):
1522
- skip_if_no_ne (engine )
1515
+ tm . skip_if_no_ne (engine )
1523
1516
VisitorClass = _parsers [parser ]
1524
1517
uns_ops = VisitorClass .unsupported_nodes
1525
1518
inst = VisitorClass ('x + 1' , engine , parser )
@@ -1534,7 +1527,7 @@ def test_disallowed_nodes():
1534
1527
1535
1528
1536
1529
def check_syntax_error_exprs (engine , parser ):
1537
- skip_if_no_ne (engine )
1530
+ tm . skip_if_no_ne (engine )
1538
1531
e = 's +'
1539
1532
assert_raises (SyntaxError , pd .eval , e , engine = engine , parser = parser )
1540
1533
@@ -1545,7 +1538,7 @@ def test_syntax_error_exprs():
1545
1538
1546
1539
1547
1540
def check_name_error_exprs (engine , parser ):
1548
- skip_if_no_ne (engine )
1541
+ tm . skip_if_no_ne (engine )
1549
1542
e = 's + t'
1550
1543
assert_raises (NameError , pd .eval , e , engine = engine , parser = parser )
1551
1544
0 commit comments