1- import datetime
2- from unittest .mock import MagicMock
3- from uuid import uuid4
4-
5- import numpy as np
6- import pytest
71from PyQt6 .QtCore import Qt
82from pytestqt .qtbot import QtBot
93
126from ert .gui .ertwidgets .ensembleselector import EnsembleSelector
137from ert .gui .ertwidgets .stringbox import StringBox
148from ert .gui .simulation .manual_update_panel import ManualUpdatePanel
15- from ert .storage .local_ensemble import LocalEnsemble
16- from ert .storage .local_experiment import LocalExperiment
17- from ert .storage .local_storage import LocalStorage
18- from ert .storage .realization_storage_state import RealizationStorageState
19-
20- realization_finished_successfully = {
21- RealizationStorageState .PARAMETERS_LOADED ,
22- RealizationStorageState .RESPONSES_LOADED ,
23- }
24- realization_failed = {RealizationStorageState .UNDEFINED }
25-
26-
27- class MockStorage (LocalStorage ):
28- def __init__ (self ) -> None :
29- self ._ensembles = {}
30- self ._experiments = {}
31-
32- def _setup_mocked_run (
33- self , ensemble_name , experiment_name , ensemble_states
34- ) -> None :
35- mock_ensemble = MagicMock (spec = LocalEnsemble )
36- mock_ensemble .id = uuid4 ()
37- mock_ensemble .name = ensemble_name
38- mock_ensemble .relative_weights = "4, 2, 1"
39- mock_ensemble .started_at = datetime .datetime .now ()
40-
41- def mock_get_ensemble_state (* args , ** kwargs ):
42- return ensemble_states
43-
44- mock_ensemble .ensemble_size = len (mock_get_ensemble_state ())
45- mock_ensemble .get_ensemble_state = mock_get_ensemble_state
46-
47- def mock_get_realization_mask_with_responses (* args ):
48- return np .array (
49- [
50- RealizationStorageState .RESPONSES_LOADED in state
51- for state in mock_ensemble .get_ensemble_state ()
52- ]
53- )
54-
55- def mock_get_realization_mask_with_parameters (* args ):
56- return np .array (
57- [
58- RealizationStorageState .PARAMETERS_LOADED in state
59- for state in mock_ensemble .get_ensemble_state ()
60- ]
61- )
62-
63- mock_ensemble .get_realization_mask_with_responses = (
64- mock_get_realization_mask_with_responses
65- )
66- mock_ensemble .get_realization_mask_with_parameters = (
67- mock_get_realization_mask_with_parameters
68- )
699
70- def mock_get_realization_list_with_responses (self ) -> list [int ]:
71- mask = self .get_realization_mask_with_responses ()
72- return np .where (mask )[0 ].tolist ()
10+ from .conftest import (
11+ REALIZATION_FINISHED_SUCCESSFULLY ,
12+ REALIZATION_UNDEFINED ,
13+ MockStorage ,
14+ )
7315
74- mock_ensemble .has_data = (
75- lambda * args : len (mock_ensemble .get_realization_list_with_responses ()) > 0
76- )
77- mock_ensemble .get_realization_list_with_responses = (
78- lambda * args : mock_get_realization_list_with_responses (mock_ensemble )
79- )
80- mock_experiment = MagicMock (spec = LocalExperiment )
81- mock_experiment .ensembles = [mock_ensemble ]
82- mock_experiment .id = uuid4 ()
83- mock_experiment .name = experiment_name
8416
85- mock_ensemble .experiment_id = mock_experiment .id
86- mock_ensemble .experiment = mock_experiment
87- self ._ensembles [mock_ensemble .id ] = mock_ensemble
88- self ._experiments [mock_experiment .id ] = mock_experiment
89-
90- @property
91- def ensembles (self ):
92- yield from self ._ensembles .values ()
93-
94-
95- @pytest .mark .usefixtures ("copy_poly_case" )
9617def test_that_active_realizations_selector_validates_with_ensemble_size_from_prior (
9718 qtbot : QtBot ,
9819) -> None :
@@ -107,26 +28,26 @@ def test_that_active_realizations_selector_validates_with_ensemble_size_from_pri
10728 "mock_ensemble0" ,
10829 "mock_experiment0" ,
10930 [
110- realization_failed ,
111- realization_finished_successfully ,
112- realization_finished_successfully ,
113- realization_finished_successfully ,
114- realization_failed ,
115- realization_finished_successfully ,
116- realization_finished_successfully ,
117- realization_finished_successfully ,
31+ REALIZATION_UNDEFINED ,
32+ REALIZATION_FINISHED_SUCCESSFULLY ,
33+ REALIZATION_FINISHED_SUCCESSFULLY ,
34+ REALIZATION_FINISHED_SUCCESSFULLY ,
35+ REALIZATION_UNDEFINED ,
36+ REALIZATION_FINISHED_SUCCESSFULLY ,
37+ REALIZATION_FINISHED_SUCCESSFULLY ,
38+ REALIZATION_FINISHED_SUCCESSFULLY ,
11839 ],
11940 )
12041 notifier ._storage ._setup_mocked_run (
12142 "mock_ensemble1" ,
12243 "mock_experiment1" ,
12344 [
124- realization_failed ,
125- realization_failed ,
126- realization_finished_successfully ,
127- realization_finished_successfully ,
128- realization_failed ,
129- realization_finished_successfully ,
45+ REALIZATION_UNDEFINED ,
46+ REALIZATION_UNDEFINED ,
47+ REALIZATION_FINISHED_SUCCESSFULLY ,
48+ REALIZATION_FINISHED_SUCCESSFULLY ,
49+ REALIZATION_UNDEFINED ,
50+ REALIZATION_FINISHED_SUCCESSFULLY ,
13051 ],
13152 )
13253 panel = ManualUpdatePanel (
@@ -138,8 +59,10 @@ def test_that_active_realizations_selector_validates_with_ensemble_size_from_pri
13859 qtbot .addWidget (panel )
13960
14061 prior_ensemble0_number_of_realizations_with_responses = 6
141- prior_ensemble1_number_of_realizations_with_responses = 3
62+ prior_ensemble0_ensemble_size = 8
14263
64+ prior_ensemble1_number_of_realizations_with_responses = 3
65+ prior_ensemble1_ensemble_size = 6
14366 realization_selector = panel .findChild (StringBox , "active_realizations_box" )
14467 assert realization_selector is not None
14568 ensemble_selector = panel .findChild (EnsembleSelector )
@@ -159,6 +82,9 @@ def test_that_active_realizations_selector_validates_with_ensemble_size_from_pri
15982 realization_selector ._validation ._validation_message
16083 )
16184 assert panel .isConfigurationValid ()
85+ assert (
86+ panel .get_experiment_arguments ().ensemble_size == prior_ensemble0_ensemble_size
87+ )
16288
16389 # We try running a realization that does not have RESPONSES_LOADED
16490 realization_selector .setText ("4-7" )
@@ -169,14 +95,16 @@ def test_that_active_realizations_selector_validates_with_ensemble_size_from_pri
16995
17096 # The active realizations field should auto-populate with a valid value
17197 assert panel .isConfigurationValid ()
98+ assert (
99+ panel .get_experiment_arguments ().ensemble_size == prior_ensemble1_ensemble_size
100+ )
172101 assert (
173102 panel ._number_of_realizations_label .text ()
174103 == f"<b>{ prior_ensemble1_number_of_realizations_with_responses } </b>"
175104 )
176105 assert realization_selector .text () == "2-3, 5"
177106
178107
179- @pytest .mark .usefixtures ("copy_poly_case" )
180108def test_that_manual_update_ensemble_selector_only_shows_ensembles_with_data (
181109 qtbot : QtBot ,
182110) -> None :
@@ -190,7 +118,7 @@ def test_that_manual_update_ensemble_selector_only_shows_ensembles_with_data(
190118 notifier ._storage ._setup_mocked_run (
191119 "mock_ensemble_no_data" ,
192120 "mock_experiment2" ,
193- [realization_failed , realization_failed , realization_failed ],
121+ [REALIZATION_UNDEFINED , REALIZATION_UNDEFINED , REALIZATION_UNDEFINED ],
194122 )
195123
196124 panel = ManualUpdatePanel (
0 commit comments