tinyopt 700
Tinyopt, a lightweight, header only optimization library
Loading...
Searching...
No Matches
callable_traits.h
1// Copyright 2026 Julien Michot.
2// SPDX-License-Identifier: Apache-2.0
3
4#pragma once
5
6#include <tinyopt/traits/matrix_traits.h>
7
8namespace tinyopt::traits {
9
10template <typename Func, typename Param>
11inline constexpr bool is_scalar_cost_v =
12 std::is_invocable_v<Func, const Param &> &&
13 std::is_scalar_v<std::invoke_result_t<Func, const Param &>>;
14
15template <typename Func, typename Param, typename Scalar, Index Dims>
16inline constexpr bool accepts_gradient_v =
17 std::is_invocable_v<Func, const Param &, Vector<Scalar, Dims> &>;
18
19template <typename Func, typename Param, typename Scalar, Index Dims>
20inline constexpr bool accepts_hessian_v =
21 std::is_invocable_v<Func, const Param &, Vector<Scalar, Dims> &, Matrix<Scalar, Dims, Dims> &>;
22
23} // namespace tinyopt::traits