ert 16.0.9__py3-none-any.whl → 19.0.0rc2__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.
Files changed (286) hide show
  1. _ert/events.py +19 -2
  2. _ert/forward_model_runner/client.py +6 -2
  3. _ert/forward_model_runner/fm_dispatch.py +9 -6
  4. _ert/forward_model_runner/reporting/event.py +1 -0
  5. _ert/forward_model_runner/runner.py +1 -2
  6. _ert/utils.py +12 -0
  7. ert/__main__.py +58 -38
  8. ert/analysis/_enif_update.py +8 -4
  9. ert/analysis/_es_update.py +19 -6
  10. ert/analysis/_update_commons.py +16 -6
  11. ert/base_model_context.py +1 -1
  12. ert/cli/main.py +17 -12
  13. ert/cli/monitor.py +7 -0
  14. ert/config/__init__.py +17 -6
  15. ert/config/_create_observation_dataframes.py +118 -21
  16. ert/config/_get_num_cpu.py +1 -1
  17. ert/config/_observations.py +91 -2
  18. ert/config/_read_summary.py +74 -328
  19. ert/config/design_matrix.py +62 -23
  20. ert/config/distribution.py +1 -1
  21. ert/config/ensemble_config.py +9 -17
  22. ert/config/ert_config.py +155 -58
  23. ert/config/everest_control.py +234 -0
  24. ert/config/{everest_constraints_config.py → everest_response.py} +27 -15
  25. ert/config/field.py +99 -90
  26. ert/config/forward_model_step.py +122 -17
  27. ert/config/gen_data_config.py +5 -10
  28. ert/config/gen_kw_config.py +11 -41
  29. ert/config/known_response_types.py +14 -0
  30. ert/config/parameter_config.py +1 -33
  31. ert/config/parsing/_option_dict.py +10 -2
  32. ert/config/parsing/config_errors.py +1 -1
  33. ert/config/parsing/config_keywords.py +2 -1
  34. ert/config/parsing/config_schema.py +23 -11
  35. ert/config/parsing/config_schema_deprecations.py +3 -3
  36. ert/config/parsing/config_schema_item.py +26 -11
  37. ert/config/parsing/context_values.py +3 -3
  38. ert/config/parsing/file_context_token.py +1 -1
  39. ert/config/parsing/observations_parser.py +6 -2
  40. ert/config/parsing/queue_system.py +9 -0
  41. ert/config/parsing/schema_item_type.py +1 -0
  42. ert/config/queue_config.py +42 -50
  43. ert/config/response_config.py +0 -8
  44. ert/config/rft_config.py +275 -0
  45. ert/config/summary_config.py +3 -8
  46. ert/config/surface_config.py +73 -26
  47. ert/config/workflow_fixtures.py +2 -1
  48. ert/config/workflow_job.py +135 -54
  49. ert/dark_storage/client/__init__.py +2 -2
  50. ert/dark_storage/client/_session.py +4 -4
  51. ert/dark_storage/client/client.py +2 -2
  52. ert/dark_storage/common.py +12 -3
  53. ert/dark_storage/compute/misfits.py +11 -7
  54. ert/dark_storage/endpoints/compute/misfits.py +6 -4
  55. ert/dark_storage/endpoints/ensembles.py +4 -0
  56. ert/dark_storage/endpoints/experiment_server.py +30 -24
  57. ert/dark_storage/endpoints/experiments.py +2 -2
  58. ert/dark_storage/endpoints/observations.py +8 -6
  59. ert/dark_storage/endpoints/parameters.py +4 -12
  60. ert/dark_storage/endpoints/responses.py +24 -5
  61. ert/dark_storage/json_schema/ensemble.py +3 -0
  62. ert/dark_storage/json_schema/experiment.py +1 -1
  63. ert/data/_measured_data.py +6 -5
  64. ert/ensemble_evaluator/__init__.py +8 -1
  65. ert/ensemble_evaluator/config.py +2 -1
  66. ert/ensemble_evaluator/evaluator.py +81 -29
  67. ert/ensemble_evaluator/event.py +6 -0
  68. ert/ensemble_evaluator/snapshot.py +3 -1
  69. ert/ensemble_evaluator/state.py +1 -0
  70. ert/field_utils/__init__.py +8 -0
  71. ert/field_utils/field_utils.py +228 -15
  72. ert/field_utils/grdecl_io.py +1 -1
  73. ert/field_utils/roff_io.py +1 -1
  74. ert/gui/__init__.py +5 -2
  75. ert/gui/ertnotifier.py +1 -1
  76. ert/gui/ertwidgets/__init__.py +23 -16
  77. ert/gui/ertwidgets/analysismoduleedit.py +2 -2
  78. ert/gui/ertwidgets/checklist.py +1 -1
  79. ert/gui/ertwidgets/closabledialog.py +2 -0
  80. ert/gui/ertwidgets/copyablelabel.py +2 -0
  81. ert/gui/ertwidgets/create_experiment_dialog.py +3 -1
  82. ert/gui/ertwidgets/ensembleselector.py +2 -2
  83. ert/gui/ertwidgets/listeditbox.py +2 -0
  84. ert/gui/ertwidgets/models/__init__.py +2 -0
  85. ert/gui/ertwidgets/models/activerealizationsmodel.py +5 -1
  86. ert/gui/ertwidgets/models/path_model.py +1 -1
  87. ert/gui/ertwidgets/models/targetensemblemodel.py +5 -1
  88. ert/gui/ertwidgets/models/text_model.py +4 -1
  89. ert/gui/ertwidgets/pathchooser.py +0 -3
  90. ert/gui/ertwidgets/searchbox.py +17 -4
  91. ert/gui/ertwidgets/stringbox.py +2 -0
  92. ert/gui/{suggestor → ertwidgets/suggestor}/_suggestor_message.py +13 -4
  93. ert/gui/{suggestor → ertwidgets/suggestor}/suggestor.py +63 -30
  94. ert/gui/main.py +41 -13
  95. ert/gui/main_window.py +3 -7
  96. ert/gui/model/fm_step_list.py +3 -0
  97. ert/gui/model/real_list.py +1 -0
  98. ert/gui/model/snapshot.py +1 -0
  99. ert/gui/simulation/combobox_with_description.py +3 -0
  100. ert/gui/simulation/ensemble_experiment_panel.py +8 -2
  101. ert/gui/simulation/ensemble_information_filter_panel.py +7 -2
  102. ert/gui/simulation/ensemble_smoother_panel.py +8 -2
  103. ert/gui/simulation/evaluate_ensemble_panel.py +17 -7
  104. ert/gui/simulation/experiment_panel.py +18 -6
  105. ert/gui/simulation/manual_update_panel.py +35 -10
  106. ert/gui/simulation/multiple_data_assimilation_panel.py +13 -9
  107. ert/gui/simulation/run_dialog.py +47 -20
  108. ert/gui/simulation/single_test_run_panel.py +6 -3
  109. ert/gui/simulation/view/progress_widget.py +2 -0
  110. ert/gui/simulation/view/realization.py +5 -1
  111. ert/gui/simulation/view/update.py +2 -0
  112. ert/gui/summarypanel.py +20 -1
  113. ert/gui/tools/event_viewer/panel.py +3 -4
  114. ert/gui/tools/event_viewer/tool.py +2 -0
  115. ert/gui/tools/load_results/load_results_panel.py +1 -1
  116. ert/gui/tools/load_results/load_results_tool.py +2 -0
  117. ert/gui/tools/manage_experiments/export_dialog.py +136 -0
  118. ert/gui/tools/manage_experiments/manage_experiments_panel.py +2 -0
  119. ert/gui/tools/manage_experiments/storage_info_widget.py +121 -16
  120. ert/gui/tools/manage_experiments/storage_widget.py +4 -3
  121. ert/gui/tools/plot/customize/color_chooser.py +5 -2
  122. ert/gui/tools/plot/customize/customize_plot_dialog.py +2 -0
  123. ert/gui/tools/plot/customize/default_customization_view.py +4 -0
  124. ert/gui/tools/plot/customize/limits_customization_view.py +3 -0
  125. ert/gui/tools/plot/customize/statistics_customization_view.py +3 -0
  126. ert/gui/tools/plot/customize/style_chooser.py +2 -0
  127. ert/gui/tools/plot/customize/style_customization_view.py +3 -0
  128. ert/gui/tools/plot/data_type_keys_widget.py +2 -0
  129. ert/gui/tools/plot/data_type_proxy_model.py +3 -0
  130. ert/gui/tools/plot/plot_api.py +50 -28
  131. ert/gui/tools/plot/plot_ensemble_selection_widget.py +17 -10
  132. ert/gui/tools/plot/plot_widget.py +15 -2
  133. ert/gui/tools/plot/plot_window.py +41 -19
  134. ert/gui/tools/plot/plottery/plot_config.py +2 -0
  135. ert/gui/tools/plot/plottery/plot_context.py +14 -0
  136. ert/gui/tools/plot/plottery/plots/__init__.py +2 -0
  137. ert/gui/tools/plot/plottery/plots/cesp.py +3 -1
  138. ert/gui/tools/plot/plottery/plots/distribution.py +6 -1
  139. ert/gui/tools/plot/plottery/plots/ensemble.py +13 -5
  140. ert/gui/tools/plot/plottery/plots/gaussian_kde.py +12 -2
  141. ert/gui/tools/plot/plottery/plots/histogram.py +3 -1
  142. ert/gui/tools/plot/plottery/plots/misfits.py +436 -0
  143. ert/gui/tools/plot/plottery/plots/observations.py +18 -4
  144. ert/gui/tools/plot/plottery/plots/statistics.py +62 -20
  145. ert/gui/tools/plot/plottery/plots/std_dev.py +3 -1
  146. ert/gui/tools/plot/widgets/clearable_line_edit.py +9 -0
  147. ert/gui/tools/plot/widgets/filter_popup.py +2 -0
  148. ert/gui/tools/plot/widgets/filterable_kw_list_model.py +3 -0
  149. ert/gui/tools/plugins/plugin.py +1 -1
  150. ert/gui/tools/plugins/plugins_tool.py +2 -0
  151. ert/gui/tools/plugins/process_job_dialog.py +3 -0
  152. ert/gui/tools/workflows/workflow_dialog.py +2 -0
  153. ert/gui/tools/workflows/workflows_tool.py +2 -0
  154. ert/libres_facade.py +5 -7
  155. ert/logging/__init__.py +4 -1
  156. ert/mode_definitions.py +2 -0
  157. ert/plugins/__init__.py +4 -6
  158. ert/plugins/hook_implementations/workflows/csv_export.py +2 -3
  159. ert/plugins/hook_implementations/workflows/gen_data_rft_export.py +10 -2
  160. ert/plugins/hook_specifications/__init__.py +0 -10
  161. ert/plugins/hook_specifications/jobs.py +0 -9
  162. ert/plugins/plugin_manager.py +53 -124
  163. ert/resources/forward_models/run_reservoirsimulator.py +8 -4
  164. ert/resources/forward_models/template_render.py +10 -10
  165. ert/resources/shell_scripts/delete_directory.py +2 -2
  166. ert/run_models/__init__.py +24 -6
  167. ert/run_models/_create_run_path.py +133 -38
  168. ert/run_models/ensemble_experiment.py +10 -4
  169. ert/run_models/ensemble_information_filter.py +8 -1
  170. ert/run_models/ensemble_smoother.py +9 -3
  171. ert/run_models/evaluate_ensemble.py +8 -6
  172. ert/run_models/event.py +7 -3
  173. ert/run_models/everest_run_model.py +337 -113
  174. ert/run_models/initial_ensemble_run_model.py +25 -24
  175. ert/run_models/manual_update.py +6 -3
  176. ert/run_models/manual_update_enif.py +37 -0
  177. ert/run_models/model_factory.py +78 -18
  178. ert/run_models/multiple_data_assimilation.py +22 -11
  179. ert/run_models/run_model.py +72 -73
  180. ert/run_models/single_test_run.py +7 -4
  181. ert/run_models/update_run_model.py +4 -2
  182. ert/runpaths.py +5 -6
  183. ert/sample_prior.py +9 -4
  184. ert/scheduler/__init__.py +10 -5
  185. ert/scheduler/driver.py +40 -0
  186. ert/scheduler/event.py +3 -1
  187. ert/scheduler/job.py +23 -13
  188. ert/scheduler/lsf_driver.py +15 -5
  189. ert/scheduler/openpbs_driver.py +10 -4
  190. ert/scheduler/scheduler.py +5 -0
  191. ert/scheduler/slurm_driver.py +20 -5
  192. ert/services/__init__.py +2 -2
  193. ert/services/_base_service.py +37 -20
  194. ert/services/_storage_main.py +20 -18
  195. ert/services/ert_server.py +317 -0
  196. ert/shared/_doc_utils/__init__.py +4 -2
  197. ert/shared/_doc_utils/ert_jobs.py +1 -4
  198. ert/shared/net_utils.py +43 -18
  199. ert/shared/storage/connection.py +3 -3
  200. ert/shared/version.py +3 -3
  201. ert/storage/__init__.py +14 -1
  202. ert/storage/local_ensemble.py +44 -13
  203. ert/storage/local_experiment.py +54 -34
  204. ert/storage/local_storage.py +90 -58
  205. ert/storage/migration/to10.py +3 -2
  206. ert/storage/migration/to11.py +9 -10
  207. ert/storage/migration/to12.py +19 -20
  208. ert/storage/migration/to13.py +28 -27
  209. ert/storage/migration/to14.py +3 -3
  210. ert/storage/migration/to15.py +25 -0
  211. ert/storage/migration/to16.py +38 -0
  212. ert/storage/migration/to17.py +42 -0
  213. ert/storage/migration/to18.py +11 -0
  214. ert/storage/migration/to19.py +34 -0
  215. ert/storage/migration/to20.py +23 -0
  216. ert/storage/migration/to21.py +25 -0
  217. ert/storage/migration/to6.py +3 -2
  218. ert/storage/migration/to7.py +12 -13
  219. ert/storage/migration/to8.py +9 -11
  220. ert/storage/migration/to9.py +5 -4
  221. ert/storage/realization_storage_state.py +7 -7
  222. ert/substitutions.py +12 -28
  223. ert/validation/active_range.py +7 -7
  224. ert/validation/ensemble_realizations_argument.py +4 -2
  225. ert/validation/rangestring.py +16 -16
  226. ert/workflow_runner.py +6 -3
  227. {ert-16.0.9.dist-info → ert-19.0.0rc2.dist-info}/METADATA +21 -15
  228. ert-19.0.0rc2.dist-info/RECORD +524 -0
  229. {ert-16.0.9.dist-info → ert-19.0.0rc2.dist-info}/WHEEL +1 -1
  230. everest/api/everest_data_api.py +14 -1
  231. everest/assets/everest_logo.svg +406 -0
  232. everest/bin/config_branch_script.py +30 -14
  233. everest/bin/everconfigdump_script.py +2 -10
  234. everest/bin/everest_script.py +53 -33
  235. everest/bin/everlint_script.py +3 -5
  236. everest/bin/kill_script.py +7 -5
  237. everest/bin/main.py +11 -24
  238. everest/bin/monitor_script.py +64 -35
  239. everest/bin/utils.py +58 -43
  240. everest/bin/visualization_script.py +23 -13
  241. everest/config/__init__.py +4 -1
  242. everest/config/control_config.py +81 -6
  243. everest/config/control_variable_config.py +4 -3
  244. everest/config/everest_config.py +102 -79
  245. everest/config/forward_model_config.py +5 -3
  246. everest/config/install_data_config.py +7 -5
  247. everest/config/install_job_config.py +45 -3
  248. everest/config/install_template_config.py +3 -3
  249. everest/config/optimization_config.py +19 -6
  250. everest/config/output_constraint_config.py +8 -2
  251. everest/config/server_config.py +6 -55
  252. everest/config/simulator_config.py +62 -17
  253. everest/config/utils.py +25 -105
  254. everest/config/validation_utils.py +34 -15
  255. everest/config_file_loader.py +30 -21
  256. everest/detached/__init__.py +0 -6
  257. everest/detached/client.py +7 -52
  258. everest/detached/everserver.py +19 -45
  259. everest/everest_storage.py +24 -40
  260. everest/gui/everest_client.py +2 -3
  261. everest/gui/main_window.py +2 -2
  262. everest/optimizer/everest2ropt.py +68 -42
  263. everest/optimizer/opt_model_transforms.py +15 -20
  264. everest/optimizer/utils.py +0 -29
  265. everest/plugins/hook_specs.py +0 -24
  266. everest/strings.py +1 -6
  267. everest/util/__init__.py +3 -1
  268. ert/config/everest_objective_config.py +0 -95
  269. ert/config/ext_param_config.py +0 -107
  270. ert/gui/tools/export/__init__.py +0 -3
  271. ert/gui/tools/export/export_panel.py +0 -83
  272. ert/gui/tools/export/export_tool.py +0 -67
  273. ert/gui/tools/export/exporter.py +0 -36
  274. ert/plugins/hook_specifications/ecl_config.py +0 -29
  275. ert/services/storage_service.py +0 -127
  276. ert/summary_key_type.py +0 -234
  277. ert-16.0.9.dist-info/RECORD +0 -521
  278. everest/bin/everexport_script.py +0 -53
  279. everest/config/sampler_config.py +0 -103
  280. everest/simulator/__init__.py +0 -88
  281. everest/simulator/everest_to_ert.py +0 -252
  282. /ert/gui/{suggestor → ertwidgets/suggestor}/__init__.py +0 -0
  283. /ert/gui/{suggestor → ertwidgets/suggestor}/_colors.py +0 -0
  284. {ert-16.0.9.dist-info → ert-19.0.0rc2.dist-info}/entry_points.txt +0 -0
  285. {ert-16.0.9.dist-info → ert-19.0.0rc2.dist-info}/licenses/COPYING +0 -0
  286. {ert-16.0.9.dist-info → ert-19.0.0rc2.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,406 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <svg
3
+ viewBox="0 0 821.56887 232.52212"
4
+ version="1.1"
5
+ id="svg21"
6
+ sodipodi:docname="everest_logo.svg"
7
+ width="821.56885"
8
+ height="232.52213"
9
+ inkscape:version="1.4.2 (f4327f4, 2025-05-13)"
10
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
11
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
12
+ xmlns="http://www.w3.org/2000/svg"
13
+ xmlns:svg="http://www.w3.org/2000/svg">
14
+ <sodipodi:namedview
15
+ id="namedview21"
16
+ pagecolor="#ffffff"
17
+ bordercolor="#000000"
18
+ borderopacity="0.25"
19
+ inkscape:showpageshadow="2"
20
+ inkscape:pageopacity="0.0"
21
+ inkscape:pagecheckerboard="0"
22
+ inkscape:deskcolor="#d1d1d1"
23
+ inkscape:zoom="3.1028704"
24
+ inkscape:cx="300.68932"
25
+ inkscape:cy="123.91752"
26
+ inkscape:window-width="5160"
27
+ inkscape:window-height="2126"
28
+ inkscape:window-x="2869"
29
+ inkscape:window-y="-11"
30
+ inkscape:window-maximized="1"
31
+ inkscape:current-layer="svg21" />
32
+ <defs
33
+ id="defs14">
34
+ <style
35
+ id="style1">.j{fill:#fff;}.k{fill:url(#f);}.l{clip-path:url(#e);}.m{clip-path:url(#d);}.n{fill:url(#h);}.o{fill:none;}.p{clip-path:url(#i);}.q{fill:#002484;}.r{clip-path:url(#g);}</style>
36
+ <clipPath
37
+ id="d">
38
+ <rect
39
+ class="o"
40
+ width="1139.59"
41
+ height="233.91"
42
+ id="rect1"
43
+ x="0"
44
+ y="0" />
45
+ </clipPath>
46
+ <clipPath
47
+ id="e">
48
+ <path
49
+ class="o"
50
+ d="M 0,116.95 C 0,181.54 52.36,233.9 116.95,233.9 181.54,233.9 233.9,181.54 233.9,116.95 233.9,52.36 181.54,0 116.95,0 52.36,0 0,52.36 0,116.95"
51
+ id="path1" />
52
+ </clipPath>
53
+ <linearGradient
54
+ id="f"
55
+ x1="-386.98001"
56
+ y1="636.65997"
57
+ x2="-385.98001"
58
+ y2="636.65997"
59
+ gradientTransform="matrix(233.94,0,0,-233.94,90532.27,149060.04)"
60
+ gradientUnits="userSpaceOnUse">
61
+ <stop
62
+ offset="0"
63
+ stop-color="#ff1543"
64
+ id="stop1" />
65
+ <stop
66
+ offset=".23"
67
+ stop-color="#ff1845"
68
+ id="stop2" />
69
+ <stop
70
+ offset=".4"
71
+ stop-color="#ff214d"
72
+ id="stop3" />
73
+ <stop
74
+ offset=".56"
75
+ stop-color="#ff3159"
76
+ id="stop4" />
77
+ <stop
78
+ offset=".7"
79
+ stop-color="#ff486c"
80
+ id="stop5" />
81
+ <stop
82
+ offset=".83"
83
+ stop-color="#ff6583"
84
+ id="stop6" />
85
+ <stop
86
+ offset=".96"
87
+ stop-color="#ff89a0"
88
+ id="stop7" />
89
+ <stop
90
+ offset="1"
91
+ stop-color="#ff96aa"
92
+ id="stop8" />
93
+ </linearGradient>
94
+ <clipPath
95
+ id="g">
96
+ <path
97
+ class="o"
98
+ d="M 0.46,106.52 C 0.16,109.96 0,113.44 0,116.95 0,181.54 52.36,233.9 116.95,233.9 c 64.59,0 112.56,-48.08 116.68,-108.93 v -0.19 l -76.2,-56.36 v 41.29 L 76.77,49.88 Z"
99
+ id="path8" />
100
+ </clipPath>
101
+ <linearGradient
102
+ id="h"
103
+ x1="-386.98001"
104
+ y1="636.71997"
105
+ x2="-385.98001"
106
+ y2="636.71997"
107
+ gradientTransform="matrix(222.02,0,0,-222.02,85898.26,141510.45)"
108
+ gradientUnits="userSpaceOnUse">
109
+ <stop
110
+ offset="0"
111
+ stop-color="#123eb7"
112
+ id="stop9" />
113
+ <stop
114
+ offset=".05"
115
+ stop-color="#0e39ad"
116
+ id="stop10" />
117
+ <stop
118
+ offset=".19"
119
+ stop-color="#082f9a"
120
+ id="stop11" />
121
+ <stop
122
+ offset=".36"
123
+ stop-color="#03288d"
124
+ id="stop12" />
125
+ <stop
126
+ offset=".57"
127
+ stop-color="#002586"
128
+ id="stop13" />
129
+ <stop
130
+ offset="1"
131
+ stop-color="#002484"
132
+ id="stop14" />
133
+ </linearGradient>
134
+ <clipPath
135
+ id="i">
136
+ <circle
137
+ class="o"
138
+ cx="116.95"
139
+ cy="116.95"
140
+ r="116.95"
141
+ id="circle14" />
142
+ </clipPath>
143
+ <mask
144
+ maskUnits="userSpaceOnUse"
145
+ id="mask16">
146
+ <circle
147
+ cx="64.03392"
148
+ cy="64.03392"
149
+ fill="url(#radial-gradient)"
150
+ stroke-width="0"
151
+ id="circle16"
152
+ style="fill:#ffffff;fill-opacity:1"
153
+ r="63.74976" />
154
+ </mask>
155
+ <radialGradient
156
+ id="radial-gradient"
157
+ cx="64.03392"
158
+ cy="64.03392"
159
+ fx="49.353233"
160
+ fy="82.396118"
161
+ r="59.086895"
162
+ gradientUnits="userSpaceOnUse">
163
+ <stop
164
+ offset="0"
165
+ stop-color="#f5aba7"
166
+ id="stop1-0" />
167
+ <stop
168
+ offset=".217861041112723"
169
+ stop-color="#f4a8a5"
170
+ id="stop2-9" />
171
+ <stop
172
+ offset=".361136125615505"
173
+ stop-color="#f39f9f"
174
+ id="stop3-0" />
175
+ <stop
176
+ offset=".482893104808535"
177
+ stop-color="#f29094"
178
+ id="stop4-0" />
179
+ <stop
180
+ offset=".592650507232557"
181
+ stop-color="#ef7b86"
182
+ id="stop5-6" />
183
+ <stop
184
+ offset=".694335183107659"
185
+ stop-color="#ec5f73"
186
+ id="stop6-1" />
187
+ <stop
188
+ offset=".78871442354024"
189
+ stop-color="#e93e5d"
190
+ id="stop7-3" />
191
+ <stop
192
+ offset=".860573681175441"
193
+ stop-color="#e62048"
194
+ id="stop8-8" />
195
+ </radialGradient>
196
+ <clipPath
197
+ id="clippath">
198
+ <circle
199
+ cx="64.03392"
200
+ cy="64.03392"
201
+ r="64.03392"
202
+ fill="none"
203
+ stroke-width="0"
204
+ id="circle8" />
205
+ </clipPath>
206
+ <linearGradient
207
+ id="linear-gradient"
208
+ x1="32.965416"
209
+ y1="147.10043"
210
+ x2="93.746849"
211
+ y2="41.823895"
212
+ gradientUnits="userSpaceOnUse">
213
+ <stop
214
+ offset="0"
215
+ stop-color="#284899"
216
+ id="stop9-9" />
217
+ <stop
218
+ offset=".138867226110765"
219
+ stop-color="#273f87"
220
+ id="stop10-3" />
221
+ <stop
222
+ offset=".311629315711017"
223
+ stop-color="#26397a"
224
+ id="stop11-4" />
225
+ <stop
226
+ offset=".536330265490111"
227
+ stop-color="#263673"
228
+ id="stop12-4" />
229
+ <stop
230
+ offset="1"
231
+ stop-color="#263571"
232
+ id="stop13-6" />
233
+ </linearGradient>
234
+ <mask
235
+ maskUnits="userSpaceOnUse"
236
+ id="mask16-6">
237
+ <circle
238
+ cx="64.03392"
239
+ cy="64.03392"
240
+ fill="url(#radial-gradient)"
241
+ stroke-width="0"
242
+ id="circle16-6"
243
+ style="fill:#ffffff;fill-opacity:1"
244
+ r="63.74976" />
245
+ </mask>
246
+ <radialGradient
247
+ id="radial-gradient-1"
248
+ cx="64.03392"
249
+ cy="64.03392"
250
+ fx="49.353233"
251
+ fy="82.396118"
252
+ r="59.086895"
253
+ gradientUnits="userSpaceOnUse">
254
+ <stop
255
+ offset="0"
256
+ stop-color="#f5aba7"
257
+ id="stop1-0-8" />
258
+ <stop
259
+ offset=".217861041112723"
260
+ stop-color="#f4a8a5"
261
+ id="stop2-9-4" />
262
+ <stop
263
+ offset=".361136125615505"
264
+ stop-color="#f39f9f"
265
+ id="stop3-0-9" />
266
+ <stop
267
+ offset=".482893104808535"
268
+ stop-color="#f29094"
269
+ id="stop4-0-6" />
270
+ <stop
271
+ offset=".592650507232557"
272
+ stop-color="#ef7b86"
273
+ id="stop5-6-3" />
274
+ <stop
275
+ offset=".694335183107659"
276
+ stop-color="#ec5f73"
277
+ id="stop6-1-7" />
278
+ <stop
279
+ offset=".78871442354024"
280
+ stop-color="#e93e5d"
281
+ id="stop7-3-8" />
282
+ <stop
283
+ offset=".860573681175441"
284
+ stop-color="#e62048"
285
+ id="stop8-8-8" />
286
+ </radialGradient>
287
+ <clipPath
288
+ id="clippath-2">
289
+ <circle
290
+ cx="64.03392"
291
+ cy="64.03392"
292
+ r="64.03392"
293
+ fill="none"
294
+ stroke-width="0"
295
+ id="circle8-9" />
296
+ </clipPath>
297
+ <linearGradient
298
+ id="linear-gradient-1"
299
+ x1="32.965416"
300
+ y1="147.10043"
301
+ x2="93.746849"
302
+ y2="41.823895"
303
+ gradientUnits="userSpaceOnUse">
304
+ <stop
305
+ offset="0"
306
+ stop-color="#284899"
307
+ id="stop9-9-3" />
308
+ <stop
309
+ offset=".138867226110765"
310
+ stop-color="#273f87"
311
+ id="stop10-3-5" />
312
+ <stop
313
+ offset=".311629315711017"
314
+ stop-color="#26397a"
315
+ id="stop11-4-9" />
316
+ <stop
317
+ offset=".536330265490111"
318
+ stop-color="#263673"
319
+ id="stop12-4-8" />
320
+ <stop
321
+ offset="1"
322
+ stop-color="#263571"
323
+ id="stop13-6-4" />
324
+ </linearGradient>
325
+ </defs>
326
+ <g
327
+ id="a"
328
+ transform="translate(-0.25982526,-2.1642165)" />
329
+ <g
330
+ id="g1"
331
+ transform="translate(0,-51.351725)">
332
+ <polygon
333
+ class="q"
334
+ points="354.77,148.41 412.88,148.41 412.88,175.43 321.56,175.43 321.56,58.89 411.25,58.89 411.25,85.91 354.77,85.91 354.77,105.44 408.16,105.44 408.16,127.74 354.77,127.74 "
335
+ id="polygon14"
336
+ transform="matrix(0.68640799,0,0,0.68640799,39.345198,87.134883)" />
337
+ <polygon
338
+ class="q"
339
+ points="426.22,58.89 461.37,58.89 486.6,150.2 488.23,150.2 513.13,58.89 548.62,58.89 514.11,175.43 460.56,175.43 "
340
+ id="polygon15"
341
+ transform="matrix(0.68640799,0,0,0.68640799,39.345198,87.134883)" />
342
+ <polygon
343
+ class="q"
344
+ points="599.72,148.41 657.82,148.41 657.82,175.43 566.51,175.43 566.51,58.89 656.2,58.89 656.2,85.91 599.72,85.91 599.72,105.44 653.1,105.44 653.1,127.74 599.72,127.74 "
345
+ id="polygon16"
346
+ transform="matrix(0.68640799,0,0,0.68640799,39.345198,87.134883)" />
347
+ <g
348
+ class="m"
349
+ clip-path="url(#d)"
350
+ id="g18"
351
+ transform="matrix(0.68640799,0,0,0.68640799,39.345198,87.134883)">
352
+ <path
353
+ class="q"
354
+ d="M 678.81,175.43 V 58.89 h 58.76 c 28.48,0 47.36,15.95 47.36,39.72 0,19.04 -12.37,32.39 -29.3,35.48 l -1.3,0.33 34.34,41.02 h -38.25 l -28.97,-38.41 h -8.3 v 38.41 h -34.34 z m 34.34,-60.71 h 18.39 c 10.91,0 19.04,-5.86 19.04,-15.62 0,-9.76 -8.14,-15.46 -19.04,-15.46 h -18.39 v 31.09 z"
355
+ id="path16" />
356
+ <polygon
357
+ class="q"
358
+ points="839.78,148.41 897.89,148.41 897.89,175.43 806.58,175.43 806.58,58.89 896.26,58.89 896.26,85.91 839.78,85.91 839.78,105.44 893.17,105.44 893.17,127.74 839.78,127.74 "
359
+ id="polygon17" />
360
+ <path
361
+ class="q"
362
+ d="m 914.81,137.02 h 32.23 c 0.16,9.77 8.14,16.11 22.14,16.11 11.07,0 18.23,-4.07 18.23,-11.23 0,-8.46 -9.6,-10.42 -21.48,-12.04 -20.02,-2.77 -50.29,-5.21 -50.29,-35.16 0,-23.11 19.86,-38.09 50.62,-38.09 30.76,0 51.6,16.6 51.6,40.69 h -31.09 c 0,-10.26 -7.65,-16.11 -19.37,-16.11 -10.91,0 -17.42,4.56 -17.42,11.07 0,8.79 11.56,10.26 25.07,12.21 19.86,2.93 46.71,7.16 46.71,35.32 0,23.11 -21.32,38.09 -53.88,38.09 -32.56,0 -53.06,-16.76 -53.06,-40.85"
363
+ id="path17" />
364
+ <polygon
365
+ class="q"
366
+ points="1068.78,87.05 1032.32,87.05 1032.32,58.89 1139.59,58.89 1139.59,87.05 1103.13,87.05 1103.13,175.43 1068.78,175.43 "
367
+ id="polygon18" />
368
+ </g>
369
+ </g>
370
+ <g
371
+ id="g16"
372
+ mask="url(#mask16-6)"
373
+ transform="matrix(1.8237098,0,0,1.8237098,-0.5182265,-0.51822534)">
374
+ <circle
375
+ cx="64.03392"
376
+ cy="64.03392"
377
+ r="64.03392"
378
+ fill="url(#radial-gradient)"
379
+ stroke-width="0"
380
+ id="circle13"
381
+ style="fill:url(#radial-gradient-1)" />
382
+ <g
383
+ clip-path="url(#clippath-2)"
384
+ id="g15">
385
+ <g
386
+ id="g14">
387
+ <polygon
388
+ points="42.035928,128.06784 86.198552,128.06784 128.06784,128.06784 127.91906,68.32343 86.198552,37.46588 86.198552,60.074086 42.035928,27.309721 1.0004e-11,58.508567 0,128.06784 "
389
+ fill="url(#linear-gradient)"
390
+ stroke-width="0"
391
+ id="polygon13"
392
+ style="fill:url(#linear-gradient-1)" />
393
+ <polygon
394
+ points="86.198562,60.175133 86.198562,37.566934 70.870099,48.802914 "
395
+ fill="#ffffff"
396
+ stroke-width="0"
397
+ id="polygon14-0" />
398
+ <path
399
+ d="m 38.763237,67.759224 c 2.990335,-2.053995 4.951441,-5.497907 4.951441,-9.399859 l -8.579382,-5.901845 6.725446,-4.922761 -6.616443,-4.964692 6.791802,-5.143195 V 27.410768 L 0,58.609614 v 37.87583 z"
400
+ fill="#ffffff"
401
+ stroke-width="0"
402
+ id="path14" />
403
+ </g>
404
+ </g>
405
+ </g>
406
+ </svg>
@@ -2,15 +2,16 @@ import argparse
2
2
  from copy import deepcopy as copy
3
3
  from functools import partial
4
4
  from pathlib import Path
5
+ from textwrap import dedent
5
6
  from typing import Any
6
7
 
7
- from ruamel.yaml import YAML
8
-
9
8
  from everest.bin.utils import setup_logging
10
9
  from everest.config import EverestConfig
11
10
  from everest.config_file_loader import load_yaml
12
11
  from everest.everest_storage import EverestStorage
13
12
 
13
+ from .utils import ArgParseFormatter
14
+
14
15
 
15
16
  def _yaml_config(
16
17
  file_path: str, parser: argparse.ArgumentParser
@@ -23,23 +24,40 @@ def _yaml_config(
23
24
 
24
25
  def _build_args_parser() -> argparse.ArgumentParser:
25
26
  arg_parser = argparse.ArgumentParser(
26
- description="Create new config file with updated controls "
27
- "from specified simulation batch number\n"
28
- "**Warning**: Previous simulation output folder will be overwritten"
29
- " if it was placed outside the everest output folder",
27
+ description=dedent(
28
+ """
29
+ Create a configuration file with updated controls based on a
30
+ previous run.
31
+
32
+ The *everest branch* command reads an existing configuration and
33
+ creates a new configuration file, with initial control values taken
34
+ from a batch of a previous optimization run.
35
+
36
+ **Warning:** Do not remove the optimization output folder before
37
+ running the *branch* command or it will fail.
38
+
39
+ **Note:** The *branch* command does not provide true restart
40
+ functionality. The new config file merely sets new initial controls
41
+ defined by the given batch. Subsequent optimization runs will likely
42
+ produce slightly different results.
43
+ """
44
+ ),
45
+ formatter_class=ArgParseFormatter,
30
46
  usage="""everest branch <config_file> <new_config_file> -b #""",
31
47
  )
32
48
  arg_parser.add_argument(
33
49
  "config",
34
- help="The path to the everest configuration file",
50
+ help="The path to the everest configuration file.",
35
51
  type=partial(_yaml_config, parser=arg_parser),
36
52
  )
37
- arg_parser.add_argument("output_config", help="The path to the new everest file")
53
+ arg_parser.add_argument(
54
+ "output_config", help="The path to the new everest configuration file."
55
+ )
38
56
  arg_parser.add_argument(
39
57
  "-b",
40
58
  "--batch",
41
59
  type=int,
42
- help="Batch id from which to retrieve control values",
60
+ help="ID of the batch providing the new control values.",
43
61
  required=True,
44
62
  )
45
63
  return arg_parser
@@ -119,11 +137,9 @@ def config_branch_entry(args: list[str] | None = None) -> None:
119
137
  conf_controls=yml_config["controls"], opt_controls=opt_controls
120
138
  )
121
139
 
122
- yaml = YAML()
123
- yaml.indent(mapping=2, sequence=4, offset=2)
124
- yaml.preserve_quotes = True
125
- with open(options.output_config, "w", encoding="utf-8") as f:
126
- yaml.dump(yml_config, f)
140
+ EverestConfig.write_dict_to_file(
141
+ yml_config, Path(options.output_config), safe_and_pure=False
142
+ )
127
143
  print(f"New config file {options.output_config} created.")
128
144
 
129
145
 
@@ -3,8 +3,6 @@
3
3
  import argparse
4
4
  import sys
5
5
 
6
- from ruamel.yaml import YAML
7
-
8
6
  from everest.config import EverestConfig
9
7
 
10
8
 
@@ -18,7 +16,7 @@ def _build_args_parser() -> argparse.ArgumentParser:
18
16
  usage="""everest show <config_file>""",
19
17
  )
20
18
  arg_parser.add_argument(
21
- "config_file", help="The path to the everest configuration file"
19
+ "config_file", help="The path to the everest configuration file."
22
20
  )
23
21
  return arg_parser
24
22
 
@@ -26,13 +24,7 @@ def _build_args_parser() -> argparse.ArgumentParser:
26
24
  def config_dump_entry(args: list[str] | None = None) -> None:
27
25
  parser = _build_args_parser()
28
26
  options = parser.parse_args(args)
29
-
30
- config = EverestConfig.load_file(options.config_file)
31
-
32
- yaml = YAML(typ="safe", pure=True)
33
- yaml.indent = 2
34
- yaml.default_flow_style = False
35
- yaml.dump(config.to_dict(), sys.stdout)
27
+ EverestConfig.load_file(options.config_file).write_to_file(sys.stdout)
36
28
 
37
29
 
38
30
  if __name__ == "__main__":
@@ -3,21 +3,21 @@ import argparse
3
3
  import asyncio
4
4
  import json
5
5
  import logging
6
- import logging.config
7
- import os
8
6
  import signal
9
7
  import socket
10
8
  import threading
11
9
  from functools import partial
12
10
  from pathlib import Path
11
+ from textwrap import dedent
12
+
13
+ import anyio
13
14
 
14
15
  from _ert.threading import ErtThread
15
16
  from ert.config import QueueSystem
16
- from ert.services import StorageService
17
+ from ert.services import ErtServer
18
+ from ert.storage.local_experiment import ExperimentState
17
19
  from everest.config import EverestConfig, ServerConfig
18
20
  from everest.detached import (
19
- ExperimentState,
20
- everserver_status,
21
21
  start_experiment,
22
22
  start_server,
23
23
  wait_for_server,
@@ -30,6 +30,8 @@ from everest.util import (
30
30
  )
31
31
 
32
32
  from .utils import (
33
+ ArgParseFormatter,
34
+ get_experiment_status,
33
35
  handle_keyboard_interrupt,
34
36
  run_detached_monitor,
35
37
  run_empty_detached_monitor,
@@ -103,16 +105,23 @@ def _build_args_parser() -> argparse.ArgumentParser:
103
105
  """Build arg parser"""
104
106
 
105
107
  arg_parser = argparse.ArgumentParser(
106
- description=(
107
- "Everest console runner, start an "
108
- "optimization case based on a given config file"
108
+ description=dedent(
109
+ """
110
+ Start an optimization run.
111
+
112
+ Closing the console or interrupting the `everest run` process does
113
+ not terminate the optimization. To continue monitoring the running
114
+ optimization, use `everest monitor config_file.yml`. To stop a
115
+ running optimization, use `everest kill config_file.yml`.
116
+ """
109
117
  ),
118
+ formatter_class=ArgParseFormatter,
110
119
  usage="everest run <config_file> [arguments]",
111
120
  )
112
121
  arg_parser.add_argument(
113
122
  "config",
114
123
  type=partial(EverestConfig.load_file_with_argparser, parser=arg_parser),
115
- help="The path to the everest configuration file",
124
+ help="The path to the everest configuration file.",
116
125
  )
117
126
  arg_parser.add_argument(
118
127
  "--new-run",
@@ -126,14 +135,16 @@ def _build_args_parser() -> argparse.ArgumentParser:
126
135
  help="Spawn a GUI monitoring simulation statuses.",
127
136
  )
128
137
  arg_parser.add_argument(
129
- "--debug", action="store_true", help="Display debug information in the terminal"
138
+ "--debug",
139
+ action="store_true",
140
+ help="Display debug information in the terminal.",
130
141
  )
131
142
  arg_parser.add_argument(
132
143
  "--show-all-jobs",
133
144
  action="store_true",
134
145
  help=(
135
146
  "DEPRECATED: This option no longer has an effect, "
136
- "and will be removed in a future version"
147
+ "and will be removed in a future version."
137
148
  ),
138
149
  )
139
150
  arg_parser.add_argument(
@@ -158,7 +169,7 @@ async def run_everest(options: argparse.Namespace) -> None:
158
169
  )
159
170
 
160
171
  try:
161
- StorageService.session(
172
+ ErtServer.session(
162
173
  Path(ServerConfig.get_session_dir(options.config.output_dir)), timeout=1
163
174
  )
164
175
  server_running = True
@@ -183,18 +194,27 @@ async def run_everest(options: argparse.Namespace) -> None:
183
194
  job_name = fm_job.split()[0]
184
195
  logger.info(f"Everest forward model contains job {job_name}")
185
196
 
186
- if os.path.exists(options.config.simulation_dir) and any(
187
- os.listdir(options.config.simulation_dir)
188
- ):
197
+ async def directory_is_nonempty(path: Path) -> bool:
198
+ try:
199
+ async for _ in anyio.Path(path).iterdir():
200
+ return True
201
+ except OSError: # Raised if the directory is empty
202
+ return False
203
+ else:
204
+ return False
205
+
206
+ if await anyio.Path(
207
+ options.config.simulation_dir
208
+ ).exists() and await directory_is_nonempty(options.config.simulation_dir):
189
209
  warn_user_that_runpath_is_nonempty()
190
210
  if not options.skip_prompt:
191
211
  show_scaled_controls_warning()
192
212
 
193
213
  try:
194
- output_dir = options.config.output_dir
195
- config_file = options.config.config_file
196
- save_config_path = os.path.join(output_dir, config_file)
197
- options.config.dump(save_config_path)
214
+ output_dir = Path(options.config.output_dir)
215
+ options.config.write_to_file(
216
+ output_dir / options.config.config_file, drop_config_path=True
217
+ )
198
218
  except (OSError, LookupError) as e:
199
219
  logger.error(f"Failed to save optimization config: {e}")
200
220
 
@@ -213,7 +233,7 @@ async def run_everest(options: argparse.Namespace) -> None:
213
233
 
214
234
  print("Waiting for server ...")
215
235
  logger.debug("Waiting for response from everserver")
216
- client = StorageService.session(
236
+ client = ErtServer.session(
217
237
  Path(ServerConfig.get_session_dir(options.config.output_dir))
218
238
  )
219
239
  wait_for_server(client, timeout=600)
@@ -253,19 +273,19 @@ async def run_everest(options: argparse.Namespace) -> None:
253
273
  )
254
274
  )
255
275
 
256
- logger.info("Everest experiment finished")
257
-
258
- everserver_status_path = ServerConfig.get_everserver_status_path(
259
- options.config.output_dir
260
- )
261
-
262
- server_state = everserver_status(everserver_status_path)
263
- server_state_info = server_state["message"]
264
- if server_state["status"] == ExperimentState.failed:
265
- raise SystemExit(f"Everest run failed with: {server_state_info}")
266
- if server_state_info is not None:
267
- logger.info(f"Everest run finished with: {server_state_info}")
268
- print(server_state_info)
276
+ msg: str = ""
277
+ experiment_status = get_experiment_status(options.config.storage_dir)
278
+ if experiment_status and experiment_status.status == ExperimentState.failed:
279
+ msg = f"Everest run failed with: {experiment_status.message or 'Unknown error'}"
280
+ logger.error(msg)
281
+ raise SystemExit(msg)
282
+ if experiment_status:
283
+ msg = (
284
+ "Everest run finished with: "
285
+ f"{experiment_status.message or 'Experiment completed successfully'}"
286
+ )
287
+ logger.info(msg)
288
+ print(msg)
269
289
 
270
290
 
271
291
  if __name__ == "__main__":