Source code for ax.storage.json_store.save
#!/usr/bin/env python3
# Copyright (c) Meta Platforms, Inc. and affiliates.
#
# This source code is licensed under the MIT license found in the
# LICENSE file in the root directory of this source tree.
# pyre-strict
import json
from collections.abc import Callable
from typing import Any
from ax.core.experiment import Experiment
from ax.storage.json_store.encoder import object_to_json
from ax.storage.json_store.registry import (
CORE_CLASS_ENCODER_REGISTRY,
CORE_ENCODER_REGISTRY,
)
[docs]
def save_experiment(
experiment: Experiment,
filepath: str,
# pyre-fixme[2]: Parameter annotation cannot contain `Any`.
# pyre-fixme[24]: Generic type `type` expects 1 type parameter, use
# `typing.Type` to avoid runtime subscripting errors.
encoder_registry: dict[
type, Callable[[Any], dict[str, Any]]
] = CORE_ENCODER_REGISTRY,
# pyre-fixme[2]: Parameter annotation cannot contain `Any`.
# pyre-fixme[24]: Generic type `type` expects 1 type parameter, use
# `typing.Type` to avoid runtime subscripting errors.
class_encoder_registry: dict[
type, Callable[[Any], dict[str, Any]]
] = CORE_CLASS_ENCODER_REGISTRY,
) -> None:
"""Save experiment to file.
1) Convert Ax experiment to JSON-serializable dictionary.
2) Write to file.
"""
if not isinstance(experiment, Experiment):
raise ValueError("Can only save instances of Experiment")
if not filepath.endswith(".json"):
raise ValueError("Filepath must end in .json")
json_experiment = object_to_json(
experiment,
encoder_registry=encoder_registry,
class_encoder_registry=class_encoder_registry,
)
with open(filepath, "w+") as file:
file.write(json.dumps(json_experiment))