@Override
	public ISeq<Phenotype<G, C>> eval(final Seq<Phenotype<G, C>> population) {
		final ISeq<Phenotype<G, C>> evaluated = _evaluator.eval(population);

		if (population.size() != evaluated.size()) {
			throw new IllegalStateException(format(
				"Expected %d individuals, but got %d. " +
					"Check your evaluator function.",
				population.size(), evaluated.size()
			));
		}
		if (!evaluated.forAll(Phenotype::isEvaluated)) {
			throw new IllegalStateException(
				"Some phenotypes have no assigned fitness value. " +
					"Check your evaluator function."
			);
		}

		return evaluated;
	}
Evaluates the fitness function of the given population with the configured
{@link Evaluator} of this engine and returns a new population
with its fitness value assigned.

@since 5.0

@see Evaluator
@see Evaluator#eval(Seq)

@param population the population to evaluate
@return a new population with assigned fitness values
@throws IllegalStateException if the configured fitness function doesn't
        return a population with the same size as the input population.
        This exception is also thrown if one of the populations
        phenotype has no fitness value assigned.
jenetics/src/main/java/io/jenetics/engine/Engine.java