Skip to content

Commit 9c2e575

Browse files
committed
Change error message shown when experiment is terminated by user
1 parent 27a0895 commit 9c2e575

File tree

1 file changed

+20
-9
lines changed

1 file changed

+20
-9
lines changed

src/ert/run_models/base_run_model.py

+20-9
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,11 @@ def delete_runpath(run_path: str) -> None:
9494
shutil.rmtree(run_path)
9595

9696

97+
class _UserCancelled(Exception):
98+
def __str__(self) -> str:
99+
return "Experiment cancelled by user"
100+
101+
97102
class _LogAggregration(logging.Handler):
98103
def __init__(self, messages: MutableSequence[str]) -> None:
99104
self.messages = messages
@@ -571,7 +576,7 @@ async def run_monitor(
571576
# Allow track() to emit an EndEvent.
572577
return False
573578
elif type(event) is EETerminated:
574-
logger.debug("got terminator event")
579+
logger.debug("got terminated event")
575580

576581
if not self._end_queue.empty():
577582
logger.debug("Run model canceled - during evaluation")
@@ -594,11 +599,12 @@ async def run_ensemble_evaluator_async(
594599
run_args: list[RunArg],
595600
ensemble: Ensemble,
596601
ee_config: EvaluatorServerConfig,
597-
) -> list[int]:
602+
) -> list[int] | _UserCancelled:
598603
if not self._end_queue.empty():
599604
logger.debug("Run model canceled - pre evaluation")
600605
self._end_queue.get()
601-
return []
606+
return _UserCancelled()
607+
602608
ee_ensemble = self._build_ensemble(run_args, ensemble.experiment_id)
603609
evaluator = EnsembleEvaluator(
604610
ee_ensemble,
@@ -610,7 +616,7 @@ async def run_ensemble_evaluator_async(
610616
await evaluator._server_started
611617
if not (await self.run_monitor(ee_config, ensemble.iteration)):
612618
await evaluator_task
613-
return []
619+
return _UserCancelled()
614620

615621
logger.debug("observed that model was finished, waiting tasks completion...")
616622
# The model has finished, we indicate this by sending a DONE
@@ -620,7 +626,8 @@ async def run_ensemble_evaluator_async(
620626
logger.debug("Run model canceled - post evaluation")
621627
self._end_queue.get()
622628
await evaluator_task
623-
return []
629+
return _UserCancelled()
630+
624631
await evaluator_task
625632
ensemble.refresh_ensemble_state()
626633

@@ -633,11 +640,10 @@ def run_ensemble_evaluator(
633640
run_args: list[RunArg],
634641
ensemble: Ensemble,
635642
ee_config: EvaluatorServerConfig,
636-
) -> list[int]:
637-
successful_realizations = asyncio.run(
643+
) -> list[int] | _UserCancelled:
644+
return asyncio.run(
638645
self.run_ensemble_evaluator_async(run_args, ensemble, ee_config)
639646
)
640-
return successful_realizations
641647

642648
def _build_ensemble(
643649
self,
@@ -757,11 +763,16 @@ def _evaluate_and_postprocess(
757763
"run_paths": self.run_paths,
758764
},
759765
)
760-
successful_realizations = self.run_ensemble_evaluator(
766+
result = self.run_ensemble_evaluator(
761767
run_args,
762768
ensemble,
763769
evaluator_server_config,
764770
)
771+
if type(result) is _UserCancelled:
772+
self.active_realizations = [False for _ in self.active_realizations]
773+
raise result
774+
successful_realizations = cast(list[int], result)
775+
765776
starting_realizations = [real.iens for real in run_args if real.active]
766777
failed_realizations = list(
767778
set(starting_realizations) - set(successful_realizations)

0 commit comments

Comments
 (0)