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 __init__(
      self,
      root,
      name_modelnet="10",
      min_size_block=0.3,
      max_size_block=2,
      max_dist_overlap=0.1,
      train=True,
      transform=None,
      pre_transform=None,
      pre_filter=None,
      num_pos_pairs=1024,
      ss_transform=None,
      min_points=500,
      use_fps=False,
  ):
      SampledModelNet.__init__(
          self,
          root,
          name_modelnet,
          train,
          transform,
          pre_transform,
          pre_filter,
      )
      self.self_supervised = (
          True  # only self supervised is allowed for modelnet
      )
      self.is_online_matching = False
      self.num_pos_pairs = num_pos_pairs
      self.min_size_block = min_size_block
      self.max_size_block = max_size_block
      self.max_dist_overlap = max_dist_overlap
      self.ss_transform = ss_transform
      self.min_points = min_points
      self.train = train
      self.use_fps = use_fps
      if self.train:
          self.name = "train"
      else:
          self.name = "test"
  
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 1 to create a new SiameseModelNet object from inherited base classes: SampledModelNet, GeneralFragment with example: obj = SiameseModelNet(root, name_modelnet, min_size_block, max_size_block, max_dist_overlap, train, transform, pre_transform, pre_filter, num_pos_pairs, ss_transform, min_points, use_fps)