diff --git a/experiments/SIAM/xp_2_bench_time/get_algs_params.py b/experiments/SIAM/xp_2_bench_time/get_algs_params.py
index df0a3f9d9afcb2dd653b851989befe83984e1518..1602fbd741c48c825846f659ab71f83c76e5cce7 100644
--- a/experiments/SIAM/xp_2_bench_time/get_algs_params.py
+++ b/experiments/SIAM/xp_2_bench_time/get_algs_params.py
@@ -1,12 +1,12 @@
 import numpy as np
 
-from src.solver.parameters import SlopeParameters, EnumLipchitzOptions
+from src.solver.parameters import SlopeParameters, EnumLipchitzOptions, DualScalingOptions
 
-from src.screening.singletest import GapSphereSingleTest
-from src.screening.gap_ptest import GAP_Ptest
-from src.screening.kappa_test import Kappa_test
+from src.screening.gap_test_p_q import GapTestPequalQ
+from src.screening.gap_test_all import GapTestAll
 
-nb_algs = 3
+
+nb_algs = 4
 
 def get_nb_algs(setup):
 
@@ -19,36 +19,37 @@ def get_alg_params(setup, vec_gammas, exact):
    list_names  = []
 
    # --- 1. Xp ---
-      # 1a. No screening
-   params1 = SlopeParameters()
 
+      # -- 1a. No screening
+   params1 = SlopeParameters()
+   params1.eval_gap = False
    list_params.append(params1)
    list_names.append("no screening")
 
 
+      # -- 1b. Strategy p_q=q
    params2 = SlopeParameters()
-
-   if exact:
-      params2.screening2 = GapSphereSingleTest()
-      params2.screening_it_div = 2.
-
-   else:
-      params2.screening1 = GapSphereSingleTest()
-
+   params2.screening1 = GapTestPequalQ()
+   params2.eval_gap_it = setup.eval_gap_it
    list_params.append(params2)
-   list_names.append("single test")
+   list_names.append("p_q=q")
 
-      # 1c. Single test screening
-   params3 = SlopeParameters()
 
-   params3.screening2 = GAP_Ptest(vec_gammas)
-   params3.screening_it_div = 2.
+      # -- 1c. Strategy all
+   params3 = SlopeParameters()
+   params3.screening1 = GapTestAll(vec_gammas)
+   params3.eval_gap_it = setup.eval_gap_it
+   list_params.append(params3)
+   list_names.append("test-all")
 
-   if not exact:
-      params3.screening1 = GapSphereSingleTest()
 
-   list_params.append(params3)
-   list_names.append("p-test")
+   # -- 1d. Bao et al.
+   params4 = SlopeParameters()
+   params4.screening1 = GapTestPequalQ()
+   params4.dual_scaling = DualScalingOptions.BAO_ET_AL
+   params4.eval_gap_it = setup.eval_gap_it
+   list_params.append(params4)
+   list_names.append("Bao-et-al")
 
 
    # --- 2. Common parameters ---
diff --git a/experiments/SIAM/xp_2_bench_time/launcher.sh b/experiments/SIAM/xp_2_bench_time/launcher.sh
deleted file mode 100755
index 285d856de24d4217dc364ecd457466733c06bacb..0000000000000000000000000000000000000000
--- a/experiments/SIAM/xp_2_bench_time/launcher.sh
+++ /dev/null
@@ -1,6 +0,0 @@
-python xp_a_get_state.py --id 1a --precision 8
-python xp_b_get_budget.py --id 1a --precision 8
-python xp_c_results_time.py --id 1a --precision 8
-python xp_d_results_it.py --id 1a --precision 8
-
-python xp_e_fig.py --id 1a --precision 8 --noshow --save
\ No newline at end of file
diff --git a/experiments/SIAM/xp_2_bench_time/make_figs.sh b/experiments/SIAM/xp_2_bench_time/make_figs.sh
new file mode 100755
index 0000000000000000000000000000000000000000..8edd96e4b89ca617473eca0051837e22e7fa47d0
--- /dev/null
+++ b/experiments/SIAM/xp_2_bench_time/make_figs.sh
@@ -0,0 +1,4 @@
+python xp_a_get_state.py --id SIAM --precision 8
+python xp_b_get_budget.py --id SIAM --precision 8
+python xp_c_results_time.py --id SIAM --precision 8
+python xp_d_viz_paper.py --id SIAM --precision 8
\ No newline at end of file
diff --git a/experiments/SIAM/xp_2_bench_time/process_data.py b/experiments/SIAM/xp_2_bench_time/process_data.py
index f93d69b7bc361d83797db25340fa9932393ba2e6..e6d13d61b361c02f595e1967ac3e0daf5ad2e49a 100644
--- a/experiments/SIAM/xp_2_bench_time/process_data.py
+++ b/experiments/SIAM/xp_2_bench_time/process_data.py
@@ -35,8 +35,19 @@ def process(folder, bool_it, setup, log=True):
       results_rho[:, :, :, :, i] = np.mean(mat_results <= vec_tau[i], axis=4)
 
 
+   # # Sparsity level
+   # sparsity_level = 100 * np.mean(mat_results_nbnz, axis=3) / setup.n
+
+   # # tim
+   # results_average_it = np.mean(mat_results_it, axis=4)
+   # results_std_it     = np.std(mat_results_it, axis=4)
+
+
    # ---- return ----
    return {
       "vec_tau": vec_tau,
       "results_rho": results_rho,
+      # "sparsity_level": sparsity_level,
+      # "results_average_it": results_average_it,
+      # "results_std_it": results_std_it,
    }
\ No newline at end of file
diff --git a/experiments/SIAM/xp_2_bench_time/xp_a_get_state.py b/experiments/SIAM/xp_2_bench_time/xp_a_get_state.py
index 27149ab957862e06ed466174c50eeb50e690b335..e037bf58cd5c134d51aceb434f9acbff19676f2f 100644
--- a/experiments/SIAM/xp_2_bench_time/xp_a_get_state.py
+++ b/experiments/SIAM/xp_2_bench_time/xp_a_get_state.py
@@ -1,24 +1,18 @@
 # -*- coding: utf-8 -*-
 import argparse, sys
 from pathlib import Path
-
 import numpy as np
 
 from src import __version__
-from src.solver.slope import slope_gp
 
 from experiments.SIAM.setup import Setup
 from get_algs_params import get_alg_params, get_nb_algs
 
 
-# --------------------
-#   Parse arguments
-# --------------------
-
 parser=argparse.ArgumentParser()
-parser.add_argument('--id', help='setup id', type=str)
+parser.add_argument('--id', help='setup id', type=str, default="SIAM")
 parser.add_argument('--erase', help='restart xp', action="store_true")
-parser.add_argument('--precision', help='stop when gap reaches 1e-precision')
+parser.add_argument('--precision', help='stop when gap reaches 1e-precision', default=8, type=float)
 parser.add_argument('--exact', action="store_true")
 args=parser.parse_args()
 
@@ -28,16 +22,11 @@ dims = (setup.nb_dic, setup.nb_sequence, setup.nb_ratio_lbd, setup.n_rep)
 mat_seed = np.random.randint(0, 2**8, size=dims)
 
 folder = f'results/1e-{args.precision}'
-folder += 'exact/' if args.exact else 'gersh/'
-
-   # check if folder exists, create it otherwise
+folder += 'exact' if args.exact else 'gersh'
 Path(folder).mkdir(parents=True, exist_ok=True)
 
-time_file_name = f"{folder}setup{args.id}_a_state.npz"
+time_file_name = f"{folder}/setup{args.id}_a_state.npz"
 
-# --------------------
-#        Xp
-# --------------------
 
 print(f"Starting \"get seed\" with id {args.id}, precision 1e-{args.precision}")
 try:
diff --git a/experiments/SIAM/xp_2_bench_time/xp_b_get_budget.py b/experiments/SIAM/xp_2_bench_time/xp_b_get_budget.py
index a2aa1d49cc1fd4192149af64c43a36673e44b9d4..4207b54007281e5dbb6a91381d5c46a3c4ccb437 100755
--- a/experiments/SIAM/xp_2_bench_time/xp_b_get_budget.py
+++ b/experiments/SIAM/xp_2_bench_time/xp_b_get_budget.py
@@ -1,23 +1,23 @@
 # -*- coding: utf-8 -*-
 import argparse, sys
-from pathlib import Path
 
 import numpy as np
 
 from src import __version__
 from src.solver.slope import slope_gp
-from src.solver.parameters import SlopeParameters, EnumLipchitzOptions
 from src.utils import get_lambda_max, gamma_sequence_generator
 from src.dictionaries import generate_dic
-from src.screening.gap_ptest import GAP_Ptest
+
+from src.solver.parameters import SlopeParameters, EnumLipchitzOptions
+from src.screening.gap_test_all import GapTestAll
 
 from experiments.SIAM.setup import Setup
 
 
 parser=argparse.ArgumentParser()
-parser.add_argument('--id', help='setup id', type=str, default=1)
+parser.add_argument('--id', help='setup id', type=str, default="SIAM")
 parser.add_argument('--erase', help='restart xp', action="store_true")
-parser.add_argument('--precision', help='stop when gap reaches 1e-precision')
+parser.add_argument('--precision', help='stop when gap reaches 1e-precision', default=8)
 parser.add_argument('--exact', action="store_true")
 args=parser.parse_args()
 
@@ -30,8 +30,6 @@ setup = Setup(args.id)
 
 folder = f'results/1e-{args.precision}'
 folder += 'exact/' if args.exact else 'gersh/'
-   # check if folder exists, create it otherwise
-Path(folder).mkdir(parents=True, exist_ok=True)
 
 state_file_name = f"{folder}setup{args.id}_a_state.npz"
 time_file_name  = f"{folder}setup{args.id}_b_times.npz"
@@ -110,8 +108,7 @@ for i_dic in range(setup.nb_dic):
 
             # --- Solve slope problems ---
             params = SlopeParameters()
-            params.screening2 = GAP_Ptest(vec_gammas)
-            params.screening_it_div = 2
+            params.screening1 = GapTestAll(vec_gammas)
 
             params.max_it        = np.inf
             params.gap_stopping  = stopping_gap
@@ -119,13 +116,14 @@ for i_dic in range(setup.nb_dic):
             params.lipchitz_update = update_lip
             params.accelerated = True
             params.verbose = False
+            params.eval_gap_it = setup.eval_gap_it
             # max_eig = .np.linalg.norm(matA, 2)**2
 
             out_slope = slope_gp(vecy, matA, ratio * lbd_max, vec_gammas, params)
 
             mat_times[i_dic, i_seq, i_ratio, rep] = out_slope["time_run"]
             mat_it[i_dic, i_seq, i_ratio, rep]    = out_slope["nb_it"]
-
+            
 
             # --- Saving ---
             np.savez(time_file_name,
diff --git a/experiments/SIAM/xp_2_bench_time/xp_c_results_time.py b/experiments/SIAM/xp_2_bench_time/xp_c_results_time.py
index 5263bc2e14322dec79982f1e16e52d161e1dba9f..8921d7a9c1e224c37718cd36b20e98ed07739189 100644
--- a/experiments/SIAM/xp_2_bench_time/xp_c_results_time.py
+++ b/experiments/SIAM/xp_2_bench_time/xp_c_results_time.py
@@ -1,25 +1,24 @@
 # -*- coding: utf-8 -*-
 import argparse, sys
-from pathlib import Path
 
 import numpy as np
 
 from src import __version__
 from src.solver.slope import slope_gp
 from src.solver.parameters import SlopeParameters, EnumLipchitzOptions
-from src.screening.gap_ptest import GAP_Ptest
 from src.utils import get_lambda_max, gamma_sequence_generator
 from src.dictionaries import generate_dic
 
 from experiments.SIAM.setup import Setup
+from experiments.SIAM.slopepb import SlopePb
 
 from get_algs_params import get_alg_params, get_nb_algs
 
 
 parser=argparse.ArgumentParser()
-parser.add_argument('--id', help='setup id', type=str, default=1)
+parser.add_argument('--id', help='setup id', type=str, default="SIAM")
 parser.add_argument('--erase', help='restart xp', action="store_true")
-parser.add_argument('--precision', help='stop when gap reaches 1e-precision')
+parser.add_argument('--precision', help='stop when gap reaches 1e-precision', default=8)
 parser.add_argument('--exact', action="store_true")
 args=parser.parse_args()
 
@@ -31,8 +30,6 @@ args=parser.parse_args()
 setup = Setup(args.id)
 folder = f'results/1e-{args.precision}'
 folder += 'exact/' if args.exact else 'gersh/'
-   # check if folder exists, create it otherwise
-Path(folder).mkdir(parents=True, exist_ok=True)
 
 state_file_name   = f"{folder}setup{args.id}_a_state.npz"
 time_file_name    = f"{folder}setup{args.id}_b_times.npz"
@@ -44,6 +41,7 @@ mat_seed  = out_state["mat_seed"]
 
 out_times = np.load(time_file_name, allow_pickle=True)
 mat_times = out_times["mat_times"]
+# mat_it    = out_times["mat_it"]
 
 
 mat_results = np.full(
@@ -51,6 +49,7 @@ mat_results = np.full(
    np.nan
 )
 
+# stopping_gap = 10**(-float(args.precision))
 update_lip   = EnumLipchitzOptions.EXACT if args.exact else EnumLipchitzOptions.GERSHGORIN
 
 # --------------------------
@@ -76,7 +75,7 @@ for i_dic in range(setup.nb_dic):
    for i_seq in range(setup.nb_sequence):
       for i_ratio, ratio in enumerate(setup.list_ratio_lbd):
 
-         stopping_time = np.mean(mat_times[i_dic, i_seq, i_ratio, :])
+         stopping_time = np.median(mat_times[i_dic, i_seq, i_ratio, :])
          if not np.any(np.isnan(mat_results[:, i_dic, i_seq, i_ratio, :])):
             t += setup.n_rep
             continue
@@ -84,6 +83,9 @@ for i_dic in range(setup.nb_dic):
          for rep in range(setup.n_rep):
             print(f"xp time {t+1} / {nb_xp}")
 
+            # print(i_dic, i_seq, i_ratio, rep)
+            # i_dic, i_seq, i_ratio, rep = 1, 0, 2, 17
+
 
             # --- set seed ---
             np.random.seed(mat_seed[i_dic, i_seq, i_ratio, rep])
@@ -108,20 +110,29 @@ for i_dic in range(setup.nb_dic):
             )
 
             lbd_max = get_lambda_max(vecy, matA, vec_gammas)
+            slopePb = SlopePb(matA, vecy, vec_gammas, ratio, lbdmax=lbd_max)
 
             # --- Solve slope problems ---
             list_params, _ = get_alg_params(setup, vec_gammas, args.exact)
 
 
             for i_alg, params in enumerate(list_params):
+
                if not np.isnan(mat_results[i_alg, i_dic, i_seq, i_ratio, rep]):
                   continue
 
                params.lipchitz_update = update_lip
                params.time_stopping   = stopping_time
+
                out_slope = slope_gp(vecy, matA, ratio * lbd_max, vec_gammas, params)
 
-               mat_results[i_alg, i_dic, i_seq, i_ratio, rep] = out_slope["gap"]
+               best_gap = np.min(out_slope["gap"])
+
+               vecx_hat = out_slope["sol"]
+               vecu_hat = slopePb.make_dual_scaling(vecy - matA @ vecx_hat)
+               gap      = slopePb.eval_gap(vecx_hat, vecu_hat)
+
+               mat_results[i_alg, i_dic, i_seq, i_ratio, rep] = min(gap, best_gap)
 
 
             # --- Saving ---
diff --git a/experiments/SIAM/xp_2_bench_time/xp_d_results_it.py b/experiments/SIAM/xp_2_bench_time/xp_d_results_it.py
deleted file mode 100644
index d44328c25321dce179f5e5fd24795e625a36fa8d..0000000000000000000000000000000000000000
--- a/experiments/SIAM/xp_2_bench_time/xp_d_results_it.py
+++ /dev/null
@@ -1,135 +0,0 @@
-# -*- coding: utf-8 -*-
-import argparse, sys
-from pathlib import Path
-
-import numpy as np
-
-from src import __version__
-from src.solver.slope import slope_gp
-from src.solver.parameters import SlopeParameters, EnumLipchitzOptions
-from src.screening.gap_ptest import GAP_Ptest
-from src.utils import get_lambda_max, gamma_sequence_generator
-from src.dictionaries import generate_dic
-
-from experiments.SIAM.setup import Setup
-
-from get_algs_params import get_alg_params, get_nb_algs
-
-
-parser=argparse.ArgumentParser()
-parser.add_argument('--id', help='setup id', type=str, default=1)
-parser.add_argument('--erase', help='restart xp', action="store_true")
-parser.add_argument('--precision', help='stop when gap reaches 1e-precision')
-parser.add_argument('--exact', action="store_true")
-args=parser.parse_args()
-
-
-# -------------------------
-#       Load  Setup
-# -------------------------
-
-setup = Setup(args.id)
-folder = f'results/1e-{args.precision}'
-folder += 'exact/' if args.exact else 'gersh/'
-   # check if folder exists, create it otherwise
-Path(folder).mkdir(parents=True, exist_ok=True)
-
-state_file_name      = f"{folder}setup{args.id}_a_state.npz"
-time_file_name       = f"{folder}setup{args.id}_b_times.npz"
-results_it_file_name = f"{folder}setup{args.id}_d_results_it.npz"
-
-
-out_state = np.load(state_file_name, allow_pickle=True)
-mat_seed  = out_state["mat_seed"]
-
-out_times = np.load(time_file_name, allow_pickle=True)
-mat_it    = out_times["mat_it"]
-
-
-mat_results_it = np.full(
-   (get_nb_algs(setup), setup.nb_dic, setup.nb_sequence, setup.nb_ratio_lbd, setup.n_rep),
-   np.nan
-)
-
-update_lip   = EnumLipchitzOptions.EXACT if args.exact else EnumLipchitzOptions.GERSHGORIN
-
-# --------------------------
-#   Load  existing results
-# --------------------------
-
-try:
-   if args.erase:
-      raise FileNotFoundError
-
-   load_results = np.load(results_it_file_name, allow_pickle=True)
-   mat_results_it  = load_results['mat_results_it']
-
-except FileNotFoundError:
-   # Everything goes well
-   pass
-
-
-nb_xp = setup.nb_dic * setup.nb_sequence * setup.nb_ratio_lbd * setup.n_rep
-t = 0
-print(f"Starting \"xp time\" with id {args.id}, precision 1e-{args.precision}")
-for i_dic in range(setup.nb_dic):
-   for i_seq in range(setup.nb_sequence):
-      for i_ratio, ratio in enumerate(setup.list_ratio_lbd):
-
-         stopping_it = np.mean(mat_it[i_dic, i_seq, i_ratio, :])
-         if not np.any(np.isnan(mat_results_it[:, i_dic, i_seq, i_ratio, :])):
-            t += setup.n_rep
-            continue
-
-         for rep in range(setup.n_rep):
-            print(f"xp it {t+1} / {nb_xp}")
-
-            # --- set seed ---
-            np.random.seed(mat_seed[i_dic, i_seq, i_ratio, rep])
-
-
-            # --- Data and parameters ---
-            matA = generate_dic(
-               setup.list_dic[i_dic],
-               setup.m,
-               setup.n,
-               setup.normalize
-            )
-
-            vecy  = np.random.randn(setup.m)
-            vecy /= np.linalg.norm(vecy)
-
-            vec_gammas = gamma_sequence_generator(
-               setup.m, 
-               setup.n,
-               setup.list_sequence[i_seq][0],
-               setup.list_sequence[i_seq][1:]
-            )
-
-            lbd_max = get_lambda_max(vecy, matA, vec_gammas)
-
-
-            # --- Solve slope problems ---
-            list_params, _ = get_alg_params(setup, vec_gammas, args.exact)
-
-
-            for i_alg, params in enumerate(list_params):
-
-               if not np.isnan(mat_results_it[i_alg, i_dic, i_seq, i_ratio, rep]):
-                  continue
-
-               params.lipchitz_update = update_lip
-               params.max_it   = stopping_it
-               out_slope = slope_gp(vecy, matA, ratio * lbd_max, vec_gammas, params)
-
-               mat_results_it[i_alg, i_dic, i_seq, i_ratio, rep] = out_slope["gap"]
-
-
-            # --- Saving ---
-            np.savez(results_it_file_name,
-               mat_results_it     = mat_results_it,
-               version       = __version__,
-               allow_pickle  = True
-            )
-
-            t += 1
diff --git a/experiments/SIAM/xp_2_bench_time/xp_e_fig.py b/experiments/SIAM/xp_2_bench_time/xp_d_viz_paper.py
similarity index 78%
rename from experiments/SIAM/xp_2_bench_time/xp_e_fig.py
rename to experiments/SIAM/xp_2_bench_time/xp_d_viz_paper.py
index aa289368080d973d0209c962287ad4dcd3d88ea3..53b3a1e1680293003d3a1e0f9a589279c972a94b 100644
--- a/experiments/SIAM/xp_2_bench_time/xp_e_fig.py
+++ b/experiments/SIAM/xp_2_bench_time/xp_d_viz_paper.py
@@ -4,10 +4,13 @@ from pathlib import Path
 
 import numpy as np
 
+
 parser=argparse.ArgumentParser()
-parser.add_argument('--id', help='setup id', type=str)
+parser.add_argument('--id', help='setup id', type=str, default="SIAM")
 parser.add_argument('--precision', help='stop when gap reaches 1e-precision', default=8)
 parser.add_argument('--exact', action="store_true")
+# parser.add_argument('--it', help='show it results', action="store_true")
+parser.add_argument('--ilbd', help='save figure', type=int, default=1)
 parser.add_argument('--noshow', help='show plots', action="store_true")
 parser.add_argument('--save', help='save figure', action="store_true")
 args=parser.parse_args()
@@ -18,12 +21,12 @@ if args.noshow:
 else:
    matplotlib.use("TkAgg")
 import matplotlib.pyplot as plt
+import matplotlib.font_manager as font_manager
 
-from experiments.SIAM.setup import Setup
 from process_data import process
 from get_algs_params import get_alg_params, get_nb_algs
 from src.utils import gamma_sequence_generator
-import matplotlib.font_manager as font_manager
+from experiments.SIAM.setup import Setup
 
 
 fs = 20
@@ -58,15 +61,16 @@ font_ttt = font_manager.FontProperties(
 
 folder = f'results/1e-{args.precision}'
 folder += 'exact/' if args.exact else 'gersh/'
-   # check if folder exists, create it otherwise
-Path(folder).mkdir(parents=True, exist_ok=True)
 
 setup = Setup(args.id)
 _, list_names = get_alg_params(setup, np.zeros(5), args.exact)
 dic_process = process(folder, False, setup)
 
-vec_tau     = dic_process["vec_tau"]
-results_rho = dic_process["results_rho"]
+vec_tau            = dic_process["vec_tau"]
+results_rho        = dic_process["results_rho"]
+# sparsity_level     = dic_process["sparsity_level"]
+# results_average_it = dic_process["results_average_it"]
+# results_std_it     = dic_process["results_std_it"]
 
 
 # -------------------------
@@ -79,22 +83,22 @@ f, ax = plt.subplots(setup.nb_sequence, setup.nb_dic, figsize=(16, 13.),
 )
 # f.suptitle(f"{setup.list_dic[i_dic]} dictionary", fontsize=14)
 
-list_algnames = ["PG-no", "PGp=q", "PG-all"]
+list_algnames = ["PG-no", "PG-p=q", "PG-all", 'PG-Bao']
 list_dicname  = ["Gaussian", "Uniform", "Toeplitz"]
-i_lbd = 1
+# args.ilbd = 1
 
 print("ploting time fig for")
 print(f" - {list_dicname} dictionaries")
-print(f" - lbd / lbd_max = {setup.list_ratio_lbd[i_lbd]}")
+print(f" - lbd / lbd_max = {setup.list_ratio_lbd[args.ilbd]}")
 
 for i_dic in range(setup.nb_dic):   
    for i_seq in range(setup.nb_sequence):
 
-      list_colors = ["tab:blue", "tab:orange", "tab:green"]
-      for i_alg in range(len(list_names)):
+      list_colors = ["tab:blue", "tab:orange", "tab:green", "tab:purple"]
+      for i_alg in [0, 1, 3, 2]:#range(len(list_names)):
          ax[i_seq, i_dic].plot(
             vec_tau, 
-            100. * results_rho[i_alg, i_dic, i_seq, i_lbd],
+            100. * results_rho[i_alg, i_dic, i_seq, args.ilbd],
             linewidth=3.,
             label=list_algnames[i_alg],
             color=list_colors[i_alg]
@@ -142,7 +146,8 @@ for i_dic in range(setup.nb_dic):
 
 
 if args.save:
-   fig_name = f"figs/setup{args.id}_time"
+   Path("figs").mkdir(parents=True, exist_ok=True)
+   fig_name = f"figs/setup{args.id}_precision{args.precision}_exact{args.exact}_time"
 
    plt.savefig(fig_name + ".eps", bbox_inches='tight')