code: def batcher(batch):
      g_batch = [[] for _ in range(coarsening_levels + 1)]
      x_batch = []
      y_batch = []
      for x, y in batch:
          x = torch.cat(
              [x.view(-1), x.new_zeros(len(perm) - 28**2)], 0
          )
          x = x[perm]
          x_batch.append(x)
          y_batch.append(y)
          for i in range(coarsening_levels + 1):
              g_batch[i].append(g_arr[i])
  
      x_batch = torch.cat(x_batch).unsqueeze(-1)
      y_batch = torch.LongTensor(y_batch)
      g_batch = [dgl.batch(g) for g in g_batch]
      return g_batch, x_batch, y_batch
  
imports: import argparse
  import time
  import dgl
  import networkx
  import numpy
  import torch
  import torch.nn
  import torch.nn.functional
  from coarsening import coarsen
  from coordinate import get_coordinates, z2polar
  from dgl.data import load_data, register_data_args
  from dgl.nn.pytorch.conv import ChebConv, GMMConv
  from dgl.nn.pytorch.glob import MaxPooling
  from grid_graph import grid_graph
  from torch.utils.data import DataLoader
  from torchvision import datasets, transforms
label_desc: Use image node_id 1 for calling a global function with example usage: batcher(batch) and returns: g_batch,  x_batch,  y_batch