/** {@inheritDoc} */
    @Override
    public Evaluation evaluate(final RealVector point) {
      // Copy so optimizer can change point without changing our instance.
      final RealVector p =
          paramValidator == null ? point.copy() : paramValidator.validate(point.copy());

      if (lazyEvaluation) {
        return new LazyUnweightedEvaluation((ValueAndJacobianFunction) model, target, p);
      } else {
        // Evaluate value and jacobian in one function call.
        final Pair<RealVector, RealMatrix> value = model.value(p);
        return new UnweightedEvaluation(value.getFirst(), value.getSecond(), target, p);
      }
    }