ert 17.1.6__py3-none-any.whl → 17.1.9__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.
@@ -160,10 +160,14 @@ def analysis_EnIF(
160
160
  Y=S.T,
161
161
  verbose_level=5,
162
162
  )
163
-
163
+ updated_parameters = [
164
+ p
165
+ for p, config in source_ensemble.experiment.parameter_configuration.items()
166
+ if config.update
167
+ ]
164
168
  # Learn the precision matrix block-sparse over parameter groups
165
169
  Prec_u = sp.sparse.csc_matrix((0, 0), dtype=float)
166
- for param_group in parameters:
170
+ for param_group in updated_parameters:
167
171
  config_node = source_ensemble.experiment.parameter_configuration[param_group]
168
172
  X_local = source_ensemble.load_parameters_numpy(param_group, iens_active_index)
169
173
  X_local_scaler = StandardScaler()
@@ -215,7 +219,7 @@ def analysis_EnIF(
215
219
 
216
220
  # Iterate over parameters to store the updated ensemble
217
221
  parameters_updated = 0
218
- for param_group in parameters:
222
+ for param_group in updated_parameters:
219
223
  log_msg = f"Storing data for {param_group}.."
220
224
  logger.info(log_msg)
221
225
  progress_callback(AnalysisStatusEvent(msg=log_msg))
@@ -241,7 +245,7 @@ def analysis_EnIF(
241
245
  )
242
246
  _copy_unupdated_parameters(
243
247
  list(source_ensemble.experiment.parameter_configuration.keys()),
244
- parameters,
248
+ updated_parameters,
245
249
  iens_active_index,
246
250
  source_ensemble,
247
251
  target_ensemble,
@@ -331,11 +331,12 @@ def _all_parameters(
331
331
  ) -> npt.NDArray[np.float64]:
332
332
  """Return all parameters in assimilation problem"""
333
333
 
334
- param_groups = list(ensemble.experiment.parameter_configuration.keys())
335
-
334
+ groups_to_update = [
335
+ k for k, v in ensemble.experiment.parameter_configuration.items() if v.update
336
+ ]
336
337
  param_arrays = [
337
338
  ensemble.load_parameters_numpy(param_group, iens_active_index)
338
- for param_group in param_groups
339
+ for param_group in groups_to_update
339
340
  ]
340
341
 
341
342
  return np.vstack(param_arrays)
@@ -2,6 +2,7 @@ from __future__ import annotations
2
2
 
3
3
  import json
4
4
  import logging
5
+ import math
5
6
  import os
6
7
  import time
7
8
  from collections.abc import Iterable, Mapping
@@ -22,6 +23,7 @@ from ert.config import (
22
23
  SurfaceConfig,
23
24
  )
24
25
  from ert.config.design_matrix import DESIGN_MATRIX_GROUP
26
+ from ert.config.distribution import LogNormalSettings, LogUnifSettings
25
27
  from ert.config.ert_config import create_forward_model_json
26
28
  from ert.substitutions import Substitutions, substitute_runpath_name
27
29
  from ert.utils import log_duration
@@ -128,6 +130,7 @@ def _generate_parameter_files(
128
130
  df = fs._load_scalar_keys(keys=keys, realizations=iens, transformed=True)
129
131
  scalar_data = df.to_dicts()[0]
130
132
  exports: dict[str, dict[str, float | str]] = {}
133
+ log_exports: dict[str, dict[str, float | str]] = {}
131
134
  for param in parameter_configs:
132
135
  # For the first iteration we do not write the parameter
133
136
  # to run path, as we expect to read if after the forward
@@ -135,16 +138,34 @@ def _generate_parameter_files(
135
138
  if param.forward_init and iteration == 0:
136
139
  continue
137
140
  export_values: dict[str, dict[str, float | str]] | None = None
141
+ log_export_values: dict[str, dict[str, float | str]] | None = {}
138
142
  if param.name in scalar_data:
139
- export_values = {param.group_name: {param.name: scalar_data[param.name]}}
143
+ scalar_value = scalar_data[param.name]
144
+ export_values = {param.group_name: {param.name: scalar_value}}
145
+ if isinstance(param, GenKwConfig) and isinstance(
146
+ param.distribution, (LogNormalSettings, LogUnifSettings)
147
+ ):
148
+ if isinstance(scalar_value, float) and scalar_value > 0:
149
+ log_value = math.log10(scalar_value)
150
+ log_export_values = {
151
+ f"LOG10_{param.group_name}": {param.name: log_value}
152
+ }
153
+ else:
154
+ logger.warning(
155
+ "Could not export the log10 value of "
156
+ f"{scalar_value} as it is invalid"
157
+ )
140
158
  else:
141
159
  export_values = param.write_to_runpath(Path(run_path), iens, fs)
142
160
  if export_values:
143
161
  for group, vals in export_values.items():
144
162
  exports.setdefault(group, {}).update(vals)
163
+ if log_export_values:
164
+ for group, vals in log_export_values.items():
165
+ log_exports.setdefault(group, {}).update(vals)
145
166
  continue
146
167
 
147
- _value_export_txt(run_path, export_base_name, exports)
168
+ _value_export_txt(run_path, export_base_name, exports | log_exports)
148
169
  _value_export_json(run_path, export_base_name, exports)
149
170
  return exports
150
171
 
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 = '17.1.6'
32
- __version_tuple__ = version_tuple = (17, 1, 6)
31
+ __version__ = version = '17.1.9'
32
+ __version_tuple__ = version_tuple = (17, 1, 9)
33
33
 
34
- __commit_id__ = commit_id = 'g4ea0af345'
34
+ __commit_id__ = commit_id = 'g37d22236c'
@@ -14,6 +14,13 @@ def migrate_realization_errors_json_content(
14
14
  4: "responses_loaded",
15
15
  8: "failure_in_current",
16
16
  16: "failure_in_parent",
17
+ # To cover cases who ran with storage version 16
18
+ # and StrEnum _RealizationStorageState
19
+ "undefined": "undefined",
20
+ "parameters_loaded": "parameters_loaded",
21
+ "responses_loaded": "responses_loaded",
22
+ "failure_in_current": "failure_in_current",
23
+ "failure_in_parent": "failure_in_parent",
17
24
  }
18
25
  return error_json | {"type": int_to_str[error_json["type"]]}
19
26
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ert
3
- Version: 17.1.6
3
+ Version: 17.1.9
4
4
  Summary: Ensemble based Reservoir Tool (ERT)
5
5
  Author-email: Equinor ASA <fg_sib-scout@equinor.com>
6
6
  License: GPL-3.0
@@ -31,9 +31,9 @@ ert/substitutions.py,sha256=k3dMj0-GWmE1F-kuVPkK36ekvmoPAx5NdxdcxhUrQSo,4561
31
31
  ert/trace.py,sha256=m2ZjKd1nf7LjBM2lL0fk1cNF04HnQs8blZhQbTXgcB0,1274
32
32
  ert/workflow_runner.py,sha256=veKEZBRnyMoErFpABRKLreMJvgVoN7UENbJssqmKW7w,7298
33
33
  ert/analysis/__init__.py,sha256=NNLGQG9gex6lJ8IZjEg_tXTfSeJceRA9zjOek-UeY0Y,591
34
- ert/analysis/_enif_update.py,sha256=Mc3Uztn70atfB9T96ZEch4hsGsrhjywInVwLmToBGl8,7479
34
+ ert/analysis/_enif_update.py,sha256=Oh9oUiMLbBT8o3TPl9x3ZR24gqBpIn6nFPwrOjMNtnY,7654
35
35
  ert/analysis/_es_update.py,sha256=tav1ku3uqPBPDqDfVzsMS1gi5Zn0lRk_oXqt2LZolPs,16592
36
- ert/analysis/_update_commons.py,sha256=W6S9Z3_aP9QmzaNE0cofSETqJNbQM0nYczJoq5A-SAg,12010
36
+ ert/analysis/_update_commons.py,sha256=2kf7e9iFs_jBO_qGur6gvoolK2zrnIs9GRwTvCVhcSo,12054
37
37
  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
@@ -367,7 +367,7 @@ ert/resources/workflows/jobs/shell/MOVE_DIRECTORY,sha256=Lh_u0-eCr5Usa8Xien44d6q
367
367
  ert/resources/workflows/jobs/shell/MOVE_FILE,sha256=MET6aPtDTVaoEDiTZqKqx_hRayJP3Gn-yubdwrJqpjw,48
368
368
  ert/resources/workflows/jobs/shell/SYMLINK,sha256=P6wYoLM6y7IqzJQE5ZWkKEj7ERfK9VTRJa6N1pKigeg,46
369
369
  ert/run_models/__init__.py,sha256=MWZL_nWbAarzw8Ltuy1kU0LyZpxP07Nk86wGHwOQEv8,936
370
- ert/run_models/_create_run_path.py,sha256=MyIBDCm7lE_DGJioGhGWe58LeKwPsJlkv4vh-0pKLgM,10138
370
+ ert/run_models/_create_run_path.py,sha256=sLOfSigHWRYuwec4Fm9nP1uYfmd4u7LSgGyzDJ1e9Mo,11178
371
371
  ert/run_models/ensemble_experiment.py,sha256=dUOSNh8a8jKNoBesirvQU0qUUvZ1jcaCTCS1T4s0KCY,2833
372
372
  ert/run_models/ensemble_information_filter.py,sha256=CN-yX3DJlRI7qMaLcEdTgpJMptVjU8d4c7o9HX61PQ0,1039
373
373
  ert/run_models/ensemble_smoother.py,sha256=CEdcGSAo_yW3Sfvh3OjQjnhGcwwErDkq7aFZBkKsNOo,3623
@@ -397,7 +397,7 @@ ert/services/storage_service.py,sha256=3hiQ5MVDD1ozFgndcy6HadK0qPVS1FAmL4P5p2LFf
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=DDHIZLHdBnh7ZZ--1s-FUlsoNTSJJsfHmLQE44E2JqU,5324
400
- ert/shared/version.py,sha256=stfn5tu_faTgoZ_9qXe1gK0j2h-cYnR-91Osa-Zkqks,714
400
+ ert/shared/version.py,sha256=uJeJEMKM6ycEOGW1VQzG0q2Pqrjz4rEMC4JjzCXVs28,714
401
401
  ert/shared/_doc_utils/__init__.py,sha256=zSl-NUpWLF167PVTvfjn0T50gExjvyWPw5OGq5Bt2Dc,983
402
402
  ert/shared/_doc_utils/ert_jobs.py,sha256=425Ol3pk-rIjyQxoopAijKV-YiAESJy3yyoukBQle4s,8116
403
403
  ert/shared/_doc_utils/everest_jobs.py,sha256=uBDN7tIwlBJIZVZ6ZFL1tkewEJJGDLoeVrFIIrJznvM,2081
@@ -427,7 +427,7 @@ ert/storage/migration/to13.py,sha256=uNpwzZPRF9dSFhAtIlmdIi8vGM35Md0n6e60NElegyU
427
427
  ert/storage/migration/to14.py,sha256=JO83mFTnmdAfdI6splnDS0nT2v541cpl7QzLBfwitOU,1476
428
428
  ert/storage/migration/to15.py,sha256=mD0Fz5iNiEE_QeJRdVigDueUeFpNQUNyIm57jlpstcs,771
429
429
  ert/storage/migration/to16.py,sha256=akX0tecczCiThkOWsRKwihQnCtZkFP92YSKh0EUkUOI,1137
430
- ert/storage/migration/to17.py,sha256=7TnBV1IG-S-wPnzqYt-2ZFkTeIeXWYfQMNfgIGQ9yAA,980
430
+ ert/storage/migration/to17.py,sha256=i4jhVF9oGPiKmaPW53ZjlDucmD0lds8uIZ1KKCdcyBc,1319
431
431
  ert/storage/migration/to6.py,sha256=Pj9lVCyPCOP0-dt4uypsZtS5Awbc8B7oaySu_VTwnnA,1514
432
432
  ert/storage/migration/to7.py,sha256=hV5lLfaQegyvxsy_lWfsiQAYVPCvS8Oe0fYc_fvKXzY,4500
433
433
  ert/storage/migration/to8.py,sha256=X5xMKPjpqVQYpnsU4PZqn4wVy5gOzlWpvDRYwvynKf8,5390
@@ -449,13 +449,13 @@ ert/validation/validation_status.py,sha256=f47_B7aS-9DEh6uaVzKxD97pXienkyTVVCqTy
449
449
  ert/warnings/__init__.py,sha256=IBwQVkdD7Njaad9PAB-9K-kr15wnA4EBKboxyqgu9NA,214
450
450
  ert/warnings/_warnings.py,sha256=7qhNZ0W4nnljzoOx6AXX7VlMv5pa34Ek5M5n1Ep0Kak,189
451
451
  ert/warnings/specific_warning_handler.py,sha256=5dVXtOhzcMmtPBGx4AOddXNPfzTFOPA7RVtdH8hLv68,932
452
- ert-17.1.6.dist-info/licenses/COPYING,sha256=jOtLnuWt7d5Hsx6XXB2QxzrSe2sWWh3NgMfFRetluQM,35147
452
+ ert-17.1.9.dist-info/licenses/COPYING,sha256=jOtLnuWt7d5Hsx6XXB2QxzrSe2sWWh3NgMfFRetluQM,35147
453
453
  everest/__init__.py,sha256=8_f50f6H3-onqaiuNCwC0Eiotdl9JuTxhwyF_54MVvU,306
454
454
  everest/config_file_loader.py,sha256=7cOcT0nwsZ_bhqDkyZ60sIvh1kL2sG1gURqF3IHQ4hc,5287
455
455
  everest/everest_storage.py,sha256=nfaTdab9kPlXZQiZWRR-Y7Zb-2kyQNhF0B914bU1IDQ,42269
456
456
  everest/strings.py,sha256=byT2Su4swYFcyyB36pCVvaMqxNnu8kyYfCOg8sv6LkA,1016
457
457
  everest/api/__init__.py,sha256=_me3w2C92NQpPX2RrJ28IfQiXNif5-f2dN9Qg4HzbgY,86
458
- everest/api/everest_data_api.py,sha256=HHXx7oFpXLsRwqFdoyHJ_rkvbNmmXDYMrOBhZisBeTQ,9881
458
+ everest/api/everest_data_api.py,sha256=-W_Qot75zJ6xl2M7S3SyL1SXGLcgpeopmMUSS8jSmHg,10333
459
459
  everest/assets/everest_logo.svg,sha256=1GDy-tJYQSean8f_WWTlcKPhv1Wsb_xhFzXe3Gguke4,12048
460
460
  everest/bin/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
461
461
  everest/bin/config_branch_script.py,sha256=qrSOqCYsiCi24k_Gj_Xg2s_QH3tqaPxmx-IrDAaiWQE,5138
@@ -516,8 +516,8 @@ everest/templates/well_drill.tmpl,sha256=9iLexmBHMsMQNXyyRK4GlmVuVpVIxRcCHpy1av5
516
516
  everest/templates/well_order.tmpl,sha256=XJ1eVRkeyTdLu5sLsltJSSK6BDLN7rFOAqLdM3ZZy3w,75
517
517
  everest/util/__init__.py,sha256=xEYLz6pUtgkH8VHer1RfoCwKiO70dBnuhHonsOPaOx0,1359
518
518
  everest/util/forward_models.py,sha256=JPxHhLI6TrmQJwW50wwGBmw57TfRd8SG2svYhXFHrc8,1617
519
- ert-17.1.6.dist-info/METADATA,sha256=au0DQzA0mDG1lXGJ15w950ZTvkCVmLXoSxX1Iab8Le0,10005
520
- ert-17.1.6.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
521
- ert-17.1.6.dist-info/entry_points.txt,sha256=ChZ7vn8Qy9v9rT8GM2JtAvWDN3NVoy4BIcvVRtU73CM,189
522
- ert-17.1.6.dist-info/top_level.txt,sha256=LRh9GfdfyDWfAGmrQgp_XdoMHA4v6aotw8xgsy5YyHE,17
523
- ert-17.1.6.dist-info/RECORD,,
519
+ ert-17.1.9.dist-info/METADATA,sha256=ICE3O9TkVJ-T6JK2CeeROGZG0TCL9mLKUpx69TfH0YU,10005
520
+ ert-17.1.9.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
521
+ ert-17.1.9.dist-info/entry_points.txt,sha256=ChZ7vn8Qy9v9rT8GM2JtAvWDN3NVoy4BIcvVRtU73CM,189
522
+ ert-17.1.9.dist-info/top_level.txt,sha256=LRh9GfdfyDWfAGmrQgp_XdoMHA4v6aotw8xgsy5YyHE,17
523
+ ert-17.1.9.dist-info/RECORD,,
@@ -224,6 +224,8 @@ class EverestDataAPI:
224
224
  assert self._config.storage_dir
225
225
  storage = open_storage(self._config.storage_dir, "r")
226
226
  experiment = next(storage.experiments)
227
+ identical_columns_in_all_batches: bool = True
228
+ summary_columns: list[str] | None = None
227
229
  for batch_id in batches:
228
230
  try:
229
231
  ensemble = experiment.get_ensemble_by_name(f"batch_{batch_id}")
@@ -238,6 +240,10 @@ class EverestDataAPI:
238
240
  summary = summary.pivot(
239
241
  on="response_key", index=["realization", "time"], sort_columns=True
240
242
  )
243
+ if summary_columns is None:
244
+ summary_columns = summary.columns
245
+ identical_columns_in_all_batches &= summary_columns == summary.columns
246
+
241
247
  # The 'Realization' column exported by ert are
242
248
  # the 'simulations' of everest.
243
249
  summary = summary.rename({"time": "date", "realization": "simulation"})
@@ -265,7 +271,14 @@ class EverestDataAPI:
265
271
 
266
272
  data_frames.append(summary)
267
273
  storage.close()
268
- return pl.concat(data_frames) if data_frames else pl.DataFrame()
274
+ return (
275
+ pl.concat(
276
+ data_frames,
277
+ how="vertical" if identical_columns_in_all_batches else "diagonal",
278
+ )
279
+ if data_frames
280
+ else pl.DataFrame()
281
+ )
269
282
 
270
283
  @property
271
284
  def output_folder(self) -> str:
File without changes