Skip to content

Commit 14f7624

Browse files
authored
TST: fixturize indexing intervalindex tests (#39803)
1 parent 9c5ea61 commit 14f7624

File tree

3 files changed

+124
-192
lines changed

3 files changed

+124
-192
lines changed

pandas/conftest.py

+8
Original file line numberDiff line numberDiff line change
@@ -1565,6 +1565,14 @@ def indexer_si(request):
15651565
return request.param
15661566

15671567

1568+
@pytest.fixture(params=[tm.setitem, tm.loc])
1569+
def indexer_sl(request):
1570+
"""
1571+
Parametrize over __setitem__, loc.__setitem__
1572+
"""
1573+
return request.param
1574+
1575+
15681576
@pytest.fixture
15691577
def using_array_manager(request):
15701578
"""

pandas/tests/indexing/interval/test_interval.py

+37-41
Original file line numberDiff line numberDiff line change
@@ -7,87 +7,83 @@
77

88

99
class TestIntervalIndex:
10-
def setup_method(self, method):
11-
self.s = Series(np.arange(5), IntervalIndex.from_breaks(np.arange(6)))
10+
@pytest.fixture
11+
def series_with_interval_index(self):
12+
return Series(np.arange(5), IntervalIndex.from_breaks(np.arange(6)))
1213

13-
def test_getitem_with_scalar(self):
14+
def test_getitem_with_scalar(self, series_with_interval_index, indexer_sl):
1415

15-
s = self.s
16+
ser = series_with_interval_index.copy()
1617

17-
expected = s.iloc[:3]
18-
tm.assert_series_equal(expected, s[:3])
19-
tm.assert_series_equal(expected, s[:2.5])
20-
tm.assert_series_equal(expected, s[0.1:2.5])
18+
expected = ser.iloc[:3]
19+
tm.assert_series_equal(expected, indexer_sl(ser)[:3])
20+
tm.assert_series_equal(expected, indexer_sl(ser)[:2.5])
21+
tm.assert_series_equal(expected, indexer_sl(ser)[0.1:2.5])
22+
if indexer_sl is tm.loc:
23+
tm.assert_series_equal(expected, ser.loc[-1:3])
2124

22-
expected = s.iloc[1:4]
23-
tm.assert_series_equal(expected, s[[1.5, 2.5, 3.5]])
24-
tm.assert_series_equal(expected, s[[2, 3, 4]])
25-
tm.assert_series_equal(expected, s[[1.5, 3, 4]])
25+
expected = ser.iloc[1:4]
26+
tm.assert_series_equal(expected, indexer_sl(ser)[[1.5, 2.5, 3.5]])
27+
tm.assert_series_equal(expected, indexer_sl(ser)[[2, 3, 4]])
28+
tm.assert_series_equal(expected, indexer_sl(ser)[[1.5, 3, 4]])
2629

27-
expected = s.iloc[2:5]
28-
tm.assert_series_equal(expected, s[s >= 2])
30+
expected = ser.iloc[2:5]
31+
tm.assert_series_equal(expected, indexer_sl(ser)[ser >= 2])
2932

3033
@pytest.mark.parametrize("direction", ["increasing", "decreasing"])
31-
def test_nonoverlapping_monotonic(self, direction, closed):
34+
def test_nonoverlapping_monotonic(self, direction, closed, indexer_sl):
3235
tpls = [(0, 1), (2, 3), (4, 5)]
3336
if direction == "decreasing":
3437
tpls = tpls[::-1]
3538

3639
idx = IntervalIndex.from_tuples(tpls, closed=closed)
37-
s = Series(list("abc"), idx)
40+
ser = Series(list("abc"), idx)
3841

39-
for key, expected in zip(idx.left, s):
42+
for key, expected in zip(idx.left, ser):
4043
if idx.closed_left:
41-
assert s[key] == expected
42-
assert s.loc[key] == expected
44+
assert indexer_sl(ser)[key] == expected
4345
else:
4446
with pytest.raises(KeyError, match=str(key)):
45-
s[key]
46-
with pytest.raises(KeyError, match=str(key)):
47-
s.loc[key]
47+
indexer_sl(ser)[key]
4848

49-
for key, expected in zip(idx.right, s):
49+
for key, expected in zip(idx.right, ser):
5050
if idx.closed_right:
51-
assert s[key] == expected
52-
assert s.loc[key] == expected
51+
assert indexer_sl(ser)[key] == expected
5352
else:
5453
with pytest.raises(KeyError, match=str(key)):
55-
s[key]
56-
with pytest.raises(KeyError, match=str(key)):
57-
s.loc[key]
54+
indexer_sl(ser)[key]
5855

59-
for key, expected in zip(idx.mid, s):
60-
assert s[key] == expected
61-
assert s.loc[key] == expected
56+
for key, expected in zip(idx.mid, ser):
57+
assert indexer_sl(ser)[key] == expected
6258

63-
def test_non_matching(self):
64-
s = self.s
59+
def test_non_matching(self, series_with_interval_index, indexer_sl):
60+
ser = series_with_interval_index.copy()
6561

6662
# this is a departure from our current
6763
# indexing scheme, but simpler
6864
with pytest.raises(KeyError, match=r"^\[-1\]$"):
69-
s.loc[[-1, 3, 4, 5]]
65+
indexer_sl(ser)[[-1, 3, 4, 5]]
7066

7167
with pytest.raises(KeyError, match=r"^\[-1\]$"):
72-
s.loc[[-1, 3]]
68+
indexer_sl(ser)[[-1, 3]]
7369

7470
@pytest.mark.arm_slow
7571
def test_large_series(self):
76-
s = Series(
72+
ser = Series(
7773
np.arange(1000000), index=IntervalIndex.from_breaks(np.arange(1000001))
7874
)
7975

80-
result1 = s.loc[:80000]
81-
result2 = s.loc[0:80000]
82-
result3 = s.loc[0:80000:1]
76+
result1 = ser.loc[:80000]
77+
result2 = ser.loc[0:80000]
78+
result3 = ser.loc[0:80000:1]
8379
tm.assert_series_equal(result1, result2)
8480
tm.assert_series_equal(result1, result3)
8581

8682
def test_loc_getitem_frame(self):
8783
# CategoricalIndex with IntervalIndex categories
8884
df = DataFrame({"A": range(10)})
89-
s = pd.cut(df.A, 5)
90-
df["B"] = s
85+
ser = pd.cut(df.A, 5)
86+
df["B"] = ser
9187
df = df.set_index("B")
9288

9389
result = df.loc[4]

0 commit comments

Comments
 (0)