diff --git a/pandas/core/indexes/category.py b/pandas/core/indexes/category.py index 06df8f85cded7..4b79ac9faf769 100644 --- a/pandas/core/indexes/category.py +++ b/pandas/core/indexes/category.py @@ -224,7 +224,6 @@ def _simple_new(cls, values: Categorical, name: Label = None): result._cache = {} result._reset_identity() - result._no_setting_name = False return result # -------------------------------------------------------------------- diff --git a/pandas/core/indexes/datetimelike.py b/pandas/core/indexes/datetimelike.py index 40a6086f69f85..88383cb7bbb6a 100644 --- a/pandas/core/indexes/datetimelike.py +++ b/pandas/core/indexes/datetimelike.py @@ -2,7 +2,7 @@ Base and utility classes for tseries type pandas objects. """ from datetime import datetime -from typing import TYPE_CHECKING, Any, List, Optional, Tuple, TypeVar, Union, cast +from typing import TYPE_CHECKING, Any, List, Optional, Tuple, Type, TypeVar, Union, cast import numpy as np @@ -88,6 +88,7 @@ class DatetimeIndexOpsMixin(NDArrayBackedExtensionIndex): _can_hold_strings = False _data: Union[DatetimeArray, TimedeltaArray, PeriodArray] + _data_cls: Union[Type[DatetimeArray], Type[TimedeltaArray], Type[PeriodArray]] freq: Optional[BaseOffset] freqstr: Optional[str] _resolution_obj: Resolution @@ -100,6 +101,25 @@ class DatetimeIndexOpsMixin(NDArrayBackedExtensionIndex): ) _hasnans = hasnans # for index / array -agnostic code + @classmethod + def _simple_new( + cls, + values: Union[DatetimeArray, TimedeltaArray, PeriodArray], + name: Label = None, + ): + assert isinstance(values, cls._data_cls), type(values) + + result = object.__new__(cls) + result._data = values + result._name = name + result._cache = {} + + # For groupby perf. See note in indexes/base about _index_data + result._index_data = values._data + + result._reset_identity() + return result + @property def _is_all_dates(self) -> bool: return True diff --git a/pandas/core/indexes/datetimes.py b/pandas/core/indexes/datetimes.py index a1a1a83555f95..73f977c3dadf9 100644 --- a/pandas/core/indexes/datetimes.py +++ b/pandas/core/indexes/datetimes.py @@ -14,7 +14,7 @@ to_offset, ) from pandas._libs.tslibs.offsets import prefix_mapping -from pandas._typing import DtypeObj, Label +from pandas._typing import DtypeObj from pandas.errors import InvalidIndexError from pandas.util._decorators import cache_readonly, doc @@ -220,6 +220,7 @@ class DatetimeIndex(DatetimeTimedeltaMixin): _typ = "datetimeindex" + _data_cls = DatetimeArray _engine_type = libindex.DatetimeEngine _supports_partial_string_indexing = True @@ -319,20 +320,6 @@ def __new__( subarr = cls._simple_new(dtarr, name=name) return subarr - @classmethod - def _simple_new(cls, values: DatetimeArray, name: Label = None): - assert isinstance(values, DatetimeArray), type(values) - - result = object.__new__(cls) - result._data = values - result.name = name - result._cache = {} - result._no_setting_name = False - # For groupby perf. See note in indexes/base about _index_data - result._index_data = values._data - result._reset_identity() - return result - # -------------------------------------------------------------------- @cache_readonly diff --git a/pandas/core/indexes/interval.py b/pandas/core/indexes/interval.py index 2aec86c9cdfae..bfbb4a00638fc 100644 --- a/pandas/core/indexes/interval.py +++ b/pandas/core/indexes/interval.py @@ -239,7 +239,6 @@ def _simple_new(cls, array: IntervalArray, name: Label = None): result._data = array result.name = name result._cache = {} - result._no_setting_name = False result._reset_identity() return result diff --git a/pandas/core/indexes/period.py b/pandas/core/indexes/period.py index 44c20ad0de848..c0a3b95499b3d 100644 --- a/pandas/core/indexes/period.py +++ b/pandas/core/indexes/period.py @@ -146,6 +146,7 @@ class PeriodIndex(DatetimeIndexOpsMixin, Int64Index): _data: PeriodArray freq: BaseOffset + _data_cls = PeriodArray _engine_type = libindex.PeriodEngine _supports_partial_string_indexing = True @@ -244,28 +245,6 @@ def __new__( return cls._simple_new(data, name=name) - @classmethod - def _simple_new(cls, values: PeriodArray, name: Label = None): - """ - Create a new PeriodIndex. - - Parameters - ---------- - values : PeriodArray - Values that can be converted to a PeriodArray without inference - or coercion. - """ - assert isinstance(values, PeriodArray), type(values) - - result = object.__new__(cls) - result._data = values - # For groupby perf. See note in indexes/base about _index_data - result._index_data = values._data - result.name = name - result._cache = {} - result._reset_identity() - return result - # ------------------------------------------------------------------------ # Data diff --git a/pandas/core/indexes/timedeltas.py b/pandas/core/indexes/timedeltas.py index cf5fa4bbb3d75..b6c626197eaf9 100644 --- a/pandas/core/indexes/timedeltas.py +++ b/pandas/core/indexes/timedeltas.py @@ -2,7 +2,7 @@ from pandas._libs import index as libindex, lib from pandas._libs.tslibs import Timedelta, to_offset -from pandas._typing import DtypeObj, Label +from pandas._typing import DtypeObj from pandas.errors import InvalidIndexError from pandas.util._decorators import doc @@ -103,6 +103,7 @@ class TimedeltaIndex(DatetimeTimedeltaMixin): _typ = "timedeltaindex" + _data_cls = TimedeltaArray _engine_type = libindex.TimedeltaEngine _comparables = ["name", "freq"] @@ -156,20 +157,6 @@ def __new__( ) return cls._simple_new(tdarr, name=name) - @classmethod - def _simple_new(cls, values: TimedeltaArray, name: Label = None): - assert isinstance(values, TimedeltaArray) - - result = object.__new__(cls) - result._data = values - result._name = name - result._cache = {} - # For groupby perf. See note in indexes/base about _index_data - result._index_data = values._data - - result._reset_identity() - return result - # ------------------------------------------------------------------- # Rendering Methods