diff --git a/pandas/tests/arrays/test_datetimes.py b/pandas/tests/arrays/test_datetimes.py index 8c2a8df7c2fbd..dfe41896c2665 100644 --- a/pandas/tests/arrays/test_datetimes.py +++ b/pandas/tests/arrays/test_datetimes.py @@ -1,13 +1,17 @@ """ Tests for DatetimeArray """ +from datetime import timedelta import operator import numpy as np import pytest from pandas._libs.tslibs import tz_compare -from pandas._libs.tslibs.dtypes import NpyDatetimeUnit +from pandas._libs.tslibs.dtypes import ( + NpyDatetimeUnit, + npy_unit_to_abbrev, +) from pandas.core.dtypes.dtypes import DatetimeTZDtype @@ -221,6 +225,35 @@ def test_add_mismatched_reso_doesnt_downcast(self): # (so we _could_ downcast to unit="s"), we do not. assert res._unit == "us" + @pytest.mark.parametrize( + "scalar", + [ + timedelta(hours=2), + pd.Timedelta(hours=2), + np.timedelta64(2, "h"), + np.timedelta64(2 * 3600 * 1000, "ms"), + pd.offsets.Minute(120), + pd.offsets.Hour(2), + ], + ) + def test_add_timedeltalike_scalar_mismatched_reso(self, dta_dti, scalar): + dta, dti = dta_dti + + td = pd.Timedelta(scalar) + exp_reso = max(dta._reso, td._reso) + exp_unit = npy_unit_to_abbrev(exp_reso) + + expected = (dti + td)._data._as_unit(exp_unit) + result = dta + scalar + tm.assert_extension_array_equal(result, expected) + + result = scalar + dta + tm.assert_extension_array_equal(result, expected) + + expected = (dti - td)._data._as_unit(exp_unit) + result = dta - scalar + tm.assert_extension_array_equal(result, expected) + def test_sub_datetimelike_scalar_mismatch(self): dti = pd.date_range("2016-01-01", periods=3) dta = dti._data._as_unit("us")