From 9e0e2ff7362989b2267702d20dfc013bc753f78b Mon Sep 17 00:00:00 2001 From: Jactus Date: Tue, 15 Jun 2021 14:46:31 +0800 Subject: [PATCH] Update QlibRecorder wrapper --- qlib/workflow/__init__.py | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/qlib/workflow/__init__.py b/qlib/workflow/__init__.py index 2b2535edc..7652ff709 100644 --- a/qlib/workflow/__init__.py +++ b/qlib/workflow/__init__.py @@ -525,14 +525,33 @@ class QlibRecorder: self.get_exp().get_recorder().set_tags(**kwargs) +# error type for reinitialization when starting an experiment +class RecorderInitializationError(Exception): + def __init__(self, message): + super(RecorderInitializationError, self).__init__(message) + + +class RecorderWrapper(Wrapper): + """ + Wrapper class for QlibRecorder, which detects whether users reinitialize qlib when already starting an experiment. + """ + + def register(self, provider): + if self._provider is not None: + raise RecorderInitializationError( + "Please don't reinitialize Qlib if QlibRecorder is already acivated. Otherwise, the experiment stored location will be modified." + ) + self._provider = provider + + import sys if sys.version_info >= (3, 9): from typing import Annotated - QlibRecorderWrapper = Annotated[QlibRecorder, Wrapper] + QlibRecorderWrapper = Annotated[QlibRecorder, RecorderWrapper] else: QlibRecorderWrapper = QlibRecorder # global record -R: QlibRecorderWrapper = Wrapper() +R: QlibRecorderWrapper = RecorderWrapper()