def correct_services_from_test_gtfs(): services = [] services.append( Service('1001', [ Route( route_short_name='BTR', mode='bus', stops=[ Stop( id='BSE', x=-0.1413621, y=51.5226864, epsg='epsg:4326'), Stop(id='BSN', x=-0.140053, y=51.5216199, epsg='epsg:4326') ], trips={'BT1': '03:21:00'}, arrival_offsets=['0:00:00', '0:02:00'], departure_offsets=['0:00:00', '0:02:00']) ])) services.append( Service('1002', [ Route( route_short_name='RTR', mode='rail', stops=[ Stop( id='RSN', x=-0.1410946, y=51.5231335, epsg='epsg:4326'), Stop( id='RSE', x=-0.1421595, y=51.5192615, epsg='epsg:4326') ], trips={'RT1': '03:21:00'}, arrival_offsets=['0:00:00', '0:02:00'], departure_offsets=['0:00:00', '0:02:00']) ])) return services
def test_read_gtfs_returns_expected_schedule(correct_stops_to_service_mapping_from_test_gtfs, correct_stops_to_route_mapping_from_test_gtfs): schedule = Schedule('epsg:4326') schedule.read_gtfs_schedule(gtfs_test_file, '20190604') assert schedule.services['1001'] == Service( '1001', [Route( route_short_name='BTR', mode='bus', stops=[Stop(id='BSE', x=-0.1413621, y=51.5226864, epsg='epsg:4326'), Stop(id='BSN', x=-0.140053, y=51.5216199, epsg='epsg:4326')], trips={'BT1': '03:21:00'}, arrival_offsets=['0:00:00', '0:02:00'], departure_offsets=['0:00:00', '0:02:00'] )]) assert schedule.services['1002'] == Service( '1002', [Route( route_short_name='RTR', mode='rail', stops=[Stop(id='RSN', x=-0.1410946, y=51.5231335, epsg='epsg:4326'), Stop(id='RSE', x=-0.1421595, y=51.5192615, epsg='epsg:4326')], trips={'RT1': '03:21:00'}, arrival_offsets=['0:00:00', '0:02:00'], departure_offsets=['0:00:00', '0:02:00'] )]) assert_semantically_equal(schedule.stop_to_service_ids_map(), correct_stops_to_service_mapping_from_test_gtfs) assert_semantically_equal(schedule.stop_to_route_ids_map(), correct_stops_to_route_mapping_from_test_gtfs)
def test_adding_schedules_retains_shared_graph(schedule): schedule_2 = Schedule(epsg='epsg:27700', services=[ Service(id='service3', routes=[ Route(id='31', route_short_name='3route1', mode='bus', stops=[ Stop(id='30', x=529455.7452394223, y=182401.37630677427, epsg='epsg:27700', linkRefId='0'), Stop(id='31', x=529350.7866124967, y=182388.0201078112, epsg='epsg:27700', linkRefId='1')], trips={'trip_id': ['route1_04:40:00'], 'trip_departure_time': ['04:40:00'], 'vehicle_id': ['veh_0_bus']}, arrival_offsets=['00:00:00', '00:02:00'], departure_offsets=['00:00:00', '00:02:00'], route=['0', '1']), Route(id='32', route_short_name='3route2', mode='bus', stops=[ Stop(id='31', x=529455.7452394223, y=182401.37630677427, epsg='epsg:27700', linkRefId='1'), Stop(id='32', x=529350.7866124967, y=182388.0201078112, epsg='epsg:27700', linkRefId='2')], trips={'trip_id': ['route2_05:40:00'], 'trip_departure_time': ['05:40:00'], 'vehicle_id': ['veh_1_bus']}, arrival_offsets=['00:00:00', '00:03:00'], departure_offsets=['00:00:00', '00:05:00'], route=['1', '2']) ])]) schedule.add(schedule_2) assert_all_elements_share_graph(schedule)
def test_routes_exact(stop_epsg_27700): a = Route(route_short_name='route', mode='bus', stops=[stop_epsg_27700, stop_epsg_27700], trips={ 'trip_id': ['VJ00938baa194cee94700312812d208fe79f3297ee_04:40:00'], 'trip_departure_time': ['04:40:00'], 'vehicle_id': ['veh_1_bus'] }, arrival_offsets=['00:00:00', '00:02:00'], departure_offsets=['00:00:00', '00:02:00']) b = Route(route_short_name='route', mode='bus', stops=[stop_epsg_27700, stop_epsg_27700], trips={ 'trip_id': ['VJ00938baa194cee94700312812d208fe79f3297ee_04:40:00'], 'trip_departure_time': ['04:40:00'], 'vehicle_id': ['veh_1_bus'] }, arrival_offsets=['00:00:00', '00:02:00'], departure_offsets=['00:00:00', '00:02:00']) assert a.is_exact(b)
def correct_schedule(): return Schedule(epsg='epsg:27700', services=[ Service(id='service', routes=[ Route(id='1', route_short_name='route', mode='bus', stops=[ Stop(id='0', x=529455.7452394223, y=182401.37630677427, epsg='epsg:27700', linkRefId='1'), Stop(id='1', x=529350.7866124967, y=182388.0201078112, epsg='epsg:27700', linkRefId='2')], trips={'trip_id': ['VJ00938baa194cee94700312812d208fe79f3297ee_04:40:00'], 'trip_departure_time': ['04:40:00'], 'vehicle_id': ['veh_1_bus']}, arrival_offsets=['00:00:00', '00:02:00'], departure_offsets=['00:00:00', '00:02:00'], route=['1', '2']), Route(id='2', route_short_name='route1', mode='bus', stops=[ Stop(id='0', x=529455.7452394223, y=182401.37630677427, epsg='epsg:27700', linkRefId='1'), Stop(id='1', x=529350.7866124967, y=182388.0201078112, epsg='epsg:27700', linkRefId='2')], trips={'trip_id': ['Blep_04:40:00'], 'trip_departure_time': ['05:40:00'], 'vehicle_id': ['veh_2_bus']}, arrival_offsets=['00:00:00', '00:03:00'], departure_offsets=['00:00:00', '00:05:00'], route=['1', '2']) ]) ])
def basic_service(): return Service(id='service1', routes=[ Route(id='1', route_short_name='route1', mode='bus', stops=[ Stop('0', x=1, y=1, epsg='epsg:4326'), Stop('1', x=2, y=2, epsg='epsg:4326'), Stop('2', x=3, y=3, epsg='epsg:4326') ], trips={ 'trip_id': ['route1_04:40:00'], 'trip_departure_time': ['04:40:00'], 'vehicle_id': ['veh_bus_1'] }, arrival_offsets=['00:00:00', '00:02:00'], departure_offsets=['00:00:00', '00:02:00'], route=[]), Route(id='2', route_short_name='route2', mode='bus', stops=[ Stop('1', x=2, y=2, epsg='epsg:4326'), Stop('2', x=3, y=3, epsg='epsg:4326') ], trips={ 'trip_id': ['route2_05:40:00'], 'trip_departure_time': ['05:40:00'], 'vehicle_id': ['veh_bus_2'] }, arrival_offsets=['00:00:00', '00:03:00'], departure_offsets=['00:00:00', '00:05:00'], route=[]), Route(id='3', route_short_name='route3', mode='bus', stops=[ Stop('0', x=1, y=1, epsg='epsg:4326'), Stop('1', x=2, y=2, epsg='epsg:4326'), ], trips={ 'trip_id': ['route1_04:40:00'], 'trip_departure_time': ['04:40:00'], 'vehicle_id': ['veh_bus_3'] }, arrival_offsets=['00:00:00', '00:02:00'], departure_offsets=['00:00:00', '00:02:00'], route=[]), Route(id='4', route_short_name='route4', mode='bus', stops=[ Stop('2', x=3, y=3, epsg='epsg:4326'), Stop('1', x=2, y=2, epsg='epsg:4326'), Stop('0', x=1, y=1, epsg='epsg:4326') ], trips={ 'trip_id': ['route2_05:40:00'], 'trip_departure_time': ['05:40:00'], 'vehicle_id': ['veh_bus_4'] }, arrival_offsets=['00:00:00', '00:03:00'], departure_offsets=['00:00:00', '00:05:00'], route=[]) ])
def service_edge_case_loopy_and_non_overlapping_graph(): # inspired by district and circle LU lines return Service(id='service1', routes=[ Route(id='1_dir_1', route_short_name='route1', mode='rail', stops=[ Stop('A', x=-1, y=0, epsg='epsg:4326'), Stop('C', x=-3, y=0, epsg='epsg:4326') ], trips={ 'trip_id': ['route1_04:40:00'], 'trip_departure_time': ['04:40:00'], 'vehicle_id': ['veh_bus_1'] }, arrival_offsets=['', '', ''], departure_offsets=['', '', '']), Route(id='2_dir_2', route_short_name='route2', mode='rail', stops=[ Stop('F', x=-6, y=0, epsg='epsg:4326'), Stop('A', x=-1, y=0, epsg='epsg:4326') ], trips={ 'trip_id': ['route2_05:40:00'], 'trip_departure_time': ['05:40:00'], 'vehicle_id': ['veh_bus_2'] }, arrival_offsets=['', '', ''], departure_offsets=['', '', '']), Route(id='3_dir_1', route_short_name='route3', mode='rail', stops=[ Stop('E', x=-5, y=0, epsg='epsg:4326'), Stop('F', x=-6, y=0, epsg='epsg:4326') ], trips={ 'trip_id': ['route1_04:40:00'], 'trip_departure_time': ['04:40:00'], 'vehicle_id': ['veh_bus_3'] }, arrival_offsets=['', '', ''], departure_offsets=['', '', '']), Route(id='4_dir_1', route_short_name='route4', mode='rail', stops=[ Stop('A', x=-1, y=0, epsg='epsg:4326'), Stop('B', x=-2, y=0, epsg='epsg:4326'), Stop('C', x=-3, y=0, epsg='epsg:4326'), Stop('D', x=-4, y=0, epsg='epsg:4326'), Stop('E', x=-5, y=0, epsg='epsg:4326') ], trips={ 'trip_id': ['route1_04:40:00'], 'trip_departure_time': ['04:40:00'], 'vehicle_id': ['veh_bus_4'] }, arrival_offsets=['', '', ''], departure_offsets=['', '', '']), ])
def service_with_routes_that_have_non_overlapping_graph_edges(): return Service(id='service1', routes=[ Route(id='1_dir_1', route_short_name='route1', mode='rail', stops=[ Stop('A', x=0, y=1, epsg='epsg:4326'), Stop('B', x=0, y=2, epsg='epsg:4326'), Stop('C', x=0, y=3, epsg='epsg:4326'), Stop('D', x=0, y=4, epsg='epsg:4326') ], trips={ 'trip_id': ['route1_04:40:00'], 'trip_departure_time': ['04:40:00'], 'vehicle_id': ['veh_bus_1'] }, arrival_offsets=['', '', ''], departure_offsets=['', '', '']), Route(id='2_dir_1', route_short_name='route2', mode='rail', stops=[ Stop('A', x=0, y=1, epsg='epsg:4326'), Stop('C', x=0, y=3, epsg='epsg:4326') ], trips={ 'trip_id': ['route2_05:40:00'], 'trip_departure_time': ['05:40:00'], 'vehicle_id': ['veh_bus_2'] }, arrival_offsets=['', '', ''], departure_offsets=['', '', '']), Route(id='3_dir_2', route_short_name='route3', mode='rail', stops=[ Stop('C', x=0, y=3, epsg='epsg:4326'), Stop('B', x=0, y=2, epsg='epsg:4326'), Stop('A', x=0, y=1, epsg='epsg:4326') ], trips={ 'trip_id': ['route1_04:40:00'], 'trip_departure_time': ['04:40:00'], 'vehicle_id': ['veh_bus_3'] }, arrival_offsets=['', '', ''], departure_offsets=['', '', '']), Route(id='4_dir_2', route_short_name='route4', mode='rail', stops=[ Stop('C', x=0, y=3, epsg='epsg:4326'), Stop('A', x=0, y=1, epsg='epsg:4326') ], trips={ 'trip_id': ['route1_04:40:00'], 'trip_departure_time': ['04:40:00'], 'vehicle_id': ['veh_bus_4'] }, arrival_offsets=['', '', ''], departure_offsets=['', '', '']), ])
def test_schedule(): return Schedule( epsg='epsg:27700', services=[ Service( id='service', routes=[ Route( route_short_name='route', mode='bus', stops=[ Stop(id='0', x=528504.1342843144, y=182155.7435136598, epsg='epsg:27700'), Stop(id='0', x=528504.1342843144, y=182155.7435136598, epsg='epsg:27700') ], trips={ 'trip_id': [ 'VJ00938baa194cee94700312812d208fe79f3297ee_04:40:00' ], 'trip_departure_time': ['04:40:00'], 'vehicle_id': ['veh_1_bus'] }, arrival_offsets=['00:00:00', '00:02:00'], departure_offsets=['00:00:00', '00:02:00']), Route(route_short_name='route1', mode='bus', stops=[ Stop(id='0', x=528504.1342843144, y=182155.7435136598, epsg='epsg:27700'), Stop(id='0', x=528504.1342843144, y=182155.7435136598, epsg='epsg:27700') ], trips={ 'trip_id': ['Blep_04:40:00'], 'trip_departure_time': ['05:40:00'], 'vehicle_id': ['veh_2_bus'] }, arrival_offsets=['00:00:00', '00:03:00'], departure_offsets=['00:00:00', '00:05:00']) ]) ])
def test_adding_merges_separable_schedules(route): schedule = Schedule(epsg='epsg:4326', services=[Service(id='1', routes=[route])]) before_graph_nodes = schedule.reference_nodes before_graph_edges = schedule.reference_edges a = Stop(id='10', x=40, y=20, epsg='epsg:27700', linkRefId='1') b = Stop(id='20', x=10, y=20, epsg='epsg:27700', linkRefId='2') c = Stop(id='30', x=30, y=30, epsg='epsg:27700', linkRefId='3') d = Stop(id='40', x=70, y=50, epsg='epsg:27700', linkRefId='4') schedule_to_be_added = Schedule(epsg='epsg:4326', services=[Service(id='2', routes=[ Route( route_short_name='name', mode='bus', stops=[a, b, c, d], trips={'1': '1', '2': '2'}, arrival_offsets=['00:00:00', '00:03:00', '00:07:00', '00:13:00'], departure_offsets=['00:00:00', '00:05:00', '00:09:00', '00:15:00'], route=['1', '2', '3', '4'], id='1') ])]) tba_graph_nodes = schedule_to_be_added.reference_nodes tba_graph_edges = schedule_to_be_added.reference_edges schedule.add(schedule_to_be_added) assert schedule.services == { '1': Service(id='1', routes=[route]), '2': Service(id='2', routes=[route])} assert schedule.epsg == 'epsg:4326' assert schedule.epsg == schedule_to_be_added.epsg assert set(schedule._graph.nodes()) == set(before_graph_nodes) | set(tba_graph_nodes) assert set(schedule._graph.edges()) == set(before_graph_edges) | set(tba_graph_edges)
def correct_services_from_test_pt2matsim_schedule(): stops = [Stop(id='26997928P', x='528464.1342843144', y='182179.7435136598', epsg='epsg:27700'), Stop(id='26997928P.link:1', x='528464.1342843144', y='182179.7435136598', epsg='epsg:27700')] stops[0].add_additional_attributes({'name': 'Brunswick Place (Stop P)', 'isBlocking': 'false'}) stops[1].add_additional_attributes({'name': 'Brunswick Place (Stop P)', 'isBlocking': 'false'}) services = [Service(id='10314', routes=[ Route( route_short_name='12', mode='bus', stops=stops, route=['1'], trips={ 'trip_id': ['VJ00938baa194cee94700312812d208fe79f3297ee_04:40:00'], 'trip_departure_time': ['04:40:00'], 'vehicle_id': ['veh_bus_1'] }, arrival_offsets=['00:00:00', '00:02:00'], departure_offsets=['00:00:00', '00:02:00'], await_departure=[True, True] ) ]) ] return services
def test_build_graph_builds_correct_graph(): route = Route(route_short_name='name', mode='bus', stops=[Stop(id='1', x=4, y=2, epsg='epsg:27700'), Stop(id='2', x=1, y=2, epsg='epsg:27700'), Stop(id='3', x=3, y=3, epsg='epsg:27700'), Stop(id='4', x=7, y=5, epsg='epsg:27700')], trips={'trip_id': ['1', '2'], 'trip_departure_time': ['1', '2'], 'vehicle_id': ['veh_3_bus', 'veh_4_bus']}, arrival_offsets=['1', '2'], departure_offsets=['1', '2']) g = route.graph() assert_semantically_equal(dict(g.nodes(data=True)), {'1': {'routes': {''}, 'id': '1', 'x': 4.0, 'y': 2.0, 'epsg': 'epsg:27700', 'lat': 49.76682779861249, 'lon': -7.557106577683727, 's2_id': 5205973754090531959, 'name': ''}, '2': {'routes': {''}, 'id': '2', 'x': 1.0, 'y': 2.0, 'epsg': 'epsg:27700', 'lat': 49.766825803756994, 'lon': -7.557148039524952, 's2_id': 5205973754090365183, 'name': ''}, '3': {'routes': {''}, 'id': '3', 'x': 3.0, 'y': 3.0, 'epsg': 'epsg:27700', 'lat': 49.76683608549253, 'lon': -7.557121424907424, 's2_id': 5205973754090203369, 'name': ''}, '4': {'routes': {''}, 'id': '4', 'x': 7.0, 'y': 5.0, 'epsg': 'epsg:27700', 'lat': 49.766856648946295, 'lon': -7.5570681956375, 's2_id': 5205973754097123809, 'name': ''}}) assert_semantically_equal(g.edges(data=True)._adjdict, {'1': {'2': {'routes': {''}}}, '2': {'3': {'routes': {''}}}, '3': {'4': {'routes': {''}}}, '4': {}})
def write_transitLinesTransitRoute(transitLine, transitRoutes, transportMode): mode = transportMode['transportMode'] service_id = transitLine['transitLine']['id'] service_routes = [] for transitRoute, transitRoute_val in transitRoutes.items(): stops = [ Stop(s['stop']['refId'], x=transit_stop_id_mapping[s['stop']['refId']]['x'], y=transit_stop_id_mapping[s['stop']['refId']]['y'], epsg=epsg, transformer=transformer) for s in transitRoute_val['stops'] ] for s in stops: s.add_additional_attributes(transit_stop_id_mapping[s.id]) arrival_offsets = [] departure_offsets = [] await_departure = [] for stop in transitRoute_val['stops']: if 'departureOffset' not in stop[ 'stop'] and 'arrivalOffset' not in stop['stop']: pass elif 'departureOffset' not in stop['stop']: arrival_offsets.append(stop['stop']['arrivalOffset']) departure_offsets.append(stop['stop']['arrivalOffset']) elif 'arrivalOffset' not in stop['stop']: arrival_offsets.append(stop['stop']['departureOffset']) departure_offsets.append(stop['stop']['departureOffset']) else: arrival_offsets.append(stop['stop']['arrivalOffset']) departure_offsets.append(stop['stop']['departureOffset']) if 'awaitDeparture' in stop['stop']: await_departure.append( str(stop['stop']['awaitDeparture']).lower() in ['true', '1']) route = [ r_val['link']['refId'] for r_val in transitRoute_val['links'] ] trips = {} for dep in transitRoute_val['departure_list']: trips[dep['departure'] ['id']] = dep['departure']['departureTime'] r = Route(route_short_name=transitLine['transitLine']['name'], mode=mode, stops=stops, route=route, trips=trips, arrival_offsets=arrival_offsets, departure_offsets=departure_offsets, id=transitRoute, await_departure=await_departure) service_routes.append(r) services.append(Service(id=service_id, routes=service_routes))
def test_is_valid_with_single_stop_network(): route = Route(route_short_name='name', mode='bus', stops=[Stop(id='1', x=4, y=2, epsg='epsg:27700')], trips={}, arrival_offsets=[], departure_offsets=[]) assert not route.is_valid_route()
def test_has_more_than_one_stop_with_route_with_single_stop(): route = Route(route_short_name='name', mode='bus', stops=[Stop(id='1', x=4, y=2, epsg='epsg:27700')], trips={}, arrival_offsets=[], departure_offsets=[]) assert not route.has_more_than_one_stop()
def schedule(): route_1 = Route(route_short_name='name', mode='bus', id='1', stops=[Stop(id='1', x=4, y=2, epsg='epsg:27700'), Stop(id='2', x=1, y=2, epsg='epsg:27700'), Stop(id='3', x=3, y=3, epsg='epsg:27700'), Stop(id='4', x=7, y=5, epsg='epsg:27700')], trips={'1': '13:00:00', '2': '13:30:00'}, arrival_offsets=['00:00:00', '00:03:00', '00:07:00', '00:13:00'], departure_offsets=['00:00:00', '00:05:00', '00:09:00', '00:15:00']) route_2 = Route(route_short_name='name_2', mode='bus', id='2', stops=[Stop(id='5', x=4, y=2, epsg='epsg:27700'), Stop(id='6', x=1, y=2, epsg='epsg:27700'), Stop(id='7', x=3, y=3, epsg='epsg:27700'), Stop(id='8', x=7, y=5, epsg='epsg:27700')], trips={'1': '11:00:00', '2': '13:00:00'}, arrival_offsets=['00:00:00', '00:03:00', '00:07:00', '00:13:00'], departure_offsets=['00:00:00', '00:05:00', '00:09:00', '00:15:00']) service = Service(id='service', routes=[route_1, route_2]) return Schedule(epsg='epsg:27700', services=[service])
def schedule(): return Schedule(epsg='epsg:27700', services=[ Service(id='service1', routes=[ Route(id='1', route_short_name='route1', mode='bus', stops=[ Stop(id='0', x=529455.7452394223, y=182401.37630677427, epsg='epsg:27700', linkRefId='0'), Stop(id='1', x=529350.7866124967, y=182388.0201078112, epsg='epsg:27700', linkRefId='1')], trips={'trip_id': ['route1_04:40:00'], 'trip_departure_time': ['04:40:00'], 'vehicle_id': ['veh_0_bus']}, arrival_offsets=['00:00:00', '00:02:00'], departure_offsets=['00:00:00', '00:02:00'], route=['0', '1']), Route(id='2', route_short_name='route2', mode='bus', stops=[ Stop(id='1', x=529455.7452394223, y=182401.37630677427, epsg='epsg:27700', linkRefId='1'), Stop(id='2', x=529350.7866124967, y=182388.0201078112, epsg='epsg:27700', linkRefId='2')], trips={'trip_id': ['route2_05:40:00'], 'trip_departure_time': ['05:40:00'], 'vehicle_id': ['veh_1_bus']}, arrival_offsets=['00:00:00', '00:03:00'], departure_offsets=['00:00:00', '00:05:00'], route=['1', '2']) ]), Service(id='service2', routes=[ Route(id='3', route_short_name='route3', mode='rail', stops=[ Stop(id='3', x=529455.7452394223, y=182401.37630677427, epsg='epsg:27700', linkRefId='3'), Stop(id='4', x=529350.7866124967, y=182388.0201078112, epsg='epsg:27700', linkRefId='4')], trips={'trip_id': ['route3_04:40:00'], 'trip_departure_time': ['04:40:00'], 'vehicle_id': ['veh_2_rail']}, arrival_offsets=['00:00:00', '00:02:00'], departure_offsets=['00:00:00', '00:02:00'], route=['3', '4']), Route(id='4', route_short_name='route4', mode='rail', stops=[ Stop(id='4', x=529455.7452394223, y=182401.37630677427, epsg='epsg:27700', linkRefId='4'), Stop(id='5', x=529350.7866124967, y=182388.0201078112, epsg='epsg:27700', linkRefId='5')], trips={'trip_id': ['route4_05:40:00'], 'trip_departure_time': ['05:40:00'], 'vehicle_id': ['veh_3_rail']}, arrival_offsets=['00:00:00', '00:03:00'], departure_offsets=['00:00:00', '00:05:00'], route=['4', '5']) ]) ])
def route(): return Route(route_short_name='route', mode='bus', stops=[Stop(id='0', x=528504.1342843144, y=182155.7435136598, epsg='epsg:27700'), Stop(id='0', x=528504.1342843144, y=182155.7435136598, epsg='epsg:27700')], trips={'trip_id': ['VJ00938baa194cee94700312812d208fe79f3297ee_04:40:00'], 'trip_departure_time': ['04:40:00'], 'vehicle_id': ['veh_1_bus']}, arrival_offsets=['00:00:00', '00:02:00'], departure_offsets=['00:00:00', '00:02:00'])
def similar_non_exact_test_route(): return Route(route_short_name='route', mode='bus', stops=[Stop(id='0', x=528504.1342843144, y=182155.7435136598, epsg='epsg:27700'), Stop(id='0', x=528504.1342843144, y=182155.7435136598, epsg='epsg:27700')], trips={'trip_id': ['Blep_04:40:00'], 'trip_departure_time': ['05:40:00'], 'vehicle_id': ['veh_1_bus']}, arrival_offsets=['00:00:00', '00:03:00'], departure_offsets=['00:00:00', '00:05:00'])
def test_route_is_not_in_exact_list(route, stop_epsg_27700): a = Route(route_short_name='route', mode='bus', stops=[stop_epsg_27700, stop_epsg_27700], trips={}, arrival_offsets=[], departure_offsets=[]) assert not a.isin_exact([route, route, route])
def test_accessing_route(schedule): assert schedule.route('1') == Route(route_short_name='name', mode='bus', id='1', stops=[Stop(id='1', x=4, y=2, epsg='epsg:27700'), Stop(id='2', x=1, y=2, epsg='epsg:27700'), Stop(id='3', x=3, y=3, epsg='epsg:27700'), Stop(id='4', x=7, y=5, epsg='epsg:27700')], trips={'1': '1', '2': '2'}, arrival_offsets=['00:00:00', '00:03:00', '00:07:00', '00:13:00'], departure_offsets=['00:00:00', '00:05:00', '00:09:00', '00:15:00'])
def test_routes_equal(stop_epsg_27700): a = Route(route_short_name='route', mode='bus', stops=[stop_epsg_27700, stop_epsg_27700], trips={ 'VJ00938baa194cee94700312812d208fe79f3297ee_04:40:00': '04:40:00' }, arrival_offsets=['00:00:00', '00:02:00'], departure_offsets=['00:00:00', '00:02:00']) b = Route(route_short_name='route', mode='bus', stops=[stop_epsg_27700, stop_epsg_27700], trips={}, arrival_offsets=[], departure_offsets=[]) assert a == b
def self_looping_route(): return Route( route_short_name='name', mode='bus', stops=[Stop(id='1', x=4, y=2, epsg='epsg:27700'), Stop(id='1', x=4, y=2, epsg='epsg:27700'), Stop(id='3', x=3, y=3, epsg='epsg:27700'), Stop(id='4', x=7, y=5, epsg='epsg:27700')], trips = {'trip_id': ['1', '2'], 'trip_departure_time': ['10:00:00', '20:00:00'], 'vehicle_id': ['veh_3_bus', 'veh_4_bus']}, arrival_offsets=['00:00:00', '00:03:00', '00:07:00', '00:13:00'], departure_offsets=['00:00:00', '00:05:00', '00:09:00', '00:15:00'])
def strongly_connected_schedule(): route_1 = Route(route_short_name='name', mode='bus', stops=[Stop(id='1', x=4, y=2, epsg='epsg:27700', name='Stop_1'), Stop(id='2', x=1, y=2, epsg='epsg:27700', name='Stop_2'), Stop(id='3', x=3, y=3, epsg='epsg:27700', name='Stop_3'), Stop(id='4', x=7, y=5, epsg='epsg:27700', name='Stop_4'), Stop(id='1', x=4, y=2, epsg='epsg:27700', name='Stop_1')], trips={'1': '1', '2': '2'}, arrival_offsets=['1', '2'], departure_offsets=['1', '2'], id='1') route_2 = Route(route_short_name='name_2', mode='bus', stops=[Stop(id='5', x=4, y=2, epsg='epsg:27700', name='Stop_5'), Stop(id='2', x=1, y=2, epsg='epsg:27700', name='Stop_2'), Stop(id='7', x=3, y=3, epsg='epsg:27700', name='Stop_7'), Stop(id='8', x=7, y=5, epsg='epsg:27700', name='Stop_8'), Stop(id='5', x=4, y=2, epsg='epsg:27700', name='Stop_5')], trips={'1': '1', '2': '2'}, arrival_offsets=['1', '2', '3', '4', '5'], departure_offsets=['1', '2', '3', '4', '5'], id='2') service = Service(id='service', routes=[route_1, route_2]) return Schedule(epsg='epsg:27700', services=[service])
def test_service(): return Service( id='service', routes=[ Route(route_short_name='route', mode='bus', stops=[ Stop(id='0', x=528504.1342843144, y=182155.7435136598, epsg='epsg:27700'), Stop(id='0', x=528504.1342843144, y=182155.7435136598, epsg='epsg:27700') ], trips={ 'VJ00938baa194cee94700312812d208fe79f3297ee_04:40:00': '04:40:00' }, arrival_offsets=['00:00:00', '00:02:00'], departure_offsets=['00:00:00', '00:02:00']), Route(route_short_name='route1', mode='bus', stops=[ Stop(id='1', x=528504.1342843144, y=182155.7435136598, epsg='epsg:27700'), Stop(id='2', x=528504.1342843144, y=182155.7435136598, epsg='epsg:27700') ], trips={'Blep_04:40:00': '05:40:00'}, arrival_offsets=['00:00:00', '00:03:00'], departure_offsets=['00:00:00', '00:05:00']) ])
def route(): a = Stop(id='1', x=4, y=2, epsg='epsg:27700', linkRefId='1') b = Stop(id='2', x=1, y=2, epsg='epsg:27700', linkRefId='2') c = Stop(id='3', x=3, y=3, epsg='epsg:27700', linkRefId='3') d = Stop(id='4', x=7, y=5, epsg='epsg:27700', linkRefId='4') return Route( route_short_name='name', mode='bus', stops=[a, b, c, d], trips = {'trip_id': ['1', '2'], 'trip_departure_time': ['10:00:00', '20:00:00'], 'vehicle_id': ['veh_1_bus', 'veh_2_bus']}, arrival_offsets=['00:00:00', '00:03:00', '00:07:00', '00:13:00'], departure_offsets=['00:00:00', '00:05:00', '00:09:00', '00:15:00'], route=['1', '2', '3', '4'], id='1')
def test_has_correctly_ordered_route_with_stop_missing_linkrefid(): a = Stop(id='1', x=4, y=2, epsg='epsg:27700') a.add_additional_attributes({'linkRefId': '10'}) b = Stop(id='2', x=4, y=2, epsg='epsg:27700') b.add_additional_attributes({'linkRefId': '20'}) c = Stop(id='3', x=4, y=2, epsg='epsg:27700') r = Route(route_short_name='name', mode='bus', stops=[a, b, c], trips={'trip_id': ['1', '2'], 'trip_departure_time': ['10:00:00', '20:00:00'], 'vehicle_id': ['veh_1_bus', 'veh_2_bus']}, arrival_offsets=['1', '2'], departure_offsets=['1', '2'], route=['10', '15', '30', '25', '20'], id='1') assert not r.has_correctly_ordered_route()
def self_looping_route(): return Route( route_short_name='name', mode='bus', stops=[ Stop(id='1', x=4, y=2, epsg='epsg:27700'), Stop(id='1', x=4, y=2, epsg='epsg:27700'), Stop(id='3', x=3, y=3, epsg='epsg:27700'), Stop(id='4', x=7, y=5, epsg='epsg:27700') ], trips={ '1': '1', '2': '2' }, arrival_offsets=['00:00:00', '00:03:00', '00:07:00', '00:13:00'], departure_offsets=['00:00:00', '00:05:00', '00:09:00', '00:15:00'])
def test_initiating_route_with_headway_spec(): r = Route( id='route_ID', route_short_name='name', mode='bus', stops=[Stop(id='1', x=4, y=2, epsg='epsg:27700'), Stop(id='1', x=4, y=2, epsg='epsg:27700'), Stop(id='3', x=3, y=3, epsg='epsg:27700'), Stop(id='4', x=7, y=5, epsg='epsg:27700')], headway_spec={('01:00:00', '02:00:00'): 20, ('02:00:00', '03:00:00'): 30}, arrival_offsets=['00:00:00', '00:03:00', '00:07:00', '00:13:00'], departure_offsets=['00:00:00', '00:05:00', '00:09:00', '00:15:00']) assert_semantically_equal( r.trips, {'trip_id': ['route_ID_01:00:00', 'route_ID_01:20:00', 'route_ID_01:40:00', 'route_ID_02:00:00', 'route_ID_02:30:00', 'route_ID_03:00:00'], 'trip_departure_time': ['01:00:00', '01:20:00', '01:40:00', '02:00:00', '02:30:00', '03:00:00'], 'vehicle_id': ['veh_bus_route_ID_01:00:00', 'veh_bus_route_ID_01:20:00', 'veh_bus_route_ID_01:40:00', 'veh_bus_route_ID_02:00:00', 'veh_bus_route_ID_02:30:00', 'veh_bus_route_ID_03:00:00']} )
def test_has_correctly_ordered_route_with_no_route(): a = Stop(id='1', x=4, y=2, epsg='epsg:27700') a.add_additional_attributes({'linkRefId': '10'}) b = Stop(id='2', x=4, y=2, epsg='epsg:27700') b.add_additional_attributes({'linkRefId': '20'}) c = Stop(id='3', x=4, y=2, epsg='epsg:27700') c.add_additional_attributes({'linkRefId': '30'}) r = Route(route_short_name='name', mode='bus', stops=[a, b, c], trips={ '1': '1', '2': '2' }, arrival_offsets=['1', '2'], departure_offsets=['1', '2'], route=[], id='1') assert not r.has_correctly_ordered_route()