ert 17.1.1__py3-none-any.whl → 17.1.3__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.
@@ -171,26 +171,33 @@ class DesignMatrix:
171
171
 
172
172
  for param_cfg in existing_parameters:
173
173
  if isinstance(param_cfg, GenKwConfig) and param_cfg.name in design_cfgs:
174
- param_cfg.input_source = DataSource(
174
+ del design_cfgs[param_cfg.name]
175
+ input_source = DataSource(
175
176
  self.parameter_priority.get(
176
177
  param_cfg.name, DataSource.DESIGN_MATRIX.value
177
178
  )
178
179
  )
179
- param_cfg.update = (
180
- param_cfg.input_source == DataSource.SAMPLED and param_cfg.update
181
- )
182
- param_cfg.distribution = (
183
- RawSettings()
184
- if param_cfg.input_source == DataSource.DESIGN_MATRIX
185
- else param_cfg.distribution
186
- )
187
- param_cfg.group = (
188
- DataSource.DESIGN_MATRIX.value.upper()
189
- if param_cfg.input_source == DataSource.DESIGN_MATRIX
190
- else param_cfg.group
191
- )
192
- del design_cfgs[param_cfg.name]
193
- new_param_configs += [param_cfg]
180
+ new_param_configs += [
181
+ GenKwConfig(
182
+ name=param_cfg.name,
183
+ update=(
184
+ input_source == DataSource.SAMPLED and param_cfg.update
185
+ ),
186
+ distribution=(
187
+ RawSettings()
188
+ if input_source == DataSource.DESIGN_MATRIX
189
+ else param_cfg.distribution
190
+ ),
191
+ group=(
192
+ DESIGN_MATRIX_GROUP
193
+ if input_source == DataSource.DESIGN_MATRIX
194
+ else param_cfg.group
195
+ ),
196
+ input_source=input_source,
197
+ ),
198
+ ]
199
+ else:
200
+ new_param_configs += [param_cfg]
194
201
  if design_cfgs.values():
195
202
  new_param_configs += list(design_cfgs.values())
196
203
  return new_param_configs
ert/config/ert_config.py CHANGED
@@ -791,6 +791,15 @@ class ErtConfig(BaseModel):
791
791
  )
792
792
  return self
793
793
 
794
+ @model_validator(mode="after")
795
+ def log_ensemble_config_contents(self) -> Self:
796
+ all_parameters = self.parameter_configurations_with_design_matrix
797
+ parameter_type_count = Counter(parameter.type for parameter in all_parameters)
798
+ logger.info(
799
+ f"EnsembleConfig contains parameters of type {dict(parameter_type_count)}"
800
+ )
801
+ return self
802
+
794
803
  def __eq__(self, other: object) -> bool:
795
804
  if not isinstance(other, ErtConfig):
796
805
  return False
@@ -121,7 +121,7 @@ class GenKwConfig(ParameterConfig):
121
121
  gen_kw_key = cast(str, config_list[0])
122
122
 
123
123
  options = cast(dict[str, str], config_list[-1])
124
- positional_args = cast(list[str], config_list[:-1])
124
+ positional_args = cast(list[str | list[str]], config_list[:-1])
125
125
  errors = []
126
126
  update_parameter = str_to_bool(options.get("UPDATE", "TRUE"))
127
127
  if _get_abs_path(options.get("INIT_FILES")):
@@ -186,7 +186,7 @@ class GenKwConfig(ParameterConfig):
186
186
  params[0], params[1], params[2:]
187
187
  ),
188
188
  forward_init=False,
189
- update=update_parameter,
189
+ update="CONST" not in params and update_parameter,
190
190
  )
191
191
  for params in distributions_spec
192
192
  ]
@@ -3,6 +3,7 @@ from __future__ import annotations
3
3
  import json
4
4
  import logging
5
5
  import os
6
+ import time
6
7
  from collections.abc import Iterable, Mapping
7
8
  from datetime import UTC, datetime
8
9
  from pathlib import Path
@@ -189,12 +190,18 @@ def create_run_path(
189
190
  if context_env is None:
190
191
  context_env = {}
191
192
  runpaths.set_ert_ensemble(ensemble.name)
192
-
193
+ timings = {
194
+ "generate_parameter_files": 0.0,
195
+ "substitute_parameters": 0.0,
196
+ "substitute_real_iter": 0.0,
197
+ "result_file_to_target": 0.0,
198
+ }
193
199
  substituter = Substitutions(substitutions)
194
200
  for run_arg in run_args:
195
201
  run_path = Path(run_arg.runpath)
196
202
  if run_arg.active:
197
203
  run_path.mkdir(parents=True, exist_ok=True)
204
+ start_time = time.perf_counter()
198
205
  param_data = _generate_parameter_files(
199
206
  ensemble.experiment.parameter_configuration.values(),
200
207
  parameters_file,
@@ -203,10 +210,12 @@ def create_run_path(
203
210
  ensemble,
204
211
  ensemble.iteration,
205
212
  )
213
+ timings["generate_parameter_files"] += time.perf_counter() - start_time
206
214
  for (
207
215
  source_file_content,
208
216
  target_file,
209
217
  ) in ensemble.experiment.templates_configuration:
218
+ start_time = time.perf_counter()
210
219
  target_file = substituter.substitute_real_iter(
211
220
  target_file, run_arg.iens, ensemble.iteration
212
221
  )
@@ -215,10 +224,14 @@ def create_run_path(
215
224
  run_arg.iens,
216
225
  ensemble.iteration,
217
226
  )
227
+ timings["substitute_real_iter"] += time.perf_counter() - start_time
228
+ start_time = time.perf_counter()
218
229
  result = substituter.substitute_parameters(
219
230
  result,
220
231
  param_data,
221
232
  )
233
+ timings["substitute_parameters"] += time.perf_counter() - start_time
234
+ start_time = time.perf_counter()
222
235
  target = run_path / target_file
223
236
  if not target.parent.exists():
224
237
  os.makedirs(
@@ -226,10 +239,13 @@ def create_run_path(
226
239
  exist_ok=True,
227
240
  )
228
241
  target.write_text(result)
242
+ timings["result_file_to_target"] += time.perf_counter() - start_time
229
243
 
230
244
  path = run_path / "jobs.json"
245
+ start_time = time.perf_counter()
231
246
  _backup_if_existing(path)
232
-
247
+ timings["backup_if_existing"] = time.perf_counter() - start_time
248
+ start_time = time.perf_counter()
233
249
  forward_model_output = create_forward_model_json(
234
250
  context=substitutions,
235
251
  forward_model_steps=forward_model_steps,
@@ -246,12 +262,15 @@ def create_run_path(
246
262
  option=orjson.OPT_NON_STR_KEYS | orjson.OPT_INDENT_2,
247
263
  )
248
264
  )
265
+ timings["jobs_to_json"] = time.perf_counter() - start_time
249
266
  # Write MANIFEST file to runpath use to avoid NFS sync issues
267
+ start_time = time.perf_counter()
250
268
  data = _manifest_to_json(ensemble, run_arg.iens, run_arg.itr)
251
269
  Path(run_path / "manifest.json").write_bytes(
252
270
  orjson.dumps(data, option=orjson.OPT_NON_STR_KEYS | orjson.OPT_INDENT_2)
253
271
  )
254
-
272
+ timings["manifest_to_json"] = time.perf_counter() - start_time
273
+ logger.info(f"_create_run_path durations: {timings}")
255
274
  runpaths.write_runpath_list(
256
275
  [ensemble.iteration], [real.iens for real in run_args if real.active]
257
276
  )
@@ -19,6 +19,7 @@ logger = logging.getLogger(__name__)
19
19
 
20
20
  class ManualUpdate(UpdateRunModel):
21
21
  ensemble_id: str
22
+ ert_templates: list[tuple[str, str]]
22
23
 
23
24
  _prior: Ensemble = PrivateAttr()
24
25
 
@@ -49,7 +50,7 @@ class ManualUpdate(UpdateRunModel):
49
50
  observations=prior_experiment.observations,
50
51
  simulation_arguments=prior_experiment.metadata,
51
52
  name=f"Manual update of {self._prior.name}",
52
- templates=self._prior.experiment.templates_configuration,
53
+ templates=self.ert_templates,
53
54
  )
54
55
  self.update(
55
56
  self._prior,
@@ -287,6 +287,7 @@ def _setup_manual_update(
287
287
  substitutions=config.substitutions,
288
288
  hooked_workflows=config.hooked_workflows,
289
289
  log_path=config.analysis_config.log_path,
290
+ ert_templates=config.ert_templates,
290
291
  observations=config.observations,
291
292
  )
292
293
 
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.1'
32
- __version_tuple__ = version_tuple = (17, 1, 1)
31
+ __version__ = version = '17.1.3'
32
+ __version_tuple__ = version_tuple = (17, 1, 3)
33
33
 
34
- __commit_id__ = commit_id = 'gf5fff23fc'
34
+ __commit_id__ = commit_id = 'gd2561a7a0'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ert
3
- Version: 17.1.1
3
+ Version: 17.1.3
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
@@ -51,10 +51,10 @@ ert/config/_str_to_bool.py,sha256=AxNCJAuTtKF-562CRh7HgjQIyM7N-jjSlRJKvpCNk9I,85
51
51
  ert/config/analysis_config.py,sha256=v-ZppIlP_NkmhtuYuxm31m2V3eA7YjvC3rDsMXm5qPk,8646
52
52
  ert/config/analysis_module.py,sha256=TLluRobz_0NNMDSGFdM4L2t9agfvHyhoN-b1Rg8MAE4,2070
53
53
  ert/config/capture_validation.py,sha256=8HGEbJ2z9FXeEaxSewejP7NtEh4LLomPwcdpC0CJlko,1252
54
- ert/config/design_matrix.py,sha256=cJTvvUVKo9h5OPGjQDcq-cK0Pl3mm3P63RDKvK_n0xU,16993
54
+ ert/config/design_matrix.py,sha256=yyAFBppTwZXt4OeN6kxRmLk16jF8bntQWLHU_-rDQn4,17236
55
55
  ert/config/distribution.py,sha256=MdLQEnWZqDaAwbKI1maXxlurYousirlZbA8AIk6GITw,12734
56
56
  ert/config/ensemble_config.py,sha256=8IgQOdzhczslScJJuVYlWKzALw6_IsqvZzSvMkiE8go,7438
57
- ert/config/ert_config.py,sha256=pYi1qywb95rtA1Kro-hoDHOucrUJCvSWiPTnAAmArt0,54231
57
+ ert/config/ert_config.py,sha256=at5T2E393aikjZMSswP2hp7LvS9VvKknF_9ip9eYTb8,54618
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_constraints_config.py,sha256=vlsoXHGyoCoESZ4eFdsKlFWL0aEctRR0caBFwcuF1xk,3099
@@ -64,7 +64,7 @@ ert/config/external_ert_script.py,sha256=7htQDv1P7ykoj4Bz51xOWIDbs7P4z7HIft67Bab
64
64
  ert/config/field.py,sha256=BDaBni_aQ2y1GpG37KodrmlBcG17bXgZLOzR72Llxmo,12093
65
65
  ert/config/forward_model_step.py,sha256=v35ieiGdE5OA764q1eri2MGSNDEUtOlweBp2Vx56EpI,9926
66
66
  ert/config/gen_data_config.py,sha256=Vuh3wGPL_R2jktPhX_dAR_SjYu0LADdRQJjn1H7VVV8,8554
67
- ert/config/gen_kw_config.py,sha256=sDtmLmPAVgI-eI6OzBMORm6V2EnyqaOb6tKdnNLNIP8,10583
67
+ ert/config/gen_kw_config.py,sha256=5Dq6YhusvHgFBpDPNKanSghyE7oj2NFRU36J8Krnpv4,10621
68
68
  ert/config/lint_file.py,sha256=DZv2j2OzhArtr7oDDUin6lJRwP6Ww620b7Yh-0SHUFc,671
69
69
  ert/config/model_config.py,sha256=puFBesPfksWM9Yp1qKa1gu_y7r2drZf9etJUBqGspu4,5056
70
70
  ert/config/parameter_config.py,sha256=pZz0PstN_Mm4e2w3S_CxuXHZK11KeNjLAUhJIUqMXYg,6035
@@ -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=5CJNFaBbsCnfzb9eoXGWdgFpuJiBXiPTsaHdyJcXbHQ,9007
370
+ ert/run_models/_create_run_path.py,sha256=MyIBDCm7lE_DGJioGhGWe58LeKwPsJlkv4vh-0pKLgM,10138
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
@@ -375,8 +375,8 @@ ert/run_models/evaluate_ensemble.py,sha256=OPpHzJCkh66exOUpvQLa7FSsPN0rE6Tw2A4DC
375
375
  ert/run_models/event.py,sha256=s7Nij_M_OLcODSZ0ALg03fFin2lRCYalKMoJujTa6sg,3249
376
376
  ert/run_models/everest_run_model.py,sha256=vkHezGoQ2n2wix3lufd-zgfUTb6BAEoyTh-1R7OrxJ4,44259
377
377
  ert/run_models/initial_ensemble_run_model.py,sha256=Kjl7cSRNT_yiHcXw-0RhwGn9ggSlWs3zq2nQGIVwNDA,3720
378
- ert/run_models/manual_update.py,sha256=uhzeQnIL7QKUjKSzGM_Oby8PrQLqpsLEEJbM3k_EAIc,2929
379
- ert/run_models/model_factory.py,sha256=3TbIjpFqooCYB3QoLjqkw9m-xnwvt3H12rSnfKAHUmA,18588
378
+ ert/run_models/manual_update.py,sha256=r8UAJKgCf6RqTfcFwCbW7hDPHqpGW_m7YQGgzdmR-fY,2942
379
+ ert/run_models/model_factory.py,sha256=y5eOrnH3U6-c1yVfE0mcwbZXGYtAf0UaMoJvkyjAQyU,18632
380
380
  ert/run_models/multiple_data_assimilation.py,sha256=pJa1X55dLBpDn13ukQR1W769qVPPQEiUAl1fjq6ArS4,8214
381
381
  ert/run_models/run_model.py,sha256=ZhX1C2_NQRFe-i4wx7qaV4w8-BXmb6vHnz4p0ZhuFsQ,30234
382
382
  ert/run_models/single_test_run.py,sha256=4MJeyZAN9uX5RdIni5vb3uymUexG3JtZBtERMUCjqPE,922
@@ -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=lWK3GCMvVnSkDONSCqHwX1YrDpQtDsZaza8okvJgVAc,714
400
+ ert/shared/version.py,sha256=_zSQoyIoRuk0INbUivlXAy8q9dNiaMXxPHOdBzoCEBQ,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
@@ -448,7 +448,7 @@ ert/validation/validation_status.py,sha256=f47_B7aS-9DEh6uaVzKxD97pXienkyTVVCqTy
448
448
  ert/warnings/__init__.py,sha256=IBwQVkdD7Njaad9PAB-9K-kr15wnA4EBKboxyqgu9NA,214
449
449
  ert/warnings/_warnings.py,sha256=7qhNZ0W4nnljzoOx6AXX7VlMv5pa34Ek5M5n1Ep0Kak,189
450
450
  ert/warnings/specific_warning_handler.py,sha256=5dVXtOhzcMmtPBGx4AOddXNPfzTFOPA7RVtdH8hLv68,932
451
- ert-17.1.1.dist-info/licenses/COPYING,sha256=jOtLnuWt7d5Hsx6XXB2QxzrSe2sWWh3NgMfFRetluQM,35147
451
+ ert-17.1.3.dist-info/licenses/COPYING,sha256=jOtLnuWt7d5Hsx6XXB2QxzrSe2sWWh3NgMfFRetluQM,35147
452
452
  everest/__init__.py,sha256=8_f50f6H3-onqaiuNCwC0Eiotdl9JuTxhwyF_54MVvU,306
453
453
  everest/config_file_loader.py,sha256=7cOcT0nwsZ_bhqDkyZ60sIvh1kL2sG1gURqF3IHQ4hc,5287
454
454
  everest/everest_storage.py,sha256=nfaTdab9kPlXZQiZWRR-Y7Zb-2kyQNhF0B914bU1IDQ,42269
@@ -515,8 +515,8 @@ everest/templates/well_drill.tmpl,sha256=9iLexmBHMsMQNXyyRK4GlmVuVpVIxRcCHpy1av5
515
515
  everest/templates/well_order.tmpl,sha256=XJ1eVRkeyTdLu5sLsltJSSK6BDLN7rFOAqLdM3ZZy3w,75
516
516
  everest/util/__init__.py,sha256=xEYLz6pUtgkH8VHer1RfoCwKiO70dBnuhHonsOPaOx0,1359
517
517
  everest/util/forward_models.py,sha256=JPxHhLI6TrmQJwW50wwGBmw57TfRd8SG2svYhXFHrc8,1617
518
- ert-17.1.1.dist-info/METADATA,sha256=YHNXoero9qqe9HSG_R5PEILZft2LmJOcWAyHrS3m6Yk,10005
519
- ert-17.1.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
520
- ert-17.1.1.dist-info/entry_points.txt,sha256=ChZ7vn8Qy9v9rT8GM2JtAvWDN3NVoy4BIcvVRtU73CM,189
521
- ert-17.1.1.dist-info/top_level.txt,sha256=LRh9GfdfyDWfAGmrQgp_XdoMHA4v6aotw8xgsy5YyHE,17
522
- ert-17.1.1.dist-info/RECORD,,
518
+ ert-17.1.3.dist-info/METADATA,sha256=Cvndc9K997C9xnMkhQjfIm3gyKV33dDzxMd48eK-UOo,10005
519
+ ert-17.1.3.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
520
+ ert-17.1.3.dist-info/entry_points.txt,sha256=ChZ7vn8Qy9v9rT8GM2JtAvWDN3NVoy4BIcvVRtU73CM,189
521
+ ert-17.1.3.dist-info/top_level.txt,sha256=LRh9GfdfyDWfAGmrQgp_XdoMHA4v6aotw8xgsy5YyHE,17
522
+ ert-17.1.3.dist-info/RECORD,,
File without changes