Skip to content

Commit

Permalink
Merge pull request #3656 from OXPHOS/linalg_eigen3.3
Browse files Browse the repository at this point in the history
LinalgRefactor - Eigen3.3.x compatibility
  • Loading branch information
OXPHOS committed Feb 27, 2017
2 parents cfa931a + e2fc2d0 commit 81658f5
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 9 deletions.
27 changes: 21 additions & 6 deletions src/shogun/mathematics/linalg/LinalgBackendEigen.h
Expand Up @@ -82,15 +82,29 @@ 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<Type>& a, Container<Type>& b, Type alpha, \
Type beta, Container<Type>& result) const \
{ \
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 */
Expand Down Expand Up @@ -352,14 +366,15 @@ class LinalgBackendEigen : public LinalgBackendBase

if (lower == false)
{
Eigen::TriangularView<Eigen::Matrix<T,Eigen::Dynamic,Eigen::Dynamic>,
Eigen::Upper> tlv(L_eig);
Eigen::TriangularView<Eigen::Map<typename SGMatrix<T>::EigenMatrixXt,
0, Eigen::Stride<0,0> >, Eigen::Upper> tlv(L_eig);

x_eig = (tlv.transpose()).solve(tlv.solve(b_eig));
}
else
{
Eigen::TriangularView<Eigen::Matrix<T,Eigen::Dynamic,Eigen::Dynamic>,
Eigen::Lower> tlv(L_eig);
Eigen::TriangularView<Eigen::Map<typename SGMatrix<T>::EigenMatrixXt,
0, Eigen::Stride<0,0> >, Eigen::Lower> tlv(L_eig);
x_eig = (tlv.transpose()).solve(tlv.solve(b_eig));
}

Expand Down
Expand Up @@ -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<float64_t> A(size, size);
Expand Down

0 comments on commit 81658f5

Please sign in to comment.