10 #ifndef EIGEN_SPECIAL_FUNCTIONS_H
11 #define EIGEN_SPECIAL_FUNCTIONS_H
46 template <
typename Scalar>
53 template <
typename Scalar>
58 #if EIGEN_HAS_C99_MATH
60 #if defined(__GLIBC__) && ((__GLIBC__ >= 2 && __GLIBC_MINOR__ >= 19) || __GLIBC__ > 2) && \
61 (defined(_DEFAULT_SOURCE) || defined(_BSD_SOURCE) || defined(_SVID_SOURCE))
62 #define EIGEN_HAS_LGAMMA_R
66 #if defined(__GLIBC__) && ((__GLIBC__ == 2 && __GLIBC_MINOR__ < 19) || __GLIBC__ < 2) && \
67 (defined(_BSD_SOURCE) || defined(_SVID_SOURCE))
68 #define EIGEN_HAS_LGAMMA_R
74 #if !defined(EIGEN_GPU_COMPILE_PHASE) && defined(EIGEN_HAS_LGAMMA_R) && !defined(__APPLE__)
76 return ::lgammaf_r(
x, &dummy);
77 #elif defined(SYCL_DEVICE_ONLY)
78 return cl::sycl::lgamma(
x);
86 struct lgamma_impl<
double> {
88 #if !defined(EIGEN_GPU_COMPILE_PHASE) && defined(EIGEN_HAS_LGAMMA_R) && !defined(__APPLE__)
90 return ::lgamma_r(
x, &dummy);
91 #elif defined(SYCL_DEVICE_ONLY)
92 return cl::sycl::lgamma(
x);
99 #undef EIGEN_HAS_LGAMMA_R
106 template <
typename Scalar>
124 template <
typename Scalar>
134 constexpr
float A[] = {-4.16666666666666666667E-3f, 3.96825396825396825397E-3f, -8.33333333333333333333E-3f,
135 8.33333333333333333333E-2f};
149 constexpr
double A[] = {8.33333333333333333333E-2, -2.10927960927960927961E-2, 7.57575757575757575758E-3,
150 -4.16666666666666666667E-3, 3.96825396825396825397E-3, -8.33333333333333333333E-3,
151 8.33333333333333333333E-2};
162 template <
typename Scalar>
223 bool negative =
false;
268 return (negative) ?
y -
nz :
y;
275 template <
typename Scalar>
277 template <
typename T>
282 template <
typename T>
284 constexpr
float kClamp = 11.0f;
285 const T x =
pmin(
pmax(x_in, pset1<T>(-kClamp)), pset1<T>(kClamp));
292 constexpr
float alpha[] = {5.61802298761904239654541015625e-04, -4.91381669417023658752441406250e-03,
293 2.67075151205062866210937500000e-02, -1.12800106406211853027343750000e-01,
294 3.76122951507568359375000000000e-01, -1.12837910652160644531250000000e+00};
296 const T one = pset1<T>(1.0f);
302 if (!
predux_any(x_abs_gt_one_mask))
return erfc_small;
310 constexpr
float gamma[] = {1.0208116471767425537109375e-01f, 4.2920666933059692382812500e-01f,
311 3.2379078865051269531250000e-01f, 5.3971976041793823242187500e-02f};
312 constexpr
float delta[] = {1.7251677811145782470703125e-02f, 3.9137163758277893066406250e-01f,
313 1.0000000000000000000000000e+00f, 6.2173241376876831054687500e-01f,
314 9.5662862062454223632812500e-02f};
321 const T z =
pnmadd(exp2_hi, x2_lo, exp2_hi);
325 const T r =
pdiv(num, denom);
326 const T maybe_two =
pand(
pcmp_lt(
x, pset1<T>(0.0)), pset1<T>(2.0));
327 const T erfc_large =
pmadd(z,
r, maybe_two);
328 return pselect(x_abs_gt_one_mask, erfc_large, erfc_small);
335 template <
typename T>
342 constexpr
double alpha[] = {1.9493725660006057018823477644531294572516344487667083740234375e-04,
343 1.8272566210022942682217328425053892715368419885635375976562500e-03,
344 4.5303363351690106863856044583371840417385101318359375000000000e-02,
345 1.4215015503619179981775744181504705920815467834472656250000000e-01,
346 1.1283791670955125585606992899556644260883331298828125000000000e+00};
347 constexpr
double beta[] = {2.0294484101083099089526257108317963684385176748037338256835938e-05,
348 6.8117805899186819641732970609382391558028757572174072265625000e-04,
349 1.0582026056098614921752165685120417037978768348693847656250000e-02,
350 9.3252603143757495374188692949246615171432495117187500000000000e-02,
351 4.5931062818368939559832142549566924571990966796875000000000000e-01,
355 return pdiv(num_small, denom_small);
365 template <
typename T>
367 constexpr
double gamma[] = {1.5252844933226974316088642158462107545346952974796295166015625e-04,
368 1.0909912393738931124520519233556115068495273590087890625000000e-02,
369 1.0628604636755033252537572252549580298364162445068359375000000e-01,
370 3.3492472973137982217295416376146022230386734008789062500000000e-01,
371 4.5065776215933289750026347064704168587923049926757812500000000e-01,
372 2.9433039130294824659017649537418037652969360351562500000000000e-01,
373 9.8792676360600226170838311645638896152377128601074218750000000e-02,
374 1.7095935395503719655962981960328761488199234008789062500000000e-02,
375 1.4249109729504577659398023570247460156679153442382812500000000e-03,
376 4.4567378313647954771875570045835956989321857690811157226562500e-05};
377 constexpr
double delta[] = {2.041985103115789845773520028160419315099716186523437500000000e-03,
378 5.316030659946043707142493417450168635696172714233398437500000e-02,
379 3.426242193784684864077405563875799998641014099121093750000000e-01,
380 8.565637124308049799026321124983951449394226074218750000000000e-01,
381 1.000000000000000000000000000000000000000000000000000000000000e+00,
382 5.968805280570776972126623149961233139038085937500000000000000e-01,
383 1.890922854723317836356244470152887515723705291748046875000000e-01,
384 3.152505418656005586885981983868987299501895904541015625000000e-02,
385 2.565085751861882583380047861965067568235099315643310546875000e-03,
386 7.899362131678837697403017248376499992446042597293853759765625e-05};
394 const T z =
pnmadd(exp2_hi, x2_lo, exp2_hi);
399 const T r =
pdiv(num_large, denom_large);
400 const T maybe_two =
pand(
pcmp_lt(
x, pset1<T>(0.0)), pset1<T>(2.0));
401 return pmadd(z,
r, maybe_two);
405 template <
typename T>
409 constexpr
double kClamp = 28.0;
410 const T x =
pmin(
pmax(x_in, pset1<T>(-kClamp)), pset1<T>(kClamp));
414 const T one = pset1<T>(1.0);
420 if (!
predux_any(x_abs_gt_one_mask))
return erfc_small;
423 return pselect(x_abs_gt_one_mask, erfc_large, erfc_small);
426 template <
typename T>
432 template <
typename Scalar>
437 #if EIGEN_HAS_C99_MATH
441 #if defined(SYCL_DEVICE_ONLY)
442 return cl::sycl::erfc(
x);
450 struct erfc_impl<
double> {
452 #if defined(SYCL_DEVICE_ONLY)
453 return cl::sycl::erfc(
x);
465 template <
typename Scalar>
467 template <
typename T>
478 template <
typename T>
481 constexpr
float alpha[] = {2.123732201653183437883853912353515625e-06f, 2.861979592125862836837768554687500000e-04f,
482 3.658048342913389205932617187500000000e-03f, 5.243302136659622192382812500000000000e-02f,
483 1.874160766601562500000000000000000000e-01f, 1.128379106521606445312500000000000000e+00f};
486 constexpr
float beta[] = {3.89185734093189239501953125000e-05f, 1.14329601638019084930419921875e-03f,
487 1.47520881146192550659179687500e-02f, 1.12945675849914550781250000000e-01f,
488 4.99425798654556274414062500000e-01f, 1.0f};
504 return pmax(
pmin(
r, pset1<T>(1.0f)), pset1<T>(-1.0f));
508 template <
typename T>
515 const T one = pset1<T>(1.0);
517 if (!
predux_any(x_abs_gt_one_mask))
return erf_small;
521 return pselect(x_abs_gt_one_mask, erf_large, erf_small);
524 template <
typename T>
530 template <
typename Scalar>
535 #if EIGEN_HAS_C99_MATH
539 #if defined(SYCL_DEVICE_ONLY)
540 return cl::sycl::erf(
x);
550 #if defined(SYCL_DEVICE_ONLY)
551 return cl::sycl::erf(
x);
614 template <
typename T>
617 const T sign_mask = pset1<T>(
Scalar(-0.0));
618 T sign_bit = pand<T>(should_flipsign, sign_mask);
619 return pxor<T>(sign_bit,
x);
624 return should_flipsign == 0 ?
x : -
x;
629 return should_flipsign == 0 ?
x : -
x;
636 template <
typename T,
typename ScalarType>
638 const ScalarType
p0[] = {ScalarType(-5.99633501014107895267e1), ScalarType(9.80010754185999661536e1),
639 ScalarType(-5.66762857469070293439e1), ScalarType(1.39312609387279679503e1),
640 ScalarType(-1.23916583867381258016e0)};
641 const ScalarType q0[] = {ScalarType(1.0),
642 ScalarType(1.95448858338141759834e0),
643 ScalarType(4.67627912898881538453e0),
644 ScalarType(8.63602421390890590575e1),
645 ScalarType(-2.25462687854119370527e2),
646 ScalarType(2.00260212380060660359e2),
647 ScalarType(-8.20372256168333339912e1),
648 ScalarType(1.59056225126211695515e1),
649 ScalarType(-1.18331621121330003142e0)};
650 const T sqrt2pi = pset1<T>(ScalarType(2.50662827463100050242e0));
651 const T half = pset1<T>(ScalarType(0.5));
652 T c, c2, ndtri_gt_exp_neg_two;
656 ndtri_gt_exp_neg_two =
658 return pmul(ndtri_gt_exp_neg_two, sqrt2pi);
661 template <
typename T,
typename ScalarType>
666 const ScalarType
p1[] = {ScalarType(4.05544892305962419923e0), ScalarType(3.15251094599893866154e1),
667 ScalarType(5.71628192246421288162e1), ScalarType(4.40805073893200834700e1),
668 ScalarType(1.46849561928858024014e1), ScalarType(2.18663306850790267539e0),
669 ScalarType(-1.40256079171354495875e-1), ScalarType(-3.50424626827848203418e-2),
670 ScalarType(-8.57456785154685413611e-4)};
671 const ScalarType q1[] = {ScalarType(1.0),
672 ScalarType(1.57799883256466749731e1),
673 ScalarType(4.53907635128879210584e1),
674 ScalarType(4.13172038254672030440e1),
675 ScalarType(1.50425385692907503408e1),
676 ScalarType(2.50464946208309415979e0),
677 ScalarType(-1.42182922854787788574e-1),
678 ScalarType(-3.80806407691578277194e-2),
679 ScalarType(-9.33259480895457427372e-4)};
683 const ScalarType p2[] = {ScalarType(3.23774891776946035970e0), ScalarType(6.91522889068984211695e0),
684 ScalarType(3.93881025292474443415e0), ScalarType(1.33303460815807542389e0),
685 ScalarType(2.01485389549179081538e-1), ScalarType(1.23716634817820021358e-2),
686 ScalarType(3.01581553508235416007e-4), ScalarType(2.65806974686737550832e-6),
687 ScalarType(6.23974539184983293730e-9)};
688 const ScalarType q2[] = {ScalarType(1.0),
689 ScalarType(6.02427039364742014255e0),
690 ScalarType(3.67983563856160859403e0),
691 ScalarType(1.37702099489081330271e0),
692 ScalarType(2.16236993594496635890e-1),
693 ScalarType(1.34204006088543189037e-2),
694 ScalarType(3.28014464682127739104e-4),
695 ScalarType(2.89247864745380683936e-6),
696 ScalarType(6.79019408009981274425e-9)};
697 const T eight = pset1<T>(ScalarType(8.0));
698 const T neg_two = pset1<T>(ScalarType(-2));
710 template <
typename T,
typename ScalarType>
715 const T zero = pset1<T>(ScalarType(0));
716 const T one = pset1<T>(ScalarType(1));
718 const T exp_neg_two = pset1<T>(ScalarType(0.13533528323661269189));
719 T b, ndtri, should_flipsign;
724 ndtri =
pselect(
pcmp_lt(exp_neg_two,
b), generic_ndtri_gt_exp_neg_two<T, ScalarType>(
b),
725 generic_ndtri_lt_exp_neg_two<T, ScalarType>(
b, should_flipsign));
730 template <
typename Scalar>
735 #if !EIGEN_HAS_C99_MATH
737 template <
typename Scalar>
746 template <
typename Scalar>
757 template <
typename Scalar>
763 template <
typename Scalar>
766 eigen_assert(
false &&
"machep not supported for this type");
770 eigen_assert(
false &&
"big not supported for this type");
774 eigen_assert(
false &&
"biginv not supported for this type");
808 template <
typename Scalar>
820 template <
typename Scalar, IgammaComputationMode mode>
837 template <
typename Scalar, IgammaComputationMode mode>
883 Scalar dans_da = (dpkm1_da - ans * dqkm1_da) / qkm1;
885 for (
int i = 0; i < igamma_num_iterations<Scalar, mode>();
i++) {
891 Scalar pk = pkm1 * z - pkm2 * yc;
892 Scalar qk = qkm1 * z - qkm2 * yc;
894 Scalar dpk_da = dpkm1_da * z - pkm1 - dpkm2_da * yc + pkm2 *
c;
895 Scalar dqk_da = dqkm1_da * z - qkm1 - dqkm2_da * yc + qkm2 *
c;
901 Scalar dans_da_prev = dans_da;
902 dans_da = (dpk_da - ans * dqk_da) / qk;
909 if (
numext::abs(dans_da - dans_da_prev) <= machep) {
946 return ans * dax_da + dans_da *
ax;
949 return -(dans_da + ans * dlogax_da) *
x;
954 template <
typename Scalar, IgammaComputationMode mode>
989 for (
int i = 0; i < igamma_num_iterations<Scalar, mode>();
i++) {
993 dc_da = term * dc_da + dterm_da *
c;
999 if (
c <= machep * ans) {
1016 return ans * dax_da + dans_da *
ax;
1019 return -(dans_da + ans * dlogax_da) *
x /
a;
1024 #if !EIGEN_HAS_C99_MATH
1026 template <
typename Scalar>
1035 template <
typename Scalar>
1036 struct igammac_impl {
1105 if ((
x < one) || (
x <
a)) {
1119 #if !EIGEN_HAS_C99_MATH
1121 template <
typename Scalar, IgammaComputationMode mode>
1130 template <
typename Scalar, IgammaComputationMode mode>
1131 struct igamma_generic_impl {
1155 if ((
x > one) && (
x >
a)) {
1157 if (mode ==
VALUE) {
1170 template <
typename Scalar>
1175 template <
typename Scalar>
1246 template <
typename Scalar>
1249 template <
typename Scalar>
1267 template <
typename Scalar>
1270 template <
typename Scalar>
1315 template <
typename Scalar>
1320 template <
typename Scalar>
1330 const float machep) {
1348 const double machep) {
1350 while ((
i < 9) || (
a <= 9.0)) {
1363 template <
typename Scalar>
1436 Scalar(-1.8924375803183791606e9),
1438 Scalar(-2.950130727918164224e12),
1439 Scalar(1.1646782814350067249e14),
1440 Scalar(-4.5979787224074726105e15),
1441 Scalar(1.8152105401943546773e17),
1442 Scalar(-7.1661652561756670113e18)
1450 if (
x == one)
return maxnum;
1466 if (
p !=
r)
return nan;
1490 s +=
b *
w / (
x - one);
1495 for (
i = 0;
i < 12;
i++) {
1517 template <
typename Scalar>
1522 #if !EIGEN_HAS_C99_MATH
1524 template <
typename Scalar>
1533 template <
typename Scalar>
1534 struct polygamma_impl {
1545 else if (
n ==
zero) {
1562 template <
typename Scalar>
1567 #if !EIGEN_HAS_C99_MATH
1569 template <
typename Scalar>
1578 template <
typename Scalar>
1579 struct betainc_impl {
1658 template <
typename Scalar>
1659 struct incbeta_cfe {
1661 THIS_TYPE_IS_NOT_SUPPORTED)
1672 Scalar xk, pk, pkm1, pkm2, qk, qkm1, qkm2;
1673 Scalar k1, k2, k3, k4, k5, k6, k7, k8, k26update;
1712 xk = -(
x * k1 * k2) / (k3 * k4);
1713 pk = pkm1 + pkm2 * xk;
1714 qk = qkm1 + qkm2 * xk;
1720 xk = (
x * k5 * k6) / (k7 * k8);
1721 pk = pkm1 + pkm2 * xk;
1722 qk = qkm1 + qkm2 * xk;
1757 }
while (++
n < num_iters);
1764 template <
typename Scalar>
1765 struct betainc_helper {};
1768 struct betainc_helper<float> {
1771 float ans,
a,
b,
t,
x, onemx;
1772 bool reversed_a_b =
false;
1777 if (xx > (aa / (aa + bb))) {
1778 reversed_a_b =
true;
1793 t = betainc_helper<float>::incbps(
a,
b,
x);
1794 if (reversed_a_b)
t = 1.0f -
t;
1799 ans =
x * (
a +
b - 2.0f) / (
a - 1.0f);
1812 if (reversed_a_b)
t = 1.0f -
t;
1842 struct betainc_impl<float> {
1844 const float nan = NumTraits<float>::quiet_NaN();
1847 if (
a <= 0.0f)
return nan;
1848 if (
b <= 0.0f)
return nan;
1849 if ((
x <= 0.0f) || (
x >= 1.0f)) {
1850 if (
x == 0.0f)
return 0.0f;
1851 if (
x == 1.0f)
return 1.0f;
1858 ans = betainc_helper<float>::incbsa(
a + 1.0f,
b,
x);
1863 return betainc_helper<float>::incbsa(
a,
b,
x);
1869 struct betainc_helper<
double> {
1873 double s,
t, u,
v,
n, t1, z, ai;
1884 u = (
n -
b) *
x /
n;
1908 struct betainc_impl<
double> {
1910 const double nan = NumTraits<double>::quiet_NaN();
1915 bool reversed_a_b =
false;
1917 if (aa <= 0.0 || bb <= 0.0) {
1921 if ((xx <= 0.0) || (xx >= 1.0)) {
1922 if (xx == 0.0)
return (0.0);
1923 if (xx == 1.0)
return (1.0);
1928 if ((bb * xx) <= 1.0 && xx <= 0.95) {
1929 return betainc_helper<double>::incbps(aa, bb, xx);
1935 if (xx > (aa / (aa + bb))) {
1936 reversed_a_b =
true;
1948 if (reversed_a_b && (
b *
x) <= 1.0 &&
x <= 0.95) {
1949 t = betainc_helper<double>::incbps(
a,
b,
x);
1959 y =
x * (
a +
b - 2.0) - (
a - 1.0);
2008 template <
typename Scalar>
2013 template <
typename Scalar>
2018 template <
typename Scalar>
2023 template <
typename Scalar>
2028 template <
typename Scalar>
2033 template <
typename Scalar>
2038 template <
typename Scalar>
2043 template <
typename Scalar>
2048 template <
typename Scalar>
2053 template <
typename Scalar>
2059 template <
typename Scalar>
2064 template <
typename Scalar>
Array< int, Dynamic, 1 > v
Definition: Array_initializer_list_vector_cxx11.cpp:1
int i
Definition: BiCGSTAB_step_by_step.cpp:9
const unsigned n
Definition: CG3DPackingUnitTest.cpp:11
#define EIGEN_ALWAYS_INLINE
Definition: Macros.h:845
#define EIGEN_DEVICE_FUNC
Definition: Macros.h:892
#define eigen_assert(x)
Definition: Macros.h:910
#define EIGEN_STRONG_INLINE
Definition: Macros.h:834
#define EIGEN_MATHFUNC_IMPL(func, scalar)
Definition: MathFunctions.h:64
#define EIGEN_PI
Definition: MathFunctions.h:16
Vector3f p0
Definition: MatrixBase_all.cpp:2
Vector3f p1
Definition: MatrixBase_all.cpp:2
RowVector3d w
Definition: Matrix_resize_int.cpp:3
#define EIGEN_STATIC_ASSERT(X, MSG)
Definition: StaticAssert.h:26
float * p
Definition: Tutorial_Map_using.cpp:9
SCALAR Scalar
Definition: bench_gemm.cpp:45
The matrix class, also used for vectors and row-vectors.
Definition: Eigen/Eigen/src/Core/Matrix.h:186
RealScalar s
Definition: level1_cplx_impl.h:130
Eigen::DenseIndex ret
Definition: level1_cplx_impl.h:43
RealScalar alpha
Definition: level1_cplx_impl.h:151
const Scalar * a
Definition: level2_cplx_impl.h:32
Scalar beta
Definition: level2_cplx_impl.h:36
char char char int int * k
Definition: level2_impl.h:374
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bfloat16 log1p(const bfloat16 &a)
Definition: BFloat16.h:619
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet twoprod_low(const Packet &x, const Packet &y, const Packet &xy)
Definition: GenericPacketMathFunctions.h:1716
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE T generic_ndtri_gt_exp_neg_two(const T &b)
Definition: SpecialFunctionsImpl.h:637
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE T erfc_double_large(const T &x, const T &x2)
Definition: SpecialFunctionsImpl.h:366
const Scalar & y
Definition: RandomImpl.h:36
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet plog(const Packet &a)
Definition: GenericPacketMath.h:1103
EIGEN_STRONG_INLINE bool predux_any(const Packet4f &x)
Definition: AltiVec/PacketMath.h:2751
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE T erf_over_x_double_small(const T &x2)
Definition: SpecialFunctionsImpl.h:336
EIGEN_DEVICE_FUNC Packet pdiv(const Packet &a, const Packet &b)
Definition: GenericPacketMath.h:368
IgammaComputationMode
Definition: SpecialFunctionsImpl.h:806
@ SAMPLE_DERIVATIVE
Definition: SpecialFunctionsImpl.h:806
@ VALUE
Definition: SpecialFunctionsImpl.h:806
@ DERIVATIVE
Definition: SpecialFunctionsImpl.h:806
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar main_igamma_term(Scalar a, Scalar x)
Definition: SpecialFunctionsImpl.h:809
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE float flipsign< float >(const float &should_flipsign, const float &x)
Definition: SpecialFunctionsImpl.h:628
EIGEN_DEVICE_FUNC Packet pmax(const Packet &a, const Packet &b)
Definition: GenericPacketMath.h:663
EIGEN_STRONG_INLINE Packet4f pcmp_le(const Packet4f &a, const Packet4f &b)
Definition: AltiVec/PacketMath.h:1314
EIGEN_STRONG_INLINE Packet4i pcmp_lt(const Packet4i &a, const Packet4i &b)
Definition: AltiVec/PacketMath.h:1341
EIGEN_STRONG_INLINE Packet4f pmadd(const Packet4f &a, const Packet4f &b, const Packet4f &c)
Definition: AltiVec/PacketMath.h:1218
EIGEN_STRONG_INLINE Packet4cf pmul(const Packet4cf &a, const Packet4cf &b)
Definition: AVX/Complex.h:88
EIGEN_DEVICE_FUNC Packet preciprocal(const Packet &a)
Definition: GenericPacketMath.h:1433
EIGEN_DEVICE_FUNC Packet pmin(const Packet &a, const Packet &b)
Definition: GenericPacketMath.h:649
EIGEN_STRONG_INLINE Packet2cf pnegate(const Packet2cf &a)
Definition: AltiVec/Complex.h:264
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE double flipsign< double >(const double &should_flipsign, const double &x)
Definition: SpecialFunctionsImpl.h:623
EIGEN_DEVICE_FUNC int igamma_num_iterations()
Definition: SpecialFunctionsImpl.h:821
EIGEN_STRONG_INLINE Packet4f psqrt(const Packet4f &a)
Definition: LSX/PacketMath.h:2176
EIGEN_STRONG_INLINE Packet2cf pcmp_eq(const Packet2cf &a, const Packet2cf &b)
Definition: AltiVec/Complex.h:353
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE T generic_ndtri(const T &a)
Definition: SpecialFunctionsImpl.h:711
EIGEN_STRONG_INLINE Packet8h pand(const Packet8h &a, const Packet8h &b)
Definition: AVX/PacketMath.h:2319
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE T generic_ndtri_lt_exp_neg_two(const T &b, const T &should_flipsign)
Definition: SpecialFunctionsImpl.h:662
EIGEN_STRONG_INLINE Packet4f pnmadd(const Packet4f &a, const Packet4f &b, const Packet4f &c)
Definition: LSX/PacketMath.h:827
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE T flipsign(const T &should_flipsign, const T &x)
Definition: SpecialFunctionsImpl.h:615
EIGEN_STRONG_INLINE Packet4f pselect(const Packet4f &mask, const Packet4f &a, const Packet4f &b)
Definition: AltiVec/PacketMath.h:1474
EIGEN_DEVICE_FUNC Packet psub(const Packet &a, const Packet &b)
Definition: GenericPacketMath.h:337
EIGEN_STRONG_INLINE Packet4f pexp(const Packet4f &_x)
Definition: LSX/PacketMath.h:2663
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE T log(const T &x)
Definition: MathFunctions.h:1332
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE bool() isinf(const Eigen::bfloat16 &h)
Definition: BFloat16.h:747
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bool equal_strict(const X &x, const Y &y)
Definition: Meta.h:571
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE std::enable_if_t< NumTraits< T >::IsSigned||NumTraits< T >::IsComplex, typename NumTraits< T >::Real > abs(const T &x)
Definition: MathFunctions.h:1355
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE bool() isnan(const Eigen::bfloat16 &h)
Definition: BFloat16.h:742
EIGEN_DEVICE_FUNC const Scalar & q
Definition: SpecialFunctionsImpl.h:2019
EIGEN_DEVICE_FUNC EIGEN_MATHFUNC_RETVAL(real, Scalar) real(const Scalar &x)
Definition: MathFunctions.h:1046
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE T exp(const T &x)
Definition: MathFunctions.h:1424
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar() floor(const Scalar &x)
Definition: MathFunctions.h:1200
EIGEN_DEVICE_FUNC internal::pow_impl< ScalarX, ScalarY >::result_type pow(const ScalarX &x, const ScalarY &y)
Definition: MathFunctions.h:1161
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE T tan(const T &x)
Definition: MathFunctions.h:1603
EIGEN_DEVICE_FUNC const Scalar & x
Definition: SpecialFunctionsImpl.h:2024
EIGEN_DEVICE_FUNC const Scalar & b
Definition: SpecialFunctionsImpl.h:2066
Namespace containing all symbols from the Eigen library.
Definition: bench_norm.cpp:70
EIGEN_STRONG_INLINE const Eigen::CwiseBinaryOp< Eigen::internal::scalar_zeta_op< typename DerivedX::Scalar >, const DerivedX, const DerivedQ > zeta(const Eigen::ArrayBase< DerivedX > &x, const Eigen::ArrayBase< DerivedQ > &q)
Definition: SpecialFunctionsArrayAPI.h:152
EIGEN_STRONG_INLINE const Eigen::CwiseBinaryOp< Eigen::internal::scalar_igammac_op< typename Derived::Scalar >, const Derived, const ExponentDerived > igammac(const Eigen::ArrayBase< Derived > &a, const Eigen::ArrayBase< ExponentDerived > &x)
Definition: SpecialFunctionsArrayAPI.h:93
EIGEN_STRONG_INLINE const Eigen::CwiseBinaryOp< Eigen::internal::scalar_igamma_op< typename Derived::Scalar >, const Derived, const ExponentDerived > igamma(const Eigen::ArrayBase< Derived > &a, const Eigen::ArrayBase< ExponentDerived > &x)
Definition: SpecialFunctionsArrayAPI.h:31
auto run(Kernel kernel, Args &&... args) -> decltype(kernel(args...))
Definition: gpu_test_helper.h:414
EIGEN_STRONG_INLINE const Eigen::CwiseBinaryOp< Eigen::internal::scalar_polygamma_op< typename DerivedX::Scalar >, const DerivedN, const DerivedX > polygamma(const Eigen::ArrayBase< DerivedN > &n, const Eigen::ArrayBase< DerivedX > &x)
Definition: SpecialFunctionsArrayAPI.h:113
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const TensorCwiseTernaryOp< internal::scalar_betainc_op< typename XDerived::Scalar >, const ADerived, const BDerived, const XDerived > betainc(const Eigen::TensorBase< ADerived, ReadOnlyAccessors > &a, const Eigen::TensorBase< BDerived, ReadOnlyAccessors > &b, const Eigen::TensorBase< XDerived, ReadOnlyAccessors > &x)
Definition: TensorGlobalFunctions.h:26
EIGEN_STRONG_INLINE const Eigen::CwiseBinaryOp< Eigen::internal::scalar_gamma_sample_der_alpha_op< typename AlphaDerived::Scalar >, const AlphaDerived, const SampleDerived > gamma_sample_der_alpha(const Eigen::ArrayBase< AlphaDerived > &alpha, const Eigen::ArrayBase< SampleDerived > &sample)
Definition: SpecialFunctionsArrayAPI.h:75
EIGEN_STRONG_INLINE const Eigen::CwiseBinaryOp< Eigen::internal::scalar_igamma_der_a_op< typename Derived::Scalar >, const Derived, const ExponentDerived > igamma_der_a(const Eigen::ArrayBase< Derived > &a, const Eigen::ArrayBase< ExponentDerived > &x)
Definition: SpecialFunctionsArrayAPI.h:52
Vector< double > x1(const Vector< double > &coord)
Cartesian coordinates centered at the point (0.5,1)
Definition: poisson/poisson_with_singularity/two_d_poisson.cc:86
Vector< double > x2(const Vector< double > &coord)
Cartesian coordinates centered at the point (1.5,1)
Definition: poisson/poisson_with_singularity/two_d_poisson.cc:102
Vector< double > x0(2, 0.0)
const unsigned nz
Definition: ConstraintElementsUnitTest.cpp:32
int delta
Definition: MultiOpt.py:96
xc
Definition: MultiOpt.py:46
int c
Definition: calibrate.py:100
Definition: Eigen_Colamd.h:49
Mdouble gamma(Mdouble gamma_in)
This is the gamma function returns the true value for the half integer value.
Definition: ExtendedMath.cc:116
constexpr T factorial(const T t)
factorial function
Definition: ExtendedMath.h:135
double epsilon
Definition: osc_ring_sarah_asymptotics.h:43
ax
Definition: plotDoE.py:39
t
Definition: plotPSD.py:36
Holds information about the various numeric (i.e. scalar) types allowed by Eigen.
Definition: NumTraits.h:217
Definition: SpecialFunctionsImpl.h:1570
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar run(Scalar a, Scalar b, Scalar x)
Definition: SpecialFunctionsImpl.h:1573
Definition: SpecialFunctionsImpl.h:1563
Scalar type
Definition: SpecialFunctionsImpl.h:1564
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE double big()
Definition: SpecialFunctionsImpl.h:799
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE double machep()
Definition: SpecialFunctionsImpl.h:796
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE double biginv()
Definition: SpecialFunctionsImpl.h:800
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE float big()
Definition: SpecialFunctionsImpl.h:784
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE float machep()
Definition: SpecialFunctionsImpl.h:781
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE float biginv()
Definition: SpecialFunctionsImpl.h:788
Definition: SpecialFunctionsImpl.h:764
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar big()
Definition: SpecialFunctionsImpl.h:769
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar biginv()
Definition: SpecialFunctionsImpl.h:773
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar machep()
Definition: SpecialFunctionsImpl.h:765
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE double run(const double s)
Definition: SpecialFunctionsImpl.h:148
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE float run(const float s)
Definition: SpecialFunctionsImpl.h:133
Definition: SpecialFunctionsImpl.h:125
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar run(const Scalar)
Definition: SpecialFunctionsImpl.h:128
Definition: SpecialFunctionsImpl.h:163
static EIGEN_DEVICE_FUNC Scalar run(Scalar x)
Definition: SpecialFunctionsImpl.h:164
Definition: SpecialFunctionsImpl.h:107
Scalar type
Definition: SpecialFunctionsImpl.h:108
Definition: SpecialFunctionsImpl.h:525
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE T run(const T &x)
Definition: SpecialFunctionsImpl.h:527
unpacket_traits< T >::type Scalar
Definition: SpecialFunctionsImpl.h:526
Definition: SpecialFunctionsImpl.h:531
Scalar type
Definition: SpecialFunctionsImpl.h:532
Definition: SpecialFunctionsImpl.h:427
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE T run(const T &x)
Definition: SpecialFunctionsImpl.h:429
unpacket_traits< T >::type Scalar
Definition: SpecialFunctionsImpl.h:428
Definition: SpecialFunctionsImpl.h:433
Scalar type
Definition: SpecialFunctionsImpl.h:434
Definition: SpecialFunctionsImpl.h:1271
Definition: SpecialFunctionsImpl.h:1268
Definition: SpecialFunctionsImpl.h:466
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE T run(const T &x_in)
Definition: SpecialFunctionsImpl.h:276
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE T run(const T &x_in)
Definition: SpecialFunctionsImpl.h:1250
Definition: SpecialFunctionsImpl.h:1247
Definition: SpecialFunctionsImpl.h:1122
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar run(Scalar a, Scalar x)
Definition: SpecialFunctionsImpl.h:1125
Definition: SpecialFunctionsImpl.h:1176
Definition: SpecialFunctionsImpl.h:1171
Scalar type
Definition: SpecialFunctionsImpl.h:1172
Definition: SpecialFunctionsImpl.h:955
static EIGEN_DEVICE_FUNC Scalar run(Scalar a, Scalar x)
Definition: SpecialFunctionsImpl.h:964
Definition: SpecialFunctionsImpl.h:838
static EIGEN_DEVICE_FUNC Scalar run(Scalar a, Scalar x)
Definition: SpecialFunctionsImpl.h:848
Definition: SpecialFunctionsImpl.h:1027
static EIGEN_DEVICE_FUNC Scalar run(Scalar a, Scalar x)
Definition: SpecialFunctionsImpl.h:1030
Definition: SpecialFunctionsImpl.h:758
Scalar type
Definition: SpecialFunctionsImpl.h:759
@ value
Definition: Meta.h:206
Definition: SpecialFunctionsImpl.h:47
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar run(const Scalar)
Definition: SpecialFunctionsImpl.h:50
Definition: SpecialFunctionsImpl.h:54
Scalar type
Definition: SpecialFunctionsImpl.h:55
Definition: SpecialFunctionsImpl.h:738
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar run(const Scalar)
Definition: SpecialFunctionsImpl.h:741
Definition: SpecialFunctionsImpl.h:731
Scalar type
Definition: SpecialFunctionsImpl.h:732
Definition: SpecialFunctionsImpl.h:1525
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar run(Scalar n, Scalar x)
Definition: SpecialFunctionsImpl.h:1528
Definition: SpecialFunctionsImpl.h:1518
Scalar type
Definition: SpecialFunctionsImpl.h:1519
Definition: GenericPacketMathFunctions.h:85
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet run(const Packet &x, const typename unpacket_traits< Packet >::type coeff[])
Definition: GenericPacketMathFunctions.h:86
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE bool run(double &a, double &b, double &s, const double x, const double machep)
Definition: SpecialFunctionsImpl.h:1347
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE bool run(float &a, float &b, float &s, const float x, const float machep)
Definition: SpecialFunctionsImpl.h:1329
Definition: SpecialFunctionsImpl.h:1321
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar run(const Scalar)
Definition: SpecialFunctionsImpl.h:1324
Definition: SpecialFunctionsImpl.h:1364
static EIGEN_DEVICE_FUNC Scalar run(Scalar x, Scalar q)
Definition: SpecialFunctionsImpl.h:1365
Definition: SpecialFunctionsImpl.h:1316
Scalar type
Definition: SpecialFunctionsImpl.h:1317
EIGEN_DONT_INLINE Scalar zero()
Definition: svd_common.h:232
void run(const string &dir_name, LinearSolver *linear_solver_pt, const unsigned nel_1d, bool mess_up_order)
Definition: two_d_poisson_compare_solvers.cc:317
Definition: ZVector/PacketMath.h:50