Skip to content

Commit

Permalink
Fix runpath check for ensemble experiment
Browse files Browse the repository at this point in the history
  • Loading branch information
frode-aarstad committed Sep 26, 2023
1 parent ef0bcd1 commit fd4f8ee
Show file tree
Hide file tree
Showing 6 changed files with 71 additions and 15 deletions.
8 changes: 8 additions & 0 deletions src/ert/run_models/ensemble_experiment.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import asyncio
import concurrent
import logging
from pathlib import Path
from typing import TYPE_CHECKING, Any, Dict
from uuid import UUID

Expand Down Expand Up @@ -169,3 +170,10 @@ def run_experiment(
@classmethod
def name(cls) -> str:
return "Ensemble experiment"

def check_if_runpath_exists(self) -> bool:
iteration = self._simulation_arguments.get("iter_num", 0)
active_mask = self._simulation_arguments.get("active_realizations", [])
active_realizations = [i for i in range(len(active_mask)) if active_mask[i]]
run_paths = self.facade.get_run_paths(active_realizations, iteration)
return any(Path(run_path).exists() for run_path in run_paths)
File renamed without changes.
15 changes: 15 additions & 0 deletions tests/unit_tests/run_models/conftest.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
import os

import pytest


@pytest.fixture
def create_dummy_run_path(tmpdir):
run_path = os.path.join(tmpdir, "out")
os.mkdir(run_path)
os.mkdir(os.path.join(run_path, "realization-0"))
os.mkdir(os.path.join(run_path, "realization-0/iter-0"))
os.mkdir(os.path.join(run_path, "realization-1"))
os.mkdir(os.path.join(run_path, "realization-1/iter-0"))
os.mkdir(os.path.join(run_path, "realization-1/iter-1"))
yield os.chdir(tmpdir)
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import os
from unittest.mock import MagicMock
from uuid import UUID

Expand Down Expand Up @@ -73,18 +72,6 @@ def test_run_ensemble_evaluator():
run_context.deactivate_realization.assert_called_with(0)


@pytest.fixture
def create_dummy_run_path(tmpdir):
run_path = os.path.join(tmpdir, "out")
os.mkdir(run_path)
os.mkdir(os.path.join(run_path, "realization-0"))
os.mkdir(os.path.join(run_path, "realization-0/iter-0"))
os.mkdir(os.path.join(run_path, "realization-1"))
os.mkdir(os.path.join(run_path, "realization-1/iter-0"))
os.mkdir(os.path.join(run_path, "realization-1/iter-1"))
yield os.chdir(tmpdir)


@pytest.mark.parametrize(
"run_path, number_of_iterations, start_iteration, active_mask, expected",
[
Expand Down Expand Up @@ -116,11 +103,9 @@ def get_run_path_mock(realizations, iteration=None):
return [f"out/realization-{r}" for r in realizations]

brm = BaseRunModel(simulation_arguments, None, None, None, None)

brm.facade = MagicMock(
run_path=run_path,
number_of_iterations=number_of_iterations,
get_run_paths=get_run_path_mock,
)

assert brm.check_if_runpath_exists() == expected
48 changes: 48 additions & 0 deletions tests/unit_tests/run_models/test_ensemble_experiment.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
from unittest.mock import MagicMock

import pytest

from ert.run_models import EnsembleExperiment


@pytest.mark.parametrize(
"run_path, number_of_iterations, iter_num, active_mask, expected",
[
("out/realization-%d/iter-%d", 4, 2, [True, True, True, True], False),
("out/realization-%d/iter-%d", 4, 1, [True, True, True, True], True),
("out/realization-%d/iter-%d", 4, 1, [False, False, True, False], False),
("out/realization-%d/iter-%d", 4, 0, [False, False, False, False], False),
("out/realization-%d/iter-%d", 4, 0, [], False),
("out/realization-%d", 2, 1, [False, True, True], True),
("out/realization-%d", 2, 0, [False, False, True], False),
],
)
def test_check_if_runpath_exists(
create_dummy_run_path,
run_path: str,
number_of_iterations: int,
iter_num: int,
active_mask: list,
expected: bool,
):
simulation_arguments = {
"iter_num": iter_num,
"active_realizations": active_mask,
}

def get_run_path_mock(realizations, iteration=None):
if iteration is not None:
return [f"out/realization-{r}/iter-{iteration}" for r in realizations]
return [f"out/realization-{r}" for r in realizations]

ensemble_experiment = EnsembleExperiment(
simulation_arguments, None, None, None, None
)

ensemble_experiment.facade = MagicMock(
run_path=run_path,
number_of_iterations=number_of_iterations,
get_run_paths=get_run_path_mock,
)

assert ensemble_experiment.check_if_runpath_exists() == expected

0 comments on commit fd4f8ee

Please sign in to comment.