Skip to content

Commit 8de88ff

Browse files
authored
BUG: DateOffset addition preserve non-nano (#47334)
1 parent 28d5b01 commit 8de88ff

File tree

2 files changed

+9
-9
lines changed

2 files changed

+9
-9
lines changed

pandas/_libs/tslibs/offsets.pyx

+9-5
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ from pandas._libs.tslibs.np_datetime cimport (
7070

7171
from .dtypes cimport PeriodDtypeCode
7272
from .timedeltas cimport (
73+
_Timedelta,
7374
delta_to_nanoseconds,
7475
is_any_td_scalar,
7576
)
@@ -1140,7 +1141,9 @@ cdef class RelativeDeltaOffset(BaseOffset):
11401141

11411142
weeks = kwds.get("weeks", 0) * self.n
11421143
if weeks:
1143-
dt64other = dt64other + Timedelta(days=7 * weeks)
1144+
delta = Timedelta(days=7 * weeks)
1145+
td = (<_Timedelta>delta)._as_reso(reso)
1146+
dt64other = dt64other + td
11441147

11451148
timedelta_kwds = {
11461149
k: v
@@ -1149,13 +1152,14 @@ cdef class RelativeDeltaOffset(BaseOffset):
11491152
}
11501153
if timedelta_kwds:
11511154
delta = Timedelta(**timedelta_kwds)
1152-
dt64other = dt64other + (self.n * delta)
1153-
# FIXME: fails to preserve non-nano
1155+
td = (<_Timedelta>delta)._as_reso(reso)
1156+
dt64other = dt64other + (self.n * td)
11541157
return dt64other
11551158
elif not self._use_relativedelta and hasattr(self, "_offset"):
11561159
# timedelta
1157-
# FIXME: fails to preserve non-nano
1158-
return dt64other + Timedelta(self._offset * self.n)
1160+
delta = Timedelta(self._offset * self.n)
1161+
td = (<_Timedelta>delta)._as_reso(reso)
1162+
return dt64other + td
11591163
else:
11601164
# relativedelta with other keywords
11611165
kwd = set(kwds) - relativedelta_fast

pandas/tests/tseries/offsets/test_offsets.py

-4
Original file line numberDiff line numberDiff line change
@@ -556,10 +556,6 @@ def test_add_dt64_ndarray_non_nano(self, offset_types, unit, request):
556556
# check that the result with non-nano matches nano
557557
off = self._get_offset(offset_types)
558558

559-
if type(off) is DateOffset:
560-
mark = pytest.mark.xfail(reason="non-nano not implemented")
561-
request.node.add_marker(mark)
562-
563559
dti = date_range("2016-01-01", periods=35, freq="D")
564560

565561
arr = dti._data._ndarray.astype(f"M8[{unit}]")

0 commit comments

Comments
 (0)