class_docstr: Graph Dataloader
      
class_docstr_tok: ["Graph","Dataloader"]
docstr: batch_fun batch producer 
docstr_tok: ["batch_fun","batch","producer"]
code: def batch_fn(self, batch_examples):
      """batch_fun batch producer"""
      graphs = [b[0] for b in batch_examples]
      labels = [b[1] for b in batch_examples]
      join_graph = MultiGraph(graphs)
  
      # normalize
      indegree = join_graph.indegree()
      norm = np.zeros_like(indegree, dtype="float32")
      norm[indegree > 0] = np.power(indegree[indegree > 0], -0.5)
      join_graph.node_feat["norm"] = np.expand_dims(norm, -1)
  
      feed_dict = self.graph_wrapper.to_feed(join_graph)
      labels = np.array(labels)
      feed_dict["labels_1dim"] = labels
      labels = label_to_onehot(labels)
      feed_dict["labels"] = labels
  
      graph_lod = join_graph.graph_lod
      graph_id = []
      for i in range(1, len(graph_lod)):
          graph_node_num = graph_lod[i] - graph_lod[i - 1]
          graph_id += [i - 1] * graph_node_num
      graph_id = np.array(graph_id, dtype="int32")
      feed_dict["graph_id"] = graph_id
  
      return feed_dict
  
file_path: PGL/legacy/examples/SAGPool/dataloader.py
imports: import numpy
  import collections
  import paddle
  import pgl
  from pgl.utils.logger import log
  from pgl.graph import Graph, MultiGraph
label_desc: Use image node_id 2 for calling the GraphDataloader obj's underlying member method code with example usage: obj.batch_fn(batch_examples) and returns: feed_dict