xref: /aosp_15_r20/external/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.h (revision bf2c37156dfe67e5dfebd6d394bad8b2ab5804d4)
1 
2 
3 typedef CwiseUnaryOp<internal::scalar_abs_op<Scalar>, const Derived> AbsReturnType;
4 typedef CwiseUnaryOp<internal::scalar_arg_op<Scalar>, const Derived> ArgReturnType;
5 typedef CwiseUnaryOp<internal::scalar_abs2_op<Scalar>, const Derived> Abs2ReturnType;
6 typedef CwiseUnaryOp<internal::scalar_sqrt_op<Scalar>, const Derived> SqrtReturnType;
7 typedef CwiseUnaryOp<internal::scalar_rsqrt_op<Scalar>, const Derived> RsqrtReturnType;
8 typedef CwiseUnaryOp<internal::scalar_sign_op<Scalar>, const Derived> SignReturnType;
9 typedef CwiseUnaryOp<internal::scalar_inverse_op<Scalar>, const Derived> InverseReturnType;
10 typedef CwiseUnaryOp<internal::scalar_boolean_not_op<Scalar>, const Derived> BooleanNotReturnType;
11 
12 typedef CwiseUnaryOp<internal::scalar_exp_op<Scalar>, const Derived> ExpReturnType;
13 typedef CwiseUnaryOp<internal::scalar_expm1_op<Scalar>, const Derived> Expm1ReturnType;
14 typedef CwiseUnaryOp<internal::scalar_log_op<Scalar>, const Derived> LogReturnType;
15 typedef CwiseUnaryOp<internal::scalar_log1p_op<Scalar>, const Derived> Log1pReturnType;
16 typedef CwiseUnaryOp<internal::scalar_log10_op<Scalar>, const Derived> Log10ReturnType;
17 typedef CwiseUnaryOp<internal::scalar_log2_op<Scalar>, const Derived> Log2ReturnType;
18 typedef CwiseUnaryOp<internal::scalar_cos_op<Scalar>, const Derived> CosReturnType;
19 typedef CwiseUnaryOp<internal::scalar_sin_op<Scalar>, const Derived> SinReturnType;
20 typedef CwiseUnaryOp<internal::scalar_tan_op<Scalar>, const Derived> TanReturnType;
21 typedef CwiseUnaryOp<internal::scalar_acos_op<Scalar>, const Derived> AcosReturnType;
22 typedef CwiseUnaryOp<internal::scalar_asin_op<Scalar>, const Derived> AsinReturnType;
23 typedef CwiseUnaryOp<internal::scalar_atan_op<Scalar>, const Derived> AtanReturnType;
24 typedef CwiseUnaryOp<internal::scalar_tanh_op<Scalar>, const Derived> TanhReturnType;
25 typedef CwiseUnaryOp<internal::scalar_logistic_op<Scalar>, const Derived> LogisticReturnType;
26 typedef CwiseUnaryOp<internal::scalar_sinh_op<Scalar>, const Derived> SinhReturnType;
27 #if EIGEN_HAS_CXX11_MATH
28 typedef CwiseUnaryOp<internal::scalar_atanh_op<Scalar>, const Derived> AtanhReturnType;
29 typedef CwiseUnaryOp<internal::scalar_asinh_op<Scalar>, const Derived> AsinhReturnType;
30 typedef CwiseUnaryOp<internal::scalar_acosh_op<Scalar>, const Derived> AcoshReturnType;
31 #endif
32 typedef CwiseUnaryOp<internal::scalar_cosh_op<Scalar>, const Derived> CoshReturnType;
33 typedef CwiseUnaryOp<internal::scalar_square_op<Scalar>, const Derived> SquareReturnType;
34 typedef CwiseUnaryOp<internal::scalar_cube_op<Scalar>, const Derived> CubeReturnType;
35 typedef CwiseUnaryOp<internal::scalar_round_op<Scalar>, const Derived> RoundReturnType;
36 typedef CwiseUnaryOp<internal::scalar_rint_op<Scalar>, const Derived> RintReturnType;
37 typedef CwiseUnaryOp<internal::scalar_floor_op<Scalar>, const Derived> FloorReturnType;
38 typedef CwiseUnaryOp<internal::scalar_ceil_op<Scalar>, const Derived> CeilReturnType;
39 typedef CwiseUnaryOp<internal::scalar_isnan_op<Scalar>, const Derived> IsNaNReturnType;
40 typedef CwiseUnaryOp<internal::scalar_isinf_op<Scalar>, const Derived> IsInfReturnType;
41 typedef CwiseUnaryOp<internal::scalar_isfinite_op<Scalar>, const Derived> IsFiniteReturnType;
42 
43 /** \returns an expression of the coefficient-wise absolute value of \c *this
44   *
45   * Example: \include Cwise_abs.cpp
46   * Output: \verbinclude Cwise_abs.out
47   *
48   * \sa <a href="group__CoeffwiseMathFunctions.html#cwisetable_abs">Math functions</a>, abs2()
49   */
50 EIGEN_DEVICE_FUNC
51 EIGEN_STRONG_INLINE const AbsReturnType
abs()52 abs() const
53 {
54   return AbsReturnType(derived());
55 }
56 
57 /** \returns an expression of the coefficient-wise phase angle of \c *this
58   *
59   * Example: \include Cwise_arg.cpp
60   * Output: \verbinclude Cwise_arg.out
61   *
62   * \sa abs()
63   */
64 EIGEN_DEVICE_FUNC
65 EIGEN_STRONG_INLINE const ArgReturnType
arg()66 arg() const
67 {
68   return ArgReturnType(derived());
69 }
70 
71 /** \returns an expression of the coefficient-wise squared absolute value of \c *this
72   *
73   * Example: \include Cwise_abs2.cpp
74   * Output: \verbinclude Cwise_abs2.out
75   *
76   * \sa <a href="group__CoeffwiseMathFunctions.html#cwisetable_abs2">Math functions</a>, abs(), square()
77   */
78 EIGEN_DEVICE_FUNC
79 EIGEN_STRONG_INLINE const Abs2ReturnType
abs2()80 abs2() const
81 {
82   return Abs2ReturnType(derived());
83 }
84 
85 /** \returns an expression of the coefficient-wise exponential of *this.
86   *
87   * This function computes the coefficient-wise exponential. The function MatrixBase::exp() in the
88   * unsupported module MatrixFunctions computes the matrix exponential.
89   *
90   * Example: \include Cwise_exp.cpp
91   * Output: \verbinclude Cwise_exp.out
92   *
93   * \sa <a href="group__CoeffwiseMathFunctions.html#cwisetable_exp">Math functions</a>, pow(), log(), sin(), cos()
94   */
95 EIGEN_DEVICE_FUNC
96 inline const ExpReturnType
exp()97 exp() const
98 {
99   return ExpReturnType(derived());
100 }
101 
102 /** \returns an expression of the coefficient-wise exponential of *this minus 1.
103   *
104   * In exact arithmetic, \c x.expm1() is equivalent to \c x.exp() - 1,
105   * however, with finite precision, this function is much more accurate when \c x is close to zero.
106   *
107   * \sa <a href="group__CoeffwiseMathFunctions.html#cwisetable_expm1">Math functions</a>, exp()
108   */
109 EIGEN_DEVICE_FUNC
110 inline const Expm1ReturnType
expm1()111 expm1() const
112 {
113   return Expm1ReturnType(derived());
114 }
115 
116 /** \returns an expression of the coefficient-wise logarithm of *this.
117   *
118   * This function computes the coefficient-wise logarithm. The function MatrixBase::log() in the
119   * unsupported module MatrixFunctions computes the matrix logarithm.
120   *
121   * Example: \include Cwise_log.cpp
122   * Output: \verbinclude Cwise_log.out
123   *
124   * \sa <a href="group__CoeffwiseMathFunctions.html#cwisetable_log">Math functions</a>, log()
125   */
126 EIGEN_DEVICE_FUNC
127 inline const LogReturnType
log()128 log() const
129 {
130   return LogReturnType(derived());
131 }
132 
133 /** \returns an expression of the coefficient-wise logarithm of 1 plus \c *this.
134   *
135   * In exact arithmetic, \c x.log() is equivalent to \c (x+1).log(),
136   * however, with finite precision, this function is much more accurate when \c x is close to zero.
137   *
138   * \sa <a href="group__CoeffwiseMathFunctions.html#cwisetable_log1p">Math functions</a>, log()
139   */
140 EIGEN_DEVICE_FUNC
141 inline const Log1pReturnType
log1p()142 log1p() const
143 {
144   return Log1pReturnType(derived());
145 }
146 
147 /** \returns an expression of the coefficient-wise base-10 logarithm of *this.
148   *
149   * This function computes the coefficient-wise base-10 logarithm.
150   *
151   * Example: \include Cwise_log10.cpp
152   * Output: \verbinclude Cwise_log10.out
153   *
154   * \sa <a href="group__CoeffwiseMathFunctions.html#cwisetable_log10">Math functions</a>, log()
155   */
156 EIGEN_DEVICE_FUNC
157 inline const Log10ReturnType
log10()158 log10() const
159 {
160   return Log10ReturnType(derived());
161 }
162 
163 /** \returns an expression of the coefficient-wise base-2 logarithm of *this.
164   *
165   * This function computes the coefficient-wise base-2 logarithm.
166   *
167   */
168 EIGEN_DEVICE_FUNC
169 inline const Log2ReturnType
log2()170 log2() const
171 {
172   return Log2ReturnType(derived());
173 }
174 
175 /** \returns an expression of the coefficient-wise square root of *this.
176   *
177   * This function computes the coefficient-wise square root. The function MatrixBase::sqrt() in the
178   * unsupported module MatrixFunctions computes the matrix square root.
179   *
180   * Example: \include Cwise_sqrt.cpp
181   * Output: \verbinclude Cwise_sqrt.out
182   *
183   * \sa <a href="group__CoeffwiseMathFunctions.html#cwisetable_sqrt">Math functions</a>, pow(), square()
184   */
185 EIGEN_DEVICE_FUNC
186 inline const SqrtReturnType
sqrt()187 sqrt() const
188 {
189   return SqrtReturnType(derived());
190 }
191 
192 /** \returns an expression of the coefficient-wise inverse square root of *this.
193   *
194   * This function computes the coefficient-wise inverse square root.
195   *
196   * Example: \include Cwise_sqrt.cpp
197   * Output: \verbinclude Cwise_sqrt.out
198   *
199   * \sa pow(), square()
200   */
201 EIGEN_DEVICE_FUNC
202 inline const RsqrtReturnType
rsqrt()203 rsqrt() const
204 {
205   return RsqrtReturnType(derived());
206 }
207 
208 /** \returns an expression of the coefficient-wise signum of *this.
209   *
210   * This function computes the coefficient-wise signum.
211   *
212   * Example: \include Cwise_sign.cpp
213   * Output: \verbinclude Cwise_sign.out
214   *
215   * \sa pow(), square()
216   */
217 EIGEN_DEVICE_FUNC
218 inline const SignReturnType
sign()219 sign() const
220 {
221   return SignReturnType(derived());
222 }
223 
224 
225 /** \returns an expression of the coefficient-wise cosine of *this.
226   *
227   * This function computes the coefficient-wise cosine. The function MatrixBase::cos() in the
228   * unsupported module MatrixFunctions computes the matrix cosine.
229   *
230   * Example: \include Cwise_cos.cpp
231   * Output: \verbinclude Cwise_cos.out
232   *
233   * \sa <a href="group__CoeffwiseMathFunctions.html#cwisetable_cos">Math functions</a>, sin(), acos()
234   */
235 EIGEN_DEVICE_FUNC
236 inline const CosReturnType
cos()237 cos() const
238 {
239   return CosReturnType(derived());
240 }
241 
242 
243 /** \returns an expression of the coefficient-wise sine of *this.
244   *
245   * This function computes the coefficient-wise sine. The function MatrixBase::sin() in the
246   * unsupported module MatrixFunctions computes the matrix sine.
247   *
248   * Example: \include Cwise_sin.cpp
249   * Output: \verbinclude Cwise_sin.out
250   *
251   * \sa <a href="group__CoeffwiseMathFunctions.html#cwisetable_sin">Math functions</a>, cos(), asin()
252   */
253 EIGEN_DEVICE_FUNC
254 inline const SinReturnType
sin()255 sin() const
256 {
257   return SinReturnType(derived());
258 }
259 
260 /** \returns an expression of the coefficient-wise tan of *this.
261   *
262   * Example: \include Cwise_tan.cpp
263   * Output: \verbinclude Cwise_tan.out
264   *
265   * \sa <a href="group__CoeffwiseMathFunctions.html#cwisetable_tan">Math functions</a>, cos(), sin()
266   */
267 EIGEN_DEVICE_FUNC
268 inline const TanReturnType
tan()269 tan() const
270 {
271   return TanReturnType(derived());
272 }
273 
274 /** \returns an expression of the coefficient-wise arc tan of *this.
275   *
276   * Example: \include Cwise_atan.cpp
277   * Output: \verbinclude Cwise_atan.out
278   *
279   * \sa <a href="group__CoeffwiseMathFunctions.html#cwisetable_atan">Math functions</a>, tan(), asin(), acos()
280   */
281 EIGEN_DEVICE_FUNC
282 inline const AtanReturnType
atan()283 atan() const
284 {
285   return AtanReturnType(derived());
286 }
287 
288 /** \returns an expression of the coefficient-wise arc cosine of *this.
289   *
290   * Example: \include Cwise_acos.cpp
291   * Output: \verbinclude Cwise_acos.out
292   *
293   * \sa <a href="group__CoeffwiseMathFunctions.html#cwisetable_acos">Math functions</a>, cos(), asin()
294   */
295 EIGEN_DEVICE_FUNC
296 inline const AcosReturnType
acos()297 acos() const
298 {
299   return AcosReturnType(derived());
300 }
301 
302 /** \returns an expression of the coefficient-wise arc sine of *this.
303   *
304   * Example: \include Cwise_asin.cpp
305   * Output: \verbinclude Cwise_asin.out
306   *
307   * \sa <a href="group__CoeffwiseMathFunctions.html#cwisetable_asin">Math functions</a>, sin(), acos()
308   */
309 EIGEN_DEVICE_FUNC
310 inline const AsinReturnType
asin()311 asin() const
312 {
313   return AsinReturnType(derived());
314 }
315 
316 /** \returns an expression of the coefficient-wise hyperbolic tan of *this.
317   *
318   * Example: \include Cwise_tanh.cpp
319   * Output: \verbinclude Cwise_tanh.out
320   *
321   * \sa <a href="group__CoeffwiseMathFunctions.html#cwisetable_tanh">Math functions</a>, tan(), sinh(), cosh()
322   */
323 EIGEN_DEVICE_FUNC
324 inline const TanhReturnType
tanh()325 tanh() const
326 {
327   return TanhReturnType(derived());
328 }
329 
330 /** \returns an expression of the coefficient-wise hyperbolic sin of *this.
331   *
332   * Example: \include Cwise_sinh.cpp
333   * Output: \verbinclude Cwise_sinh.out
334   *
335   * \sa <a href="group__CoeffwiseMathFunctions.html#cwisetable_sinh">Math functions</a>, sin(), tanh(), cosh()
336   */
337 EIGEN_DEVICE_FUNC
338 inline const SinhReturnType
sinh()339 sinh() const
340 {
341   return SinhReturnType(derived());
342 }
343 
344 /** \returns an expression of the coefficient-wise hyperbolic cos of *this.
345   *
346   * Example: \include Cwise_cosh.cpp
347   * Output: \verbinclude Cwise_cosh.out
348   *
349   * \sa <a href="group__CoeffwiseMathFunctions.html#cwisetable_cosh">Math functions</a>, tanh(), sinh(), cosh()
350   */
351 EIGEN_DEVICE_FUNC
352 inline const CoshReturnType
cosh()353 cosh() const
354 {
355   return CoshReturnType(derived());
356 }
357 
358 #if EIGEN_HAS_CXX11_MATH
359 /** \returns an expression of the coefficient-wise inverse hyperbolic tan of *this.
360   *
361   * \sa <a href="group__CoeffwiseMathFunctions.html#cwisetable_atanh">Math functions</a>, atanh(), asinh(), acosh()
362   */
363 EIGEN_DEVICE_FUNC
364 inline const AtanhReturnType
atanh()365 atanh() const
366 {
367   return AtanhReturnType(derived());
368 }
369 
370 /** \returns an expression of the coefficient-wise inverse hyperbolic sin of *this.
371   *
372   * \sa <a href="group__CoeffwiseMathFunctions.html#cwisetable_asinh">Math functions</a>, atanh(), asinh(), acosh()
373   */
374 EIGEN_DEVICE_FUNC
375 inline const AsinhReturnType
asinh()376 asinh() const
377 {
378   return AsinhReturnType(derived());
379 }
380 
381 /** \returns an expression of the coefficient-wise inverse hyperbolic cos of *this.
382   *
383   * \sa <a href="group__CoeffwiseMathFunctions.html#cwisetable_acosh">Math functions</a>, atanh(), asinh(), acosh()
384   */
385 EIGEN_DEVICE_FUNC
386 inline const AcoshReturnType
acosh()387 acosh() const
388 {
389   return AcoshReturnType(derived());
390 }
391 #endif
392 
393 /** \returns an expression of the coefficient-wise logistic of *this.
394   */
395 EIGEN_DEVICE_FUNC
396 inline const LogisticReturnType
logistic()397 logistic() const
398 {
399   return LogisticReturnType(derived());
400 }
401 
402 /** \returns an expression of the coefficient-wise inverse of *this.
403   *
404   * Example: \include Cwise_inverse.cpp
405   * Output: \verbinclude Cwise_inverse.out
406   *
407   * \sa operator/(), operator*()
408   */
409 EIGEN_DEVICE_FUNC
410 inline const InverseReturnType
inverse()411 inverse() const
412 {
413   return InverseReturnType(derived());
414 }
415 
416 /** \returns an expression of the coefficient-wise square of *this.
417   *
418   * Example: \include Cwise_square.cpp
419   * Output: \verbinclude Cwise_square.out
420   *
421   * \sa <a href="group__CoeffwiseMathFunctions.html#cwisetable_squareE">Math functions</a>, abs2(), cube(), pow()
422   */
423 EIGEN_DEVICE_FUNC
424 inline const SquareReturnType
square()425 square() const
426 {
427   return SquareReturnType(derived());
428 }
429 
430 /** \returns an expression of the coefficient-wise cube of *this.
431   *
432   * Example: \include Cwise_cube.cpp
433   * Output: \verbinclude Cwise_cube.out
434   *
435   * \sa <a href="group__CoeffwiseMathFunctions.html#cwisetable_cube">Math functions</a>, square(), pow()
436   */
437 EIGEN_DEVICE_FUNC
438 inline const CubeReturnType
cube()439 cube() const
440 {
441   return CubeReturnType(derived());
442 }
443 
444 /** \returns an expression of the coefficient-wise rint of *this.
445   *
446   * Example: \include Cwise_rint.cpp
447   * Output: \verbinclude Cwise_rint.out
448   *
449   * \sa <a href="group__CoeffwiseMathFunctions.html#cwisetable_rint">Math functions</a>, ceil(), floor()
450   */
451 EIGEN_DEVICE_FUNC
452 inline const RintReturnType
rint()453 rint() const
454 {
455   return RintReturnType(derived());
456 }
457 
458 /** \returns an expression of the coefficient-wise round of *this.
459   *
460   * Example: \include Cwise_round.cpp
461   * Output: \verbinclude Cwise_round.out
462   *
463   * \sa <a href="group__CoeffwiseMathFunctions.html#cwisetable_round">Math functions</a>, ceil(), floor()
464   */
465 EIGEN_DEVICE_FUNC
466 inline const RoundReturnType
round()467 round() const
468 {
469   return RoundReturnType(derived());
470 }
471 
472 /** \returns an expression of the coefficient-wise floor of *this.
473   *
474   * Example: \include Cwise_floor.cpp
475   * Output: \verbinclude Cwise_floor.out
476   *
477   * \sa <a href="group__CoeffwiseMathFunctions.html#cwisetable_floor">Math functions</a>, ceil(), round()
478   */
479 EIGEN_DEVICE_FUNC
480 inline const FloorReturnType
floor()481 floor() const
482 {
483   return FloorReturnType(derived());
484 }
485 
486 /** \returns an expression of the coefficient-wise ceil of *this.
487   *
488   * Example: \include Cwise_ceil.cpp
489   * Output: \verbinclude Cwise_ceil.out
490   *
491   * \sa <a href="group__CoeffwiseMathFunctions.html#cwisetable_ceil">Math functions</a>, floor(), round()
492   */
493 EIGEN_DEVICE_FUNC
494 inline const CeilReturnType
ceil()495 ceil() const
496 {
497   return CeilReturnType(derived());
498 }
499 
500 template<int N> struct ShiftRightXpr {
501   typedef CwiseUnaryOp<internal::scalar_shift_right_op<Scalar, N>, const Derived> Type;
502 };
503 
504 /** \returns an expression of \c *this with the \a Scalar type arithmetically
505   * shifted right by \a N bit positions.
506   *
507   * The template parameter \a N specifies the number of bit positions to shift.
508   *
509   * \sa shiftLeft()
510   */
511 template<int N>
512 EIGEN_DEVICE_FUNC
513 typename ShiftRightXpr<N>::Type
shiftRight()514 shiftRight() const
515 {
516   return typename ShiftRightXpr<N>::Type(derived());
517 }
518 
519 
520 template<int N> struct ShiftLeftXpr {
521   typedef CwiseUnaryOp<internal::scalar_shift_left_op<Scalar, N>, const Derived> Type;
522 };
523 
524 /** \returns an expression of \c *this with the \a Scalar type logically
525   * shifted left by \a N bit positions.
526   *
527   * The template parameter \a N specifies the number of bit positions to shift.
528   *
529   * \sa shiftRight()
530   */
531 template<int N>
532 EIGEN_DEVICE_FUNC
533 typename ShiftLeftXpr<N>::Type
shiftLeft()534 shiftLeft() const
535 {
536   return typename ShiftLeftXpr<N>::Type(derived());
537 }
538 
539 /** \returns an expression of the coefficient-wise isnan of *this.
540   *
541   * Example: \include Cwise_isNaN.cpp
542   * Output: \verbinclude Cwise_isNaN.out
543   *
544   * \sa isfinite(), isinf()
545   */
546 EIGEN_DEVICE_FUNC
547 inline const IsNaNReturnType
isNaN()548 isNaN() const
549 {
550   return IsNaNReturnType(derived());
551 }
552 
553 /** \returns an expression of the coefficient-wise isinf of *this.
554   *
555   * Example: \include Cwise_isInf.cpp
556   * Output: \verbinclude Cwise_isInf.out
557   *
558   * \sa isnan(), isfinite()
559   */
560 EIGEN_DEVICE_FUNC
561 inline const IsInfReturnType
isInf()562 isInf() const
563 {
564   return IsInfReturnType(derived());
565 }
566 
567 /** \returns an expression of the coefficient-wise isfinite of *this.
568   *
569   * Example: \include Cwise_isFinite.cpp
570   * Output: \verbinclude Cwise_isFinite.out
571   *
572   * \sa isnan(), isinf()
573   */
574 EIGEN_DEVICE_FUNC
575 inline const IsFiniteReturnType
isFinite()576 isFinite() const
577 {
578   return IsFiniteReturnType(derived());
579 }
580 
581 /** \returns an expression of the coefficient-wise ! operator of *this
582   *
583   * \warning this operator is for expression of bool only.
584   *
585   * Example: \include Cwise_boolean_not.cpp
586   * Output: \verbinclude Cwise_boolean_not.out
587   *
588   * \sa operator!=()
589   */
590 EIGEN_DEVICE_FUNC
591 inline const BooleanNotReturnType
592 operator!() const
593 {
594   EIGEN_STATIC_ASSERT((internal::is_same<bool,Scalar>::value),
595                       THIS_METHOD_IS_ONLY_FOR_EXPRESSIONS_OF_BOOL);
596   return BooleanNotReturnType(derived());
597 }
598 
599 
600 // --- SpecialFunctions module ---
601 
602 typedef CwiseUnaryOp<internal::scalar_lgamma_op<Scalar>, const Derived> LgammaReturnType;
603 typedef CwiseUnaryOp<internal::scalar_digamma_op<Scalar>, const Derived> DigammaReturnType;
604 typedef CwiseUnaryOp<internal::scalar_erf_op<Scalar>, const Derived> ErfReturnType;
605 typedef CwiseUnaryOp<internal::scalar_erfc_op<Scalar>, const Derived> ErfcReturnType;
606 typedef CwiseUnaryOp<internal::scalar_ndtri_op<Scalar>, const Derived> NdtriReturnType;
607 
608 /** \cpp11 \returns an expression of the coefficient-wise ln(|gamma(*this)|).
609   *
610   * \specialfunctions_module
611   *
612   * \note This function supports only float and double scalar types in c++11 mode. To support other scalar types,
613   * or float/double in non c++11 mode, the user has to provide implementations of lgamma(T) for any scalar
614   * type T to be supported.
615   *
616   * \sa <a href="group__CoeffwiseMathFunctions.html#cwisetable_lgamma">Math functions</a>, digamma()
617   */
618 EIGEN_DEVICE_FUNC
619 inline const LgammaReturnType
lgamma()620 lgamma() const
621 {
622   return LgammaReturnType(derived());
623 }
624 
625 /** \returns an expression of the coefficient-wise digamma (psi, derivative of lgamma).
626   *
627   * \specialfunctions_module
628   *
629   * \note This function supports only float and double scalar types. To support other scalar types,
630   * the user has to provide implementations of digamma(T) for any scalar
631   * type T to be supported.
632   *
633   * \sa <a href="group__CoeffwiseMathFunctions.html#cwisetable_digamma">Math functions</a>, Eigen::digamma(), Eigen::polygamma(), lgamma()
634   */
635 EIGEN_DEVICE_FUNC
636 inline const DigammaReturnType
digamma()637 digamma() const
638 {
639   return DigammaReturnType(derived());
640 }
641 
642 /** \cpp11 \returns an expression of the coefficient-wise Gauss error
643   * function of *this.
644   *
645   * \specialfunctions_module
646   *
647   * \note This function supports only float and double scalar types in c++11 mode. To support other scalar types,
648   * or float/double in non c++11 mode, the user has to provide implementations of erf(T) for any scalar
649   * type T to be supported.
650   *
651   * \sa <a href="group__CoeffwiseMathFunctions.html#cwisetable_erf">Math functions</a>, erfc()
652   */
653 EIGEN_DEVICE_FUNC
654 inline const ErfReturnType
erf()655 erf() const
656 {
657   return ErfReturnType(derived());
658 }
659 
660 /** \cpp11 \returns an expression of the coefficient-wise Complementary error
661   * function of *this.
662   *
663   * \specialfunctions_module
664   *
665   * \note This function supports only float and double scalar types in c++11 mode. To support other scalar types,
666   * or float/double in non c++11 mode, the user has to provide implementations of erfc(T) for any scalar
667   * type T to be supported.
668   *
669   * \sa <a href="group__CoeffwiseMathFunctions.html#cwisetable_erfc">Math functions</a>, erf()
670   */
671 EIGEN_DEVICE_FUNC
672 inline const ErfcReturnType
erfc()673 erfc() const
674 {
675   return ErfcReturnType(derived());
676 }
677 
678 /** \returns an expression of the coefficient-wise inverse of the CDF of the Normal distribution function
679   * function of *this.
680   *
681   * \specialfunctions_module
682   *
683   * In other words, considering `x = ndtri(y)`, it returns the argument, x, for which the area under the
684   * Gaussian probability density function (integrated from minus infinity to x) is equal to y.
685   *
686   * \note This function supports only float and double scalar types. To support other scalar types,
687   * the user has to provide implementations of ndtri(T) for any scalar type T to be supported.
688   *
689   * \sa <a href="group__CoeffwiseMathFunctions.html#cwisetable_ndtri">Math functions</a>
690   */
691 EIGEN_DEVICE_FUNC
692 inline const NdtriReturnType
ndtri()693 ndtri() const
694 {
695   return NdtriReturnType(derived());
696 }
697