64 lines
1.8 KiB
Python
64 lines
1.8 KiB
Python
from datetime import timedelta
|
|
|
|
import numpy as np
|
|
import pytest
|
|
|
|
from pandas import (
|
|
Interval,
|
|
Timedelta,
|
|
Timestamp,
|
|
)
|
|
|
|
|
|
@pytest.mark.parametrize("method", ["__add__", "__sub__"])
|
|
@pytest.mark.parametrize(
|
|
"interval",
|
|
[
|
|
Interval(Timestamp("2017-01-01 00:00:00"), Timestamp("2018-01-01 00:00:00")),
|
|
Interval(Timedelta(days=7), Timedelta(days=14)),
|
|
],
|
|
)
|
|
@pytest.mark.parametrize(
|
|
"delta", [Timedelta(days=7), timedelta(7), np.timedelta64(7, "D")]
|
|
)
|
|
def test_time_interval_add_subtract_timedelta(interval, delta, method):
|
|
# https://github.com/pandas-dev/pandas/issues/32023
|
|
result = getattr(interval, method)(delta)
|
|
left = getattr(interval.left, method)(delta)
|
|
right = getattr(interval.right, method)(delta)
|
|
expected = Interval(left, right)
|
|
|
|
assert result == expected
|
|
|
|
|
|
@pytest.mark.parametrize("interval", [Interval(1, 2), Interval(1.0, 2.0)])
|
|
@pytest.mark.parametrize(
|
|
"delta", [Timedelta(days=7), timedelta(7), np.timedelta64(7, "D")]
|
|
)
|
|
def test_numeric_interval_add_timedelta_raises(interval, delta):
|
|
# https://github.com/pandas-dev/pandas/issues/32023
|
|
msg = "|".join(
|
|
[
|
|
"unsupported operand",
|
|
"cannot use operands",
|
|
"Only numeric, Timestamp and Timedelta endpoints are allowed",
|
|
]
|
|
)
|
|
with pytest.raises((TypeError, ValueError), match=msg):
|
|
interval + delta
|
|
|
|
with pytest.raises((TypeError, ValueError), match=msg):
|
|
delta + interval
|
|
|
|
|
|
@pytest.mark.parametrize("klass", [timedelta, np.timedelta64, Timedelta])
|
|
def test_timedelta_add_timestamp_interval(klass):
|
|
delta = klass(0)
|
|
expected = Interval(Timestamp("2020-01-01"), Timestamp("2020-02-01"))
|
|
|
|
result = delta + expected
|
|
assert result == expected
|
|
|
|
result = expected + delta
|
|
assert result == expected
|