code: def test_trainer_on_shapenet_fixed(self):
      self.path_outputs = os.path.join(
          DIR_PATH, "data/shapenet/outputs"
      )
      if not os.path.exists(self.path_outputs):
          os.makedirs(self.path_outputs)
      os.chdir(self.path_outputs)
  
      cfg = OmegaConf.load(
          os.path.join(DIR_PATH, "data/shapenet/shapenet_config.yaml")
      )
      cfg.training.epochs = 2
      cfg.training.num_workers = 0
      cfg.data.is_test = True
      cfg.data.dataroot = os.path.join(DIR_PATH, "data/")
  
      trainer = Trainer(cfg)
      trainer.train()
  
      self.assertEqual(trainer.early_break, True)
      self.assertEqual(trainer.profiling, False)
      self.assertEqual(trainer.precompute_multi_scale, False)
      self.assertEqual(trainer.wandb_log, False)
  
      keys = [k for k in trainer._tracker.get_metrics().keys()]
      self.assertEqual(
          keys, ["test_loss_seg", "test_Cmiou", "test_Imiou"]
      )
      trainer._cfg.voting_runs = 2
      trainer.eval()
  
file_path: torch-points3d/test/test_trainer.py
imports: import unittest
  import sys
  import os
  from itertools import combinations
  from omegaconf.dictconfig import DictConfig
  from omegaconf.listconfig import ListConfig
  from omegaconf import OmegaConf
  import shutil
  from torch_points3d.trainer import Trainer
label_desc: Use image node_id 2 for calling the TestTrainer obj's underlying member method code with example usage: obj.test_trainer_on_shapenet_fixed() without return types