Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Improve DummyLogger #6398

Merged
merged 8 commits into from
Mar 9, 2021
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/).
- Fixed PyTorch Profiler with `emit_nvtx` ([#6260](https://github.com/PyTorchLightning/pytorch-lightning/pull/6260))


- Fixed `trainer.test` from `best_path` hangs after calling `trainer.fit` ([#6272](https://github.com/PyTorchLightning/pytorch-lightning/pull/6272))
- Fixed `DummyLogger.log_hyperparams` raising a `TypeError` when running with `fast_dev_run=True` ([#6398](https://github.com/PyTorchLightning/pytorch-lightning/pull/6398))


## [1.2.2] - 2021-03-02
Expand Down
26 changes: 14 additions & 12 deletions pytorch_lightning/loggers/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -279,12 +279,14 @@ def _sanitize_params(params: Dict[str, Any]) -> Dict[str, Any]:
return params

@abstractmethod
def log_hyperparams(self, params: argparse.Namespace):
def log_hyperparams(self, params: argparse.Namespace, *args, **kwargs):
"""
Record hyperparameters.

Args:
params: :class:`~argparse.Namespace` containing the hyperparameters
args: Optional positional arguments, depends on the specific logger being used
kwargs: Optional keywoard arguments, depends on the specific logger being used
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
kwargs: Optional keywoard arguments, depends on the specific logger being used
kwargs: Optional keyword arguments, depends on the specific logger being used

"""

def log_graph(self, model: LightningModule, input_array=None) -> None:
Expand Down Expand Up @@ -418,30 +420,29 @@ def nop(*args, **kw):
def __getattr__(self, _):
return self.nop

def __getitem__(self, idx):
# enables self.logger[0].experiment.add_image
# and self.logger.experiment[0].add_image(...)
def __getitem__(self, idx) -> "DummyExperiment":
# enables self.logger.experiment[0].add_image(...)
return self


class DummyLogger(LightningLoggerBase):
""" Dummy logger for internal use. Is usefull if we want to disable users
logger for a feature, but still secure that users code can run """
"""
Dummy logger for internal use. It is useful if we want to disable user's
logger for a feature, but still ensure that user code can run
"""

def __init__(self):
super().__init__()
self._experiment = DummyExperiment()

@property
def experiment(self):
def experiment(self) -> DummyExperiment:
return self._experiment

@rank_zero_only
def log_metrics(self, metrics, step):
def log_metrics(self, *args, **kwargs):
pass

@rank_zero_only
def log_hyperparams(self, params):
def log_hyperparams(self, *args, **kwargs):
pass
awaelchli marked this conversation as resolved.
Show resolved Hide resolved

@property
Expand All @@ -452,7 +453,8 @@ def name(self):
def version(self):
awaelchli marked this conversation as resolved.
Show resolved Hide resolved
pass

def __getitem__(self, idx):
def __getitem__(self, idx) -> "DummyLogger":
# enables self.logger[0].experiment.add_image(...)
return self


Expand Down
9 changes: 9 additions & 0 deletions tests/loggers/test_base.py
Original file line number Diff line number Diff line change
Expand Up @@ -229,15 +229,24 @@ def log_metrics(self, metrics, step):


def test_dummyexperiment_support_indexing():
""" Test that the DummyExperiment can imitate indexing the experiment in a LoggerCollection. """
experiment = DummyExperiment()
assert experiment[0] == experiment


def test_dummylogger_support_indexing():
""" Test that the DummyLogger can imitate indexing of a LoggerCollection. """
logger = DummyLogger()
assert logger[0] == logger


def test_dummylogger_noop_method_calls():
""" Test that the DummyLogger methods can be called with arbitrary arguments. """
logger = DummyLogger()
logger.log_hyperparams("1", 2, three="three")
logger.log_metrics("1", 2, three="three")


def test_np_sanitization():

class CustomParamsLogger(CustomLogger):
Expand Down