From d4bc9bdf75109f32c7c133080fbeedc8326bdd55 Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Rouby Date: Thu, 10 Sep 2026 16:38:31 +0200 Subject: [PATCH] Ensemble: Set custom seed. --- src/View/MainWindow.py | 5 ++++- src/View/RunSolver/Window.py | 30 +++++++++++++++++++++++++++++- 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/src/View/MainWindow.py b/src/View/MainWindow.py index 2be37a2c..dc4c1a5e 100644 --- a/src/View/MainWindow.py +++ b/src/View/MainWindow.py @@ -1609,10 +1609,13 @@ class ApplicationWindow(QMainWindow, ListedSubWindow, WindowToolKit): parent=self ) if dlg.exec(): - run_number = dlg._number + function = dlg.function + run_number = dlg.number + seed = dlg.seed sol = SolverLogEnsWindow( run_number=run_number, + seed=seed, function=function, study=self._study, config=self.conf, solver=solver, diff --git a/src/View/RunSolver/Window.py b/src/View/RunSolver/Window.py index 5c80f65d..e4ca359f 100644 --- a/src/View/RunSolver/Window.py +++ b/src/View/RunSolver/Window.py @@ -71,6 +71,10 @@ class EnsembleRunNumberDialog(PamhyrDialog): parent=parent ) + self._function = "Random" + self._number = 100 + self._seed = -1 + self._init_default_values() self._init_connection() @@ -91,9 +95,21 @@ class EnsembleRunNumberDialog(PamhyrDialog): def number(self): return self._number + @property + def seed(self): + return self._seed + + @property + def function(self): + return self._function + def accept(self): + self._function = self.get_combobox_text("comboBox") self._number = self.get_spin_box("spinBox") + if self._checkbox.isChecked(): + self._seed = self.get_spin_box("spinBox_seed") + super().accept() def reject(self): @@ -475,14 +491,25 @@ class SolverLogEnsWindow(SolverLogWindow): _pamhyr_name = "Solver Log Ensemble" def __init__(self, run_number=100, + seed=-1, function="Random", study=None, config=None, solver=None, parent=None): self._run_number = run_number self._last_run = 0 + if seed != -1: + np.random.seed(seed) + + self._seed = np.random.get_state()[1][0] + logger.info( + "solver: Set ensemble with " + + f"{run_number} {function} and " + + f"{self._seed} as random seed" + ) + self._samples = {} for ens in study.river._ensembles.lst: - if ens.function is None: + if ens.distribution is None: continue self._samples[ens] = ens.random(self._run_number) @@ -571,6 +598,7 @@ class SolverLogEnsWindow(SolverLogWindow): table["samples"] = results.new_table_data( "samples", np.array(self._run_samples) ) + results.set("seed", self._seed) # Keep random seed results.set("table", table)