code: def _download_and_unpack_kitti_zip(
      data,
      dataset_dir,
      scratch_dir,
      splits,
      name,
      cleanup=False,
      overwrite=False,
  ):
      url = data["url"]
      zip_path = os.path.join(scratch_dir, os.path.basename(url))
  
      if not etau.is_container(splits):
          splits = [splits]
  
      should_unzip = False
      move_dirs = []
  
      for split in splits:
          unzipped_dir = os.path.join(
              scratch_dir, *data["contents"][split]
          )
          final_dir = os.path.join(dataset_dir, split, name)
  
          if overwrite:
              move_dirs.append((unzipped_dir, final_dir))
  
              if os.path.isdir(final_dir):
                  logger.info(
                      "Overwriting existing directory '%s'", final_dir
                  )
                  etau.delete_dir(final_dir)
          elif not os.path.isdir(final_dir):
              move_dirs.append((unzipped_dir, final_dir))
  
          if overwrite:
              should_unzip = True
  
              if os.path.isdir(unzipped_dir):
                  etau.delete_dir(unzipped_dir)
          elif not os.path.isdir(unzipped_dir) and not os.path.isdir(
              final_dir
          ):
              should_unzip = True
  
      if overwrite or (should_unzip and not os.path.isfile(zip_path)):
          logger.info("Downloading %s to '%s'", name, zip_path)
          etaw.download_file(url, path=zip_path)
      elif should_unzip:
          logger.info("Using existing %s '%s'", name, zip_path)
  
      if should_unzip:
          logger.info("Extracting '%s'", zip_path)
          etau.extract_zip(zip_path, outdir=scratch_dir)
  
      if cleanup and os.path.isfile(zip_path):
          etau.delete_file(zip_path)
  
      for indir, outdir in move_dirs:
          etau.move_dir(indir, outdir)
  
imports: import csv
  import logging
  import struct
  import os
  import numpy
  import eta.core.utils
  import eta.core.web
  import fiftyone
  import fiftyone.core.labels
  import fiftyone.core.metadata
  import fiftyone.core.storage
  import fiftyone.core.utils
  import fiftyone.utils.data
label_desc: Use image node_id 4 for calling a global function with example usage: _download_and_unpack_kitti_zip(data, dataset_dir, scratch_dir, splits, name, cleanup, overwrite) without return types