15
15
from unittest .mock import MagicMock
16
16
17
17
18
- def assert_obs_vector (vector , val_1 , index_list = None , val_2 = None ):
19
- if index_list is None :
20
- index_list = []
18
+ def get_std_from_obs_vector (vector ):
19
+ result = []
21
20
for node in vector :
22
- for index in range (len (node )):
23
- if index in index_list :
24
- assert node .getStdScaling (index ) == val_2
25
- else :
26
- assert node .getStdScaling (index ) == val_1
21
+ for i , _ in enumerate (node ):
22
+ result .append (node .getStdScaling (i ))
23
+ return result
27
24
28
25
29
26
def test_installed_python_version_of_enkf_scaling_job (setup_ert , monkeypatch ):
@@ -41,7 +38,9 @@ def test_installed_python_version_of_enkf_scaling_job(setup_ert, monkeypatch):
41
38
obs = ert .getObservations ()
42
39
obs_vector = obs ["WPR_DIFF_1" ]
43
40
44
- assert_obs_vector (obs_vector , 1.0 )
41
+ result = get_std_from_obs_vector (obs_vector )
42
+
43
+ assert result == [1.0 , 1.0 , 1.0 , 1.0 ]
45
44
46
45
job_config = {"CALCULATE_KEYS" : {"keys" : [{"key" : "WPR_DIFF_1" }]}}
47
46
@@ -56,19 +55,23 @@ def test_installed_python_version_of_enkf_scaling_job(setup_ert, monkeypatch):
56
55
job = ert .getWorkflowList ().getJob ("CORRELATE_OBSERVATIONS_SCALING" )
57
56
job .run (ert , ["job_config.yml" ])
58
57
59
- assert_obs_vector (obs_vector , np .sqrt (4.0 / 2.0 ))
58
+ result = get_std_from_obs_vector (obs_vector )
59
+ assert result == [np .sqrt (4.0 / 2.0 )] * 4
60
60
61
61
job_config ["CALCULATE_KEYS" ]["keys" ][0 ].update ({"index" : [400 , 800 , 1200 ]})
62
62
with open ("job_config.yml" , "w" ) as fout :
63
63
yaml .dump (job_config , fout )
64
64
job .run (ert , ["job_config.yml" ])
65
65
66
- assert_obs_vector (
66
+ result = get_std_from_obs_vector (
67
67
obs_vector ,
68
- np .sqrt (4.0 / 2.0 ),
69
- index_list = [0 , 1 , 2 ],
70
- val_2 = np .sqrt (3.0 / 2.0 ),
71
68
)
69
+ assert result == [
70
+ np .sqrt (3.0 / 2.0 ),
71
+ np .sqrt (3.0 / 2.0 ),
72
+ np .sqrt (3.0 / 2.0 ),
73
+ np .sqrt (4.0 / 2.0 ),
74
+ ]
72
75
73
76
74
77
def test_main_entry_point_gen_data (setup_ert ):
@@ -84,17 +87,19 @@ def test_main_entry_point_gen_data(setup_ert):
84
87
obs = ert .getObservations ()
85
88
obs_vector = obs ["WPR_DIFF_1" ]
86
89
87
- assert_obs_vector (obs_vector , 1.0 , [0 , 1 ], np .sqrt (4 / 2 ))
90
+ result = get_std_from_obs_vector (obs_vector )
91
+ assert result == [np .sqrt (4 / 2 ), np .sqrt (4 / 2 ), 1.0 , 1.0 ], "Only update subset"
88
92
89
93
cos_config ["CALCULATE_KEYS" ]["keys" ][0 ].update ({"index" : [400 , 800 , 1200 ]})
90
94
91
95
CorrelatedObservationsScalingJob (ert ).run (cos_config )
92
- assert_obs_vector (
93
- obs_vector ,
94
- 1.0 ,
95
- [0 , 1 ],
96
+ result = get_std_from_obs_vector (obs_vector )
97
+ assert result == [
96
98
np .sqrt (3.0 / 2.0 ),
97
- )
99
+ np .sqrt (3.0 / 2.0 ),
100
+ 1.0 ,
101
+ 1.0 ,
102
+ ], "Change basis for update"
98
103
99
104
svd_file = os .path .join (
100
105
"storage" , # ens_path == storage/snake_oil/ensemble
@@ -148,16 +153,69 @@ def test_main_entry_point_summary_data_calc(setup_ert, monkeypatch):
148
153
obs = ert .getObservations ()
149
154
150
155
obs_vector = obs ["WOPR_OP1_108" ]
151
-
156
+ result = []
152
157
for index , node in enumerate (obs_vector ):
153
- assert node .getStdScaling (index ) == 1.0
158
+ result .append (node .getStdScaling (index ))
159
+ assert result == [1 ]
154
160
155
161
CorrelatedObservationsScalingJob (ert ).run (cos_config )
156
162
157
163
for index , node in enumerate (obs_vector ):
158
164
assert node .getStdScaling (index ) == 1.0
159
165
160
166
167
+ @pytest .mark .parametrize (
168
+ "config, expected_result" ,
169
+ [
170
+ pytest .param (
171
+ {"CALCULATE_KEYS" : {"keys" : [{"key" : "FOPR" }]}},
172
+ np .sqrt (200 / 5 ),
173
+ id = "All indecies should update" ,
174
+ ),
175
+ pytest .param (
176
+ {"CALCULATE_KEYS" : {"keys" : [{"key" : "WOPR_OP1_108" }]}},
177
+ 1.0 ,
178
+ id = "No indecies on FOPR should update" ,
179
+ ),
180
+ ],
181
+ )
182
+ def test_main_entry_point_history_data_calc (
183
+ setup_ert , monkeypatch , config , expected_result
184
+ ):
185
+
186
+ res_config = setup_ert
187
+
188
+ ert = EnKFMain (res_config )
189
+ obs = ert .getObservations ()
190
+ CorrelatedObservationsScalingJob (ert ).run (config )
191
+ obs_vector = obs ["FOPR" ]
192
+ result = []
193
+ for index , node in enumerate (obs_vector ):
194
+ result .append (node .getStdScaling (index ))
195
+ assert result == [expected_result ] * 200
196
+
197
+
198
+ def test_main_entry_point_history_data_calc_subset (setup_ert , monkeypatch ):
199
+ config = {"CALCULATE_KEYS" : {"keys" : [{"key" : "FOPR" , "index" : [10 , 20 ]}]}}
200
+ res_config = setup_ert
201
+
202
+ ert = EnKFMain (res_config )
203
+ obs = ert .getObservations ()
204
+ obs_vector = obs ["FOPR" ]
205
+
206
+ expected_result = [1.0 ] * 200
207
+ expected_result [10 ] = np .sqrt (2 )
208
+ expected_result [20 ] = np .sqrt (2 )
209
+ CorrelatedObservationsScalingJob (ert ).run (config )
210
+
211
+ result = []
212
+ for index , node in enumerate (obs_vector ):
213
+ result .append (node .getStdScaling (index ))
214
+ assert (
215
+ result == expected_result
216
+ ), "Check that only the selected subset of obs have updated scaling"
217
+
218
+
161
219
@pytest .mark .skipif (TEST_DATA_DIR is None , reason = "no equinor libres test-data" )
162
220
@pytest .mark .equinor_test
163
221
@pytest .mark .usefixtures ("setup_tmpdir" )
0 commit comments