def test_zones(self): dao = Dao() f1 = FeedInfo("") z1 = Zone("", "Z1") s1 = Stop("", "S1", "Stop 1", 45.0, 0.0) s2 = Stop("", "S2", "Stop 2", 45.1, 0.1, zone_id="Z1") s3 = Stop("", "S3", "Stop 3", 45.2, 0.2) s3.zone = z1 dao.add_all([f1, z1, s1, s2, s3]) dao.commit() self.assertTrue(len(dao.zones()) == 1) z = dao.zone("Z1") self.assertTrue(len(z.stops) == 2) for stop in z.stops: self.assertTrue(stop.zone == z) s = dao.stop("S1") self.assertTrue(s.zone == None) s = dao.stop("S2") self.assertTrue(s.zone == z) s = dao.stop("S3") self.assertTrue(s.zone == z)
def test_zones(self): dao = Dao() f1 = FeedInfo("") z1 = Zone("", "Z1") s1 = Stop("", "S1", "Stop 1", 45.0, 0.0) s2 = Stop("", "S2", "Stop 2", 45.1, 0.1, zone_id="Z1") s3 = Stop("", "S3", "Stop 3", 45.2, 0.2) s3.zone = z1 dao.add_all([ f1, z1, s1, s2, s3 ]) dao.commit() self.assertTrue(len(dao.zones()) == 1) z = dao.zone("Z1") self.assertTrue(len(z.stops) == 2) for stop in z.stops: self.assertTrue(stop.zone == z) s = dao.stop("S1") self.assertTrue(s.zone == None) s = dao.stop("S2") self.assertTrue(s.zone == z) s = dao.stop("S3") self.assertTrue(s.zone == z)
def _test_one_gtfs(self, gtfs): clear_mappers() dao = Dao(DAO_URL, sql_logging=SQL_LOG) dao.load_gtfs(gtfs) # Check stop time normalization and interpolation for trip in dao.trips(prefetch_stop_times=True): stopseq = 0 n_stoptimes = len(trip.stop_times) last_stop = None distance = trip.stop_times[0].shape_dist_traveled last_stoptime = None last_interpolated_speed = None for stoptime in trip.stop_times: self.assertTrue(stoptime.stop_sequence == stopseq) if stopseq == 0: self.assertTrue(stoptime.arrival_time is None) else: self.assertTrue(stoptime.arrival_time is not None) if stopseq == n_stoptimes - 1: self.assertTrue(stoptime.departure_time is None) else: self.assertTrue(stoptime.departure_time is not None) if last_stop is not None: distance += orthodromic_distance(last_stop, stoptime.stop) last_stop = stoptime.stop if trip.shape is not None: self.assertTrue(stoptime.shape_dist_traveled >= distance) else: self.assertAlmostEqual(stoptime.shape_dist_traveled, distance, 1) stopseq += 1 if stoptime.interpolated or (last_stoptime is not None and last_stoptime.interpolated): dist = stoptime.shape_dist_traveled - last_stoptime.shape_dist_traveled time = stoptime.arrival_time - last_stoptime.departure_time speed = dist * 1.0 / time if last_interpolated_speed is not None: self.assertAlmostEqual(speed, last_interpolated_speed, 2) last_interpolated_speed = speed if not stoptime.interpolated: last_interpolated_speed = None last_stoptime = stoptime # Get all hops hops = dao.hops() nhops = 0 for st1, st2 in hops: self.assertTrue(st1.stop_sequence + 1 == st2.stop_sequence) self.assertTrue(st1.trip == st2.trip) nhops += 1 # Get hops with a delta of 2 hops = dao.hops(delta=2) nhops2 = 0 for st1, st2 in hops: self.assertTrue(st1.stop_sequence + 2 == st2.stop_sequence) self.assertTrue(st1.trip == st2.trip) nhops2 += 1 ntrips = len(list(dao.trips())) # Assume all trips have len > 2 self.assertTrue(nhops == nhops2 + ntrips) # Test shape_dist_traveled on stoptimes for trip in dao.trips(): # Assume no shapes for now distance = 0.0 last_stop = None for stoptime in trip.stop_times: if last_stop is not None: distance += orthodromic_distance(last_stop, stoptime.stop) last_stop = stoptime.stop if trip.shape: self.assertTrue(stoptime.shape_dist_traveled >= distance) else: self.assertAlmostEqual(stoptime.shape_dist_traveled, distance, 2) # Test shape normalization for shape in dao.shapes(): distance = 0.0 last_pt = None ptseq = 0 for point in shape.points: if last_pt is not None: distance += orthodromic_distance(last_pt, point) last_pt = point self.assertAlmostEqual(point.shape_dist_traveled, distance, 2) self.assertTrue(point.shape_pt_sequence == ptseq) ptseq += 1 # Check zone-stop relationship for zone in dao.zones(prefetch_stops=True): for stop in zone.stops: self.assertTrue(stop.zone == zone) for stop in dao.stops(): if stop.zone: self.assertTrue(stop in stop.zone.stops)
def _test_one_gtfs(self, gtfs): dao = Dao(DAO_URL, sql_logging=SQL_LOG) dao.load_gtfs(gtfs) # Check stop time normalization and interpolation for trip in dao.trips(prefetch_stop_times=True): stopseq = 0 n_stoptimes = len(trip.stop_times) last_stop = None distance = trip.stop_times[0].shape_dist_traveled last_stoptime = None last_interpolated_speed = None for stoptime in trip.stop_times: self.assertTrue(stoptime.stop_sequence == stopseq) if stopseq == 0: self.assertTrue(stoptime.arrival_time is None) else: self.assertTrue(stoptime.arrival_time is not None) if stopseq == n_stoptimes - 1: self.assertTrue(stoptime.departure_time is None) else: self.assertTrue(stoptime.departure_time is not None) if last_stop is not None: distance += orthodromic_distance(last_stop, stoptime.stop) last_stop = stoptime.stop if trip.shape is not None: self.assertTrue(stoptime.shape_dist_traveled >= distance) else: self.assertAlmostEqual(stoptime.shape_dist_traveled, distance, 1) stopseq += 1 if stoptime.interpolated or (last_stoptime is not None and last_stoptime.interpolated): dist = stoptime.shape_dist_traveled - last_stoptime.shape_dist_traveled time = stoptime.arrival_time - last_stoptime.departure_time speed = dist * 1.0 / time if last_interpolated_speed is not None: self.assertAlmostEqual(speed, last_interpolated_speed, 2) last_interpolated_speed = speed if not stoptime.interpolated: last_interpolated_speed = None last_stoptime = stoptime # Get all hops hops = dao.hops() nhops = 0 for st1, st2 in hops: self.assertTrue(st1.stop_sequence + 1 == st2.stop_sequence) self.assertTrue(st1.trip == st2.trip) nhops += 1 # Get hops with a delta of 2 hops = dao.hops(delta=2) nhops2 = 0 for st1, st2 in hops: self.assertTrue(st1.stop_sequence + 2 == st2.stop_sequence) self.assertTrue(st1.trip == st2.trip) nhops2 += 1 ntrips = len(list(dao.trips())) # Assume all trips have len > 2 self.assertTrue(nhops == nhops2 + ntrips) # Test shape_dist_traveled on stoptimes for trip in dao.trips(): # Assume no shapes for now distance = 0.0 last_stop = None for stoptime in trip.stop_times: if last_stop is not None: distance += orthodromic_distance(last_stop, stoptime.stop) last_stop = stoptime.stop if trip.shape: self.assertTrue(stoptime.shape_dist_traveled >= distance) else: self.assertAlmostEqual(stoptime.shape_dist_traveled, distance, 2) # Test shape normalization for shape in dao.shapes(): distance = 0.0 last_pt = None ptseq = 0 for point in shape.points: if last_pt is not None: distance += orthodromic_distance(last_pt, point) last_pt = point self.assertAlmostEqual(point.shape_dist_traveled, distance, 2) self.assertTrue(point.shape_pt_sequence == ptseq) ptseq += 1 # Check zone-stop relationship for zone in dao.zones(prefetch_stops=True): for stop in zone.stops: self.assertTrue(stop.zone == zone) for stop in dao.stops(): if stop.zone: self.assertTrue(stop in stop.zone.stops)