ert 19.0.0rc3__py3-none-any.whl → 19.0.1__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/cli/main.py +0 -1
- ert/config/_create_observation_dataframes.py +28 -51
- ert/config/_observations.py +29 -13
- ert/config/ert_config.py +0 -19
- ert/config/parsing/config_keywords.py +0 -1
- ert/config/parsing/config_schema.py +0 -8
- ert/config/parsing/observations_parser.py +6 -0
- ert/dark_storage/endpoints/experiment_server.py +3 -5
- ert/ensemble_evaluator/config.py +1 -2
- ert/field_utils/grdecl_io.py +26 -9
- ert/gui/simulation/experiment_panel.py +2 -9
- ert/gui/tools/manage_experiments/storage_info_widget.py +4 -1
- ert/gui/tools/plot/plot_widget.py +14 -7
- ert/gui/tools/plot/plot_window.py +9 -0
- ert/plugins/plugin_manager.py +0 -4
- ert/shared/net_utils.py +18 -43
- ert/shared/version.py +3 -3
- ert/storage/local_ensemble.py +12 -1
- ert/storage/local_storage.py +5 -1
- ert/storage/migration/to22.py +18 -0
- ert/storage/migration/to23.py +49 -0
- ert/warnings/specific_warning_handler.py +3 -2
- {ert-19.0.0rc3.dist-info → ert-19.0.1.dist-info}/METADATA +1 -1
- {ert-19.0.0rc3.dist-info → ert-19.0.1.dist-info}/RECORD +28 -26
- {ert-19.0.0rc3.dist-info → ert-19.0.1.dist-info}/WHEEL +1 -1
- {ert-19.0.0rc3.dist-info → ert-19.0.1.dist-info}/entry_points.txt +0 -0
- {ert-19.0.0rc3.dist-info → ert-19.0.1.dist-info}/licenses/COPYING +0 -0
- {ert-19.0.0rc3.dist-info → ert-19.0.1.dist-info}/top_level.txt +0 -0
ert/cli/main.py
CHANGED
|
@@ -133,7 +133,6 @@ def run_cli(args: Namespace, runtime_plugins: ErtRuntimePlugins | None = None) -
|
|
|
133
133
|
if args.port_range is None
|
|
134
134
|
else (min(args.port_range), max(args.port_range) + 1),
|
|
135
135
|
use_ipc_protocol=using_local_queuesystem,
|
|
136
|
-
prioritize_private_ip_address=ert_config.prioritize_private_ip_address,
|
|
137
136
|
)
|
|
138
137
|
|
|
139
138
|
if model.check_if_runpath_exists():
|
|
@@ -36,7 +36,7 @@ if TYPE_CHECKING:
|
|
|
36
36
|
|
|
37
37
|
|
|
38
38
|
DEFAULT_TIME_DELTA = timedelta(seconds=30)
|
|
39
|
-
|
|
39
|
+
DEFAULT_LOCALIZATION_RADIUS = 3000
|
|
40
40
|
|
|
41
41
|
|
|
42
42
|
def create_observation_dataframes(
|
|
@@ -205,6 +205,9 @@ 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),
|
|
208
211
|
}
|
|
209
212
|
)
|
|
210
213
|
|
|
@@ -297,40 +300,7 @@ def _get_restart(
|
|
|
297
300
|
|
|
298
301
|
|
|
299
302
|
def _has_localization(summary_dict: SummaryObservation) -> bool:
|
|
300
|
-
return
|
|
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
|
-
)
|
|
303
|
+
return summary_dict.east is not None and summary_dict.north is not None
|
|
334
304
|
|
|
335
305
|
|
|
336
306
|
def _handle_summary_observation(
|
|
@@ -370,23 +340,24 @@ def _handle_summary_observation(
|
|
|
370
340
|
"Observation uncertainty must be strictly > 0", summary_key
|
|
371
341
|
) from None
|
|
372
342
|
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
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
|
-
)
|
|
343
|
+
localization_radius = (
|
|
344
|
+
summary_dict.radius or DEFAULT_LOCALIZATION_RADIUS
|
|
345
|
+
if _has_localization(summary_dict)
|
|
346
|
+
else None
|
|
347
|
+
)
|
|
388
348
|
|
|
389
|
-
return pl.DataFrame(
|
|
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
|
+
)
|
|
390
361
|
|
|
391
362
|
|
|
392
363
|
def _handle_general_observation(
|
|
@@ -514,6 +485,11 @@ def _handle_general_observation(
|
|
|
514
485
|
"index": pl.Series(indices, dtype=pl.UInt16),
|
|
515
486
|
"observations": pl.Series(values, dtype=pl.Float32),
|
|
516
487
|
"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),
|
|
517
493
|
}
|
|
518
494
|
)
|
|
519
495
|
|
|
@@ -556,5 +532,6 @@ def _handle_rft_observation(
|
|
|
556
532
|
"tvd": pl.Series([location[2]], dtype=pl.Float32),
|
|
557
533
|
"observations": pl.Series([rft_observation.value], dtype=pl.Float32),
|
|
558
534
|
"std": pl.Series([rft_observation.error], dtype=pl.Float32),
|
|
535
|
+
"radius": pl.Series([None], dtype=pl.Float32),
|
|
559
536
|
}
|
|
560
537
|
)
|
ert/config/_observations.py
CHANGED
|
@@ -89,9 +89,9 @@ class _SummaryValues:
|
|
|
89
89
|
name: str
|
|
90
90
|
value: float
|
|
91
91
|
key: str #: The :term:`summary key` in the summary response
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
92
|
+
east: float | None = None
|
|
93
|
+
north: float | None = None
|
|
94
|
+
radius: float | None = None
|
|
95
95
|
|
|
96
96
|
|
|
97
97
|
@dataclass
|
|
@@ -103,7 +103,7 @@ class SummaryObservation(ObservationDate, _SummaryValues, ObservationError):
|
|
|
103
103
|
|
|
104
104
|
date_dict: ObservationDate = ObservationDate()
|
|
105
105
|
float_values: dict[str, float] = {"ERROR_MIN": 0.1}
|
|
106
|
-
localization_values: dict[str, float] = {}
|
|
106
|
+
localization_values: dict[str, float | None] = {}
|
|
107
107
|
for key, value in observation_dict.items():
|
|
108
108
|
match key:
|
|
109
109
|
case "type" | "name":
|
|
@@ -124,12 +124,15 @@ class SummaryObservation(ObservationDate, _SummaryValues, ObservationError):
|
|
|
124
124
|
summary_key = value
|
|
125
125
|
case "DATE":
|
|
126
126
|
date_dict.date = value
|
|
127
|
-
case "
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
localization_values["
|
|
131
|
-
|
|
132
|
-
|
|
127
|
+
case "LOCALIZATION":
|
|
128
|
+
validate_localization(value, observation_dict["name"])
|
|
129
|
+
localization_values["east"] = validate_float(value["EAST"], key)
|
|
130
|
+
localization_values["north"] = validate_float(value["NORTH"], key)
|
|
131
|
+
localization_values["radius"] = (
|
|
132
|
+
validate_float(value["RADIUS"], key)
|
|
133
|
+
if "RADIUS" in value
|
|
134
|
+
else None
|
|
135
|
+
)
|
|
133
136
|
case _:
|
|
134
137
|
raise _unknown_key_error(str(key), observation_dict["name"])
|
|
135
138
|
if "VALUE" not in float_values:
|
|
@@ -146,9 +149,9 @@ class SummaryObservation(ObservationDate, _SummaryValues, ObservationError):
|
|
|
146
149
|
error_min=float_values["ERROR_MIN"],
|
|
147
150
|
key=summary_key,
|
|
148
151
|
value=float_values["VALUE"],
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
+
east=localization_values.get("east"),
|
|
153
|
+
north=localization_values.get("north"),
|
|
154
|
+
radius=localization_values.get("radius"),
|
|
152
155
|
**date_dict.__dict__,
|
|
153
156
|
)
|
|
154
157
|
|
|
@@ -398,6 +401,19 @@ def validate_positive_float(val: str, key: str) -> float:
|
|
|
398
401
|
return v
|
|
399
402
|
|
|
400
403
|
|
|
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
|
+
|
|
401
417
|
def validate_positive_int(val: str, key: str) -> int:
|
|
402
418
|
try:
|
|
403
419
|
v = int(val)
|
ert/config/ert_config.py
CHANGED
|
@@ -717,7 +717,6 @@ class ErtConfig(BaseModel):
|
|
|
717
717
|
QUEUE_OPTIONS: ClassVar[KnownQueueOptions | None] = None
|
|
718
718
|
RESERVED_KEYWORDS: ClassVar[list[str]] = RESERVED_KEYWORDS
|
|
719
719
|
ENV_VARS: ClassVar[dict[str, str]] = {}
|
|
720
|
-
PRIORITIZE_PRIVATE_IP_ADDRESS: ClassVar[bool] = False
|
|
721
720
|
|
|
722
721
|
substitutions: dict[str, str] = Field(default_factory=dict)
|
|
723
722
|
ensemble_config: EnsembleConfig = Field(default_factory=EnsembleConfig)
|
|
@@ -732,7 +731,6 @@ class ErtConfig(BaseModel):
|
|
|
732
731
|
default_factory=lambda: defaultdict(lambda: cast(list[Workflow], []))
|
|
733
732
|
)
|
|
734
733
|
runpath_file: Path = Path(DEFAULT_RUNPATH_FILE)
|
|
735
|
-
prioritize_private_ip_address: bool = False
|
|
736
734
|
|
|
737
735
|
ert_templates: list[tuple[str, str]] = Field(default_factory=list)
|
|
738
736
|
|
|
@@ -868,9 +866,6 @@ class ErtConfig(BaseModel):
|
|
|
868
866
|
)
|
|
869
867
|
ENV_VARS = dict(runtime_plugins.environment_variables)
|
|
870
868
|
QUEUE_OPTIONS = runtime_plugins.queue_options
|
|
871
|
-
PRIORITIZE_PRIVATE_IP_ADDRESS = (
|
|
872
|
-
runtime_plugins.prioritize_private_ip_address
|
|
873
|
-
)
|
|
874
869
|
|
|
875
870
|
ErtConfigWithPlugins.model_rebuild()
|
|
876
871
|
assert issubclass(ErtConfigWithPlugins, ErtConfig)
|
|
@@ -1123,19 +1118,6 @@ class ErtConfig(BaseModel):
|
|
|
1123
1118
|
user_configured_.add(key)
|
|
1124
1119
|
env_vars[key] = substituter.substitute(val)
|
|
1125
1120
|
|
|
1126
|
-
prioritize_private_ip_address: bool = cls.PRIORITIZE_PRIVATE_IP_ADDRESS
|
|
1127
|
-
if ConfigKeys.PRIORITIZE_PRIVATE_IP_ADDRESS in config_dict:
|
|
1128
|
-
user_prioritize_private_ip_address = bool(
|
|
1129
|
-
config_dict[ConfigKeys.PRIORITIZE_PRIVATE_IP_ADDRESS]
|
|
1130
|
-
)
|
|
1131
|
-
if prioritize_private_ip_address != user_prioritize_private_ip_address:
|
|
1132
|
-
logger.warning(
|
|
1133
|
-
"PRIORITIZE_PRIVATE_IP_ADDRESS was overwritten by user: "
|
|
1134
|
-
f"{prioritize_private_ip_address} -> "
|
|
1135
|
-
f"{user_prioritize_private_ip_address}"
|
|
1136
|
-
)
|
|
1137
|
-
prioritize_private_ip_address = user_prioritize_private_ip_address
|
|
1138
|
-
|
|
1139
1121
|
try:
|
|
1140
1122
|
refcase = Refcase.from_config_dict(config_dict)
|
|
1141
1123
|
cls_config = cls(
|
|
@@ -1162,7 +1144,6 @@ class ErtConfig(BaseModel):
|
|
|
1162
1144
|
time_map=time_map,
|
|
1163
1145
|
history_source=history_source,
|
|
1164
1146
|
refcase=refcase,
|
|
1165
|
-
prioritize_private_ip_address=prioritize_private_ip_address,
|
|
1166
1147
|
)
|
|
1167
1148
|
|
|
1168
1149
|
# The observations are created here because create_observation_dataframes
|
|
@@ -56,7 +56,6 @@ class ConfigKeys(StrEnum):
|
|
|
56
56
|
REALIZATION_MEMORY = "REALIZATION_MEMORY"
|
|
57
57
|
SUBMIT_SLEEP = "SUBMIT_SLEEP"
|
|
58
58
|
MAX_RUNNING = "MAX_RUNNING"
|
|
59
|
-
PRIORITIZE_PRIVATE_IP_ADDRESS = "PRIORITIZE_PRIVATE_IP_ADDRESS"
|
|
60
59
|
|
|
61
60
|
def __repr__(self) -> str:
|
|
62
61
|
return f"{self.value!r}"
|
|
@@ -126,13 +126,6 @@ def hook_workflow_keyword() -> SchemaItem:
|
|
|
126
126
|
)
|
|
127
127
|
|
|
128
128
|
|
|
129
|
-
def prioritize_private_ip_address_keyword() -> SchemaItem:
|
|
130
|
-
return SchemaItem(
|
|
131
|
-
kw=ConfigKeys.PRIORITIZE_PRIVATE_IP_ADDRESS,
|
|
132
|
-
type_map=[SchemaItemType.BOOL],
|
|
133
|
-
)
|
|
134
|
-
|
|
135
|
-
|
|
136
129
|
def set_env_keyword() -> SchemaItem:
|
|
137
130
|
# You can set environment variables which will be applied to the run-time
|
|
138
131
|
# environment.
|
|
@@ -356,7 +349,6 @@ def init_user_config_schema() -> ConfigSchemaDict:
|
|
|
356
349
|
install_job_keyword(),
|
|
357
350
|
install_job_directory_keyword(),
|
|
358
351
|
hook_workflow_keyword(),
|
|
359
|
-
prioritize_private_ip_address_keyword(),
|
|
360
352
|
]:
|
|
361
353
|
schema[item.kw] = item
|
|
362
354
|
if item.kw in ConfigAliases:
|
|
@@ -138,6 +138,7 @@ observations_parser = Lark(
|
|
|
138
138
|
PARAMETER_NAME : CHAR+
|
|
139
139
|
object : "{" [(declaration";")*] "}"
|
|
140
140
|
?declaration: "SEGMENT" STRING object -> segment
|
|
141
|
+
| "LOCALIZATION" object -> localization
|
|
141
142
|
| pair
|
|
142
143
|
pair : PARAMETER_NAME "=" value
|
|
143
144
|
|
|
@@ -193,6 +194,11 @@ class TreeToObservations(Transformer[FileContextToken, list[ObservationDict]]):
|
|
|
193
194
|
def segment(tree):
|
|
194
195
|
return (("SEGMENT", tree[0]), tree[1])
|
|
195
196
|
|
|
197
|
+
@staticmethod
|
|
198
|
+
@no_type_check
|
|
199
|
+
def localization(tree):
|
|
200
|
+
return ("LOCALIZATION", tree[0])
|
|
201
|
+
|
|
196
202
|
@staticmethod
|
|
197
203
|
@no_type_check
|
|
198
204
|
def object(tree):
|
|
@@ -317,11 +317,9 @@ class ExperimentRunner:
|
|
|
317
317
|
simulation_future = loop.run_in_executor(
|
|
318
318
|
None,
|
|
319
319
|
lambda: run_model.start_simulations_thread(
|
|
320
|
-
EvaluatorServerConfig(
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
prioritize_private_ip_address=site_plugins.prioritize_private_ip_address,
|
|
324
|
-
)
|
|
320
|
+
EvaluatorServerConfig()
|
|
321
|
+
if run_model.queue_config.queue_system == QueueSystem.LOCAL
|
|
322
|
+
else EvaluatorServerConfig(use_ipc_protocol=False)
|
|
325
323
|
),
|
|
326
324
|
)
|
|
327
325
|
while True:
|
ert/ensemble_evaluator/config.py
CHANGED
|
@@ -27,7 +27,6 @@ class EvaluatorServerConfig:
|
|
|
27
27
|
use_token: bool = True,
|
|
28
28
|
host: str | None = None,
|
|
29
29
|
use_ipc_protocol: bool = True,
|
|
30
|
-
prioritize_private_ip_address: bool = False,
|
|
31
30
|
) -> None:
|
|
32
31
|
self.host: str | None = host
|
|
33
32
|
self.router_port: int | None = None
|
|
@@ -51,7 +50,7 @@ class EvaluatorServerConfig:
|
|
|
51
50
|
if use_ipc_protocol:
|
|
52
51
|
self.uri = f"ipc:///tmp/socket-{uuid.uuid4().hex[:8]}"
|
|
53
52
|
elif self.host is None:
|
|
54
|
-
self.host = get_ip_address(
|
|
53
|
+
self.host = get_ip_address()
|
|
55
54
|
|
|
56
55
|
if use_token:
|
|
57
56
|
self.server_public_key, self.server_secret_key = zmq.curve_keypair()
|
ert/field_utils/grdecl_io.py
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
+
import io
|
|
3
4
|
import operator
|
|
4
5
|
import os
|
|
5
6
|
from collections.abc import Iterator
|
|
@@ -257,6 +258,9 @@ def import_bgrdecl(
|
|
|
257
258
|
raise ValueError(f"Did not find field parameter {field_name} in {file_path}")
|
|
258
259
|
|
|
259
260
|
|
|
261
|
+
_BUFFER_SIZE = 2**20 # 1.04 megabytes
|
|
262
|
+
|
|
263
|
+
|
|
260
264
|
def export_grdecl(
|
|
261
265
|
values: np.ma.MaskedArray[Any, np.dtype[np.float32]] | npt.NDArray[np.float32],
|
|
262
266
|
file_path: str | os.PathLike[str],
|
|
@@ -271,12 +275,25 @@ def export_grdecl(
|
|
|
271
275
|
if binary:
|
|
272
276
|
resfo.write(file_path, [(param_name.ljust(8), values.astype(np.float32))])
|
|
273
277
|
else:
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
278
|
+
length = values.shape[0]
|
|
279
|
+
per_line = 6
|
|
280
|
+
iters = 5
|
|
281
|
+
per_iter = per_line * iters
|
|
282
|
+
fmt = " ".join(["%3e"] * per_line)
|
|
283
|
+
fmt = "\n".join([fmt] * iters) + "\n"
|
|
284
|
+
with (
|
|
285
|
+
open(file_path, "wb+", 0) as fh,
|
|
286
|
+
io.BufferedWriter(fh, _BUFFER_SIZE) as bw,
|
|
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")
|
|
@@ -55,15 +55,9 @@ def create_md_table(kv: dict[str, str], output: str) -> str:
|
|
|
55
55
|
|
|
56
56
|
|
|
57
57
|
def get_simulation_thread(
|
|
58
|
-
model: Any,
|
|
59
|
-
rerun_failed_realizations: bool = False,
|
|
60
|
-
use_ipc_protocol: bool = False,
|
|
61
|
-
prioritize_private_ip_address: bool = False,
|
|
58
|
+
model: Any, rerun_failed_realizations: bool = False, use_ipc_protocol: bool = False
|
|
62
59
|
) -> ErtThread:
|
|
63
|
-
evaluator_server_config = EvaluatorServerConfig(
|
|
64
|
-
use_ipc_protocol=use_ipc_protocol,
|
|
65
|
-
prioritize_private_ip_address=prioritize_private_ip_address,
|
|
66
|
-
)
|
|
60
|
+
evaluator_server_config = EvaluatorServerConfig(use_ipc_protocol=use_ipc_protocol)
|
|
67
61
|
|
|
68
62
|
def run() -> None:
|
|
69
63
|
model.api.start_simulations_thread(
|
|
@@ -387,7 +381,6 @@ class ExperimentPanel(QWidget):
|
|
|
387
381
|
rerun_failed_realizations,
|
|
388
382
|
use_ipc_protocol=self.config.queue_config.queue_system
|
|
389
383
|
== QueueSystem.LOCAL,
|
|
390
|
-
prioritize_private_ip_address=self.config.prioritize_private_ip_address,
|
|
391
384
|
)
|
|
392
385
|
self._dialog.setup_event_monitoring(rerun_failed_realizations)
|
|
393
386
|
simulation_thread.start()
|
|
@@ -7,6 +7,7 @@ import seaborn as sns
|
|
|
7
7
|
import yaml
|
|
8
8
|
from matplotlib.backends.backend_qt5agg import FigureCanvas # type: ignore
|
|
9
9
|
from matplotlib.figure import Figure
|
|
10
|
+
from pandas.errors import PerformanceWarning
|
|
10
11
|
from polars import DataFrame
|
|
11
12
|
from PyQt6.QtCore import Qt
|
|
12
13
|
from PyQt6.QtCore import pyqtSlot as Slot
|
|
@@ -29,6 +30,7 @@ from PyQt6.QtWidgets import (
|
|
|
29
30
|
|
|
30
31
|
from ert import LibresFacade
|
|
31
32
|
from ert.storage import Ensemble, Experiment, RealizationStorageState
|
|
33
|
+
from ert.warnings import capture_specific_warning
|
|
32
34
|
|
|
33
35
|
from .export_dialog import ExportDialog
|
|
34
36
|
|
|
@@ -446,7 +448,8 @@ class _EnsembleWidget(QWidget):
|
|
|
446
448
|
|
|
447
449
|
def get_misfit_df(self) -> DataFrame:
|
|
448
450
|
assert self._ensemble is not None
|
|
449
|
-
|
|
451
|
+
with capture_specific_warning(PerformanceWarning):
|
|
452
|
+
df = LibresFacade.load_all_misfit_data(self._ensemble)
|
|
450
453
|
realization_column = pl.Series(df.index)
|
|
451
454
|
df = pl.from_pandas(df)
|
|
452
455
|
df.insert_column(0, realization_column)
|
|
@@ -163,6 +163,7 @@ class PlotWidget(QWidget):
|
|
|
163
163
|
vbox.addSpacing(8)
|
|
164
164
|
self.setLayout(vbox)
|
|
165
165
|
|
|
166
|
+
self._negative_values_in_data = False
|
|
166
167
|
self._dirty = True
|
|
167
168
|
self._active = False
|
|
168
169
|
self.resetPlot()
|
|
@@ -175,11 +176,15 @@ class PlotWidget(QWidget):
|
|
|
175
176
|
self._figure.clear()
|
|
176
177
|
|
|
177
178
|
def _sync_log_checkbox(self) -> None:
|
|
178
|
-
if
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
179
|
+
if (
|
|
180
|
+
type(self._plotter).__name__
|
|
181
|
+
in {
|
|
182
|
+
"HistogramPlot",
|
|
183
|
+
"DistributionPlot",
|
|
184
|
+
"GaussianKDEPlot",
|
|
185
|
+
}
|
|
186
|
+
and self._negative_values_in_data is False
|
|
187
|
+
):
|
|
183
188
|
self._log_checkbox.setVisible(True)
|
|
184
189
|
else:
|
|
185
190
|
self._log_checkbox.setVisible(False)
|
|
@@ -198,8 +203,11 @@ class PlotWidget(QWidget):
|
|
|
198
203
|
) -> None:
|
|
199
204
|
self.resetPlot()
|
|
200
205
|
try:
|
|
206
|
+
self._sync_log_checkbox()
|
|
201
207
|
plot_context.log_scale = (
|
|
202
|
-
self._log_checkbox.isVisible()
|
|
208
|
+
self._log_checkbox.isVisible()
|
|
209
|
+
and self._log_checkbox.isChecked()
|
|
210
|
+
and self._negative_values_in_data is False
|
|
203
211
|
)
|
|
204
212
|
self._plotter.plot(
|
|
205
213
|
self._figure,
|
|
@@ -210,7 +218,6 @@ class PlotWidget(QWidget):
|
|
|
210
218
|
key_def,
|
|
211
219
|
)
|
|
212
220
|
self._canvas.draw()
|
|
213
|
-
self._sync_log_checkbox()
|
|
214
221
|
except Exception as e:
|
|
215
222
|
exc_type, _, exc_tb = sys.exc_info()
|
|
216
223
|
sys.stderr.write("-" * 80 + "\n")
|
|
@@ -284,6 +284,15 @@ 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
|
|
287
296
|
observations = None
|
|
288
297
|
if key_def.observations and selected_ensembles:
|
|
289
298
|
try:
|
ert/plugins/plugin_manager.py
CHANGED
|
@@ -338,7 +338,6 @@ class ErtRuntimePlugins(BaseModel):
|
|
|
338
338
|
environment_variables: Mapping[str, str] = Field(default_factory=dict)
|
|
339
339
|
env_pr_fm_step: Mapping[str, Mapping[str, Any]] = Field(default_factory=dict)
|
|
340
340
|
help_links: dict[str, str] = Field(default_factory=dict)
|
|
341
|
-
prioritize_private_ip_address: bool = False
|
|
342
341
|
|
|
343
342
|
|
|
344
343
|
def get_site_plugins(
|
|
@@ -387,9 +386,6 @@ def get_site_plugins(
|
|
|
387
386
|
),
|
|
388
387
|
env_pr_fm_step=plugin_manager.get_forward_model_configuration(),
|
|
389
388
|
help_links=plugin_manager.get_help_links(),
|
|
390
|
-
prioritize_private_ip_address=site_configurations.prioritize_private_ip_address
|
|
391
|
-
if site_configurations
|
|
392
|
-
else False,
|
|
393
389
|
)
|
|
394
390
|
|
|
395
391
|
return runtime_plugins
|
ert/shared/net_utils.py
CHANGED
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
import ipaddress
|
|
2
1
|
import logging
|
|
3
2
|
import random
|
|
4
3
|
import socket
|
|
5
4
|
from functools import lru_cache
|
|
6
5
|
|
|
7
|
-
import psutil
|
|
8
6
|
from dns import exception, resolver, reversename
|
|
9
7
|
|
|
10
8
|
|
|
@@ -52,7 +50,6 @@ def get_machine_name() -> str:
|
|
|
52
50
|
def find_available_socket(
|
|
53
51
|
host: str | None = None,
|
|
54
52
|
port_range: range = range(51820, 51840 + 1),
|
|
55
|
-
prioritize_private_ip_address: bool = False,
|
|
56
53
|
) -> socket.socket:
|
|
57
54
|
"""
|
|
58
55
|
The default and recommended approach here is to return a bound socket to the
|
|
@@ -74,9 +71,7 @@ def find_available_socket(
|
|
|
74
71
|
|
|
75
72
|
See e.g. implementation and comments in EvaluatorServerConfig
|
|
76
73
|
"""
|
|
77
|
-
current_host = (
|
|
78
|
-
host if host is not None else get_ip_address(prioritize_private_ip_address)
|
|
79
|
-
)
|
|
74
|
+
current_host = host if host is not None else get_ip_address()
|
|
80
75
|
|
|
81
76
|
if port_range.start == port_range.stop:
|
|
82
77
|
ports = list(range(port_range.start, port_range.stop + 1))
|
|
@@ -140,40 +135,20 @@ def get_family(host: str) -> socket.AddressFamily:
|
|
|
140
135
|
return socket.AF_INET6
|
|
141
136
|
|
|
142
137
|
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
if address.family.name == "AF_INET":
|
|
161
|
-
ip = address.address
|
|
162
|
-
if ipaddress.ip_address(ip).is_loopback and not loopback:
|
|
163
|
-
loopback = ip
|
|
164
|
-
elif ipaddress.ip_address(ip).is_private and not private:
|
|
165
|
-
private = ip
|
|
166
|
-
elif not public:
|
|
167
|
-
public = ip
|
|
168
|
-
|
|
169
|
-
# Select first non-empty value, based on prioritization
|
|
170
|
-
if prioritize_private:
|
|
171
|
-
selected_ip = private or public or loopback
|
|
172
|
-
else:
|
|
173
|
-
selected_ip = public or private or loopback
|
|
174
|
-
|
|
175
|
-
if selected_ip:
|
|
176
|
-
return selected_ip
|
|
177
|
-
else:
|
|
178
|
-
logger.warning("Cannot determine ip-address. Falling back to 127.0.0.1")
|
|
179
|
-
return "127.0.0.1"
|
|
138
|
+
# See https://stackoverflow.com/a/28950776
|
|
139
|
+
def get_ip_address() -> str:
|
|
140
|
+
try:
|
|
141
|
+
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
|
|
142
|
+
try:
|
|
143
|
+
s.settimeout(0)
|
|
144
|
+
# try pinging a reserved, internal address in order
|
|
145
|
+
# to determine IP representing the default route
|
|
146
|
+
s.connect(("10.255.255.255", 1))
|
|
147
|
+
address = s.getsockname()[0]
|
|
148
|
+
finally:
|
|
149
|
+
s.close()
|
|
150
|
+
except BaseException:
|
|
151
|
+
logger.warning("Cannot determine ip-address. Falling back to localhost.")
|
|
152
|
+
address = "127.0.0.1"
|
|
153
|
+
logger.debug(f"ip-address: {address}")
|
|
154
|
+
return address
|
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,
|
|
31
|
+
__version__ = version = '19.0.1'
|
|
32
|
+
__version_tuple__ = version_tuple = (19, 0, 1)
|
|
33
33
|
|
|
34
|
-
__commit_id__ = commit_id = '
|
|
34
|
+
__commit_id__ = commit_id = 'gd8015f3be'
|
ert/storage/local_ensemble.py
CHANGED
|
@@ -679,6 +679,9 @@ 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
|
+
)
|
|
682
685
|
complete_df = (
|
|
683
686
|
complete_df.join(ds, on="realization", how="left")
|
|
684
687
|
.unique(subset=["realization"], keep="first")
|
|
@@ -1096,6 +1099,11 @@ class LocalEnsemble(BaseMode):
|
|
|
1096
1099
|
on=["response_key", *response_cls.primary_key],
|
|
1097
1100
|
)
|
|
1098
1101
|
|
|
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
|
+
)
|
|
1099
1107
|
joined = (
|
|
1100
1108
|
joined.with_columns(
|
|
1101
1109
|
pl.concat_str(
|
|
@@ -1105,7 +1113,7 @@ class LocalEnsemble(BaseMode):
|
|
|
1105
1113
|
# Avoid potential collisions w/ primary key
|
|
1106
1114
|
)
|
|
1107
1115
|
)
|
|
1108
|
-
.drop(
|
|
1116
|
+
.drop(primary_keys_to_drop)
|
|
1109
1117
|
.rename({"__tmp_index_key__": "index"})
|
|
1110
1118
|
)
|
|
1111
1119
|
|
|
@@ -1121,6 +1129,9 @@ class LocalEnsemble(BaseMode):
|
|
|
1121
1129
|
"observation_key",
|
|
1122
1130
|
"observations",
|
|
1123
1131
|
"std",
|
|
1132
|
+
"east",
|
|
1133
|
+
"north",
|
|
1134
|
+
"radius",
|
|
1124
1135
|
]
|
|
1125
1136
|
)
|
|
1126
1137
|
|
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 = 23
|
|
35
35
|
|
|
36
36
|
|
|
37
37
|
class _Migrations(BaseModel):
|
|
@@ -517,6 +517,8 @@ class LocalStorage(BaseMode):
|
|
|
517
517
|
to19,
|
|
518
518
|
to20,
|
|
519
519
|
to21,
|
|
520
|
+
to22,
|
|
521
|
+
to23,
|
|
520
522
|
)
|
|
521
523
|
|
|
522
524
|
try:
|
|
@@ -567,6 +569,8 @@ class LocalStorage(BaseMode):
|
|
|
567
569
|
18: to19,
|
|
568
570
|
19: to20,
|
|
569
571
|
20: to21,
|
|
572
|
+
21: to22,
|
|
573
|
+
22: to23,
|
|
570
574
|
}
|
|
571
575
|
for from_version in range(version, _LOCAL_STORAGE_VERSION):
|
|
572
576
|
migrations[from_version].migrate(self.path)
|
|
@@ -0,0 +1,18 @@
|
|
|
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)
|
|
@@ -0,0 +1,49 @@
|
|
|
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)
|
|
@@ -7,7 +7,7 @@ from typing import TextIO
|
|
|
7
7
|
@contextmanager
|
|
8
8
|
def capture_specific_warning(
|
|
9
9
|
warning_class_to_capture: type[Warning],
|
|
10
|
-
propagate_warning: Callable[[Warning | str], None],
|
|
10
|
+
propagate_warning: Callable[[Warning | str], None] | None = None,
|
|
11
11
|
) -> Generator[None, None, None]:
|
|
12
12
|
original_warning_handler = warnings.showwarning
|
|
13
13
|
|
|
@@ -20,7 +20,8 @@ def capture_specific_warning(
|
|
|
20
20
|
line: str | None = None,
|
|
21
21
|
) -> None:
|
|
22
22
|
if issubclass(category, warning_class_to_capture):
|
|
23
|
-
propagate_warning
|
|
23
|
+
if propagate_warning is not None:
|
|
24
|
+
propagate_warning(message)
|
|
24
25
|
else:
|
|
25
26
|
original_warning_handler(message, category, filename, lineno, file, line)
|
|
26
27
|
|
|
@@ -38,14 +38,14 @@ ert/analysis/event.py,sha256=vBYqtTl5DXePPWHTLX9bROmGTD2ixcrQh4K07g-UikM,2248
|
|
|
38
38
|
ert/analysis/misfit_preprocessor.py,sha256=2MjlL2yIg5KQpqWiD3675-hoy_5QM49pWQ7VXK4rous,8001
|
|
39
39
|
ert/analysis/snapshots.py,sha256=rLMxg4y5dlA_GZ2ETnZilfmggsqDm3O8Fiuq2xpshz8,2106
|
|
40
40
|
ert/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
41
|
-
ert/cli/main.py,sha256=
|
|
41
|
+
ert/cli/main.py,sha256=VbqfWytyEEbpJoHd4TyKbXzdYTt6X0oufDV8dBV1WNA,6487
|
|
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=FHwTXR6awIFkVxdxOGdy6QQuar_lz4C7oBw_lPCox8E,19099
|
|
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=nm6GsFAwh16anXDuz04p9jn6sT4hd233Do7H__QpATY,15000
|
|
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=L7oLAXDUfPmXnyZ-xmZCir50zLXRPWkXjFiGgWTDVhE,56408
|
|
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
|
|
@@ -86,8 +86,8 @@ ert/config/parsing/_option_dict.py,sha256=7sMLIYYsq9onlEUsRZJsA5l1qIvHfZkwwqasSp
|
|
|
86
86
|
ert/config/parsing/_read_file.py,sha256=QKMQSNG5J05AdTzy_VQiK5AQ26g0bDHyxlSSPqIhiDE,1935
|
|
87
87
|
ert/config/parsing/config_dict.py,sha256=yyBb-NeaFnIjENrcziVA11Bq43uGguUiPECcKWLDg8w,52
|
|
88
88
|
ert/config/parsing/config_errors.py,sha256=p3lAcRPXTm4okupdVyLwRCVWJ_86a7rgCohkDaLRM10,4806
|
|
89
|
-
ert/config/parsing/config_keywords.py,sha256=
|
|
90
|
-
ert/config/parsing/config_schema.py,sha256=
|
|
89
|
+
ert/config/parsing/config_keywords.py,sha256=J8kgzDVhuM8jvCwzO1kfOxvOH_DnDASOZPaJZujcIgQ,1860
|
|
90
|
+
ert/config/parsing/config_schema.py,sha256=9ws2C3Oc-eT5uB_Xy2IEvPWON7b9rZnIc2FpID7hhWc,9614
|
|
91
91
|
ert/config/parsing/config_schema_deprecations.py,sha256=Jz-dBgapEGuGutC7WCsaSTkqhLE9htm14lKlJ9QgGBQ,8605
|
|
92
92
|
ert/config/parsing/config_schema_item.py,sha256=WOdE1fzEyIVMdiCzj4fJuqgEbC3Ivc7uR4gENEH2s6Q,14500
|
|
93
93
|
ert/config/parsing/context_values.py,sha256=cNfiT1I93Y2g9rwAnS9jXKSqSDxI9-jZVOSwVMQHTZ0,2280
|
|
@@ -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=idpvJGkP72eO3P95g3kwKjovZS9C1loDQAclDRlFAbU,6955
|
|
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
|
|
@@ -120,7 +120,7 @@ ert/dark_storage/compute/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZ
|
|
|
120
120
|
ert/dark_storage/compute/misfits.py,sha256=7dYyYIBH1Jt9g4bIsnHJbjR7mWcoeZpqqaHQMhd12OY,1374
|
|
121
121
|
ert/dark_storage/endpoints/__init__.py,sha256=o093-GLgw8br7PDKhHna0LviXeJQdC5P1RoIW2xlLqs,895
|
|
122
122
|
ert/dark_storage/endpoints/ensembles.py,sha256=22M358HTAjiNuKaRYp9FZ3SZvkWL3v9wMDD0DGwLF8M,1363
|
|
123
|
-
ert/dark_storage/endpoints/experiment_server.py,sha256=
|
|
123
|
+
ert/dark_storage/endpoints/experiment_server.py,sha256=36-ZnKQ2jGVLvig8Y4VRR1C1WfAkbRxwDLSTd7Lj-p4,14027
|
|
124
124
|
ert/dark_storage/endpoints/experiments.py,sha256=_tY95HzW6ibJy7N9C-1XICFHSOrKdz4vM3bv7ePRvY8,3413
|
|
125
125
|
ert/dark_storage/endpoints/observations.py,sha256=gnww5S1B9G8vAw7AwcR1fgW_vFgyf5WlU1gOSUXW1i4,4841
|
|
126
126
|
ert/dark_storage/endpoints/parameters.py,sha256=LERil7H-L3ZsPGGFm97kvy3XeIqpceyBe5aSFLkSVEY,4406
|
|
@@ -140,7 +140,7 @@ ert/data/__init__.py,sha256=IXBVV2stoJkjY6JrFE2ELEj9eLGhkuovlNAcvtyNFJ0,69
|
|
|
140
140
|
ert/data/_measured_data.py,sha256=L4tgVjCcEUTHeXmnAIeIjIS-4hD91ZZ4MGa6J47aTTo,5003
|
|
141
141
|
ert/ensemble_evaluator/__init__.py,sha256=pnNNG9fhBvvVjxTJF7uvNs-WdLwwjvew7-wYP6u5G1I,646
|
|
142
142
|
ert/ensemble_evaluator/_ensemble.py,sha256=2AwBONdgOaKJI3cjYFhKSFbQ0nP7qWt03WFv1dh81vo,6826
|
|
143
|
-
ert/ensemble_evaluator/config.py,sha256=
|
|
143
|
+
ert/ensemble_evaluator/config.py,sha256=N1aByZ_nGVNLGNTtomPN0ceSYrEVR_h1d-IypmG5SoY,1868
|
|
144
144
|
ert/ensemble_evaluator/evaluator.py,sha256=PdOHJlFynNIJXoeItSgUpMkCy9AOEOhfnHII7LeZ1r4,29240
|
|
145
145
|
ert/ensemble_evaluator/event.py,sha256=97afkQRmU3xFtO_4xjp6qlilJ9Wq8rRoWs5SB_x7Lk4,1741
|
|
146
146
|
ert/ensemble_evaluator/identifiers.py,sha256=H3qIRyAfYIdAY22OJx9_45HpZQFSuuWCpaXBY-co8eY,363
|
|
@@ -151,7 +151,7 @@ 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=QbRbcZIfNyRliMwyFwmUnMIHc4Za9-uUSitm4l3uT0k,9521
|
|
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
|
|
@@ -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=4FDBWWvUfbTDAJBNN3pT8sP02CdZKV6LwU8TMmNfg-Q,15303
|
|
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=BFYJwIVqYmZI2Ke4a2rPdwL88sjQ0jiKL87bzUB3HDk,20098
|
|
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=kQvX89b4z2TAwXIzRuDEDnfJNq-jMyTC8Lzyn8T0HwU,7755
|
|
276
|
+
ert/gui/tools/plot/plot_window.py,sha256=gZZCDLVcFJ-HPVYRaQcNQoYmJ3IRWEXi1_z6HJm97Es,17757
|
|
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
|
|
@@ -324,7 +324,7 @@ ert/logging/__init__.py,sha256=UfFNC5DUGRT81KyydbaZhh6QfvdOSdcekaH0tsaB6r8,3084
|
|
|
324
324
|
ert/logging/logger.conf,sha256=eDQRTVb5tPhVgbuf7U6QU0xlsdctgO4N8IKWDJihMBE,970
|
|
325
325
|
ert/logging/storage_log.conf,sha256=DIBxUK38K83tWuARlGxCCCZ5QkE7OvpJ8Oea6TyM1eU,1132
|
|
326
326
|
ert/plugins/__init__.py,sha256=sVd-DAyIxxXknv5dhONtHsSQ5PYp79tFH20zI_Jp-TM,1514
|
|
327
|
-
ert/plugins/plugin_manager.py,sha256=
|
|
327
|
+
ert/plugins/plugin_manager.py,sha256=GF0foJ3sscCBDzCRU4ODBAxjS0F9nSA57VrZLyoM8RU,14907
|
|
328
328
|
ert/plugins/plugin_response.py,sha256=ZWYIgkI09xTOZ8OgoQo33RfnTSm3OBGxoAMSgAUu-yY,364
|
|
329
329
|
ert/plugins/hook_implementations/__init__.py,sha256=2-c5P2sOaZ0rzb2OEzE54Vm-0T62iAibAHVH-1tnmPk,321
|
|
330
330
|
ert/plugins/hook_implementations/forward_model_steps.py,sha256=LlbZ0NbOFMw97AVcfK1kFQTu36N0s8QGtU__zOclhIs,22452
|
|
@@ -396,8 +396,8 @@ ert/services/_storage_main.py,sha256=adooB5K2atXhX-rM5jFrEUJHly0ZSAQymhTndm7qhpk
|
|
|
396
396
|
ert/services/ert_server.py,sha256=qIzqugIHcxwKuzjkItiMt3jah3hNI7x3NQ3p_WBBf_o,10768
|
|
397
397
|
ert/services/webviz_ert_service.py,sha256=J5vznqb_-DjlDMOze7tdvuBE4GWEPgJ5dIIXvRLKd0Y,650
|
|
398
398
|
ert/shared/__init__.py,sha256=OwgL-31MxA0fabETJ5Svw0tqJpHi569CZDRFHdHiqA0,644
|
|
399
|
-
ert/shared/net_utils.py,sha256=
|
|
400
|
-
ert/shared/version.py,sha256=
|
|
399
|
+
ert/shared/net_utils.py,sha256=DDHIZLHdBnh7ZZ--1s-FUlsoNTSJJsfHmLQE44E2JqU,5324
|
|
400
|
+
ert/shared/version.py,sha256=6aEtsHZNo85BiGgopmGsgUXYXdpTnRpFd9CZ2FT8eZ0,714
|
|
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=t88F0ZdmduD6_tUhc78X1HxhEXuJUZnRaIQicdq42yk,51513
|
|
418
418
|
ert/storage/local_experiment.py,sha256=JNdTQWn0jJLqN8pYeh4XbuSxxiTN5Qbc0nkJzzgjhAU,16871
|
|
419
|
-
ert/storage/local_storage.py,sha256=
|
|
419
|
+
ert/storage/local_storage.py,sha256=Ni2IThA8jWeRsYmF1n56cHjcDIx4GTCZR2mo0kyFqjE,24107
|
|
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,6 +432,8 @@ 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
|
|
435
437
|
ert/storage/migration/to6.py,sha256=Pj9lVCyPCOP0-dt4uypsZtS5Awbc8B7oaySu_VTwnnA,1514
|
|
436
438
|
ert/storage/migration/to7.py,sha256=hV5lLfaQegyvxsy_lWfsiQAYVPCvS8Oe0fYc_fvKXzY,4500
|
|
437
439
|
ert/storage/migration/to8.py,sha256=VL7A5KWTSFhBWmx3n-vCKBaEd2U8SUqyz8vPieyVd9E,5390
|
|
@@ -452,8 +454,8 @@ ert/validation/string_definition.py,sha256=r7DF4zLInIMqXb7jtPL646rAGXrPwdHKByQL3
|
|
|
452
454
|
ert/validation/validation_status.py,sha256=f47_B7aS-9DEh6uaVzKxD97pXienkyTVVCqTytZy8BQ,722
|
|
453
455
|
ert/warnings/__init__.py,sha256=IBwQVkdD7Njaad9PAB-9K-kr15wnA4EBKboxyqgu9NA,214
|
|
454
456
|
ert/warnings/_warnings.py,sha256=7qhNZ0W4nnljzoOx6AXX7VlMv5pa34Ek5M5n1Ep0Kak,189
|
|
455
|
-
ert/warnings/specific_warning_handler.py,sha256=
|
|
456
|
-
ert-19.0.
|
|
457
|
+
ert/warnings/specific_warning_handler.py,sha256=PnXYgBl95ZHCRvf_ylLw4NBx0WD6MEhViqNlUFwJ1us,996
|
|
458
|
+
ert-19.0.1.dist-info/licenses/COPYING,sha256=jOtLnuWt7d5Hsx6XXB2QxzrSe2sWWh3NgMfFRetluQM,35147
|
|
457
459
|
everest/__init__.py,sha256=8_f50f6H3-onqaiuNCwC0Eiotdl9JuTxhwyF_54MVvU,306
|
|
458
460
|
everest/config_file_loader.py,sha256=rOHYvB4ayB2MaKdaAynvJVtbCOqi_z25EdwEqJ02-DQ,5675
|
|
459
461
|
everest/everest_storage.py,sha256=c3sgU7-3BDSRXxJfCR_4F58rWEaoII1wygz6VvM-GGI,42025
|
|
@@ -517,8 +519,8 @@ everest/templates/well_drill.tmpl,sha256=9iLexmBHMsMQNXyyRK4GlmVuVpVIxRcCHpy1av5
|
|
|
517
519
|
everest/templates/well_order.tmpl,sha256=XJ1eVRkeyTdLu5sLsltJSSK6BDLN7rFOAqLdM3ZZy3w,75
|
|
518
520
|
everest/util/__init__.py,sha256=xEYLz6pUtgkH8VHer1RfoCwKiO70dBnuhHonsOPaOx0,1359
|
|
519
521
|
everest/util/forward_models.py,sha256=JPxHhLI6TrmQJwW50wwGBmw57TfRd8SG2svYhXFHrc8,1617
|
|
520
|
-
ert-19.0.
|
|
521
|
-
ert-19.0.
|
|
522
|
-
ert-19.0.
|
|
523
|
-
ert-19.0.
|
|
524
|
-
ert-19.0.
|
|
522
|
+
ert-19.0.1.dist-info/METADATA,sha256=OoBJtNovlHFnC-QCKzY1w-sPH3Om-oTdzLOZIJDQZqo,10012
|
|
523
|
+
ert-19.0.1.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
|
|
524
|
+
ert-19.0.1.dist-info/entry_points.txt,sha256=ChZ7vn8Qy9v9rT8GM2JtAvWDN3NVoy4BIcvVRtU73CM,189
|
|
525
|
+
ert-19.0.1.dist-info/top_level.txt,sha256=LRh9GfdfyDWfAGmrQgp_XdoMHA4v6aotw8xgsy5YyHE,17
|
|
526
|
+
ert-19.0.1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|