Skip to content

Commit 9cb0923

Browse files
committed
Improve interval
1 parent c7804a2 commit 9cb0923

File tree

3 files changed

+137
-59
lines changed

3 files changed

+137
-59
lines changed

pandas-stubs/_libs/interval.pyi

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,8 @@ class Interval(IntervalMixin, Generic[_OrderableT]):
193193
def __ne__(self, other: Series[_OrderableT]) -> Series[bool]: ... # type: ignore[misc]
194194
@overload
195195
def __ne__(self, other: object) -> Literal[True]: ...
196+
@property
197+
def is_empty(self) -> bool: ...
196198

197199
class IntervalTree(IntervalMixin):
198200
def __init__(

pandas-stubs/core/arrays/interval.pyi

Lines changed: 49 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,11 @@
1+
import datetime as dt
2+
from typing import (
3+
Generic,
4+
Literal,
5+
Sequence,
6+
overload,
7+
)
8+
19
import numpy as np
210
import pandas as pd
311
from pandas import Index
@@ -9,21 +17,51 @@ from pandas._libs.interval import (
917
)
1018
from pandas._typing import (
1119
Axis,
20+
IntervalT,
1221
npt,
1322
)
1423

1524
from pandas.core.dtypes.generic import ABCExtensionArray
1625

17-
class IntervalArray(IntervalMixin, ExtensionArray):
26+
class IntervalArray(IntervalMixin, ExtensionArray, Generic[IntervalT]):
1827
ndim: int = ...
1928
can_hold_na: bool = ...
2029
def __new__(
21-
cls, data, closed=..., dtype=..., copy: bool = ..., verify_integrity: bool = ...
22-
): ...
30+
cls,
31+
data: Sequence[IntervalT] | IntervalArray[IntervalT],
32+
closed: Literal["left", "right", "both", "neither"] = ...,
33+
dtype: pd.IntervalDtype = ...,
34+
copy: bool = ...,
35+
verify_integrity: bool = ...,
36+
) -> IntervalArray[IntervalT]: ...
37+
@overload
2338
@classmethod
2439
def from_breaks(
25-
cls, breaks, closed: str = ..., copy: bool = ..., dtype=...
26-
) -> IntervalArray: ...
40+
cls, breaks: Sequence[int], closed: str = ..., copy: bool = ..., dtype=...
41+
) -> IntervalArray[Interval[int]]: ...
42+
@overload
43+
@classmethod
44+
def from_breaks(
45+
cls, breaks: Sequence[float], closed: str = ..., copy: bool = ..., dtype=...
46+
) -> IntervalArray[Interval[float]]: ...
47+
@overload
48+
@classmethod
49+
def from_breaks(
50+
cls,
51+
breaks: Sequence[pd.Timestamp | np.datetime64 | dt.datetime],
52+
closed: str = ...,
53+
copy: bool = ...,
54+
dtype=...,
55+
) -> IntervalArray[Interval[pd.Timestamp]]: ...
56+
@overload
57+
@classmethod
58+
def from_breaks(
59+
cls,
60+
breaks: Sequence[pd.Timedelta | np.timedelta64 | dt.timedelta],
61+
closed: str = ...,
62+
copy: bool = ...,
63+
dtype=...,
64+
) -> IntervalArray[Interval[pd.Timedelta]]: ...
2765
@classmethod
2866
def from_arrays(
2967
cls, left, right, closed: str = ..., copy: bool = ..., dtype=...
@@ -32,10 +70,10 @@ class IntervalArray(IntervalMixin, ExtensionArray):
3270
def from_tuples(
3371
cls, data, closed: str = ..., copy: bool = ..., dtype=...
3472
) -> IntervalArray: ...
35-
def __iter__(self): ...
73+
def __iter__(self) -> IntervalT: ...
3674
def __len__(self) -> int: ...
37-
def __getitem__(self, value): ...
38-
def __setitem__(self, key, value) -> None: ...
75+
def __getitem__(self, value: IntervalT): ...
76+
def __setitem__(self, key: int, value: IntervalT) -> None: ...
3977
def __eq__(self, other): ...
4078
def __ne__(self, other): ...
4179
def fillna(self, value=..., method=..., limit=...): ...
@@ -61,7 +99,7 @@ class IntervalArray(IntervalMixin, ExtensionArray):
6199
def right(self) -> Index: ...
62100
@property
63101
def closed(self) -> str: ...
64-
def set_closed(self, closed): ...
102+
def set_closed(self, closed) -> IntervalArray[IntervalT]: ...
65103
@property
66104
def length(self) -> Index: ...
67105
@property
@@ -70,11 +108,11 @@ class IntervalArray(IntervalMixin, ExtensionArray):
70108
def is_non_overlapping_monotonic(self) -> bool: ...
71109
def __array__(self, dtype=...) -> np.ndarray: ...
72110
def __arrow_array__(self, type=...): ...
73-
def to_tuples(self, na_tuple: bool = ...): ...
111+
def to_tuples(self, na_tuple: bool = ...) -> npt.NDArray[np.object_]: ...
74112
def repeat(self, repeats, axis: Axis | None = ...): ...
75113
def contains(
76114
self, other: float | pd.Timestamp | pd.Timedelta
77115
) -> npt.NDArray[np.bool_]: ...
78-
def overlaps(self, other: Interval) -> bool: ...
116+
def overlaps(self, other: Interval) -> npt.NDArray[np.bool_]: ...
79117
@property
80118
def is_empty(self) -> npt.NDArray[np.bool_]: ...

0 commit comments

Comments
 (0)