44 [[gnu::always_inline]]
void eval_hess_ψ_prod(
crvec x,
crvec y,
crvec Σ,
real_t scale,
crvec v,
rvec Hv)
const requires requires { &std::remove_cvref_t<Problem>::eval_hess_ψ_prod; } { ++
evaluations->hess_ψ_prod;
return timed(
evaluations->time.hess_ψ_prod, [&] { return problem.eval_hess_ψ_prod(x, y, Σ, scale, v, Hv); }); }
52 [[gnu::always_inline]]
void eval_grad_ψ(
crvec x,
crvec y,
crvec Σ,
rvec grad_ψ,
rvec work_n,
rvec work_m)
const requires requires { &std::remove_cvref_t<Problem>::eval_grad_ψ; } { ++
evaluations->grad_ψ;
return timed(
evaluations->time.grad_ψ, [&] { return problem.eval_grad_ψ(x, y, Σ, grad_ψ, work_n, work_m); }); }
53 [[gnu::always_inline]]
real_t eval_ψ_grad_ψ(
crvec x,
crvec y,
crvec Σ,
rvec grad_ψ,
rvec work_n,
rvec work_m)
const requires requires { &std::remove_cvref_t<Problem>::eval_ψ_grad_ψ; } { ++
evaluations->ψ_grad_ψ;
return timed(
evaluations->time.ψ_grad_ψ, [&] { return problem.eval_ψ_grad_ψ(x, y, Σ, grad_ψ, work_n, work_m); }); }
83 std::shared_ptr<EvalCounter>
evaluations = std::make_shared<EvalCounter>();
93 template <
class...
Args>
95 requires(!std::is_lvalue_reference_v<Problem>)
108 template <
class TimeT,
class FunT>
111 return std::forward<FunT>(f)();