Exemplo n.º 1
0
    def test_prune_progress_dict(self):
        subject = Traverser(data=None, progress_between_pruning_progress_dict=None,
                            prune_thoroughness=.5, stop_join_string='~~', transfer_duration_seconds=None,
                            transfer_route=None, walk_route=None, walk_speed_mph=None, end_date=None,
                            route_types_to_solve=None, stops_to_solve=None)
        location_1 = LocationStatusInfo(location='1', arrival_route=1, unvisited='~~a~~b~~c~~')
        location_2 = LocationStatusInfo(location='2', arrival_route=2, unvisited='~~a~~c~~d~~b~~')
        location_3 = LocationStatusInfo(location='3', arrival_route=3, unvisited='~~a~~')
        location_4 = LocationStatusInfo(location='4', arrival_route=4, unvisited='~~a~~b~~c~~d~~e~~')
        eliminated_progress = ProgressInfo(duration=None, arrival_trip=None, trip_stop_no=None, parent=None,
                                           children=None,
                                           minimum_remaining_time=None, expanded=None, eliminated=True)
        subject._progress_dict = {
            location_1: eliminated_progress,
            location_2: eliminated_progress,
            location_3: eliminated_progress,
            location_4: eliminated_progress
        }
        subject._exp_queue = ExpansionQueue(num_solution_stops=5, stop_join_string='~~')
        subject._exp_queue.add([location_1, location_2, location_3, location_4])

        expected_progress_dict = {
            location_1: eliminated_progress,
            location_3: eliminated_progress
        }
        expected_expansion_queue_queue = {
            1: {location_3},
            3: {location_1}
        }
        subject.prune_progress_dict()
        actual_progress_dict = subject._progress_dict
        actual_expansion_queue_queue = subject._exp_queue._queue

        self.assertDictEqual(expected_progress_dict, actual_progress_dict)
        self.assertDictEqual(expected_expansion_queue_queue, actual_expansion_queue_queue)
    def test_pop(self):
        location_a = LocationStatusInfo(location='a',
                                        arrival_route=None,
                                        unvisited="~~a~~")
        location_b = LocationStatusInfo(location='b',
                                        arrival_route=None,
                                        unvisited="~~a~~b~~")
        subject = ExpansionQueue(num_solution_stops=2, stop_join_string="~~")
        solver_progress_dict = {
            location_a:
            ProgressInfo(duration=1,
                         arrival_trip=None,
                         trip_stop_no=None,
                         parent=None,
                         children=None,
                         minimum_remaining_time=None,
                         expanded=None,
                         eliminated=True),
            location_b:
            ProgressInfo(duration=1,
                         arrival_trip=None,
                         trip_stop_no=None,
                         parent=None,
                         children=None,
                         minimum_remaining_time=None,
                         expanded=None,
                         eliminated=True),
        }

        subject.add([location_a, location_b])

        expected_queue = {2: {location_b}}
        expected_node = location_a
        expected_stop_to_pop = 2

        actual_node = subject.pop(solver_progress_dict)
        actual_queue = subject._queue
        actual_stop_to_pop = subject._num_remaining_stops_to_pop

        self.assertEqual(expected_node, actual_node)
        self.assertDictEqual(expected_queue, actual_queue)
        self.assertEqual(expected_stop_to_pop, actual_stop_to_pop)
    def test_add(self):
        location_a = LocationStatusInfo(location='a',
                                        arrival_route=None,
                                        unvisited="~~a~~")
        location_b = LocationStatusInfo(location='b',
                                        arrival_route=None,
                                        unvisited="~~a~~b~~")
        nodes = [location_a, location_b, location_b]
        subject = ExpansionQueue(num_solution_stops=2, stop_join_string="~~")
        subject.add(nodes)
        expected_queue = {
            1: {location_a},
            2: {location_b, location_b},
        }
        expected_stop_to_pop = 1
        actual_queue = subject._queue
        actual_stop_to_pop = subject._num_remaining_stops_to_pop

        self.assertDictEqual(expected_queue, actual_queue)
        self.assertEqual(expected_stop_to_pop, actual_stop_to_pop)
    def test_remove_keys(self):
        location_a = LocationStatusInfo(location='a',
                                        arrival_route=None,
                                        unvisited="~~a~~")
        location_b = LocationStatusInfo(location='b',
                                        arrival_route=None,
                                        unvisited="~~a~~b~~")
        location_c = LocationStatusInfo(location='c',
                                        arrival_route=None,
                                        unvisited="~~a~~b~~")
        location_d = LocationStatusInfo(location='d',
                                        arrival_route=None,
                                        unvisited="~~a~~b~~")
        location_e = LocationStatusInfo(location='e',
                                        arrival_route=None,
                                        unvisited="~~a~~b~~c~~")
        location_f = LocationStatusInfo(location='f',
                                        arrival_route=None,
                                        unvisited="~~a~~c~~")
        subject = ExpansionQueue(num_solution_stops=2, stop_join_string="~~")
        subject.add([location_a, location_b, location_c, location_c])

        subject.remove_keys(
            [location_a, location_c, location_d, location_e, location_f])
        expected_queue = {2: {location_b}}
        expected_stop_to_pop = 2
        actual_queue = subject._queue
        actual_stop_to_pop = subject._num_remaining_stops_to_pop

        self.assertDictEqual(expected_queue, actual_queue)
        self.assertEqual(expected_stop_to_pop, actual_stop_to_pop)
    def test_is_empty(self):
        location_a = LocationStatusInfo(location='a',
                                        arrival_route=None,
                                        unvisited="~~a~~")
        subject = ExpansionQueue(num_solution_stops=2, stop_join_string="~~")
        solver_progress_dict = {
            location_a:
            ProgressInfo(duration=1,
                         arrival_trip=None,
                         trip_stop_no=None,
                         parent=None,
                         children=None,
                         minimum_remaining_time=None,
                         expanded=None,
                         eliminated=True),
        }
        self.assertTrue(subject.is_empty())

        subject.add([location_a])
        self.assertFalse(subject.is_empty())

        subject.pop(solver_progress_dict)
        self.assertTrue(subject.is_empty())
    def test_sort_latest_nodes(self):
        def progress_info_with_duration(duration):
            return ProgressInfo(arrival_trip=None,
                                duration=duration,
                                trip_stop_no=None,
                                expanded=None,
                                eliminated=None,
                                children=None,
                                parent=None,
                                minimum_remaining_time=None)

        location_b = LocationStatusInfo(location='b',
                                        arrival_route=None,
                                        unvisited="~~a~~b~~")
        location_c = LocationStatusInfo(location='c',
                                        arrival_route=None,
                                        unvisited="~~a~~b~~")
        location_d = LocationStatusInfo(location='d',
                                        arrival_route=None,
                                        unvisited="~~a~~b~~")
        location_e = LocationStatusInfo(location='e',
                                        arrival_route=None,
                                        unvisited="~~a~~b~~")
        solver_progress_dict = {
            location_b: progress_info_with_duration(1),
            location_c: progress_info_with_duration(2),
            location_d: progress_info_with_duration(3),
            location_e: progress_info_with_duration(4),
        }
        subject = ExpansionQueue(num_solution_stops=6, stop_join_string='~~')
        subject.add([location_d, location_e, location_b, location_c])
        subject.sort_latest_nodes(solver_progress_dict)

        expected = [location_b, location_c, location_d, location_e]
        actual = subject._queue[2]
        self.assertListEqual(expected, actual)