Skip to content

Commit dffc7d4

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 "DefaultSheet"
1 parent ea91400 commit dffc7d4

File tree

5 files changed

+53
-35
lines changed

5 files changed

+53
-35
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", "DesignSheet01")
48+
default_sheet = options.get("DEFAULT_SHEET", "DefaultValues")
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
@@ -25,7 +25,7 @@ def _create_design_matrix(filename, design_sheet_df, default_sheet_df=None):
2525
design_sheet_df.to_excel(xl_write, index=False, sheet_name="DesignSheet01")
2626
if default_sheet_df is not None:
2727
default_sheet_df.to_excel(
28-
xl_write, index=False, sheet_name="DefaultSheet", header=False
28+
xl_write, index=False, sheet_name="DefaultValues", header=False
2929
)
3030

3131

@@ -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 DESIGN_SHEET:DesignSheet01 DEFAULT_SHEET:DefaultValues
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 coeff_priors
159-
DESIGN_MATRIX poly_design.xlsx DESIGN_SHEET:DesignSheet01 DEFAULT_SHEET:DefaultSheet
159+
DESIGN_MATRIX poly_design.xlsx DESIGN_SHEET:DesignSheet01 DEFAULT_SHEET:DefaultValues
160160
INSTALL_JOB poly_eval POLY_EVAL
161161
FORWARD_MODEL poly_eval
162162
"""
@@ -252,8 +252,8 @@ def test_run_poly_example_with_multiple_design_matrix_instances():
252252
NUM_REALIZATIONS 10
253253
MIN_REALIZATIONS 1
254254
GEN_DATA POLY_RES RESULT_FILE:poly.out
255-
DESIGN_MATRIX poly_design_1.xlsx DESIGN_SHEET:DesignSheet01 DEFAULT_SHEET:DefaultSheet
256-
DESIGN_MATRIX poly_design_2.xlsx DESIGN_SHEET:DesignSheet01 DEFAULT_SHEET:DefaultSheet
255+
DESIGN_MATRIX poly_design_1.xlsx DESIGN_SHEET:DesignSheet01 DEFAULT_SHEET:DefaultValues
256+
DESIGN_MATRIX poly_design_2.xlsx DESIGN_SHEET:DesignSheet01 DEFAULT_SHEET:DefaultValues
257257
INSTALL_JOB poly_eval POLY_EVAL
258258
FORWARD_MODEL poly_eval
259259
"""
@@ -342,7 +342,7 @@ def test_design_matrix_on_esmda(experiment_mode, ensemble_name, iterations):
342342
GEN_KW COEFFS_B coeff_priors_b
343343
GEN_KW COEFFS_C coeff_priors_c
344344
GEN_DATA POLY_RES RESULT_FILE:poly.out
345-
DESIGN_MATRIX design_matrix.xlsx DESIGN_SHEET:DesignSheet01 DEFAULT_SHEET:DefaultSheet
345+
DESIGN_MATRIX design_matrix.xlsx DESIGN_SHEET:DesignSheet01 DEFAULT_SHEET:DefaultValues
346346
INSTALL_JOB poly_eval POLY_EVAL
347347
FORWARD_MODEL poly_eval
348348
"""

tests/ert/unit_tests/config/test_analysis_config.py

+20-18
Original file line numberDiff line numberDiff line change
@@ -122,34 +122,36 @@ 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"):
127-
AnalysisConfig.from_dict(
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(
128129
{
129-
ConfigKeys.DESIGN_MATRIX: [
130-
[
131-
"my_matrix.xlsx",
132-
"DESIGN_:design",
133-
"DEFAULT_SHEET:default",
134-
]
135-
],
130+
"REAL": [0, 1, 2],
131+
"a": [1, 2, 3],
132+
"b": [0, 2, 0],
136133
}
137134
)
138-
139-
140-
def test_design_matrix_without_default_sheet_raises_validation_error():
141-
with pytest.raises(ConfigValidationError, match="Missing required DEFAULT_SHEET"):
135+
default_sheet_df = pd.DataFrame([["a", 1], ["b", 4]])
136+
design_matrix_df.to_excel(xl_write, index=False, sheet_name="DesignSheet01")
137+
default_sheet_df.to_excel(
138+
xl_write, index=False, sheet_name="my_default_sheet", header=False
139+
)
140+
assert (
142141
AnalysisConfig.from_dict(
143142
{
143+
ConfigKeys.NUM_REALIZATIONS: 3,
144144
ConfigKeys.DESIGN_MATRIX: [
145145
[
146-
"my_matrix.xlsx",
147-
"DESIGN_SHEET:design",
148-
"DEFAULT_:default",
146+
os.path.abspath("my_design_matrix.xlsx"),
147+
"foo_argument:bar",
148+
"DEFAULT_SHEET:my_default_sheet",
149149
]
150150
],
151151
}
152-
)
152+
).design_matrix.design_sheet
153+
== "DesignSheet01"
154+
)
153155

154156

155157
def test_invalid_min_realization_percentage_raises_config_validation_error():

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 == "DesignSheet01"
2017+
assert config.analysis_config.design_matrix.default_sheet == "DefaultValues"

0 commit comments

Comments
 (0)