code: def forward(self, adj, h):
      mb, node, _ = h.shape
      if self.add_self:
          h_node = self.linear_node(h)
      m = self.linear_edge(h)
      m = m.reshape(mb, node, self.out_ch, self.num_edge_type)
      m = m.permute(0, 3, 1, 2)  # m: (batchsize, edge_type, node, ch)
      hr = torch.matmul(adj, m)  # hr: (batchsize, edge_type, node, ch)
      hr = hr.sum(dim=1)  # hr: (batchsize, node, ch)
      if self.add_self:
          return hr + h_node  #
      else:
          return hr
  
file_path: DIG/dig/ggraph/method/GraphEBM/energy_func.py
imports: import torch
  from torch import nn
  from torch.nn import functional
label_desc: Use image node_id 2 for calling the GraphConv obj's underlying member method code with example usage: obj.forward(adj, h) and returns: unknown, hr