code: def download(self):
      folder = os.path.join(self.raw_dir, "test")
      if files_exist([folder]):  # pragma: no cover
          log.warning("already downloaded {}".format("test"))
          return
      else:
          makedirs(folder)
      log.info("Download elements in the file {}...".format(folder))
      for name, url in self.DATASETS:
          log.info(f"Downloading sequence {name}")
          filename = os.path.join(folder, name + ".zip")
          gdown.download(url, filename, quiet=False)
          with ZipFile(filename, "r") as zip_obj:
              zip_obj.extractall(folder)
          os.remove(filename)
  
      self.download_pairs(folder)
  
file_path: torch-points3d/torch_points3d/datasets/registration/testkaist.py
imports: import gdown
  import os
  import logging
  import sys
  from zipfile import ZipFile
  from torch_points3d.datasets.registration.basetest import BasePCRBTest
  from torch_points3d.datasets.base_dataset import BaseDataset
  from torch_points3d.datasets.registration.base_siamese_dataset import BaseSiameseDataset
  from torch_points3d.datasets.registration.utils import files_exist
  from torch_points3d.datasets.registration.utils import makedirs
label_desc: Use image node_id 2 for calling the TestPairKaist obj's underlying member method code with example usage: obj.download() without return types