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)