1#ifndef STAN_MATH_REV_CORE_ACCUMULATE_ADJOINTS_HPP
2#define STAN_MATH_REV_CORE_ACCUMULATE_ADJOINTS_HPP
15template <
typename... Pargs>
18template <
typename VarVec, require_std_vector_vt<is_var, VarVec>* =
nullptr,
22template <
typename VecContainer,
23 require_std_vector_st<is_var, VecContainer>* =
nullptr,
24 require_std_vector_vt<is_container, VecContainer>* =
nullptr,
29template <
typename EigT, require_eigen_vt<is_var, EigT>* =
nullptr,
33template <
typename Arith, require_st_arithmetic<Arith>* =
nullptr,
37template <
typename Tuple, require_tuple_t<Tuple>* =
nullptr,
typename... Pargs>
54template <
typename... Pargs>
73template <
typename VarVec, require_std_vector_vt<is_var, VarVec>*,
76 for (
auto&& x_iter : x) {
77 *dest += x_iter.adj();
98template <
typename VecContainer, require_std_vector_st<is_var, VecContainer>*,
99 require_std_vector_vt<is_container, VecContainer>*,
typename... Pargs>
102 for (
auto&& x_iter : x) {
122template <
typename EigT, require_eigen_vt<is_var, EigT>*,
typename... Pargs>
124 Eigen::Map<Eigen::MatrixXd>(dest, x.rows(), x.cols()) += x.adj();
142template <
typename Arith, require_st_arithmetic<Arith>*,
typename... Pargs>
158template <
typename Tuple, require_tuple_t<Tuple>*,
typename... Pargs>
161 [dest](
auto&&... tuple_args) {
164 std::forward<Tuple>(x));
double * accumulate_adjoints(double *dest, const var &x, Pargs &&... args)
Accumulate adjoints from x into storage pointed to by dest, increment the adjoint storage pointer,...
constexpr decltype(auto) apply(F &&f, Tuple &&t, PreArgs &&... pre_args)
The lgamma implementation in stan-math is based on either the reentrant safe lgamma_r implementation ...