code: def forward(self, pos, batch):
      x = pos.new_ones((pos.size(0), 1))
  
      radius = 0.2
      edge_index = radius_graph(pos, r=radius, batch=batch)
      pseudo = (pos[edge_index[1]] - pos[edge_index[0]]) / (
          2 * radius
      ) + 0.5
      pseudo = pseudo.clamp(min=0, max=1)
      x = F.elu(self.conv1(x, edge_index, pseudo))
  
      idx = fps(pos, batch, ratio=0.5)
      x, pos, batch = x[idx], pos[idx], batch[idx]
  
      radius = 0.4
      edge_index = radius_graph(pos, r=radius, batch=batch)
      pseudo = (pos[edge_index[1]] - pos[edge_index[0]]) / (
          2 * radius
      ) + 0.5
      pseudo = pseudo.clamp(min=0, max=1)
      x = F.elu(self.conv2(x, edge_index, pseudo))
  
      idx = fps(pos, batch, ratio=0.25)
      x, pos, batch = x[idx], pos[idx], batch[idx]
  
      radius = 1
      edge_index = radius_graph(pos, r=radius, batch=batch)
      pseudo = (pos[edge_index[1]] - pos[edge_index[0]]) / (
          2 * radius
      ) + 0.5
      pseudo = pseudo.clamp(min=0, max=1)
      x = F.elu(self.conv3(x, edge_index, pseudo))
  
      x = global_mean_pool(x, batch)
  
      x = F.elu(self.lin1(x))
      x = F.elu(self.lin2(x))
      x = F.dropout(x, p=0.5, training=self.training)
      x = self.lin3(x)
      return F.log_softmax(x, dim=-1)
  
file_path: pytorch_geometric/benchmark/points/spline_cnn.py
imports: import argparse
  import torch
  import torch.nn.functional
  from points.datasets import get_dataset
  from points.train_eval import run
  from torch.nn import Linear
  from torch_geometric.nn import SplineConv, fps, global_mean_pool, radius_graph
  from torch_geometric.profile import rename_profile_file
label_desc: Use image node_id 2 for calling the Net obj's underlying member method code with example usage: obj.forward(pos, batch) and returns: F