Skip to content

Commit f7f0938

Browse files
committed
Split data_for_key
1 parent 4f22072 commit f7f0938

File tree

17 files changed

+489
-133
lines changed

17 files changed

+489
-133
lines changed

src/ert/config/ext_param_config.py

+16-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212
from ert.substitutions import substitute_runpath_name
1313

14-
from .parameter_config import ParameterConfig
14+
from .parameter_config import ParameterConfig, ParameterMetadata
1515

1616
if TYPE_CHECKING:
1717
import numpy.typing as npt
@@ -32,6 +32,21 @@ class ExtParamConfig(ParameterConfig):
3232
If a list of strings is given, the order is preserved.
3333
"""
3434

35+
@property
36+
def parameter_keys(self) -> list[str]:
37+
if isinstance(self.input_keys, dict):
38+
flattened = []
39+
for key, subkeys in self.input_keys.items():
40+
for subkey in subkeys:
41+
flattened.append(key + subkey)
42+
return flattened
43+
else:
44+
return self.input_keys
45+
46+
@property
47+
def metadata(self) -> list[ParameterMetadata]:
48+
return []
49+
3550
input_keys: list[str] | dict[str, list[str]] = field(default_factory=list)
3651
forward_init: bool = False
3752
output_file: str = ""

src/ert/config/field.py

+21-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
from ert.utils import log_duration
1616

1717
from ._str_to_bool import str_to_bool
18-
from .parameter_config import ParameterConfig
18+
from .parameter_config import ParameterConfig, ParameterMetadata
1919
from .parsing import ConfigValidationError, ConfigWarning
2020

2121
if TYPE_CHECKING:
@@ -41,6 +41,26 @@ class Field(ParameterConfig):
4141
grid_file: str
4242
mask_file: Path | None = None
4343

44+
@property
45+
def parameter_keys(self) -> list[str]:
46+
return []
47+
48+
@property
49+
def metadata(self) -> list[ParameterMetadata]:
50+
return [
51+
ParameterMetadata(
52+
key=self.name,
53+
transformation=self.output_transformation,
54+
dimensionality=3,
55+
userdata={
56+
"data_origin": "FIELD",
57+
"nx": self.nx,
58+
"ny": self.ny,
59+
"nz": self.nz,
60+
},
61+
)
62+
]
63+
4464
@classmethod
4565
def from_config_list(
4666
cls,

src/ert/config/gen_data_config.py

+16-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
from ert.validation import rangestring_to_list
1212

1313
from .parsing import ConfigDict, ConfigValidationError, ErrorInfo
14-
from .response_config import InvalidResponseFile, ResponseConfig
14+
from .response_config import InvalidResponseFile, ResponseConfig, ResponseMetadata
1515
from .responses_index import responses_index
1616

1717

@@ -21,6 +21,21 @@ class GenDataConfig(ResponseConfig):
2121
report_steps_list: list[list[int] | None] = dataclasses.field(default_factory=list)
2222
has_finalized_keys: bool = True
2323

24+
@property
25+
def metadata(self) -> list[ResponseMetadata]:
26+
return [
27+
ResponseMetadata(
28+
response_type=self.name,
29+
response_key=response_key,
30+
filter_on={"report_steps": report_steps}
31+
if report_steps is not None
32+
else None,
33+
)
34+
for response_key, report_steps in zip(
35+
self.keys, self.report_steps_list, strict=False
36+
)
37+
]
38+
2439
def __post_init__(self) -> None:
2540
if len(self.report_steps_list) == 0:
2641
self.report_steps_list = [[0] for _ in self.keys]

src/ert/config/gen_kw_config.py

+21-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
from ert.substitutions import substitute_runpath_name
2020

2121
from ._str_to_bool import str_to_bool
22-
from .parameter_config import ParameterConfig
22+
from .parameter_config import ParameterConfig, ParameterMetadata
2323
from .parsing import ConfigValidationError, ConfigWarning, ErrorInfo
2424

2525
if TYPE_CHECKING:
@@ -85,6 +85,26 @@ def __contains__(self, item: str) -> bool:
8585
def __len__(self) -> int:
8686
return len(self.transform_functions)
8787

88+
@property
89+
def parameter_keys(self) -> list[str]:
90+
keys = []
91+
for tf in self.transform_functions:
92+
keys.append(tf.name)
93+
94+
return keys
95+
96+
@property
97+
def metadata(self) -> list[ParameterMetadata]:
98+
return [
99+
ParameterMetadata(
100+
key=f"{self.name}:{tf.name}",
101+
transformation=tf.transform_function_name,
102+
dimensionality=2,
103+
userdata={"data_origin": "GEN_KW"},
104+
)
105+
for tf in self.transform_functions
106+
]
107+
88108
@classmethod
89109
def from_config_list(cls, gen_kw: list[str | dict[str, str]]) -> Self:
90110
gen_kw_key = cast(str, gen_kw[0])

src/ert/config/parameter_config.py

+24-1
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,11 @@
33
import dataclasses
44
from abc import ABC, abstractmethod
55
from pathlib import Path
6-
from typing import TYPE_CHECKING, Any
6+
from typing import TYPE_CHECKING, Any, Literal
77

88
import numpy as np
99
import xarray as xr
10+
from pydantic import BaseModel
1011

1112
if TYPE_CHECKING:
1213
import numpy.typing as npt
@@ -28,6 +29,13 @@ def __init__(self, data: list[tuple[Any, Any]]) -> None:
2829
super().__init__(data)
2930

3031

32+
class ParameterMetadata(BaseModel):
33+
key: str
34+
transformation: str | None
35+
dimensionality: Literal[1, 2, 3] = 1
36+
userdata: dict[str, Any]
37+
38+
3139
@dataclasses.dataclass
3240
class ParameterConfig(ABC):
3341
name: str
@@ -42,6 +50,21 @@ def sample_or_load(
4250
) -> xr.Dataset:
4351
return self.read_from_runpath(Path(), real_nr, 0)
4452

53+
@property
54+
@abstractmethod
55+
def parameter_keys(self) -> list[str]:
56+
"""
57+
Returns a list of parameter keys within this parameter group
58+
"""
59+
60+
@property
61+
@abstractmethod
62+
def metadata(self) -> list[ParameterMetadata]:
63+
"""
64+
Returns metadata describing this parameter
65+
66+
"""
67+
4568
@abstractmethod
4669
def __len__(self) -> int:
4770
"""Number of parameters"""

src/ert/config/response_config.py

+16
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
from typing import Any, Self
44

55
import polars as pl
6+
from pydantic import BaseModel
67

78
from .parameter_config import CustomDict
89
from .parsing import ConfigDict
@@ -15,13 +16,28 @@ class InvalidResponseFile(Exception):
1516
"""
1617

1718

19+
class ResponseMetadata(BaseModel):
20+
response_type: str
21+
response_key: str
22+
# ex: { "report_step": [0, 199, 299] }
23+
filter_on: dict[str, list[Any]] | None # Dimensions
24+
25+
1826
@dataclasses.dataclass
1927
class ResponseConfig(ABC):
2028
name: str
2129
input_files: list[str] = dataclasses.field(default_factory=list)
2230
keys: list[str] = dataclasses.field(default_factory=list)
2331
has_finalized_keys: bool = False
2432

33+
@property
34+
@abstractmethod
35+
def metadata(self) -> list[ResponseMetadata]:
36+
"""
37+
Returns metadata describing this response
38+
39+
"""
40+
2541
@abstractmethod
2642
def read_from_file(self, run_path: str, iens: int, iter: int) -> pl.DataFrame:
2743
"""Reads the data for the response from run_path.

src/ert/config/summary_config.py

+12-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
from .ensemble_config import Refcase
1414
from .parsing import ConfigDict, ConfigKeys
1515
from .parsing.config_errors import ConfigValidationError, ConfigWarning
16-
from .response_config import InvalidResponseFile, ResponseConfig
16+
from .response_config import InvalidResponseFile, ResponseConfig, ResponseMetadata
1717
from .responses_index import responses_index
1818

1919
logger = logging.getLogger(__name__)
@@ -32,6 +32,17 @@ def __post_init__(self) -> None:
3232
if len(self.keys) < 1:
3333
raise ValueError("SummaryConfig must be given at least one key")
3434

35+
@property
36+
def metadata(self) -> list[ResponseMetadata]:
37+
return [
38+
ResponseMetadata(
39+
response_type=self.name,
40+
response_key=response_key,
41+
filter_on=None,
42+
)
43+
for response_key in self.keys
44+
]
45+
3546
@property
3647
def expected_input_files(self) -> list[str]:
3748
base = self.input_files[0]

src/ert/config/surface_config.py

+9-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
from ert.substitutions import substitute_runpath_name
1212

1313
from ._str_to_bool import str_to_bool
14-
from .parameter_config import ParameterConfig
14+
from .parameter_config import ParameterConfig, ParameterMetadata
1515
from .parsing import ConfigValidationError, ErrorInfo
1616

1717
if TYPE_CHECKING:
@@ -34,6 +34,14 @@ class SurfaceConfig(ParameterConfig):
3434
output_file: Path
3535
base_surface_path: str
3636

37+
@property
38+
def parameter_keys(self) -> list[str]:
39+
return []
40+
41+
@property
42+
def metadata(self) -> list[ParameterMetadata]:
43+
return []
44+
3745
@classmethod
3846
def from_config_list(cls, surface: list[str | dict[str, str]]) -> Self:
3947
name = cast(str, surface[0])

0 commit comments

Comments
 (0)