@@ -1737,17 +1737,17 @@ def setUpClass(cls):
1737
1737
1738
1738
class TestScope (object ):
1739
1739
1740
- def check_global_scope (self , e , engine , parser ):
1740
+ @pytest .mark .parametrize ('engine' , _engines )
1741
+ @pytest .mark .parametrize ('parser' , expr ._parsers )
1742
+ def test_global_scope (self , engine , parser ):
1741
1743
tm .skip_if_no_ne (engine )
1744
+ e = '_var_s * 2'
1742
1745
tm .assert_numpy_array_equal (_var_s * 2 , pd .eval (e , engine = engine ,
1743
1746
parser = parser ))
1744
1747
1745
- def test_global_scope (self ):
1746
- e = '_var_s * 2'
1747
- for engine , parser in product (_engines , expr ._parsers ):
1748
- yield self .check_global_scope , e , engine , parser
1749
-
1750
- def check_no_new_locals (self , engine , parser ):
1748
+ @pytest .mark .parametrize ('engine' , _engines )
1749
+ @pytest .mark .parametrize ('parser' , expr ._parsers )
1750
+ def test_no_new_locals (self , engine , parser ):
1751
1751
tm .skip_if_no_ne (engine )
1752
1752
x = 1
1753
1753
lcls = locals ().copy ()
@@ -1756,22 +1756,16 @@ def check_no_new_locals(self, engine, parser):
1756
1756
lcls2 .pop ('lcls' )
1757
1757
tm .assert_equal (lcls , lcls2 )
1758
1758
1759
- def test_no_new_locals (self ):
1760
- for engine , parser in product (_engines , expr ._parsers ):
1761
- yield self .check_no_new_locals , engine , parser
1762
-
1763
- def check_no_new_globals (self , engine , parser ):
1759
+ @pytest .mark .parametrize ('engine' , _engines )
1760
+ @pytest .mark .parametrize ('parser' , expr ._parsers )
1761
+ def test_no_new_globals (self , engine , parser ):
1764
1762
tm .skip_if_no_ne (engine )
1765
1763
x = 1
1766
1764
gbls = globals ().copy ()
1767
1765
pd .eval ('x + 1' , engine = engine , parser = parser )
1768
1766
gbls2 = globals ().copy ()
1769
1767
tm .assert_equal (gbls , gbls2 )
1770
1768
1771
- def test_no_new_globals (self ):
1772
- for engine , parser in product (_engines , expr ._parsers ):
1773
- yield self .check_no_new_globals , engine , parser
1774
-
1775
1769
1776
1770
def test_invalid_engine ():
1777
1771
tm .skip_if_no_ne ()
@@ -1791,7 +1785,9 @@ def test_invalid_parser():
1791
1785
'pandas' : PandasExprVisitor }
1792
1786
1793
1787
1794
- def check_disallowed_nodes (engine , parser ):
1788
+ @pytest .mark .parametrize ('engine' , _parsers )
1789
+ @pytest .mark .parametrize ('parser' , _parsers )
1790
+ def test_disallowed_nodes (engine , parser ):
1795
1791
tm .skip_if_no_ne (engine )
1796
1792
VisitorClass = _parsers [parser ]
1797
1793
uns_ops = VisitorClass .unsupported_nodes
@@ -1802,11 +1798,6 @@ def check_disallowed_nodes(engine, parser):
1802
1798
getattr (inst , ops )()
1803
1799
1804
1800
1805
- def test_disallowed_nodes ():
1806
- for engine , visitor in product (_parsers , repeat = 2 ):
1807
- yield check_disallowed_nodes , engine , visitor
1808
-
1809
-
1810
1801
@pytest .mark .parametrize ('engine' , _engines )
1811
1802
@pytest .mark .parametrize ('parser' , expr ._parsers )
1812
1803
def test_syntax_error_exprs (engine , parser ):
@@ -1883,9 +1874,19 @@ def test_more_than_one_expression_raises(engine, parser):
1883
1874
pd .eval ('1 + 1; 2 + 2' , engine = engine , parser = parser )
1884
1875
1885
1876
1886
- def check_bool_ops_fails_on_scalars (gen , lhs , cmp , rhs , engine , parser ):
1877
+ @pytest .mark .parametrize ('engine' , _engines )
1878
+ @pytest .mark .parametrize ('parser' , expr ._parsers )
1879
+ @pytest .mark .parametrize ('cmp' , ('and' , 'or' ))
1880
+ @pytest .mark .parametrize ('lhs' , (int , float ))
1881
+ @pytest .mark .parametrize ('rhs' , (int , float ))
1882
+ def test_bool_ops_fails_on_scalars (lhs , cmp , rhs , engine , parser ):
1887
1883
tm .skip_if_no_ne (engine )
1888
- mid = gen [type (lhs )]()
1884
+ gen = {int : lambda : np .random .randint (10 ), float : np .random .randn }
1885
+
1886
+ mid = gen [lhs ]()
1887
+ lhs = gen [lhs ]()
1888
+ rhs = gen [rhs ]()
1889
+
1889
1890
ex1 = 'lhs {0} mid {1} rhs' .format (cmp , cmp )
1890
1891
ex2 = 'lhs {0} mid and mid {1} rhs' .format (cmp , cmp )
1891
1892
ex3 = '(lhs {0} mid) & (mid {1} rhs)' .format (cmp , cmp )
@@ -1894,17 +1895,6 @@ def check_bool_ops_fails_on_scalars(gen, lhs, cmp, rhs, engine, parser):
1894
1895
pd .eval (ex , engine = engine , parser = parser )
1895
1896
1896
1897
1897
- def test_bool_ops_fails_on_scalars ():
1898
- _bool_ops_syms = 'and' , 'or'
1899
- dtypes = int , float
1900
- gen = {int : lambda : np .random .randint (10 ), float : np .random .randn }
1901
- for engine , parser , dtype1 , cmp , dtype2 in product (_engines , expr ._parsers ,
1902
- dtypes , _bool_ops_syms ,
1903
- dtypes ):
1904
- yield (check_bool_ops_fails_on_scalars , gen , gen [dtype1 ](), cmp ,
1905
- gen [dtype2 ](), engine , parser )
1906
-
1907
-
1908
1898
@pytest .mark .parametrize ('engine' , _engines )
1909
1899
@pytest .mark .parametrize ('parser' , expr ._parsers )
1910
1900
def test_inf (engine , parser ):
@@ -1915,7 +1905,9 @@ def test_inf(engine, parser):
1915
1905
tm .assert_equal (result , expected )
1916
1906
1917
1907
1918
- def check_negate_lt_eq_le (engine , parser ):
1908
+ @pytest .mark .parametrize ('engine' , _engines )
1909
+ @pytest .mark .parametrize ('parser' , expr ._parsers )
1910
+ def test_negate_lt_eq_le (engine , parser ):
1919
1911
tm .skip_if_no_ne (engine )
1920
1912
df = pd .DataFrame ([[0 , 10 ], [1 , 20 ]], columns = ['cat' , 'count' ])
1921
1913
expected = df [~ (df .cat > 0 )]
@@ -1931,11 +1923,6 @@ def check_negate_lt_eq_le(engine, parser):
1931
1923
tm .assert_frame_equal (result , expected )
1932
1924
1933
1925
1934
- def test_negate_lt_eq_le ():
1935
- for engine , parser in product (_engines , expr ._parsers ):
1936
- yield check_negate_lt_eq_le , engine , parser
1937
-
1938
-
1939
1926
class TestValidate (tm .TestCase ):
1940
1927
1941
1928
def test_validate_bool_args (self ):
0 commit comments