lue is an iterator of candidates. :param information: A mapping of requirement information for each package. Each value is an iterator of *requirement information*. :param backtrack_causes: A sequence of *requirement information* that are the requirements causing the resolver to most recently backtrack. A *requirement information* instance is a named tuple with two members: * ``requirement`` specifies a requirement contributing to the current list of candidates. * ``parent`` specifies the candidate that provides (is depended on for) the requirement, or ``None`` to indicate a root requirement. Must return a non-empty subset of `identifiers`, with the default implementation being to return `identifiers` unchanged. Those `identifiers` will then be passed to the sort key `get_preference` to pick the most prefered requirement to attempt to pin, unless `narrow_requirement_selection` returns only 1 requirement, in which case that will be used without calling the sort key `get_preference`. This method is designed to be used by the provider to optimize the dependency resolution, e.g. if a check cost is O(m) and it can be done against all identifiers at once then filtering the requirement selection here will cost O(m) but making it part of the sort key in `get_preference` will cost O(m*n), where n is the number of `identifiers`. Returns: Iterable[KT]: A non-empty subset of `identifiers`. r