code: def forward(self, graph, features):
      g = graph.local_var()
      h_in = self.dropout(features)
      h_hop = [h_in]
  
      D_norm = (
          g.ndata["train_D_norm"]
          if "train_D_norm" in g.ndata
          else g.ndata["full_D_norm"]
      )
      for _ in range(self.order):  # forward propagation
          g.ndata["h"] = h_hop[-1]
          if "w" not in g.edata:
              g.edata["w"] = th.ones((g.num_edges(),)).to(
                  features.device
              )
          g.update_all(fn.u_mul_e("h", "w", "m"), fn.sum("m", "h"))
          h = g.ndata.pop("h")
          h = h * D_norm
          h_hop.append(h)
  
      h_part = [
          self.feat_trans(ft, idx) for idx, ft in enumerate(h_hop)
      ]
      if self.aggr == "mean":
          h_out = h_part[0]
          for i in range(len(h_part) - 1):
              h_out = h_out + h_part[i + 1]
      elif self.aggr == "concat":
          h_out = th.cat(h_part, 1)
      else:
          raise NotImplementedError
  
      return h_out
  
file_path: dgl/examples/pytorch/graphsaint/modules.py
imports: import dgl.function
  import torch
  import torch.nn
  import torch.nn.functional
label_desc: Use image node_id 4 for calling the GCNLayer obj's underlying member method code with example usage: obj.forward(graph, features) and returns: h_out