From 7d417bc4843ec88ea30eaa5a9181bc687e557cdf Mon Sep 17 00:00:00 2001 From: conrad Date: Wed, 23 Mar 2022 15:06:30 +1000 Subject: [PATCH] move definitions of inv_sympd() to separate file --- include/armadillo | 1 + include/armadillo_bits/fn_inv.hpp | 113 +------------------- include/armadillo_bits/fn_inv_sympd.hpp | 131 ++++++++++++++++++++++++ 3 files changed, 133 insertions(+), 112 deletions(-) create mode 100644 include/armadillo_bits/fn_inv_sympd.hpp diff --git a/include/armadillo b/include/armadillo index 3182db65..8251f9db 100644 --- a/include/armadillo +++ b/include/armadillo @@ -425,6 +425,7 @@ namespace arma #include "armadillo_bits/fn_diagmat.hpp" #include "armadillo_bits/fn_diagvec.hpp" #include "armadillo_bits/fn_inv.hpp" + #include "armadillo_bits/fn_inv_sympd.hpp" #include "armadillo_bits/fn_trace.hpp" #include "armadillo_bits/fn_trans.hpp" #include "armadillo_bits/fn_det.hpp" diff --git a/include/armadillo_bits/fn_inv.hpp b/include/armadillo_bits/fn_inv.hpp index 4cb2f74c..ecec0300 100644 --- a/include/armadillo_bits/fn_inv.hpp +++ b/include/armadillo_bits/fn_inv.hpp @@ -16,122 +16,11 @@ // ------------------------------------------------------------------------ -//! \addtogroup fn_inv +//! \addtogroup fn_inv_sympd //! @{ -template -arma_warn_unused -arma_inline -typename enable_if2< is_supported_blas_type::value, const Op >::result -inv - ( - const Base& X - ) - { - arma_extra_debug_sigprint(); - - return Op(X.get_ref()); - } - - - -template -inline -typename enable_if2< is_supported_blas_type::value, bool >::result -inv - ( - Mat& out, - const Base& X - ) - { - arma_extra_debug_sigprint(); - - const bool status = op_inv_gen_default::apply_direct(out, X.get_ref(), "inv()"); - - if(status == false) - { - out.soft_reset(); - arma_debug_warn_level(3, "inv(): matrix is singular"); - } - - return status; - } - - - -template -arma_warn_unused -arma_inline -typename enable_if2< is_supported_blas_type::value, const Op >::result -inv - ( - const Base& X, - const inv_opts::opts& opts - ) - { - arma_extra_debug_sigprint(); - - return Op(X.get_ref(), opts.flags, uword(0)); - } - - - -template -inline -typename enable_if2< is_supported_blas_type::value, bool >::result -inv - ( - Mat& out, - const Base& X, - const inv_opts::opts& opts - ) - { - arma_extra_debug_sigprint(); - - const bool status = op_inv_gen_full::apply_direct(out, X.get_ref(), "inv()", opts.flags); - - if(status == false) - { - out.soft_reset(); - arma_debug_warn_level(3, "inv(): matrix is singular"); - } - - return status; - } - - - -template -inline -typename enable_if2< is_supported_blas_type::value, bool >::result -inv - ( - Mat& out_inv, - typename T1::pod_type& out_rcond, - const Base& X - ) - { - arma_extra_debug_sigprint(); - - const bool status = op_inv_gen_rcond::apply_direct(out_inv, out_rcond, X.get_ref()); - - if(status == false) - { - out_inv.soft_reset(); - arma_debug_warn_level(3, "inv(): matrix is singular"); - } - - return status; - } - - - -// - - - template arma_warn_unused arma_inline diff --git a/include/armadillo_bits/fn_inv_sympd.hpp b/include/armadillo_bits/fn_inv_sympd.hpp new file mode 100644 index 00000000..cb603a44 --- /dev/null +++ b/include/armadillo_bits/fn_inv_sympd.hpp @@ -0,0 +1,131 @@ +// SPDX-License-Identifier: Apache-2.0 +// +// Copyright 2008-2016 Conrad Sanderson (http://conradsanderson.id.au) +// Copyright 2008-2016 National ICT Australia (NICTA) +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// ------------------------------------------------------------------------ + + +//! \addtogroup fn_inv +//! @{ + + + +template +arma_warn_unused +arma_inline +typename enable_if2< is_supported_blas_type::value, const Op >::result +inv + ( + const Base& X + ) + { + arma_extra_debug_sigprint(); + + return Op(X.get_ref()); + } + + + +template +inline +typename enable_if2< is_supported_blas_type::value, bool >::result +inv + ( + Mat& out, + const Base& X + ) + { + arma_extra_debug_sigprint(); + + const bool status = op_inv_gen_default::apply_direct(out, X.get_ref(), "inv()"); + + if(status == false) + { + out.soft_reset(); + arma_debug_warn_level(3, "inv(): matrix is singular"); + } + + return status; + } + + + +template +arma_warn_unused +arma_inline +typename enable_if2< is_supported_blas_type::value, const Op >::result +inv + ( + const Base& X, + const inv_opts::opts& opts + ) + { + arma_extra_debug_sigprint(); + + return Op(X.get_ref(), opts.flags, uword(0)); + } + + + +template +inline +typename enable_if2< is_supported_blas_type::value, bool >::result +inv + ( + Mat& out, + const Base& X, + const inv_opts::opts& opts + ) + { + arma_extra_debug_sigprint(); + + const bool status = op_inv_gen_full::apply_direct(out, X.get_ref(), "inv()", opts.flags); + + if(status == false) + { + out.soft_reset(); + arma_debug_warn_level(3, "inv(): matrix is singular"); + } + + return status; + } + + + +template +inline +typename enable_if2< is_supported_blas_type::value, bool >::result +inv + ( + Mat& out_inv, + typename T1::pod_type& out_rcond, + const Base& X + ) + { + arma_extra_debug_sigprint(); + + const bool status = op_inv_gen_rcond::apply_direct(out_inv, out_rcond, X.get_ref()); + + if(status == false) + { + out_inv.soft_reset(); + arma_debug_warn_level(3, "inv(): matrix is singular"); + } + + return status; + } + + + +//! @}