docs: def process(self, unordered_candidates):
          """
          :arg list candidates: list of Candidate instances
  
          """
          ordered_candidates = []
          # make a new list of candidates in order of ordered_locators
          for locator in self.ordered_locators:
              for uc in unordered_candidates[:]:
                  if uc.locator == locator:
                      ordered_candidates.append(uc)
                      unordered_candidates.remove(uc)
          # add all the candidates that are still left
          # (whose locator values are not in ordered_locators)
          # and return the new list
          return ordered_candidates + unordered_candidates