brintos

brintos / llvm-project-archived public Read only

0
0
Text · 81.0 KiB · 54f51c5 Raw
1902 lines · plain
1// math_fwd.hpp2 3// TODO revise completely for new distribution classes.4 5// Copyright Paul A. Bristow 2006.6// Copyright John Maddock 2006.7// Copyright Matt Borland 20248 9// Use, modification and distribution are subject to the10// Boost Software License, Version 1.0.11// (See accompanying file LICENSE_1_0.txt12// or copy at http://www.boost.org/LICENSE_1_0.txt)13 14// Omnibus list of forward declarations of math special functions.15 16// IT = Integer type.17// RT = Real type (built-in floating-point types, float, double, long double) & User Defined Types18// AT = Integer or Real type19 20#ifndef BOOST_MATH_SPECIAL_MATH_FWD_HPP21#define BOOST_MATH_SPECIAL_MATH_FWD_HPP22 23#ifdef _MSC_VER24#pragma once25#endif26 27#include <boost/math/tools/config.hpp>28#include <boost/math/tools/promotion.hpp> // for argument promotion.29#include <boost/math/tools/type_traits.hpp>30#include <boost/math/tools/complex.hpp>31#include <boost/math/policies/policy.hpp>32 33#ifdef BOOST_MATH_HAS_NVRTC34 35namespace boost {36namespace math {37 38template <class RT1, class RT2, class A>39BOOST_MATH_GPU_ENABLED inline typename tools::promote_args<RT1, RT2, A>::type40beta(RT1 a, RT2 b, A arg);41 42namespace detail{43 44   template <class T, class U, class V>45   struct ellint_3_result46   {47      using type = typename boost::math::conditional<48         policies::is_policy<V>::value,49         tools::promote_args_t<T, U>,50         tools::promote_args_t<T, U, V>51      >::type;52   };53 54   template <class T, class U>55   struct expint_result56   {57      using type = typename boost::math::conditional<58         policies::is_policy<U>::value,59         tools::promote_args_t<T>,60         typename tools::promote_args<U>::type61      >::type;62   };63 64   typedef boost::math::integral_constant<int, 0> bessel_no_int_tag;      // No integer optimisation possible.65   typedef boost::math::integral_constant<int, 1> bessel_maybe_int_tag;   // Maybe integer optimisation.66   typedef boost::math::integral_constant<int, 2> bessel_int_tag;         // Definite integer optimisation.67 68   template <class T1, class T2, class Policy>69   struct bessel_traits70   {71      using result_type = typename boost::math::conditional<72         boost::math::is_integral<T1>::value,73         typename tools::promote_args<T2>::type,74         tools::promote_args_t<T1, T2>75      >::type;76 77      typedef typename policies::precision<result_type, Policy>::type precision_type;78 79      using optimisation_tag = typename boost::math::conditional<80         (precision_type::value <= 0 || precision_type::value > 64),81         bessel_no_int_tag,82         typename boost::math::conditional<83            boost::math::is_integral<T1>::value,84            bessel_int_tag,85            bessel_maybe_int_tag86         >::type87      >::type;88 89      using optimisation_tag128 = typename boost::math::conditional<90         (precision_type::value <= 0 || precision_type::value > 113),91         bessel_no_int_tag,92         typename boost::math::conditional<93            boost::math::is_integral<T1>::value,94            bessel_int_tag,95            bessel_maybe_int_tag96         >::type97      >::type;98   };99 100} // namespace detail101 102} // namespace math103} // namespace boost104 105#else106 107#include <vector>108#include <complex>109#include <type_traits>110#include <boost/math/special_functions/detail/round_fwd.hpp>111#include <boost/math/tools/type_traits.hpp>112#include <boost/math/policies/policy.hpp>113 114#define BOOST_NO_MACRO_EXPAND /**/115 116namespace boost117{118   namespace math119   { // Math functions (in roughly alphabetic order).120 121   // Beta functions.122   template <class RT1, class RT2>123   BOOST_MATH_GPU_ENABLED tools::promote_args_t<RT1, RT2>124         beta(RT1 a, RT2 b); // Beta function (2 arguments).125 126   template <class RT1, class RT2, class A>127   BOOST_MATH_GPU_ENABLED tools::promote_args_t<RT1, RT2, A>128         beta(RT1 a, RT2 b, A x); // Beta function (3 arguments).129 130   template <class RT1, class RT2, class RT3, class Policy>131   BOOST_MATH_GPU_ENABLED tools::promote_args_t<RT1, RT2, RT3>132         beta(RT1 a, RT2 b, RT3 x, const Policy& pol); // Beta function (3 arguments).133 134   template <class RT1, class RT2, class RT3>135   BOOST_MATH_GPU_ENABLED tools::promote_args_t<RT1, RT2, RT3>136         betac(RT1 a, RT2 b, RT3 x);137 138   template <class RT1, class RT2, class RT3, class Policy>139   BOOST_MATH_GPU_ENABLED tools::promote_args_t<RT1, RT2, RT3>140         betac(RT1 a, RT2 b, RT3 x, const Policy& pol);141 142   template <class RT1, class RT2, class RT3>143   BOOST_MATH_GPU_ENABLED tools::promote_args_t<RT1, RT2, RT3>144         ibeta(RT1 a, RT2 b, RT3 x); // Incomplete beta function.145 146   template <class RT1, class RT2, class RT3, class Policy>147   BOOST_MATH_GPU_ENABLED tools::promote_args_t<RT1, RT2, RT3>148         ibeta(RT1 a, RT2 b, RT3 x, const Policy& pol); // Incomplete beta function.149 150   template <class RT1, class RT2, class RT3>151   BOOST_MATH_GPU_ENABLED tools::promote_args_t<RT1, RT2, RT3>152         ibetac(RT1 a, RT2 b, RT3 x); // Incomplete beta complement function.153 154   template <class RT1, class RT2, class RT3, class Policy>155   BOOST_MATH_GPU_ENABLED tools::promote_args_t<RT1, RT2, RT3>156         ibetac(RT1 a, RT2 b, RT3 x, const Policy& pol); // Incomplete beta complement function.157 158   template <class T1, class T2, class T3, class T4>159   BOOST_MATH_GPU_ENABLED tools::promote_args_t<T1, T2, T3, T4>160         ibeta_inv(T1 a, T2 b, T3 p, T4* py);161 162   template <class T1, class T2, class T3, class T4, class Policy>163   BOOST_MATH_GPU_ENABLED tools::promote_args_t<T1, T2, T3, T4>164         ibeta_inv(T1 a, T2 b, T3 p, T4* py, const Policy& pol);165 166   template <class RT1, class RT2, class RT3>167   BOOST_MATH_GPU_ENABLED tools::promote_args_t<RT1, RT2, RT3>168         ibeta_inv(RT1 a, RT2 b, RT3 p); // Incomplete beta inverse function.169 170   template <class RT1, class RT2, class RT3, class Policy>171   BOOST_MATH_GPU_ENABLED tools::promote_args_t<RT1, RT2, RT3>172         ibeta_inv(RT1 a, RT2 b, RT3 p, const Policy&); // Incomplete beta inverse function.173 174   template <class RT1, class RT2, class RT3>175   BOOST_MATH_GPU_ENABLED tools::promote_args_t<RT1, RT2, RT3>176         ibeta_inva(RT1 a, RT2 b, RT3 p); // Incomplete beta inverse function.177 178   template <class RT1, class RT2, class RT3, class Policy>179   BOOST_MATH_GPU_ENABLED tools::promote_args_t<RT1, RT2, RT3>180         ibeta_inva(RT1 a, RT2 b, RT3 p, const Policy&); // Incomplete beta inverse function.181 182   template <class RT1, class RT2, class RT3>183   BOOST_MATH_GPU_ENABLED tools::promote_args_t<RT1, RT2, RT3>184         ibeta_invb(RT1 a, RT2 b, RT3 p); // Incomplete beta inverse function.185 186   template <class RT1, class RT2, class RT3, class Policy>187   BOOST_MATH_GPU_ENABLED tools::promote_args_t<RT1, RT2, RT3>188         ibeta_invb(RT1 a, RT2 b, RT3 p, const Policy&); // Incomplete beta inverse function.189 190   template <class T1, class T2, class T3, class T4>191   BOOST_MATH_GPU_ENABLED tools::promote_args_t<T1, T2, T3, T4>192         ibetac_inv(T1 a, T2 b, T3 q, T4* py);193 194   template <class T1, class T2, class T3, class T4, class Policy>195   BOOST_MATH_GPU_ENABLED tools::promote_args_t<T1, T2, T3, T4>196         ibetac_inv(T1 a, T2 b, T3 q, T4* py, const Policy& pol);197 198   template <class RT1, class RT2, class RT3>199   BOOST_MATH_GPU_ENABLED tools::promote_args_t<RT1, RT2, RT3>200         ibetac_inv(RT1 a, RT2 b, RT3 q); // Incomplete beta complement inverse function.201 202   template <class RT1, class RT2, class RT3, class Policy>203   BOOST_MATH_GPU_ENABLED tools::promote_args_t<RT1, RT2, RT3>204         ibetac_inv(RT1 a, RT2 b, RT3 q, const Policy&); // Incomplete beta complement inverse function.205 206   template <class RT1, class RT2, class RT3>207   BOOST_MATH_GPU_ENABLED tools::promote_args_t<RT1, RT2, RT3>208         ibetac_inva(RT1 a, RT2 b, RT3 q); // Incomplete beta complement inverse function.209 210   template <class RT1, class RT2, class RT3, class Policy>211   BOOST_MATH_GPU_ENABLED tools::promote_args_t<RT1, RT2, RT3>212         ibetac_inva(RT1 a, RT2 b, RT3 q, const Policy&); // Incomplete beta complement inverse function.213 214   template <class RT1, class RT2, class RT3>215   BOOST_MATH_GPU_ENABLED tools::promote_args_t<RT1, RT2, RT3>216         ibetac_invb(RT1 a, RT2 b, RT3 q); // Incomplete beta complement inverse function.217 218   template <class RT1, class RT2, class RT3, class Policy>219   BOOST_MATH_GPU_ENABLED tools::promote_args_t<RT1, RT2, RT3>220         ibetac_invb(RT1 a, RT2 b, RT3 q, const Policy&); // Incomplete beta complement inverse function.221 222   template <class RT1, class RT2, class RT3>223   BOOST_MATH_GPU_ENABLED tools::promote_args_t<RT1, RT2, RT3>224         ibeta_derivative(RT1 a, RT2 b, RT3 x);  // derivative of incomplete beta225 226   template <class RT1, class RT2, class RT3, class Policy>227   BOOST_MATH_GPU_ENABLED tools::promote_args_t<RT1, RT2, RT3>228         ibeta_derivative(RT1 a, RT2 b, RT3 x, const Policy& pol);  // derivative of incomplete beta229 230   // Binomial:231   template <class T, class Policy>232   BOOST_MATH_GPU_ENABLED T binomial_coefficient(unsigned n, unsigned k, const Policy& pol);233   template <class T>234   BOOST_MATH_GPU_ENABLED T binomial_coefficient(unsigned n, unsigned k);235 236   // erf & erfc error functions.237   template <class RT> // Error function.238   BOOST_MATH_GPU_ENABLED tools::promote_args_t<RT> erf(RT z);239   template <class RT, class Policy> // Error function.240   BOOST_MATH_GPU_ENABLED tools::promote_args_t<RT> erf(RT z, const Policy&);241 242   template <class RT>// Error function complement.243   BOOST_MATH_GPU_ENABLED tools::promote_args_t<RT> erfc(RT z);244   template <class RT, class Policy>// Error function complement.245   BOOST_MATH_GPU_ENABLED tools::promote_args_t<RT> erfc(RT z, const Policy&);246 247   template <class RT>// Error function inverse.248   BOOST_MATH_GPU_ENABLED tools::promote_args_t<RT> erf_inv(RT z);249   template <class RT, class Policy>// Error function inverse.250   BOOST_MATH_GPU_ENABLED tools::promote_args_t<RT> erf_inv(RT z, const Policy& pol);251 252   template <class RT>// Error function complement inverse.253   BOOST_MATH_GPU_ENABLED tools::promote_args_t<RT> erfc_inv(RT z);254   template <class RT, class Policy>// Error function complement inverse.255   BOOST_MATH_GPU_ENABLED tools::promote_args_t<RT> erfc_inv(RT z, const Policy& pol);256 257   // Polynomials:258   template <class T1, class T2, class T3>259   tools::promote_args_t<T1, T2, T3>260         legendre_next(unsigned l, T1 x, T2 Pl, T3 Plm1);261 262   template <class T>263   tools::promote_args_t<T>264         legendre_p(int l, T x);265   template <class T>266   tools::promote_args_t<T>267          legendre_p_prime(int l, T x);268 269 270   template <class T, class Policy>271   inline std::vector<T> legendre_p_zeros(int l, const Policy& pol);272 273   template <class T>274   inline std::vector<T> legendre_p_zeros(int l);275 276   template <class T, class Policy>277   typename std::enable_if<policies::is_policy<Policy>::value, tools::promote_args_t<T>>::type278         legendre_p(int l, T x, const Policy& pol);279   template <class T, class Policy>280   inline typename std::enable_if<policies::is_policy<Policy>::value, tools::promote_args_t<T>>::type281      legendre_p_prime(int l, T x, const Policy& pol);282 283   template <class T>284   tools::promote_args_t<T>285         legendre_q(unsigned l, T x);286 287   template <class T, class Policy>288   typename std::enable_if<policies::is_policy<Policy>::value, tools::promote_args_t<T>>::type289         legendre_q(unsigned l, T x, const Policy& pol);290 291   template <class T1, class T2, class T3>292   tools::promote_args_t<T1, T2, T3>293         legendre_next(unsigned l, unsigned m, T1 x, T2 Pl, T3 Plm1);294 295   template <class T>296   tools::promote_args_t<T>297         legendre_p(int l, int m, T x);298 299   template <class T, class Policy>300   tools::promote_args_t<T>301         legendre_p(int l, int m, T x, const Policy& pol);302 303   template <class T1, class T2, class T3>304   tools::promote_args_t<T1, T2, T3>305         laguerre_next(unsigned n, T1 x, T2 Ln, T3 Lnm1);306 307   template <class T1, class T2, class T3>308   tools::promote_args_t<T1, T2, T3>309      laguerre_next(unsigned n, unsigned l, T1 x, T2 Pl, T3 Plm1);310 311   template <class T>312   tools::promote_args_t<T>313      laguerre(unsigned n, T x);314 315   template <class T, class Policy>316   tools::promote_args_t<T>317      laguerre(unsigned n, unsigned m, T x, const Policy& pol);318 319   template <class T1, class T2>320   struct laguerre_result321   {322      using type = typename std::conditional<323         policies::is_policy<T2>::value,324         typename tools::promote_args<T1>::type,325         typename tools::promote_args<T2>::type326      >::type;327   };328 329   template <class T1, class T2>330   typename laguerre_result<T1, T2>::type331      laguerre(unsigned n, T1 m, T2 x);332 333   template <class T>334   BOOST_MATH_GPU_ENABLED tools::promote_args_t<T>335      hermite(unsigned n, T x);336 337   template <class T, class Policy>338   BOOST_MATH_GPU_ENABLED tools::promote_args_t<T>339      hermite(unsigned n, T x, const Policy& pol);340 341   template <class T1, class T2, class T3>342   BOOST_MATH_GPU_ENABLED tools::promote_args_t<T1, T2, T3>343      hermite_next(unsigned n, T1 x, T2 Hn, T3 Hnm1);344 345   template<class T1, class T2, class T3>346   tools::promote_args_t<T1, T2, T3> chebyshev_next(T1 const & x, T2 const & Tn, T3 const & Tn_1);347 348   template <class Real, class Policy>349   tools::promote_args_t<Real>350      chebyshev_t(unsigned n, Real const & x, const Policy&);351   template<class Real>352   tools::promote_args_t<Real> chebyshev_t(unsigned n, Real const & x);353   354   template <class Real, class Policy>355   tools::promote_args_t<Real>356      chebyshev_u(unsigned n, Real const & x, const Policy&);357   template<class Real>358   tools::promote_args_t<Real> chebyshev_u(unsigned n, Real const & x);359 360   template <class Real, class Policy>361   tools::promote_args_t<Real>362      chebyshev_t_prime(unsigned n, Real const & x, const Policy&);363   template<class Real>364   tools::promote_args_t<Real> chebyshev_t_prime(unsigned n, Real const & x);365 366   template<class Real, class T2>367   Real chebyshev_clenshaw_recurrence(const Real* const c, size_t length, const T2& x);368 369   template <class T1, class T2>370   std::complex<tools::promote_args_t<T1, T2>>371         spherical_harmonic(unsigned n, int m, T1 theta, T2 phi);372 373   template <class T1, class T2, class Policy>374   std::complex<tools::promote_args_t<T1, T2>>375      spherical_harmonic(unsigned n, int m, T1 theta, T2 phi, const Policy& pol);376 377   template <class T1, class T2>378   tools::promote_args_t<T1, T2>379         spherical_harmonic_r(unsigned n, int m, T1 theta, T2 phi);380 381   template <class T1, class T2, class Policy>382   tools::promote_args_t<T1, T2>383      spherical_harmonic_r(unsigned n, int m, T1 theta, T2 phi, const Policy& pol);384 385   template <class T1, class T2>386   tools::promote_args_t<T1, T2>387         spherical_harmonic_i(unsigned n, int m, T1 theta, T2 phi);388 389   template <class T1, class T2, class Policy>390   tools::promote_args_t<T1, T2>391      spherical_harmonic_i(unsigned n, int m, T1 theta, T2 phi, const Policy& pol);392 393   // Elliptic integrals:394   template <class T1, class T2, class T3>395   BOOST_MATH_GPU_ENABLED tools::promote_args_t<T1, T2, T3>396         ellint_rf(T1 x, T2 y, T3 z);397 398   template <class T1, class T2, class T3, class Policy>399   BOOST_MATH_GPU_ENABLED tools::promote_args_t<T1, T2, T3>400         ellint_rf(T1 x, T2 y, T3 z, const Policy& pol);401 402   template <class T1, class T2, class T3>403   BOOST_MATH_GPU_ENABLED tools::promote_args_t<T1, T2, T3>404         ellint_rd(T1 x, T2 y, T3 z);405 406   template <class T1, class T2, class T3, class Policy>407   BOOST_MATH_GPU_ENABLED tools::promote_args_t<T1, T2, T3>408         ellint_rd(T1 x, T2 y, T3 z, const Policy& pol);409 410   template <class T1, class T2>411   BOOST_MATH_GPU_ENABLED tools::promote_args_t<T1, T2>412         ellint_rc(T1 x, T2 y);413 414   template <class T1, class T2, class Policy>415   BOOST_MATH_GPU_ENABLED tools::promote_args_t<T1, T2>416         ellint_rc(T1 x, T2 y, const Policy& pol);417 418   template <class T1, class T2, class T3, class T4>419   BOOST_MATH_GPU_ENABLED tools::promote_args_t<T1, T2, T3, T4>420         ellint_rj(T1 x, T2 y, T3 z, T4 p);421 422   template <class T1, class T2, class T3, class T4, class Policy>423   BOOST_MATH_GPU_ENABLED tools::promote_args_t<T1, T2, T3, T4>424         ellint_rj(T1 x, T2 y, T3 z, T4 p, const Policy& pol);425 426   template <class T1, class T2, class T3>427   BOOST_MATH_GPU_ENABLED tools::promote_args_t<T1, T2, T3>428      ellint_rg(T1 x, T2 y, T3 z);429 430   template <class T1, class T2, class T3, class Policy>431   BOOST_MATH_GPU_ENABLED tools::promote_args_t<T1, T2, T3>432      ellint_rg(T1 x, T2 y, T3 z, const Policy& pol);433 434   template <typename T>435   BOOST_MATH_GPU_ENABLED tools::promote_args_t<T> ellint_2(T k);436 437   template <class T1, class T2>438   BOOST_MATH_GPU_ENABLED tools::promote_args_t<T1, T2> ellint_2(T1 k, T2 phi);439 440   template <class T1, class T2, class Policy>441   BOOST_MATH_GPU_ENABLED tools::promote_args_t<T1, T2> ellint_2(T1 k, T2 phi, const Policy& pol);442 443   template <typename T>444   BOOST_MATH_GPU_ENABLED tools::promote_args_t<T> ellint_1(T k);445 446   template <class T1, class T2>447   BOOST_MATH_GPU_ENABLED tools::promote_args_t<T1, T2> ellint_1(T1 k, T2 phi);448 449   template <class T1, class T2, class Policy>450   BOOST_MATH_GPU_ENABLED tools::promote_args_t<T1, T2> ellint_1(T1 k, T2 phi, const Policy& pol);451 452   template <typename T>453   BOOST_MATH_GPU_ENABLED tools::promote_args_t<T> ellint_d(T k);454 455   template <class T1, class T2>456   BOOST_MATH_GPU_ENABLED tools::promote_args_t<T1, T2> ellint_d(T1 k, T2 phi);457 458   template <class T1, class T2, class Policy>459   BOOST_MATH_GPU_ENABLED tools::promote_args_t<T1, T2> ellint_d(T1 k, T2 phi, const Policy& pol);460 461   template <class T1, class T2>462   BOOST_MATH_GPU_ENABLED tools::promote_args_t<T1, T2> jacobi_zeta(T1 k, T2 phi);463 464   template <class T1, class T2, class Policy>465   BOOST_MATH_GPU_ENABLED tools::promote_args_t<T1, T2> jacobi_zeta(T1 k, T2 phi, const Policy& pol);466 467   template <class T1, class T2>468   BOOST_MATH_GPU_ENABLED tools::promote_args_t<T1, T2> heuman_lambda(T1 k, T2 phi);469 470   template <class T1, class T2, class Policy>471   BOOST_MATH_GPU_ENABLED tools::promote_args_t<T1, T2> heuman_lambda(T1 k, T2 phi, const Policy& pol);472 473   namespace detail{474 475   template <class T, class U, class V>476   struct ellint_3_result477   {478      using type = typename boost::math::conditional<479         policies::is_policy<V>::value,480         tools::promote_args_t<T, U>,481         tools::promote_args_t<T, U, V>482      >::type;483   };484 485   } // namespace detail486 487 488   template <class T1, class T2, class T3>489   BOOST_MATH_GPU_ENABLED typename detail::ellint_3_result<T1, T2, T3>::type ellint_3(T1 k, T2 v, T3 phi);490 491   template <class T1, class T2, class T3, class Policy>492   BOOST_MATH_GPU_ENABLED tools::promote_args_t<T1, T2, T3> ellint_3(T1 k, T2 v, T3 phi, const Policy& pol);493 494   template <class T1, class T2>495   BOOST_MATH_GPU_ENABLED tools::promote_args_t<T1, T2> ellint_3(T1 k, T2 v);496 497   // Factorial functions.498   // Note: not for integral types, at present.499   template <class RT>500   struct max_factorial;501   template <class RT>502   BOOST_MATH_GPU_ENABLED RT factorial(unsigned int);503   template <class RT, class Policy>504   BOOST_MATH_GPU_ENABLED RT factorial(unsigned int, const Policy& pol);505   template <class RT>506   BOOST_MATH_GPU_ENABLED RT unchecked_factorial(unsigned int BOOST_MATH_APPEND_EXPLICIT_TEMPLATE_TYPE(RT));507   template <class RT>508   BOOST_MATH_GPU_ENABLED RT double_factorial(unsigned i);509   template <class RT, class Policy>510   BOOST_MATH_GPU_ENABLED RT double_factorial(unsigned i, const Policy& pol);511 512   template <class RT>513   tools::promote_args_t<RT> falling_factorial(RT x, unsigned n);514 515   template <class RT, class Policy>516   tools::promote_args_t<RT> falling_factorial(RT x, unsigned n, const Policy& pol);517 518   template <class RT>519   tools::promote_args_t<RT> rising_factorial(RT x, int n);520 521   template <class RT, class Policy>522   tools::promote_args_t<RT> rising_factorial(RT x, int n, const Policy& pol);523 524   // Gamma functions.525   template <class RT>526   BOOST_MATH_GPU_ENABLED tools::promote_args_t<RT> tgamma(RT z);527 528   template <class RT>529   BOOST_MATH_GPU_ENABLED tools::promote_args_t<RT> tgamma1pm1(RT z);530 531   template <class RT, class Policy>532   BOOST_MATH_GPU_ENABLED tools::promote_args_t<RT> tgamma1pm1(RT z, const Policy& pol);533 534   template <class RT1, class RT2>535   BOOST_MATH_GPU_ENABLED tools::promote_args_t<RT1, RT2> tgamma(RT1 a, RT2 z);536 537   template <class RT1, class RT2, class Policy>538   BOOST_MATH_GPU_ENABLED tools::promote_args_t<RT1, RT2> tgamma(RT1 a, RT2 z, const Policy& pol);539 540   template <class RT>541   BOOST_MATH_GPU_ENABLED tools::promote_args_t<RT> lgamma(RT z, int* sign);542 543   template <class RT, class Policy>544   BOOST_MATH_GPU_ENABLED tools::promote_args_t<RT> lgamma(RT z, int* sign, const Policy& pol);545 546   template <class RT>547   BOOST_MATH_GPU_ENABLED tools::promote_args_t<RT> lgamma(RT x);548 549   template <class RT, class Policy>550   BOOST_MATH_GPU_ENABLED tools::promote_args_t<RT> lgamma(RT x, const Policy& pol);551 552   template <class RT1, class RT2>553   BOOST_MATH_GPU_ENABLED tools::promote_args_t<RT1, RT2> tgamma_lower(RT1 a, RT2 z);554 555   template <class RT1, class RT2, class Policy>556   BOOST_MATH_GPU_ENABLED tools::promote_args_t<RT1, RT2> tgamma_lower(RT1 a, RT2 z, const Policy&);557 558   template <class RT1, class RT2>559   BOOST_MATH_GPU_ENABLED tools::promote_args_t<RT1, RT2> gamma_q(RT1 a, RT2 z);560 561   template <class RT1, class RT2, class Policy>562   BOOST_MATH_GPU_ENABLED tools::promote_args_t<RT1, RT2> gamma_q(RT1 a, RT2 z, const Policy&);563 564   template <class RT1, class RT2>565   BOOST_MATH_GPU_ENABLED tools::promote_args_t<RT1, RT2> gamma_p(RT1 a, RT2 z);566 567   template <class RT1, class RT2, class Policy>568   BOOST_MATH_GPU_ENABLED tools::promote_args_t<RT1, RT2> gamma_p(RT1 a, RT2 z, const Policy&);569 570   template <class T1, class T2>571   BOOST_MATH_GPU_ENABLED tools::promote_args_t<T1, T2> tgamma_delta_ratio(T1 z, T2 delta);572 573   template <class T1, class T2, class Policy>574   BOOST_MATH_GPU_ENABLED tools::promote_args_t<T1, T2> tgamma_delta_ratio(T1 z, T2 delta, const Policy&);575 576   template <class T1, class T2>577   BOOST_MATH_GPU_ENABLED tools::promote_args_t<T1, T2> tgamma_ratio(T1 a, T2 b);578 579   template <class T1, class T2, class Policy>580   BOOST_MATH_GPU_ENABLED tools::promote_args_t<T1, T2> tgamma_ratio(T1 a, T2 b, const Policy&);581 582   template <class T1, class T2>583   BOOST_MATH_GPU_ENABLED tools::promote_args_t<T1, T2> gamma_p_derivative(T1 a, T2 x);584 585   template <class T1, class T2, class Policy>586   BOOST_MATH_GPU_ENABLED tools::promote_args_t<T1, T2> gamma_p_derivative(T1 a, T2 x, const Policy&);587 588   // gamma inverse.589   template <class T1, class T2>590   BOOST_MATH_GPU_ENABLED tools::promote_args_t<T1, T2> gamma_p_inv(T1 a, T2 p);591 592   template <class T1, class T2, class Policy>593   BOOST_MATH_GPU_ENABLED tools::promote_args_t<T1, T2> gamma_p_inva(T1 a, T2 p, const Policy&);594 595   template <class T1, class T2>596   BOOST_MATH_GPU_ENABLED tools::promote_args_t<T1, T2> gamma_p_inva(T1 a, T2 p);597 598   template <class T1, class T2, class Policy>599   BOOST_MATH_GPU_ENABLED tools::promote_args_t<T1, T2> gamma_p_inv(T1 a, T2 p, const Policy&);600 601   template <class T1, class T2>602   BOOST_MATH_GPU_ENABLED tools::promote_args_t<T1, T2> gamma_q_inv(T1 a, T2 q);603 604   template <class T1, class T2, class Policy>605   BOOST_MATH_GPU_ENABLED tools::promote_args_t<T1, T2> gamma_q_inv(T1 a, T2 q, const Policy&);606 607   template <class T1, class T2>608   BOOST_MATH_GPU_ENABLED tools::promote_args_t<T1, T2> gamma_q_inva(T1 a, T2 q);609 610   template <class T1, class T2, class Policy>611   BOOST_MATH_GPU_ENABLED tools::promote_args_t<T1, T2> gamma_q_inva(T1 a, T2 q, const Policy&);612 613   // digamma:614   template <class T>615   BOOST_MATH_GPU_ENABLED tools::promote_args_t<T> digamma(T x);616 617   template <class T, class Policy>618   BOOST_MATH_GPU_ENABLED tools::promote_args_t<T> digamma(T x, const Policy&);619 620   // trigamma:621   template <class T>622   BOOST_MATH_GPU_ENABLED tools::promote_args_t<T> trigamma(T x);623 624   template <class T, class Policy>625   BOOST_MATH_GPU_ENABLED tools::promote_args_t<T> trigamma(T x, const Policy&);626 627   // polygamma:628   template <class T>629   tools::promote_args_t<T> polygamma(int n, T x);630 631   template <class T, class Policy>632   tools::promote_args_t<T> polygamma(int n, T x, const Policy&);633 634   // Hypotenuse function sqrt(x ^ 2 + y ^ 2).635   template <class T1, class T2>636   BOOST_MATH_GPU_ENABLED tools::promote_args_t<T1, T2>637         hypot(T1 x, T2 y);638 639   template <class T1, class T2, class Policy>640   BOOST_MATH_GPU_ENABLED tools::promote_args_t<T1, T2>641         hypot(T1 x, T2 y, const Policy&);642 643   // cbrt - cube root.644   template <class RT>645   BOOST_MATH_GPU_ENABLED tools::promote_args_t<RT> cbrt(RT z);646 647   template <class RT, class Policy>648   BOOST_MATH_GPU_ENABLED tools::promote_args_t<RT> cbrt(RT z, const Policy&);649 650   // log1p is log(x + 1)651   template <class T>652   BOOST_MATH_GPU_ENABLED tools::promote_args_t<T> log1p(T);653 654   template <class T, class Policy>655   BOOST_MATH_GPU_ENABLED tools::promote_args_t<T> log1p(T, const Policy&);656 657   // log1pmx is log(x + 1) - x658   template <class T>659   BOOST_MATH_GPU_ENABLED tools::promote_args_t<T> log1pmx(T);660 661   template <class T, class Policy>662   BOOST_MATH_GPU_ENABLED tools::promote_args_t<T> log1pmx(T, const Policy&);663 664   // Exp (x) minus 1 functions.665   template <class T>666   BOOST_MATH_GPU_ENABLED tools::promote_args_t<T> expm1(T);667 668   template <class T, class Policy>669   BOOST_MATH_GPU_ENABLED tools::promote_args_t<T> expm1(T, const Policy&);670 671   // Power - 1672   template <class T1, class T2>673   BOOST_MATH_GPU_ENABLED tools::promote_args_t<T1, T2>674         powm1(const T1 a, const T2 z);675 676   template <class T1, class T2, class Policy>677   BOOST_MATH_GPU_ENABLED tools::promote_args_t<T1, T2>678         powm1(const T1 a, const T2 z, const Policy&);679 680   // sqrt(1+x) - 1681   template <class T>682   BOOST_MATH_GPU_ENABLED tools::promote_args_t<T> sqrt1pm1(const T& val);683 684   template <class T, class Policy>685   BOOST_MATH_GPU_ENABLED tools::promote_args_t<T> sqrt1pm1(const T& val, const Policy&);686 687   // sinus cardinals:688   template <class T>689   BOOST_MATH_GPU_ENABLED tools::promote_args_t<T> sinc_pi(T x);690 691   template <class T, class Policy>692   BOOST_MATH_GPU_ENABLED tools::promote_args_t<T> sinc_pi(T x, const Policy&);693 694   template <class T>695   tools::promote_args_t<T> sinhc_pi(T x);696 697   template <class T, class Policy>698   tools::promote_args_t<T> sinhc_pi(T x, const Policy&);699 700   // inverse hyperbolics:701   template<typename T>702   tools::promote_args_t<T> asinh(T x);703 704   template<typename T, class Policy>705   tools::promote_args_t<T> asinh(T x, const Policy&);706 707   template<typename T>708   tools::promote_args_t<T> acosh(T x);709 710   template<typename T, class Policy>711   tools::promote_args_t<T> acosh(T x, const Policy&);712 713   template<typename T>714   BOOST_MATH_GPU_ENABLED tools::promote_args_t<T> atanh(T x);715 716   template<typename T, class Policy>717   BOOST_MATH_GPU_ENABLED tools::promote_args_t<T> atanh(T x, const Policy&);718 719   namespace detail{720 721      typedef boost::math::integral_constant<int, 0> bessel_no_int_tag;      // No integer optimisation possible.722      typedef boost::math::integral_constant<int, 1> bessel_maybe_int_tag;   // Maybe integer optimisation.723      typedef boost::math::integral_constant<int, 2> bessel_int_tag;         // Definite integer optimisation.724 725      template <class T1, class T2, class Policy>726      struct bessel_traits727      {728         using result_type = typename boost::math::conditional<729            boost::math::is_integral<T1>::value,730            typename tools::promote_args<T2>::type,731            tools::promote_args_t<T1, T2>732         >::type;733 734         typedef typename policies::precision<result_type, Policy>::type precision_type;735 736         using optimisation_tag = typename boost::math::conditional<737            (precision_type::value <= 0 || precision_type::value > 64),738            bessel_no_int_tag,739            typename boost::math::conditional<740               boost::math::is_integral<T1>::value,741               bessel_int_tag,742               bessel_maybe_int_tag743            >::type744         >::type;745 746         using optimisation_tag128 = typename boost::math::conditional<747            (precision_type::value <= 0 || precision_type::value > 113),748            bessel_no_int_tag,749            typename boost::math::conditional<750               boost::math::is_integral<T1>::value,751               bessel_int_tag,752               bessel_maybe_int_tag753            >::type754         >::type;755      };756   } // detail757 758   // Bessel functions:759   template <class T1, class T2, class Policy>760   BOOST_MATH_GPU_ENABLED typename detail::bessel_traits<T1, T2, Policy>::result_type cyl_bessel_j(T1 v, T2 x, const Policy& pol);761   template <class T1, class T2, class Policy>762   BOOST_MATH_GPU_ENABLED typename detail::bessel_traits<T1, T2, Policy>::result_type cyl_bessel_j_prime(T1 v, T2 x, const Policy& pol);763 764   template <class T1, class T2>765   BOOST_MATH_GPU_ENABLED typename detail::bessel_traits<T1, T2, policies::policy<> >::result_type cyl_bessel_j(T1 v, T2 x);766   template <class T1, class T2>767   BOOST_MATH_GPU_ENABLED typename detail::bessel_traits<T1, T2, policies::policy<> >::result_type cyl_bessel_j_prime(T1 v, T2 x);768 769   template <class T, class Policy>770   BOOST_MATH_GPU_ENABLED typename detail::bessel_traits<T, T, Policy>::result_type sph_bessel(unsigned v, T x, const Policy& pol);771   template <class T, class Policy>772   BOOST_MATH_GPU_ENABLED typename detail::bessel_traits<T, T, Policy>::result_type sph_bessel_prime(unsigned v, T x, const Policy& pol);773 774   template <class T>775   BOOST_MATH_GPU_ENABLED typename detail::bessel_traits<T, T, policies::policy<> >::result_type sph_bessel(unsigned v, T x);776   template <class T>777   BOOST_MATH_GPU_ENABLED typename detail::bessel_traits<T, T, policies::policy<> >::result_type sph_bessel_prime(unsigned v, T x);778 779   template <class T1, class T2, class Policy>780   BOOST_MATH_GPU_ENABLED typename detail::bessel_traits<T1, T2, Policy>::result_type cyl_bessel_i(T1 v, T2 x, const Policy& pol);781   template <class T1, class T2, class Policy>782   BOOST_MATH_GPU_ENABLED typename detail::bessel_traits<T1, T2, Policy>::result_type cyl_bessel_i_prime(T1 v, T2 x, const Policy& pol);783 784   template <class T1, class T2>785   BOOST_MATH_GPU_ENABLED typename detail::bessel_traits<T1, T2, policies::policy<> >::result_type cyl_bessel_i(T1 v, T2 x);786   template <class T1, class T2>787   BOOST_MATH_GPU_ENABLED typename detail::bessel_traits<T1, T2, policies::policy<> >::result_type cyl_bessel_i_prime(T1 v, T2 x);788 789   template <class T1, class T2, class Policy>790   BOOST_MATH_GPU_ENABLED typename detail::bessel_traits<T1, T2, Policy>::result_type cyl_bessel_k(T1 v, T2 x, const Policy& pol);791   template <class T1, class T2, class Policy>792   BOOST_MATH_GPU_ENABLED typename detail::bessel_traits<T1, T2, Policy>::result_type cyl_bessel_k_prime(T1 v, T2 x, const Policy& pol);793 794   template <class T1, class T2>795   BOOST_MATH_GPU_ENABLED typename detail::bessel_traits<T1, T2, policies::policy<> >::result_type cyl_bessel_k(T1 v, T2 x);796   template <class T1, class T2>797   BOOST_MATH_GPU_ENABLED typename detail::bessel_traits<T1, T2, policies::policy<> >::result_type cyl_bessel_k_prime(T1 v, T2 x);798 799   template <class T1, class T2, class Policy>800   BOOST_MATH_GPU_ENABLED typename detail::bessel_traits<T1, T2, Policy>::result_type cyl_neumann(T1 v, T2 x, const Policy& pol);801   template <class T1, class T2, class Policy>802   BOOST_MATH_GPU_ENABLED typename detail::bessel_traits<T1, T2, Policy>::result_type cyl_neumann_prime(T1 v, T2 x, const Policy& pol);803 804   template <class T1, class T2>805   BOOST_MATH_GPU_ENABLED typename detail::bessel_traits<T1, T2, policies::policy<> >::result_type cyl_neumann(T1 v, T2 x);806   template <class T1, class T2>807   BOOST_MATH_GPU_ENABLED typename detail::bessel_traits<T1, T2, policies::policy<> >::result_type cyl_neumann_prime(T1 v, T2 x);808 809   template <class T, class Policy>810   BOOST_MATH_GPU_ENABLED typename detail::bessel_traits<T, T, Policy>::result_type sph_neumann(unsigned v, T x, const Policy& pol);811   template <class T, class Policy>812   BOOST_MATH_GPU_ENABLED typename detail::bessel_traits<T, T, Policy>::result_type sph_neumann_prime(unsigned v, T x, const Policy& pol);813 814   template <class T>815   BOOST_MATH_GPU_ENABLED typename detail::bessel_traits<T, T, policies::policy<> >::result_type sph_neumann(unsigned v, T x);816   template <class T>817   BOOST_MATH_GPU_ENABLED typename detail::bessel_traits<T, T, policies::policy<> >::result_type sph_neumann_prime(unsigned v, T x);818 819   template <class T, class Policy>820   BOOST_MATH_GPU_ENABLED typename detail::bessel_traits<T, T, Policy>::result_type cyl_bessel_j_zero(T v, int m, const Policy& pol);821 822   template <class T>823   BOOST_MATH_GPU_ENABLED typename detail::bessel_traits<T, T, policies::policy<> >::result_type cyl_bessel_j_zero(T v, int m);824 825   template <class T, class OutputIterator>826   BOOST_MATH_GPU_ENABLED OutputIterator cyl_bessel_j_zero(T v,827                          int start_index,828                          unsigned number_of_zeros,829                          OutputIterator out_it);830 831   template <class T, class OutputIterator, class Policy>832   BOOST_MATH_GPU_ENABLED OutputIterator cyl_bessel_j_zero(T v,833                          int start_index,834                          unsigned number_of_zeros,835                          OutputIterator out_it,836                          const Policy&);837 838   template <class T, class Policy>839   BOOST_MATH_GPU_ENABLED typename detail::bessel_traits<T, T, Policy>::result_type cyl_neumann_zero(T v, int m, const Policy& pol);840 841   template <class T>842   BOOST_MATH_GPU_ENABLED typename detail::bessel_traits<T, T, policies::policy<> >::result_type cyl_neumann_zero(T v, int m);843 844   template <class T, class OutputIterator>845   BOOST_MATH_GPU_ENABLED OutputIterator cyl_neumann_zero(T v,846                         int start_index,847                         unsigned number_of_zeros,848                         OutputIterator out_it);849 850   template <class T, class OutputIterator, class Policy>851   BOOST_MATH_GPU_ENABLED OutputIterator cyl_neumann_zero(T v,852                         int start_index,853                         unsigned number_of_zeros,854                         OutputIterator out_it,855                         const Policy&);856 857   template <class T1, class T2>858   BOOST_MATH_GPU_ENABLED boost::math::complex<typename detail::bessel_traits<T1, T2, policies::policy<> >::result_type> cyl_hankel_1(T1 v, T2 x);859 860   template <class T1, class T2, class Policy>861   BOOST_MATH_GPU_ENABLED boost::math::complex<typename detail::bessel_traits<T1, T2, Policy>::result_type> cyl_hankel_1(T1 v, T2 x, const Policy& pol);862 863   template <class T1, class T2, class Policy>864   BOOST_MATH_GPU_ENABLED boost::math::complex<typename detail::bessel_traits<T1, T2, Policy>::result_type> cyl_hankel_2(T1 v, T2 x, const Policy& pol);865 866   template <class T1, class T2>867   BOOST_MATH_GPU_ENABLED boost::math::complex<typename detail::bessel_traits<T1, T2, policies::policy<> >::result_type> cyl_hankel_2(T1 v, T2 x);868 869   template <class T1, class T2, class Policy>870   BOOST_MATH_GPU_ENABLED boost::math::complex<typename detail::bessel_traits<T1, T2, Policy>::result_type> sph_hankel_1(T1 v, T2 x, const Policy& pol);871 872   template <class T1, class T2>873   BOOST_MATH_GPU_ENABLED boost::math::complex<typename detail::bessel_traits<T1, T2, policies::policy<> >::result_type> sph_hankel_1(T1 v, T2 x);874 875   template <class T1, class T2, class Policy>876   BOOST_MATH_GPU_ENABLED boost::math::complex<typename detail::bessel_traits<T1, T2, Policy>::result_type> sph_hankel_2(T1 v, T2 x, const Policy& pol);877 878   template <class T1, class T2>879   BOOST_MATH_GPU_ENABLED boost::math::complex<typename detail::bessel_traits<T1, T2, policies::policy<> >::result_type> sph_hankel_2(T1 v, T2 x);880 881   template <class T, class Policy>882   BOOST_MATH_GPU_ENABLED tools::promote_args_t<T> airy_ai(T x, const Policy&);883 884   template <class T>885   BOOST_MATH_GPU_ENABLED tools::promote_args_t<T> airy_ai(T x);886 887   template <class T, class Policy>888   BOOST_MATH_GPU_ENABLED tools::promote_args_t<T> airy_bi(T x, const Policy&);889 890   template <class T>891   BOOST_MATH_GPU_ENABLED tools::promote_args_t<T> airy_bi(T x);892 893   template <class T, class Policy>894   BOOST_MATH_GPU_ENABLED tools::promote_args_t<T> airy_ai_prime(T x, const Policy&);895 896   template <class T>897   BOOST_MATH_GPU_ENABLED tools::promote_args_t<T> airy_ai_prime(T x);898 899   template <class T, class Policy>900   BOOST_MATH_GPU_ENABLED tools::promote_args_t<T> airy_bi_prime(T x, const Policy&);901 902   template <class T>903   BOOST_MATH_GPU_ENABLED tools::promote_args_t<T> airy_bi_prime(T x);904 905   template <class T>906   BOOST_MATH_GPU_ENABLED T airy_ai_zero(int m);907   template <class T, class Policy>908   BOOST_MATH_GPU_ENABLED T airy_ai_zero(int m, const Policy&);909 910   template <class OutputIterator>911   BOOST_MATH_GPU_ENABLED OutputIterator airy_ai_zero(912                     int start_index,913                     unsigned number_of_zeros,914                     OutputIterator out_it);915   template <class OutputIterator, class Policy>916   BOOST_MATH_GPU_ENABLED OutputIterator airy_ai_zero(917                     int start_index,918                     unsigned number_of_zeros,919                     OutputIterator out_it,920                     const Policy&);921 922   template <class T>923   BOOST_MATH_GPU_ENABLED T airy_bi_zero(int m);924   template <class T, class Policy>925   BOOST_MATH_GPU_ENABLED T airy_bi_zero(int m, const Policy&);926 927   template <class OutputIterator>928   BOOST_MATH_GPU_ENABLED OutputIterator airy_bi_zero(929                     int start_index,930                     unsigned number_of_zeros,931                     OutputIterator out_it);932   template <class OutputIterator, class Policy>933   BOOST_MATH_GPU_ENABLED OutputIterator airy_bi_zero(934                     int start_index,935                     unsigned number_of_zeros,936                     OutputIterator out_it,937                     const Policy&);938 939   template <class T, class Policy>940   BOOST_MATH_GPU_ENABLED tools::promote_args_t<T> sin_pi(T x, const Policy&);941 942   template <class T>943   BOOST_MATH_GPU_ENABLED tools::promote_args_t<T> sin_pi(T x);944 945   template <class T, class Policy>946   BOOST_MATH_GPU_ENABLED tools::promote_args_t<T> cos_pi(T x, const Policy&);947 948   template <class T>949   BOOST_MATH_GPU_ENABLED tools::promote_args_t<T> cos_pi(T x);950 951   template <class T>952   BOOST_MATH_GPU_ENABLED int fpclassify BOOST_NO_MACRO_EXPAND(T t);953 954   template <class T>955   BOOST_MATH_GPU_ENABLED bool isfinite BOOST_NO_MACRO_EXPAND(T z);956 957   template <class T>958   BOOST_MATH_GPU_ENABLED bool isinf BOOST_NO_MACRO_EXPAND(T t);959 960   template <class T>961   BOOST_MATH_GPU_ENABLED bool isnan BOOST_NO_MACRO_EXPAND(T t);962 963   template <class T>964   BOOST_MATH_GPU_ENABLED bool isnormal BOOST_NO_MACRO_EXPAND(T t);965 966   template<class T>967   BOOST_MATH_GPU_ENABLED int signbit BOOST_NO_MACRO_EXPAND(T x);968 969   template <class T>970   BOOST_MATH_GPU_ENABLED int sign BOOST_NO_MACRO_EXPAND(const T& z);971 972   template <class T, class U>973   BOOST_MATH_GPU_ENABLED typename tools::promote_args_permissive<T, U>::type 974   copysign BOOST_NO_MACRO_EXPAND(const T& x, const U& y);975 976   template <class T>977   BOOST_MATH_GPU_ENABLED typename tools::promote_args_permissive<T>::type 978   changesign BOOST_NO_MACRO_EXPAND(const T& z);979 980   // Exponential integrals:981   namespace detail{982 983   template <class T, class U>984   struct expint_result985   {986      typedef typename boost::math::conditional<987         policies::is_policy<U>::value,988         tools::promote_args_t<T>,989         typename tools::promote_args<U>::type990      >::type type;991   };992 993   } // namespace detail994 995   template <class T, class Policy>996   BOOST_MATH_GPU_ENABLED tools::promote_args_t<T> expint(unsigned n, T z, const Policy&);997 998   template <class T, class U>999   BOOST_MATH_GPU_ENABLED typename detail::expint_result<T, U>::type expint(T const z, U const u);1000 1001   template <class T>1002   BOOST_MATH_GPU_ENABLED tools::promote_args_t<T> expint(T z);1003 1004   // Zeta:1005   template <class T, class Policy>1006   tools::promote_args_t<T> zeta(T s, const Policy&);1007 1008   // Owen's T function:1009   template <class T1, class T2, class Policy>1010   tools::promote_args_t<T1, T2> owens_t(T1 h, T2 a, const Policy& pol);1011 1012   template <class T1, class T2>1013   tools::promote_args_t<T1, T2> owens_t(T1 h, T2 a);1014 1015   // Jacobi Functions:1016   template <class T, class U, class V, class Policy>1017   tools::promote_args_t<T, U, V> jacobi_elliptic(T k, U theta, V* pcn, V* pdn, const Policy&);1018 1019   template <class T, class U, class V>1020   tools::promote_args_t<T, U, V> jacobi_elliptic(T k, U theta, V* pcn = 0, V* pdn = 0);1021 1022   template <class U, class T, class Policy>1023   tools::promote_args_t<T, U> jacobi_sn(U k, T theta, const Policy& pol);1024 1025   template <class U, class T>1026   tools::promote_args_t<T, U> jacobi_sn(U k, T theta);1027 1028   template <class T, class U, class Policy>1029   tools::promote_args_t<T, U> jacobi_cn(T k, U theta, const Policy& pol);1030 1031   template <class T, class U>1032   tools::promote_args_t<T, U> jacobi_cn(T k, U theta);1033 1034   template <class T, class U, class Policy>1035   tools::promote_args_t<T, U> jacobi_dn(T k, U theta, const Policy& pol);1036 1037   template <class T, class U>1038   tools::promote_args_t<T, U> jacobi_dn(T k, U theta);1039 1040   template <class T, class U, class Policy>1041   tools::promote_args_t<T, U> jacobi_cd(T k, U theta, const Policy& pol);1042 1043   template <class T, class U>1044   tools::promote_args_t<T, U> jacobi_cd(T k, U theta);1045 1046   template <class T, class U, class Policy>1047   tools::promote_args_t<T, U> jacobi_dc(T k, U theta, const Policy& pol);1048 1049   template <class T, class U>1050   tools::promote_args_t<T, U> jacobi_dc(T k, U theta);1051 1052   template <class T, class U, class Policy>1053   tools::promote_args_t<T, U> jacobi_ns(T k, U theta, const Policy& pol);1054 1055   template <class T, class U>1056   tools::promote_args_t<T, U> jacobi_ns(T k, U theta);1057 1058   template <class T, class U, class Policy>1059   tools::promote_args_t<T, U> jacobi_sd(T k, U theta, const Policy& pol);1060 1061   template <class T, class U>1062   tools::promote_args_t<T, U> jacobi_sd(T k, U theta);1063 1064   template <class T, class U, class Policy>1065   tools::promote_args_t<T, U> jacobi_ds(T k, U theta, const Policy& pol);1066 1067   template <class T, class U>1068   tools::promote_args_t<T, U> jacobi_ds(T k, U theta);1069 1070   template <class T, class U, class Policy>1071   tools::promote_args_t<T, U> jacobi_nc(T k, U theta, const Policy& pol);1072 1073   template <class T, class U>1074   tools::promote_args_t<T, U> jacobi_nc(T k, U theta);1075 1076   template <class T, class U, class Policy>1077   tools::promote_args_t<T, U> jacobi_nd(T k, U theta, const Policy& pol);1078 1079   template <class T, class U>1080   tools::promote_args_t<T, U> jacobi_nd(T k, U theta);1081 1082   template <class T, class U, class Policy>1083   tools::promote_args_t<T, U> jacobi_sc(T k, U theta, const Policy& pol);1084 1085   template <class T, class U>1086   tools::promote_args_t<T, U> jacobi_sc(T k, U theta);1087 1088   template <class T, class U, class Policy>1089   tools::promote_args_t<T, U> jacobi_cs(T k, U theta, const Policy& pol);1090 1091   template <class T, class U>1092   tools::promote_args_t<T, U> jacobi_cs(T k, U theta);1093 1094   // Jacobi Theta Functions:1095   template <class T, class U, class Policy>1096   tools::promote_args_t<T, U> jacobi_theta1(T z, U q, const Policy& pol);1097 1098   template <class T, class U>1099   tools::promote_args_t<T, U> jacobi_theta1(T z, U q);1100 1101   template <class T, class U, class Policy>1102   tools::promote_args_t<T, U> jacobi_theta2(T z, U q, const Policy& pol);1103 1104   template <class T, class U>1105   tools::promote_args_t<T, U> jacobi_theta2(T z, U q);1106 1107   template <class T, class U, class Policy>1108   tools::promote_args_t<T, U> jacobi_theta3(T z, U q, const Policy& pol);1109 1110   template <class T, class U>1111   tools::promote_args_t<T, U> jacobi_theta3(T z, U q);1112 1113   template <class T, class U, class Policy>1114   tools::promote_args_t<T, U> jacobi_theta4(T z, U q, const Policy& pol);1115 1116   template <class T, class U>1117   tools::promote_args_t<T, U> jacobi_theta4(T z, U q);1118 1119   template <class T, class U, class Policy>1120   tools::promote_args_t<T, U> jacobi_theta1tau(T z, U tau, const Policy& pol);1121 1122   template <class T, class U>1123   tools::promote_args_t<T, U> jacobi_theta1tau(T z, U tau);1124 1125   template <class T, class U, class Policy>1126   tools::promote_args_t<T, U> jacobi_theta2tau(T z, U tau, const Policy& pol);1127 1128   template <class T, class U>1129   tools::promote_args_t<T, U> jacobi_theta2tau(T z, U tau);1130 1131   template <class T, class U, class Policy>1132   tools::promote_args_t<T, U> jacobi_theta3tau(T z, U tau, const Policy& pol);1133 1134   template <class T, class U>1135   tools::promote_args_t<T, U> jacobi_theta3tau(T z, U tau);1136 1137   template <class T, class U, class Policy>1138   tools::promote_args_t<T, U> jacobi_theta4tau(T z, U tau, const Policy& pol);1139 1140   template <class T, class U>1141   tools::promote_args_t<T, U> jacobi_theta4tau(T z, U tau);1142 1143   template <class T, class U, class Policy>1144   tools::promote_args_t<T, U> jacobi_theta3m1(T z, U q, const Policy& pol);1145 1146   template <class T, class U>1147   tools::promote_args_t<T, U> jacobi_theta3m1(T z, U q);1148 1149   template <class T, class U, class Policy>1150   tools::promote_args_t<T, U> jacobi_theta4m1(T z, U q, const Policy& pol);1151 1152   template <class T, class U>1153   tools::promote_args_t<T, U> jacobi_theta4m1(T z, U q);1154 1155   template <class T, class U, class Policy>1156   tools::promote_args_t<T, U> jacobi_theta3m1tau(T z, U tau, const Policy& pol);1157 1158   template <class T, class U>1159   tools::promote_args_t<T, U> jacobi_theta3m1tau(T z, U tau);1160 1161   template <class T, class U, class Policy>1162   tools::promote_args_t<T, U> jacobi_theta4m1tau(T z, U tau, const Policy& pol);1163 1164   template <class T, class U>1165   tools::promote_args_t<T, U> jacobi_theta4m1tau(T z, U tau);1166 1167 1168   template <class T>1169   tools::promote_args_t<T> zeta(T s);1170 1171   // pow:1172   template <int N, typename T, class Policy>1173   BOOST_MATH_GPU_ENABLED BOOST_MATH_CXX14_CONSTEXPR tools::promote_args_t<T> pow(T base, const Policy& policy);1174 1175   template <int N, typename T>1176   BOOST_MATH_GPU_ENABLED BOOST_MATH_CXX14_CONSTEXPR tools::promote_args_t<T> pow(T base);1177 1178   // next:1179   template <class T, class U, class Policy>1180   tools::promote_args_t<T, U> nextafter(const T&, const U&, const Policy&);1181   template <class T, class U>1182   tools::promote_args_t<T, U> nextafter(const T&, const U&);1183   template <class T, class Policy>1184   tools::promote_args_t<T> float_next(const T&, const Policy&);1185   template <class T>1186   tools::promote_args_t<T> float_next(const T&);1187   template <class T, class Policy>1188   tools::promote_args_t<T> float_prior(const T&, const Policy&);1189   template <class T>1190   tools::promote_args_t<T> float_prior(const T&);1191   template <class T, class U, class Policy>1192   tools::promote_args_t<T, U> float_distance(const T&, const U&, const Policy&);1193   template <class T, class U>1194   tools::promote_args_t<T, U> float_distance(const T&, const U&);1195   template <class T, class Policy>1196   tools::promote_args_t<T> float_advance(T val, int distance, const Policy& pol);1197   template <class T>1198   tools::promote_args_t<T> float_advance(const T& val, int distance);1199 1200   template <class T, class Policy>1201   tools::promote_args_t<T> ulp(const T& val, const Policy& pol);1202   template <class T>1203   tools::promote_args_t<T> ulp(const T& val);1204 1205   template <class T, class U>1206   tools::promote_args_t<T, U> relative_difference(const T&, const U&);1207   template <class T, class U>1208   tools::promote_args_t<T, U> epsilon_difference(const T&, const U&);1209 1210   template<class T>1211   BOOST_MATH_CONSTEXPR_TABLE_FUNCTION T unchecked_bernoulli_b2n(const std::size_t n);1212   template <class T, class Policy>1213   T bernoulli_b2n(const int i, const Policy &pol);1214   template <class T>1215   T bernoulli_b2n(const int i);1216   template <class T, class OutputIterator, class Policy>1217   OutputIterator bernoulli_b2n(const int start_index,1218                                       const unsigned number_of_bernoullis_b2n,1219                                       OutputIterator out_it,1220                                       const Policy& pol);1221   template <class T, class OutputIterator>1222   OutputIterator bernoulli_b2n(const int start_index,1223                                       const unsigned number_of_bernoullis_b2n,1224                                       OutputIterator out_it);1225   template <class T, class Policy>1226   T tangent_t2n(const int i, const Policy &pol);1227   template <class T>1228   T tangent_t2n(const int i);1229   template <class T, class OutputIterator, class Policy>1230   OutputIterator tangent_t2n(const int start_index,1231                                       const unsigned number_of_bernoullis_b2n,1232                                       OutputIterator out_it,1233                                       const Policy& pol);1234   template <class T, class OutputIterator>1235   OutputIterator tangent_t2n(const int start_index,1236                                       const unsigned number_of_bernoullis_b2n,1237                                       OutputIterator out_it);1238 1239   // Lambert W:1240   template <class T, class Policy>1241   boost::math::tools::promote_args_t<T> lambert_w0(T z, const Policy& pol);1242   template <class T>1243   boost::math::tools::promote_args_t<T> lambert_w0(T z);1244   template <class T, class Policy>1245   boost::math::tools::promote_args_t<T> lambert_wm1(T z, const Policy& pol);1246   template <class T>1247   boost::math::tools::promote_args_t<T> lambert_wm1(T z);1248   template <class T, class Policy>1249   boost::math::tools::promote_args_t<T> lambert_w0_prime(T z, const Policy& pol);1250   template <class T>1251   boost::math::tools::promote_args_t<T> lambert_w0_prime(T z);1252   template <class T, class Policy>1253   boost::math::tools::promote_args_t<T> lambert_wm1_prime(T z, const Policy& pol);1254   template <class T>1255   boost::math::tools::promote_args_t<T> lambert_wm1_prime(T z);1256 1257   // Hypergeometrics:1258   template <class T1, class T2> tools::promote_args_t<T1, T2> hypergeometric_1F0(T1 a, T2 z);1259   template <class T1, class T2, class Policy> tools::promote_args_t<T1, T2> hypergeometric_1F0(T1 a, T2 z, const Policy&);1260 1261   template <class T1, class T2> tools::promote_args_t<T1, T2> hypergeometric_0F1(T1 b, T2 z);1262   template <class T1, class T2, class Policy> tools::promote_args_t<T1, T2> hypergeometric_0F1(T1 b, T2 z, const Policy&);1263 1264   template <class T1, class T2, class T3> tools::promote_args_t<T1, T2, T3> hypergeometric_2F0(T1 a1, T2 a2, T3 z);1265   template <class T1, class T2, class T3, class Policy> tools::promote_args_t<T1, T2, T3> hypergeometric_2F0(T1 a1, T2 a2, T3 z, const Policy&);1266 1267   template <class T1, class T2, class T3> tools::promote_args_t<T1, T2, T3> hypergeometric_1F1(T1 a, T2 b, T3 z);1268   template <class T1, class T2, class T3, class Policy> tools::promote_args_t<T1, T2, T3> hypergeometric_1F1(T1 a, T2 b, T3 z, const Policy&);1269 1270 1271    } // namespace math1272} // namespace boost1273 1274#define BOOST_MATH_DETAIL_LL_FUNC(Policy)\1275   \1276   template <class T>\1277   BOOST_MATH_GPU_ENABLED inline T modf(const T& v, long long* ipart){ using boost::math::modf; return modf(v, ipart, Policy()); }\1278   \1279   template <class T>\1280   BOOST_MATH_GPU_ENABLED inline long long lltrunc(const T& v){ using boost::math::lltrunc; return lltrunc(v, Policy()); }\1281   \1282   template <class T>\1283   BOOST_MATH_GPU_ENABLED inline long long llround(const T& v){ using boost::math::llround; return llround(v, Policy()); }\1284 1285#  define BOOST_MATH_DETAIL_11_FUNC(Policy)\1286   template <class T, class U, class V>\1287   inline boost::math::tools::promote_args_t<T, U> hypergeometric_1F1(const T& a, const U& b, const V& z)\1288   { return boost::math::hypergeometric_1F1(a, b, z, Policy()); }\1289 1290#define BOOST_MATH_DECLARE_SPECIAL_FUNCTIONS(Policy)\1291   \1292   BOOST_MATH_DETAIL_LL_FUNC(Policy)\1293   BOOST_MATH_DETAIL_11_FUNC(Policy)\1294   \1295   template <class RT1, class RT2>\1296   BOOST_MATH_GPU_ENABLED inline boost::math::tools::promote_args_t<RT1, RT2> \1297   beta(RT1 a, RT2 b) { return ::boost::math::beta(a, b, Policy()); }\1298\1299   template <class RT1, class RT2, class A>\1300   BOOST_MATH_GPU_ENABLED inline boost::math::tools::promote_args_t<RT1, RT2, A> \1301   beta(RT1 a, RT2 b, A x){ return ::boost::math::beta(a, b, x, Policy()); }\1302\1303   template <class RT1, class RT2, class RT3>\1304   BOOST_MATH_GPU_ENABLED inline boost::math::tools::promote_args_t<RT1, RT2, RT3> \1305   betac(RT1 a, RT2 b, RT3 x) { return ::boost::math::betac(a, b, x, Policy()); }\1306\1307   template <class RT1, class RT2, class RT3>\1308   BOOST_MATH_GPU_ENABLED inline boost::math::tools::promote_args_t<RT1, RT2, RT3> \1309   ibeta(RT1 a, RT2 b, RT3 x){ return ::boost::math::ibeta(a, b, x, Policy()); }\1310\1311   template <class RT1, class RT2, class RT3>\1312   BOOST_MATH_GPU_ENABLED inline boost::math::tools::promote_args_t<RT1, RT2, RT3> \1313   ibetac(RT1 a, RT2 b, RT3 x){ return ::boost::math::ibetac(a, b, x, Policy()); }\1314\1315   template <class T1, class T2, class T3, class T4>\1316   BOOST_MATH_GPU_ENABLED inline boost::math::tools::promote_args_t<T1, T2, T3, T4>  \1317   ibeta_inv(T1 a, T2 b, T3 p, T4* py){ return ::boost::math::ibeta_inv(a, b, p, py, Policy()); }\1318\1319   template <class RT1, class RT2, class RT3>\1320   BOOST_MATH_GPU_ENABLED inline boost::math::tools::promote_args_t<RT1, RT2, RT3> \1321   ibeta_inv(RT1 a, RT2 b, RT3 p){ return ::boost::math::ibeta_inv(a, b, p, Policy()); }\1322\1323   template <class T1, class T2, class T3, class T4>\1324   BOOST_MATH_GPU_ENABLED inline boost::math::tools::promote_args_t<T1, T2, T3, T4> \1325   ibetac_inv(T1 a, T2 b, T3 q, T4* py){ return ::boost::math::ibetac_inv(a, b, q, py, Policy()); }\1326\1327   template <class RT1, class RT2, class RT3>\1328   BOOST_MATH_GPU_ENABLED inline boost::math::tools::promote_args_t<RT1, RT2, RT3> \1329   ibeta_inva(RT1 a, RT2 b, RT3 p){ return ::boost::math::ibeta_inva(a, b, p, Policy()); }\1330\1331   template <class T1, class T2, class T3>\1332   BOOST_MATH_GPU_ENABLED inline boost::math::tools::promote_args_t<T1, T2, T3> \1333   ibetac_inva(T1 a, T2 b, T3 q){ return ::boost::math::ibetac_inva(a, b, q, Policy()); }\1334\1335   template <class RT1, class RT2, class RT3>\1336   BOOST_MATH_GPU_ENABLED inline boost::math::tools::promote_args_t<RT1, RT2, RT3> \1337   ibeta_invb(RT1 a, RT2 b, RT3 p){ return ::boost::math::ibeta_invb(a, b, p, Policy()); }\1338\1339   template <class T1, class T2, class T3>\1340   BOOST_MATH_GPU_ENABLED inline boost::math::tools::promote_args_t<T1, T2, T3> \1341   ibetac_invb(T1 a, T2 b, T3 q){ return ::boost::math::ibetac_invb(a, b, q, Policy()); }\1342\1343   template <class RT1, class RT2, class RT3>\1344   BOOST_MATH_GPU_ENABLED inline boost::math::tools::promote_args_t<RT1, RT2, RT3> \1345   ibetac_inv(RT1 a, RT2 b, RT3 q){ return ::boost::math::ibetac_inv(a, b, q, Policy()); }\1346\1347   template <class RT1, class RT2, class RT3>\1348   BOOST_MATH_GPU_ENABLED inline boost::math::tools::promote_args_t<RT1, RT2, RT3> \1349   ibeta_derivative(RT1 a, RT2 b, RT3 x){ return ::boost::math::ibeta_derivative(a, b, x, Policy()); }\1350\1351   template <class T> BOOST_MATH_GPU_ENABLED T binomial_coefficient(unsigned n, unsigned k){ return ::boost::math::binomial_coefficient<T, Policy>(n, k, Policy()); }\1352\1353   template <class RT>\1354   BOOST_MATH_GPU_ENABLED inline boost::math::tools::promote_args_t<RT> erf(RT z) { return ::boost::math::erf(z, Policy()); }\1355\1356   template <class RT>\1357   BOOST_MATH_GPU_ENABLED inline boost::math::tools::promote_args_t<RT> erfc(RT z){ return ::boost::math::erfc(z, Policy()); }\1358\1359   template <class RT>\1360   BOOST_MATH_GPU_ENABLED inline boost::math::tools::promote_args_t<RT> erf_inv(RT z) { return ::boost::math::erf_inv(z, Policy()); }\1361\1362   template <class RT>\1363   BOOST_MATH_GPU_ENABLED inline boost::math::tools::promote_args_t<RT> erfc_inv(RT z){ return ::boost::math::erfc_inv(z, Policy()); }\1364\1365   using boost::math::legendre_next;\1366\1367   template <class T>\1368   inline boost::math::tools::promote_args_t<T> \1369   legendre_p(int l, T x){ return ::boost::math::legendre_p(l, x, Policy()); }\1370\1371   template <class T>\1372   inline boost::math::tools::promote_args_t<T> \1373   legendre_p_prime(int l, T x){ return ::boost::math::legendre_p(l, x, Policy()); }\1374\1375   template <class T>\1376   inline boost::math::tools::promote_args_t<T> \1377   legendre_q(unsigned l, T x){ return ::boost::math::legendre_q(l, x, Policy()); }\1378\1379   using ::boost::math::legendre_next;\1380\1381   template <class T>\1382   inline boost::math::tools::promote_args_t<T> \1383   legendre_p(int l, int m, T x){ return ::boost::math::legendre_p(l, m, x, Policy()); }\1384\1385   using ::boost::math::laguerre_next;\1386\1387   template <class T>\1388   inline boost::math::tools::promote_args_t<T> \1389   laguerre(unsigned n, T x){ return ::boost::math::laguerre(n, x, Policy()); }\1390\1391   template <class T1, class T2>\1392   inline typename boost::math::laguerre_result<T1, T2>::type \1393   laguerre(unsigned n, T1 m, T2 x) { return ::boost::math::laguerre(n, m, x, Policy()); }\1394\1395   template <class T>\1396   BOOST_MATH_GPU_ENABLED inline boost::math::tools::promote_args_t<T> \1397   hermite(unsigned n, T x){ return ::boost::math::hermite(n, x, Policy()); }\1398\1399   using boost::math::hermite_next;\1400\1401   using boost::math::chebyshev_next;\1402\1403  template<class Real>\1404  Real chebyshev_t(unsigned n, Real const & x){ return ::boost::math::chebyshev_t(n, x, Policy()); }\1405\1406  template<class Real>\1407  Real chebyshev_u(unsigned n, Real const & x){ return ::boost::math::chebyshev_u(n, x, Policy()); }\1408\1409  template<class Real>\1410  Real chebyshev_t_prime(unsigned n, Real const & x){ return ::boost::math::chebyshev_t_prime(n, x, Policy()); }\1411\1412  using ::boost::math::chebyshev_clenshaw_recurrence;\1413\1414   template <class T1, class T2>\1415   inline std::complex<boost::math::tools::promote_args_t<T1, T2>> \1416   spherical_harmonic(unsigned n, int m, T1 theta, T2 phi){ return boost::math::spherical_harmonic(n, m, theta, phi, Policy()); }\1417\1418   template <class T1, class T2>\1419   inline boost::math::tools::promote_args_t<T1, T2> \1420   spherical_harmonic_r(unsigned n, int m, T1 theta, T2 phi){ return ::boost::math::spherical_harmonic_r(n, m, theta, phi, Policy()); }\1421\1422   template <class T1, class T2>\1423   inline boost::math::tools::promote_args_t<T1, T2> \1424   spherical_harmonic_i(unsigned n, int m, T1 theta, T2 phi){ return boost::math::spherical_harmonic_i(n, m, theta, phi, Policy()); }\1425\1426   template <class T1, class T2, class Policy>\1427   inline boost::math::tools::promote_args_t<T1, T2> \1428      spherical_harmonic_i(unsigned n, int m, T1 theta, T2 phi, const Policy& pol);\1429\1430   template <class T1, class T2, class T3>\1431   BOOST_MATH_GPU_ENABLED inline boost::math::tools::promote_args_t<T1, T2, T3> \1432   ellint_rf(T1 x, T2 y, T3 z){ return ::boost::math::ellint_rf(x, y, z, Policy()); }\1433\1434   template <class T1, class T2, class T3>\1435   BOOST_MATH_GPU_ENABLED inline boost::math::tools::promote_args_t<T1, T2, T3> \1436   ellint_rd(T1 x, T2 y, T3 z){ return ::boost::math::ellint_rd(x, y, z, Policy()); }\1437\1438   template <class T1, class T2>\1439   BOOST_MATH_GPU_ENABLED inline boost::math::tools::promote_args_t<T1, T2> \1440   ellint_rc(T1 x, T2 y){ return ::boost::math::ellint_rc(x, y, Policy()); }\1441\1442   template <class T1, class T2, class T3, class T4>\1443   BOOST_MATH_GPU_ENABLED inline boost::math::tools::promote_args_t<T1, T2, T3, T4> \1444   ellint_rj(T1 x, T2 y, T3 z, T4 p){ return boost::math::ellint_rj(x, y, z, p, Policy()); }\1445\1446   template <class T1, class T2, class T3>\1447   BOOST_MATH_GPU_ENABLED inline boost::math::tools::promote_args_t<T1, T2, T3> \1448   ellint_rg(T1 x, T2 y, T3 z){ return ::boost::math::ellint_rg(x, y, z, Policy()); }\1449   \1450   template <typename T>\1451   BOOST_MATH_GPU_ENABLED inline boost::math::tools::promote_args_t<T> ellint_2(T k){ return boost::math::ellint_2(k, Policy()); }\1452\1453   template <class T1, class T2>\1454   BOOST_MATH_GPU_ENABLED inline boost::math::tools::promote_args_t<T1, T2> ellint_2(T1 k, T2 phi){ return boost::math::ellint_2(k, phi, Policy()); }\1455\1456   template <typename T>\1457   BOOST_MATH_GPU_ENABLED inline boost::math::tools::promote_args_t<T> ellint_d(T k){ return boost::math::ellint_d(k, Policy()); }\1458\1459   template <class T1, class T2>\1460   BOOST_MATH_GPU_ENABLED inline boost::math::tools::promote_args_t<T1, T2> ellint_d(T1 k, T2 phi){ return boost::math::ellint_d(k, phi, Policy()); }\1461\1462   template <class T1, class T2>\1463   BOOST_MATH_GPU_ENABLED inline boost::math::tools::promote_args_t<T1, T2> jacobi_zeta(T1 k, T2 phi){ return boost::math::jacobi_zeta(k, phi, Policy()); }\1464\1465   template <class T1, class T2>\1466   BOOST_MATH_GPU_ENABLED inline boost::math::tools::promote_args_t<T1, T2> heuman_lambda(T1 k, T2 phi){ return boost::math::heuman_lambda(k, phi, Policy()); }\1467\1468   template <typename T>\1469   BOOST_MATH_GPU_ENABLED inline boost::math::tools::promote_args_t<T> ellint_1(T k){ return boost::math::ellint_1(k, Policy()); }\1470\1471   template <class T1, class T2>\1472   BOOST_MATH_GPU_ENABLED inline boost::math::tools::promote_args_t<T1, T2> ellint_1(T1 k, T2 phi){ return boost::math::ellint_1(k, phi, Policy()); }\1473\1474   template <class T1, class T2, class T3>\1475   BOOST_MATH_GPU_ENABLED inline boost::math::tools::promote_args_t<T1, T2, T3> ellint_3(T1 k, T2 v, T3 phi){ return boost::math::ellint_3(k, v, phi, Policy()); }\1476\1477   template <class T1, class T2>\1478   BOOST_MATH_GPU_ENABLED inline boost::math::tools::promote_args_t<T1, T2> ellint_3(T1 k, T2 v){ return boost::math::ellint_3(k, v, Policy()); }\1479\1480   using boost::math::max_factorial;\1481   template <class RT>\1482   BOOST_MATH_GPU_ENABLED inline RT factorial(unsigned int i) { return boost::math::factorial<RT>(i, Policy()); }\1483   using boost::math::unchecked_factorial;\1484   template <class RT>\1485   BOOST_MATH_GPU_ENABLED inline RT double_factorial(unsigned i){ return boost::math::double_factorial<RT>(i, Policy()); }\1486   template <class RT>\1487   inline boost::math::tools::promote_args_t<RT> falling_factorial(RT x, unsigned n){ return boost::math::falling_factorial(x, n, Policy()); }\1488   template <class RT>\1489   inline boost::math::tools::promote_args_t<RT> rising_factorial(RT x, unsigned n){ return boost::math::rising_factorial(x, n, Policy()); }\1490\1491   template <class RT>\1492   BOOST_MATH_GPU_ENABLED inline boost::math::tools::promote_args_t<RT> tgamma(RT z){ return boost::math::tgamma(z, Policy()); }\1493\1494   template <class RT>\1495   BOOST_MATH_GPU_ENABLED inline boost::math::tools::promote_args_t<RT> tgamma1pm1(RT z){ return boost::math::tgamma1pm1(z, Policy()); }\1496\1497   template <class RT1, class RT2>\1498   BOOST_MATH_GPU_ENABLED inline boost::math::tools::promote_args_t<RT1, RT2> tgamma(RT1 a, RT2 z){ return boost::math::tgamma(a, z, Policy()); }\1499\1500   template <class RT>\1501   BOOST_MATH_GPU_ENABLED inline boost::math::tools::promote_args_t<RT> lgamma(RT z, int* sign){ return boost::math::lgamma(z, sign, Policy()); }\1502\1503   template <class RT>\1504   BOOST_MATH_GPU_ENABLED inline boost::math::tools::promote_args_t<RT> lgamma(RT x){ return boost::math::lgamma(x, Policy()); }\1505\1506   template <class RT1, class RT2>\1507   BOOST_MATH_GPU_ENABLED inline boost::math::tools::promote_args_t<RT1, RT2> tgamma_lower(RT1 a, RT2 z){ return boost::math::tgamma_lower(a, z, Policy()); }\1508\1509   template <class RT1, class RT2>\1510   BOOST_MATH_GPU_ENABLED inline boost::math::tools::promote_args_t<RT1, RT2> gamma_q(RT1 a, RT2 z){ return boost::math::gamma_q(a, z, Policy()); }\1511\1512   template <class RT1, class RT2>\1513   BOOST_MATH_GPU_ENABLED inline boost::math::tools::promote_args_t<RT1, RT2> gamma_p(RT1 a, RT2 z){ return boost::math::gamma_p(a, z, Policy()); }\1514\1515   template <class T1, class T2>\1516   BOOST_MATH_GPU_ENABLED inline boost::math::tools::promote_args_t<T1, T2> tgamma_delta_ratio(T1 z, T2 delta){ return boost::math::tgamma_delta_ratio(z, delta, Policy()); }\1517\1518   template <class T1, class T2>\1519   BOOST_MATH_GPU_ENABLED inline boost::math::tools::promote_args_t<T1, T2> tgamma_ratio(T1 a, T2 b) { return boost::math::tgamma_ratio(a, b, Policy()); }\1520\1521   template <class T1, class T2>\1522   BOOST_MATH_GPU_ENABLED inline boost::math::tools::promote_args_t<T1, T2> gamma_p_derivative(T1 a, T2 x){ return boost::math::gamma_p_derivative(a, x, Policy()); }\1523\1524   template <class T1, class T2>\1525   BOOST_MATH_GPU_ENABLED inline boost::math::tools::promote_args_t<T1, T2> gamma_p_inv(T1 a, T2 p){ return boost::math::gamma_p_inv(a, p, Policy()); }\1526\1527   template <class T1, class T2>\1528   BOOST_MATH_GPU_ENABLED inline boost::math::tools::promote_args_t<T1, T2> gamma_p_inva(T1 a, T2 p){ return boost::math::gamma_p_inva(a, p, Policy()); }\1529\1530   template <class T1, class T2>\1531   BOOST_MATH_GPU_ENABLED inline boost::math::tools::promote_args_t<T1, T2> gamma_q_inv(T1 a, T2 q){ return boost::math::gamma_q_inv(a, q, Policy()); }\1532\1533   template <class T1, class T2>\1534   BOOST_MATH_GPU_ENABLED inline boost::math::tools::promote_args_t<T1, T2> gamma_q_inva(T1 a, T2 q){ return boost::math::gamma_q_inva(a, q, Policy()); }\1535\1536   template <class T>\1537   BOOST_MATH_GPU_ENABLED inline boost::math::tools::promote_args_t<T> digamma(T x){ return boost::math::digamma(x, Policy()); }\1538\1539   template <class T>\1540   BOOST_MATH_GPU_ENABLED inline boost::math::tools::promote_args_t<T> trigamma(T x){ return boost::math::trigamma(x, Policy()); }\1541\1542   template <class T>\1543   inline boost::math::tools::promote_args_t<T> polygamma(int n, T x){ return boost::math::polygamma(n, x, Policy()); }\1544   \1545   template <class T1, class T2>\1546   inline boost::math::tools::promote_args_t<T1, T2> \1547   BOOST_MATH_GPU_ENABLED hypot(T1 x, T2 y){ return boost::math::hypot(x, y, Policy()); }\1548\1549   template <class RT>\1550   inline boost::math::tools::promote_args_t<RT> cbrt(RT z){ return boost::math::cbrt(z, Policy()); }\1551\1552   template <class T>\1553   BOOST_MATH_GPU_ENABLED inline boost::math::tools::promote_args_t<T> log1p(T x){ return boost::math::log1p(x, Policy()); }\1554\1555   template <class T>\1556   BOOST_MATH_GPU_ENABLED inline boost::math::tools::promote_args_t<T> log1pmx(T x){ return boost::math::log1pmx(x, Policy()); }\1557\1558   template <class T>\1559   BOOST_MATH_GPU_ENABLED inline boost::math::tools::promote_args_t<T> expm1(T x){ return boost::math::expm1(x, Policy()); }\1560\1561   template <class T1, class T2>\1562   inline boost::math::tools::promote_args_t<T1, T2> \1563   BOOST_MATH_GPU_ENABLED powm1(const T1 a, const T2 z){ return boost::math::powm1(a, z, Policy()); }\1564\1565   template <class T>\1566   BOOST_MATH_GPU_ENABLED inline boost::math::tools::promote_args_t<T> sqrt1pm1(const T& val){ return boost::math::sqrt1pm1(val, Policy()); }\1567\1568   template <class T>\1569   BOOST_MATH_GPU_ENABLED inline boost::math::tools::promote_args_t<T> sinc_pi(T x){ return boost::math::sinc_pi(x, Policy()); }\1570\1571   template <class T>\1572   inline boost::math::tools::promote_args_t<T> sinhc_pi(T x){ return boost::math::sinhc_pi(x, Policy()); }\1573\1574   template<typename T>\1575   inline boost::math::tools::promote_args_t<T> asinh(const T x){ return boost::math::asinh(x, Policy()); }\1576\1577   template<typename T>\1578   inline boost::math::tools::promote_args_t<T> acosh(const T x){ return boost::math::acosh(x, Policy()); }\1579\1580   template<typename T>\1581   BOOST_MATH_GPU_ENABLED inline boost::math::tools::promote_args_t<T> atanh(const T x){ return boost::math::atanh(x, Policy()); }\1582\1583   template <class T1, class T2>\1584   inline typename boost::math::detail::bessel_traits<T1, T2, Policy >::result_type cyl_bessel_j(T1 v, T2 x)\1585   { return boost::math::cyl_bessel_j(v, x, Policy()); }\1586\1587   template <class T1, class T2>\1588   inline typename boost::math::detail::bessel_traits<T1, T2, Policy >::result_type cyl_bessel_j_prime(T1 v, T2 x)\1589   { return boost::math::cyl_bessel_j_prime(v, x, Policy()); }\1590\1591   template <class T>\1592   inline typename boost::math::detail::bessel_traits<T, T, Policy >::result_type sph_bessel(unsigned v, T x)\1593   { return boost::math::sph_bessel(v, x, Policy()); }\1594\1595   template <class T>\1596   inline typename boost::math::detail::bessel_traits<T, T, Policy >::result_type sph_bessel_prime(unsigned v, T x)\1597   { return boost::math::sph_bessel_prime(v, x, Policy()); }\1598\1599   template <class T1, class T2>\1600   inline typename boost::math::detail::bessel_traits<T1, T2, Policy >::result_type \1601   cyl_bessel_i(T1 v, T2 x) { return boost::math::cyl_bessel_i(v, x, Policy()); }\1602\1603   template <class T1, class T2>\1604   inline typename boost::math::detail::bessel_traits<T1, T2, Policy >::result_type \1605   cyl_bessel_i_prime(T1 v, T2 x) { return boost::math::cyl_bessel_i_prime(v, x, Policy()); }\1606\1607   template <class T1, class T2>\1608   inline typename boost::math::detail::bessel_traits<T1, T2, Policy >::result_type \1609   cyl_bessel_k(T1 v, T2 x) { return boost::math::cyl_bessel_k(v, x, Policy()); }\1610\1611   template <class T1, class T2>\1612   inline typename boost::math::detail::bessel_traits<T1, T2, Policy >::result_type \1613   cyl_bessel_k_prime(T1 v, T2 x) { return boost::math::cyl_bessel_k_prime(v, x, Policy()); }\1614\1615   template <class T1, class T2>\1616   inline typename boost::math::detail::bessel_traits<T1, T2, Policy >::result_type \1617   cyl_neumann(T1 v, T2 x){ return boost::math::cyl_neumann(v, x, Policy()); }\1618\1619   template <class T1, class T2>\1620   inline typename boost::math::detail::bessel_traits<T1, T2, Policy >::result_type \1621   cyl_neumann_prime(T1 v, T2 x){ return boost::math::cyl_neumann_prime(v, x, Policy()); }\1622\1623   template <class T>\1624   inline typename boost::math::detail::bessel_traits<T, T, Policy >::result_type \1625   sph_neumann(unsigned v, T x){ return boost::math::sph_neumann(v, x, Policy()); }\1626\1627   template <class T>\1628   inline typename boost::math::detail::bessel_traits<T, T, Policy >::result_type \1629   sph_neumann_prime(unsigned v, T x){ return boost::math::sph_neumann_prime(v, x, Policy()); }\1630\1631   template <class T>\1632   inline typename boost::math::detail::bessel_traits<T, T, Policy >::result_type cyl_bessel_j_zero(T v, int m)\1633   { return boost::math::cyl_bessel_j_zero(v, m, Policy()); }\1634\1635template <class OutputIterator, class T>\1636   inline void cyl_bessel_j_zero(T v,\1637                                 int start_index,\1638                                 unsigned number_of_zeros,\1639                                 OutputIterator out_it)\1640   { boost::math::cyl_bessel_j_zero(v, start_index, number_of_zeros, out_it, Policy()); }\1641\1642   template <class T>\1643   inline typename boost::math::detail::bessel_traits<T, T, Policy >::result_type cyl_neumann_zero(T v, int m)\1644   { return boost::math::cyl_neumann_zero(v, m, Policy()); }\1645\1646template <class OutputIterator, class T>\1647   inline void cyl_neumann_zero(T v,\1648                                int start_index,\1649                                unsigned number_of_zeros,\1650                                OutputIterator out_it)\1651   { boost::math::cyl_neumann_zero(v, start_index, number_of_zeros, out_it, Policy()); }\1652\1653   template <class T>\1654   BOOST_MATH_GPU_ENABLED inline boost::math::tools::promote_args_t<T> sin_pi(T x){ return boost::math::sin_pi(x, Policy()); }\1655\1656   template <class T>\1657   BOOST_MATH_GPU_ENABLED inline boost::math::tools::promote_args_t<T> cos_pi(T x){ return boost::math::cos_pi(x, Policy()); }\1658\1659   using boost::math::fpclassify;\1660   using boost::math::isfinite;\1661   using boost::math::isinf;\1662   using boost::math::isnan;\1663   using boost::math::isnormal;\1664   using boost::math::signbit;\1665   using boost::math::sign;\1666   using boost::math::copysign;\1667   using boost::math::changesign;\1668   \1669   template <class T, class U>\1670   BOOST_MATH_GPU_ENABLED inline typename boost::math::tools::promote_args_t<T,U> expint(T const& z, U const& u)\1671   { return boost::math::expint(z, u, Policy()); }\1672   \1673   template <class T>\1674   BOOST_MATH_GPU_ENABLED inline boost::math::tools::promote_args_t<T> expint(T z){ return boost::math::expint(z, Policy()); }\1675   \1676   template <class T>\1677   inline boost::math::tools::promote_args_t<T> zeta(T s){ return boost::math::zeta(s, Policy()); }\1678   \1679   template <class T>\1680   BOOST_MATH_GPU_ENABLED inline T round(const T& v){ using boost::math::round; return round(v, Policy()); }\1681   \1682   template <class T>\1683   BOOST_MATH_GPU_ENABLED inline int iround(const T& v){ using boost::math::iround; return iround(v, Policy()); }\1684   \1685   template <class T>\1686   BOOST_MATH_GPU_ENABLED inline long lround(const T& v){ using boost::math::lround; return lround(v, Policy()); }\1687   \1688   template <class T>\1689   BOOST_MATH_GPU_ENABLED inline T trunc(const T& v){ using boost::math::trunc; return trunc(v, Policy()); }\1690   \1691   template <class T>\1692   BOOST_MATH_GPU_ENABLED inline int itrunc(const T& v){ using boost::math::itrunc; return itrunc(v, Policy()); }\1693   \1694   template <class T>\1695   BOOST_MATH_GPU_ENABLED inline long ltrunc(const T& v){ using boost::math::ltrunc; return ltrunc(v, Policy()); }\1696   \1697   template <class T>\1698   BOOST_MATH_GPU_ENABLED inline T modf(const T& v, T* ipart){ using boost::math::modf; return modf(v, ipart, Policy()); }\1699   \1700   template <class T>\1701   BOOST_MATH_GPU_ENABLED inline T modf(const T& v, int* ipart){ using boost::math::modf; return modf(v, ipart, Policy()); }\1702   \1703   template <class T>\1704   BOOST_MATH_GPU_ENABLED inline T modf(const T& v, long* ipart){ using boost::math::modf; return modf(v, ipart, Policy()); }\1705   \1706   template <int N, class T>\1707   BOOST_MATH_GPU_ENABLED inline boost::math::tools::promote_args_t<T> pow(T v){ return boost::math::pow<N>(v, Policy()); }\1708   \1709   template <class T> T nextafter(const T& a, const T& b){ return static_cast<T>(boost::math::nextafter(a, b, Policy())); }\1710   template <class T> T float_next(const T& a){ return static_cast<T>(boost::math::float_next(a, Policy())); }\1711   template <class T> T float_prior(const T& a){ return static_cast<T>(boost::math::float_prior(a, Policy())); }\1712   template <class T> T float_distance(const T& a, const T& b){ return static_cast<T>(boost::math::float_distance(a, b, Policy())); }\1713   template <class T> T ulp(const T& a){ return static_cast<T>(boost::math::ulp(a, Policy())); }\1714   \1715   template <class RT1, class RT2>\1716   inline boost::math::tools::promote_args_t<RT1, RT2> owens_t(RT1 a, RT2 z){ return boost::math::owens_t(a, z, Policy()); }\1717   \1718   template <class T1, class T2>\1719   BOOST_MATH_GPU_ENABLED inline boost::math::complex<typename boost::math::detail::bessel_traits<T1, T2, Policy >::result_type> cyl_hankel_1(T1 v, T2 x)\1720   {  return boost::math::cyl_hankel_1(v, x, Policy()); }\1721   \1722   template <class T1, class T2>\1723   BOOST_MATH_GPU_ENABLED inline boost::math::complex<typename boost::math::detail::bessel_traits<T1, T2, Policy >::result_type> cyl_hankel_2(T1 v, T2 x)\1724   { return boost::math::cyl_hankel_2(v, x, Policy()); }\1725   \1726   template <class T1, class T2>\1727   BOOST_MATH_GPU_ENABLED inline boost::math::complex<typename boost::math::detail::bessel_traits<T1, T2, Policy >::result_type> sph_hankel_1(T1 v, T2 x)\1728   { return boost::math::sph_hankel_1(v, x, Policy()); }\1729   \1730   template <class T1, class T2>\1731   BOOST_MATH_GPU_ENABLED inline boost::math::complex<typename boost::math::detail::bessel_traits<T1, T2, Policy >::result_type> sph_hankel_2(T1 v, T2 x)\1732   { return boost::math::sph_hankel_2(v, x, Policy()); }\1733   \1734   template <class T>\1735   inline boost::math::tools::promote_args_t<T> jacobi_elliptic(T k, T theta, T* pcn, T* pdn)\1736   { return static_cast<boost::math::tools::promote_args_t<T>>(boost::math::jacobi_elliptic(k, theta, pcn, pdn, Policy())); }\1737   \1738   template <class U, class T>\1739   inline boost::math::tools::promote_args_t<T, U> jacobi_sn(U k, T theta)\1740   { return boost::math::jacobi_sn(k, theta, Policy()); }\1741   \1742   template <class T, class U>\1743   inline boost::math::tools::promote_args_t<T, U> jacobi_cn(T k, U theta)\1744   { return boost::math::jacobi_cn(k, theta, Policy()); }\1745   \1746   template <class T, class U>\1747   inline boost::math::tools::promote_args_t<T, U> jacobi_dn(T k, U theta)\1748   { return boost::math::jacobi_dn(k, theta, Policy()); }\1749   \1750   template <class T, class U>\1751   inline boost::math::tools::promote_args_t<T, U> jacobi_cd(T k, U theta)\1752   { return boost::math::jacobi_cd(k, theta, Policy()); }\1753   \1754   template <class T, class U>\1755   inline boost::math::tools::promote_args_t<T, U> jacobi_dc(T k, U theta)\1756   { return boost::math::jacobi_dc(k, theta, Policy()); }\1757   \1758   template <class T, class U>\1759   inline boost::math::tools::promote_args_t<T, U> jacobi_ns(T k, U theta)\1760   { return boost::math::jacobi_ns(k, theta, Policy()); }\1761   \1762   template <class T, class U>\1763   inline boost::math::tools::promote_args_t<T, U> jacobi_sd(T k, U theta)\1764   { return boost::math::jacobi_sd(k, theta, Policy()); }\1765   \1766   template <class T, class U>\1767   inline boost::math::tools::promote_args_t<T, U> jacobi_ds(T k, U theta)\1768   { return boost::math::jacobi_ds(k, theta, Policy()); }\1769   \1770   template <class T, class U>\1771   inline boost::math::tools::promote_args_t<T, U> jacobi_nc(T k, U theta)\1772   { return boost::math::jacobi_nc(k, theta, Policy()); }\1773   \1774   template <class T, class U>\1775   inline boost::math::tools::promote_args_t<T, U> jacobi_nd(T k, U theta)\1776   { return boost::math::jacobi_nd(k, theta, Policy()); }\1777   \1778   template <class T, class U>\1779   inline boost::math::tools::promote_args_t<T, U> jacobi_sc(T k, U theta)\1780   { return boost::math::jacobi_sc(k, theta, Policy()); }\1781   \1782   template <class T, class U>\1783   inline boost::math::tools::promote_args_t<T, U> jacobi_cs(T k, U theta)\1784   { return boost::math::jacobi_cs(k, theta, Policy()); }\1785   \1786   template <class T, class U>\1787   inline boost::math::tools::promote_args_t<T, U> jacobi_theta1(T z, U q)\1788   { return boost::math::jacobi_theta1(z, q, Policy()); }\1789   \1790   template <class T, class U>\1791   inline boost::math::tools::promote_args_t<T, U> jacobi_theta2(T z, U q)\1792   { return boost::math::jacobi_theta2(z, q, Policy()); }\1793   \1794   template <class T, class U>\1795   inline boost::math::tools::promote_args_t<T, U> jacobi_theta3(T z, U q)\1796   { return boost::math::jacobi_theta3(z, q, Policy()); }\1797   \1798   template <class T, class U>\1799   inline boost::math::tools::promote_args_t<T, U> jacobi_theta4(T z, U q)\1800   { return boost::math::jacobi_theta4(z, q, Policy()); }\1801   \1802   template <class T, class U>\1803   inline boost::math::tools::promote_args_t<T, U> jacobi_theta1tau(T z, U q)\1804   { return boost::math::jacobi_theta1tau(z, q, Policy()); }\1805   \1806   template <class T, class U>\1807   inline boost::math::tools::promote_args_t<T, U> jacobi_theta2tau(T z, U q)\1808   { return boost::math::jacobi_theta2tau(z, q, Policy()); }\1809   \1810   template <class T, class U>\1811   inline boost::math::tools::promote_args_t<T, U> jacobi_theta3tau(T z, U q)\1812   { return boost::math::jacobi_theta3tau(z, q, Policy()); }\1813   \1814   template <class T, class U>\1815   inline boost::math::tools::promote_args_t<T, U> jacobi_theta4tau(T z, U q)\1816   { return boost::math::jacobi_theta4tau(z, q, Policy()); }\1817   \1818   template <class T, class U>\1819   inline boost::math::tools::promote_args_t<T, U> jacobi_theta3m1(T z, U q)\1820   { return boost::math::jacobi_theta3m1(z, q, Policy()); }\1821   \1822   template <class T, class U>\1823   inline boost::math::tools::promote_args_t<T, U> jacobi_theta4m1(T z, U q)\1824   { return boost::math::jacobi_theta4m1(z, q, Policy()); }\1825   \1826   template <class T, class U>\1827   inline boost::math::tools::promote_args_t<T, U> jacobi_theta3m1tau(T z, U q)\1828   { return boost::math::jacobi_theta3m1tau(z, q, Policy()); }\1829   \1830   template <class T, class U>\1831   inline boost::math::tools::promote_args_t<T, U> jacobi_theta4m1tau(T z, U q)\1832   { return boost::math::jacobi_theta4m1tau(z, q, Policy()); }\1833   \1834   template <class T>\1835   BOOST_MATH_GPU_ENABLED inline boost::math::tools::promote_args_t<T> airy_ai(T x)\1836   {  return boost::math::airy_ai(x, Policy());  }\1837   \1838   template <class T>\1839   BOOST_MATH_GPU_ENABLED inline boost::math::tools::promote_args_t<T> airy_bi(T x)\1840   {  return boost::math::airy_bi(x, Policy());  }\1841   \1842   template <class T>\1843   BOOST_MATH_GPU_ENABLED inline boost::math::tools::promote_args_t<T> airy_ai_prime(T x)\1844   {  return boost::math::airy_ai_prime(x, Policy());  }\1845   \1846   template <class T>\1847   BOOST_MATH_GPU_ENABLED inline boost::math::tools::promote_args_t<T> airy_bi_prime(T x)\1848   {  return boost::math::airy_bi_prime(x, Policy());  }\1849   \1850   template <class T>\1851   BOOST_MATH_GPU_ENABLED inline T airy_ai_zero(int m)\1852   { return boost::math::airy_ai_zero<T>(m, Policy()); }\1853   template <class T, class OutputIterator>\1854   BOOST_MATH_GPU_ENABLED OutputIterator airy_ai_zero(int start_index, unsigned number_of_zeros, OutputIterator out_it)\1855   { return boost::math::airy_ai_zero<T>(start_index, number_of_zeros, out_it, Policy()); }\1856   \1857   template <class T>\1858   BOOST_MATH_GPU_ENABLED inline T airy_bi_zero(int m)\1859   { return boost::math::airy_bi_zero<T>(m, Policy()); }\1860   template <class T, class OutputIterator>\1861   BOOST_MATH_GPU_ENABLED OutputIterator airy_bi_zero(int start_index, unsigned number_of_zeros, OutputIterator out_it)\1862   { return boost::math::airy_bi_zero<T>(start_index, number_of_zeros, out_it, Policy()); }\1863   \1864   template <class T>\1865   T bernoulli_b2n(const int i)\1866   { return boost::math::bernoulli_b2n<T>(i, Policy()); }\1867   template <class T, class OutputIterator>\1868   OutputIterator bernoulli_b2n(int start_index, unsigned number_of_bernoullis_b2n, OutputIterator out_it)\1869   { return boost::math::bernoulli_b2n<T>(start_index, number_of_bernoullis_b2n, out_it, Policy()); }\1870   \1871   template <class T>\1872   T tangent_t2n(const int i)\1873   { return boost::math::tangent_t2n<T>(i, Policy()); }\1874   template <class T, class OutputIterator>\1875   OutputIterator tangent_t2n(int start_index, unsigned number_of_bernoullis_b2n, OutputIterator out_it)\1876   { return boost::math::tangent_t2n<T>(start_index, number_of_bernoullis_b2n, out_it, Policy()); }\1877   \1878   template <class T> inline boost::math::tools::promote_args_t<T> lambert_w0(T z) { return boost::math::lambert_w0(z, Policy()); }\1879   template <class T> inline boost::math::tools::promote_args_t<T> lambert_wm1(T z) { return boost::math::lambert_w0(z, Policy()); }\1880   template <class T> inline boost::math::tools::promote_args_t<T> lambert_w0_prime(T z) { return boost::math::lambert_w0(z, Policy()); }\1881   template <class T> inline boost::math::tools::promote_args_t<T> lambert_wm1_prime(T z) { return boost::math::lambert_w0(z, Policy()); }\1882   \1883   template <class T, class U>\1884   inline boost::math::tools::promote_args_t<T, U> hypergeometric_1F0(const T& a, const U& z)\1885   { return boost::math::hypergeometric_1F0(a, z, Policy()); }\1886   \1887   template <class T, class U>\1888   inline boost::math::tools::promote_args_t<T, U> hypergeometric_0F1(const T& a, const U& z)\1889   { return boost::math::hypergeometric_0F1(a, z, Policy()); }\1890   \1891   template <class T, class U, class V>\1892   inline boost::math::tools::promote_args_t<T, U> hypergeometric_2F0(const T& a1, const U& a2, const V& z)\1893   { return boost::math::hypergeometric_2F0(a1, a2, z, Policy()); }\1894   \1895 1896 1897 1898 1899#endif // BOOST_MATH_HAS_NVRTC1900 1901#endif // BOOST_MATH_SPECIAL_MATH_FWD_HPP1902