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



def plot_codesign_progression_per_workloads(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"]

    # 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, res_column_name_number)
        experiment_names.append(experiment_name)

    axis_font = {'size': '20'}
    x_column_name = "iteration cnt"
    y_column_name_list = ["high level optimization name", "exact optimization name", "architectural principle", "comm_comp"]


    experiment_column_value = {}
    for file_full_addr in file_full_addr_list:
        experiment_name = get_experiments_name(file_full_addr, res_column_name_number)
        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]
            experiment_column_value[experiment_name] = []
            all_values = get_all_col_values_of_a_folders(input_dir_names, all_res_column_name_number, y_column_name)
            all_values_encoding = {}
            for idx, val in enumerate(all_values):
                all_values_encoding[val] = idx

            with open(file_full_addr, newline='') as csvfile:
                resultReader = csv.reader(csvfile, delimiter=',', quotechar='|')
                rows = list(resultReader)
                for i, row in enumerate(rows):
                    #if row[trueNum] != "True":
                    #    continue
                    if i >= 1:
                        if row[y_column_number] not in all_values:
                            continue

                        col_value = row[y_column_number]
                        col_values = col_value.split(";")
                        for idx, col_val in enumerate(col_values):
                            last_row =  rows[i-1]
                            delta_x_column = (float(row[x_column_number]) - float(last_row[x_column_number]))/len(col_values)
                            value_to_add = (float(last_row[x_column_number])+ idx*delta_x_column, col_val)
                            experiment_column_value[experiment_name].append(value_to_add)



            # prepare for plotting and plot
            axis_font = {'size': '20'}
            fontSize = 20

            fig = plt.figure(figsize=(12, 8))
            plt.rc('font', **axis_font)
            ax = fig.add_subplot(111)
            x_values = [el[0] for el in experiment_column_value[experiment_name]]
            #y_values = [all_values_encoding[el[1]] for el in experiment_column_value[experiment_name]]
            y_values = [el[1] for el in experiment_column_value[experiment_name]]

            #ax.set_title("experiment vs system implicaction")
            ax.tick_params(axis='both', which='major', labelsize=fontSize, rotation=60)
            ax.set_xlabel(x_column_name, fontsize=20)
            ax.set_ylabel(y_column_name, fontsize=20)
            ax.plot(x_values, y_values, label=y_column_name, linewidth=2)
            ax.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/progression")
            if not os.path.exists(output_dir):
                os.makedirs(output_dir)
            plt.tight_layout()
            fig.savefig(os.path.join(output_dir,experiment_name+"_progression_"+'_'.join(y_column_name_list)+".png"))
            # plt.show()
            plt.close('all')

            fig = plt.figure(figsize=(12, 8))
            plt.rc('font', **axis_font)
            ax = fig.add_subplot(111)
            x_values = [el[0] for el in experiment_column_value[experiment_name]]
            # y_values = [all_values_encoding[el[1]] for el in experiment_column_value[experiment_name]]
            y_values = [el[1] for el in experiment_column_value[experiment_name]]

            # ax.set_title("experiment vs system implicaction")
            ax.tick_params(axis='both', which='major', labelsize=fontSize, rotation=60)
            ax.set_xlabel(x_column_name, fontsize=20)
            ax.set_ylabel(y_column_name, fontsize=20)
            ax.plot(x_values, y_values, label=y_column_name, linewidth=2)
            ax.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/progression")
            if not os.path.exists(output_dir):
                os.makedirs(output_dir)
            plt.tight_layout()
            fig.savefig(os.path.join(output_dir, experiment_name + "_progression_" + y_column_name + ".png"))
            # plt.show()
            plt.close('all')


def plot_3d(input_dir_names, res_column_name_number):
    # 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'}
    fontSize = 10
    column_value = {}
    # initialize the dictionary
    column_name_list = ["budget_scaling_power", "budget_scaling_area","budget_scaling_latency"]

    under_study_vars =["iteration cnt",
                       "local_bus_avg_theoretical_bandwidth", "local_bus_max_actual_bandwidth",
                       "local_bus_avg_actual_bandwidth",
                       "system_bus_avg_theoretical_bandwidth", "system_bus_max_actual_bandwidth",
                       "system_bus_avg_actual_bandwidth", "global_total_traffic", "local_total_traffic",
                       "global_memory_total_area", "local_memory_total_area", "ips_total_area",
                       "gpps_total_area","ip_cnt", "max_accel_parallelism", "avg_accel_parallelism",
                       "gpp_cnt", "max_gpp_parallelism", "avg_gpp_parallelism"]




    # 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:
                    for column_name in column_name_list + under_study_vars:
                        if column_name not in column_value.keys() :
                            column_value[column_name] = []
                        column_number = res_column_name_number[column_name]
                        col_value = row[column_number]
                        col_values = col_value.split(";")
                        if "=" in col_values[0]:
                            column_value[column_name].append(float((col_values[0]).split("=")[1]))
                        else:
                            column_value[column_name].append(float(col_values[0]))


    for idx,under_study_var in enumerate(under_study_vars):
        fig_budget_blkcnt = plt.figure(figsize=(12, 12))
        plt.rc('font', **axis_font)
        ax_blkcnt = fig_budget_blkcnt.add_subplot(projection='3d')
        img = ax_blkcnt.scatter3D(column_value["budget_scaling_power"], column_value["budget_scaling_area"], column_value["budget_scaling_latency"],
                                  c=column_value[under_study_var], cmap="bwr", s=80, label="System Block Count")
        for idx,_ in enumerate(column_value[under_study_var]):
            coordinate = column_value[under_study_var][idx]
            coord_in_scientific_notatio = "{:.2e}".format(coordinate)

            ax_blkcnt.text(column_value["budget_scaling_power"][idx], column_value["budget_scaling_area"][idx], column_value["budget_scaling_latency"][idx], '%s' % coord_in_scientific_notatio, size=fontSize)

        ax_blkcnt.set_xlabel("Power Budget", fontsize=fontSize)
        ax_blkcnt.set_ylabel("Area Budget", fontsize=fontSize)
        ax_blkcnt.set_zlabel("Latency Budget", fontsize=fontSize)
        ax_blkcnt.legend()
        cbar = fig_budget_blkcnt.colorbar(img, aspect=40)
        cbar.set_label("System Block Count", rotation=270)
        #plt.title("{Power Budget, Area Budget, Latency Budget} VS System Block Count: " + subDirName)
        plt.tight_layout()

        output_base_dir = '/'.join(input_dir_names[0].split("/")[:-2])
        output_dir = os.path.join(output_base_dir, "3D/case_studies")
        if not os.path.exists(output_dir):
            os.makedirs(output_dir)
        plt.savefig(os.path.join(output_dir, under_study_var+ ".png"))
        # plt.show()
        plt.close('all')
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



visualization_utils/plotting.py [620:965]:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    plt.close('all')

"""
def plot_codesign_rate_efficacy_per_workloads(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_rate = {}
    column_non_co_design_efficacy_rate = {}
    column_non_co_design_efficacy = {}
    column_co_design_efficacy= {}
    last_col_val = ""
    for file_full_addr in file_full_addr_list:
        experiment_name = get_experiments_name(file_full_addr, res_column_name_number)
        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_efficacy[y_column_name] = []

            all_values = get_all_col_values_of_a_folders(input_dir_names, all_res_column_name_number, y_column_name)

            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[trueNum] == "False" 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):
                            delta_x_column = (float(row[x_column_number]) - float(last_row[x_column_number]))/len(col_values)

                            value_to_add_1 = (float(last_row[x_column_number]) + idx * delta_x_column, 1)
                            value_to_add_0 = (float(last_row[x_column_number]) + idx * delta_x_column, 0)

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

                            if not col_val == last_col_val:

                                column_co_design_cnt[y_column_name].append(value_to_add_1)
                                column_non_co_design_cnt[y_column_name].append(value_to_add_0)
                                column_co_design_efficacy[y_column_name].append((float(row[ref_des_dis_to_goal_column_number]) - float(row[dis_to_goal_column_number]))/float(row[ref_des_dis_to_goal_column_number]))
                                column_non_co_design_efficacy[y_column_name].append(0)
                            else:
                                column_co_design_cnt[y_column_name].append(value_to_add_0)
                                column_non_co_design_cnt[y_column_name].append(value_to_add_1)
                                column_co_design_efficacy[y_column_name].append(0)
                                column_non_co_design_efficacy[y_column_name].append((float(row[ref_des_dis_to_goal_column_number]) - float(row[dis_to_goal_column_number]))/float(row[ref_des_dis_to_goal_column_number]))

                            last_col_val = col_val



            # co_des cnt
            x_values_co_design_cnt = [el[0] for el in column_co_design_cnt[y_column_name]]
            y_values_co_design_cnt = [el[1] for el in column_co_design_cnt[y_column_name]]
            y_values_co_design_cnt_total =sum(y_values_co_design_cnt)
            total_iter = x_values_co_design_cnt[-1]

            # non co_des cnt
            x_values_non_co_design_cnt = [el[0] for el in column_non_co_design_cnt[y_column_name]]
            y_values_non_co_design_cnt = [el[1] for el in column_non_co_design_cnt[y_column_name]]
            y_values_non_co_design_cnt_total =sum(y_values_non_co_design_cnt)

            column_co_design_rate[y_column_name] = y_values_co_design_cnt_total/total_iter
            column_non_co_design_rate[y_column_name] = y_values_non_co_design_cnt_total/total_iter

            # co_des efficacy
            y_values_co_design_efficacy =  column_co_design_efficacy[y_column_name]
            y_values_co_design_efficacy_total =sum(y_values_co_design_efficacy)


            # non co_des efficacy
            y_values_non_co_design_efficacy = column_non_co_design_efficacy[y_column_name]
            y_values_non_co_design_efficacy_total =sum(y_values_non_co_design_efficacy)

            column_co_design_efficacy_rate[y_column_name] = y_values_co_design_efficacy_total/(y_values_non_co_design_efficacy_total + y_values_co_design_efficacy_total)
            column_non_co_design_efficacy_rate[y_column_name] = y_values_non_co_design_efficacy_total/(y_values_non_co_design_efficacy_total + y_values_co_design_efficacy_total)


        result = {"rate":{}, "efficacy":{}}
        rate_column_co_design = {}

        result["rate"] =  {"co_design":column_co_design_rate, "non_co_design": column_non_co_design_rate}
        result["efficacy_rate"] =  {"co_design":column_co_design_efficacy_rate, "non_co_design": column_non_co_design_efficacy_rate}
        # prepare for plotting and plot


        plt.figure()
        plotdata = pd.DataFrame(result["rate"], index=y_column_name_list)
        fontSize = 10
        plotdata.plot(kind='bar', fontsize=fontSize, stacked=True)
        plt.xticks(fontsize=fontSize, rotation=6)
        plt.yticks(fontsize=fontSize)
        plt.xlabel("co design parameter", fontsize=fontSize)
        plt.ylabel("co design rate", fontsize=fontSize)
        plt.title("co desgin rate of different parameters",  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/co_design_rate")
        if not os.path.exists(output_dir):
            os.makedirs(output_dir)

        plt.savefig(os.path.join(output_dir,experiment_name +"_"+"co_design_rate_"+'_'.join(y_column_name_list)+".png"))
        plt.close('all')


        plt.figure()
        plotdata = pd.DataFrame(result["efficacy_rate"], index=y_column_name_list)
        fontSize = 10
        plotdata.plot(kind='bar', fontsize=fontSize, stacked=True)
        plt.xticks(fontsize=fontSize, rotation=6)
        plt.yticks(fontsize=fontSize)
        plt.xlabel("co design parameter", fontsize=fontSize)
        plt.ylabel("co design efficacy rate", fontsize=fontSize)
        plt.title("co design efficacy rate of different parameters", 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/co_design_rate")
        if not os.path.exists(output_dir):
            os.makedirs(output_dir)

        plt.savefig(os.path.join(output_dir,experiment_name+"_"+"co_design_efficacy_rate_"+'_'.join(y_column_name_list)+".png"))
        plt.close('all')
"""


def plot_codesign_progression_per_workloads(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"]

    # 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, res_column_name_number)
        experiment_names.append(experiment_name)

    axis_font = {'size': '20'}
    x_column_name = "iteration cnt"
    y_column_name_list = ["high level optimization name", "exact optimization name", "architectural principle", "comm_comp"]


    experiment_column_value = {}
    for file_full_addr in file_full_addr_list:
        experiment_name = get_experiments_name(file_full_addr, res_column_name_number)
        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]
            experiment_column_value[experiment_name] = []
            all_values = get_all_col_values_of_a_folders(input_dir_names, all_res_column_name_number, y_column_name)
            all_values_encoding = {}
            for idx, val in enumerate(all_values):
                all_values_encoding[val] = idx

            with open(file_full_addr, newline='') as csvfile:
                resultReader = csv.reader(csvfile, delimiter=',', quotechar='|')
                rows = list(resultReader)
                for i, row in enumerate(rows):
                    #if row[trueNum] != "True":
                    #    continue
                    if i >= 1:
                        if row[y_column_number] not in all_values:
                            continue

                        col_value = row[y_column_number]
                        col_values = col_value.split(";")
                        for idx, col_val in enumerate(col_values):
                            last_row =  rows[i-1]
                            delta_x_column = (float(row[x_column_number]) - float(last_row[x_column_number]))/len(col_values)
                            value_to_add = (float(last_row[x_column_number])+ idx*delta_x_column, col_val)
                            experiment_column_value[experiment_name].append(value_to_add)



            # prepare for plotting and plot
            axis_font = {'size': '20'}
            fontSize = 20

            fig = plt.figure(figsize=(12, 8))
            plt.rc('font', **axis_font)
            ax = fig.add_subplot(111)
            x_values = [el[0] for el in experiment_column_value[experiment_name]]
            #y_values = [all_values_encoding[el[1]] for el in experiment_column_value[experiment_name]]
            y_values = [el[1] for el in experiment_column_value[experiment_name]]

            #ax.set_title("experiment vs system implicaction")
            ax.tick_params(axis='both', which='major', labelsize=fontSize, rotation=60)
            ax.set_xlabel(x_column_name, fontsize=20)
            ax.set_ylabel(y_column_name, fontsize=20)
            ax.plot(x_values, y_values, label=y_column_name, linewidth=2)
            ax.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/progression")
            if not os.path.exists(output_dir):
                os.makedirs(output_dir)
            plt.tight_layout()
            fig.savefig(os.path.join(output_dir,experiment_name+"_progression_"+'_'.join(y_column_name_list)+".png"))
            # plt.show()
            plt.close('all')

            fig = plt.figure(figsize=(12, 8))
            plt.rc('font', **axis_font)
            ax = fig.add_subplot(111)
            x_values = [el[0] for el in experiment_column_value[experiment_name]]
            # y_values = [all_values_encoding[el[1]] for el in experiment_column_value[experiment_name]]
            y_values = [el[1] for el in experiment_column_value[experiment_name]]

            # ax.set_title("experiment vs system implicaction")
            ax.tick_params(axis='both', which='major', labelsize=fontSize, rotation=60)
            ax.set_xlabel(x_column_name, fontsize=20)
            ax.set_ylabel(y_column_name, fontsize=20)
            ax.plot(x_values, y_values, label=y_column_name, linewidth=2)
            ax.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/progression")
            if not os.path.exists(output_dir):
                os.makedirs(output_dir)
            plt.tight_layout()
            fig.savefig(os.path.join(output_dir, experiment_name + "_progression_" + y_column_name + ".png"))
            # plt.show()
            plt.close('all')


def plot_3d(input_dir_names, res_column_name_number):
    # 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'}
    fontSize = 10
    column_value = {}
    # initialize the dictionary
    column_name_list = ["budget_scaling_power", "budget_scaling_area","budget_scaling_latency"]

    under_study_vars =["iteration cnt",
                       "local_bus_avg_theoretical_bandwidth", "local_bus_max_actual_bandwidth",
                       "local_bus_avg_actual_bandwidth",
                       "system_bus_avg_theoretical_bandwidth", "system_bus_max_actual_bandwidth",
                       "system_bus_avg_actual_bandwidth", "global_total_traffic", "local_total_traffic",
                       "global_memory_total_area", "local_memory_total_area", "ips_total_area",
                       "gpps_total_area","ip_cnt", "max_accel_parallelism", "avg_accel_parallelism",
                       "gpp_cnt", "max_gpp_parallelism", "avg_gpp_parallelism"]




    # 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:
                    for column_name in column_name_list + under_study_vars:
                        if column_name not in column_value.keys() :
                            column_value[column_name] = []
                        column_number = res_column_name_number[column_name]
                        col_value = row[column_number]
                        col_values = col_value.split(";")
                        if "=" in col_values[0]:
                            column_value[column_name].append(float((col_values[0]).split("=")[1]))
                        else:
                            column_value[column_name].append(float(col_values[0]))


    for idx,under_study_var in enumerate(under_study_vars):
        fig_budget_blkcnt = plt.figure(figsize=(12, 12))
        plt.rc('font', **axis_font)
        ax_blkcnt = fig_budget_blkcnt.add_subplot(projection='3d')
        img = ax_blkcnt.scatter3D(column_value["budget_scaling_power"], column_value["budget_scaling_area"], column_value["budget_scaling_latency"],
                                  c=column_value[under_study_var], cmap="bwr", s=80, label="System Block Count")
        for idx,_ in enumerate(column_value[under_study_var]):
            coordinate = column_value[under_study_var][idx]
            coord_in_scientific_notatio = "{:.2e}".format(coordinate)

            ax_blkcnt.text(column_value["budget_scaling_power"][idx], column_value["budget_scaling_area"][idx], column_value["budget_scaling_latency"][idx], '%s' % coord_in_scientific_notatio, size=fontSize)

        ax_blkcnt.set_xlabel("Power Budget", fontsize=fontSize)
        ax_blkcnt.set_ylabel("Area Budget", fontsize=fontSize)
        ax_blkcnt.set_zlabel("Latency Budget", fontsize=fontSize)
        ax_blkcnt.legend()
        cbar = fig_budget_blkcnt.colorbar(img, aspect=40)
        cbar.set_label("System Block Count", rotation=270)
        #plt.title("{Power Budget, Area Budget, Latency Budget} VS System Block Count: " + subDirName)
        plt.tight_layout()

        output_base_dir = '/'.join(input_dir_names[0].split("/")[:-2])
        output_dir = os.path.join(output_base_dir, "3D/case_studies")
        if not os.path.exists(output_dir):
            os.makedirs(output_dir)
        plt.savefig(os.path.join(output_dir, under_study_var+ ".png"))
        # plt.show()
        plt.close('all')
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



