@Override
	protected MutatorResult<Chromosome<G>> mutate(
		final Chromosome<G> chromosome,
		final double p,
		final RandomGenerator random
	) {
		final MutatorResult<Chromosome<G>> result;

		if (chromosome.length() > 1) {
			final var genes = MSeq.of(chromosome);
			final var range = _random.newRange(random, chromosome.length());

			range.shift(genes);

			result = new MutatorResult<>(
				chromosome.newInstance(genes.toISeq()),
				range.c - range.a
			);
		} else {
			result = new MutatorResult<>(chromosome, 0);
		}

		return result;
	}
Splits the values between two points into two sequences and shifts the
second one in front of the first one.
jenetics/src/main/java/io/jenetics/ShiftMutator.java