diff --git a/src/shogun/mathematics/linalg/LinalgBackendEigen.h b/src/shogun/mathematics/linalg/LinalgBackendEigen.h index a06ec799c8d..00c246f0098 100644 --- a/src/shogun/mathematics/linalg/LinalgBackendEigen.h +++ b/src/shogun/mathematics/linalg/LinalgBackendEigen.h @@ -82,6 +82,20 @@ class LinalgBackendEigen : public LinalgBackendBase METHODNAME(floatmax_t, Container); \ METHODNAME(complex128_t, Container); + #define DEFINE_FOR_NUMERIC_PTYPE(METHODNAME, Container) \ + METHODNAME(char, Container); \ + METHODNAME(int8_t, Container); \ + METHODNAME(uint8_t, Container); \ + METHODNAME(int16_t, Container); \ + METHODNAME(uint16_t, Container); \ + METHODNAME(int32_t, Container); \ + METHODNAME(uint32_t, Container); \ + METHODNAME(int64_t, Container); \ + METHODNAME(uint64_t, Container); \ + METHODNAME(float32_t, Container); \ + METHODNAME(float64_t, Container); \ + METHODNAME(floatmax_t, Container); + /** Implementation of @see LinalgBackendBase::add */ #define BACKEND_GENERIC_IN_PLACE_ADD(Type, Container) \ virtual void add(Container& a, Container& b, Type alpha, \ @@ -89,8 +103,8 @@ class LinalgBackendEigen : public LinalgBackendBase { \ add_impl(a, b, alpha, beta, result); \ } - DEFINE_FOR_ALL_PTYPE(BACKEND_GENERIC_IN_PLACE_ADD, SGVector) - DEFINE_FOR_ALL_PTYPE(BACKEND_GENERIC_IN_PLACE_ADD, SGMatrix) + DEFINE_FOR_NUMERIC_PTYPE(BACKEND_GENERIC_IN_PLACE_ADD, SGVector) + DEFINE_FOR_NUMERIC_PTYPE(BACKEND_GENERIC_IN_PLACE_ADD, SGMatrix) #undef BACKEND_GENERIC_IN_PLACE_ADD /** Implementation of @see LinalgBackendBase::cholesky_factor */ @@ -352,14 +366,15 @@ class LinalgBackendEigen : public LinalgBackendBase if (lower == false) { - Eigen::TriangularView, - Eigen::Upper> tlv(L_eig); + Eigen::TriangularView::EigenMatrixXt, + 0, Eigen::Stride<0,0> >, Eigen::Upper> tlv(L_eig); + x_eig = (tlv.transpose()).solve(tlv.solve(b_eig)); } else { - Eigen::TriangularView, - Eigen::Lower> tlv(L_eig); + Eigen::TriangularView::EigenMatrixXt, + 0, Eigen::Stride<0,0> >, Eigen::Lower> tlv(L_eig); x_eig = (tlv.transpose()).solve(tlv.solve(b_eig)); } diff --git a/tests/unit/mathematics/linalg/operations/Eigen3_operations_unittest.cc b/tests/unit/mathematics/linalg/operations/Eigen3_operations_unittest.cc index 04a89849332..155e383daeb 100644 --- a/tests/unit/mathematics/linalg/operations/Eigen3_operations_unittest.cc +++ b/tests/unit/mathematics/linalg/operations/Eigen3_operations_unittest.cc @@ -133,9 +133,7 @@ TEST(LinalgBackendEigen, SGMatrix_cholesky_llt_upper) EXPECT_EQ(m.num_cols, U.num_cols); } -// Temporarily disabled because Travis fails to calculate: -// Eigen::TriangularView.solve(vector) -TEST(LinalgBackendEigen, DISABLED_SGMatrix_cholesky_solver) +TEST(LinalgBackendEigen, SGMatrix_cholesky_solver) { const index_t size=2; SGMatrix A(size, size);