Skip to content

Commit ac70f3e

Browse files
committed
modified test_searchsorted, discarded the use of numpy.testing
1 parent 1ba7ff8 commit ac70f3e

File tree

3 files changed

+37
-44
lines changed

3 files changed

+37
-44
lines changed

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,4 +142,4 @@ doc/source/savefig/
142142
##############################
143143
/.pyodide-xbuildenv-*
144144

145-
*.ipynb
145+
*.ipynb

pandas/core/indexes/multi.py

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3778,7 +3778,6 @@ def _reorder_indexer(
37783778
ind = np.lexsort(keys)
37793779
return indexer[ind]
37803780

3781-
37823781
def searchsorted(
37833782
self,
37843783
value: tuple[Hashable, ...],
@@ -3814,39 +3813,47 @@ def searchsorted(
38143813
>>> mi.searchsorted(("b", "y"))
38153814
1
38163815
"""
3817-
if not isinstance(value, (tuple,list)):
3816+
if not isinstance(value, (tuple, list)):
38183817
raise TypeError("value must be a tuple or list")
38193818

38203819
if isinstance(value, tuple):
38213820
value = [value]
38223821
if side not in ["left", "right"]:
38233822
raise ValueError("side must be either 'left' or 'right'")
3824-
3823+
38253824
if not value:
38263825
raise ValueError("searchsorted requires a non-empty value")
3827-
3828-
try:
3829-
3826+
3827+
try:
38303828
indexer = self.get_indexer(value)
38313829
result = []
38323830

38333831
for v, i in zip(value, indexer):
3834-
if i!= -1:
3832+
if i != -1:
38353833
result.append(i if side == "left" else i + 1)
3836-
else:
3837-
dtype = np.dtype([(f"level_{i}", level.dtype) for i, level in enumerate(self.levels)])
3834+
else:
3835+
dtype = np.dtype(
3836+
[
3837+
(f"level_{i}", level.dtype)
3838+
for i, level in enumerate(self.levels)
3839+
]
3840+
)
38383841

38393842
val_array = np.array(value, dtype=dtype)
3840-
3841-
pos = np.searchsorted( np.asarray(self.values,dtype=dtype),val_array , side=side, sorter = sorter)
3843+
3844+
pos = np.searchsorted(
3845+
np.asarray(self.values, dtype=dtype),
3846+
val_array,
3847+
side=side,
3848+
sorter=sorter,
3849+
)
38423850
result.append(pos)
3843-
3851+
38443852
return np.array(result, dtype=np.intp)
38453853

38463854
except KeyError:
38473855
pass
38483856

3849-
38503857
def truncate(self, before=None, after=None) -> MultiIndex:
38513858
"""
38523859
Slice index between two labels / tuples, return new MultiIndex.
@@ -4406,6 +4413,3 @@ def cartesian_product(X: list[np.ndarray]) -> list[np.ndarray]:
44064413
)
44074414
for i, x in enumerate(X)
44084415
]
4409-
4410-
4411-

pandas/tests/indexes/multi/test_indexing.py

Lines changed: 16 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1031,38 +1031,27 @@ def test_get_loc_namedtuple_behaves_like_tuple():
10311031
assert idx.get_loc(("i5", "i6")) == 2
10321032

10331033

1034+
def test_searchsorted():
1035+
mi = MultiIndex.from_tuples([("a", 0), ("a", 1),
1036+
("b", 0), ("b", 1), ("c", 0)])
10341037

1038+
assert mi.searchsorted(("b", 0)) == 2
1039+
assert mi.searchsorted(("b", 0), side="right") == 3
10351040

1036-
def test_searchsorted():
1037-
mi = MultiIndex.from_tuples([
1038-
('a', 0),
1039-
('a', 1),
1040-
('b', 0),
1041-
('b', 1),
1042-
('c', 0)
1043-
])
1044-
1045-
1046-
assert mi.searchsorted(('b', 0)) == 2
1047-
assert mi.searchsorted(('b', 0), side="right") == 3
1048-
1049-
assert mi.searchsorted(('a', 0)) == 0
1050-
assert mi.searchsorted(('a', -1)) == 0
1051-
assert mi.searchsorted(('c', 1)) == 5 # Beyond the last
1052-
1053-
1054-
result = mi.searchsorted([('a', 1), ('b', 0), ('c', 0)])
1041+
assert mi.searchsorted(("a", 0)) == 0
1042+
assert mi.searchsorted(("a", -1)) == 0
1043+
assert mi.searchsorted(("c", 1)) == 5 # Beyond the last
1044+
1045+
result = mi.searchsorted([("a", 1), ("b", 0), ("c", 0)])
10551046
expected = np.array([1, 2, 4], dtype=np.intp)
1056-
np.testing.assert_array_equal(result, expected)
1047+
tm.assert_numpy_array_equal(result, expected)
10571048

1058-
1059-
result = mi.searchsorted([('a', 1), ('b', 0), ('c', 0)], side='right')
1049+
result = mi.searchsorted([("a", 1), ("b", 0), ("c", 0)], side="right")
10601050
expected = np.array([2, 3, 5], dtype=np.intp)
1061-
np.testing.assert_array_equal(result, expected)
1051+
tm.assert_numpy_array_equal(result, expected)
10621052

1063-
10641053
with pytest.raises(ValueError, match="side must be either 'left' or 'right'"):
1065-
mi.searchsorted(('a', 1), side='middle')
1066-
1054+
mi.searchsorted(("a", 1), side="middle")
1055+
10671056
with pytest.raises(TypeError, match="value must be a tuple or list"):
1068-
mi.searchsorted('a') # not a tuple
1057+
mi.searchsorted("a") # not a tuple

0 commit comments

Comments
 (0)