Repository: equinor/ert
Issue category: Feature Request

Issue:
Mark ES-MDA as recommended
The ES-MDA algorithm is the recommended algorithm for multi iteration use. We should mark it as such. This should not affect the logging and usage statistics of methods. 


Hints:

Patch:
diff --git a/src/ert/gui/simulation/experiment_panel.py b/src/ert/gui/simulation/experiment_panel.py
index 7be4a058423..3de30c78a4d 100644
--- a/src/ert/gui/simulation/experiment_panel.py
+++ b/src/ert/gui/simulation/experiment_panel.py
@@ -192,7 +192,7 @@ def addExperimentConfigPanel(
         experiment_type = panel.get_experiment_type()
         self._experiment_widgets[experiment_type] = panel
         self._experiment_type_combo.addDescriptionItem(
-            experiment_type.name(),
+            experiment_type.display_name(),
             experiment_type.description(),
             experiment_type.group(),
         )
@@ -221,9 +221,11 @@ def getActions() -> list[QAction]:
         return []
 
     def get_current_experiment_type(self) -> Any:
-        experiment_type_name = self._experiment_type_combo.currentText()
+        experiment_type_display_name = self._experiment_type_combo.currentText()
         return next(
-            w for w in self._experiment_widgets if w.name() == experiment_type_name
+            w
+            for w in self._experiment_widgets
+            if w.display_name() == experiment_type_display_name
         )
 
     def get_experiment_arguments(self) -> Any:
diff --git a/src/ert/run_models/base_run_model.py b/src/ert/run_models/base_run_model.py
index d8c795e10ac..040c18d978b 100644
--- a/src/ert/run_models/base_run_model.py
+++ b/src/ert/run_models/base_run_model.py
@@ -220,6 +220,10 @@ def log_at_startup(self) -> None:
     @abstractmethod
     def name(cls) -> str: ...
 
+    @classmethod
+    def display_name(cls) -> str:
+        return cls.name()
+
     @classmethod
     @abstractmethod
     def description(cls) -> str: ...
diff --git a/src/ert/run_models/iterated_ensemble_smoother.py b/src/ert/run_models/iterated_ensemble_smoother.py
index e89c7935533..497cc0f1165 100644
--- a/src/ert/run_models/iterated_ensemble_smoother.py
+++ b/src/ert/run_models/iterated_ensemble_smoother.py
@@ -244,4 +244,4 @@ def name(cls) -> str:
 
     @classmethod
     def description(cls) -> str:
-        return "Sample parameters → [evaluate → update] several iterations"
+        return "Sample parameters → [evaluate → update] several iterations.\nDeprecated algorithm. Prefer ES-MDA."
diff --git a/src/ert/run_models/multiple_data_assimilation.py b/src/ert/run_models/multiple_data_assimilation.py
index 9d7a43ad802..7f6fe4a65b4 100644
--- a/src/ert/run_models/multiple_data_assimilation.py
+++ b/src/ert/run_models/multiple_data_assimilation.py
@@ -208,9 +208,13 @@ def parse_weights(weights: str) -> list[float]:
     def name(cls) -> str:
         return "Multiple data assimilation"
 
+    @classmethod
+    def display_name(cls) -> str:
+        return cls.name() + " - Recommended algorithm"
+
     @classmethod
     def description(cls) -> str:
-        return "[Sample|restart] → [evaluate → update] for each weight"
+        return "[Sample|restart] → [evaluate → update] for each weight."
 
     @classmethod
     def group(cls) -> str | None:


Test patch:
diff --git a/tests/ert/ui_tests/gui/conftest.py b/tests/ert/ui_tests/gui/conftest.py
index bfdddf77a97..2100ced7685 100644
--- a/tests/ert/ui_tests/gui/conftest.py
+++ b/tests/ert/ui_tests/gui/conftest.py
@@ -239,7 +239,7 @@ def func(experiment_mode, gui, click_done=True):
         assert isinstance(experiment_panel, ExperimentPanel)
         simulation_mode_combo = experiment_panel.findChild(QComboBox)
         assert isinstance(simulation_mode_combo, QComboBox)
-        simulation_mode_combo.setCurrentText(experiment_mode.name())
+        simulation_mode_combo.setCurrentText(experiment_mode.display_name())
         simulation_settings = experiment_panel._experiment_widgets[
             experiment_panel.get_current_experiment_type()
         ]
@@ -255,7 +255,7 @@ def handle_dialog():
                 lambda: handle_run_path_dialog(gui, qtbot, delete_run_path=False),
             )
 
-        if not experiment_mode.name() in {
+        if experiment_mode.name() not in {
             "Ensemble experiment",
             "Evaluate ensemble",
         }:
diff --git a/tests/ert/ui_tests/gui/test_csv_export.py b/tests/ert/ui_tests/gui/test_csv_export.py
index 9452c236b86..263b0278cd8 100644
--- a/tests/ert/ui_tests/gui/test_csv_export.py
+++ b/tests/ert/ui_tests/gui/test_csv_export.py
@@ -89,7 +89,7 @@ def test_csv_export(esmda_has_run, qtbot, ensemble_select):
 def run_experiment_via_gui(gui, qtbot):
     experiment_panel = get_child(gui, ExperimentPanel)
     simulation_mode_combo = get_child(experiment_panel, QComboBox)
-    simulation_mode_combo.setCurrentText(EnsembleExperiment.name())
+    simulation_mode_combo.setCurrentText(EnsembleExperiment.display_name())
     ensemble_experiment_panel = get_child(experiment_panel, EnsembleExperimentPanel)
     ensemble_experiment_panel._ensemble_name_field.setText("iter-0")
 
diff --git a/tests/ert/ui_tests/gui/test_main_window.py b/tests/ert/ui_tests/gui/test_main_window.py
index f31f6ff0928..7d51123c6f0 100644
--- a/tests/ert/ui_tests/gui/test_main_window.py
+++ b/tests/ert/ui_tests/gui/test_main_window.py
@@ -242,7 +242,7 @@ def test_that_es_mda_is_disabled_when_weights_are_invalid(qtbot):
         combo_box = get_child(gui, QComboBox, name="experiment_type")
         combo_box.setCurrentIndex(3)
 
-        assert combo_box.currentText() == "Multiple data assimilation"
+        assert combo_box.currentText() == MultipleDataAssimilation.display_name()
 
         es_mda_panel = get_child(gui, QWidget, name="ES_MDA_panel")
         assert es_mda_panel
@@ -701,7 +701,7 @@ def test_that_es_mda_restart_run_box_is_disabled_when_there_are_no_cases(qtbot):
         assert combo_box.count() == 7
         combo_box.setCurrentIndex(3)
 
-        assert combo_box.currentText() == "Multiple data assimilation"
+        assert combo_box.currentText() == MultipleDataAssimilation.display_name()
 
         es_mda_panel = get_child(gui, QWidget, name="ES_MDA_panel")
         assert es_mda_panel
@@ -751,10 +751,13 @@ def test_validation_of_experiment_names_in_run_models(
     run_experiment = get_child(experiment_panel, QWidget, name="run_experiment")
 
     experiment_types_to_test = (
-        (EnsembleExperiment.name(), "Ensemble_experiment_panel"),
-        (EnsembleSmoother.name(), "ensemble_smoother_panel"),
-        (MultipleDataAssimilation.name(), "ES_MDA_panel"),
-        (IteratedEnsembleSmoother.name(), "iterated_ensemble_smoother_panel"),
+        (EnsembleExperiment.display_name(), "Ensemble_experiment_panel"),
+        (EnsembleSmoother.display_name(), "ensemble_smoother_panel"),
+        (
+            MultipleDataAssimilation.display_name(),
+            "ES_MDA_panel",
+        ),
+        (IteratedEnsembleSmoother.display_name(), "iterated_ensemble_smoother_panel"),
     )
     for exp_type, panel_name in experiment_types_to_test:
         experiment_types.setCurrentText(exp_type)
diff --git a/tests/ert/ui_tests/gui/test_missing_parameters_to_update.py b/tests/ert/ui_tests/gui/test_missing_parameters_to_update.py
index 02fc047604a..e8d744924a1 100644
--- a/tests/ert/ui_tests/gui/test_missing_parameters_to_update.py
+++ b/tests/ert/ui_tests/gui/test_missing_parameters_to_update.py
@@ -5,6 +5,12 @@
 from qtpy.QtWidgets import QComboBox
 
 from ert.gui.simulation.experiment_panel import ExperimentPanel
+from ert.run_models import (
+    EnsembleExperiment,
+    EnsembleSmoother,
+    IteratedEnsembleSmoother,
+    MultipleDataAssimilation,
+)
 from tests.ert.ui_tests.gui.conftest import get_child, open_gui_with_config
 
 
@@ -20,19 +26,19 @@ def test_no_updateable_parameters(qtbot):
     for gui in open_gui_with_config("poly.ert"):
         experiment_panel = get_child(gui, ExperimentPanel)
         simulation_mode_combo = get_child(experiment_panel, QComboBox)
-        idx = simulation_mode_combo.findText("Ensemble smoother")
+        idx = simulation_mode_combo.findText(EnsembleSmoother.display_name())
         assert not (
             simulation_mode_combo.model().item(idx).flags() & Qt.ItemFlag.ItemIsEnabled
         )
-        idx = simulation_mode_combo.findText("Multiple data assimilation")
+        idx = simulation_mode_combo.findText(MultipleDataAssimilation.display_name())
         assert not (
             simulation_mode_combo.model().item(idx).flags() & Qt.ItemFlag.ItemIsEnabled
         )
-        idx = simulation_mode_combo.findText("Iterated ensemble smoother")
+        idx = simulation_mode_combo.findText(IteratedEnsembleSmoother.display_name())
         assert not (
             simulation_mode_combo.model().item(idx).flags() & Qt.ItemFlag.ItemIsEnabled
         )
-        idx = simulation_mode_combo.findText("Ensemble experiment")
+        idx = simulation_mode_combo.findText(EnsembleExperiment.display_name())
         assert (
             simulation_mode_combo.model().item(idx).flags() & Qt.ItemFlag.ItemIsEnabled
         )
diff --git a/tests/ert/ui_tests/gui/test_restart_esmda.py b/tests/ert/ui_tests/gui/test_restart_esmda.py
index 6c7c8e312ed..e99f39e4350 100644
--- a/tests/ert/ui_tests/gui/test_restart_esmda.py
+++ b/tests/ert/ui_tests/gui/test_restart_esmda.py
@@ -18,7 +18,7 @@ def test_restart_esmda(ensemble_experiment_has_run_no_failure, qtbot):
 
     experiment_panel = get_child(gui, ExperimentPanel)
     simulation_mode_combo = get_child(experiment_panel, QComboBox)
-    simulation_mode_combo.setCurrentText(MultipleDataAssimilation.name())
+    simulation_mode_combo.setCurrentText(MultipleDataAssimilation.display_name())
 
     es_mda_panel = gui.findChild(QWidget, name="ES_MDA_panel")
     assert es_mda_panel
@@ -49,7 +49,7 @@ def test_active_realizations_esmda(opened_main_window_poly, qtbot):
 
     experiment_panel = get_child(gui, ExperimentPanel)
     simulation_mode_combo = get_child(experiment_panel, QComboBox)
-    simulation_mode_combo.setCurrentText(SingleTestRun.name())
+    simulation_mode_combo.setCurrentText(SingleTestRun.display_name())
 
     single_test_run_panel = gui.findChild(QWidget, name="Single_test_run_panel")
     assert single_test_run_panel
@@ -63,7 +63,7 @@ def test_active_realizations_esmda(opened_main_window_poly, qtbot):
         == "Total progress 100% — Experiment completed."
     )
 
-    simulation_mode_combo.setCurrentText(MultipleDataAssimilation.name())
+    simulation_mode_combo.setCurrentText(MultipleDataAssimilation.display_name())
     es_mda_panel = gui.findChild(QWidget, name="ES_MDA_panel")
     assert es_mda_panel
     active_reals = gui.findChild(StringBox, "active_realizations_box")
@@ -88,7 +88,7 @@ def test_custom_weights_stored_and_retrieved_from_metadata_esmda(
 
     experiment_panel = get_child(gui, ExperimentPanel)
     simulation_mode_combo = get_child(experiment_panel, QComboBox)
-    simulation_mode_combo.setCurrentText(MultipleDataAssimilation.name())
+    simulation_mode_combo.setCurrentText(MultipleDataAssimilation.display_name())
 
     es_mda_panel = gui.findChild(QWidget, name="ES_MDA_panel")
     assert es_mda_panel