def test_walk(): spans = list(Duration('1h').walk(2 * 3600, limit=2, start_open=False)) assert spans == [ span(2 * 3600, 3 * 3600, start_open=False), span(3 * 3600, 4 * 3600, start_open=False) ] spans = list(Duration('1h').walk(2 * 3600, limit=2, start_open=True)) assert spans == [ span(1 * 3600, 2 * 3600, start_open=True), span(2 * 3600, 3 * 3600, start_open=True) ] spans = list( Duration('1h').walk(2 * 3600, limit=2, backward=True, start_open=False)) assert spans == [ span(2 * 3600, 3 * 3600, start_open=False), span(1 * 3600, 2 * 3600, start_open=False) ] spans = list( Duration('1h').walk(2 * 3600, limit=2, backward=True, start_open=True)) assert spans == [ span(1 * 3600, 2 * 3600, start_open=True), span(0 * 3600, 1 * 3600, start_open=True) ] r = Duration('1h') for s in r.walk(2 * 3600, limit=10): assert s == span(2 * 3600, 3 * 3600) break for s in r.walk(2 * 3600, limit=10): assert s == span(2 * 3600, 3 * 3600) break
def test_offset_with_duration_non_uniform(): duration = Duration('20h') raw_points = [(ts.start, float(i + 1)) for i, ts in enumerate(duration.walk(0, limit=3))] assert np.allclose(raw_points, [(0, 1), (20 * HOUR, 2), (DAY, 3)]) points = Points(raw_points, uniform=False) f = points.offset(1, duration=duration) assert f.domain.start == 20 * HOUR assert f.domain.end == DAY + 20 * HOUR assert np.allclose(f.sample_points(), [(20 * HOUR, 1), (DAY, 2), (DAY + 20 * HOUR, 3)]) assert f(19 * HOUR) is None assert f(22 * HOUR) == 1.5 assert f(DAY + 10 * HOUR) == 2.5 assert f(DAY + 20.5 * HOUR) is None assert f.x_next(19 * HOUR) == 20 * HOUR assert f.x_next(22 * HOUR) == DAY assert f.x_next(DAY + 10 * HOUR) == DAY + 20 * HOUR assert f.x_next(DAY + 20.5 * HOUR) is None assert f.x_previous(19 * HOUR) is None assert f.x_previous(22 * HOUR) == 20 * HOUR assert f.x_previous(DAY + 10 * HOUR) == DAY assert f.x_previous(DAY + 20.5 * HOUR) == DAY + 20 * HOUR