code: def main(dataset, adj, features, device):
      # from deeprobust.graph.data import PrePtbDataset
      # perturbed_data = PrePtbDataset(root='/tmp/', name=dataset, attack_method='meta', ptb_rate=0.2)
      # modified_adj = perturbed_data.adj
  
      # Setup Surrogate model
      surrogate = GCN_attack(
          nfeat=features.shape[1],
          nclass=labels.max().item() + 1,
          n_edge=adj.nonzero()[0].shape[0],
          nhid=16,
          dropout=0,
          with_relu=False,
          with_bias=False,
          device=args.device,
      )
  
      surrogate = surrogate.to(args.device)
      surrogate.fit(
          features, adj, labels, idx_train, train_iters=201
      )  # change this train_iters to 201: train_iters=201
  
      # Setup Attack Model
      # model = Metattack(model=surrogate, nnodes=adj.shape[0], feature_shape=features.shape,  attack_structure=True, attack_features=False, device=args.device, lambda_=0.5) # lambda_ is used to weight the two objectives in Eq. (10) in the paper.
      # model = model.to(args.device)
  
      # """save the mettacked adj"""
      # model.attack(features, adj, labels, idx_train, idx_unlabeled, perturbations, ll_constraint=False)
      # modified_adj = sp.csr_matrix(model.modified_adj.cpu())
  
      # from deeprobust.graph.data import PrePtbDataset
      perturbed_data = PrePtbDataset(
          root="/tmp/", name=dataset, attack_method="meta", ptb_rate=0.2
      )
      modified_adj = perturbed_data.adj
  
      # Check the performance of GCN under directed attack without defense
      # flag = False
      # print('=== testing GNN on original(clean) graph ===')
      # print("acc_test:",test(adj, features, device, attention=flag))
      # print('=== testing GCN on perturbed graph ===')
      # print("acc_test:",test(modified_adj, features, device, attention=flag))
  
      # Use GNNGuard for defense
      flag = True
      print("=== testing GNN on original(clean) graph + GNNGuard ===")
      print("acc_test:", test(adj, features, device, attention=flag))
      print("=== testing GCN on perturbed graph + GNNGuard ===")
      print(
          "acc_test:",
          test(modified_adj, features, device, attention=flag),
      )
  
imports: import os
  import torch
  from deeprobust.graph.targeted_attack import Nettack
  from deeprobust.graph.utils import *
  from deeprobust.graph.data import Dataset
  from deeprobust.graph.global_attack import Metattack
  import argparse
  from deeprobust.graph.defense import *
  from deeprobust.graph.data import Dataset, PrePtbDataset, Dpr2Pyg, AmazonPyg
  from scipy.sparse import csr_matrix
  from tqdm import tqdm
  import scipy
  import scipy.sparse
  import numpy
  from sklearn.preprocessing import normalize
  import pickle
  from autogl.module.model.pyg import AutoGNNGuard, AutoGNNGuard_attack
  from autogl.solver.utils import set_seed
label_desc: Use image node_id 2 for calling a global function with example usage: main(dataset, adj, features, device) without return types