class_docstr: Applies the GCN normalization from the `"Semi-supervised Classification
  with Graph Convolutional Networks" <https://arxiv.org/abs/1609.02907>`_
  paper (functional name: :obj:`gcn_norm`).
  
  .. math::
      \mathbf{\hat{A}} = \mathbf{\hat{D}}^{-1/2} (\mathbf{A} + \mathbf{I})
      \mathbf{\hat{D}}^{-1/2}
  
  where :math:`\hat{D}_{ii} = \sum_{j=0} \hat{A}_{ij} + 1`.
code: def forward(self, data: Data) -> Data:
      gcn_norm = torch_geometric.nn.conv.gcn_conv.gcn_norm
      assert "edge_index" in data or "adj_t" in data
  
      if "edge_index" in data:
          data.edge_index, data.edge_weight = gcn_norm(
              data.edge_index,
              data.edge_weight,
              data.num_nodes,
              add_self_loops=self.add_self_loops,
          )
      else:
          data.adj_t = gcn_norm(
              data.adj_t, add_self_loops=self.add_self_loops
          )
  
      return data
  
file_path: pytorch_geometric/torch_geometric/transforms/gcn_norm.py
imports: import torch_geometric
  from torch_geometric.data import Data
  from torch_geometric.data.datapipes import functional_transform
  from torch_geometric.transforms import BaseTransform
label_desc: Use image node_id 2 for calling the GCNNorm obj's underlying member method code with example usage: obj.forward(data) and returns: data