visualization_utils/plotting-ying.py [1033:1245]:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        plt.close('all')

def plot_system_implication_analysis(input_dir_names, res_column_name_number, case_study):
    # experiment_names
    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.csv")
        file_full_addr_list.append(file_full_addr)
        experiment_name = get_experiments_name(file_full_addr, res_column_name_number)
        experiment_names.append(experiment_name)

    axis_font = {'size': '10'}

    column_name_list = list(case_study.values())[0]

    column_experiment_value = {}
    #column_name = "move name"
    for column_name in column_name_list:
        # get all possible the values of interest
        column_number = res_column_name_number[column_name]

        column_experiment_value[column_name] = {}
        # initialize the dictionary
        column_experiment_number_dict = {}
        experiment_number_dict = {}

        # get all the data
        for file_full_addr in file_full_addr_list:
            with open(file_full_addr, newline='') as csvfile:
                resultReader = csv.reader(csvfile, delimiter=',', quotechar='|')
                experiment_name = get_experiments_name( file_full_addr, res_column_name_number)

                for i, row in enumerate(resultReader):
                    #if row[trueNum] != "True":
                    #    continue
                    if i >= 1:
                        col_value = row[column_number]
                        col_values = col_value.split(";")
                        for col_val in col_values:
                            column_experiment_value[column_name][experiment_name] = float(col_val)

    # prepare for plotting and plot
    # plt.figure()
    index = experiment_names
    plotdata = pd.DataFrame(column_experiment_value, index=index)
    if list(case_study.keys())[0] in ["bandwidth_analysis","traffic_analysis"]:
        plotdata.plot(kind='bar', fontsize=9, rot=5, log=True)
    else:
        plotdata.plot(kind='bar', fontsize=9, rot=5)

    plt.legend(loc="best", fontsize="9")
    plt.xlabel("experiments", fontsize="10")
    plt.ylabel("system implication")
    #plt.title("experiment vs system implicaction")
    # 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/system_implications")
    if not os.path.exists(output_dir):
        os.makedirs(output_dir)
    #plt.tight_layout()list(case_study.keys())[0]
    if "re_use" in list(case_study.keys())[0] or "speedup" in list(case_study.keys())[0]:
        plt.yscale('log')
    plt.savefig(os.path.join(output_dir,list(case_study.keys())[0]+".png"))
    plt.close('all')



def plot_co_design_nav_breakdown_post_processing(input_dir_names, column_column_value_experiment_frequency_dict):
    column_name_list = [("exact optimization name", "neighbouring design space size", "div")]
    #column_name = "move name"
    for n, column_name_tuple in enumerate(column_name_list):
        first_column =  column_name_tuple[0]
        second_column =  column_name_tuple[1]
        operation =   column_name_tuple[2]
        new_column_name = first_column+"_"+operation+"_"+second_column

        first_column_value_experiment_frequency_dict = column_column_value_experiment_frequency_dict[first_column]
        second_column_value_experiment_frequency_dict = column_column_value_experiment_frequency_dict[second_column]
        modified_column_value_experiment_frequency_dict = {}

        experiment_names = []
        for column_val, experiment_freq  in first_column_value_experiment_frequency_dict.items():
            if column_val == "unknown":
                continue
            modified_column_value_experiment_frequency_dict[column_val] = {}
            for experiment, freq in  experiment_freq.items():
                if(second_column_value_experiment_frequency_dict[column_val][experiment]) < .000001:
                    modified_column_value_experiment_frequency_dict[column_val][experiment] = 0
                else:
                    modified_column_value_experiment_frequency_dict[column_val][experiment] = first_column_value_experiment_frequency_dict[column_val][experiment]/max(second_column_value_experiment_frequency_dict[column_val][experiment],.0000000000001)
                experiment_names.append(experiment)

        axis_font = {'size': '22'}
        fontSize = 22
        experiment_names =  list(set(experiment_names))
        # prepare for plotting and plot
        # plt.figure(n)
        plt.rc('font', **axis_font)
        index = experiment_names
        plotdata = pd.DataFrame(modified_column_value_experiment_frequency_dict, index=index)
        plotdata.plot(kind='bar', stacked=True, figsize=(13, 8))
        plt.xlabel("experiments", **axis_font)
        plt.ylabel(new_column_name, **axis_font)
        plt.xticks(fontsize=fontSize, rotation=45)
        plt.yticks(fontsize=fontSize)
        plt.title("experiment vs " + new_column_name, **axis_font)
        plt.legend(bbox_to_anchor=(1, 1), loc='upper left', fontsize=fontSize)
        # 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/nav_breakdown")
        if not os.path.exists(output_dir):
            os.makedirs(output_dir)
        # plt.tight_layout()
        plt.savefig(os.path.join(output_dir,'_'.join(new_column_name.split(" "))+".png"), bbox_inches='tight')
        plt.tight_layout()
        # plt.show()
        plt.close('all')



# navigation breakdown
def plot_codesign_nav_breakdown_per_workload(input_dir_names, input_all_res_column_name_number):
    trueNum = input_all_res_column_name_number["move validity"]

    # experiment_names
    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)
        experiment_name = get_experiments_name(file_full_addr, input_all_res_column_name_number)
        experiment_names.append(experiment_name)


    axis_font = {'size': '20'}
    fontSize = 20
    column_name_list = ["transformation_metric", "comm_comp", "workload"]#, "architectural principle", "high level optimization name", "exact optimization name"]
    #column_name_list = ["architectural principle", "exact optimization name"]

    #column_name = "move name"
    # initialize the dictionary
    column_column_value_experiment_frequency_dict = {}
    for file_full_addr in file_full_addr_list:
        column_column_value_frequency_dict = {}
        for column_name in column_name_list:
            with open(file_full_addr, newline='') as csvfile:
                resultReader = csv.reader(csvfile, delimiter=',', quotechar='|')
                experiment_name = get_experiments_name(file_full_addr, input_all_res_column_name_number)
                #column_column_value_frequency_dict[column_name] = {}
                # get all possible the values of interest
                all_values = get_all_col_values_of_a_folders(input_dir_names, input_all_res_column_name_number, column_name)
                columne_number = all_res_column_name_number[column_name]
                for column in all_values:
                    column_column_value_frequency_dict[column] = {}
                    column_column_value_frequency_dict[column][column_name] = 0
                for i, row in enumerate(resultReader):
                    if row[trueNum] != "True":
                        continue
                    if i > 1:
                        col_value = row[columne_number]
                        col_values = col_value.split(";")
                        for col_val in col_values:
                            if "=" in col_val:
                                val_splitted = col_val.split("=")
                                column_column_value_frequency_dict[val_splitted[0]][column_name] += float(val_splitted[1])
                            else:
                                column_column_value_frequency_dict[col_val][column_name] += 1

        index = column_name_list
        total_cnt = 0
        for val in column_column_value_frequency_dict[column].values():
            total_cnt += val

        for col_val, column_name_val in column_column_value_frequency_dict.items():
            for column_name, val in column_name_val.items():
                column_column_value_frequency_dict[col_val][column_name] /= max(total_cnt,1)

        plotdata = pd.DataFrame(column_column_value_frequency_dict, index=index)
        plotdata.plot(kind='bar', stacked=True, figsize=(10, 10))
        plt.rc('font', ** axis_font)
        plt.xlabel("experiments", **axis_font)
        plt.ylabel(column_name, **axis_font)
        plt.xticks(fontsize=fontSize, rotation=45)
        plt.yticks(fontsize=fontSize)
        plt.title("experiment vs " + column_name, **axis_font)
        plt.legend(bbox_to_anchor=(1, 1), loc='upper left', fontsize=fontSize)
        # dump in the top folder
        output_base_dir = '/'.join(input_dir_names[0].split("/")[:-2])
        output_dir = os.path.join(output_base_dir, "single_workload/nav_breakdown")
        if not os.path.exists(output_dir):
            os.makedirs(output_dir)
        plt.tight_layout()
        plt.savefig(os.path.join(output_dir,"__".join(column_name_list)+".png"), bbox_inches='tight')
        # plt.show()
        plt.close('all')
        #column_column_value_experiment_frequency_dict[column_name] = copy.deepcopy(column_column_value_frequency_dict)

    return column_column_value_experiment_frequency_dict




def plot_codesign_nav_breakdown_cross_workload(input_dir_names, input_all_res_column_name_number):
    trueNum = input_all_res_column_name_number["move validity"]

    # experiment_names
    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)
        experiment_name = get_experiments_name(file_full_addr, input_all_res_column_name_number)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



visualization_utils/plotting.py [1739:1951]:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        plt.close('all')

def plot_system_implication_analysis(input_dir_names, res_column_name_number, case_study):
    # experiment_names
    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.csv")
        file_full_addr_list.append(file_full_addr)
        experiment_name = get_experiments_name(file_full_addr, res_column_name_number)
        experiment_names.append(experiment_name)

    axis_font = {'size': '10'}

    column_name_list = list(case_study.values())[0]

    column_experiment_value = {}
    #column_name = "move name"
    for column_name in column_name_list:
        # get all possible the values of interest
        column_number = res_column_name_number[column_name]

        column_experiment_value[column_name] = {}
        # initialize the dictionary
        column_experiment_number_dict = {}
        experiment_number_dict = {}

        # get all the data
        for file_full_addr in file_full_addr_list:
            with open(file_full_addr, newline='') as csvfile:
                resultReader = csv.reader(csvfile, delimiter=',', quotechar='|')
                experiment_name = get_experiments_name( file_full_addr, res_column_name_number)

                for i, row in enumerate(resultReader):
                    #if row[trueNum] != "True":
                    #    continue
                    if i >= 1:
                        col_value = row[column_number]
                        col_values = col_value.split(";")
                        for col_val in col_values:
                            column_experiment_value[column_name][experiment_name] = float(col_val)

    # prepare for plotting and plot
    # plt.figure()
    index = experiment_names
    plotdata = pd.DataFrame(column_experiment_value, index=index)
    if list(case_study.keys())[0] in ["bandwidth_analysis","traffic_analysis"]:
        plotdata.plot(kind='bar', fontsize=9, rot=5, log=True)
    else:
        plotdata.plot(kind='bar', fontsize=9, rot=5)

    plt.legend(loc="best", fontsize="9")
    plt.xlabel("experiments", fontsize="10")
    plt.ylabel("system implication")
    #plt.title("experiment vs system implicaction")
    # 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/system_implications")
    if not os.path.exists(output_dir):
        os.makedirs(output_dir)
    #plt.tight_layout()list(case_study.keys())[0]
    if "re_use" in list(case_study.keys())[0] or "speedup" in list(case_study.keys())[0]:
        plt.yscale('log')
    plt.savefig(os.path.join(output_dir,list(case_study.keys())[0]+".png"))
    plt.close('all')



def plot_co_design_nav_breakdown_post_processing(input_dir_names, column_column_value_experiment_frequency_dict):
    column_name_list = [("exact optimization name", "neighbouring design space size", "div")]
    #column_name = "move name"
    for n, column_name_tuple in enumerate(column_name_list):
        first_column =  column_name_tuple[0]
        second_column =  column_name_tuple[1]
        operation =   column_name_tuple[2]
        new_column_name = first_column+"_"+operation+"_"+second_column

        first_column_value_experiment_frequency_dict = column_column_value_experiment_frequency_dict[first_column]
        second_column_value_experiment_frequency_dict = column_column_value_experiment_frequency_dict[second_column]
        modified_column_value_experiment_frequency_dict = {}

        experiment_names = []
        for column_val, experiment_freq  in first_column_value_experiment_frequency_dict.items():
            if column_val == "unknown":
                continue
            modified_column_value_experiment_frequency_dict[column_val] = {}
            for experiment, freq in  experiment_freq.items():
                if(second_column_value_experiment_frequency_dict[column_val][experiment]) < .000001:
                    modified_column_value_experiment_frequency_dict[column_val][experiment] = 0
                else:
                    modified_column_value_experiment_frequency_dict[column_val][experiment] = first_column_value_experiment_frequency_dict[column_val][experiment]/max(second_column_value_experiment_frequency_dict[column_val][experiment],.0000000000001)
                experiment_names.append(experiment)

        axis_font = {'size': '22'}
        fontSize = 22
        experiment_names =  list(set(experiment_names))
        # prepare for plotting and plot
        # plt.figure(n)
        plt.rc('font', **axis_font)
        index = experiment_names
        plotdata = pd.DataFrame(modified_column_value_experiment_frequency_dict, index=index)
        plotdata.plot(kind='bar', stacked=True, figsize=(13, 8))
        plt.xlabel("experiments", **axis_font)
        plt.ylabel(new_column_name, **axis_font)
        plt.xticks(fontsize=fontSize, rotation=45)
        plt.yticks(fontsize=fontSize)
        plt.title("experiment vs " + new_column_name, **axis_font)
        plt.legend(bbox_to_anchor=(1, 1), loc='upper left', fontsize=fontSize)
        # 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/nav_breakdown")
        if not os.path.exists(output_dir):
            os.makedirs(output_dir)
        # plt.tight_layout()
        plt.savefig(os.path.join(output_dir,'_'.join(new_column_name.split(" "))+".png"), bbox_inches='tight')
        plt.tight_layout()
        # plt.show()
        plt.close('all')



# navigation breakdown
def plot_codesign_nav_breakdown_per_workload(input_dir_names, input_all_res_column_name_number):
    trueNum = input_all_res_column_name_number["move validity"]

    # experiment_names
    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)
        experiment_name = get_experiments_name(file_full_addr, input_all_res_column_name_number)
        experiment_names.append(experiment_name)


    axis_font = {'size': '20'}
    fontSize = 20
    column_name_list = ["transformation_metric", "comm_comp", "workload"]#, "architectural principle", "high level optimization name", "exact optimization name"]
    #column_name_list = ["architectural principle", "exact optimization name"]

    #column_name = "move name"
    # initialize the dictionary
    column_column_value_experiment_frequency_dict = {}
    for file_full_addr in file_full_addr_list:
        column_column_value_frequency_dict = {}
        for column_name in column_name_list:
            with open(file_full_addr, newline='') as csvfile:
                resultReader = csv.reader(csvfile, delimiter=',', quotechar='|')
                experiment_name = get_experiments_name(file_full_addr, input_all_res_column_name_number)
                #column_column_value_frequency_dict[column_name] = {}
                # get all possible the values of interest
                all_values = get_all_col_values_of_a_folders(input_dir_names, input_all_res_column_name_number, column_name)
                columne_number = all_res_column_name_number[column_name]
                for column in all_values:
                    column_column_value_frequency_dict[column] = {}
                    column_column_value_frequency_dict[column][column_name] = 0
                for i, row in enumerate(resultReader):
                    if row[trueNum] != "True":
                        continue
                    if i > 1:
                        col_value = row[columne_number]
                        col_values = col_value.split(";")
                        for col_val in col_values:
                            if "=" in col_val:
                                val_splitted = col_val.split("=")
                                column_column_value_frequency_dict[val_splitted[0]][column_name] += float(val_splitted[1])
                            else:
                                column_column_value_frequency_dict[col_val][column_name] += 1

        index = column_name_list
        total_cnt = 0
        for val in column_column_value_frequency_dict[column].values():
            total_cnt += val

        for col_val, column_name_val in column_column_value_frequency_dict.items():
            for column_name, val in column_name_val.items():
                column_column_value_frequency_dict[col_val][column_name] /= max(total_cnt,1)

        plotdata = pd.DataFrame(column_column_value_frequency_dict, index=index)
        plotdata.plot(kind='bar', stacked=True, figsize=(10, 10))
        plt.rc('font', ** axis_font)
        plt.xlabel("experiments", **axis_font)
        plt.ylabel(column_name, **axis_font)
        plt.xticks(fontsize=fontSize, rotation=45)
        plt.yticks(fontsize=fontSize)
        plt.title("experiment vs " + column_name, **axis_font)
        plt.legend(bbox_to_anchor=(1, 1), loc='upper left', fontsize=fontSize)
        # dump in the top folder
        output_base_dir = '/'.join(input_dir_names[0].split("/")[:-2])
        output_dir = os.path.join(output_base_dir, "single_workload/nav_breakdown")
        if not os.path.exists(output_dir):
            os.makedirs(output_dir)
        plt.tight_layout()
        plt.savefig(os.path.join(output_dir,"__".join(column_name_list)+".png"), bbox_inches='tight')
        # plt.show()
        plt.close('all')
        #column_column_value_experiment_frequency_dict[column_name] = copy.deepcopy(column_column_value_frequency_dict)

    return column_column_value_experiment_frequency_dict




def plot_codesign_nav_breakdown_cross_workload(input_dir_names, input_all_res_column_name_number):
    trueNum = input_all_res_column_name_number["move validity"]

    # experiment_names
    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)
        experiment_name = get_experiments_name(file_full_addr, input_all_res_column_name_number)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



