class_docstr: Manager for backend model objects
docstr: Download the model weights into a local file in our cache
  
  :param bool raise_on_error: If True and the artifact could not be downloaded,
      raise ValueError, otherwise return None on failure and output log warning.
  
  :param bool force_download: If True, the base artifact will be downloaded,
      even if the artifact is already cached.
  
  :param bool extract_archive: If True, unzip the downloaded file if possible
  
  :return: a local path to a downloaded copy of the model
docstr_tok: ["Download","the","model","weights","into","a","local","file","in","our","cache",":","param","bool","raise_on_error",":","If","True","and","the","artifact","could","not","be","downloaded",",","raise","ValueError",",","otherwise","return","None","on","failure","and","output","log","warning",".",":","param","bool","force_download",":","If","True",",","the","base","artifact","will","be","downloaded",",","even","if","the","artifact","is","already","cached",".",":","param","bool","extract_archive",":","If","True",",","unzip","the","downloaded","file","if","possible",":","return",":","a","local","path","to","a","downloaded","copy","of","the","model"]
code: def download_model_weights(
      self,
      raise_on_error=False,
      force_download=False,
      extract_archive=False,
  ):
      """
      Download the model weights into a local file in our cache
  
      :param bool raise_on_error: If True and the artifact could not be downloaded,
          raise ValueError, otherwise return None on failure and output log warning.
  
      :param bool force_download: If True, the base artifact will be downloaded,
          even if the artifact is already cached.
  
      :param bool extract_archive: If True, unzip the downloaded file if possible
  
      :return: a local path to a downloaded copy of the model
      """
      uri = self.data.uri
      if not uri or not uri.strip():
          return None
  
      # check if we already downloaded the file
      downloaded_models = [
          k
          for k, (i, u) in Model._local_model_to_id_uri.items()
          if i == self.id and u == uri
      ]
      for dl_file in downloaded_models:
          if Path(dl_file).exists() and not force_download:
              return dl_file
          # remove non existing model file
          Model._local_model_to_id_uri.pop(dl_file, None)
  
      local_download = StorageManager.get_local_copy(
          uri,
          extract_archive=extract_archive,
          force_download=force_download,
      )
  
      # save local model, so we can later query what was the original one
      if local_download is not None:
          Model._local_model_to_id_uri[str(local_download)] = (
              self.model_id,
              uri,
          )
      elif raise_on_error:
          raise ValueError(
              "Could not retrieve a local copy of model weights {}, "
              "failed downloading {}".format(self.model_id, uri)
          )
  
      return local_download
  
imports: from collections import namedtuple
  from functools import partial
  import six
  from pathlib2 import Path
  from .base import IdObjectBase
  from .util import make_message
  from ..backend_api import Session
  from ..backend_api.services import models, tasks
  from ..storage import StorageManager
  from ..storage.helper import StorageHelper
  from ..utilities.async_manager import AsyncManagerMixin
label_desc: Use image node_id 25 for calling the Model obj's underlying member method code with example usage: obj.download_model_weights(raise_on_error, force_download, extract_archive) and returns: local_download, None, dl_file