def __init__(
        self,
        input: ScheduleInputSpec,
        output: ScheduleOutputSpec,
        stride: Union[int, str, timedelta],
        window_size: Union[int, str, timedelta],
        start: Union[int, str, datetime] = "now",
        slack: Union[int, str, timedelta] = 0,
    ):
        self.input = input
        self.output = output
        self.stride = time_interval_to_ms(stride)
        self.window_size = time_interval_to_ms(window_size)
        self.start = self._get_start(start, input)
        self.slack = time_interval_to_ms(slack,
                                         allow_zero=True,
                                         allow_inf=True)

        self.validate()
 def test_ms(self):
     assert 60000 == time_interval_to_ms(60000)
     assert 123456789 == time_interval_to_ms(123456789)
 def test_invalid_type(self, t):
     with pytest.raises(TypeError, match="must be"):
         time_interval_to_ms(t)
 def test_allow_zero_and_inf(self):
     time_interval_to_ms(0, allow_zero=True, allow_inf=True)
     time_interval_to_ms("0h", allow_zero=True, allow_inf=True)
     time_interval_to_ms(timedelta(hours=0),
                         allow_zero=True,
                         allow_inf=True)
     time_interval_to_ms(-1, allow_zero=True, allow_inf=True)
     time_interval_to_ms(timedelta(hours=0),
                         allow_zero=True,
                         allow_inf=True)
     with pytest.raises(ValueError, match="positive"):
         time_interval_to_ms(-2)
 def test_allow_inf(self):
     time_interval_to_ms(-1, allow_inf=True)
     time_interval_to_ms(timedelta(milliseconds=-1), allow_inf=True)
     with pytest.raises(ValueError, match="positive"):
         time_interval_to_ms(0)
 def test_allow_zero(self):
     time_interval_to_ms(0, allow_zero=True)
     time_interval_to_ms("0h", allow_zero=True)
     time_interval_to_ms(timedelta(), allow_zero=True)
     with pytest.raises(ValueError, match="positive"):
         time_interval_to_ms(-1)
 def test_non_positive_intervals(self, time_interval):
     with pytest.raises(ValueError, match="positive"):
         time_interval_to_ms(time_interval)
 def test_time_interval_string_invalid(self, time_interval_string):
     with pytest.raises(ValueError, match=time_interval_string):
         time_interval_to_ms(time_interval_string)
 def test_time_interval_string(self, time_interval_string, expected_ms):
     assert time_interval_to_ms(time_interval_string) == expected_ms
 def test_timedelta(self):
     assert 2 * 60 * 1000 == time_interval_to_ms(timedelta(minutes=2))
     assert 3 * 60 * 60 * 1000 == time_interval_to_ms(timedelta(hours=3))