Skip to content

Commit 8724737

Browse files
authored
REF: share _simple_new (#37872)
1 parent b6f6957 commit 8724737

File tree

6 files changed

+26
-55
lines changed

6 files changed

+26
-55
lines changed

pandas/core/indexes/category.py

-1
Original file line numberDiff line numberDiff line change
@@ -224,7 +224,6 @@ def _simple_new(cls, values: Categorical, name: Label = None):
224224
result._cache = {}
225225

226226
result._reset_identity()
227-
result._no_setting_name = False
228227
return result
229228

230229
# --------------------------------------------------------------------

pandas/core/indexes/datetimelike.py

+21-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
Base and utility classes for tseries type pandas objects.
33
"""
44
from datetime import datetime
5-
from typing import TYPE_CHECKING, Any, List, Optional, Tuple, TypeVar, Union, cast
5+
from typing import TYPE_CHECKING, Any, List, Optional, Tuple, Type, TypeVar, Union, cast
66

77
import numpy as np
88

@@ -88,6 +88,7 @@ class DatetimeIndexOpsMixin(NDArrayBackedExtensionIndex):
8888

8989
_can_hold_strings = False
9090
_data: Union[DatetimeArray, TimedeltaArray, PeriodArray]
91+
_data_cls: Union[Type[DatetimeArray], Type[TimedeltaArray], Type[PeriodArray]]
9192
freq: Optional[BaseOffset]
9293
freqstr: Optional[str]
9394
_resolution_obj: Resolution
@@ -100,6 +101,25 @@ class DatetimeIndexOpsMixin(NDArrayBackedExtensionIndex):
100101
)
101102
_hasnans = hasnans # for index / array -agnostic code
102103

104+
@classmethod
105+
def _simple_new(
106+
cls,
107+
values: Union[DatetimeArray, TimedeltaArray, PeriodArray],
108+
name: Label = None,
109+
):
110+
assert isinstance(values, cls._data_cls), type(values)
111+
112+
result = object.__new__(cls)
113+
result._data = values
114+
result._name = name
115+
result._cache = {}
116+
117+
# For groupby perf. See note in indexes/base about _index_data
118+
result._index_data = values._data
119+
120+
result._reset_identity()
121+
return result
122+
103123
@property
104124
def _is_all_dates(self) -> bool:
105125
return True

pandas/core/indexes/datetimes.py

+2-15
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
to_offset,
1515
)
1616
from pandas._libs.tslibs.offsets import prefix_mapping
17-
from pandas._typing import DtypeObj, Label
17+
from pandas._typing import DtypeObj
1818
from pandas.errors import InvalidIndexError
1919
from pandas.util._decorators import cache_readonly, doc
2020

@@ -220,6 +220,7 @@ class DatetimeIndex(DatetimeTimedeltaMixin):
220220

221221
_typ = "datetimeindex"
222222

223+
_data_cls = DatetimeArray
223224
_engine_type = libindex.DatetimeEngine
224225
_supports_partial_string_indexing = True
225226

@@ -319,20 +320,6 @@ def __new__(
319320
subarr = cls._simple_new(dtarr, name=name)
320321
return subarr
321322

322-
@classmethod
323-
def _simple_new(cls, values: DatetimeArray, name: Label = None):
324-
assert isinstance(values, DatetimeArray), type(values)
325-
326-
result = object.__new__(cls)
327-
result._data = values
328-
result.name = name
329-
result._cache = {}
330-
result._no_setting_name = False
331-
# For groupby perf. See note in indexes/base about _index_data
332-
result._index_data = values._data
333-
result._reset_identity()
334-
return result
335-
336323
# --------------------------------------------------------------------
337324

338325
@cache_readonly

pandas/core/indexes/interval.py

-1
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,6 @@ def _simple_new(cls, array: IntervalArray, name: Label = None):
239239
result._data = array
240240
result.name = name
241241
result._cache = {}
242-
result._no_setting_name = False
243242
result._reset_identity()
244243
return result
245244

pandas/core/indexes/period.py

+1-22
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,7 @@ class PeriodIndex(DatetimeIndexOpsMixin, Int64Index):
146146
_data: PeriodArray
147147
freq: BaseOffset
148148

149+
_data_cls = PeriodArray
149150
_engine_type = libindex.PeriodEngine
150151
_supports_partial_string_indexing = True
151152

@@ -244,28 +245,6 @@ def __new__(
244245

245246
return cls._simple_new(data, name=name)
246247

247-
@classmethod
248-
def _simple_new(cls, values: PeriodArray, name: Label = None):
249-
"""
250-
Create a new PeriodIndex.
251-
252-
Parameters
253-
----------
254-
values : PeriodArray
255-
Values that can be converted to a PeriodArray without inference
256-
or coercion.
257-
"""
258-
assert isinstance(values, PeriodArray), type(values)
259-
260-
result = object.__new__(cls)
261-
result._data = values
262-
# For groupby perf. See note in indexes/base about _index_data
263-
result._index_data = values._data
264-
result.name = name
265-
result._cache = {}
266-
result._reset_identity()
267-
return result
268-
269248
# ------------------------------------------------------------------------
270249
# Data
271250

pandas/core/indexes/timedeltas.py

+2-15
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
from pandas._libs import index as libindex, lib
44
from pandas._libs.tslibs import Timedelta, to_offset
5-
from pandas._typing import DtypeObj, Label
5+
from pandas._typing import DtypeObj
66
from pandas.errors import InvalidIndexError
77
from pandas.util._decorators import doc
88

@@ -103,6 +103,7 @@ class TimedeltaIndex(DatetimeTimedeltaMixin):
103103

104104
_typ = "timedeltaindex"
105105

106+
_data_cls = TimedeltaArray
106107
_engine_type = libindex.TimedeltaEngine
107108

108109
_comparables = ["name", "freq"]
@@ -156,20 +157,6 @@ def __new__(
156157
)
157158
return cls._simple_new(tdarr, name=name)
158159

159-
@classmethod
160-
def _simple_new(cls, values: TimedeltaArray, name: Label = None):
161-
assert isinstance(values, TimedeltaArray)
162-
163-
result = object.__new__(cls)
164-
result._data = values
165-
result._name = name
166-
result._cache = {}
167-
# For groupby perf. See note in indexes/base about _index_data
168-
result._index_data = values._data
169-
170-
result._reset_identity()
171-
return result
172-
173160
# -------------------------------------------------------------------
174161
# Rendering Methods
175162

0 commit comments

Comments
 (0)