code: def test_dataset_properties(self):
      self.run_path = os.path.join(DIR, "checkpt")
      if not os.path.exists(self.run_path):
          os.makedirs(self.run_path)
  
      model_checkpoint = ModelCheckpoint(
          self.run_path,
          self.model_name,
          "test",
          run_config=self.config,
          resume=False,
      )
      model_checkpoint.dataset_properties = {
          "first": 1,
          "num_classes": 20,
      }
      model = MockModel()
      metric_func = {"acc": max}
      mock_metrics = {
          "current_metrics": {"acc": 12},
          "stage": "test",
          "epoch": 10,
      }
      metric_func = {"acc": max}
      model_checkpoint.save_best_models_under_current_metrics(
          model, mock_metrics, metric_func
      )
  
      ckp = ModelCheckpoint(
          self.run_path,
          self.model_name,
          "test",
          run_config=self.config,
          resume=False,
      )
  
      self.assertEqual(
          ckp.dataset_properties, model_checkpoint.dataset_properties
      )
  
imports: import unittest
  import omegaconf
  from omegaconf import OmegaConf, DictConfig
  import os
  import sys
  import hydra
  import shutil
  import torch
  from mockdatasets import MockDatasetGeometric
  from torch_points3d.models.model_factory import instantiate_model
  from torch_points3d.utils.model_building_utils.model_definition_resolver import resolve_model
  from torch_points3d.metrics.model_checkpoint import ModelCheckpoint
label_desc: Use image node_id 4 for calling the TestModelCheckpoint obj's underlying member method code with example usage: obj.test_dataset_properties() without return types