class_docstr: NNCF is an neural network enhanced matrix factorization model which also captures neighborhood information.
  We implement the NNCF model with three ways to process neighborhood information.
code: def forward(self, user, item):
      user_embedding = self.user_embedding(user)
      item_embedding = self.item_embedding(item)
  
      user_neigh_input, item_neigh_input = self.get_neigh_info(
          user, item
      )
      user_neigh_embedding = self.user_neigh_embedding(user_neigh_input)
      item_neigh_embedding = self.item_neigh_embedding(item_neigh_input)
      user_neigh_embedding = user_neigh_embedding.permute(0, 2, 1)
      user_neigh_conv_embedding = self.user_conv(user_neigh_embedding)
      # batch_size * out_channel * pool_size
      batch_size = user_neigh_conv_embedding.size(0)
      user_neigh_conv_embedding = user_neigh_conv_embedding.view(
          batch_size, -1
      )
      item_neigh_embedding = item_neigh_embedding.permute(0, 2, 1)
      item_neigh_conv_embedding = self.item_conv(item_neigh_embedding)
      # batch_size * out_channel * pool_size
      item_neigh_conv_embedding = item_neigh_conv_embedding.view(
          batch_size, -1
      )
      mf_vec = torch.mul(user_embedding, item_embedding)
      last = torch.cat(
          (
              mf_vec,
              user_neigh_conv_embedding,
              item_neigh_conv_embedding,
          ),
          dim=-1,
      )
  
      output = self.mlp_layers(last)
      out = self.out_layer(output)
      out = out.squeeze(-1)
      return out
  
imports: import torch
  import torch.nn
  from torch.nn.init import normal_
  from recbole.model.abstract_recommender import GeneralRecommender
  from recbole.model.layers import MLPLayers
  from recbole.utils import InputType
  from recbole.model.general_recommender.itemknn import ComputeSimilarity
  import numpy
label_desc: Use image node_id 10 for calling the NNCF obj's underlying member method code with example usage: obj.forward(user, item) and returns: out