Skip to content

Commit ab1de1f

Browse files
authored
fix up ignores for invalid usage (#488)
1 parent 9ba09f4 commit ab1de1f

File tree

6 files changed

+46
-46
lines changed

6 files changed

+46
-46
lines changed

pandas-stubs/_libs/interval.pyi

+22-9
Original file line numberDiff line numberDiff line change
@@ -77,14 +77,20 @@ class Interval(IntervalMixin, Generic[_OrderableT]):
7777
closed: IntervalClosedType = ...,
7878
): ...
7979
def __hash__(self) -> int: ...
80+
# for __contains__, it seems that we have to separate out the 4 cases to make
81+
# mypy happy
8082
@overload
81-
def __contains__(self: Interval[_OrderableTimesT], _OrderableTimesT) -> bool: ...
83+
def __contains__(self: Interval[Timestamp], key: Timestamp) -> bool: ...
8284
@overload
83-
def __contains__(self: Interval[_OrderableScalarT], key: float) -> bool: ...
85+
def __contains__(self: Interval[Timedelta], key: Timedelta) -> bool: ...
8486
@overload
85-
def __add__(
86-
self: Interval[_OrderableTimesT], y: Timedelta
87-
) -> Interval[_OrderableTimesT]: ...
87+
def __contains__(self: Interval[int], key: float) -> bool: ...
88+
@overload
89+
def __contains__(self: Interval[float], key: float) -> bool: ...
90+
@overload
91+
def __add__(self: Interval[Timestamp], y: Timedelta) -> Interval[Timestamp]: ...
92+
@overload
93+
def __add__(self: Interval[Timedelta], y: Timedelta) -> Interval[Timedelta]: ...
8894
@overload
8995
def __add__(
9096
self: Interval[int], y: _OrderableScalarT
@@ -138,7 +144,7 @@ class Interval(IntervalMixin, Generic[_OrderableT]):
138144
@overload
139145
def __rmul__(self: Interval[Timedelta], y: float) -> Interval[Timedelta]: ...
140146
@overload
141-
def __truediv__(self: Interval[int], y: _OrderableScalarT) -> Interval[float]: ...
147+
def __truediv__(self: Interval[int], y: int | float) -> Interval[float]: ...
142148
@overload
143149
def __truediv__(self: Interval[float], y: float) -> Interval[float]: ...
144150
@overload
@@ -162,19 +168,26 @@ class Interval(IntervalMixin, Generic[_OrderableT]):
162168
@overload
163169
def __gt__(self: IntervalT, other: IntervalIndex[IntervalT]) -> np_ndarray_bool: ...
164170
@overload
165-
def __gt__(self, other: Series[_OrderableT]) -> Series[bool]: ...
171+
def __gt__(
172+
self,
173+
other: Series[int] | Series[float] | Series[Timestamp] | Series[Timedelta],
174+
) -> Series[bool]: ...
166175
@overload
167176
def __lt__(self, other: Interval[_OrderableT]) -> bool: ...
168177
@overload
169178
def __lt__(self: IntervalT, other: IntervalIndex[IntervalT]) -> np_ndarray_bool: ...
170179
@overload
171-
def __lt__(self, other: Series[_OrderableT]) -> Series[bool]: ...
180+
def __lt__(
181+
self, other: Series[int] | Series[float] | Series[Timestamp] | Series[Timedelta]
182+
) -> Series[bool]: ...
172183
@overload
173184
def __ge__(self, other: Interval[_OrderableT]) -> bool: ...
174185
@overload
175186
def __ge__(self: IntervalT, other: IntervalIndex[IntervalT]) -> np_ndarray_bool: ...
176187
@overload
177-
def __ge__(self, other: Series[_OrderableT]) -> Series[bool]: ...
188+
def __ge__(
189+
self, other: Series[int] | Series[float] | Series[Timestamp] | Series[Timedelta]
190+
) -> Series[bool]: ...
178191
@overload
179192
def __le__(self, other: Interval[_OrderableT]) -> bool: ...
180193
@overload

pandas-stubs/core/series.pyi

+2-12
Original file line numberDiff line numberDiff line change
@@ -1351,11 +1351,6 @@ class Series(IndexOpsMixin, NDFrame, Generic[S1]):
13511351
) -> TimedeltaSeries: ...
13521352
@overload
13531353
def __sub__(self, other: num | _ListLike | Series) -> Series: ...
1354-
@overload
1355-
def __truediv__(
1356-
self, other: Timedelta | TimedeltaSeries | TimedeltaIndex | np.timedelta64
1357-
) -> Series[float]: ...
1358-
@overload
13591354
def __truediv__(self, other: num | _ListLike | Series[S1]) -> Series: ...
13601355
# ignore needed for mypy as we want different results based on the arguments
13611356
@overload
@@ -1779,12 +1774,7 @@ class TimestampSeries(Series[Timestamp]):
17791774
# ignore needed because of mypy
17801775
@property
17811776
def dt(self) -> TimestampProperties: ... # type: ignore[override]
1782-
@overload # type: ignore[override]
1783-
def __add__(
1784-
self, other: TimedeltaSeries | np.timedelta64 | TimestampSeries
1785-
) -> TimestampSeries: ...
1786-
@overload
1787-
def __add__(self, other: Timestamp) -> Never: ...
1777+
def __add__(self, other: TimedeltaSeries | np.timedelta64) -> TimestampSeries: ... # type: ignore[override]
17881778
def __mul__(self, other: TimestampSeries | np.timedelta64 | TimedeltaSeries) -> Never: ... # type: ignore[override]
17891779
def __truediv__(self, other: TimestampSeries | np.timedelta64 | TimedeltaSeries) -> Never: ... # type: ignore[override]
17901780

@@ -1808,7 +1798,7 @@ class TimedeltaSeries(Series[Timedelta]):
18081798
def __sub__( # type: ignore[override]
18091799
self, other: Timedelta | TimedeltaSeries | TimedeltaIndex | np.timedelta64
18101800
) -> TimedeltaSeries: ...
1811-
def __truediv__(self, other: TimedeltaSeries | np.timedelta64 | TimedeltaIndex) -> Series[float]: ... # type: ignore[override]
1801+
def __truediv__(self, other: Timedelta | TimedeltaSeries | np.timedelta64 | TimedeltaIndex) -> Series[float]: ... # type: ignore[override]
18121802
@property
18131803
def dt(self) -> TimedeltaProperties: ... # type: ignore[override]
18141804

tests/test_frame.py

+6-3
Original file line numberDiff line numberDiff line change
@@ -1790,6 +1790,8 @@ def test_set_columns() -> None:
17901790
df.columns = pd.Series([1, "a"])
17911791
df.columns = (1, 2)
17921792
df.columns = (1, "a")
1793+
if TYPE_CHECKING_INVALID_USAGE:
1794+
df.columns = "abc" # pyright: ignore[reportGeneralTypeIssues]
17931795

17941796

17951797
def test_frame_index_numpy() -> None:
@@ -1825,9 +1827,10 @@ def test_not_hashable() -> None:
18251827
def test_func(h: Hashable):
18261828
pass
18271829

1828-
test_func(pd.DataFrame()) # type: ignore[arg-type]
1829-
test_func(pd.Series([], dtype=object)) # type: ignore[arg-type]
1830-
test_func(pd.Index([])) # type: ignore[arg-type]
1830+
if TYPE_CHECKING_INVALID_USAGE:
1831+
test_func(pd.DataFrame()) # type: ignore[arg-type]
1832+
test_func(pd.Series([], dtype=object)) # type: ignore[arg-type]
1833+
test_func(pd.Index([])) # type: ignore[arg-type]
18311834

18321835

18331836
def test_columns_mixlist() -> None:

tests/test_interval.py

+5-14
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ def test_interval_length() -> None:
5050

5151
check(assert_type(idres, "pd.Interval[pd.Timestamp]"), pd.Interval, pd.Timestamp)
5252
if TYPE_CHECKING_INVALID_USAGE:
53-
20 in i1 # TODO both: ignore[operator]
53+
20 in i1 # type: ignore[operator]
5454
i1 + pd.Timestamp("2000-03-03") # type: ignore[operator]
5555
i1 * 3 # type: ignore[operator]
5656
i1 * pd.Timedelta(seconds=20) # type: ignore[operator]
@@ -69,13 +69,8 @@ def test_interval_length() -> None:
6969
check(assert_type(i2 * 4.2, "pd.Interval[float]"), pd.Interval, float)
7070

7171
if TYPE_CHECKING_INVALID_USAGE:
72-
pd.Timestamp(
73-
"2001-01-02"
74-
) in i2 # pyright: ignore[reportGeneralTypeIssues] # TODO mypy: ignore[operator]
75-
i2 + pd.Timedelta(
76-
seconds=20
77-
) # pyright: ignore[reportGeneralTypeIssues] # TODO mypy: ignore[operator]
78-
72+
pd.Timestamp("2001-01-02") in i2 # type: ignore[operator]
73+
i2 + pd.Timedelta(seconds=20) # type: ignore[type-var]
7974
i3 = pd.Interval(13.2, 19.5)
8075
check(assert_type(i3.length, float), float)
8176
check(assert_type(i3.left, float), float)
@@ -87,9 +82,5 @@ def test_interval_length() -> None:
8782
check(assert_type(i3 + 3, "pd.Interval[float]"), pd.Interval, float)
8883
check(assert_type(i3 * 3, "pd.Interval[float]"), pd.Interval, float)
8984
if TYPE_CHECKING_INVALID_USAGE:
90-
pd.Timestamp(
91-
"2001-01-02"
92-
) in i3 # pyright: ignore[reportGeneralTypeIssues] # TODO mypy: ignore[operator]
93-
i3 + pd.Timedelta(
94-
seconds=20
95-
) # pyright: ignore[reportGeneralTypeIssues] # TODO mypy: ignore[operator]
85+
pd.Timestamp("2001-01-02") in i3 # type: ignore[operator]
86+
i3 + pd.Timedelta(seconds=20) # type: ignore[operator]

tests/test_scalars.py

+9-6
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
from pandas._libs.tslibs.timedeltas import Components
2727

2828
from tests import (
29+
IS_TYPE_CHECKER_MYPY,
2930
PD_LTE_15,
3031
TYPE_CHECKING_INVALID_USAGE,
3132
check,
@@ -783,10 +784,8 @@ def test_timedelta_mul_div() -> None:
783784
md_float / td # type: ignore[operator]
784785
md_ndarray_intp / td # type: ignore[operator]
785786
md_ndarray_float / td # type: ignore[operator]
786-
# TODO: Series.__truediv__ says it supports Timedelta
787-
# it does not, in general, except for TimedeltaSeries
788-
# mp_series_int / td # type: ignore[operator]
789-
# mp_series_float / td # type: ignore[operator]
787+
mp_series_int / td # type: ignore[operator]
788+
md_series_float / td # type: ignore[operator]
790789
md_int64_index / td # type: ignore[operator]
791790
md_float_index / td # type: ignore[operator]
792791

@@ -827,8 +826,12 @@ def test_timedelta_mod_abs_unary() -> None:
827826
pd.TimedeltaIndex,
828827
)
829828

830-
# mypy reports dt.timedelta, even though __abs__ returns Timedelta
831-
check(assert_type(abs(td), pd.Timedelta), pd.Timedelta) # type: ignore[assert-type]
829+
if TYPE_CHECKING and IS_TYPE_CHECKER_MYPY:
830+
# mypy reports dt.timedelta, even though __abs__ returns Timedelta
831+
check(assert_type(abs(td), pd.Timedelta), pd.Timedelta) # type: ignore[assert-type]
832+
else:
833+
# This is valid for pyright
834+
check(assert_type(abs(td), pd.Timedelta), pd.Timedelta)
832835
check(assert_type(td.__abs__(), pd.Timedelta), pd.Timedelta)
833836
check(assert_type(-td, pd.Timedelta), pd.Timedelta)
834837
check(assert_type(+td, pd.Timedelta), pd.Timedelta)

tests/test_timefuncs.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -262,9 +262,9 @@ def test_fail_on_adding_two_timestamps() -> None:
262262
s1 = pd.Series(pd.to_datetime(["2022-05-01", "2022-06-01"]))
263263
s2 = pd.Series(pd.to_datetime(["2022-05-15", "2022-06-15"]))
264264
if TYPE_CHECKING_INVALID_USAGE:
265-
ssum: pd.Series = s1 + s2 # TODO both: ignore[operator]
265+
ssum: pd.Series = s1 + s2 # type: ignore[operator]
266266
ts = pd.Timestamp("2022-06-30")
267-
tsum: pd.Series = s1 + ts # pyright: ignore
267+
tsum: pd.Series = s1 + ts # type: ignore[operator]
268268

269269

270270
def test_dtindex_tzinfo() -> None:

0 commit comments

Comments
 (0)