code: def __init__(self):
      # Seed
      seed = 0
      torch.manual_seed(seed)
      torch.cuda.manual_seed(seed)
      torch.cuda.manual_seed_all(seed)
      np.random.seed(seed)
      random.seed(seed)
      self.iter = 0
      self.losses = [
          {"loss_1": 1, "loss_2": 2},
          {"loss_1": 2, "loss_2": 2},
          {"loss_1": 1, "loss_2": 2},
          {"loss_1": 1, "loss_2": 2},
      ]
  
      list_xyz = [torch.randn(100, 3) for _ in range(16)]
      trans = [rand_T() for _ in range(16)]
      list_xyz_target = [
          list_xyz[i].mm(trans[i][:3, :3]) + trans[i][:3, 3]
          for i in range(16)
      ]
      self.ind = [torch.arange(400) for _ in range(4)]
      self.ind_target = [torch.arange(400) for _ in range(4)]
      self.ind_size = [
          torch.tensor([100, 100, 100, 100]) for _ in range(4)
      ]
      self.xyz = [
          torch.cat(list_xyz[4 * i : 4 * (i + 1)], 0) for i in range(4)
      ]
      self.xyz_target = [
          torch.cat(list_xyz_target[4 * i : 4 * (i + 1)], 0)
          for i in range(4)
      ]
      self.feat = self.xyz
      self.feat_target = self.xyz
      self.batch_idx = [
          torch.cat(tuple(torch.arange(4).repeat(100, 1).T))
          for i in range(4)
      ]
      self.batch_idx_target = [
          torch.cat(tuple(torch.arange(4).repeat(100, 1).T))
          for i in range(4)
      ]
  
      rang1 = torch.cat(
          (
              torch.arange(10),
              torch.arange(100, 110),
              torch.arange(200, 210),
              torch.arange(300, 310),
          )
      )
      rang2 = torch.cat(
          (
              torch.arange(20),
              torch.arange(100, 120),
              torch.arange(200, 220),
              torch.arange(300, 320),
          )
      )
      rang3 = torch.cat(
          (
              torch.arange(10),
              torch.arange(100, 116),
              torch.arange(200, 220),
              torch.arange(300, 330),
          )
      )
  
      inv1 = torch.cat(
          (
              torch.arange(9, -1, -1),
              torch.arange(109, 99, -1),
              torch.arange(209, 199, -1),
              torch.arange(309, 299, -1),
          )
      )
      inv2 = torch.cat(
          (
              torch.arange(19, -1, -1),
              torch.arange(119, 99, -1),
              torch.arange(219, 199, -1),
              torch.arange(319, 299, -1),
          )
      )
      inv3 = torch.cat(
          (
              torch.arange(9, -1, -1),
              torch.arange(115, 99, -1),
              torch.arange(219, 199, -1),
              torch.arange(329, 299, -1),
          )
      )
  
      self.feat[1][rang1] = self.feat[1][inv1]
      self.feat[2][rang2] = self.feat[2][inv2]
      self.feat[3][rang3] = self.feat[3][inv3]
  
imports: import unittest
  import torch
  import numpy
  import os
  import random
  import sys
  from torch_geometric.data import Data
  from torch_points3d.utils.geometry import rodrigues
  from torch_points3d.metrics.registration_tracker import FragmentRegistrationTracker
label_desc: Use image node_id 1 to create a new MockModel object  with example: obj = MockModel()