Skip to content

Commit c6cd346

Browse files
committed
TST: Parametrize remaining simple yield tests.
Simple meaning those that loop through a constant and are not in a unittest class.
1 parent 47bf1a1 commit c6cd346

File tree

3 files changed

+53
-57
lines changed

3 files changed

+53
-57
lines changed

pandas/tests/computation/test_eval.py

+28-41
Original file line numberDiff line numberDiff line change
@@ -1737,17 +1737,17 @@ def setUpClass(cls):
17371737

17381738
class TestScope(object):
17391739

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):
17411743
tm.skip_if_no_ne(engine)
1744+
e = '_var_s * 2'
17421745
tm.assert_numpy_array_equal(_var_s * 2, pd.eval(e, engine=engine,
17431746
parser=parser))
17441747

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):
17511751
tm.skip_if_no_ne(engine)
17521752
x = 1
17531753
lcls = locals().copy()
@@ -1756,22 +1756,16 @@ def check_no_new_locals(self, engine, parser):
17561756
lcls2.pop('lcls')
17571757
tm.assert_equal(lcls, lcls2)
17581758

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):
17641762
tm.skip_if_no_ne(engine)
17651763
x = 1
17661764
gbls = globals().copy()
17671765
pd.eval('x + 1', engine=engine, parser=parser)
17681766
gbls2 = globals().copy()
17691767
tm.assert_equal(gbls, gbls2)
17701768

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-
17751769

17761770
def test_invalid_engine():
17771771
tm.skip_if_no_ne()
@@ -1791,7 +1785,9 @@ def test_invalid_parser():
17911785
'pandas': PandasExprVisitor}
17921786

17931787

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):
17951791
tm.skip_if_no_ne(engine)
17961792
VisitorClass = _parsers[parser]
17971793
uns_ops = VisitorClass.unsupported_nodes
@@ -1802,11 +1798,6 @@ def check_disallowed_nodes(engine, parser):
18021798
getattr(inst, ops)()
18031799

18041800

1805-
def test_disallowed_nodes():
1806-
for engine, visitor in product(_parsers, repeat=2):
1807-
yield check_disallowed_nodes, engine, visitor
1808-
1809-
18101801
@pytest.mark.parametrize('engine', _engines)
18111802
@pytest.mark.parametrize('parser', expr._parsers)
18121803
def test_syntax_error_exprs(engine, parser):
@@ -1883,9 +1874,19 @@ def test_more_than_one_expression_raises(engine, parser):
18831874
pd.eval('1 + 1; 2 + 2', engine=engine, parser=parser)
18841875

18851876

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):
18871883
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+
18891890
ex1 = 'lhs {0} mid {1} rhs'.format(cmp, cmp)
18901891
ex2 = 'lhs {0} mid and mid {1} rhs'.format(cmp, cmp)
18911892
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):
18941895
pd.eval(ex, engine=engine, parser=parser)
18951896

18961897

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-
19081898
@pytest.mark.parametrize('engine', _engines)
19091899
@pytest.mark.parametrize('parser', expr._parsers)
19101900
def test_inf(engine, parser):
@@ -1915,7 +1905,9 @@ def test_inf(engine, parser):
19151905
tm.assert_equal(result, expected)
19161906

19171907

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):
19191911
tm.skip_if_no_ne(engine)
19201912
df = pd.DataFrame([[0, 10], [1, 20]], columns=['cat', 'count'])
19211913
expected = df[~(df.cat > 0)]
@@ -1931,11 +1923,6 @@ def check_negate_lt_eq_le(engine, parser):
19311923
tm.assert_frame_equal(result, expected)
19321924

19331925

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-
19391926
class TestValidate(tm.TestCase):
19401927

19411928
def test_validate_bool_args(self):

pandas/tests/io/parser/test_network.py

+13-13
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77

88
import os
99
import pytest
10-
from itertools import product
1110

1211
import pandas.util.testing as tm
1312
from pandas import DataFrame
@@ -21,29 +20,30 @@ def salaries_table():
2120

2221

2322
@pytest.mark.parametrize(
24-
"compression,extension", [('gzip', '.gz'), ('bz2', '.bz2'),
25-
('zip', '.zip'), ('xz', '.xz')])
26-
def test_compressed_urls(salaries_table, compression, extension):
27-
check_compressed_urls(salaries_table, compression, extension)
23+
"compression,extension",
24+
[('gzip', '.gz'), ('bz2', '.bz2'), ('zip', '.zip'),
25+
tm._mark_skipif_no_lzma(('xz', '.xz'))])
26+
@pytest.mark.parametrize('mode', ['explicit', 'infer'])
27+
@pytest.mark.parametrize('engine', ['python', 'c'])
28+
def test_compressed_urls(salaries_table, compression, extension, mode, engine):
29+
check_compressed_urls(salaries_table, compression, extension, mode, engine)
2830

2931

3032
@tm.network
31-
def check_compressed_urls(salaries_table, compression, extension):
33+
def check_compressed_urls(salaries_table, compression, extension, mode,
34+
engine):
3235
# test reading compressed urls with various engines and
3336
# extension inference
3437
base_url = ('https://github.com/pandas-dev/pandas/raw/master/'
3538
'pandas/tests/io/parser/data/salaries.csv')
3639

3740
url = base_url + extension
3841

39-
# args is a (compression, engine) tuple
40-
for (c, engine) in product([compression, 'infer'], ['python', 'c']):
42+
if mode != 'explicit':
43+
compression = mode
4144

42-
if url.endswith('.xz'):
43-
tm._skip_if_no_lzma()
44-
45-
url_table = read_table(url, compression=c, engine=engine)
46-
tm.assert_frame_equal(url_table, salaries_table)
45+
url_table = read_table(url, compression=compression, engine=engine)
46+
tm.assert_frame_equal(url_table, salaries_table)
4747

4848

4949
class TestS3(tm.TestCase):

pandas/util/testing.py

+12-3
Original file line numberDiff line numberDiff line change
@@ -307,12 +307,21 @@ def _skip_if_scipy_0_17():
307307
pytest.skip("scipy 0.17")
308308

309309

310-
def _skip_if_no_lzma():
310+
def _check_if_lzma():
311311
try:
312312
return compat.import_lzma()
313313
except ImportError:
314-
import pytest
315-
pytest.skip('need backports.lzma to run')
314+
return False
315+
316+
317+
def _skip_if_no_lzma():
318+
return _check_if_lzma() or pytest.skip('need backports.lzma to run')
319+
320+
321+
_mark_skipif_no_lzma = pytest.mark.skipif(
322+
not _check_if_lzma(),
323+
reason='need backports.lzma to run'
324+
)
316325

317326

318327
def _skip_if_no_xarray():

0 commit comments

Comments
 (0)