class_docstr: This class is used to represent a graph node which consists of multiple jit traced nodes. In a pytorch trace graph,
  there are multiple nodes are traced for one torch.nn.Module object, we group them together to form a single node to
  represent the torch.nn.Module object. We also group some functional call trace nodes together to form a new node.
docstr: Parameters:
  -----------
  name: str
      node name, such as `conv1`, `backbone.classifier`
  unique_name: str
      A global unique name for current node. Due to some modules,
      such as relu, may be reused several times, so the scopename
      is not suitable as the global unique identifier, so we add a
      unique_name for each node as the global unique identifier.
      We should use the unique_name to traverset the module graph.
  node_type: str
      `module` or `func`
  op_type: str
      operation type, such as `Conv2d`, `aten::view`
  node_cpps: list of torch._C.Node
      jit trace nodes which are included in this new node
  inputs: list of str
      All the inputs of this node, each element is debugName of one input
  outputs: list of str
      All the outputs of this node, each element is debugName of one output
  key_node: torch._C.Node
      The key node of this NodePyGroup.
code: def __init__(
      self,
      name,
      unique_name,
      node_type,
      op_type,
      node_cpps,
      inputs=None,
      outputs=None,
      key_node=None,
  ):
      """
      Parameters:
      -----------
      name: str
          node name, such as `conv1`, `backbone.classifier`
      unique_name: str
          A global unique name for current node. Due to some modules,
          such as relu, may be reused several times, so the scopename
          is not suitable as the global unique identifier, so we add a
          unique_name for each node as the global unique identifier.
          We should use the unique_name to traverset the module graph.
      node_type: str
          `module` or `func`
      op_type: str
          operation type, such as `Conv2d`, `aten::view`
      node_cpps: list of torch._C.Node
          jit trace nodes which are included in this new node
      inputs: list of str
          All the inputs of this node, each element is debugName of one input
      outputs: list of str
          All the outputs of this node, each element is debugName of one output
      key_node: torch._C.Node
          The key node of this NodePyGroup.
      """
      super(NodePyGroup, self).__init__(name, [])
      self.node_cpps = node_cpps
      self.name = name
      self.unique_name = unique_name
      self.op_type = op_type
      self.type = node_type
      self.nodes = []
      self.auxiliary = None
      self.add_nodes(node_cpps)
      self.inputs = inputs
      self.outputs = outputs
      # The core node in this NodePyGroup
      self.key_node = key_node
  
imports: import logging
  import queue
  import re
  from collections import defaultdict
  import torch
  from torch.utils.tensorboard._pytorch_graph import NodePy, NodePyIO, NodePyOP, GraphPy
label_desc: Use image node_id 1 to create a new NodePyGroup object from inherited base classes: NodePy with example: obj = NodePyGroup(name, unique_name, node_type, op_type, node_cpps, inputs, outputs, key_node)