Skip to content

Commit eb40557

Browse files
authored
TST: Use multiple instances of parametrize instead of product (#21602)
1 parent 7bee353 commit eb40557

File tree

9 files changed

+185
-188
lines changed

9 files changed

+185
-188
lines changed

pandas/tests/dtypes/test_dtypes.py

+7-7
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22
import re
33
import pytest
44

5-
from itertools import product
6-
75
import numpy as np
86
import pandas as pd
97
from pandas import (
@@ -233,12 +231,14 @@ def test_dst(self):
233231
assert is_datetimetz(s2)
234232
assert s1.dtype == s2.dtype
235233

236-
def test_parser(self):
234+
@pytest.mark.parametrize('tz', ['UTC', 'US/Eastern'])
235+
@pytest.mark.parametrize('constructor', ['M8', 'datetime64'])
236+
def test_parser(self, tz, constructor):
237237
# pr #11245
238-
for tz, constructor in product(('UTC', 'US/Eastern'),
239-
('M8', 'datetime64')):
240-
assert (DatetimeTZDtype('%s[ns, %s]' % (constructor, tz)) ==
241-
DatetimeTZDtype('ns', tz))
238+
dtz_str = '{con}[ns, {tz}]'.format(con=constructor, tz=tz)
239+
result = DatetimeTZDtype(dtz_str)
240+
expected = DatetimeTZDtype('ns', tz)
241+
assert result == expected
242242

243243
def test_empty(self):
244244
dt = DatetimeTZDtype()

pandas/tests/frame/test_rank.py

+63-61
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
from pandas.util.testing import assert_frame_equal
1111
from pandas.tests.frame.common import TestData
1212
from pandas import Series, DataFrame
13-
from pandas.compat import product
1413

1514

1615
class TestRank(TestData):
@@ -26,6 +25,13 @@ class TestRank(TestData):
2625
'dense': np.array([1, 3, 4, 2, nan, 2, 1, 5, nan, 3]),
2726
}
2827

28+
@pytest.fixture(params=['average', 'min', 'max', 'first', 'dense'])
29+
def method(self, request):
30+
"""
31+
Fixture for trying all rank methods
32+
"""
33+
return request.param
34+
2935
def test_rank(self):
3036
rankdata = pytest.importorskip('scipy.stats.rankdata')
3137

@@ -217,34 +223,35 @@ def test_rank_methods_frame(self):
217223
expected = expected.astype('float64')
218224
tm.assert_frame_equal(result, expected)
219225

220-
def test_rank_descending(self):
221-
dtypes = ['O', 'f8', 'i8']
226+
@pytest.mark.parametrize('dtype', ['O', 'f8', 'i8'])
227+
def test_rank_descending(self, method, dtype):
222228

223-
for dtype, method in product(dtypes, self.results):
224-
if 'i' in dtype:
225-
df = self.df.dropna()
226-
else:
227-
df = self.df.astype(dtype)
229+
if 'i' in dtype:
230+
df = self.df.dropna()
231+
else:
232+
df = self.df.astype(dtype)
228233

229-
res = df.rank(ascending=False)
230-
expected = (df.max() - df).rank()
231-
assert_frame_equal(res, expected)
234+
res = df.rank(ascending=False)
235+
expected = (df.max() - df).rank()
236+
assert_frame_equal(res, expected)
232237

233-
if method == 'first' and dtype == 'O':
234-
continue
238+
if method == 'first' and dtype == 'O':
239+
return
235240

236-
expected = (df.max() - df).rank(method=method)
241+
expected = (df.max() - df).rank(method=method)
237242

238-
if dtype != 'O':
239-
res2 = df.rank(method=method, ascending=False,
240-
numeric_only=True)
241-
assert_frame_equal(res2, expected)
243+
if dtype != 'O':
244+
res2 = df.rank(method=method, ascending=False,
245+
numeric_only=True)
246+
assert_frame_equal(res2, expected)
242247

243-
res3 = df.rank(method=method, ascending=False,
244-
numeric_only=False)
245-
assert_frame_equal(res3, expected)
248+
res3 = df.rank(method=method, ascending=False,
249+
numeric_only=False)
250+
assert_frame_equal(res3, expected)
246251

247-
def test_rank_2d_tie_methods(self):
252+
@pytest.mark.parametrize('axis', [0, 1])
253+
@pytest.mark.parametrize('dtype', [None, object])
254+
def test_rank_2d_tie_methods(self, method, axis, dtype):
248255
df = self.df
249256

250257
def _check2d(df, expected, method='average', axis=0):
@@ -257,43 +264,38 @@ def _check2d(df, expected, method='average', axis=0):
257264
result = df.rank(method=method, axis=axis)
258265
assert_frame_equal(result, exp_df)
259266

260-
dtypes = [None, object]
261267
disabled = set([(object, 'first')])
262-
results = self.results
263-
264-
for method, axis, dtype in product(results, [0, 1], dtypes):
265-
if (dtype, method) in disabled:
266-
continue
267-
frame = df if dtype is None else df.astype(dtype)
268-
_check2d(frame, results[method], method=method, axis=axis)
269-
270-
271-
@pytest.mark.parametrize(
272-
"method,exp", [("dense",
273-
[[1., 1., 1.],
274-
[1., 0.5, 2. / 3],
275-
[1., 0.5, 1. / 3]]),
276-
("min",
277-
[[1. / 3, 1., 1.],
278-
[1. / 3, 1. / 3, 2. / 3],
279-
[1. / 3, 1. / 3, 1. / 3]]),
280-
("max",
281-
[[1., 1., 1.],
282-
[1., 2. / 3, 2. / 3],
283-
[1., 2. / 3, 1. / 3]]),
284-
("average",
285-
[[2. / 3, 1., 1.],
286-
[2. / 3, 0.5, 2. / 3],
287-
[2. / 3, 0.5, 1. / 3]]),
288-
("first",
289-
[[1. / 3, 1., 1.],
290-
[2. / 3, 1. / 3, 2. / 3],
291-
[3. / 3, 2. / 3, 1. / 3]])])
292-
def test_rank_pct_true(method, exp):
293-
# see gh-15630.
294-
295-
df = DataFrame([[2012, 66, 3], [2012, 65, 2], [2012, 65, 1]])
296-
result = df.rank(method=method, pct=True)
297-
298-
expected = DataFrame(exp)
299-
tm.assert_frame_equal(result, expected)
268+
if (dtype, method) in disabled:
269+
return
270+
frame = df if dtype is None else df.astype(dtype)
271+
_check2d(frame, self.results[method], method=method, axis=axis)
272+
273+
@pytest.mark.parametrize(
274+
"method,exp", [("dense",
275+
[[1., 1., 1.],
276+
[1., 0.5, 2. / 3],
277+
[1., 0.5, 1. / 3]]),
278+
("min",
279+
[[1. / 3, 1., 1.],
280+
[1. / 3, 1. / 3, 2. / 3],
281+
[1. / 3, 1. / 3, 1. / 3]]),
282+
("max",
283+
[[1., 1., 1.],
284+
[1., 2. / 3, 2. / 3],
285+
[1., 2. / 3, 1. / 3]]),
286+
("average",
287+
[[2. / 3, 1., 1.],
288+
[2. / 3, 0.5, 2. / 3],
289+
[2. / 3, 0.5, 1. / 3]]),
290+
("first",
291+
[[1. / 3, 1., 1.],
292+
[2. / 3, 1. / 3, 2. / 3],
293+
[3. / 3, 2. / 3, 1. / 3]])])
294+
def test_rank_pct_true(self, method, exp):
295+
# see gh-15630.
296+
297+
df = DataFrame([[2012, 66, 3], [2012, 65, 2], [2012, 65, 1]])
298+
result = df.rank(method=method, pct=True)
299+
300+
expected = DataFrame(exp)
301+
tm.assert_frame_equal(result, expected)

pandas/tests/groupby/test_function.py

+4-3
Original file line numberDiff line numberDiff line change
@@ -778,9 +778,10 @@ def test_frame_describe_unstacked_format():
778778
# nunique
779779
# --------------------------------
780780

781-
@pytest.mark.parametrize("n, m", cart_product(10 ** np.arange(2, 6),
782-
(10, 100, 1000)))
783-
@pytest.mark.parametrize("sort, dropna", cart_product((False, True), repeat=2))
781+
@pytest.mark.parametrize('n', 10 ** np.arange(2, 6))
782+
@pytest.mark.parametrize('m', [10, 100, 1000])
783+
@pytest.mark.parametrize('sort', [False, True])
784+
@pytest.mark.parametrize('dropna', [False, True])
784785
def test_series_groupby_nunique(n, m, sort, dropna):
785786

786787
def check_nunique(df, keys, as_index=True):

pandas/tests/groupby/test_whitelist.py

+5-7
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
import numpy as np
99
from pandas import DataFrame, Series, compat, date_range, Index, MultiIndex
1010
from pandas.util import testing as tm
11-
from pandas.compat import lrange, product
1211

1312
AGG_FUNCTIONS = ['sum', 'prod', 'min', 'max', 'median', 'mean', 'skew',
1413
'mad', 'std', 'var', 'sem']
@@ -175,12 +174,11 @@ def raw_frame():
175174
return raw_frame
176175

177176

178-
@pytest.mark.parametrize(
179-
"op, level, axis, skipna, sort",
180-
product(AGG_FUNCTIONS,
181-
lrange(2), lrange(2),
182-
[True, False],
183-
[True, False]))
177+
@pytest.mark.parametrize('op', AGG_FUNCTIONS)
178+
@pytest.mark.parametrize('level', [0, 1])
179+
@pytest.mark.parametrize('axis', [0, 1])
180+
@pytest.mark.parametrize('skipna', [True, False])
181+
@pytest.mark.parametrize('sort', [True, False])
184182
def test_regression_whitelist_methods(
185183
raw_frame, op, level,
186184
axis, skipna, sort):

pandas/tests/reshape/test_concat.py

+6-5
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from warnings import catch_warnings
2-
from itertools import combinations, product
2+
from itertools import combinations
33

44
import datetime as dt
55
import dateutil
@@ -941,10 +941,11 @@ def test_append_different_columns_types(self, df_columns, series_index):
941941
columns=combined_columns)
942942
assert_frame_equal(result, expected)
943943

944-
@pytest.mark.parametrize(
945-
"index_can_append, index_cannot_append_with_other",
946-
product(indexes_can_append, indexes_cannot_append_with_other),
947-
ids=lambda x: x.__class__.__name__)
944+
@pytest.mark.parametrize('index_can_append', indexes_can_append,
945+
ids=lambda x: x.__class__.__name__)
946+
@pytest.mark.parametrize('index_cannot_append_with_other',
947+
indexes_cannot_append_with_other,
948+
ids=lambda x: x.__class__.__name__)
948949
def test_append_different_columns_types_raises(
949950
self, index_can_append, index_cannot_append_with_other):
950951
# GH18359

pandas/tests/sparse/series/test_series.py

+9-11
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,6 @@
2323
from pandas.core.sparse.api import SparseSeries
2424
from pandas.tests.series.test_api import SharedWithSparse
2525

26-
from itertools import product
27-
2826

2927
def _test_data1():
3028
# nan-based
@@ -985,16 +983,16 @@ def test_combine_first(self):
985983
tm.assert_sp_series_equal(result, result2)
986984
tm.assert_sp_series_equal(result, expected)
987985

988-
@pytest.mark.parametrize('deep,fill_values', [([True, False],
989-
[0, 1, np.nan, None])])
990-
def test_memory_usage_deep(self, deep, fill_values):
991-
for deep, fill_value in product(deep, fill_values):
992-
sparse_series = SparseSeries(fill_values, fill_value=fill_value)
993-
dense_series = Series(fill_values)
994-
sparse_usage = sparse_series.memory_usage(deep=deep)
995-
dense_usage = dense_series.memory_usage(deep=deep)
986+
@pytest.mark.parametrize('deep', [True, False])
987+
@pytest.mark.parametrize('fill_value', [0, 1, np.nan, None])
988+
def test_memory_usage_deep(self, deep, fill_value):
989+
values = [0, 1, np.nan, None]
990+
sparse_series = SparseSeries(values, fill_value=fill_value)
991+
dense_series = Series(values)
992+
sparse_usage = sparse_series.memory_usage(deep=deep)
993+
dense_usage = dense_series.memory_usage(deep=deep)
996994

997-
assert sparse_usage < dense_usage
995+
assert sparse_usage < dense_usage
998996

999997

1000998
class TestSparseHandlingMultiIndexes(object):

pandas/tests/test_multilevel.py

+40-40
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@
2020
import pandas as pd
2121
import pandas._libs.index as _index
2222

23+
AGG_FUNCTIONS = ['sum', 'prod', 'min', 'max', 'median', 'mean', 'skew', 'mad',
24+
'std', 'var', 'sem']
25+
2326

2427
class Base(object):
2528

@@ -1389,60 +1392,57 @@ def test_count(self):
13891392
pytest.raises(KeyError, series.count, 'x')
13901393
pytest.raises(KeyError, frame.count, level='x')
13911394

1392-
AGG_FUNCTIONS = ['sum', 'prod', 'min', 'max', 'median', 'mean', 'skew',
1393-
'mad', 'std', 'var', 'sem']
1394-
1395+
@pytest.mark.parametrize('op', AGG_FUNCTIONS)
1396+
@pytest.mark.parametrize('level', [0, 1])
1397+
@pytest.mark.parametrize('skipna', [True, False])
13951398
@pytest.mark.parametrize('sort', [True, False])
1396-
def test_series_group_min_max(self, sort):
1399+
def test_series_group_min_max(self, op, level, skipna, sort):
13971400
# GH 17537
1398-
for op, level, skipna in cart_product(self.AGG_FUNCTIONS, lrange(2),
1399-
[False, True]):
1400-
grouped = self.series.groupby(level=level, sort=sort)
1401-
aggf = lambda x: getattr(x, op)(skipna=skipna)
1402-
# skipna=True
1403-
leftside = grouped.agg(aggf)
1404-
rightside = getattr(self.series, op)(level=level, skipna=skipna)
1405-
if sort:
1406-
rightside = rightside.sort_index(level=level)
1407-
tm.assert_series_equal(leftside, rightside)
1408-
1401+
grouped = self.series.groupby(level=level, sort=sort)
1402+
# skipna=True
1403+
leftside = grouped.agg(lambda x: getattr(x, op)(skipna=skipna))
1404+
rightside = getattr(self.series, op)(level=level, skipna=skipna)
1405+
if sort:
1406+
rightside = rightside.sort_index(level=level)
1407+
tm.assert_series_equal(leftside, rightside)
1408+
1409+
@pytest.mark.parametrize('op', AGG_FUNCTIONS)
1410+
@pytest.mark.parametrize('level', [0, 1])
1411+
@pytest.mark.parametrize('axis', [0, 1])
1412+
@pytest.mark.parametrize('skipna', [True, False])
14091413
@pytest.mark.parametrize('sort', [True, False])
1410-
def test_frame_group_ops(self, sort):
1414+
def test_frame_group_ops(self, op, level, axis, skipna, sort):
14111415
# GH 17537
14121416
self.frame.iloc[1, [1, 2]] = np.nan
14131417
self.frame.iloc[7, [0, 1]] = np.nan
14141418

1415-
for op, level, axis, skipna in cart_product(self.AGG_FUNCTIONS,
1416-
lrange(2), lrange(2),
1417-
[False, True]):
1418-
1419-
if axis == 0:
1420-
frame = self.frame
1421-
else:
1422-
frame = self.frame.T
1419+
if axis == 0:
1420+
frame = self.frame
1421+
else:
1422+
frame = self.frame.T
14231423

1424-
grouped = frame.groupby(level=level, axis=axis, sort=sort)
1424+
grouped = frame.groupby(level=level, axis=axis, sort=sort)
14251425

1426-
pieces = []
1426+
pieces = []
14271427

1428-
def aggf(x):
1429-
pieces.append(x)
1430-
return getattr(x, op)(skipna=skipna, axis=axis)
1428+
def aggf(x):
1429+
pieces.append(x)
1430+
return getattr(x, op)(skipna=skipna, axis=axis)
14311431

1432-
leftside = grouped.agg(aggf)
1433-
rightside = getattr(frame, op)(level=level, axis=axis,
1434-
skipna=skipna)
1435-
if sort:
1436-
rightside = rightside.sort_index(level=level, axis=axis)
1437-
frame = frame.sort_index(level=level, axis=axis)
1432+
leftside = grouped.agg(aggf)
1433+
rightside = getattr(frame, op)(level=level, axis=axis,
1434+
skipna=skipna)
1435+
if sort:
1436+
rightside = rightside.sort_index(level=level, axis=axis)
1437+
frame = frame.sort_index(level=level, axis=axis)
14381438

1439-
# for good measure, groupby detail
1440-
level_index = frame._get_axis(axis).levels[level]
1439+
# for good measure, groupby detail
1440+
level_index = frame._get_axis(axis).levels[level]
14411441

1442-
tm.assert_index_equal(leftside._get_axis(axis), level_index)
1443-
tm.assert_index_equal(rightside._get_axis(axis), level_index)
1442+
tm.assert_index_equal(leftside._get_axis(axis), level_index)
1443+
tm.assert_index_equal(rightside._get_axis(axis), level_index)
14441444

1445-
tm.assert_frame_equal(leftside, rightside)
1445+
tm.assert_frame_equal(leftside, rightside)
14461446

14471447
def test_stat_op_corner(self):
14481448
obj = Series([10.0], index=MultiIndex.from_tuples([(2, 3)]))

0 commit comments

Comments
 (0)