def _random_subprocessors(self):
        """Produces an iterator of subprocessors.  If there are fewer than
        self._proc_limit subprocessors to consider (by knocking out a
        minimal subset of working qubits incident to broken couplers),
        we work exhaustively.  Otherwise, we generate a random set of
        ``self._proc_limit`` subprocessors.

        If the total number of possibilities is rather small, then we
        deliberately pick a random minimum subset to avoid coincidences.
        Otherwise, we give up on minimum, satisfy ourselves with minimal,
        and randomly generate subprocessors with :func:`self._random_subprocessor`.

        OUTPUT:
            an iterator of eden_processor instances.
        """
        if self._processors is not None:
            return (p for p in self._processors)
        elif 2**len(self._evil) <= 8 * self._proc_limit:
            deletions = self._compute_all_deletions()
            if len(deletions) > self._proc_limit:
                deletions = sample(deletions, self._proc_limit)
            return (self._subprocessor(d) for d in deletions)
        else:
            return (self._random_subprocessor() for i in range(self._proc_limit))
Produces an iterator of subprocessors.  If there are fewer than
        self._proc_limit subprocessors to consider (by knocking out a
        minimal subset of working qubits incident to broken couplers),
        we work exhaustively.  Otherwise, we generate a random set of
        ``self._proc_limit`` subprocessors.

        If the total number of possibilities is rather small, then we
        deliberately pick a random minimum subset to avoid coincidences.
        Otherwise, we give up on minimum, satisfy ourselves with minimal,
        and randomly generate subprocessors with :func:`self._random_subprocessor`.

        OUTPUT:
            an iterator of eden_processor instances.