from datetime import date import pytest from utils.interpolation import interpolate_series @pytest.mark.parametrize( "start_date, end_date, dates, values, historical_date, historical_value, expected_result", ( ( date(2022, 8, 27), date(2022, 8, 31), [date(2022, 8, 27), date(2022, 8, 28), date(2022, 8, 29), date(2022, 8, 30), date(2022, 8, 31)], [1, 2, 3, 4, 5], None, None, [1, 2, 3, 4, 5], ), ( date(2022, 8, 27), date(2022, 8, 31), [date(2022, 8, 27), date(2022, 8, 28), date(2022, 8, 29), date(2022, 8, 30), date(2022, 8, 31)], [1, 2, 3, 4, 5], date(2022, 8, 27), 1, [1, 2, 3, 4, 5], ), ( date(2022, 8, 27), date(2022, 8, 31), [date(2022, 8, 27), date(2022, 8, 28), date(2022, 8, 29), date(2022, 8, 30), date(2022, 8, 31)], [1, 2, 3, 4, 5], date(2022, 8, 26), 1, [1, 2, 3, 4, 5], ), ( date(2022, 8, 27), date(2022, 8, 31), [date(2022, 8, 27), date(2022, 8, 28), date(2022, 8, 29), date(2022, 8, 30)], [1, 2, 3, 4], None, None, [1, 2, 3, 4, 4], ), ( date(2022, 8, 27), date(2022, 8, 31), [date(2022, 8, 27), date(2022, 8, 28), date(2022, 8, 29), date(2022, 8, 31)], [1, 2, 3, 5], None, None, [1, 2, 3, 4, 5], ), ( date(2022, 8, 27), date(2022, 8, 31), [date(2022, 8, 28), date(2022, 8, 29), date(2022, 8, 30), date(2022, 8, 31)], [2, 3, 4, 5], None, None, [2, 3, 4, 5], ), ( date(2022, 8, 27), date(2022, 8, 31), [date(2022, 8, 28), date(2022, 8, 29), date(2022, 8, 30), date(2022, 8, 31)], [2, 3, 4, 5], date(2022, 8, 27), 1, [1, 2, 3, 4, 5], ), ( date(2022, 8, 27), date(2022, 8, 31), [date(2022, 8, 28), date(2022, 8, 29), date(2022, 8, 30), date(2022, 8, 31)], [2, 3, 4, 5], date(2022, 8, 26), 0, [1, 2, 3, 4, 5], ), ( date(2022, 8, 27), date(2022, 8, 31), [ date(2022, 8, 26), date(2022, 8, 27), date(2022, 8, 28), date(2022, 8, 29), date(2022, 8, 30), date(2022, 8, 31), ], [0, 1, 2, 3, 4, 5], None, None, [1, 2, 3, 4, 5], ), ( date(2022, 8, 27), date(2022, 8, 31), [ date(2022, 8, 31), ], [12_345_678_901_234_567_890], None, None, [12_345_678_901_234_567_890], ), pytest.param( date(2022, 8, 27), date(2022, 8, 31), [date(2022, 8, 30), date(2022, 8, 31)], [2], None, None, [], marks=pytest.mark.xfail(raises=ValueError), ), pytest.param( date(2022, 8, 27), date(2022, 8, 31), [date(2022, 8, 31)], [4, 5], None, None, [], marks=pytest.mark.xfail(raises=ValueError), ), ), ) def test_interpolate_series(start_date, end_date, dates, values, historical_date, historical_value, expected_result): result = interpolate_series(start_date, end_date, dates, values, historical_date, historical_value) assert result == expected_result