class_docstr: The heterogeneous AMiner dataset from the `"metapath2vec: Scalable
  Representation Learning for Heterogeneous Networks"
  <https://ericdongyx.github.io/papers/
  KDD17-dong-chawla-swami-metapath2vec.pdf>`_ paper, consisting of nodes from
  type :obj:`"paper"`, :obj:`"author"` and :obj:`"venue"`.
  Venue categories and author research interests are available as ground
  truth labels for a subset of nodes.
  
  Args:
      root (str): Root directory where the dataset should be saved.
      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:
      import pandas as pd
  
      data = HeteroData()
  
      # Get author labels.
      path = osp.join(self.raw_dir, "id_author.txt")
      author = pd.read_csv(
          path, sep="\t", names=["idx", "name"], index_col=1
      )
  
      path = osp.join(
          self.raw_dir, "label", "googlescholar.8area.author.label.txt"
      )
      df = pd.read_csv(path, sep=" ", names=["name", "y"])
      df = df.join(author, on="name")
  
      data["author"].y = torch.from_numpy(df["y"].values) - 1
      data["author"].y_index = torch.from_numpy(df["idx"].values)
  
      # Get venue labels.
      path = osp.join(self.raw_dir, "id_conf.txt")
      venue = pd.read_csv(
          path, sep="\t", names=["idx", "name"], index_col=1
      )
  
      path = osp.join(
          self.raw_dir, "label", "googlescholar.8area.venue.label.txt"
      )
      df = pd.read_csv(path, sep=" ", names=["name", "y"])
      df = df.join(venue, on="name")
  
      data["venue"].y = torch.from_numpy(df["y"].values) - 1
      data["venue"].y_index = torch.from_numpy(df["idx"].values)
  
      # Get paper<->author connectivity.
      path = osp.join(self.raw_dir, "paper_author.txt")
      paper_author = pd.read_csv(path, sep="\t", header=None)
      paper_author = torch.from_numpy(paper_author.values)
      paper_author = paper_author.t().contiguous()
      M, N = int(paper_author[0].max() + 1), int(
          paper_author[1].max() + 1
      )
      paper_author = coalesce(paper_author, num_nodes=max(M, N))
      data["paper"].num_nodes = M
      data["author"].num_nodes = N
      data["paper", "written_by", "author"].edge_index = paper_author
      data["author", "writes", "paper"].edge_index = paper_author.flip(
          [0]
      )
  
      # Get paper<->venue connectivity.
      path = osp.join(self.raw_dir, "paper_conf.txt")
      paper_venue = pd.read_csv(path, sep="\t", header=None)
      paper_venue = torch.from_numpy(paper_venue.values)
      paper_venue = paper_venue.t().contiguous()
      M, N = int(paper_venue[0].max() + 1), int(
          paper_venue[1].max() + 1
      )
      paper_venue = coalesce(paper_venue, num_nodes=max(M, N))
      data["venue"].num_nodes = N
      data["paper", "published_in", "venue"].edge_index = paper_venue
      data["venue", "publishes", "paper"].edge_index = paper_venue.flip(
          [0]
      )
  
      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/aminer.py
imports: import os
  import os.path
  from typing import Callable, List, Optional
  import torch
  from torch_geometric.data import HeteroData, InMemoryDataset, download_url, extract_zip
  from torch_geometric.io import fs
  from torch_geometric.utils import coalesce
label_desc: Use image node_id 5 for calling the AMiner obj's underlying member method code with example usage: obj.process() without return types