code: def norm(
      edge_index, num_nodes, edge_weight, improved=False, dtype=None
  ):
      if edge_weight is None:
          edge_weight = torch.ones(
              (edge_index.size(1),),
              dtype=dtype,
              device=edge_index.device,
          )
      edge_weight = edge_weight.view(-1)
      assert edge_weight.size(0) == edge_index.size(1)
  
      edge_index, edge_weight = remove_self_loops(
          edge_index, edge_weight
      )
      edge_index, _ = add_self_loops(edge_index, num_nodes=num_nodes)
      # Add edge_weight for loop edges.
      loop_weight = torch.full(
          (num_nodes,),
          1 if not improved else 2,
          dtype=edge_weight.dtype,
          device=edge_weight.device,
      )
      edge_weight = torch.cat([edge_weight, loop_weight], dim=0)
      row, col = edge_index
  
      deg = scatter_add(edge_weight, row, dim=0, dim_size=num_nodes)
      deg_inv_sqrt = deg.pow(-0.5)
      deg_inv_sqrt[deg_inv_sqrt == float("inf")] = 0
  
      return (
          edge_index,
          deg_inv_sqrt[row] * edge_weight * deg_inv_sqrt[col],
      )
  
imports: from functools import partial
  import torch
  import torch.nn.functional
  from torch.nn import Parameter
  from torch.nn import Sequential, Linear, BatchNorm1d
  from torch_scatter import scatter_add
  from torch_geometric.nn import GINConv, GCNConv, global_add_pool, global_mean_pool
  from torch_geometric.nn.conv import MessagePassing
  from torch_geometric.utils import remove_self_loops, add_self_loops
  from torch_geometric.nn.inits import glorot, zeros
label_desc: Use image node_id 3 for calling the ResGCNConv obj's underlying member method code with example usage: obj.norm(edge_index, num_nodes, edge_weight, improved, dtype) and returns: edge_index,  unknown