@@ -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,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+
6196class 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