class_docstr: the ModelNet Dataset from the `"3D ShapeNets: A Deep
  Representation for Volumetric Shapes"
  <https://people.csail.mit.edu/khosla/papers/cvpr2015_wu.pdf>`_ paper,
  containing sampled CAD models of 40 categories. Each sample contains 10,000
  points uniformly sampled with their normal vector.
  
  But applied for registration.
  Only the self supervised mode is supported
class_docstr_tok: ["the","ModelNet","Dataset","from","the","`","``","3D","ShapeNets",":","A","Deep","Representation","for","Volumetric","Shapes","''","<","https",":","\/\/people.csail.mit.edu\/khosla\/papers\/cvpr2015_wu.pdf",">","`","_","paper",",","containing","sampled","CAD","models","of","40","categories",".","Each","sample","contains","10,000","points","uniformly","sampled","with","their","normal","vector",".","But","applied","for","registration",".","Only","the","self","supervised","mode","is","supported"]
code: def get_model(self, idx):
      data = self.data.__class__()
  
      if hasattr(self.data, "__num_nodes__"):
          data.num_nodes = self.data.__num_nodes__[idx]
  
      for key in self.data.keys:
          item, slices = self.data[key], self.slices[key]
          start, end = slices[idx].item(), slices[idx + 1].item()
          # print(slices[idx], slices[idx + 1])
          if torch.is_tensor(item):
              s = list(repeat(slice(None), item.dim()))
              s[self.data.__cat_dim__(key, item)] = slice(start, end)
          elif start + 1 == end:
              s = slices[start]
          else:
              s = slice(start, end)
          data[key] = item[s]
      return data
  
imports: import numpy
  import random
  from itertools import repeat, product
  import os
  import os.path
  import torch
  from torch_geometric.data import Data
  from torch_points_kernels.points_cpu import ball_query
  from torch_points3d.datasets.classification.modelnet import SampledModelNet
  from torch_points3d.datasets.registration.base_siamese_dataset import BaseSiameseDataset
  from torch_points3d.datasets.registration.base_siamese_dataset import GeneralFragment
  from torch_points3d.metrics.registration_tracker import FragmentRegistrationTracker
  from torch_points3d.datasets.registration.pair import Pair, MultiScalePair
  from torch_points3d.datasets.registration.utils import tracked_matches
  from torch_points3d.datasets.registration.utils import compute_overlap_and_matches
label_desc: Use image node_id 2 for calling the SiameseModelNet obj's underlying member method code with example usage: obj.get_model(idx) and returns: data