diff --git a/include/armadillo_bits/op_inv_gen_bones.hpp b/include/armadillo_bits/op_inv_gen_bones.hpp index 0dda8b3c..589d811e 100644 --- a/include/armadillo_bits/op_inv_gen_bones.hpp +++ b/include/armadillo_bits/op_inv_gen_bones.hpp @@ -107,16 +107,19 @@ namespace inv_opts static constexpr uword flag_none = uword(0 ); static constexpr uword flag_tiny = uword(1u << 0); - static constexpr uword flag_likely_sympd = uword(1u << 1); - static constexpr uword flag_no_sympd = uword(1u << 2); + static constexpr uword flag_allow_approx = uword(1u << 1); + static constexpr uword flag_likely_sympd = uword(1u << 2); + static constexpr uword flag_no_sympd = uword(1u << 3); struct opts_none : public opts { inline opts_none() : opts(flag_none ) {} }; struct opts_tiny : public opts { inline opts_tiny() : opts(flag_tiny ) {} }; + struct opts_allow_approx : public opts { inline opts_allow_approx() : opts(flag_allow_approx) {} }; struct opts_likely_sympd : public opts { inline opts_likely_sympd() : opts(flag_likely_sympd) {} }; struct opts_no_sympd : public opts { inline opts_no_sympd() : opts(flag_no_sympd ) {} }; static const opts_none none; static const opts_tiny tiny; + static const opts_allow_approx allow_approx; static const opts_likely_sympd likely_sympd; static const opts_no_sympd no_sympd; } diff --git a/include/armadillo_bits/op_inv_gen_meat.hpp b/include/armadillo_bits/op_inv_gen_meat.hpp index f21eac1a..7517a77e 100644 --- a/include/armadillo_bits/op_inv_gen_meat.hpp +++ b/include/armadillo_bits/op_inv_gen_meat.hpp @@ -83,22 +83,39 @@ op_inv_gen_full::apply_direct(Mat& out, const Base A = expr.get_ref(); + + return op_pinv::apply_gen(out, A, T(0), uword(0)); + } + } + out = expr.get_ref(); arma_debug_check( (out.is_square() == false), caller_sig, ": given matrix must be square sized" ); diff --git a/include/armadillo_bits/op_inv_spd_meat.hpp b/include/armadillo_bits/op_inv_spd_meat.hpp index 29562453..155acd98 100644 --- a/include/armadillo_bits/op_inv_spd_meat.hpp +++ b/include/armadillo_bits/op_inv_spd_meat.hpp @@ -89,18 +89,34 @@ op_inv_spd_full::apply_direct(Mat& out, const Base A = expr.get_ref(); + + return op_pinv::apply_sym(out, A, T(0), uword(0)); + } + } + out = expr.get_ref(); arma_debug_check( (out.is_square() == false), "inv_sympd(): given matrix must be square sized" ); diff --git a/include/armadillo_bits/op_pinv_meat.hpp b/include/armadillo_bits/op_pinv_meat.hpp index 79cde740..be0002ab 100644 --- a/include/armadillo_bits/op_pinv_meat.hpp +++ b/include/armadillo_bits/op_pinv_meat.hpp @@ -224,7 +224,7 @@ op_pinv::apply_sym(Mat& out, const Mat& A, typename get_pod_type::re - + template inline bool