code: def forward(self, bipartite, feat):
      if isinstance(feat, tuple):
          srcfeat, dstfeat = feat
      else:
          srcfeat = feat
          dstfeat = feat[: bipartite.num_dst_nodes()]
      graph = bipartite.local_var()
  
      graph.srcdata["h"] = srcfeat
      graph.update_all(
          fn.u_mul_e("h", "affine", "m"), fn.sum(msg="m", out="h")
      )
  
      gcn_feat = torch.cat([dstfeat, graph.dstdata["h"]], dim=-1)
      out = self.mlp(gcn_feat)
      return out
  
file_path: dgl/examples/pytorch/hilander/models/graphconv.py
imports: import dgl.function
  import torch
  import torch.nn
  import torch.nn.functional
  from dgl.nn.pytorch import GATConv
  from torch.nn import init
label_desc: Use image node_id 2 for calling the GraphConvLayer obj's underlying member method code with example usage: obj.forward(bipartite, feat) and returns: out