experiments/different_sketch_sizes_time_bar_plots.py [445:507]:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def plot_residuals(
        self, solver, sketch_size, sketch_size_formula, exp_name, save_path=None
    ):
        """
        Plots residuals over time.

        Creates one plot per (solver, sketch size) couple,
        for all run types (no mom, constant mom, increasing mom)
        """
        # https://stackoverflow.com/a/6117124/9978618
        rep = {" (median)": "", " (1st quartile)": "", " (3rd quartile)": ""}
        rep = dict((re.escape(k), v) for k, v in rep.items())
        pattern = re.compile("|".join(rep.keys()))

        run_names = {
            # col for col in self.residual_norms_df.columns
            pattern.sub(lambda m: rep[re.escape(m.group(0))], col)
            for col in self.residual_norms_df.columns
        }
        run_names = list(run_names)
        # print("\n~~~~ run_names: ")
        # for n in run_names:
        #     print(n)
        # print()

        filtered_run_names = filter_run_names_exp(
            run_names, solver, sketch_size_formula
        )
        # print("~~~~ filtered_run_names: ")
        # for n in filtered_run_names:
        #     print(n)

        # formatted_run_names = filtered_run_names
        # formatted_run_names = ["|".join(r.split("|")[:-1]).strip() for r in run_names]
        formatted_run_names = format_run_names_exp(
            filtered_run_names, solver, sketch_size_formula
        )
        # print("~~~~ formatted_run_names: ")
        # for n in formatted_run_names:
        #     print(n)
        # print("\n")

        # print(f"residual_norms_df.columns :\n{self.residual_norms_df.columns}")

        title = f"{self.dataset_name} Relative Residual Norms over Iterations"
        fig = plot_runs_over_iterations(
            filtered_run_names, formatted_run_names, self.residual_norms_df,
        )

        if save_path:
            split_title = title.lower().split(" ")
            file_name = exp_name + "_" + ("_").join(split_title[1:])
            sketch_size_formula = sketch_size_formula.replace("^", "_power_").replace(
                "/", "_over_"
            )
            file_name = "_".join((file_name, solver, sketch_size_formula))
            file_name = file_name.replace(" = ", "_equals_")
            file_name = file_name.replace("sqrt(m)", "sqrt_m")
            file_name = re.sub("[()]", "", file_name)
            full_path = os.path.join(save_path, f"{file_name}.pdf")
            fig.write_image(full_path)
        else:
            fig.show()
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



experiments/regularization_on_momentum.py [386:448]:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def plot_residuals(
        self, solver, sketch_size, sketch_size_formula, exp_name, save_path=None
    ):
        """
        Plots residuals over time.

        Creates one plot per (solver, sketch size) couple,
        for all run types (no mom, constant mom, increasing mom)
        """
        # https://stackoverflow.com/a/6117124/9978618
        rep = {" (median)": "", " (1st quartile)": "", " (3rd quartile)": ""}
        rep = dict((re.escape(k), v) for k, v in rep.items())
        pattern = re.compile("|".join(rep.keys()))

        run_names = {
            # col for col in self.residual_norms_df.columns
            pattern.sub(lambda m: rep[re.escape(m.group(0))], col)
            for col in self.residual_norms_df.columns
        }
        run_names = list(run_names)
        # print("\n~~~~ run_names: ")
        # for n in run_names:
        #     print(n)
        # print()

        filtered_run_names = filter_run_names_exp(
            run_names, solver, sketch_size_formula
        )
        # print("~~~~ filtered_run_names: ")
        # for n in filtered_run_names:
        #     print(n)

        # formatted_run_names = filtered_run_names
        # formatted_run_names = ["|".join(r.split("|")[:-1]).strip() for r in run_names]
        formatted_run_names = format_run_names_exp(
            filtered_run_names, solver, sketch_size_formula
        )
        # print("~~~~ formatted_run_names: ")
        # for n in formatted_run_names:
        #     print(n)
        # print("\n")

        # print(f"residual_norms_df.columns :\n{self.residual_norms_df.columns}")

        title = f"{self.dataset_name} Relative Residual Norms over Iterations"
        fig = plot_runs_over_iterations(
            filtered_run_names, formatted_run_names, self.residual_norms_df,
        )

        if save_path:
            split_title = title.lower().split(" ")
            file_name = exp_name + "_" + ("_").join(split_title[1:])
            sketch_size_formula = sketch_size_formula.replace("^", "_power_").replace(
                "/", "_over_"
            )
            file_name = "_".join((file_name, solver, sketch_size_formula))
            file_name = file_name.replace(" = ", "_equals_")
            file_name = file_name.replace("sqrt(m)", "sqrt_m")
            file_name = re.sub("[()]", "", file_name)
            full_path = os.path.join(save_path, f"{file_name}.pdf")
            fig.write_image(full_path)
        else:
            fig.show()
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



