code: def load_acm(remove_self_loop):
      url = "dataset/ACM3025.pkl"
      data_path = get_download_dir() + "/ACM3025.pkl"
      download(_get_dgl_url(url), path=data_path)
  
      with open(data_path, "rb") as f:
          data = pickle.load(f)
  
      labels, features = (
          torch.from_numpy(data["label"].todense()).long(),
          torch.from_numpy(data["feature"].todense()).float(),
      )
      num_classes = labels.shape[1]
      labels = labels.nonzero()[:, 1]
  
      if remove_self_loop:
          num_nodes = data["label"].shape[0]
          data["PAP"] = sparse.csr_matrix(
              data["PAP"] - np.eye(num_nodes)
          )
          data["PLP"] = sparse.csr_matrix(
              data["PLP"] - np.eye(num_nodes)
          )
  
      # Adjacency matrices for meta path based neighbors
      # (Mufei): I verified both of them are binary adjacency matrices with self loops
      author_g = dgl.from_scipy(data["PAP"])
      subject_g = dgl.from_scipy(data["PLP"])
      gs = [author_g, subject_g]
  
      train_idx = torch.from_numpy(data["train_idx"]).long().squeeze(0)
      val_idx = torch.from_numpy(data["val_idx"]).long().squeeze(0)
      test_idx = torch.from_numpy(data["test_idx"]).long().squeeze(0)
  
      num_nodes = author_g.num_nodes()
      train_mask = get_binary_mask(num_nodes, train_idx)
      val_mask = get_binary_mask(num_nodes, val_idx)
      test_mask = get_binary_mask(num_nodes, test_idx)
  
      print("dataset loaded")
      pprint(
          {
              "dataset": "ACM",
              "train": train_mask.sum().item() / num_nodes,
              "val": val_mask.sum().item() / num_nodes,
              "test": test_mask.sum().item() / num_nodes,
          }
      )
  
      return (
          gs,
          features,
          labels,
          num_classes,
          train_idx,
          val_idx,
          test_idx,
          train_mask,
          val_mask,
          test_mask,
      )
  
imports: import datetime
  import errno
  import os
  import pickle
  import random
  from pprint import pprint
  import dgl
  import numpy
  import torch
  from dgl.data.utils import _get_dgl_url, download, get_download_dir
  from scipy import io, sparse
label_desc: Use image node_id 8 for calling a global function with example usage: load_acm(remove__loop) and returns: gs,  features,  labels,  num_classes,  train_idx,  val_idx,  test_idx,  train_mask,  val_mask,  test_mask