Skip to content

Commit

Permalink
Handle empty responses in MeasuredData
Browse files Browse the repository at this point in the history
return empty df for measureddata w/o responses
  • Loading branch information
yngve-sk authored Oct 25, 2024
1 parent f1edebb commit cdee929
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 1 deletion.
5 changes: 5 additions & 0 deletions src/ert/data/_measured_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,11 @@ def _get_data(
),
)

if responses_for_type.is_empty():
raise ResponseError(
f"No response loaded for observation type: {response_type}"
)

# Note that if there are duplicate entries for one
# response at one index, they are aggregated together
# with "mean" by default
Expand Down
25 changes: 24 additions & 1 deletion tests/ert/unit_tests/data/test_integration_data.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,16 @@
import os
import pathlib
from datetime import datetime

import numpy as np
import polars
import pytest

from ert.config import ErtConfig
from ert.data import MeasuredData
from ert.data._measured_data import ObservationError
from ert.data._measured_data import ObservationError, ResponseError
from ert.libres_facade import LibresFacade
from ert.storage import open_storage


@pytest.fixture()
Expand Down Expand Up @@ -152,3 +155,23 @@ def test_all_measured_snapshot(snapshot, snake_oil_storage, create_measured_data
obs_keys = experiment.observation_keys
measured_data = create_measured_data(obs_keys)
snapshot.assert_match(measured_data.data.to_csv(), "snake_oil_measured_output.csv")


def test_that_measured_data_gives_error_on_missing_response(snake_oil_case_storage):
with open_storage(snake_oil_case_storage.ens_path, mode="w") as storage:
experiment = storage.get_experiment_by_name("ensemble-experiment")
ensemble = experiment.get_ensemble_by_name("default_0")

for real in range(ensemble.ensemble_size):
# .save_responses() does not allow for saving directly with an empty ds
ds_path = ensemble._realization_dir(real) / "summary.parquet"
smry_df = polars.read_parquet(ds_path)
os.remove(ds_path)
smry_df.clear().write_parquet(ds_path)

ensemble.load_responses.cache_clear()

with pytest.raises(
ResponseError, match="No response loaded for observation type: summary"
):
MeasuredData(ensemble, ["FOPR"])

0 comments on commit cdee929

Please sign in to comment.