import json5 from .types import * __all__ = ["load_from_json", "get_type_and_args"] def load_from_json(json_path: PathLike) -> dict[str, Any]: try: with Path(json_path).open() as fp: config: dict[str, Any] = json5.load(fp) except Exception: raise ValueError(f"{json_path} is not a valid json file") if "parent" in config: parent_config = load_from_json((json_path.parent / config.pop("parent")).with_suffix(".json")) config["model"][1] = parent_config["model"][1] | config["model"][1] config["train"][1] = parent_config["train"][1] | config["train"][1] return config def get_type_and_args(config_item: dict[str, Any] | list | str, default_type=None, default_args={}) -> tuple[str, dict[str, Any]]: match config_item: case None: return default_type, default_args case str() as type_name: return type_name, default_args case dict() as args: return default_type, default_args | args case str() as type_name, dict() as args: return type_name, default_args | args case _: raise ValueError("\"config_item\" is invalid")