From 2862b3a6bfffef2edbff70bd8cf3e059610b647a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torsten=20W=C3=B6rtwein?= Date: Sun, 24 Dec 2023 11:00:09 -0500 Subject: [PATCH 1/5] Series(Mapping) --- pandas-stubs/core/series.pyi | 13 ++++++++----- tests/test_series.py | 29 +++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 5 deletions(-) diff --git a/pandas-stubs/core/series.pyi b/pandas-stubs/core/series.pyi index 2a42e8a3d..0c858c0f0 100644 --- a/pandas-stubs/core/series.pyi +++ b/pandas-stubs/core/series.pyi @@ -228,6 +228,7 @@ class Series(IndexOpsMixin[S1], NDFrame): cls, data: DatetimeIndex | Sequence[np.datetime64 | datetime] + | Mapping[Any, np.datetime64 | datetime] | np.datetime64 | datetime, index: Axes | None = ..., @@ -239,7 +240,7 @@ class Series(IndexOpsMixin[S1], NDFrame): @overload def __new__( # type: ignore[overload-overlap] cls, - data: _ListLike, + data: Iterable, index: Axes | None = ..., *, dtype: TimestampDtypeArg, @@ -261,6 +262,7 @@ class Series(IndexOpsMixin[S1], NDFrame): cls, data: TimedeltaIndex | Sequence[np.timedelta64 | timedelta] + | Mapping[Any, np.timedelta64 | timedelta] | np.timedelta64 | timedelta, index: Axes | None = ..., @@ -274,7 +276,8 @@ class Series(IndexOpsMixin[S1], NDFrame): cls, data: IntervalIndex[Interval[_OrderableT]] | Interval[_OrderableT] - | Sequence[Interval[_OrderableT]], + | Sequence[Interval[_OrderableT]] + | Mapping[Any, Interval[_OrderableT]], index: Axes | None = ..., *, dtype: Literal["Interval"] = ..., @@ -284,7 +287,7 @@ class Series(IndexOpsMixin[S1], NDFrame): @overload def __new__( cls, - data: Scalar | _ListLike | dict[int, Any] | dict[_str, Any] | None, + data: Scalar | Iterable | None, index: Axes | None = ..., *, dtype: type[S1], @@ -294,7 +297,7 @@ class Series(IndexOpsMixin[S1], NDFrame): @overload def __new__( cls, - data: S1 | _ListLike[S1] | dict[int, S1] | dict[_str, S1], + data: S1 | Mapping[Any, S1] | _ListLike[S1], index: Axes | None = ..., *, dtype: Dtype = ..., @@ -304,7 +307,7 @@ class Series(IndexOpsMixin[S1], NDFrame): @overload def __new__( cls, - data: Scalar | _ListLike | dict[int, Any] | dict[_str, Any] | None = ..., + data: Scalar | Iterable | None = ..., index: Axes | None = ..., *, dtype: Dtype = ..., diff --git a/tests/test_series.py b/tests/test_series.py index ba6ae57f7..1421cf6f2 100644 --- a/tests/test_series.py +++ b/tests/test_series.py @@ -2860,3 +2860,32 @@ def test_round() -> None: def test_series_new_empty() -> None: # GH 826 check(assert_type(pd.Series(), "pd.Series[Any]"), pd.Series) + + +def test_series_mapping() -> None: + # GH 831 + check( + assert_type( + pd.Series( + { + pd.Timestamp(2023, 1, 2): "b", + } + ), + "pd.Series[str]", + ), + pd.Series, + str, + ) + + check( + assert_type( + pd.Series( + { + ("a", "b"): "c", + } + ), + "pd.Series[str]", + ), + pd.Series, + str, + ) From 2f50dc4e8d852a5875f6276b81b4a801d0863bdd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torsten=20W=C3=B6rtwein?= Date: Sun, 24 Dec 2023 18:24:29 -0500 Subject: [PATCH 2/5] Hashable keys --- pandas-stubs/core/series.pyi | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pandas-stubs/core/series.pyi b/pandas-stubs/core/series.pyi index 0c858c0f0..c6b380c09 100644 --- a/pandas-stubs/core/series.pyi +++ b/pandas-stubs/core/series.pyi @@ -228,7 +228,7 @@ class Series(IndexOpsMixin[S1], NDFrame): cls, data: DatetimeIndex | Sequence[np.datetime64 | datetime] - | Mapping[Any, np.datetime64 | datetime] + | Mapping[HashableT1, np.datetime64 | datetime] | np.datetime64 | datetime, index: Axes | None = ..., @@ -262,7 +262,7 @@ class Series(IndexOpsMixin[S1], NDFrame): cls, data: TimedeltaIndex | Sequence[np.timedelta64 | timedelta] - | Mapping[Any, np.timedelta64 | timedelta] + | Mapping[HashableT1, np.timedelta64 | timedelta] | np.timedelta64 | timedelta, index: Axes | None = ..., @@ -277,7 +277,7 @@ class Series(IndexOpsMixin[S1], NDFrame): data: IntervalIndex[Interval[_OrderableT]] | Interval[_OrderableT] | Sequence[Interval[_OrderableT]] - | Mapping[Any, Interval[_OrderableT]], + | Mapping[HashableT1, Interval[_OrderableT]], index: Axes | None = ..., *, dtype: Literal["Interval"] = ..., @@ -297,7 +297,7 @@ class Series(IndexOpsMixin[S1], NDFrame): @overload def __new__( cls, - data: S1 | Mapping[Any, S1] | _ListLike[S1], + data: S1 | Mapping[HashableT1, S1] | _ListLike[S1], index: Axes | None = ..., *, dtype: Dtype = ..., From 828921849df743dcda453cf778685a2d0650552e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torsten=20W=C3=B6rtwein?= Date: Mon, 25 Dec 2023 13:54:17 -0500 Subject: [PATCH 3/5] empty From 59234bf459a654b1e57ac31fc993960ab4b3f922 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torsten=20W=C3=B6rtwein?= Date: Tue, 26 Dec 2023 12:36:25 -0500 Subject: [PATCH 4/5] incremental changes --- pandas-stubs/core/series.pyi | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/pandas-stubs/core/series.pyi b/pandas-stubs/core/series.pyi index c6b380c09..f9f861bf4 100644 --- a/pandas-stubs/core/series.pyi +++ b/pandas-stubs/core/series.pyi @@ -217,7 +217,7 @@ class _LocIndexerSeries(_LocIndexer, Generic[S1]): ) -> None: ... _ListLike: TypeAlias = ( - ArrayLike | dict[_str, np.ndarray] | Sequence[S1] | IndexOpsMixin[S1] + ArrayLike | dict[str, np.ndarray] | Sequence[S1] | IndexOpsMixin[S1] ) class Series(IndexOpsMixin[S1], NDFrame): @@ -228,7 +228,7 @@ class Series(IndexOpsMixin[S1], NDFrame): cls, data: DatetimeIndex | Sequence[np.datetime64 | datetime] - | Mapping[HashableT1, np.datetime64 | datetime] + | dict[HashableT1, np.datetime64 | datetime] | np.datetime64 | datetime, index: Axes | None = ..., @@ -240,7 +240,7 @@ class Series(IndexOpsMixin[S1], NDFrame): @overload def __new__( # type: ignore[overload-overlap] cls, - data: Iterable, + data: _ListLike, index: Axes | None = ..., *, dtype: TimestampDtypeArg, @@ -262,7 +262,7 @@ class Series(IndexOpsMixin[S1], NDFrame): cls, data: TimedeltaIndex | Sequence[np.timedelta64 | timedelta] - | Mapping[HashableT1, np.timedelta64 | timedelta] + | dict[HashableT1, np.timedelta64 | timedelta] | np.timedelta64 | timedelta, index: Axes | None = ..., @@ -277,7 +277,7 @@ class Series(IndexOpsMixin[S1], NDFrame): data: IntervalIndex[Interval[_OrderableT]] | Interval[_OrderableT] | Sequence[Interval[_OrderableT]] - | Mapping[HashableT1, Interval[_OrderableT]], + | dict[HashableT1, Interval[_OrderableT]], index: Axes | None = ..., *, dtype: Literal["Interval"] = ..., @@ -287,7 +287,7 @@ class Series(IndexOpsMixin[S1], NDFrame): @overload def __new__( cls, - data: Scalar | Iterable | None, + data: Scalar | _ListLike | dict[HashableT1, Any] | None, index: Axes | None = ..., *, dtype: type[S1], @@ -297,7 +297,7 @@ class Series(IndexOpsMixin[S1], NDFrame): @overload def __new__( cls, - data: S1 | Mapping[HashableT1, S1] | _ListLike[S1], + data: S1 | _ListLike[S1] | dict[HashableT1, S1], index: Axes | None = ..., *, dtype: Dtype = ..., @@ -307,7 +307,7 @@ class Series(IndexOpsMixin[S1], NDFrame): @overload def __new__( cls, - data: Scalar | Iterable | None = ..., + data: Scalar | _ListLike | dict[HashableT1, Any] | None = ..., index: Axes | None = ..., *, dtype: Dtype = ..., From ef2ea630edfe59c61a100f1a2a80f5b494984ae4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torsten=20W=C3=B6rtwein?= Date: Tue, 26 Dec 2023 12:43:17 -0500 Subject: [PATCH 5/5] _str --- pandas-stubs/core/series.pyi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pandas-stubs/core/series.pyi b/pandas-stubs/core/series.pyi index e7525f8b4..c40f58209 100644 --- a/pandas-stubs/core/series.pyi +++ b/pandas-stubs/core/series.pyi @@ -217,7 +217,7 @@ class _LocIndexerSeries(_LocIndexer, Generic[S1]): ) -> None: ... _ListLike: TypeAlias = ( - ArrayLike | dict[str, np.ndarray] | Sequence[S1] | IndexOpsMixin[S1] + ArrayLike | dict[_str, np.ndarray] | Sequence[S1] | IndexOpsMixin[S1] ) class Series(IndexOpsMixin[S1], NDFrame):