webviz-subsurface 0.2.42__py3-none-any.whl → 0.2.44__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.
- webviz_subsurface/_datainput/relative_permeability.py +2 -2
- webviz_subsurface/_datainput/well_completions.py +1 -1
- webviz_subsurface/_models/gruptree_model.py +31 -7
- webviz_subsurface/_version.py +2 -2
- webviz_subsurface/plugins/_co2_migration/_utilities/co2volume.py +6 -6
- webviz_subsurface/plugins/_parameter_analysis/_views/_parameter_response_view/_settings/_options.py +19 -9
- webviz_subsurface/plugins/_parameter_analysis/_views/_parameter_response_view/_view.py +59 -16
- webviz_subsurface/plugins/_simulation_time_series/_views/_subplot_view/_property_serialization/ensemble_subplot_builder.py +22 -15
- webviz_subsurface/plugins/_vfp_analysis/_utils/_vfp_data_model.py +1 -1
- webviz_subsurface/plugins/_volumetric_analysis/volumetric_analysis.py +15 -11
- {webviz_subsurface-0.2.42.dist-info → webviz_subsurface-0.2.44.dist-info}/METADATA +1 -1
- {webviz_subsurface-0.2.42.dist-info → webviz_subsurface-0.2.44.dist-info}/RECORD +17 -17
- {webviz_subsurface-0.2.42.dist-info → webviz_subsurface-0.2.44.dist-info}/WHEEL +0 -0
- {webviz_subsurface-0.2.42.dist-info → webviz_subsurface-0.2.44.dist-info}/entry_points.txt +0 -0
- {webviz_subsurface-0.2.42.dist-info → webviz_subsurface-0.2.44.dist-info}/licenses/LICENSE +0 -0
- {webviz_subsurface-0.2.42.dist-info → webviz_subsurface-0.2.44.dist-info}/licenses/LICENSE.chromedriver +0 -0
- {webviz_subsurface-0.2.42.dist-info → webviz_subsurface-0.2.44.dist-info}/top_level.txt +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
from pathlib import Path
|
|
2
|
-
from typing import Any
|
|
2
|
+
from typing import Any
|
|
3
3
|
|
|
4
4
|
import pandas as pd
|
|
5
5
|
from webviz_config.webviz_store import webvizstore
|
|
@@ -30,7 +30,7 @@ def load_satfunc(
|
|
|
30
30
|
|
|
31
31
|
@webvizstore
|
|
32
32
|
def load_scal_recommendation(
|
|
33
|
-
scalfile: Path, sheet_name:
|
|
33
|
+
scalfile: Path, sheet_name: str | None = None
|
|
34
34
|
) -> pd.DataFrame:
|
|
35
35
|
return (
|
|
36
36
|
PyscalFactory.create_scal_recommendation_list(
|
|
@@ -69,7 +69,7 @@ def read_zone_layer_mapping(
|
|
|
69
69
|
)
|
|
70
70
|
df_real["K1"] = df_real.index
|
|
71
71
|
df_real["REAL"] = real
|
|
72
|
-
zonelist = remove_invalid_colors(zonelist)
|
|
72
|
+
zonelist = remove_invalid_colors(zonelist) if zonelist else []
|
|
73
73
|
zone_color_mapping = {
|
|
74
74
|
zonedict["name"]: zonedict["color"]
|
|
75
75
|
for zonedict in zonelist
|
|
@@ -191,16 +191,13 @@ GruptreeDataModel({self._ens_name!r}, {self._ens_path!r}, {self._gruptree_file!r
|
|
|
191
191
|
raise ValueError(
|
|
192
192
|
f"Keyword {self._tree_type.value} not found in {row['FULLPATH']}"
|
|
193
193
|
)
|
|
194
|
+
|
|
195
|
+
# Only filter if both tree types are present
|
|
194
196
|
if (
|
|
195
|
-
|
|
197
|
+
TreeType.GRUPTREE.value in unique_keywords
|
|
196
198
|
and TreeType.BRANPROP.value in unique_keywords
|
|
197
199
|
):
|
|
198
|
-
|
|
199
|
-
df_real = df_real[df_real["KEYWORD"] != TreeType.BRANPROP.value]
|
|
200
|
-
|
|
201
|
-
if self._tree_type == TreeType.BRANPROP:
|
|
202
|
-
# Filter out GRUPTREE entries
|
|
203
|
-
df_real = df_real[df_real["KEYWORD"] != TreeType.GRUPTREE.value]
|
|
200
|
+
df_real = self._filter_by_tree_type(df_real, self._tree_type)
|
|
204
201
|
|
|
205
202
|
if (
|
|
206
203
|
i > 0
|
|
@@ -222,3 +219,30 @@ GruptreeDataModel({self._ens_name!r}, {self._ens_path!r}, {self._gruptree_file!r
|
|
|
222
219
|
df["DATE"] = pd.to_datetime(df["DATE"])
|
|
223
220
|
|
|
224
221
|
return df.where(pd.notnull(df), None)
|
|
222
|
+
|
|
223
|
+
@staticmethod
|
|
224
|
+
def _filter_by_tree_type(df: pd.DataFrame, tree_type: TreeType) -> pd.DataFrame:
|
|
225
|
+
"""
|
|
226
|
+
Filter dataframe to include only dates where the selected tree type is defined,
|
|
227
|
+
and only include WELSPECS nodes that belong to the selected tree type.
|
|
228
|
+
|
|
229
|
+
A WELSPECS node belongs to a tree if its parent node exists in that tree's definition.
|
|
230
|
+
"""
|
|
231
|
+
# Find dates where the selected tree type is defined
|
|
232
|
+
dates_with_tree_type = df[df["KEYWORD"] == tree_type.value]["DATE"].unique()
|
|
233
|
+
|
|
234
|
+
# Filter to only include rows from those dates
|
|
235
|
+
df = df[df["DATE"].isin(dates_with_tree_type)].copy()
|
|
236
|
+
|
|
237
|
+
# Get all nodes that are defined in the selected tree type (across all dates)
|
|
238
|
+
tree_nodes = set(df[df["KEYWORD"] == tree_type.value]["CHILD"].unique())
|
|
239
|
+
|
|
240
|
+
# Keep rows that are:
|
|
241
|
+
# 1. The selected tree type itself (GRUPTREE or BRANPROP)
|
|
242
|
+
# 2. WELSPECS whose parent exists in the selected tree type
|
|
243
|
+
is_selected_tree = df["KEYWORD"] == tree_type.value
|
|
244
|
+
is_welspecs_with_valid_parent = (df["KEYWORD"] == "WELSPECS") & df[
|
|
245
|
+
"PARENT"
|
|
246
|
+
].isin(tree_nodes)
|
|
247
|
+
|
|
248
|
+
return df[is_selected_tree | is_welspecs_with_valid_parent].copy()
|
webviz_subsurface/_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 = '0.2.
|
|
32
|
-
__version_tuple__ = version_tuple = (0, 2,
|
|
31
|
+
__version__ = version = '0.2.44'
|
|
32
|
+
__version_tuple__ = version_tuple = (0, 2, 44)
|
|
33
33
|
|
|
34
34
|
__commit_id__ = commit_id = None
|
|
@@ -41,24 +41,24 @@ class Colors(StrEnum):
|
|
|
41
41
|
dissolved_water = "#208eb7"
|
|
42
42
|
dissolved_oil = "#A0522D"
|
|
43
43
|
gas = "#C41E3A"
|
|
44
|
-
|
|
45
|
-
|
|
44
|
+
free_gas = "#FF2400"
|
|
45
|
+
trapped_gas = "#880808"
|
|
46
46
|
|
|
47
47
|
|
|
48
48
|
class Marks(StrEnum):
|
|
49
49
|
dissolved_water = "/"
|
|
50
50
|
dissolved_oil = "x"
|
|
51
51
|
gas = ""
|
|
52
|
-
|
|
53
|
-
|
|
52
|
+
free_gas = ""
|
|
53
|
+
trapped_gas = "."
|
|
54
54
|
|
|
55
55
|
|
|
56
56
|
class Lines(StrEnum):
|
|
57
57
|
dissolved_water = "dash"
|
|
58
58
|
dissolved_oil = "longdash"
|
|
59
59
|
gas = "dot"
|
|
60
|
-
|
|
61
|
-
|
|
60
|
+
free_gas = "dot"
|
|
61
|
+
trapped_gas = "dashdot"
|
|
62
62
|
|
|
63
63
|
|
|
64
64
|
_COLOR_ZONES = [
|
webviz_subsurface/plugins/_parameter_analysis/_views/_parameter_response_view/_settings/_options.py
CHANGED
|
@@ -12,6 +12,7 @@ class ParamRespOptions(SettingsGroupABC):
|
|
|
12
12
|
VECTOR_FILTER = "vector-filter"
|
|
13
13
|
SUBMIT_VECTOR_FILTER = "submit-vector-filter"
|
|
14
14
|
VECTOR_FILTER_STORE = "vector-filter-store"
|
|
15
|
+
USE_VECTORS_WITH_OBSERVATIONS = "use-vectors-with-observations"
|
|
15
16
|
AUTO_COMPUTE_CORRELATIONS = "auto-compute-correlations"
|
|
16
17
|
|
|
17
18
|
def __init__(
|
|
@@ -22,6 +23,24 @@ class ParamRespOptions(SettingsGroupABC):
|
|
|
22
23
|
def layout(self) -> List[Component]:
|
|
23
24
|
return [
|
|
24
25
|
html.Header("Vectors for parameter correlation"),
|
|
26
|
+
wcc.Checklist(
|
|
27
|
+
id=self.register_component_unique_id(
|
|
28
|
+
self.Ids.AUTO_COMPUTE_CORRELATIONS
|
|
29
|
+
),
|
|
30
|
+
options=[
|
|
31
|
+
{"label": "Calculate correlations", "value": "AutoCompute"},
|
|
32
|
+
],
|
|
33
|
+
value=["AutoCompute"],
|
|
34
|
+
),
|
|
35
|
+
wcc.Checklist(
|
|
36
|
+
id=self.register_component_unique_id(
|
|
37
|
+
self.Ids.USE_VECTORS_WITH_OBSERVATIONS
|
|
38
|
+
),
|
|
39
|
+
options=[
|
|
40
|
+
{"label": "Use vectors with observations", "value": "UseObs"},
|
|
41
|
+
],
|
|
42
|
+
value=["UseObs"],
|
|
43
|
+
),
|
|
25
44
|
dcc.Textarea(
|
|
26
45
|
id=self.register_component_unique_id(self.Ids.VECTOR_FILTER),
|
|
27
46
|
style={"width": "95%", "height": "60px", "resize": "none"},
|
|
@@ -43,13 +62,4 @@ class ParamRespOptions(SettingsGroupABC):
|
|
|
43
62
|
dcc.Store(
|
|
44
63
|
id=self.register_component_unique_id(self.Ids.VECTOR_FILTER_STORE)
|
|
45
64
|
),
|
|
46
|
-
wcc.Checklist(
|
|
47
|
-
id=self.register_component_unique_id(
|
|
48
|
-
self.Ids.AUTO_COMPUTE_CORRELATIONS
|
|
49
|
-
),
|
|
50
|
-
options=[
|
|
51
|
-
{"label": "Calculate correlations", "value": "AutoCompute"},
|
|
52
|
-
],
|
|
53
|
-
value=["AutoCompute"],
|
|
54
|
-
),
|
|
55
65
|
]
|
|
@@ -219,12 +219,14 @@ class ParameterResponseView(ViewABC):
|
|
|
219
219
|
|
|
220
220
|
if len(realizations) <= 1:
|
|
221
221
|
return [empty_figure()] * 4
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
222
|
+
if options is not None and options["use_vectors_with_observations"]:
|
|
223
|
+
vectors_for_param_corr = list(self._observations.keys())
|
|
224
|
+
else:
|
|
225
|
+
vectors_for_param_corr = (
|
|
226
|
+
self._vectormodel.filter_vectors(column_keys, ensemble=ensemble)
|
|
227
|
+
if column_keys is not None
|
|
228
|
+
else []
|
|
229
|
+
)
|
|
228
230
|
|
|
229
231
|
try:
|
|
230
232
|
# Get dataframe with vectors and dataframe with parameters and merge
|
|
@@ -360,11 +362,13 @@ class ParameterResponseView(ViewABC):
|
|
|
360
362
|
historical_vector_df=self._vectormodel.get_historical_vector_df(
|
|
361
363
|
selected_vector, ensemble
|
|
362
364
|
),
|
|
363
|
-
observations=
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
365
|
+
observations=(
|
|
366
|
+
self._observations[selected_vector]
|
|
367
|
+
if options
|
|
368
|
+
and options["show_observations"]
|
|
369
|
+
and selected_vector in self._observations
|
|
370
|
+
else {}
|
|
371
|
+
),
|
|
368
372
|
color_col=param,
|
|
369
373
|
line_shape_fallback=self._vectormodel.line_shape_fallback,
|
|
370
374
|
).figure
|
|
@@ -473,6 +477,12 @@ class ParameterResponseView(ViewABC):
|
|
|
473
477
|
),
|
|
474
478
|
"style",
|
|
475
479
|
),
|
|
480
|
+
Output(
|
|
481
|
+
self.settings_group_unique_id(
|
|
482
|
+
self.Ids.OPTIONS, ParamRespOptions.Ids.VECTOR_FILTER
|
|
483
|
+
),
|
|
484
|
+
"style",
|
|
485
|
+
),
|
|
476
486
|
Input(
|
|
477
487
|
self.settings_group_unique_id(
|
|
478
488
|
self.Ids.OPTIONS, ParamRespOptions.Ids.SUBMIT_VECTOR_FILTER
|
|
@@ -485,6 +495,12 @@ class ParameterResponseView(ViewABC):
|
|
|
485
495
|
),
|
|
486
496
|
"value",
|
|
487
497
|
),
|
|
498
|
+
Input(
|
|
499
|
+
self.settings_group_unique_id(
|
|
500
|
+
self.Ids.OPTIONS, ParamRespOptions.Ids.USE_VECTORS_WITH_OBSERVATIONS
|
|
501
|
+
),
|
|
502
|
+
"value",
|
|
503
|
+
),
|
|
488
504
|
State(
|
|
489
505
|
self.settings_group_unique_id(
|
|
490
506
|
self.Ids.OPTIONS, ParamRespOptions.Ids.VECTOR_FILTER_STORE
|
|
@@ -497,24 +513,42 @@ class ParameterResponseView(ViewABC):
|
|
|
497
513
|
),
|
|
498
514
|
"style",
|
|
499
515
|
),
|
|
516
|
+
State(
|
|
517
|
+
self.settings_group_unique_id(
|
|
518
|
+
self.Ids.OPTIONS, ParamRespOptions.Ids.VECTOR_FILTER
|
|
519
|
+
),
|
|
520
|
+
"style",
|
|
521
|
+
),
|
|
500
522
|
)
|
|
501
523
|
@callback_typecheck
|
|
502
524
|
def _update_vector_filter_store_and_button_style(
|
|
503
525
|
_n_click: Union[None, int],
|
|
504
526
|
vector_filter: Union[None, str],
|
|
527
|
+
use_vectors_with_observations: Union[None, str],
|
|
505
528
|
stored: Union[None, str],
|
|
506
|
-
|
|
507
|
-
|
|
529
|
+
style_btn: Dict,
|
|
530
|
+
style_textarea: Dict,
|
|
531
|
+
) -> Tuple[str, Dict, Dict]:
|
|
508
532
|
"""Update vector-filter-store if submit button is clicked and
|
|
509
533
|
style of submit button"""
|
|
534
|
+
vector_filter_used = (
|
|
535
|
+
use_vectors_with_observations
|
|
536
|
+
and "UseObs" in use_vectors_with_observations
|
|
537
|
+
)
|
|
510
538
|
ctx = callback_context.triggered[0]["prop_id"]
|
|
511
539
|
button_click = "submit" in ctx
|
|
512
540
|
insync = stored == vector_filter
|
|
513
|
-
|
|
541
|
+
style_btn["background-color"] = (
|
|
514
542
|
"#E8E8E8" if insync or button_click else "#7393B3"
|
|
515
543
|
)
|
|
516
|
-
|
|
517
|
-
|
|
544
|
+
style_btn["color"] = "#555" if insync or button_click else "#fff"
|
|
545
|
+
style_btn["visibility"] = "hidden" if vector_filter_used else "visible"
|
|
546
|
+
style_textarea["visibility"] = "hidden" if vector_filter_used else "visible"
|
|
547
|
+
return (
|
|
548
|
+
vector_filter if button_click else no_update,
|
|
549
|
+
style_btn,
|
|
550
|
+
style_textarea,
|
|
551
|
+
)
|
|
518
552
|
|
|
519
553
|
@callback(
|
|
520
554
|
Output(
|
|
@@ -573,6 +607,12 @@ class ParameterResponseView(ViewABC):
|
|
|
573
607
|
),
|
|
574
608
|
"value",
|
|
575
609
|
),
|
|
610
|
+
Input(
|
|
611
|
+
self.settings_group_unique_id(
|
|
612
|
+
self.Ids.OPTIONS, ParamRespOptions.Ids.USE_VECTORS_WITH_OBSERVATIONS
|
|
613
|
+
),
|
|
614
|
+
"value",
|
|
615
|
+
),
|
|
576
616
|
Input(
|
|
577
617
|
self.settings_group_unique_id(
|
|
578
618
|
self.Ids.OPTIONS, ParamRespOptions.Ids.AUTO_COMPUTE_CORRELATIONS
|
|
@@ -602,6 +642,7 @@ class ParameterResponseView(ViewABC):
|
|
|
602
642
|
@callback_typecheck
|
|
603
643
|
def _update_plot_options(
|
|
604
644
|
checkbox_options: List[str],
|
|
645
|
+
use_vectors_with_observations: List[str],
|
|
605
646
|
autocompute_options: List[str],
|
|
606
647
|
color_clickdata: Union[None, Dict[str, List[Dict[str, Any]]]],
|
|
607
648
|
opacity: float,
|
|
@@ -618,6 +659,8 @@ class ParameterResponseView(ViewABC):
|
|
|
618
659
|
|
|
619
660
|
return {
|
|
620
661
|
"show_dateline": "DateLine" in checkbox_options,
|
|
662
|
+
"use_vectors_with_observations": "UseObs"
|
|
663
|
+
in use_vectors_with_observations,
|
|
621
664
|
"autocompute_corr": "AutoCompute" in autocompute_options,
|
|
622
665
|
"color": None if color_clickdata is None else color,
|
|
623
666
|
"opacity": opacity,
|
|
@@ -87,8 +87,7 @@ class EnsembleSubplotBuilder(GraphFigureBuilderBase):
|
|
|
87
87
|
|
|
88
88
|
def create_graph_legends(self) -> None:
|
|
89
89
|
# Add legends for selected vectors - sort according to selected vectors
|
|
90
|
-
|
|
91
|
-
# vectors in self._added_vector_traces set exist in self._selected_vectors list!
|
|
90
|
+
self._validate_vectors_are_selected(self._added_vector_traces)
|
|
92
91
|
added_vector_traces = sorted(
|
|
93
92
|
self._added_vector_traces, key=self._selected_vectors.index
|
|
94
93
|
)
|
|
@@ -141,11 +140,12 @@ class EnsembleSubplotBuilder(GraphFigureBuilderBase):
|
|
|
141
140
|
# Dictionary with vector name as key and list of ensemble traces as value
|
|
142
141
|
vector_traces_set: Dict[str, List[dict]] = {}
|
|
143
142
|
|
|
144
|
-
# Get vectors -
|
|
143
|
+
# Get vectors - sort after validation
|
|
145
144
|
vectors: Set[str] = set(vectors_df.columns) - set(["DATE", "REAL"])
|
|
146
145
|
self._validate_vectors_are_selected(vectors)
|
|
146
|
+
sorted_vectors = sorted(vectors, key=self._selected_vectors.index)
|
|
147
147
|
|
|
148
|
-
for vector in
|
|
148
|
+
for vector in sorted_vectors:
|
|
149
149
|
self._added_vector_traces.add(vector)
|
|
150
150
|
|
|
151
151
|
vector_df = vectors_df[["DATE", "REAL", vector]]
|
|
@@ -180,13 +180,14 @@ class EnsembleSubplotBuilder(GraphFigureBuilderBase):
|
|
|
180
180
|
# Dictionary with vector name as key and list of ensemble traces as value
|
|
181
181
|
vector_traces_set: Dict[str, List[dict]] = {}
|
|
182
182
|
|
|
183
|
-
# Get vectors -
|
|
183
|
+
# Get vectors - sort after validation
|
|
184
184
|
vectors: Set[str] = set(
|
|
185
185
|
vectors_statistics_df.columns.get_level_values(0)
|
|
186
186
|
) - set(["DATE"])
|
|
187
187
|
self._validate_vectors_are_selected(vectors)
|
|
188
|
+
sorted_vectors = sorted(vectors, key=self._selected_vectors.index)
|
|
188
189
|
|
|
189
|
-
for vector in
|
|
190
|
+
for vector in sorted_vectors:
|
|
190
191
|
self._added_vector_traces.add(vector)
|
|
191
192
|
|
|
192
193
|
# Retrieve DATE and statistics columns for specific vector
|
|
@@ -223,13 +224,14 @@ class EnsembleSubplotBuilder(GraphFigureBuilderBase):
|
|
|
223
224
|
# Dictionary with vector name as key and list of ensemble traces as value
|
|
224
225
|
vector_traces_set: Dict[str, List[dict]] = {}
|
|
225
226
|
|
|
226
|
-
# Get vectors -
|
|
227
|
+
# Get vectors - sort after validation
|
|
227
228
|
vectors: Set[str] = set(
|
|
228
229
|
vectors_statistics_df.columns.get_level_values(0)
|
|
229
230
|
) - set(["DATE"])
|
|
230
231
|
self._validate_vectors_are_selected(vectors)
|
|
232
|
+
sorted_vectors = sorted(vectors, key=self._selected_vectors.index)
|
|
231
233
|
|
|
232
|
-
for vector in
|
|
234
|
+
for vector in sorted_vectors:
|
|
233
235
|
self._added_vector_traces.add(vector)
|
|
234
236
|
|
|
235
237
|
# Retrieve DATE and statistics columns for specific vector
|
|
@@ -266,10 +268,13 @@ class EnsembleSubplotBuilder(GraphFigureBuilderBase):
|
|
|
266
268
|
|
|
267
269
|
samples = vectors_df["DATE"].tolist()
|
|
268
270
|
vector_trace_set: Dict[str, dict] = {}
|
|
271
|
+
|
|
272
|
+
# Get vectors - sort after validation
|
|
269
273
|
vectors: Set[str] = set(vectors_df.columns) - set(["DATE", "REAL"])
|
|
270
274
|
self._validate_vectors_are_selected(vectors)
|
|
275
|
+
sorted_vectors = sorted(vectors, key=self._selected_vectors.index)
|
|
271
276
|
|
|
272
|
-
for vector in
|
|
277
|
+
for vector in sorted_vectors:
|
|
273
278
|
# Set status for added history trace
|
|
274
279
|
self._added_history_trace = True
|
|
275
280
|
|
|
@@ -348,9 +353,11 @@ class EnsembleSubplotBuilder(GraphFigureBuilderBase):
|
|
|
348
353
|
`Input:`
|
|
349
354
|
* vectors: Set[str] - set of vector names to verify
|
|
350
355
|
"""
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
356
|
+
|
|
357
|
+
missing = vectors - set(self._selected_vectors)
|
|
358
|
+
if missing:
|
|
359
|
+
raise ValueError(
|
|
360
|
+
f"Unexpected vectors found: {missing}."
|
|
361
|
+
f" Does not exist among selected vectors: "
|
|
362
|
+
f"{self._selected_vectors}"
|
|
363
|
+
)
|
|
@@ -241,7 +241,7 @@ def _read_vfp_arrow(filename: str) -> io.BytesIO:
|
|
|
241
241
|
source = pa.memory_map(filename, "r")
|
|
242
242
|
reader = pa.ipc.RecordBatchFileReader(source)
|
|
243
243
|
pa_table = reader.read_all()
|
|
244
|
-
vfp_dict = pyarrow2basic_data(pa_table)
|
|
244
|
+
vfp_dict = pyarrow2basic_data(pa_table) or {}
|
|
245
245
|
|
|
246
246
|
for key, _ in vfp_dict.items():
|
|
247
247
|
# Convert types to strings
|
|
@@ -13,10 +13,10 @@ from webviz_subsurface._models import InplaceVolumesModel
|
|
|
13
13
|
from webviz_subsurface._models.inplace_volumes_model import (
|
|
14
14
|
extract_volframe_from_tableprovider,
|
|
15
15
|
)
|
|
16
|
-
from webviz_subsurface._providers import EnsembleTableProviderFactory
|
|
17
16
|
from webviz_subsurface._utils.ensemble_table_provider_set_factory import (
|
|
18
17
|
create_parameter_providerset_from_paths,
|
|
19
18
|
)
|
|
19
|
+
from webviz_subsurface._utils.webvizstore_functions import read_csv
|
|
20
20
|
|
|
21
21
|
from .controllers import (
|
|
22
22
|
comparison_controllers,
|
|
@@ -165,6 +165,8 @@ reek_test_data/aggregated_data/parameters.csv)
|
|
|
165
165
|
)
|
|
166
166
|
|
|
167
167
|
self.fipfile = fipfile
|
|
168
|
+
self.csvfile_vol = csvfile_vol
|
|
169
|
+
self.csvfile_parameters = csvfile_parameters
|
|
168
170
|
parameters: Optional[pd.DataFrame] = None
|
|
169
171
|
|
|
170
172
|
LOGGER.warning(
|
|
@@ -211,13 +213,9 @@ reek_test_data/aggregated_data/parameters.csv)
|
|
|
211
213
|
"#E48F72",
|
|
212
214
|
]
|
|
213
215
|
)
|
|
214
|
-
if csvfile_vol:
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
if csvfile_parameters:
|
|
218
|
-
parameters = table_provider.create_from_ensemble_csv_file(
|
|
219
|
-
csvfile_parameters
|
|
220
|
-
)
|
|
216
|
+
if self.csvfile_vol is not None and self.csvfile_parameters is not None:
|
|
217
|
+
volumes_table = read_csv(self.csvfile_vol)
|
|
218
|
+
parameters = read_csv(self.csvfile_parameters)
|
|
221
219
|
|
|
222
220
|
elif ensembles and volfiles:
|
|
223
221
|
ensemble_paths = {
|
|
@@ -233,7 +231,8 @@ reek_test_data/aggregated_data/parameters.csv)
|
|
|
233
231
|
parameters = parameter_provider_set.get_aggregated_dataframe()
|
|
234
232
|
else:
|
|
235
233
|
raise ValueError(
|
|
236
|
-
'
|
|
234
|
+
'Incorrect arguments. Either provide both "csvfile_vol" and '
|
|
235
|
+
'"csvfile_parameters" or "ensembles" and "volfiles"'
|
|
237
236
|
)
|
|
238
237
|
|
|
239
238
|
vcomb = VolumeValidatorAndCombinator(
|
|
@@ -281,9 +280,14 @@ reek_test_data/aggregated_data/parameters.csv)
|
|
|
281
280
|
fipfile_qc_controller(get_uuid=self.uuid, disjoint_set_df=self.disjoint_set_df)
|
|
282
281
|
|
|
283
282
|
def add_webvizstore(self) -> List[Tuple[Callable, list]]:
|
|
283
|
+
functions = []
|
|
284
284
|
if self.fipfile is not None:
|
|
285
|
-
|
|
286
|
-
|
|
285
|
+
functions.append((get_path, [{"path": self.fipfile}]))
|
|
286
|
+
if self.csvfile_vol is not None:
|
|
287
|
+
functions.append((read_csv, [{"csv_file": self.csvfile_vol}]))
|
|
288
|
+
if self.csvfile_parameters is not None:
|
|
289
|
+
functions.append((read_csv, [{"csv_file": self.csvfile_parameters}]))
|
|
290
|
+
return functions
|
|
287
291
|
|
|
288
292
|
|
|
289
293
|
@webvizstore
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
webviz_subsurface/__init__.py,sha256=XUL8THCPZObkUsxDodKtE_wx-pYmQ4sATXgx5sdYa-A,3824
|
|
2
|
-
webviz_subsurface/_version.py,sha256=
|
|
2
|
+
webviz_subsurface/_version.py,sha256=UE3tuzn9Nb3J7PpIZg2XMsX6cuf1-nUKcp_XLyKP04s,706
|
|
3
3
|
webviz_subsurface/smry2arrow_batch.py,sha256=zTekRSgkUei6_DGT1ZWibd22PrFkkTQ_pnjZYvzMOL4,4129
|
|
4
4
|
webviz_subsurface/_abbreviations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
5
5
|
webviz_subsurface/_abbreviations/number_formatting.py,sha256=zElrkv3j3H6i7nbeeyKG1oE6VfNtzfrSJQYrC08Bev0,3479
|
|
@@ -31,12 +31,12 @@ webviz_subsurface/_datainput/history_match.py,sha256=iEzhzpKEIIe6cmxv7oNF5Q4cr-V
|
|
|
31
31
|
webviz_subsurface/_datainput/image_processing.py,sha256=OKYXhdStei8Rfg8LDVyK6PJPUDj6KBgqJkGsCDBdFfw,4393
|
|
32
32
|
webviz_subsurface/_datainput/inplace_volumes.py,sha256=PyuNs2bjxfagTQC2jOc6QUQVopJtIWf6NTB7Ra80fcc,1258
|
|
33
33
|
webviz_subsurface/_datainput/pvt_data.py,sha256=wzOU2Y0seC3s60dFrMCNq0JetXjlG4qgMG90nqTWL6E,15832
|
|
34
|
-
webviz_subsurface/_datainput/relative_permeability.py,sha256=
|
|
34
|
+
webviz_subsurface/_datainput/relative_permeability.py,sha256=2hHKicK5Co4n9GT7JaqI5lu3qEsFvZErRiXOSXoZP6Y,1229
|
|
35
35
|
webviz_subsurface/_datainput/seismic.py,sha256=7alyU9dezKgrSqiGI1R405hh5ymPDf5CbnKEtxF_Y9c,690
|
|
36
36
|
webviz_subsurface/_datainput/surface.py,sha256=fxrV65AJBw1dbIyJtnfknk7DriqpotF2oi7ZDNQBheE,348
|
|
37
37
|
webviz_subsurface/_datainput/units.py,sha256=xBtouLCXa4ZzNSCTjmTRfsHS3GluwTHIBh9SpzxAksA,15902
|
|
38
38
|
webviz_subsurface/_datainput/well.py,sha256=9_Hi66TMqy4tkwYXugYV_lSyZFQ9SY5rQZvkpPxxnp8,6916
|
|
39
|
-
webviz_subsurface/_datainput/well_completions.py,sha256=
|
|
39
|
+
webviz_subsurface/_datainput/well_completions.py,sha256=f_VPGoaarXBuJ7Pwjf8RTY-mJHxL21fJgbzvYVQT3VA,6289
|
|
40
40
|
webviz_subsurface/_datainput/xsection.py,sha256=X3B88ufAANzKOeHelVGIulj3cwRgMMrl6lbAq90QD4U,19126
|
|
41
41
|
webviz_subsurface/_datainput/eclipse_init_io/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
42
42
|
webviz_subsurface/_datainput/eclipse_init_io/pvt_common.py,sha256=iH94cMbifEJjGC7Pj4HA8kYMPH4uXLoIlXtWy2oKo7E,30857
|
|
@@ -52,7 +52,7 @@ webviz_subsurface/_models/__init__.py,sha256=N2vfEx6bChJu9w_Vax_FslPBhNxbdWBqL6V
|
|
|
52
52
|
webviz_subsurface/_models/caching_ensemble_set_model_factory.py,sha256=Jt7lCEpPPBhLB36V-QRyc2cvp2hF85zmiXODqKTza_I,1201
|
|
53
53
|
webviz_subsurface/_models/ensemble_model.py,sha256=qic5LtPHeWRG3yzITvAihkiIxDZOuKYUFLbzc9peQcM,6288
|
|
54
54
|
webviz_subsurface/_models/ensemble_set_model.py,sha256=elS5eLpktTJeeSU_44hL9SBHufDQB3SyBllUJZzdSKM,4231
|
|
55
|
-
webviz_subsurface/_models/gruptree_model.py,sha256=
|
|
55
|
+
webviz_subsurface/_models/gruptree_model.py,sha256=yrYW-6FwCSJ4ClwJjqP3UeWV7ka6LcPza-Qyfp-O3Qw,9439
|
|
56
56
|
webviz_subsurface/_models/inplace_volumes_model.py,sha256=AxVJzEeYgDgKfbP6ePpxqwX9I1ybVpho9PSzpzfWzEY,15877
|
|
57
57
|
webviz_subsurface/_models/observation_model.py,sha256=Z9wO6KfO6FcJ99x8kq1Y2m_2bCsAiWexYjhVoJkqxAY,1629
|
|
58
58
|
webviz_subsurface/_models/parameter_model.py,sha256=IZOQvEM0zjzFQUsW0MzYfbo8kRVqZNJxzbe_uDW-GJE,7284
|
|
@@ -186,7 +186,7 @@ webviz_subsurface/plugins/_co2_migration/_types.py,sha256=RbS3WtAjoobXTRXk7S8Gk4
|
|
|
186
186
|
webviz_subsurface/plugins/_co2_migration/_utilities/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
187
187
|
webviz_subsurface/plugins/_co2_migration/_utilities/_misc.py,sha256=0E-m_Ior6Kb5cbgfQpzC9mHI6FT2xj1Ihk0jtc6Mk6E,307
|
|
188
188
|
webviz_subsurface/plugins/_co2_migration/_utilities/callbacks.py,sha256=HAjvXUYT8nOMJouFM7hfUuy0TpAV6bUndu7dTyfWz4A,21557
|
|
189
|
-
webviz_subsurface/plugins/_co2_migration/_utilities/co2volume.py,sha256=
|
|
189
|
+
webviz_subsurface/plugins/_co2_migration/_utilities/co2volume.py,sha256=02FXWQC1ieN_YSHBqFaFNzPMCUCSBA2ZLJMSZy2pwPI,47028
|
|
190
190
|
webviz_subsurface/plugins/_co2_migration/_utilities/color_tables.py,sha256=NrQf72s7Oeq9rE0TGaHQ0PDfIpg9e0dx7dNtwo6-2ZA,2439
|
|
191
191
|
webviz_subsurface/plugins/_co2_migration/_utilities/containment_data_provider.py,sha256=P1h0c9EIZ6U6IjkUcKoxzv7bcsxi9LWRxTuJLIURpl0,5488
|
|
192
192
|
webviz_subsurface/plugins/_co2_migration/_utilities/containment_info.py,sha256=9vUTTIXO4vyCxEmvt_n38YPV2JWenzYuqutrB1KP1ko,972
|
|
@@ -266,10 +266,10 @@ webviz_subsurface/plugins/_parameter_analysis/_views/_parameter_distributions_vi
|
|
|
266
266
|
webviz_subsurface/plugins/_parameter_analysis/_views/_parameter_distributions_view/_settings/_parameters.py,sha256=GHKE0ZZZndc1jBjvLAitfaM5k5ARm0vxFWp2JPvTBBw,1628
|
|
267
267
|
webviz_subsurface/plugins/_parameter_analysis/_views/_parameter_distributions_view/_settings/_visualization_type.py,sha256=Nx8GVM2ng6dSgoduJ3uTW9oOhEK_prTKCXSEYYbsAk4,1279
|
|
268
268
|
webviz_subsurface/plugins/_parameter_analysis/_views/_parameter_response_view/__init__.py,sha256=7FsVn4FasBbUozc3TMF5rOjqL5nxCnA54P-ruPRe5Q8,41
|
|
269
|
-
webviz_subsurface/plugins/_parameter_analysis/_views/_parameter_response_view/_view.py,sha256=
|
|
269
|
+
webviz_subsurface/plugins/_parameter_analysis/_views/_parameter_response_view/_view.py,sha256=rgbuwtqxlAA_f_MiEWQu69DBK171r2sVxkxZwRfKSYY,31525
|
|
270
270
|
webviz_subsurface/plugins/_parameter_analysis/_views/_parameter_response_view/_view_element.py,sha256=9ymaq2WJx8z4ErEeJhG5I9W2PhrOuSgHEwGpSjLzw_g,556
|
|
271
271
|
webviz_subsurface/plugins/_parameter_analysis/_views/_parameter_response_view/_settings/__init__.py,sha256=9kRDJl_J-svooXQdXi0VBlrsDeByAGMlArv7mjNHRtg,191
|
|
272
|
-
webviz_subsurface/plugins/_parameter_analysis/_views/_parameter_response_view/_settings/_options.py,sha256=
|
|
272
|
+
webviz_subsurface/plugins/_parameter_analysis/_views/_parameter_response_view/_settings/_options.py,sha256=zZWjIpR-yxGq911OUUtMVihe3XnEyQmL87XAJzR8mjk,2383
|
|
273
273
|
webviz_subsurface/plugins/_parameter_analysis/_views/_parameter_response_view/_settings/_parameter_filter.py,sha256=HjuZX9pNnVck-JVwVsc9H3JInAUgpBseruP979DEyRo,1002
|
|
274
274
|
webviz_subsurface/plugins/_parameter_analysis/_views/_parameter_response_view/_settings/_selections.py,sha256=rnMPmLwcHHw1UL_eE5mMvb2-pwkVufFfEzv2cTK2GjY,5126
|
|
275
275
|
webviz_subsurface/plugins/_parameter_analysis/_views/_parameter_response_view/_settings/_vizualisation.py,sha256=5IbqncosHpcbnS2qKP9yZ0e03S2pYMiRE7IheC28KUQ,3344
|
|
@@ -377,7 +377,7 @@ webviz_subsurface/plugins/_simulation_time_series/_views/__init__.py,sha256=47DE
|
|
|
377
377
|
webviz_subsurface/plugins/_simulation_time_series/_views/_subplot_view/__init__.py,sha256=Yt6Piyp2IkXxdlj-alqIKd6TFZjpmOWqSwjnuQxZSmI,31
|
|
378
378
|
webviz_subsurface/plugins/_simulation_time_series/_views/_subplot_view/_view.py,sha256=HeWZyFM77MSdHCDUhWwXORidxjlqhkD_9u9CVniRdX0,42176
|
|
379
379
|
webviz_subsurface/plugins/_simulation_time_series/_views/_subplot_view/_property_serialization/__init__.py,sha256=E6_uX-47qAv2qVvtue08xhv4uDhZLLImH4s3WsE-ssw,180
|
|
380
|
-
webviz_subsurface/plugins/_simulation_time_series/_views/_subplot_view/_property_serialization/ensemble_subplot_builder.py,sha256=
|
|
380
|
+
webviz_subsurface/plugins/_simulation_time_series/_views/_subplot_view/_property_serialization/ensemble_subplot_builder.py,sha256=yrd96RMk2kJlM5CdzQkiazEzXEgDoTglR8_LfOTDMpY,14272
|
|
381
381
|
webviz_subsurface/plugins/_simulation_time_series/_views/_subplot_view/_property_serialization/graph_figure_builder_base.py,sha256=Ys9_XDUR0fQ-rR_LGEGW8jgp-DGwukec21Mj6VJHchw,5732
|
|
382
382
|
webviz_subsurface/plugins/_simulation_time_series/_views/_subplot_view/_property_serialization/vector_subplot_builder.py,sha256=d7phNUn2ILx6_3TwfBsL2_1ossTi4-Lfcj_5IXjKXA8,14980
|
|
383
383
|
webviz_subsurface/plugins/_simulation_time_series/_views/_subplot_view/_settings/__init__.py,sha256=hDqljNMPXr18Dir-7aBnXAiCPlyHB9jLtytq8kAWXT4,298
|
|
@@ -471,7 +471,7 @@ webviz_subsurface/plugins/_vfp_analysis/__init__.py,sha256=CF23TDvv2GOK1yhW-gBvU
|
|
|
471
471
|
webviz_subsurface/plugins/_vfp_analysis/_plugin.py,sha256=Ni2GxLCFQFpD7VcqWQzy1Oa7sOm45VuLbnM81bYUrBY,1690
|
|
472
472
|
webviz_subsurface/plugins/_vfp_analysis/_types.py,sha256=t2yKFHT7Y0UL6HJ3Zv0tHdHPtZRRuXo3mUM_YLoqrJU,210
|
|
473
473
|
webviz_subsurface/plugins/_vfp_analysis/_utils/__init__.py,sha256=2CzWadhrnNQGdrpGSUrvqoTCMYvp3YnXvLPWB-egk8k,52
|
|
474
|
-
webviz_subsurface/plugins/_vfp_analysis/_utils/_vfp_data_model.py,sha256=
|
|
474
|
+
webviz_subsurface/plugins/_vfp_analysis/_utils/_vfp_data_model.py,sha256=b9w_E4QsEaNyxQgkhq0UZx0i8YpVH7dM3dyEwfbCZVI,9664
|
|
475
475
|
webviz_subsurface/plugins/_vfp_analysis/_views/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
476
476
|
webviz_subsurface/plugins/_vfp_analysis/_views/_vfp_view/__init__.py,sha256=S6q3vFDQe98gEuO0Ku1PPjSj_He1GVz6hbuTaPalcZQ,27
|
|
477
477
|
webviz_subsurface/plugins/_vfp_analysis/_views/_vfp_view/_view.py,sha256=qHkiQMfZDwkUKchM2G1sJVUgKqERCUIujCj-ly-aY1c,10035
|
|
@@ -486,7 +486,7 @@ webviz_subsurface/plugins/_vfp_analysis/_views/_vfp_view/_view_elements/__init__
|
|
|
486
486
|
webviz_subsurface/plugins/_vfp_analysis/_views/_vfp_view/_view_elements/_vfp_graph.py,sha256=arkgdQCjJE5o_R85MhI6qGp_LMSGLlPItViDk5trVe0,488
|
|
487
487
|
webviz_subsurface/plugins/_volumetric_analysis/__init__.py,sha256=NER08MsM_rghINQ5ca6lXtaYFQwf2Yh7VBRGE5v9Ar8,52
|
|
488
488
|
webviz_subsurface/plugins/_volumetric_analysis/volume_validator_and_combinator.py,sha256=wPSKWzsOAKFVDuIdxAQ6X-t9n2mnsWma6MRVUb5702A,9844
|
|
489
|
-
webviz_subsurface/plugins/_volumetric_analysis/volumetric_analysis.py,sha256=
|
|
489
|
+
webviz_subsurface/plugins/_volumetric_analysis/volumetric_analysis.py,sha256=gxwHJRqiIIzTWm5UMy_vu7yU7itoJP02bPaWg8AmRb4,11589
|
|
490
490
|
webviz_subsurface/plugins/_volumetric_analysis/controllers/__init__.py,sha256=KNX_8-dZ8o5cFMpgdub33Rp5GuDMmoxSup_gpV_uvW0,403
|
|
491
491
|
webviz_subsurface/plugins/_volumetric_analysis/controllers/comparison_controllers.py,sha256=RBdV_NiuMYKdx5YBrhHyWFV24cjzHX3pqrSq4tY-fmw,20441
|
|
492
492
|
webviz_subsurface/plugins/_volumetric_analysis/controllers/distribution_controllers.py,sha256=AjL6Pt2nPAw87Lbt5NtHb3jeTczQKmwzL-Tp7qhNDxQ,18209
|
|
@@ -550,10 +550,10 @@ webviz_subsurface/plugins/_well_log_viewer/controllers/_well_controller.py,sha25
|
|
|
550
550
|
webviz_subsurface/plugins/_well_log_viewer/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
551
551
|
webviz_subsurface/plugins/_well_log_viewer/utils/default_color_tables.py,sha256=0UgrvygPGEAuC15vn73NCXJUQLt9Dpn5QZqqq1IJkfw,4872
|
|
552
552
|
webviz_subsurface/plugins/_well_log_viewer/utils/xtgeo_well_log_to_json.py,sha256=T44-vFwvvjyo376yoL1QWDc98exG8N1cLTEzrGp-I7A,1608
|
|
553
|
-
webviz_subsurface-0.2.
|
|
554
|
-
webviz_subsurface-0.2.
|
|
555
|
-
webviz_subsurface-0.2.
|
|
556
|
-
webviz_subsurface-0.2.
|
|
557
|
-
webviz_subsurface-0.2.
|
|
558
|
-
webviz_subsurface-0.2.
|
|
559
|
-
webviz_subsurface-0.2.
|
|
553
|
+
webviz_subsurface-0.2.44.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
|
554
|
+
webviz_subsurface-0.2.44.dist-info/licenses/LICENSE.chromedriver,sha256=H5UWVvf6Y7Ul6i35mriz7071dWR01cR9G-5ypnZHnpM,326542
|
|
555
|
+
webviz_subsurface-0.2.44.dist-info/METADATA,sha256=J393mypYv94qKzP6E7dUrWuusDylgi5wBjVu7cFdO5w,46825
|
|
556
|
+
webviz_subsurface-0.2.44.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
557
|
+
webviz_subsurface-0.2.44.dist-info/entry_points.txt,sha256=Xdu_x9E_hJBueKfSYBFAAVFzKeUrenikc8lydm9C-6A,4135
|
|
558
|
+
webviz_subsurface-0.2.44.dist-info/top_level.txt,sha256=ivY5svyqFD5YI8wdJHATxBrkxfcdU2Q6fDh5E_tDrl4,18
|
|
559
|
+
webviz_subsurface-0.2.44.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|