code: def process(self):
      process_raw_data(self.raw_dir, self.processd_dir)
      id_time_features = torch.Tensor(
          numpy.load(
              os.path.join(self.processd_dir, "id_time_features.npy")
          )
      )
      id_label = torch.IntTensor(
          numpy.load(os.path.join(self.processd_dir, "id_label.npy"))
      )
      src_dst_time = torch.IntTensor(
          numpy.load(
              os.path.join(self.processd_dir, "src_dst_time.npy")
          )
      )
  
      src = src_dst_time[:, 0]
      dst = src_dst_time[:, 1]
      # id_label[:, 0] is used to add self loop
      if self.self_loop:
          if self.reverse_edge:
              g = dgl.graph(
                  data=(
                      torch.cat((src, dst, id_label[:, 0])),
                      torch.cat((dst, src, id_label[:, 0])),
                  ),
                  num_nodes=id_label.shape[0],
              )
              g.edata["timestamp"] = torch.cat(
                  (
                      src_dst_time[:, 2],
                      src_dst_time[:, 2],
                      id_time_features[:, 1].int(),
                  )
              )
          else:
              g = dgl.graph(
                  data=(
                      torch.cat((src, id_label[:, 0])),
                      torch.cat((dst, id_label[:, 0])),
                  ),
                  num_nodes=id_label.shape[0],
              )
              g.edata["timestamp"] = torch.cat(
                  (src_dst_time[:, 2], id_time_features[:, 1].int())
              )
      else:
          if self.reverse_edge:
              g = dgl.graph(
                  data=(torch.cat((src, dst)), torch.cat((dst, src))),
                  num_nodes=id_label.shape[0],
              )
              g.edata["timestamp"] = torch.cat(
                  (src_dst_time[:, 2], src_dst_time[:, 2])
              )
          else:
              g = dgl.graph(
                  data=(src, dst), num_nodes=id_label.shape[0]
              )
              g.edata["timestamp"] = src_dst_time[:, 2]
  
      time_features = id_time_features[:, 1:]
      label = id_label[:, 1]
      g.ndata["label"] = label
      g.ndata["feat"] = time_features
  
      # used to construct time-based sub-graph.
      node_mask_by_time = []
      start_time = int(torch.min(id_time_features[:, 1]))
      end_time = int(torch.max(id_time_features[:, 1]))
      for i in range(start_time, end_time + 1):
          node_mask = id_time_features[:, 1] == i
          node_mask_by_time.append(node_mask)
  
      return g, node_mask_by_time
  
file_path: dgl/examples/pytorch/evolveGCN/dataset.py
imports: import os
  import dgl
  import numpy
  import pandas
  import torch
label_desc: Use image node_id 2 for calling the EllipticDataset obj's underlying member method code with example usage: obj.process() and returns: g,  node_mask_by_time