code: def test_dense_data(self):
      mock_data = Data()
      mock_data.pos = torch.zeros((batch_size, num_points, 3))
      mock_data.y = torch.zeros((batch_size, num_points, 1))
      mock_data.pred = torch.zeros((batch_size, num_points, 1))
      data = {"mock_date": mock_data}
  
      self.run_path = os.path.join(DIR, "test_viz")
      if not os.path.exists(self.run_path):
          os.makedirs(self.run_path)
  
      mock_num_batches = {"train": 9, "test": 3, "val": 0}
      config = OmegaConf.load(
          os.path.join(
              DIR, "test_config/viz/viz_config_deterministic.yaml"
          )
      )
      visualizer = Visualizer(
          config.visualization,
          mock_num_batches,
          batch_size,
          self.run_path,
          None,
      )
  
      for epoch in range(epochs):
          run(9, visualizer, epoch, "train", data)
          run(3, visualizer, epoch, "test", data)
          run(0, visualizer, epoch, "val", data)
  
      for split in ["train", "test"]:
          for format in ["ply", "las"]:
              targets = os.listdir(
                  os.path.join(self.run_path, "viz", "0", split, format)
              )
              for epoch in range(1, epochs):
                  current = os.listdir(
                      os.path.join(
                          self.run_path,
                          "viz",
                          str(epoch),
                          split,
                          format,
                      )
                  )
                  self.assertEqual(len(targets), len(current))
      shutil.rmtree(self.run_path)
  
file_path: torch-points3d/test/test_visualization.py
imports: import unittest
  import os
  import shutil
  import sys
  from omegaconf import OmegaConf
  import torch
  from torch_geometric.data import Data
  from torch_points3d.visualization import Visualizer
label_desc: Use image node_id 5 for calling the TestVisualizer obj's underlying member method code with example usage: obj.test_dense_data() without return types