code: def forward(self, x, edge_index, **kwargs):
      data = kwargs.get("data")
      data = data.detach().clone()
      x = F.elu(self.conv1(x, edge_index, data.edge_attr))
      weight = normalized_cut_2d(edge_index, data.pos)
      cluster = graclus(edge_index, weight, x.size(0))
      data.edge_attr = None
      data.x = x
      data.edge_index = edge_index
      data = max_pool(cluster, data, transform=transform)
  
      data.x = F.elu(
          self.conv2(data.x, data.edge_index, data.edge_attr)
      )
      weight = normalized_cut_2d(data.edge_index, data.pos)
      cluster = graclus(data.edge_index, weight, data.x.size(0))
      x, batch = max_pool_x(cluster, data.x, data.batch)
  
      x = global_mean_pool(x, batch)
      x = F.elu(self.fc1(x))
      x = F.dropout(x, training=self.training)
      return F.log_softmax(self.fc2(x), dim=1)
  
file_path: pytorch_geometric/examples/contrib/pgm_explainer_graph_classification.py
imports: import os.path
  import torch
  import torch.nn.functional
  from torch.nn import Linear, ReLU, Sequential
  import torch_geometric.transforms
  from torch_geometric.contrib.explain import PGMExplainer
  from torch_geometric.datasets import MNISTSuperpixels
  from torch_geometric.explain import Explainer
  from torch_geometric.loader import DataLoader
  from torch_geometric.nn import NNConv, global_mean_pool, graclus, max_pool, max_pool_x
  from torch_geometric.utils import normalized_cut
label_desc: Use image node_id 2 for calling the Net obj's underlying member method code with example usage: obj.forward(x, edge_index) and returns: F