MCPcopy Create free account
hub / github.com/Derious/cuMPC / array_complex

Function array_complex

dependence/eigen-3.4.0/test/array_cwise.cpp:470–585  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

468}
469
470template<typename ArrayType> void array_complex(const ArrayType& m)
471{
472 typedef typename ArrayType::Scalar Scalar;
473 typedef typename NumTraits<Scalar>::Real RealScalar;
474
475 Index rows = m.rows();
476 Index cols = m.cols();
477
478 ArrayType m1 = ArrayType::Random(rows, cols),
479 m2(rows, cols),
480 m4 = m1;
481
482 m4.real() = (m4.real().abs()==RealScalar(0)).select(RealScalar(1),m4.real());
483 m4.imag() = (m4.imag().abs()==RealScalar(0)).select(RealScalar(1),m4.imag());
484
485 Array<RealScalar, -1, -1> m3(rows, cols);
486
487 for (Index i = 0; i < m.rows(); ++i)
488 for (Index j = 0; j < m.cols(); ++j)
489 m2(i,j) = sqrt(m1(i,j));
490
491 // these tests are mostly to check possible compilation issues with free-functions.
492 VERIFY_IS_APPROX(m1.sin(), sin(m1));
493 VERIFY_IS_APPROX(m1.cos(), cos(m1));
494 VERIFY_IS_APPROX(m1.tan(), tan(m1));
495 VERIFY_IS_APPROX(m1.sinh(), sinh(m1));
496 VERIFY_IS_APPROX(m1.cosh(), cosh(m1));
497 VERIFY_IS_APPROX(m1.tanh(), tanh(m1));
498 VERIFY_IS_APPROX(m1.logistic(), logistic(m1));
499 VERIFY_IS_APPROX(m1.arg(), arg(m1));
500 VERIFY((m1.isNaN() == (Eigen::isnan)(m1)).all());
501 VERIFY((m1.isInf() == (Eigen::isinf)(m1)).all());
502 VERIFY((m1.isFinite() == (Eigen::isfinite)(m1)).all());
503 VERIFY_IS_APPROX(m4.inverse(), inverse(m4));
504 VERIFY_IS_APPROX(m1.log(), log(m1));
505 VERIFY_IS_APPROX(m1.log10(), log10(m1));
506 VERIFY_IS_APPROX(m1.log2(), log2(m1));
507 VERIFY_IS_APPROX(m1.abs(), abs(m1));
508 VERIFY_IS_APPROX(m1.abs2(), abs2(m1));
509 VERIFY_IS_APPROX(m1.sqrt(), sqrt(m1));
510 VERIFY_IS_APPROX(m1.square(), square(m1));
511 VERIFY_IS_APPROX(m1.cube(), cube(m1));
512 VERIFY_IS_APPROX(cos(m1+RealScalar(3)*m2), cos((m1+RealScalar(3)*m2).eval()));
513 VERIFY_IS_APPROX(m1.sign(), sign(m1));
514
515
516 VERIFY_IS_APPROX(m1.exp() * m2.exp(), exp(m1+m2));
517 VERIFY_IS_APPROX(m1.exp(), exp(m1));
518 VERIFY_IS_APPROX(m1.exp() / m2.exp(),(m1-m2).exp());
519
520 VERIFY_IS_APPROX(m1.expm1(), expm1(m1));
521 VERIFY_IS_APPROX(expm1(m1), exp(m1) - 1.);
522 // Check for larger magnitude complex numbers that expm1 matches exp - 1.
523 VERIFY_IS_APPROX(expm1(10. * m1), exp(10. * m1) - 1.);
524
525 VERIFY_IS_APPROX(sinh(m1), 0.5*(exp(m1)-exp(-m1)));
526 VERIFY_IS_APPROX(cosh(m1), 0.5*(exp(m1)+exp(-m1)));
527 VERIFY_IS_APPROX(tanh(m1), (0.5*(exp(m1)-exp(-m1)))/(0.5*(exp(m1)+exp(-m1))));

Callers 1

EIGEN_DECLARE_TESTFunction · 0.85

Calls 15

squareFunction · 0.85
cubeFunction · 0.85
realMethod · 0.80
absMethod · 0.80
imagMethod · 0.80
sinMethod · 0.80
cosMethod · 0.80
sinhMethod · 0.80
coshMethod · 0.80
tanhMethod · 0.80
log2Method · 0.80
squareMethod · 0.80

Tested by

no test coverage detected