code: @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);
  	}
docs: 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}