diff --git a/pandas-stubs/core/indexes/datetimes.pyi b/pandas-stubs/core/indexes/datetimes.pyi index acbaeae5e..4c93bf4ad 100644 --- a/pandas-stubs/core/indexes/datetimes.pyi +++ b/pandas-stubs/core/indexes/datetimes.pyi @@ -20,6 +20,7 @@ from pandas import ( TimedeltaIndex, Timestamp, ) +from pandas.core.arrays import DatetimeArray from pandas.core.indexes.accessors import DatetimeIndexProperties from pandas.core.indexes.datetimelike import DatetimeTimedeltaMixin from pandas.core.series import ( @@ -61,6 +62,11 @@ class DatetimeIndex( name: Hashable = ..., ) -> Self: ... def __reduce__(self): ... + + # Override the array property to return DatetimeArray instead of ExtensionArray + @property + def array(self) -> DatetimeArray: ... + # various ignores needed for mypy, as we do want to restrict what can be used in # arithmetic for these types @overload # type: ignore[override] diff --git a/tests/indexes/test_indexes.py b/tests/indexes/test_indexes.py index ba7686876..eb6a790b4 100644 --- a/tests/indexes/test_indexes.py +++ b/tests/indexes/test_indexes.py @@ -12,6 +12,7 @@ import numpy as np from numpy import typing as npt import pandas as pd +from pandas.core.arrays import DatetimeArray from pandas.core.arrays.categorical import Categorical from pandas.core.indexes.base import Index from typing_extensions import ( @@ -1516,3 +1517,14 @@ def test_period_index_asof_locs() -> None: assert_type(idx.asof_locs(where, mask), np_1darray[np.intp]), np_1darray[np.intp], ) + + +def test_datetime_index_array_property() -> None: + """Test that DatetimeIndex.array returns DatetimeArray instead of ExtensionArray.""" + # Test with pd.to_datetime().array - this is the main issue reported + arr = pd.to_datetime(["2020-01-01", "2020-01-02"]).array + check(assert_type(arr, DatetimeArray), DatetimeArray) + + # Test with DatetimeIndex constructor directly + dt_index = pd.DatetimeIndex(["2020-01-01", "2020-01-02"]) + check(assert_type(dt_index.array, DatetimeArray), DatetimeArray)