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.
@@ -1,5 +1,5 @@
1
1
  from pathlib import Path
2
- from typing import Any, Optional, Union
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: Optional[Union[str, int, list]] = None
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
- self._tree_type == TreeType.GRUPTREE
197
+ TreeType.GRUPTREE.value in unique_keywords
196
198
  and TreeType.BRANPROP.value in unique_keywords
197
199
  ):
198
- # Filter out BRANPROP entries
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()
@@ -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.42'
32
- __version_tuple__ = version_tuple = (0, 2, 42)
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
- free = "#FF2400"
45
- trapped = "#880808"
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
- free = ""
53
- trapped = "."
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
- free = "dot"
61
- trapped = "dashdot"
60
+ free_gas = "dot"
61
+ trapped_gas = "dashdot"
62
62
 
63
63
 
64
64
  _COLOR_ZONES = [
@@ -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
- vectors_for_param_corr = (
224
- self._vectormodel.filter_vectors(column_keys, ensemble=ensemble)
225
- if column_keys is not None
226
- else []
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=self._observations[selected_vector]
364
- if options
365
- and options["show_observations"]
366
- and selected_vector in self._observations
367
- else {},
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
- style: Dict,
507
- ) -> Tuple[str, Dict]:
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
- style["background-color"] = (
541
+ style_btn["background-color"] = (
514
542
  "#E8E8E8" if insync or button_click else "#7393B3"
515
543
  )
516
- style["color"] = "#555" if insync or button_click else "#fff"
517
- return vector_filter if button_click else no_update, style
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
- # NOTE: sorted() with key=self._selected_vectors.index requires that all of
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 - order not important
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 vectors:
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 - order not important
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 vectors:
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 - order not important!
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 vectors:
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 vectors:
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
- for vector in vectors:
352
- if vector not in self._selected_vectors:
353
- raise ValueError(
354
- f'Vector "{vector}" does not exist among selected vectors: '
355
- f"{self._selected_vectors}"
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
- table_provider = EnsembleTableProviderFactory.instance()
216
- volumes_table = table_provider.create_from_ensemble_csv_file(csvfile_vol)
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
- 'Incorrent arguments. Either provide a "csvfile_vol" or "ensembles" and "volfiles"'
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
- return [(get_path, [{"path": self.fipfile}])]
286
- return []
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,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: webviz-subsurface
3
- Version: 0.2.42
3
+ Version: 0.2.44
4
4
  Summary: Webviz config plugins for subsurface data
5
5
  Author: R&T Equinor
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -1,5 +1,5 @@
1
1
  webviz_subsurface/__init__.py,sha256=XUL8THCPZObkUsxDodKtE_wx-pYmQ4sATXgx5sdYa-A,3824
2
- webviz_subsurface/_version.py,sha256=nVCdUZpuvV7053YiiyLMdnFqPfN-gdcOv2QjZei9o0o,706
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=XIiQ_sKq3m4BVkKxmyX_meHsPNEQSdC0Ex01_FtW0S8,1267
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=ckZug0bwoJmIBZC-h8ADnw2Ss68oKj4-DezCbDuPCr0,6269
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=TkPBTre3Srs7n2SJSVGbj6oWAUEaJJ811XTxCIcHjPQ,8369
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=ZCMkjTGB3fVq-R4jxwYtW1KhlFBIdhPPwyQOdtv2a1w,47004
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=k3j1-oz7s_UN_nEvHa3cCsqmOQL5tkaqStD73xuyyFc,29763
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=96WuyBfD-1-3_Pq-zlr9cQKc_u7FugPPMsjMzEQ96uU,1975
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=tKXZcOysq8FRUji6Da-Ky6vGB3u-YMe3u4QjYpQqbBA,13978
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=l1F9jlH9ESmXM877fqgrst7A4BPXBpbP1E5e72llXPI,9658
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=qb--YOyq9rnXWC66EgxASoJG3h1wFbdPn1W5qU1snyY,11318
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.42.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
554
- webviz_subsurface-0.2.42.dist-info/licenses/LICENSE.chromedriver,sha256=H5UWVvf6Y7Ul6i35mriz7071dWR01cR9G-5ypnZHnpM,326542
555
- webviz_subsurface-0.2.42.dist-info/METADATA,sha256=CzHRIcu9fI-b3GBg5LmvTyKYrlZS8ult8SCQzsWsvF4,46825
556
- webviz_subsurface-0.2.42.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
557
- webviz_subsurface-0.2.42.dist-info/entry_points.txt,sha256=Xdu_x9E_hJBueKfSYBFAAVFzKeUrenikc8lydm9C-6A,4135
558
- webviz_subsurface-0.2.42.dist-info/top_level.txt,sha256=ivY5svyqFD5YI8wdJHATxBrkxfcdU2Q6fDh5E_tDrl4,18
559
- webviz_subsurface-0.2.42.dist-info/RECORD,,
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,,