Skip to content

Commit 1355f6e

Browse files
committed
https://github.com/pandas-dev/pandas-stubs/issues/1548#issuecomment-3651117214
1 parent c021ca4 commit 1355f6e

File tree

2 files changed

+43
-20
lines changed

2 files changed

+43
-20
lines changed

pandas-stubs/_libs/interval.pyi

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -65,9 +65,9 @@ class IntervalMixin:
6565

6666
class Interval(IntervalMixin, Generic[_OrderableT]):
6767
@property
68-
def left(self: Interval[_OrderableT]) -> _OrderableT: ...
68+
def left(self) -> _OrderableT: ...
6969
@property
70-
def right(self: Interval[_OrderableT]) -> _OrderableT: ...
70+
def right(self) -> _OrderableT: ...
7171
@property
7272
def closed(self) -> IntervalClosedType: ...
7373
mid = _MidDescriptor()
@@ -79,16 +79,7 @@ class Interval(IntervalMixin, Generic[_OrderableT]):
7979
closed: IntervalClosedType = ...,
8080
) -> None: ...
8181
def __hash__(self) -> int: ...
82-
# for __contains__, it seems that we have to separate out the 4 cases to make
83-
# mypy happy
84-
@overload
85-
def __contains__(self: Interval[Timestamp], key: Timestamp) -> bool: ...
86-
@overload
87-
def __contains__(self: Interval[Timedelta], key: Timedelta) -> bool: ...
88-
@overload
89-
def __contains__(self: Interval[int], key: float) -> bool: ...
90-
@overload
91-
def __contains__(self: Interval[float], key: float) -> bool: ...
82+
def __contains__(self, key: _OrderableT) -> bool: ...
9283
@overload
9384
def __add__(self: Interval[Timestamp], y: Timedelta) -> Interval[Timestamp]: ...
9485
@overload

pandas-stubs/core/indexes/interval.pyi

Lines changed: 40 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ from typing import (
77
Literal,
88
TypeAlias,
99
overload,
10+
type_check_only,
1011
)
1112

1213
import numpy as np
@@ -17,7 +18,11 @@ from pandas.core.indexes.extension import ExtensionIndex
1718
from pandas._libs.interval import (
1819
Interval as Interval,
1920
IntervalMixin,
21+
_OrderableScalarT,
22+
_OrderableT,
23+
_OrderableTimesT,
2024
)
25+
from pandas._libs.tslibs.timedeltas import Timedelta
2126
from pandas._typing import (
2227
DatetimeLike,
2328
DtypeArg,
@@ -58,6 +63,36 @@ _EdgesTimedelta: TypeAlias = (
5863
_TimestampLike: TypeAlias = pd.Timestamp | np.datetime64 | dt.datetime
5964
_TimedeltaLike: TypeAlias = pd.Timedelta | np.timedelta64 | dt.timedelta
6065

66+
@type_check_only
67+
class _LengthDescriptor:
68+
@overload
69+
def __get__(
70+
self,
71+
instance: IntervalIndex[Interval[_OrderableScalarT]],
72+
owner: type[IntervalIndex],
73+
) -> Index[Interval[_OrderableScalarT]]: ...
74+
@overload
75+
def __get__(
76+
self,
77+
instance: IntervalIndex[Interval[_OrderableTimesT]],
78+
owner: type[IntervalIndex],
79+
) -> Index[Timedelta]: ...
80+
81+
@type_check_only
82+
class _MidDescriptor:
83+
@overload
84+
def __get__(
85+
self,
86+
instance: IntervalIndex[Interval[_OrderableScalarT]],
87+
owner: type[IntervalIndex],
88+
) -> Index[float]: ...
89+
@overload
90+
def __get__(
91+
self,
92+
instance: IntervalIndex[Interval[_OrderableTimesT]],
93+
owner: type[IntervalIndex],
94+
) -> Index[Timedelta]: ...
95+
6196
class IntervalIndex(ExtensionIndex[IntervalT, np.object_], IntervalMixin):
6297
closed: IntervalClosedType
6398

@@ -216,16 +251,13 @@ class IntervalIndex(ExtensionIndex[IntervalT, np.object_], IntervalMixin):
216251
def is_overlapping(self) -> bool: ...
217252
def get_loc(self, key: Label) -> int | slice | np_1darray_bool: ...
218253
@property
219-
def left(self) -> Index: ...
220-
@property
221-
def right(self) -> Index: ...
222-
@property
223-
def mid(self) -> Index: ...
254+
def left(self: IntervalIndex[Interval[_OrderableT]]) -> Index[_OrderableT]: ...
224255
@property
225-
def length(self) -> Index: ...
256+
def right(self: IntervalIndex[Interval[_OrderableT]]) -> Index[_OrderableT]: ...
257+
mid = _MidDescriptor()
258+
length = _LengthDescriptor()
226259
@overload # type: ignore[override]
227-
# pyrefly: ignore # bad-override
228-
def __getitem__(
260+
def __getitem__( # pyrefly: ignore[bad-override]
229261
self,
230262
idx: (
231263
slice

0 commit comments

Comments
 (0)