code: def forward(self, data):
      data.x = F.elu(
          self.conv1(data.x, data.edge_index, data.edge_attr)
      )
      cluster = voxel_grid(
          data.pos, batch=data.batch, size=5, start=0, end=28
      )
      data.edge_attr = None
      data = max_pool(cluster, data, transform=transform)
  
      data.x = F.elu(
          self.conv2(data.x, data.edge_index, data.edge_attr)
      )
      cluster = voxel_grid(
          data.pos, batch=data.batch, size=7, start=0, end=28
      )
      data.edge_attr = None
      data = max_pool(cluster, data, transform=transform)
  
      data.x = F.elu(
          self.conv3(data.x, data.edge_index, data.edge_attr)
      )
      cluster = voxel_grid(
          data.pos, batch=data.batch, size=14, start=0, end=27.99
      )
      x, _ = max_pool_x(cluster, data.x, data.batch, size=4)
  
      x = x.view(-1, self.fc1.weight.size(1))
      x = F.elu(self.fc1(x))
      x = F.dropout(x, training=self.training)
      x = self.fc2(x)
      return F.log_softmax(x, dim=1)
  
file_path: pytorch_geometric/examples/mnist_voxel_grid.py
imports: import os.path
  import torch
  import torch.nn.functional
  import torch_geometric.transforms
  from torch_geometric.datasets import MNISTSuperpixels
  from torch_geometric.loader import DataLoader
  from torch_geometric.nn import SplineConv, max_pool, max_pool_x, voxel_grid
  from torch_geometric.typing import WITH_TORCH_SPLINE_CONV
label_desc: Use image node_id 2 for calling the Net obj's underlying member method code with example usage: obj.forward(data) and returns: F