class_docstr: Graph Convolutional Network
class_docstr_tok: ["Graph","Convolutional","Network"]
docstr: node dropout
docstr_tok: ["node","dropout"]
code: def forward(self, user_emb, entity_emb, latent_emb):
      """node dropout"""
      # node dropout
      if self.node_dropout_rate > 0.0:
          edge_index, edge_type = self.edge_sampling(
              self.edge_index, self.edge_type, self.node_dropout_rate
          )
          interact_mat = self.node_dropout(self.interact_mat)
      else:
          edge_index, edge_type = self.edge_index, self.edge_type
          interact_mat = self.interact_mat
  
      entity_res_emb = entity_emb  # [n_entities, embedding_size]
      user_res_emb = user_emb  # [n_users, embedding_size]
      relation_emb = (
          self.relation_embedding.weight
      )  # [n_relations, embedding_size]
      for i in range(len(self.convs)):
          entity_emb, user_emb = self.convs[i](
              entity_emb,
              user_emb,
              latent_emb,
              relation_emb,
              edge_index,
              edge_type,
              interact_mat,
              self.disen_weight_att,
          )
          """message dropout"""
          if self.mess_dropout_rate > 0.0:
              entity_emb = self.mess_dropout(entity_emb)
              user_emb = self.mess_dropout(user_emb)
          entity_emb = F.normalize(entity_emb)
          user_emb = F.normalize(user_emb)
          """result emb"""
          entity_res_emb = torch.add(entity_res_emb, entity_emb)
          user_res_emb = torch.add(user_res_emb, user_emb)
  
      return (
          entity_res_emb,
          user_res_emb,
          self.calculate_cor_loss(self.disen_weight_att),
      )
  
imports: import numpy
  import torch
  import torch.nn
  import torch.nn.functional
  import scipy.sparse
  from recbole.model.abstract_recommender import KnowledgeRecommender
  from recbole.model.init import xavier_uniform_initialization
  from recbole.model.layers import SparseDropout
  from recbole.model.loss import BPRLoss, EmbLoss
  from recbole.utils import InputType
label_desc: Use image node_id 3 for calling the GraphConv obj's underlying member method code with example usage: obj.forward(user_emb, entity_emb, latent_emb) and returns: entity_res_emb,  user_res_emb,  self