From a7a79f16442336cd21ed6bcd470d93c57e9430df Mon Sep 17 00:00:00 2001 From: Wuwei Lin Date: Thu, 8 Feb 2018 19:15:48 +0800 Subject: [PATCH] Add const qualifiers to input of linalg APIs --- .../mathematics/linalg/LinalgBackendBase.h | 11 ++++--- .../mathematics/linalg/LinalgBackendEigen.h | 20 ++++++------ .../linalg/LinalgBackendViennaCL.h | 31 ++++++++++--------- .../mathematics/linalg/LinalgNamespace.h | 4 +-- .../linalg/LinalgSpecialPurposes.h | 10 +++--- .../linalg/backend/eigen/SpecialPurposes.cpp | 16 +++++----- 6 files changed, 49 insertions(+), 43 deletions(-) diff --git a/src/shogun/mathematics/linalg/LinalgBackendBase.h b/src/shogun/mathematics/linalg/LinalgBackendBase.h index b139fc06d03..c49bef7e6d8 100644 --- a/src/shogun/mathematics/linalg/LinalgBackendBase.h +++ b/src/shogun/mathematics/linalg/LinalgBackendBase.h @@ -375,7 +375,8 @@ namespace shogun * @see linalg::logistic */ #define BACKEND_GENERIC_LOGISTIC(Type, Container) \ - virtual void logistic(Container& a, Container& result) const \ + virtual void logistic(const Container& a, Container& result) \ + const \ { \ SG_SNOTIMPLEMENTED; \ } @@ -454,7 +455,7 @@ namespace shogun */ #define BACKEND_GENERIC_MULTIPLY_BY_LOGISTIC_DERIV(Type, Container) \ virtual void multiply_by_logistic_derivative( \ - Container& a, Container& result) const \ + const Container& a, Container& result) const \ { \ SG_SNOTIMPLEMENTED; \ } @@ -469,7 +470,7 @@ namespace shogun */ #define BACKEND_GENERIC_MULTIPLY_BY_RECTIFIED_LINEAR_DERIV(Type, Container) \ virtual void multiply_by_rectified_linear_derivative( \ - Container& a, Container& result) const \ + const Container& a, Container& result) const \ { \ SG_SNOTIMPLEMENTED; \ } @@ -497,8 +498,8 @@ namespace shogun * @see linalg::rectified_linear */ #define BACKEND_GENERIC_RECTIFIED_LINEAR(Type, Container) \ - virtual void rectified_linear(Container& a, Container& result) \ - const \ + virtual void rectified_linear( \ + const Container& a, Container& result) const \ { \ SG_SNOTIMPLEMENTED; \ } diff --git a/src/shogun/mathematics/linalg/LinalgBackendEigen.h b/src/shogun/mathematics/linalg/LinalgBackendEigen.h index 905b0890e38..8744c5d3d2c 100644 --- a/src/shogun/mathematics/linalg/LinalgBackendEigen.h +++ b/src/shogun/mathematics/linalg/LinalgBackendEigen.h @@ -192,7 +192,8 @@ namespace shogun /** Implementation of @see LinalgBackendBase::logistic */ #define BACKEND_GENERIC_LOGISTIC(Type, Container) \ - virtual void logistic(Container& a, Container& result) const; + virtual void logistic(const Container& a, Container& result) \ + const; DEFINE_FOR_NUMERIC_PTYPE(BACKEND_GENERIC_LOGISTIC, SGMatrix) #undef BACKEND_GENERIC_LOGISTIC @@ -229,7 +230,7 @@ namespace shogun /** Implementation of @see linalg::multiply_by_logistic_derivative */ #define BACKEND_GENERIC_MULTIPLY_BY_LOGISTIC_DERIV(Type, Container) \ virtual void multiply_by_logistic_derivative( \ - Container& a, Container& result) const; + const Container& a, Container& result) const; DEFINE_FOR_NUMERIC_PTYPE( BACKEND_GENERIC_MULTIPLY_BY_LOGISTIC_DERIV, SGMatrix) #undef BACKEND_GENERIC_MULTIPLY_BY_LOGISTIC_DERIV @@ -237,7 +238,7 @@ namespace shogun /** Implementation of @see linalg::multiply_by_rectified_linear_derivative */ #define BACKEND_GENERIC_MULTIPLY_BY_RECTIFIED_LINEAR_DERIV(Type, Container) \ virtual void multiply_by_rectified_linear_derivative( \ - Container& a, Container& result) const; + const Container& a, Container& result) const; DEFINE_FOR_NON_INTEGER_REAL_PTYPE( BACKEND_GENERIC_MULTIPLY_BY_RECTIFIED_LINEAR_DERIV, SGMatrix) #undef BACKEND_GENERIC_MULTIPLY_BY_RECTIFIED_LINEAR_DERIV @@ -259,8 +260,8 @@ namespace shogun /** Implementation of @see linalg::rectified_linear */ #define BACKEND_GENERIC_RECTIFIED_LINEAR(Type, Container) \ - virtual void rectified_linear(Container& a, Container& result) \ - const; + virtual void rectified_linear( \ + const Container& a, Container& result) const; DEFINE_FOR_REAL_PTYPE(BACKEND_GENERIC_RECTIFIED_LINEAR, SGMatrix) #undef BACKEND_GENERIC_RECTIFIED_LINEAR @@ -526,7 +527,7 @@ namespace shogun /** Eigen3 logistic method. Calculates f(x) = 1/(1+exp(-x)) */ template - void logistic_impl(SGMatrix& a, SGMatrix& result) const; + void logistic_impl(const SGMatrix& a, SGMatrix& result) const; /** Eigen3 matrix * vector in-place product method */ template @@ -565,14 +566,14 @@ namespace shogun */ template void multiply_by_logistic_derivative_impl( - SGMatrix& a, SGMatrix& result) const; + const SGMatrix& a, SGMatrix& result) const; /** Eigen3 multiply_by_rectified_linear_derivative method * Performs the operation C(i,j) = C(i,j) * (A(i,j)!=0) for all i and j */ template void multiply_by_rectified_linear_derivative_impl( - SGMatrix& a, SGMatrix& result) const; + const SGMatrix& a, SGMatrix& result) const; /** Eigen3 vector QR solver. */ template @@ -590,7 +591,8 @@ namespace shogun /** Applies the elementwise rectified linear function f(x) = max(0,x) */ template - void rectified_linear_impl(SGMatrix& a, SGMatrix& result) const; + void + rectified_linear_impl(const SGMatrix& a, SGMatrix& result) const; /** Eigen3 vector inplace scale method: result = alpha * A */ template diff --git a/src/shogun/mathematics/linalg/LinalgBackendViennaCL.h b/src/shogun/mathematics/linalg/LinalgBackendViennaCL.h index 89ec10e2065..e32bd1407d4 100644 --- a/src/shogun/mathematics/linalg/LinalgBackendViennaCL.h +++ b/src/shogun/mathematics/linalg/LinalgBackendViennaCL.h @@ -118,7 +118,7 @@ namespace shogun /** Implementation of @see LinalgBackendBase::logistic */ #define BACKEND_GENERIC_LOGISTIC(Type, Container) \ - virtual void logistic(Container& a, Container& result) const \ + virtual void logistic(const Container& a, Container& result) const \ { \ logistic_impl(a, result); \ } @@ -127,7 +127,7 @@ namespace shogun /** Implementation of @see LinalgBackendBase::matrix_prod */ #define BACKEND_GENERIC_IN_PLACE_MATRIX_PROD(Type, Container) \ - virtual void matrix_prod(SGMatrix& a, Container& b,\ + virtual void matrix_prod(const SGMatrix& a, const Container& b,\ Container& result, bool transpose_A, bool transpose_B) const \ { \ matrix_prod_impl(a, b, result, transpose_A, transpose_B); \ @@ -158,7 +158,7 @@ namespace shogun /** Implementation of @see linalg::multiply_by_logistic_derivative */ #define BACKEND_GENERIC_MULTIPLY_BY_LOGISTIC_DERIV(Type, Container) \ - virtual void multiply_by_logistic_derivative(Container& a,\ + virtual void multiply_by_logistic_derivative(const Container& a,\ Container& result) const \ { \ multiply_by_logistic_derivative_impl(a, result); \ @@ -168,7 +168,7 @@ namespace shogun /** Implementation of @see linalg::multiply_by_rectified_linear_derivative */ #define BACKEND_GENERIC_MULTIPLY_BY_RECTIFIED_LINEAR_DERIV(Type, Container) \ - virtual void multiply_by_rectified_linear_derivative(Container& a,\ + virtual void multiply_by_rectified_linear_derivative(const Container& a,\ Container& result) const \ { \ multiply_by_rectified_linear_derivative_impl(a, result); \ @@ -178,7 +178,7 @@ namespace shogun /** Implementation of @see linalg::rectified_linear */ #define BACKEND_GENERIC_RECTIFIED_LINEAR(Type, Container) \ - virtual void rectified_linear(Container& a, Container& result) const \ + virtual void rectified_linear(const Container& a, Container& result) const \ { \ rectified_linear_impl(a, result); \ } @@ -378,7 +378,7 @@ namespace shogun /** ViennaCL logistic method. Calculates f(x) = 1/(1+exp(-x)) */ template - void logistic_impl(SGMatrix& a, SGMatrix& result) const + void logistic_impl(const SGMatrix& a, SGMatrix& result) const { GPUMemoryViennaCL* a_gpu = cast_to_viennacl(a); GPUMemoryViennaCL* result_gpu = cast_to_viennacl(result); @@ -409,8 +409,8 @@ namespace shogun /** ViennaCL matrix * vector in-place product method */ template void matrix_prod_impl( - SGMatrix& a, SGVector& b, SGVector& result, bool transpose, - bool transpose_B = false) const + const SGMatrix& a, const SGVector& b, SGVector& result, + bool transpose, bool transpose_B = false) const { GPUMemoryViennaCL* a_gpu = cast_to_viennacl(a); GPUMemoryViennaCL* b_gpu = cast_to_viennacl(b); @@ -429,7 +429,7 @@ namespace shogun /** ViennaCL matrices in-place product method */ template void matrix_prod_impl( - SGMatrix& a, SGMatrix& b, SGMatrix& result, + const SGMatrix& a, const SGMatrix& b, SGMatrix& result, bool transpose_A, bool transpose_B) const { GPUMemoryViennaCL* a_gpu = cast_to_viennacl(a); @@ -503,7 +503,7 @@ namespace shogun */ template void multiply_by_logistic_derivative_impl( - SGMatrix& a, SGMatrix& result) const + const SGMatrix& a, SGMatrix& result) const { GPUMemoryViennaCL* a_gpu = cast_to_viennacl(a); GPUMemoryViennaCL* result_gpu = cast_to_viennacl(result); @@ -539,7 +539,7 @@ namespace shogun */ template void multiply_by_rectified_linear_derivative_impl( - SGMatrix& a, SGMatrix& result) const + const SGMatrix& a, SGMatrix& result) const { GPUMemoryViennaCL* a_gpu = cast_to_viennacl(a); GPUMemoryViennaCL* result_gpu = cast_to_viennacl(result); @@ -571,7 +571,8 @@ namespace shogun /** Applies the elementwise rectified linear function f(x) = max(0,x) */ template - void rectified_linear_impl(SGMatrix& a, SGMatrix& result) const + void + rectified_linear_impl(const SGMatrix& a, SGMatrix& result) const { GPUMemoryViennaCL* a_gpu = cast_to_viennacl(a); GPUMemoryViennaCL* result_gpu = cast_to_viennacl(result); @@ -602,7 +603,8 @@ namespace shogun /** ViennaCL vector inplace scale method: result = alpha * A */ template - void scale_impl(SGVector& a, SGVector& result, T alpha) const + void + scale_impl(const SGVector& a, SGVector& result, T alpha) const { GPUMemoryViennaCL* a_gpu = cast_to_viennacl(a); GPUMemoryViennaCL* result_gpu = cast_to_viennacl(result); @@ -613,7 +615,8 @@ namespace shogun /** ViennaCL vector inplace scale method: result = alpha * A */ template - void scale_impl(SGMatrix& a, SGMatrix& result, T alpha) const + void + scale_impl(const SGMatrix& a, SGMatrix& result, T alpha) const { GPUMemoryViennaCL* a_gpu = cast_to_viennacl(a); GPUMemoryViennaCL* result_gpu = cast_to_viennacl(result); diff --git a/src/shogun/mathematics/linalg/LinalgNamespace.h b/src/shogun/mathematics/linalg/LinalgNamespace.h index b93cf0f3d2a..b45595e276b 100644 --- a/src/shogun/mathematics/linalg/LinalgNamespace.h +++ b/src/shogun/mathematics/linalg/LinalgNamespace.h @@ -154,7 +154,7 @@ namespace shogun * @param b SGVector to be set */ template - void to_gpu(SGVector& a, SGVector& b) + void to_gpu(const SGVector& a, SGVector& b) { sg_linalg->m_gpu_transfer.lock(); @@ -190,7 +190,7 @@ namespace shogun * @param b SGMatrix to be set */ template - void to_gpu(SGMatrix& a, SGMatrix& b) + void to_gpu(const SGMatrix& a, SGMatrix& b) { sg_linalg->m_gpu_transfer.lock(); diff --git a/src/shogun/mathematics/linalg/LinalgSpecialPurposes.h b/src/shogun/mathematics/linalg/LinalgSpecialPurposes.h index 6da4582405b..c6e9b574153 100644 --- a/src/shogun/mathematics/linalg/LinalgSpecialPurposes.h +++ b/src/shogun/mathematics/linalg/LinalgSpecialPurposes.h @@ -49,7 +49,7 @@ namespace shogun * @param result The output matrix */ template - void logistic(SGMatrix& a, SGMatrix& result) + void logistic(const SGMatrix& a, SGMatrix& result) { REQUIRE( (a.num_rows == result.num_rows), "Number of rows of matrix a " @@ -74,8 +74,8 @@ namespace shogun * @param result The output matrix */ template - void - multiply_by_logistic_derivative(SGMatrix& a, SGMatrix& result) + void multiply_by_logistic_derivative( + const SGMatrix& a, SGMatrix& result) { REQUIRE( (a.num_rows == result.num_rows), "Number of rows of matrix a " @@ -100,7 +100,7 @@ namespace shogun */ template void multiply_by_rectified_linear_derivative( - SGMatrix& a, SGMatrix& result) + const SGMatrix& a, SGMatrix& result) { REQUIRE( (a.num_rows == result.num_rows), "Number of rows of matrix a " @@ -125,7 +125,7 @@ namespace shogun * @param result The output matrix */ template - void rectified_linear(SGMatrix& a, SGMatrix& result) + void rectified_linear(const SGMatrix& a, SGMatrix& result) { REQUIRE( (a.num_rows == result.num_rows), "Number of rows of matrix a " diff --git a/src/shogun/mathematics/linalg/backend/eigen/SpecialPurposes.cpp b/src/shogun/mathematics/linalg/backend/eigen/SpecialPurposes.cpp index 06e25d256b4..62a03cb3fc2 100644 --- a/src/shogun/mathematics/linalg/backend/eigen/SpecialPurposes.cpp +++ b/src/shogun/mathematics/linalg/backend/eigen/SpecialPurposes.cpp @@ -46,7 +46,7 @@ DEFINE_FOR_NON_INTEGER_REAL_PTYPE(BACKEND_GENERIC_CROSS_ENTROPY, SGMatrix) #define BACKEND_GENERIC_LOGISTIC(Type, Container) \ void LinalgBackendEigen::logistic( \ - Container& a, Container& result) const \ + const Container& a, Container& result) const \ { \ logistic_impl(a, result); \ } @@ -55,7 +55,7 @@ DEFINE_FOR_NUMERIC_PTYPE(BACKEND_GENERIC_LOGISTIC, SGMatrix) #define BACKEND_GENERIC_MULTIPLY_BY_LOGISTIC_DERIV(Type, Container) \ void LinalgBackendEigen::multiply_by_logistic_derivative( \ - Container& a, Container& result) const \ + const Container& a, Container& result) const \ { \ multiply_by_logistic_derivative_impl(a, result); \ } @@ -64,7 +64,7 @@ DEFINE_FOR_NUMERIC_PTYPE(BACKEND_GENERIC_MULTIPLY_BY_LOGISTIC_DERIV, SGMatrix) #define BACKEND_GENERIC_MULTIPLY_BY_RECTIFIED_LINEAR_DERIV(Type, Container) \ void LinalgBackendEigen::multiply_by_rectified_linear_derivative( \ - Container& a, Container& result) const \ + const Container& a, Container& result) const \ { \ multiply_by_rectified_linear_derivative_impl(a, result); \ } @@ -74,7 +74,7 @@ DEFINE_FOR_NON_INTEGER_REAL_PTYPE( #define BACKEND_GENERIC_RECTIFIED_LINEAR(Type, Container) \ void LinalgBackendEigen::rectified_linear( \ - Container& a, Container& result) const \ + const Container& a, Container& result) const \ { \ rectified_linear_impl(a, result); \ } @@ -115,7 +115,7 @@ T LinalgBackendEigen::cross_entropy_impl( template void LinalgBackendEigen::logistic_impl( - SGMatrix& a, SGMatrix& result) const + const SGMatrix& a, SGMatrix& result) const { typename SGMatrix::EigenMatrixXtMap a_eig = a; typename SGMatrix::EigenMatrixXtMap result_eig = result; @@ -125,7 +125,7 @@ void LinalgBackendEigen::logistic_impl( template void LinalgBackendEigen::multiply_by_logistic_derivative_impl( - SGMatrix& a, SGMatrix& result) const + const SGMatrix& a, SGMatrix& result) const { typename SGMatrix::EigenMatrixXtMap a_eig = a; typename SGMatrix::EigenMatrixXtMap result_eig = result; @@ -135,7 +135,7 @@ void LinalgBackendEigen::multiply_by_logistic_derivative_impl( template void LinalgBackendEigen::multiply_by_rectified_linear_derivative_impl( - SGMatrix& a, SGMatrix& result) const + const SGMatrix& a, SGMatrix& result) const { typename SGMatrix::EigenMatrixXtMap a_eig = a; typename SGMatrix::EigenMatrixXtMap result_eig = result; @@ -147,7 +147,7 @@ void LinalgBackendEigen::multiply_by_rectified_linear_derivative_impl( template void LinalgBackendEigen::rectified_linear_impl( - SGMatrix& a, SGMatrix& result) const + const SGMatrix& a, SGMatrix& result) const { typename SGMatrix::EigenMatrixXtMap a_eig = a; typename SGMatrix::EigenMatrixXtMap result_eig = result;