code: def _get_metrics_per_class(shape_ious):
      instance_ious = []
      cat_ious = {}
      for cat in shape_ious.keys():
          for iou in shape_ious[cat]:
              instance_ious.append(iou)
          if len(shape_ious[cat]):
              cat_ious[cat] = np.mean(shape_ious[cat])
      mean_class_ious = np.mean(list(cat_ious.values()))
      return cat_ious, mean_class_ious, np.mean(instance_ious)
  
file_path: torch-points3d/torch_points3d/metrics/shapenet_part_tracker.py
imports: import numpy
  from .confusion_matrix import ConfusionMatrix
  from .base_tracker import meter_value, BaseTracker
  from torch_geometric.data import Data
  from torch_points3d.models import model_interface
  from torch_points3d.core.data_transform import SaveOriginalPosId
  from torch_points3d.metrics.segmentation_helpers import SegmentationVoter
label_desc: Use image node_id 9 for calling the ShapenetPartTracker obj's underlying member method code with example usage: obj._get_metrics_per_class(shape_ious) and returns: cat_ious,  mean_class_ious,  np