class_docstr: The user-item heterogeneous rating datasets :obj:`"Douban"`,
  :obj:`"Flixster"` and :obj:`"Yahoo-Music"` from the `"Inductive Matrix
  Completion Based on Graph Neural Networks"
  <https://arxiv.org/abs/1904.12058>`_ paper.
  
  Nodes represent users and items.
  Edges and features between users and items represent a (training) rating of
  the item given by the user.
  
  Args:
      root (str): Root directory where the dataset should be saved.
      name (str): The name of the dataset (:obj:`"Douban"`,
          :obj:`"Flixster"`, :obj:`"Yahoo-Music"`).
      transform (callable, optional): A function/transform that takes in an
          :obj:`torch_geometric.data.HeteroData` object and returns a
          transformed version. The data object will be transformed before
          every access. (default: :obj:`None`)
      pre_transform (callable, optional): A function/transform that takes in
          an :obj:`torch_geometric.data.HeteroData` object and returns a
          transformed version. The data object will be transformed before
          being saved to disk. (default: :obj:`None`)
      force_reload (bool, optional): Whether to re-process the dataset.
          (default: :obj:`False`)
code: def process(self) -> None:
      data = HeteroData()
  
      M = self.load_matlab_file(self.raw_paths[0], "M")
  
      if self.name == "flixster":
          user_x = self.load_matlab_file(self.raw_paths[0], "W_users")
          item_x = self.load_matlab_file(self.raw_paths[0], "W_movies")
      elif self.name == "douban":
          user_x = self.load_matlab_file(self.raw_paths[0], "W_users")
          item_x = torch.eye(M.size(1))
      elif self.name == "yahoo_music":
          user_x = torch.eye(M.size(0))
          item_x = self.load_matlab_file(self.raw_paths[0], "W_tracks")
  
      data["user"].x = user_x
      data["item"].x = item_x
  
      train_mask = self.load_matlab_file(self.raw_paths[0], "Otraining")
      train_mask = train_mask.to(torch.bool)
  
      edge_index = train_mask.nonzero().t()
      rating = M[edge_index[0], edge_index[1]]
  
      data["user", "rates", "item"].edge_index = edge_index
      data["user", "rates", "item"].rating = rating
  
      data["item", "rated_by", "user"].edge_index = edge_index.flip([0])
      data["item", "rated_by", "user"].rating = rating
  
      test_mask = self.load_matlab_file(self.raw_paths[0], "Otest")
      test_mask = test_mask.to(torch.bool)
  
      edge_label_index = test_mask.nonzero().t()
      edge_label = M[edge_label_index[0], edge_label_index[1]]
  
      data["user", "rates", "item"].edge_label_index = edge_label_index
      data["user", "rates", "item"].edge_label = edge_label
  
      if self.pre_transform is not None:
          data = self.pre_transform(data)
  
      self.save([data], self.processed_paths[0])
  
file_path: pytorch_geometric/torch_geometric/datasets/igmc_dataset.py
imports: import os.path
  from typing import Callable, Optional
  import torch
  from torch import Tensor
  from torch_geometric.data import HeteroData, InMemoryDataset, download_url
label_desc: Use image node_id 8 for calling the IGMCDataset obj's underlying member method code with example usage: obj.process() without return types