class_docstr: Tracks nodes and edges of a directed graph and supports basic operations on them.
class_docstr_tok: ["Tracks","nodes","and","edges","of","a","directed","graph","and","supports","basic","operations","on","them","."]
docstr: Generate a GraphViz Dot graph.
  
  Returns a GraphViz Digraph object.
docstr_tok: ["Generate","a","GraphViz","Dot","graph",".","Returns","a","GraphViz","Digraph","object","."]
code: def build_dot(self, orientation):
      """Generate a GraphViz Dot graph.
  
      Returns a GraphViz Digraph object.
      """
      from graphviz import Digraph
  
      # Build GraphViz Digraph
      dot = Digraph()
      dot.attr(
          "graph",
          bgcolor=self.theme["background_color"],
          color=self.theme["outline_color"],
          fontsize=self.theme["font_size"],
          fontcolor=self.theme["font_color"],
          fontname=self.theme["font_name"],
          margin=self.theme["margin"],
          rankdir=orientation,
          pad=self.theme["padding"],
      )
      dot.attr(
          "node",
          shape="box",
          style="filled",
          margin="0,0",
          fillcolor=self.theme["fill_color"],
          color=self.theme["outline_color"],
          fontsize=self.theme["font_size"],
          fontcolor=self.theme["font_color"],
          fontname=self.theme["font_name"],
      )
      dot.attr(
          "edge",
          style="solid",
          color=self.theme["outline_color"],
          fontsize=self.theme["font_size"],
          fontcolor=self.theme["font_color"],
          fontname=self.theme["font_name"],
      )
  
      for k, n in self.nodes.items():
          label = "<tr><td cellpadding='6'>{}</td></tr>".format(n.title)
          if n.caption:
              label += "<tr><td>{}</td></tr>".format(n.caption)
          if n.repeat > 1:
              label += "<tr><td align='right' cellpadding='2'>x{}</td></tr>".format(
                  n.repeat
              )
          label = "<<table border='0' cellborder='0' cellpadding='0'>{}</table>>".format(
              label
          )
  
          # figure out tooltip
          tooltips = set()
          if len(n.params):
              tooltips.update([str(n.params)])
          if n.combo_params:
              for params in n.combo_params:
                  if len(params):
                      tooltips.update([str(params)])
  
          # figure out shape and color
          layer_overrides = self.theme.get("layer_overrides", {})
          op_overrides = layer_overrides.get(n.op or n.name, {})
  
          dot.node(
              str(k),
              label,
              tooltip=html.escape(" ".join(tooltips)),
              **op_overrides,
          )
      for a, b, label in self.edges:
          if isinstance(label, (list, tuple)):
              label = " " + "x".join([str(l or "?") for l in label])
  
          dot.edge(str(a), str(b), label)
      return dot
  
imports: from __future__ import absolute_import, division, print_function
  import os
  import re
  from random import getrandbits
  import inspect
  import numpy
  import html
label_desc: Use image node_id 14 for calling the Graph obj's underlying member method code with example usage: obj.build_dot(orientation) and returns: dot