From 642db458e204008f0c842640d29a167da5d84d40 Mon Sep 17 00:00:00 2001 From: nmannall Date: Thu, 4 Jul 2024 12:36:24 +0100 Subject: [PATCH] Add overrides to show or hide progress bars --- gprMax/config.py | 12 +++++++++--- gprMax/gprMax.py | 32 ++++++++++++++++++++++++++++++++ reframe_tests/base_tests.py | 6 ++++-- 3 files changed, 45 insertions(+), 5 deletions(-) diff --git a/gprMax/config.py b/gprMax/config.py index 2daacca8..7bbf7406 100644 --- a/gprMax/config.py +++ b/gprMax/config.py @@ -241,13 +241,19 @@ class SimulationConfig: # solver: cpu, cuda, opencl. # precision: data type for electromagnetic field output (single/double). # progressbars: progress bars on stdoout or not - switch off - # progressbars when logging level is greater than - # info (20) + # progressbars when logging level is greater than info (20) + # or when specified by the user. + + if args.show_progress_bars and args.hide_progress_bars: + logger.exception("You cannot both show and hide progress bars.") + raise ValueError self.general = { "solver": "cpu", "precision": "single", - "progressbars": args.log_level <= 20, + "progressbars": ( + args.show_progress_bars or (args.log_level <= 20 and not args.hide_progress_bars) + ), } # Store information about host machine diff --git a/gprMax/gprMax.py b/gprMax/gprMax.py index 545daac4..9b5575cf 100644 --- a/gprMax/gprMax.py +++ b/gprMax/gprMax.py @@ -38,6 +38,8 @@ args_defaults = { "geometry_only": False, "geometry_fixed": False, "write_processed": False, + "show_progress_bars": False, + "hide_progress_bars": False, "log_level": 20, # Level DEBUG = 10; INFO = 20; BASIC = 25 "log_file": False, } @@ -91,6 +93,14 @@ help_msg = { "(bool, opt): Writes another input file after any Python code (#python blocks) and in the" " original input file has been processed." ), + "show_progress_bars": ( + "(bool, opt): Forces progress bars to be displayed - by default, progress bars are" + " displayed when the log level is info (20) or less." + ), + "hide_progress_bars": ( + "(bool, opt): Forces progress bars to be hidden - by default, progress bars are hidden when" + " the log level is greater than info (20)." + ), "log_level": "(int, opt): Level of logging to use.", "log_file": "(bool, opt): Write logging information to file.", } @@ -111,6 +121,8 @@ def run( geometry_only=args_defaults["geometry_only"], geometry_fixed=args_defaults["geometry_fixed"], write_processed=args_defaults["write_processed"], + show_progress_bars=args_defaults["show_progress_bars"], + hide_progress_bars=args_defaults["hide_progress_bars"], log_level=args_defaults["log_level"], log_file=args_defaults["log_file"], ): @@ -159,6 +171,12 @@ def run( write_processed: optional boolean to write another input file after any #python blocks (which are deprecated) in the original input file has been processed. + show_progress_bars: optional boolean to force progress bars to + be displayed - by default, progress bars are displayed when + the log level is info (20) or less. + hide_progress_bars: optional boolean to force progress bars to + be hidden - by default, progress bars are hidden when the + log level is greater than info (20). log_level: optional int for level of logging to use. log_file: optional boolean to write logging information to file. """ @@ -179,6 +197,8 @@ def run( "geometry_only": geometry_only, "geometry_fixed": geometry_fixed, "write_processed": write_processed, + "show_progress_bars": show_progress_bars, + "hide_progress_bars": hide_progress_bars, "log_level": log_level, "log_file": log_file, } @@ -232,6 +252,18 @@ def cli(): default=args_defaults["write_processed"], help=help_msg["write_processed"], ) + parser.add_argument( + "--show-progress-bars", + action="store_true", + default=args_defaults["show_progress_bars"], + help=help_msg["show_progress_bars"], + ) + parser.add_argument( + "--hide-progress-bars", + action="store_true", + default=args_defaults["hide_progress_bars"], + help=help_msg["hide_progress_bars"], + ) parser.add_argument( "--log-level", type=int, default=args_defaults["log_level"], help=help_msg["log_level"] ) diff --git a/reframe_tests/base_tests.py b/reframe_tests/base_tests.py index d5d814b8..9d042c9a 100644 --- a/reframe_tests/base_tests.py +++ b/reframe_tests/base_tests.py @@ -91,7 +91,7 @@ class GprMaxRegressionTest(rfm.RunOnlyRegressionTest): is_antenna_model = variable(bool, value=False) # sourcesdir = required extra_executable_opts = variable(typ.List[str], value=[]) - executable = "time -p python -m gprMax --log-level 25" + executable = "time -p python -m gprMax --log-level 10 --hide-progress-bars" rx_outputs = variable(typ.List[str], value=Rx.defaultoutputs) h5diff_header = f"{'=' * 10} h5diff output {'=' * 10}" @@ -307,11 +307,13 @@ class GprMaxMPIRegressionTest(GprMaxRegressionTest): # TODO: Make this a variable serial_dependency: type[GprMaxRegressionTest] mpi_layout = parameter() + _stdout = "rfm_job-%t.out" + _stderr = "rfm_job-%t.err" @run_after("setup", always_last=True) def configure_test_run(self): self.num_tasks = int(product(self.mpi_layout)) - self.extra_executable_opts = ["-mpi", " ".join(map(str, self.mpi_layout))] + self.extra_executable_opts = ["-mpi", " ".join([str(i) for i in self.mpi_layout])] super().configure_test_run() def _get_variant(self) -> str: