Skip to content

Commit

Permalink
Sort time-based responses & observations by time
Browse files Browse the repository at this point in the history
  • Loading branch information
yngve-sk committed Jan 30, 2025
1 parent cabf8c1 commit 7378818
Show file tree
Hide file tree
Showing 3 changed files with 6 additions and 44 deletions.
6 changes: 5 additions & 1 deletion src/ert/config/observations.py
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,11 @@ def __post_init__(self) -> None:
for name, dfs in grouped.items():
non_empty_dfs = [df for df in dfs if not df.is_empty()]
if len(non_empty_dfs) > 0:
datasets[name] = polars.concat(non_empty_dfs).sort("observation_key")
ds = polars.concat(non_empty_dfs).sort("observation_key")
if "time" in ds:
ds = ds.sort(by="time")

datasets[name] = ds

self.datasets = datasets

Expand Down
1 change: 1 addition & 0 deletions src/ert/config/summary_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ def read_from_file(self, run_path: str, iens: int, iter: int) -> polars.DataFram
}
)
df = df.explode("values", "time")
df = df.sort(by=["time"])
return df

@property
Expand Down
43 changes: 0 additions & 43 deletions tests/ert/unit_tests/config/test_observations.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,9 @@
import os
from contextlib import ExitStack as does_not_raise
from datetime import datetime, timedelta
from pathlib import Path
from textwrap import dedent

import pytest
from hypothesis import given, settings
from hypothesis import strategies as st
from resdata.summary import Summary

from ert.config import (
Expand All @@ -19,8 +16,6 @@
from ert.config.general_observation import GenObservation
from ert.config.observation_vector import ObsVector

from .config_dict_generator import config_generators


def run_simulator():
"""
Expand Down Expand Up @@ -186,44 +181,6 @@ def test_gen_obs_invalid_observation_std(std):
)


@pytest.mark.integration_test
@settings(max_examples=10)
@pytest.mark.filterwarnings("ignore::UserWarning")
@pytest.mark.filterwarnings("ignore::RuntimeWarning")
@pytest.mark.filterwarnings("ignore::ert.config.ConfigWarning")
@given(config_generators(use_eclbase=st.just(True)))
def test_that_enkf_obs_keys_are_ordered(tmp_path_factory, config_generator):
with config_generator(tmp_path_factory) as config_values:
observations = ErtConfig.from_dict(
config_values.to_config_dict("test.ert", os.getcwd())
).observations

non_empty_observations = {
_response_type: _df
for _response_type, _df in observations.items()
if not _df.is_empty()
}

for _obs in config_values.observations:
if (
_obs.class_name == "SUMMARY_OBSERVATION"
and "summary" in non_empty_observations
):
assert _obs.name in non_empty_observations["summary"]["observation_key"]
if (
_obs.class_name == "GENERAL_OBSERVATION"
and _obs.value is not None
and "gen_data" in non_empty_observations
):
assert (
_obs.name in non_empty_observations["gen_data"]["observation_key"]
)

for df in observations.values():
obs_keys_list = df["observation_key"].to_list()
assert sorted(obs_keys_list) == obs_keys_list


def test_that_empty_observations_file_causes_exception(tmpdir):
with tmpdir.as_cwd():
config = dedent(
Expand Down

0 comments on commit 7378818

Please sign in to comment.