Skip to content

Commit c933fa1

Browse files
committed
Have DESIGN_MATRIX not require design_sheet and default_sheet
This commit makes the DESIGN_MATRIX keyword not require arguments for design and default sheet. Now DESIGN_SHEET defaults to `DesignSheet01` and `DEFAULT_SHEET` defaults to "DefaultValues". This is the same defaults that are used in design2params.
1 parent b391afa commit c933fa1

File tree

8 files changed

+106
-59
lines changed

8 files changed

+106
-59
lines changed

src/ert/config/design_matrix.py

+2-10
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,8 @@ def __post_init__(self) -> None:
4444
def from_config_list(cls, config_list: list[str]) -> DesignMatrix:
4545
filename = Path(config_list[0])
4646
options = option_dict(config_list, 1)
47-
design_sheet = options.get("DESIGN_SHEET")
48-
default_sheet = options.get("DEFAULT_SHEET")
47+
design_sheet = options.get("DESIGN_SHEET", "DesignSheet")
48+
default_sheet = options.get("DEFAULT_SHEET", "DefaultSheet")
4949
errors = []
5050
if filename.suffix not in {
5151
".xlsx",
@@ -56,14 +56,6 @@ def from_config_list(cls, config_list: list[str]) -> DesignMatrix:
5656
f"DESIGN_MATRIX must be of format .xls or .xlsx; is '{filename}'"
5757
).set_context(config_list)
5858
)
59-
if design_sheet is None:
60-
errors.append(
61-
ErrorInfo("Missing required DESIGN_SHEET").set_context(config_list)
62-
)
63-
if default_sheet is None:
64-
errors.append(
65-
ErrorInfo("Missing required DEFAULT_SHEET").set_context(config_list)
66-
)
6759
if design_sheet is not None and design_sheet == default_sheet:
6860
errors.append(
6961
ErrorInfo(

src/ert/config/parsing/config_schema.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -257,7 +257,7 @@ def install_job_directory_keyword() -> SchemaItem:
257257
def design_matrix_keyword() -> SchemaItem:
258258
return SchemaItem(
259259
kw=ConfigKeys.DESIGN_MATRIX,
260-
argc_min=3,
260+
argc_min=1,
261261
argc_max=3,
262262
type_map=[
263263
SchemaItemType.EXISTING_PATH,

tests/ert/ui_tests/cli/analysis/test_design_matrix.py

+6-6
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222

2323
def _create_design_matrix(filename, design_sheet_df, default_sheet_df=None):
2424
with pd.ExcelWriter(filename) as xl_write:
25-
design_sheet_df.to_excel(xl_write, index=False, sheet_name="DesignSheet01")
25+
design_sheet_df.to_excel(xl_write, index=False, sheet_name="DesignSheet")
2626
if default_sheet_df is not None:
2727
default_sheet_df.to_excel(
2828
xl_write, index=False, sheet_name="DefaultSheet", header=False
@@ -54,7 +54,7 @@ def test_run_poly_example_with_design_matrix():
5454
NUM_REALIZATIONS 10
5555
MIN_REALIZATIONS 1
5656
GEN_DATA POLY_RES RESULT_FILE:poly.out
57-
DESIGN_MATRIX poly_design.xlsx DESIGN_SHEET:DesignSheet01 DEFAULT_SHEET:DefaultSheet
57+
DESIGN_MATRIX poly_design.xlsx
5858
INSTALL_JOB poly_eval POLY_EVAL
5959
FORWARD_MODEL poly_eval
6060
"""
@@ -156,7 +156,7 @@ def test_run_poly_example_with_design_matrix_and_genkw_merge(default_values, err
156156
MIN_REALIZATIONS 1
157157
GEN_DATA POLY_RES RESULT_FILE:poly.out
158158
GEN_KW COEFFS my_template my_output coeff_priors
159-
DESIGN_MATRIX poly_design.xlsx DESIGN_SHEET:DesignSheet01 DEFAULT_SHEET:DefaultSheet
159+
DESIGN_MATRIX poly_design.xlsx
160160
INSTALL_JOB poly_eval POLY_EVAL
161161
FORWARD_MODEL poly_eval
162162
"""
@@ -268,8 +268,8 @@ def test_run_poly_example_with_multiple_design_matrix_instances():
268268
NUM_REALIZATIONS 10
269269
MIN_REALIZATIONS 1
270270
GEN_DATA POLY_RES RESULT_FILE:poly.out
271-
DESIGN_MATRIX poly_design_1.xlsx DESIGN_SHEET:DesignSheet01 DEFAULT_SHEET:DefaultSheet
272-
DESIGN_MATRIX poly_design_2.xlsx DESIGN_SHEET:DesignSheet01 DEFAULT_SHEET:DefaultSheet
271+
DESIGN_MATRIX poly_design_1.xlsx
272+
DESIGN_MATRIX poly_design_2.xlsx
273273
INSTALL_JOB poly_eval POLY_EVAL
274274
FORWARD_MODEL poly_eval
275275
"""
@@ -358,7 +358,7 @@ def test_design_matrix_on_esmda(experiment_mode, ensemble_name, iterations):
358358
GEN_KW COEFFS_B coeff_priors_b
359359
GEN_KW COEFFS_C coeff_priors_c
360360
GEN_DATA POLY_RES RESULT_FILE:poly.out
361-
DESIGN_MATRIX design_matrix.xlsx DESIGN_SHEET:DesignSheet01 DEFAULT_SHEET:DefaultSheet
361+
DESIGN_MATRIX design_matrix.xlsx
362362
INSTALL_JOB poly_eval POLY_EVAL
363363
FORWARD_MODEL poly_eval
364364
"""

tests/ert/unit_tests/config/test_analysis_config.py

+44-11
Original file line numberDiff line numberDiff line change
@@ -122,30 +122,63 @@ def test_invalid_design_matrix_format_raises_validation_error():
122122
)
123123

124124

125-
def test_design_matrix_without_design_sheet_raises_validation_error():
126-
with pytest.raises(ConfigValidationError, match="Missing required DESIGN_SHEET"):
125+
def test_design_matrix_with_unknown_argument_uses_default(tmp_path, monkeypatch):
126+
monkeypatch.chdir(tmp_path)
127+
with pd.ExcelWriter("my_design_matrix.xlsx") as xl_write:
128+
design_matrix_df = pd.DataFrame(
129+
{
130+
"REAL": [0, 1, 2],
131+
"a": [1, 2, 3],
132+
"b": [0, 2, 0],
133+
}
134+
)
135+
default_sheet_df = pd.DataFrame([["a", 1], ["b", 4]])
136+
design_matrix_df.to_excel(xl_write, index=False, sheet_name="DesignSheet")
137+
default_sheet_df.to_excel(
138+
xl_write, index=False, sheet_name="my_default_sheet", header=False
139+
)
140+
assert (
127141
AnalysisConfig.from_dict(
128142
{
143+
ConfigKeys.NUM_REALIZATIONS: 3,
129144
ConfigKeys.DESIGN_MATRIX: [
130145
[
131-
"my_matrix.xlsx",
132-
"DESIGN_:design",
133-
"DEFAULT_SHEET:default",
146+
os.path.abspath("my_design_matrix.xlsx"),
147+
"foo_argument:bar",
148+
"DEFAULT_SHEET:my_default_sheet",
134149
]
135150
],
136151
}
137-
)
152+
).design_matrix.design_sheet
153+
== "DesignSheet"
154+
)
138155

139156

140-
def test_design_matrix_without_default_sheet_raises_validation_error():
141-
with pytest.raises(ConfigValidationError, match="Missing required DEFAULT_SHEET"):
157+
def test_design_matrix_with_too_many_arguments_fails(tmp_path, monkeypatch):
158+
monkeypatch.chdir(tmp_path)
159+
with pd.ExcelWriter("my_design_matrix.xlsx") as xl_write:
160+
design_matrix_df = pd.DataFrame(
161+
{
162+
"REAL": [0, 1, 2],
163+
"a": [1, 2, 3],
164+
"b": [0, 2, 0],
165+
}
166+
)
167+
default_sheet_df = pd.DataFrame([["a", 1], ["b", 4]])
168+
design_matrix_df.to_excel(xl_write, index=False, sheet_name="DesignSheet")
169+
default_sheet_df.to_excel(
170+
xl_write, index=False, sheet_name="my_default_sheet", header=False
171+
)
172+
with pytest.raises(ConfigValidationError, match="Invalid argument 'too_many'"):
142173
AnalysisConfig.from_dict(
143174
{
175+
ConfigKeys.NUM_REALIZATIONS: 3,
144176
ConfigKeys.DESIGN_MATRIX: [
145177
[
146-
"my_matrix.xlsx",
147-
"DESIGN_SHEET:design",
148-
"DEFAULT_:default",
178+
os.path.abspath("my_design_matrix.xlsx"),
179+
"too_many",
180+
"positional_arguments",
181+
"DEFAULT_SHEET:my_default_sheet",
149182
]
150183
],
151184
}

tests/ert/unit_tests/config/test_ert_config.py

+24
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
from textwrap import dedent
1111
from unittest.mock import MagicMock
1212

13+
import pandas as pd
1314
import pytest
1415
from hypothesis import HealthCheck, assume, given, settings
1516
from hypothesis import strategies as st
@@ -29,6 +30,7 @@
2930
from ert.config.parsing.queue_system import QueueSystem
3031
from ert.plugins import ErtPluginManager
3132
from ert.shared import ert_share_path
33+
from tests.ert.ui_tests.cli.analysis.test_design_matrix import _create_design_matrix
3234

3335
from .config_dict_generator import config_generators
3436

@@ -1991,3 +1993,25 @@ def run(self, *args):
19911993

19921994
assert ert_config.substitutions["<FOO>"] == "ertconfig_foo"
19931995
assert ert_config.substitutions["<FOO2>"] == "ertconfig_foo2"
1996+
1997+
1998+
def test_design_matrix_default_argument(tmp_path):
1999+
design_matrix_file = tmp_path / "my_design_matrix.xlsx"
2000+
_create_design_matrix(
2001+
design_matrix_file,
2002+
pd.DataFrame(
2003+
{
2004+
"REAL": [1],
2005+
"a": [1],
2006+
"category": ["cat1"],
2007+
}
2008+
),
2009+
pd.DataFrame([["b", 1], ["c", 2]]),
2010+
)
2011+
2012+
config = ErtConfig.from_file_contents(
2013+
f"NUM_REALIZATIONS 1\nDESIGN_MATRIX {design_matrix_file}"
2014+
)
2015+
assert config.analysis_config.design_matrix
2016+
assert config.analysis_config.design_matrix.design_sheet == "DesignSheet"
2017+
assert config.analysis_config.design_matrix.default_sheet == "DefaultSheet"

tests/ert/unit_tests/gui/simulation/test_run_dialog.py

+2-4
Original file line numberDiff line numberDiff line change
@@ -681,7 +681,7 @@ def test_that_design_matrix_show_parameters_button_is_visible(
681681
)
682682
default_sheet_df = pd.DataFrame([["b", 1], ["c", 2]])
683683
with pd.ExcelWriter(xls_filename) as xl_write:
684-
design_matrix_df.to_excel(xl_write, index=False, sheet_name="DesignSheet01")
684+
design_matrix_df.to_excel(xl_write, index=False, sheet_name="DesignSheet")
685685
default_sheet_df.to_excel(
686686
xl_write, index=False, sheet_name="DefaultSheet", header=False
687687
)
@@ -690,9 +690,7 @@ def test_that_design_matrix_show_parameters_button_is_visible(
690690
with open(config_file, "w", encoding="utf-8") as f:
691691
f.write("NUM_REALIZATIONS 1")
692692
if design_matrix_entry:
693-
f.write(
694-
f"\nDESIGN_MATRIX {xls_filename} DESIGN_SHEET:DesignSheet01 DEFAULT_SHEET:DefaultSheet"
695-
)
693+
f.write(f"\nDESIGN_MATRIX {xls_filename}")
696694

697695
args_mock = Mock()
698696
args_mock.config = config_file

tests/ert/unit_tests/sensitivity_analysis/test_design_matrix.py

+24-24
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,11 @@
1212

1313
def _create_design_matrix(xls_path, design_matrix_df, default_sheet_df) -> DesignMatrix:
1414
with pd.ExcelWriter(xls_path) as xl_write:
15-
design_matrix_df.to_excel(xl_write, index=False, sheet_name="DesignSheet01")
15+
design_matrix_df.to_excel(xl_write, index=False, sheet_name="DesignSheet")
1616
default_sheet_df.to_excel(
17-
xl_write, index=False, sheet_name="DefaultValues", header=False
17+
xl_write, index=False, sheet_name="DefaultSheet", header=False
1818
)
19-
return DesignMatrix(xls_path, "DesignSheet01", "DefaultValues")
19+
return DesignMatrix(xls_path, "DesignSheet", "DefaultSheet")
2020

2121

2222
@pytest.mark.parametrize(
@@ -145,11 +145,11 @@ def test_read_and_merge_with_existing_parameters(tmp_path, parameters, error_msg
145145
)
146146
default_sheet_df = pd.DataFrame([["a", 1], ["b", 4]])
147147
with pd.ExcelWriter(design_path) as xl_write:
148-
design_matrix_df.to_excel(xl_write, index=False, sheet_name="DesignSheet01")
148+
design_matrix_df.to_excel(xl_write, index=False, sheet_name="DesignSheet")
149149
default_sheet_df.to_excel(
150-
xl_write, index=False, sheet_name="DefaultValues", header=False
150+
xl_write, index=False, sheet_name="DefaultSheet", header=False
151151
)
152-
design_matrix = DesignMatrix(design_path, "DesignSheet01", "DefaultValues")
152+
design_matrix = DesignMatrix(design_path, "DesignSheet", "DefaultSheet")
153153
if error_msg:
154154
with pytest.raises(ValueError, match=error_msg):
155155
design_matrix.merge_with_existing_parameters(extra_genkw_config)
@@ -180,11 +180,11 @@ def test_reading_design_matrix(tmp_path):
180180
)
181181
default_sheet_df = pd.DataFrame([["one", 1], ["b", 4], ["d", "case_name"]])
182182
with pd.ExcelWriter(design_path) as xl_write:
183-
design_matrix_df.to_excel(xl_write, index=False, sheet_name="DesignSheet01")
183+
design_matrix_df.to_excel(xl_write, index=False, sheet_name="DesignSheet")
184184
default_sheet_df.to_excel(
185-
xl_write, index=False, sheet_name="DefaultValues", header=False
185+
xl_write, index=False, sheet_name="DefaultSheet", header=False
186186
)
187-
design_matrix = DesignMatrix(design_path, "DesignSheet01", "DefaultValues")
187+
design_matrix = DesignMatrix(design_path, "DesignSheet", "DefaultSheet")
188188
design_params = design_matrix.parameter_configuration
189189
assert all(param in design_params for param in ("a", "b", "c", "one", "d"))
190190
assert design_matrix.active_realizations == [True, True, False, False, True]
@@ -218,13 +218,13 @@ def test_reading_design_matrix_validate_reals(tmp_path, real_column, error_msg):
218218
)
219219
default_sheet_df = pd.DataFrame()
220220
with pd.ExcelWriter(design_path) as xl_write:
221-
design_matrix_df.to_excel(xl_write, index=False, sheet_name="DesignSheet01")
221+
design_matrix_df.to_excel(xl_write, index=False, sheet_name="DesignSheet")
222222
default_sheet_df.to_excel(
223-
xl_write, index=False, sheet_name="DefaultValues", header=False
223+
xl_write, index=False, sheet_name="DefaultSheet", header=False
224224
)
225225

226226
with pytest.raises(ValueError, match=error_msg):
227-
DesignMatrix(design_path, "DesignSheet01", "DefaultValues")
227+
DesignMatrix(design_path, "DesignSheet", "DefaultSheet")
228228

229229

230230
@pytest.mark.parametrize(
@@ -270,13 +270,13 @@ def test_reading_design_matrix_validate_headers(tmp_path, column_names, error_ms
270270
)
271271
default_sheet_df = pd.DataFrame([["one", 1], ["b", 4], ["d", 6]])
272272
with pd.ExcelWriter(design_path) as xl_write:
273-
design_matrix_df.to_excel(xl_write, index=False, sheet_name="DesignSheet01")
273+
design_matrix_df.to_excel(xl_write, index=False, sheet_name="DesignSheet")
274274
default_sheet_df.to_excel(
275-
xl_write, index=False, sheet_name="DefaultValues", header=False
275+
xl_write, index=False, sheet_name="DefaultSheet", header=False
276276
)
277277

278278
with pytest.raises(ValueError, match=error_msg):
279-
DesignMatrix(design_path, "DesignSheet01", "DefaultValues")
279+
DesignMatrix(design_path, "DesignSheet", "DefaultSheet")
280280

281281

282282
@pytest.mark.parametrize(
@@ -306,13 +306,13 @@ def test_reading_design_matrix_validate_cells(tmp_path, values, error_msg):
306306
)
307307
default_sheet_df = pd.DataFrame()
308308
with pd.ExcelWriter(design_path) as xl_write:
309-
design_matrix_df.to_excel(xl_write, index=False, sheet_name="DesignSheet01")
309+
design_matrix_df.to_excel(xl_write, index=False, sheet_name="DesignSheet")
310310
default_sheet_df.to_excel(
311-
xl_write, index=False, sheet_name="DefaultValues", header=False
311+
xl_write, index=False, sheet_name="DefaultSheet", header=False
312312
)
313313

314314
with pytest.raises(ValueError, match=error_msg):
315-
DesignMatrix(design_path, "DesignSheet01", "DefaultValues")
315+
DesignMatrix(design_path, "DesignSheet", "DefaultSheet")
316316

317317

318318
@pytest.mark.parametrize(
@@ -352,13 +352,13 @@ def test_reading_default_sheet_validation(tmp_path, data, error_msg):
352352
)
353353
default_sheet_df = pd.DataFrame(data)
354354
with pd.ExcelWriter(design_path) as xl_write:
355-
design_matrix_df.to_excel(xl_write, index=False, sheet_name="DesignSheet01")
355+
design_matrix_df.to_excel(xl_write, index=False, sheet_name="DesignSheet")
356356
default_sheet_df.to_excel(
357-
xl_write, index=False, sheet_name="DefaultValues", header=False
357+
xl_write, index=False, sheet_name="DefaultSheet", header=False
358358
)
359359

360360
with pytest.raises(ValueError, match=error_msg):
361-
DesignMatrix(design_path, "DesignSheet01", "DefaultValues")
361+
DesignMatrix(design_path, "DesignSheet", "DefaultSheet")
362362

363363

364364
def test_default_values_used(tmp_path):
@@ -373,11 +373,11 @@ def test_default_values_used(tmp_path):
373373
)
374374
default_sheet_df = pd.DataFrame([["one", 1], ["b", 4], ["d", "case_name"]])
375375
with pd.ExcelWriter(design_path) as xl_write:
376-
design_matrix_df.to_excel(xl_write, index=False, sheet_name="DesignSheet01")
376+
design_matrix_df.to_excel(xl_write, index=False, sheet_name="DesignSheet")
377377
default_sheet_df.to_excel(
378-
xl_write, index=False, sheet_name="DefaultValues", header=False
378+
xl_write, index=False, sheet_name="DefaultSheet", header=False
379379
)
380-
design_matrix = DesignMatrix(design_path, "DesignSheet01", "DefaultValues")
380+
design_matrix = DesignMatrix(design_path, "DesignSheet", "DefaultSheet")
381381
df = design_matrix.design_matrix_df
382382
np.testing.assert_equal(df["one"], np.array([1, 1, 1, 1]))
383383
np.testing.assert_equal(df["b"], np.array([0, 2, 0, 1]))

tests/ert/unit_tests/test_libres_facade.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -276,11 +276,11 @@ def test_save_parameters_to_storage_from_design_dataframe(
276276
c_values = np.random.default_rng().uniform(-5, 5, 10)
277277
design_matrix_df = DataFrame({"a": a_values, "b": b_values, "c": c_values})
278278
with ExcelWriter(design_path) as xl_write:
279-
design_matrix_df.to_excel(xl_write, index=False, sheet_name="DesignSheet01")
279+
design_matrix_df.to_excel(xl_write, index=False, sheet_name="DesignSheet")
280280
DataFrame().to_excel(
281-
xl_write, index=False, sheet_name="DefaultValues", header=False
281+
xl_write, index=False, sheet_name="DefaultSheet", header=False
282282
)
283-
design_matrix = DesignMatrix(design_path, "DesignSheet01", "DefaultValues")
283+
design_matrix = DesignMatrix(design_path, "DesignSheet", "DefaultSheet")
284284
with open_storage(tmp_path / "storage", mode="w") as storage:
285285
experiment_id = storage.create_experiment(
286286
parameters=[design_matrix.parameter_configuration]

0 commit comments

Comments
 (0)