code: def gcn_norm(
      edge_index,
      edge_weight=None,
      num_nodes=None,
      improved=False,
      add_self_loops=True,
      dtype=None,
  ):
      fill_value = 2.0 if improved else 1.0
  
      if isinstance(edge_index, SparseTensor):
          adj_t = edge_index
          if not adj_t.has_value():
              adj_t = adj_t.fill_value(1.0, dtype=dtype)
          if add_self_loops:
              adj_t = fill_diag(adj_t, fill_value)
          deg = sum(adj_t, dim=1)
          deg_inv_sqrt = deg.pow_(-0.5)
          deg_inv_sqrt.masked_fill_(deg_inv_sqrt == float("inf"), 0.0)
          adj_t = mul(adj_t, deg_inv_sqrt.view(-1, 1))
          adj_t = mul(adj_t, deg_inv_sqrt.view(1, -1))
          return adj_t
  
      else:
          num_nodes = maybe_num_nodes(edge_index, num_nodes)
  
          if edge_weight is None:
              edge_weight = torch.ones(
                  (edge_index.size(1),),
                  dtype=dtype,
                  device=edge_index.device,
              )
  
          if add_self_loops:
              edge_index, tmp_edge_weight = add_remaining_self_loops(
                  edge_index, edge_weight, fill_value, num_nodes
              )
              assert tmp_edge_weight is not None
              edge_weight = tmp_edge_weight
  
          row, col = edge_index[0], edge_index[1]
          deg = scatter_add(edge_weight, col, dim=0, dim_size=num_nodes)
          deg_inv_sqrt = deg.pow_(-0.5)
          deg_inv_sqrt.masked_fill_(deg_inv_sqrt == float("inf"), 0)
          return (
              edge_index,
              deg_inv_sqrt[row] * edge_weight * deg_inv_sqrt[col],
          )
  
file_path: AutoGL/autogl/module/model/pyg/robust/nn/gcn_conv.py
imports: import torch
  from torch.nn import Parameter
  from torch_scatter import scatter_add
  from torch_geometric.nn.conv import MessagePassing
  from torch_geometric.utils import add_remaining_self_loops, to_undirected
  from .inits import glorot, zeros
label_desc: Use image node_id 3 for calling a global function with example usage: gcn_norm(edge_index, edge_weight, num_nodes, improved, add__loops, dtype) and returns: adj_t, edge_index,  unknown