From 4040b2456ca2af4166c502767bc46731f6fb73e4 Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Rouby Date: Thu, 10 Sep 2026 15:09:24 +0200 Subject: [PATCH] Ensemble: Function: Add Poisson law and 1 params dialog. --- src/Model/Ensembles/Function.py | 20 +++++++ src/Model/Ensembles/FunctionList.py | 1 + src/View/Ensembles/Window.py | 62 ++++++++++++++++++-- src/View/Translate.py | 1 + src/View/ui/Ensemble1ParamsDialog.ui | 85 ++++++++++++++++++++++++++++ 5 files changed, 164 insertions(+), 5 deletions(-) create mode 100644 src/View/ui/Ensemble1ParamsDialog.ui diff --git a/src/Model/Ensembles/Function.py b/src/Model/Ensembles/Function.py index 23c58072..a436c5ce 100644 --- a/src/Model/Ensembles/Function.py +++ b/src/Model/Ensembles/Function.py @@ -188,6 +188,26 @@ class Normal(Function): return np.random.normal(*lst) +class Poisson(Function): + _sub_classes = [] + + def __init__(self, id: int = -1, + name: str = "poisson", script: str = "", + status=None): + super(Poisson, self).__init__( + id=id, status=status, + name=name, script=script + ) + + self._labels = ["lam"] + + def random(self, params, nb): + lst = params.copy() + lst.append(nb) + + return np.random.poisson(*lst) + + class Custom(Function): _sub_classes = [] diff --git a/src/Model/Ensembles/FunctionList.py b/src/Model/Ensembles/FunctionList.py index cb614afd..6a88f01f 100644 --- a/src/Model/Ensembles/FunctionList.py +++ b/src/Model/Ensembles/FunctionList.py @@ -33,6 +33,7 @@ class FunctionList(PamhyrModelList): new._lst = [ Uniform(status=data['status']), Normal(status=data['status']), + Poisson(status=data['status']), ] # DB custom functions diff --git a/src/View/Ensembles/Window.py b/src/View/Ensembles/Window.py index 86caef66..f1b03165 100644 --- a/src/View/Ensembles/Window.py +++ b/src/View/Ensembles/Window.py @@ -185,11 +185,21 @@ class EnsemblesWindow(PamhyrWindow): for row in rows: try: ens = self._ensembles.get(row) - dlg = Ensemble2ParamsDialog( - ensemble=ens, - trad=self._trad, - parent=self - ) + len_params = len(ens.function.labels) + + if len_params == 1: + dlg = Ensemble1ParamsDialog( + ensemble=ens, + trad=self._trad, + parent=self + ) + else: + dlg = Ensemble2ParamsDialog( + ensemble=ens, + trad=self._trad, + parent=self + ) + if dlg.exec(): self._ensembles.get(row).params = dlg._values except Exception as e: @@ -197,6 +207,48 @@ class EnsemblesWindow(PamhyrWindow): return +class Ensemble1ParamsDialog(PamhyrDialog): + _pamhyr_ui = "Ensemble1ParamsDialog" + _pamhyr_name = "Parameters" + + def __init__(self, ensemble=None, + trad=None, parent=None): + super(Ensemble1ParamsDialog, self).__init__( + title=trad[self._pamhyr_name], + trad=trad, + options=[], + parent=parent + ) + + self._ensemble = ensemble + self._labels = ensemble.function.labels + + self._init_default_labels() + self._init_default_values() + + def _init_default_labels(self): + self.set_label_text("label_0", self._trad[self._labels[0]]) + + + def _init_default_values(self): + self._values = self._ensemble.params + if len(self._values) > 0: + self.set_double_spin_box("doubleSpinBox_0", self._values[0]) + + @property + def values(self): + return self._values + + def accept(self): + self._values = [ + self.get_double_spin_box("doubleSpinBox_0"), + ] + super().accept() + + def reject(self): + self.close() + + class Ensemble2ParamsDialog(PamhyrDialog): _pamhyr_ui = "Ensemble2ParamsDialog" _pamhyr_name = "Parameters" diff --git a/src/View/Translate.py b/src/View/Translate.py index db86ed3d..2143569c 100644 --- a/src/View/Translate.py +++ b/src/View/Translate.py @@ -45,6 +45,7 @@ class CommonWordTranslate(PamhyrTranslate): self._dict["loc"] = _translate("CommonWord", "Loc") self._dict["scale"] = _translate("CommonWord", "Scale") + self._dict["lam"] = _translate("CommonWord", "Lam") self._dict["reach"] = _translate("CommonWord", "Reach") self._dict["reaches"] = _translate("CommonWord", "Reaches") diff --git a/src/View/ui/Ensemble1ParamsDialog.ui b/src/View/ui/Ensemble1ParamsDialog.ui new file mode 100644 index 00000000..544abe3d --- /dev/null +++ b/src/View/ui/Ensemble1ParamsDialog.ui @@ -0,0 +1,85 @@ + + + Dialog + + + + 0 + 0 + 416 + 81 + + + + Dialog + + + + + + + + @param0 + + + + + + + -100000.000000000000000 + + + 100000.000000000000000 + + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + + buttonBox + accepted() + Dialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + Dialog + reject() + + + 316 + 260 + + + 286 + 274 + + + + +