ert 17.1.9__py3-none-any.whl → 18.0.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- _ert/events.py +19 -2
- ert/__main__.py +8 -7
- ert/analysis/_update_commons.py +12 -3
- ert/cli/main.py +6 -3
- ert/cli/monitor.py +7 -0
- ert/config/__init__.py +13 -3
- ert/config/_create_observation_dataframes.py +60 -12
- ert/config/_observations.py +14 -1
- ert/config/_read_summary.py +8 -6
- ert/config/ensemble_config.py +6 -14
- ert/config/ert_config.py +19 -13
- ert/config/{everest_objective_config.py → everest_response.py} +23 -12
- ert/config/ext_param_config.py +133 -1
- ert/config/field.py +12 -8
- ert/config/forward_model_step.py +108 -6
- ert/config/gen_data_config.py +2 -6
- ert/config/gen_kw_config.py +0 -9
- ert/config/known_response_types.py +14 -0
- ert/config/parameter_config.py +0 -17
- ert/config/parsing/config_keywords.py +1 -0
- ert/config/parsing/config_schema.py +12 -0
- ert/config/parsing/config_schema_deprecations.py +11 -0
- ert/config/parsing/config_schema_item.py +1 -1
- ert/config/queue_config.py +4 -4
- ert/config/response_config.py +0 -7
- ert/config/rft_config.py +230 -0
- ert/config/summary_config.py +2 -6
- ert/config/violations.py +0 -0
- ert/config/workflow_fixtures.py +2 -1
- ert/dark_storage/client/__init__.py +2 -2
- ert/dark_storage/client/_session.py +4 -4
- ert/dark_storage/client/client.py +2 -2
- ert/dark_storage/compute/misfits.py +7 -6
- ert/dark_storage/endpoints/compute/misfits.py +2 -2
- ert/dark_storage/endpoints/observations.py +4 -4
- ert/dark_storage/endpoints/responses.py +15 -1
- ert/ensemble_evaluator/__init__.py +8 -1
- ert/ensemble_evaluator/evaluator.py +81 -29
- ert/ensemble_evaluator/event.py +6 -0
- ert/ensemble_evaluator/snapshot.py +3 -1
- ert/ensemble_evaluator/state.py +1 -0
- ert/field_utils/__init__.py +8 -0
- ert/field_utils/field_utils.py +211 -1
- ert/gui/ertwidgets/__init__.py +23 -16
- ert/gui/ertwidgets/analysismoduleedit.py +2 -2
- ert/gui/ertwidgets/checklist.py +1 -1
- ert/gui/ertwidgets/create_experiment_dialog.py +3 -1
- ert/gui/ertwidgets/ensembleselector.py +2 -2
- ert/gui/ertwidgets/models/__init__.py +2 -0
- ert/gui/ertwidgets/models/activerealizationsmodel.py +2 -1
- ert/gui/ertwidgets/models/path_model.py +1 -1
- ert/gui/ertwidgets/models/targetensemblemodel.py +2 -1
- ert/gui/ertwidgets/models/text_model.py +1 -1
- ert/gui/ertwidgets/searchbox.py +13 -4
- ert/gui/{suggestor → ertwidgets/suggestor}/_suggestor_message.py +13 -4
- ert/gui/main.py +11 -6
- ert/gui/main_window.py +1 -2
- ert/gui/simulation/ensemble_experiment_panel.py +1 -1
- ert/gui/simulation/ensemble_information_filter_panel.py +1 -1
- ert/gui/simulation/ensemble_smoother_panel.py +1 -1
- ert/gui/simulation/evaluate_ensemble_panel.py +1 -1
- ert/gui/simulation/experiment_panel.py +1 -1
- ert/gui/simulation/manual_update_panel.py +31 -8
- ert/gui/simulation/multiple_data_assimilation_panel.py +12 -8
- ert/gui/simulation/run_dialog.py +25 -4
- ert/gui/simulation/single_test_run_panel.py +2 -2
- ert/gui/summarypanel.py +1 -1
- ert/gui/tools/load_results/load_results_panel.py +1 -1
- ert/gui/tools/manage_experiments/storage_info_widget.py +7 -7
- ert/gui/tools/manage_experiments/storage_widget.py +1 -2
- ert/gui/tools/plot/plot_api.py +13 -10
- ert/gui/tools/plot/plot_window.py +12 -0
- ert/gui/tools/plot/plottery/plot_config.py +2 -0
- ert/gui/tools/plot/plottery/plot_context.py +14 -0
- ert/gui/tools/plot/plottery/plots/ensemble.py +9 -2
- ert/gui/tools/plot/plottery/plots/statistics.py +59 -19
- ert/mode_definitions.py +2 -0
- ert/plugins/__init__.py +0 -1
- ert/plugins/hook_implementations/workflows/gen_data_rft_export.py +10 -2
- ert/plugins/hook_specifications/__init__.py +0 -2
- ert/plugins/hook_specifications/jobs.py +0 -9
- ert/plugins/plugin_manager.py +2 -33
- ert/resources/shell_scripts/delete_directory.py +2 -2
- ert/run_models/__init__.py +18 -5
- ert/run_models/_create_run_path.py +33 -21
- ert/run_models/ensemble_experiment.py +10 -4
- ert/run_models/ensemble_information_filter.py +8 -1
- ert/run_models/ensemble_smoother.py +9 -3
- ert/run_models/evaluate_ensemble.py +8 -6
- ert/run_models/event.py +7 -3
- ert/run_models/everest_run_model.py +155 -44
- ert/run_models/initial_ensemble_run_model.py +23 -22
- ert/run_models/manual_update.py +4 -2
- ert/run_models/manual_update_enif.py +37 -0
- ert/run_models/model_factory.py +81 -22
- ert/run_models/multiple_data_assimilation.py +21 -10
- ert/run_models/run_model.py +54 -34
- ert/run_models/single_test_run.py +7 -4
- ert/run_models/update_run_model.py +4 -2
- ert/runpaths.py +5 -6
- ert/sample_prior.py +9 -4
- ert/scheduler/driver.py +37 -0
- ert/scheduler/event.py +3 -1
- ert/scheduler/job.py +23 -13
- ert/scheduler/lsf_driver.py +6 -2
- ert/scheduler/openpbs_driver.py +7 -1
- ert/scheduler/scheduler.py +5 -0
- ert/scheduler/slurm_driver.py +6 -2
- ert/services/__init__.py +2 -2
- ert/services/_base_service.py +31 -15
- ert/services/ert_server.py +317 -0
- ert/shared/_doc_utils/ert_jobs.py +1 -4
- ert/shared/storage/connection.py +3 -3
- ert/shared/version.py +3 -3
- ert/storage/local_ensemble.py +25 -5
- ert/storage/local_experiment.py +6 -14
- ert/storage/local_storage.py +35 -30
- ert/storage/migration/to18.py +12 -0
- ert/storage/migration/to8.py +4 -4
- ert/substitutions.py +12 -28
- ert/validation/active_range.py +7 -7
- ert/validation/rangestring.py +16 -16
- {ert-17.1.9.dist-info → ert-18.0.0.dist-info}/METADATA +8 -7
- {ert-17.1.9.dist-info → ert-18.0.0.dist-info}/RECORD +160 -159
- everest/api/everest_data_api.py +1 -14
- everest/bin/config_branch_script.py +3 -6
- everest/bin/everconfigdump_script.py +1 -9
- everest/bin/everest_script.py +21 -11
- everest/bin/kill_script.py +2 -2
- everest/bin/monitor_script.py +2 -2
- everest/bin/utils.py +6 -3
- everest/config/__init__.py +4 -1
- everest/config/control_config.py +61 -2
- everest/config/control_variable_config.py +2 -1
- everest/config/everest_config.py +38 -16
- everest/config/forward_model_config.py +5 -3
- everest/config/install_data_config.py +7 -5
- everest/config/install_job_config.py +7 -3
- everest/config/install_template_config.py +3 -3
- everest/config/optimization_config.py +19 -6
- everest/config/output_constraint_config.py +8 -2
- everest/config/server_config.py +6 -49
- everest/config/utils.py +25 -105
- everest/config/validation_utils.py +10 -10
- everest/config_file_loader.py +13 -2
- everest/detached/everserver.py +7 -8
- everest/everest_storage.py +6 -10
- everest/gui/everest_client.py +0 -1
- everest/gui/main_window.py +2 -2
- everest/optimizer/everest2ropt.py +59 -32
- everest/optimizer/opt_model_transforms.py +12 -13
- everest/optimizer/utils.py +0 -29
- everest/strings.py +0 -5
- ert/config/everest_constraints_config.py +0 -95
- ert/services/storage_service.py +0 -127
- everest/config/sampler_config.py +0 -103
- everest/simulator/__init__.py +0 -88
- everest/simulator/everest_to_ert.py +0 -51
- /ert/gui/{suggestor → ertwidgets/suggestor}/__init__.py +0 -0
- /ert/gui/{suggestor → ertwidgets/suggestor}/_colors.py +0 -0
- /ert/gui/{suggestor → ertwidgets/suggestor}/suggestor.py +0 -0
- {ert-17.1.9.dist-info → ert-18.0.0.dist-info}/WHEEL +0 -0
- {ert-17.1.9.dist-info → ert-18.0.0.dist-info}/entry_points.txt +0 -0
- {ert-17.1.9.dist-info → ert-18.0.0.dist-info}/licenses/COPYING +0 -0
- {ert-17.1.9.dist-info → ert-18.0.0.dist-info}/top_level.txt +0 -0
ert/substitutions.py
CHANGED
|
@@ -4,6 +4,7 @@ import logging
|
|
|
4
4
|
import re
|
|
5
5
|
from collections import UserDict
|
|
6
6
|
from collections.abc import Mapping
|
|
7
|
+
from typing import Self
|
|
7
8
|
|
|
8
9
|
logger = logging.getLogger(__name__)
|
|
9
10
|
_PATTERN = re.compile(r"<[^<>]+>")
|
|
@@ -25,44 +26,27 @@ class Substitutions(UserDict[str, str]):
|
|
|
25
26
|
"""
|
|
26
27
|
return _substitute(self, to_substitute, context, max_iterations, warn_max_iter)
|
|
27
28
|
|
|
28
|
-
|
|
29
|
-
def substitute_parameters(
|
|
30
|
-
to_substitute: str, parameter_values: Mapping[str, Mapping[str, str | float]]
|
|
31
|
-
) -> str:
|
|
32
|
-
"""Applies the substitution '<param_name>' to parameter value
|
|
33
|
-
Args:
|
|
34
|
-
parameter_values: Mapping from parameter name to parameter value
|
|
35
|
-
to_substitute: string to substitute magic strings in
|
|
36
|
-
Returns:
|
|
37
|
-
substituted string
|
|
38
|
-
"""
|
|
39
|
-
for values in parameter_values.values():
|
|
40
|
-
for param_name, value in values.items():
|
|
41
|
-
if isinstance(value, (int, float)):
|
|
42
|
-
formatted_value = f"{value:.6g}"
|
|
43
|
-
else:
|
|
44
|
-
formatted_value = str(value)
|
|
45
|
-
to_substitute = to_substitute.replace(
|
|
46
|
-
f"<{param_name}>", formatted_value
|
|
47
|
-
)
|
|
48
|
-
return to_substitute
|
|
49
|
-
|
|
50
|
-
def substitute_real_iter(
|
|
51
|
-
self, to_substitute: str, realization: int, iteration: int
|
|
52
|
-
) -> str:
|
|
29
|
+
def real_iter_substituter(self, realization: int, iteration: int) -> Self:
|
|
53
30
|
extra_data = {
|
|
54
31
|
"<IENS>": str(realization),
|
|
55
32
|
"<ITER>": str(iteration),
|
|
56
33
|
}
|
|
57
34
|
|
|
58
|
-
model_id_key = f"<
|
|
35
|
+
model_id_key = f"<REALIZATION_ID_{realization}_{iteration}>"
|
|
59
36
|
if model_id_key in self:
|
|
60
|
-
extra_data["<
|
|
37
|
+
extra_data["<REALIZATION_ID>"] = self[model_id_key]
|
|
61
38
|
sim_id_key = f"<SIM_DIR_{realization}_{iteration}>"
|
|
62
39
|
if sim_id_key in self:
|
|
63
40
|
extra_data["<SIM_DIR>"] = self[sim_id_key]
|
|
64
41
|
|
|
65
|
-
return
|
|
42
|
+
return type(self)({**self, **extra_data})
|
|
43
|
+
|
|
44
|
+
def substitute_real_iter(
|
|
45
|
+
self, to_substitute: str, realization: int, iteration: int
|
|
46
|
+
) -> str:
|
|
47
|
+
return self.real_iter_substituter(realization, iteration).substitute(
|
|
48
|
+
to_substitute
|
|
49
|
+
)
|
|
66
50
|
|
|
67
51
|
def _concise_representation(self) -> str:
|
|
68
52
|
return (
|
ert/validation/active_range.py
CHANGED
|
@@ -47,19 +47,19 @@ class ActiveRange:
|
|
|
47
47
|
raise ValueError(
|
|
48
48
|
f"Only digits, commas, dashes and spaces are allowed, got {rangestring}"
|
|
49
49
|
)
|
|
50
|
-
for
|
|
51
|
-
if "-" in
|
|
52
|
-
if len(
|
|
53
|
-
raise ValueError(f"Invalid range specified, got {
|
|
54
|
-
realization_bounds =
|
|
50
|
+
for range_ in rangestring.split(","):
|
|
51
|
+
if "-" in range_:
|
|
52
|
+
if len(range_.split("-")) != 2:
|
|
53
|
+
raise ValueError(f"Invalid range specified, got {range_}")
|
|
54
|
+
realization_bounds = range_.split("-")
|
|
55
55
|
start = int(realization_bounds[0])
|
|
56
56
|
end = int(realization_bounds[1])
|
|
57
57
|
if end < start:
|
|
58
58
|
raise ValueError(
|
|
59
|
-
f"Invalid direction in range specified, got {
|
|
59
|
+
f"Invalid direction in range specified, got {range_}"
|
|
60
60
|
)
|
|
61
61
|
else:
|
|
62
|
-
int(
|
|
62
|
+
int(range_)
|
|
63
63
|
return rangestring
|
|
64
64
|
|
|
65
65
|
@classmethod
|
ert/validation/rangestring.py
CHANGED
|
@@ -66,11 +66,11 @@ def rangestring_to_mask(rangestring: str, length: int) -> list[bool]:
|
|
|
66
66
|
# An empty string means no active indecies. Note that an
|
|
67
67
|
# IndexRange-typed instance being None means the opposite
|
|
68
68
|
return mask
|
|
69
|
-
for
|
|
70
|
-
if "-" in
|
|
71
|
-
if len(
|
|
72
|
-
raise ValueError(f"Wrong range syntax {
|
|
73
|
-
start, end = map(int,
|
|
69
|
+
for range_ in rangestring.split(","):
|
|
70
|
+
if "-" in range_:
|
|
71
|
+
if len(range_.strip().split("-")) != 2:
|
|
72
|
+
raise ValueError(f"Wrong range syntax {range_}")
|
|
73
|
+
start, end = map(int, range_.strip().split("-"))
|
|
74
74
|
if end < start:
|
|
75
75
|
raise ValueError(f"Range {start}-{end} has invalid direction")
|
|
76
76
|
if end + 1 > length:
|
|
@@ -78,12 +78,12 @@ def rangestring_to_mask(rangestring: str, length: int) -> list[bool]:
|
|
|
78
78
|
f"Range endpoint {end} is beyond the mask length {length}"
|
|
79
79
|
)
|
|
80
80
|
mask[start : end + 1] = [True] * (end + 1 - start)
|
|
81
|
-
elif
|
|
82
|
-
if int(
|
|
81
|
+
elif range_:
|
|
82
|
+
if int(range_) + 1 > length:
|
|
83
83
|
raise ValueError(
|
|
84
|
-
f"Realization index {
|
|
84
|
+
f"Realization index {range_} is beyond the mask length {length}"
|
|
85
85
|
)
|
|
86
|
-
mask[int(
|
|
86
|
+
mask[int(range_)] = True
|
|
87
87
|
return mask
|
|
88
88
|
|
|
89
89
|
|
|
@@ -102,14 +102,14 @@ def rangestring_to_list(rangestring: str) -> list[int]:
|
|
|
102
102
|
result: set[int] = set()
|
|
103
103
|
if not rangestring:
|
|
104
104
|
return []
|
|
105
|
-
for
|
|
106
|
-
if "-" in
|
|
107
|
-
if len(
|
|
108
|
-
raise ValueError(f"Wrong range syntax {
|
|
109
|
-
start, end = map(int,
|
|
105
|
+
for range_ in rangestring.split(","):
|
|
106
|
+
if "-" in range_:
|
|
107
|
+
if len(range_.strip().split("-")) != 2:
|
|
108
|
+
raise ValueError(f"Wrong range syntax {range_}")
|
|
109
|
+
start, end = map(int, range_.strip().split("-"))
|
|
110
110
|
if end < start:
|
|
111
111
|
raise ValueError(f"Range {start}-{end} has invalid direction")
|
|
112
112
|
result.update(range(start, end + 1))
|
|
113
|
-
elif
|
|
114
|
-
result.add(int(
|
|
113
|
+
elif range_:
|
|
114
|
+
result.add(int(range_))
|
|
115
115
|
return list(result)
|
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ert
|
|
3
|
-
Version:
|
|
3
|
+
Version: 18.0.0
|
|
4
4
|
Summary: Ensemble based Reservoir Tool (ERT)
|
|
5
5
|
Author-email: Equinor ASA <fg_sib-scout@equinor.com>
|
|
6
|
-
License: GPL-3.0
|
|
6
|
+
License-Expression: GPL-3.0-only
|
|
7
7
|
Project-URL: Repository, https://github.com/equinor/ert
|
|
8
8
|
Platform: all
|
|
9
9
|
Classifier: Development Status :: 5 - Production/Stable
|
|
10
10
|
Classifier: Environment :: Other Environment
|
|
11
11
|
Classifier: Intended Audience :: Science/Research
|
|
12
|
-
Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
|
|
13
12
|
Classifier: Natural Language :: English
|
|
14
13
|
Classifier: Programming Language :: Python
|
|
15
14
|
Classifier: Programming Language :: Python :: 3.11
|
|
@@ -21,6 +20,7 @@ Requires-Python: <3.14,>=3.11
|
|
|
21
20
|
Description-Content-Type: text/markdown
|
|
22
21
|
License-File: COPYING
|
|
23
22
|
Requires-Dist: aiohttp
|
|
23
|
+
Requires-Dist: anyio
|
|
24
24
|
Requires-Dist: colorama
|
|
25
25
|
Requires-Dist: cryptography
|
|
26
26
|
Requires-Dist: decorator
|
|
@@ -59,8 +59,8 @@ Requires-Dist: pyyaml
|
|
|
59
59
|
Requires-Dist: pyzmq
|
|
60
60
|
Requires-Dist: requests
|
|
61
61
|
Requires-Dist: resfo>=5.0.0
|
|
62
|
-
Requires-Dist: ropt-dakota<0.
|
|
63
|
-
Requires-Dist: ropt[pandas]<0.
|
|
62
|
+
Requires-Dist: ropt-dakota<0.26,>=0.25
|
|
63
|
+
Requires-Dist: ropt[pandas]<0.26,>=0.25
|
|
64
64
|
Requires-Dist: ruamel.yaml
|
|
65
65
|
Requires-Dist: scipy>=1.10.1
|
|
66
66
|
Requires-Dist: seaborn
|
|
@@ -73,7 +73,7 @@ Requires-Dist: uvicorn>=0.17.0
|
|
|
73
73
|
Requires-Dist: websockets
|
|
74
74
|
Requires-Dist: xarray
|
|
75
75
|
Requires-Dist: xtgeo>=3.3.0
|
|
76
|
-
Requires-Dist: resfo-utilities>=0.
|
|
76
|
+
Requires-Dist: resfo-utilities>=0.5.0
|
|
77
77
|
Provides-Extra: dev
|
|
78
78
|
Requires-Dist: furo; extra == "dev"
|
|
79
79
|
Requires-Dist: hypothesis!=6.102.0,!=6.112.3,>=6.85; extra == "dev"
|
|
@@ -94,6 +94,7 @@ Requires-Dist: pytest-rerunfailures!=16.0; extra == "dev"
|
|
|
94
94
|
Requires-Dist: pytest-snapshot; extra == "dev"
|
|
95
95
|
Requires-Dist: pytest-timeout; extra == "dev"
|
|
96
96
|
Requires-Dist: pytest-xdist; extra == "dev"
|
|
97
|
+
Requires-Dist: pytest-durations; extra == "dev"
|
|
97
98
|
Requires-Dist: pytest>6; extra == "dev"
|
|
98
99
|
Requires-Dist: resdata; extra == "dev"
|
|
99
100
|
Requires-Dist: rust-just; extra == "dev"
|
|
@@ -105,7 +106,7 @@ Requires-Dist: sphinx-copybutton; extra == "dev"
|
|
|
105
106
|
Requires-Dist: sphinxcontrib.datatemplates; extra == "dev"
|
|
106
107
|
Requires-Dist: json-schema-for-humans; extra == "dev"
|
|
107
108
|
Requires-Dist: xlsxwriter>=3.2.3; extra == "dev"
|
|
108
|
-
Requires-Dist: resfo-utilities[testing]>=0.
|
|
109
|
+
Requires-Dist: resfo-utilities[testing]>=0.5.0; extra == "dev"
|
|
109
110
|
Provides-Extra: style
|
|
110
111
|
Requires-Dist: pre-commit; extra == "style"
|
|
111
112
|
Provides-Extra: types
|