1#ifndef STAN_MATH_PRIM_FUN_VALUE_OF_HPP
2#define STAN_MATH_PRIM_FUN_VALUE_OF_HPP
13template <
typename Tuple, require_tuple_t<Tuple>* =
nullptr>
15template <
typename T, require_std_vector_t<T>* =
nullptr,
16 require_not_st_arithmetic<T>* =
nullptr>
27template <
typename T, require_st_arithmetic<T>* =
nullptr>
29 if constexpr (std::is_rvalue_reference_v<T&&>) {
30 return std::decay_t<T>(std::forward<T>(x));
32 return std::forward<T>(x);
36template <
typename T, require_complex_t<T>* =
nullptr,
37 require_t<std::is_arithmetic<
38 typename std::decay_t<T>::value_type>>* =
nullptr>
40 return std::forward<T>(x);
59template <
typename T, require_std_vector_t<T>*, require_not_st_arithmetic<T>*>
63 out.reserve(x.size());
64 for (
auto&& x_elem : x) {
80template <
typename EigMat, require_eigen_dense_base_t<EigMat>* =
nullptr,
81 require_not_st_arithmetic<EigMat>* =
nullptr>
85 return a.unaryExpr([](
const auto& scal) {
return value_of(scal); });
87 std::forward<EigMat>(M));
90template <
typename EigMat, require_eigen_sparse_base_t<EigMat>* =
nullptr,
91 require_not_st_arithmetic<EigMat>* =
nullptr>
95 promote_scalar_t<scalar_t, plain_type_t<EigMat>> ret(M_ref.rows(),
97 ret.reserve(M_ref.nonZeros());
98 for (
int k = 0; k < M_ref.outerSize(); ++k) {
99 for (
typename std::decay_t<EigMat>::InnerIterator it(M_ref, k); it; ++it) {
100 ret.insert(it.row(), it.col()) =
value_of(it.valueRef());
103 ret.makeCompressed();
117template <
typename EigMat, require_eigen_sparse_base_t<EigMat>* =
nullptr,
118 require_st_arithmetic<EigMat>* =
nullptr>
120 return std::forward<EigMat>(M);
128template <
typename Tuple, require_tuple_t<Tuple>*>
133 value_of(std::forward<
decltype(args)>(args))...);
135 std::forward<Tuple>(tup));
require_not_t< std::is_arithmetic< std::decay_t< T > > > require_not_arithmetic_t
Require type does not satisfy std::is_arithmetic.
require_t< is_complex< std::decay_t< T > > > require_complex_t
Require type satisfies is_complex.
typename partials_type< T >::type partials_type_t
Helper alias for accessing the partial type.
typename value_type< T >::type value_type_t
Helper function for accessing underlying type.
constexpr auto make_holder_tuple(Types &&... args)
Holds ownership of rvalues and forwards lvalues into a tuple.
T value_of(const fvar< T > &v)
Return the value of the specified variable.
auto make_holder(F &&func, Args &&... args)
Constructs an expression from given arguments using given functor.
ref_type_t< T && > to_ref(T &&a)
This evaluates expensive Eigen expressions.
constexpr decltype(auto) apply(F &&f, Tuple &&t, PreArgs &&... pre_args)
typename plain_type< std::decay_t< T > >::type plain_type_t
The lgamma implementation in stan-math is based on either the reentrant safe lgamma_r implementation ...