From 7c8c10ea20bb3e79fce0188c4df3ce7eff416fa7 Mon Sep 17 00:00:00 2001 From: conrad Date: Fri, 7 Jun 2024 23:02:38 +1000 Subject: [PATCH] rework sparse vecnorm() to use mtSpToDOp --- include/armadillo | 4 +-- include/armadillo_bits/fn_vecnorm.hpp | 16 ++++++------ ...norm_bones.hpp => op_sp_vecnorm_bones.hpp} | 10 +++---- ...ecnorm_meat.hpp => op_sp_vecnorm_meat.hpp} | 26 +++++++------------ 4 files changed, 24 insertions(+), 32 deletions(-) rename include/armadillo_bits/{spop_vecnorm_bones.hpp => op_sp_vecnorm_bones.hpp} (79%) rename include/armadillo_bits/{spop_vecnorm_meat.hpp => op_sp_vecnorm_meat.hpp} (83%) diff --git a/include/armadillo b/include/armadillo index 1fa5d7c9..0a24ae71 100644 --- a/include/armadillo +++ b/include/armadillo @@ -323,6 +323,7 @@ namespace arma #include "armadillo_bits/op_sp_mean_bones.hpp" #include "armadillo_bits/op_sp_var_bones.hpp" #include "armadillo_bits/op_sp_stddev_bones.hpp" + #include "armadillo_bits/op_sp_vecnorm_bones.hpp" #include "armadillo_bits/op_powmat_bones.hpp" #include "armadillo_bits/op_rank_bones.hpp" #include "armadillo_bits/op_row_as_mat_bones.hpp" @@ -370,7 +371,6 @@ namespace arma #include "armadillo_bits/spop_repmat_bones.hpp" #include "armadillo_bits/spop_vectorise_bones.hpp" #include "armadillo_bits/spop_norm_bones.hpp" - #include "armadillo_bits/spop_vecnorm_bones.hpp" #include "armadillo_bits/spop_shift_bones.hpp" #include "armadillo_bits/spglue_plus_bones.hpp" @@ -773,6 +773,7 @@ namespace arma #include "armadillo_bits/op_sp_mean_meat.hpp" #include "armadillo_bits/op_sp_var_meat.hpp" #include "armadillo_bits/op_sp_stddev_meat.hpp" + #include "armadillo_bits/op_sp_vecnorm_meat.hpp" #include "armadillo_bits/op_powmat_meat.hpp" #include "armadillo_bits/op_rank_meat.hpp" #include "armadillo_bits/op_row_as_mat_meat.hpp" @@ -820,7 +821,6 @@ namespace arma #include "armadillo_bits/spop_repmat_meat.hpp" #include "armadillo_bits/spop_vectorise_meat.hpp" #include "armadillo_bits/spop_norm_meat.hpp" - #include "armadillo_bits/spop_vecnorm_meat.hpp" #include "armadillo_bits/spop_shift_meat.hpp" #include "armadillo_bits/spglue_plus_meat.hpp" diff --git a/include/armadillo_bits/fn_vecnorm.hpp b/include/armadillo_bits/fn_vecnorm.hpp index 07763ed9..ff0c5635 100644 --- a/include/armadillo_bits/fn_vecnorm.hpp +++ b/include/armadillo_bits/fn_vecnorm.hpp @@ -249,7 +249,7 @@ typename enable_if2 < is_arma_sparse_type::value && resolves_to_sparse_vector::no, - const mtSpOp + const mtSpToDOp >::result vecnorm ( @@ -265,7 +265,7 @@ vecnorm const uword dim = 0; - return mtSpOp(X, k, dim); + return mtSpToDOp(X, k, dim); } @@ -273,7 +273,7 @@ vecnorm template arma_warn_unused inline -const mtSpOp +const mtSpToDOp vecnorm ( const SpBase& X, @@ -285,7 +285,7 @@ vecnorm arma_debug_sigprint(); arma_ignore(junk); - return mtSpOp(X.get_ref(), k, dim); + return mtSpToDOp(X.get_ref(), k, dim); } @@ -327,7 +327,7 @@ typename enable_if2 < is_arma_sparse_type::value && resolves_to_sparse_vector::no, - const mtSpOp + const mtSpToDOp >::result vecnorm ( @@ -350,7 +350,7 @@ vecnorm const uword dim = 0; - return mtSpOp(X, method_id, dim); + return mtSpToDOp(X, method_id, dim); } @@ -358,7 +358,7 @@ vecnorm template arma_warn_unused inline -const mtSpOp +const mtSpToDOp vecnorm ( const SpBase& X, @@ -377,7 +377,7 @@ vecnorm if( (sig == 'i') || (sig == 'I') || (sig == '+') ) { method_id = 1; } if( (sig == '-') ) { method_id = 2; } - return mtSpOp(X.get_ref(), method_id, dim); + return mtSpToDOp(X.get_ref(), method_id, dim); } diff --git a/include/armadillo_bits/spop_vecnorm_bones.hpp b/include/armadillo_bits/op_sp_vecnorm_bones.hpp similarity index 79% rename from include/armadillo_bits/spop_vecnorm_bones.hpp rename to include/armadillo_bits/op_sp_vecnorm_bones.hpp index eaeecd88..e049da35 100644 --- a/include/armadillo_bits/spop_vecnorm_bones.hpp +++ b/include/armadillo_bits/op_sp_vecnorm_bones.hpp @@ -16,17 +16,17 @@ // ------------------------------------------------------------------------ -//! \addtogroup spop_vecnorm +//! \addtogroup op_sp_vecnorm //! @{ -class spop_vecnorm +class op_sp_vecnorm : public traits_op_xvec { public: template - inline static void apply(SpMat& out, const mtSpOp& expr); + inline static void apply(Mat& out, const mtSpToDOp& expr); template inline static void apply_direct(Mat< typename get_pod_type::result >& out, const SpMat& X, const uword k); @@ -36,13 +36,13 @@ class spop_vecnorm // -class spop_vecnorm_ext +class op_sp_vecnorm_ext : public traits_op_xvec { public: template - inline static void apply(SpMat& out, const mtSpOp& expr); + inline static void apply(Mat& out, const mtSpToDOp& expr); template inline static void apply_direct(Mat< typename get_pod_type::result >& out, const SpMat& X, const uword method_id); diff --git a/include/armadillo_bits/spop_vecnorm_meat.hpp b/include/armadillo_bits/op_sp_vecnorm_meat.hpp similarity index 83% rename from include/armadillo_bits/spop_vecnorm_meat.hpp rename to include/armadillo_bits/op_sp_vecnorm_meat.hpp index ab90a02a..43e121c9 100644 --- a/include/armadillo_bits/spop_vecnorm_meat.hpp +++ b/include/armadillo_bits/op_sp_vecnorm_meat.hpp @@ -16,7 +16,7 @@ // ------------------------------------------------------------------------ -//! \addtogroup spop_vecnorm +//! \addtogroup op_sp_vecnorm //! @{ @@ -24,7 +24,7 @@ template inline void -spop_vecnorm::apply(SpMat& out, const mtSpOp& expr) +op_sp_vecnorm::apply(Mat& out, const mtSpToDOp& expr) { arma_debug_sigprint(); @@ -44,11 +44,7 @@ spop_vecnorm::apply(SpMat& out, const mtSpOp tmp; - - spop_vecnorm::apply_direct(tmp, X, k); - - out = tmp; + op_sp_vecnorm::apply_direct(out, X, k); } else if(dim == 1) @@ -58,7 +54,7 @@ spop_vecnorm::apply(SpMat& out, const mtSpOp& out, const mtSpOp inline void -spop_vecnorm::apply_direct(Mat< typename get_pod_type::result >& out, const SpMat& X, const uword k) +op_sp_vecnorm::apply_direct(Mat< typename get_pod_type::result >& out, const SpMat& X, const uword k) { arma_debug_sigprint(); @@ -114,7 +110,7 @@ spop_vecnorm::apply_direct(Mat< typename get_pod_type::result >& out, const template inline void -spop_vecnorm_ext::apply(SpMat& out, const mtSpOp& expr) +op_sp_vecnorm_ext::apply(Mat& out, const mtSpToDOp& expr) { arma_debug_sigprint(); @@ -134,11 +130,7 @@ spop_vecnorm_ext::apply(SpMat& out, const mtSpOp tmp; - - spop_vecnorm_ext::apply_direct(tmp, X, method_id); - - out = tmp; + op_sp_vecnorm_ext::apply_direct(out, X, method_id); } else if(dim == 1) @@ -148,7 +140,7 @@ spop_vecnorm_ext::apply(SpMat& out, const mtSpOp& out, const mtSpOp inline void -spop_vecnorm_ext::apply_direct(Mat< typename get_pod_type::result >& out, const SpMat& X, const uword method_id) +op_sp_vecnorm_ext::apply_direct(Mat< typename get_pod_type::result >& out, const SpMat& X, const uword method_id) { arma_debug_sigprint();