class_docstr: DefaultVizParser provde a set of logics to parse a various relay types.
  These logics are inspired and heavily based on
  `visualize` function in https://tvm.apache.org/2020/07/14/bert-pytorch-tvm
class_docstr_tok: ["DefaultVizParser","provde","a","set","of","logics","to","parse","a","various","relay","types",".","These","logics","are","inspired","and","heavily","based","on","`","visualize","`","function","in","https",":","\/\/tvm.apache.org\/2020\/07\/14\/bert-pytorch-tvm"]
docstr: Render rule for a relay function node
docstr_tok: ["Render","rule","for","a","relay","function","node"]
code: def _function(
      self,
      node: relay.Expr,
      node_to_id: Dict[relay.Expr, str],
  ) -> Tuple[Union[VizNode, None], List[VizEdge]]:
      """Render rule for a relay function node"""
      node_details = []
      name = ""
      func_attrs = node.attrs
      if func_attrs:
          node_details = [
              f"{k}: {func_attrs.get_str(k)}" for k in func_attrs.keys()
          ]
          # "Composite" might from relay.transform.MergeComposite
          if "Composite" in func_attrs.keys():
              name = func_attrs["Composite"]
      node_id = node_to_id[node]
  
      # Body -> FunctionNode
      viz_node = VizNode(
          node_id, f"Func {name}", "\n".join(node_details)
      )
      viz_edges = [VizEdge(node_to_id[node.body], node_id)]
      return viz_node, viz_edges
  
imports: import abc
  from typing import Dict, Union, Tuple, List
  import tvm
  from tvm import relay
label_desc: Use image node_id 3 for calling the DefaultVizParser obj's underlying member method code with example usage: obj._function(node, node_to_id) and returns: viz_node,  viz_edges