code: def cached_download(url):
      """Downloads a file and caches it.
  
      This is different from the original
      :func:`~chainer.dataset.cached_download` in that the download
      progress is reported. Note that this progress report can be disabled
      by setting the environment variable `CHAINERCV_DOWNLOAD_REPORT` to `'OFF'`.
  
      It downloads a file from the URL if there is no corresponding cache. After
      the download, this function stores a cache to the directory under the
      dataset root (see :func:`set_dataset_root`). If there is already a cache
      for the given URL, it just returns the path to the cache without
      downloading the same file.
  
      Args:
          url (string): URL to download from.
  
      Returns:
          string: Path to the downloaded file.
  
      """
      cache_root = os.path.join(get_dataset_root(), "_dl_cache")
      try:
          os.makedirs(cache_root)
      except OSError:
          if not os.path.exists(cache_root):
              raise
  
      lock_path = os.path.join(cache_root, "_dl_lock")
      urlhash = hashlib.md5(url.encode("utf-8")).hexdigest()
      cache_path = os.path.join(cache_root, urlhash)
  
      with filelock.FileLock(lock_path):
          if os.path.exists(cache_path):
              return cache_path
  
      temp_root = tempfile.mkdtemp(dir=cache_root)
      try:
          temp_path = os.path.join(temp_root, "dl")
          if strtobool(os.getenv("CHAINERCV_DOWNLOAD_REPORT", "ON")):
              print("Downloading ...")
              print("From: {:s}".format(url))
              print("To: {:s}".format(cache_path))
              request.urlretrieve(url, temp_path, _reporthook)
          else:
              request.urlretrieve(url, temp_path)
          with filelock.FileLock(lock_path):
              shutil.move(temp_path, cache_path)
      finally:
          shutil.rmtree(temp_root)
  
      return cache_path
  
file_path: chainercv/chainercv/utils/download.py
imports: from __future__ import division
  from __future__ import print_function
  from distutils.util import strtobool
  import hashlib
  import os
  import shutil
  import tarfile
  import tempfile
  import zipfile
  import filelock
  from six.moves.urllib import request
  import sys
  import time
  from chainer.dataset.download import get_dataset_directory
  from chainer.dataset.download import get_dataset_root
label_desc: Use image node_id 2 for calling a global function with example usage: cached_download(url) and returns: cache_path, cache_path