1#ifndef STAN_MATH_REV_CORE_SAVE_VARIS_HPP
2#define STAN_MATH_REV_CORE_SAVE_VARIS_HPP
16template <
typename... Pargs>
19template <
typename VarVec, require_std_vector_vt<is_var, VarVec>* =
nullptr,
23template <
typename VecContainer,
24 require_std_vector_st<is_var, VecContainer>* =
nullptr,
25 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>
57 return save_varis(dest + 1, std::forward<Pargs>(args)...);
73template <
typename VarVec, require_std_vector_vt<is_var, VarVec>*,
76 for (
int i = 0; i < x.size(); ++i) {
79 return save_varis(dest + x.size(), std::forward<Pargs>(args)...);
95template <
typename VecContainer, require_std_vector_st<is_var, VecContainer>*,
96 require_std_vector_vt<is_container, VecContainer>*,
typename... Pargs>
98 for (
size_t i = 0; i < x.size(); ++i) {
101 return save_varis(dest, std::forward<Pargs>(args)...);
117template <
typename EigT, require_eigen_vt<is_var, EigT>*,
typename... Pargs>
119 for (
int i = 0; i < x.size(); ++i) {
120 dest[i] = x.coeff(i).vi_;
122 return save_varis(dest + x.size(), std::forward<Pargs>(args)...);
138template <
typename Arith, require_st_arithmetic<Arith>*,
typename... Pargs>
140 return save_varis(dest, std::forward<Pargs>(args)...);
154template <
typename Tuple, require_tuple_t<Tuple>*,
typename... Pargs>
157 [dest](
auto&&... tuple_args) {
return save_varis(dest, tuple_args...); },
158 std::forward<Tuple>(x));
159 return save_varis(dest, std::forward<Pargs>(args)...);
vari_value< double > vari
vari ** save_varis(vari **dest, const var &x, Pargs &&... args)
Save the vari pointer in x into the memory pointed to by dest, increment the dest 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 ...