class_docstr: SGL is a GCN-based recommender model.
  
  SGL supplements the classical supervised task of recommendation with an auxiliary
  self supervised task, which reinforces node representation learning via self-
  discrimination.Specifically,SGL generates multiple views of a node, maximizing the
  agreement between different views of the same node compared to that of other nodes.
  SGL devises three operators to generate the views — node dropout, edge dropout, and
  random walk — that change the graph structure in different manners.
  
  We implement the model following the original author with a pairwise training mode.
code: def forward(self, graph):
      main_ego = torch.cat(
          [self.user_embedding.weight, self.item_embedding.weight]
      )
      all_ego = [main_ego]
      if isinstance(graph, list):
          for sub_graph in graph:
              main_ego = torch.sparse.mm(sub_graph, main_ego)
              all_ego.append(main_ego)
      else:
          for i in range(self.n_layers):
              main_ego = torch.sparse.mm(graph, main_ego)
              all_ego.append(main_ego)
      all_ego = torch.stack(all_ego, dim=1)
      all_ego = torch.mean(all_ego, dim=1, keepdim=False)
      user_emd, item_emd = torch.split(
          all_ego, [self.n_users, self.n_items], dim=0
      )
  
      return user_emd, item_emd
  
imports: import numpy
  import scipy.sparse
  import torch
  from recbole.model.abstract_recommender import GeneralRecommender
  from recbole.model.init import xavier_uniform_initialization
  from recbole.model.loss import BPRLoss, EmbLoss
  from recbole.utils import InputType
  import torch.nn.functional
label_desc: Use image node_id 6 for calling the SGL obj's underlying member method code with example usage: obj.forward(graph) and returns: user_emd,  item_emd