code: def test_add(self):
      gts = [
          _Instance(
              classname=1,
              indices=np.array([1, 2, 3]),
              score=1,
              scan_id=0,
          ),
          _Instance(
              classname=1,
              indices=np.array([1, 2, 3]),
              score=1,
              scan_id=0,
          ),
          _Instance(
              classname=1,
              indices=np.array([1, 2, 3]),
              score=1,
              scan_id=1,
          ),
      ]
  
      preds = [
          _Instance(
              classname=1,
              indices=np.array([1, 2, 3]),
              score=1,
              scan_id=0,
          ),
          _Instance(
              classname=1,
              indices=np.array([1, 2, 3]),
              score=0.1,
              scan_id=10,
          ),
          _Instance(
              classname=10,
              indices=np.array([1, 2, 3]),
              score=0.1,
              scan_id=10,
          ),
      ]
  
      meter = InstanceAPMeter()
      meter.add(preds, gts)
  
      self.assertEqual(len(meter._pred_clusters[1]), 2)
      self.assertEqual(meter._pred_clusters[1][0].score, 1)
  
      self.assertEqual(list(meter._gt_clusters[1].keys()), [0, 1])
      self.assertEqual(len(meter._gt_clusters[1][0]), 2)
  
imports: import os
  import sys
  import unittest
  import torch
  import numpy
  from torch_geometric.data import Data
  from torch_points3d.models.panoptic.structures import PanopticResults, PanopticLabels
  from torch_points3d.metrics.panoptic_tracker import _Instance, InstanceAPMeter, PanopticTracker
label_desc: Use image node_id 1 for calling the TestInstanceAPMeter obj's underlying member method code with example usage: obj.test_add() without return types