code: def forward(self, g, users=None, pos_items=None, neg_items=None):
      h_dict = {ntype: self.feature_dict[ntype] for ntype in g.ntypes}
      # obtain features of each layer and concatenate them all
      user_embeds = h_dict[USER_KEY]
      item_embeds = h_dict[ITEM_KEY]
  
      for k, layer in enumerate(self.layers):
          h_dict = layer(g, h_dict)
          user_embeds = user_embeds + (h_dict[USER_KEY] * 1 / (k + 1))
          item_embeds = item_embeds + (h_dict[ITEM_KEY] * 1 / (k + 1))
  
      u_g_embeddings = (
          user_embeds if users is None else user_embeds[users, :]
      )
      pos_i_g_embeddings = (
          item_embeds
          if pos_items is None
          else item_embeds[pos_items, :]
      )
      neg_i_g_embeddings = (
          item_embeds
          if neg_items is None
          else item_embeds[neg_items, :]
      )
  
      return u_g_embeddings, pos_i_g_embeddings, neg_i_g_embeddings
  
file_path: cornac/cornac/models/lightgcn/lightgcn.py
imports: import torch
  import torch.nn
  import torch.nn.functional
  import dgl
  import dgl.function
label_desc: Use image node_id 2 for calling the Model obj's underlying member method code with example usage: obj.forward(g, users, pos_items, neg_items) and returns: u_g_embeddings,  pos_i_g_embeddings,  neg_i_g_embeddings