class_docstr: DOT graph for relay IR.
  
  See also :py:class:`tvm.contrib.relay_viz.dot.DotPlotter`
  
  Parameters
  ----------
  name: str
      name of this graph.
  graph_attr: Optional[Dict[str, str]]
      key-value pairs for the graph.
  node_attr: Optional[Dict[str, str]]
      key-value pairs for all nodes.
  edge_attr: Optional[Dict[str, str]]
      key-value pairs for all edges.
  get_node_attr: Optional[Callable[[VizNode], Dict[str, str]]]
      A callable returning attributes for the node.
code: def __init__(
      self,
      name: str,
      graph_attr: Dict[str, str] = None,
      node_attr: Dict[str, str] = None,
      edge_attr: Dict[str, str] = None,
      get_node_attr: Callable[[VizNode], Dict[str, str]] = None,
  ):
      self._name = name
      self._get_node_attr = self._default_get_node_attr
      if get_node_attr is not None:
          self._get_node_attr = get_node_attr
  
      # graphviz recognizes the subgraph as a cluster subgraph
      # by the name starting with "cluster" (all lowercase)
      self._digraph = graphviz.Digraph(
          name=f"cluster_{self._name}",
          graph_attr=graph_attr,
          node_attr=node_attr,
          edge_attr=edge_attr,
      )
      self._digraph.attr(label=self._name)
  
file_path: tvm/python/tvm/contrib/relay_viz/dot.py
imports: from typing import Any, Callable, Dict
  from .interface import DefaultVizParser, Plotter, VizEdge, VizGraph, VizNode
label_desc: Use image node_id 1 to create a new DotGraph object from inherited base classes: VizGraph with example: obj = DotGraph(name, graph_attr, node_attr, edge_attr, get_node_attr)