Skip to content

Commit

Permalink
Moved get_matching_vector_names function to new utils module
Browse files Browse the repository at this point in the history
  • Loading branch information
Øyvind Lind-Johansen committed May 19, 2022
1 parent b66366a commit 02e13b2
Show file tree
Hide file tree
Showing 4 changed files with 33 additions and 23 deletions.
1 change: 1 addition & 0 deletions webviz_subsurface/_providers/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
from .ensemble_summary_provider.ensemble_summary_provider_factory import (
EnsembleSummaryProviderFactory,
)
from .ensemble_summary_provider.utils import get_matching_vector_names
from .ensemble_surface_provider import (
EnsembleSurfaceProvider,
EnsembleSurfaceProviderFactory,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
import abc
import datetime
import fnmatch
import re
from dataclasses import dataclass
from enum import Enum
from typing import List, Optional, Sequence
Expand Down Expand Up @@ -118,20 +116,3 @@ def get_vectors_for_date_df(
The returned DataFrame will always contain a 'REAL' column in addition to
columns for all the requested vectors.
"""

def get_matching_vector_names(self, column_keys: List[str]) -> List[str]:
"""Returns a list of vectors that match the input columns_keys that
can have unix shell wildcards.
This function is almost the same as filter_vectorlist_on_column_keys in
parameter_analysis/models/ensemble_timeseries_datamodel.py and should be
generalized somewhere.
"""
try:
regex = re.compile(
"|".join([fnmatch.translate(col) for col in column_keys]),
flags=re.IGNORECASE,
)
return [vec for vec in self.vector_names() if regex.fullmatch(vec)]
except re.error:
return []
27 changes: 27 additions & 0 deletions webviz_subsurface/_providers/ensemble_summary_provider/utils.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import fnmatch
import re
from typing import List

from .ensemble_summary_provider import EnsembleSummaryProvider


def get_matching_vector_names(
provider: EnsembleSummaryProvider, column_keys: List[str]
) -> List[str]:
"""Returns a list of vectors that match the input columns_keys that
can have unix shell wildcards.
Example of use:
column_keys = ["FOPT", "WGOR*"]
matching_vector_names = get_matching_vector_names(provider, column_keys)
df = provider.get_vectors_df(matching_vector_names, None)
"""
try:
regex = re.compile(
"|".join([fnmatch.translate(col) for col in column_keys]),
flags=re.IGNORECASE,
)
return [vec for vec in provider.vector_names() if regex.fullmatch(vec)]
except re.error:
return []
9 changes: 5 additions & 4 deletions webviz_subsurface/plugins/_parameter_response_correlation.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
EnsembleTableProviderFactory,
EnsembleTableProviderSet,
Frequency,
get_matching_vector_names,
)


Expand Down Expand Up @@ -675,7 +676,7 @@ def read_csv(csv_file) -> pd.DataFrame:


def create_df_from_table_provider(provider: EnsembleTableProviderSet) -> pd.DataFrame:
"""This function is the same as in parameter analysis and could be generalized."""
"""Aggregates parameters from all ensemble into a common dataframe."""
dfs = []
for ens in provider.ensemble_names():
df = provider.ensemble_provider(ens).get_column_data(
Expand All @@ -689,11 +690,11 @@ def create_df_from_table_provider(provider: EnsembleTableProviderSet) -> pd.Data
def create_df_from_summary_provider(
provider_set: Dict[str, EnsembleSummaryProvider], column_keys: List[str]
) -> pd.DataFrame:
"""Descr"""
"""Aggregates summary data from all ensembles into a common dataframe."""
dfs = []
for ens_name, provider in provider_set.items():
all_sumvecs = provider.get_matching_vector_names(column_keys)
df = provider.get_vectors_df(all_sumvecs, None)
matching_sumvecs = get_matching_vector_names(provider, column_keys)
df = provider.get_vectors_df(matching_sumvecs, None)
df["ENSEMBLE"] = ens_name
dfs.append(df)

Expand Down

0 comments on commit 02e13b2

Please sign in to comment.