Skip to content

Commit 33b5dd9

Browse files
GH1379 Remove PeriodSeries
1 parent b197a8b commit 33b5dd9

File tree

5 files changed

+50
-38
lines changed

5 files changed

+50
-38
lines changed

pandas-stubs/_libs/tslibs/period.pyi

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ from pandas import (
1414
)
1515
from pandas.core.series import (
1616
OffsetSeries,
17-
PeriodSeries,
1817
)
1918
from typing_extensions import TypeAlias
2019

@@ -85,7 +84,7 @@ class Period(PeriodMixin):
8584
@overload
8685
def __sub__(self, other: PeriodIndex) -> Index: ...
8786
@overload
88-
def __sub__(self, other: Series[Timedelta]) -> PeriodSeries: ...
87+
def __sub__(self, other: Series[Timedelta]) -> Series[Period]: ...
8988
@overload
9089
def __sub__(self, other: TimedeltaIndex) -> PeriodIndex: ...
9190
@overload
@@ -95,15 +94,15 @@ class Period(PeriodMixin):
9594
@overload
9695
def __add__(self, other: Index) -> PeriodIndex: ...
9796
@overload
98-
def __add__(self, other: OffsetSeries | Series[Timedelta]) -> PeriodSeries: ...
97+
def __add__(self, other: OffsetSeries | Series[Timedelta]) -> Series[Period]: ...
9998
# ignore[misc] here because we know all other comparisons
10099
# are False, so we use Literal[False]
101100
@overload
102101
def __eq__(self, other: Period) -> bool: ... # type: ignore[overload-overlap] # pyright: ignore[reportOverlappingOverload]
103102
@overload
104103
def __eq__(self, other: Index) -> np_1darray[np.bool]: ... # type: ignore[overload-overlap]
105104
@overload
106-
def __eq__(self, other: PeriodSeries) -> Series[bool]: ... # type: ignore[overload-overlap]
105+
def __eq__(self, other: Series[Period]) -> Series[bool]: ... # type: ignore[overload-overlap]
107106
@overload
108107
def __eq__(self, other: np_ndarray[ShapeT, np.object_]) -> np_ndarray[ShapeT, np.bool]: ... # type: ignore[overload-overlap]
109108
@overload
@@ -113,7 +112,7 @@ class Period(PeriodMixin):
113112
@overload
114113
def __ge__(self, other: PeriodIndex) -> np_1darray[np.bool]: ...
115114
@overload
116-
def __ge__(self, other: PeriodSeries) -> Series[bool]: ...
115+
def __ge__(self, other: Series[Period]) -> Series[bool]: ...
117116
@overload
118117
def __ge__(
119118
self, other: np_ndarray[ShapeT, np.object_]
@@ -123,7 +122,7 @@ class Period(PeriodMixin):
123122
@overload
124123
def __gt__(self, other: PeriodIndex) -> np_1darray[np.bool]: ...
125124
@overload
126-
def __gt__(self, other: PeriodSeries) -> Series[bool]: ...
125+
def __gt__(self, other: Series[Period]) -> Series[bool]: ...
127126
@overload
128127
def __gt__(
129128
self, other: np_ndarray[ShapeT, np.object_]
@@ -133,7 +132,7 @@ class Period(PeriodMixin):
133132
@overload
134133
def __le__(self, other: PeriodIndex) -> np_1darray[np.bool]: ...
135134
@overload
136-
def __le__(self, other: PeriodSeries) -> Series[bool]: ...
135+
def __le__(self, other: Series[Period]) -> Series[bool]: ...
137136
@overload
138137
def __le__(
139138
self, other: np_ndarray[ShapeT, np.object_]
@@ -143,7 +142,7 @@ class Period(PeriodMixin):
143142
@overload
144143
def __lt__(self, other: PeriodIndex) -> np_1darray[np.bool]: ...
145144
@overload
146-
def __lt__(self, other: PeriodSeries) -> Series[bool]: ...
145+
def __lt__(self, other: Series[Period]) -> Series[bool]: ...
147146
@overload
148147
def __lt__(
149148
self, other: np_ndarray[ShapeT, np.object_]
@@ -155,7 +154,7 @@ class Period(PeriodMixin):
155154
@overload
156155
def __ne__(self, other: Index) -> np_1darray[np.bool]: ... # type: ignore[overload-overlap]
157156
@overload
158-
def __ne__(self, other: PeriodSeries) -> Series[bool]: ... # type: ignore[overload-overlap]
157+
def __ne__(self, other: Series[Period]) -> Series[bool]: ... # type: ignore[overload-overlap]
159158
@overload
160159
def __ne__(self, other: np_ndarray[ShapeT, np.object_]) -> np_ndarray[ShapeT, np.bool]: ... # type: ignore[overload-overlap]
161160
@overload

pandas-stubs/core/indexes/accessors.pyi

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,13 @@ from pandas.core.arrays import (
2828
from pandas.core.base import NoNewAttributesMixin
2929
from pandas.core.frame import DataFrame
3030
from pandas.core.series import (
31-
PeriodSeries,
3231
Series,
3332
)
3433
from typing_extensions import Never
3534

3635
from pandas._libs.tslibs import BaseOffset
3736
from pandas._libs.tslibs.offsets import DateOffset
37+
from pandas._libs.tslibs.period import Period
3838
from pandas._typing import (
3939
S1,
4040
TimeAmbiguous,
@@ -208,7 +208,7 @@ _DTNormalizeReturnType = TypeVar(
208208
)
209209
_DTStrKindReturnType = TypeVar("_DTStrKindReturnType", bound=Series[str] | Index)
210210
_DTToPeriodReturnType = TypeVar(
211-
"_DTToPeriodReturnType", bound=PeriodSeries | PeriodIndex
211+
"_DTToPeriodReturnType", bound=Series[Period] | PeriodIndex
212212
)
213213

214214
class _DatetimeLikeNoTZMethods(
@@ -385,7 +385,7 @@ class CombinedDatetimelikeProperties(
385385
str,
386386
Series[Timestamp],
387387
Series[str],
388-
PeriodSeries,
388+
Series[Period],
389389
],
390390
_TimedeltaPropertiesNoRounding[Series[int], Series[float]],
391391
_PeriodProperties,
@@ -400,7 +400,7 @@ class TimestampProperties(
400400
str,
401401
Series[Timestamp],
402402
Series[str],
403-
PeriodSeries,
403+
Series[Period],
404404
]
405405
): ...
406406

@@ -438,6 +438,8 @@ class _dtDescriptor(CombinedDatetimelikeProperties, Generic[S1]):
438438
@overload
439439
def __get__(self, instance: Series[Never], owner: Any) -> Never: ...
440440
@overload
441+
def __get__(self, instance: Series[Period], owner: Any) -> PeriodProperties: ...
442+
@overload
441443
def __get__(
442444
self, instance: Series[Timestamp], owner: Any
443445
) -> TimestampProperties: ...

pandas-stubs/core/series.pyi

Lines changed: 28 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -70,10 +70,7 @@ from pandas.core.generic import NDFrame
7070
from pandas.core.groupby.generic import SeriesGroupBy
7171
from pandas.core.groupby.groupby import BaseGroupBy
7272
from pandas.core.indexers import BaseIndexer
73-
from pandas.core.indexes.accessors import (
74-
PeriodProperties,
75-
_dtDescriptor,
76-
)
73+
from pandas.core.indexes.accessors import _dtDescriptor
7774
from pandas.core.indexes.category import CategoricalIndex
7875
from pandas.core.indexes.datetimes import DatetimeIndex
7976
from pandas.core.indexes.interval import IntervalIndex
@@ -363,7 +360,7 @@ class Series(IndexOpsMixin[S1], NDFrame):
363360
dtype: PeriodDtype = ...,
364361
name: Hashable = ...,
365362
copy: bool = ...,
366-
) -> PeriodSeries: ...
363+
) -> Series[Period]: ...
367364
@overload
368365
def __new__(
369366
cls,
@@ -851,6 +848,8 @@ class Series(IndexOpsMixin[S1], NDFrame):
851848
@overload
852849
def diff(self: Series[Timedelta], periods: int = ...) -> Series[Timedelta]: ... # type: ignore[overload-overlap]
853850
@overload
851+
def diff(self: Series[Period], periods: int = ...) -> OffsetSeries: ... # type: ignore[overload-overlap]
852+
@overload
854853
def diff(self, periods: int = ...) -> Series[float]: ...
855854
def autocorr(self, lag: int = 1) -> float: ...
856855
@overload
@@ -1695,7 +1694,7 @@ class Series(IndexOpsMixin[S1], NDFrame):
16951694
),
16961695
) -> Series[Timedelta]: ...
16971696
@overload
1698-
def __add__(self: Series[Timedelta], other: Period) -> PeriodSeries: ...
1697+
def __add__(self: Series[Timedelta], other: Period) -> Series[Period]: ...
16991698
@overload
17001699
def __add__(self: Series[bool], other: bool | Sequence[bool]) -> Series[bool]: ...
17011700
@overload
@@ -1822,7 +1821,7 @@ class Series(IndexOpsMixin[S1], NDFrame):
18221821
level: Level | None = None,
18231822
fill_value: float | None = None,
18241823
axis: int = 0,
1825-
) -> PeriodSeries: ...
1824+
) -> Series[Period]: ...
18261825
@overload
18271826
def add(
18281827
self: Series[bool],
@@ -1957,7 +1956,7 @@ class Series(IndexOpsMixin[S1], NDFrame):
19571956
),
19581957
) -> Series[Timedelta]: ...
19591958
@overload
1960-
def __radd__(self: Series[Timedelta], other: Period) -> PeriodSeries: ...
1959+
def __radd__(self: Series[Timedelta], other: Period) -> Series[Period]: ...
19611960
@overload
19621961
def __radd__(self: Series[bool], other: bool | Sequence[bool]) -> Series[bool]: ...
19631962
@overload
@@ -2084,7 +2083,7 @@ class Series(IndexOpsMixin[S1], NDFrame):
20842083
level: Level | None = None,
20852084
fill_value: float | None = None,
20862085
axis: int = 0,
2087-
) -> PeriodSeries: ...
2086+
) -> Series[Period]: ...
20882087
@overload
20892088
def radd(
20902089
self: Series[bool],
@@ -3079,7 +3078,7 @@ class Series(IndexOpsMixin[S1], NDFrame):
30793078
other: complex | NumListLike | Index[T_COMPLEX] | Series[T_COMPLEX],
30803079
) -> Series: ...
30813080
@overload
3082-
def __sub__(self, other: Index[Never] | Series[Never]) -> Series: ...
3081+
def __sub__(self, other: Index[Never] | Series[Never]) -> Series: ... # type: ignore[overload-overlap]
30833082
@overload
30843083
def __sub__(
30853084
self: Series[bool],
@@ -3201,6 +3200,8 @@ class Series(IndexOpsMixin[S1], NDFrame):
32013200
),
32023201
) -> Series[Timedelta]: ...
32033202
@overload
3203+
def __sub__(self: Series[Period], other: Series[Period]) -> OffsetSeries: ...
3204+
@overload
32043205
def sub(
32053206
self: Series[Never],
32063207
other: complex | NumListLike | Index[T_COMPLEX] | Series[T_COMPLEX],
@@ -4623,6 +4624,22 @@ class Series(IndexOpsMixin[S1], NDFrame):
46234624
**kwargs,
46244625
) -> np_1darray[GenericT]: ...
46254626
@overload
4627+
def to_numpy(
4628+
self: Series[Period],
4629+
dtype: None = None,
4630+
copy: bool = False,
4631+
na_value: Scalar = ...,
4632+
**kwargs,
4633+
) -> np_1darray[np.object_]: ...
4634+
@overload
4635+
def to_numpy(
4636+
self: Series[Period],
4637+
dtype: type[np.int64],
4638+
copy: bool = False,
4639+
na_value: Scalar = ...,
4640+
**kwargs,
4641+
) -> np_1darray[np.int64]: ...
4642+
@overload
46264643
def to_numpy( # pyright: ignore[reportIncompatibleMethodOverride]
46274644
self,
46284645
dtype: DTypeLike | None = None,
@@ -4716,15 +4733,10 @@ class _SeriesSubclassBase(Series[S1], Generic[S1, GenericT_co]):
47164733
**kwargs,
47174734
) -> np_1darray: ...
47184735

4719-
class PeriodSeries(_SeriesSubclassBase[Period, np.object_]):
4720-
@property
4721-
def dt(self) -> PeriodProperties: ... # type: ignore[override] # pyright: ignore[reportIncompatibleMethodOverride]
4722-
def __sub__(self, other: PeriodSeries) -> OffsetSeries: ... # type: ignore[override] # pyright: ignore[reportIncompatibleMethodOverride]
4723-
def diff(self, periods: int = ...) -> OffsetSeries: ... # type: ignore[override] # pyright: ignore[reportIncompatibleMethodOverride]
47244736

47254737
class OffsetSeries(_SeriesSubclassBase[BaseOffset, np.object_]):
47264738
@overload # type: ignore[override]
4727-
def __radd__(self, other: Period) -> PeriodSeries: ...
4739+
def __radd__(self, other: Period) -> Series[Period]: ...
47284740
@overload
47294741
def __radd__( # pyright: ignore[reportIncompatibleMethodOverride]
47304742
self, other: BaseOffset

tests/test_scalars.py

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,8 @@
4141
if TYPE_CHECKING:
4242
from pandas.core.series import (
4343
OffsetSeries,
44-
PeriodSeries,
4544
)
4645
else:
47-
PeriodSeries: TypeAlias = pd.Series
4846
OffsetSeries: TypeAlias = pd.Series
4947

5048
if not PD_LTE_23:
@@ -1861,7 +1859,7 @@ def test_period_add_subtract() -> None:
18611859
as_td_series = pd.Series(pd.timedelta_range(scale, scale, freq="D"))
18621860
check(assert_type(as_td_series, "pd.Series[pd.Timedelta]"), pd.Series, pd.Timedelta)
18631861
as_period_series = pd.Series(as_period_index)
1864-
check(assert_type(as_period_series, PeriodSeries), pd.Series, pd.Period)
1862+
check(assert_type(as_period_series, "pd.Series[pd.Period]"), pd.Series, pd.Period)
18651863
as_timedelta_idx = pd.timedelta_range(scale, scale, freq="D")
18661864
as_nat = pd.NaT
18671865

@@ -1876,20 +1874,20 @@ def test_period_add_subtract() -> None:
18761874
# https://github.com/pandas-dev/pandas/issues/50162
18771875
check(assert_type(p + offset_index, pd.PeriodIndex), pd.Index)
18781876

1879-
check(assert_type(p + as_td_series, PeriodSeries), pd.Series, pd.Period)
1877+
check(assert_type(p + as_td_series, "pd.Series[pd.Period]"), pd.Series, pd.Period)
18801878
check(assert_type(p + as_timedelta_idx, pd.PeriodIndex), pd.PeriodIndex)
18811879
check(assert_type(p + as_nat, NaTType), NaTType)
18821880
offset_series = as_period_series - as_period_series
18831881
check(assert_type(offset_series, OffsetSeries), pd.Series)
1884-
check(assert_type(p + offset_series, PeriodSeries), pd.Series, pd.Period)
1882+
check(assert_type(p + offset_series, "pd.Series[pd.Period]"), pd.Series, pd.Period)
18851883
check(assert_type(p - as_pd_td, pd.Period), pd.Period)
18861884
check(assert_type(p - as_dt_td, pd.Period), pd.Period)
18871885
check(assert_type(p - as_np_td, pd.Period), pd.Period)
18881886
check(assert_type(p - as_np_i64, pd.Period), pd.Period)
18891887
check(assert_type(p - as_int, pd.Period), pd.Period)
18901888
check(assert_type(offset_index, pd.Index), pd.Index)
18911889
check(assert_type(p - as_period, BaseOffset), Day)
1892-
check(assert_type(p - as_td_series, PeriodSeries), pd.Series, pd.Period)
1890+
check(assert_type(p - as_td_series, "pd.Series[pd.Period]"), pd.Series, pd.Period)
18931891
check(assert_type(p - as_timedelta_idx, pd.PeriodIndex), pd.PeriodIndex)
18941892
check(assert_type(p - as_nat, NaTType), NaTType)
18951893
check(assert_type(p - p.freq, pd.Period), pd.Period)
@@ -1912,7 +1910,7 @@ def test_period_add_subtract() -> None:
19121910
check(assert_type(as_int + p, pd.Period), pd.Period)
19131911
check(assert_type(p.__radd__(as_int), pd.Period), pd.Period)
19141912

1915-
check(assert_type(as_td_series + p, PeriodSeries), pd.Series, pd.Period)
1913+
check(assert_type(as_td_series + p, "pd.Series[pd.Period]"), pd.Series, pd.Period)
19161914

19171915
check(assert_type(as_timedelta_idx + p, pd.PeriodIndex), pd.PeriodIndex)
19181916

tests/test_timefuncs.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,6 @@
5353
from pandas.core.series import ( # noqa: F401
5454
IntervalSeries,
5555
OffsetSeries,
56-
PeriodSeries,
5756
)
5857

5958
if not PD_LTE_23:
@@ -392,7 +391,9 @@ def test_series_dt_accessors() -> None:
392391
check(assert_type(s0.dt.tz, Optional[dt.tzinfo]), type(None))
393392
check(assert_type(s0.dt.freq, Optional[str]), str)
394393
check(assert_type(s0.dt.isocalendar(), pd.DataFrame), pd.DataFrame)
395-
check(assert_type(s0.dt.to_period("D"), "PeriodSeries"), pd.Series, pd.Period)
394+
check(
395+
assert_type(s0.dt.to_period("D"), "pd.Series[pd.Period]"), pd.Series, pd.Period
396+
)
396397

397398
with pytest_warns_bounded(
398399
FutureWarning,

0 commit comments

Comments
 (0)