def plot_codesign_rate_efficacy_cross_workloads_updated_for_paper()

in visualization_utils/plotting.py [0:0]


def plot_codesign_rate_efficacy_cross_workloads_updated_for_paper(input_dir_names, res_column_name_number):
    #itrColNum = all_res_column_name_number["iteration cnt"]
    #distColNum = all_res_column_name_number["dist_to_goal_non_cost"]
    trueNum  =  all_res_column_name_number["move validity"]
    move_name_number =  all_res_column_name_number["move name"]

    # experiment_names
    file_full_addr_list = []
    for dir_name in input_dir_names:
        file_full_addr = os.path.join(dir_name, "result_summary/FARSI_simple_run_0_1_all_reults.csv")
        file_full_addr_list.append(file_full_addr)

    axis_font = {'fontname': 'Arial', 'size': '4'}
    x_column_name = "iteration cnt"
    #y_column_name_list = ["high level optimization name", "exact optimization name", "architectural principle", "comm_comp"]
    y_column_name_list = ["exact optimization name",  "architectural principle", "comm_comp", "workload"]

    #y_column_name_list = ["high level optimization name", "exact optimization name", "architectural principle", "comm_comp"]



    column_co_design_cnt = {}
    column_non_co_design_cnt = {}
    column_co_design_rate = {}
    column_non_co_design_rate = {}
    column_co_design_efficacy_avg = {}
    column_non_co_design_efficacy_rate = {}
    column_non_co_design_efficacy = {}
    column_co_design_dist= {}
    column_co_design_dist_avg= {}
    column_co_design_improvement = {}
    experiment_name_list = []
    last_col_val = ""
    ctr_ = 0
    for file_full_addr in file_full_addr_list:
        if ctr_ == 1:
            continue
        experiment_name = get_experiments_name(file_full_addr, res_column_name_number)
        experiment_name_list.append(experiment_name)
        column_co_design_dist_avg[experiment_name] = {}
        column_co_design_efficacy_avg[experiment_name] = {}

        column_co_design_cnt = {}
        for y_column_name in y_column_name_list:
            y_column_number = res_column_name_number[y_column_name]
            x_column_number = res_column_name_number[x_column_name]


            dis_to_goal_column_number = res_column_name_number["dist_to_goal_non_cost"]
            ref_des_dis_to_goal_column_number = res_column_name_number["ref_des_dist_to_goal_non_cost"]
            column_co_design_cnt[y_column_name] = []
            column_non_co_design_cnt[y_column_name] = []

            column_non_co_design_efficacy[y_column_name] = []
            column_co_design_dist[y_column_name] = []
            column_co_design_improvement[y_column_name] = []
            column_co_design_rate[y_column_name] = []

            all_values = get_all_col_values_of_a_folders(input_dir_names, all_res_column_name_number, y_column_name)

            last_row_change = ""
            with open(file_full_addr, newline='') as csvfile:
                resultReader = csv.reader(csvfile, delimiter=',', quotechar='|')
                rows = list(resultReader)
                for i, row in enumerate(rows):
                    if i > 1:
                        last_row = rows[i - 1]
                        if row[y_column_number] not in all_values or row[move_name_number]=="identity":
                            continue

                        col_value = row[y_column_number]
                        col_values = col_value.split(";")
                        for idx, col_val in enumerate(col_values):


                            # only for improvement
                            if float(row[ref_des_dis_to_goal_column_number]) - float(row[dis_to_goal_column_number]) < 0:
                                continue

                            delta_x_column = (float(row[x_column_number]) - float(last_row[x_column_number]))/len(col_values)
                            delta_improvement = (float(last_row[dis_to_goal_column_number]) - float(row[dis_to_goal_column_number]))/(float(last_row[dis_to_goal_column_number])*len(col_values))


                            if not col_val == last_col_val and i > 1:
                                if not last_row_change == "":
                                    distance_from_last_change =  float(last_row[x_column_number]) - float(last_row_change[x_column_number]) + idx * delta_x_column
                                    column_co_design_dist[y_column_name].append(distance_from_last_change)
                                    improvement_from_last_change =  (float(last_row[dis_to_goal_column_number]) - float(row[dis_to_goal_column_number]))/float(last_row[dis_to_goal_column_number])  + idx *delta_improvement
                                    column_co_design_improvement[y_column_name].append(improvement_from_last_change)

                                last_row_change = copy.deepcopy(last_row)


                            last_col_val = col_val



            # co_des cnt
            # we ignore the first element as the first element distance is always zero
            co_design_dist_sum = 0
            co_design_efficacy_sum = 0
            avg_ctr = 1
            co_design_dist_selected = column_co_design_dist[y_column_name]
            co_design_improvement_selected = column_co_design_improvement[y_column_name]
            for idx,el in enumerate(column_co_design_dist[y_column_name]):
                if idx == len(co_design_dist_selected) - 1:
                    break
                co_design_dist_sum += 1/(column_co_design_dist[y_column_name][idx] + column_co_design_dist[y_column_name][idx+1])
                co_design_efficacy_sum += (column_co_design_improvement[y_column_name][idx] + column_co_design_improvement[y_column_name][idx+1])
                #/(column_co_design_dist[y_column_name][idx] + column_co_design_dist[y_column_name][idx+1])
                avg_ctr+=1

            column_co_design_improvement = {}
            column_co_design_dist_avg[experiment_name][y_column_name]= co_design_dist_sum/avg_ctr
            column_co_design_efficacy_avg[experiment_name][y_column_name] = co_design_efficacy_sum/avg_ctr
        ctr_ +=1
        #result = {"rate":{}, "efficacy":{}}
        #rate_column_co_design = {}

    plt.figure()
    y_column_name_list_rep = ["L.Opt",  "H.Opt", "CM", "WL"]
    y_column_name_list_rep_rep = [re.sub("(.{5})", "\\1\n", label, 0, re.DOTALL) for label in y_column_name_list_rep]
    plotdata = pd.DataFrame(column_co_design_dist_avg, index=y_column_name_list)
    fontSize = 26
    # print(plotdata)
    # print(y_column_name_list)
    color_list={'a0.021_e0.034_h0.034_0.008737_1.7475e-05_arch-aware': 'green', 'a0.021_e0.034_h0.034_0.008737_1.7475e-05_random': 'red'} # Ying: uncomment for blind_study_all_dumb_versions/blind_vs_arch_aware (T.B.M), also the one below
    ax = plotdata.plot(kind='bar', fontsize=fontSize, figsize=(6.6, 6.6), color=color_list)   # Ying: uncomment for blind_study_all_dumb_versions/blind_vs_arch_aware (T.B.M), also the one below
    ax.set_xticklabels(y_column_name_list_rep_rep, rotation=0)
    # Ying: hardcode here
    ax.set_xlabel("Co-design Parameter", fontsize=fontSize, labelpad=-25)
    ax.set_ylabel("Co-design Rate", fontsize=fontSize)
    for experiment_name, value in column_co_design_dist_avg.items():
        # print(experiment_name[-6:])
        if experiment_name[-6:] == "random":
            ax.legend(['SA', 'FARSI'], bbox_to_anchor=(0.5, 1.23), loc="upper center", fontsize=fontSize - 2, ncol=2)
        else:
            ax.legend(['FARSI', 'SA'], bbox_to_anchor=(0.5, 1.23), loc="upper center", fontsize=fontSize - 2, ncol=2)
        break
    # Ying: hardcode finished
    plt.tight_layout()

    # dump in the top folder
    output_base_dir = '/'.join(input_dir_names[0].split("/")[:-2])
    output_dir = os.path.join(output_base_dir, "cross_workloads/co_design_rate")
    if not os.path.exists(output_dir):
        os.makedirs(output_dir)

    plt.savefig(os.path.join(output_dir,"co_design_avg_dist"+'_'.join(y_column_name_list)+".png"), bbox_inches='tight')
    # plt.show()
    plt.close('all')


    plt.figure()
    plotdata = pd.DataFrame(column_co_design_efficacy_avg, index=y_column_name_list)
    fontSize = 26
    ax = plotdata.plot(kind='bar', fontsize=fontSize, figsize=(6.6, 6.6), color=color_list)   # Ying: uncomment for blind_study_all_dumb_versions/blind_vs_arch_aware (T.B.M), also the one above
    ax.set_xticklabels(y_column_name_list_rep_rep, rotation=0)
    # Ying: hardcode here
    ax.set_xlabel("Co-design Parameter", fontsize=fontSize, labelpad=-25)
    ax.set_ylabel("Co-design Improvement", fontsize=fontSize)
    for experiment_name, value in column_co_design_dist_avg.items():
        # print(experiment_name[-6:])
        if experiment_name[-6:] == "random":
            ax.legend(['SA', 'FARSI'], bbox_to_anchor=(0.5, 1.23), loc="upper center", fontsize=fontSize - 2, ncol=2)
        else:
            ax.legend(['FARSI', 'SA'], bbox_to_anchor=(0.5, 1.23), loc="upper center", fontsize=fontSize - 2, ncol=2)
        break
    # Ying: hardcode finished
    plt.tight_layout()

    # dump in the top folder
    output_base_dir = '/'.join(input_dir_names[0].split("/")[:-2])
    output_dir = os.path.join(output_base_dir, "cross_workloads/co_design_rate")
    if not os.path.exists(output_dir):
        os.makedirs(output_dir)

    plt.savefig(os.path.join(output_dir,"co_design_efficacy"+'_'.join(y_column_name_list)+".png"), bbox_inches='tight')
    # plt.show()
    plt.close('all')