10 #ifndef EIGEN_UNARY_FUNCTORS_H
11 #define EIGEN_UNARY_FUNCTORS_H
13 #include "../InternalHeaderCheck.h"
24 template<
typename Scalar>
struct scalar_opposite_op {
26 template<
typename Packet>
30 template<
typename Scalar>
31 struct functor_traits<scalar_opposite_op<Scalar> >
34 PacketAccess = packet_traits<Scalar>::HasNegate };
42 template<
typename Scalar>
struct scalar_abs_op {
45 template<
typename Packet>
49 template<
typename Scalar>
50 struct functor_traits<scalar_abs_op<Scalar> >
54 PacketAccess = packet_traits<Scalar>::HasAbs
63 template<
typename Scalar>
struct scalar_score_coeff_op : scalar_abs_op<Scalar>
65 typedef void Score_is_abs;
67 template<
typename Scalar>
68 struct functor_traits<scalar_score_coeff_op<Scalar> > : functor_traits<scalar_abs_op<Scalar> > {};
71 template<
typename Scalar,
typename=
void>
struct abs_knowing_score
74 template<
typename Score>
77 template<
typename Scalar>
struct abs_knowing_score<Scalar, typename scalar_score_coeff_op<Scalar>::Score_is_abs>
80 template<
typename Scal>
89 template<
typename Scalar>
struct scalar_abs2_op {
93 template<
typename Packet>
97 template<
typename Scalar>
98 struct functor_traits<scalar_abs2_op<Scalar> >
106 template<
typename Scalar>
struct scalar_conjugate_op {
109 template<
typename Packet>
112 template<
typename Scalar>
113 struct functor_traits<scalar_conjugate_op<Scalar> >
125 PacketAccess = packet_traits<Scalar>::HasConj
134 template<
typename Scalar>
struct scalar_arg_op {
137 template<
typename Packet>
141 template<
typename Scalar>
142 struct functor_traits<scalar_arg_op<Scalar> >
146 PacketAccess = packet_traits<Scalar>::HasArg
155 template <
typename Scalar>
156 struct scalar_carg_op {
157 using result_type = Scalar;
160 template <
typename Packet>
165 template <
typename Scalar>
166 struct functor_traits<scalar_carg_op<Scalar>> {
168 enum { Cost = functor_traits<scalar_atan2_op<RealScalar>>::Cost, PacketAccess = packet_traits<RealScalar>::HasATan };
176 template<
typename Scalar,
typename NewType>
177 struct scalar_cast_op {
178 typedef NewType result_type;
182 template<
typename Scalar,
typename NewType>
183 struct functor_traits<scalar_cast_op<Scalar,NewType> >
192 template <
typename SrcType,
typename DstType>
193 struct core_cast_op : scalar_cast_op<SrcType, DstType> {};
195 template <
typename SrcType,
typename DstType>
196 struct functor_traits<core_cast_op<SrcType, DstType>> {
197 using CastingTraits = type_casting_traits<SrcType, DstType>;
200 PacketAccess = CastingTraits::VectorizedCast && (CastingTraits::SrcCoeffRatio <= 8)
209 template<
typename Scalar,
int N>
210 struct scalar_shift_right_op {
214 template<
typename Packet>
216 {
return internal::parithmetic_shift_right<N>(
a); }
218 template<
typename Scalar,
int N>
219 struct functor_traits<scalar_shift_right_op<Scalar,N> >
227 template<
typename Scalar,
int N>
228 struct scalar_shift_left_op {
231 template<
typename Packet>
233 {
return internal::plogical_shift_left<N>(
a); }
235 template<
typename Scalar,
int N>
236 struct functor_traits<scalar_shift_left_op<Scalar,N> >
244 template<
typename Scalar>
245 struct scalar_real_op {
250 template<
typename Scalar>
251 struct functor_traits<scalar_real_op<Scalar> >
252 {
enum { Cost = 0, PacketAccess =
false }; };
259 template<
typename Scalar>
260 struct scalar_imag_op {
265 template<
typename Scalar>
266 struct functor_traits<scalar_imag_op<Scalar> >
267 {
enum { Cost = 0, PacketAccess =
false }; };
274 template<
typename Scalar>
275 struct scalar_real_ref_op {
280 template<
typename Scalar>
281 struct functor_traits<scalar_real_ref_op<Scalar> >
282 {
enum { Cost = 0, PacketAccess =
false }; };
289 template<
typename Scalar>
290 struct scalar_imag_ref_op {
295 template<
typename Scalar>
296 struct functor_traits<scalar_imag_ref_op<Scalar> >
297 {
enum { Cost = 0, PacketAccess =
false }; };
305 template<
typename Scalar>
struct scalar_exp_op {
307 template <
typename Packet>
310 template <
typename Scalar>
311 struct functor_traits<scalar_exp_op<Scalar> > {
313 PacketAccess = packet_traits<Scalar>::HasExp,
315 #ifdef EIGEN_VECTORIZE_FMA
324 scalar_div_cost<Scalar,packet_traits<Scalar>::HasDiv>::value))
333 scalar_div_cost<Scalar,packet_traits<Scalar>::HasDiv>::value))
344 template<
typename Scalar>
struct scalar_expm1_op {
346 template <
typename Packet>
349 template <
typename Scalar>
350 struct functor_traits<scalar_expm1_op<Scalar> > {
352 PacketAccess = packet_traits<Scalar>::HasExpm1,
353 Cost = functor_traits<scalar_exp_op<Scalar> >::Cost
363 template<
typename Scalar>
struct scalar_log_op {
365 template <
typename Packet>
368 template <
typename Scalar>
369 struct functor_traits<scalar_log_op<Scalar> > {
371 PacketAccess = packet_traits<Scalar>::HasLog,
375 #ifdef EIGEN_VECTORIZE_FMA
383 :
sizeof(Scalar)==4 ? 40 : 85)
393 template<
typename Scalar>
struct scalar_log1p_op {
395 template <
typename Packet>
398 template <
typename Scalar>
399 struct functor_traits<scalar_log1p_op<Scalar> > {
401 PacketAccess = packet_traits<Scalar>::HasLog1p,
402 Cost = functor_traits<scalar_log_op<Scalar> >::Cost
412 template<
typename Scalar>
struct scalar_log10_op {
414 template <
typename Packet>
417 template<
typename Scalar>
418 struct functor_traits<scalar_log10_op<Scalar> >
427 template<
typename Scalar>
struct scalar_log2_op {
429 template <
typename Packet>
432 template<
typename Scalar>
433 struct functor_traits<scalar_log2_op<Scalar> >
440 template<
typename Scalar>
struct scalar_sqrt_op {
442 template <
typename Packet>
445 template <
typename Scalar>
446 struct functor_traits<scalar_sqrt_op<Scalar> > {
450 Cost = (
sizeof(Scalar) == 8 ? 28
456 Cost = (
sizeof(Scalar) == 8 ? 28 : 14),
458 PacketAccess = packet_traits<Scalar>::HasSqrt
463 template<>
struct scalar_sqrt_op<
bool> {
465 template <
typename Packet>
469 struct functor_traits<scalar_sqrt_op<
bool> > {
470 enum { Cost = 1, PacketAccess = packet_traits<bool>::Vectorizable };
477 template<
typename Scalar>
struct scalar_rsqrt_op {
479 template <
typename Packet>
483 template<
typename Scalar>
484 struct functor_traits<scalar_rsqrt_op<Scalar> >
487 PacketAccess = packet_traits<Scalar>::HasRsqrt
495 template<
typename Scalar>
struct scalar_cos_op {
497 template <
typename Packet>
500 template<
typename Scalar>
501 struct functor_traits<scalar_cos_op<Scalar> >
505 PacketAccess = packet_traits<Scalar>::HasCos
513 template<
typename Scalar>
struct scalar_sin_op {
515 template <
typename Packet>
518 template<
typename Scalar>
519 struct functor_traits<scalar_sin_op<Scalar> >
523 PacketAccess = packet_traits<Scalar>::HasSin
532 template<
typename Scalar>
struct scalar_tan_op {
534 template <
typename Packet>
537 template<
typename Scalar>
538 struct functor_traits<scalar_tan_op<Scalar> >
542 PacketAccess = packet_traits<Scalar>::HasTan
550 template<
typename Scalar>
struct scalar_acos_op {
552 template <
typename Packet>
555 template<
typename Scalar>
556 struct functor_traits<scalar_acos_op<Scalar> >
560 PacketAccess = packet_traits<Scalar>::HasACos
568 template<
typename Scalar>
struct scalar_asin_op {
570 template <
typename Packet>
573 template<
typename Scalar>
574 struct functor_traits<scalar_asin_op<Scalar> >
578 PacketAccess = packet_traits<Scalar>::HasASin
587 template<
typename Scalar>
struct scalar_atan_op {
589 template <
typename Packet>
592 template<
typename Scalar>
593 struct functor_traits<scalar_atan_op<Scalar> >
597 PacketAccess = packet_traits<Scalar>::HasATan
605 template <
typename Scalar>
606 struct scalar_tanh_op {
608 template <
typename Packet>
612 template <
typename Scalar>
613 struct functor_traits<scalar_tanh_op<Scalar> > {
615 PacketAccess = packet_traits<Scalar>::HasTanh,
618 #ifdef EIGEN_VECTORIZE_FMA
623 scalar_div_cost<Scalar,packet_traits<Scalar>::HasDiv>::value)
627 scalar_div_cost<Scalar,packet_traits<Scalar>::HasDiv>::value)
632 2 * scalar_div_cost<Scalar,packet_traits<Scalar>::HasDiv>::value +
633 functor_traits<scalar_exp_op<Scalar> >::Cost))
641 template <
typename Scalar>
642 struct scalar_atanh_op {
644 template <
typename Packet>
648 template <
typename Scalar>
649 struct functor_traits<scalar_atanh_op<Scalar> > {
652 PacketAccess = packet_traits<Scalar>::HasATanh
660 template<
typename Scalar>
struct scalar_sinh_op {
662 template <
typename Packet>
665 template<
typename Scalar>
666 struct functor_traits<scalar_sinh_op<Scalar> >
670 PacketAccess = packet_traits<Scalar>::HasSinh
678 template <
typename Scalar>
679 struct scalar_asinh_op {
683 template <
typename Scalar>
684 struct functor_traits<scalar_asinh_op<Scalar> > {
692 template<
typename Scalar>
struct scalar_cosh_op {
694 template <
typename Packet>
697 template<
typename Scalar>
698 struct functor_traits<scalar_cosh_op<Scalar> >
702 PacketAccess = packet_traits<Scalar>::HasCosh
710 template <
typename Scalar>
711 struct scalar_acosh_op {
715 template <
typename Scalar>
716 struct functor_traits<scalar_acosh_op<Scalar> > {
724 template<
typename Scalar>
725 struct scalar_inverse_op {
727 template<
typename Packet>
731 template <
typename Scalar>
732 struct functor_traits<scalar_inverse_op<Scalar> > {
734 PacketAccess = packet_traits<Scalar>::HasDiv,
738 Cost = (packet_traits<Scalar>::HasReciprocal
740 : scalar_div_cost<Scalar, PacketAccess>::value)
748 template<
typename Scalar>
749 struct scalar_square_op {
751 template<
typename Packet>
755 template<
typename Scalar>
756 struct functor_traits<scalar_square_op<Scalar> >
761 struct scalar_square_op<
bool> {
763 template<
typename Packet>
768 struct functor_traits<scalar_square_op<
bool> >
769 {
enum { Cost = 0, PacketAccess = packet_traits<bool>::Vectorizable }; };
775 template<
typename Scalar>
776 struct scalar_cube_op {
778 template<
typename Packet>
782 template<
typename Scalar>
783 struct functor_traits<scalar_cube_op<Scalar> >
788 struct scalar_cube_op<
bool> {
790 template<
typename Packet>
795 struct functor_traits<scalar_cube_op<
bool> >
796 {
enum { Cost = 0, PacketAccess = packet_traits<bool>::Vectorizable }; };
802 template<
typename Scalar>
struct scalar_round_op {
804 template <
typename Packet>
807 template<
typename Scalar>
808 struct functor_traits<scalar_round_op<Scalar> >
820 template<
typename Scalar>
struct scalar_floor_op {
822 template <
typename Packet>
825 template<
typename Scalar>
826 struct functor_traits<scalar_floor_op<Scalar> >
838 template<
typename Scalar>
struct scalar_rint_op {
840 template <
typename Packet>
843 template<
typename Scalar>
844 struct functor_traits<scalar_rint_op<Scalar> >
856 template<
typename Scalar>
struct scalar_ceil_op {
858 template <
typename Packet>
861 template<
typename Scalar>
862 struct functor_traits<scalar_ceil_op<Scalar> >
874 template<
typename Scalar,
bool UseTypedPredicate=false>
875 struct scalar_isnan_op {
877 #if defined(SYCL_DEVICE_ONLY)
886 template<
typename Scalar>
887 struct scalar_isnan_op<Scalar, true> {
889 #if defined(SYCL_DEVICE_ONLY)
895 template <
typename Packet>
901 template<
typename Scalar,
bool UseTypedPredicate>
902 struct functor_traits<scalar_isnan_op<Scalar, UseTypedPredicate> >
906 PacketAccess = packet_traits<Scalar>::HasCmp && UseTypedPredicate
914 template<
typename Scalar>
struct scalar_isinf_op {
915 typedef bool result_type;
917 #if defined(SYCL_DEVICE_ONLY)
924 template<
typename Scalar>
925 struct functor_traits<scalar_isinf_op<Scalar> >
937 template<
typename Scalar>
struct scalar_isfinite_op {
938 typedef bool result_type;
940 #if defined(SYCL_DEVICE_ONLY)
947 template<
typename Scalar>
948 struct functor_traits<scalar_isfinite_op<Scalar> >
961 template <
typename Scalar>
962 struct scalar_boolean_not_op {
963 using result_type = Scalar;
967 return a == Scalar(0) ? Scalar(1) : Scalar(0);
969 template <
typename Packet>
970 EIGEN_STRONG_INLINE Packet packetOp(
const Packet&
a)
const {
971 const Packet cst_one = pset1<Packet>(Scalar(1));
973 return pand(not_a, cst_one);
976 template <
typename Scalar>
977 struct functor_traits<scalar_boolean_not_op<Scalar>> {
981 template <typename Scalar, bool IsComplex = NumTraits<Scalar>::IsComplex>
982 struct bitwise_unary_impl {
983 static constexpr
size_t Size =
sizeof(Scalar);
986 uint_t a_as_uint = numext::bit_cast<uint_t, Scalar>(
a);
987 uint_t result = ~a_as_uint;
988 return numext::bit_cast<Scalar, uint_t>(result);
992 template <
typename Scalar>
993 struct bitwise_unary_impl<Scalar, true> {
996 Real real_result = bitwise_unary_impl<Real>::run_not(
numext::real(
a));
997 Real imag_result = bitwise_unary_impl<Real>::run_not(
numext::imag(
a));
998 return Scalar(real_result, imag_result);
1007 template <
typename Scalar>
1008 struct scalar_bitwise_not_op {
1010 EIGEN_STATIC_ASSERT((!internal::is_same<Scalar, bool>::value), DONT USE BITWISE OPS ON BOOLEAN TYPES)
1011 using result_type = Scalar;
1013 return bitwise_unary_impl<Scalar>::run_not(
a);
1015 template <
typename Packet>
1016 EIGEN_STRONG_INLINE Packet packetOp(
const Packet&
a)
const {
1020 template <
typename Scalar>
1021 struct functor_traits<scalar_bitwise_not_op<Scalar>> {
1029 template<
typename Scalar>
1030 struct scalar_sign_op {
1036 template <
typename Packet>
1042 template<
typename Scalar>
1043 struct functor_traits<scalar_sign_op<Scalar> >
1049 PacketAccess = packet_traits<Scalar>::HasSign && packet_traits<Scalar>::Vectorizable
1057 template <
typename T>
1058 struct scalar_logistic_op {
1064 Packet packetOp(
const Packet&
x)
const {
1065 const Packet one = pset1<Packet>(
T(1));
1066 const Packet inf = pset1<Packet>(NumTraits<T>::infinity());
1067 const Packet
e =
pexp(
x);
1068 const Packet inf_mask =
pcmp_eq(
e, inf);
1093 struct scalar_logistic_op<float> {
1096 const float cst_exp_hi = 16.6355324f;
1098 return e / (1.0f +
e);
1101 template <
typename Packet>
1103 packetOp(
const Packet& _x)
const {
1104 const Packet cst_zero = pset1<Packet>(0.0f);
1105 const Packet cst_one = pset1<Packet>(1.0f);
1106 const Packet cst_half = pset1<Packet>(0.5f);
1108 const Packet cst_exp_hi = pset1<Packet>(16.6355324f);
1109 const Packet cst_exp_lo = pset1<Packet>(-104.f);
1114 Packet zero_mask =
pcmp_lt(_x, cst_exp_lo);
1115 Packet
x =
pmin(_x, cst_exp_hi);
1126 const Packet cst_cephes_LOG2EF = pset1<Packet>(1.44269504088896341f);
1131 const Packet cst_cephes_exp_C1 = pset1<Packet>(-0.693359375f);
1132 const Packet cst_cephes_exp_C2 = pset1<Packet>(2.12194440e-4f);
1133 Packet r =
pmadd(
m, cst_cephes_exp_C1,
x);
1134 r =
pmadd(
m, cst_cephes_exp_C2, r);
1139 Packet r2 =
pmul(r, r);
1140 const Packet cst_p2 = pset1<Packet>(0.49999141693115234375f);
1141 const Packet cst_p3 = pset1<Packet>(0.16666877269744873046875f);
1142 const Packet cst_p4 = pset1<Packet>(4.1898667812347412109375e-2f);
1143 const Packet cst_p5 = pset1<Packet>(8.33471305668354034423828125e-3f);
1145 const Packet p_even =
pmadd(r2, cst_p4, cst_p2);
1146 const Packet p_odd =
pmadd(r2, cst_p5, cst_p3);
1147 const Packet p_low =
padd(r, cst_one);
1148 Packet
p =
pmadd(r, p_odd, p_even);
1152 Packet
e = pldexp_fast_impl<Packet>::run(
p,
m);
1164 template <
typename T>
1165 struct functor_traits<scalar_logistic_op<
T> > {
1169 Cost = scalar_div_cost<T, packet_traits<T>::HasDiv>::value +
1170 (internal::is_same<T, float>::value
1173 functor_traits<scalar_exp_op<T> >::Cost),
1175 packet_traits<T>::HasAdd && packet_traits<T>::HasDiv &&
1176 (internal::is_same<T, float>::value
1177 ? packet_traits<T>::HasMul && packet_traits<T>::HasMax &&
1178 packet_traits<T>::HasMin
1179 : packet_traits<T>::HasNegate && packet_traits<T>::HasExp)
1183 template <
typename Scalar,
typename ExponentScalar,
1188 struct scalar_unary_pow_op {
1189 typedef typename internal::promote_scalar_arg<
1190 Scalar, ExponentScalar,
1191 internal::has_ReturnType<ScalarBinaryOpTraits<Scalar,ExponentScalar,scalar_unary_pow_op> >::value>::type PromotedExponent;
1192 typedef typename ScalarBinaryOpTraits<Scalar, PromotedExponent, scalar_unary_pow_op>::ReturnType result_type;
1193 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE scalar_unary_pow_op(
const ExponentScalar& exponent) : m_exponent(exponent) {}
1196 return static_cast<result_type
>(
pow(
a, m_exponent));
1200 const ExponentScalar m_exponent;
1201 scalar_unary_pow_op() {}
1204 template <
typename T>
1209 template<
typename From,
typename To>
1210 struct is_floating_exactly_representable {
1213 static constexpr
bool value = (exponent_digits<To>() >= exponent_digits<From>() &&
1219 template <
typename Scalar,
typename ExponentScalar>
1220 struct scalar_unary_pow_op<Scalar, ExponentScalar, false, false, false, false> {
1221 template <bool IsExactlyRepresentable = is_floating_exactly_representable<ExponentScalar, Scalar>::value>
1222 std::enable_if_t<IsExactlyRepresentable, void> check_is_representable()
const {}
1225 template <bool IsExactlyRepresentable = is_floating_exactly_representable<ExponentScalar, Scalar>::value>
1226 EIGEN_DEPRECATED std::enable_if_t<!IsExactlyRepresentable, void> check_is_representable()
const {}
1229 scalar_unary_pow_op(
const ExponentScalar& exponent) : m_exponent(static_cast<Scalar>(exponent)) {
1230 check_is_representable();
1235 return static_cast<Scalar
>(
pow(
a, m_exponent));
1237 template <
typename Packet>
1239 return unary_pow_impl<Packet, Scalar>::run(
a, m_exponent);
1243 const Scalar m_exponent;
1244 scalar_unary_pow_op() {}
1247 template <
typename Scalar,
typename ExponentScalar,
bool BaseIsInteger>
1248 struct scalar_unary_pow_op<Scalar, ExponentScalar, BaseIsInteger, true, false, false> {
1249 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE scalar_unary_pow_op(
const ExponentScalar& exponent) : m_exponent(exponent) {}
1252 return unary_pow_impl<Scalar, ExponentScalar>::run(
a, m_exponent);
1254 template <
typename Packet>
1256 return unary_pow_impl<Packet, ExponentScalar>::run(
a, m_exponent);
1260 const ExponentScalar m_exponent;
1261 scalar_unary_pow_op() {}
1264 template <
typename Scalar,
typename ExponentScalar>
1265 struct functor_traits<scalar_unary_pow_op<Scalar, ExponentScalar>> {
1267 GenPacketAccess = functor_traits<scalar_pow_op<Scalar, ExponentScalar>>::PacketAccess,
1270 Cost = functor_traits<scalar_pow_op<Scalar, ExponentScalar>>::Cost
const SignReturnType sign() const
const ArgReturnType arg() const
const Log1pReturnType log1p() const
const Expm1ReturnType expm1() const
const ImagReturnType imag() const
RealReturnType real() const
Array< double, 1, 3 > e(1./3., 0.5, 2.)
IndexedView_or_Block operator()(const RowIndices &rowIndices, const ColIndices &colIndices)
#define EIGEN_USING_STD(FUNC)
#define EIGEN_DEVICE_FUNC
#define EIGEN_NOT_A_MACRO
#define EIGEN_STATIC_ASSERT(X, MSG)
Eigen::Triplet< double > T
bfloat16 pow(const bfloat16 &a, const bfloat16 &b)
Packet pmin(const Packet &a, const Packet &b)
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pexpm1(const Packet &a)
Packet padd(const Packet &a, const Packet &b)
Packet8f pzero(const Packet8f &)
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet plog10(const Packet &a)
Packet8h ptrue(const Packet8h &a)
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet plog2(const Packet &a)
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet plog(const Packet &a)
Packet8h pandnot(const Packet8h &a, const Packet8h &b)
Packet4f pabs(const Packet4f &a)
Packet2cf pnegate(const Packet2cf &a)
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pexp(const Packet &a)
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pcos(const Packet &a)
Packet4f pmadd(const Packet4f &a, const Packet4f &b, const Packet4f &c)
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet psin(const Packet &a)
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pacos(const Packet &a)
Packet2cf pcmp_eq(const Packet2cf &a, const Packet2cf &b)
Packet psign(const Packet &a)
Packet4f pselect(const Packet4f &mask, const Packet4f &a, const Packet4f &b)
Packet pmul(const Packet &a, const Packet &b)
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet ptan(const Packet &a)
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pcosh(const Packet &a)
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pround(const Packet &a)
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet ptanh(const Packet &a)
Packet4f psqrt(const Packet4f &a)
Packet4f print(const Packet4f &a)
EIGEN_ALWAYS_INLINE Packet pcarg(const Packet &a)
Packet parg(const Packet &a)
Packet8h pand(const Packet8h &a, const Packet8h &b)
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pceil(const Packet &a)
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet plog1p(const Packet &a)
Packet pdiv(const Packet &a, const Packet &b)
Packet preciprocal(const Packet &a)
Packet2cf pconj(const Packet2cf &a)
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet psinh(const Packet &a)
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pasin(const Packet &a)
Packet4i pcmp_lt(const Packet4i &a, const Packet4i &b)
Packet8f pisnan(const Packet8f &a)
constexpr int exponent_digits()
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet patanh(const Packet &a)
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet patan(const Packet &a)
EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS Packet pfloor(const Packet &a)
Packet4f prsqrt(const Packet4f &a)
Scalar round(const Scalar &x)
EIGEN_ALWAYS_INLINE T cosh(const T &x)
EIGEN_ALWAYS_INLINE T tan(const T &x)
EIGEN_ALWAYS_INLINE bool() isinf(const Eigen::bfloat16 &h)
EIGEN_ALWAYS_INLINE T acosh(const T &x)
internal::add_const_on_value_type_t< EIGEN_MATHFUNC_RETVAL(imag_ref, Scalar) > imag_ref(const Scalar &x)
EIGEN_ALWAYS_INLINE T atan(const T &x)
EIGEN_ALWAYS_INLINE T atanh(const T &x)
internal::add_const_on_value_type_t< EIGEN_MATHFUNC_RETVAL(real_ref, Scalar) > real_ref(const Scalar &x)
EIGEN_ALWAYS_INLINE T sin(const T &x)
Scalar rint(const Scalar &x)
EIGEN_ALWAYS_INLINE T tanh(const T &x)
EIGEN_ALWAYS_INLINE T acos(const T &x)
EIGEN_ALWAYS_INLINE float sqrt(const float &x)
EIGEN_ALWAYS_INLINE T exp(const T &x)
EIGEN_ALWAYS_INLINE T sinh(const T &x)
Scalar() floor(const Scalar &x)
Scalar() ceil(const Scalar &x)
EIGEN_ALWAYS_INLINE T asinh(const T &x)
EIGEN_ALWAYS_INLINE bool() isnan(const Eigen::bfloat16 &h)
EIGEN_ALWAYS_INLINE bool() isfinite(const Eigen::bfloat16 &h)
EIGEN_ALWAYS_INLINE T asin(const T &x)
EIGEN_ALWAYS_INLINE T mini(const T &x, const T &y)
EIGEN_ALWAYS_INLINE T cos(const T &x)
EIGEN_ALWAYS_INLINE std::enable_if_t< NumTraits< T >::IsSigned||NumTraits< T >::IsComplex, typename NumTraits< T >::Real > abs(const T &x)
EIGEN_ALWAYS_INLINE T rsqrt(const T &x)
EIGEN_ALWAYS_INLINE T log(const T &x)
const Eigen::CwiseUnaryOp< Eigen::internal::scalar_log10_op< typename Derived::Scalar >, const Derived > log10(const Eigen::ArrayBase< Derived > &x)
const Eigen::CwiseUnaryOp< Eigen::internal::scalar_conjugate_op< typename Derived::Scalar >, const Derived > conj(const Eigen::ArrayBase< Derived > &x)
Holds information about the various numeric (i.e. scalar) types allowed by Eigen.