From fac9e801f52e4655ce2c4d0c88f98a42a45d83f2 Mon Sep 17 00:00:00 2001 From: yusufcank34 Date: Wed, 29 Oct 2025 18:29:16 +0300 Subject: [PATCH 1/4] Index: ensure Index(DatetimeIndex) returns DatetimeIndex (fixes #1440) --- pandas-stubs/core/indexes/base.pyi | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/pandas-stubs/core/indexes/base.pyi b/pandas-stubs/core/indexes/base.pyi index 25c975eff..ee98fe979 100644 --- a/pandas-stubs/core/indexes/base.pyi +++ b/pandas-stubs/core/indexes/base.pyi @@ -274,6 +274,16 @@ class Index(IndexOpsMixin[S1], ElementOpsMixin[S1]): name: Hashable = ..., tupleize_cols: bool = ..., ) -> IntervalIndex[Interval[Any]]: ... + @overload + def __new__( + cls, + data: DatetimeIndex, + *, + dtype: TimestampDtypeArg | None = ..., + copy: bool = ..., + name: Hashable = ..., + tupleize_cols: bool = ..., + ) -> DatetimeIndex: ... # generic overloads @overload def __new__( From dbfe078db3c48fc45efefe20e9afd238aa54fc44 Mon Sep 17 00:00:00 2001 From: yusufcank34 Date: Wed, 29 Oct 2025 20:58:56 +0300 Subject: [PATCH 2/4] Add isolated test for Index(DatetimeIndex) typing (GH#1440) --- tests/indexes/test_datetime_index_1440.py | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 tests/indexes/test_datetime_index_1440.py diff --git a/tests/indexes/test_datetime_index_1440.py b/tests/indexes/test_datetime_index_1440.py new file mode 100644 index 000000000..26d2d541c --- /dev/null +++ b/tests/indexes/test_datetime_index_1440.py @@ -0,0 +1,8 @@ +from typing import assert_type +import pandas as pd + +# GH#1440 – constructing Index from DatetimeIndex should return DatetimeIndex +data = pd.date_range("2022-01-01", "2022-01-03", freq="D") +idx = pd.Index(data, name="date") + +assert_type(idx, pd.DatetimeIndex) From 773fdfc5fe7b8ce066997bdec17800e0e8fce049 Mon Sep 17 00:00:00 2001 From: yusufcank34 Date: Wed, 29 Oct 2025 23:43:05 +0300 Subject: [PATCH 3/4] Fix: Index(DatetimeIndex) now returns DatetimeIndex; consolidated test (fixes #1440) --- pandas-stubs/core/indexes/base.pyi | 4 +++- tests/indexes/test_datetime_index.py | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/pandas-stubs/core/indexes/base.pyi b/pandas-stubs/core/indexes/base.pyi index ee98fe979..907e8c421 100644 --- a/pandas-stubs/core/indexes/base.pyi +++ b/pandas-stubs/core/indexes/base.pyi @@ -187,7 +187,9 @@ class Index(IndexOpsMixin[S1], ElementOpsMixin[S1]): @overload def __new__( cls, - data: Sequence[np.datetime64 | datetime] | IndexOpsMixin[datetime], + data: ( + Sequence[np.datetime64 | datetime] | IndexOpsMixin[datetime] | DatetimeIndex + ), *, dtype: TimestampDtypeArg = ..., copy: bool = ..., diff --git a/tests/indexes/test_datetime_index.py b/tests/indexes/test_datetime_index.py index 221a12607..22d07e6b8 100644 --- a/tests/indexes/test_datetime_index.py +++ b/tests/indexes/test_datetime_index.py @@ -24,7 +24,7 @@ def test_index_relops() -> None: ) x = pd.Timestamp("2022-01-17") idx = check( - assert_type(pd.Index(data, name="date"), "pd.Index[pd.Timestamp]"), pd.Index + assert_type(pd.Index(data, name="date"), pd.DatetimeIndex), pd.DatetimeIndex ) check(assert_type(data[x <= idx], pd.DatetimeIndex), pd.DatetimeIndex) check(assert_type(data[x < idx], pd.DatetimeIndex), pd.DatetimeIndex) From c5b0d15370dab9e97b9a35e80167f1d8cf8d41bc Mon Sep 17 00:00:00 2001 From: yusufcank34 Date: Thu, 30 Oct 2025 21:49:38 +0300 Subject: [PATCH 4/4] Remove redundant test_datetime_index_1440.py and run pre-commit --- tests/indexes/test_datetime_index_1440.py | 8 -------- 1 file changed, 8 deletions(-) delete mode 100644 tests/indexes/test_datetime_index_1440.py diff --git a/tests/indexes/test_datetime_index_1440.py b/tests/indexes/test_datetime_index_1440.py deleted file mode 100644 index 26d2d541c..000000000 --- a/tests/indexes/test_datetime_index_1440.py +++ /dev/null @@ -1,8 +0,0 @@ -from typing import assert_type -import pandas as pd - -# GH#1440 – constructing Index from DatetimeIndex should return DatetimeIndex -data = pd.date_range("2022-01-01", "2022-01-03", freq="D") -idx = pd.Index(data, name="date") - -assert_type(idx, pd.DatetimeIndex)