ultraopt.hdl.utils 源代码

from copy import deepcopy
from typing import Dict, Union, Any

from ConfigSpace.configuration_space import Configuration

from ultraopt.hdl.hp_def import _decode


[文档]def is_hdl_bottom(key, value): if isinstance(key, str) and key.startswith("__"): return True if isinstance(value, dict) and "_type" in value: return True if not isinstance(value, dict): return True return False
[文档]def layering_config(c: Union[Configuration, Dict[str, Any]]): if isinstance(c, Configuration): dict_ = c.get_dictionary() elif isinstance(c, dict): dict_ = deepcopy(c) else: raise NotImplementedError result = {} for k, v in dict_.items(): if isinstance(v, str): v = _decode(v) key_path = k.split(":") if key_path[-1] == "__choice__": key_path = key_path[:-1] if v is not None: key_path += [v] v = {} if "None" in key_path: continue __set_kv(result, key_path, v) return result
def __set_kv(dict_: dict, key_path: list, value): tmp = dict_ for i, key in enumerate(key_path): if i != len(key_path) - 1: if key not in tmp: tmp[key] = {} tmp = tmp[key] key = key_path[-1] if (key == "placeholder" and value == "placeholder"): pass else: tmp[key] = value