""" Test offset.BusinessHour._next_opening_time and offset.BusinessHour._prev_opening_time """ from datetime import datetime import pytest from pandas._libs.tslibs.offsets import BusinessHour class TestOpeningTimes: # opening time should be affected by sign of n, not by n's value and end opening_time_cases = [ ( [ BusinessHour(), BusinessHour(n=2), BusinessHour(n=4), BusinessHour(end="10:00"), BusinessHour(n=2, end="4:00"), BusinessHour(n=4, end="15:00"), ], { datetime(2014, 7, 1, 11): ( datetime(2014, 7, 2, 9), datetime(2014, 7, 1, 9), ), datetime(2014, 7, 1, 18): ( datetime(2014, 7, 2, 9), datetime(2014, 7, 1, 9), ), datetime(2014, 7, 1, 23): ( datetime(2014, 7, 2, 9), datetime(2014, 7, 1, 9), ), datetime(2014, 7, 2, 8): ( datetime(2014, 7, 2, 9), datetime(2014, 7, 1, 9), ), # if timestamp is on opening time, next opening time is # as it is datetime(2014, 7, 2, 9): ( datetime(2014, 7, 2, 9), datetime(2014, 7, 2, 9), ), datetime(2014, 7, 2, 10): ( datetime(2014, 7, 3, 9), datetime(2014, 7, 2, 9), ), # 2014-07-05 is saturday datetime(2014, 7, 5, 10): ( datetime(2014, 7, 7, 9), datetime(2014, 7, 4, 9), ), datetime(2014, 7, 4, 10): ( datetime(2014, 7, 7, 9), datetime(2014, 7, 4, 9), ), datetime(2014, 7, 4, 23): ( datetime(2014, 7, 7, 9), datetime(2014, 7, 4, 9), ), datetime(2014, 7, 6, 10): ( datetime(2014, 7, 7, 9), datetime(2014, 7, 4, 9), ), datetime(2014, 7, 7, 5): ( datetime(2014, 7, 7, 9), datetime(2014, 7, 4, 9), ), datetime(2014, 7, 7, 9, 1): ( datetime(2014, 7, 8, 9), datetime(2014, 7, 7, 9), ), }, ), ( [ BusinessHour(start="11:15"), BusinessHour(n=2, start="11:15"), BusinessHour(n=3, start="11:15"), BusinessHour(start="11:15", end="10:00"), BusinessHour(n=2, start="11:15", end="4:00"), BusinessHour(n=3, start="11:15", end="15:00"), ], { datetime(2014, 7, 1, 11): ( datetime(2014, 7, 1, 11, 15), datetime(2014, 6, 30, 11, 15), ), datetime(2014, 7, 1, 18): ( datetime(2014, 7, 2, 11, 15), datetime(2014, 7, 1, 11, 15), ), datetime(2014, 7, 1, 23): ( datetime(2014, 7, 2, 11, 15), datetime(2014, 7, 1, 11, 15), ), datetime(2014, 7, 2, 8): ( datetime(2014, 7, 2, 11, 15), datetime(2014, 7, 1, 11, 15), ), datetime(2014, 7, 2, 9): ( datetime(2014, 7, 2, 11, 15), datetime(2014, 7, 1, 11, 15), ), datetime(2014, 7, 2, 10): ( datetime(2014, 7, 2, 11, 15), datetime(2014, 7, 1, 11, 15), ), datetime(2014, 7, 2, 11, 15): ( datetime(2014, 7, 2, 11, 15), datetime(2014, 7, 2, 11, 15), ), datetime(2014, 7, 2, 11, 15, 1): ( datetime(2014, 7, 3, 11, 15), datetime(2014, 7, 2, 11, 15), ), datetime(2014, 7, 5, 10): ( datetime(2014, 7, 7, 11, 15), datetime(2014, 7, 4, 11, 15), ), datetime(2014, 7, 4, 10): ( datetime(2014, 7, 4, 11, 15), datetime(2014, 7, 3, 11, 15), ), datetime(2014, 7, 4, 23): ( datetime(2014, 7, 7, 11, 15), datetime(2014, 7, 4, 11, 15), ), datetime(2014, 7, 6, 10): ( datetime(2014, 7, 7, 11, 15), datetime(2014, 7, 4, 11, 15), ), datetime(2014, 7, 7, 5): ( datetime(2014, 7, 7, 11, 15), datetime(2014, 7, 4, 11, 15), ), datetime(2014, 7, 7, 9, 1): ( datetime(2014, 7, 7, 11, 15), datetime(2014, 7, 4, 11, 15), ), }, ), ( [ BusinessHour(-1), BusinessHour(n=-2), BusinessHour(n=-4), BusinessHour(n=-1, end="10:00"), BusinessHour(n=-2, end="4:00"), BusinessHour(n=-4, end="15:00"), ], { datetime(2014, 7, 1, 11): ( datetime(2014, 7, 1, 9), datetime(2014, 7, 2, 9), ), datetime(2014, 7, 1, 18): ( datetime(2014, 7, 1, 9), datetime(2014, 7, 2, 9), ), datetime(2014, 7, 1, 23): ( datetime(2014, 7, 1, 9), datetime(2014, 7, 2, 9), ), datetime(2014, 7, 2, 8): ( datetime(2014, 7, 1, 9), datetime(2014, 7, 2, 9), ), datetime(2014, 7, 2, 9): ( datetime(2014, 7, 2, 9), datetime(2014, 7, 2, 9), ), datetime(2014, 7, 2, 10): ( datetime(2014, 7, 2, 9), datetime(2014, 7, 3, 9), ), datetime(2014, 7, 5, 10): ( datetime(2014, 7, 4, 9), datetime(2014, 7, 7, 9), ), datetime(2014, 7, 4, 10): ( datetime(2014, 7, 4, 9), datetime(2014, 7, 7, 9), ), datetime(2014, 7, 4, 23): ( datetime(2014, 7, 4, 9), datetime(2014, 7, 7, 9), ), datetime(2014, 7, 6, 10): ( datetime(2014, 7, 4, 9), datetime(2014, 7, 7, 9), ), datetime(2014, 7, 7, 5): ( datetime(2014, 7, 4, 9), datetime(2014, 7, 7, 9), ), datetime(2014, 7, 7, 9): ( datetime(2014, 7, 7, 9), datetime(2014, 7, 7, 9), ), datetime(2014, 7, 7, 9, 1): ( datetime(2014, 7, 7, 9), datetime(2014, 7, 8, 9), ), }, ), ( [ BusinessHour(start="17:00", end="05:00"), BusinessHour(n=3, start="17:00", end="03:00"), ], { datetime(2014, 7, 1, 11): ( datetime(2014, 7, 1, 17), datetime(2014, 6, 30, 17), ), datetime(2014, 7, 1, 18): ( datetime(2014, 7, 2, 17), datetime(2014, 7, 1, 17), ), datetime(2014, 7, 1, 23): ( datetime(2014, 7, 2, 17), datetime(2014, 7, 1, 17), ), datetime(2014, 7, 2, 8): ( datetime(2014, 7, 2, 17), datetime(2014, 7, 1, 17), ), datetime(2014, 7, 2, 9): ( datetime(2014, 7, 2, 17), datetime(2014, 7, 1, 17), ), datetime(2014, 7, 4, 17): ( datetime(2014, 7, 4, 17), datetime(2014, 7, 4, 17), ), datetime(2014, 7, 5, 10): ( datetime(2014, 7, 7, 17), datetime(2014, 7, 4, 17), ), datetime(2014, 7, 4, 10): ( datetime(2014, 7, 4, 17), datetime(2014, 7, 3, 17), ), datetime(2014, 7, 4, 23): ( datetime(2014, 7, 7, 17), datetime(2014, 7, 4, 17), ), datetime(2014, 7, 6, 10): ( datetime(2014, 7, 7, 17), datetime(2014, 7, 4, 17), ), datetime(2014, 7, 7, 5): ( datetime(2014, 7, 7, 17), datetime(2014, 7, 4, 17), ), datetime(2014, 7, 7, 17, 1): ( datetime(2014, 7, 8, 17), datetime(2014, 7, 7, 17), ), }, ), ( [ BusinessHour(-1, start="17:00", end="05:00"), BusinessHour(n=-2, start="17:00", end="03:00"), ], { datetime(2014, 7, 1, 11): ( datetime(2014, 6, 30, 17), datetime(2014, 7, 1, 17), ), datetime(2014, 7, 1, 18): ( datetime(2014, 7, 1, 17), datetime(2014, 7, 2, 17), ), datetime(2014, 7, 1, 23): ( datetime(2014, 7, 1, 17), datetime(2014, 7, 2, 17), ), datetime(2014, 7, 2, 8): ( datetime(2014, 7, 1, 17), datetime(2014, 7, 2, 17), ), datetime(2014, 7, 2, 9): ( datetime(2014, 7, 1, 17), datetime(2014, 7, 2, 17), ), datetime(2014, 7, 2, 16, 59): ( datetime(2014, 7, 1, 17), datetime(2014, 7, 2, 17), ), datetime(2014, 7, 5, 10): ( datetime(2014, 7, 4, 17), datetime(2014, 7, 7, 17), ), datetime(2014, 7, 4, 10): ( datetime(2014, 7, 3, 17), datetime(2014, 7, 4, 17), ), datetime(2014, 7, 4, 23): ( datetime(2014, 7, 4, 17), datetime(2014, 7, 7, 17), ), datetime(2014, 7, 6, 10): ( datetime(2014, 7, 4, 17), datetime(2014, 7, 7, 17), ), datetime(2014, 7, 7, 5): ( datetime(2014, 7, 4, 17), datetime(2014, 7, 7, 17), ), datetime(2014, 7, 7, 18): ( datetime(2014, 7, 7, 17), datetime(2014, 7, 8, 17), ), }, ), ( [ BusinessHour(start=["11:15", "15:00"], end=["13:00", "20:00"]), BusinessHour(n=3, start=["11:15", "15:00"], end=["12:00", "20:00"]), BusinessHour(start=["11:15", "15:00"], end=["13:00", "17:00"]), BusinessHour(n=2, start=["11:15", "15:00"], end=["12:00", "03:00"]), BusinessHour(n=3, start=["11:15", "15:00"], end=["13:00", "16:00"]), ], { datetime(2014, 7, 1, 11): ( datetime(2014, 7, 1, 11, 15), datetime(2014, 6, 30, 15), ), datetime(2014, 7, 1, 18): ( datetime(2014, 7, 2, 11, 15), datetime(2014, 7, 1, 15), ), datetime(2014, 7, 1, 23): ( datetime(2014, 7, 2, 11, 15), datetime(2014, 7, 1, 15), ), datetime(2014, 7, 2, 8): ( datetime(2014, 7, 2, 11, 15), datetime(2014, 7, 1, 15), ), datetime(2014, 7, 2, 9): ( datetime(2014, 7, 2, 11, 15), datetime(2014, 7, 1, 15), ), datetime(2014, 7, 2, 10): ( datetime(2014, 7, 2, 11, 15), datetime(2014, 7, 1, 15), ), datetime(2014, 7, 2, 11, 15): ( datetime(2014, 7, 2, 11, 15), datetime(2014, 7, 2, 11, 15), ), datetime(2014, 7, 2, 11, 15, 1): ( datetime(2014, 7, 2, 15), datetime(2014, 7, 2, 11, 15), ), datetime(2014, 7, 5, 10): ( datetime(2014, 7, 7, 11, 15), datetime(2014, 7, 4, 15), ), datetime(2014, 7, 4, 10): ( datetime(2014, 7, 4, 11, 15), datetime(2014, 7, 3, 15), ), datetime(2014, 7, 4, 23): ( datetime(2014, 7, 7, 11, 15), datetime(2014, 7, 4, 15), ), datetime(2014, 7, 6, 10): ( datetime(2014, 7, 7, 11, 15), datetime(2014, 7, 4, 15), ), datetime(2014, 7, 7, 5): ( datetime(2014, 7, 7, 11, 15), datetime(2014, 7, 4, 15), ), datetime(2014, 7, 7, 9, 1): ( datetime(2014, 7, 7, 11, 15), datetime(2014, 7, 4, 15), ), datetime(2014, 7, 7, 12): ( datetime(2014, 7, 7, 15), datetime(2014, 7, 7, 11, 15), ), }, ), ( [ BusinessHour(n=-1, start=["17:00", "08:00"], end=["05:00", "10:00"]), BusinessHour(n=-2, start=["08:00", "17:00"], end=["10:00", "03:00"]), ], { datetime(2014, 7, 1, 11): ( datetime(2014, 7, 1, 8), datetime(2014, 7, 1, 17), ), datetime(2014, 7, 1, 18): ( datetime(2014, 7, 1, 17), datetime(2014, 7, 2, 8), ), datetime(2014, 7, 1, 23): ( datetime(2014, 7, 1, 17), datetime(2014, 7, 2, 8), ), datetime(2014, 7, 2, 8): ( datetime(2014, 7, 2, 8), datetime(2014, 7, 2, 8), ), datetime(2014, 7, 2, 9): ( datetime(2014, 7, 2, 8), datetime(2014, 7, 2, 17), ), datetime(2014, 7, 2, 16, 59): ( datetime(2014, 7, 2, 8), datetime(2014, 7, 2, 17), ), datetime(2014, 7, 5, 10): ( datetime(2014, 7, 4, 17), datetime(2014, 7, 7, 8), ), datetime(2014, 7, 4, 10): ( datetime(2014, 7, 4, 8), datetime(2014, 7, 4, 17), ), datetime(2014, 7, 4, 23): ( datetime(2014, 7, 4, 17), datetime(2014, 7, 7, 8), ), datetime(2014, 7, 6, 10): ( datetime(2014, 7, 4, 17), datetime(2014, 7, 7, 8), ), datetime(2014, 7, 7, 5): ( datetime(2014, 7, 4, 17), datetime(2014, 7, 7, 8), ), datetime(2014, 7, 7, 18): ( datetime(2014, 7, 7, 17), datetime(2014, 7, 8, 8), ), }, ), ] @pytest.mark.parametrize("case", opening_time_cases) def test_opening_time(self, case): _offsets, cases = case for offset in _offsets: for dt, (exp_next, exp_prev) in cases.items(): assert offset._next_opening_time(dt) == exp_next assert offset._prev_opening_time(dt) == exp_prev