From d65c8cb60acd34a0eb898194713ff45e604de0fe Mon Sep 17 00:00:00 2001 From: Gael Guennebaud Date: Wed, 23 Dec 2009 11:48:53 +0100 Subject: fix #69 and extend unit tests or triangular solvers --- Eigen/src/Core/SolveTriangular.h | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) (limited to 'Eigen/src/Core/SolveTriangular.h') diff --git a/Eigen/src/Core/SolveTriangular.h b/Eigen/src/Core/SolveTriangular.h index c7f0cd227..e8230dd50 100644 --- a/Eigen/src/Core/SolveTriangular.h +++ b/Eigen/src/Core/SolveTriangular.h @@ -31,7 +31,7 @@ template struct ei_triangular_solver_selector; @@ -143,18 +143,30 @@ struct ei_triangular_solver_selector +struct ei_triangular_solver_selector +{ + static void run(const Lhs& lhs, Rhs& rhs) + { + Transpose rhsTr(rhs); + Transpose lhsTr(lhs); + ei_triangular_solver_selector,Transpose,OnTheLeft,TriangularView::TransposeMode>::run(lhsTr,rhsTr); + } +}; + template struct ei_triangular_solve_matrix; // the rhs is a matrix -template -struct ei_triangular_solver_selector +template +struct ei_triangular_solver_selector { typedef typename Rhs::Scalar Scalar; typedef ei_blas_traits LhsProductTraits; typedef typename LhsProductTraits::DirectLinearAccessType ActualLhsType; static void run(const Lhs& lhs, Rhs& rhs) - { + {std::cerr << "mat\n"; const ActualLhsType actualLhs = LhsProductTraits::extract(lhs); ei_triangular_solve_matrix -- cgit v1.2.3 From 72b6c05bf04855f7a31c13de0491867d6a10d16b Mon Sep 17 00:00:00 2001 From: Gael Guennebaud Date: Wed, 23 Dec 2009 13:30:25 +0100 Subject: sorry for committing this mess --- Eigen/src/Core/SolveTriangular.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Eigen/src/Core/SolveTriangular.h') diff --git a/Eigen/src/Core/SolveTriangular.h b/Eigen/src/Core/SolveTriangular.h index e8230dd50..15717a120 100644 --- a/Eigen/src/Core/SolveTriangular.h +++ b/Eigen/src/Core/SolveTriangular.h @@ -166,7 +166,7 @@ struct ei_triangular_solver_selector LhsProductTraits; typedef typename LhsProductTraits::DirectLinearAccessType ActualLhsType; static void run(const Lhs& lhs, Rhs& rhs) - {std::cerr << "mat\n"; + { const ActualLhsType actualLhs = LhsProductTraits::extract(lhs); ei_triangular_solve_matrix -- cgit v1.2.3 From 826bff58c68273d1d0088898c1f54a01c9a94b04 Mon Sep 17 00:00:00 2001 From: Gael Guennebaud Date: Mon, 4 Jan 2010 17:36:26 +0100 Subject: Fix #69 for the second time, and add the respective regression test --- Eigen/src/Core/SolveTriangular.h | 22 ++++++++++++++++++---- test/product_trsolve.cpp | 3 ++- 2 files changed, 20 insertions(+), 5 deletions(-) (limited to 'Eigen/src/Core/SolveTriangular.h') diff --git a/Eigen/src/Core/SolveTriangular.h b/Eigen/src/Core/SolveTriangular.h index 15717a120..9c4a49c3c 100644 --- a/Eigen/src/Core/SolveTriangular.h +++ b/Eigen/src/Core/SolveTriangular.h @@ -25,13 +25,27 @@ #ifndef EIGEN_SOLVETRIANGULAR_H #define EIGEN_SOLVETRIANGULAR_H +template +class ei_trsolve_traits +{ + private: + enum { + RhsIsVectorAtCompileTime = (Side==OnTheLeft ? Rhs::ColsAtCompileTime : Rhs::RowsAtCompileTime)==1 + }; + public: + enum { + Unrolling = (RhsIsVectorAtCompileTime && Rhs::SizeAtCompileTime <= 8) + ? CompleteUnrolling : NoUnrolling, + RhsVectors = RhsIsVectorAtCompileTime ? 1 : Dynamic + }; +}; + template::Unrolling, int StorageOrder = (int(Lhs::Flags) & RowMajorBit) ? RowMajor : ColMajor, - int RhsVectors = Rhs::IsVectorAtCompileTime ? 1 : Dynamic + int RhsVectors = ei_trsolve_traits::RhsVectors > struct ei_triangular_solver_selector; diff --git a/test/product_trsolve.cpp b/test/product_trsolve.cpp index 449240f7c..66e263862 100644 --- a/test/product_trsolve.cpp +++ b/test/product_trsolve.cpp @@ -84,6 +84,7 @@ void test_product_trsolve() // vectors CALL_SUBTEST_3((trsolve,Dynamic,1>(ei_random(1,320)))); CALL_SUBTEST_4((trsolve())); - CALL_SUBTEST_5((trsolve,4,1>())); + CALL_SUBTEST_5((trsolve())); + CALL_SUBTEST_6((trsolve,4,1>())); } } -- cgit v1.2.3