11 #ifndef EIGEN_SPECIALFUNCTIONS_FUNCTORS_H 12 #define EIGEN_SPECIALFUNCTIONS_FUNCTORS_H 24 template<
typename Scalar>
struct scalar_igamma_op : binary_op_base<Scalar,Scalar>
26 EIGEN_EMPTY_STRUCT_CTOR(scalar_igamma_op)
27 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
const Scalar operator() (
const Scalar& a,
const Scalar& x)
const {
28 using numext::igamma;
return igamma(a, x);
30 template<
typename Packet>
31 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
const Packet packetOp(
const Packet& a,
const Packet& x)
const {
32 return internal::pigamma(a, x);
35 template<
typename Scalar>
36 struct functor_traits<scalar_igamma_op<Scalar> > {
39 Cost = 20 * NumTraits<Scalar>::MulCost + 10 * NumTraits<Scalar>::AddCost,
40 PacketAccess = packet_traits<Scalar>::HasIGamma
50 template<
typename Scalar>
struct scalar_igammac_op : binary_op_base<Scalar,Scalar>
52 EIGEN_EMPTY_STRUCT_CTOR(scalar_igammac_op)
53 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
const Scalar operator() (
const Scalar& a,
const Scalar& x)
const {
54 using numext::igammac;
return igammac(a, x);
56 template<
typename Packet>
57 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
const Packet packetOp(
const Packet& a,
const Packet& x)
const 59 return internal::pigammac(a, x);
62 template<
typename Scalar>
63 struct functor_traits<scalar_igammac_op<Scalar> > {
66 Cost = 20 * NumTraits<Scalar>::MulCost + 10 * NumTraits<Scalar>::AddCost,
67 PacketAccess = packet_traits<Scalar>::HasIGammac
76 template<
typename Scalar>
struct scalar_betainc_op {
77 EIGEN_EMPTY_STRUCT_CTOR(scalar_betainc_op)
78 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
const Scalar operator() (
const Scalar& x,
const Scalar& a,
const Scalar& b)
const {
79 using numext::betainc;
return betainc(x, a, b);
81 template<
typename Packet>
82 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
const Packet packetOp(
const Packet& x,
const Packet& a,
const Packet& b)
const 84 return internal::pbetainc(x, a, b);
87 template<
typename Scalar>
88 struct functor_traits<scalar_betainc_op<Scalar> > {
91 Cost = 400 * NumTraits<Scalar>::MulCost + 400 * NumTraits<Scalar>::AddCost,
92 PacketAccess = packet_traits<Scalar>::HasBetaInc
102 template<
typename Scalar>
struct scalar_lgamma_op {
103 EIGEN_EMPTY_STRUCT_CTOR(scalar_lgamma_op)
104 EIGEN_DEVICE_FUNC
inline const Scalar operator() (
const Scalar& a)
const {
105 using numext::lgamma;
return lgamma(a);
107 typedef typename packet_traits<Scalar>::type Packet;
108 EIGEN_DEVICE_FUNC
inline Packet packetOp(
const Packet& a)
const {
return internal::plgamma(a); }
110 template<
typename Scalar>
111 struct functor_traits<scalar_lgamma_op<Scalar> >
115 Cost = 10 * NumTraits<Scalar>::MulCost + 5 * NumTraits<Scalar>::AddCost,
116 PacketAccess = packet_traits<Scalar>::HasLGamma
124 template<
typename Scalar>
struct scalar_digamma_op {
125 EIGEN_EMPTY_STRUCT_CTOR(scalar_digamma_op)
126 EIGEN_DEVICE_FUNC
inline const Scalar operator() (
const Scalar& a)
const {
127 using numext::digamma;
return digamma(a);
129 typedef typename packet_traits<Scalar>::type Packet;
130 EIGEN_DEVICE_FUNC
inline Packet packetOp(
const Packet& a)
const {
return internal::pdigamma(a); }
132 template<
typename Scalar>
133 struct functor_traits<scalar_digamma_op<Scalar> >
137 Cost = 10 * NumTraits<Scalar>::MulCost + 5 * NumTraits<Scalar>::AddCost,
138 PacketAccess = packet_traits<Scalar>::HasDiGamma
146 template<
typename Scalar>
struct scalar_zeta_op {
147 EIGEN_EMPTY_STRUCT_CTOR(scalar_zeta_op)
148 EIGEN_DEVICE_FUNC
inline const Scalar operator() (
const Scalar& x,
const Scalar& q)
const {
149 using numext::zeta;
return zeta(x, q);
151 typedef typename packet_traits<Scalar>::type Packet;
152 EIGEN_DEVICE_FUNC
inline Packet packetOp(
const Packet& x,
const Packet& q)
const {
return internal::pzeta(x, q); }
154 template<
typename Scalar>
155 struct functor_traits<scalar_zeta_op<Scalar> >
159 Cost = 10 * NumTraits<Scalar>::MulCost + 5 * NumTraits<Scalar>::AddCost,
160 PacketAccess = packet_traits<Scalar>::HasZeta
168 template<
typename Scalar>
struct scalar_polygamma_op {
169 EIGEN_EMPTY_STRUCT_CTOR(scalar_polygamma_op)
170 EIGEN_DEVICE_FUNC
inline const Scalar operator() (
const Scalar& n,
const Scalar& x)
const {
171 using numext::polygamma;
return polygamma(n, x);
173 typedef typename packet_traits<Scalar>::type Packet;
174 EIGEN_DEVICE_FUNC
inline Packet packetOp(
const Packet& n,
const Packet& x)
const {
return internal::ppolygamma(n, x); }
176 template<
typename Scalar>
177 struct functor_traits<scalar_polygamma_op<Scalar> >
181 Cost = 10 * NumTraits<Scalar>::MulCost + 5 * NumTraits<Scalar>::AddCost,
182 PacketAccess = packet_traits<Scalar>::HasPolygamma
191 template<
typename Scalar>
struct scalar_erf_op {
192 EIGEN_EMPTY_STRUCT_CTOR(scalar_erf_op)
193 EIGEN_DEVICE_FUNC
inline const Scalar operator() (
const Scalar& a)
const {
194 using numext::erf;
return erf(a);
196 typedef typename packet_traits<Scalar>::type Packet;
197 EIGEN_DEVICE_FUNC
inline Packet packetOp(
const Packet& a)
const {
return internal::perf(a); }
199 template<
typename Scalar>
200 struct functor_traits<scalar_erf_op<Scalar> >
204 Cost = 10 * NumTraits<Scalar>::MulCost + 5 * NumTraits<Scalar>::AddCost,
205 PacketAccess = packet_traits<Scalar>::HasErf
214 template<
typename Scalar>
struct scalar_erfc_op {
215 EIGEN_EMPTY_STRUCT_CTOR(scalar_erfc_op)
216 EIGEN_DEVICE_FUNC
inline const Scalar operator() (
const Scalar& a)
const {
217 using numext::erfc;
return erfc(a);
219 typedef typename packet_traits<Scalar>::type Packet;
220 EIGEN_DEVICE_FUNC
inline Packet packetOp(
const Packet& a)
const {
return internal::perfc(a); }
222 template<
typename Scalar>
223 struct functor_traits<scalar_erfc_op<Scalar> >
227 Cost = 10 * NumTraits<Scalar>::MulCost + 5 * NumTraits<Scalar>::AddCost,
228 PacketAccess = packet_traits<Scalar>::HasErfc
236 #endif // EIGEN_SPECIALFUNCTIONS_FUNCTORS_H Namespace containing all symbols from the Eigen library.
Definition: AdolcForward:45
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:48
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:28
const TensorCwiseTernaryOp< internal::scalar_betainc_op< typename XDerived::Scalar >, const ADerived, const BDerived, const XDerived > betainc(const ADerived &a, const BDerived &b, const XDerived &x)
Definition: TensorGlobalFunctions.h:24
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:114
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:70