diff options
author | Gael Guennebaud <g.gael@free.fr> | 2010-01-07 21:15:32 +0100 |
---|---|---|
committer | Gael Guennebaud <g.gael@free.fr> | 2010-01-07 21:15:32 +0100 |
commit | c5d7c9f0def693e77797e6e43cb1fd2e7f8ae2fd (patch) | |
tree | 3a6367ee5d64f9e9034831a84d2b4cf3c761263c /test | |
parent | 82ec250a0f9abc11be71e8d0f92dc6f7284b91d0 (diff) |
remove the Triangular suffix to Upper, Lower, UnitLower, etc,
and remove the respective bit flags
Diffstat (limited to 'test')
-rw-r--r-- | test/bandmatrix.cpp | 4 | ||||
-rw-r--r-- | test/cholesky.cpp | 10 | ||||
-rw-r--r-- | test/product_notemporary.cpp | 32 | ||||
-rw-r--r-- | test/product_selfadjoint.cpp | 24 | ||||
-rw-r--r-- | test/product_symm.cpp | 38 | ||||
-rw-r--r-- | test/product_syrk.cpp | 24 | ||||
-rw-r--r-- | test/product_trmm.cpp | 36 | ||||
-rw-r--r-- | test/product_trmv.cpp | 50 | ||||
-rw-r--r-- | test/product_trsolve.cpp | 32 | ||||
-rw-r--r-- | test/qr_colpivoting.cpp | 4 | ||||
-rw-r--r-- | test/sparse_product.cpp | 6 | ||||
-rw-r--r-- | test/sparse_solvers.cpp | 41 | ||||
-rw-r--r-- | test/triangular.cpp | 130 |
13 files changed, 215 insertions, 216 deletions
diff --git a/test/bandmatrix.cpp b/test/bandmatrix.cpp index e243dffe5..dc54812b9 100644 --- a/test/bandmatrix.cpp +++ b/test/bandmatrix.cpp @@ -64,8 +64,8 @@ template<typename MatrixType> void bandmatrix(const MatrixType& _m) int a = std::max(0,cols-d-supers); int b = std::max(0,rows-d-subs); if(a>0) dm1.block(0,d+supers,rows,a).setZero(); - dm1.block(0,supers+1,cols-supers-1-a,cols-supers-1-a).template triangularView<UpperTriangular>().setZero(); - dm1.block(subs+1,0,rows-subs-1-b,rows-subs-1-b).template triangularView<LowerTriangular>().setZero(); + dm1.block(0,supers+1,cols-supers-1-a,cols-supers-1-a).template triangularView<Upper>().setZero(); + dm1.block(subs+1,0,rows-subs-1-b,rows-subs-1-b).template triangularView<Lower>().setZero(); if(b>0) dm1.block(d+subs,0,b,cols).setZero(); //std::cerr << m.m_data << "\n\n" << m.toDense() << "\n\n" << dm1 << "\n\n"; VERIFY_IS_APPROX(dm1,m.toDenseMatrix()); diff --git a/test/cholesky.cpp b/test/cholesky.cpp index c658b902c..1bb808d20 100644 --- a/test/cholesky.cpp +++ b/test/cholesky.cpp @@ -58,12 +58,12 @@ template<typename MatrixType> void cholesky(const MatrixType& m) symm += a1 * a1.adjoint(); } - SquareMatrixType symmUp = symm.template triangularView<UpperTriangular>(); - SquareMatrixType symmLo = symm.template triangularView<LowerTriangular>(); + SquareMatrixType symmUp = symm.template triangularView<Upper>(); + SquareMatrixType symmLo = symm.template triangularView<Lower>(); // to test if really Cholesky only uses the upper triangular part, uncomment the following // FIXME: currently that fails !! - //symm.template part<StrictlyLowerTriangular>().setZero(); + //symm.template part<StrictlyLower>().setZero(); #ifdef HAS_GSL // if (ei_is_same_type<RealScalar,double>::ret) @@ -94,7 +94,7 @@ template<typename MatrixType> void cholesky(const MatrixType& m) #endif { - LLT<SquareMatrixType,LowerTriangular> chollo(symmLo); + LLT<SquareMatrixType,Lower> chollo(symmLo); VERIFY_IS_APPROX(symm, chollo.matrixL().toDenseMatrix() * chollo.matrixL().adjoint().toDenseMatrix()); vecX = chollo.solve(vecB); VERIFY_IS_APPROX(symm * vecX, vecB); @@ -102,7 +102,7 @@ template<typename MatrixType> void cholesky(const MatrixType& m) VERIFY_IS_APPROX(symm * matX, matB); // test the upper mode - LLT<SquareMatrixType,UpperTriangular> cholup(symmUp); + LLT<SquareMatrixType,Upper> cholup(symmUp); VERIFY_IS_APPROX(symm, cholup.matrixL().toDenseMatrix() * cholup.matrixL().adjoint().toDenseMatrix()); vecX = cholup.solve(vecB); VERIFY_IS_APPROX(symm * vecX, vecB); diff --git a/test/product_notemporary.cpp b/test/product_notemporary.cpp index 534d23d84..1da91e5d7 100644 --- a/test/product_notemporary.cpp +++ b/test/product_notemporary.cpp @@ -85,31 +85,31 @@ template<typename MatrixType> void product_notemporary(const MatrixType& m) // NOTE this is because the Block expression is not handled yet by our expression analyser VERIFY_EVALUATION_COUNT(( m3.block(r0,r0,r1,r1).noalias() = s1 * m1.block(r0,c0,r1,c1) * (s1*m2).block(c0,r0,c1,r1) ), 1); - VERIFY_EVALUATION_COUNT( m3.noalias() -= (s1 * m1).template triangularView<LowerTriangular>() * m2, 0); - VERIFY_EVALUATION_COUNT( rm3.noalias() = (s1 * m1.adjoint()).template triangularView<UpperTriangular>() * (m2+m2), 1); - VERIFY_EVALUATION_COUNT( rm3.noalias() = (s1 * m1.adjoint()).template triangularView<UnitUpperTriangular>() * m2.adjoint(), 0); + VERIFY_EVALUATION_COUNT( m3.noalias() -= (s1 * m1).template triangularView<Lower>() * m2, 0); + VERIFY_EVALUATION_COUNT( rm3.noalias() = (s1 * m1.adjoint()).template triangularView<Upper>() * (m2+m2), 1); + VERIFY_EVALUATION_COUNT( rm3.noalias() = (s1 * m1.adjoint()).template triangularView<UnitUpper>() * m2.adjoint(), 0); - VERIFY_EVALUATION_COUNT( rm3.col(c0).noalias() = (s1 * m1.adjoint()).template triangularView<UnitUpperTriangular>() * (s2*m2.row(c0)).adjoint(), 0); + VERIFY_EVALUATION_COUNT( rm3.col(c0).noalias() = (s1 * m1.adjoint()).template triangularView<UnitUpper>() * (s2*m2.row(c0)).adjoint(), 0); - VERIFY_EVALUATION_COUNT( m1.template triangularView<LowerTriangular>().solveInPlace(m3), 0); - VERIFY_EVALUATION_COUNT( m1.adjoint().template triangularView<LowerTriangular>().solveInPlace(m3.transpose()), 0); + VERIFY_EVALUATION_COUNT( m1.template triangularView<Lower>().solveInPlace(m3), 0); + VERIFY_EVALUATION_COUNT( m1.adjoint().template triangularView<Lower>().solveInPlace(m3.transpose()), 0); - VERIFY_EVALUATION_COUNT( m3.noalias() -= (s1 * m1).adjoint().template selfadjointView<LowerTriangular>() * (-m2*s3).adjoint(), 0); - VERIFY_EVALUATION_COUNT( m3.noalias() = s2 * m2.adjoint() * (s1 * m1.adjoint()).template selfadjointView<UpperTriangular>(), 0); - VERIFY_EVALUATION_COUNT( rm3.noalias() = (s1 * m1.adjoint()).template selfadjointView<LowerTriangular>() * m2.adjoint(), 0); + VERIFY_EVALUATION_COUNT( m3.noalias() -= (s1 * m1).adjoint().template selfadjointView<Lower>() * (-m2*s3).adjoint(), 0); + VERIFY_EVALUATION_COUNT( m3.noalias() = s2 * m2.adjoint() * (s1 * m1.adjoint()).template selfadjointView<Upper>(), 0); + VERIFY_EVALUATION_COUNT( rm3.noalias() = (s1 * m1.adjoint()).template selfadjointView<Lower>() * m2.adjoint(), 0); - VERIFY_EVALUATION_COUNT( m3.col(c0).noalias() = (s1 * m1).adjoint().template selfadjointView<LowerTriangular>() * (-m2.row(c0)*s3).adjoint(), 0); - VERIFY_EVALUATION_COUNT( m3.col(c0).noalias() -= (s1 * m1).adjoint().template selfadjointView<UpperTriangular>() * (-m2.row(c0)*s3).adjoint(), 0); + VERIFY_EVALUATION_COUNT( m3.col(c0).noalias() = (s1 * m1).adjoint().template selfadjointView<Lower>() * (-m2.row(c0)*s3).adjoint(), 0); + VERIFY_EVALUATION_COUNT( m3.col(c0).noalias() -= (s1 * m1).adjoint().template selfadjointView<Upper>() * (-m2.row(c0)*s3).adjoint(), 0); - VERIFY_EVALUATION_COUNT( m3.block(r0,c0,r1,c1).noalias() += m1.block(r0,r0,r1,r1).template selfadjointView<UpperTriangular>() * (s1*m2.block(r0,c0,r1,c1)), 0); - VERIFY_EVALUATION_COUNT( m3.block(r0,c0,r1,c1).noalias() = m1.block(r0,r0,r1,r1).template selfadjointView<UpperTriangular>() * m2.block(r0,c0,r1,c1), 0); + VERIFY_EVALUATION_COUNT( m3.block(r0,c0,r1,c1).noalias() += m1.block(r0,r0,r1,r1).template selfadjointView<Upper>() * (s1*m2.block(r0,c0,r1,c1)), 0); + VERIFY_EVALUATION_COUNT( m3.block(r0,c0,r1,c1).noalias() = m1.block(r0,r0,r1,r1).template selfadjointView<Upper>() * m2.block(r0,c0,r1,c1), 0); - VERIFY_EVALUATION_COUNT( m3.template selfadjointView<LowerTriangular>().rankUpdate(m2.adjoint()), 0); + VERIFY_EVALUATION_COUNT( m3.template selfadjointView<Lower>().rankUpdate(m2.adjoint()), 0); m3.resize(1,1); - VERIFY_EVALUATION_COUNT( m3.noalias() = m1.block(r0,r0,r1,r1).template selfadjointView<LowerTriangular>() * m2.block(r0,c0,r1,c1), 0); + VERIFY_EVALUATION_COUNT( m3.noalias() = m1.block(r0,r0,r1,r1).template selfadjointView<Lower>() * m2.block(r0,c0,r1,c1), 0); m3.resize(1,1); - VERIFY_EVALUATION_COUNT( m3.noalias() = m1.block(r0,r0,r1,r1).template triangularView<UnitUpperTriangular>() * m2.block(r0,c0,r1,c1), 0); + VERIFY_EVALUATION_COUNT( m3.noalias() = m1.block(r0,r0,r1,r1).template triangularView<UnitUpper>() * m2.block(r0,c0,r1,c1), 0); } void test_product_notemporary() diff --git a/test/product_selfadjoint.cpp b/test/product_selfadjoint.cpp index 2f3833a02..2027fc8e5 100644 --- a/test/product_selfadjoint.cpp +++ b/test/product_selfadjoint.cpp @@ -53,25 +53,25 @@ template<typename MatrixType> void product_selfadjoint(const MatrixType& m) m1 = (m1.adjoint() + m1).eval(); // rank2 update - m2 = m1.template triangularView<LowerTriangular>(); - m2.template selfadjointView<LowerTriangular>().rankUpdate(v1,v2); - VERIFY_IS_APPROX(m2, (m1 + v1 * v2.adjoint()+ v2 * v1.adjoint()).template triangularView<LowerTriangular>().toDenseMatrix()); + m2 = m1.template triangularView<Lower>(); + m2.template selfadjointView<Lower>().rankUpdate(v1,v2); + VERIFY_IS_APPROX(m2, (m1 + v1 * v2.adjoint()+ v2 * v1.adjoint()).template triangularView<Lower>().toDenseMatrix()); - m2 = m1.template triangularView<UpperTriangular>(); - m2.template selfadjointView<UpperTriangular>().rankUpdate(-v1,s2*v2,s3); - VERIFY_IS_APPROX(m2, (m1 + (-s2*s3) * (v1 * v2.adjoint()+ v2 * v1.adjoint())).template triangularView<UpperTriangular>().toDenseMatrix()); + m2 = m1.template triangularView<Upper>(); + m2.template selfadjointView<Upper>().rankUpdate(-v1,s2*v2,s3); + VERIFY_IS_APPROX(m2, (m1 + (-s2*s3) * (v1 * v2.adjoint()+ v2 * v1.adjoint())).template triangularView<Upper>().toDenseMatrix()); - m2 = m1.template triangularView<UpperTriangular>(); - m2.template selfadjointView<UpperTriangular>().rankUpdate(-r1.adjoint(),r2.adjoint()*s3,s1); - VERIFY_IS_APPROX(m2, (m1 + (-s3*s1) * (r1.adjoint() * r2 + r2.adjoint() * r1)).template triangularView<UpperTriangular>().toDenseMatrix()); + m2 = m1.template triangularView<Upper>(); + m2.template selfadjointView<Upper>().rankUpdate(-r1.adjoint(),r2.adjoint()*s3,s1); + VERIFY_IS_APPROX(m2, (m1 + (-s3*s1) * (r1.adjoint() * r2 + r2.adjoint() * r1)).template triangularView<Upper>().toDenseMatrix()); if (rows>1) { - m2 = m1.template triangularView<LowerTriangular>(); - m2.block(1,1,rows-1,cols-1).template selfadjointView<LowerTriangular>().rankUpdate(v1.tail(rows-1),v2.head(cols-1)); + m2 = m1.template triangularView<Lower>(); + m2.block(1,1,rows-1,cols-1).template selfadjointView<Lower>().rankUpdate(v1.tail(rows-1),v2.head(cols-1)); m3 = m1; m3.block(1,1,rows-1,cols-1) += v1.tail(rows-1) * v2.head(cols-1).adjoint()+ v2.head(cols-1) * v1.tail(rows-1).adjoint(); - VERIFY_IS_APPROX(m2, m3.template triangularView<LowerTriangular>().toDenseMatrix()); + VERIFY_IS_APPROX(m2, m3.template triangularView<Lower>().toDenseMatrix()); } } diff --git a/test/product_symm.cpp b/test/product_symm.cpp index a9e055bd3..a0d80080f 100644 --- a/test/product_symm.cpp +++ b/test/product_symm.cpp @@ -28,10 +28,10 @@ template<int OtherSize> struct symm_extra { template<typename M1, typename M2, typename Scalar> static void run(M1& m1, M1& m2, M2& rhs2, M2& rhs22, M2& rhs23, Scalar s1, Scalar s2) { - m2 = m1.template triangularView<LowerTriangular>(); - VERIFY_IS_APPROX(rhs22 = (rhs2) * (m2).template selfadjointView<LowerTriangular>(), + m2 = m1.template triangularView<Lower>(); + VERIFY_IS_APPROX(rhs22 = (rhs2) * (m2).template selfadjointView<Lower>(), rhs23 = (rhs2) * (m1)); - VERIFY_IS_APPROX(rhs22 = (s2*rhs2) * (s1*m2).template selfadjointView<LowerTriangular>(), + VERIFY_IS_APPROX(rhs22 = (s2*rhs2) * (s1*m2).template selfadjointView<Lower>(), rhs23 = (s2*rhs2) * (s1*m1)); } }; @@ -65,38 +65,38 @@ template<typename Scalar, int Size, int OtherSize> void symm(int size = Size, in Scalar s1 = ei_random<Scalar>(), s2 = ei_random<Scalar>(); - m2 = m1.template triangularView<LowerTriangular>(); - VERIFY_IS_APPROX(rhs12 = (s1*m2).template selfadjointView<LowerTriangular>() * (s2*rhs1), + m2 = m1.template triangularView<Lower>(); + VERIFY_IS_APPROX(rhs12 = (s1*m2).template selfadjointView<Lower>() * (s2*rhs1), rhs13 = (s1*m1) * (s2*rhs1)); - m2 = m1.template triangularView<UpperTriangular>(); rhs12.setRandom(); rhs13 = rhs12; - VERIFY_IS_APPROX(rhs12 += (s1*m2).template selfadjointView<UpperTriangular>() * (s2*rhs1), + m2 = m1.template triangularView<Upper>(); rhs12.setRandom(); rhs13 = rhs12; + VERIFY_IS_APPROX(rhs12 += (s1*m2).template selfadjointView<Upper>() * (s2*rhs1), rhs13 += (s1*m1) * (s2*rhs1)); - m2 = m1.template triangularView<LowerTriangular>(); - VERIFY_IS_APPROX(rhs12 = (s1*m2).template selfadjointView<LowerTriangular>() * (s2*rhs2.adjoint()), + m2 = m1.template triangularView<Lower>(); + VERIFY_IS_APPROX(rhs12 = (s1*m2).template selfadjointView<Lower>() * (s2*rhs2.adjoint()), rhs13 = (s1*m1) * (s2*rhs2.adjoint())); - m2 = m1.template triangularView<UpperTriangular>(); - VERIFY_IS_APPROX(rhs12 = (s1*m2).template selfadjointView<UpperTriangular>() * (s2*rhs2.adjoint()), + m2 = m1.template triangularView<Upper>(); + VERIFY_IS_APPROX(rhs12 = (s1*m2).template selfadjointView<Upper>() * (s2*rhs2.adjoint()), rhs13 = (s1*m1) * (s2*rhs2.adjoint())); - m2 = m1.template triangularView<UpperTriangular>(); - VERIFY_IS_APPROX(rhs12 = (s1*m2.adjoint()).template selfadjointView<LowerTriangular>() * (s2*rhs2.adjoint()), + m2 = m1.template triangularView<Upper>(); + VERIFY_IS_APPROX(rhs12 = (s1*m2.adjoint()).template selfadjointView<Lower>() * (s2*rhs2.adjoint()), rhs13 = (s1*m1.adjoint()) * (s2*rhs2.adjoint())); // test row major = <...> - m2 = m1.template triangularView<LowerTriangular>(); rhs12.setRandom(); rhs13 = rhs12; - VERIFY_IS_APPROX(rhs12 -= (s1*m2).template selfadjointView<LowerTriangular>() * (s2*rhs3), + m2 = m1.template triangularView<Lower>(); rhs12.setRandom(); rhs13 = rhs12; + VERIFY_IS_APPROX(rhs12 -= (s1*m2).template selfadjointView<Lower>() * (s2*rhs3), rhs13 -= (s1*m1) * (s2 * rhs3)); - m2 = m1.template triangularView<UpperTriangular>(); - VERIFY_IS_APPROX(rhs12 = (s1*m2.adjoint()).template selfadjointView<LowerTriangular>() * (s2*rhs3).conjugate(), + m2 = m1.template triangularView<Upper>(); + VERIFY_IS_APPROX(rhs12 = (s1*m2.adjoint()).template selfadjointView<Lower>() * (s2*rhs3).conjugate(), rhs13 = (s1*m1.adjoint()) * (s2*rhs3).conjugate()); - m2 = m1.template triangularView<UpperTriangular>(); rhs13 = rhs12; - VERIFY_IS_APPROX(rhs12.noalias() += s1 * ((m2.adjoint()).template selfadjointView<LowerTriangular>() * (s2*rhs3).conjugate()), + m2 = m1.template triangularView<Upper>(); rhs13 = rhs12; + VERIFY_IS_APPROX(rhs12.noalias() += s1 * ((m2.adjoint()).template selfadjointView<Lower>() * (s2*rhs3).conjugate()), rhs13 += (s1*m1.adjoint()) * (s2*rhs3).conjugate()); // test matrix * selfadjoint diff --git a/test/product_syrk.cpp b/test/product_syrk.cpp index 9f6aec0e2..e597ac88a 100644 --- a/test/product_syrk.cpp +++ b/test/product_syrk.cpp @@ -45,28 +45,28 @@ template<typename MatrixType> void syrk(const MatrixType& m) Scalar s1 = ei_random<Scalar>(); m2.setZero(); - VERIFY_IS_APPROX((m2.template selfadjointView<LowerTriangular>().rankUpdate(rhs2,s1)._expression()), - ((s1 * rhs2 * rhs2.adjoint()).eval().template triangularView<LowerTriangular>().toDenseMatrix())); + VERIFY_IS_APPROX((m2.template selfadjointView<Lower>().rankUpdate(rhs2,s1)._expression()), + ((s1 * rhs2 * rhs2.adjoint()).eval().template triangularView<Lower>().toDenseMatrix())); m2.setZero(); - VERIFY_IS_APPROX(m2.template selfadjointView<UpperTriangular>().rankUpdate(rhs2,s1)._expression(), - (s1 * rhs2 * rhs2.adjoint()).eval().template triangularView<UpperTriangular>().toDenseMatrix()); + VERIFY_IS_APPROX(m2.template selfadjointView<Upper>().rankUpdate(rhs2,s1)._expression(), + (s1 * rhs2 * rhs2.adjoint()).eval().template triangularView<Upper>().toDenseMatrix()); m2.setZero(); - VERIFY_IS_APPROX(m2.template selfadjointView<LowerTriangular>().rankUpdate(rhs1.adjoint(),s1)._expression(), - (s1 * rhs1.adjoint() * rhs1).eval().template triangularView<LowerTriangular>().toDenseMatrix()); + VERIFY_IS_APPROX(m2.template selfadjointView<Lower>().rankUpdate(rhs1.adjoint(),s1)._expression(), + (s1 * rhs1.adjoint() * rhs1).eval().template triangularView<Lower>().toDenseMatrix()); m2.setZero(); - VERIFY_IS_APPROX(m2.template selfadjointView<UpperTriangular>().rankUpdate(rhs1.adjoint(),s1)._expression(), - (s1 * rhs1.adjoint() * rhs1).eval().template triangularView<UpperTriangular>().toDenseMatrix()); + VERIFY_IS_APPROX(m2.template selfadjointView<Upper>().rankUpdate(rhs1.adjoint(),s1)._expression(), + (s1 * rhs1.adjoint() * rhs1).eval().template triangularView<Upper>().toDenseMatrix()); m2.setZero(); - VERIFY_IS_APPROX(m2.template selfadjointView<LowerTriangular>().rankUpdate(rhs3.adjoint(),s1)._expression(), - (s1 * rhs3.adjoint() * rhs3).eval().template triangularView<LowerTriangular>().toDenseMatrix()); + VERIFY_IS_APPROX(m2.template selfadjointView<Lower>().rankUpdate(rhs3.adjoint(),s1)._expression(), + (s1 * rhs3.adjoint() * rhs3).eval().template triangularView<Lower>().toDenseMatrix()); m2.setZero(); - VERIFY_IS_APPROX(m2.template selfadjointView<UpperTriangular>().rankUpdate(rhs3.adjoint(),s1)._expression(), - (s1 * rhs3.adjoint() * rhs3).eval().template triangularView<UpperTriangular>().toDenseMatrix()); + VERIFY_IS_APPROX(m2.template selfadjointView<Upper>().rankUpdate(rhs3.adjoint(),s1)._expression(), + (s1 * rhs3.adjoint() * rhs3).eval().template triangularView<Upper>().toDenseMatrix()); } void test_product_syrk() diff --git a/test/product_trmm.cpp b/test/product_trmm.cpp index 5f92391e6..69e97f7aa 100644 --- a/test/product_trmm.cpp +++ b/test/product_trmm.cpp @@ -36,27 +36,27 @@ template<typename Scalar> void trmm(int size,int othersize) s2 = ei_random<Scalar>(); tri.setRandom(); - loTri = tri.template triangularView<LowerTriangular>(); - upTri = tri.template triangularView<UpperTriangular>(); + loTri = tri.template triangularView<Lower>(); + upTri = tri.template triangularView<Upper>(); ge1.setRandom(); ge2.setRandom(); - VERIFY_IS_APPROX( ge3 = tri.template triangularView<LowerTriangular>() * ge1, loTri * ge1); - VERIFY_IS_APPROX(rge3 = tri.template triangularView<LowerTriangular>() * ge1, loTri * ge1); - VERIFY_IS_APPROX( ge3 = tri.template triangularView<UpperTriangular>() * ge1, upTri * ge1); - VERIFY_IS_APPROX(rge3 = tri.template triangularView<UpperTriangular>() * ge1, upTri * ge1); - VERIFY_IS_APPROX( ge3 = (s1*tri.adjoint()).template triangularView<UpperTriangular>() * (s2*ge1), s1*loTri.adjoint() * (s2*ge1)); - VERIFY_IS_APPROX(rge3 = tri.adjoint().template triangularView<UpperTriangular>() * ge1, loTri.adjoint() * ge1); - VERIFY_IS_APPROX( ge3 = tri.adjoint().template triangularView<LowerTriangular>() * ge1, upTri.adjoint() * ge1); - VERIFY_IS_APPROX(rge3 = tri.adjoint().template triangularView<LowerTriangular>() * ge1, upTri.adjoint() * ge1); - VERIFY_IS_APPROX( ge3 = tri.template triangularView<LowerTriangular>() * ge2.adjoint(), loTri * ge2.adjoint()); - VERIFY_IS_APPROX(rge3 = tri.template triangularView<LowerTriangular>() * ge2.adjoint(), loTri * ge2.adjoint()); - VERIFY_IS_APPROX( ge3 = tri.template triangularView<UpperTriangular>() * ge2.adjoint(), upTri * ge2.adjoint()); - VERIFY_IS_APPROX(rge3 = tri.template triangularView<UpperTriangular>() * ge2.adjoint(), upTri * ge2.adjoint()); - VERIFY_IS_APPROX( ge3 = (s1*tri).adjoint().template triangularView<UpperTriangular>() * ge2.adjoint(), ei_conj(s1) * loTri.adjoint() * ge2.adjoint()); - VERIFY_IS_APPROX(rge3 = tri.adjoint().template triangularView<UpperTriangular>() * ge2.adjoint(), loTri.adjoint() * ge2.adjoint()); - VERIFY_IS_APPROX( ge3 = tri.adjoint().template triangularView<LowerTriangular>() * ge2.adjoint(), upTri.adjoint() * ge2.adjoint()); - VERIFY_IS_APPROX(rge3 = tri.adjoint().template triangularView<LowerTriangular>() * ge2.adjoint(), upTri.adjoint() * ge2.adjoint()); + VERIFY_IS_APPROX( ge3 = tri.template triangularView<Lower>() * ge1, loTri * ge1); + VERIFY_IS_APPROX(rge3 = tri.template triangularView<Lower>() * ge1, loTri * ge1); + VERIFY_IS_APPROX( ge3 = tri.template triangularView<Upper>() * ge1, upTri * ge1); + VERIFY_IS_APPROX(rge3 = tri.template triangularView<Upper>() * ge1, upTri * ge1); + VERIFY_IS_APPROX( ge3 = (s1*tri.adjoint()).template triangularView<Upper>() * (s2*ge1), s1*loTri.adjoint() * (s2*ge1)); + VERIFY_IS_APPROX(rge3 = tri.adjoint().template triangularView<Upper>() * ge1, loTri.adjoint() * ge1); + VERIFY_IS_APPROX( ge3 = tri.adjoint().template triangularView<Lower>() * ge1, upTri.adjoint() * ge1); + VERIFY_IS_APPROX(rge3 = tri.adjoint().template triangularView<Lower>() * ge1, upTri.adjoint() * ge1); + VERIFY_IS_APPROX( ge3 = tri.template triangularView<Lower>() * ge2.adjoint(), loTri * ge2.adjoint()); + VERIFY_IS_APPROX(rge3 = tri.template triangularView<Lower>() * ge2.adjoint(), loTri * ge2.adjoint()); + VERIFY_IS_APPROX( ge3 = tri.template triangularView<Upper>() * ge2.adjoint(), upTri * ge2.adjoint()); + VERIFY_IS_APPROX(rge3 = tri.template triangularView<Upper>() * ge2.adjoint(), upTri * ge2.adjoint()); + VERIFY_IS_APPROX( ge3 = (s1*tri).adjoint().template triangularView<Upper>() * ge2.adjoint(), ei_conj(s1) * loTri.adjoint() * ge2.adjoint()); + VERIFY_IS_APPROX(rge3 = tri.adjoint().template triangularView<Upper>() * ge2.adjoint(), loTri.adjoint() * ge2.adjoint()); + VERIFY_IS_APPROX( ge3 = tri.adjoint().template triangularView<Lower>() * ge2.adjoint(), upTri.adjoint() * ge2.adjoint()); + VERIFY_IS_APPROX(rge3 = tri.adjoint().template triangularView<Lower>() * ge2.adjoint(), upTri.adjoint() * ge2.adjoint()); } void test_product_trmm() diff --git a/test/product_trmv.cpp b/test/product_trmv.cpp index 5016a5b1f..f0962557a 100644 --- a/test/product_trmv.cpp +++ b/test/product_trmv.cpp @@ -44,37 +44,37 @@ template<typename MatrixType> void trmv(const MatrixType& m) m1 = MatrixType::Random(rows, cols); // check with a column-major matrix - m3 = m1.template triangularView<Eigen::LowerTriangular>(); - VERIFY((m3 * v1).isApprox(m1.template triangularView<Eigen::LowerTriangular>() * v1, largerEps)); - m3 = m1.template triangularView<Eigen::UpperTriangular>(); - VERIFY((m3 * v1).isApprox(m1.template triangularView<Eigen::UpperTriangular>() * v1, largerEps)); - m3 = m1.template triangularView<Eigen::UnitLowerTriangular>(); - VERIFY((m3 * v1).isApprox(m1.template triangularView<Eigen::UnitLowerTriangular>() * v1, largerEps)); - m3 = m1.template triangularView<Eigen::UnitUpperTriangular>(); - VERIFY((m3 * v1).isApprox(m1.template triangularView<Eigen::UnitUpperTriangular>() * v1, largerEps)); + m3 = m1.template triangularView<Eigen::Lower>(); + VERIFY((m3 * v1).isApprox(m1.template triangularView<Eigen::Lower>() * v1, largerEps)); + m3 = m1.template triangularView<Eigen::Upper>(); + VERIFY((m3 * v1).isApprox(m1.template triangularView<Eigen::Upper>() * v1, largerEps)); + m3 = m1.template triangularView<Eigen::UnitLower>(); + VERIFY((m3 * v1).isApprox(m1.template triangularView<Eigen::UnitLower>() * v1, largerEps)); + m3 = m1.template triangularView<Eigen::UnitUpper>(); + VERIFY((m3 * v1).isApprox(m1.template triangularView<Eigen::UnitUpper>() * v1, largerEps)); // check conjugated and scalar multiple expressions (col-major) - m3 = m1.template triangularView<Eigen::LowerTriangular>(); - VERIFY(((s1*m3).conjugate() * v1).isApprox((s1*m1).conjugate().template triangularView<Eigen::LowerTriangular>() * v1, largerEps)); - m3 = m1.template triangularView<Eigen::UpperTriangular>(); - VERIFY((m3.conjugate() * v1.conjugate()).isApprox(m1.conjugate().template triangularView<Eigen::UpperTriangular>() * v1.conjugate(), largerEps)); + m3 = m1.template triangularView<Eigen::Lower>(); + VERIFY(((s1*m3).conjugate() * v1).isApprox((s1*m1).conjugate().template triangularView<Eigen::Lower>() * v1, largerEps)); + m3 = m1.template triangularView<Eigen::Upper>(); + VERIFY((m3.conjugate() * v1.conjugate()).isApprox(m1.conjugate().template triangularView<Eigen::Upper>() * v1.conjugate(), largerEps)); // check with a row-major matrix - m3 = m1.template triangularView<Eigen::UpperTriangular>(); - VERIFY((m3.transpose() * v1).isApprox(m1.transpose().template triangularView<Eigen::LowerTriangular>() * v1, largerEps)); - m3 = m1.template triangularView<Eigen::LowerTriangular>(); - VERIFY((m3.transpose() * v1).isApprox(m1.transpose().template triangularView<Eigen::UpperTriangular>() * v1, largerEps)); - m3 = m1.template triangularView<Eigen::UnitUpperTriangular>(); - VERIFY((m3.transpose() * v1).isApprox(m1.transpose().template triangularView<Eigen::UnitLowerTriangular>() * v1, largerEps)); - m3 = m1.template triangularView<Eigen::UnitLowerTriangular>(); - VERIFY((m3.transpose() * v1).isApprox(m1.transpose().template triangularView<Eigen::UnitUpperTriangular>() * v1, largerEps)); + m3 = m1.template triangularView<Eigen::Upper>(); + VERIFY((m3.transpose() * v1).isApprox(m1.transpose().template triangularView<Eigen::Lower>() * v1, largerEps)); + m3 = m1.template triangularView<Eigen::Lower>(); + VERIFY((m3.transpose() * v1).isApprox(m1.transpose().template triangularView<Eigen::Upper>() * v1, largerEps)); + m3 = m1.template triangularView<Eigen::UnitUpper>(); + VERIFY((m3.transpose() * v1).isApprox(m1.transpose().template triangularView<Eigen::UnitLower>() * v1, largerEps)); + m3 = m1.template triangularView<Eigen::UnitLower>(); + VERIFY((m3.transpose() * v1).isApprox(m1.transpose().template triangularView<Eigen::UnitUpper>() * v1, largerEps)); // check conjugated and scalar multiple expressions (row-major) - m3 = m1.template triangularView<Eigen::UpperTriangular>(); - VERIFY((m3.adjoint() * v1).isApprox(m1.adjoint().template triangularView<Eigen::LowerTriangular>() * v1, largerEps)); - m3 = m1.template triangularView<Eigen::LowerTriangular>(); - VERIFY((m3.adjoint() * (s1*v1.conjugate())).isApprox(m1.adjoint().template triangularView<Eigen::UpperTriangular>() * (s1*v1.conjugate()), largerEps)); - m3 = m1.template triangularView<Eigen::UnitUpperTriangular>(); + m3 = m1.template triangularView<Eigen::Upper>(); + VERIFY((m3.adjoint() * v1).isApprox(m1.adjoint().template triangularView<Eigen::Lower>() * v1, largerEps)); + m3 = m1.template triangularView<Eigen::Lower>(); + VERIFY((m3.adjoint() * (s1*v1.conjugate())).isApprox(m1.adjoint().template triangularView<Eigen::Upper>() * (s1*v1.conjugate()), largerEps)); + m3 = m1.template triangularView<Eigen::UnitUpper>(); // TODO check with sub-matrices } diff --git a/test/product_trsolve.cpp b/test/product_trsolve.cpp index 4477a29d1..6e916230e 100644 --- a/test/product_trsolve.cpp +++ b/test/product_trsolve.cpp @@ -49,28 +49,28 @@ template<typename Scalar,int Size, int Cols> void trsolve(int size=Size,int cols cmLhs.setRandom(); cmLhs *= static_cast<RealScalar>(0.1); cmLhs.diagonal().array() += static_cast<RealScalar>(1); rmLhs.setRandom(); rmLhs *= static_cast<RealScalar>(0.1); rmLhs.diagonal().array() += static_cast<RealScalar>(1); - VERIFY_TRSM(cmLhs.conjugate().template triangularView<LowerTriangular>(), cmRhs); - VERIFY_TRSM(cmLhs .template triangularView<UpperTriangular>(), cmRhs); - VERIFY_TRSM(cmLhs .template triangularView<LowerTriangular>(), rmRhs); - VERIFY_TRSM(cmLhs.conjugate().template triangularView<UpperTriangular>(), rmRhs); + VERIFY_TRSM(cmLhs.conjugate().template triangularView<Lower>(), cmRhs); + VERIFY_TRSM(cmLhs .template triangularView<Upper>(), cmRhs); + VERIFY_TRSM(cmLhs .template triangularView<Lower>(), rmRhs); + VERIFY_TRSM(cmLhs.conjugate().template triangularView<Upper>(), rmRhs); - VERIFY_TRSM(cmLhs.conjugate().template triangularView<UnitLowerTriangular>(), cmRhs); - VERIFY_TRSM(cmLhs .template triangularView<UnitUpperTriangular>(), rmRhs); + VERIFY_TRSM(cmLhs.conjugate().template triangularView<UnitLower>(), cmRhs); + VERIFY_TRSM(cmLhs .template triangularView<UnitUpper>(), rmRhs); - VERIFY_TRSM(rmLhs .template triangularView<LowerTriangular>(), cmRhs); - VERIFY_TRSM(rmLhs.conjugate().template triangularView<UnitUpperTriangular>(), rmRhs); + VERIFY_TRSM(rmLhs .template triangularView<Lower>(), cmRhs); + VERIFY_TRSM(rmLhs.conjugate().template triangularView<UnitUpper>(), rmRhs); - VERIFY_TRSM_ONTHERIGHT(cmLhs.conjugate().template triangularView<LowerTriangular>(), cmRhs); - VERIFY_TRSM_ONTHERIGHT(cmLhs .template triangularView<UpperTriangular>(), cmRhs); - VERIFY_TRSM_ONTHERIGHT(cmLhs .template triangularView<LowerTriangular>(), rmRhs); - VERIFY_TRSM_ONTHERIGHT(cmLhs.conjugate().template triangularView<UpperTriangular>(), rmRhs); + VERIFY_TRSM_ONTHERIGHT(cmLhs.conjugate().template triangularView<Lower>(), cmRhs); + VERIFY_TRSM_ONTHERIGHT(cmLhs .template triangularView<Upper>(), cmRhs); + VERIFY_TRSM_ONTHERIGHT(cmLhs .template triangularView<Lower>(), rmRhs); + VERIFY_TRSM_ONTHERIGHT(cmLhs.conjugate().template triangularView<Upper>(), rmRhs); - VERIFY_TRSM_ONTHERIGHT(cmLhs.conjugate().template triangularView<UnitLowerTriangular>(), cmRhs); - VERIFY_TRSM_ONTHERIGHT(cmLhs .template triangularView<UnitUpperTriangular>(), rmRhs); + VERIFY_TRSM_ONTHERIGHT(cmLhs.conjugate().template triangularView<UnitLower>(), cmRhs); + VERIFY_TRSM_ONTHERIGHT(cmLhs .template triangularView<UnitUpper>(), rmRhs); - VERIFY_TRSM_ONTHERIGHT(rmLhs .template triangularView<LowerTriangular>(), cmRhs); - VERIFY_TRSM_ONTHERIGHT(rmLhs.conjugate().template triangularView<UnitUpperTriangular>(), rmRhs); + VERIFY_TRSM_ONTHERIGHT(rmLhs .template triangularView<Lower>(), cmRhs); + VERIFY_TRSM_ONTHERIGHT(rmLhs.conjugate().template triangularView<UnitUpper>(), rmRhs); } void test_product_trsolve() diff --git a/test/qr_colpivoting.cpp b/test/qr_colpivoting.cpp index 8b56cd296..16eb27c52 100644 --- a/test/qr_colpivoting.cpp +++ b/test/qr_colpivoting.cpp @@ -47,7 +47,7 @@ template<typename MatrixType> void qr() MatrixQType q = qr.householderQ(); VERIFY_IS_UNITARY(q); - MatrixType r = qr.matrixQR().template triangularView<UpperTriangular>(); + MatrixType r = qr.matrixQR().template triangularView<Upper>(); MatrixType c = q * r * qr.colsPermutation().inverse(); VERIFY_IS_APPROX(m1, c); @@ -72,7 +72,7 @@ template<typename MatrixType, int Cols2> void qr_fixedsize() VERIFY(!qr.isInvertible()); VERIFY(!qr.isSurjective()); - Matrix<Scalar,Rows,Cols> r = qr.matrixQR().template triangularView<UpperTriangular>(); + Matrix<Scalar,Rows,Cols> r = qr.matrixQR().template triangularView<Upper>(); Matrix<Scalar,Rows,Cols> c = qr.householderQ() * r * qr.colsPermutation().inverse(); VERIFY_IS_APPROX(m1, c); diff --git a/test/sparse_product.cpp b/test/sparse_product.cpp index 00c2cdf74..04e089784 100644 --- a/test/sparse_product.cpp +++ b/test/sparse_product.cpp @@ -115,9 +115,9 @@ template<typename SparseMatrixType> void sparse_product(const SparseMatrixType& VERIFY_IS_APPROX(mS, refS); VERIFY_IS_APPROX(x=mS*b, refX=refS*b); - VERIFY_IS_APPROX(x=mUp.template selfadjointView<UpperTriangular>()*b, refX=refS*b); - VERIFY_IS_APPROX(x=mLo.template selfadjointView<LowerTriangular>()*b, refX=refS*b); - VERIFY_IS_APPROX(x=mS.template selfadjointView<UpperTriangular|LowerTriangular>()*b, refX=refS*b); + VERIFY_IS_APPROX(x=mUp.template selfadjointView<Upper>()*b, refX=refS*b); + VERIFY_IS_APPROX(x=mLo.template selfadjointView<Lower>()*b, refX=refS*b); + VERIFY_IS_APPROX(x=mS.template selfadjointView<Upper|Lower>()*b, refX=refS*b); } } diff --git a/test/sparse_solvers.cpp b/test/sparse_solvers.cpp index 059747c3d..fab2ab56e 100644 --- a/test/sparse_solvers.cpp +++ b/test/sparse_solvers.cpp @@ -65,23 +65,23 @@ template<typename Scalar> void sparse_solvers(int rows, int cols) // lower - dense initSparse<Scalar>(density, refMat2, m2, ForceNonZeroDiag|MakeLowerTriangular, &zeroCoords, &nonzeroCoords); - VERIFY_IS_APPROX(refMat2.template triangularView<LowerTriangular>().solve(vec2), - m2.template triangularView<LowerTriangular>().solve(vec3)); + VERIFY_IS_APPROX(refMat2.template triangularView<Lower>().solve(vec2), + m2.template triangularView<Lower>().solve(vec3)); // upper - dense initSparse<Scalar>(density, refMat2, m2, ForceNonZeroDiag|MakeUpperTriangular, &zeroCoords, &nonzeroCoords); - VERIFY_IS_APPROX(refMat2.template triangularView<UpperTriangular>().solve(vec2), - m2.template triangularView<UpperTriangular>().solve(vec3)); + VERIFY_IS_APPROX(refMat2.template triangularView<Upper>().solve(vec2), + m2.template triangularView<Upper>().solve(vec3)); // lower - transpose initSparse<Scalar>(density, refMat2, m2, ForceNonZeroDiag|MakeLowerTriangular, &zeroCoords, &nonzeroCoords); - VERIFY_IS_APPROX(refMat2.transpose().template triangularView<UpperTriangular>().solve(vec2), - m2.transpose().template triangularView<UpperTriangular>().solve(vec3)); + VERIFY_IS_APPROX(refMat2.transpose().template triangularView<Upper>().solve(vec2), + m2.transpose().template triangularView<Upper>().solve(vec3)); // upper - transpose initSparse<Scalar>(density, refMat2, m2, ForceNonZeroDiag|MakeUpperTriangular, &zeroCoords, &nonzeroCoords); - VERIFY_IS_APPROX(refMat2.transpose().template triangularView<LowerTriangular>().solve(vec2), - m2.transpose().template triangularView<LowerTriangular>().solve(vec3)); + VERIFY_IS_APPROX(refMat2.transpose().template triangularView<Lower>().solve(vec2), + m2.transpose().template triangularView<Lower>().solve(vec3)); SparseMatrix<Scalar> matB(rows, rows); DenseMatrix refMatB = DenseMatrix::Zero(rows, rows); @@ -89,21 +89,21 @@ template<typename Scalar> void sparse_solvers(int rows, int cols) // lower - sparse initSparse<Scalar>(density, refMat2, m2, ForceNonZeroDiag|MakeLowerTriangular); initSparse<Scalar>(density, refMatB, matB); - refMat2.template triangularView<LowerTriangular>().solveInPlace(refMatB); - m2.template triangularView<LowerTriangular>().solveInPlace(matB); + refMat2.template triangularView<Lower>().solveInPlace(refMatB); + m2.template triangularView<Lower>().solveInPlace(matB); VERIFY_IS_APPROX(matB.toDense(), refMatB); // upper - sparse initSparse<Scalar>(density, refMat2, m2, ForceNonZeroDiag|MakeUpperTriangular); initSparse<Scalar>(density, refMatB, matB); - refMat2.template triangularView<UpperTriangular>().solveInPlace(refMatB); - m2.template triangularView<UpperTriangular>().solveInPlace(matB); + refMat2.template triangularView<Upper>().solveInPlace(refMatB); + m2.template triangularView<Upper>().solveInPlace(matB); VERIFY_IS_APPROX(matB, refMatB); // test deprecated API initSparse<Scalar>(density, refMat2, m2, ForceNonZeroDiag|MakeLowerTriangular, &zeroCoords, &nonzeroCoords); - VERIFY_IS_APPROX(refMat2.template triangularView<LowerTriangular>().solve(vec2), - m2.template triangularView<LowerTriangular>().solve(vec3)); + VERIFY_IS_APPROX(refMat2.template triangularView<Lower>().solve(vec2), + m2.template triangularView<Lower>().solve(vec3)); } // test LLT @@ -118,29 +118,28 @@ template<typename Scalar> void sparse_solvers(int rows, int cols) initSPD(density, refMat2, m2); refX = refMat2.llt().solve(b); - typedef SparseMatrix<Scalar,LowerTriangular|SelfAdjoint> SparseSelfAdjointMatrix; if (!NumTraits<Scalar>::IsComplex) { x = b; - SparseLLT<SparseSelfAdjointMatrix> (m2).solveInPlace(x); + SparseLLT<SparseMatrix<Scalar> > (m2).solveInPlace(x); VERIFY(refX.isApprox(x,test_precision<Scalar>()) && "LLT: default"); } #ifdef EIGEN_CHOLMOD_SUPPORT x = b; - SparseLLT<SparseSelfAdjointMatrix,Cholmod>(m2).solveInPlace(x); + SparseLLT<SparseMatrix<Scalar> ,Cholmod>(m2).solveInPlace(x); VERIFY(refX.isApprox(x,test_precision<Scalar>()) && "LLT: cholmod"); #endif #ifdef EIGEN_TAUCS_SUPPORT x = b; - SparseLLT<SparseSelfAdjointMatrix,Taucs>(m2,IncompleteFactorization).solveInPlace(x); + SparseLLT<SparseMatrix<Scalar> ,Taucs>(m2,IncompleteFactorization).solveInPlace(x); VERIFY(refX.isApprox(x,test_precision<Scalar>()) && "LLT: taucs (IncompleteFactorization)"); // TODO fix TAUCS with complexes x = b; - SparseLLT<SparseSelfAdjointMatrix,Taucs>(m2,SupernodalMultifrontal).solveInPlace(x); + SparseLLT<SparseMatrix<Scalar> ,Taucs>(m2,SupernodalMultifrontal).solveInPlace(x); VERIFY(refX.isApprox(x,test_precision<Scalar>()) && "LLT: taucs (SupernodalMultifrontal)"); x = b; - SparseLLT<SparseSelfAdjointMatrix,Taucs>(m2,SupernodalLeftLooking).solveInPlace(x); + SparseLLT<SparseMatrix<Scalar> ,Taucs>(m2,SupernodalLeftLooking).solveInPlace(x); VERIFY(refX.isApprox(x,test_precision<Scalar>()) && "LLT: taucs (SupernodalLeftLooking)"); #endif } @@ -161,7 +160,7 @@ template<typename Scalar> void sparse_solvers(int rows, int cols) refMat2.diagonal() *= 0.5; refX = refMat2.llt().solve(b); // FIXME use LLT to compute the reference because LDLT seems to fail with large matrices - typedef SparseMatrix<Scalar,UpperTriangular|SelfAdjoint> SparseSelfAdjointMatrix; + typedef SparseMatrix<Scalar,Upper|SelfAdjoint> SparseSelfAdjointMatrix; x = b; SparseLDLT<SparseSelfAdjointMatrix> ldlt(m2); if (ldlt.succeeded()) diff --git a/test/triangular.cpp b/test/triangular.cpp index 0de9f5841..2903e247c 100644 --- a/test/triangular.cpp +++ b/test/triangular.cpp @@ -53,14 +53,14 @@ template<typename MatrixType> void triangular_square(const MatrixType& m) v2 = VectorType::Random(rows), vzero = VectorType::Zero(rows); - MatrixType m1up = m1.template triangularView<UpperTriangular>(); - MatrixType m2up = m2.template triangularView<UpperTriangular>(); + MatrixType m1up = m1.template triangularView<Upper>(); + MatrixType m2up = m2.template triangularView<Upper>(); if (rows*cols>1) { - VERIFY(m1up.isUpperTriangular()); - VERIFY(m2up.transpose().isLowerTriangular()); - VERIFY(!m2.isLowerTriangular()); + VERIFY(m1up.isUpper()); + VERIFY(m2up.transpose().isLower()); + VERIFY(!m2.isLower()); } // VERIFY_IS_APPROX(m1up.transpose() * m2, m1.upper().transpose().lower() * m2); @@ -68,20 +68,20 @@ template<typename MatrixType> void triangular_square(const MatrixType& m) // test overloaded operator+= r1.setZero(); r2.setZero(); - r1.template triangularView<UpperTriangular>() += m1; + r1.template triangularView<Upper>() += m1; r2 += m1up; VERIFY_IS_APPROX(r1,r2); // test overloaded operator= m1.setZero(); - m1.template triangularView<UpperTriangular>() = m2.transpose() + m2; + m1.template triangularView<Upper>() = m2.transpose() + m2; m3 = m2.transpose() + m2; - VERIFY_IS_APPROX(m3.template triangularView<LowerTriangular>().transpose().toDenseMatrix(), m1); + VERIFY_IS_APPROX(m3.template triangularView<Lower>().transpose().toDenseMatrix(), m1); // test overloaded operator= m1.setZero(); - m1.template triangularView<LowerTriangular>() = m2.transpose() + m2; - VERIFY_IS_APPROX(m3.template triangularView<LowerTriangular>().toDenseMatrix(), m1); + m1.template triangularView<Lower>() = m2.transpose() + m2; + VERIFY_IS_APPROX(m3.template triangularView<Lower>().toDenseMatrix(), m1); m1 = MatrixType::Random(rows, cols); for (int i=0; i<rows; ++i) @@ -89,49 +89,49 @@ template<typename MatrixType> void triangular_square(const MatrixType& m) Transpose<MatrixType> trm4(m4); // test back and forward subsitution with a vector as the rhs - m3 = m1.template triangularView<UpperTriangular>(); - VERIFY(v2.isApprox(m3.adjoint() * (m1.adjoint().template triangularView<LowerTriangular>().solve(v2)), largerEps)); - m3 = m1.template triangularView<LowerTriangular>(); - VERIFY(v2.isApprox(m3.transpose() * (m1.transpose().template triangularView<UpperTriangular>().solve(v2)), largerEps)); - m3 = m1.template triangularView<UpperTriangular>(); - VERIFY(v2.isApprox(m3 * (m1.template triangularView<UpperTriangular>().solve(v2)), largerEps)); - m3 = m1.template triangularView<LowerTriangular>(); - VERIFY(v2.isApprox(m3.conjugate() * (m1.conjugate().template triangularView<LowerTriangular>().solve(v2)), largerEps)); + m3 = m1.template triangularView<Upper>(); + VERIFY(v2.isApprox(m3.adjoint() * (m1.adjoint().template triangularView<Lower>().solve(v2)), largerEps)); + m3 = m1.template triangularView<Lower>(); + VERIFY(v2.isApprox(m3.transpose() * (m1.transpose().template triangularView<Upper>().solve(v2)), largerEps)); + m3 = m1.template triangularView<Upper>(); + VERIFY(v2.isApprox(m3 * (m1.template triangularView<Upper>().solve(v2)), largerEps)); + m3 = m1.template triangularView<Lower>(); + VERIFY(v2.isApprox(m3.conjugate() * (m1.conjugate().template triangularView<Lower>().solve(v2)), largerEps)); // test back and forward subsitution with a matrix as the rhs - m3 = m1.template triangularView<UpperTriangular>(); - VERIFY(m2.isApprox(m3.adjoint() * (m1.adjoint().template triangularView<LowerTriangular>().solve(m2)), largerEps)); - m3 = m1.template triangularView<LowerTriangular>(); - VERIFY(m2.isApprox(m3.transpose() * (m1.transpose().template triangularView<UpperTriangular>().solve(m2)), largerEps)); - m3 = m1.template triangularView<UpperTriangular>(); - VERIFY(m2.isApprox(m3 * (m1.template triangularView<UpperTriangular>().solve(m2)), largerEps)); - m3 = m1.template triangularView<LowerTriangular>(); - VERIFY(m2.isApprox(m3.conjugate() * (m1.conjugate().template triangularView<LowerTriangular>().solve(m2)), largerEps)); + m3 = m1.template triangularView<Upper>(); + VERIFY(m2.isApprox(m3.adjoint() * (m1.adjoint().template triangularView<Lower>().solve(m2)), largerEps)); + m3 = m1.template triangularView<Lower>(); + VERIFY(m2.isApprox(m3.transpose() * (m1.transpose().template triangularView<Upper>().solve(m2)), largerEps)); + m3 = m1.template triangularView<Upper>(); + VERIFY(m2.isApprox(m3 * (m1.template triangularView<Upper>().solve(m2)), largerEps)); + m3 = m1.template triangularView<Lower>(); + VERIFY(m2.isApprox(m3.conjugate() * (m1.conjugate().template triangularView<Lower>().solve(m2)), largerEps)); // check M * inv(L) using in place API m4 = m3; - m3.transpose().template triangularView<Eigen::UpperTriangular>().solveInPlace(trm4); + m3.transpose().template triangularView<Eigen::Upper>().solveInPlace(trm4); VERIFY(m4.cwiseAbs().isIdentity(test_precision<RealScalar>())); // check M * inv(U) using in place API - m3 = m1.template triangularView<UpperTriangular>(); + m3 = m1.template triangularView<Upper>(); m4 = m3; - m3.transpose().template triangularView<Eigen::LowerTriangular>().solveInPlace(trm4); + m3.transpose().template triangularView<Eigen::Lower>().solveInPlace(trm4); VERIFY(m4.cwiseAbs().isIdentity(test_precision<RealScalar>())); // check solve with unit diagonal - m3 = m1.template triangularView<UnitUpperTriangular>(); - VERIFY(m2.isApprox(m3 * (m1.template triangularView<UnitUpperTriangular>().solve(m2)), largerEps)); + m3 = m1.template triangularView<UnitUpper>(); + VERIFY(m2.isApprox(m3 * (m1.template triangularView<UnitUpper>().solve(m2)), largerEps)); -// VERIFY(( m1.template triangularView<UpperTriangular>() -// * m2.template triangularView<UpperTriangular>()).isUpperTriangular()); +// VERIFY(( m1.template triangularView<Upper>() +// * m2.template triangularView<Upper>()).isUpper()); // test swap m1.setOnes(); m2.setZero(); - m2.template triangularView<UpperTriangular>().swap(m1); + m2.template triangularView<Upper>().swap(m1); m3.setZero(); - m3.template triangularView<UpperTriangular>().setOnes(); + m3.template triangularView<Upper>().setOnes(); VERIFY_IS_APPROX(m2,m3); } @@ -165,69 +165,69 @@ template<typename MatrixType> void triangular_rect(const MatrixType& m) v2 = VectorType::Random(rows), vzero = VectorType::Zero(rows); - MatrixType m1up = m1.template triangularView<UpperTriangular>(); - MatrixType m2up = m2.template triangularView<UpperTriangular>(); + MatrixType m1up = m1.template triangularView<Upper>(); + MatrixType m2up = m2.template triangularView<Upper>(); if (rows*cols>1) { - VERIFY(m1up.isUpperTriangular()); - VERIFY(m2up.transpose().isLowerTriangular()); - VERIFY(!m2.isLowerTriangular()); + VERIFY(m1up.isUpper()); + VERIFY(m2up.transpose().isLower()); + VERIFY(!m2.isLower()); } // test overloaded operator+= r1.setZero(); r2.setZero(); - r1.template triangularView<UpperTriangular>() += m1; + r1.template triangularView<Upper>() += m1; r2 += m1up; VERIFY_IS_APPROX(r1,r2); // test overloaded operator= m1.setZero(); - m1.template triangularView<UpperTriangular>() = 3 * m2; + m1.template triangularView<Upper>() = 3 * m2; m3 = 3 * m2; - VERIFY_IS_APPROX(m3.template triangularView<UpperTriangular>().toDenseMatrix(), m1); + VERIFY_IS_APPROX(m3.template triangularView<Upper>().toDenseMatrix(), m1); m1.setZero(); - m1.template triangularView<LowerTriangular>() = 3 * m2; - VERIFY_IS_APPROX(m3.template triangularView<LowerTriangular>().toDenseMatrix(), m1); + m1.template triangularView<Lower>() = 3 * m2; + VERIFY_IS_APPROX(m3.template triangularView<Lower>().toDenseMatrix(), m1); m1.setZero(); - m1.template triangularView<StrictlyUpperTriangular>() = 3 * m2; - VERIFY_IS_APPROX(m3.template triangularView<StrictlyUpperTriangular>().toDenseMatrix(), m1); + m1.template triangularView<StrictlyUpper>() = 3 * m2; + VERIFY_IS_APPROX(m3.template triangularView<StrictlyUpper>().toDenseMatrix(), m1); m1.setZero(); - m1.template triangularView<StrictlyLowerTriangular>() = 3 * m2; - VERIFY_IS_APPROX(m3.template triangularView<StrictlyLowerTriangular>().toDenseMatrix(), m1); + m1.template triangularView<StrictlyLower>() = 3 * m2; + VERIFY_IS_APPROX(m3.template triangularView<StrictlyLower>().toDenseMatrix(), m1); m1.setRandom(); - m2 = m1.template triangularView<UpperTriangular>(); - VERIFY(m2.isUpperTriangular()); - VERIFY(!m2.isLowerTriangular()); - m2 = m1.template triangularView<StrictlyUpperTriangular>(); - VERIFY(m2.isUpperTriangular()); + m2 = m1.template triangularView<Upper>(); + VERIFY(m2.isUpper()); + VERIFY(!m2.isLower()); + m2 = m1.template triangularView<StrictlyUpper>(); + VERIFY(m2.isUpper()); VERIFY(m2.diagonal().isMuchSmallerThan(RealScalar(1))); - m2 = m1.template triangularView<UnitUpperTriangular>(); - VERIFY(m2.isUpperTriangular()); + m2 = m1.template triangularView<UnitUpper>(); + VERIFY(m2.isUpper()); m2.diagonal().array() -= Scalar(1); VERIFY(m2.diagonal().isMuchSmallerThan(RealScalar(1))); - m2 = m1.template triangularView<LowerTriangular>(); - VERIFY(m2.isLowerTriangular()); - VERIFY(!m2.isUpperTriangular()); - m2 = m1.template triangularView<StrictlyLowerTriangular>(); - VERIFY(m2.isLowerTriangular()); + m2 = m1.template triangularView<Lower>(); + VERIFY(m2.isLower()); + VERIFY(!m2.isUpper()); + m2 = m1.template triangularView<StrictlyLower>(); + VERIFY(m2.isLower()); VERIFY(m2.diagonal().isMuchSmallerThan(RealScalar(1))); - m2 = m1.template triangularView<UnitLowerTriangular>(); - VERIFY(m2.isLowerTriangular()); + m2 = m1.template triangularView<UnitLower>(); + VERIFY(m2.isLower()); m2.diagonal().array() -= Scalar(1); VERIFY(m2.diagonal().isMuchSmallerThan(RealScalar(1))); // test swap m1.setOnes(); m2.setZero(); - m2.template triangularView<UpperTriangular>().swap(m1); + m2.template triangularView<Upper>().swap(m1); m3.setZero(); - m3.template triangularView<UpperTriangular>().setOnes(); + m3.template triangularView<Upper>().setOnes(); VERIFY_IS_APPROX(m2,m3); } |