1#ifndef STAN_MATH_FWD_FUN_HYPERGEOMETRIC_2F1_HPP
2#define STAN_MATH_FWD_FUN_HYPERGEOMETRIC_2F1_HPP
30template <
typename Ta1,
typename Ta2,
typename Tb,
typename Tz,
31 require_all_stan_scalar_t<Ta1, Ta2, Tb, Tz>* =
nullptr,
32 require_any_fvar_t<Ta1, Ta2, Tb, Tz>* =
nullptr>
44 auto grad_tuple =
grad_2F1(a1, a2, b, z);
46 typename fvar_t::Scalar
grad = 0;
48 if constexpr (is_autodiff_v<Ta1>) {
49 grad += a1.d() * std::get<0>(grad_tuple);
51 if constexpr (is_autodiff_v<Ta2>) {
52 grad += a2.d() * std::get<1>(grad_tuple);
54 if constexpr (is_autodiff_v<Tb>) {
55 grad += b.d() * std::get<2>(grad_tuple);
57 if constexpr (is_autodiff_v<Tz>) {
58 grad += z.d() * std::get<3>(grad_tuple);
typename return_type< Ts... >::type return_type_t
Convenience type for the return type of the specified template parameters.
T value_of(const fvar< T > &v)
Return the value of the specified variable.
return_type_t< Ta1, Ta2, Tb, Tz > hypergeometric_2F1(const Ta1 &a1, const Ta2 &a2, const Tb &b, const Tz &z)
Returns the Gauss hypergeometric function applied to the input arguments: .
static void grad()
Compute the gradient for all variables starting from the end of the AD tape.
auto grad_2F1(const T1 &a1, const T2 &a2, const T3 &b1, const T_z &z, double precision=1e-14, int max_steps=1e6)
Calculate the gradients of the hypergeometric function (2F1) as the power series stopping when the se...
The lgamma implementation in stan-math is based on either the reentrant safe lgamma_r implementation ...