code: def _aug_data(self, data):
      node_num, _ = data.x.size()
      _, edge_num = data.edge_index.size()
      permute_num = int(edge_num * self.aug_ratio)
  
      edge_index = data.edge_index.numpy()
  
      idx_add = np.random.choice(node_num, (2, permute_num))
  
      # idx_add = [[idx_add[0, n], idx_add[1, n]] for n in range(permute_num) if not (idx_add[0, n], idx_add[1, n]) in edge_index]
      # edge_index = [edge_index[n] for n in range(edge_num) if not n in np.random.choice(edge_num, permute_num, replace=False)] + idx_add
  
      edge_index = np.concatenate(
          (
              edge_index[
                  :,
                  np.random.choice(
                      edge_num, (edge_num - permute_num), replace=False
                  ),
              ],
              idx_add,
          ),
          axis=1,
      )
      data.edge_index = torch.tensor(edge_index)
  
      return data
  
imports: import random
  import torch
  import numpy
  from itertools import repeat, product
  from torch_geometric.data import Batch
label_desc: Use image node_id 2 for calling the PermuteEdge obj's underlying member method code with example usage: obj._aug_data(data) and returns: data