1#ifndef STAN_MATH_PRIM_FUN_HYPERGEOMETRIC_PFQ_HPP
2#define STAN_MATH_PRIM_FUN_HYPERGEOMETRIC_PFQ_HPP
7#include <boost/math/special_functions/hypergeometric_pFq.hpp>
28template <
typename Ta,
typename Tb,
typename Tz,
29 require_all_eigen_st<std::is_arithmetic, Ta, Tb>* =
nullptr,
30 require_arithmetic_t<Tz>* =
nullptr>
43 bool condition_1 = (a_ref.size() > (b_ref.size() + 1)) && (z != 0);
44 bool condition_2 = (a_ref.size() == (b_ref.size() + 1)) && (std::fabs(z) > 1);
46 if (condition_1 || condition_2) {
47 std::stringstream msg;
48 msg <<
"hypergeometric function pFq does not meet convergence "
49 <<
"conditions with given arguments. "
50 <<
"a: " << a_ref <<
", b: " << b_ref <<
", "
52 throw std::domain_error(msg.str());
55 return boost::math::hypergeometric_pFq(
56 std::vector<double>(a_ref.data(), a_ref.data() + a_ref.size()),
57 std::vector<double>(b_ref.data(), b_ref.data() + b_ref.size()), z);
typename return_type< Ts... >::type return_type_t
Convenience type for the return type of the specified template parameters.
void check_finite(const char *function, const char *name, const T_y &y)
Return true if all values in y are finite.
void check_not_nan(const char *function, const char *name, const T_y &y)
Check if y is not NaN.
FvarT hypergeometric_pFq(const Ta &a, const Tb &b, const Tz &z)
Returns the generalized hypergeometric (pFq) function applied to the input arguments.
typename plain_type< T >::type plain_type_t
The lgamma implementation in stan-math is based on either the reentrant safe lgamma_r implementation ...