diff --git a/pyproject.toml b/pyproject.toml index fb268fa98..097670c58 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -61,7 +61,8 @@ dev = [ 'types-openpyxl', 'types-seaborn', 'types-setuptools', - 'xlwt' + 'xlsxwriter>=3.2.3', + 'xlwt', ] [project.urls] diff --git a/tests/fmudesign/conftest.py b/tests/fmudesign/conftest.py new file mode 100644 index 000000000..c3938cd49 --- /dev/null +++ b/tests/fmudesign/conftest.py @@ -0,0 +1,62 @@ +import csv +from pathlib import Path + +import pytest +from xlsxwriter import Workbook # type: ignore[import-untyped] +from xlsxwriter.worksheet import Worksheet # type: ignore[import-untyped] + +from tests.fmudesign.workbook_specs import WORKBOOK_SPECS, CellValue, WorkbookSpec + +SOURCE_DATA = Path(__file__).parent / "data" + + +def _write_cell(worksheet: Worksheet, row: int, column: int, value: CellValue) -> None: + if isinstance(value, str): + worksheet.write_string(row, column, value) + elif value is not None: + worksheet.write_number(row, column, value) + + +def _write_workbook(path: Path, spec: WorkbookSpec) -> None: + path.parent.mkdir(parents=True, exist_ok=True) + with Workbook(path) as workbook: + for sheet_name, rows in spec.items(): + worksheet = workbook.add_worksheet(sheet_name) + for row_number, values in rows.items(): + for column, value in enumerate(values): + _write_cell(worksheet, row_number - 1, column, value) + + +def _parse_csv_cell(value: str) -> CellValue: + if not value: + return None + try: + return int(value) + except ValueError: + try: + return float(value) + except ValueError: + return value + + +def _write_design_summary_workbook(path: Path) -> None: + with (SOURCE_DATA / "distributions/design.csv").open( + encoding="utf-8", newline="" + ) as stream: + rows = { + row_number: tuple(_parse_csv_cell(value) for value in values) + for row_number, values in enumerate(csv.reader(stream), start=1) + } + # The legacy Excel fixture uses the full parameter name; the CSV abbreviates it. + rows[1] = (*rows[1][:-1], "RELP_GO_ILETOFTE") + _write_workbook(path, {"DesignSheet01": rows}) + + +@pytest.fixture(scope="session") +def fmudesign_test_data(tmp_path_factory: pytest.TempPathFactory) -> Path: + test_data = tmp_path_factory.mktemp("fmudesign_test_data") + config_dir = test_data / "config" + for filename, spec in WORKBOOK_SPECS.items(): + _write_workbook(config_dir / filename, spec) + _write_design_summary_workbook(test_data / "distributions/design.xlsx") + return test_data diff --git a/tests/fmudesign/data/README.md b/tests/fmudesign/data/README.md index ed51a76fc..f789157b5 100644 --- a/tests/fmudesign/data/README.md +++ b/tests/fmudesign/data/README.md @@ -1,4 +1,7 @@ -Testdata for tornadoplots from one by one sensitivities (design matrix) -distributions: contains design matrix on fmu standard format in excel and .csv format -results: contains in place volumes exported from RMS in fmu standard csv format -config: contains yaml config files for add_webviz_tornado_onebyone.py +Text test data for FMU-design. + +- `distributions` contains a design matrix in FMU-standard CSV format. +- `results` contains in-place volumes exported from RMS in FMU-standard CSV format. +- `config` contains external seed data used by generated workbook fixtures. + +Excel workbooks are generated from `tests/fmudesign/workbook_specs.py` during tests. diff --git a/tests/fmudesign/data/config/correlations.xlsx b/tests/fmudesign/data/config/correlations.xlsx deleted file mode 100644 index 6504ee445..000000000 Binary files a/tests/fmudesign/data/config/correlations.xlsx and /dev/null differ diff --git a/tests/fmudesign/data/config/design_input_background.xlsx b/tests/fmudesign/data/config/design_input_background.xlsx deleted file mode 100755 index 10fc56542..000000000 Binary files a/tests/fmudesign/data/config/design_input_background.xlsx and /dev/null differ diff --git a/tests/fmudesign/data/config/design_input_background_extseeds.xlsx b/tests/fmudesign/data/config/design_input_background_extseeds.xlsx deleted file mode 100644 index 39d6dba41..000000000 Binary files a/tests/fmudesign/data/config/design_input_background_extseeds.xlsx and /dev/null differ diff --git a/tests/fmudesign/data/config/design_input_background_no_seed.xlsx b/tests/fmudesign/data/config/design_input_background_no_seed.xlsx deleted file mode 100644 index f6ad5dea2..000000000 Binary files a/tests/fmudesign/data/config/design_input_background_no_seed.xlsx and /dev/null differ diff --git a/tests/fmudesign/data/config/design_input_corr_discrete.xlsx b/tests/fmudesign/data/config/design_input_corr_discrete.xlsx deleted file mode 100644 index 353c69d5c..000000000 Binary files a/tests/fmudesign/data/config/design_input_corr_discrete.xlsx and /dev/null differ diff --git a/tests/fmudesign/data/config/design_input_default_no_seed.xlsx b/tests/fmudesign/data/config/design_input_default_no_seed.xlsx deleted file mode 100644 index 0882adea0..000000000 Binary files a/tests/fmudesign/data/config/design_input_default_no_seed.xlsx and /dev/null differ diff --git a/tests/fmudesign/data/config/design_input_example1.xlsx b/tests/fmudesign/data/config/design_input_example1.xlsx deleted file mode 100644 index b1ac0ec29..000000000 Binary files a/tests/fmudesign/data/config/design_input_example1.xlsx and /dev/null differ diff --git a/tests/fmudesign/data/config/design_input_example2.xlsx b/tests/fmudesign/data/config/design_input_example2.xlsx deleted file mode 100644 index 0baea6314..000000000 Binary files a/tests/fmudesign/data/config/design_input_example2.xlsx and /dev/null differ diff --git a/tests/fmudesign/data/config/design_input_example_velocities.xlsx b/tests/fmudesign/data/config/design_input_example_velocities.xlsx deleted file mode 100644 index 358d84662..000000000 Binary files a/tests/fmudesign/data/config/design_input_example_velocities.xlsx and /dev/null differ diff --git a/tests/fmudesign/data/config/design_input_many_correlations.xlsx b/tests/fmudesign/data/config/design_input_many_correlations.xlsx deleted file mode 100644 index 1056b4c0c..000000000 Binary files a/tests/fmudesign/data/config/design_input_many_correlations.xlsx and /dev/null differ diff --git a/tests/fmudesign/data/config/design_input_mc_with_correls.xlsx b/tests/fmudesign/data/config/design_input_mc_with_correls.xlsx deleted file mode 100755 index 7b895070b..000000000 Binary files a/tests/fmudesign/data/config/design_input_mc_with_correls.xlsx and /dev/null differ diff --git a/tests/fmudesign/data/config/design_input_multiple_dependencies.xlsx b/tests/fmudesign/data/config/design_input_multiple_dependencies.xlsx deleted file mode 100644 index 4c1d13de8..000000000 Binary files a/tests/fmudesign/data/config/design_input_multiple_dependencies.xlsx and /dev/null differ diff --git a/tests/fmudesign/data/config/design_input_onebyone.xlsx b/tests/fmudesign/data/config/design_input_onebyone.xlsx deleted file mode 100644 index 7331fc219..000000000 Binary files a/tests/fmudesign/data/config/design_input_onebyone.xlsx and /dev/null differ diff --git a/tests/fmudesign/data/config/design_input_singlereference.xlsx b/tests/fmudesign/data/config/design_input_singlereference.xlsx deleted file mode 100644 index f7015fa65..000000000 Binary files a/tests/fmudesign/data/config/design_input_singlereference.xlsx and /dev/null differ diff --git a/tests/fmudesign/data/config/design_input_singlereference_and_seed.xlsx b/tests/fmudesign/data/config/design_input_singlereference_and_seed.xlsx deleted file mode 100644 index 569616f80..000000000 Binary files a/tests/fmudesign/data/config/design_input_singlereference_and_seed.xlsx and /dev/null differ diff --git a/tests/fmudesign/data/config/doe1.xlsx b/tests/fmudesign/data/config/doe1.xlsx deleted file mode 100644 index f89741402..000000000 Binary files a/tests/fmudesign/data/config/doe1.xlsx and /dev/null differ diff --git a/tests/fmudesign/data/config/generateddesignmatrix.xlsx b/tests/fmudesign/data/config/generateddesignmatrix.xlsx deleted file mode 100644 index 8c0105359..000000000 Binary files a/tests/fmudesign/data/config/generateddesignmatrix.xlsx and /dev/null differ diff --git a/tests/fmudesign/data/config/seeds.xlsx b/tests/fmudesign/data/config/seeds.xlsx deleted file mode 100644 index f948116f4..000000000 Binary files a/tests/fmudesign/data/config/seeds.xlsx and /dev/null differ diff --git a/tests/fmudesign/data/distributions/design.xlsx b/tests/fmudesign/data/distributions/design.xlsx deleted file mode 100755 index cf3cba873..000000000 Binary files a/tests/fmudesign/data/distributions/design.xlsx and /dev/null differ diff --git a/tests/fmudesign/test_create_design.py b/tests/fmudesign/test_create_design.py index 675818562..d04526ea7 100644 --- a/tests/fmudesign/test_create_design.py +++ b/tests/fmudesign/test_create_design.py @@ -18,8 +18,6 @@ from semeio.fmudesign.create_design import MonteCarloSensitivity, _derive_rng from semeio.fmudesign.quality_report import print_corrmat -TESTDATA = Path(__file__).parent / "data" - @pytest.mark.integration_test @pytest.mark.parametrize("correlations", [True, False]) @@ -209,10 +207,10 @@ def gl(paramname, distname, p1, p2, p3="", p4=""): assert np.sqrt(np.mean((obs_corr - corr_values) ** 2)) < 0.02 -def test_generate_onebyone(tmpdir): +def test_generate_onebyone(tmpdir, fmudesign_test_data): """Test generation of onebyone design""" - inputfile = TESTDATA / "config/design_input_example1.xlsx" + inputfile = fmudesign_test_data / "config/design_input_example1.xlsx" input_dict = excel_to_dict(inputfile) @@ -379,14 +377,14 @@ def test_generate_onebyone(tmpdir): pytest.fail("Timestamp in Metadata sheet is not in expected format") -def test_generate_full_mc_snapshot(snapshot): +def test_generate_full_mc_snapshot(snapshot, fmudesign_test_data): """Test that full monte carlo design matrix generation remains consistent. This is a snapshot test that verifies the entire output of the design matrix generation process, including both the design values and default values. """ # Setup - inputfile = TESTDATA / "config/design_input_mc_with_correls.xlsx" + inputfile = fmudesign_test_data / "config/design_input_mc_with_correls.xlsx" input_dict = excel_to_dict(inputfile) design = DesignMatrix() @@ -415,11 +413,11 @@ def test_generate_full_mc_snapshot(snapshot): snapshot.assert_match(snapshot_str, "design_output_mc_with_correls.json") -def test_generate_full_mc_snapshot_independent(snapshot): +def test_generate_full_mc_snapshot_independent(snapshot, fmudesign_test_data): """Same config as test_generate_full_mc_snapshot, but with the opt-in 'independent' seed strategy. """ - inputfile = TESTDATA / "config/design_input_mc_with_correls.xlsx" + inputfile = fmudesign_test_data / "config/design_input_mc_with_correls.xlsx" input_dict = excel_to_dict(inputfile) input_dict["seed_strategy"] = "independent" design = DesignMatrix() @@ -440,9 +438,9 @@ def test_generate_full_mc_snapshot_independent(snapshot): snapshot.assert_match(snapshot_str, "design_output_mc_with_correls.json") -def test_generate_full_mc(tmpdir): +def test_generate_full_mc(tmpdir, fmudesign_test_data): """Test generation of full monte carlo""" - inputfile = TESTDATA / "config/design_input_mc_with_correls.xlsx" + inputfile = fmudesign_test_data / "config/design_input_mc_with_correls.xlsx" input_dict = excel_to_dict(inputfile) design = DesignMatrix() @@ -517,10 +515,10 @@ def test_generate_full_mc(tmpdir): @pytest.mark.integration_test -def test_generate_background(tmpdir): - inputfile = TESTDATA / "config/design_input_background.xlsx" +def test_generate_background(tmpdir, fmudesign_test_data): + inputfile = fmudesign_test_data / "config/design_input_background.xlsx" input_dict = excel_to_dict(inputfile) - source_file = TESTDATA / "config/doe1.xlsx" + source_file = fmudesign_test_data / "config/doe1.xlsx" dest_file = tmpdir.join("doe1.xlsx") shutil.copy2(source_file, dest_file) diff --git a/tests/fmudesign/test_designmatrix.py b/tests/fmudesign/test_designmatrix.py index e887b05af..9218db65b 100644 --- a/tests/fmudesign/test_designmatrix.py +++ b/tests/fmudesign/test_designmatrix.py @@ -10,8 +10,6 @@ from semeio.fmudesign import DesignMatrix -TESTDATA = Path(__file__).parent / "data" - def matches(pattern: str, text: str) -> bool: """Match text against a pattern where acts as a wildcard. @@ -74,13 +72,13 @@ def test_designmatrix(): @pytest.mark.integration_test -def test_endpoint(tmpdir, monkeypatch): +def test_endpoint(tmpdir, monkeypatch, fmudesign_test_data): """Test the installed endpoint Will write generated design matrices to the pytest tmpdir directory, usually /tmp/pytest-of-/ """ - designfile = TESTDATA / "config/design_input_onebyone.xlsx" + designfile = fmudesign_test_data / "config/design_input_onebyone.xlsx" # The xlsx file contains a relative path, relative to the input design sheet: dependency = ( diff --git a/tests/fmudesign/test_designsummary.py b/tests/fmudesign/test_designsummary.py index 16e858e3d..17e4ebed3 100644 --- a/tests/fmudesign/test_designsummary.py +++ b/tests/fmudesign/test_designsummary.py @@ -2,14 +2,14 @@ from semeio.fmudesign import summarize_design -TESTDATA = Path(__file__).parent / "data" +SOURCE_DATA = Path(__file__).parent / "data" -def test_designsummary(): +def test_designsummary(fmudesign_test_data): """Test import and summary of design matrix""" snorrebergdesign = summarize_design( - TESTDATA / "distributions/design.xlsx", "DesignSheet01" + fmudesign_test_data / "distributions/design.xlsx", "DesignSheet01" ) # checking dimensions and some values in summary of design matrix assert snorrebergdesign.shape == (7, 9) @@ -49,5 +49,5 @@ def test_designsummary(): assert snorrebergdesign["endreal1"].sum() == 333 # Test same also when design matrix is in .csv format - designcsv = summarize_design(TESTDATA / "distributions/design.csv") + designcsv = summarize_design(SOURCE_DATA / "distributions/design.csv") assert snorrebergdesign.equals(designcsv) diff --git a/tests/fmudesign/test_use_cases.py b/tests/fmudesign/test_use_cases.py index 2b0543fb5..886d0bdce 100644 --- a/tests/fmudesign/test_use_cases.py +++ b/tests/fmudesign/test_use_cases.py @@ -10,12 +10,10 @@ from semeio.fmudesign import DesignMatrix, excel_to_dict from semeio.fmudesign.fmudesignrunner import EXAMPLES +from tests.fmudesign.workbook_specs import DESIGN_INPUT_FILES, DESIGN_INPUT_IDS EXAMPLE_FILES = [ex.filename for ex in EXAMPLES] -TESTDATA = Path(__file__).parent / "data" -TEST_FILES = list((TESTDATA / "config").glob("design_input*.xlsx")) - def test_prediction_rejection_sampled_ensemble(tmpdir, monkeypatch): """Test making a design matrix for prediction realizations based on an @@ -163,11 +161,14 @@ def test_constant_distribution(tmpdir, monkeypatch, gen_input_sheet): @pytest.mark.integration_test -@pytest.mark.parametrize("designfile", TEST_FILES, ids=[p.stem for p in TEST_FILES]) +@pytest.mark.parametrize("designfile", DESIGN_INPUT_FILES, ids=DESIGN_INPUT_IDS) @pytest.mark.parametrize("verbosity", [0, 1, 2]) -def test_all_input_files(tmpdir, monkeypatch, designfile, verbosity): +def test_all_input_files( + tmpdir, monkeypatch, fmudesign_test_data, designfile, verbosity +): """Smoketest all files.""" + designfile = fmudesign_test_data / "config" / designfile monkeypatch.chdir(tmpdir) # Copy all example files over, to guarantee existence of dependency files @@ -203,11 +204,14 @@ def test_all_example_files_cmd_init(tmpdir, monkeypatch, designfile, verbosity): @pytest.mark.integration_test -@pytest.mark.parametrize("designfile", TEST_FILES, ids=[p.stem for p in TEST_FILES]) -def test_all_input_files_relative_paths(tmpdir, monkeypatch, designfile): +@pytest.mark.parametrize("designfile", DESIGN_INPUT_FILES, ids=DESIGN_INPUT_IDS) +def test_all_input_files_relative_paths( + tmpdir, monkeypatch, fmudesign_test_data, designfile +): """Smoketest all files, but invoke them from a directory above. This tests that relative paths in the Excel files work correctly.""" + designfile = fmudesign_test_data / "config" / designfile monkeypatch.chdir(tmpdir) copy_to = os.path.join(".", "path", "going", "down") diff --git a/tests/fmudesign/workbook_specs.py b/tests/fmudesign/workbook_specs.py new file mode 100644 index 000000000..76bc0dcb7 --- /dev/null +++ b/tests/fmudesign/workbook_specs.py @@ -0,0 +1,2404 @@ +"""Text specifications for FMU-design Excel test workbooks.""" + +type CellValue = str | int | float | None +type RowSpec = tuple[CellValue, ...] +type SheetSpec = dict[int, RowSpec] +type WorkbookSpec = dict[str, SheetSpec] + +WORKBOOK_SPECS: dict[str, WorkbookSpec] = { + "design_input_background.xlsx": { + "general_input": { + 1: ("designtype", "onebyone"), + 2: ("repeats", 5), + 3: ("rms_seeds", "default"), + 4: ("background", "background"), + 5: ("distribution_seed", "None"), + }, + "designinput": { + 1: ( + "sensname", + "numreal", + "type", + "param_name", + "senscase1", + "value1", + "senscase2", + "value2", + "dist_name", + "dist_param1", + "dist_param2", + "dist_param3", + "dist_param4", + "decimals", + "corr_sheet", + "extern_file", + ), + 2: ("background", None, "background"), + 3: ("faults", None, "scenario", "PARAM1", "low", -1, "high", 1), + 4: ("velmodel", None, "scenario", "DC_MODEL", "alternative", "alternative"), + 5: ("contacts", None, "scenario", "PARAM2", "shallow", -1, "deep", 1), + 6: (None, None, None, "PARAM3", None, -1, None, 1), + 7: (None, None, None, "PARAM4", None, -1, None, 1), + 8: ( + "multz", + 10, + "dist", + "MULTZ_ILE", + None, + None, + None, + None, + "logunif", + "0.0001", + 1, + ), + 9: ( + "sens6", + 500, + "dist", + "PARAM5", + None, + None, + None, + None, + "normal", + 3, + 1, + 1, + 5, + None, + "corr0", + ), + 10: ( + None, + None, + None, + "PARAM6", + None, + None, + None, + None, + "uniform", + 0, + 1, + None, + None, + None, + "corr0", + ), + 11: (None, None, None, "PARAM7", None, None, None, None, "triang", 1, 3, 5), + 12: ( + None, + None, + None, + "FAULT_SEAL", + None, + None, + None, + None, + "discrete", + "2018-11-02, 2018-11-03, 2018-11-04", + "0.3, 0.4, 0.3", + ), + 13: ( + "sens7", + 500, + "dist", + "PARAM9", + None, + None, + None, + None, + "lognormal", + 0, + 1, + None, + None, + 2, + "corr1", + ), + 14: ( + None, + None, + None, + "PARAM10", + None, + None, + None, + None, + "uniform", + 0, + 1, + None, + None, + 3, + "corr1", + ), + 15: ( + None, + None, + None, + "PARAM11", + None, + None, + None, + None, + "triang", + 0, + 0.5, + 1, + None, + None, + "corr1", + ), + 16: ( + None, + None, + None, + "PARAM12", + None, + None, + None, + None, + "logunif", + 1, + 10, + None, + None, + None, + "corr1", + ), + 17: ( + "sens8", + 11, + "extern", + "PARAM13", + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + "doe1.xlsx", + ), + 18: (None, None, None, "PARAM14"), + 19: (None, None, None, "PARAM15"), + 20: (None, None, None, "PARAM16"), + 21: ( + "sens9", + 500, + "dist", + "PARAM17", + None, + None, + None, + None, + "uniform_p10_p90", + 0, + 1, + ), + 22: ( + None, + None, + None, + "PARAM18", + None, + None, + None, + None, + "normal_p10_p90", + 0.1, + 0.9, + ), + 23: ( + None, + None, + None, + "PARAM19", + None, + None, + None, + None, + "triangular_p10_p90", + 0.1, + 0.5, + 0.9, + ), + 24: ( + None, + None, + None, + "PARAM20", + None, + None, + None, + None, + "pert_p10_p90", + 10, + 50, + 90, + ), + }, + "defaultvalues": { + 1: ("param_name", "default_value"), + 2: ("DEFAULT1", 0), + 3: ("DEFAULT2", "prediction"), + 4: ("DEFAULT3", 0), + 5: ("PARAM1", 0), + 6: ("DC_MODEL", "base"), + 7: ("PARAM2", 0), + 8: ("PARAM3", 0), + 9: ("PARAM4", 0), + 10: ("MULTZ_ILE", "0.1"), + 11: ("PARAM5", 0), + 12: ("PARAM6", 0), + 13: ("PARAM7", 0), + 14: ("PARAM8", 0), + 15: ("PARAM9", 0), + 16: ("PARAM10", 0), + 17: ("PARAM11", 0), + 18: ("PARAM12", 0), + 19: ("PARAM13", 0), + 20: ("PARAM14", 0), + 21: ("PARAM15", 0), + 22: ("PARAM16", 0), + 23: ("PARAM17", 1), + 24: ("PARAM18", 0), + 25: ("PARAM19", 0.5), + 26: ("FAULT_SEAL", "base"), + 27: ("PARAM20", 0.5), + }, + "corr0": { + 1: (None, "PARAM5", "PARAM6"), + 2: ("PARAM5", 1), + 3: ("PARAM6", 0.8, 1), + }, + "corr1": { + 1: (None, "PARAM9", "PARAM10", "PARAM11", "PARAM12"), + 2: ("PARAM9", 1), + 3: ("PARAM10", "0.9", 1), + 4: ("PARAM11", 0, "0.9", 1), + 5: ("PARAM12", 0, 0, 0, 1), + }, + "background": { + 1: ( + "param_name", + "dist_name", + "dist_param1", + "dist_param2", + "dist_param3", + "dist_param4", + "decimals", + "corr_sheet", + ), + 2: ("PARAM17", "normal", 0, 1, None, None, 2, "background_corr"), + 3: ("PARAM18", "uniform", 0, 1, None, None, 2, "background_corr"), + 4: ("PARAM19", "triang", 1, 3, 5, None, 2, "background_corr"), + }, + "background_corr": { + 1: (None, "PARAM17", "PARAM18", "PARAM19"), + 2: ("PARAM17", 1), + 3: ("PARAM18", "0.9", 1), + 4: ("PARAM19", 0, "0.9", 1), + }, + }, + "design_input_background_extseeds.xlsx": { + "general_input": { + 1: ("designtype", "onebyone"), + 2: ("repeats", 50), + 3: ("rms_seeds", "seeds.xlsx"), + 4: ("background", "background"), + 5: ("distribution_seed", "None"), + }, + "designinput": { + 1: ( + "sensname", + "numreal", + "type", + "param_name", + "senscase1", + "value1", + "senscase2", + "value2", + "dist_name", + "dist_param1", + "dist_param2", + "dist_param3", + "dist_param4", + "decimals", + "corr_sheet", + "extern_file", + ), + 2: ("rms_seed", None, "seed"), + 3: ("faults", None, "scenario", "PARAM1", "low", -1, "high", 1), + 4: ("velmodel", None, "scenario", "DC_MODEL", "alternative", "alternative"), + 5: ("contacts", None, "scenario", "PARAM2", "shallow", -1, "deep", 1), + 6: (None, None, None, "PARAM3", None, -1, None, 1), + 7: (None, None, None, "PARAM4", None, -1, None, 1), + 8: ( + "multz", + 10, + "dist", + "MULTZ_ILE", + None, + None, + None, + None, + "logunif", + "0.0001", + 1, + ), + 9: ( + "sens6", + 10, + "dist", + "PARAM5", + None, + None, + None, + None, + "normal", + 3, + 1, + 1, + 5, + ), + 10: (None, None, None, "PARAM6", None, None, None, None, "uniform", 0, 1), + 11: (None, None, None, "PARAM7", None, None, None, None, "triang", 1, 3, 5), + 12: ( + None, + None, + None, + "FAULT_SEAL", + None, + None, + None, + None, + "discrete", + "2018-11-02, 2018-11-03, 2018-11-04", + "0.3, 0.4, 0.3", + ), + 13: ( + "sens7", + 30, + "dist", + "PARAM9", + None, + None, + None, + None, + "lognormal", + 0, + 1, + None, + None, + 2, + "corr1", + ), + 14: ( + None, + None, + None, + "PARAM10", + None, + None, + None, + None, + "uniform", + 0, + 1, + None, + None, + 3, + "corr1", + ), + 15: ( + None, + None, + None, + "PARAM11", + None, + None, + None, + None, + "triang", + 1, + 3, + 5, + None, + None, + "corr1", + ), + 16: ( + None, + None, + None, + "PARAM12", + None, + None, + None, + None, + "logunif", + 1, + 10, + None, + None, + None, + "corr1", + ), + 17: ( + "sens8", + 11, + "extern", + "PARAM13", + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + "doe1.xlsx", + ), + 18: (None, None, None, "PARAM14"), + 19: (None, None, None, "PARAM15"), + 20: (None, None, None, "PARAM16"), + }, + "defaultvalues": { + 1: ("param_name", "default_value"), + 2: ("DEFAULT1", 0), + 3: ("DEFAULT2", "prediction"), + 4: ("DEFAULT3", 0), + 5: ("PARAM1", 0), + 6: ("DC_MODEL", "base"), + 7: ("PARAM2", 0), + 8: ("PARAM3", 0), + 9: ("PARAM4", 0), + 10: ("MULTZ_ILE", "0.1"), + 11: ("PARAM5", 0), + 12: ("PARAM6", 0), + 13: ("PARAM7", 0), + 14: ("PARAM8", 0), + 15: ("PARAM9", 0), + 16: ("PARAM10", 0), + 17: ("PARAM11", 0), + 18: ("PARAM12", 0), + 19: ("PARAM13", 0), + 20: ("PARAM14", 0), + 21: ("PARAM15", 0), + 22: ("PARAM16", 0), + 23: ("PARAM17", 0), + 24: ("PARAM18", 0), + 25: ("PARAM19", 0), + 26: ("FAULT_SEAL", "base"), + }, + "corr1": { + 1: (None, "PARAM9", "PARAM10", "PARAM11", "PARAM12"), + 2: ("PARAM9", 1), + 3: ("PARAM10", "0.9", 1), + 4: ("PARAM11", 0, "0.9", 1), + 5: ("PARAM12", 0, 0, 0, 1), + }, + "background": { + 1: ( + "param_name", + "dist_name", + "dist_param1", + "dist_param2", + "dist_param3", + "dist_param4", + "decimals", + "corr_sheet", + ), + 2: ("PARAM17", "normal", 0, 1, None, None, 2, "bcorr"), + 3: ("PARAM18", "uniform", 0, 1, None, None, 2, "bcorr"), + 4: ("PARAM19", "triang", 1, 3, 5, None, 2, "bcorr"), + }, + "bcorr": { + 1: (None, "PARAM17", "PARAM18", "PARAM19"), + 2: ("PARAM17", 1), + 3: ("PARAM18", "0.9", 1), + 4: ("PARAM19", 0, "0.9", 1), + }, + }, + "design_input_background_no_seed.xlsx": { + "general_input": { + 1: ("designtype", "onebyone"), + 2: ("repeats", 5), + 3: ("rms_seeds", "None"), + 4: ("background", "background"), + 5: ("distribution_seed", "None"), + }, + "designinput": { + 1: ( + "sensname", + "numreal", + "type", + "param_name", + "senscase1", + "value1", + "senscase2", + "value2", + "dist_name", + "dist_param1", + "dist_param2", + "dist_param3", + "dist_param4", + "decimals", + "corr_sheet", + "extern_file", + ), + 2: ("background", None, "background"), + 3: ("faults", None, "scenario", "PARAM1", "low", -1, "high", 1), + 4: ("velmodel", None, "scenario", "DC_MODEL", "alternative", "alternative"), + 5: ("contacts", None, "scenario", "PARAM2", "shallow", -1, "deep", 1), + 6: (None, None, None, "PARAM3", None, -1, None, 1), + 7: (None, None, None, "PARAM4", None, -1, None, 1), + 8: ( + "multz", + 10, + "dist", + "MULTZ_ILE", + None, + None, + None, + None, + "logunif", + "0.0001", + 1, + ), + 9: ( + "sens6", + 10, + "dist", + "PARAM5", + None, + None, + None, + None, + "normal", + 3, + 1, + 1, + 5, + ), + 10: (None, None, None, "PARAM6", None, None, None, None, "uniform", 0, 1), + 11: (None, None, None, "PARAM7", None, None, None, None, "triang", 1, 3, 5), + 12: ( + None, + None, + None, + "FAULT_SEAL", + None, + None, + None, + None, + "discrete", + "2018-11-02, 2018-11-03, 2018-11-04", + "0.3, 0.4, 0.3", + ), + 13: ( + "sens7", + 30, + "dist", + "PARAM9", + None, + None, + None, + None, + "lognormal", + 0, + 1, + None, + None, + 2, + "corr1", + ), + 14: ( + None, + None, + None, + "PARAM10", + None, + None, + None, + None, + "uniform", + 0, + 1, + None, + None, + 3, + "corr1", + ), + 15: ( + None, + None, + None, + "PARAM11", + None, + None, + None, + None, + "triang", + 1, + 1.5, + 2, + None, + None, + "corr1", + ), + 16: ( + None, + None, + None, + "PARAM12", + None, + None, + None, + None, + "logunif", + 1, + 10, + None, + None, + None, + "corr1", + ), + 17: ( + "sens8", + 11, + "extern", + "PARAM13", + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + "doe1.xlsx", + ), + 18: (None, None, None, "PARAM14"), + 19: (None, None, None, "PARAM15"), + 20: (None, None, None, "PARAM16"), + }, + "defaultvalues": { + 1: ("param_name", "default_value"), + 2: ("DEFAULT1", 0), + 3: ("DEFAULT2", "prediction"), + 4: ("DEFAULT3", 0), + 5: ("PARAM1", 0), + 6: ("DC_MODEL", "base"), + 7: ("PARAM2", 0), + 8: ("PARAM3", 0), + 9: ("PARAM4", 0), + 10: ("MULTZ_ILE", "0.1"), + 11: ("PARAM5", 0), + 12: ("PARAM6", 0), + 13: ("PARAM7", 0), + 14: ("PARAM8", 0), + 15: ("PARAM9", 0), + 16: ("PARAM10", 0), + 17: ("PARAM11", 0), + 18: ("PARAM12", 0), + 19: ("PARAM13", 0), + 20: ("PARAM14", 0), + 21: ("PARAM15", 0), + 22: ("PARAM16", 0), + 23: ("PARAM17", 0), + 24: ("PARAM18", 0), + 25: ("PARAM19", 0), + 26: ("FAULT_SEAL", "base"), + }, + "corr1": { + 1: (None, "PARAM9", "PARAM10", "PARAM11", "PARAM12"), + 2: ("PARAM9", 1), + 3: ("PARAM10", "0.9", 1), + 4: ("PARAM11", 0, "0.9", 1), + 5: ("PARAM12", 0, 0, 0, 1), + }, + "background": { + 1: ( + "param_name", + "dist_name", + "dist_param1", + "dist_param2", + "dist_param3", + "dist_param4", + "decimals", + "corr_sheet", + ), + 2: ("PARAM17", "normal", 0, 1, None, None, 2, "background_corr"), + 3: ("PARAM18", "uniform", 0, 1, None, None, 2, "background_corr"), + 4: ("PARAM19", "triang", 1, 3, 5, None, 2, "background_corr"), + }, + "background_corr": { + 1: (None, "PARAM17", "PARAM18", "PARAM19"), + 2: ("PARAM17", 1), + 3: ("PARAM18", "0.9", 1), + 4: ("PARAM19", 0, "0.9", 1), + }, + }, + "design_input_corr_discrete.xlsx": { + "general_input": { + 1: ("designtype", "onebyone"), + 2: ("repeats", 1), + 3: ("rms_seeds", "default"), + 4: ("background", "None"), + 5: ("distribution_seed", 1030), + }, + "defaultvalues": { + 1: ("param_name", "default_values"), + 2: ("AFAC", 1), + 3: ("BFAC", 1), + 4: ("CFAC", 1), + }, + "designinput": { + 1: ( + "sensname", + "numreal", + "type", + "param_name", + "senscase1", + "value1", + "senscase2", + "value2", + "dist_name", + "dist_param1", + "dist_param2", + "dist_param3", + "dist_param4", + "decimals", + "corr_sheet", + "extern_file", + ), + 2: ( + "mc1", + 50, + "dist", + "AFAC", + None, + None, + None, + None, + "discrete", + "1,2,3", + "3,4,3", + None, + None, + None, + "corr_abc", + ), + 3: ( + None, + None, + None, + "BFAC", + None, + None, + None, + None, + "discrete", + "1,2,3", + "3,4,3", + None, + None, + None, + "corr_abc", + ), + 4: ( + None, + None, + None, + "CFAC", + None, + None, + None, + None, + "discrete", + "1,2,3", + "3,4,3", + None, + None, + None, + "corr_abc", + ), + }, + "corr_abc": { + 1: (None, "AFAC", "BFAC", "CFAC"), + 2: ("AFAC", 1), + 3: ("BFAC", 0.9, 1), + 4: ("CFAC", 0.9, 0.9, 1), + }, + }, + "design_input_default_no_seed.xlsx": { + "general_input": { + 1: ("designtype", "onebyone"), + 2: ("repeats", 1), + 3: ("rms_seeds", "None"), + 4: ("background", "None"), + 5: ("distribution_seed", "None"), + }, + "designinput": { + 1: ( + "sensname", + "numreal", + "type", + "param_name", + "senscase1", + "value1", + "senscase2", + "value2", + "dist_name", + "dist_param1", + "dist_param2", + "dist_param3", + "dist_param4", + "decimals", + "corr_sheet", + "extern_file", + ), + 2: ("defaultvalues", 1, "ref"), + 3: ("faults", 1, "scenario", "FAULT_POSITION", "east", -1, "west", 1), + 4: ("velmodel", 1, "scenario", "VEL_MODEL", "alternative", 2), + 5: ("contacts", 1, "scenario", "OWC1", "shallow", 2600, "deep", 2700), + 6: (None, None, None, "OWC2", None, 2700, None, 2800), + 7: (None, None, None, "OWC3", None, 2800, None, 2900), + 8: ( + "multz", + 10, + "dist", + "MULTZ_ILE", + None, + None, + None, + None, + "logunif", + "0.0001", + 1, + None, + None, + 4, + ), + }, + "defaultvalues": { + 1: ("param_name", "default_value"), + 2: ("RMS_SEED", 1000), + 3: ("FAULT_POSITION", 0), + 4: ("VEL_MODEL", 1), + 5: ("OWC1", 2650), + 6: ("OWC2", 2750), + 7: ("OWC3", 2850), + 8: ("MULTZ_ILE", 0.1), + 9: ("PARAM1", 0), + 10: ("PARAM2", "0.1"), + 11: ("PARAM3", 0), + 12: ("PARAM4", 0), + }, + }, + "design_input_example1.xlsx": { + "general_input": { + 1: ("designtype", "onebyone"), + 2: ("repeats", 10), + 3: ("rms_seeds", "default"), + 4: ("background", "None"), + 5: ("distribution_seed", "None"), + }, + "designinput": { + 1: ( + "sensname", + "numreal", + "type", + "param_name", + "senscase1", + "value1", + "senscase2", + "value2", + "dist_name", + "dist_param1", + "dist_param2", + "dist_param3", + "dist_param4", + "decimals", + "corr_sheet", + "extern_file", + ), + 2: ("rms_seed", None, "seed"), + 3: ("faults", None, "scenario", "FAULT_POSITION", "east", -1, "west", 1), + 4: ("velmodel", None, "scenario", "DC_MODEL", "alternative", "alternative"), + 5: ("contacts", None, "scenario", "OWC1", "shallow", 2600, "deep", 2700), + 6: (None, None, None, "OWC2", None, 2700, None, 2800), + 7: (None, None, None, "OWC3", None, 2800, None, 2900), + 8: ( + "multz", + 20, + "dist", + "MULTZ_ILE", + None, + None, + None, + None, + "logunif", + "0.0001", + 1, + ), + }, + "defaultvalues": { + 1: ("param_name", "default_value"), + 2: ("RMS_SEED", 1000), + 3: ("FAULT_POSITION", 0), + 4: ("DC_MODEL", "base"), + 5: ("OWC1", 2650), + 6: ("OWC2", 2750), + 7: ("OWC3", 2850), + 8: ("MULTZ_ILE", "0.1"), + 9: ("PARAM1", 0), + 10: ("PARAM2", "0.1"), + 11: ("PARAM3", 0), + 12: ("PARAM4", 0), + }, + }, + "design_input_example2.xlsx": { + "general_input": { + 1: ("designtype", "onebyone"), + 2: ("repeats", 5), + 3: ("rms_seeds", "default"), + 4: ("background", "None"), + 5: ("distribution_seed", 1035), + }, + "designinput": { + 1: ( + "sensname", + "numreal", + "type", + "param_name", + "senscase1", + "value1", + "senscase2", + "value2", + "dist_name", + "dist_param1", + "dist_param2", + "dist_param3", + "dist_param4", + "decimals", + "corr_sheet", + "extern_file", + ), + 2: ("rms_seed", None, "seed"), + 3: ("faults", None, "scenario", "PARAM1", "low", -1, "high", 1), + 4: ("velmodel", None, "scenario", "DC_MODEL", "alternative", "alternative"), + 5: ("contacts", None, "scenario", "PARAM2", "shallow", -1, "deep", 1), + 6: (None, None, None, "PARAM3", None, -1, None, 1), + 7: (None, None, None, "PARAM4", None, -1, None, 1), + 8: ( + "multz", + 20, + "dist", + "MULTZ_ILE", + None, + None, + None, + None, + "logunif", + 0.0001, + 1, + ), + 9: ( + "sens6", + 30, + "dist", + "PARAM5", + None, + None, + None, + None, + "normal", + 3, + 1, + 1, + 5, + ), + 10: (None, None, None, "PARAM6", None, None, None, None, "uniform", 0, 1), + 11: (None, None, None, "PARAM7", None, None, None, None, "triang", 1, 3, 5), + 12: ( + None, + None, + None, + "FAULT_SEAL", + None, + None, + None, + None, + "discrete", + "2018-11-02, 2018-11-03, 2018-11-04", + "0.3, 0.4, 0.3", + ), + 13: ( + "sens7", + 100, + "dist", + "PARAM9", + None, + None, + None, + None, + "lognormal", + 2, + 2, + None, + None, + 2, + "corr1", + ), + 14: ( + None, + None, + None, + "PARAM10", + None, + None, + None, + None, + "uniform", + 0, + 1, + None, + None, + 3, + "corr1", + ), + 15: ( + None, + None, + None, + "PARAM11", + None, + None, + None, + None, + "pert", + 1, + 3, + 5, + None, + None, + "corr1", + ), + 16: ( + None, + None, + None, + "PARAM12", + None, + None, + None, + None, + "logunif", + 0.0001, + 10, + None, + None, + None, + "corr1", + ), + 17: ( + "sens8", + 10, + "extern", + "PARAM13", + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + "doe1.xlsx", + ), + 18: (None, None, None, "PARAM14"), + 19: (None, None, None, "PARAM15"), + 20: (None, None, None, "PARAM16"), + }, + "defaultvalues": { + 1: ("param_name", "default_value"), + 2: ("DEFAULT1", 0), + 3: ("DEFAULT2", "prediction"), + 4: ("DEFAULT3", 0), + 5: ("PARAM1", 0), + 6: ("DC_MODEL", "base"), + 7: ("PARAM2", 0), + 8: ("PARAM3", 0), + 9: ("PARAM4", 0), + 10: ("MULTZ_ILE", "0.1"), + 11: ("PARAM5", 0), + 12: ("PARAM6", 0), + 13: ("PARAM7", 0), + 14: ("PARAM8", 0), + 15: ("PARAM9", 0), + 16: ("PARAM10", 0), + 17: ("PARAM11", 0), + 18: ("PARAM12", 0), + 19: ("PARAM13", 0), + 20: ("PARAM14", 0), + 21: ("PARAM15", 0), + 22: ("PARAM16", 0), + 23: ("PARAM17", 0), + 24: ("PARAM18", 0), + 25: ("PARAM19", 0), + 26: ("FAULT_SEAL", "base"), + 27: ("CONSTANT", "a_constant"), + }, + "corr1": { + 1: (None, "PARAM9", "PARAM10", "PARAM11", "PARAM12"), + 2: ("PARAM9", 1), + 3: ("PARAM10", "0.9", 1), + 4: ("PARAM11", 0, "0.9", 1), + 5: ("PARAM12", 0, 0, 0, 1), + }, + }, + "design_input_example_velocities.xlsx": { + "general_input": { + 1: ("designtype", "onebyone"), + 2: ("repeats", 10), + 3: ("rms_seeds", "default"), + 4: ("background", "None"), + 5: ("distribution_seed", "None"), + }, + "designinput": { + 1: ( + "sensname", + "numreal", + "type", + "param_name", + "senscase1", + "value1", + "senscase2", + "value2", + "dist_name", + "dist_param1", + "dist_param2", + "dist_param3", + "dist_param4", + "decimals", + "corr_sheet", + "extern_file", + ), + 2: ( + "rms_seed", + None, + "seed", + "COHIBA_MODE", + None, + None, + None, + None, + "const", + "prediction", + ), + 3: ( + "velmod1", + None, + "seed", + "COHIBA_MODE", + None, + None, + None, + None, + "const", + "simulation", + ), + 4: (None, None, None, "VEL_MODEL", None, None, None, None, "const", 1), + 5: ( + "velmod2", + None, + "seed", + "COHIBA_MODE", + None, + None, + None, + None, + "const", + "simulation", + ), + 6: (None, None, None, "VEL_MODEL", None, None, None, None, "const", 2), + 7: ( + "vel_combined", + 30, + "dist", + "COHIBA_MODE", + None, + None, + None, + None, + "const", + "simulation", + ), + 8: ( + None, + None, + None, + "VEL_MODEL", + None, + None, + None, + None, + "discrete", + "1, 2", + "0.6, 0.4", + ), + }, + "defaultvalues": { + 1: ("param_name", "default_value"), + 2: ("RMS_SEED", 1000), + 3: ("FAULT_POSITION", 0), + 4: ("VEL_MODEL", 1), + 5: ("OWC1", 2650), + 6: ("OWC2", 2750), + 7: ("OWC3", 2850), + 8: ("MULTZ_ILE", 0.1), + 9: ("PARAM1", 0), + 10: ("PARAM2", "0.1"), + 11: ("PARAM3", 0), + 12: ("PARAM4", 0), + 13: ("COHIBA_MODE", "prediction"), + }, + }, + "design_input_many_correlations.xlsx": { + "general_input": { + 1: ("designtype", "onebyone"), + 2: ("repeats", 1), + 3: ("rms_seeds", "default"), + 4: ("background", "None"), + 5: ("distribution_seed", 0), + 6: ("correlation_iterations", 999), + }, + "defaultvalues": { + 1: ("param_name", "default_values"), + 2: ("A", 1), + 3: ("B", 1), + 4: ("C", 1), + 5: ("D", 1), + 6: ("E", 1), + 7: ("F", 1), + }, + "designinput": { + 1: ( + "sensname", + "numreal", + "type", + "param_name", + "senscase1", + "value1", + "senscase2", + "value2", + "dist_name", + "dist_param1", + "dist_param2", + "dist_param3", + "dist_param4", + "decimals", + "corr_sheet", + "extern_file", + ), + 2: ( + "mc1", + 999, + "dist", + "A", + None, + None, + None, + None, + "lognorm", + 1, + 0.5, + None, + None, + None, + "correlations", + ), + 3: ( + None, + None, + None, + "B", + None, + None, + None, + None, + "lognorm", + 2, + 0.6, + None, + None, + None, + "correlations", + ), + 4: ( + None, + None, + None, + "C", + None, + None, + None, + None, + "lognorm", + 3, + 0.7, + None, + None, + None, + "correlations", + ), + 5: ( + None, + None, + None, + "D", + None, + None, + None, + None, + "lognorm", + 4, + 0.8, + None, + None, + None, + "correlations", + ), + 6: ( + None, + None, + None, + "E", + None, + None, + None, + None, + "lognorm", + 5, + 0.9, + None, + None, + None, + "correlations", + ), + 7: ( + None, + None, + None, + "F", + None, + None, + None, + None, + "lognorm", + 6, + 1, + None, + None, + None, + "correlations", + ), + }, + "correlations": { + 1: (None, "A", "B", "C", "D", "E", "F"), + 2: ("A", 1), + 3: ("B", 0.8, 1), + 4: ("C", 0.8, 0.8, 1), + 5: ("D", 0.8, 0.8, 0.8, 1), + 6: ("E", 0.8, 0.8, 0.8, 0.8, 1), + 7: ("F", 0.8, 0.8, 0.8, 0.8, 0.8, 1), + }, + }, + "design_input_mc_with_correls.xlsx": { + "general_input": { + 1: ("designtype", "onebyone"), + 2: ("repeats", 1), + 3: ("rms_seeds", "default"), + 4: ("distribution_seed", 555), + }, + "designinput": { + 1: ( + "sensname", + "numreal", + "type", + "param_name", + "senscase1", + "value1", + "senscase2", + "value2", + "dist_name", + "dist_param1", + "dist_param2", + "dist_param3", + "dist_param4", + "decimals", + "corr_sheet", + "extern_file", + "dependencies", + ), + 2: ( + "montecarlo", + 500, + "dist", + "PARAM1", + None, + None, + None, + None, + "triang", + 0.025, + 0.035, + 0.045, + None, + 3, + "corr1", + ), + 3: ( + None, + None, + None, + "PARAM2", + None, + None, + None, + None, + "norm", + 0, + 1, + -1, + 1, + 2, + "corr1", + ), + 4: ( + None, + None, + None, + "PARAM3", + None, + None, + None, + None, + "logn", + 1, + 10, + None, + None, + 3, + "corr1", + ), + 5: ( + None, + None, + None, + "OWC1", + None, + None, + None, + None, + "unif", + 2500, + 2550, + None, + None, + 1, + "corr2", + ), + 6: ( + None, + None, + None, + "OWC2", + None, + None, + None, + None, + "triang", + 2430, + 2470, + 2500, + None, + 1, + "corr2", + ), + 7: ( + None, + None, + None, + "OWC3", + None, + None, + None, + None, + "triang", + 2400, + 2450, + 2500, + None, + 1, + "corr2", + ), + 8: ( + None, + None, + None, + "DATO", + None, + None, + None, + None, + "disc", + "2018-11-02, 2018-11-03, 2018-11-04", + "0.3, 0.4, 0.3", + None, + None, + None, + "corr3", + None, + "depend1", + ), + 9: ( + None, + None, + None, + "NTG1", + None, + None, + None, + None, + "triang", + 0.75, + 0.8, + 1, + None, + 2, + "corr3", + ), + 10: ( + None, + None, + None, + "NTG2", + None, + None, + None, + None, + "pert", + 0.5, + 0.6, + 0.65, + None, + 2, + ), + 11: ( + None, + None, + None, + "FAULTSEAL", + None, + None, + None, + None, + "logunif", + 0.001, + 1, + None, + None, + 3, + ), + }, + "corr1": { + 1: (None, "PARAM1", "PARAM2", "PARAM3"), + 2: ("PARAM1", 1), + 3: ("PARAM2", 0, 1), + 4: ("PARAM3", 0.2, 0, 1), + }, + "corr2": { + 1: (None, "OWC1", "OWC2", "OWC3"), + 2: ("OWC1", 1), + 3: ("OWC2", 0.5, 1), + 4: ("OWC3", -0.7, -0.7, 1), + }, + "corr3": {1: (None, "DATO", "NTG1"), 2: ("DATO", 1), 3: ("NTG1", 0.8, 1)}, + "depend1": { + 1: ("DATO", "DERIVED_PARAM1", "DERIVED_PARAM2"), + 2: ("2018-11-02", 1, "a"), + 3: ("2018-11-03", 2, "b"), + 4: ("2018-11-04", 3, "c"), + }, + "defaultvalues": { + 1: ("param_name", "default_value"), + 2: ("RMS_SEED", 1000), + 3: ("HUM_MODE", "PREDICTION"), + 4: ("HUM_METHOD", "SIMPLE"), + 5: ("INJ_UNC", 0), + 6: ("PARAM1", 0.035), + 7: ("PARAM2", 0.05), + 8: ("PARAM3", 0.02), + 9: ("OWC1", 0.001), + 10: ("OWC2", 0.1), + 11: ("OWC3", 0.07), + 12: ("NTG1", 0.25), + 13: ("NTG2", 0.45), + 14: ("NTG6", 0.8), + 15: ("DATO", "2018-11-03"), + 16: ("FAULTSEAL", 0.01), + 17: ("DERIVED_PARAM1", 1), + 18: ("DERIVED_PARAM2", "a"), + }, + "INFO": { + 1: ( + ( + "This file is an example for " + "configuration of design matrix " + "for one-by-one sensititivities" + ), + ), + 2: ( + ( + "and contains the set up for the " + "three mandatory pages. For more " + "advanced set ups consult the " + "documentation" + ), + ), + 4: ( + "From FMU wiki portal :", + None, + "One-by-one sensitivities and Tornado plots", + ), + 5: ( + "Documentation for set up:", + None, + "https://sdp.equinor.com/wikidocs/FMU/lib/fmu/tools/html/examples.html#create-design-matrix-for-one-by-one-sensitivities", + ), + 7: ( + "Run with command", + None, + "fmudesign design_input_template.xlsx", + None, + None, + None, + "from the command line", + ), + 9: ( + "Excel files can be edited in Linux using", + None, + None, + "oocalc filename.xlsx", + ), + }, + }, + "design_input_multiple_dependencies.xlsx": { + "general_input": { + 1: ("designtype", "onebyone"), + 2: ("repeats", 1), + 3: ("rms_seeds", "default"), + 4: ("distribution_seed", 555), + }, + "designinput": { + 1: ( + "sensname", + "numreal", + "type", + "param_name", + "senscase1", + "value1", + "senscase2", + "value2", + "dist_name", + "dist_param1", + "dist_param2", + "dist_param3", + "dist_param4", + "decimals", + "corr_sheet", + "extern_file", + "dependencies", + ), + 2: ( + "montecarlo1", + 50, + "dist", + "TRIANG", + None, + None, + None, + None, + "triang", + 0.025, + 0.035, + 0.045, + ), + 3: ( + None, + None, + None, + "DATO", + None, + None, + None, + None, + "disc", + "2018-11-02, 2018-11-03, 2018-11-04", + "0.3, 0.4, 0.3", + None, + None, + None, + None, + None, + "depend1", + ), + 4: (None, None, None, "BETA", None, None, None, None, "beta", 5, 2, 0, 1), + 5: ( + None, + None, + None, + "NORM", + None, + None, + None, + None, + "norm", + 0.5, + 0.2, + None, + None, + 2, + ), + 6: ( + "montecarlo2", + 50, + "dist", + "TRIANG", + None, + None, + None, + None, + "triang", + 0.025, + 0.025, + 0.045, + ), + 7: ( + None, + None, + None, + "WELLS", + None, + None, + None, + None, + "disc", + "0, 1, 2, 3, 4", + "0.35, 0.25, 0.2, 0.15, 0.05", + None, + None, + None, + None, + None, + "depend2", + ), + 8: ( + None, + None, + None, + "NORM2", + None, + None, + None, + None, + "norm", + -0.5, + 0.2, + None, + None, + 2, + None, + None, + "depend3", + ), + 9: ("contacts", None, "scenario", "OWC1", "shallow", 1700, "deep", 2700), + 10: (None, None, None, "OWC2", None, 1800, None, 2800), + 11: (None, None, None, "OWC3", None, 1900, None, 2900), + 12: ("rms_seed", None, "seed"), + 13: ("defaultvalues", 1, "ref"), + }, + "depend1": { + 1: ("DATO", "DERIVED_PARAM1", "DERIVED_PARAM2"), + 2: ("2018-11-02", 1, "a"), + 3: ("2018-11-03", 2, "b"), + 4: ("2018-11-04", 3, "c"), + }, + "depend2": { + 1: ("WELLS", "DERIVED_PARAM1", "DERIVED_PARAM2"), + 2: (0, 5, "a"), + 3: (1, 6, "b"), + 4: (2, 7, "c"), + 5: (3, 8, "d"), + 6: (4, 9, "e"), + }, + "depend3": {1: ("NORM2", "NORM3")}, + "defaultvalues": { + 1: ("param_name", "default_value"), + 2: ("RMS_SEED", 1000), + 3: ("TRIANG", 0.035), + 4: ("DATO", "2018-11-03"), + 5: ("BETA", "0.7"), + 6: ("NORM", 0.5), + 7: ("WELLS", 1), + 8: ("NORM2", -0.5), + 9: ("OWC1", 1700), + 10: ("OWC2", 1800), + 11: ("OWC3", 1900), + 12: ("DERIVED_PARAM1 ", 2), + 13: ("DERIVED_PARAM2", "b"), + 14: ("NORM3", -0.5), + }, + "INFO": { + 1: ( + ( + "This file is an example for " + "configuration of design " + "matrix for one-by-one " + "sensititivities" + ), + ), + 2: ( + ( + "and contains the set up for " + "the three mandatory pages. " + "For more advanced set ups " + "consult the documentation" + ), + ), + 4: ( + "From FMU wiki portal :", + None, + "One-by-one sensitivities and Tornado plots", + ), + 5: ( + "Documentation for set up:", + None, + "https://sdp.equinor.com/wikidocs/FMU/lib/fmu/tools/html/examples.html#create-design-matrix-for-one-by-one-sensitivities", + ), + 7: ( + "Run with command", + None, + "fmudesign design_input_template.xlsx", + None, + None, + None, + "from the command line", + ), + 9: ( + "Excel files can be edited in Linux using", + None, + None, + "oocalc filename.xlsx", + ), + }, + }, + "design_input_onebyone.xlsx": { + "general_input": { + 1: ("designtype", "onebyone"), + 2: ("repeats", 5), + 3: ("rms_seeds", "default"), + 4: ("background", "doe1.xlsx"), + 5: ("distribution_seed", 1234), + }, + "designinput": { + 1: ( + "sensname", + "numreal", + "type", + "param_name", + "senscase1", + "value1", + "senscase2", + "value2", + "dist_name", + "dist_param1", + "dist_param2", + "dist_param3", + "dist_param4", + "decimals", + "corr_sheet", + "extern_file", + ), + 2: ("seed", None, "seed"), + 3: ("faults", None, "scenario", "PARAM1", "low", -1, "high", 1), + 4: ("velmodel", None, "scenario", "DC_MODEL", "alternative", "alternative"), + 5: ("contacts", None, "scenario", "PARAM2", "shallow", -1, "deep", 1), + 6: (None, None, None, "PARAM3", None, -1, None, 1), + 7: (None, None, None, "PARAM4", None, -1, None, 1), + 8: ( + "multz", + 10, + "dist", + "MULTZ_ILE", + None, + None, + None, + None, + "logunif", + "0.0001", + 1, + ), + 9: ( + "sens6", + 10, + "dist", + "PARAM5", + None, + None, + None, + None, + "normal", + 3, + 1, + 1, + 5, + ), + 10: (None, None, None, "PARAM6", None, None, None, None, "uniform", 0, 1), + 11: (None, None, None, "PARAM7", None, None, None, None, "triang", 1, 3, 5), + 12: ( + None, + None, + None, + "FAULT_SEAL", + None, + None, + None, + None, + "discrete", + "2018-11-02, 2018-11-03, 2018-11-04", + "0.3, 0.4, 0.3", + ), + 13: ( + "sens7", + 30, + "dist", + "PARAM9", + None, + None, + None, + None, + "lognormal", + 0, + 1, + None, + None, + 2, + "corr1", + ), + 14: ( + None, + None, + None, + "PARAM10", + None, + None, + None, + None, + "uniform", + 0, + 1, + None, + None, + 3, + "corr1", + ), + 15: ( + None, + None, + None, + "PARAM11", + None, + None, + None, + None, + "triang", + 1, + 3, + 5, + None, + None, + "corr1", + ), + 16: ( + None, + None, + None, + "PARAM12", + None, + None, + None, + None, + "logunif", + 1, + 10, + None, + None, + None, + "corr1", + ), + 17: ( + "sens8", + 11, + "extern", + "PARAM13", + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + "doe1.xlsx", + ), + 18: (None, None, None, "PARAM14"), + 19: (None, None, None, "PARAM15"), + 20: (None, None, None, "PARAM16"), + }, + "defaultvalues": { + 1: ("param_name", "default_value"), + 2: ("DEFAULT1", 0), + 3: ("DEFAULT2", "prediction"), + 4: ("DEFAULT3", 0), + 5: ("PARAM1", 0), + 6: ("DC_MODEL", "base"), + 7: ("PARAM2", 0), + 8: ("PARAM3", 0), + 9: ("PARAM4", 0), + 10: ("MULTZ_ILE", "0.1"), + 11: ("PARAM5", 0), + 12: ("PARAM6", 0), + 13: ("PARAM7", 0), + 14: ("PARAM8", 0), + 15: ("PARAM9", 0), + 16: ("PARAM10", 0), + 17: ("PARAM11", 0), + 18: ("PARAM12", 0), + 19: ("PARAM13", 0), + 20: ("PARAM14", 0), + 21: ("PARAM15", 0), + 22: ("PARAM16", 0), + 23: ("PARAM17", 0), + 24: ("PARAM18", 0), + 25: ("PARAM19", 0), + 26: ("FAULT_SEAL", "base"), + }, + "corr1": { + 1: (None, "PARAM9", "PARAM10", "PARAM11", "PARAM12"), + 2: ("PARAM9", 1), + 3: ("PARAM10", "0.9", 1), + 4: ("PARAM11", 0, "0.9", 1), + 5: ("PARAM12", 0, 0, 0, 1), + }, + "background": { + 1: ( + "param_name", + "dist_name", + "dist_param1", + "dist_param2", + "dist_param3", + "dist_param4", + "decimals", + "corr_sheet", + ), + 2: ("PARAM20", "normal", 0, 1, None, None, 2, "background_corr"), + 3: ("PARAM21", "uniform", 0, 1, None, None, 2), + 4: ("PARAM22", "triang", 1, 3, 5, None, 2), + }, + "background_corr": { + 1: (None, "PARAM20", "PARAM21", "PARAM22"), + 2: ("PARAM20", 1), + 3: ("PARAM21", "0.9", 1), + 4: ("PARAM22", 0, "0.9", 1), + }, + }, + "design_input_singlereference.xlsx": { + "general_input": { + 1: ("designtype", "onebyone"), + 2: ("repeats", 1), + 3: ("rms_seeds", "None"), + 4: ("background", "None"), + 5: ("distribution_seed", 42), + }, + "designinput": { + 1: ( + "sensname", + "numreal", + "type", + "param_name", + "senscase1", + "value1", + "senscase2", + "value2", + "dist_name", + "dist_param1", + "dist_param2", + "dist_param3", + "dist_param4", + "decimals", + "corr_sheet", + "extern_file", + ), + 2: ("defaultvalues", 1, "ref"), + 3: ("faults", 1, "scenario", "FAULT_POSITION", "east", -1, "west", 1), + 4: ("velmodel", 1, "scenario", "VEL_MODEL", "alternative", 2), + 5: ("contacts", 1, "scenario", "OWC1", "shallow", 2600, "deep", 2700), + 6: (None, None, None, "OWC2", None, 2700, None, 2800), + 7: (None, None, None, "OWC3", None, 2800, None, 2900), + 8: ( + "multz", + 10, + "dist", + "MULTZ_ILE", + None, + None, + None, + None, + "logunif", + "0.0001", + 1, + None, + None, + 4, + ), + }, + "defaultvalues": { + 1: ("param_name", "default_value"), + 2: ("RMS_SEED", 1000), + 3: ("FAULT_POSITION", 0), + 4: ("VEL_MODEL", "base"), + 5: ("OWC1", 2650), + 6: ("OWC2", 2750), + 7: ("OWC3", 2850), + 8: ("MULTZ_ILE", 0.1), + 9: ("PARAM1", 0), + 10: ("PARAM2", "0.1"), + 11: ("PARAM3", 0), + 12: ("PARAM4", 0), + }, + }, + "design_input_singlereference_and_seed.xlsx": { + "general_input": { + 1: ("designtype", "onebyone"), + 2: ("repeats", 10), + 3: ("rms_seeds", "default"), + 4: ("background", "None"), + 5: ("distribution_seed", 666), + }, + "designinput": { + 1: ( + "sensname", + "numreal", + "type", + "param_name", + "senscase1", + "value1", + "senscase2", + "value2", + "dist_name", + "dist_param1", + "dist_param2", + "dist_param3", + "dist_param4", + "decimals", + "corr_sheet", + "extern_file", + ), + 2: ("defaultvalues", 1, "ref"), + 3: ("rms_seed", None, "seed"), + 4: ("faults", None, "scenario", "FAULT_POSITION", "east", -1, "west", 1), + 5: ("velmodel", None, "scenario", "VEL_MODEL", "alternative", 2), + 6: ("contacts", None, "scenario", "OWC1", "shallow", 2600, "deep", 2700), + 7: (None, None, None, "OWC2", None, 2700, None, 2800), + 8: (None, None, None, "OWC3", None, 2800, None, 2900), + 9: ( + "multz", + 10, + "dist", + "MULTZ_ILE", + None, + None, + None, + None, + "logunif", + "0.0001", + 1, + None, + None, + 4, + ), + }, + "defaultvalues": { + 1: ("param_name", "default_value"), + 2: ("RMS_SEED", 1111), + 3: ("FAULT_POSITION", 0), + 4: ("VEL_MODEL", "base"), + 5: ("OWC1", 2650), + 6: ("OWC2", 2750), + 7: ("OWC3", 2850), + 8: ("MULTZ_ILE", 0.1), + 9: ("PARAM1", 0), + 10: ("PARAM2", "0.1"), + 11: ("PARAM3", 0), + 12: ("PARAM4", 0), + }, + }, + "doe1.xlsx": { + "Sheet1": { + 1: ("PARAM13", "PARAM14", "PARAM15", "PARAM16"), + 2: (0, 1, 2, "2018-11-01"), + 3: (1, 2, 3, "2018-11-02"), + 4: (2, 3, 4, "2018-11-03"), + 5: (3, 4, 5, "2018-11-04"), + 6: (4, 5, 6, "2018-11-05"), + 7: (5, 6, 7, "2018-11-06"), + 8: (6, 7, 8, "2018-11-07"), + 9: (7, 8, 9, "2018-11-08"), + 10: (8, 9, 10, "2018-11-09"), + 11: (9, 10, 11, "2018-11-10"), + 12: (10, 11, 12, "2018-11-11"), + } + }, + "seeds.xlsx": { + "Sheet1": { + 1: (2000,), + 2: (2001,), + 3: (2002,), + 4: (2003,), + 5: (2004,), + 6: (2005,), + 7: (2006,), + 8: (2007,), + 9: (2008,), + 10: (2009,), + 11: (2010,), + 12: (2011,), + 13: (2012,), + 14: (2013,), + 15: (2014,), + 16: (2015,), + 17: (2016,), + 18: (2017,), + 19: (2018,), + 20: (2019,), + 21: (2020,), + 22: (2021,), + 23: (2022,), + 24: (2023,), + 25: (2024,), + 26: (2025,), + 27: (2026,), + 28: (2027,), + 29: (2028,), + 30: (2029,), + 31: (2030,), + 32: (2031,), + 33: (2032,), + 34: (2033,), + 35: (2034,), + 36: (2035,), + 37: (2036,), + 38: (2037,), + 39: (2038,), + 40: (2039,), + 41: (2040,), + 42: (2041,), + 43: (2042,), + 44: (2043,), + 45: (2044,), + 46: (2045,), + 47: (2046,), + 48: (2047,), + 49: (2048,), + 50: (2049,), + 51: (2050,), + 52: (2051,), + 53: (2052,), + 54: (2053,), + 55: (2054,), + 56: (2055,), + 57: (2056,), + 58: (2057,), + 59: (2058,), + 60: (2059,), + 61: (2060,), + 62: (2061,), + 63: (2062,), + 64: (2063,), + 65: (2064,), + 66: (2065,), + 67: (2066,), + 68: (2067,), + 69: (2068,), + 70: (2069,), + 71: (2070,), + 72: (2071,), + 73: (2072,), + 74: (2073,), + 75: (2074,), + 76: (2075,), + 77: (2076,), + 78: (2077,), + 79: (2078,), + 80: (2079,), + 81: (2080,), + 82: (2081,), + 83: (2082,), + 84: (2083,), + 85: (2084,), + 86: (2085,), + 87: (2086,), + 88: (2087,), + 89: (2088,), + 90: (2089,), + 91: (2090,), + 92: (2091,), + 93: (2092,), + 94: (2093,), + 95: (2094,), + 96: (2095,), + 97: (2096,), + 98: (2097,), + 99: (2098,), + 100: (2099,), + } + }, +} + +DESIGN_INPUT_FILES = tuple( + name for name in WORKBOOK_SPECS if name.startswith("design_input") +) +DESIGN_INPUT_IDS = tuple(name.removesuffix(".xlsx") for name in DESIGN_INPUT_FILES) diff --git a/uv.lock b/uv.lock index 5653e4933..eb2fa398c 100644 --- a/uv.lock +++ b/uv.lock @@ -4,11 +4,11 @@ requires-python = ">=3.12" resolution-markers = [ "python_full_version >= '3.15' and platform_machine == 'ARM64' and sys_platform == 'win32'", "python_full_version >= '3.15' and platform_machine != 'ARM64' and sys_platform == 'win32'", + "python_full_version >= '3.15' and sys_platform == 'emscripten'", + "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32'", "python_full_version == '3.14.*' and platform_machine == 'ARM64' and sys_platform == 'win32'", "python_full_version == '3.14.*' and platform_machine != 'ARM64' and sys_platform == 'win32'", - "python_full_version >= '3.15' and sys_platform == 'emscripten'", "python_full_version == '3.14.*' and sys_platform == 'emscripten'", - "python_full_version >= '3.15' and sys_platform != 'emscripten' and sys_platform != 'win32'", "python_full_version == '3.14.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", "python_full_version < '3.14' and platform_machine == 'ARM64' and sys_platform == 'win32'", "python_full_version < '3.14' and platform_machine != 'ARM64' and sys_platform == 'win32'", @@ -3690,6 +3690,7 @@ dev = [ { name = "types-pyyaml" }, { name = "types-seaborn" }, { name = "types-setuptools" }, + { name = "xlsxwriter" }, { name = "xlwt" }, ] @@ -3732,6 +3733,7 @@ dev = [ { name = "types-pyyaml" }, { name = "types-seaborn" }, { name = "types-setuptools" }, + { name = "xlsxwriter", specifier = ">=3.2.3" }, { name = "xlwt" }, ] @@ -4198,6 +4200,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/1a/62/c8d562e7766786ba6587d09c5a8ba9f718ed3fa8af7f4553e8f91c36f302/xlrd-2.0.2-py2.py3-none-any.whl", hash = "sha256:ea762c3d29f4cca48d82df517b6d89fbce4db3107f9d78713e48cd321d5c9aa9", size = 96555, upload-time = "2025-06-14T08:46:37.766Z" }, ] +[[package]] +name = "xlsxwriter" +version = "3.2.9" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/46/2c/c06ef49dc36e7954e55b802a8b231770d286a9758b3d936bd1e04ce5ba88/xlsxwriter-3.2.9.tar.gz", hash = "sha256:254b1c37a368c444eac6e2f867405cc9e461b0ed97a3233b2ac1e574efb4140c", size = 215940, upload-time = "2025-09-16T00:16:21.63Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3a/0c/3662f4a66880196a590b202f0db82d919dd2f89e99a27fadef91c4a33d41/xlsxwriter-3.2.9-py3-none-any.whl", hash = "sha256:9a5db42bc5dff014806c58a20b9eae7322a134abb6fce3c92c181bfb275ec5b3", size = 175315, upload-time = "2025-09-16T00:16:20.108Z" }, +] + [[package]] name = "xlwt" version = "1.3.0"