Skip to content

Commit

Permalink
Merge pull request #471 from Derek-Wds/main
Browse files Browse the repository at this point in the history
Update Recorder Wrapper to prevent reinitialization
  • Loading branch information
you-n-g committed Jun 16, 2021
2 parents 5331ab9 + 0fe8b28 commit 5a50d7c
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 2 deletions.
12 changes: 12 additions & 0 deletions qlib/utils/exceptions.py
@@ -0,0 +1,12 @@
# Copyright (c) Microsoft Corporation.
# Licensed under the MIT License.

# Base exception class
class QlibException(Exception):
def __init__(self, message):
super(QlibException, self).__init__(message)


# Error type for reinitialization when starting an experiment
class RecorderInitializationError(QlibException):
pass
20 changes: 18 additions & 2 deletions qlib/workflow/__init__.py
Expand Up @@ -7,6 +7,7 @@
from .exp import Experiment
from .recorder import Recorder
from ..utils import Wrapper
from ..utils.exceptions import RecorderInitializationError


class QlibRecorder:
Expand Down Expand Up @@ -525,14 +526,29 @@ def set_tags(self, **kwargs):
self.get_exp().get_recorder().set_tags(**kwargs)


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:
expm = getattr(self._provider, "exp_manager")
if expm.active_experiment 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()

0 comments on commit 5a50d7c

Please sign in to comment.