From d414665eed9f062e5ac0f17a96fe8250882b7d24 Mon Sep 17 00:00:00 2001 From: jbrockmendel Date: Wed, 29 Jan 2020 11:41:34 -0800 Subject: [PATCH 1/4] CLN: dont need _box_func in DTI/TDI/PI --- pandas/core/indexes/datetimelike.py | 8 ++++---- pandas/core/indexes/datetimes.py | 2 +- pandas/core/indexes/period.py | 16 ---------------- pandas/core/indexes/timedeltas.py | 2 +- 4 files changed, 6 insertions(+), 22 deletions(-) diff --git a/pandas/core/indexes/datetimelike.py b/pandas/core/indexes/datetimelike.py index b87dd0f02252f..d9184aad73241 100644 --- a/pandas/core/indexes/datetimelike.py +++ b/pandas/core/indexes/datetimelike.py @@ -259,7 +259,7 @@ def min(self, axis=None, skipna=True, *args, **kwargs): # quick check if len(i8) and self.is_monotonic: if i8[0] != iNaT: - return self._box_func(i8[0]) + return self._data._box_func(i8[0]) if self.hasnans: if skipna: @@ -268,7 +268,7 @@ def min(self, axis=None, skipna=True, *args, **kwargs): return self._na_value else: min_stamp = i8.min() - return self._box_func(min_stamp) + return self._data._box_func(min_stamp) except ValueError: return self._na_value @@ -316,7 +316,7 @@ def max(self, axis=None, skipna=True, *args, **kwargs): # quick check if len(i8) and self.is_monotonic: if i8[-1] != iNaT: - return self._box_func(i8[-1]) + return self._data._box_func(i8[-1]) if self.hasnans: if skipna: @@ -325,7 +325,7 @@ def max(self, axis=None, skipna=True, *args, **kwargs): return self._na_value else: max_stamp = i8.max() - return self._box_func(max_stamp) + return self._data._box_func(max_stamp) except ValueError: return self._na_value diff --git a/pandas/core/indexes/datetimes.py b/pandas/core/indexes/datetimes.py index 3afd1ff35806d..af5c65d2ab542 100644 --- a/pandas/core/indexes/datetimes.py +++ b/pandas/core/indexes/datetimes.py @@ -72,7 +72,7 @@ class DatetimeDelegateMixin(DatetimelikeDelegateMixin): "_format_native_types", "__iter__", ] - _extra_raw_properties = ["_box_func", "tz", "tzinfo", "dtype"] + _extra_raw_properties = ["tz", "tzinfo", "dtype"] _delegated_properties = DatetimeArray._datetimelike_ops + _extra_raw_properties _delegated_methods = ( DatetimeArray._datetimelike_methods + _extra_methods + _extra_raw_methods diff --git a/pandas/core/indexes/period.py b/pandas/core/indexes/period.py index 1e18c16d02784..fbe8ba2ce00be 100644 --- a/pandas/core/indexes/period.py +++ b/pandas/core/indexes/period.py @@ -292,22 +292,6 @@ def _shallow_copy_with_infer(self, values=None, **kwargs): """ we always want to return a PeriodIndex """ return self._shallow_copy(values=values, **kwargs) - @property - def _box_func(self): - """Maybe box an ordinal or Period""" - # TODO(DatetimeArray): Avoid double-boxing - # PeriodArray takes care of boxing already, so we need to check - # whether we're given an ordinal or a Period. It seems like some - # places outside of indexes/period.py are calling this _box_func, - # but passing data that's already boxed. - def func(x): - if isinstance(x, Period) or x is NaT: - return x - else: - return Period._from_ordinal(ordinal=x, freq=self.freq) - - return func - def _maybe_convert_timedelta(self, other): """ Convert timedelta-like input to an integer multiple of self.freq diff --git a/pandas/core/indexes/timedeltas.py b/pandas/core/indexes/timedeltas.py index 1257e410b4125..9135af40e77dc 100644 --- a/pandas/core/indexes/timedeltas.py +++ b/pandas/core/indexes/timedeltas.py @@ -41,7 +41,7 @@ class TimedeltaDelegateMixin(DatetimelikeDelegateMixin): # Some are "raw" methods, the result is not re-boxed in an Index # We also have a few "extra" attrs, which may or may not be raw, # which we don't want to expose in the .dt accessor. - _raw_properties = {"components", "_box_func"} + _raw_properties = {"components"} _raw_methods = {"to_pytimedelta", "sum", "std", "median", "_format_native_types"} _delegated_properties = TimedeltaArray._datetimelike_ops + list(_raw_properties) From de5972c355c8834735dc44cf4cf9f8419d2d49cf Mon Sep 17 00:00:00 2001 From: jbrockmendel Date: Thu, 30 Jan 2020 20:57:45 -0800 Subject: [PATCH 2/4] dont need _box_func --- pandas/core/indexes/datetimes.py | 1 - pandas/core/indexes/timedeltas.py | 1 - 2 files changed, 2 deletions(-) diff --git a/pandas/core/indexes/datetimes.py b/pandas/core/indexes/datetimes.py index 2b4636155111f..e3245d6e419ed 100644 --- a/pandas/core/indexes/datetimes.py +++ b/pandas/core/indexes/datetimes.py @@ -70,7 +70,6 @@ def _new_DatetimeIndex(cls, d): "_field_ops", "_datetimelike_ops", "_datetimelike_methods", - "_box_func", "tz", "tzinfo", "dtype", diff --git a/pandas/core/indexes/timedeltas.py b/pandas/core/indexes/timedeltas.py index 8691f0a2a1178..7b6d44334612b 100644 --- a/pandas/core/indexes/timedeltas.py +++ b/pandas/core/indexes/timedeltas.py @@ -58,7 +58,6 @@ "_datetimelike_methods", "_other_ops", "components", - "_box_func", "to_pytimedelta", "sum", "std", From 11c3205880bbbab794d92eb4b58118a2000bd355 Mon Sep 17 00:00:00 2001 From: jbrockmendel Date: Fri, 31 Jan 2020 09:53:53 -0800 Subject: [PATCH 3/4] inherit box_func in one place --- pandas/core/indexes/datetimelike.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/pandas/core/indexes/datetimelike.py b/pandas/core/indexes/datetimelike.py index cb2d34368c9c7..786ffafaef97e 100644 --- a/pandas/core/indexes/datetimelike.py +++ b/pandas/core/indexes/datetimelike.py @@ -80,7 +80,7 @@ def wrapper(left, right): cache=True, ) @inherit_names( - ["__iter__", "mean", "freq", "freqstr", "_ndarray_values", "asi8", "_box_values"], + ["__iter__", "mean", "freq", "freqstr", "_ndarray_values", "asi8", "_box_values", "_box_func"], DatetimeLikeArrayMixin, ) class DatetimeIndexOpsMixin(ExtensionIndex): @@ -257,7 +257,7 @@ def min(self, axis=None, skipna=True, *args, **kwargs): # quick check if len(i8) and self.is_monotonic: if i8[0] != iNaT: - return self._data._box_func(i8[0]) + return self._box_func(i8[0]) if self.hasnans: if skipna: @@ -266,7 +266,7 @@ def min(self, axis=None, skipna=True, *args, **kwargs): return self._na_value else: min_stamp = i8.min() - return self._data._box_func(min_stamp) + return self._box_func(min_stamp) except ValueError: return self._na_value @@ -314,7 +314,7 @@ def max(self, axis=None, skipna=True, *args, **kwargs): # quick check if len(i8) and self.is_monotonic: if i8[-1] != iNaT: - return self._data._box_func(i8[-1]) + return self._box_func(i8[-1]) if self.hasnans: if skipna: @@ -323,7 +323,7 @@ def max(self, axis=None, skipna=True, *args, **kwargs): return self._na_value else: max_stamp = i8.max() - return self._data._box_func(max_stamp) + return self._box_func(max_stamp) except ValueError: return self._na_value From 82a81ac66a16cc087eb4650c4a8280e0e567c7b1 Mon Sep 17 00:00:00 2001 From: jbrockmendel Date: Fri, 31 Jan 2020 10:23:13 -0800 Subject: [PATCH 4/4] blackify --- pandas/core/indexes/datetimelike.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/pandas/core/indexes/datetimelike.py b/pandas/core/indexes/datetimelike.py index 786ffafaef97e..66723969c9f10 100644 --- a/pandas/core/indexes/datetimelike.py +++ b/pandas/core/indexes/datetimelike.py @@ -80,7 +80,16 @@ def wrapper(left, right): cache=True, ) @inherit_names( - ["__iter__", "mean", "freq", "freqstr", "_ndarray_values", "asi8", "_box_values", "_box_func"], + [ + "__iter__", + "mean", + "freq", + "freqstr", + "_ndarray_values", + "asi8", + "_box_values", + "_box_func", + ], DatetimeLikeArrayMixin, ) class DatetimeIndexOpsMixin(ExtensionIndex):