code: def batch_fn(self, batch_ex):
      batch_nodes = []
      cc = 0
      batch_node_id = []
      batch_labels = []
      for ex in batch_ex:
          batch_nodes.append(ex.node)
          batch_labels.append(ex.label)
  
      _graph_wrapper = copy.copy(self.graph_wrapper)
      # if self.phase == "train":
      #    subgraph, sub_node_index = graph_saint_randomwalk_sampler(self.graph, batch_nodes)
      # else:
      subgraph, sub_node_index = k_hop_sampler(
          self.graph, self.samples, batch_nodes
      )
  
      feed_dict = _graph_wrapper.to_feed(subgraph)
      feed_dict["batch_nodes"] = sub_node_index
      feed_dict["labels"] = np.array(batch_labels, dtype="int64")
      return feed_dict
  
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  from __future__ import unicode_literals
  from __future__ import absolute_import
  from dataloader.base_dataloader import BaseDataGenerator
  from utils.to_undirected import to_undirected
  import ssl
  from pgl.contrib.ogb.nodeproppred.dataset_pgl import PglNodePropPredDataset
  from pgl.sample import graph_saint_random_walk_sample
  from ogb.nodeproppred import Evaluator
  import tqdm
  from collections import namedtuple
  import pgl
  import numpy
  import copy
label_desc: Use image node_id 3 for calling the ArxivDataGenerator obj's underlying member method code with example usage: obj.batch_fn(batch_ex) and returns: feed_dict