test_arithmetic.py 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. # Arithmetic tests specific to DatetimeIndex are generally about `freq`
  2. # rentention or inference. Other arithmetic tests belong in
  3. # tests/arithmetic/test_datetime64.py
  4. import pytest
  5. from pandas import (
  6. Timedelta,
  7. TimedeltaIndex,
  8. Timestamp,
  9. date_range,
  10. timedelta_range,
  11. )
  12. import pandas._testing as tm
  13. class TestDatetimeIndexArithmetic:
  14. def test_add_timedelta_preserves_freq(self):
  15. # GH#37295 should hold for any DTI with freq=None or Tick freq
  16. tz = "Canada/Eastern"
  17. dti = date_range(
  18. start=Timestamp("2019-03-26 00:00:00-0400", tz=tz),
  19. end=Timestamp("2020-10-17 00:00:00-0400", tz=tz),
  20. freq="D",
  21. )
  22. result = dti + Timedelta(days=1)
  23. assert result.freq == dti.freq
  24. def test_sub_datetime_preserves_freq(self, tz_naive_fixture):
  25. # GH#48818
  26. dti = date_range("2016-01-01", periods=12, tz=tz_naive_fixture)
  27. res = dti - dti[0]
  28. expected = timedelta_range("0 Days", "11 Days")
  29. tm.assert_index_equal(res, expected)
  30. assert res.freq == expected.freq
  31. @pytest.mark.xfail(
  32. reason="The inherited freq is incorrect bc dti.freq is incorrect "
  33. "https://github.com/pandas-dev/pandas/pull/48818/files#r982793461"
  34. )
  35. def test_sub_datetime_preserves_freq_across_dst(self):
  36. # GH#48818
  37. ts = Timestamp("2016-03-11", tz="US/Pacific")
  38. dti = date_range(ts, periods=4)
  39. res = dti - dti[0]
  40. expected = TimedeltaIndex(
  41. [
  42. Timedelta(days=0),
  43. Timedelta(days=1),
  44. Timedelta(days=2),
  45. Timedelta(days=2, hours=23),
  46. ]
  47. )
  48. tm.assert_index_equal(res, expected)
  49. assert res.freq == expected.freq