def tm_windows_examples(self): """ Generate a set of fixed time windows with the following relationships between them. The actual time scale and point in time may vary. Tbase = |_______________| Tsneigh= |__| Teneigh= |__| Toverl = |_____________| Tsupset= |_____________________| Tsubset= |_____| """ examples = {} now = self.now examples['Tbase'] = TimeWindow.from_timedelta(now, timedelta(minutes=10)) examples['Tsneigh'] = TimeWindow.from_timedelta( examples['Tbase'].since, -timedelta(minutes=1)) examples['Teneigh'] = TimeWindow.from_timedelta( examples['Tbase'].until, timedelta(minutes=1)) examples['Toverl'] = TimeWindow.from_timedelta( examples['Tbase'].since + examples['Tbase'].delta / 2, examples['Tbase'].delta) examples['Tsupset'] = TimeWindow( examples['Tbase'].since - timedelta(minutes=1), examples['Tbase'].until + timedelta(minutes=1)) examples['Tsubset'] = TimeWindow( examples['Tbase'].since + timedelta(minutes=1), examples['Tbase'].until - timedelta(minutes=1)) return examples
def test__repr__(self): tws = TimeWindowsCollection([ TimeWindow.from_timedelta(datetime(2015, 2, 19, 1, 0, 0), timedelta(minutes=10)), TimeWindow.from_timedelta(datetime(2015, 2, 19, 1, 5, 0), timedelta(minutes=10)), ]) # check that it does not raise an exception print(repr(tws)) # check that it does not raise any exception with unicode str(repr(tws))
def test_fromtimedelta(self): now = datetime.now() delta = timedelta(minutes=5) tw = TimeWindow.from_timedelta(now, delta) self.assertEqual(tw.since, now) self.assertEqual(tw.until, now + delta) self.assertEqual(tw.delta, delta) # Negative case tw = TimeWindow.from_timedelta(now, -delta) self.assertEqual(tw.since, now - delta) self.assertEqual(tw.until, now) self.assertEqual(tw.delta, delta)
def test_compress_spatial_time_area(self): # Test empty list res = TimeWindowsCollection([]).compressed() self.assertEqual(res.time_windows, []) # Test single window tws = TimeWindowsCollection([ TimeWindow.from_timedelta(datetime(2015, 2, 19, 1, 0, 0), timedelta(minutes=10)) ]) res = tws.compressed() self.assertEqual(res.time_windows, tws.time_windows) # Test two overlapping tws = TimeWindowsCollection([ TimeWindow.from_timedelta(datetime(2015, 2, 19, 1, 0, 0), timedelta(minutes=10)), TimeWindow.from_timedelta(datetime(2015, 2, 19, 1, 5, 0), timedelta(minutes=10)), ]) res = tws.compressed() self.assertEqual(res.time_windows, [ TimeWindow.from_timedelta(datetime(2015, 2, 19, 1, 0, 0), timedelta(minutes=15)), ]) # Test overlapping and contiguous tws = TimeWindowsCollection([ TimeWindow.from_timedelta(datetime(2015, 2, 19, 1, 0, 0), timedelta(minutes=10)), TimeWindow.from_timedelta(datetime(2015, 2, 19, 1, 5, 0), timedelta(minutes=8)), TimeWindow.from_timedelta(datetime(2015, 2, 19, 1, 5, 0), timedelta(minutes=10)), TimeWindow.from_timedelta(datetime(2015, 2, 19, 1, 15, 0), timedelta(minutes=3)), TimeWindow.from_timedelta(datetime(2015, 2, 19, 1, 0, 0), timedelta(minutes=3)), ]) res = tws.compressed() self.assertEqual(res.time_windows, [ TimeWindow.from_timedelta(datetime(2015, 2, 19, 1, 0, 0), timedelta(minutes=18)), ])
def test_hash(self): hash1 = hash( TimeWindow.from_timedelta(datetime(2015, 1, 1), timedelta(seconds=1))) for i in range(0, 2048): self.assertEqual( hash( TimeWindow.from_timedelta(datetime(2015, 1, 1), timedelta(seconds=1))), hash1) self.assertNotEqual( hash( TimeWindow.from_timedelta(datetime(2015, 1, 1), timedelta(seconds=1))), hash( TimeWindow.from_timedelta(datetime(2015, 1, 1, 1), timedelta(seconds=1)))) self.assertNotEqual( hash( TimeWindow.from_timedelta(datetime(2015, 1, 1), timedelta(seconds=1))), hash( TimeWindow.from_timedelta(datetime(2015, 1, 1), timedelta(seconds=2))))
def test_complement_spatial_time_area(self): period = TimeWindow.from_timedelta(datetime(2015, 2, 19, 1, 0, 0), timedelta(hours=1)) # Test on empty list res = TimeWindowsCollection([]).complement(period) self.assertEqual(res.time_windows, [period]) # Test on single included time window tws = TimeWindowsCollection([ TimeWindow.from_timedelta(datetime(2015, 2, 19, 1, 10, 0), timedelta(minutes=10)) ]) res = tws.complement(period) self.assertEqual(res.time_windows, [ TimeWindow.from_timedelta(datetime(2015, 2, 19, 1, 0, 0), timedelta(minutes=10)), TimeWindow.from_timedelta(datetime(2015, 2, 19, 1, 20, 0), timedelta(minutes=40)), ]) # Test on single boundary-snapped time window tws = TimeWindowsCollection([ TimeWindow.from_timedelta(datetime(2015, 0o2, 19, 1, 0, 0), timedelta(minutes=10)) ]) res = tws.complement(period) self.assertEqual(res.time_windows, [ TimeWindow.from_timedelta(datetime(2015, 2, 19, 1, 10, 0), timedelta(minutes=50)), ]) # Test on single partially included time window tws = TimeWindowsCollection([ TimeWindow.from_timedelta(datetime(2015, 2, 19, 1, 50, 0), timedelta(minutes=20)) ]) res = tws.complement(period) self.assertEqual(res.time_windows, [ TimeWindow.from_timedelta(datetime(2015, 2, 19, 1, 0, 0), timedelta(minutes=50)), ]) # Test on multiple compressed and ordered time windows tws = TimeWindowsCollection([ TimeWindow.from_timedelta(datetime(2015, 2, 19, 0, 50, 0), timedelta(minutes=20)), TimeWindow.from_timedelta(datetime(2015, 2, 19, 1, 20, 0), timedelta(minutes=5)), TimeWindow.from_timedelta(datetime(2015, 2, 19, 1, 50, 0), timedelta(minutes=20)) ]) res = tws.complement(period) self.assertEqual(res.time_windows, [ TimeWindow.from_timedelta(datetime(2015, 2, 19, 1, 10, 0), timedelta(minutes=10)), TimeWindow.from_timedelta(datetime(2015, 2, 19, 1, 25, 0), timedelta(minutes=25)), ]) # Test on multiple non-compressed and un-ordered time windows tws = TimeWindowsCollection([ TimeWindow.from_timedelta(datetime(2015, 2, 19, 1, 20, 0), timedelta(minutes=5)), TimeWindow.from_timedelta(datetime(2015, 2, 19, 1, 50, 0), timedelta(minutes=20)), TimeWindow.from_timedelta(datetime(2015, 2, 19, 0, 52, 0), timedelta(minutes=18)), TimeWindow.from_timedelta(datetime(2015, 2, 19, 0, 52, 0), timedelta(minutes=8)), TimeWindow.from_timedelta(datetime(2015, 2, 19, 0, 50, 0), timedelta(minutes=5)), ]) res = tws.complement(period) self.assertEqual(res.time_windows, [ TimeWindow.from_timedelta(datetime(2015, 2, 19, 1, 10, 0), timedelta(minutes=10)), TimeWindow.from_timedelta(datetime(2015, 2, 19, 1, 25, 0), timedelta(minutes=25)), ])