code: def _parse_model_uri(uri):
      """
      Returns a ParsedModelUri tuple. Since a models:/ URI can only have one of
      {version, stage, 'latest', alias}, it will return
          - (name, version, None, None) to look for a specific version,
          - (name, None, stage, None) to look for the latest version of a stage,
          - (name, None, None, None) to look for the latest of all versions.
          - (name, None, None, alias) to look for a registered model alias.
      """
      parsed = urllib.parse.urlparse(uri, allow_fragments=False)
      if parsed.scheme != "models":
          raise MlflowException(_improper_model_uri_msg(uri))
      path = parsed.path
      if not path.startswith("/") or len(path) <= 1:
          raise MlflowException(_improper_model_uri_msg(uri))
  
      parts = path.lstrip("/").split("/")
      if len(parts) > 2 or parts[0].strip() == "":
          raise MlflowException(_improper_model_uri_msg(uri))
  
      if len(parts) == 2:
          name, suffix = parts
          if suffix.strip() == "":
              raise MlflowException(_improper_model_uri_msg(uri))
          # The URI is in the suffix format
          if suffix.isdigit():
              # The suffix is a specific version, e.g. "models:/AdsModel1/123"
              return ParsedModelUri(name, version=suffix)
          elif suffix.lower() == _MODELS_URI_SUFFIX_LATEST.lower():
              # The suffix is the 'latest' string (case insensitive), e.g. "models:/AdsModel1/latest"
              return ParsedModelUri(name)
          else:
              # The suffix is a specific stage (case insensitive), e.g. "models:/AdsModel1/Production"
              return ParsedModelUri(name, stage=suffix)
      else:
          # The URI is an alias URI, e.g. "models:/AdsModel1@Champion"
          alias_parts = parts[0].rsplit("@", 1)
          if len(alias_parts) != 2 or alias_parts[1].strip() == "":
              raise MlflowException(_improper_model_uri_msg(uri))
          return ParsedModelUri(alias_parts[0], alias=alias_parts[1])
  
file_path: mlflow/mlflow/store/artifact/utils/models.py
imports: import urllib.parse
  from typing import NamedTuple, Optional
  import mlflow.tracking
  from mlflow.exceptions import MlflowException
  from mlflow.utils.uri import get_databricks_profile_uri_from_artifact_uri, is_databricks_uri
label_desc: Use image node_id 4 for calling a global function with example usage: _parse_model_uri(uri) and returns: ParsedModelUri, ParsedModelUri, ParsedModelUri, ParsedModelUri