Skip to content

Commit 0822f6f

Browse files
committed
Updates wrt. design matrix
1 parent ddcf1e0 commit 0822f6f

File tree

4 files changed

+89
-72
lines changed

4 files changed

+89
-72
lines changed

src/ert/config/ert_config.py

+1-7
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,7 @@
1010
from datetime import datetime
1111
from os import path
1212
from pathlib import Path
13-
from typing import (
14-
Any,
15-
ClassVar,
16-
Self,
17-
no_type_check,
18-
overload,
19-
)
13+
from typing import Any, ClassVar, Self, no_type_check, overload
2014

2115
import polars as pl
2216
from pydantic import ValidationError as PydanticValidationError

src/ert/config/scalar_parameter.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -406,8 +406,8 @@ def save_parameters(
406406
realization: int,
407407
data: npt.NDArray[np.float64],
408408
) -> None:
409-
# this function is not be used since
410-
# implementation as we can't deduce which parameters are being written
409+
# this function is not be used since we can't deduce
410+
# which parameters are being written whithin the data array
411411
pass
412412

413413
def save_updated_parameters_and_copy_remaining(
@@ -502,8 +502,8 @@ def write_to_runpath(
502502
if param.template_file is not None and param.output_file is not None:
503503
outfiles[group_name] = (param.template_file, param.output_file)
504504
break
505-
506-
for group_name, (template_file, output_file) in outfiles.values():
505+
print(f"DEBUG {outfiles} {data}")
506+
for group_name, (template_file, output_file) in outfiles.items():
507507
target_file = substitute_runpath_name(
508508
output_file, real_nr, ensemble.iteration
509509
)

src/ert/run_models/ensemble_experiment.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -87,9 +87,9 @@ def run_experiment(
8787
self.restart = restart
8888
# If design matrix is present, we try to merge design matrix parameters
8989
# to the experiment parameters and set new active realizations
90-
parameters_config: list[ParameterConfig] = []
9190
design_matrix = self._design_matrix
9291
if design_matrix is not None:
92+
parameters_config: list[ParameterConfig] = []
9393
for param in self._parameter_configuration:
9494
if isinstance(param, ScalarParameters):
9595
try:
@@ -109,7 +109,7 @@ def run_experiment(
109109
)
110110
self.experiment = self._storage.create_experiment(
111111
name=self.experiment_name,
112-
parameters=parameters_config,
112+
parameters=self._parameter_configuration,
113113
observations=self._observations,
114114
responses=self._response_configuration,
115115
)

tests/ert/unit_tests/test_libres_facade.py

+82-59
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,7 @@
99
from resdata.summary import Summary
1010

1111
from ert.config import ErtConfig
12-
from ert.config.design_matrix import DESIGN_MATRIX_GROUP, DesignMatrix
13-
from ert.enkf_main import sample_prior, save_design_matrix_to_ensemble
12+
from ert.enkf_main import sample_prior
1413
from ert.libres_facade import LibresFacade
1514
from ert.storage import open_storage
1615

@@ -219,17 +218,30 @@ def test_get_observations(tmpdir):
219218
assert "FOPR_1" in facade.get_observations()
220219

221220

222-
def test_load_gen_kw_not_sorted(storage, tmpdir, snapshot):
221+
# TODO refactor this & use design matrix too!!!
222+
def test_load_scalar_parameters(storage, tmpdir, snapshot):
223223
"""
224224
This test checks two things, loading multiple parameters and
225225
loading log parameters.
226226
"""
227227
with tmpdir.as_cwd():
228+
design_path = "design_matrix.xlsx"
229+
ensemble_size = 10
230+
a_values = np.random.default_rng().uniform(-5, 5, 10)
231+
b_values = np.random.default_rng().uniform(-5, 5, 10)
232+
c_values = np.random.default_rng().uniform(-5, 5, 10)
233+
design_matrix_df = DataFrame({"a": a_values, "b": b_values, "c": c_values})
234+
with ExcelWriter(design_path) as xl_write:
235+
design_matrix_df.to_excel(xl_write, index=False, sheet_name="DesignSheet01")
236+
DataFrame().to_excel(
237+
xl_write, index=False, sheet_name="DefaultValues", header=False
238+
)
228239
config = dedent(
229240
"""
230241
NUM_REALIZATIONS 10
231242
GEN_KW PARAM_2 template.txt kw.txt prior.txt
232243
GEN_KW PARAM_1 template.txt kw.txt prior.txt
244+
DESIGN_MATRIX design_matrix.xlsx DESIGN_SHEET:DesignSheet01 DEFAULT_SHEET:DefaultValues
233245
RANDOM_SEED 1234
234246
"""
235247
)
@@ -242,64 +254,75 @@ def test_load_gen_kw_not_sorted(storage, tmpdir, snapshot):
242254

243255
ert_config = ErtConfig.from_file("config.ert")
244256

245-
experiment_id = storage.create_experiment(
246-
parameters=ert_config.ensemble_config.parameter_configuration
247-
)
257+
params = [
258+
ert_config.analysis_config.design_matrix.merge_with_existing_parameters(
259+
ert_config.ensemble_config.parameter_configuration[0]
260+
)
261+
]
262+
experiment_id = storage.create_experiment(parameters=params)
248263
ensemble_size = 10
249264
ensemble = storage.create_ensemble(
250265
experiment_id, name="default", ensemble_size=ensemble_size
251266
)
252-
253-
sample_prior(ensemble, range(ensemble_size), random_seed=1234)
254-
255-
data = ensemble.load_all_gen_kw_data()
256-
snapshot.assert_match(data.round(12).to_csv(), "gen_kw_unsorted")
257-
258-
259-
@pytest.mark.parametrize(
260-
"reals, expect_error",
261-
[
262-
pytest.param(
263-
list(range(10)),
264-
False,
265-
id="correct_active_realizations",
266-
),
267-
pytest.param([10, 11], True, id="incorrect_active_realizations"),
268-
],
269-
)
270-
def test_save_parameters_to_storage_from_design_dataframe(
271-
tmp_path, reals, expect_error
272-
):
273-
design_path = tmp_path / "design_matrix.xlsx"
274-
ensemble_size = 10
275-
a_values = np.random.default_rng().uniform(-5, 5, 10)
276-
b_values = np.random.default_rng().uniform(-5, 5, 10)
277-
c_values = np.random.default_rng().uniform(-5, 5, 10)
278-
design_matrix_df = DataFrame({"a": a_values, "b": b_values, "c": c_values})
279-
with ExcelWriter(design_path) as xl_write:
280-
design_matrix_df.to_excel(xl_write, index=False, sheet_name="DesignSheet01")
281-
DataFrame().to_excel(
282-
xl_write, index=False, sheet_name="DefaultValues", header=False
283-
)
284-
design_matrix = DesignMatrix(design_path, "DesignSheet01", "DefaultValues")
285-
with open_storage(tmp_path / "storage", mode="w") as storage:
286-
experiment_id = storage.create_experiment(
287-
parameters=[design_matrix.parameter_configuration]
288-
)
289-
ensemble = storage.create_ensemble(
290-
experiment_id, name="default", ensemble_size=ensemble_size
267+
sample_prior(
268+
ensemble,
269+
range(ensemble_size),
270+
random_seed=1234,
271+
design_matrix_df=ert_config.analysis_config.design_matrix.design_matrix_df,
291272
)
292-
if expect_error:
293-
with pytest.raises(KeyError):
294-
save_design_matrix_to_ensemble(
295-
design_matrix.design_matrix_df, ensemble, reals
296-
)
297-
else:
298-
save_design_matrix_to_ensemble(
299-
design_matrix.design_matrix_df, ensemble, reals
300-
)
301-
params = ensemble.load_parameters(DESIGN_MATRIX_GROUP)["values"]
302-
all(params.names.values == ["a", "b", "c"])
303-
np.testing.assert_array_almost_equal(params[:, 0], a_values)
304-
np.testing.assert_array_almost_equal(params[:, 1], b_values)
305-
np.testing.assert_array_almost_equal(params[:, 2], c_values)
273+
data = ensemble.load_parameters_scalar()
274+
print(data)
275+
print(ert_config.ensemble_config.parameter_configuration)
276+
# TODO refactor this!!!
277+
# data = ensemble.load_all_gen_kw_data()
278+
# snapshot.assert_match(data.round(12).to_csv(), "gen_kw_unsorted")
279+
280+
281+
# TODO remove this test
282+
# @pytest.mark.parametrize(
283+
# "reals, expect_error",
284+
# [
285+
# pytest.param(
286+
# list(range(10)),
287+
# False,
288+
# id="correct_active_realizations",
289+
# ),
290+
# pytest.param([10, 11], True, id="incorrect_active_realizations"),
291+
# ],
292+
# )
293+
# def test_save_parameters_to_storage_from_design_dataframe(
294+
# tmp_path, reals, expect_error
295+
# ):
296+
# design_path = tmp_path / "design_matrix.xlsx"
297+
# ensemble_size = 10
298+
# a_values = np.random.default_rng().uniform(-5, 5, 10)
299+
# b_values = np.random.default_rng().uniform(-5, 5, 10)
300+
# c_values = np.random.default_rng().uniform(-5, 5, 10)
301+
# design_matrix_df = DataFrame({"a": a_values, "b": b_values, "c": c_values})
302+
# with ExcelWriter(design_path) as xl_write:
303+
# design_matrix_df.to_excel(xl_write, index=False, sheet_name="DesignSheet01")
304+
# DataFrame().to_excel(
305+
# xl_write, index=False, sheet_name="DefaultValues", header=False
306+
# )
307+
# design_matrix = DesignMatrix(design_path, "DesignSheet01", "DefaultValues")
308+
# with open_storage(tmp_path / "storage", mode="w") as storage:
309+
# experiment_id = storage.create_experiment(
310+
# parameters=[design_matrix.parameter_configuration]
311+
# )
312+
# ensemble = storage.create_ensemble(
313+
# experiment_id, name="default", ensemble_size=ensemble_size
314+
# )
315+
# if expect_error:
316+
# with pytest.raises(KeyError):
317+
# save_design_matrix_to_ensemble(
318+
# design_matrix.design_matrix_df, ensemble, reals
319+
# )
320+
# else:
321+
# save_design_matrix_to_ensemble(
322+
# design_matrix.design_matrix_df, ensemble, reals
323+
# )
324+
# params = ensemble.load_parameters(DESIGN_MATRIX_GROUP)["values"]
325+
# all(params.names.values == ["a", "b", "c"])
326+
# np.testing.assert_array_almost_equal(params[:, 0], a_values)
327+
# np.testing.assert_array_almost_equal(params[:, 1], b_values)
328+
# np.testing.assert_array_almost_equal(params[:, 2], c_values)

0 commit comments

Comments
 (0)