@Override
	public ProgramGene<A> newInstance(
		final Op<A> op,
		final int childOffset,
		final int childCount
	) {
		if (op.arity() != childCount) {
			throw new IllegalArgumentException(format(
				"Operation arity and child count are different: %d, != %d",
				op.arity(), childCount
			));
		}

		return new ProgramGene<>(op, childOffset, _operations, _terminals);
	}
Return a new program gene with the given operation and the <em>local</em>
tree structure.

@param op the new operation
@param childOffset the offset of the first node child within the
       chromosome
@param childCount the number of children of the new tree gene
@return a new tree gene with the given parameters
@throws IllegalArgumentException  if the {@code childCount} is smaller
        than zero
@throws IllegalArgumentException if the operation arity is different from
        the {@code childCount}.
@throws NullPointerException if the given {@code op} is {@code null}
jenetics.prog/src/main/java/io/jenetics/prog/ProgramGene.java