Source code for smac.callback.metadata_callback
from __future__ import annotations
import json
import platform
from datetime import datetime
import smac
from smac.callback.callback import Callback
from smac.main.smbo import SMBO
from smac.utils.numpyencoder import NumpyEncoder
__copyright__ = "Copyright 2023, AutoML.org Freiburg-Hannover"
__license__ = "3-clause BSD"
[docs]
class MetadataCallback(Callback):
    def __init__(self, **kwargs: str | int | float | dict | list) -> None:
        # Arguments must be json serializable
        self.kwargs = kwargs
[docs]
    def on_start(self, smbo: SMBO) -> None:
        """Called before the optimization starts."""
        path = smbo._scenario.output_directory
        meta_dict = {
            "utc_time": str(datetime.utcnow()),
            "os": platform.platform(),
            "smac_version": getattr(smac, "version"),
        }
        for key, value in self.kwargs.items():
            meta_dict[key] = value
        path.mkdir(parents=True, exist_ok=True)
        with open(path / "metadata.json", "w") as fp:
            json.dump(meta_dict, fp, indent=2, cls=NumpyEncoder)