code: def test_track_all(self):
      tracker = FragmentRegistrationTracker(
          stage="test", tau_2=0.83, num_points=100
      )
      model = MockModel()
      tracker.reset("test")
      model.iter = 0
      for i in range(4):
          tracker.track(model)
          model.iter += 1
      metrics = tracker.get_metrics()
      self.assertAlmostEqual(
          metrics["test_hit_ratio"],
          (4 * 1.0 + 4 * 0.9 + 4 * 0.8 + 0.9 + 0.84 + 0.8 + 0.7) / 16,
      )
      self.assertAlmostEqual(
          metrics["test_feat_match_ratio"],
          (4 * 1 + 4 * 1 + 4 * 0 + 2 * 1 + 2 * 0) / 16,
      )
  
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 2 for calling the TestRegistrationTracker obj's underlying member method code with example usage: obj.test_track_all() without return types