From 65058adef1e6a160206867a928d8d486019a100f Mon Sep 17 00:00:00 2001 From: dominiquef Date: Tue, 21 Oct 2025 11:14:21 -0700 Subject: [PATCH 1/4] Make workdir optional --- simpeg_drivers-assets/uijson/plate_sweep.ui.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/simpeg_drivers-assets/uijson/plate_sweep.ui.json b/simpeg_drivers-assets/uijson/plate_sweep.ui.json index 822e2988..15e69cad 100644 --- a/simpeg_drivers-assets/uijson/plate_sweep.ui.json +++ b/simpeg_drivers-assets/uijson/plate_sweep.ui.json @@ -32,7 +32,8 @@ "directory" ], "directoryOnly": true, - "enabled": true, + "enabled": false, + "optional": true, "value": "" }, "background_start": { From 71a9eabe271a3f28018b1af6f38a099b9f838af1 Mon Sep 17 00:00:00 2001 From: dominiquef Date: Tue, 21 Oct 2025 12:54:50 -0700 Subject: [PATCH 2/4] Deal with workdir as a string --- simpeg_drivers-assets/uijson/plate_sweep.ui.json | 11 +++-------- simpeg_drivers/plate_simulation/sweep/driver.py | 12 +++++++----- simpeg_drivers/plate_simulation/sweep/options.py | 11 +++-------- 3 files changed, 13 insertions(+), 21 deletions(-) diff --git a/simpeg_drivers-assets/uijson/plate_sweep.ui.json b/simpeg_drivers-assets/uijson/plate_sweep.ui.json index 15e69cad..8a1853b7 100644 --- a/simpeg_drivers-assets/uijson/plate_sweep.ui.json +++ b/simpeg_drivers-assets/uijson/plate_sweep.ui.json @@ -24,17 +24,12 @@ "workdir": { "main": true, "group": "Base", - "label": "Working directory", - "fileDescription": [ - "Directory" - ], - "fileType": [ - "directory" - ], + "label": "Output directory", "directoryOnly": true, "enabled": false, "optional": true, - "value": "" + "tootip": "Directory to store simulation results, relative to the working geoh5.", + "value": "./simulations" }, "background_start": { "main": true, diff --git a/simpeg_drivers/plate_simulation/sweep/driver.py b/simpeg_drivers/plate_simulation/sweep/driver.py index 2ebfab71..4cfb64fa 100644 --- a/simpeg_drivers/plate_simulation/sweep/driver.py +++ b/simpeg_drivers/plate_simulation/sweep/driver.py @@ -146,7 +146,7 @@ def run(self): @staticmethod def run_trial( - data: dict, h5file: Path, workdir: Path | None, worker: tuple[str] | None = None + data: dict, h5file: Path, workdir: str, worker: tuple[str] | None = None ): """ Run a single trial of the plate simulation with name encoding from the parameters. @@ -159,10 +159,12 @@ def run_trial( json_string = dict_to_json_str(data) uid = uuid_from_values(json_string) - if workdir is None: - workdir = h5file.parent + workerdir = h5file.parent / workdir - workerfile = workdir / f"{uid}.geoh5" + if not workerdir.exists(): + workerdir.mkdir(exist_ok=True) + + workerfile = workerdir / f"{uid}.geoh5" if workerfile.exists(): logger.info("Skipping trial %s, since the file already exists.", uid) return @@ -197,7 +199,7 @@ def run_trial( def run_block( trials: list[dict], h5file: Path, - workdir: Path | None, + workdir: str, worker: tuple[str] | None = None, ): """ diff --git a/simpeg_drivers/plate_simulation/sweep/options.py b/simpeg_drivers/plate_simulation/sweep/options.py index 3c9f6a78..9e9ab5a0 100644 --- a/simpeg_drivers/plate_simulation/sweep/options.py +++ b/simpeg_drivers/plate_simulation/sweep/options.py @@ -64,7 +64,7 @@ class SweepOptions(Options): inversion_type: str = "plate sweep" template: SimPEGGroup | UIJsonGroup sweeps: list[ParamSweep] - workdir: Path | None = None + workdir: str = "./simulations" @field_serializer("sweeps") def sweeps_to_params(self, sweeps): @@ -108,13 +108,8 @@ def collect_sweep(param: str) -> dict: options["sweeps"] = [collect_sweep(param) for param in sweep_params] workdir = options["workdir"] - if isinstance(workdir, str): - options["workdir"] = Path(workdir) - if isinstance(workdir, list): - if len(workdir) == 0: - options["workdir"] = None - else: - options["workdir"] = Path(workdir[0]) + if len(workdir) == 0: + options["workdir"] = "./" return options From c50a9754ccd30b4fcbb436feb034c44e04df121a Mon Sep 17 00:00:00 2001 From: dominiquef Date: Wed, 22 Oct 2025 11:10:53 -0700 Subject: [PATCH 3/4] Update UIJson class --- simpeg_drivers/plate_simulation/sweep/uijson.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/simpeg_drivers/plate_simulation/sweep/uijson.py b/simpeg_drivers/plate_simulation/sweep/uijson.py index 8152f13f..a9a3e866 100644 --- a/simpeg_drivers/plate_simulation/sweep/uijson.py +++ b/simpeg_drivers/plate_simulation/sweep/uijson.py @@ -8,9 +8,7 @@ # ' # ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' -from geoh5py import Workspace -from geoh5py.shared.utils import fetch_active_workspace -from geoh5py.ui_json.forms import FileForm, FloatForm, GroupForm, IntegerForm +from geoh5py.ui_json.forms import FloatForm, GroupForm, IntegerForm, StringForm from geoh5py.ui_json.ui_json import BaseUIJson from pydantic import ConfigDict @@ -44,4 +42,4 @@ class PlateSweepUIJson(BaseUIJson): dip_stop: FloatForm dip_count: IntegerForm out_group: GroupForm | None - workdir: FileForm | None + workdir: StringForm | None From fd78d0619b503cc92d0e84f4562c32b944910196 Mon Sep 17 00:00:00 2001 From: dominiquef Date: Wed, 22 Oct 2025 11:41:28 -0700 Subject: [PATCH 4/4] Deal with workdir default. Use temp name for simulation.pkl file --- simpeg_drivers/components/factories/misfit_factory.py | 4 +++- simpeg_drivers/plate_simulation/sweep/options.py | 4 ---- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/simpeg_drivers/components/factories/misfit_factory.py b/simpeg_drivers/components/factories/misfit_factory.py index 33faa0dd..ecadbb1a 100644 --- a/simpeg_drivers/components/factories/misfit_factory.py +++ b/simpeg_drivers/components/factories/misfit_factory.py @@ -59,7 +59,9 @@ def assemble_arguments( # pylint: disable=arguments-differ use_futures = self.client # Pickle the simulation to the temporary file - with open(self.params.workpath / "simulation.pkl", mode="wb") as temp_file: + with open( + self.params.workpath / (self.params.geoh5.h5file.stem + ".pkl"), mode="wb" + ) as temp_file: pickle.dump(self.simulation, temp_file) misfits = [] diff --git a/simpeg_drivers/plate_simulation/sweep/options.py b/simpeg_drivers/plate_simulation/sweep/options.py index 9e9ab5a0..112302ef 100644 --- a/simpeg_drivers/plate_simulation/sweep/options.py +++ b/simpeg_drivers/plate_simulation/sweep/options.py @@ -105,11 +105,7 @@ def collect_sweep(param: str) -> dict: } sweep_params = [k.removesuffix("_start") for k in options if "_start" in k] - options["sweeps"] = [collect_sweep(param) for param in sweep_params] - workdir = options["workdir"] - if len(workdir) == 0: - options["workdir"] = "./" return options