Skip to content

Commit cc2f1a6

Browse files
authored
TST/CLN: Use more shared fixtures (pandas-dev#56708)
1 parent dc94b98 commit cc2f1a6

File tree

16 files changed

+96
-115
lines changed

16 files changed

+96
-115
lines changed

pandas/tests/arithmetic/test_numeric.py

+3-4
Original file line numberDiff line numberDiff line change
@@ -1116,11 +1116,10 @@ def test_ufunc_compat(self, holder, dtype):
11161116
tm.assert_equal(result, expected)
11171117

11181118
# TODO: add more dtypes
1119-
@pytest.mark.parametrize("holder", [Index, Series])
11201119
@pytest.mark.parametrize("dtype", [np.int64, np.uint64, np.float64])
1121-
def test_ufunc_coercions(self, holder, dtype):
1122-
idx = holder([1, 2, 3, 4, 5], dtype=dtype, name="x")
1123-
box = Series if holder is Series else Index
1120+
def test_ufunc_coercions(self, index_or_series, dtype):
1121+
idx = index_or_series([1, 2, 3, 4, 5], dtype=dtype, name="x")
1122+
box = index_or_series
11241123

11251124
result = np.sqrt(idx)
11261125
assert result.dtype == "f8" and isinstance(result, box)

pandas/tests/copy_view/test_constructors.py

+6-6
Original file line numberDiff line numberDiff line change
@@ -283,14 +283,13 @@ def test_dataframe_from_dict_of_series_with_reindex(dtype):
283283
assert np.shares_memory(arr_before, arr_after)
284284

285285

286-
@pytest.mark.parametrize("cons", [Series, Index])
287286
@pytest.mark.parametrize(
288287
"data, dtype", [([1, 2], None), ([1, 2], "int64"), (["a", "b"], None)]
289288
)
290289
def test_dataframe_from_series_or_index(
291-
using_copy_on_write, warn_copy_on_write, data, dtype, cons
290+
using_copy_on_write, warn_copy_on_write, data, dtype, index_or_series
292291
):
293-
obj = cons(data, dtype=dtype)
292+
obj = index_or_series(data, dtype=dtype)
294293
obj_orig = obj.copy()
295294
df = DataFrame(obj, dtype=dtype)
296295
assert np.shares_memory(get_array(obj), get_array(df, 0))
@@ -303,9 +302,10 @@ def test_dataframe_from_series_or_index(
303302
tm.assert_equal(obj, obj_orig)
304303

305304

306-
@pytest.mark.parametrize("cons", [Series, Index])
307-
def test_dataframe_from_series_or_index_different_dtype(using_copy_on_write, cons):
308-
obj = cons([1, 2], dtype="int64")
305+
def test_dataframe_from_series_or_index_different_dtype(
306+
using_copy_on_write, index_or_series
307+
):
308+
obj = index_or_series([1, 2], dtype="int64")
309309
df = DataFrame(obj, dtype="int32")
310310
assert not np.shares_memory(get_array(obj), get_array(df, 0))
311311
if using_copy_on_write:

pandas/tests/dtypes/test_inference.py

+6-6
Original file line numberDiff line numberDiff line change
@@ -1701,19 +1701,19 @@ def test_interval_mismatched_subtype(self):
17011701
arr = np.array([first, flt_interval], dtype=object)
17021702
assert lib.infer_dtype(arr, skipna=False) == "interval"
17031703

1704-
@pytest.mark.parametrize("klass", [pd.array, Series])
17051704
@pytest.mark.parametrize("data", [["a", "b", "c"], ["a", "b", pd.NA]])
1706-
def test_string_dtype(self, data, skipna, klass, nullable_string_dtype):
1705+
def test_string_dtype(
1706+
self, data, skipna, index_or_series_or_array, nullable_string_dtype
1707+
):
17071708
# StringArray
1708-
val = klass(data, dtype=nullable_string_dtype)
1709+
val = index_or_series_or_array(data, dtype=nullable_string_dtype)
17091710
inferred = lib.infer_dtype(val, skipna=skipna)
17101711
assert inferred == "string"
17111712

1712-
@pytest.mark.parametrize("klass", [pd.array, Series])
17131713
@pytest.mark.parametrize("data", [[True, False, True], [True, False, pd.NA]])
1714-
def test_boolean_dtype(self, data, skipna, klass):
1714+
def test_boolean_dtype(self, data, skipna, index_or_series_or_array):
17151715
# BooleanArray
1716-
val = klass(data, dtype="boolean")
1716+
val = index_or_series_or_array(data, dtype="boolean")
17171717
inferred = lib.infer_dtype(val, skipna=skipna)
17181718
assert inferred == "boolean"
17191719

pandas/tests/extension/decimal/test_decimal.py

+3-5
Original file line numberDiff line numberDiff line change
@@ -302,8 +302,7 @@ def test_dataframe_constructor_with_dtype():
302302
tm.assert_frame_equal(result, expected)
303303

304304

305-
@pytest.mark.parametrize("frame", [True, False])
306-
def test_astype_dispatches(frame):
305+
def test_astype_dispatches(frame_or_series):
307306
# This is a dtype-specific test that ensures Series[decimal].astype
308307
# gets all the way through to ExtensionArray.astype
309308
# Designing a reliable smoke test that works for arbitrary data types
@@ -312,12 +311,11 @@ def test_astype_dispatches(frame):
312311
ctx = decimal.Context()
313312
ctx.prec = 5
314313

315-
if frame:
316-
data = data.to_frame()
314+
data = frame_or_series(data)
317315

318316
result = data.astype(DecimalDtype(ctx))
319317

320-
if frame:
318+
if frame_or_series is pd.DataFrame:
321319
result = result["a"]
322320

323321
assert result.dtype.context.prec == ctx.prec

pandas/tests/frame/methods/test_set_index.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -577,8 +577,8 @@ def test_set_index_raise_keys(self, frame_of_index_cols, drop, append):
577577

578578
@pytest.mark.parametrize("append", [True, False])
579579
@pytest.mark.parametrize("drop", [True, False])
580-
@pytest.mark.parametrize("box", [set], ids=["set"])
581-
def test_set_index_raise_on_type(self, frame_of_index_cols, box, drop, append):
580+
def test_set_index_raise_on_type(self, frame_of_index_cols, drop, append):
581+
box = set
582582
df = frame_of_index_cols
583583

584584
msg = 'The parameter "keys" may be a column key, .*'

pandas/tests/groupby/aggregate/test_numba.py

+4-6
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,7 @@ def incorrect_function(values, index):
5252
@pytest.mark.filterwarnings("ignore")
5353
# Filter warnings when parallel=True and the function can't be parallelized by Numba
5454
@pytest.mark.parametrize("jit", [True, False])
55-
@pytest.mark.parametrize("pandas_obj", ["Series", "DataFrame"])
56-
def test_numba_vs_cython(jit, pandas_obj, nogil, parallel, nopython, as_index):
55+
def test_numba_vs_cython(jit, frame_or_series, nogil, parallel, nopython, as_index):
5756
pytest.importorskip("numba")
5857

5958
def func_numba(values, index):
@@ -70,7 +69,7 @@ def func_numba(values, index):
7069
)
7170
engine_kwargs = {"nogil": nogil, "parallel": parallel, "nopython": nopython}
7271
grouped = data.groupby(0, as_index=as_index)
73-
if pandas_obj == "Series":
72+
if frame_or_series is Series:
7473
grouped = grouped[1]
7574

7675
result = grouped.agg(func_numba, engine="numba", engine_kwargs=engine_kwargs)
@@ -82,8 +81,7 @@ def func_numba(values, index):
8281
@pytest.mark.filterwarnings("ignore")
8382
# Filter warnings when parallel=True and the function can't be parallelized by Numba
8483
@pytest.mark.parametrize("jit", [True, False])
85-
@pytest.mark.parametrize("pandas_obj", ["Series", "DataFrame"])
86-
def test_cache(jit, pandas_obj, nogil, parallel, nopython):
84+
def test_cache(jit, frame_or_series, nogil, parallel, nopython):
8785
# Test that the functions are cached correctly if we switch functions
8886
pytest.importorskip("numba")
8987

@@ -104,7 +102,7 @@ def func_2(values, index):
104102
)
105103
engine_kwargs = {"nogil": nogil, "parallel": parallel, "nopython": nopython}
106104
grouped = data.groupby(0)
107-
if pandas_obj == "Series":
105+
if frame_or_series is Series:
108106
grouped = grouped[1]
109107

110108
result = grouped.agg(func_1, engine="numba", engine_kwargs=engine_kwargs)

pandas/tests/groupby/transform/test_numba.py

+4-6
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,7 @@ def incorrect_function(values, index):
5050
@pytest.mark.filterwarnings("ignore")
5151
# Filter warnings when parallel=True and the function can't be parallelized by Numba
5252
@pytest.mark.parametrize("jit", [True, False])
53-
@pytest.mark.parametrize("pandas_obj", ["Series", "DataFrame"])
54-
def test_numba_vs_cython(jit, pandas_obj, nogil, parallel, nopython, as_index):
53+
def test_numba_vs_cython(jit, frame_or_series, nogil, parallel, nopython, as_index):
5554
pytest.importorskip("numba")
5655

5756
def func(values, index):
@@ -68,7 +67,7 @@ def func(values, index):
6867
)
6968
engine_kwargs = {"nogil": nogil, "parallel": parallel, "nopython": nopython}
7069
grouped = data.groupby(0, as_index=as_index)
71-
if pandas_obj == "Series":
70+
if frame_or_series is Series:
7271
grouped = grouped[1]
7372

7473
result = grouped.transform(func, engine="numba", engine_kwargs=engine_kwargs)
@@ -80,8 +79,7 @@ def func(values, index):
8079
@pytest.mark.filterwarnings("ignore")
8180
# Filter warnings when parallel=True and the function can't be parallelized by Numba
8281
@pytest.mark.parametrize("jit", [True, False])
83-
@pytest.mark.parametrize("pandas_obj", ["Series", "DataFrame"])
84-
def test_cache(jit, pandas_obj, nogil, parallel, nopython):
82+
def test_cache(jit, frame_or_series, nogil, parallel, nopython):
8583
# Test that the functions are cached correctly if we switch functions
8684
pytest.importorskip("numba")
8785

@@ -102,7 +100,7 @@ def func_2(values, index):
102100
)
103101
engine_kwargs = {"nogil": nogil, "parallel": parallel, "nopython": nopython}
104102
grouped = data.groupby(0)
105-
if pandas_obj == "Series":
103+
if frame_or_series is Series:
106104
grouped = grouped[1]
107105

108106
result = grouped.transform(func_1, engine="numba", engine_kwargs=engine_kwargs)

pandas/tests/indexing/test_iloc.py

+5-4
Original file line numberDiff line numberDiff line change
@@ -106,8 +106,9 @@ def test_iloc_setitem_fullcol_categorical(self, indexer, key):
106106
expected = DataFrame({0: Series(cat.astype(object), dtype=object), 1: range(3)})
107107
tm.assert_frame_equal(df, expected)
108108

109-
@pytest.mark.parametrize("box", [array, Series])
110-
def test_iloc_setitem_ea_inplace(self, frame_or_series, box, using_copy_on_write):
109+
def test_iloc_setitem_ea_inplace(
110+
self, frame_or_series, index_or_series_or_array, using_copy_on_write
111+
):
111112
# GH#38952 Case with not setting a full column
112113
# IntegerArray without NAs
113114
arr = array([1, 2, 3, 4])
@@ -119,9 +120,9 @@ def test_iloc_setitem_ea_inplace(self, frame_or_series, box, using_copy_on_write
119120
values = obj._mgr.arrays[0]
120121

121122
if frame_or_series is Series:
122-
obj.iloc[:2] = box(arr[2:])
123+
obj.iloc[:2] = index_or_series_or_array(arr[2:])
123124
else:
124-
obj.iloc[:2, 0] = box(arr[2:])
125+
obj.iloc[:2, 0] = index_or_series_or_array(arr[2:])
125126

126127
expected = frame_or_series(np.array([3, 4, 3, 4], dtype="i8"))
127128
tm.assert_equal(obj, expected)

pandas/tests/reductions/test_stat_reductions.py

+7-10
Original file line numberDiff line numberDiff line change
@@ -16,29 +16,27 @@
1616

1717

1818
class TestDatetimeLikeStatReductions:
19-
@pytest.mark.parametrize("box", [Series, pd.Index, pd.array])
20-
def test_dt64_mean(self, tz_naive_fixture, box):
19+
def test_dt64_mean(self, tz_naive_fixture, index_or_series_or_array):
2120
tz = tz_naive_fixture
2221

2322
dti = date_range("2001-01-01", periods=11, tz=tz)
2423
# shuffle so that we are not just working with monotone-increasing
2524
dti = dti.take([4, 1, 3, 10, 9, 7, 8, 5, 0, 2, 6])
2625
dtarr = dti._data
2726

28-
obj = box(dtarr)
27+
obj = index_or_series_or_array(dtarr)
2928
assert obj.mean() == pd.Timestamp("2001-01-06", tz=tz)
3029
assert obj.mean(skipna=False) == pd.Timestamp("2001-01-06", tz=tz)
3130

3231
# dtarr[-2] will be the first date 2001-01-1
3332
dtarr[-2] = pd.NaT
3433

35-
obj = box(dtarr)
34+
obj = index_or_series_or_array(dtarr)
3635
assert obj.mean() == pd.Timestamp("2001-01-06 07:12:00", tz=tz)
3736
assert obj.mean(skipna=False) is pd.NaT
3837

39-
@pytest.mark.parametrize("box", [Series, pd.Index, pd.array])
4038
@pytest.mark.parametrize("freq", ["s", "h", "D", "W", "B"])
41-
def test_period_mean(self, box, freq):
39+
def test_period_mean(self, index_or_series_or_array, freq):
4240
# GH#24757
4341
dti = date_range("2001-01-01", periods=11)
4442
# shuffle so that we are not just working with monotone-increasing
@@ -48,7 +46,7 @@ def test_period_mean(self, box, freq):
4846
msg = r"PeriodDtype\[B\] is deprecated"
4947
with tm.assert_produces_warning(warn, match=msg):
5048
parr = dti._data.to_period(freq)
51-
obj = box(parr)
49+
obj = index_or_series_or_array(parr)
5250
with pytest.raises(TypeError, match="ambiguous"):
5351
obj.mean()
5452
with pytest.raises(TypeError, match="ambiguous"):
@@ -62,13 +60,12 @@ def test_period_mean(self, box, freq):
6260
with pytest.raises(TypeError, match="ambiguous"):
6361
obj.mean(skipna=True)
6462

65-
@pytest.mark.parametrize("box", [Series, pd.Index, pd.array])
66-
def test_td64_mean(self, box):
63+
def test_td64_mean(self, index_or_series_or_array):
6764
m8values = np.array([0, 3, -2, -7, 1, 2, -1, 3, 5, -2, 4], "m8[D]")
6865
tdi = pd.TimedeltaIndex(m8values).as_unit("ns")
6966

7067
tdarr = tdi._data
71-
obj = box(tdarr, copy=False)
68+
obj = index_or_series_or_array(tdarr, copy=False)
7269

7370
result = obj.mean()
7471
expected = np.array(tdarr).mean()

pandas/tests/resample/test_base.py

+2-3
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,8 @@
3030
date_range(datetime(2005, 1, 1), datetime(2005, 1, 10), freq="D"),
3131
],
3232
)
33-
@pytest.mark.parametrize("klass", [DataFrame, Series])
34-
def test_asfreq(klass, index, freq):
35-
obj = klass(range(len(index)), index=index)
33+
def test_asfreq(frame_or_series, index, freq):
34+
obj = frame_or_series(range(len(index)), index=index)
3635
idx_range = date_range if isinstance(index, DatetimeIndex) else timedelta_range
3736

3837
result = obj.resample(freq).asfreq()

pandas/tests/resample/test_period_index.py

+8-12
Original file line numberDiff line numberDiff line change
@@ -59,12 +59,11 @@ def _simple_period_range_series(start, end, freq="D"):
5959
class TestPeriodIndex:
6060
@pytest.mark.parametrize("freq", ["2D", "1h", "2h"])
6161
@pytest.mark.parametrize("kind", ["period", None, "timestamp"])
62-
@pytest.mark.parametrize("klass", [DataFrame, Series])
63-
def test_asfreq(self, klass, freq, kind):
62+
def test_asfreq(self, frame_or_series, freq, kind):
6463
# GH 12884, 15944
6564
# make sure .asfreq() returns PeriodIndex (except kind='timestamp')
6665

67-
obj = klass(range(5), index=period_range("2020-01-01", periods=5))
66+
obj = frame_or_series(range(5), index=period_range("2020-01-01", periods=5))
6867
if kind == "timestamp":
6968
expected = obj.to_timestamp().resample(freq).asfreq()
7069
else:
@@ -1007,12 +1006,11 @@ def test_resample_t_l_deprecated(self):
10071006
offsets.BusinessHour(2),
10081007
],
10091008
)
1010-
@pytest.mark.parametrize("klass", [DataFrame, Series])
1011-
def test_asfreq_invalid_period_freq(self, offset, klass):
1009+
def test_asfreq_invalid_period_freq(self, offset, frame_or_series):
10121010
# GH#9586
10131011
msg = f"Invalid offset: '{offset.base}' for converting time series "
10141012

1015-
obj = klass(range(5), index=period_range("2020-01-01", periods=5))
1013+
obj = frame_or_series(range(5), index=period_range("2020-01-01", periods=5))
10161014
with pytest.raises(ValueError, match=msg):
10171015
obj.asfreq(freq=offset)
10181016

@@ -1027,12 +1025,11 @@ def test_asfreq_invalid_period_freq(self, offset, klass):
10271025
("2Y-MAR", "2YE-MAR"),
10281026
],
10291027
)
1030-
@pytest.mark.parametrize("klass", [DataFrame, Series])
1031-
def test_resample_frequency_ME_QE_YE_error_message(klass, freq, freq_depr):
1028+
def test_resample_frequency_ME_QE_YE_error_message(frame_or_series, freq, freq_depr):
10321029
# GH#9586
10331030
msg = f"for Period, please use '{freq[1:]}' instead of '{freq_depr[1:]}'"
10341031

1035-
obj = klass(range(5), index=period_range("2020-01-01", periods=5))
1032+
obj = frame_or_series(range(5), index=period_range("2020-01-01", periods=5))
10361033
with pytest.raises(ValueError, match=msg):
10371034
obj.resample(freq_depr)
10381035

@@ -1057,11 +1054,10 @@ def test_corner_cases_period(simple_period_range_series):
10571054
"2BYE-MAR",
10581055
],
10591056
)
1060-
@pytest.mark.parametrize("klass", [DataFrame, Series])
1061-
def test_resample_frequency_invalid_freq(klass, freq_depr):
1057+
def test_resample_frequency_invalid_freq(frame_or_series, freq_depr):
10621058
# GH#9586
10631059
msg = f"Invalid frequency: {freq_depr[1:]}"
10641060

1065-
obj = klass(range(5), index=period_range("2020-01-01", periods=5))
1061+
obj = frame_or_series(range(5), index=period_range("2020-01-01", periods=5))
10661062
with pytest.raises(ValueError, match=msg):
10671063
obj.resample(freq_depr)

pandas/tests/reshape/concat/test_concat.py

+5-6
Original file line numberDiff line numberDiff line change
@@ -545,14 +545,13 @@ def test_concat_no_unnecessary_upcast(float_numpy_dtype, frame_or_series):
545545
assert x.values.dtype == dt
546546

547547

548-
@pytest.mark.parametrize("pdt", [Series, DataFrame])
549-
def test_concat_will_upcast(pdt, any_signed_int_numpy_dtype):
548+
def test_concat_will_upcast(frame_or_series, any_signed_int_numpy_dtype):
550549
dt = any_signed_int_numpy_dtype
551-
dims = pdt().ndim
550+
dims = frame_or_series().ndim
552551
dfs = [
553-
pdt(np.array([1], dtype=dt, ndmin=dims)),
554-
pdt(np.array([np.nan], ndmin=dims)),
555-
pdt(np.array([5], dtype=dt, ndmin=dims)),
552+
frame_or_series(np.array([1], dtype=dt, ndmin=dims)),
553+
frame_or_series(np.array([np.nan], ndmin=dims)),
554+
frame_or_series(np.array([5], dtype=dt, ndmin=dims)),
556555
]
557556
x = concat(dfs)
558557
assert x.values.dtype == "float64"

pandas/tests/series/methods/test_view.py

+2-5
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,7 @@
22
import pytest
33

44
from pandas import (
5-
Index,
65
Series,
7-
array,
86
date_range,
97
)
108
import pandas._testing as tm
@@ -47,11 +45,10 @@ def test_view_tz(self):
4745
@pytest.mark.parametrize(
4846
"second", ["m8[ns]", "M8[ns]", "M8[ns, US/Central]", "period[D]"]
4947
)
50-
@pytest.mark.parametrize("box", [Series, Index, array])
51-
def test_view_between_datetimelike(self, first, second, box):
48+
def test_view_between_datetimelike(self, first, second, index_or_series_or_array):
5249
dti = date_range("2016-01-01", periods=3)
5350

54-
orig = box(dti)
51+
orig = index_or_series_or_array(dti)
5552
obj = orig.view(first)
5653
assert obj.dtype == first
5754
tm.assert_numpy_array_equal(np.asarray(obj.view("i8")), dti.asi8)

0 commit comments

Comments
 (0)