code: def process(self):
      transform = RandomLinkSplit(
          num_val=0.05,
          num_test=0.1,
          is_undirected=True,
          split_labels=True,
      )
      train_data, val_data, test_data = transform(self.data)
  
      self._max_z = 0
  
      # Collect a list of subgraphs for training, validation and testing:
      train_pos_data_list = self.extract_enclosing_subgraphs(
          train_data.edge_index, train_data.pos_edge_label_index, 1
      )
      train_neg_data_list = self.extract_enclosing_subgraphs(
          train_data.edge_index, train_data.neg_edge_label_index, 0
      )
  
      val_pos_data_list = self.extract_enclosing_subgraphs(
          val_data.edge_index, val_data.pos_edge_label_index, 1
      )
      val_neg_data_list = self.extract_enclosing_subgraphs(
          val_data.edge_index, val_data.neg_edge_label_index, 0
      )
  
      test_pos_data_list = self.extract_enclosing_subgraphs(
          test_data.edge_index, test_data.pos_edge_label_index, 1
      )
      test_neg_data_list = self.extract_enclosing_subgraphs(
          test_data.edge_index, test_data.neg_edge_label_index, 0
      )
  
      # Convert node labeling to one-hot features.
      for data in chain(
          train_pos_data_list,
          train_neg_data_list,
          val_pos_data_list,
          val_neg_data_list,
          test_pos_data_list,
          test_neg_data_list,
      ):
          # We solely learn links from structure, dropping any node features:
          data.x = F.one_hot(data.z, self._max_z + 1).to(torch.float)
  
      train_data_list = train_pos_data_list + train_neg_data_list
      self.save(train_data_list, self.processed_paths[0])
      val_data_list = val_pos_data_list + val_neg_data_list
      self.save(val_data_list, self.processed_paths[1])
      test_data_list = test_pos_data_list + test_neg_data_list
      self.save(test_data_list, self.processed_paths[2])
  
imports: import math
  import os.path
  import time
  from itertools import chain
  import numpy
  import torch
  import torch.nn.functional
  from scipy.sparse.csgraph import shortest_path
  from sklearn.metrics import roc_auc_score
  from torch.nn import BCEWithLogitsLoss, Conv1d, MaxPool1d, ModuleList
  from torch_geometric.data import Data, InMemoryDataset
  from torch_geometric.datasets import Planetoid
  from torch_geometric.loader import DataLoader
  from torch_geometric.nn import MLP, GCNConv, SortAggregation
  from torch_geometric.transforms import RandomLinkSplit
  from torch_geometric.utils import k_hop_subgraph, to_scipy_sparse_matrix
label_desc: Use image node_id 3 for calling the SEALDataset obj's underlying member method code with example usage: obj.process() without return types