code: def _candidate_sort_key(self, candidate, ignore_compatibility=True):
          # type: (InstallationCandidate, bool) -> CandidateSortingKey
          
          support_num = len(self.valid_tags)
          build_tag = tuple()  # type: BuildTag
          binary_preference = 0
          if candidate.location.is_wheel:
              # can raise InvalidWheelFilename
              wheel = Wheel(candidate.location.filename)
              if not wheel.supported(self.valid_tags) and not ignore_compatibility:
                  raise UnsupportedWheel(
                      "%s is not a supported wheel for this platform. It "
                      "can't be sorted." % wheel.filename
                  )
              if self.prefer_binary:
                  binary_preference = 1
              tags = self.valid_tags if not ignore_compatibility else None
              try:
                  pri = -(wheel.support_index_min(tags=tags))
              except TypeError:
                  pri = -(support_num)
              if wheel.build_tag is not None:
                  match = re.match(r'^(\d+)(.*)$', wheel.build_tag)
                  build_tag_groups = match.groups()
                  build_tag = (int(build_tag_groups[0]), build_tag_groups[1])
          else:  # sdist
              pri = -(support_num)
          return (binary_preference, candidate.version, build_tag, pri)
docs: Function used to generate link sort key for link tuples.
          The greater the return value, the more preferred it is.
          If not finding wheels, then 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.valid_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