code: def forward(self, x, adj, mask=None):
      batch_size, num_nodes, in_channels = x.size()
  
      x0 = x
      x1 = self.bn(1, self.conv1(x0, adj, mask).relu())
      x2 = self.bn(2, self.conv2(x1, adj, mask).relu())
      x3 = self.bn(3, self.conv3(x2, adj, mask).relu())
  
      x = torch.cat([x1, x2, x3], dim=-1)
  
      if self.lin is not None:
          x = self.lin(x).relu()
  
      return x
  
file_path: pytorch_geometric/examples/proteins_diff_pool.py
imports: import os.path
  import time
  from math import ceil
  import torch
  import torch.nn.functional
  import torch_geometric.transforms
  from torch_geometric.datasets import TUDataset
  from torch_geometric.loader import DenseDataLoader
  from torch_geometric.nn import DenseSAGEConv, dense_diff_pool
label_desc: Use image node_id 3 for calling the GNN obj's underlying member method code with example usage: obj.forward(x, adj, mask) and returns: x