From c911db741d8b3a2b0653d2601593d2cfe878ed5d Mon Sep 17 00:00:00 2001 From: Brock Date: Sat, 5 Jun 2021 11:50:09 -0700 Subject: [PATCH 1/3] TYP: datetimelike --- pandas/core/arrays/datetimes.py | 11 ++++++----- pandas/core/arrays/period.py | 9 ++++----- pandas/core/arrays/timedeltas.py | 5 +++-- pandas/core/indexes/timedeltas.py | 8 +------- pandas/tests/series/accessors/test_cat_accessor.py | 12 +++++++----- pandas/tests/series/accessors/test_dt_accessor.py | 7 +++++-- 6 files changed, 26 insertions(+), 26 deletions(-) diff --git a/pandas/core/arrays/datetimes.py b/pandas/core/arrays/datetimes.py index 020f708606353..a78e34fbe4c63 100644 --- a/pandas/core/arrays/datetimes.py +++ b/pandas/core/arrays/datetimes.py @@ -83,6 +83,7 @@ if TYPE_CHECKING: from typing import Literal + from pandas import DataFrame from pandas.core.arrays import ( PeriodArray, TimedeltaArray, @@ -1248,7 +1249,7 @@ def day_name(self, locale=None): return result @property - def time(self): + def time(self) -> np.ndarray: """ Returns numpy array of datetime.time. The time part of the Timestamps. """ @@ -1260,7 +1261,7 @@ def time(self): return ints_to_pydatetime(timestamps, box="time") @property - def timetz(self): + def timetz(self) -> np.ndarray: """ Returns numpy array of datetime.time also containing timezone information. The time part of the Timestamps. @@ -1268,7 +1269,7 @@ def timetz(self): return ints_to_pydatetime(self.asi8, self.tz, box="time") @property - def date(self): + def date(self) -> np.ndarray: """ Returns numpy array of python datetime.date objects (namely, the date part of Timestamps without timezone information). @@ -1280,7 +1281,7 @@ def date(self): return ints_to_pydatetime(timestamps, box="date") - def isocalendar(self): + def isocalendar(self) -> DataFrame: """ Returns a DataFrame with the year, week, and day calculated according to the ISO 8601 standard. @@ -1863,7 +1864,7 @@ def weekofyear(self): """, ) - def to_julian_date(self): + def to_julian_date(self) -> np.ndarray: """ Convert Datetime Array to float64 ndarray of Julian Dates. 0 Julian date is noon January 1, 4713 BC. diff --git a/pandas/core/arrays/period.py b/pandas/core/arrays/period.py index d8c1b9cef468a..4432fbb83dca4 100644 --- a/pandas/core/arrays/period.py +++ b/pandas/core/arrays/period.py @@ -1072,11 +1072,10 @@ def dt64arr_to_periodarr(data, freq, tz=None): elif isinstance(data, ABCSeries): data, freq = data._values, data.dt.freq - freq = Period._maybe_convert_freq(freq) - - if isinstance(data, (ABCIndex, ABCSeries)): + elif isinstance(data, (ABCIndex, ABCSeries)): data = data._values + freq = Period._maybe_convert_freq(freq) base = freq._period_dtype_code return c_dt64arr_to_periodarr(data.view("i8"), base, tz), freq @@ -1138,7 +1137,7 @@ def _range_from_fields( minute=None, second=None, freq=None, -): +) -> tuple[np.ndarray, BaseOffset]: if hour is None: hour = 0 if minute is None: @@ -1176,7 +1175,7 @@ def _range_from_fields( return np.array(ordinals, dtype=np.int64), freq -def _make_field_arrays(*fields): +def _make_field_arrays(*fields) -> tuple[np.ndarray, ...]: length = None for x in fields: if isinstance(x, (list, np.ndarray, ABCSeries)): diff --git a/pandas/core/arrays/timedeltas.py b/pandas/core/arrays/timedeltas.py index ea87ac64cfe22..71563c59ad252 100644 --- a/pandas/core/arrays/timedeltas.py +++ b/pandas/core/arrays/timedeltas.py @@ -70,6 +70,7 @@ from pandas.core.ops.common import unpack_zerodim_and_defer if TYPE_CHECKING: + from pandas import DataFrame from pandas.core.arrays import ( DatetimeArray, PeriodArray, @@ -882,14 +883,14 @@ def to_pytimedelta(self) -> np.ndarray: ) @property - def components(self): + def components(self) -> DataFrame: """ Return a dataframe of the components (days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds) of the Timedeltas. Returns ------- - a DataFrame + DataFrame """ from pandas import DataFrame diff --git a/pandas/core/indexes/timedeltas.py b/pandas/core/indexes/timedeltas.py index 85cbea39b9b98..fe1eee99a023d 100644 --- a/pandas/core/indexes/timedeltas.py +++ b/pandas/core/indexes/timedeltas.py @@ -39,12 +39,6 @@ ) @inherit_names( [ - "_bool_ops", - "_object_ops", - "_field_ops", - "_datetimelike_ops", - "_datetimelike_methods", - "_other_ops", "components", "to_pytimedelta", "sum", @@ -162,7 +156,7 @@ def _is_comparable_dtype(self, dtype: DtypeObj) -> bool: """ Can we compare values of the given dtype to our own? """ - return is_timedelta64_dtype(dtype) + return is_timedelta64_dtype(dtype) # aka self._data._is_recognized_dtype # ------------------------------------------------------------------- # Indexing Methods diff --git a/pandas/tests/series/accessors/test_cat_accessor.py b/pandas/tests/series/accessors/test_cat_accessor.py index 7aea45755f940..fcec06524efab 100644 --- a/pandas/tests/series/accessors/test_cat_accessor.py +++ b/pandas/tests/series/accessors/test_cat_accessor.py @@ -6,17 +6,19 @@ from pandas import ( Categorical, DataFrame, - DatetimeIndex, Index, Series, - TimedeltaIndex, Timestamp, date_range, period_range, timedelta_range, ) import pandas._testing as tm -from pandas.core.arrays import PeriodArray +from pandas.core.arrays import ( + DatetimeArray, + PeriodArray, + TimedeltaArray, +) from pandas.core.arrays.categorical import CategoricalAccessor from pandas.core.indexes.accessors import Properties @@ -178,9 +180,9 @@ def test_dt_accessor_api_for_categorical(self): get_ops = lambda x: x._datetimelike_ops test_data = [ - ("Datetime", get_ops(DatetimeIndex), s_dr, c_dr), + ("Datetime", get_ops(DatetimeArray), s_dr, c_dr), ("Period", get_ops(PeriodArray), s_pr, c_pr), - ("Timedelta", get_ops(TimedeltaIndex), s_tdr, c_tdr), + ("Timedelta", get_ops(TimedeltaArray), s_tdr, c_tdr), ] assert isinstance(c_dr.dt, Properties) diff --git a/pandas/tests/series/accessors/test_dt_accessor.py b/pandas/tests/series/accessors/test_dt_accessor.py index 62a9099fab1ad..076de881eaf96 100644 --- a/pandas/tests/series/accessors/test_dt_accessor.py +++ b/pandas/tests/series/accessors/test_dt_accessor.py @@ -32,7 +32,10 @@ timedelta_range, ) import pandas._testing as tm -from pandas.core.arrays import PeriodArray +from pandas.core.arrays import ( + PeriodArray, + TimedeltaArray, +) import pandas.core.common as com @@ -59,7 +62,7 @@ def test_dt_namespace_accessor(self): "month_name", "isocalendar", ] - ok_for_td = TimedeltaIndex._datetimelike_ops + ok_for_td = TimedeltaArray._datetimelike_ops ok_for_td_methods = [ "components", "to_pytimedelta", From b94b301b6f2b6ffa3891049bcc70258905f1e003 Mon Sep 17 00:00:00 2001 From: Brock Date: Sat, 5 Jun 2021 12:31:31 -0700 Subject: [PATCH 2/3] mypy fixup --- pandas/core/arrays/period.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pandas/core/arrays/period.py b/pandas/core/arrays/period.py index 4432fbb83dca4..04db06ee9fb66 100644 --- a/pandas/core/arrays/period.py +++ b/pandas/core/arrays/period.py @@ -1175,7 +1175,7 @@ def _range_from_fields( return np.array(ordinals, dtype=np.int64), freq -def _make_field_arrays(*fields) -> tuple[np.ndarray, ...]: +def _make_field_arrays(*fields) -> list[np.ndarray]: length = None for x in fields: if isinstance(x, (list, np.ndarray, ABCSeries)): From 1fdab3c9a953f173fd6370bedb4d47c2fe8f0473 Mon Sep 17 00:00:00 2001 From: Brock Date: Sun, 6 Jun 2021 17:06:10 -0700 Subject: [PATCH 3/3] dummy commit to force CI