示例#1
0
def remove_extra_journeys_not_similar_journeys():

    j_eq1 = generate_journey(['bob', 'bobette', '', 'bobitto'])
    j_eq1.type = 'bobitto'  # used as an id in the test

    j_eq2 = generate_journey(['bob', 'bobette', '', 'babitta'])
    j_eq2.type = 'babitta'

    journeys = [j_eq1, j_eq2]

    scenario = destineo.Scenario()
    scenario._remove_extra_journeys(journeys, None, clockwise=True, timezone='UTC')
    eq_(len(journeys), 2) #nothing filtered, they are not equivalent
    eq_(journeys[0].type, 'bobitto')
    eq_(journeys[1].type, 'babitta')
示例#2
0
def remove_extra_journeys_more_with_walking_first_test():
    j1 = response_pb2.Journey()
    j1.type = 'non_pt_walk'
    journeys = [j1, get_bss_bss_journey(), get_bike_car_journey(), get_bss_bike_journey()]
    saved_journeys = deepcopy(journeys)

    scenario = destineo.Scenario()
    scenario._remove_extra_journeys(journeys, None, clockwise=True, timezone='UTC')
    eq_(len(journeys), 4)

    scenario._remove_extra_journeys(journeys, 2, clockwise=True, timezone='UTC')

    eq_(len(journeys), 3)
    eq_(journeys[0], j1)
    eq_(journeys[1], saved_journeys[1])
    eq_(journeys[2], saved_journeys[2])
示例#3
0
def remove_not_long_enough_no_removal_test():
    response = response_pb2.Response()

    journey = response.journeys.add()
    section = journey.sections.add()
    section.type = response_pb2.STREET_NETWORK
    section.street_network.mode = response_pb2.Walking
    section.duration = 60
    section = journey.sections.add()
    section.type = response_pb2.PUBLIC_TRANSPORT
    section.duration = 80
    section = journey.sections.add()
    section.type = response_pb2.STREET_NETWORK
    section.street_network.mode = response_pb2.Walking
    section.duration = 60

    journey = response.journeys.add()
    section = journey.sections.add()
    section.type = response_pb2.STREET_NETWORK
    section.street_network.mode = response_pb2.Walking
    section.duration = 60
    section = journey.sections.add()
    section.type = response_pb2.PUBLIC_TRANSPORT
    section.duration = 80
    section = journey.sections.add()
    section.type = response_pb2.BSS_RENT
    section.duration = 10
    section = journey.sections.add()
    section.type = response_pb2.STREET_NETWORK
    section.street_network.mode = response_pb2.Bike
    section.duration = 120
    section = journey.sections.add()
    section.type = response_pb2.BSS_PUT_BACK
    section.duration = 10
    section = journey.sections.add()
    section.type = response_pb2.STREET_NETWORK
    section.street_network.mode = response_pb2.Walking
    section.duration = 60

    scenario = destineo.Scenario()
    scenario._remove_not_long_enough_fallback(response.journeys, Instance())
    eq_(len(response.journeys), 2)
    scenario._remove_not_long_enough_tc_with_fallback(response.journeys,
                                                      Instance())
    eq_(len(response.journeys), 2)
示例#4
0
def choose_best_alternatives_non_pt_test():
    journeys = [get_bss_bss_journey(), get_bike_car_journey(), get_bss_walking_journey()]
    j1 = response_pb2.Journey()
    j1.type = 'non_pt_bss'
    journeys.append(j1)

    j2 = response_pb2.Journey()
    j2.type = 'non_pt_bike'
    journeys.append(j2)

    saved_journeys = deepcopy(journeys)

    scenario = destineo.Scenario()
    scenario._choose_best_alternatives(journeys)
    eq_(len(journeys), 3)
    eq_(journeys[0], saved_journeys[2])
    eq_(journeys[1], j1)
    eq_(journeys[2], j2)
示例#5
0
def remove_extra_journeys_similar_journey_latest_dep():
    j1 = response_pb2.Journey()
    j1.type = 'non_pt_walk'

    j_eq1 = generate_journey(['bob'])
    j_eq1.type = 'bob'  # used as an id in the test
    j_eq1.departure_date_time = 1425989999 # leave after, it's better
    j_eq1.arrival_date_time = 1425990000

    j_eq2 = generate_journey(['bob'])
    j_eq2.type = 'bobette'
    j_eq2.departure_date_time = 1425984855
    j_eq2.arrival_date_time = 1425990000

    journeys = [j1, j_eq1, j_eq2]

    scenario = destineo.Scenario()
    scenario._remove_extra_journeys(journeys, None, clockwise=True, timezone='UTC')
    eq_(len(journeys), 2)
    eq_(journeys[1].type, 'bob')
示例#6
0
def choose_best_alternatives_non_pt_test():
    journeys = [
        get_bss_bss_journey(),
        get_bike_car_journey(),
        get_bss_walking_journey()
    ]
    j1 = response_pb2.Journey()
    j1.type = 'non_pt_bss'
    journeys.append(j1)

    j2 = response_pb2.Journey()
    j2.type = 'non_pt_bike'
    journeys.append(j2)

    saved_journeys = deepcopy(journeys)

    scenario = destineo.Scenario()
    scenario._choose_best_alternatives(journeys)
    assert len(journeys) == 3
    assert journeys[0] == saved_journeys[2]
    assert journeys[1] == j1
    assert journeys[2] == j2
示例#7
0
def remove_extra_journeys_more_test():
    journeys = [
        get_bss_bss_journey(),
        get_bike_car_journey(),
        get_bss_bike_journey()
    ]
    saved_journeys = deepcopy(journeys)

    scenario = destineo.Scenario()
    scenario._remove_extra_journeys(journeys,
                                    None,
                                    clockwise=True,
                                    timezone='UTC')
    assert len(journeys) == 3

    scenario._remove_extra_journeys(journeys,
                                    2,
                                    clockwise=True,
                                    timezone='UTC')

    assert len(journeys) == 2
    assert journeys[0] == saved_journeys[0]
    assert journeys[1] == saved_journeys[1]
示例#8
0
def remove_extra_journeys_more_test():
    journeys = [
        get_bss_bss_journey(),
        get_bike_car_journey(),
        get_bss_bike_journey()
    ]
    saved_journeys = deepcopy(journeys)

    scenario = destineo.Scenario()
    scenario._remove_extra_journeys(journeys,
                                    None,
                                    clockwise=True,
                                    timezone='UTC')
    eq_(len(journeys), 3)

    scenario._remove_extra_journeys(journeys,
                                    2,
                                    clockwise=True,
                                    timezone='UTC')

    eq_(len(journeys), 2)
    eq_(journeys[0], saved_journeys[0])
    eq_(journeys[1], saved_journeys[1])
示例#9
0
def remove_not_long_enough_car_test():
    response = response_pb2.Response()

    journey = response.journeys.add()
    section = journey.sections.add()
    section.type = response_pb2.STREET_NETWORK
    section.street_network.mode = response_pb2.Walking
    section.duration = 60
    section = journey.sections.add()
    section.type = response_pb2.PUBLIC_TRANSPORT
    section.duration = 80
    section = journey.sections.add()
    section.type = response_pb2.STREET_NETWORK
    section.street_network.mode = response_pb2.Walking
    section.duration = 60

    journey2 = response.journeys.add()
    section = journey2.sections.add()
    section.type = response_pb2.STREET_NETWORK
    section.street_network.mode = response_pb2.Walking
    section.duration = 60
    section = journey2.sections.add()
    section.type = response_pb2.PUBLIC_TRANSPORT
    section.duration = 80
    section = journey2.sections.add()
    section.type = response_pb2.STREET_NETWORK
    section.street_network.mode = response_pb2.Car
    section.duration = 19

    journey3 = response.journeys.add()
    section = journey3.sections.add()
    section.type = response_pb2.STREET_NETWORK
    section.street_network.mode = response_pb2.Walking
    section.duration = 60
    section = journey3.sections.add()
    section.type = response_pb2.PUBLIC_TRANSPORT
    section.duration = 49
    section = journey3.sections.add()
    section.type = response_pb2.STREET_NETWORK
    section.street_network.mode = response_pb2.Car
    section.duration = 20

    journey4 = response.journeys.add()
    section = journey4.sections.add()
    section.type = response_pb2.STREET_NETWORK
    section.street_network.mode = response_pb2.Walking
    section.duration = 60
    section = journey4.sections.add()
    section.type = response_pb2.PUBLIC_TRANSPORT
    section.duration = 50
    section = journey4.sections.add()
    section.type = response_pb2.STREET_NETWORK
    section.street_network.mode = response_pb2.Car
    section.duration = 20

    scenario = destineo.Scenario()
    scenario._remove_not_long_enough_fallback(response, Instance())
    assert len(response.journeys) == 3
    assert response.journeys[0] == journey
    assert response.journeys[1] == journey3
    assert response.journeys[2] == journey4
    scenario._remove_not_long_enough_tc_with_fallback(response, Instance())
    assert len(response.journeys) == 2
    assert response.journeys[0] == journey
    assert response.journeys[1] == journey4
示例#10
0
def remove_not_long_enough_bss_test():
    response = response_pb2.Response()

    journey1 = response.journeys.add()
    section = journey1.sections.add()
    section.type = response_pb2.STREET_NETWORK
    section.street_network.mode = response_pb2.Walking
    section.duration = 60
    section = journey1.sections.add()
    section.type = response_pb2.PUBLIC_TRANSPORT
    section.duration = 80
    section = journey1.sections.add()
    section.type = response_pb2.STREET_NETWORK
    section.street_network.mode = response_pb2.Walking
    section.duration = 60

    journey2 = response.journeys.add()
    section = journey2.sections.add()
    section.type = response_pb2.STREET_NETWORK
    section.street_network.mode = response_pb2.Walking
    section.duration = 60
    section = journey2.sections.add()
    section.type = response_pb2.PUBLIC_TRANSPORT
    section.duration = 80
    section = journey2.sections.add()
    section.type = response_pb2.BSS_RENT
    section.duration = 5
    section = journey2.sections.add()
    section.type = response_pb2.STREET_NETWORK
    section.street_network.mode = response_pb2.Bike
    section.duration = 14
    section = journey2.sections.add()
    section.type = response_pb2.BSS_PUT_BACK
    section.duration = 5
    section = journey2.sections.add()
    section.type = response_pb2.STREET_NETWORK
    section.street_network.mode = response_pb2.Walking
    section.duration = 60

    journey3 = response.journeys.add()
    section = journey3.sections.add()
    section.type = response_pb2.STREET_NETWORK
    section.street_network.mode = response_pb2.Walking
    section.duration = 60
    section = journey3.sections.add()
    section.type = response_pb2.PUBLIC_TRANSPORT
    section.duration = 34
    section = journey3.sections.add()
    section.type = response_pb2.BSS_RENT
    section.duration = 5
    section = journey3.sections.add()
    section.type = response_pb2.STREET_NETWORK
    section.street_network.mode = response_pb2.Bike
    section.duration = 16
    section = journey3.sections.add()
    section.type = response_pb2.BSS_PUT_BACK
    section.duration = 5
    section = journey3.sections.add()
    section.type = response_pb2.STREET_NETWORK
    section.street_network.mode = response_pb2.Walking
    section.duration = 60

    journey4 = response.journeys.add()
    section = journey4.sections.add()
    section.type = response_pb2.STREET_NETWORK
    section.street_network.mode = response_pb2.Walking
    section.duration = 60
    section = journey4.sections.add()
    section.type = response_pb2.PUBLIC_TRANSPORT
    section.duration = 36
    section = journey4.sections.add()
    section.type = response_pb2.BSS_RENT
    section.duration = 5
    section = journey4.sections.add()
    section.type = response_pb2.STREET_NETWORK
    section.street_network.mode = response_pb2.Bike
    section.duration = 16
    section = journey4.sections.add()
    section.type = response_pb2.BSS_PUT_BACK
    section.duration = 5
    section = journey4.sections.add()
    section.type = response_pb2.STREET_NETWORK
    section.street_network.mode = response_pb2.Walking
    section.duration = 60

    scenario = destineo.Scenario()
    scenario._remove_not_long_enough_fallback(response, Instance())
    assert len(response.journeys) == 3
    assert response.journeys[0] == journey1
    assert response.journeys[1] == journey3
    assert response.journeys[2] == journey4
    scenario._remove_not_long_enough_tc_with_fallback(response, Instance())
    assert len(response.journeys) == 2
    assert response.journeys[0] == journey1
    assert response.journeys[1] == journey4
示例#11
0
def remove_not_long_enough_bike_test():
    response = response_pb2.Response()

    journey = response.journeys.add()
    section = journey.sections.add()
    section.type = response_pb2.STREET_NETWORK
    section.street_network.mode = response_pb2.Walking
    section.duration = 60
    section = journey.sections.add()
    section.type = response_pb2.PUBLIC_TRANSPORT
    section.duration = 80
    section = journey.sections.add()
    section.type = response_pb2.STREET_NETWORK
    section.street_network.mode = response_pb2.Walking
    section.duration = 60

    journey2 = response.journeys.add()
    section = journey2.sections.add()
    section.type = response_pb2.STREET_NETWORK
    section.street_network.mode = response_pb2.Walking
    section.duration = 60
    section = journey2.sections.add()
    section.type = response_pb2.PUBLIC_TRANSPORT
    section.duration = 80
    section = journey2.sections.add()
    section.type = response_pb2.STREET_NETWORK
    section.street_network.mode = response_pb2.Bike
    section.duration = 29

    journey3 = response.journeys.add()
    section = journey3.sections.add()
    section.type = response_pb2.STREET_NETWORK
    section.street_network.mode = response_pb2.Walking
    section.duration = 60
    section = journey3.sections.add()
    section.type = response_pb2.PUBLIC_TRANSPORT
    section.duration = 39
    section = journey3.sections.add()
    section.type = response_pb2.STREET_NETWORK
    section.street_network.mode = response_pb2.Bike
    section.duration = 30

    journey4 = response.journeys.add()
    section = journey4.sections.add()
    section.type = response_pb2.STREET_NETWORK
    section.street_network.mode = response_pb2.Walking
    section.duration = 60
    section = journey4.sections.add()
    section.type = response_pb2.PUBLIC_TRANSPORT
    section.duration = 40
    section = journey4.sections.add()
    section.type = response_pb2.STREET_NETWORK
    section.street_network.mode = response_pb2.Bike
    section.duration = 30

    scenario = destineo.Scenario()
    scenario._remove_not_long_enough_fallback(response, Instance())
    eq_(len(response.journeys), 3)
    eq_(response.journeys[0], journey)
    eq_(response.journeys[1], journey3)
    eq_(response.journeys[2], journey4)
    scenario._remove_not_long_enough_tc_with_fallback(response, Instance())
    eq_(len(response.journeys), 2)
    eq_(response.journeys[0], journey)
    eq_(response.journeys[1], journey4)
示例#12
0
def sort_destineo_test():
    response = response_pb2.Response()

    journey_tc3 = response.journeys.add()
    journey_tc3.type = "rapid"
    journey_tc3.departure_date_time = str_to_time_stamp('20141103T123000')
    section = journey_tc3.sections.add()
    section.type = response_pb2.STREET_NETWORK
    section.street_network.mode = response_pb2.Walking
    section = journey_tc3.sections.add()
    section.type = response_pb2.PUBLIC_TRANSPORT
    section = journey_tc3.sections.add()
    section.type = response_pb2.STREET_NETWORK
    section.street_network.mode = response_pb2.Walking

    journey_tc1 = response.journeys.add()
    journey_tc1.type = "rapid"
    journey_tc1.departure_date_time = str_to_time_stamp('20141103T110000')
    section = journey_tc1.sections.add()
    section.type = response_pb2.STREET_NETWORK
    section.street_network.mode = response_pb2.Walking
    section = journey_tc1.sections.add()
    section.type = response_pb2.PUBLIC_TRANSPORT
    section = journey_tc1.sections.add()
    section.type = response_pb2.STREET_NETWORK
    section.street_network.mode = response_pb2.Walking

    journey_bike = response.journeys.add()
    journey_bike.departure_date_time = str_to_time_stamp('20141103T110000')
    journey_bike.type = "non_pt_bike"

    journey_bss = response.journeys.add()
    journey_bss.departure_date_time = str_to_time_stamp('20141103T110000')
    journey_bss.type = "non_pt_bss"
    section = journey_bss.sections.add()
    section.type = response_pb2.STREET_NETWORK
    section.street_network.mode = response_pb2.Walking
    section = journey_bss.sections.add()
    section.type = response_pb2.BSS_RENT
    section = journey_bss.sections.add()
    section.type = response_pb2.STREET_NETWORK
    section.street_network.mode = response_pb2.Bike
    section = journey_bss.sections.add()
    section.type = response_pb2.BSS_PUT_BACK
    section = journey_bss.sections.add()
    section.type = response_pb2.STREET_NETWORK
    section.street_network.mode = response_pb2.Walking

    journey_walk = response.journeys.add()
    journey_walk.departure_date_time = str_to_time_stamp('20141103T110000')
    journey_walk.type = "non_pt_walk"

    journey_tc2 = response.journeys.add()
    journey_tc2.type = "rapid"
    journey_tc2.departure_date_time = str_to_time_stamp('20141103T120000')
    section = journey_tc2.sections.add()
    section.type = response_pb2.STREET_NETWORK
    section.street_network.mode = response_pb2.Walking
    section = journey_tc2.sections.add()
    section.type = response_pb2.PUBLIC_TRANSPORT
    section = journey_tc2.sections.add()
    section.type = response_pb2.STREET_NETWORK
    section.street_network.mode = response_pb2.Walking

    journey_bss_and_tc = response.journeys.add()
    journey_bss_and_tc.departure_date_time = str_to_time_stamp(
        '20141103T120000')
    journey_bss_and_tc.type = "rapid"
    section = journey_bss_and_tc.sections.add()
    section.type = response_pb2.STREET_NETWORK
    section.street_network.mode = response_pb2.Walking
    section = journey_bss_and_tc.sections.add()
    section.type = response_pb2.BSS_RENT
    section = journey_bss_and_tc.sections.add()
    section.type = response_pb2.STREET_NETWORK
    section.street_network.mode = response_pb2.Bike
    section = journey_bss_and_tc.sections.add()
    section.type = response_pb2.BSS_PUT_BACK
    section = journey_bss_and_tc.sections.add()
    section.type = response_pb2.PUBLIC_TRANSPORT
    section = journey_bss_and_tc.sections.add()
    section.type = response_pb2.STREET_NETWORK
    section.street_network.mode = response_pb2.Walking

    journey_bike_and_tc = response.journeys.add()
    journey_bike_and_tc.departure_date_time = str_to_time_stamp(
        '20141103T120000')
    journey_bike_and_tc.type = "rapid"
    section = journey_bike_and_tc.sections.add()
    section.type = response_pb2.STREET_NETWORK
    section.street_network.mode = response_pb2.Bike
    section = journey_bike_and_tc.sections.add()
    section.type = response_pb2.PUBLIC_TRANSPORT
    section = journey_bike_and_tc.sections.add()
    section.type = response_pb2.STREET_NETWORK
    section.street_network.mode = response_pb2.Walking

    journey_car_and_tc = response.journeys.add()
    journey_car_and_tc.departure_date_time = str_to_time_stamp(
        '20141103T120000')
    journey_car_and_tc.type = "rapid"
    section = journey_car_and_tc.sections.add()
    section.type = response_pb2.STREET_NETWORK
    section.street_network.mode = response_pb2.Car
    section = journey_car_and_tc.sections.add()
    section.type = response_pb2.PUBLIC_TRANSPORT
    section = journey_car_and_tc.sections.add()
    section.type = response_pb2.STREET_NETWORK
    section.street_network.mode = response_pb2.Walking

    scenario = destineo.Scenario()
    scenario._custom_sort_journeys(response,
                                   clockwise=True,
                                   timezone='Africa/Abidjan')
    eq_(response.journeys[0], journey_tc1)
    eq_(response.journeys[1], journey_tc2)
    eq_(response.journeys[2], journey_tc3)
    eq_(response.journeys[3], journey_bss)
    eq_(response.journeys[4], journey_bss_and_tc)
    eq_(response.journeys[5], journey_bike_and_tc)
    eq_(response.journeys[6], journey_car_and_tc)
    eq_(response.journeys[7], journey_walk)
    eq_(response.journeys[8], journey_bike)
示例#13
0
def choose_best_alternatives__car_test():
    journeys = [get_bike_car_journey()]
    scenario = destineo.Scenario()
    scenario._choose_best_alternatives(journeys)
    eq_(len(journeys), 1)
    eq_(journeys[0], get_bike_car_journey())
示例#14
0
def remove_extra_journeys_enougth_test():
    journeys = [get_bss_bss_journey(), get_bike_car_journey()]

    scenario = destineo.Scenario()
    scenario._remove_extra_journeys(journeys, 2, clockwise=True, timezone='UTC')
    eq_(len(journeys), 2)
示例#15
0
def sort_destineo_test():
    resp_builder = (
        ResponseBuilder().journey(
            uri='journey_tc3',
            sections=[{
                'mode': 'Walking'
            }, {
                'type': 'PT'
            }, {
                'mode': 'Walking'
            }],
            departure='T1230',
        ).journey(
            uri='journey_tc1',
            sections=[{
                'mode': 'Walking'
            }, {
                'type': 'PT'
            }, {
                'mode': 'Walking'
            }],
            departure='T1100',
        ).journey(
            uri='journey_bike',
            sections=[
                # {'mode': 'Bike'}
            ],
            type='non_pt_bike',
            departure='T1100',
        ).journey(
            uri='journey_bss',
            sections=[
                {
                    'mode': 'Walking'
                },
                {
                    'type': 'BSS_RENT'
                },
                {
                    'mode': 'Bike'
                },
                {
                    'type': 'BSS_PUT_BACK'
                },
                {
                    'mode': 'Walking'
                },
            ],
            type='non_pt_bss',
            departure='T1100',
        ).journey(
            uri='journey_walk',
            sections=[
                # {'mode': 'Walking'},
            ],
            type='non_pt_walk',
            departure='T1100',
        ).journey(
            uri='journey_tc2',
            sections=[{
                'mode': 'Walking'
            }, {
                'type': 'PT'
            }, {
                'mode': 'Walking'
            }],
            departure='T1200',
        ).journey(
            uri='journey_bss_and_tc',
            sections=[
                {
                    'mode': 'Walking'
                },
                {
                    'type': 'BSS_RENT'
                },
                {
                    'mode': 'Bike'
                },
                {
                    'type': 'BSS_PUT_BACK'
                },
                {
                    'type': 'PT'
                },
                {
                    'mode': 'Walking'
                },
            ],
            departure='T1200',
        ).journey(
            uri='journey_bike_and_tc',
            sections=[{
                'mode': 'Bike'
            }, {
                'type': 'PT'
            }, {
                'mode': 'Walking'
            }],
            departure='T1200',
        ).journey(
            uri='journey_car_and_tc',
            sections=[{
                'mode': 'Car'
            }, {
                'type': 'PT'
            }, {
                'mode': 'Walking'
            }],
            departure='T1200',
        ))
    response = resp_builder.response
    scenario = destineo.Scenario()
    scenario._custom_sort_journeys(response,
                                   clockwise=True,
                                   timezone='Africa/Abidjan')
    assert response.journeys[0] == resp_builder.get_journey('journey_tc1')
    assert response.journeys[1] == resp_builder.get_journey('journey_tc2')
    assert response.journeys[2] == resp_builder.get_journey('journey_tc3')
    assert response.journeys[3] == resp_builder.get_journey('journey_bss')
    assert response.journeys[4] == resp_builder.get_journey(
        'journey_bss_and_tc')
    assert response.journeys[5] == resp_builder.get_journey(
        'journey_bike_and_tc')
    assert response.journeys[6] == resp_builder.get_journey(
        'journey_car_and_tc')
    assert response.journeys[7] == resp_builder.get_journey('journey_walk')
    assert response.journeys[8] == resp_builder.get_journey('journey_bike')