Skip to content

Commit fa67f21

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

File tree

2 files changed

+35
-20
lines changed

2 files changed

+35
-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: 32 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,28 @@ _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, instance: IntervalIndex[Interval[_OrderableScalarT]], owner: type[IntervalIndex]
71+
) -> Index[Interval[_OrderableScalarT]]: ...
72+
@overload
73+
def __get__(
74+
self, instance: IntervalIndex[Interval[_OrderableTimesT]], owner: type[IntervalIndex]
75+
) -> Index[Timedelta]: ...
76+
77+
@type_check_only
78+
class _MidDescriptor:
79+
@overload
80+
def __get__(
81+
self, instance: IntervalIndex[Interval[_OrderableScalarT]], owner: type[IntervalIndex]
82+
) -> Index[float]: ...
83+
@overload
84+
def __get__(
85+
self, instance: IntervalIndex[Interval[_OrderableTimesT]], owner: type[IntervalIndex]
86+
) -> Index[Timedelta]: ...
87+
6188
class IntervalIndex(ExtensionIndex[IntervalT, np.object_], IntervalMixin):
6289
closed: IntervalClosedType
6390

@@ -216,16 +243,13 @@ class IntervalIndex(ExtensionIndex[IntervalT, np.object_], IntervalMixin):
216243
def is_overlapping(self) -> bool: ...
217244
def get_loc(self, key: Label) -> int | slice | np_1darray_bool: ...
218245
@property
219-
def left(self) -> Index: ...
220-
@property
221-
def right(self) -> Index: ...
222-
@property
223-
def mid(self) -> Index: ...
246+
def left(self: IntervalIndex[Interval[_OrderableT]]) -> Index[_OrderableT]: ...
224247
@property
225-
def length(self) -> Index: ...
248+
def right(self: IntervalIndex[Interval[_OrderableT]]) -> Index[_OrderableT]: ...
249+
mid = _MidDescriptor()
250+
length = _LengthDescriptor()
226251
@overload # type: ignore[override]
227-
# pyrefly: ignore # bad-override
228-
def __getitem__(
252+
def __getitem__( # pyrefly: ignore[bad-override]
229253
self,
230254
idx: (
231255
slice

0 commit comments

Comments
 (0)