ert 19.0.0__py3-none-any.whl → 19.0.0rc0__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/analysis/_es_update.py +6 -19
- ert/config/_create_observation_dataframes.py +51 -28
- ert/config/_observations.py +30 -29
- ert/config/ert_config.py +0 -8
- ert/config/parsing/config_schema_deprecations.py +11 -0
- ert/config/parsing/observations_parser.py +0 -6
- ert/dark_storage/endpoints/observations.py +2 -10
- ert/field_utils/grdecl_io.py +9 -26
- ert/gui/main.py +4 -4
- ert/gui/simulation/experiment_panel.py +0 -4
- ert/gui/summarypanel.py +0 -19
- ert/gui/tools/manage_experiments/storage_info_widget.py +19 -23
- ert/gui/tools/plot/plot_widget.py +7 -14
- ert/gui/tools/plot/plot_window.py +0 -9
- ert/run_models/run_model.py +21 -1
- ert/shared/version.py +3 -3
- ert/storage/local_ensemble.py +1 -12
- ert/storage/local_storage.py +1 -5
- {ert-19.0.0.dist-info → ert-19.0.0rc0.dist-info}/METADATA +1 -1
- {ert-19.0.0.dist-info → ert-19.0.0rc0.dist-info}/RECORD +24 -26
- {ert-19.0.0.dist-info → ert-19.0.0rc0.dist-info}/WHEEL +1 -1
- ert/storage/migration/to22.py +0 -18
- ert/storage/migration/to23.py +0 -49
- {ert-19.0.0.dist-info → ert-19.0.0rc0.dist-info}/entry_points.txt +0 -0
- {ert-19.0.0.dist-info → ert-19.0.0rc0.dist-info}/licenses/COPYING +0 -0
- {ert-19.0.0.dist-info → ert-19.0.0rc0.dist-info}/top_level.txt +0 -0
ert/analysis/_es_update.py
CHANGED
|
@@ -2,7 +2,6 @@ from __future__ import annotations
|
|
|
2
2
|
|
|
3
3
|
import functools
|
|
4
4
|
import logging
|
|
5
|
-
import re
|
|
6
5
|
import time
|
|
7
6
|
import warnings
|
|
8
7
|
from collections.abc import Callable, Iterable, Sequence
|
|
@@ -442,12 +441,6 @@ def smoother_update(
|
|
|
442
441
|
with warnings.catch_warnings():
|
|
443
442
|
original_showwarning = warnings.showwarning
|
|
444
443
|
|
|
445
|
-
ILL_CONDITIONED_RE = re.compile(
|
|
446
|
-
r"^LinAlgWarning:.*ill[- ]?conditioned\s+matrix", re.IGNORECASE
|
|
447
|
-
)
|
|
448
|
-
LIMIT_ILL_CONDITIONED_WARNING = 1000
|
|
449
|
-
illconditioned_warn_counter = 0
|
|
450
|
-
|
|
451
444
|
def log_warning(
|
|
452
445
|
message: Warning | str,
|
|
453
446
|
category: type[Warning],
|
|
@@ -456,18 +449,12 @@ def smoother_update(
|
|
|
456
449
|
file: TextIO | None = None,
|
|
457
450
|
line: str | None = None,
|
|
458
451
|
) -> None:
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
logger.warning(
|
|
466
|
-
f"{category.__name__}: {message} (from {filename}:{lineno})"
|
|
467
|
-
)
|
|
468
|
-
original_showwarning(
|
|
469
|
-
message, category, filename, lineno, file=file, line=line
|
|
470
|
-
)
|
|
452
|
+
logger.warning(
|
|
453
|
+
f"{category.__name__}: {message} (from {filename}:{lineno})"
|
|
454
|
+
)
|
|
455
|
+
original_showwarning(
|
|
456
|
+
message, category, filename, lineno, file=file, line=line
|
|
457
|
+
)
|
|
471
458
|
|
|
472
459
|
warnings.showwarning = log_warning
|
|
473
460
|
analysis_ES(
|
|
@@ -36,7 +36,7 @@ if TYPE_CHECKING:
|
|
|
36
36
|
|
|
37
37
|
|
|
38
38
|
DEFAULT_TIME_DELTA = timedelta(seconds=30)
|
|
39
|
-
|
|
39
|
+
DEFAULT_LOCATION_RANGE_M = 3000
|
|
40
40
|
|
|
41
41
|
|
|
42
42
|
def create_observation_dataframes(
|
|
@@ -205,9 +205,6 @@ def _handle_history_observation(
|
|
|
205
205
|
"time": dates_series,
|
|
206
206
|
"observations": pl.Series(values, dtype=pl.Float32),
|
|
207
207
|
"std": pl.Series(std_dev, dtype=pl.Float32),
|
|
208
|
-
"east": pl.Series([None] * len(values), dtype=pl.Float32),
|
|
209
|
-
"north": pl.Series([None] * len(values), dtype=pl.Float32),
|
|
210
|
-
"radius": pl.Series([None] * len(values), dtype=pl.Float32),
|
|
211
208
|
}
|
|
212
209
|
)
|
|
213
210
|
|
|
@@ -300,7 +297,40 @@ def _get_restart(
|
|
|
300
297
|
|
|
301
298
|
|
|
302
299
|
def _has_localization(summary_dict: SummaryObservation) -> bool:
|
|
303
|
-
return
|
|
300
|
+
return any(
|
|
301
|
+
[
|
|
302
|
+
summary_dict.location_x is not None,
|
|
303
|
+
summary_dict.location_y is not None,
|
|
304
|
+
summary_dict.location_range is not None,
|
|
305
|
+
]
|
|
306
|
+
)
|
|
307
|
+
|
|
308
|
+
|
|
309
|
+
def _validate_localization_values(summary_dict: SummaryObservation) -> None:
|
|
310
|
+
"""The user must provide LOCATION_X and LOCATION_Y to use localization, while
|
|
311
|
+
unprovided LOCATION_RANGE should default to some value.
|
|
312
|
+
|
|
313
|
+
This method assumes the summary dict contains at least one LOCATION key.
|
|
314
|
+
"""
|
|
315
|
+
if summary_dict.location_x is None or summary_dict.location_y is None:
|
|
316
|
+
loc_values = {
|
|
317
|
+
"LOCATION_X": summary_dict.location_x,
|
|
318
|
+
"LOCATION_Y": summary_dict.location_y,
|
|
319
|
+
"LOCATION_RANGE": summary_dict.location_range,
|
|
320
|
+
}
|
|
321
|
+
provided_loc_values = {k: v for k, v in loc_values.items() if v is not None}
|
|
322
|
+
|
|
323
|
+
provided_loc_values_string = ", ".join(
|
|
324
|
+
key.upper() for key in provided_loc_values
|
|
325
|
+
)
|
|
326
|
+
raise ObservationConfigError.with_context(
|
|
327
|
+
f"Localization for observation {summary_dict.name} is misconfigured.\n"
|
|
328
|
+
f"Only {provided_loc_values_string} were provided. To enable "
|
|
329
|
+
f"localization for an observation, ensure that both LOCATION_X and "
|
|
330
|
+
f"LOCATION_Y are defined - or remove LOCATION keywords to disable "
|
|
331
|
+
f"localization.",
|
|
332
|
+
summary_dict,
|
|
333
|
+
)
|
|
304
334
|
|
|
305
335
|
|
|
306
336
|
def _handle_summary_observation(
|
|
@@ -340,24 +370,23 @@ def _handle_summary_observation(
|
|
|
340
370
|
"Observation uncertainty must be strictly > 0", summary_key
|
|
341
371
|
) from None
|
|
342
372
|
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
373
|
+
data_dict = {
|
|
374
|
+
"response_key": [summary_key],
|
|
375
|
+
"observation_key": [obs_key],
|
|
376
|
+
"time": pl.Series([date]).dt.cast_time_unit("ms"),
|
|
377
|
+
"observations": pl.Series([value], dtype=pl.Float32),
|
|
378
|
+
"std": pl.Series([std_dev], dtype=pl.Float32),
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
if _has_localization(summary_dict):
|
|
382
|
+
_validate_localization_values(summary_dict)
|
|
383
|
+
data_dict["location_x"] = summary_dict.location_x
|
|
384
|
+
data_dict["location_y"] = summary_dict.location_y
|
|
385
|
+
data_dict["location_range"] = (
|
|
386
|
+
summary_dict.location_range or DEFAULT_LOCATION_RANGE_M
|
|
387
|
+
)
|
|
348
388
|
|
|
349
|
-
return pl.DataFrame(
|
|
350
|
-
{
|
|
351
|
-
"response_key": [summary_key],
|
|
352
|
-
"observation_key": [obs_key],
|
|
353
|
-
"time": pl.Series([date]).dt.cast_time_unit("ms"),
|
|
354
|
-
"observations": pl.Series([value], dtype=pl.Float32),
|
|
355
|
-
"std": pl.Series([std_dev], dtype=pl.Float32),
|
|
356
|
-
"east": pl.Series([summary_dict.east], dtype=pl.Float32),
|
|
357
|
-
"north": pl.Series([summary_dict.north], dtype=pl.Float32),
|
|
358
|
-
"radius": pl.Series([localization_radius], dtype=pl.Float32),
|
|
359
|
-
}
|
|
360
|
-
)
|
|
389
|
+
return pl.DataFrame(data_dict)
|
|
361
390
|
|
|
362
391
|
|
|
363
392
|
def _handle_general_observation(
|
|
@@ -485,11 +514,6 @@ def _handle_general_observation(
|
|
|
485
514
|
"index": pl.Series(indices, dtype=pl.UInt16),
|
|
486
515
|
"observations": pl.Series(values, dtype=pl.Float32),
|
|
487
516
|
"std": pl.Series(stds, dtype=pl.Float32),
|
|
488
|
-
# Location attributes will always be None for general observations, but are
|
|
489
|
-
# necessary to concatenate with other observation dataframes.
|
|
490
|
-
"east": pl.Series([None] * len(values), dtype=pl.Float32),
|
|
491
|
-
"north": pl.Series([None] * len(values), dtype=pl.Float32),
|
|
492
|
-
"radius": pl.Series([None] * len(values), dtype=pl.Float32),
|
|
493
517
|
}
|
|
494
518
|
)
|
|
495
519
|
|
|
@@ -532,6 +556,5 @@ def _handle_rft_observation(
|
|
|
532
556
|
"tvd": pl.Series([location[2]], dtype=pl.Float32),
|
|
533
557
|
"observations": pl.Series([rft_observation.value], dtype=pl.Float32),
|
|
534
558
|
"std": pl.Series([rft_observation.error], dtype=pl.Float32),
|
|
535
|
-
"radius": pl.Series([None], dtype=pl.Float32),
|
|
536
559
|
}
|
|
537
560
|
)
|
ert/config/_observations.py
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import os
|
|
2
|
+
from collections import Counter
|
|
2
3
|
from collections.abc import Sequence
|
|
3
4
|
from dataclasses import dataclass
|
|
4
5
|
from enum import StrEnum
|
|
@@ -89,9 +90,9 @@ class _SummaryValues:
|
|
|
89
90
|
name: str
|
|
90
91
|
value: float
|
|
91
92
|
key: str #: The :term:`summary key` in the summary response
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
93
|
+
location_x: float | None = None
|
|
94
|
+
location_y: float | None = None
|
|
95
|
+
location_range: float | None = None
|
|
95
96
|
|
|
96
97
|
|
|
97
98
|
@dataclass
|
|
@@ -103,7 +104,7 @@ class SummaryObservation(ObservationDate, _SummaryValues, ObservationError):
|
|
|
103
104
|
|
|
104
105
|
date_dict: ObservationDate = ObservationDate()
|
|
105
106
|
float_values: dict[str, float] = {"ERROR_MIN": 0.1}
|
|
106
|
-
localization_values: dict[str, float
|
|
107
|
+
localization_values: dict[str, float] = {}
|
|
107
108
|
for key, value in observation_dict.items():
|
|
108
109
|
match key:
|
|
109
110
|
case "type" | "name":
|
|
@@ -124,15 +125,12 @@ class SummaryObservation(ObservationDate, _SummaryValues, ObservationError):
|
|
|
124
125
|
summary_key = value
|
|
125
126
|
case "DATE":
|
|
126
127
|
date_dict.date = value
|
|
127
|
-
case "
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
localization_values["
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
if "RADIUS" in value
|
|
134
|
-
else None
|
|
135
|
-
)
|
|
128
|
+
case "LOCATION_X":
|
|
129
|
+
localization_values["x"] = validate_float(value, key)
|
|
130
|
+
case "LOCATION_Y":
|
|
131
|
+
localization_values["y"] = validate_float(value, key)
|
|
132
|
+
case "LOCATION_RANGE":
|
|
133
|
+
localization_values["range"] = validate_float(value, key)
|
|
136
134
|
case _:
|
|
137
135
|
raise _unknown_key_error(str(key), observation_dict["name"])
|
|
138
136
|
if "VALUE" not in float_values:
|
|
@@ -149,9 +147,9 @@ class SummaryObservation(ObservationDate, _SummaryValues, ObservationError):
|
|
|
149
147
|
error_min=float_values["ERROR_MIN"],
|
|
150
148
|
key=summary_key,
|
|
151
149
|
value=float_values["VALUE"],
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
150
|
+
location_x=localization_values.get("x"),
|
|
151
|
+
location_y=localization_values.get("y"),
|
|
152
|
+
location_range=localization_values.get("range"),
|
|
155
153
|
**date_dict.__dict__,
|
|
156
154
|
)
|
|
157
155
|
|
|
@@ -326,9 +324,25 @@ def make_observations(
|
|
|
326
324
|
if error_list:
|
|
327
325
|
raise ObservationConfigError.from_collected(error_list)
|
|
328
326
|
|
|
327
|
+
_validate_unique_names(result)
|
|
329
328
|
return result
|
|
330
329
|
|
|
331
330
|
|
|
331
|
+
def _validate_unique_names(
|
|
332
|
+
observations: Sequence[Observation],
|
|
333
|
+
) -> None:
|
|
334
|
+
names_counter = Counter(d.name for d in observations)
|
|
335
|
+
duplicate_names = [n for n, c in names_counter.items() if c > 1]
|
|
336
|
+
errors = [
|
|
337
|
+
ErrorInfo(
|
|
338
|
+
f"Duplicate observation name {n}",
|
|
339
|
+
).set_context(n)
|
|
340
|
+
for n in duplicate_names
|
|
341
|
+
]
|
|
342
|
+
if errors:
|
|
343
|
+
raise ObservationConfigError.from_collected(errors)
|
|
344
|
+
|
|
345
|
+
|
|
332
346
|
def _validate_segment_dict(name_token: str, inp: dict[str, Any]) -> Segment:
|
|
333
347
|
start = None
|
|
334
348
|
stop = None
|
|
@@ -401,19 +415,6 @@ def validate_positive_float(val: str, key: str) -> float:
|
|
|
401
415
|
return v
|
|
402
416
|
|
|
403
417
|
|
|
404
|
-
def validate_localization(val: dict[str, Any], obs_name: str) -> None:
|
|
405
|
-
errors = []
|
|
406
|
-
if "EAST" not in val:
|
|
407
|
-
errors.append(_missing_value_error(f"LOCALIZATION for {obs_name}", "EAST"))
|
|
408
|
-
if "NORTH" not in val:
|
|
409
|
-
errors.append(_missing_value_error(f"LOCALIZATION for {obs_name}", "NORTH"))
|
|
410
|
-
for key in val:
|
|
411
|
-
if key not in {"EAST", "NORTH", "RADIUS"}:
|
|
412
|
-
errors.append(_unknown_key_error(key, f"LOCALIZATION for {obs_name}"))
|
|
413
|
-
if errors:
|
|
414
|
-
raise ObservationConfigError.from_collected(errors)
|
|
415
|
-
|
|
416
|
-
|
|
417
418
|
def validate_positive_int(val: str, key: str) -> int:
|
|
418
419
|
try:
|
|
419
420
|
v = int(val)
|
ert/config/ert_config.py
CHANGED
|
@@ -688,14 +688,6 @@ def log_observation_keys(
|
|
|
688
688
|
if key not in {"name", "type"}
|
|
689
689
|
)
|
|
690
690
|
|
|
691
|
-
if "HISTORY_OBSERVATION" in observation_type_counts:
|
|
692
|
-
msg = (
|
|
693
|
-
"HISTORY_OBSERVATION is deprecated and will be removed. "
|
|
694
|
-
"Please use SUMMARY_OBSERVATION instead."
|
|
695
|
-
)
|
|
696
|
-
ConfigWarning.warn(msg)
|
|
697
|
-
logger.warning(msg)
|
|
698
|
-
|
|
699
691
|
logger.info(
|
|
700
692
|
f"Count of observation types:\n\t{dict(observation_type_counts)}\n"
|
|
701
693
|
f"Count of observation keywords:\n\t{dict(observation_keyword_counts)}"
|
|
@@ -217,4 +217,15 @@ deprecated_keywords_list = [
|
|
|
217
217
|
),
|
|
218
218
|
check=lambda line: line[0] == "DESIGN2PARAMS",
|
|
219
219
|
),
|
|
220
|
+
DeprecationInfo(
|
|
221
|
+
keyword="FORWARD_MODEL",
|
|
222
|
+
message=(
|
|
223
|
+
"FORWARD_MODEL DESIGN_KW will be replaced with RUN_TEMPLATE. "
|
|
224
|
+
"DESIGN2PARAMS has been replaced by DESIGN_MATRIX, so the "
|
|
225
|
+
"parameters are already available for magic string replacement "
|
|
226
|
+
"with the RUN_TEMPLATE keyword. Please use this format: "
|
|
227
|
+
"'RUN_TEMPLATE my_text_file_template.txt my_text_output_file.txt'"
|
|
228
|
+
),
|
|
229
|
+
check=lambda line: line[0] == "DESIGN_KW",
|
|
230
|
+
),
|
|
220
231
|
]
|
|
@@ -138,7 +138,6 @@ observations_parser = Lark(
|
|
|
138
138
|
PARAMETER_NAME : CHAR+
|
|
139
139
|
object : "{" [(declaration";")*] "}"
|
|
140
140
|
?declaration: "SEGMENT" STRING object -> segment
|
|
141
|
-
| "LOCALIZATION" object -> localization
|
|
142
141
|
| pair
|
|
143
142
|
pair : PARAMETER_NAME "=" value
|
|
144
143
|
|
|
@@ -194,11 +193,6 @@ class TreeToObservations(Transformer[FileContextToken, list[ObservationDict]]):
|
|
|
194
193
|
def segment(tree):
|
|
195
194
|
return (("SEGMENT", tree[0]), tree[1])
|
|
196
195
|
|
|
197
|
-
@staticmethod
|
|
198
|
-
@no_type_check
|
|
199
|
-
def localization(tree):
|
|
200
|
-
return ("LOCALIZATION", tree[0])
|
|
201
|
-
|
|
202
196
|
@staticmethod
|
|
203
197
|
@no_type_check
|
|
204
198
|
def object(tree):
|
|
@@ -84,7 +84,6 @@ async def get_observations_for_response(
|
|
|
84
84
|
ensemble.experiment,
|
|
85
85
|
obs_keys,
|
|
86
86
|
json.loads(filter_on) if filter_on is not None else None,
|
|
87
|
-
requested_response_type=response_type,
|
|
88
87
|
)
|
|
89
88
|
if not obss:
|
|
90
89
|
return []
|
|
@@ -108,17 +107,10 @@ def _get_observations(
|
|
|
108
107
|
experiment: Experiment,
|
|
109
108
|
observation_keys: list[str] | None = None,
|
|
110
109
|
filter_on: dict[str, Any] | None = None,
|
|
111
|
-
requested_response_type: str | None = None,
|
|
112
110
|
) -> list[dict[str, Any]]:
|
|
113
111
|
observations = []
|
|
114
112
|
|
|
115
|
-
for
|
|
116
|
-
if (
|
|
117
|
-
requested_response_type is not None
|
|
118
|
-
and stored_response_type != requested_response_type
|
|
119
|
-
):
|
|
120
|
-
continue
|
|
121
|
-
|
|
113
|
+
for response_type, df in experiment.observations.items():
|
|
122
114
|
if observation_keys is not None:
|
|
123
115
|
df = df.filter(pl.col("observation_key").is_in(observation_keys))
|
|
124
116
|
|
|
@@ -135,7 +127,7 @@ def _get_observations(
|
|
|
135
127
|
if df.is_empty():
|
|
136
128
|
continue
|
|
137
129
|
|
|
138
|
-
x_axis_fn = response_to_pandas_x_axis_fns[
|
|
130
|
+
x_axis_fn = response_to_pandas_x_axis_fns[response_type]
|
|
139
131
|
df = df.rename(
|
|
140
132
|
{
|
|
141
133
|
"observation_key": "name",
|
ert/field_utils/grdecl_io.py
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
import io
|
|
4
3
|
import operator
|
|
5
4
|
import os
|
|
6
5
|
from collections.abc import Iterator
|
|
@@ -258,9 +257,6 @@ def import_bgrdecl(
|
|
|
258
257
|
raise ValueError(f"Did not find field parameter {field_name} in {file_path}")
|
|
259
258
|
|
|
260
259
|
|
|
261
|
-
_BUFFER_SIZE = 2**20 # 1.04 megabytes
|
|
262
|
-
|
|
263
|
-
|
|
264
260
|
def export_grdecl(
|
|
265
261
|
values: np.ma.MaskedArray[Any, np.dtype[np.float32]] | npt.NDArray[np.float32],
|
|
266
262
|
file_path: str | os.PathLike[str],
|
|
@@ -275,25 +271,12 @@ def export_grdecl(
|
|
|
275
271
|
if binary:
|
|
276
272
|
resfo.write(file_path, [(param_name.ljust(8), values.astype(np.float32))])
|
|
277
273
|
else:
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
io.TextIOWrapper(bw, write_through=True, encoding="utf-8") as tw,
|
|
288
|
-
):
|
|
289
|
-
tw.write(param_name + "\n")
|
|
290
|
-
i = 0
|
|
291
|
-
while i + per_iter <= length:
|
|
292
|
-
tw.write(fmt % tuple(values[i : i + per_iter]))
|
|
293
|
-
i += per_iter
|
|
294
|
-
|
|
295
|
-
for j, v in enumerate(values[length - (length % per_iter) :]):
|
|
296
|
-
tw.write(f" {v:3e}")
|
|
297
|
-
if j % 6 == 5:
|
|
298
|
-
tw.write("\n")
|
|
299
|
-
tw.write(" /\n")
|
|
274
|
+
with open(file_path, "w", encoding="utf-8") as fh:
|
|
275
|
+
fh.write(param_name + "\n")
|
|
276
|
+
for i, v in enumerate(values):
|
|
277
|
+
fh.write(" ")
|
|
278
|
+
fh.write(f"{v:3e}")
|
|
279
|
+
if i % 6 == 5:
|
|
280
|
+
fh.write("\n")
|
|
281
|
+
|
|
282
|
+
fh.write(" /\n")
|
ert/gui/main.py
CHANGED
|
@@ -29,6 +29,7 @@ from ert.gui.tools.event_viewer import (
|
|
|
29
29
|
from ert.namespace import Namespace
|
|
30
30
|
from ert.plugins import ErtRuntimePlugins, get_site_plugins
|
|
31
31
|
from ert.services import ErtServer
|
|
32
|
+
from ert.shared import __version__
|
|
32
33
|
from ert.storage import (
|
|
33
34
|
ErtStorageException,
|
|
34
35
|
LocalStorage,
|
|
@@ -171,10 +172,9 @@ def _start_initial_gui_window(
|
|
|
171
172
|
None,
|
|
172
173
|
f"Migrate storage to version {current_version}?",
|
|
173
174
|
f"Ert storage is version {storage_version} and needs to be migrated"
|
|
174
|
-
f" to version {current_version} to be
|
|
175
|
-
f"
|
|
176
|
-
f"
|
|
177
|
-
f" later versions of Ert\n\n"
|
|
175
|
+
f" to version {current_version} to be able to continue\n\n"
|
|
176
|
+
f"After migration, this storage can only be opened with Ert"
|
|
177
|
+
f" version {__version__} or newer\n\n"
|
|
178
178
|
"Do you wish to continue migrating storage?\n",
|
|
179
179
|
QMessageBox.StandardButton.Yes | QMessageBox.StandardButton.No,
|
|
180
180
|
)
|
|
@@ -360,10 +360,6 @@ class ExperimentPanel(QWidget):
|
|
|
360
360
|
return
|
|
361
361
|
QApplication.restoreOverrideCursor()
|
|
362
362
|
|
|
363
|
-
self.configuration_summary.log_summary(
|
|
364
|
-
args.mode, model.get_number_of_active_realizations()
|
|
365
|
-
)
|
|
366
|
-
|
|
367
363
|
self._dialog = RunDialog(
|
|
368
364
|
f"Experiment - {self._config_file} {find_ert_info()}",
|
|
369
365
|
model.api,
|
ert/gui/summarypanel.py
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
import logging
|
|
4
3
|
from typing import TYPE_CHECKING, Any
|
|
5
4
|
|
|
6
5
|
from PyQt6.QtCore import Qt
|
|
@@ -19,8 +18,6 @@ from ert.gui.ertwidgets import ErtSummary
|
|
|
19
18
|
if TYPE_CHECKING:
|
|
20
19
|
from ert.config import ErtConfig
|
|
21
20
|
|
|
22
|
-
logger = logging.getLogger(__name__)
|
|
23
|
-
|
|
24
21
|
|
|
25
22
|
class SummaryTemplate:
|
|
26
23
|
def __init__(self, title: str) -> None:
|
|
@@ -126,22 +123,6 @@ class SummaryPanel(QFrame):
|
|
|
126
123
|
|
|
127
124
|
self._layout.addLayout(layout)
|
|
128
125
|
|
|
129
|
-
def log_summary(self, run_model: str, num_realizations: int) -> None:
|
|
130
|
-
summary = ErtSummary(self.config)
|
|
131
|
-
|
|
132
|
-
observations = summary.getObservations()
|
|
133
|
-
observations_count = sum(e["count"] for e in observations)
|
|
134
|
-
|
|
135
|
-
_, parameter_count = summary.get_parameters()
|
|
136
|
-
|
|
137
|
-
logger.info(
|
|
138
|
-
f"Experiment summary:\n"
|
|
139
|
-
f"Runmodel: {run_model}\n"
|
|
140
|
-
f"Realizations: {num_realizations}\n"
|
|
141
|
-
f"Parameters: {parameter_count}\n"
|
|
142
|
-
f"Observations: {observations_count}"
|
|
143
|
-
)
|
|
144
|
-
|
|
145
126
|
@staticmethod
|
|
146
127
|
def _runlength_encode_list(strings: list[str]) -> list[tuple[str, int]]:
|
|
147
128
|
"""Runlength encode a list of strings.
|
|
@@ -11,7 +11,6 @@ from polars import DataFrame
|
|
|
11
11
|
from PyQt6.QtCore import Qt
|
|
12
12
|
from PyQt6.QtCore import pyqtSlot as Slot
|
|
13
13
|
from PyQt6.QtWidgets import (
|
|
14
|
-
QAbstractItemView,
|
|
15
14
|
QFrame,
|
|
16
15
|
QHBoxLayout,
|
|
17
16
|
QLabel,
|
|
@@ -166,9 +165,6 @@ class _EnsembleWidget(QWidget):
|
|
|
166
165
|
observations_frame.setLayout(observations_layout)
|
|
167
166
|
|
|
168
167
|
self._parameters_table = QTableWidget()
|
|
169
|
-
self._parameters_table.setEditTriggers(
|
|
170
|
-
QAbstractItemView.EditTrigger.NoEditTriggers
|
|
171
|
-
)
|
|
172
168
|
self._export_params_button = QPushButton("Export...")
|
|
173
169
|
self._export_params_button.clicked.connect(self.onClickExportParameters)
|
|
174
170
|
|
|
@@ -223,12 +219,9 @@ class _EnsembleWidget(QWidget):
|
|
|
223
219
|
return
|
|
224
220
|
|
|
225
221
|
observation_key = selected.data(1, Qt.ItemDataRole.DisplayRole)
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
if not observation_key or not parent:
|
|
222
|
+
if not observation_key:
|
|
229
223
|
return
|
|
230
224
|
|
|
231
|
-
response_type = parent.data(0, Qt.ItemDataRole.UserRole)
|
|
232
225
|
observation_label = selected.data(0, Qt.ItemDataRole.DisplayRole)
|
|
233
226
|
assert self._ensemble is not None
|
|
234
227
|
observations_dict = self._ensemble.experiment.observations
|
|
@@ -238,7 +231,17 @@ class _EnsembleWidget(QWidget):
|
|
|
238
231
|
ax.set_title(observation_key)
|
|
239
232
|
ax.grid(True)
|
|
240
233
|
|
|
241
|
-
obs_for_type =
|
|
234
|
+
response_type, obs_for_type = next(
|
|
235
|
+
(
|
|
236
|
+
(response_type, df)
|
|
237
|
+
for response_type, df in observations_dict.items()
|
|
238
|
+
if observation_key in df["observation_key"]
|
|
239
|
+
),
|
|
240
|
+
(None, None),
|
|
241
|
+
)
|
|
242
|
+
|
|
243
|
+
assert response_type is not None
|
|
244
|
+
assert obs_for_type is not None
|
|
242
245
|
|
|
243
246
|
response_config = self._ensemble.experiment.response_configuration[
|
|
244
247
|
response_type
|
|
@@ -370,23 +373,14 @@ class _EnsembleWidget(QWidget):
|
|
|
370
373
|
.to_numpy()
|
|
371
374
|
):
|
|
372
375
|
match_list = self._observations_tree_widget.findItems(
|
|
373
|
-
response_key, Qt.MatchFlag.MatchExactly
|
|
376
|
+
response_key, Qt.MatchFlag.MatchExactly
|
|
374
377
|
)
|
|
375
|
-
|
|
376
|
-
root = next(
|
|
377
|
-
(
|
|
378
|
-
item
|
|
379
|
-
for item in match_list
|
|
380
|
-
if item.data(0, Qt.ItemDataRole.UserRole) == response_type
|
|
381
|
-
),
|
|
382
|
-
None,
|
|
383
|
-
)
|
|
384
|
-
|
|
385
|
-
if root is None:
|
|
378
|
+
if len(match_list) == 0:
|
|
386
379
|
root = QTreeWidgetItem(
|
|
387
380
|
self._observations_tree_widget, [response_key]
|
|
388
381
|
)
|
|
389
|
-
|
|
382
|
+
else:
|
|
383
|
+
root = match_list[0]
|
|
390
384
|
|
|
391
385
|
obs_ds = obs_ds_for_type.filter(
|
|
392
386
|
pl.col("observation_key").eq(obs_key)
|
|
@@ -402,7 +396,9 @@ class _EnsembleWidget(QWidget):
|
|
|
402
396
|
],
|
|
403
397
|
)
|
|
404
398
|
|
|
405
|
-
|
|
399
|
+
self._observations_tree_widget.sortItems(
|
|
400
|
+
0, Qt.SortOrder.AscendingOrder
|
|
401
|
+
)
|
|
406
402
|
|
|
407
403
|
for i in range(self._observations_tree_widget.topLevelItemCount()):
|
|
408
404
|
item = self._observations_tree_widget.topLevelItem(i)
|
|
@@ -163,7 +163,6 @@ class PlotWidget(QWidget):
|
|
|
163
163
|
vbox.addSpacing(8)
|
|
164
164
|
self.setLayout(vbox)
|
|
165
165
|
|
|
166
|
-
self._negative_values_in_data = False
|
|
167
166
|
self._dirty = True
|
|
168
167
|
self._active = False
|
|
169
168
|
self.resetPlot()
|
|
@@ -176,15 +175,11 @@ class PlotWidget(QWidget):
|
|
|
176
175
|
self._figure.clear()
|
|
177
176
|
|
|
178
177
|
def _sync_log_checkbox(self) -> None:
|
|
179
|
-
if (
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
"GaussianKDEPlot",
|
|
185
|
-
}
|
|
186
|
-
and self._negative_values_in_data is False
|
|
187
|
-
):
|
|
178
|
+
if type(self._plotter).__name__ in {
|
|
179
|
+
"HistogramPlot",
|
|
180
|
+
"DistributionPlot",
|
|
181
|
+
"GaussianKDEPlot",
|
|
182
|
+
}:
|
|
188
183
|
self._log_checkbox.setVisible(True)
|
|
189
184
|
else:
|
|
190
185
|
self._log_checkbox.setVisible(False)
|
|
@@ -203,11 +198,8 @@ class PlotWidget(QWidget):
|
|
|
203
198
|
) -> None:
|
|
204
199
|
self.resetPlot()
|
|
205
200
|
try:
|
|
206
|
-
self._sync_log_checkbox()
|
|
207
201
|
plot_context.log_scale = (
|
|
208
|
-
self._log_checkbox.isVisible()
|
|
209
|
-
and self._log_checkbox.isChecked()
|
|
210
|
-
and self._negative_values_in_data is False
|
|
202
|
+
self._log_checkbox.isVisible() and self._log_checkbox.isChecked()
|
|
211
203
|
)
|
|
212
204
|
self._plotter.plot(
|
|
213
205
|
self._figure,
|
|
@@ -218,6 +210,7 @@ class PlotWidget(QWidget):
|
|
|
218
210
|
key_def,
|
|
219
211
|
)
|
|
220
212
|
self._canvas.draw()
|
|
213
|
+
self._sync_log_checkbox()
|
|
221
214
|
except Exception as e:
|
|
222
215
|
exc_type, _, exc_tb = sys.exc_info()
|
|
223
216
|
sys.stderr.write("-" * 80 + "\n")
|
|
@@ -284,15 +284,6 @@ class PlotWindow(QMainWindow):
|
|
|
284
284
|
except BaseException as e:
|
|
285
285
|
handle_exception(e)
|
|
286
286
|
|
|
287
|
-
negative_values_in_data = False
|
|
288
|
-
if key_def.parameter is not None and key_def.parameter.type == "gen_kw":
|
|
289
|
-
for data in ensemble_to_data_map.values():
|
|
290
|
-
data = data.T
|
|
291
|
-
if data.le(0).any().any():
|
|
292
|
-
negative_values_in_data = True
|
|
293
|
-
break
|
|
294
|
-
|
|
295
|
-
plot_widget._negative_values_in_data = negative_values_in_data
|
|
296
287
|
observations = None
|
|
297
288
|
if key_def.observations and selected_ensembles:
|
|
298
289
|
try:
|
ert/run_models/run_model.py
CHANGED
|
@@ -253,8 +253,28 @@ class RunModel(RunModelConfig, ABC):
|
|
|
253
253
|
for key, value in self.__dict__.items()
|
|
254
254
|
if key not in keys_to_drop
|
|
255
255
|
}
|
|
256
|
+
settings_summary = {
|
|
257
|
+
"run_model": self.name(),
|
|
258
|
+
"num_realizations": self.runpath_config.num_realizations,
|
|
259
|
+
"num_active_realizations": self.active_realizations.count(True),
|
|
260
|
+
"num_parameters": (
|
|
261
|
+
sum(
|
|
262
|
+
len(param_config.parameter_keys)
|
|
263
|
+
for param_config in self.parameter_configuration
|
|
264
|
+
)
|
|
265
|
+
if hasattr(self, "parameter_configuration")
|
|
266
|
+
else "NA"
|
|
267
|
+
),
|
|
268
|
+
"localization": getattr(
|
|
269
|
+
settings_dict.get("analysis_settings", {}), "localization", "NA"
|
|
270
|
+
),
|
|
271
|
+
}
|
|
256
272
|
|
|
257
|
-
logger.info(
|
|
273
|
+
logger.info(
|
|
274
|
+
f"Running '{self.name()}'\n\n"
|
|
275
|
+
f"Settings summary: {settings_summary}\n\n"
|
|
276
|
+
f"Settings: {settings_dict}"
|
|
277
|
+
)
|
|
258
278
|
|
|
259
279
|
@field_validator("env_vars", mode="after")
|
|
260
280
|
@classmethod
|
ert/shared/version.py
CHANGED
|
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
|
|
|
28
28
|
commit_id: COMMIT_ID
|
|
29
29
|
__commit_id__: COMMIT_ID
|
|
30
30
|
|
|
31
|
-
__version__ = version = '19.0.
|
|
32
|
-
__version_tuple__ = version_tuple = (19, 0, 0)
|
|
31
|
+
__version__ = version = '19.0.0rc0'
|
|
32
|
+
__version_tuple__ = version_tuple = (19, 0, 0, 'rc0')
|
|
33
33
|
|
|
34
|
-
__commit_id__ = commit_id = '
|
|
34
|
+
__commit_id__ = commit_id = 'gacbd663a0'
|
ert/storage/local_ensemble.py
CHANGED
|
@@ -679,9 +679,6 @@ class LocalEnsemble(BaseMode):
|
|
|
679
679
|
if complete_df is None:
|
|
680
680
|
complete_df = ds
|
|
681
681
|
else:
|
|
682
|
-
complete_df = complete_df.drop(
|
|
683
|
-
[c for c in ds.columns if c != "realization"], strict=False
|
|
684
|
-
)
|
|
685
682
|
complete_df = (
|
|
686
683
|
complete_df.join(ds, on="realization", how="left")
|
|
687
684
|
.unique(subset=["realization"], keep="first")
|
|
@@ -1099,11 +1096,6 @@ class LocalEnsemble(BaseMode):
|
|
|
1099
1096
|
on=["response_key", *response_cls.primary_key],
|
|
1100
1097
|
)
|
|
1101
1098
|
|
|
1102
|
-
# Do not drop primary keys which
|
|
1103
|
-
# overlap with localization attributes
|
|
1104
|
-
primary_keys_to_drop = set(response_cls.primary_key).difference(
|
|
1105
|
-
{"north", "east", "radius"}
|
|
1106
|
-
)
|
|
1107
1099
|
joined = (
|
|
1108
1100
|
joined.with_columns(
|
|
1109
1101
|
pl.concat_str(
|
|
@@ -1113,7 +1105,7 @@ class LocalEnsemble(BaseMode):
|
|
|
1113
1105
|
# Avoid potential collisions w/ primary key
|
|
1114
1106
|
)
|
|
1115
1107
|
)
|
|
1116
|
-
.drop(
|
|
1108
|
+
.drop(response_cls.primary_key)
|
|
1117
1109
|
.rename({"__tmp_index_key__": "index"})
|
|
1118
1110
|
)
|
|
1119
1111
|
|
|
@@ -1129,9 +1121,6 @@ class LocalEnsemble(BaseMode):
|
|
|
1129
1121
|
"observation_key",
|
|
1130
1122
|
"observations",
|
|
1131
1123
|
"std",
|
|
1132
|
-
"east",
|
|
1133
|
-
"north",
|
|
1134
|
-
"radius",
|
|
1135
1124
|
]
|
|
1136
1125
|
)
|
|
1137
1126
|
|
ert/storage/local_storage.py
CHANGED
|
@@ -31,7 +31,7 @@ from .realization_storage_state import RealizationStorageState
|
|
|
31
31
|
|
|
32
32
|
logger = logging.getLogger(__name__)
|
|
33
33
|
|
|
34
|
-
_LOCAL_STORAGE_VERSION =
|
|
34
|
+
_LOCAL_STORAGE_VERSION = 21
|
|
35
35
|
|
|
36
36
|
|
|
37
37
|
class _Migrations(BaseModel):
|
|
@@ -517,8 +517,6 @@ class LocalStorage(BaseMode):
|
|
|
517
517
|
to19,
|
|
518
518
|
to20,
|
|
519
519
|
to21,
|
|
520
|
-
to22,
|
|
521
|
-
to23,
|
|
522
520
|
)
|
|
523
521
|
|
|
524
522
|
try:
|
|
@@ -569,8 +567,6 @@ class LocalStorage(BaseMode):
|
|
|
569
567
|
18: to19,
|
|
570
568
|
19: to20,
|
|
571
569
|
20: to21,
|
|
572
|
-
21: to22,
|
|
573
|
-
22: to23,
|
|
574
570
|
}
|
|
575
571
|
for from_version in range(version, _LOCAL_STORAGE_VERSION):
|
|
576
572
|
migrations[from_version].migrate(self.path)
|
|
@@ -32,7 +32,7 @@ ert/trace.py,sha256=m2ZjKd1nf7LjBM2lL0fk1cNF04HnQs8blZhQbTXgcB0,1274
|
|
|
32
32
|
ert/workflow_runner.py,sha256=3x0k6D_2euNLf2YbjjIPwICz7q7OvrvIoKUQuBcBsuc,7334
|
|
33
33
|
ert/analysis/__init__.py,sha256=NNLGQG9gex6lJ8IZjEg_tXTfSeJceRA9zjOek-UeY0Y,591
|
|
34
34
|
ert/analysis/_enif_update.py,sha256=Oh9oUiMLbBT8o3TPl9x3ZR24gqBpIn6nFPwrOjMNtnY,7654
|
|
35
|
-
ert/analysis/_es_update.py,sha256=
|
|
35
|
+
ert/analysis/_es_update.py,sha256=tav1ku3uqPBPDqDfVzsMS1gi5Zn0lRk_oXqt2LZolPs,16592
|
|
36
36
|
ert/analysis/_update_commons.py,sha256=y2MYW_B02TDBcnuPJBh3WWqBCUmL0f9JoZ8nB_-K0pQ,12375
|
|
37
37
|
ert/analysis/event.py,sha256=vBYqtTl5DXePPWHTLX9bROmGTD2ixcrQh4K07g-UikM,2248
|
|
38
38
|
ert/analysis/misfit_preprocessor.py,sha256=2MjlL2yIg5KQpqWiD3675-hoy_5QM49pWQ7VXK4rous,8001
|
|
@@ -42,10 +42,10 @@ ert/cli/main.py,sha256=oWiIUF5r2E1QOforFY-nQ2k3mrE74EDqrk8QcjcdfmE,6567
|
|
|
42
42
|
ert/cli/monitor.py,sha256=ad6aT1Ch-To5XpQR6eR1SMCBZ9HNRjPE9X8o6TEGURg,5973
|
|
43
43
|
ert/cli/workflow.py,sha256=QKbpHr_Tc5NQjSNL1tB4uCo9ykTkqvwohywbjGAm-r4,1260
|
|
44
44
|
ert/config/__init__.py,sha256=RVLt_v8nF9xjG51smLK9OXZT6yAH5KEmSgnFYYvVogU,4310
|
|
45
|
-
ert/config/_create_observation_dataframes.py,sha256=
|
|
45
|
+
ert/config/_create_observation_dataframes.py,sha256=P-cyJlushUR4Em58rRAsmK3jw3PoYhbqsT5qsHrpL7c,19717
|
|
46
46
|
ert/config/_design_matrix_validator.py,sha256=_eEk07L4c7sv8WwTYYGHc_rT1HEOZDqLrgla0r9rpj0,1308
|
|
47
47
|
ert/config/_get_num_cpu.py,sha256=IXOEHkGJEz7kEOysc29q-jpaXqbWeu-Y4FlQvGp0ryM,7684
|
|
48
|
-
ert/config/_observations.py,sha256=
|
|
48
|
+
ert/config/_observations.py,sha256=EUWQCEMqEpJgmQYvGrvyOIF25nu6w566XV-vw7QPqjU,14814
|
|
49
49
|
ert/config/_read_summary.py,sha256=_1f6iZV2tBDRtPn5C_29cyjN7suA5hh1HnLKyF9L4jY,7500
|
|
50
50
|
ert/config/_str_to_bool.py,sha256=AxNCJAuTtKF-562CRh7HgjQIyM7N-jjSlRJKvpCNk9I,852
|
|
51
51
|
ert/config/analysis_config.py,sha256=v-ZppIlP_NkmhtuYuxm31m2V3eA7YjvC3rDsMXm5qPk,8646
|
|
@@ -54,7 +54,7 @@ ert/config/capture_validation.py,sha256=8HGEbJ2z9FXeEaxSewejP7NtEh4LLomPwcdpC0CJ
|
|
|
54
54
|
ert/config/design_matrix.py,sha256=yyAFBppTwZXt4OeN6kxRmLk16jF8bntQWLHU_-rDQn4,17236
|
|
55
55
|
ert/config/distribution.py,sha256=rzpO-U8c2ptsj1KlfUw6n_CRaj-e1cvzVvasR0t5sZI,12728
|
|
56
56
|
ert/config/ensemble_config.py,sha256=b0KuQ_y85kr4AOPPX_qieYKgnDGZ4_87bSjYpVZuOlM,7322
|
|
57
|
-
ert/config/ert_config.py,sha256=
|
|
57
|
+
ert/config/ert_config.py,sha256=_UXsCXU_aV_IBqfQEuDGOT9ylopjpWrThDaYVwIWweA,57147
|
|
58
58
|
ert/config/ert_plugin.py,sha256=hENwrc9FfhqUYjVpFYcmy66jDLgU_gagOJFBcYjxe6A,458
|
|
59
59
|
ert/config/ert_script.py,sha256=64FZ-dMI8DZtRLHWReC19KY-ZOsBhdgYkwAe9ZWLc_I,8405
|
|
60
60
|
ert/config/everest_control.py,sha256=-bwFEb_GpdodQ3N_BscQdcKatMlWBs8UVSCDURV8Q3s,8072
|
|
@@ -88,7 +88,7 @@ ert/config/parsing/config_dict.py,sha256=yyBb-NeaFnIjENrcziVA11Bq43uGguUiPECcKWL
|
|
|
88
88
|
ert/config/parsing/config_errors.py,sha256=p3lAcRPXTm4okupdVyLwRCVWJ_86a7rgCohkDaLRM10,4806
|
|
89
89
|
ert/config/parsing/config_keywords.py,sha256=Ub09FvpRuxjReqc81JMOLsTWVyCZbro0alvCQYyGmVw,1928
|
|
90
90
|
ert/config/parsing/config_schema.py,sha256=XacwMh-PZqUUbt1g0AhKRPOGt44lRUvaMrVny2jYsV8,9846
|
|
91
|
-
ert/config/parsing/config_schema_deprecations.py,sha256=
|
|
91
|
+
ert/config/parsing/config_schema_deprecations.py,sha256=4EgkP1DnW4Dvflqa2VPqeBhQQAndeAMw-xpXaFKfmJU,9119
|
|
92
92
|
ert/config/parsing/config_schema_item.py,sha256=WOdE1fzEyIVMdiCzj4fJuqgEbC3Ivc7uR4gENEH2s6Q,14500
|
|
93
93
|
ert/config/parsing/context_values.py,sha256=cNfiT1I93Y2g9rwAnS9jXKSqSDxI9-jZVOSwVMQHTZ0,2280
|
|
94
94
|
ert/config/parsing/deprecation_info.py,sha256=E31LBTiG1qNeqACU8lTxp54bESIeuuVHgFim8j8uVjg,663
|
|
@@ -99,7 +99,7 @@ ert/config/parsing/forward_model_schema.py,sha256=m2a9rVVPbw8HusoIv5bgrGbnPVKt-9
|
|
|
99
99
|
ert/config/parsing/history_source.py,sha256=z-DCe5TS3egxSXoK1kOIXC2IWL70kUhQNtzfTWsl8iU,141
|
|
100
100
|
ert/config/parsing/hook_runtime.py,sha256=f1rRgYOXl6HY0acMNT0am5cdS-5cJFA0FnCausoEDmA,315
|
|
101
101
|
ert/config/parsing/lark_parser.py,sha256=SS0yXTI5w_qmpFvePMO-r0g9NPqOOrlCFF3amPefnLM,15930
|
|
102
|
-
ert/config/parsing/observations_parser.py,sha256=
|
|
102
|
+
ert/config/parsing/observations_parser.py,sha256=35l2UdX3mBPh51wOjyUnruo5FdH5YOxqQ1X6TuRMYyQ,6792
|
|
103
103
|
ert/config/parsing/queue_system.py,sha256=2bFuVc1JSVyE3gnBnN4YsUXHfLHeWAtasnPPCu9Za_w,793
|
|
104
104
|
ert/config/parsing/schema_dict.py,sha256=MWKhtLhdRvqfWm8oZatWFnAhiIU03DdQCOaX6A71068,4313
|
|
105
105
|
ert/config/parsing/schema_item_type.py,sha256=LP6lXE7YihnAEVP3kCJ80kdpgH6Veu--xcPfgaqJhdc,653
|
|
@@ -122,7 +122,7 @@ ert/dark_storage/endpoints/__init__.py,sha256=o093-GLgw8br7PDKhHna0LviXeJQdC5P1R
|
|
|
122
122
|
ert/dark_storage/endpoints/ensembles.py,sha256=22M358HTAjiNuKaRYp9FZ3SZvkWL3v9wMDD0DGwLF8M,1363
|
|
123
123
|
ert/dark_storage/endpoints/experiment_server.py,sha256=snaCwRXayGn6_SIqH49Qmi4u1ZILiH2ynFZL6L4YsxQ,14118
|
|
124
124
|
ert/dark_storage/endpoints/experiments.py,sha256=_tY95HzW6ibJy7N9C-1XICFHSOrKdz4vM3bv7ePRvY8,3413
|
|
125
|
-
ert/dark_storage/endpoints/observations.py,sha256=
|
|
125
|
+
ert/dark_storage/endpoints/observations.py,sha256=EpetZi7cjlrexfU9VPdiTJV1PT6k0ZNx366WGlfKZM4,4574
|
|
126
126
|
ert/dark_storage/endpoints/parameters.py,sha256=LERil7H-L3ZsPGGFm97kvy3XeIqpceyBe5aSFLkSVEY,4406
|
|
127
127
|
ert/dark_storage/endpoints/responses.py,sha256=tFEdgqP1vcOuRPmr4YpE9okEpxowXMoYjYdUq2wljZ8,6195
|
|
128
128
|
ert/dark_storage/endpoints/updates.py,sha256=BWEh2XUTqdsPPEtiSE8bJtXcFVzw-GlbKIK3vvc_Cu8,142
|
|
@@ -151,15 +151,15 @@ ert/exceptions/_exceptions.py,sha256=dv4rs5oWe00PcelvGEsTscD3AKhI1uwwSjprMSHk4xw
|
|
|
151
151
|
ert/field_utils/__init__.py,sha256=bnjVYQq0A1lkTUSDUHU8pBtnkQmvdw-zrtFhUT41FW4,768
|
|
152
152
|
ert/field_utils/field_file_format.py,sha256=QWDQYsba2zUfbMltBxReZqAZOYWkHb8kG_xY7BvBzO0,297
|
|
153
153
|
ert/field_utils/field_utils.py,sha256=Z6mbMHLNyCPdPDyD01Z_myLXfiki3j9MkT08S4awVuk,16791
|
|
154
|
-
ert/field_utils/grdecl_io.py,sha256=
|
|
154
|
+
ert/field_utils/grdecl_io.py,sha256=kgSE3Fyr_7KDS1HQRmO7RQLMwgrkgJ_Tsmo7jE9GE1s,8971
|
|
155
155
|
ert/field_utils/roff_io.py,sha256=m4RX2134kVbEkuPjIY5OthavRe4kNirtL4jNdEf_xpU,4014
|
|
156
156
|
ert/gui/__init__.py,sha256=Q-BjtVNAk8Kw2hcPMlCkbTOSjNZPzSX5xl0tFUUI2bY,689
|
|
157
157
|
ert/gui/about_dialog.py,sha256=H0Jfso2v9s1eONTVgghH84UcaUlwVs0Cqqbv17Hvw4g,3127
|
|
158
158
|
ert/gui/ertnotifier.py,sha256=4ZFXOrk2ATr5Dq-WW-0s_wokfKHIUgrBn3Y6cfb3JlM,3030
|
|
159
159
|
ert/gui/find_ert_info.py,sha256=hwqiCa5rDZEL_25QVsx920d9NOaVM2PyUor89_-70-Q,301
|
|
160
|
-
ert/gui/main.py,sha256=
|
|
160
|
+
ert/gui/main.py,sha256=1Of1DzQ89IH93zdax9akZUi260trVwH01F24Khb-S20,10110
|
|
161
161
|
ert/gui/main_window.py,sha256=kvqQgf-6XUJibJhFgefD1vqFQm0TRTcBGcYVGdP8Uxk,14780
|
|
162
|
-
ert/gui/summarypanel.py,sha256=
|
|
162
|
+
ert/gui/summarypanel.py,sha256=t12-A7Xx9ASoHa90VBZAISpSOVWvOYFb4GDTUpXkeSc,4235
|
|
163
163
|
ert/gui/ertwidgets/__init__.py,sha256=LtwHe4wpA0YpbealTrukMb7rDSSTxSyGkVaM8IvlI8A,1878
|
|
164
164
|
ert/gui/ertwidgets/analysismoduleedit.py,sha256=Ff9gzaQHrEH1yQ2tWg15fZrUN0mr_rJEUMciatOjlLc,1444
|
|
165
165
|
ert/gui/ertwidgets/analysismodulevariablespanel.py,sha256=xL_UHZsTkETF1hovkLa9ax58ofBVpa-jO0fhnL6ZyA4,4954
|
|
@@ -238,7 +238,7 @@ ert/gui/simulation/ensemble_information_filter_panel.py,sha256=GafKsROmB2AmzvuR4
|
|
|
238
238
|
ert/gui/simulation/ensemble_smoother_panel.py,sha256=kZ1i6BXQB7e1MnUp8dSmXCSPO9d_4r8_jARlDzUqVNI,6489
|
|
239
239
|
ert/gui/simulation/evaluate_ensemble_panel.py,sha256=o5enKuNViMWRKUtEtzUqumcS8FHhGNkheYF3wji5EJs,4978
|
|
240
240
|
ert/gui/simulation/experiment_config_panel.py,sha256=wDFwfJ6JtFZrQVd66qwakzsbSR3uhPOLfFszwg-bAXQ,850
|
|
241
|
-
ert/gui/simulation/experiment_panel.py,sha256=
|
|
241
|
+
ert/gui/simulation/experiment_panel.py,sha256=s9kepWEoYiRyJ7V9m7HntGXEk9AdTQdlTORS3hST_XM,15410
|
|
242
242
|
ert/gui/simulation/manual_update_panel.py,sha256=mhXKnNGJqR8NtXHFvWtDHRsrDA_SCwBbRsB38kIX1OU,6955
|
|
243
243
|
ert/gui/simulation/multiple_data_assimilation_panel.py,sha256=O3sCbHFfzaVft2kSWcs3gVHeWa5DXhUvdhUBZM0xv_Y,14951
|
|
244
244
|
ert/gui/simulation/queue_emitter.py,sha256=Rse2W2mL7NQBiYM3iYunRWN7hCCD_kHb1ThuO5ixxZQ,1916
|
|
@@ -263,7 +263,7 @@ ert/gui/tools/load_results/load_results_tool.py,sha256=deP__dGX8z5iycPMYv3cYyOta
|
|
|
263
263
|
ert/gui/tools/manage_experiments/__init__.py,sha256=MAB41GPqlpALPYRvFFpKCcr2Sz3cya7Grd88jLxUj2A,99
|
|
264
264
|
ert/gui/tools/manage_experiments/export_dialog.py,sha256=tWtttCLqr4T0HK9uEtM8JUubBLvytn_A2cZRZBvJ1AI,4485
|
|
265
265
|
ert/gui/tools/manage_experiments/manage_experiments_panel.py,sha256=EUGOo68g8E9f4oG3K4MFRCu8a7rm7ojOF6jUvz_dqic,5680
|
|
266
|
-
ert/gui/tools/manage_experiments/storage_info_widget.py,sha256=
|
|
266
|
+
ert/gui/tools/manage_experiments/storage_info_widget.py,sha256=3xgJCkY3QmslmatptXPqmzCUONuNUaiK_pwTE3G973A,19723
|
|
267
267
|
ert/gui/tools/manage_experiments/storage_model.py,sha256=wf5JPqvbFWLI9ZcVTc4gpZh3hUPDNwOxRdbdcRtjKCc,6802
|
|
268
268
|
ert/gui/tools/manage_experiments/storage_widget.py,sha256=pe5mWOgw-uNGXaZYhl1JsF5--Krz1W4n3Ut4sRcx6uc,6692
|
|
269
269
|
ert/gui/tools/plot/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -272,8 +272,8 @@ ert/gui/tools/plot/data_type_keys_widget.py,sha256=AgJh_7vfXFKzzzCMq8pxhldkzuhBt
|
|
|
272
272
|
ert/gui/tools/plot/data_type_proxy_model.py,sha256=DGj7GsDwbvr2OUIudmQpdnoqtPeWyKVJHlctxl1TzzQ,2176
|
|
273
273
|
ert/gui/tools/plot/plot_api.py,sha256=8nkfFZJENIrHI-yWwHnrg01AOjYGiV3eE1Qfj-7aUTI,16361
|
|
274
274
|
ert/gui/tools/plot/plot_ensemble_selection_widget.py,sha256=WnXsI5SwIklPvlkJ_02qjv6T8pDhXVStiHqerD53u_4,7619
|
|
275
|
-
ert/gui/tools/plot/plot_widget.py,sha256=
|
|
276
|
-
ert/gui/tools/plot/plot_window.py,sha256=
|
|
275
|
+
ert/gui/tools/plot/plot_widget.py,sha256=w_avqCvBe68rvZXOa4WiFC2IsXSbIAYOGEZhHtzFeiA,7527
|
|
276
|
+
ert/gui/tools/plot/plot_window.py,sha256=_9KgIi_jbNNUnOW80DkCJb1GACStYRQ7BZYAq2fE7Hs,17327
|
|
277
277
|
ert/gui/tools/plot/customize/__init__.py,sha256=spAW99ubzOmWuScii_idW0frGDttKCcT4XQegF3vOSU,151
|
|
278
278
|
ert/gui/tools/plot/customize/color_chooser.py,sha256=fxrXEFCCvHwJnE0pQMELIy0torqSNATnARx6hBgSV5E,2576
|
|
279
279
|
ert/gui/tools/plot/customize/customization_view.py,sha256=er1PQnhePTs43dsB9gDV7nkMDV0tDmqFneHG7R5UDkM,5093
|
|
@@ -378,7 +378,7 @@ ert/run_models/manual_update.py,sha256=CjuoWjtVeyo4fT7HmKqtmiQflKJtcoQVJWrf6BXTB
|
|
|
378
378
|
ert/run_models/manual_update_enif.py,sha256=79l_hSrNN-6gvuBQBFiEYYbKOAdLLI0UwyMbzVlFSTU,995
|
|
379
379
|
ert/run_models/model_factory.py,sha256=DzRIIlSOWOn2VpUFAoThiKVDohNgT2a804qcw-RYcrY,21166
|
|
380
380
|
ert/run_models/multiple_data_assimilation.py,sha256=Mg6OoR3ncNgOm7bNeV-5FdBRRljEs7Nyef4W48yPVks,8471
|
|
381
|
-
ert/run_models/run_model.py,sha256=
|
|
381
|
+
ert/run_models/run_model.py,sha256=uudHZOlsuuIQL68Me0FtT27_dxJtt5Awk1VGF9F7iLg,31005
|
|
382
382
|
ert/run_models/single_test_run.py,sha256=-5Z-JB_VYlR4p4PAtKTcj5QzYjdj7EFn6_6odjlPJH0,1069
|
|
383
383
|
ert/run_models/update_run_model.py,sha256=nWTnLVnXN_1Si55v_ZJaKYhDgo_G1JgZ-bz6JFjbvOg,5407
|
|
384
384
|
ert/scheduler/__init__.py,sha256=Swxw-mDWEUr6jD8LLfF2tWDJnMv3oEVSbRrOh9DtZwE,1368
|
|
@@ -397,7 +397,7 @@ ert/services/ert_server.py,sha256=qIzqugIHcxwKuzjkItiMt3jah3hNI7x3NQ3p_WBBf_o,10
|
|
|
397
397
|
ert/services/webviz_ert_service.py,sha256=J5vznqb_-DjlDMOze7tdvuBE4GWEPgJ5dIIXvRLKd0Y,650
|
|
398
398
|
ert/shared/__init__.py,sha256=OwgL-31MxA0fabETJ5Svw0tqJpHi569CZDRFHdHiqA0,644
|
|
399
399
|
ert/shared/net_utils.py,sha256=Wp9Qyd5wWNHPU0Myh1GCbUONu0a-akYEdJ07MjQJt4I,6130
|
|
400
|
-
ert/shared/version.py,sha256=
|
|
400
|
+
ert/shared/version.py,sha256=dYRH7xFlGgBM4Odm4Eg0B4zUpeD9MIneMf8amlwjaeo,724
|
|
401
401
|
ert/shared/_doc_utils/__init__.py,sha256=09KMJxjza26BXouUy6yJmMiSuYFGSI6c8nZ-1_qXh90,995
|
|
402
402
|
ert/shared/_doc_utils/ert_jobs.py,sha256=uHP8ozhKwCHG6BkyhAgCGoy59JEFb102pHKot-5ZEys,8054
|
|
403
403
|
ert/shared/_doc_utils/everest_jobs.py,sha256=uBDN7tIwlBJIZVZ6ZFL1tkewEJJGDLoeVrFIIrJznvM,2081
|
|
@@ -414,9 +414,9 @@ ert/shared/storage/connection.py,sha256=Y5P8B8B__j3doE9UE-1QROFYwrLcrmFcG80LhGTd
|
|
|
414
414
|
ert/shared/storage/extraction.py,sha256=52Nyh2SITXIglEBMIRcW2a_iqJL3OdAf_dWMY0plTZE,1307
|
|
415
415
|
ert/storage/__init__.py,sha256=f4uzzomaB1TpFpzGMF2Jd_PV54lq4EfkiZzQApDBuPQ,2110
|
|
416
416
|
ert/storage/load_status.py,sha256=7h_GdA2qYGgQ-M5AOIo7xG43ljwzEEgbRb7vg0xSYEE,304
|
|
417
|
-
ert/storage/local_ensemble.py,sha256=
|
|
417
|
+
ert/storage/local_ensemble.py,sha256=m3p8pUG8mYzYO8l_tnhjlVvhQwvPp97ztUNDO4Zjd1s,50965
|
|
418
418
|
ert/storage/local_experiment.py,sha256=JNdTQWn0jJLqN8pYeh4XbuSxxiTN5Qbc0nkJzzgjhAU,16871
|
|
419
|
-
ert/storage/local_storage.py,sha256=
|
|
419
|
+
ert/storage/local_storage.py,sha256=oDdhtQkuKXrmXiFX-RKSoyfHwSWkS1M61yZZvmJQJQ0,24011
|
|
420
420
|
ert/storage/mode.py,sha256=GJBlRSqS0Q06qDvaAztdcG-oV2MLsVID2Mo3OgQKjUw,2470
|
|
421
421
|
ert/storage/realization_storage_state.py,sha256=JdiBr__Ce5e1MzmRsRdMuwgCtiuHZRjsQ-as8ivTX7Q,220
|
|
422
422
|
ert/storage/migration/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -432,8 +432,6 @@ ert/storage/migration/to18.py,sha256=R6ou46jS-R03WJKB4ZeHTehzTsxH4df2QsJ9wczeQPk
|
|
|
432
432
|
ert/storage/migration/to19.py,sha256=1FmfNeXBW149W07u78AyU39g57TXXNl-fG9c4kqlIpU,1090
|
|
433
433
|
ert/storage/migration/to20.py,sha256=DZ79hfJxdbaewP4W8TyRdsQvi-FkeSco_0uZKBdyD_4,697
|
|
434
434
|
ert/storage/migration/to21.py,sha256=ArUePLN6placVlgKFS2Fi1kWD4qQZ1bsJGOxYMmhCP0,811
|
|
435
|
-
ert/storage/migration/to22.py,sha256=UxPy5i5o0UzNk9chY024PmwbHMdJCXCngmsquG_yGkI,622
|
|
436
|
-
ert/storage/migration/to23.py,sha256=ynhYCm1yZEUvCmJpSBNrElzpGLOKpb29IjSe-Dd8azg,1740
|
|
437
435
|
ert/storage/migration/to6.py,sha256=Pj9lVCyPCOP0-dt4uypsZtS5Awbc8B7oaySu_VTwnnA,1514
|
|
438
436
|
ert/storage/migration/to7.py,sha256=hV5lLfaQegyvxsy_lWfsiQAYVPCvS8Oe0fYc_fvKXzY,4500
|
|
439
437
|
ert/storage/migration/to8.py,sha256=VL7A5KWTSFhBWmx3n-vCKBaEd2U8SUqyz8vPieyVd9E,5390
|
|
@@ -455,7 +453,7 @@ ert/validation/validation_status.py,sha256=f47_B7aS-9DEh6uaVzKxD97pXienkyTVVCqTy
|
|
|
455
453
|
ert/warnings/__init__.py,sha256=IBwQVkdD7Njaad9PAB-9K-kr15wnA4EBKboxyqgu9NA,214
|
|
456
454
|
ert/warnings/_warnings.py,sha256=7qhNZ0W4nnljzoOx6AXX7VlMv5pa34Ek5M5n1Ep0Kak,189
|
|
457
455
|
ert/warnings/specific_warning_handler.py,sha256=5dVXtOhzcMmtPBGx4AOddXNPfzTFOPA7RVtdH8hLv68,932
|
|
458
|
-
ert-19.0.
|
|
456
|
+
ert-19.0.0rc0.dist-info/licenses/COPYING,sha256=jOtLnuWt7d5Hsx6XXB2QxzrSe2sWWh3NgMfFRetluQM,35147
|
|
459
457
|
everest/__init__.py,sha256=8_f50f6H3-onqaiuNCwC0Eiotdl9JuTxhwyF_54MVvU,306
|
|
460
458
|
everest/config_file_loader.py,sha256=rOHYvB4ayB2MaKdaAynvJVtbCOqi_z25EdwEqJ02-DQ,5675
|
|
461
459
|
everest/everest_storage.py,sha256=c3sgU7-3BDSRXxJfCR_4F58rWEaoII1wygz6VvM-GGI,42025
|
|
@@ -519,8 +517,8 @@ everest/templates/well_drill.tmpl,sha256=9iLexmBHMsMQNXyyRK4GlmVuVpVIxRcCHpy1av5
|
|
|
519
517
|
everest/templates/well_order.tmpl,sha256=XJ1eVRkeyTdLu5sLsltJSSK6BDLN7rFOAqLdM3ZZy3w,75
|
|
520
518
|
everest/util/__init__.py,sha256=xEYLz6pUtgkH8VHer1RfoCwKiO70dBnuhHonsOPaOx0,1359
|
|
521
519
|
everest/util/forward_models.py,sha256=JPxHhLI6TrmQJwW50wwGBmw57TfRd8SG2svYhXFHrc8,1617
|
|
522
|
-
ert-19.0.
|
|
523
|
-
ert-19.0.
|
|
524
|
-
ert-19.0.
|
|
525
|
-
ert-19.0.
|
|
526
|
-
ert-19.0.
|
|
520
|
+
ert-19.0.0rc0.dist-info/METADATA,sha256=vVVYDH1Ft-IoeiPEyBd90igwASV5MnX5WcTP-m7SK6I,10015
|
|
521
|
+
ert-19.0.0rc0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
522
|
+
ert-19.0.0rc0.dist-info/entry_points.txt,sha256=ChZ7vn8Qy9v9rT8GM2JtAvWDN3NVoy4BIcvVRtU73CM,189
|
|
523
|
+
ert-19.0.0rc0.dist-info/top_level.txt,sha256=LRh9GfdfyDWfAGmrQgp_XdoMHA4v6aotw8xgsy5YyHE,17
|
|
524
|
+
ert-19.0.0rc0.dist-info/RECORD,,
|
ert/storage/migration/to22.py
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
from pathlib import Path
|
|
2
|
-
|
|
3
|
-
import polars as pl
|
|
4
|
-
|
|
5
|
-
info = "Add default None values to summary observations LOCATION keywords"
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
def migrate(path: Path) -> None:
|
|
9
|
-
for summary_observation in path.glob("experiments/*/observations/summary"):
|
|
10
|
-
summary_df = pl.read_parquet(summary_observation)
|
|
11
|
-
|
|
12
|
-
for location_kw in ["location_x", "location_y", "location_range"]:
|
|
13
|
-
if location_kw not in summary_df.columns:
|
|
14
|
-
summary_df = summary_df.with_columns(
|
|
15
|
-
pl.lit(None, dtype=pl.Float32).alias(location_kw)
|
|
16
|
-
)
|
|
17
|
-
|
|
18
|
-
summary_df.write_parquet(summary_observation)
|
ert/storage/migration/to23.py
DELETED
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
from pathlib import Path
|
|
2
|
-
|
|
3
|
-
import polars as pl
|
|
4
|
-
|
|
5
|
-
info = "Add default None values to summary observations LOCATION keywords"
|
|
6
|
-
|
|
7
|
-
old_localization_keywords = ["location_x", "location_y", "location_range"]
|
|
8
|
-
new_localization_keywords = ["east", "north", "radius"]
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
def migrate(path: Path) -> None:
|
|
12
|
-
for gen_obs in path.glob("experiments/*/observations/gen_data"):
|
|
13
|
-
gen_obs_df = pl.read_parquet(gen_obs)
|
|
14
|
-
|
|
15
|
-
for new_kw in new_localization_keywords:
|
|
16
|
-
if new_kw not in gen_obs_df.columns:
|
|
17
|
-
gen_obs_df = gen_obs_df.with_columns(
|
|
18
|
-
pl.lit(None, dtype=pl.Float32).alias(new_kw)
|
|
19
|
-
)
|
|
20
|
-
|
|
21
|
-
gen_obs_df.write_parquet(gen_obs)
|
|
22
|
-
|
|
23
|
-
for rft_obs in path.glob("experiments/*/observations/rft"):
|
|
24
|
-
rft_obs_df = pl.read_parquet(rft_obs)
|
|
25
|
-
|
|
26
|
-
for new_kw in new_localization_keywords:
|
|
27
|
-
if new_kw not in rft_obs_df.columns:
|
|
28
|
-
rft_obs_df = rft_obs_df.with_columns(
|
|
29
|
-
pl.lit(None, dtype=pl.Float32).alias(new_kw)
|
|
30
|
-
)
|
|
31
|
-
|
|
32
|
-
rft_obs_df.write_parquet(rft_obs)
|
|
33
|
-
|
|
34
|
-
for summary_obs in path.glob("experiments/*/observations/summary"):
|
|
35
|
-
summary_df = pl.read_parquet(summary_obs)
|
|
36
|
-
|
|
37
|
-
for old_kw, new_kw in zip(
|
|
38
|
-
old_localization_keywords, new_localization_keywords, strict=True
|
|
39
|
-
):
|
|
40
|
-
if old_kw in summary_df.columns:
|
|
41
|
-
column = summary_df[old_kw]
|
|
42
|
-
summary_df = summary_df.with_columns(column.alias(new_kw))
|
|
43
|
-
summary_df = summary_df.drop(old_kw)
|
|
44
|
-
else:
|
|
45
|
-
summary_df = summary_df.with_columns(
|
|
46
|
-
pl.lit(None, dtype=pl.Float32).alias(new_kw)
|
|
47
|
-
)
|
|
48
|
-
|
|
49
|
-
summary_df.write_parquet(summary_obs)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|