Skip to content

Commit 643b1cb

Browse files
committed
Incorporate feedback for PR
1 parent 80b6448 commit 643b1cb

File tree

4 files changed

+91
-76
lines changed

4 files changed

+91
-76
lines changed

pandas-stubs/_libs/tslibs/period.pyi

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,6 @@ class Period(PeriodMixin):
8484
def __sub__(self, other: TimedeltaSeries) -> PeriodSeries: ...
8585
@overload
8686
def __sub__(self, other: TimedeltaIndex) -> PeriodIndex: ...
87-
def __rsub__(self, other: PeriodIndex) -> Index: ...
8887
@overload
8988
def __add__(self, other: _PeriodAddSub) -> Period: ...
9089
@overload
@@ -105,7 +104,6 @@ class Period(PeriodMixin):
105104
def __gt__(self, other: Period) -> bool: ...
106105
@overload
107106
def __gt__(self, other: PeriodIndex) -> npt.NDArray[np.bool_]: ...
108-
def __hash__(self) -> int: ...
109107
@overload
110108
def __le__(self, other: Period) -> bool: ...
111109
@overload

pandas-stubs/core/indexes/period.pyi

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,16 @@ from typing import Hashable
22

33
import numpy as np
44
import pandas as pd
5+
from pandas import Index
56
from pandas.core.indexes.datetimelike import (
67
DatetimeIndexOpsMixin as DatetimeIndexOpsMixin,
78
)
89
from pandas.core.indexes.numeric import Int64Index
910

10-
from pandas._libs.tslibs import BaseOffset
11+
from pandas._libs.tslibs import (
12+
BaseOffset,
13+
Period,
14+
)
1115

1216
class PeriodIndex(DatetimeIndexOpsMixin, Int64Index):
1317
def __new__(
@@ -24,6 +28,8 @@ class PeriodIndex(DatetimeIndexOpsMixin, Int64Index):
2428
@property
2529
def values(self): ...
2630
def __contains__(self, key) -> bool: ...
31+
# Override due to supertpye incompatibility which has it for NumericIndex or complex.
32+
def __sub__(self, other: Period) -> Index: ... # type: ignore[override]
2733
def __array__(self, dtype=...) -> np.ndarray: ...
2834
def __array_wrap__(self, result, context=...): ...
2935
def asof_locs(self, where, mask): ...

pandas-stubs/core/series.pyi

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,16 @@ class Series(IndexOpsMixin, NDFrame, Generic[S1]):
196196
fastpath: bool = ...,
197197
) -> Series[Period]: ...
198198
@overload
199+
def __new__(
200+
cls,
201+
data: TimedeltaIndex,
202+
index: Axes | None = ...,
203+
dtype=...,
204+
name: Hashable | None = ...,
205+
copy: bool = ...,
206+
fastpath: bool = ...,
207+
) -> TimedeltaSeries: ...
208+
@overload
199209
def __new__(
200210
cls,
201211
data: object | _ListLike | Series[S1] | dict[int, S1] | dict[_str, S1] | None,

tests/test_scalars.py

Lines changed: 74 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -94,117 +94,118 @@ def test_period_properties() -> None:
9494
def test_periof_add_subtract() -> None:
9595
p = pd.Period("2012-1-1", freq="D")
9696

97-
as0 = pd.Timedelta(1, "D")
98-
as1 = dt.timedelta(days=1)
99-
as2 = np.timedelta64(1, "D")
100-
as3 = np.int64(1)
101-
as4 = int(1)
102-
as5 = pd.period_range("2012-1-1", periods=10, freq="D")
103-
as6 = pd.Period("2012-1-1", freq="D")
97+
as_pd_td = pd.Timedelta(1, "D")
98+
as_dt_td = dt.timedelta(days=1)
99+
as_np_td = np.timedelta64(1, "D")
100+
as_np_i64 = np.int64(1)
101+
as_int = int(1)
102+
as_period_index = pd.period_range("2012-1-1", periods=10, freq="D")
103+
as_period = pd.Period("2012-1-1", freq="D")
104104
scale = 24 * 60 * 60 * 10**9
105-
as7 = cast(TimedeltaSeries, pd.Series(pd.timedelta_range(scale, scale, freq="D")))
106-
as8 = pd.Series(as5)
107-
as9 = pd.timedelta_range(scale, scale, freq="D")
108-
as10 = pd.NaT
109-
110-
check(assert_type(p + as0, pd.Period), pd.Period)
111-
check(assert_type(p + as1, pd.Period), pd.Period)
112-
check(assert_type(p + as2, pd.Period), pd.Period)
113-
check(assert_type(p + as3, pd.Period), pd.Period)
114-
check(assert_type(p + as4, pd.Period), pd.Period)
105+
as_td_series = pd.Series(pd.timedelta_range(scale, scale, freq="D"))
106+
check(assert_type(as_td_series, TimedeltaSeries), pd.Series)
107+
as_period_series = pd.Series(as_period_index)
108+
as_timedelta_idx = pd.timedelta_range(scale, scale, freq="D")
109+
as_nat = pd.NaT
110+
111+
check(assert_type(p + as_pd_td, pd.Period), pd.Period)
112+
check(assert_type(p + as_dt_td, pd.Period), pd.Period)
113+
check(assert_type(p + as_np_td, pd.Period), pd.Period)
114+
check(assert_type(p + as_np_i64, pd.Period), pd.Period)
115+
check(assert_type(p + as_int, pd.Period), pd.Period)
115116
check(assert_type(p + p.freq, pd.Period), pd.Period)
116-
check(assert_type(p + (p - as5), pd.PeriodIndex), pd.PeriodIndex)
117-
check(assert_type(p + as7, PeriodSeries), pd.Series, pd.Period)
118-
check(assert_type(p + as9, pd.PeriodIndex), pd.PeriodIndex)
119-
check(assert_type(p + as10, NaTType), NaTType)
120-
das8 = cast(TimedeltaSeries, (as8 - as8))
117+
check(assert_type(p + (p - as_period_index), pd.PeriodIndex), pd.PeriodIndex)
118+
check(assert_type(p + as_td_series, PeriodSeries), pd.Series, pd.Period)
119+
check(assert_type(p + as_timedelta_idx, pd.PeriodIndex), pd.PeriodIndex)
120+
check(assert_type(p + as_nat, NaTType), NaTType)
121+
das8 = cast(TimedeltaSeries, (as_period_series - as_period_series))
121122
check(assert_type(p + das8, PeriodSeries), pd.Series, pd.Period)
122-
check(assert_type(p - as0, pd.Period), pd.Period)
123-
check(assert_type(p - as1, pd.Period), pd.Period)
124-
check(assert_type(p - as2, pd.Period), pd.Period)
125-
check(assert_type(p - as3, pd.Period), pd.Period)
126-
check(assert_type(p - as4, pd.Period), pd.Period)
127-
check(assert_type(p - as5, pd.Index), pd.Index)
128-
check(assert_type(p - as6, BaseOffset), Day)
129-
check(assert_type(p - as7, PeriodSeries), pd.Series, pd.Period)
130-
check(assert_type(p - as9, pd.PeriodIndex), pd.PeriodIndex)
131-
check(assert_type(p - as10, NaTType), NaTType)
123+
check(assert_type(p - as_pd_td, pd.Period), pd.Period)
124+
check(assert_type(p - as_dt_td, pd.Period), pd.Period)
125+
check(assert_type(p - as_np_td, pd.Period), pd.Period)
126+
check(assert_type(p - as_np_i64, pd.Period), pd.Period)
127+
check(assert_type(p - as_int, pd.Period), pd.Period)
128+
check(assert_type(p - as_period_index, pd.Index), pd.Index)
129+
check(assert_type(p - as_period, BaseOffset), Day)
130+
check(assert_type(p - as_td_series, PeriodSeries), pd.Series, pd.Period)
131+
check(assert_type(p - as_timedelta_idx, pd.PeriodIndex), pd.PeriodIndex)
132+
check(assert_type(p - as_nat, NaTType), NaTType)
132133
check(assert_type(p - p.freq, pd.Period), pd.Period)
133134

134-
check(assert_type(as0 + p, pd.Period), pd.Period)
135-
check(assert_type(as1 + p, pd.Period), pd.Period)
136-
check(assert_type(as2 + p, pd.Period), pd.Period)
137-
check(assert_type(as3 + p, pd.Period), pd.Period)
138-
check(assert_type(as4 + p, pd.Period), pd.Period)
139-
check(assert_type(as7 + p, PeriodSeries), pd.Series, pd.Period)
135+
check(assert_type(as_pd_td + p, pd.Period), pd.Period)
136+
check(assert_type(as_dt_td + p, pd.Period), pd.Period)
137+
check(assert_type(as_np_td + p, pd.Period), pd.Period)
138+
check(assert_type(as_np_i64 + p, pd.Period), pd.Period)
139+
check(assert_type(as_int + p, pd.Period), pd.Period)
140+
check(assert_type(as_td_series + p, PeriodSeries), pd.Series, pd.Period)
140141
# TODO: Improve Index to not handle __add__(period)
141-
check(assert_type(as9 + p, pd.Index), pd.PeriodIndex)
142-
check(assert_type(as10 + p, NaTType), NaTType)
142+
check(assert_type(as_timedelta_idx + p, pd.Index), pd.PeriodIndex)
143+
check(assert_type(as_nat + p, NaTType), NaTType)
143144
check(assert_type(p.freq + p, pd.Period), pd.Period)
144145

145-
check(assert_type(as5 - p, pd.Index), pd.Index)
146+
check(assert_type(as_period_index - p, pd.Index), pd.Index)
146147

147-
check(assert_type(p.__radd__(as0), pd.Period), pd.Period)
148-
check(assert_type(p.__radd__(as1), pd.Period), pd.Period)
149-
check(assert_type(p.__radd__(as2), pd.Period), pd.Period)
150-
check(assert_type(p.__radd__(as3), pd.Period), pd.Period)
151-
check(assert_type(p.__radd__(as4), pd.Period), pd.Period)
152-
check(assert_type(p.__radd__(as10), NaTType), NaTType)
148+
check(assert_type(p.__radd__(as_pd_td), pd.Period), pd.Period)
149+
check(assert_type(p.__radd__(as_dt_td), pd.Period), pd.Period)
150+
check(assert_type(p.__radd__(as_np_td), pd.Period), pd.Period)
151+
check(assert_type(p.__radd__(as_np_i64), pd.Period), pd.Period)
152+
check(assert_type(p.__radd__(as_int), pd.Period), pd.Period)
153+
check(assert_type(p.__radd__(as_nat), NaTType), NaTType)
153154
check(assert_type(p.__radd__(p.freq), pd.Period), pd.Period)
154155

155156

156157
def test_period_cmp() -> None:
157158
p = pd.Period("2012-1-1", freq="D")
158159

159-
c0 = pd.Period("2012-1-1", freq="D")
160-
c1 = pd.period_range("2012-1-1", periods=10, freq="D")
160+
c_period = pd.Period("2012-1-1", freq="D")
161+
c_period_index = pd.period_range("2012-1-1", periods=10, freq="D")
161162

162-
eq = check(assert_type(p == c0, bool), bool)
163-
ne = check(assert_type(p != c0, bool), bool)
163+
eq = check(assert_type(p == c_period, bool), bool)
164+
ne = check(assert_type(p != c_period, bool), bool)
164165
assert eq != ne
165166

166-
eq_a = check(assert_type(p == c1, np_ndarray_bool), np.ndarray)
167-
ne_q = check(assert_type(p != c1, np_ndarray_bool), np.ndarray)
167+
eq_a = check(assert_type(p == c_period_index, np_ndarray_bool), np.ndarray)
168+
ne_q = check(assert_type(p != c_period_index, np_ndarray_bool), np.ndarray)
168169
assert (eq_a != ne_q).all()
169170

170-
eq = check(assert_type(c0 == p, bool), bool)
171-
ne = check(assert_type(c0 != p, bool), bool)
171+
eq = check(assert_type(c_period == p, bool), bool)
172+
ne = check(assert_type(c_period != p, bool), bool)
172173
assert eq != ne
173174

174-
eq_a = check(assert_type(c1 == p, np_ndarray_bool), np.ndarray)
175-
ne_a = check(assert_type(c1 != p, np_ndarray_bool), np.ndarray)
175+
eq_a = check(assert_type(c_period_index == p, np_ndarray_bool), np.ndarray)
176+
ne_a = check(assert_type(c_period_index != p, np_ndarray_bool), np.ndarray)
176177
assert (eq_a != ne_q).all()
177178

178-
gt = check(assert_type(p > c0, bool), bool)
179-
le = check(assert_type(p <= c0, bool), bool)
179+
gt = check(assert_type(p > c_period, bool), bool)
180+
le = check(assert_type(p <= c_period, bool), bool)
180181
assert gt != le
181182

182-
gt_a = check(assert_type(p > c1, np_ndarray_bool), np.ndarray)
183-
le_a = check(assert_type(p <= c1, np_ndarray_bool), np.ndarray)
183+
gt_a = check(assert_type(p > c_period_index, np_ndarray_bool), np.ndarray)
184+
le_a = check(assert_type(p <= c_period_index, np_ndarray_bool), np.ndarray)
184185
assert (gt_a != le_a).all()
185186

186-
gt = check(assert_type(c0 > p, bool), bool)
187-
le = check(assert_type(c0 <= p, bool), bool)
187+
gt = check(assert_type(c_period > p, bool), bool)
188+
le = check(assert_type(c_period <= p, bool), bool)
188189
assert gt != le
189190

190-
gt_a = check(assert_type(c1 > p, np_ndarray_bool), np.ndarray)
191-
le_a = check(assert_type(c1 <= p, np_ndarray_bool), np.ndarray)
191+
gt_a = check(assert_type(c_period_index > p, np_ndarray_bool), np.ndarray)
192+
le_a = check(assert_type(c_period_index <= p, np_ndarray_bool), np.ndarray)
192193
assert (gt_a != le_a).all()
193194

194-
lt = check(assert_type(p < c0, bool), bool)
195-
ge = check(assert_type(p >= c0, bool), bool)
195+
lt = check(assert_type(p < c_period, bool), bool)
196+
ge = check(assert_type(p >= c_period, bool), bool)
196197
assert lt != ge
197198

198-
lt_a = check(assert_type(p < c1, np_ndarray_bool), np.ndarray)
199-
ge_a = check(assert_type(p >= c1, np_ndarray_bool), np.ndarray)
199+
lt_a = check(assert_type(p < c_period_index, np_ndarray_bool), np.ndarray)
200+
ge_a = check(assert_type(p >= c_period_index, np_ndarray_bool), np.ndarray)
200201
assert (lt_a != ge_a).all()
201202

202-
lt = check(assert_type(c0 < p, bool), bool)
203-
ge = check(assert_type(c0 >= p, bool), bool)
203+
lt = check(assert_type(c_period < p, bool), bool)
204+
ge = check(assert_type(c_period >= p, bool), bool)
204205
assert lt != ge
205206

206-
lt_a = check(assert_type(c1 < p, np_ndarray_bool), np.ndarray)
207-
ge_a = check(assert_type(c1 >= p, np_ndarray_bool), np.ndarray)
207+
lt_a = check(assert_type(c_period_index < p, np_ndarray_bool), np.ndarray)
208+
ge_a = check(assert_type(c_period_index >= p, np_ndarray_bool), np.ndarray)
208209
assert (lt_a != ge_a).all()
209210

210211

0 commit comments

Comments
 (0)