class AlgorithmTest(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        logging.basicConfig(level=logging.INFO)

    def setUp(self):
        parser = Parser('./data', 'euro16_k2.txt')
        self.scenario = parser.get_scenario(0)
        self.graph = graph_factory(self.scenario.networkTopology)
        self.logger = logging.getLogger(str(self.__class__))
        candidate_path_fetcher = CandidatePathsFetcher(self.scenario.candidatePaths,
                                                       self.scenario.networkTopology.n_nodes,
                                                       self.scenario.pathsLengths)
        self.demand_factory = DemandsFactory(candidate_path_fetcher)
        self.sa = SimulatedAnnealing()

    def test_create_first_solution(self):
        uni_demands = self.demand_factory.get_unicast_demands(self.scenario.unicastDemands)
        for demand in uni_demands:
            self.logger.info("name: %s, selected path: %s", demand.name, demand.get_selected_path_id())

        self.logger.info("--------------")
        demands = self.sa.create_first_solution(uni_demands)
        for demand in demands:
            self.logger.info("name; %s, selected path: %s", demand.name, demand.get_selected_path_id())
        self.sa.create_first_solution(uni_demands)
        self.logger.info("--------------")
        for demand in demands:
            self.logger.info("name; %s, selected path: %s", demand.name, demand.get_selected_path_id())

        uni_demands[1].select_path(1)
        for demand in demands:
            self.logger.info("name; %s, selected path: %s", demand.name, demand.get_selected_path_id())
 def setUp(self):
     parser = Parser('./data', 'euro16_k2.txt')
     self.scenario = parser.get_scenario(0)
     self.graph = graph_factory(self.scenario.networkTopology)
     self.logger = logging.getLogger(str(self.__class__))
     candidate_path_fetcher = CandidatePathsFetcher(self.scenario.candidatePaths,
                                                    self.scenario.networkTopology.n_nodes,
                                                    self.scenario.pathsLengths)
     self.demand_factory = DemandsFactory(candidate_path_fetcher)
     self.sa = SimulatedAnnealing()
        return self.temperature > self.minimal_temperature


if __name__ == "__main__":
    from parser.parser import Parser
    from graph.graph import graph_factory
    from graph.path import CandidatePathsFetcher
    from demand.demand import DemandsFactory
    logging.basicConfig(level=logging.INFO)
    test_parser = Parser('../test/test_data', 'euro16_k2.txt')
    scenario = test_parser.get_scenario(100)
    graph = graph_factory(scenario.networkTopology)
    candidate_path_fetcher = CandidatePathsFetcher(scenario.candidatePaths,
                                                   scenario.networkTopology.n_nodes,
                                                   scenario.pathsLengths)
    demand_factory = DemandsFactory(candidate_path_fetcher)
    sa = SimulatedAnnealing()
    uni_demands = demand_factory.get_unicast_demands(scenario.unicastDemands)
    any_demands = demand_factory.get_anycast_demands(scenario.anycastDemands, scenario.dataCenters)
    demands = uni_demands + any_demands
    sa.run(graph, demands)
    print sa.best_energy
    # for demand in sa.best_solution:
    #     if isinstance(demand, UnicastDemand):
    #         print demand.get_selected_path()
    #     elif isinstance(demand, AnycastDemand):
    #         print demand.get_selected_path_up()
    #         print demand.get_selected_path_down()
    print sa.final_time