5 # ifndef VCCC_MATH_GRADIENT_HPP
6 # define VCCC_MATH_GRADIENT_HPP
24 template<
typename T,
typename DifferentialCategory,
typename Func,
typename VarTuple, std::size_t ...I,
typename ...Args>
25 inline auto gradientImpl(Func f, VarTuple vars, std::index_sequence<I...>, Args&&... args) {
26 return std::make_tuple(
27 partialDiff<T, I>(DifferentialCategory{}, f, vars, std::forward<Args>(args)...)...);
42 template<
typename T,
typename DifferentialCategory = differential_symmetric_t,
43 typename Func,
typename ...Vars,
typename ...Args>
44 inline auto gradient(Func f, std::tuple<Vars...> vars, Args&&... args) {
46 "tuple element of vars must not be a reference vccc::gradient<>");
48 "tuple element of vars type must be same with T vccc::gradient<>");
49 return internal::math::gradientImpl<T, DifferentialCategory>(
52 std::index_sequence_for<Vars...>{},
53 std::forward<Args>(args)...);
auto gradient(Func f, std::tuple< Vars... > vars, Args &&... args)
Definition: gradient.hpp:44
Definition: directory.h:12
constexpr VCCC_INLINE_OR_STATIC detail::element_niebloid< 1 > value
Definition: key_value.hpp:35
Definition: conjunction.hpp:22
Definition: disjunction.hpp:22
Definition: negation.hpp:23