11#ifndef EIGEN_GLOBAL_FUNCTIONS_H
12#define EIGEN_GLOBAL_FUNCTIONS_H
14#ifdef EIGEN_PARSED_BY_DOXYGEN
16#define EIGEN_ARRAY_DECLARE_GLOBAL_UNARY(NAME, FUNCTOR, DOC_OP, DOC_DETAILS) \
23 template <typename Derived> \
24 inline const Eigen::CwiseUnaryOp<Eigen::internal::FUNCTOR<typename Derived::Scalar>, const Derived> NAME( \
25 const Eigen::ArrayBase<Derived>& x);
29#define EIGEN_ARRAY_DECLARE_GLOBAL_UNARY(NAME, FUNCTOR, DOC_OP, DOC_DETAILS) \
30 template <typename Derived> \
31 inline const Eigen::CwiseUnaryOp<Eigen::internal::FUNCTOR<typename Derived::Scalar>, const Derived>(NAME)( \
32 const Eigen::ArrayBase<Derived>& x) { \
33 return Eigen::CwiseUnaryOp<Eigen::internal::FUNCTOR<typename Derived::Scalar>, const Derived>(x.derived()); \
38#define EIGEN_ARRAY_DECLARE_GLOBAL_EIGEN_UNARY(NAME, FUNCTOR) \
40 template <typename Derived> \
41 struct NAME##_retval<ArrayBase<Derived> > { \
42 typedef const Eigen::CwiseUnaryOp<Eigen::internal::FUNCTOR<typename Derived::Scalar>, const Derived> type; \
44 template <typename Derived> \
45 struct NAME##_impl<ArrayBase<Derived> > { \
46 static inline typename NAME##_retval<ArrayBase<Derived> >::type run(const Eigen::ArrayBase<Derived>& x) { \
47 return typename NAME##_retval<ArrayBase<Derived> >::type(x.derived()); \
52#include "./InternalHeaderCheck.h"
55EIGEN_ARRAY_DECLARE_GLOBAL_UNARY(real, scalar_real_op, real part,\sa ArrayBase::real)
56EIGEN_ARRAY_DECLARE_GLOBAL_UNARY(imag, scalar_imag_op, imaginary part,\sa
ArrayBase::imag)
57EIGEN_ARRAY_DECLARE_GLOBAL_UNARY(conj, scalar_conjugate_op, complex conjugate,\sa
ArrayBase::conjugate)
58EIGEN_ARRAY_DECLARE_GLOBAL_UNARY(inverse, scalar_inverse_op, inverse,\sa
ArrayBase::inverse)
59EIGEN_ARRAY_DECLARE_GLOBAL_UNARY(sin, scalar_sin_op, sine,\sa
ArrayBase::sin)
60EIGEN_ARRAY_DECLARE_GLOBAL_UNARY(cos, scalar_cos_op, cosine,\sa
ArrayBase::cos)
61EIGEN_ARRAY_DECLARE_GLOBAL_UNARY(tan, scalar_tan_op, tangent,\sa
ArrayBase::tan)
62EIGEN_ARRAY_DECLARE_GLOBAL_UNARY(atan, scalar_atan_op, arc - tangent,\sa
ArrayBase::atan)
63EIGEN_ARRAY_DECLARE_GLOBAL_UNARY(asin, scalar_asin_op, arc - sine,\sa
ArrayBase::asin)
64EIGEN_ARRAY_DECLARE_GLOBAL_UNARY(acos, scalar_acos_op, arc - consine,\sa
ArrayBase::acos)
65EIGEN_ARRAY_DECLARE_GLOBAL_UNARY(sinh, scalar_sinh_op, hyperbolic sine,\sa
ArrayBase::sinh)
66EIGEN_ARRAY_DECLARE_GLOBAL_UNARY(cosh, scalar_cosh_op, hyperbolic cosine,\sa
ArrayBase::cosh)
67EIGEN_ARRAY_DECLARE_GLOBAL_UNARY(tanh, scalar_tanh_op, hyperbolic tangent,\sa
ArrayBase::tanh)
68EIGEN_ARRAY_DECLARE_GLOBAL_UNARY(asinh, scalar_asinh_op, inverse hyperbolic sine,\sa
ArrayBase::asinh)
69EIGEN_ARRAY_DECLARE_GLOBAL_UNARY(acosh, scalar_acosh_op, inverse hyperbolic cosine,\sa
ArrayBase::acosh)
70EIGEN_ARRAY_DECLARE_GLOBAL_UNARY(atanh, scalar_atanh_op, inverse hyperbolic tangent,\sa
ArrayBase::atanh)
71EIGEN_ARRAY_DECLARE_GLOBAL_UNARY(logistic, scalar_logistic_op, logistic function,\sa
ArrayBase::logistic)
72EIGEN_ARRAY_DECLARE_GLOBAL_UNARY(lgamma, scalar_lgamma_op,
73 natural logarithm of the gamma function,\sa
ArrayBase::lgamma)
74EIGEN_ARRAY_DECLARE_GLOBAL_UNARY(digamma, scalar_digamma_op, derivative of lgamma,\sa
ArrayBase::digamma)
75EIGEN_ARRAY_DECLARE_GLOBAL_UNARY(erf, scalar_erf_op, error function,\sa
ArrayBase::erf)
76EIGEN_ARRAY_DECLARE_GLOBAL_UNARY(erfc, scalar_erfc_op, complement error function,\sa
ArrayBase::erfc)
77EIGEN_ARRAY_DECLARE_GLOBAL_UNARY(ndtri, scalar_ndtri_op, inverse normal distribution function,\sa
ArrayBase::ndtri)
78EIGEN_ARRAY_DECLARE_GLOBAL_UNARY(exp, scalar_exp_op, exponential,\sa
ArrayBase::exp)
79EIGEN_ARRAY_DECLARE_GLOBAL_UNARY(expm1, scalar_expm1_op, exponential of a value minus 1,\sa
ArrayBase::expm1)
80EIGEN_ARRAY_DECLARE_GLOBAL_UNARY(log, scalar_log_op, natural logarithm,\sa
Eigen::log10 DOXCOMMA
ArrayBase::log)
81EIGEN_ARRAY_DECLARE_GLOBAL_UNARY(log1p, scalar_log1p_op, natural logarithm of 1 plus the value,\sa
ArrayBase::log1p)
82EIGEN_ARRAY_DECLARE_GLOBAL_UNARY(log10, scalar_log10_op, base 10 logarithm,\sa
Eigen::log DOXCOMMA
ArrayBase::log10)
83EIGEN_ARRAY_DECLARE_GLOBAL_UNARY(log2, scalar_log2_op, base 2 logarithm,\sa
Eigen::log DOXCOMMA
ArrayBase::log2)
84EIGEN_ARRAY_DECLARE_GLOBAL_UNARY(abs, scalar_abs_op, absolute value,\sa
ArrayBase::abs DOXCOMMA
MatrixBase::cwiseAbs)
85EIGEN_ARRAY_DECLARE_GLOBAL_UNARY(abs2, scalar_abs2_op,
87EIGEN_ARRAY_DECLARE_GLOBAL_UNARY(arg, scalar_arg_op, complex argument,\sa
ArrayBase::arg DOXCOMMA
MatrixBase::cwiseArg)
88EIGEN_ARRAY_DECLARE_GLOBAL_UNARY(carg, scalar_carg_op,
90EIGEN_ARRAY_DECLARE_GLOBAL_UNARY(sqrt, scalar_sqrt_op, square root,\sa
ArrayBase::sqrt DOXCOMMA
MatrixBase::cwiseSqrt)
91EIGEN_ARRAY_DECLARE_GLOBAL_UNARY(cbrt, scalar_cbrt_op, cube root,\sa
ArrayBase::cbrt DOXCOMMA
MatrixBase::cwiseCbrt)
92EIGEN_ARRAY_DECLARE_GLOBAL_UNARY(rsqrt, scalar_rsqrt_op, reciprocal square root,\sa
ArrayBase::rsqrt)
93EIGEN_ARRAY_DECLARE_GLOBAL_UNARY(square, scalar_square_op,
95EIGEN_ARRAY_DECLARE_GLOBAL_UNARY(cube, scalar_cube_op, cube(power 3),\sa
Eigen::pow DOXCOMMA
ArrayBase::cube)
96EIGEN_ARRAY_DECLARE_GLOBAL_UNARY(rint, scalar_rint_op,
98EIGEN_ARRAY_DECLARE_GLOBAL_UNARY(round, scalar_round_op,
100EIGEN_ARRAY_DECLARE_GLOBAL_UNARY(
101 floor, scalar_floor_op, nearest integer not greater than the given value,\sa
Eigen::ceil DOXCOMMA
ArrayBase::floor)
102EIGEN_ARRAY_DECLARE_GLOBAL_UNARY(
103 ceil, scalar_ceil_op, nearest integer not less than the given value,\sa
Eigen::floor DOXCOMMA
ArrayBase::ceil)
104EIGEN_ARRAY_DECLARE_GLOBAL_UNARY(trunc, scalar_trunc_op,
105 nearest integer not greater in magnitude than the given value,\sa
Eigen::trunc DOXCOMMA
107EIGEN_ARRAY_DECLARE_GLOBAL_UNARY(
108 isnan, scalar_isnan_op, not -a - number test,\sa
Eigen::isinf DOXCOMMA
Eigen::isfinite DOXCOMMA
ArrayBase::isnan)
109EIGEN_ARRAY_DECLARE_GLOBAL_UNARY(
110 isinf, scalar_isinf_op, infinite value test,\sa
Eigen::isnan DOXCOMMA
Eigen::isfinite DOXCOMMA
ArrayBase::isinf)
111EIGEN_ARRAY_DECLARE_GLOBAL_UNARY(isfinite, scalar_isfinite_op,
113EIGEN_ARRAY_DECLARE_GLOBAL_UNARY(sign, scalar_sign_op, sign(or 0),\sa
ArrayBase::sign)
115template <typename Derived, typename ScalarExponent>
116using GlobalUnaryPowReturnType = std::enable_if_t<
117 !internal::is_arithmetic<typename
NumTraits<Derived>::Real>::value &&
118 internal::is_arithmetic<typename
NumTraits<ScalarExponent>::Real>::value,
119 CwiseUnaryOp<internal::scalar_unary_pow_op<typename Derived::Scalar, ScalarExponent>, const Derived> >;
130#ifdef EIGEN_PARSED_BY_DOXYGEN
131template <
typename Derived,
typename ScalarExponent>
133 const ScalarExponent& exponent);
135template <
typename Derived,
typename ScalarExponent>
137 const ScalarExponent& exponent) {
138 return GlobalUnaryPowReturnType<Derived, ScalarExponent>(
139 x.
derived(), internal::scalar_unary_pow_op<typename Derived::Scalar, ScalarExponent>(exponent));
154template <
typename Derived,
typename ExponentDerived>
156 Eigen::internal::scalar_pow_op<typename Derived::Scalar, typename ExponentDerived::Scalar>,
const Derived,
157 const ExponentDerived>
160 Eigen::internal::scalar_pow_op<typename Derived::Scalar, typename ExponentDerived::Scalar>,
const Derived,
178#ifdef EIGEN_PARSED_BY_DOXYGEN
179template <
typename Scalar,
typename Derived>
180inline const CwiseBinaryOp<internal::scalar_pow_op<Scalar, Derived::Scalar>, Constant<Scalar>, Derived> pow(
183template <
typename Scalar,
typename Derived>
184EIGEN_DEVICE_FUNC
inline const EIGEN_SCALAR_BINARYOP_EXPR_RETURN_TYPE(
185 typename internal::promote_scalar_arg<
typename Derived::Scalar EIGEN_COMMA Scalar EIGEN_COMMA
186 EIGEN_SCALAR_BINARY_SUPPORTED(pow, Scalar,
187 typename Derived::Scalar)>::type,
190 typename internal::promote_scalar_arg<
typename Derived::Scalar, Scalar,
191 EIGEN_SCALAR_BINARY_SUPPORTED(pow, Scalar,
typename Derived::Scalar)>::type
193 return EIGEN_SCALAR_BINARYOP_EXPR_RETURN_TYPE(PromotedScalar, Derived, pow)(
194 typename internal::plain_constant_type<Derived, PromotedScalar>::type(
195 exponents.
derived().rows(), exponents.
derived().cols(), internal::scalar_constant_op<PromotedScalar>(x)),
208template <
typename LhsDerived,
typename RhsDerived>
209inline const std::enable_if_t<
210 std::is_same<typename LhsDerived::Scalar, typename RhsDerived::Scalar>::value,
212 const LhsDerived,
const RhsDerived> >
215 Eigen::internal::scalar_atan2_op<typename LhsDerived::Scalar, typename RhsDerived::Scalar>,
const LhsDerived,
220EIGEN_ARRAY_DECLARE_GLOBAL_EIGEN_UNARY(
real, scalar_real_op)
221EIGEN_ARRAY_DECLARE_GLOBAL_EIGEN_UNARY(
imag, scalar_imag_op)
222EIGEN_ARRAY_DECLARE_GLOBAL_EIGEN_UNARY(
abs2, scalar_abs2_op)
Base class for all 1D and 2D array, and related expressions.
Definition ArrayBase.h:44
Generic expression where a coefficient-wise binary operator is applied to two expressions.
Definition CwiseBinaryOp.h:79
Generic expression where a coefficient-wise unary operator is applied to an expression.
Definition CwiseUnaryOp.h:53
Derived & derived()
Definition EigenBase.h:49
Base class for all dense matrices, vectors, and expressions.
Definition MatrixBase.h:52
Namespace containing all symbols from the Eigen library.
Definition Core:137
const Eigen::CwiseUnaryOp< Eigen::internal::scalar_real_op< typename Derived::Scalar >, const Derived > real(const Eigen::ArrayBase< Derived > &x)
const Eigen::CwiseUnaryOp< Eigen::internal::scalar_abs2_op< typename Derived::Scalar >, const Derived > abs2(const Eigen::ArrayBase< Derived > &x)
const Eigen::CwiseUnaryOp< Eigen::internal::scalar_imag_op< typename Derived::Scalar >, const Derived > imag(const Eigen::ArrayBase< Derived > &x)
Holds information about the various numeric (i.e. scalar) types allowed by Eigen.
Definition Meta.h:523