ultraopt.hdl.viz 源代码

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author  : qichun tang
# @Date    : 2020-12-23
# @Contact    : qichun.tang@bupt.edu.cn
from ultraopt.hdl.utils import is_hdl_bottom
from ultraopt.utils.misc import get_import_error

SUFFIX = "(choice)"


[文档]def plot_hdl_recurse(hdl: dict, g, parent=None): for key, value in hdl.items(): if key.endswith(SUFFIX): key = key[:-len(SUFFIX)] g.node(key, shape="hexagon") plot_hdl_recurse(value, g, key) elif is_hdl_bottom(key, value): if (key.startswith("__")): key = None else: g.node(key, shape="ellipse") else: g.node(key, shape="box") plot_hdl_recurse(value, g, key) if parent and key: g.edge(parent, key)
[文档]def plot_hdl(hdl: dict, title="Config Space"): try: from graphviz import Digraph except Exception as e: raise get_import_error("graphviz") g = Digraph(title) plot_hdl_recurse(hdl, g) return g
[文档]def plot_layered_dict_recurse(layered_dict: dict, g, parent=None): for key,value in layered_dict.items(): g.node(key, shape="ellipse") if isinstance(value,dict): plot_layered_dict_recurse(value,g,parent) if parent and key: g.edge(parent, key)
[文档]def plot_layered_dict(layered_dict: dict, title="Layered Dict"): try: from graphviz import Digraph except Exception as e: raise get_import_error("graphviz") g = Digraph(title) plot_hdl_recurse(layered_dict, g) return g