code: def __init__(
      self,
      rating_values,
      total_users,
      total_items,
      activation_func,
      gcn_agg_units,
      gcn_out_units,
      gcn_dropout,
      gcn_agg_accum,
      share_param,
      gen_r_num_basis_func,
      verbose,
      seed,
  ):
      self.rating_values = rating_values
      self.total_users = total_users
      self.total_items = total_items
      self.device = torch.device(
          "cuda" if torch.cuda.is_available() else "cpu"
      )
  
      self.verbose = verbose
      if verbose:
          logging.basicConfig(level=logging.INFO)
  
      self.seed = seed
      if seed is not None:
          torch.manual_seed(seed)
          if torch.cuda.is_available():
              torch.cuda.manual_seed_all(seed)
  
      # Build Net
      self.net = NeuralNetwork(
          activation_func,
          rating_values,
          total_users,
          total_items,
          gcn_agg_units,
          gcn_out_units,
          gcn_dropout,
          gcn_agg_accum,
          gen_r_num_basis_func,
          share_param,
          self.device,
      ).to(self.device)
  
imports: import logging
  import time
  from collections import defaultdict
  import torch
  from torch import nn
  import dgl
  import numpy
  import scipy.sparse
  from tqdm import tqdm
  from .nn_modules import NeuralNetwork
  from .utils import get_optimizer, torch_net_info, torch_total_param_num
label_desc: Use image node_id 1 to create a new Model object  with example: obj = Model(rating_values, total_users, total_items, activation_func, gcn_agg_units, gcn_out_units, gcn_dropout, gcn_agg_accum, share_param, gen_r_num_basis_func, verbose, seed)