def METHOD_NAME(
    self, package: Package, link: Link
) -> tuple[int, int, int, Version, tuple[Any, ...], int]:
    """
    Function to pass as the `key` argument to a call to sorted() to sort
    InstallationCandidates by preference.
    Returns a tuple such that tuples sorting as greater using Python's
    default comparison operator are more preferred.
    The preference is as follows:
    First and foremost, candidates with allowed (matching) hashes are
    always preferred over candidates without matching hashes. This is
    because e.g. if the only candidate with an allowed hash is yanked,
    we still want to use that candidate.
    Second, excepting hash considerations, candidates that have been
    yanked (in the sense of PEP 592) are always less preferred than
    candidates that haven't been yanked. Then:
    If not finding wheels, they are sorted by version only.
    If finding wheels, then the sort order is by version, then:
      1. existing installs
      2. wheels ordered via Wheel.support_index_min(self._supported_tags)
      3. source archives
    If prefer_binary was set, then all wheels are sorted above sources.
    Note: it was considered to embed this logic into the Link
          comparison operators, but then different sdist links
          with the same version, would have to be considered equal
    """
    build_tag: tuple[Any, ...] = ()
    binary_preference = 0
    if link.is_wheel:
        wheel = Wheel(link.filename)
        if not wheel.is_supported_by_environment(self._env):
            raise RuntimeError(
                f"{wheel.filename} is not a supported wheel for this platform. It "
                "can't be sorted."
            )
        # TODO: Binary preference
        pri = -(wheel.get_minimum_supported_index(self._env.supported_tags) or 0)
        if wheel.build_tag is not None:
            match = re.match(r"^(\d+)(.*)$", wheel.build_tag)
            if not match:
                raise ValueError(f"Unable to parse build tag: {wheel.build_tag}")
            build_tag_groups = match.groups()
            build_tag = (int(build_tag_groups[0]), build_tag_groups[1])
    else:  # sdist
        support_num = len(self._env.supported_tags)
        pri = -support_num
    has_allowed_hash = int(self._is_link_hash_allowed_for_package(link, package))
    yank_value = int(not link.yanked)
    return (
        has_allowed_hash,
        yank_value,
        binary_preference,
        package.version,
        build_tag,
        pri,
    )