Skip to content

Commit 76216ba

Browse files
authored
REF: define DTA._infer_matches (#38008)
1 parent 7368b2a commit 76216ba

File tree

7 files changed

+9
-15
lines changed

7 files changed

+9
-15
lines changed

pandas/core/arrays/datetimelike.py

+2
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,8 @@ class DatetimeLikeArrayMixin(OpsMixin, NDArrayBackedExtensionArray):
101101
_generate_range
102102
"""
103103

104+
# _infer_matches -> which infer_dtype strings are close enough to our own
105+
_infer_matches: Tuple[str, ...]
104106
_is_recognized_dtype: Callable[[DtypeObj], bool]
105107
_recognized_scalars: Tuple[Type, ...]
106108
_data: np.ndarray

pandas/core/arrays/datetimes.py

+1
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,7 @@ class DatetimeArray(dtl.TimelikeOps, dtl.DatelikeOps):
154154
_scalar_type = Timestamp
155155
_recognized_scalars = (datetime, np.datetime64)
156156
_is_recognized_dtype = is_datetime64_any_dtype
157+
_infer_matches = ("datetime", "datetime64", "date")
157158

158159
# define my properties & methods for delegation
159160
_bool_ops = [

pandas/core/arrays/period.py

+1
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,7 @@ class PeriodArray(PeriodMixin, dtl.DatelikeOps):
124124
_scalar_type = Period
125125
_recognized_scalars = (Period,)
126126
_is_recognized_dtype = is_period_dtype
127+
_infer_matches = ("period",)
127128

128129
# Names others delegate to us
129130
_other_ops: List[str] = []

pandas/core/arrays/timedeltas.py

+1
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,7 @@ class TimedeltaArray(dtl.TimelikeOps):
104104
_scalar_type = Timedelta
105105
_recognized_scalars = (timedelta, np.timedelta64, Tick)
106106
_is_recognized_dtype = is_timedelta64_dtype
107+
_infer_matches = ("timedelta", "timedelta64")
107108

108109
__array_priority__ = 1000
109110
# define my properties & methods for delegation

pandas/core/indexes/datetimelike.py

+4-9
Original file line numberDiff line numberDiff line change
@@ -157,16 +157,8 @@ def equals(self, other: object) -> bool:
157157
elif other.dtype.kind in ["f", "i", "u", "c"]:
158158
return False
159159
elif not isinstance(other, type(self)):
160-
inferrable = [
161-
"timedelta",
162-
"timedelta64",
163-
"datetime",
164-
"datetime64",
165-
"date",
166-
"period",
167-
]
168-
169160
should_try = False
161+
inferrable = self._data._infer_matches
170162
if other.dtype == object:
171163
should_try = other.inferred_type in inferrable
172164
elif is_categorical_dtype(other.dtype):
@@ -648,6 +640,9 @@ def _has_complex_internals(self) -> bool:
648640
# used to avoid libreduction code paths, which raise or require conversion
649641
return False
650642

643+
def is_type_compatible(self, kind: str) -> bool:
644+
return kind in self._data._infer_matches
645+
651646
# --------------------------------------------------------------------
652647
# Set Operation Methods
653648

pandas/core/indexes/datetimes.py

-3
Original file line numberDiff line numberDiff line change
@@ -814,9 +814,6 @@ def slice_indexer(self, start=None, end=None, step=None, kind=None):
814814

815815
# --------------------------------------------------------------------
816816

817-
def is_type_compatible(self, kind: str) -> bool:
818-
return kind == self.inferred_type or kind == "datetime"
819-
820817
@property
821818
def inferred_type(self) -> str:
822819
# b/c datetime is represented as microseconds since the epoch, make

pandas/core/indexes/timedeltas.py

-3
Original file line numberDiff line numberDiff line change
@@ -229,9 +229,6 @@ def _maybe_cast_slice_bound(self, label, side: str, kind):
229229

230230
# -------------------------------------------------------------------
231231

232-
def is_type_compatible(self, kind: str) -> bool:
233-
return kind == self.inferred_type or kind == "timedelta"
234-
235232
@property
236233
def inferred_type(self) -> str:
237234
return "timedelta64"

0 commit comments

Comments
 (0)