experiments/compare_conjugate_gradient.py [236:332]:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def save_settings(self, exp_name, save_path):
        with open(
            os.path.join(save_path, exp_name + "_settings.txt"), "w",
        ) as text_file:
            settings_dict = {
                "dataset_name": self.dataset_name,
                "regularizer": self.regularizer,
                "tolerance": self.tolerance,
                "is_kernel": self.is_kernel,
                "n_repetitions": self.n_repetitions,
                "solvers": self.solvers,
                "sketch_size": self.sketch_size,
                "sketch_size_formula": self.sketch_size_formula,
            }
            print(f"Settings: {settings_dict}", file=text_file)

    def save_results(self, exp_name, save_path):
        self.times_df.to_csv(os.path.join(save_path, exp_name + "_times.csv"))
        self.residual_norms_df.to_csv(
            os.path.join(save_path, exp_name + "_residual_norms.csv")
        )

    def save_plots(self, exp_name, save_path):
        self.plot_residuals(
            exp_name, save_path=save_path,
        )

    def plot_residuals(self, exp_name, save_path=None):
        """
        Plots residuals over iterations and time.

        Creates one plot with all sketches.
        """
        # 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)
        run_names.sort()
        # print("\n~~~~ run_names: ")
        # for n in run_names:
        #     print(n)
        # print()

        formatted_run_names = format_run_names_exp(run_names)
        # print("~~~~ formatted_run_names: ")
        # for n in formatted_run_names:
        #     print(n)
        # print("\n")

        # Iteration plot
        fig_iter = plot_runs_over_iterations(
            run_names, formatted_run_names, self.residual_norms_df,
        )

        if save_path:
            file_name = exp_name
            file_name = re.sub("[()]", "", file_name)
            full_path = os.path.join(save_path, f"{file_name}_iterations.pdf")
            fig_iter.write_image(full_path)
        else:
            fig_iter.show()

        # Time plot
        fig_iter = plot_runs_over_time(
            run_names, formatted_run_names, self.times_df, self.residual_norms_df,
        )

        if save_path:
            file_name = exp_name
            file_name = re.sub("[()]", "", file_name)
            full_path = os.path.join(save_path, f"{file_name}_time.pdf")
            fig_iter.write_image(full_path)
        else:
            fig_iter.show()


def load_model(
    solver,
    sketch_size,
    algo_mode,
    step_size,
    mom_beta,
    mom_eta,
    regularizer,
    is_kernel,
    use_heuristic,
    tolerance,
    max_iter,
    random_state,
):
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



experiments/different_sketches.py [240:336]:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    def save_settings(self, exp_name, save_path):
        with open(
            os.path.join(save_path, exp_name + "_settings.txt"), "w",
        ) as text_file:
            settings_dict = {
                "dataset_name": self.dataset_name,
                "regularizer": self.regularizer,
                "tolerance": self.tolerance,
                "is_kernel": self.is_kernel,
                "n_repetitions": self.n_repetitions,
                "solvers": self.solvers,
                "sketch_size": self.sketch_size,
                "sketch_size_formula": self.sketch_size_formula,
            }
            print(f"Settings: {settings_dict}", file=text_file)

    def save_results(self, exp_name, save_path):
        self.times_df.to_csv(os.path.join(save_path, exp_name + "_times.csv"))
        self.residual_norms_df.to_csv(
            os.path.join(save_path, exp_name + "_residual_norms.csv")
        )

    def save_plots(self, exp_name, save_path):
        self.plot_residuals(
            exp_name, save_path=save_path,
        )

    def plot_residuals(self, exp_name, save_path=None):
        """
        Plots residuals over iterations and time.

        Creates one plot with all sketches.
        """
        # 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)
        run_names.sort()
        # print("\n~~~~ run_names: ")
        # for n in run_names:
        #     print(n)
        # print()

        formatted_run_names = format_run_names_exp(run_names)
        # print("~~~~ formatted_run_names: ")
        # for n in formatted_run_names:
        #     print(n)
        # print("\n")

        # Iteration plot
        fig_iter = plot_runs_over_iterations(
            run_names, formatted_run_names, self.residual_norms_df,
        )

        if save_path:
            file_name = exp_name
            file_name = re.sub("[()]", "", file_name)
            full_path = os.path.join(save_path, f"{file_name}_iterations.pdf")
            fig_iter.write_image(full_path)
        else:
            fig_iter.show()

        # Time plot
        fig_iter = plot_runs_over_time(
            run_names, formatted_run_names, self.times_df, self.residual_norms_df,
        )

        if save_path:
            file_name = exp_name
            file_name = re.sub("[()]", "", file_name)
            full_path = os.path.join(save_path, f"{file_name}_time.pdf")
            fig_iter.write_image(full_path)
        else:
            fig_iter.show()


def load_model(
    solver,
    sketch_size,
    algo_mode,
    step_size,
    mom_beta,
    mom_eta,
    regularizer,
    is_kernel,
    use_heuristic,
    tolerance,
    max_iter,
    random_state,
):
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -



