11 #ifndef EIGEN_MATHFUNCTIONS_H
12 #define EIGEN_MATHFUNCTIONS_H
16 #define EIGEN_PI 3.141592653589793238462643383279502884197169399375105820974944592307816406L
17 #define EIGEN_LOG2E 1.442695040888963407359924681001892137426645954152985934135449406931109219L
18 #define EIGEN_LN2 0.693147180559945309417232121458176568075500134360255254120680009493393621L
48 template <
typename T,
typename dummy =
void>
60 T, typename
always_void<typename
T::Eigen_BaseClassForSpecializationOfGlobalMathFuncImpl>
::type> {
61 typedef typename T::Eigen_BaseClassForSpecializationOfGlobalMathFuncImpl
type;
64 #define EIGEN_MATHFUNC_IMPL(func, scalar) \
65 Eigen::internal::func##_impl<typename Eigen::internal::global_math_functions_filtering_base<scalar>::type>
66 #define EIGEN_MATHFUNC_RETVAL(func, scalar) \
67 typename Eigen::internal::func##_retval< \
68 typename Eigen::internal::global_math_functions_filtering_base<scalar>::type>::type
80 template <
typename Scalar>
89 template <
typename Scalar>
92 #if defined(EIGEN_GPU_COMPILE_PHASE)
100 template <
typename Scalar>
115 template <
typename Scalar>
124 template <
typename Scalar>
127 #if defined(EIGEN_GPU_COMPILE_PHASE)
128 template <
typename T>
135 template <
typename Scalar>
144 template <
typename Scalar>
153 template <
typename Scalar>
162 template <
typename Scalar,
bool IsComplex>
171 template <
typename Scalar>
177 template <
typename Scalar>
180 template <
typename Scalar>
194 template <
typename Scalar>
205 template <
typename Scalar>
214 template <
typename Scalar,
bool IsComplex>
220 template <
typename Scalar>
227 template <
typename Scalar>
235 template <
typename Scalar>
244 template <
typename Scalar>
253 template <
typename T>
258 template <
typename T>
261 return complex_sqrt<T>(
x);
265 template <
typename Scalar>
271 template <
typename T>
275 template <
typename T>
278 template <
typename T>
281 return complex_rsqrt<T>(
x);
285 template <
typename Scalar>
294 template <
typename Scalar,
bool IsComplex>
297 template <
typename Scalar>
302 return abs(
x.real()) +
abs(
x.imag());
306 template <
typename Scalar>
314 template <
typename Scalar>
317 template <
typename Scalar>
326 template <
typename Scalar>
329 template <
typename Scalar>
338 template <
typename OldType,
typename NewType,
typename EnableIf =
void>
343 template <
typename OldType>
350 template <
typename OldType,
typename NewType>
352 typename std::enable_if_t<!NumTraits<OldType>::IsComplex && NumTraits<NewType>::IsComplex>> {
355 return static_cast<NewType
>(
static_cast<NewReal
>(
x));
361 template <
typename OldType,
typename NewType>
372 #if (!EIGEN_COMP_MSVC || EIGEN_COMP_MSVC >= 1920)
379 template <
typename Scalar>
390 template <
typename Scalar>
399 struct arg_default_impl {
406 template <
typename Scalar>
407 struct arg_default_impl<
Scalar, true> {
415 template <
typename Scalar>
418 template <
typename Scalar>
428 namespace std_fallback {
432 template <
typename Scalar>
453 template <
typename Scalar>
462 template <
typename Scalar>
472 template <
typename T>
475 template <
typename Scalar>
483 template <
typename Scalar>
492 namespace std_fallback {
495 template <
typename Scalar>
504 return (is_small || is_inf) ?
x :
x * (log_1p / (x1p -
RealScalar(1)));
508 template <
typename Scalar>
519 template <
typename RealScalar>
528 template <
typename Scalar>
537 template <
typename ScalarX,
typename ScalarY,
549 template <
typename ScalarX,
typename ScalarY>
568 template <
unsigned int n,
int lower,
int upper>
579 template <
unsigned int n,
int lower = 0,
int upper =
sizeof(
unsigned int) * CHAR_BIT - 1,
583 template <
unsigned int n,
int lower,
int upper>
588 template <
unsigned int n,
int lower,
int upper>
593 template <
unsigned int n,
int lower,
int upper>
598 template <
unsigned int n,
int lower,
int upper>
603 template <
typename BitsType,
typename EnableIf =
void>
606 "BitsType must be an unsigned integer");
608 int n = CHAR_BIT *
sizeof(BitsType);
610 while (
bits > 0 && shift > 0) {
611 BitsType
y =
bits >> shift;
625 int n = CHAR_BIT *
sizeof(BitsType);
627 while (
bits > 0 && shift > 0) {
628 BitsType
y =
bits << shift;
643 template <
typename BitsType>
649 template <
typename BitsType>
654 #if EIGEN_COMP_GNUC || EIGEN_COMP_CLANG
656 template <
typename BitsType>
657 struct count_bits_impl<
658 BitsType, std::enable_if_t<std::is_integral<BitsType>::value && sizeof(BitsType) <= sizeof(unsigned int)>> {
659 static constexpr
int kNumBits =
static_cast<int>(
sizeof(BitsType) * CHAR_BIT);
661 static constexpr
int kLeadingBitsOffset = (
sizeof(
unsigned int) -
sizeof(BitsType)) * CHAR_BIT;
662 return bits == 0 ? kNumBits : __builtin_clz(
static_cast<unsigned int>(
bits)) - kLeadingBitsOffset;
666 return bits == 0 ? kNumBits : __builtin_ctz(
static_cast<unsigned int>(
bits));
670 template <
typename BitsType>
671 struct count_bits_impl<BitsType,
672 std::enable_if_t<std::is_integral<BitsType>::value && sizeof(unsigned int) < sizeof(BitsType) &&
673 sizeof(BitsType) <= sizeof(unsigned long)>> {
674 static constexpr int kNumBits = static_cast<int>(sizeof(BitsType) * CHAR_BIT);
675 static EIGEN_DEVICE_FUNC inline int clz(BitsType bits) {
676 static constexpr int kLeadingBitsOffset = (sizeof(unsigned long) - sizeof(BitsType)) * CHAR_BIT;
677 return bits == 0 ? kNumBits : __builtin_clzl(static_cast<unsigned long>(bits)) - kLeadingBitsOffset;
680 static EIGEN_DEVICE_FUNC inline int ctz(BitsType bits) {
681 return bits == 0 ? kNumBits : __builtin_ctzl(static_cast<unsigned long>(bits));
685 template <typename BitsType>
686 struct count_bits_impl<BitsType,
687 std::enable_if_t<std::is_integral<BitsType>::value && sizeof(unsigned long) < sizeof(BitsType) &&
688 sizeof(BitsType) <= sizeof(unsigned long long)>> {
689 static constexpr int kNumBits = static_cast<int>(sizeof(BitsType) * CHAR_BIT);
690 static EIGEN_DEVICE_FUNC inline int clz(BitsType bits) {
691 static constexpr int kLeadingBitsOffset = (sizeof(unsigned long long) - sizeof(BitsType)) * CHAR_BIT;
692 return bits == 0 ? kNumBits : __builtin_clzll(static_cast<unsigned long long>(bits)) - kLeadingBitsOffset;
695 static EIGEN_DEVICE_FUNC inline int ctz(BitsType bits) {
696 return bits == 0 ? kNumBits : __builtin_ctzll(static_cast<unsigned long long>(bits));
700 #elif EIGEN_COMP_MSVC
702 template <typename BitsType>
703 struct count_bits_impl<
704 BitsType, std::enable_if_t<std::is_integral<BitsType>::value && sizeof(BitsType) <= sizeof(unsigned long)>> {
705 static constexpr int kNumBits = static_cast<int>(sizeof(BitsType) * CHAR_BIT);
706 static EIGEN_DEVICE_FUNC inline int clz(BitsType bits) {
708 _BitScanReverse(&out, static_cast<unsigned long>(bits));
709 return bits == 0 ? kNumBits : (kNumBits - 1) - static_cast<int>(out);
712 static EIGEN_DEVICE_FUNC inline int ctz(BitsType bits) {
714 _BitScanForward(&out, static_cast<unsigned long>(bits));
715 return bits == 0 ? kNumBits : static_cast<int>(out);
721 template <typename BitsType>
722 struct count_bits_impl<BitsType,
723 std::enable_if_t<std::is_integral<BitsType>::value && sizeof(unsigned long) < sizeof(BitsType) &&
724 sizeof(BitsType) <= sizeof(__int64)>> {
725 static constexpr int kNumBits = static_cast<int>(sizeof(BitsType) * CHAR_BIT);
726 static EIGEN_DEVICE_FUNC inline int clz(BitsType bits) {
728 _BitScanReverse64(&out, static_cast<unsigned __int64>(bits));
729 return bits == 0 ? kNumBits : (kNumBits - 1) - static_cast<int>(out);
732 static EIGEN_DEVICE_FUNC inline int ctz(BitsType bits) {
734 _BitScanForward64(&out, static_cast<unsigned __int64>(bits));
735 return bits == 0 ? kNumBits : static_cast<int>(out);
743 template <typename BitsType>
745 static constexpr int kTotalBits = sizeof(BitsType) * CHAR_BIT;
746 static EIGEN_DEVICE_FUNC inline int run_ceil(const BitsType& x) {
747 const int n = kTotalBits - clz(x);
748 bool power_of_two = (x & (x - 1)) == 0;
749 return x == 0 ? 0 : power_of_two ? (n - 1) : n;
751 static EIGEN_DEVICE_FUNC inline int run_floor(const BitsType& x) {
752 const int n = kTotalBits - clz(x);
753 return x == 0 ? 0 : n - 1;
757 template <typename BitsType>
758 int log2_ceil(const BitsType& x) {
759 return log_2_impl<BitsType>::run_ceil(x);
762 template <typename BitsType>
763 int log2_floor(const BitsType& x) {
764 return log_2_impl<BitsType>::run_floor(x);
769 template <typename T>
770 EIGEN_DEVICE_FUNC std::enable_if_t<!(std::numeric_limits<T>::has_infinity || std::numeric_limits<T>::has_quiet_NaN ||
771 std::numeric_limits<T>::has_signaling_NaN),
773 isfinite_impl(const T&) {
777 template <typename T>
778 EIGEN_DEVICE_FUNC std::enable_if_t<(std::numeric_limits<T>::has_infinity || std::numeric_limits<T>::has_quiet_NaN ||
779 std::numeric_limits<T>::has_signaling_NaN) &&
780 (!NumTraits<T>::IsComplex),
782 isfinite_impl(const T& x) {
783 EIGEN_USING_STD(isfinite);
784 return isfinite EIGEN_NOT_A_MACRO(x);
787 template <typename T>
788 EIGEN_DEVICE_FUNC std::enable_if_t<!std::numeric_limits<T>::has_infinity, bool> isinf_impl(const T&) {
792 template <typename T>
793 EIGEN_DEVICE_FUNC std::enable_if_t<(std::numeric_limits<T>::has_infinity && !NumTraits<T>::IsComplex), bool> isinf_impl(
795 EIGEN_USING_STD(isinf);
796 return isinf EIGEN_NOT_A_MACRO(x);
799 template <typename T>
801 std::enable_if_t<!(std::numeric_limits<T>::has_quiet_NaN || std::numeric_limits<T>::has_signaling_NaN), bool>
802 isnan_impl(const T&) {
806 template <typename T>
807 EIGEN_DEVICE_FUNC std::enable_if_t<
808 (std::numeric_limits<T>::has_quiet_NaN || std::numeric_limits<T>::has_signaling_NaN) && (!NumTraits<T>::IsComplex),
810 isnan_impl(const T& x) {
811 EIGEN_USING_STD(isnan);
812 return isnan EIGEN_NOT_A_MACRO(x);
816 template <typename T>
817 EIGEN_DEVICE_FUNC bool isfinite_impl(const std::complex<T>& x);
818 template <typename T>
819 EIGEN_DEVICE_FUNC bool isnan_impl(const std::complex<T>& x);
820 template <typename T>
821 EIGEN_DEVICE_FUNC bool isinf_impl(const std::complex<T>& x);
822 template <typename T>
823 EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS T ptanh_float(const T& a_x);
828 template <typename Scalar, bool IsComplex = (NumTraits<Scalar>::IsComplex != 0),
829 bool IsInteger = (NumTraits<Scalar>::IsInteger != 0)>
831 EIGEN_DEVICE_FUNC static inline Scalar run(const Scalar& a) { return Scalar((a > Scalar(0)) - (a < Scalar(0))); }
834 template <typename Scalar>
835 struct sign_impl<Scalar, false, false> {
836 EIGEN_DEVICE_FUNC static inline Scalar run(const Scalar& a) {
837 return (isnan_impl<Scalar>)(a) ? a : Scalar((a > Scalar(0)) - (a < Scalar(0)));
841 template <typename Scalar, bool IsInteger>
842 struct sign_impl<Scalar, true, IsInteger> {
843 EIGEN_DEVICE_FUNC static inline Scalar run(const Scalar& a) {
844 using real_type = typename NumTraits<Scalar>::Real;
845 EIGEN_USING_STD(abs);
846 real_type aa = abs(a);
847 if (aa == real_type(0)) return Scalar(0);
848 aa = real_type(1) / aa;
849 return Scalar(a.real() * aa, a.imag() * aa);
855 struct sign_impl<bool, false, true> {
856 EIGEN_DEVICE_FUNC static inline bool run(const bool& a) { return a; }
859 template <typename Scalar>
867 template <typename Scalar, bool IsInteger = NumTraits<Scalar>::IsInteger>
869 static EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE Scalar run(const Scalar& a) { return -a; }
872 template <typename Scalar>
873 struct negate_impl<Scalar, true> {
874 EIGEN_STATIC_ASSERT((!is_same<Scalar, bool>::value), NEGATE IS NOT DEFINED FOR BOOLEAN TYPES)
875 static EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE Scalar run(const Scalar& a) { return Scalar(0) - a; }
878 template <typename Scalar>
879 struct negate_retval {
883 template <typename Scalar, bool IsInteger = NumTraits<typename unpacket_traits<Scalar>::type>::IsInteger>
884 struct nearest_integer_impl {
885 static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar run_floor(const Scalar& x) {
886 EIGEN_USING_STD(floor) return floor(x);
888 static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar run_ceil(const Scalar& x) {
889 EIGEN_USING_STD(ceil) return ceil(x);
891 static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar run_rint(const Scalar& x) {
892 EIGEN_USING_STD(rint) return rint(x);
894 static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar run_round(const Scalar& x) {
895 EIGEN_USING_STD(round) return round(x);
897 static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar run_trunc(const Scalar& x) {
898 EIGEN_USING_STD(trunc) return trunc(x);
901 template <typename Scalar>
902 struct nearest_integer_impl<Scalar, true> {
903 static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar run_floor(const Scalar& x) { return x; }
904 static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar run_ceil(const Scalar& x) { return x; }
905 static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar run_rint(const Scalar& x) { return x; }
906 static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar run_round(const Scalar& x) { return x; }
907 static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar run_trunc(const Scalar& x) { return x; }
918 #if (!defined(EIGEN_GPUCC) || defined(EIGEN_CONSTEXPR_ARE_DEVICE_FUNC))
919 template <typename T>
920 EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE T mini(const T& x, const T& y) {
922 return min EIGEN_NOT_A_MACRO(x, y);
925 template <typename T>
926 EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE T maxi(const T& x, const T& y) {
928 return max EIGEN_NOT_A_MACRO(x, y);
931 template <typename T>
932 EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE T mini(const T& x, const T& y) {
933 return y < x ? y : x;
936 EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE float mini(const float& x, const float& y) {
940 EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE double mini(const double& x, const double& y) {
944 #ifndef EIGEN_GPU_COMPILE_PHASE
946 EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE long double mini(const long double& x, const long double& y) {
947 #if defined(EIGEN_HIPCC)
949 return (x < y) ? x : y;
956 template <typename T>
957 EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE T maxi(const T& x, const T& y) {
958 return x < y ? y : x;
961 EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE float maxi(const float& x, const float& y) {
965 EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE double maxi(const double& x, const double& y) {
968 #ifndef EIGEN_GPU_COMPILE_PHASE
970 EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE long double maxi(const long double& x, const long double& y) {
971 #if defined(EIGEN_HIPCC)
973 return (x > y) ? x : y;
981 #if defined(SYCL_DEVICE_ONLY)
983 #define SYCL_SPECIALIZE_SIGNED_INTEGER_TYPES_BINARY(NAME, FUNC) \
984 SYCL_SPECIALIZE_BINARY_FUNC(NAME, FUNC, cl::sycl::cl_char) \
985 SYCL_SPECIALIZE_BINARY_FUNC(NAME, FUNC, cl::sycl::cl_short) \
986 SYCL_SPECIALIZE_BINARY_FUNC(NAME, FUNC, cl::sycl::cl_int) \
987 SYCL_SPECIALIZE_BINARY_FUNC(NAME, FUNC, cl::sycl::cl_long)
988 #define SYCL_SPECIALIZE_SIGNED_INTEGER_TYPES_UNARY(NAME, FUNC) \
989 SYCL_SPECIALIZE_UNARY_FUNC(NAME, FUNC, cl::sycl::cl_char) \
990 SYCL_SPECIALIZE_UNARY_FUNC(NAME, FUNC, cl::sycl::cl_short) \
991 SYCL_SPECIALIZE_UNARY_FUNC(NAME, FUNC, cl::sycl::cl_int) \
992 SYCL_SPECIALIZE_UNARY_FUNC(NAME, FUNC, cl::sycl::cl_long)
993 #define SYCL_SPECIALIZE_UNSIGNED_INTEGER_TYPES_BINARY(NAME, FUNC) \
994 SYCL_SPECIALIZE_BINARY_FUNC(NAME, FUNC, cl::sycl::cl_uchar) \
995 SYCL_SPECIALIZE_BINARY_FUNC(NAME, FUNC, cl::sycl::cl_ushort) \
996 SYCL_SPECIALIZE_BINARY_FUNC(NAME, FUNC, cl::sycl::cl_uint) \
997 SYCL_SPECIALIZE_BINARY_FUNC(NAME, FUNC, cl::sycl::cl_ulong)
998 #define SYCL_SPECIALIZE_UNSIGNED_INTEGER_TYPES_UNARY(NAME, FUNC) \
999 SYCL_SPECIALIZE_UNARY_FUNC(NAME, FUNC, cl::sycl::cl_uchar) \
1000 SYCL_SPECIALIZE_UNARY_FUNC(NAME, FUNC, cl::sycl::cl_ushort) \
1001 SYCL_SPECIALIZE_UNARY_FUNC(NAME, FUNC, cl::sycl::cl_uint) \
1002 SYCL_SPECIALIZE_UNARY_FUNC(NAME, FUNC, cl::sycl::cl_ulong)
1003 #define SYCL_SPECIALIZE_INTEGER_TYPES_BINARY(NAME, FUNC) \
1004 SYCL_SPECIALIZE_SIGNED_INTEGER_TYPES_BINARY(NAME, FUNC) \
1005 SYCL_SPECIALIZE_UNSIGNED_INTEGER_TYPES_BINARY(NAME, FUNC)
1006 #define SYCL_SPECIALIZE_INTEGER_TYPES_UNARY(NAME, FUNC) \
1007 SYCL_SPECIALIZE_SIGNED_INTEGER_TYPES_UNARY(NAME, FUNC) \
1008 SYCL_SPECIALIZE_UNSIGNED_INTEGER_TYPES_UNARY(NAME, FUNC)
1009 #define SYCL_SPECIALIZE_FLOATING_TYPES_BINARY(NAME, FUNC) \
1010 SYCL_SPECIALIZE_BINARY_FUNC(NAME, FUNC, cl::sycl::cl_float) \
1011 SYCL_SPECIALIZE_BINARY_FUNC(NAME, FUNC, cl::sycl::cl_double)
1012 #define SYCL_SPECIALIZE_FLOATING_TYPES_UNARY(NAME, FUNC) \
1013 SYCL_SPECIALIZE_UNARY_FUNC(NAME, FUNC, cl::sycl::cl_float) \
1014 SYCL_SPECIALIZE_UNARY_FUNC(NAME, FUNC, cl::sycl::cl_double)
1015 #define SYCL_SPECIALIZE_FLOATING_TYPES_UNARY_FUNC_RET_TYPE(NAME, FUNC, RET_TYPE) \
1016 SYCL_SPECIALIZE_GEN_UNARY_FUNC(NAME, FUNC, RET_TYPE, cl::sycl::cl_float) \
1017 SYCL_SPECIALIZE_GEN_UNARY_FUNC(NAME, FUNC, RET_TYPE, cl::sycl::cl_double)
1019 #define SYCL_SPECIALIZE_GEN_UNARY_FUNC(NAME, FUNC, RET_TYPE, ARG_TYPE) \
1021 EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE RET_TYPE NAME(const ARG_TYPE& x) { \
1022 return cl::sycl::FUNC(x); \
1025 #define SYCL_SPECIALIZE_UNARY_FUNC(NAME, FUNC, TYPE) SYCL_SPECIALIZE_GEN_UNARY_FUNC(NAME, FUNC, TYPE, TYPE)
1027 #define SYCL_SPECIALIZE_GEN1_BINARY_FUNC(NAME, FUNC, RET_TYPE, ARG_TYPE1, ARG_TYPE2) \
1029 EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE RET_TYPE NAME(const ARG_TYPE1& x, const ARG_TYPE2& y) { \
1030 return cl::sycl::FUNC(x, y); \
1033 #define SYCL_SPECIALIZE_GEN2_BINARY_FUNC(NAME, FUNC, RET_TYPE, ARG_TYPE) \
1034 SYCL_SPECIALIZE_GEN1_BINARY_FUNC(NAME, FUNC, RET_TYPE, ARG_TYPE, ARG_TYPE)
1036 #define SYCL_SPECIALIZE_BINARY_FUNC(NAME, FUNC, TYPE) SYCL_SPECIALIZE_GEN2_BINARY_FUNC(NAME, FUNC, TYPE, TYPE)
1038 SYCL_SPECIALIZE_INTEGER_TYPES_BINARY(mini, min)
1039 SYCL_SPECIALIZE_FLOATING_TYPES_BINARY(mini, fmin)
1040 SYCL_SPECIALIZE_INTEGER_TYPES_BINARY(maxi, max)
1041 SYCL_SPECIALIZE_FLOATING_TYPES_BINARY(maxi, fmax)
1045 template <typename Scalar>
1046 EIGEN_DEVICE_FUNC inline EIGEN_MATHFUNC_RETVAL(real, Scalar) real(const Scalar& x) {
1047 return EIGEN_MATHFUNC_IMPL(real, Scalar)::run(x);
1050 template <typename Scalar>
1051 EIGEN_DEVICE_FUNC inline internal::add_const_on_value_type_t<EIGEN_MATHFUNC_RETVAL(real_ref, Scalar)> real_ref(
1053 return internal::real_ref_impl<Scalar>::run(x);
1056 template <typename Scalar>
1057 EIGEN_DEVICE_FUNC inline EIGEN_MATHFUNC_RETVAL(real_ref, Scalar) real_ref(Scalar& x) {
1058 return EIGEN_MATHFUNC_IMPL(real_ref, Scalar)::run(x);
1061 template <typename Scalar>
1062 EIGEN_DEVICE_FUNC inline EIGEN_MATHFUNC_RETVAL(imag, Scalar) imag(const Scalar& x) {
1063 return EIGEN_MATHFUNC_IMPL(imag, Scalar)::run(x);
1066 template <typename Scalar>
1067 EIGEN_DEVICE_FUNC inline EIGEN_MATHFUNC_RETVAL(arg, Scalar) arg(const Scalar& x) {
1068 return EIGEN_MATHFUNC_IMPL(arg, Scalar)::run(x);
1071 template <typename Scalar>
1072 EIGEN_DEVICE_FUNC inline internal::add_const_on_value_type_t<EIGEN_MATHFUNC_RETVAL(imag_ref, Scalar)> imag_ref(
1074 return internal::imag_ref_impl<Scalar>::run(x);
1077 template <typename Scalar>
1078 EIGEN_DEVICE_FUNC inline EIGEN_MATHFUNC_RETVAL(imag_ref, Scalar) imag_ref(Scalar& x) {
1079 return EIGEN_MATHFUNC_IMPL(imag_ref, Scalar)::run(x);
1082 template <typename Scalar>
1083 EIGEN_DEVICE_FUNC inline EIGEN_MATHFUNC_RETVAL(conj, Scalar) conj(const Scalar& x) {
1084 return EIGEN_MATHFUNC_IMPL(conj, Scalar)::run(x);
1087 template <typename Scalar>
1088 EIGEN_DEVICE_FUNC inline EIGEN_MATHFUNC_RETVAL(sign, Scalar) sign(const Scalar& x) {
1089 return EIGEN_MATHFUNC_IMPL(sign, Scalar)::run(x);
1092 template <typename Scalar>
1093 EIGEN_DEVICE_FUNC inline EIGEN_MATHFUNC_RETVAL(negate, Scalar) negate(const Scalar& x) {
1094 return EIGEN_MATHFUNC_IMPL(negate, Scalar)::run(x);
1097 template <typename Scalar>
1098 EIGEN_DEVICE_FUNC inline EIGEN_MATHFUNC_RETVAL(abs2, Scalar) abs2(const Scalar& x) {
1099 return EIGEN_MATHFUNC_IMPL(abs2, Scalar)::run(x);
1102 EIGEN_DEVICE_FUNC inline bool abs2(bool x) { return x; }
1104 template <typename T>
1105 EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE T absdiff(const T& x, const T& y) {
1106 return x > y ? x - y : y - x;
1109 EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE float absdiff(const float& x, const float& y) {
1110 return fabsf(x - y);
1113 EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE double absdiff(const double& x, const double& y) {
1118 #ifndef EIGEN_GPU_COMPILE_PHASE
1120 EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE long double absdiff(const long double& x, const long double& y) {
1121 return fabsl(x - y);
1125 template <typename Scalar>
1126 EIGEN_DEVICE_FUNC inline EIGEN_MATHFUNC_RETVAL(norm1, Scalar) norm1(const Scalar& x) {
1127 return EIGEN_MATHFUNC_IMPL(norm1, Scalar)::run(x);
1130 template <typename Scalar>
1131 EIGEN_DEVICE_FUNC inline EIGEN_MATHFUNC_RETVAL(hypot, Scalar) hypot(const Scalar& x, const Scalar& y) {
1132 return EIGEN_MATHFUNC_IMPL(hypot, Scalar)::run(x, y);
1135 #if defined(SYCL_DEVICE_ONLY)
1136 SYCL_SPECIALIZE_FLOATING_TYPES_BINARY(hypot, hypot)
1139 template <typename Scalar>
1140 EIGEN_DEVICE_FUNC inline EIGEN_MATHFUNC_RETVAL(log1p, Scalar) log1p(const Scalar& x) {
1141 return EIGEN_MATHFUNC_IMPL(log1p, Scalar)::run(x);
1144 #if defined(SYCL_DEVICE_ONLY)
1145 SYCL_SPECIALIZE_FLOATING_TYPES_UNARY(log1p, log1p)
1148 #if defined(EIGEN_GPUCC)
1150 EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE float log1p(const float& x) {
1155 EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE double log1p(const double& x) {
1160 template <typename ScalarX, typename ScalarY>
1161 EIGEN_DEVICE_FUNC inline typename internal::pow_impl<ScalarX, ScalarY>::result_type pow(const ScalarX& x,
1163 return internal::pow_impl<ScalarX, ScalarY>::run(x, y);
1166 #if defined(SYCL_DEVICE_ONLY)
1167 SYCL_SPECIALIZE_FLOATING_TYPES_BINARY(pow, pow)
1170 template <typename T>
1171 EIGEN_DEVICE_FUNC bool(isnan)(const T& x) {
1172 return internal::isnan_impl(x);
1174 template <typename T>
1175 EIGEN_DEVICE_FUNC bool(isinf)(const T& x) {
1176 return internal::isinf_impl(x);
1178 template <typename T>
1179 EIGEN_DEVICE_FUNC bool(isfinite)(const T& x) {
1180 return internal::isfinite_impl(x);
1183 #if defined(SYCL_DEVICE_ONLY)
1184 SYCL_SPECIALIZE_FLOATING_TYPES_UNARY_FUNC_RET_TYPE(isnan, isnan, bool)
1185 SYCL_SPECIALIZE_FLOATING_TYPES_UNARY_FUNC_RET_TYPE(isinf, isinf, bool)
1186 SYCL_SPECIALIZE_FLOATING_TYPES_UNARY_FUNC_RET_TYPE(isfinite, isfinite, bool)
1189 template <typename Scalar>
1190 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar rint(const Scalar& x) {
1191 return internal::nearest_integer_impl<Scalar>::run_rint(x);
1194 template <typename Scalar>
1195 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar round(const Scalar& x) {
1196 return internal::nearest_integer_impl<Scalar>::run_round(x);
1199 template <typename Scalar>
1200 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar(floor)(const Scalar& x) {
1201 return internal::nearest_integer_impl<Scalar>::run_floor(x);
1204 template <typename Scalar>
1205 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar(ceil)(const Scalar& x) {
1206 return internal::nearest_integer_impl<Scalar>::run_ceil(x);
1209 template <typename Scalar>
1210 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar(trunc)(const Scalar& x) {
1211 return internal::nearest_integer_impl<Scalar>::run_trunc(x);
1214 #if defined(SYCL_DEVICE_ONLY)
1215 SYCL_SPECIALIZE_FLOATING_TYPES_UNARY(round, round)
1216 SYCL_SPECIALIZE_FLOATING_TYPES_UNARY(floor, floor)
1217 SYCL_SPECIALIZE_FLOATING_TYPES_UNARY(ceil, ceil)
1218 SYCL_SPECIALIZE_FLOATING_TYPES_UNARY(trunc, trunc)
1221 #if defined(EIGEN_GPUCC)
1223 EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE float floor(const float& x) {
1227 EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE double floor(const double& x) {
1231 EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE float ceil(const float& x) {
1235 EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE double ceil(const double& x) {
1239 EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE float trunc(const float& x) {
1243 EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE double trunc(const double& x) {
1250 template <typename T>
1251 EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE EIGEN_CONSTEXPR T div_ceil(T a, T b) {
1252 using UnsignedT = typename internal::make_unsigned<T>::type;
1253 EIGEN_STATIC_ASSERT((NumTraits<T>::IsInteger), THIS FUNCTION IS FOR INTEGER TYPES)
1254 eigen_assert(a >= 0);
1255 eigen_assert(b > 0);
1257 const UnsignedT ua = UnsignedT(a);
1258 const UnsignedT ub = UnsignedT(b);
1260 return ua == 0 ? 0 : (ua - 1) / ub + 1;
1265 template <typename T, typename U>
1266 EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE EIGEN_CONSTEXPR T round_down(T a, U b) {
1267 using UnsignedT = typename internal::make_unsigned<T>::type;
1268 using UnsignedU = typename internal::make_unsigned<U>::type;
1269 EIGEN_STATIC_ASSERT((NumTraits<T>::IsInteger), THIS FUNCTION IS FOR INTEGER TYPES)
1270 EIGEN_STATIC_ASSERT((NumTraits<U>::IsInteger), THIS FUNCTION IS FOR INTEGER TYPES)
1271 eigen_assert(a >= 0);
1272 eigen_assert(b > 0);
1274 const UnsignedT ua = UnsignedT(a);
1275 const UnsignedU ub = UnsignedU(b);
1276 return ub * (ua / ub);
1281 EIGEN_CONSTEXPR inline int log2(int x) {
1282 eigen_assert(x >= 0);
1284 constexpr int table[32] = {0, 9, 1, 10, 13, 21, 2, 29, 11, 14, 16, 18, 22, 25, 3, 30,
1285 8, 12, 20, 28, 15, 17, 24, 7, 19, 27, 23, 6, 26, 5, 4, 31};
1303 template <typename Scalar>
1314 #if defined(SYCL_DEVICE_ONLY)
1315 SYCL_SPECIALIZE_FLOATING_TYPES_UNARY(
sqrt,
sqrt)
1319 template <
typename T>
1322 return static_cast<T>(
cbrt(
x));
1326 template <
typename T>
1331 template <
typename T>
1336 #if defined(SYCL_DEVICE_ONLY)
1337 SYCL_SPECIALIZE_FLOATING_TYPES_UNARY(
log,
log)
1340 #if defined(EIGEN_GPUCC)
1352 template <
typename T>
1360 template <
typename T>
1367 #if defined(SYCL_DEVICE_ONLY)
1368 SYCL_SPECIALIZE_INTEGER_TYPES_UNARY(
abs,
abs)
1369 SYCL_SPECIALIZE_FLOATING_TYPES_UNARY(
abs,
fabs)
1372 #if defined(EIGEN_GPUCC)
1385 return ::hypotf(
x.real(),
x.imag());
1390 return ::hypot(
x.real(),
x.imag());
1396 template <
typename Scalar>
1398 static constexpr
size_t Size =
sizeof(
Scalar);
1399 static constexpr
size_t Shift = (CHAR_BIT * Size) - 1;
1404 Scalar result = bit_cast<Scalar, intSize_t>(
a);
1408 template <
typename Scalar>
1410 static constexpr
size_t Size =
sizeof(
Scalar);
1411 static constexpr
size_t Shift = (CHAR_BIT * Size) - 1;
1414 template <
typename Scalar>
1418 template <
typename Scalar>
1423 template <
typename T>
1430 #ifdef EIGEN_COMP_MSVC
1431 template <
typename RealScalar>
1442 return std::complex<RealScalar>(NumTraits<RealScalar>::infinity(), NumTraits<RealScalar>::quiet_NaN());
1448 #if defined(SYCL_DEVICE_ONLY)
1449 SYCL_SPECIALIZE_FLOATING_TYPES_UNARY(
exp,
exp)
1452 #if defined(EIGEN_GPUCC)
1465 float com = ::expf(
x.real());
1466 float res_real = com * ::cosf(
x.imag());
1467 float res_imag = com * ::sinf(
x.imag());
1468 return std::complex<float>(res_real, res_imag);
1473 double com =
::exp(
x.real());
1474 double res_real = com *
::cos(
x.imag());
1475 double res_imag = com *
::sin(
x.imag());
1476 return std::complex<double>(res_real, res_imag);
1480 template <
typename T>
1487 #ifdef EIGEN_COMP_MSVC
1488 template <
typename RealScalar>
1499 return std::complex<RealScalar>(NumTraits<RealScalar>::infinity(), NumTraits<RealScalar>::quiet_NaN());
1505 #if defined(SYCL_DEVICE_ONLY)
1506 SYCL_SPECIALIZE_FLOATING_TYPES_UNARY(
exp2,
exp2)
1509 #if defined(EIGEN_GPUCC)
1522 float com = ::exp2f(
x.real());
1523 float res_real = com * ::cosf(
static_cast<float>(
EIGEN_LN2) *
x.imag());
1524 float res_imag = com * ::sinf(
static_cast<float>(
EIGEN_LN2) *
x.imag());
1525 return std::complex<float>(res_real, res_imag);
1530 double com =
::exp2(
x.real());
1531 double res_real = com *
::cos(
static_cast<double>(
EIGEN_LN2) *
x.imag());
1532 double res_imag = com *
::sin(
static_cast<double>(
EIGEN_LN2) *
x.imag());
1533 return std::complex<double>(res_real, res_imag);
1537 template <
typename Scalar>
1542 #if defined(SYCL_DEVICE_ONLY)
1543 SYCL_SPECIALIZE_FLOATING_TYPES_UNARY(
expm1,
expm1)
1546 #if defined(EIGEN_GPUCC)
1558 template <
typename T>
1564 #if defined(SYCL_DEVICE_ONLY)
1565 SYCL_SPECIALIZE_FLOATING_TYPES_UNARY(
cos,
cos)
1568 #if defined(EIGEN_GPUCC)
1580 template <
typename T>
1586 #if defined(SYCL_DEVICE_ONLY)
1587 SYCL_SPECIALIZE_FLOATING_TYPES_UNARY(
sin,
sin)
1590 #if defined(EIGEN_GPUCC)
1602 template <
typename T>
1608 #if defined(SYCL_DEVICE_ONLY)
1609 SYCL_SPECIALIZE_FLOATING_TYPES_UNARY(
tan,
tan)
1612 #if defined(EIGEN_GPUCC)
1624 template <
typename T>
1630 template <
typename T>
1633 return static_cast<T>(
acosh(
x));
1636 #if defined(SYCL_DEVICE_ONLY)
1637 SYCL_SPECIALIZE_FLOATING_TYPES_UNARY(
acos,
acos)
1638 SYCL_SPECIALIZE_FLOATING_TYPES_UNARY(
acosh,
acosh)
1641 #if defined(EIGEN_GPUCC)
1653 template <
typename T>
1659 template <
typename T>
1662 return static_cast<T>(
asinh(
x));
1665 #if defined(SYCL_DEVICE_ONLY)
1666 SYCL_SPECIALIZE_FLOATING_TYPES_UNARY(
asin,
asin)
1667 SYCL_SPECIALIZE_FLOATING_TYPES_UNARY(
asinh,
asinh)
1670 #if defined(EIGEN_GPUCC)
1682 template <
typename T>
1685 return static_cast<T>(
atan(
x));
1691 return static_cast<T>(
atan2(
y,
x));
1694 template <
typename T>
1697 return static_cast<T>(
atanh(
x));
1700 #if defined(SYCL_DEVICE_ONLY)
1701 SYCL_SPECIALIZE_FLOATING_TYPES_UNARY(
atan,
atan)
1702 SYCL_SPECIALIZE_FLOATING_TYPES_UNARY(
atanh,
atanh)
1705 #if defined(EIGEN_GPUCC)
1717 template <
typename T>
1720 return static_cast<T>(
cosh(
x));
1723 #if defined(SYCL_DEVICE_ONLY)
1724 SYCL_SPECIALIZE_FLOATING_TYPES_UNARY(
cosh,
cosh)
1727 #if defined(EIGEN_GPUCC)
1739 template <
typename T>
1742 return static_cast<T>(
sinh(
x));
1745 #if defined(SYCL_DEVICE_ONLY)
1746 SYCL_SPECIALIZE_FLOATING_TYPES_UNARY(
sinh,
sinh)
1749 #if defined(EIGEN_GPUCC)
1761 template <
typename T>
1767 #if (!defined(EIGEN_GPUCC)) && EIGEN_FAST_MATH && !defined(SYCL_DEVICE_ONLY)
1771 #if defined(SYCL_DEVICE_ONLY)
1772 SYCL_SPECIALIZE_FLOATING_TYPES_UNARY(
tanh,
tanh)
1775 #if defined(EIGEN_GPUCC)
1787 template <
typename T>
1793 #if defined(SYCL_DEVICE_ONLY)
1794 SYCL_SPECIALIZE_FLOATING_TYPES_BINARY(
fmod,
fmod)
1797 #if defined(EIGEN_GPUCC)
1800 return ::fmodf(
a,
b);
1809 #if defined(SYCL_DEVICE_ONLY)
1810 #undef SYCL_SPECIALIZE_SIGNED_INTEGER_TYPES_BINARY
1811 #undef SYCL_SPECIALIZE_SIGNED_INTEGER_TYPES_UNARY
1812 #undef SYCL_SPECIALIZE_UNSIGNED_INTEGER_TYPES_BINARY
1813 #undef SYCL_SPECIALIZE_UNSIGNED_INTEGER_TYPES_UNARY
1814 #undef SYCL_SPECIALIZE_INTEGER_TYPES_BINARY
1815 #undef SYCL_SPECIALIZE_UNSIGNED_INTEGER_TYPES_UNARY
1816 #undef SYCL_SPECIALIZE_FLOATING_TYPES_BINARY
1817 #undef SYCL_SPECIALIZE_FLOATING_TYPES_UNARY
1818 #undef SYCL_SPECIALIZE_FLOATING_TYPES_UNARY_FUNC_RET_TYPE
1819 #undef SYCL_SPECIALIZE_GEN_UNARY_FUNC
1820 #undef SYCL_SPECIALIZE_UNARY_FUNC
1821 #undef SYCL_SPECIALIZE_GEN1_BINARY_FUNC
1822 #undef SYCL_SPECIALIZE_GEN2_BINARY_FUNC
1823 #undef SYCL_SPECIALIZE_BINARY_FUNC
1834 return bit_cast<Scalar, UnsignedScalar>(bit_cast<UnsignedScalar, Scalar>(
a) >>
n);
1840 return bit_cast<Scalar, SignedScalar>(bit_cast<SignedScalar, Scalar>(
a) >>
n);
1847 template <
typename T>
1852 template <
typename T>
1857 template <
typename T>
1866 template <
typename Scalar,
bool IsComplex,
bool IsInteger>
1869 template <
typename Scalar>
1872 template <
typename OtherScalar>
1885 template <
typename Scalar>
1888 template <
typename OtherScalar>
1898 template <
typename Scalar>
1901 template <
typename OtherScalar>
1911 template <
typename Scalar>
1915 template <
typename Scalar,
typename OtherScalar>
1917 const Scalar&
x,
const OtherScalar&
y,
1922 template <
typename Scalar>
1929 template <
typename Scalar>
1944 template <
typename OtherScalar>
1962 template <
typename RealScalar>
1978 RealScalar erm1 = numext::expm1<RealScalar>(xr);
1984 return std::complex<RealScalar>(real_part, er *
s);
1988 template <
typename T>
1993 #if defined(EIGEN_GPU_COMPILE_PHASE)
1994 template <
typename T>
1995 struct conj_impl<std::
complex<T>, true> {
AnnoyingScalar abs(const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:135
AnnoyingScalar cos(const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:136
AnnoyingScalar acos(const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:138
AnnoyingScalar sin(const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:137
AnnoyingScalar conj(const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:133
AnnoyingScalar imag(const AnnoyingScalar &)
Definition: AnnoyingScalar.h:132
AnnoyingScalar sqrt(const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:134
Array< int, Dynamic, 1 > v
Definition: Array_initializer_list_vector_cxx11.cpp:1
const unsigned n
Definition: CG3DPackingUnitTest.cpp:11
Eigen::Triplet< double > T
Definition: EigenUnitTest.cpp:11
#define EIGEN_ALWAYS_INLINE
Definition: Macros.h:845
#define EIGEN_USING_STD(FUNC)
Definition: Macros.h:1090
#define EIGEN_CONSTEXPR
Definition: Macros.h:758
#define EIGEN_DEVICE_FUNC
Definition: Macros.h:892
#define eigen_assert(x)
Definition: Macros.h:910
#define EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS
Definition: Macros.h:900
#define EIGEN_STRONG_INLINE
Definition: Macros.h:834
#define EIGEN_MATHFUNC_IMPL(func, scalar)
Definition: MathFunctions.h:64
#define EIGEN_LN2
Definition: MathFunctions.h:18
#define EIGEN_PI
Definition: MathFunctions.h:16
cout<< "Here is the matrix m:"<< endl<< m<< endl;Matrix< ptrdiff_t, 3, 1 > res
Definition: PartialRedux_count.cpp:3
#define EIGEN_STATIC_ASSERT_NON_INTEGER(TYPE)
Definition: StaticAssert.h:74
Scalar * b
Definition: benchVecAdd.cpp:17
SCALAR Scalar
Definition: bench_gemm.cpp:45
NumTraits< Scalar >::Real RealScalar
Definition: bench_gemm.cpp:46
@ IsComplex
Definition: common.h:73
float real
Definition: datatypes.h:10
RealScalar s
Definition: level1_cplx_impl.h:130
if n return
Definition: level1_cplx_impl.h:31
const Scalar * a
Definition: level2_cplx_impl.h:32
#define isfinite(X)
Definition: main.h:111
EIGEN_DEVICE_FUNC Scalar expm1(const Scalar &x)
Definition: MathFunctions.h:433
EIGEN_DEVICE_FUNC Scalar log1p(const Scalar &x)
Definition: MathFunctions.h:496
EIGEN_DEVICE_FUNC int clz(BitsType bits)
Definition: MathFunctions.h:644
EIGEN_DEVICE_FUNC std::enable_if_t<!(std::numeric_limits< T >::has_quiet_NaN||std::numeric_limits< T >::has_signaling_NaN), bool > isnan_impl(const T &)
Definition: MathFunctions.h:802
@ meta_floor_log2_terminate
Definition: MathFunctions.h:566
@ meta_floor_log2_move_up
Definition: MathFunctions.h:566
@ meta_floor_log2_move_down
Definition: MathFunctions.h:566
@ meta_floor_log2_bogus
Definition: MathFunctions.h:566
const Scalar & y
Definition: RandomImpl.h:36
EIGEN_DEVICE_FUNC std::enable_if_t<!std::numeric_limits< T >::has_infinity, bool > isinf_impl(const T &)
Definition: MathFunctions.h:788
EIGEN_DEVICE_FUNC bool isApprox(const Scalar &x, const Scalar &y, const typename NumTraits< Scalar >::Real &precision=NumTraits< Scalar >::dummy_precision())
Definition: MathFunctions.h:1923
EIGEN_DEVICE_FUNC std::enable_if_t<!(std::numeric_limits< T >::has_infinity||std::numeric_limits< T >::has_quiet_NaN||std::numeric_limits< T >::has_signaling_NaN), bool > isfinite_impl(const T &)
Definition: MathFunctions.h:773
EIGEN_DEVICE_FUNC bool isMuchSmallerThan(const Scalar &x, const OtherScalar &y, const typename NumTraits< Scalar >::Real &precision=NumTraits< Scalar >::dummy_precision())
Definition: MathFunctions.h:1916
EIGEN_DEVICE_FUNC NewType cast(const OldType &x)
Definition: MathFunctions.h:362
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS T ptanh_float(const T &a_x)
Definition: GenericPacketMathFunctions.h:1155
EIGEN_DEVICE_FUNC std::complex< T > complex_log(const std::complex< T > &z)
Definition: MathFunctionsImpl.h:250
EIGEN_DEVICE_FUNC std::complex< T > complex_sqrt(const std::complex< T > &a_x)
Definition: MathFunctionsImpl.h:175
EIGEN_DEVICE_FUNC int ctz(BitsType bits)
Definition: MathFunctions.h:650
EIGEN_DEVICE_FUNC std::complex< T > complex_rsqrt(const std::complex< T > &a_x)
Definition: MathFunctionsImpl.h:211
EIGEN_MATHFUNC_RETVAL(random, Scalar) random(const Scalar &x
EIGEN_DEVICE_FUNC bool isApproxOrLessThan(const Scalar &x, const Scalar &y, const typename NumTraits< Scalar >::Real &precision=NumTraits< Scalar >::dummy_precision())
Definition: MathFunctions.h:1930
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_DEVICE_FUNC EIGEN_ALWAYS_INLINE T acosh(const T &x)
Definition: MathFunctions.h:1631
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 bool() isfinite(const Eigen::bfloat16 &h)
Definition: BFloat16.h:752
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE T asinh(const T &x)
Definition: MathFunctions.h:1660
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE T fmod(const T &a, const T &b)
Definition: MathFunctions.h:1788
EIGEN_DEVICE_FUNC internal::add_const_on_value_type_t< EIGEN_MATHFUNC_RETVAL(imag_ref, Scalar)> imag_ref(const Scalar &x)
Definition: MathFunctions.h:1072
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 T rsqrt(const T &x)
Definition: MathFunctions.h:1327
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE bool() isnan(const Eigen::bfloat16 &h)
Definition: BFloat16.h:742
EIGEN_DEVICE_FUNC internal::add_const_on_value_type_t< EIGEN_MATHFUNC_RETVAL(real_ref, Scalar)> real_ref(const Scalar &x)
Definition: MathFunctions.h:1051
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE T asin(const T &x)
Definition: MathFunctions.h:1654
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar logical_shift_left(const Scalar &a, int n)
Definition: MathFunctions.h:1827
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE T tanh(const T &x)
Definition: MathFunctions.h:1762
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE T cbrt(const T &x)
Definition: MathFunctions.h:1320
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE T atan(const T &x)
Definition: MathFunctions.h:1683
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE T atanh(const T &x)
Definition: MathFunctions.h:1695
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE T cosh(const T &x)
Definition: MathFunctions.h:1718
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE T exp(const T &x)
Definition: MathFunctions.h:1424
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE T sin(const T &x)
Definition: MathFunctions.h:1581
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar arithmetic_shift_right(const Scalar &a, int n)
Definition: MathFunctions.h:1838
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE float sqrt(const float &x)
Definition: arch/SSE/MathFunctions.h:69
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 EIGEN_ALWAYS_INLINE T mini(const T &x, const T &y)
Definition: MathFunctions.h:920
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar logical_shift_right(const Scalar &a, int n)
Definition: MathFunctions.h:1832
EIGEN_DEVICE_FUNC bool abs2(bool x)
Definition: MathFunctions.h:1102
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE T sinh(const T &x)
Definition: MathFunctions.h:1740
EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS EIGEN_DEVICE_FUNC bool sqrt< bool >(const bool &x)
Definition: MathFunctions.h:1310
EIGEN_DEVICE_FUNC static constexpr EIGEN_ALWAYS_INLINE Scalar signbit(const Scalar &x)
Definition: MathFunctions.h:1419
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE T exp2(const T &x)
Definition: MathFunctions.h:1481
Map< const Array< unsigned char, sizeof(T), 1 > > bits(const T &x)
Definition: packetmath_test_shared.h:36
Namespace containing all symbols from the Eigen library.
Definition: bench_norm.cpp:70
auto run(Kernel kernel, Args &&... args) -> decltype(kernel(args...))
Definition: gpu_test_helper.h:414
AutoDiffScalar< Matrix< typename internal::traits< internal::remove_all_t< DerTypeA > >::Scalar, Dynamic, 1 > > atan2(const AutoDiffScalar< DerTypeA > &a, const AutoDiffScalar< DerTypeB > &b)
Definition: AutoDiffScalar.h:558
squared absolute value
Definition: GlobalFunctions.h:87
const AutoDiffScalar< DerType > & real(const AutoDiffScalar< DerType > &x)
Definition: AutoDiffScalar.h:486
DerType::Scalar imag(const AutoDiffScalar< DerType > &)
Definition: AutoDiffScalar.h:490
const AutoDiffScalar< DerType > & conj(const AutoDiffScalar< DerType > &x)
Definition: AutoDiffScalar.h:482
Real fabs(const Real &a)
Definition: boostmultiprec.cpp:117
std::string lower(std::string s)
returns the input string after converting upper-case characters to lower case
Definition: StringHelpers.cc:11
Definition: Eigen_Colamd.h:49
list x
Definition: plotDoE.py:28
@ IsSigned
Definition: NumTraits.h:175
@ IsComplex
Definition: NumTraits.h:176
T Real
Definition: NumTraits.h:183
Holds information about the various numeric (i.e. scalar) types allowed by Eigen.
Definition: NumTraits.h:217
Determines whether the given binary operation of two numeric types is allowed and what the scalar ret...
Definition: XprHelper.h:1043
static EIGEN_DEVICE_FUNC RealScalar run(const Scalar &x)
Definition: MathFunctions.h:224
NumTraits< Scalar >::Real RealScalar
Definition: MathFunctions.h:223
Definition: MathFunctions.h:215
static EIGEN_DEVICE_FUNC RealScalar run(const Scalar &x)
Definition: MathFunctions.h:217
NumTraits< Scalar >::Real RealScalar
Definition: MathFunctions.h:216
Definition: MathFunctions.h:228
static EIGEN_DEVICE_FUNC RealScalar run(const Scalar &x)
Definition: MathFunctions.h:230
NumTraits< Scalar >::Real RealScalar
Definition: MathFunctions.h:229
Definition: MathFunctions.h:236
NumTraits< Scalar >::Real type
Definition: MathFunctions.h:237
Definition: MathFunctions.h:54
void type
Definition: MathFunctions.h:55
NumTraits< Scalar >::Real RealScalar
Definition: MathFunctions.h:392
static EIGEN_DEVICE_FUNC RealScalar run(const Scalar &x)
Definition: MathFunctions.h:393
static EIGEN_DEVICE_FUNC RealScalar run(const Scalar &x)
Definition: MathFunctions.h:382
NumTraits< Scalar >::Real RealScalar
Definition: MathFunctions.h:381
Definition: MathFunctions.h:377
Definition: MathFunctions.h:416
Definition: MathFunctions.h:419
NumTraits< Scalar >::Real type
Definition: MathFunctions.h:420
static EIGEN_DEVICE_FUNC NewType run(const OldType &x)
Definition: MathFunctions.h:353
static EIGEN_DEVICE_FUNC bool run(const OldType &x)
Definition: MathFunctions.h:345
Definition: MathFunctions.h:339
static EIGEN_DEVICE_FUNC NewType run(const OldType &x)
Definition: MathFunctions.h:340
static EIGEN_DEVICE_FUNC Scalar run(const Scalar &x)
Definition: MathFunctions.h:196
Definition: MathFunctions.h:190
static EIGEN_DEVICE_FUNC Scalar run(const Scalar &x)
Definition: MathFunctions.h:191
Definition: MathFunctions.h:203
Definition: MathFunctions.h:206
Scalar type
Definition: MathFunctions.h:207
Definition: MathFunctions.h:604
static EIGEN_DEVICE_FUNC int ctz(BitsType bits)
Definition: MathFunctions.h:624
static EIGEN_DEVICE_FUNC int clz(BitsType bits)
Definition: MathFunctions.h:607
Definition: MathFunctions.h:454
static EIGEN_DEVICE_FUNC Scalar run(const Scalar &x)
Definition: MathFunctions.h:455
Definition: MathFunctions.h:463
Scalar type
Definition: MathFunctions.h:464
T::Eigen_BaseClassForSpecializationOfGlobalMathFuncImpl type
Definition: MathFunctions.h:61
Definition: MathFunctions.h:49
T type
Definition: MathFunctions.h:50
Definition: MathFunctionsImpl.h:164
Definition: MathFunctions.h:330
NumTraits< Scalar >::Real type
Definition: MathFunctions.h:331
static EIGEN_DEVICE_FUNC RealScalar run(const Scalar &x)
Definition: MathFunctions.h:118
NumTraits< Scalar >::Real RealScalar
Definition: MathFunctions.h:117
Definition: MathFunctions.h:110
static EIGEN_DEVICE_FUNC RealScalar run(const Scalar &)
Definition: MathFunctions.h:112
NumTraits< Scalar >::Real RealScalar
Definition: MathFunctions.h:111
Definition: MathFunctions.h:125
EIGEN_DEVICE_FUNC static EIGEN_CONSTEXPR const Scalar run(const Scalar &)
Definition: MathFunctions.h:174
EIGEN_DEVICE_FUNC static EIGEN_CONSTEXPR Scalar run(Scalar &)
Definition: MathFunctions.h:173
Definition: MathFunctions.h:163
static EIGEN_DEVICE_FUNC const RealScalar & run(const Scalar &x)
Definition: MathFunctions.h:166
static EIGEN_DEVICE_FUNC RealScalar & run(Scalar &x)
Definition: MathFunctions.h:165
NumTraits< Scalar >::Real RealScalar
Definition: MathFunctions.h:164
Definition: MathFunctions.h:178
Definition: MathFunctions.h:181
NumTraits< Scalar >::Real & type
Definition: MathFunctions.h:182
Definition: MathFunctions.h:136
NumTraits< Scalar >::Real type
Definition: MathFunctions.h:137
@ value
Definition: Meta.h:206
Definition: MathFunctions.h:509
static EIGEN_DEVICE_FUNC Scalar run(const Scalar &x)
Definition: MathFunctions.h:512
Definition: MathFunctions.h:529
Scalar type
Definition: MathFunctions.h:530
static EIGEN_DEVICE_FUNC std::complex< Scalar > run(const std::complex< Scalar > &z)
Definition: MathFunctions.h:485
Definition: MathFunctions.h:476
static EIGEN_DEVICE_FUNC Scalar run(const Scalar &x)
Definition: MathFunctions.h:477
static EIGEN_DEVICE_FUNC Scalar run(const Scalar &x)
Definition: MathFunctions.h:308
static EIGEN_DEVICE_FUNC RealScalar run(const Scalar &x)
Definition: MathFunctions.h:300
NumTraits< Scalar >::Real RealScalar
Definition: MathFunctions.h:299
Definition: MathFunctions.h:295
Definition: MathFunctions.h:315
Definition: MathFunctions.h:318
NumTraits< Scalar >::Real type
Definition: MathFunctions.h:319
ScalarX result_type
Definition: MathFunctions.h:551
static EIGEN_DEVICE_FUNC ScalarX run(ScalarX x, ScalarY y)
Definition: MathFunctions.h:552
Definition: MathFunctions.h:539
static EIGEN_DEVICE_FUNC result_type run(const ScalarX &x, const ScalarY &y)
Definition: MathFunctions.h:543
ScalarBinaryOpTraits< ScalarX, ScalarY, internal::scalar_pow_op< ScalarX, ScalarY > >::ReturnType result_type
Definition: MathFunctions.h:542
static EIGEN_DEVICE_FUNC RealScalar run(const Scalar &x)
Definition: MathFunctions.h:83
NumTraits< Scalar >::Real RealScalar
Definition: MathFunctions.h:82
Definition: MathFunctions.h:75
static EIGEN_DEVICE_FUNC RealScalar run(const Scalar &x)
Definition: MathFunctions.h:77
NumTraits< Scalar >::Real RealScalar
Definition: MathFunctions.h:76
Definition: MathFunctions.h:90
Definition: MathFunctions.h:145
static EIGEN_DEVICE_FUNC const RealScalar & run(const Scalar &x)
Definition: MathFunctions.h:148
NumTraits< Scalar >::Real RealScalar
Definition: MathFunctions.h:146
static EIGEN_DEVICE_FUNC RealScalar & run(Scalar &x)
Definition: MathFunctions.h:147
Definition: MathFunctions.h:154
NumTraits< Scalar >::Real & type
Definition: MathFunctions.h:155
Definition: MathFunctions.h:101
NumTraits< Scalar >::Real type
Definition: MathFunctions.h:102
static EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE std::complex< T > run(const std::complex< T > &x)
Definition: MathFunctions.h:280
Definition: MathFunctions.h:1989
static EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE T run(const T &x)
Definition: MathFunctions.h:1990
Definition: MathFunctions.h:286
Scalar type
Definition: MathFunctions.h:287
static EIGEN_DEVICE_FUNC bool isApproxOrLessThan(const Scalar &x, const Scalar &y, const RealScalar &prec)
Definition: MathFunctions.h:1880
static EIGEN_DEVICE_FUNC bool isApprox(const Scalar &x, const Scalar &y, const RealScalar &prec)
Definition: MathFunctions.h:1877
NumTraits< Scalar >::Real RealScalar
Definition: MathFunctions.h:1871
static EIGEN_DEVICE_FUNC bool isMuchSmallerThan(const Scalar &x, const OtherScalar &y, const RealScalar &prec)
Definition: MathFunctions.h:1873
static EIGEN_DEVICE_FUNC bool isMuchSmallerThan(const Scalar &x, const Scalar &, const RealScalar &)
Definition: MathFunctions.h:1889
NumTraits< Scalar >::Real RealScalar
Definition: MathFunctions.h:1887
static EIGEN_DEVICE_FUNC bool isApproxOrLessThan(const Scalar &x, const Scalar &y, const RealScalar &)
Definition: MathFunctions.h:1893
static EIGEN_DEVICE_FUNC bool isApprox(const Scalar &x, const Scalar &y, const RealScalar &)
Definition: MathFunctions.h:1892
NumTraits< Scalar >::Real RealScalar
Definition: MathFunctions.h:1900
static EIGEN_DEVICE_FUNC bool isApprox(const Scalar &x, const Scalar &y, const RealScalar &prec)
Definition: MathFunctions.h:1906
static EIGEN_DEVICE_FUNC bool isMuchSmallerThan(const Scalar &x, const OtherScalar &y, const RealScalar &prec)
Definition: MathFunctions.h:1902
Definition: MathFunctions.h:1867
static EIGEN_DEVICE_FUNC bool isMuchSmallerThan(const bool &x, const bool &, const bool &)
Definition: MathFunctions.h:1945
bool RealScalar
Definition: MathFunctions.h:1942
static EIGEN_DEVICE_FUNC bool isApprox(bool x, bool y, bool)
Definition: MathFunctions.h:1949
static EIGEN_DEVICE_FUNC bool isApproxOrLessThan(const bool &x, const bool &y, const bool &)
Definition: MathFunctions.h:1951
Definition: MathFunctions.h:1913
static EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE std::complex< T > run(const std::complex< T > &x)
Definition: MathFunctions.h:260
Definition: MathFunctions.h:245
static EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE Scalar run(const Scalar &x)
Definition: MathFunctions.h:246
Definition: MathFunctions.h:266
Scalar type
Definition: MathFunctions.h:267
void signed_type
Definition: Meta.h:47
typename get_integer_by_size< Size >::signed_type intSize_t
Definition: MathFunctions.h:1400
EIGEN_DEVICE_FUNC static EIGEN_ALWAYS_INLINE Scalar run(const Scalar &x)
Definition: MathFunctions.h:1401
EIGEN_DEVICE_FUNC static constexpr EIGEN_ALWAYS_INLINE Scalar run(const Scalar &)
Definition: MathFunctions.h:1416
EIGEN_DEVICE_FUNC static constexpr EIGEN_ALWAYS_INLINE Scalar run(const Scalar &x)
Definition: MathFunctions.h:1412
Definition: MathFunctions.h:1395
Definition: datatypes.h:12
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