class_docstr: Samples the input point cloud by a ratio percentage to reduce
  cardinality and uses an mlp to augment features dimensionnality.
class_docstr_tok: ["Samples","the","input","point","cloud","by","a","ratio","percentage","to","reduce","cardinality","and","uses","an","mlp","to","augment","features","dimensionnality","."]
code: def forward(self, x, pos, batch):
      # FPS sampling
      id_clusters = fps(pos, ratio=self.ratio, batch=batch)
  
      # compute for each cluster the k nearest points
      sub_batch = batch[id_clusters] if batch is not None else None
  
      # beware of self loop
      id_k_neighbor = knn(
          pos,
          pos[id_clusters],
          k=self.k,
          batch_x=batch,
          batch_y=sub_batch,
      )
  
      # transformation of features through a simple MLP
      x = self.mlp(x)
  
      # Max pool onto each cluster the features from knn in points
      x_out = scatter(
          x[id_k_neighbor[1]],
          id_k_neighbor[0],
          dim=0,
          dim_size=id_clusters.size(0),
          reduce="max",
      )
  
      # keep only the clusters and their max-pooled features
      sub_pos, out = pos[id_clusters], x_out
      return out, sub_pos, sub_batch
  
imports: import os.path
  import torch
  import torch.nn.functional
  from torch.nn import Linear
  import torch_geometric.transforms
  from torch_geometric.datasets import ModelNet
  from torch_geometric.loader import DataLoader
  from torch_geometric.nn import MLP, PointTransformerConv, fps, global_mean_pool, knn, knn_graph
  from torch_geometric.typing import WITH_TORCH_CLUSTER
  from torch_geometric.utils import scatter
label_desc: Use image node_id 2 for calling the TransitionDown obj's underlying member method code with example usage: obj.forward(x, pos, batch) and returns: out,  sub_pos,  sub_batch