@@ -7,6 +7,7 @@ from typing import (
77 Literal ,
88 TypeAlias ,
99 overload ,
10+ type_check_only ,
1011)
1112
1213import numpy as np
@@ -17,7 +18,11 @@ from pandas.core.indexes.extension import ExtensionIndex
1718from 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
2126from 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+
6188class 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