def log_data()

in DSE_utils/hill_climbing.py [0:0]


    def log_data(self, this_itr_ex_sim_dp_dict):
        ctr = len(self.log_data_list)
        for sim_dp in this_itr_ex_sim_dp_dict.values():
            sim_dp.add_exploration_and_simulation_approximate_time(self.neighbour_selection_time/len(list(this_itr_ex_sim_dp_dict.keys())))
            ma = sim_dp.get_move_applied()  # move applied
            if not ma == None:
                sorted_metrics = self.convert_tuple_list_to_parsable_csv(
                    [(el, val) for el, val in ma.sorted_metrics.items()])
                metric = ma.get_metric()
                transformation_name = ma.get_transformation_name()
                task_name = ma.get_kernel_ref().get_task_name()
                block_type = ma.get_block_ref().type
                dir = ma.get_dir()
                generation_time = ma.get_generation_time()
                sorted_blocks = self.convert_tuple_list_to_parsable_csv(
                    [(el.get_generic_instance_name(), val) for el, val in ma.sorted_blocks])
                sorted_kernels = self.convert_tuple_list_to_parsable_csv(
                    [(el.get_task_name(), val) for el, val in ma.sorted_kernels.items()])
                blk_instance_name = ma.get_block_ref().get_generic_instance_name()
                blk_type = ma.get_block_ref().type
                comm_comp = (ma.get_system_improvement_log())["comm_comp"]
                high_level_optimization = (ma.get_system_improvement_log())["high_level_optimization"]
                exact_optimization = (ma.get_system_improvement_log())["exact_optimization"]
                architectural_principle = (ma.get_system_improvement_log())["architectural_principle"]
                block_selection_time = ma.get_logs("block_selection_time")
                kernel_selection_time = ma.get_logs("kernel_selection_time")
                transformation_selection_time = ma.get_logs("transformation_selection_time")
                pickling_time = ma.get_logs("pickling_time")
                metric_selection_time = ma.get_logs("metric_selection_time")
                dir_selection_time = ma.get_logs("dir_selection_time")
                move_validity = ma.is_valid()
                ref_des_dist_to_goal_all = ma.get_logs("ref_des_dist_to_goal_all")
                ref_des_dist_to_goal_non_cost = ma.get_logs("ref_des_dist_to_goal_non_cost")
                neighbouring_design_space_size = self.convert_dictionary_to_parsable_csv_with_semi_column(ma.get_design_space_size())
                workload = ma.get_logs("workload")
            else:  # happens at the very fist iteration
                pickling_time = 0
                sorted_metrics = ""
                metric = ""
                transformation_name = ""
                task_name = ""
                block_type = ""
                dir = ""
                generation_time = ''
                sorted_blocks = ''
                sorted_kernels = {}
                blk_instance_name = ''
                blk_type = ''
                comm_comp = ""
                high_level_optimization = ""
                exact_optimization = ""
                architectural_principle = ""
                block_selection_time = ""
                kernel_selection_time = ""
                metric_selection_time = ""
                dir_selection_time = ""
                transformation_selection_time = ""
                move_validity = ""
                ref_des_dist_to_goal_all = ""
                ref_des_dist_to_goal_non_cost = ""
                neighbouring_design_space_size = ""
                workload = ""


            sub_block_area_break_down = self.convert_dictionary_to_parsable_csv_with_underline(sim_dp.dp_stats.SOC_area_subtype_dict)
            block_area_break_down = self.convert_dictionary_to_parsable_csv_with_underline(sim_dp.dp_stats.SOC_area_dict)
            routing_complexity = sim_dp.dp_rep.get_hardware_graph().get_routing_complexity()
            area_non_dram = sim_dp.dp_stats.get_system_complex_area_stacked_dram()["non_dram"]
            area_dram = sim_dp.dp_stats.get_system_complex_area_stacked_dram()["dram"]
            simple_topology = sim_dp.dp_rep.get_hardware_graph().get_simplified_topology_code()
            channel_cnt = sim_dp.dp_rep.get_hardware_graph().get_number_of_channels()
            blk_cnt = sum([int(el) for el in simple_topology.split("_")])
            bus_cnt = [int(el) for el in simple_topology.split("_")][0]
            mem_cnt = [int(el) for el in simple_topology.split("_")][1]
            pe_cnt = [int(el) for el in simple_topology.split("_")][2]
            task_cnt = len(list(sim_dp.dp_rep.krnl_phase_present.keys()))
            #itr_depth_multiplied = sim_dp.dp_rep.get_iteration_number() * config.SA_depth + sim_dp.dp_rep.get_depth_number()

            self.total_iteration_cnt = ctr
            data = {
                    "data_number": ctr,
                    "iteration cnt" : self.total_iteration_cnt,
                    "exploration_plus_simulation_time" : sim_dp.get_exploration_and_simulation_approximate_time(),
                    "observed population number" : sim_dp.dp_rep.get_population_observed_number(),
                    "SA_total_depth": str(config.SA_depth),
                    "transformation_selection_mode": str(config.transformation_selection_mode),
                    "workload": workload,
                    "population generation cnt": sim_dp.dp_rep.get_population_generation_cnt(),
                    "simulation time" : sim_dp.dp_rep.get_simulation_time(),
                    "transformation generation time" : generation_time,
                    "metric selection time" :metric_selection_time,
                    "dir selection time" :dir_selection_time,
                    "kernel selection time" :kernel_selection_time,
                    "block selection time" : block_selection_time,
                    "transformation selection time" : transformation_selection_time,
                "design duplication time": pickling_time,
                "neighbour selection time": self.neighbour_selection_time,
                "dist_to_goal_all" : sim_dp.dp_stats.dist_to_goal(metrics_to_look_into=["area", "latency", "power", "cost"],
                                                                  mode="eliminate"),
                    "dist_to_goal_non_cost" : sim_dp.dp_stats.dist_to_goal(metrics_to_look_into=["area", "latency", "power"],
                                                                           mode="eliminate"),
                    "ref_des_dist_to_goal_all" : ref_des_dist_to_goal_all,
                    "ref_des_dist_to_goal_non_cost" : ref_des_dist_to_goal_non_cost,
                    "best_des_so_far_dist_to_goal_non_cost": self.so_far_best_sim_dp.dp_stats.dist_to_goal(metrics_to_look_into=["area", "latency", "power"],
                                                                           mode="eliminate"),
                    "best_des_so_far_dist_to_goal_all": self.so_far_best_sim_dp.dp_stats.dist_to_goal(metrics_to_look_into=["area", "latency", "power"],
                                                                           mode="eliminate"),
                    "best_des_so_far_area_non_dram": self.so_far_best_sim_dp.dp_stats.get_system_complex_area_stacked_dram()["non_dram"],
                    "best_des_so_far_area_dram": self.so_far_best_sim_dp.dp_stats.get_system_complex_area_stacked_dram()["dram"],
                    #"area_breakdown_subtype":self.convert_dictionary_to_parsable_csv_with_semi_column(sim_dp.dp_stats.SOC_area_subtype_dict.keys()),
                    #"best_des_so_far_area_breakdown_subtype":self.so_far_best_sim_dp.dp_stats.convert_dictionary_to_parsable_csv_with_semi_column(sim_dp.dp_stats.SOC_area_subtype_dict.keys()),
                    "system block count" : blk_cnt,
                    "system PE count" : pe_cnt,
                    "system bus count" : bus_cnt,
                    "system memory count" : mem_cnt,
                    "routing complexity" : routing_complexity,
                     "workload_set" : '_'.join(sim_dp.database.db_input.workload_tasks.keys()),
            "block_impact_sorted" : sorted_blocks,
                    "kernel_impact_sorted" : sorted_kernels,
                    "metric_impact_sorted" : sorted_metrics,
                    "transformation_metric" : metric,
                    "move validity" : move_validity,
                    "move name" : transformation_name,
                    "transformation_kernel" : task_name,
                    "transformation_block_name" : blk_instance_name,
                    "transformation_block_type" : blk_type,
                    "transformation_dir" : dir,
                    "comm_comp" : comm_comp,
                    "high level optimization name" : high_level_optimization,
                    "exact optimization name": exact_optimization,
                    "architectural principle" : architectural_principle,
                    "neighbouring design space size" : neighbouring_design_space_size,
                    "block_area_break_down":block_area_break_down,
                    "sub_block_area_break_down":sub_block_area_break_down,
                "task_cnt": task_cnt,
                "channel_cnt":channel_cnt,
                "area_dram":area_dram,
                "area_non_dram":area_non_dram
            }

            for metric in config.all_metrics:
                # convert dictionary to a parsable data
                data_ =  sim_dp.dp_stats.get_system_complex_metric(metric)
                if isinstance(data_, dict):
                    data__ =self.convert_dictionary_to_parsable_csv_with_semi_column(data_)
                else:
                    data__ = data_
                data[metric] = data__

                if metric in sim_dp.database.db_input.get_budget_dict("glass").keys():
                    # convert dictionary to a parsable rsult
                    data_ =  sim_dp.database.db_input.get_budget_dict("glass")[metric]
                    if isinstance(data_, dict):
                        data__ = self.convert_dictionary_to_parsable_csv_with_semi_column(data_)
                    else:
                        data__ = data_
                    data[metric +"_budget"] = data__

            for metric in config.all_metrics:
                # convert dictionary to a parsable data
                data_ = self.so_far_best_sim_dp.dp_stats.get_system_complex_metric(metric)
                if isinstance(data_, dict):
                    data__ = self.convert_dictionary_to_parsable_csv_with_semi_column(data_)
                else:
                    data__ = data_
                data["best_des_so_far_"+metric] = data__

            ctr +=1
            self.log_data_list.append(data)