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 var node
docstr_tok: ["Render","rule","for","a","relay","var","node"]
code: def _var(
      self,
      node: relay.Expr,
      relay_param: Dict[str, tvm.runtime.NDArray],
      node_to_id: Dict[relay.Expr, str],
  ) -> Tuple[Union[VizNode, None], List[VizEdge]]:
      """Render rule for a relay var node"""
  
      node_id = node_to_id[node]
      name_hint = node.name_hint
      node_detail = f"name_hint: {name_hint}"
      node_type = (
          "Var(Param)" if name_hint in relay_param else "Var(Input)"
      )
  
      if node.type_annotation is not None:
          if hasattr(node.type_annotation, "shape"):
              shape = tuple(map(int, node.type_annotation.shape))
              dtype = node.type_annotation.dtype
              node_detail = (
                  f"{node_detail}\nshape: {shape}\ndtype: {dtype}"
              )
          else:
              node_detail = f"{node_detail}\ntype_annotation: {node.type_annotation}"
  
      # only node
      viz_node = VizNode(node_id, node_type, node_detail)
      viz_edges = []
      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 2 for calling the DefaultVizParser obj's underlying member method code with example usage: obj._var(node, relay_param, node_to_id) and returns: viz_node,  viz_edges