code: def download_and_store_model(alg, url, env, model_type):
      """Downloads a model file and puts it under model directory.
  
      It downloads a file from the URL and puts it under model directory.
      If there is already a file at the destination path,
      it just returns the path without downloading the same file.
      Args:
          alg (string): String representation of algorithm used in MODELS dict.
          url (string): URL to download from.
          env (string): Environment in which pretrained model was trained.
          model_type (string): Either `best` or `final`.
      Returns:
          string: Path to the downloaded file.
          bool: whether the model was already cached.
      """
      lock = os.path.join(_get_model_directory(".lock"), "models.lock")
      with filelock.FileLock(lock):
          root = _get_model_directory(os.path.join(alg, env))
          url_basepath = posixpath.join(url, alg, env)
          file = model_type + ".zip"
          path = os.path.join(root, file)
          is_cached = os.path.exists(path)
          if not is_cached:
              cache_path = cached_download(
                  posixpath.join(url_basepath, file)
              )
              os.rename(cache_path, path)
              with zipfile.ZipFile(path, "r") as zip_ref:
                  zip_ref.extractall(root)
          return os.path.join(root, model_type), is_cached
  
file_path: pfrl/pfrl/utils/pretrained_models.py
imports: import hashlib
  import os
  import posixpath
  import shutil
  import sys
  import tempfile
  import time
  import urllib
  import zipfile
  import filelock
label_desc: Use image node_id 4 for calling a global function with example usage: download_and_store_model(alg, url, env, model_type) and returns: os,  is_cached