diff --git a/pyproject.toml b/pyproject.toml index 085f0a1bbf8..0e90eaf4858 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -209,8 +209,6 @@ ignore = [ "PLW1641", # eq-without-hash "PLR0904", # too-many-public-methods "PLR1702", # too-many-nested-blocks - "UP032", # f-string - "UP031", # printf-string-formatting ] # Allow EN DASH (U+2013) diff --git a/src/everest/bin/config_branch_script.py b/src/everest/bin/config_branch_script.py index f48fe0f1474..b53453eb859 100644 --- a/src/everest/bin/config_branch_script.py +++ b/src/everest/bin/config_branch_script.py @@ -78,7 +78,7 @@ def _updated_initial_guess(conf_controls, opt_controls): if opt_control_val is None: print( "No generated optimization control value found for" - " control {} index {}".format(variable[CK.NAME], var_index) + f" control {variable[CK.NAME]} index {var_index}" ) return None else: diff --git a/src/everest/bin/main.py b/src/everest/bin/main.py index 0b2e355c897..d71ab7c2812 100644 --- a/src/everest/bin/main.py +++ b/src/everest/bin/main.py @@ -54,9 +54,9 @@ def _build_args_parser(): usage=( "everest []\n\n" "The most commonly used everest commands are:\n" - "{commands}\n\n" + f"{EverestMain.methods_help()}\n\n" "Run everest --help for more information on a command" - ).format(commands=EverestMain.methods_help()), + ), ) arg_parser.add_argument("command", help="Subcommand to run") arg_parser.add_argument( diff --git a/src/everest/config_file_loader.py b/src/everest/config_file_loader.py index 023780806d9..094aa8ee5d6 100644 --- a/src/everest/config_file_loader.py +++ b/src/everest/config_file_loader.py @@ -60,8 +60,8 @@ def _get_definitions(configuration, configpath): for key, val in ERT_CONFIG_TEMPLATES.items(): if key in defs: logging.warning( - "Internal key {k} specified by user as {u}. " - "Overriding as {v}".format(k=key, u=defs[key], v=val) + f"Internal key {key} specified by user as {defs[key]}. " + f"Overriding as {val}" ) defs[key] = f"<{val}>" # ert uses as format else: diff --git a/src/everest/export.py b/src/everest/export.py index 3044f599179..69ae317368c 100644 --- a/src/everest/export.py +++ b/src/everest/export.py @@ -134,9 +134,7 @@ def export_metadata(config: ExportConfig | None, optimization_output_dir: str): ) else: print( - "Batch {} has no available optimization data".format( - md_row[MetaDataColumnNames.BATCH] - ) + f"Batch {md_row[MetaDataColumnNames.BATCH]} has no available optimization data" ) metadata.append(md_row) @@ -190,9 +188,8 @@ def check_for_errors( available_batches_ = available_batches(optimization_output_path) for batch in set(config.batches).difference(available_batches_): export_errors.append( - "Batch {} not found in optimization " + f"Batch {batch} not found in optimization " "results. Skipping for current export." - "".format(batch) ) config.batches = list(set(config.batches).intersection(available_batches_)) diff --git a/src/everest/simulator/everest_to_ert.py b/src/everest/simulator/everest_to_ert.py index dca1c81b328..53d9fc8d07e 100644 --- a/src/everest/simulator/everest_to_ert.py +++ b/src/everest/simulator/everest_to_ert.py @@ -332,7 +332,7 @@ def _is_dir_all_geo(source, ever_config: EverestConfig): if not os.path.exists(geo_source): msg = ( "Expected source to exist for data installation, " - "did not find: {}".format(geo_source) + f"did not find: {geo_source}" ) raise ValueError(msg) diff --git a/src/everest/util/__init__.py b/src/everest/util/__init__.py index a84dd7b7d19..f6366d1754d 100644 --- a/src/everest/util/__init__.py +++ b/src/everest/util/__init__.py @@ -31,9 +31,7 @@ def get_azure_logging_handler(): def version_info(): - return ("everest:'{}'\nropt:'{}'\nert:'{}'").format( - ert_version, ropt_version, ert_version - ) + return f"everest:'{ert_version}'\nropt:'{ropt_version}'\nert:'{ert_version}'" def date2str(date): diff --git a/test-data/everest/math_func/jobs/adv_distance3.py b/test-data/everest/math_func/jobs/adv_distance3.py index ee1f5ea4e80..9946278ee51 100755 --- a/test-data/everest/math_func/jobs/adv_distance3.py +++ b/test-data/everest/math_func/jobs/adv_distance3.py @@ -39,7 +39,7 @@ def main(argv): if options.out: with open(options.out, "w", encoding="utf-8") as f: - f.write("%g \n" % value) + f.write(f"{value:g} \n") else: print(value) diff --git a/test-data/everest/math_func/jobs/adv_dump_controls.py b/test-data/everest/math_func/jobs/adv_dump_controls.py index 457c48be1fb..f170561412e 100755 --- a/test-data/everest/math_func/jobs/adv_dump_controls.py +++ b/test-data/everest/math_func/jobs/adv_dump_controls.py @@ -18,10 +18,10 @@ def main(argv): for name, indices in controls.items(): for idx, val in indices.items(): out_file = "{}{}{}".format( - opts.out_prefix, "{}-{}".format(name, idx), opts.out_suffix + opts.out_prefix, f"{name}-{idx}", opts.out_suffix ) with open(out_file, "w", encoding="utf-8") as f: - f.write("%g \n" % val) + f.write(f"{val:g} \n") if __name__ == "__main__": diff --git a/test-data/everest/math_func/jobs/discrete.py b/test-data/everest/math_func/jobs/discrete.py index 3853760317f..a89301971d3 100755 --- a/test-data/everest/math_func/jobs/discrete.py +++ b/test-data/everest/math_func/jobs/discrete.py @@ -29,7 +29,7 @@ def main(argv): if options.out: with open(options.out, "w", encoding="utf-8") as f: - f.write("%g \n" % value) + f.write(f"{value:g} \n") else: print(value) diff --git a/test-data/everest/math_func/jobs/distance3.py b/test-data/everest/math_func/jobs/distance3.py index a7a2be714fe..ef720d04bd4 100755 --- a/test-data/everest/math_func/jobs/distance3.py +++ b/test-data/everest/math_func/jobs/distance3.py @@ -49,7 +49,7 @@ def main(argv): if options.out: with open(options.out, "w", encoding="utf-8") as f: - f.write("%g \n" % value) + f.write(f"{value:g} \n") else: print(value) diff --git a/test-data/everest/math_func/jobs/dump_controls.py b/test-data/everest/math_func/jobs/dump_controls.py index de7c431f674..7f54aca2184 100755 --- a/test-data/everest/math_func/jobs/dump_controls.py +++ b/test-data/everest/math_func/jobs/dump_controls.py @@ -16,9 +16,9 @@ def main(argv): controls = json.load(f) for k, v in controls.items(): - out_file = "{}{}{}".format(opts.out_prefix, k, opts.out_suffix) + out_file = f"{opts.out_prefix}{k}{opts.out_suffix}" with open(out_file, "w", encoding="utf-8") as f: - f.write("%g \n" % v) + f.write(f"{v:g} \n") if __name__ == "__main__": diff --git a/test-data/everest/math_func/jobs/fail_simulation.py b/test-data/everest/math_func/jobs/fail_simulation.py index 6e2a861ca8d..c7412c65bab 100755 --- a/test-data/everest/math_func/jobs/fail_simulation.py +++ b/test-data/everest/math_func/jobs/fail_simulation.py @@ -20,7 +20,7 @@ def main(argv): options, _ = arg_parser.parse_known_args(args=argv) if options.fail in os.getcwd(): - raise Exception("Failing %s by request!" % options.fail) + raise Exception(f"Failing {options.fail} by request!") time.sleep(1) diff --git a/tests/everest/entry_points/test_everexport.py b/tests/everest/entry_points/test_everexport.py index 21b64dde064..31be878aab4 100644 --- a/tests/everest/entry_points/test_everexport.py +++ b/tests/everest/entry_points/test_everexport.py @@ -168,12 +168,7 @@ def test_everexport_entry_no_usr_def_ecl_keys(mocked_func, cached_example): # Add export section to config file and set run_export flag to false with open(config_file, "a", encoding="utf-8") as f: - f.write( - "{export}:\n {keywords}:".format( - export=CK.EXPORT, - keywords=CK.KEYWORDS, - ) - ) + f.write(f"{CK.EXPORT}:\n {CK.KEYWORDS}:") everexport_entry([config_file]) @@ -209,11 +204,7 @@ def test_everexport_entry_internalized_usr_def_ecl_keys(mocked_func, cached_exam # Add export section to config file and set run_export flag to false with open(config_file, "a", encoding="utf-8") as f: - f.write( - "{export}:\n {keywords}: {keys}".format( - export=CK.EXPORT, keywords=CK.KEYWORDS, keys=user_def_keys - ) - ) + f.write(f"{CK.EXPORT}:\n {CK.KEYWORDS}: {user_def_keys}") everexport_entry([config_file]) @@ -250,11 +241,7 @@ def test_everexport_entry_non_int_usr_def_ecl_keys(mocked_func, caplog, cached_e # Add export section to config file and set run_export flag to false with open(config_file, "a", encoding="utf-8") as f: - f.write( - "{export}:\n {keywords}: {keys}".format( - export=CK.EXPORT, keywords=CK.KEYWORDS, keys=user_def_keys - ) - ) + f.write(f"{CK.EXPORT}:\n {CK.KEYWORDS}: {user_def_keys}") with caplog.at_level(logging.DEBUG): everexport_entry([config_file]) @@ -297,11 +284,7 @@ def test_everexport_entry_not_available_batches(mocked_func, caplog, cached_exam # Add export section to config file and set run_export flag to false with open(config_file, "a", encoding="utf-8") as f: - f.write( - "{export}:\n {batch_key}: {batches}".format( - export=CK.EXPORT, batch_key=CK.BATCHES, batches=user_def_batches - ) - ) + f.write(f"{CK.EXPORT}:\n {CK.BATCHES}: {user_def_batches}") with caplog.at_level(logging.DEBUG): everexport_entry([config_file]) diff --git a/tests/everest/test_config_file_loader.py b/tests/everest/test_config_file_loader.py index 01439396f37..0544aaba712 100644 --- a/tests/everest/test_config_file_loader.py +++ b/tests/everest/test_config_file_loader.py @@ -80,7 +80,7 @@ def test_dependent_definitions(copy_mocked_test_data_to_tmp): string.ascii_lowercase[:-1], string.ascii_lowercase[1:], strict=False ) for c, cdef in [*list(conseq_chars), (string.ascii_lowercase[-1], "configpath")]: - raw_config[CK.DEFINITIONS][c] = "r{{{{ {} }}}}".format(cdef) + raw_config[CK.DEFINITIONS][c] = f"r{{{{ {cdef} }}}}" with open(config_file, "w", encoding="utf-8") as f: yaml = YAML(typ="safe", pure=True) diff --git a/tests/everest/test_data/mocked_test_case/jobs/controls_sum.py b/tests/everest/test_data/mocked_test_case/jobs/controls_sum.py index 6c6018ae49f..448fd56e4ad 100755 --- a/tests/everest/test_data/mocked_test_case/jobs/controls_sum.py +++ b/tests/everest/test_data/mocked_test_case/jobs/controls_sum.py @@ -8,7 +8,7 @@ def main(control_group_name): control_group = json.load(f) with open(control_group_name + "_sum", "w", encoding="utf-8") as f_out: - f_out.write("%f" % sum(control_group.values())) + f_out.write(f"{sum(control_group.values()):f}") if __name__ == "__main__": diff --git a/tests/everest/test_data/mocked_test_case/jobs/fpr_diff_mock.py b/tests/everest/test_data/mocked_test_case/jobs/fpr_diff_mock.py index c5ce129a88f..a80523ca977 100755 --- a/tests/everest/test_data/mocked_test_case/jobs/fpr_diff_mock.py +++ b/tests/everest/test_data/mocked_test_case/jobs/fpr_diff_mock.py @@ -34,7 +34,7 @@ def main(argv): diff = compute_fpr_diff(sum_mock) with open(target_file, "w", encoding="utf-8") as out: - out.write("{} \n".format(diff)) + out.write(f"{diff} \n") if __name__ == "__main__": diff --git a/tests/everest/test_data/mocked_test_case/jobs/npv_function_mock.py b/tests/everest/test_data/mocked_test_case/jobs/npv_function_mock.py index a7c3a476d3f..504e05beb1f 100755 --- a/tests/everest/test_data/mocked_test_case/jobs/npv_function_mock.py +++ b/tests/everest/test_data/mocked_test_case/jobs/npv_function_mock.py @@ -36,8 +36,7 @@ def compute_npv(sum): with open("debug.txt", "w", encoding="utf-8") as f: DCF = compute_dcf(fopt[0], fwpt[0], fgpt[0], fwit[0], elapsedtime[0]) f.write( - "%f\t%f\t%f\t%f\t%f\t%f\n" - % (elapsedtime[0], fopt[0], fwpt[0], fgpt[0], fwit[0], DCF) + f"{elapsedtime[0]:f}\t{fopt[0]:f}\t{fwpt[0]:f}\t{fgpt[0]:f}\t{fwit[0]:f}\t{DCF:f}\n" ) NPV = DCF @@ -51,8 +50,7 @@ def compute_npv(sum): ) NPV += DCF f.write( - "%f\t%f\t%f\t%f\t%f\t%f\n" - % (elapsedtime[i], fopt[i], fwpt[i], fgpt[i], fwit[i], DCF) + f"{elapsedtime[i]:f}\t{fopt[i]:f}\t{fwpt[i]:f}\t{fgpt[i]:f}\t{fwit[i]:f}\t{DCF:f}\n" ) return NPV @@ -78,7 +76,7 @@ def compute_dcf(voilp, vwaterp, vgasp, vwateri, elapsedtime): def save_object_value(object_value, target_file): with open(target_file, "w", encoding="utf-8") as f: - f.write("%g \n" % object_value) + f.write(f"{object_value:g} \n") def main(argv): diff --git a/tests/everest/test_data/mocked_test_case/jobs/oil_prod_rate_mock.py b/tests/everest/test_data/mocked_test_case/jobs/oil_prod_rate_mock.py index c216c11672a..122b62343fd 100755 --- a/tests/everest/test_data/mocked_test_case/jobs/oil_prod_rate_mock.py +++ b/tests/everest/test_data/mocked_test_case/jobs/oil_prod_rate_mock.py @@ -22,7 +22,7 @@ def main(argv): for i in range(0, len(times)): val = sum.get("FOPR")[i] - save_return_value(val, "oil_prod_rate_%03d" % i) + save_return_value(val, f"oil_prod_rate_{i:03d}") with open("OIL_PROD_RATE_OK", "w", encoding="utf-8") as f: f.write("Everything went fine here!") diff --git a/tests/everest/test_detached.py b/tests/everest/test_detached.py index 258d98628da..6d317d940c5 100644 --- a/tests/everest/test_detached.py +++ b/tests/everest/test_detached.py @@ -127,13 +127,13 @@ def test_server_status(copy_math_func_test_data_to_tmp): ) status = everserver_status(everserver_status_path) assert status["status"] == ServerStatus.failed - assert status["message"] == "{}\n{}".format(err_msg_1, err_msg_2) + assert status["message"] == f"{err_msg_1}\n{err_msg_2}" update_everserver_status(everserver_status_path, ServerStatus.completed) status = everserver_status(everserver_status_path) assert status["status"] == ServerStatus.completed assert status["message"] is not None - assert status["message"] == "{}\n{}".format(err_msg_1, err_msg_2) + assert status["message"] == f"{err_msg_1}\n{err_msg_2}" @patch("everest.detached.server_is_running", return_value=False) diff --git a/tests/everest/test_egg_simulation.py b/tests/everest/test_egg_simulation.py index 1ab4838a41d..bab67a53712 100644 --- a/tests/everest/test_egg_simulation.py +++ b/tests/everest/test_egg_simulation.py @@ -490,7 +490,7 @@ def _generate_exp_ert_config(config_path, output_dir): ), ( "symlink", - "{config_path}/../input/files".format(config_path=config_path), + f"{config_path}/../input/files", "files", ), ( @@ -710,7 +710,7 @@ def sweetcallbackofmine(self, *args, **kwargs): cgname = config.controls[0].name well_names = [well.name for well in config.wells] for wname in well_names: - assert "{cg}_{w}-1".format(cg=cgname, w=wname) in df + assert f"{cgname}_{wname}-1" in df # Check objective export objective_names = [objf.name for objf in config.objective_functions] diff --git a/tests/everest/test_export.py b/tests/everest/test_export.py index 6649911df3c..4686748df4a 100644 --- a/tests/everest/test_export.py +++ b/tests/everest/test_export.py @@ -311,9 +311,7 @@ def check_error(expected_error, reported_errors): check_error( ( - "Non-internalized ecl keys selected for export '{keys}'." "".format( - keys=non_int_key - ), + f"Non-internalized ecl keys selected for export '{non_int_key}'.", False, ), (errors, export_ecl), @@ -331,8 +329,8 @@ def check_error(expected_error, reported_errors): ) check_error( ( - "Batch {} not found in optimization results. Skipping for" - " current export".format(non_valid_batch), + f"Batch {non_valid_batch} not found in optimization results. Skipping for" + " current export", True, ), (errors, export_ecl), diff --git a/tests/everest/test_math_func.py b/tests/everest/test_math_func.py index 986dafac11e..54446757c2d 100644 --- a/tests/everest/test_math_func.py +++ b/tests/everest/test_math_func.py @@ -142,9 +142,9 @@ def test_math_func_advanced( ok_evals_0 = ok_evals[ok_evals["realization"] == 0] best_0 = ok_evals_0.iloc[-1] - assert best_0["point_{}".format(point_names[0])] == pytest.approx(x0) - assert best_0["point_{}".format(point_names[1])] == pytest.approx(x1) - assert best_0["point_{}".format(point_names[2])] == pytest.approx(x2) + assert best_0[f"point_{point_names[0]}"] == pytest.approx(x0) + assert best_0[f"point_{point_names[1]}"] == pytest.approx(x1) + assert best_0[f"point_{point_names[2]}"] == pytest.approx(x2) assert best_0["distance"] == pytest.approx(-dist_0, abs=0.001) assert best_0["real_avg_obj"] == pytest.approx( run_model.result.total_objective, abs=0.001 @@ -153,9 +153,9 @@ def test_math_func_advanced( ok_evals_1 = ok_evals[ok_evals["realization"] == 2] best_1 = ok_evals_1.iloc[-1] - assert best_1["point_{}".format(point_names[0])] == pytest.approx(x0) - assert best_1["point_{}".format(point_names[1])] == pytest.approx(x1) - assert best_1["point_{}".format(point_names[2])] == pytest.approx(x2) + assert best_1[f"point_{point_names[0]}"] == pytest.approx(x0) + assert best_1[f"point_{point_names[1]}"] == pytest.approx(x1) + assert best_1[f"point_{point_names[2]}"] == pytest.approx(x2) assert best_1["distance"] == pytest.approx(-dist_1, abs=0.001) assert best_1["real_avg_obj"] == pytest.approx( run_model.result.total_objective, abs=0.001 @@ -191,7 +191,7 @@ def test_remove_run_path( simulation_should_fail = "simulation_2" # Add to the config dictionary what simulation needs to fail config.forward_model[config.forward_model.index("toggle_failure")] = ( - "toggle_failure --fail %s" % simulation_should_fail + f"toggle_failure --fail {simulation_should_fail}" ) simulation_dir = config.simulation_dir diff --git a/tests/everest/test_res_initialization.py b/tests/everest/test_res_initialization.py index bc5c0f8dbee..259a0d19894 100644 --- a/tests/everest/test_res_initialization.py +++ b/tests/everest/test_res_initialization.py @@ -253,7 +253,7 @@ def test_summary_default_no_opm(copy_egg_test_data_to_tmp): list(everest.simulator.DEFAULT_DATA_SUMMARY_KEYS) + list(everest.simulator.DEFAULT_FIELD_SUMMARY_KEYS) + [ - "{}:{}".format(k, w) + f"{k}:{w}" for k, w in itertools.product( everest.simulator.DEFAULT_WELL_SUMMARY_KEYS, wells ) diff --git a/tests/everest/test_templating.py b/tests/everest/test_templating.py index 8b5aa81f004..6a551897003 100644 --- a/tests/everest/test_templating.py +++ b/tests/everest/test_templating.py @@ -19,7 +19,7 @@ def test_render_invalid(copy_template_test_data_to_tmp): render = everest.jobs.templating.render - prod_wells = {"PROD%d" % idx: 0.3 * idx for idx in range(4)} + prod_wells = {f"PROD{idx:d}": 0.3 * idx for idx in range(4)} prod_in = "well_drill_prod.json" with open(prod_in, "w", encoding="utf-8") as fout: json.dump(prod_wells, fout) @@ -45,8 +45,8 @@ def test_render_invalid(copy_template_test_data_to_tmp): def test_render(copy_template_test_data_to_tmp): render = everest.jobs.templating.render - wells = {"PROD%d" % idx: 0.2 * idx for idx in range(1, 5)} - wells.update({"INJ%d" % idx: 1 - 0.2 * idx for idx in range(1, 5)}) + wells = {f"PROD{idx:d}": 0.2 * idx for idx in range(1, 5)} + wells.update({f"INJ{idx:d}": 1 - 0.2 * idx for idx in range(1, 5)}) wells_in = "well_drill.json" with open(wells_in, "w", encoding="utf-8") as fout: json.dump(wells, fout) @@ -64,8 +64,8 @@ def test_render(copy_template_test_data_to_tmp): assert line == "----------------------------------\n" else: on_off = "on" if wells[split[0]] >= 0.5 else "off" - expected_string = "{} takes value {}, implying {}\n".format( - split[0], wells[split[0]], on_off + expected_string = ( + f"{split[0]} takes value {wells[split[0]]}, implying {on_off}\n" ) if idx == len(output) - 1: expected_string = expected_string[:-1] @@ -75,12 +75,12 @@ def test_render(copy_template_test_data_to_tmp): def test_render_multiple_input(copy_template_test_data_to_tmp): render = everest.jobs.templating.render - wells_north = {"PROD%d" % idx: 0.2 * idx for idx in range(1, 5)} + wells_north = {f"PROD{idx:d}": 0.2 * idx for idx in range(1, 5)} wells_north_in = "well_drill_north.json" with open(wells_north_in, "w", encoding="utf-8") as fout: json.dump(wells_north, fout) - wells_south = {"PROD%d" % idx: 1 - 0.2 * idx for idx in range(1, 5)} + wells_south = {f"PROD{idx:d}": 1 - 0.2 * idx for idx in range(1, 5)} wells_south_in = "well_drill_south.json" with open(wells_south_in, "w", encoding="utf-8") as fout: json.dump(wells_south, fout) @@ -98,12 +98,12 @@ def test_render_executable(copy_template_test_data_to_tmp): assert os.access(everest.jobs.render, os.X_OK) # Dump input - wells_north = {"PROD%d" % idx: 0.2 * idx for idx in range(1, 5)} + wells_north = {f"PROD{idx:d}": 0.2 * idx for idx in range(1, 5)} wells_north_in = "well_drill_north.json" with open(wells_north_in, "w", encoding="utf-8") as fout: json.dump(wells_north, fout) - wells_south = {"PROD%d" % idx: 1 - 0.2 * idx for idx in range(1, 5)} + wells_south = {f"PROD{idx:d}": 1 - 0.2 * idx for idx in range(1, 5)} wells_south_in = "well_drill_south.json" with open(wells_south_in, "w", encoding="utf-8") as fout: json.dump(wells_south, fout) @@ -238,4 +238,4 @@ def test_user_specified_data_n_template( contents = f.read() assert ( contents == "VALUE1+VALUE2" - ), 'Expected contents: "VALUE1+VALUE2", found: {}'.format(contents) + ), f'Expected contents: "VALUE1+VALUE2", found: {contents}' diff --git a/tests/everest/test_well_tools.py b/tests/everest/test_well_tools.py index 0f5e43ead26..f2cde6415d5 100644 --- a/tests/everest/test_well_tools.py +++ b/tests/everest/test_well_tools.py @@ -188,7 +188,7 @@ def _dump_merge_data(well_data_file, additional_data_files): ] for idx, add_data_file in enumerate(additional_data_files): - prop = "property_{}".format(idx) + prop = f"property_{idx}" add_data = [ {name: "PROD2", prop: idx * 100 + 11}, {name: "INJECT1", prop: idx * 100 + 1}, diff --git a/tests/everest/utils/__init__.py b/tests/everest/utils/__init__.py index b09b1a8e48a..9a4926aef8a 100644 --- a/tests/everest/utils/__init__.py +++ b/tests/everest/utils/__init__.py @@ -112,7 +112,7 @@ def everest_default_jobs(output_dir): return [ ( script_name, - os.path.join(output_dir, ".jobs", "_%s" % script_name), + os.path.join(output_dir, ".jobs", f"_{script_name}"), ) for script_name in script_names ]