From 9f9a64327a9cff6dd9ba0642500745691c631eb7 Mon Sep 17 00:00:00 2001 From: Matthew Roeschke <10647082+mroeschke@users.noreply.github.com> Date: Sat, 23 Dec 2023 15:08:26 -0800 Subject: [PATCH] Remove conftest in indexing --- pandas/tests/indexing/conftest.py | 127 -------------------------- pandas/tests/indexing/test_iloc.py | 15 ++- pandas/tests/indexing/test_loc.py | 131 +++++++++++++-------------- pandas/tests/indexing/test_scalar.py | 38 +++++--- 4 files changed, 99 insertions(+), 212 deletions(-) delete mode 100644 pandas/tests/indexing/conftest.py diff --git a/pandas/tests/indexing/conftest.py b/pandas/tests/indexing/conftest.py deleted file mode 100644 index 4184c6a0047cc..0000000000000 --- a/pandas/tests/indexing/conftest.py +++ /dev/null @@ -1,127 +0,0 @@ -import numpy as np -import pytest - -from pandas import ( - DataFrame, - Index, - MultiIndex, - Series, - date_range, -) - - -@pytest.fixture -def series_ints(): - return Series(np.random.default_rng(2).random(4), index=np.arange(0, 8, 2)) - - -@pytest.fixture -def frame_ints(): - return DataFrame( - np.random.default_rng(2).standard_normal((4, 4)), - index=np.arange(0, 8, 2), - columns=np.arange(0, 12, 3), - ) - - -@pytest.fixture -def series_uints(): - return Series( - np.random.default_rng(2).random(4), - index=Index(np.arange(0, 8, 2, dtype=np.uint64)), - ) - - -@pytest.fixture -def frame_uints(): - return DataFrame( - np.random.default_rng(2).standard_normal((4, 4)), - index=Index(range(0, 8, 2), dtype=np.uint64), - columns=Index(range(0, 12, 3), dtype=np.uint64), - ) - - -@pytest.fixture -def series_labels(): - return Series(np.random.default_rng(2).standard_normal(4), index=list("abcd")) - - -@pytest.fixture -def frame_labels(): - return DataFrame( - np.random.default_rng(2).standard_normal((4, 4)), - index=list("abcd"), - columns=list("ABCD"), - ) - - -@pytest.fixture -def series_ts(): - return Series( - np.random.default_rng(2).standard_normal(4), - index=date_range("20130101", periods=4), - ) - - -@pytest.fixture -def frame_ts(): - return DataFrame( - np.random.default_rng(2).standard_normal((4, 4)), - index=date_range("20130101", periods=4), - ) - - -@pytest.fixture -def series_floats(): - return Series( - np.random.default_rng(2).random(4), - index=Index(range(0, 8, 2), dtype=np.float64), - ) - - -@pytest.fixture -def frame_floats(): - return DataFrame( - np.random.default_rng(2).standard_normal((4, 4)), - index=Index(range(0, 8, 2), dtype=np.float64), - columns=Index(range(0, 12, 3), dtype=np.float64), - ) - - -@pytest.fixture -def series_mixed(): - return Series(np.random.default_rng(2).standard_normal(4), index=[2, 4, "null", 8]) - - -@pytest.fixture -def frame_mixed(): - return DataFrame( - np.random.default_rng(2).standard_normal((4, 4)), index=[2, 4, "null", 8] - ) - - -@pytest.fixture -def frame_empty(): - return DataFrame() - - -@pytest.fixture -def series_empty(): - return Series(dtype=object) - - -@pytest.fixture -def frame_multi(): - return DataFrame( - np.random.default_rng(2).standard_normal((4, 4)), - index=MultiIndex.from_product([[1, 2], [3, 4]]), - columns=MultiIndex.from_product([[5, 6], [7, 8]]), - ) - - -@pytest.fixture -def series_multi(): - return Series( - np.random.default_rng(2).random(4), - index=MultiIndex.from_product([[1, 2], [3, 4]]), - ) diff --git a/pandas/tests/indexing/test_iloc.py b/pandas/tests/indexing/test_iloc.py index 409eca42f404b..36f00a3ce7cd7 100644 --- a/pandas/tests/indexing/test_iloc.py +++ b/pandas/tests/indexing/test_iloc.py @@ -39,13 +39,18 @@ class TestiLoc: @pytest.mark.parametrize("key", [2, -1, [0, 1, 2]]) - @pytest.mark.parametrize("kind", ["series", "frame"]) @pytest.mark.parametrize( - "col", - ["labels", "mixed", "ts", "floats", "empty"], + "index", + [ + Index(list("abcd"), dtype=object), + Index([2, 4, "null", 8], dtype=object), + date_range("20130101", periods=4), + Index(range(0, 8, 2), dtype=np.float64), + Index([]), + ], ) - def test_iloc_getitem_int_and_list_int(self, key, kind, col, request): - obj = request.getfixturevalue(f"{kind}_{col}") + def test_iloc_getitem_int_and_list_int(self, key, frame_or_series, index, request): + obj = frame_or_series(range(len(index)), index=index) check_indexing_smoketest_or_raises( obj, "iloc", diff --git a/pandas/tests/indexing/test_loc.py b/pandas/tests/indexing/test_loc.py index fb0adc56c401b..60fa319001c3b 100644 --- a/pandas/tests/indexing/test_loc.py +++ b/pandas/tests/indexing/test_loc.py @@ -69,116 +69,111 @@ def test_none_values_on_string_columns(self): assert df.loc[2, "a"] is None - @pytest.mark.parametrize("kind", ["series", "frame"]) - def test_loc_getitem_int(self, kind, request): + def test_loc_getitem_int(self, frame_or_series): # int label - obj = request.getfixturevalue(f"{kind}_labels") + obj = frame_or_series(range(3), index=Index(list("abc"), dtype=object)) check_indexing_smoketest_or_raises(obj, "loc", 2, fails=KeyError) - @pytest.mark.parametrize("kind", ["series", "frame"]) - def test_loc_getitem_label(self, kind, request): + def test_loc_getitem_label(self, frame_or_series): # label - obj = request.getfixturevalue(f"{kind}_empty") + obj = frame_or_series() check_indexing_smoketest_or_raises(obj, "loc", "c", fails=KeyError) + @pytest.mark.parametrize("key", ["f", 20]) @pytest.mark.parametrize( - "key, typs, axes", + "index", [ - ["f", ["ints", "uints", "labels", "mixed", "ts"], None], - ["f", ["floats"], None], - [20, ["ints", "uints", "mixed"], None], - [20, ["labels"], None], - [20, ["ts"], 0], - [20, ["floats"], 0], + Index(list("abcd"), dtype=object), + Index([2, 4, "null", 8], dtype=object), + date_range("20130101", periods=4), + Index(range(0, 8, 2), dtype=np.float64), + Index([]), ], ) - @pytest.mark.parametrize("kind", ["series", "frame"]) - def test_loc_getitem_label_out_of_range(self, key, typs, axes, kind, request): - for typ in typs: - obj = request.getfixturevalue(f"{kind}_{typ}") - # out of range label - check_indexing_smoketest_or_raises( - obj, "loc", key, axes=axes, fails=KeyError - ) + def test_loc_getitem_label_out_of_range(self, key, index, frame_or_series): + obj = frame_or_series(range(len(index)), index=index) + # out of range label + check_indexing_smoketest_or_raises(obj, "loc", key, fails=KeyError) + + @pytest.mark.parametrize("key", [[0, 1, 2], [1, 3.0, "A"]]) + @pytest.mark.parametrize("dtype", [np.int64, np.uint64, np.float64]) + def test_loc_getitem_label_list(self, key, dtype, frame_or_series): + obj = frame_or_series(range(3), index=Index([0, 1, 2], dtype=dtype)) + # list of labels + check_indexing_smoketest_or_raises(obj, "loc", key, fails=KeyError) @pytest.mark.parametrize( - "key, typs", + "index", [ - [[0, 1, 2], ["ints", "uints", "floats"]], - [[1, 3.0, "A"], ["ints", "uints", "floats"]], + None, + Index([0, 1, 2], dtype=np.int64), + Index([0, 1, 2], dtype=np.uint64), + Index([0, 1, 2], dtype=np.float64), + MultiIndex.from_arrays([range(3), range(3)]), ], ) - @pytest.mark.parametrize("kind", ["series", "frame"]) - def test_loc_getitem_label_list(self, key, typs, kind, request): - for typ in typs: - obj = request.getfixturevalue(f"{kind}_{typ}") - # list of labels - check_indexing_smoketest_or_raises(obj, "loc", key, fails=KeyError) - @pytest.mark.parametrize( - "key, typs, axes", - [ - [[0, 1, 2], ["empty"], None], - [[0, 2, 10], ["ints", "uints", "floats"], 0], - [[3, 6, 7], ["ints", "uints", "floats"], 1], - # GH 17758 - MultiIndex and missing keys - [[(1, 3), (1, 4), (2, 5)], ["multi"], 0], - ], + "key", [[0, 1, 2], [0, 2, 10], [3, 6, 7], [(1, 3), (1, 4), (2, 5)]] ) - @pytest.mark.parametrize("kind", ["series", "frame"]) - def test_loc_getitem_label_list_with_missing(self, key, typs, axes, kind, request): - for typ in typs: - obj = request.getfixturevalue(f"{kind}_{typ}") - check_indexing_smoketest_or_raises( - obj, "loc", key, axes=axes, fails=KeyError - ) + def test_loc_getitem_label_list_with_missing(self, key, index, frame_or_series): + if index is None: + obj = frame_or_series() + else: + obj = frame_or_series(range(len(index)), index=index) + check_indexing_smoketest_or_raises(obj, "loc", key, fails=KeyError) - @pytest.mark.parametrize("typs", ["ints", "uints"]) - @pytest.mark.parametrize("kind", ["series", "frame"]) - def test_loc_getitem_label_list_fails(self, typs, kind, request): + @pytest.mark.parametrize("dtype", [np.int64, np.uint64]) + def test_loc_getitem_label_list_fails(self, dtype, frame_or_series): # fails - obj = request.getfixturevalue(f"{kind}_{typs}") + obj = frame_or_series(range(3), Index([0, 1, 2], dtype=dtype)) check_indexing_smoketest_or_raises( obj, "loc", [20, 30, 40], axes=1, fails=KeyError ) - def test_loc_getitem_label_array_like(self): - # TODO: test something? - # array like - pass - - @pytest.mark.parametrize("kind", ["series", "frame"]) - def test_loc_getitem_bool(self, kind, request): - obj = request.getfixturevalue(f"{kind}_empty") + def test_loc_getitem_bool(self, frame_or_series): + obj = frame_or_series() # boolean indexers b = [True, False, True, False] check_indexing_smoketest_or_raises(obj, "loc", b, fails=IndexError) @pytest.mark.parametrize( - "slc, typs, axes, fails", + "slc, indexes, axes, fails", [ [ slice(1, 3), - ["labels", "mixed", "empty", "ts", "floats"], + [ + Index(list("abcd"), dtype=object), + Index([2, 4, "null", 8], dtype=object), + None, + date_range("20130101", periods=4), + Index(range(0, 12, 3), dtype=np.float64), + ], None, TypeError, ], - [slice("20130102", "20130104"), ["ts"], 1, TypeError], - [slice(2, 8), ["mixed"], 0, TypeError], - [slice(2, 8), ["mixed"], 1, KeyError], - [slice(2, 4, 2), ["mixed"], 0, TypeError], + [ + slice("20130102", "20130104"), + [date_range("20130101", periods=4)], + 1, + TypeError, + ], + [slice(2, 8), [Index([2, 4, "null", 8], dtype=object)], 0, TypeError], + [slice(2, 8), [Index([2, 4, "null", 8], dtype=object)], 1, KeyError], + [slice(2, 4, 2), [Index([2, 4, "null", 8], dtype=object)], 0, TypeError], ], ) - @pytest.mark.parametrize("kind", ["series", "frame"]) - def test_loc_getitem_label_slice(self, slc, typs, axes, fails, kind, request): + def test_loc_getitem_label_slice(self, slc, indexes, axes, fails, frame_or_series): # label slices (with ints) # real label slices # GH 14316 - for typ in typs: - obj = request.getfixturevalue(f"{kind}_{typ}") + for index in indexes: + if index is None: + obj = frame_or_series() + else: + obj = frame_or_series(range(len(index)), index=index) check_indexing_smoketest_or_raises( obj, "loc", diff --git a/pandas/tests/indexing/test_scalar.py b/pandas/tests/indexing/test_scalar.py index 29e3dc0aebe95..ef4cd402aaf24 100644 --- a/pandas/tests/indexing/test_scalar.py +++ b/pandas/tests/indexing/test_scalar.py @@ -10,6 +10,7 @@ from pandas import ( DataFrame, + Index, Series, Timedelta, Timestamp, @@ -32,29 +33,42 @@ def generate_indices(f, values=False): class TestScalar: - @pytest.mark.parametrize("kind", ["series", "frame"]) - @pytest.mark.parametrize("col", ["ints", "uints"]) - def test_iat_set_ints(self, kind, col, request): - f = request.getfixturevalue(f"{kind}_{col}") + @pytest.mark.parametrize("dtype", [np.int64, np.uint64]) + def test_iat_set_ints(self, dtype, frame_or_series): + f = frame_or_series(range(3), index=Index([0, 1, 2], dtype=dtype)) indices = generate_indices(f, True) for i in indices: f.iat[i] = 1 expected = f.values[i] tm.assert_almost_equal(expected, 1) - @pytest.mark.parametrize("kind", ["series", "frame"]) - @pytest.mark.parametrize("col", ["labels", "ts", "floats"]) - def test_iat_set_other(self, kind, col, request): - f = request.getfixturevalue(f"{kind}_{col}") + @pytest.mark.parametrize( + "index", + [ + Index(list("abcd"), dtype=object), + date_range("20130101", periods=4), + Index(range(0, 8, 2), dtype=np.float64), + ], + ) + def test_iat_set_other(self, index, frame_or_series): + f = frame_or_series(range(len(index)), index=index) msg = "iAt based indexing can only have integer indexers" with pytest.raises(ValueError, match=msg): idx = next(generate_indices(f, False)) f.iat[idx] = 1 - @pytest.mark.parametrize("kind", ["series", "frame"]) - @pytest.mark.parametrize("col", ["ints", "uints", "labels", "ts", "floats"]) - def test_at_set_ints_other(self, kind, col, request): - f = request.getfixturevalue(f"{kind}_{col}") + @pytest.mark.parametrize( + "index", + [ + Index(list("abcd"), dtype=object), + date_range("20130101", periods=4), + Index(range(0, 8, 2), dtype=np.float64), + Index(range(0, 8, 2), dtype=np.uint64), + Index(range(0, 8, 2), dtype=np.int64), + ], + ) + def test_at_set_ints_other(self, index, frame_or_series): + f = frame_or_series(range(len(index)), index=index) indices = generate_indices(f, False) for i in indices: f.at[i] = 1