Skip to content

Commit 537e67f

Browse files
authored
IntervalIndex is a subclass of Index (#542)
* IntervalIndex is a subclass of Index * include DataFrame test * use keyword
1 parent 6d28a28 commit 537e67f

File tree

3 files changed

+22
-10
lines changed

3 files changed

+22
-10
lines changed

pandas-stubs/core/algorithms.pyi

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ def unique(values: PeriodIndex) -> PeriodIndex: ... # type: ignore[misc] # pyri
2525
@overload
2626
def unique(values: CategoricalIndex) -> CategoricalIndex: ... # type: ignore[misc]
2727
@overload
28-
def unique(values: IntervalIndex[IntervalT]) -> IntervalIndex[IntervalT]: ...
28+
def unique(values: IntervalIndex[IntervalT]) -> IntervalIndex[IntervalT]: ... # type: ignore[misc]
2929
@overload
3030
def unique(values: Index) -> np.ndarray: ...
3131
@overload

pandas-stubs/core/indexes/interval.pyi

+10-9
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ from typing import (
1212
import numpy as np
1313
import pandas as pd
1414
from pandas import Index
15+
from pandas.core.indexes.extension import ExtensionIndex
1516
from pandas.core.series import (
1617
Series,
1718
TimedeltaSeries,
@@ -65,7 +66,7 @@ _EdgesTimedelta: TypeAlias = (
6566
_TimestampLike: TypeAlias = pd.Timestamp | np.datetime64 | dt.datetime
6667
_TimedeltaLike: TypeAlias = pd.Timedelta | np.timedelta64 | dt.timedelta
6768

68-
class IntervalIndex(IntervalMixin, Generic[IntervalT]):
69+
class IntervalIndex(ExtensionIndex, IntervalMixin, Generic[IntervalT]):
6970
closed: IntervalClosedType
7071

7172
def __new__(
@@ -248,7 +249,7 @@ class IntervalIndex(IntervalMixin, Generic[IntervalT]):
248249
@property
249250
def length(self) -> Index: ...
250251
def get_value(self, series: ABCSeries, key): ...
251-
@overload
252+
@overload # type: ignore[override]
252253
def __getitem__(
253254
self,
254255
idx: slice
@@ -262,37 +263,37 @@ class IntervalIndex(IntervalMixin, Generic[IntervalT]):
262263
def __getitem__(self, idx: int) -> IntervalT: ...
263264
@property
264265
def is_all_dates(self) -> bool: ...
265-
@overload
266+
@overload # type: ignore[override]
266267
def __gt__(
267268
self, other: IntervalT | IntervalIndex[IntervalT]
268269
) -> np_ndarray_bool: ...
269270
@overload
270271
def __gt__(self, other: pd.Series[IntervalT]) -> pd.Series[bool]: ...
271-
@overload
272+
@overload # type: ignore[override]
272273
def __ge__(
273274
self, other: IntervalT | IntervalIndex[IntervalT]
274275
) -> np_ndarray_bool: ...
275276
@overload
276277
def __ge__(self, other: pd.Series[IntervalT]) -> pd.Series[bool]: ...
277-
@overload
278+
@overload # type: ignore[override]
278279
def __le__(
279280
self, other: IntervalT | IntervalIndex[IntervalT]
280281
) -> np_ndarray_bool: ...
281282
@overload
282283
def __le__(self, other: pd.Series[IntervalT]) -> pd.Series[bool]: ...
283-
@overload
284+
@overload # type: ignore[override]
284285
def __lt__(
285286
self, other: IntervalT | IntervalIndex[IntervalT]
286287
) -> np_ndarray_bool: ...
287288
@overload
288-
def __lt__(self, other: pd.Series[IntervalT]) -> bool: ...
289-
@overload
289+
def __lt__(self, other: pd.Series[IntervalT]) -> pd.Series[bool]: ...
290+
@overload # type: ignore[override]
290291
def __eq__(self, other: IntervalT | IntervalIndex[IntervalT]) -> np_ndarray_bool: ... # type: ignore[misc]
291292
@overload
292293
def __eq__(self, other: pd.Series[IntervalT]) -> pd.Series[bool]: ... # type: ignore[misc]
293294
@overload
294295
def __eq__(self, other: object) -> Literal[False]: ...
295-
@overload
296+
@overload # type: ignore[override]
296297
def __ne__(self, other: IntervalT | IntervalIndex[IntervalT]) -> np_ndarray_bool: ... # type: ignore[misc]
297298
@overload
298299
def __ne__(self, other: pd.Series[IntervalT]) -> pd.Series[bool]: ... # type: ignore[misc]

tests/test_interval_index.py

+11
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,17 @@ def test_to_tuples() -> None:
3838
check(assert_type(ind, pd.Index), pd.Index, tuple)
3939

4040

41+
def test_subclass() -> None:
42+
assert issubclass(pd.IntervalIndex, pd.Index)
43+
44+
def index(test: pd.Index) -> None:
45+
...
46+
47+
interval_index = pd.IntervalIndex.from_tuples([(0, 1), (1, 2)])
48+
index(interval_index)
49+
pd.DataFrame({"a": [1, 2]}, index=interval_index)
50+
51+
4152
def test_is_overlapping() -> None:
4253
ind = pd.IntervalIndex.from_tuples([(0, 2), (1, 3), (4, 5)])
4354
check(assert_type(ind.is_overlapping, bool), bool)

0 commit comments

Comments
 (0)