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_log_op<Scalar>, const Derived> LogReturnType; 14 typedef CwiseUnaryOp<internal::scalar_log1p_op<Scalar>, const Derived> Log1pReturnType; 15 typedef CwiseUnaryOp<internal::scalar_log10_op<Scalar>, const Derived> Log10ReturnType; 16 typedef CwiseUnaryOp<internal::scalar_cos_op<Scalar>, const Derived> CosReturnType; 17 typedef CwiseUnaryOp<internal::scalar_sin_op<Scalar>, const Derived> SinReturnType; 18 typedef CwiseUnaryOp<internal::scalar_tan_op<Scalar>, const Derived> TanReturnType; 19 typedef CwiseUnaryOp<internal::scalar_acos_op<Scalar>, const Derived> AcosReturnType; 20 typedef CwiseUnaryOp<internal::scalar_asin_op<Scalar>, const Derived> AsinReturnType; 21 typedef CwiseUnaryOp<internal::scalar_atan_op<Scalar>, const Derived> AtanReturnType; 22 typedef CwiseUnaryOp<internal::scalar_tanh_op<Scalar>, const Derived> TanhReturnType; 23 typedef CwiseUnaryOp<internal::scalar_sinh_op<Scalar>, const Derived> SinhReturnType; 24 typedef CwiseUnaryOp<internal::scalar_cosh_op<Scalar>, const Derived> CoshReturnType; 25 typedef CwiseUnaryOp<internal::scalar_square_op<Scalar>, const Derived> SquareReturnType; 26 typedef CwiseUnaryOp<internal::scalar_cube_op<Scalar>, const Derived> CubeReturnType; 27 typedef CwiseUnaryOp<internal::scalar_round_op<Scalar>, const Derived> RoundReturnType; 28 typedef CwiseUnaryOp<internal::scalar_floor_op<Scalar>, const Derived> FloorReturnType; 29 typedef CwiseUnaryOp<internal::scalar_ceil_op<Scalar>, const Derived> CeilReturnType; 30 typedef CwiseUnaryOp<internal::scalar_isnan_op<Scalar>, const Derived> IsNaNReturnType; 31 typedef CwiseUnaryOp<internal::scalar_isinf_op<Scalar>, const Derived> IsInfReturnType; 32 typedef CwiseUnaryOp<internal::scalar_isfinite_op<Scalar>, const Derived> IsFiniteReturnType; 33 34 /** \returns an expression of the coefficient-wise absolute value of \c *this 35 * 36 * Example: \include Cwise_abs.cpp 37 * Output: \verbinclude Cwise_abs.out 38 * 39 * \sa <a href="group__CoeffwiseMathFunctions.html#cwisetable_abs">Math functions</a>, abs2() 40 */ 41 EIGEN_DEVICE_FUNC 42 EIGEN_STRONG_INLINE const AbsReturnType 43 abs() const 44 { 45 return AbsReturnType(derived()); 46 } 47 48 /** \returns an expression of the coefficient-wise phase angle of \c *this 49 * 50 * Example: \include Cwise_arg.cpp 51 * Output: \verbinclude Cwise_arg.out 52 * 53 * \sa abs() 54 */ 55 EIGEN_DEVICE_FUNC 56 EIGEN_STRONG_INLINE const ArgReturnType 57 arg() const 58 { 59 return ArgReturnType(derived()); 60 } 61 62 /** \returns an expression of the coefficient-wise squared absolute value of \c *this 63 * 64 * Example: \include Cwise_abs2.cpp 65 * Output: \verbinclude Cwise_abs2.out 66 * 67 * \sa <a href="group__CoeffwiseMathFunctions.html#cwisetable_abs2">Math functions</a>, abs(), square() 68 */ 69 EIGEN_DEVICE_FUNC 70 EIGEN_STRONG_INLINE const Abs2ReturnType 71 abs2() const 72 { 73 return Abs2ReturnType(derived()); 74 } 75 76 /** \returns an expression of the coefficient-wise exponential of *this. 77 * 78 * This function computes the coefficient-wise exponential. The function MatrixBase::exp() in the 79 * unsupported module MatrixFunctions computes the matrix exponential. 80 * 81 * Example: \include Cwise_exp.cpp 82 * Output: \verbinclude Cwise_exp.out 83 * 84 * \sa <a href="group__CoeffwiseMathFunctions.html#cwisetable_exp">Math functions</a>, pow(), log(), sin(), cos() 85 */ 86 EIGEN_DEVICE_FUNC 87 inline const ExpReturnType 88 exp() const 89 { 90 return ExpReturnType(derived()); 91 } 92 93 /** \returns an expression of the coefficient-wise logarithm of *this. 94 * 95 * This function computes the coefficient-wise logarithm. The function MatrixBase::log() in the 96 * unsupported module MatrixFunctions computes the matrix logarithm. 97 * 98 * Example: \include Cwise_log.cpp 99 * Output: \verbinclude Cwise_log.out 100 * 101 * \sa <a href="group__CoeffwiseMathFunctions.html#cwisetable_log">Math functions</a>, exp() 102 */ 103 EIGEN_DEVICE_FUNC 104 inline const LogReturnType 105 log() const 106 { 107 return LogReturnType(derived()); 108 } 109 110 /** \returns an expression of the coefficient-wise logarithm of 1 plus \c *this. 111 * 112 * In exact arithmetic, \c x.log() is equivalent to \c (x+1).log(), 113 * however, with finite precision, this function is much more accurate when \c x is close to zero. 114 * 115 * \sa <a href="group__CoeffwiseMathFunctions.html#cwisetable_log1p">Math functions</a>, log() 116 */ 117 EIGEN_DEVICE_FUNC 118 inline const Log1pReturnType 119 log1p() const 120 { 121 return Log1pReturnType(derived()); 122 } 123 124 /** \returns an expression of the coefficient-wise base-10 logarithm of *this. 125 * 126 * This function computes the coefficient-wise base-10 logarithm. 127 * 128 * Example: \include Cwise_log10.cpp 129 * Output: \verbinclude Cwise_log10.out 130 * 131 * \sa <a href="group__CoeffwiseMathFunctions.html#cwisetable_log10">Math functions</a>, log() 132 */ 133 EIGEN_DEVICE_FUNC 134 inline const Log10ReturnType 135 log10() const 136 { 137 return Log10ReturnType(derived()); 138 } 139 140 /** \returns an expression of the coefficient-wise square root of *this. 141 * 142 * This function computes the coefficient-wise square root. The function MatrixBase::sqrt() in the 143 * unsupported module MatrixFunctions computes the matrix square root. 144 * 145 * Example: \include Cwise_sqrt.cpp 146 * Output: \verbinclude Cwise_sqrt.out 147 * 148 * \sa <a href="group__CoeffwiseMathFunctions.html#cwisetable_sqrt">Math functions</a>, pow(), square() 149 */ 150 EIGEN_DEVICE_FUNC 151 inline const SqrtReturnType 152 sqrt() const 153 { 154 return SqrtReturnType(derived()); 155 } 156 157 /** \returns an expression of the coefficient-wise inverse square root of *this. 158 * 159 * This function computes the coefficient-wise inverse square root. 160 * 161 * Example: \include Cwise_sqrt.cpp 162 * Output: \verbinclude Cwise_sqrt.out 163 * 164 * \sa pow(), square() 165 */ 166 EIGEN_DEVICE_FUNC 167 inline const RsqrtReturnType 168 rsqrt() const 169 { 170 return RsqrtReturnType(derived()); 171 } 172 173 /** \returns an expression of the coefficient-wise signum of *this. 174 * 175 * This function computes the coefficient-wise signum. 176 * 177 * Example: \include Cwise_sign.cpp 178 * Output: \verbinclude Cwise_sign.out 179 * 180 * \sa pow(), square() 181 */ 182 EIGEN_DEVICE_FUNC 183 inline const SignReturnType 184 sign() const 185 { 186 return SignReturnType(derived()); 187 } 188 189 190 /** \returns an expression of the coefficient-wise cosine of *this. 191 * 192 * This function computes the coefficient-wise cosine. The function MatrixBase::cos() in the 193 * unsupported module MatrixFunctions computes the matrix cosine. 194 * 195 * Example: \include Cwise_cos.cpp 196 * Output: \verbinclude Cwise_cos.out 197 * 198 * \sa <a href="group__CoeffwiseMathFunctions.html#cwisetable_cos">Math functions</a>, sin(), acos() 199 */ 200 EIGEN_DEVICE_FUNC 201 inline const CosReturnType 202 cos() const 203 { 204 return CosReturnType(derived()); 205 } 206 207 208 /** \returns an expression of the coefficient-wise sine of *this. 209 * 210 * This function computes the coefficient-wise sine. The function MatrixBase::sin() in the 211 * unsupported module MatrixFunctions computes the matrix sine. 212 * 213 * Example: \include Cwise_sin.cpp 214 * Output: \verbinclude Cwise_sin.out 215 * 216 * \sa <a href="group__CoeffwiseMathFunctions.html#cwisetable_sin">Math functions</a>, cos(), asin() 217 */ 218 EIGEN_DEVICE_FUNC 219 inline const SinReturnType 220 sin() const 221 { 222 return SinReturnType(derived()); 223 } 224 225 /** \returns an expression of the coefficient-wise tan of *this. 226 * 227 * Example: \include Cwise_tan.cpp 228 * Output: \verbinclude Cwise_tan.out 229 * 230 * \sa <a href="group__CoeffwiseMathFunctions.html#cwisetable_tan">Math functions</a>, cos(), sin() 231 */ 232 EIGEN_DEVICE_FUNC 233 inline const TanReturnType 234 tan() const 235 { 236 return TanReturnType(derived()); 237 } 238 239 /** \returns an expression of the coefficient-wise arc tan of *this. 240 * 241 * Example: \include Cwise_atan.cpp 242 * Output: \verbinclude Cwise_atan.out 243 * 244 * \sa <a href="group__CoeffwiseMathFunctions.html#cwisetable_atan">Math functions</a>, tan(), asin(), acos() 245 */ 246 EIGEN_DEVICE_FUNC 247 inline const AtanReturnType 248 atan() const 249 { 250 return AtanReturnType(derived()); 251 } 252 253 /** \returns an expression of the coefficient-wise arc cosine of *this. 254 * 255 * Example: \include Cwise_acos.cpp 256 * Output: \verbinclude Cwise_acos.out 257 * 258 * \sa <a href="group__CoeffwiseMathFunctions.html#cwisetable_acos">Math functions</a>, cos(), asin() 259 */ 260 EIGEN_DEVICE_FUNC 261 inline const AcosReturnType 262 acos() const 263 { 264 return AcosReturnType(derived()); 265 } 266 267 /** \returns an expression of the coefficient-wise arc sine of *this. 268 * 269 * Example: \include Cwise_asin.cpp 270 * Output: \verbinclude Cwise_asin.out 271 * 272 * \sa <a href="group__CoeffwiseMathFunctions.html#cwisetable_asin">Math functions</a>, sin(), acos() 273 */ 274 EIGEN_DEVICE_FUNC 275 inline const AsinReturnType 276 asin() const 277 { 278 return AsinReturnType(derived()); 279 } 280 281 /** \returns an expression of the coefficient-wise hyperbolic tan of *this. 282 * 283 * Example: \include Cwise_tanh.cpp 284 * Output: \verbinclude Cwise_tanh.out 285 * 286 * \sa <a href="group__CoeffwiseMathFunctions.html#cwisetable_tanh">Math functions</a>, tan(), sinh(), cosh() 287 */ 288 EIGEN_DEVICE_FUNC 289 inline const TanhReturnType 290 tanh() const 291 { 292 return TanhReturnType(derived()); 293 } 294 295 /** \returns an expression of the coefficient-wise hyperbolic sin of *this. 296 * 297 * Example: \include Cwise_sinh.cpp 298 * Output: \verbinclude Cwise_sinh.out 299 * 300 * \sa <a href="group__CoeffwiseMathFunctions.html#cwisetable_sinh">Math functions</a>, sin(), tanh(), cosh() 301 */ 302 EIGEN_DEVICE_FUNC 303 inline const SinhReturnType 304 sinh() const 305 { 306 return SinhReturnType(derived()); 307 } 308 309 /** \returns an expression of the coefficient-wise hyperbolic cos of *this. 310 * 311 * Example: \include Cwise_cosh.cpp 312 * Output: \verbinclude Cwise_cosh.out 313 * 314 * \sa <a href="group__CoeffwiseMathFunctions.html#cwisetable_cosh">Math functions</a>, tan(), sinh(), cosh() 315 */ 316 EIGEN_DEVICE_FUNC 317 inline const CoshReturnType 318 cosh() const 319 { 320 return CoshReturnType(derived()); 321 } 322 323 /** \returns an expression of the coefficient-wise inverse of *this. 324 * 325 * Example: \include Cwise_inverse.cpp 326 * Output: \verbinclude Cwise_inverse.out 327 * 328 * \sa operator/(), operator*() 329 */ 330 EIGEN_DEVICE_FUNC 331 inline const InverseReturnType 332 inverse() const 333 { 334 return InverseReturnType(derived()); 335 } 336 337 /** \returns an expression of the coefficient-wise square of *this. 338 * 339 * Example: \include Cwise_square.cpp 340 * Output: \verbinclude Cwise_square.out 341 * 342 * \sa <a href="group__CoeffwiseMathFunctions.html#cwisetable_squareE">Math functions</a>, abs2(), cube(), pow() 343 */ 344 EIGEN_DEVICE_FUNC 345 inline const SquareReturnType 346 square() const 347 { 348 return SquareReturnType(derived()); 349 } 350 351 /** \returns an expression of the coefficient-wise cube of *this. 352 * 353 * Example: \include Cwise_cube.cpp 354 * Output: \verbinclude Cwise_cube.out 355 * 356 * \sa <a href="group__CoeffwiseMathFunctions.html#cwisetable_cube">Math functions</a>, square(), pow() 357 */ 358 EIGEN_DEVICE_FUNC 359 inline const CubeReturnType 360 cube() const 361 { 362 return CubeReturnType(derived()); 363 } 364 365 /** \returns an expression of the coefficient-wise round of *this. 366 * 367 * Example: \include Cwise_round.cpp 368 * Output: \verbinclude Cwise_round.out 369 * 370 * \sa <a href="group__CoeffwiseMathFunctions.html#cwisetable_round">Math functions</a>, ceil(), floor() 371 */ 372 EIGEN_DEVICE_FUNC 373 inline const RoundReturnType 374 round() const 375 { 376 return RoundReturnType(derived()); 377 } 378 379 /** \returns an expression of the coefficient-wise floor of *this. 380 * 381 * Example: \include Cwise_floor.cpp 382 * Output: \verbinclude Cwise_floor.out 383 * 384 * \sa <a href="group__CoeffwiseMathFunctions.html#cwisetable_floor">Math functions</a>, ceil(), round() 385 */ 386 EIGEN_DEVICE_FUNC 387 inline const FloorReturnType 388 floor() const 389 { 390 return FloorReturnType(derived()); 391 } 392 393 /** \returns an expression of the coefficient-wise ceil of *this. 394 * 395 * Example: \include Cwise_ceil.cpp 396 * Output: \verbinclude Cwise_ceil.out 397 * 398 * \sa <a href="group__CoeffwiseMathFunctions.html#cwisetable_ceil">Math functions</a>, floor(), round() 399 */ 400 EIGEN_DEVICE_FUNC 401 inline const CeilReturnType 402 ceil() const 403 { 404 return CeilReturnType(derived()); 405 } 406 407 /** \returns an expression of the coefficient-wise isnan of *this. 408 * 409 * Example: \include Cwise_isNaN.cpp 410 * Output: \verbinclude Cwise_isNaN.out 411 * 412 * \sa isfinite(), isinf() 413 */ 414 EIGEN_DEVICE_FUNC 415 inline const IsNaNReturnType 416 isNaN() const 417 { 418 return IsNaNReturnType(derived()); 419 } 420 421 /** \returns an expression of the coefficient-wise isinf of *this. 422 * 423 * Example: \include Cwise_isInf.cpp 424 * Output: \verbinclude Cwise_isInf.out 425 * 426 * \sa isnan(), isfinite() 427 */ 428 EIGEN_DEVICE_FUNC 429 inline const IsInfReturnType 430 isInf() const 431 { 432 return IsInfReturnType(derived()); 433 } 434 435 /** \returns an expression of the coefficient-wise isfinite of *this. 436 * 437 * Example: \include Cwise_isFinite.cpp 438 * Output: \verbinclude Cwise_isFinite.out 439 * 440 * \sa isnan(), isinf() 441 */ 442 EIGEN_DEVICE_FUNC 443 inline const IsFiniteReturnType 444 isFinite() const 445 { 446 return IsFiniteReturnType(derived()); 447 } 448 449 /** \returns an expression of the coefficient-wise ! operator of *this 450 * 451 * \warning this operator is for expression of bool only. 452 * 453 * Example: \include Cwise_boolean_not.cpp 454 * Output: \verbinclude Cwise_boolean_not.out 455 * 456 * \sa operator!=() 457 */ 458 EIGEN_DEVICE_FUNC 459 inline const BooleanNotReturnType 460 operator!() const 461 { 462 EIGEN_STATIC_ASSERT((internal::is_same<bool,Scalar>::value), 463 THIS_METHOD_IS_ONLY_FOR_EXPRESSIONS_OF_BOOL); 464 return BooleanNotReturnType(derived()); 465 } 466 467 468 // --- SpecialFunctions module --- 469 470 typedef CwiseUnaryOp<internal::scalar_lgamma_op<Scalar>, const Derived> LgammaReturnType; 471 typedef CwiseUnaryOp<internal::scalar_digamma_op<Scalar>, const Derived> DigammaReturnType; 472 typedef CwiseUnaryOp<internal::scalar_erf_op<Scalar>, const Derived> ErfReturnType; 473 typedef CwiseUnaryOp<internal::scalar_erfc_op<Scalar>, const Derived> ErfcReturnType; 474 475 /** \cpp11 \returns an expression of the coefficient-wise ln(|gamma(*this)|). 476 * 477 * \specialfunctions_module 478 * 479 * Example: \include Cwise_lgamma.cpp 480 * Output: \verbinclude Cwise_lgamma.out 481 * 482 * \note This function supports only float and double scalar types in c++11 mode. To support other scalar types, 483 * or float/double in non c++11 mode, the user has to provide implementations of lgamma(T) for any scalar 484 * type T to be supported. 485 * 486 * \sa <a href="group__CoeffwiseMathFunctions.html#cwisetable_lgamma">Math functions</a>, digamma() 487 */ 488 EIGEN_DEVICE_FUNC 489 inline const LgammaReturnType 490 lgamma() const 491 { 492 return LgammaReturnType(derived()); 493 } 494 495 /** \returns an expression of the coefficient-wise digamma (psi, derivative of lgamma). 496 * 497 * \specialfunctions_module 498 * 499 * \note This function supports only float and double scalar types. To support other scalar types, 500 * the user has to provide implementations of digamma(T) for any scalar 501 * type T to be supported. 502 * 503 * \sa <a href="group__CoeffwiseMathFunctions.html#cwisetable_digamma">Math functions</a>, Eigen::digamma(), Eigen::polygamma(), lgamma() 504 */ 505 EIGEN_DEVICE_FUNC 506 inline const DigammaReturnType 507 digamma() const 508 { 509 return DigammaReturnType(derived()); 510 } 511 512 /** \cpp11 \returns an expression of the coefficient-wise Gauss error 513 * function of *this. 514 * 515 * \specialfunctions_module 516 * 517 * Example: \include Cwise_erf.cpp 518 * Output: \verbinclude Cwise_erf.out 519 * 520 * \note This function supports only float and double scalar types in c++11 mode. To support other scalar types, 521 * or float/double in non c++11 mode, the user has to provide implementations of erf(T) for any scalar 522 * type T to be supported. 523 * 524 * \sa <a href="group__CoeffwiseMathFunctions.html#cwisetable_erf">Math functions</a>, erfc() 525 */ 526 EIGEN_DEVICE_FUNC 527 inline const ErfReturnType 528 erf() const 529 { 530 return ErfReturnType(derived()); 531 } 532 533 /** \cpp11 \returns an expression of the coefficient-wise Complementary error 534 * function of *this. 535 * 536 * \specialfunctions_module 537 * 538 * Example: \include Cwise_erfc.cpp 539 * Output: \verbinclude Cwise_erfc.out 540 * 541 * \note This function supports only float and double scalar types in c++11 mode. To support other scalar types, 542 * or float/double in non c++11 mode, the user has to provide implementations of erfc(T) for any scalar 543 * type T to be supported. 544 * 545 * \sa <a href="group__CoeffwiseMathFunctions.html#cwisetable_erfc">Math functions</a>, erf() 546 */ 547 EIGEN_DEVICE_FUNC 548 inline const ErfcReturnType 549 erfc() const 550 { 551 return ErfcReturnType(derived()); 552 } 553