From f5f78b82a2871d8d7eb60ca74168192dfd2d80f7 Mon Sep 17 00:00:00 2001 From: david1309 Date: Mon, 18 Nov 2019 15:38:23 +0100 Subject: [PATCH] Support multiple results in NeptuneObserver completed_event() (#68) * Support multiple results in NeptuneObservercompleted_event * added logging of results objects --- neptunecontrib/monitoring/sacred.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/neptunecontrib/monitoring/sacred.py b/neptunecontrib/monitoring/sacred.py index c8334d4..215dfe1 100644 --- a/neptunecontrib/monitoring/sacred.py +++ b/neptunecontrib/monitoring/sacred.py @@ -15,8 +15,10 @@ # import collections +import warnings import neptune +from neptunecontrib.monitoring.utils import pickle_and_send_artifact from sacred.dependencies import get_digest from sacred.observers import RunObserver @@ -100,7 +102,19 @@ def started_event(self, ex_info, command, host_info, start_time, config, meta_in def completed_event(self, stop_time, result): if result: - neptune.log_metric('result', result) + if not isinstance(result, tuple): + result = ( + result,) # transform single result to tuple so that both single & multiple results use same code + + for i, r in enumerate(result): + if isinstance(r, float) or isinstance(r, int): + neptune.log_metric("result_{}".format(i), float(r)) + elif isinstance(r, object): + pickle_and_send_artifact(r, "result_{}.pkl".format(i)) + else: + warnings.warn( + "logging results does not support type '{}' results. Ignoring this result".format(type(r))) + neptune.stop() def interrupted_event(self, interrupt_time, status):