Skip to content

Commit 8579101

Browse files
jbrockmendeljreback
authored andcommitted
[CLN] parametrize and cleanup a bunch of tests (#22093)
1 parent 1dc7733 commit 8579101

14 files changed

+306
-289
lines changed

pandas/tests/frame/test_analytics.py

+25-25
Original file line numberDiff line numberDiff line change
@@ -74,29 +74,29 @@ def test_corr_non_numeric(self):
7474
tm.assert_frame_equal(result, expected)
7575

7676
@td.skip_if_no_scipy
77-
def test_corr_nooverlap(self):
77+
@pytest.mark.parametrize('meth', ['pearson', 'kendall', 'spearman'])
78+
def test_corr_nooverlap(self, meth):
7879
# nothing in common
79-
for meth in ['pearson', 'kendall', 'spearman']:
80-
df = DataFrame({'A': [1, 1.5, 1, np.nan, np.nan, np.nan],
81-
'B': [np.nan, np.nan, np.nan, 1, 1.5, 1],
82-
'C': [np.nan, np.nan, np.nan, np.nan,
83-
np.nan, np.nan]})
84-
rs = df.corr(meth)
85-
assert isna(rs.loc['A', 'B'])
86-
assert isna(rs.loc['B', 'A'])
87-
assert rs.loc['A', 'A'] == 1
88-
assert rs.loc['B', 'B'] == 1
89-
assert isna(rs.loc['C', 'C'])
80+
df = DataFrame({'A': [1, 1.5, 1, np.nan, np.nan, np.nan],
81+
'B': [np.nan, np.nan, np.nan, 1, 1.5, 1],
82+
'C': [np.nan, np.nan, np.nan, np.nan,
83+
np.nan, np.nan]})
84+
rs = df.corr(meth)
85+
assert isna(rs.loc['A', 'B'])
86+
assert isna(rs.loc['B', 'A'])
87+
assert rs.loc['A', 'A'] == 1
88+
assert rs.loc['B', 'B'] == 1
89+
assert isna(rs.loc['C', 'C'])
9090

9191
@td.skip_if_no_scipy
92-
def test_corr_constant(self):
92+
@pytest.mark.parametrize('meth', ['pearson', 'spearman'])
93+
def test_corr_constant(self, meth):
9394
# constant --> all NA
9495

95-
for meth in ['pearson', 'spearman']:
96-
df = DataFrame({'A': [1, 1, 1, np.nan, np.nan, np.nan],
97-
'B': [np.nan, np.nan, np.nan, 1, 1, 1]})
98-
rs = df.corr(meth)
99-
assert isna(rs.values).all()
96+
df = DataFrame({'A': [1, 1, 1, np.nan, np.nan, np.nan],
97+
'B': [np.nan, np.nan, np.nan, 1, 1, 1]})
98+
rs = df.corr(meth)
99+
assert isna(rs.values).all()
100100

101101
def test_corr_int(self):
102102
# dtypes other than float64 #1761
@@ -658,21 +658,21 @@ def test_numeric_only_flag(self, meth):
658658
pytest.raises(TypeError, lambda: getattr(df2, meth)(
659659
axis=1, numeric_only=False))
660660

661-
def test_mixed_ops(self):
661+
@pytest.mark.parametrize('op', ['mean', 'std', 'var',
662+
'skew', 'kurt', 'sem'])
663+
def test_mixed_ops(self, op):
662664
# GH 16116
663665
df = DataFrame({'int': [1, 2, 3, 4],
664666
'float': [1., 2., 3., 4.],
665667
'str': ['a', 'b', 'c', 'd']})
666668

667-
for op in ['mean', 'std', 'var', 'skew',
668-
'kurt', 'sem']:
669+
result = getattr(df, op)()
670+
assert len(result) == 2
671+
672+
with pd.option_context('use_bottleneck', False):
669673
result = getattr(df, op)()
670674
assert len(result) == 2
671675

672-
with pd.option_context('use_bottleneck', False):
673-
result = getattr(df, op)()
674-
assert len(result) == 2
675-
676676
def test_cumsum(self):
677677
self.tsframe.loc[5:10, 0] = nan
678678
self.tsframe.loc[10:15, 1] = nan

pandas/tests/frame/test_apply.py

+8-9
Original file line numberDiff line numberDiff line change
@@ -120,16 +120,15 @@ def test_apply_standard_nonunique(self):
120120
rs = df.T.apply(lambda s: s[0], axis=0)
121121
assert_series_equal(rs, xp)
122122

123-
def test_with_string_args(self):
124-
125-
for arg in ['sum', 'mean', 'min', 'max', 'std']:
126-
result = self.frame.apply(arg)
127-
expected = getattr(self.frame, arg)()
128-
tm.assert_series_equal(result, expected)
123+
@pytest.mark.parametrize('arg', ['sum', 'mean', 'min', 'max', 'std'])
124+
def test_with_string_args(self, arg):
125+
result = self.frame.apply(arg)
126+
expected = getattr(self.frame, arg)()
127+
tm.assert_series_equal(result, expected)
129128

130-
result = self.frame.apply(arg, axis=1)
131-
expected = getattr(self.frame, arg)(axis=1)
132-
tm.assert_series_equal(result, expected)
129+
result = self.frame.apply(arg, axis=1)
130+
expected = getattr(self.frame, arg)(axis=1)
131+
tm.assert_series_equal(result, expected)
133132

134133
def test_apply_broadcast_deprecated(self):
135134
with tm.assert_produces_warning(FutureWarning):

pandas/tests/frame/test_axis_select_reindex.py

+6-23
Original file line numberDiff line numberDiff line change
@@ -674,29 +674,12 @@ def _check_align(self, a, b, axis, fill_axis, how, method, limit=None):
674674
assert_frame_equal(aa, ea)
675675
assert_frame_equal(ab, eb)
676676

677-
def test_align_fill_method_inner(self):
678-
for meth in ['pad', 'bfill']:
679-
for ax in [0, 1, None]:
680-
for fax in [0, 1]:
681-
self._check_align_fill('inner', meth, ax, fax)
682-
683-
def test_align_fill_method_outer(self):
684-
for meth in ['pad', 'bfill']:
685-
for ax in [0, 1, None]:
686-
for fax in [0, 1]:
687-
self._check_align_fill('outer', meth, ax, fax)
688-
689-
def test_align_fill_method_left(self):
690-
for meth in ['pad', 'bfill']:
691-
for ax in [0, 1, None]:
692-
for fax in [0, 1]:
693-
self._check_align_fill('left', meth, ax, fax)
694-
695-
def test_align_fill_method_right(self):
696-
for meth in ['pad', 'bfill']:
697-
for ax in [0, 1, None]:
698-
for fax in [0, 1]:
699-
self._check_align_fill('right', meth, ax, fax)
677+
@pytest.mark.parametrize('meth', ['pad', 'bfill'])
678+
@pytest.mark.parametrize('ax', [0, 1, None])
679+
@pytest.mark.parametrize('fax', [0, 1])
680+
@pytest.mark.parametrize('how', ['inner', 'outer', 'left', 'right'])
681+
def test_align_fill_method(self, how, meth, ax, fax):
682+
self._check_align_fill(how, meth, ax, fax)
700683

701684
def _check_align_fill(self, kind, meth, ax, fax):
702685
left = self.frame.iloc[0:4, :10]

pandas/tests/frame/test_operators.py

+39-35
Original file line numberDiff line numberDiff line change
@@ -72,18 +72,18 @@ def test_operators(self):
7272
assert (df + df).equals(df)
7373
assert_frame_equal(df + df, df)
7474

75-
def test_ops_np_scalar(self):
76-
vals, xs = np.random.rand(5, 3), [nan, 7, -23, 2.718, -3.14, np.inf]
75+
@pytest.mark.parametrize('other', [nan, 7, -23, 2.718, -3.14, np.inf])
76+
def test_ops_np_scalar(self, other):
77+
vals = np.random.randn(5, 3)
7778
f = lambda x: DataFrame(x, index=list('ABCDE'),
7879
columns=['jim', 'joe', 'jolie'])
7980

8081
df = f(vals)
8182

82-
for x in xs:
83-
assert_frame_equal(df / np.array(x), f(vals / x))
84-
assert_frame_equal(np.array(x) * df, f(vals * x))
85-
assert_frame_equal(df + np.array(x), f(vals + x))
86-
assert_frame_equal(np.array(x) - df, f(x - vals))
83+
assert_frame_equal(df / np.array(other), f(vals / other))
84+
assert_frame_equal(np.array(other) * df, f(vals * other))
85+
assert_frame_equal(df + np.array(other), f(vals + other))
86+
assert_frame_equal(np.array(other) - df, f(other - vals))
8787

8888
def test_operators_boolean(self):
8989

@@ -116,41 +116,40 @@ def test_operators_boolean(self):
116116
True, index=[1], columns=['A'])
117117
assert_frame_equal(result, DataFrame(1, index=[1], columns=['A']))
118118

119-
def f():
120-
DataFrame(1.0, index=[1], columns=['A']) | DataFrame(
121-
True, index=[1], columns=['A'])
122-
pytest.raises(TypeError, f)
119+
df1 = DataFrame(1.0, index=[1], columns=['A'])
120+
df2 = DataFrame(True, index=[1], columns=['A'])
121+
with pytest.raises(TypeError):
122+
df1 | df2
123123

124-
def f():
125-
DataFrame('foo', index=[1], columns=['A']) | DataFrame(
126-
True, index=[1], columns=['A'])
127-
pytest.raises(TypeError, f)
124+
df1 = DataFrame('foo', index=[1], columns=['A'])
125+
df2 = DataFrame(True, index=[1], columns=['A'])
126+
with pytest.raises(TypeError):
127+
df1 | df2
128128

129-
def test_operators_none_as_na(self):
129+
@pytest.mark.parametrize('op', [operator.add, operator.sub,
130+
operator.mul, operator.truediv])
131+
def test_operators_none_as_na(self, op):
130132
df = DataFrame({"col1": [2, 5.0, 123, None],
131133
"col2": [1, 2, 3, 4]}, dtype=object)
132134

133-
ops = [operator.add, operator.sub, operator.mul, operator.truediv]
134-
135135
# since filling converts dtypes from object, changed expected to be
136136
# object
137-
for op in ops:
138-
filled = df.fillna(np.nan)
139-
result = op(df, 3)
140-
expected = op(filled, 3).astype(object)
141-
expected[com.isna(expected)] = None
142-
assert_frame_equal(result, expected)
137+
filled = df.fillna(np.nan)
138+
result = op(df, 3)
139+
expected = op(filled, 3).astype(object)
140+
expected[com.isna(expected)] = None
141+
assert_frame_equal(result, expected)
143142

144-
result = op(df, df)
145-
expected = op(filled, filled).astype(object)
146-
expected[com.isna(expected)] = None
147-
assert_frame_equal(result, expected)
143+
result = op(df, df)
144+
expected = op(filled, filled).astype(object)
145+
expected[com.isna(expected)] = None
146+
assert_frame_equal(result, expected)
148147

149-
result = op(df, df.fillna(7))
150-
assert_frame_equal(result, expected)
148+
result = op(df, df.fillna(7))
149+
assert_frame_equal(result, expected)
151150

152-
result = op(df.fillna(7), df)
153-
assert_frame_equal(result, expected, check_dtype=False)
151+
result = op(df.fillna(7), df)
152+
assert_frame_equal(result, expected, check_dtype=False)
154153

155154
def test_comparison_invalid(self):
156155

@@ -978,8 +977,11 @@ def test_boolean_comparison(self):
978977
result = df.values > b_r
979978
assert_numpy_array_equal(result, expected.values)
980979

981-
pytest.raises(ValueError, df.__gt__, b_c)
982-
pytest.raises(ValueError, df.values.__gt__, b_c)
980+
with pytest.raises(ValueError):
981+
df > b_c
982+
983+
with pytest.raises(ValueError):
984+
df.values > b_c
983985

984986
# ==
985987
expected = DataFrame([[False, False], [True, False], [False, False]])
@@ -998,7 +1000,9 @@ def test_boolean_comparison(self):
9981000
result = df.values == b_r
9991001
assert_numpy_array_equal(result, expected.values)
10001002

1001-
pytest.raises(ValueError, lambda: df == b_c)
1003+
with pytest.raises(ValueError):
1004+
df == b_c
1005+
10021006
assert df.values.shape != b_c.shape
10031007

10041008
# with alignment

pandas/tests/frame/test_query_eval.py

+6-7
Original file line numberDiff line numberDiff line change
@@ -1029,11 +1029,10 @@ def test_bool_arith_expr(self, parser, engine):
10291029
expect = self.frame.a[self.frame.a < 1] + self.frame.b
10301030
assert_series_equal(res, expect)
10311031

1032-
def test_invalid_type_for_operator_raises(self, parser, engine):
1032+
@pytest.mark.parametrize('op', ['+', '-', '*', '/'])
1033+
def test_invalid_type_for_operator_raises(self, parser, engine, op):
10331034
df = DataFrame({'a': [1, 2], 'b': ['c', 'd']})
1034-
ops = '+', '-', '*', '/'
1035-
for op in ops:
1036-
with tm.assert_raises_regex(TypeError,
1037-
r"unsupported operand type\(s\) "
1038-
"for .+: '.+' and '.+'"):
1039-
df.eval('a {0} b'.format(op), engine=engine, parser=parser)
1035+
with tm.assert_raises_regex(TypeError,
1036+
r"unsupported operand type\(s\) "
1037+
"for .+: '.+' and '.+'"):
1038+
df.eval('a {0} b'.format(op), engine=engine, parser=parser)

pandas/tests/frame/test_replace.py

+6-8
Original file line numberDiff line numberDiff line change
@@ -547,14 +547,12 @@ def test_regex_replace_numeric_to_object_conversion(self):
547547
assert_frame_equal(res, expec)
548548
assert res.a.dtype == np.object_
549549

550-
def test_replace_regex_metachar(self):
551-
metachars = '[]', '()', r'\d', r'\w', r'\s'
552-
553-
for metachar in metachars:
554-
df = DataFrame({'a': [metachar, 'else']})
555-
result = df.replace({'a': {metachar: 'paren'}})
556-
expected = DataFrame({'a': ['paren', 'else']})
557-
assert_frame_equal(result, expected)
550+
@pytest.mark.parametrize('metachar', ['[]', '()', r'\d', r'\w', r'\s'])
551+
def test_replace_regex_metachar(self, metachar):
552+
df = DataFrame({'a': [metachar, 'else']})
553+
result = df.replace({'a': {metachar: 'paren'}})
554+
expected = DataFrame({'a': ['paren', 'else']})
555+
assert_frame_equal(result, expected)
558556

559557
def test_replace(self):
560558
self.tsframe['A'][:5] = nan

pandas/tests/frame/test_reshape.py

+14-14
Original file line numberDiff line numberDiff line change
@@ -855,21 +855,21 @@ def _test_stack_with_multiindex(multiindex):
855855
dtype=df.dtypes[0])
856856
assert_frame_equal(result, expected)
857857

858-
def test_stack_preserve_categorical_dtype(self):
858+
@pytest.mark.parametrize('ordered', [False, True])
859+
@pytest.mark.parametrize('labels', [list("yxz"), list("yxy")])
860+
def test_stack_preserve_categorical_dtype(self, ordered, labels):
859861
# GH13854
860-
for ordered in [False, True]:
861-
for labels in [list("yxz"), list("yxy")]:
862-
cidx = pd.CategoricalIndex(labels, categories=list("xyz"),
863-
ordered=ordered)
864-
df = DataFrame([[10, 11, 12]], columns=cidx)
865-
result = df.stack()
866-
867-
# `MutliIndex.from_product` preserves categorical dtype -
868-
# it's tested elsewhere.
869-
midx = pd.MultiIndex.from_product([df.index, cidx])
870-
expected = Series([10, 11, 12], index=midx)
871-
872-
tm.assert_series_equal(result, expected)
862+
cidx = pd.CategoricalIndex(labels, categories=list("xyz"),
863+
ordered=ordered)
864+
df = DataFrame([[10, 11, 12]], columns=cidx)
865+
result = df.stack()
866+
867+
# `MutliIndex.from_product` preserves categorical dtype -
868+
# it's tested elsewhere.
869+
midx = pd.MultiIndex.from_product([df.index, cidx])
870+
expected = Series([10, 11, 12], index=midx)
871+
872+
tm.assert_series_equal(result, expected)
873873

874874
@pytest.mark.parametrize("level", [0, 'baz'])
875875
def test_unstack_swaplevel_sortlevel(self, level):

pandas/tests/scalar/period/test_period.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -1041,9 +1041,10 @@ def test_add_raises(self):
10411041
dt1 + dt2
10421042

10431043
boxes = [lambda x: x, lambda x: pd.Series([x]), lambda x: pd.Index([x])]
1044+
ids = ['identity', 'Series', 'Index']
10441045

1045-
@pytest.mark.parametrize('lbox', boxes)
1046-
@pytest.mark.parametrize('rbox', boxes)
1046+
@pytest.mark.parametrize('lbox', boxes, ids=ids)
1047+
@pytest.mark.parametrize('rbox', boxes, ids=ids)
10471048
def test_add_timestamp_raises(self, rbox, lbox):
10481049
# GH # 17983
10491050
ts = pd.Timestamp('2017')

0 commit comments

Comments
 (0)