diff --git a/include/armadillo_bits/glue_times_meat.hpp b/include/armadillo_bits/glue_times_meat.hpp index 29671d40..92d69599 100644 --- a/include/armadillo_bits/glue_times_meat.hpp +++ b/include/armadillo_bits/glue_times_meat.hpp @@ -119,7 +119,7 @@ glue_times_redirect2_helper::apply(Mat& out, const arma_conform_assert_mul_size(A, B, "matrix multiplication"); - const bool is_sym = (strip_inv::do_inv_spd) ? false : ( arma_config::optimise_sym && (auxlib::crippled_lapack(A) == false) && sym_helper::is_approx_sym(A, uword(100)) ); + const bool is_sym = (strip_inv::do_inv_spd) ? false : ( arma_config::optimise_sym && (auxlib::crippled_lapack(A) == false) && (is_sym_expr::eval(X.A) || sym_helper::is_approx_sym(A, uword(100))) ); const bool status = (strip_inv::do_inv_spd) ? auxlib::solve_sympd_fast(out, A, B) : ( (is_sym) ? auxlib::solve_sym_fast(out, A, B) : auxlib::solve_square_fast(out, A, B) ); @@ -280,7 +280,7 @@ glue_times_redirect3_helper::apply(Mat& out, const if(is_cx::yes) { arma_warn(1, "inv_sympd(): given matrix is not hermitian"); } } - const bool is_sym = (strip_inv::do_inv_spd) ? false : ( arma_config::optimise_sym && (auxlib::crippled_lapack(A) == false) && sym_helper::is_approx_sym(A, uword(100)) ); + const bool is_sym = (strip_inv::do_inv_spd) ? false : ( arma_config::optimise_sym && (auxlib::crippled_lapack(A) == false) && (is_sym_expr::eval(X.A.A) || sym_helper::is_approx_sym(A, uword(100))) ); const bool status = (strip_inv::do_inv_spd) ? auxlib::solve_sympd_fast(out, A, BC) : ( (is_sym) ? auxlib::solve_sym_fast(out, A, BC) : auxlib::solve_square_fast(out, A, BC) ); @@ -319,7 +319,7 @@ glue_times_redirect3_helper::apply(Mat& out, const Mat solve_result; - const bool is_sym = (strip_inv::do_inv_spd) ? false : ( arma_config::optimise_sym && (auxlib::crippled_lapack(B) == false) && sym_helper::is_approx_sym(B, uword(100)) ); + const bool is_sym = (strip_inv::do_inv_spd) ? false : ( arma_config::optimise_sym && (auxlib::crippled_lapack(B) == false) && (is_sym_expr::eval(X.A.B) || sym_helper::is_approx_sym(B, uword(100))) ); const bool status = (strip_inv::do_inv_spd) ? auxlib::solve_sympd_fast(solve_result, B, C) : ( (is_sym) ? auxlib::solve_sym_fast(solve_result, B, C) : auxlib::solve_square_fast(solve_result, B, C) );