'Find all available InstallationCandidate for project_name
This checks index_urls, find_links and dependency_links.
All versions found are returned as an InstallationCandidate list.
See _link_package_versions for details on which files are accepted'

def find_all_candidates(self, project_name):

    index_locations = self._get_index_urls_locations(project_name)
    (index_file_loc, index_url_loc) = self._sort_locations(index_locations)
    (fl_file_loc, fl_url_loc) = self._sort_locations(self.find_links, expand_dir=True)
    (dep_file_loc, dep_url_loc) = self._sort_locations(self.dependency_links)
    file_locations = (Link(url) for url in itertools.chain(index_file_loc, fl_file_loc, dep_file_loc))
    url_locations = [link for link in itertools.chain((Link(url) for url in index_url_loc), (Link(url) for url in fl_url_loc), (Link(url) for url in dep_url_loc)) if self._validate_secure_origin(logger, link)]
    logger.debug('%d    location(s)    to    search    for    versions    of    %s:', len(url_locations), project_name)
    for location in url_locations:
        logger.debug('*    %s', location)
    canonical_name = canonicalize_name(project_name)
    formats = fmt_ctl_formats(self.format_control, canonical_name)
    search = Search(project_name, canonical_name, formats)
    find_links_versions = self._package_versions((Link(url, '-f') for url in self.find_links), search)
    page_versions = []
    for page in self._get_pages(url_locations, project_name):
        logger.debug('Analyzing    links    from    page    %s', page.url)
        with indent_log():
            page_versions.extend(self._package_versions(page.links, search))
    dependency_versions = self._package_versions((Link(url) for url in self.dependency_links), search)
    if dependency_versions:
        logger.debug('dependency_links    found:    %s', ',    '.join([version.location.url for version in dependency_versions]))
    file_versions = self._package_versions(file_locations, search)
    if file_versions:
        file_versions.sort(reverse=True)
        logger.debug('Local    files    found:    %s', ',    '.join([url_to_path(candidate.location.url) for candidate in file_versions]))
    return (((file_versions + find_links_versions) + page_versions) + dependency_versions)
