docstr: Return the dot string that can be used to show the block
  with dot. Const ops are not added to the dot string.
  
  * Input vars : yellow
  * output vars : goldenrod2
  * op names that user wants to highlight, provided in "highlight_debug_op_names": cyan
  * op types that user wants to highlight, provided in "highlight_debug_op_types": green
  
  Examples
  --------
  >>> import graphviz
  >>> graphviz.Source(block.get_dot_string()).view()
  >>> # OR
  >>> graphviz.Source(block.get_dot_string()).view(filename='graph.pdf')
docstr_tok: ["Return","the","dot","string","that","can","be","used","to","show","the","block","with","dot",".","Const","ops","are","not","added","to","the","dot","string",".","*","Input","vars",":","yellow","*","output","vars",":","goldenrod2","*","op","names","that","user","wants","to","highlight",",","provided","in","``","highlight_debug_op_names","''",":","cyan","*","op","types","that","user","wants","to","highlight",",","provided","in","``","highlight_debug_op_types","''",":","green","Examples","--","--","--","--",">",">",">","import","graphviz",">",">",">","graphviz.Source","(","block.get_dot_string","(",")",")",".view","(",")",">",">",">","#","OR",">",">",">","graphviz.Source","(","block.get_dot_string","(",")",")",".view","(","filename='graph.pdf","'",")"]
code: def get_dot_string(
      self,
      function_name="main",
      prefix_id=0,
      highlight_debug_op_types=None,
      highlight_debug_op_names=None,
  ):
      """
      Return the dot string that can be used to show the block
      with dot. Const ops are not added to the dot string.
  
      * Input vars : yellow
      * output vars : goldenrod2
      * op names that user wants to highlight, provided in "highlight_debug_op_names": cyan
      * op types that user wants to highlight, provided in "highlight_debug_op_types": green
  
      Examples
      --------
      >>> import graphviz
      >>> graphviz.Source(block.get_dot_string()).view()
      >>> # OR
      >>> graphviz.Source(block.get_dot_string()).view(filename='graph.pdf')
      """
      if highlight_debug_op_types is None:
          highlight_debug_op_types = []
      if highlight_debug_op_names is None:
          highlight_debug_op_names = []
  
      dotstring = "digraph g {\n" + "\tcompound=true;\n"
  
      input_var_names = list(self.inputs.keys())
      output_var_names = [v.name for v in self.outputs]
  
      debug_op_types = []
      if len(highlight_debug_op_types) > 0:
          for op in self.operations:
              if op.op_type in highlight_debug_op_types:
                  debug_op_types.append(op.name)
  
      vis = DotVisitor()
      vis.highlight_nodes(input_var_names, "yellow").highlight_nodes(
          output_var_names, "goldenrod2"
      ).highlight_nodes(
          highlight_debug_op_names, "cyan"
      ).highlight_nodes(
          debug_op_types, "green"
      )
  
      vis.visit_all(self, nodename_prefix=str(prefix_id))
      res = vis.get_result(
          "subgraph", "cluster_" + function_name.replace("/", "_")
      )
      dotstring += "\n".join("\t" + r for r in res.split("\n")) + "\n"
      dotstring += "}"
      return dotstring
  
imports: from collections import Counter, OrderedDict
  import copy
  import logging
  import numpy
  from six import string_types
  from .None import SPACES, types
  from .var import Var, InternalVar, ListVar
  from .visitors.dot_visitor import DotVisitor
  from .types.symbolic import k_used_symbols, k_num_internal_syms, any_symbolic, is_symbolic
  from .input_type import TupleInputType
label_desc: Use image node_id 22 for calling the Block obj's underlying member method code with example usage: obj.get_dot_string(function_name, prefix_id, highlight_debug_op_types, highlight_debug_op_names) and returns: dotstring