From f1e65e55de20a3e9c80e17e1c48672b8d68ee4ee Mon Sep 17 00:00:00 2001 From: conrad Date: Sun, 5 Apr 2026 02:22:30 +1000 Subject: [PATCH] handle NaNs when checking conformance --- include/armadillo_bits/Cube_meat.hpp | 6 +++--- include/armadillo_bits/Mat_meat.hpp | 6 +++--- include/armadillo_bits/SpMat_meat.hpp | 6 +++--- include/armadillo_bits/SpSubview_meat.hpp | 6 +++--- include/armadillo_bits/fn_clamp.hpp | 6 +++--- include/armadillo_bits/op_clamp_meat.hpp | 22 ++++++++++---------- include/armadillo_bits/spdiagview_meat.hpp | 2 +- include/armadillo_bits/subview_cube_meat.hpp | 6 +++--- include/armadillo_bits/subview_meat.hpp | 6 +++--- 9 files changed, 33 insertions(+), 33 deletions(-) diff --git a/include/armadillo_bits/Cube_meat.hpp b/include/armadillo_bits/Cube_meat.hpp index 2571abc1..f44d0465 100644 --- a/include/armadillo_bits/Cube_meat.hpp +++ b/include/armadillo_bits/Cube_meat.hpp @@ -4187,12 +4187,12 @@ Cube::clamp(const eT min_val, const eT max_val) if(is_cx::no) { - arma_conform_check( (access::tmp_real(min_val) > access::tmp_real(max_val)), "Cube::clamp(): min_val must be less than max_val" ); + arma_conform_check( ((access::tmp_real(min_val) <= access::tmp_real(max_val)) == false), "Cube::clamp(): min_val must be less than max_val" ); } else { - arma_conform_check( (access::tmp_real(min_val) > access::tmp_real(max_val)), "Cube::clamp(): real(min_val) must be less than real(max_val)" ); - arma_conform_check( (access::tmp_imag(min_val) > access::tmp_imag(max_val)), "Cube::clamp(): imag(min_val) must be less than imag(max_val)" ); + arma_conform_check( ((access::tmp_real(min_val) <= access::tmp_real(max_val)) == false), "Cube::clamp(): real(min_val) must be less than real(max_val)" ); + arma_conform_check( ((access::tmp_imag(min_val) <= access::tmp_imag(max_val)) == false), "Cube::clamp(): imag(min_val) must be less than imag(max_val)" ); } arrayops::clamp(memptr(), n_elem, min_val, max_val); diff --git a/include/armadillo_bits/Mat_meat.hpp b/include/armadillo_bits/Mat_meat.hpp index cd3ee13e..b15d77a8 100644 --- a/include/armadillo_bits/Mat_meat.hpp +++ b/include/armadillo_bits/Mat_meat.hpp @@ -7885,12 +7885,12 @@ Mat::clamp(const eT min_val, const eT max_val) if(is_cx::no) { - arma_conform_check( (access::tmp_real(min_val) > access::tmp_real(max_val)), "Mat::clamp(): min_val must be less than max_val" ); + arma_conform_check( ((access::tmp_real(min_val) <= access::tmp_real(max_val)) == false), "Mat::clamp(): min_val must be less than max_val" ); } else { - arma_conform_check( (access::tmp_real(min_val) > access::tmp_real(max_val)), "Mat::clamp(): real(min_val) must be less than real(max_val)" ); - arma_conform_check( (access::tmp_imag(min_val) > access::tmp_imag(max_val)), "Mat::clamp(): imag(min_val) must be less than imag(max_val)" ); + arma_conform_check( ((access::tmp_real(min_val) <= access::tmp_real(max_val)) == false), "Mat::clamp(): real(min_val) must be less than real(max_val)" ); + arma_conform_check( ((access::tmp_imag(min_val) <= access::tmp_imag(max_val)) == false), "Mat::clamp(): imag(min_val) must be less than imag(max_val)" ); } arrayops::clamp(memptr(), n_elem, min_val, max_val); diff --git a/include/armadillo_bits/SpMat_meat.hpp b/include/armadillo_bits/SpMat_meat.hpp index c17fed4d..208d85be 100644 --- a/include/armadillo_bits/SpMat_meat.hpp +++ b/include/armadillo_bits/SpMat_meat.hpp @@ -4204,12 +4204,12 @@ SpMat::clamp(const eT min_val, const eT max_val) if(is_cx::no) { - arma_conform_check( (access::tmp_real(min_val) > access::tmp_real(max_val)), "SpMat::clamp(): min_val must be less than max_val" ); + arma_conform_check( ((access::tmp_real(min_val) <= access::tmp_real(max_val)) == false), "SpMat::clamp(): min_val must be less than max_val" ); } else { - arma_conform_check( (access::tmp_real(min_val) > access::tmp_real(max_val)), "SpMat::clamp(): real(min_val) must be less than real(max_val)" ); - arma_conform_check( (access::tmp_imag(min_val) > access::tmp_imag(max_val)), "SpMat::clamp(): imag(min_val) must be less than imag(max_val)" ); + arma_conform_check( ((access::tmp_real(min_val) <= access::tmp_real(max_val)) == false), "SpMat::clamp(): real(min_val) must be less than real(max_val)" ); + arma_conform_check( ((access::tmp_imag(min_val) <= access::tmp_imag(max_val)) == false), "SpMat::clamp(): imag(min_val) must be less than imag(max_val)" ); } if(n_nonzero == 0) { return *this; } diff --git a/include/armadillo_bits/SpSubview_meat.hpp b/include/armadillo_bits/SpSubview_meat.hpp index 22b06c69..dda6dab0 100644 --- a/include/armadillo_bits/SpSubview_meat.hpp +++ b/include/armadillo_bits/SpSubview_meat.hpp @@ -946,12 +946,12 @@ SpSubview::clamp(const eT min_val, const eT max_val) if(is_cx::no) { - arma_conform_check( (access::tmp_real(min_val) > access::tmp_real(max_val)), "SpSubview::clamp(): min_val must be less than max_val" ); + arma_conform_check( ((access::tmp_real(min_val) <= access::tmp_real(max_val)) == false), "SpSubview::clamp(): min_val must be less than max_val" ); } else { - arma_conform_check( (access::tmp_real(min_val) > access::tmp_real(max_val)), "SpSubview::clamp(): real(min_val) must be less than real(max_val)" ); - arma_conform_check( (access::tmp_imag(min_val) > access::tmp_imag(max_val)), "SpSubview::clamp(): imag(min_val) must be less than imag(max_val)" ); + arma_conform_check( ((access::tmp_real(min_val) <= access::tmp_real(max_val)) == false), "SpSubview::clamp(): real(min_val) must be less than real(max_val)" ); + arma_conform_check( ((access::tmp_imag(min_val) <= access::tmp_imag(max_val)) == false), "SpSubview::clamp(): imag(min_val) must be less than imag(max_val)" ); } if((n_elem == 0) || (n_nonzero == 0)) { return; } diff --git a/include/armadillo_bits/fn_clamp.hpp b/include/armadillo_bits/fn_clamp.hpp index 17618af6..77d4652d 100644 --- a/include/armadillo_bits/fn_clamp.hpp +++ b/include/armadillo_bits/fn_clamp.hpp @@ -97,12 +97,12 @@ clamp(const SpBase& X, const typename T1::elem_type m if(is_cx::no) { - arma_conform_check( (access::tmp_real(min_val) > access::tmp_real(max_val)), "clamp(): min_val must be less than max_val" ); + arma_conform_check( ((access::tmp_real(min_val) <= access::tmp_real(max_val)) == false), "clamp(): min_val must be less than max_val" ); } else { - arma_conform_check( (access::tmp_real(min_val) > access::tmp_real(max_val)), "clamp(): real(min_val) must be less than real(max_val)" ); - arma_conform_check( (access::tmp_imag(min_val) > access::tmp_imag(max_val)), "clamp(): imag(min_val) must be less than imag(max_val)" ); + arma_conform_check( ((access::tmp_real(min_val) <= access::tmp_real(max_val)) == false), "clamp(): real(min_val) must be less than real(max_val)" ); + arma_conform_check( ((access::tmp_imag(min_val) <= access::tmp_imag(max_val)) == false), "clamp(): imag(min_val) must be less than imag(max_val)" ); } SpMat out = X.get_ref(); diff --git a/include/armadillo_bits/op_clamp_meat.hpp b/include/armadillo_bits/op_clamp_meat.hpp index 2dbf6f80..65531d2e 100644 --- a/include/armadillo_bits/op_clamp_meat.hpp +++ b/include/armadillo_bits/op_clamp_meat.hpp @@ -34,7 +34,7 @@ op_clamp::apply(Mat& out, const mtOp max_val), "clamp(): min_val must be less than max_val" ); + arma_conform_check( ((min_val <= max_val) == false), "clamp(): min_val must be less than max_val" ); if(is_Mat::value) { @@ -83,7 +83,7 @@ op_clamp::apply(Mat_noalias& out, const mtOp max_val), "clamp(): min_val must be less than max_val" ); + arma_conform_check( ((min_val <= max_val) == false), "clamp(): min_val must be less than max_val" ); if((quasi_unwrap::has_orig_mem) || (is_Mat::stored_type>::value) || (arma_config::openmp && Proxy::use_mp)) { @@ -186,7 +186,7 @@ op_clamp::apply(Cube& out, const mtOpCube max_val), "clamp(): min_val must be less than max_val" ); + arma_conform_check( ((min_val <= max_val) == false), "clamp(): min_val must be less than max_val" ); if(is_Cube::value) { @@ -350,8 +350,8 @@ op_clamp_cx::apply_direct(Mat& out, const Mat& X, const eT min_val, cons const T max_val_real = std::real(max_val); const T max_val_imag = std::imag(max_val); - arma_conform_check( (min_val_real > max_val_real), "clamp(): real(min_val) must be less than real(max_val)" ); - arma_conform_check( (min_val_imag > max_val_imag), "clamp(): imag(min_val) must be less than imag(max_val)" ); + arma_conform_check( ((min_val_real <= max_val_real) == false), "clamp(): real(min_val) must be less than real(max_val)" ); + arma_conform_check( ((min_val_imag <= max_val_imag) == false), "clamp(): imag(min_val) must be less than imag(max_val)" ); if(&out != &X) { @@ -401,8 +401,8 @@ op_clamp_cx::apply_proxy_noalias(Mat& out, const Proxy max_val_real), "clamp(): real(min_val) must be less than real(max_val)" ); - arma_conform_check( (min_val_imag > max_val_imag), "clamp(): imag(min_val) must be less than imag(max_val)" ); + arma_conform_check( ((min_val_real <= max_val_real) == false), "clamp(): real(min_val) must be less than real(max_val)" ); + arma_conform_check( ((min_val_imag <= max_val_imag) == false), "clamp(): imag(min_val) must be less than imag(max_val)" ); const uword n_rows = P.get_n_rows(); const uword n_cols = P.get_n_cols(); @@ -503,8 +503,8 @@ op_clamp_cx::apply_direct(Cube& out, const Cube& X, const eT min_val, co const T max_val_real = std::real(max_val); const T max_val_imag = std::imag(max_val); - arma_conform_check( (min_val_real > max_val_real), "clamp(): real(min_val) must be less than real(max_val)" ); - arma_conform_check( (min_val_imag > max_val_imag), "clamp(): imag(min_val) must be less than imag(max_val)" ); + arma_conform_check( ((min_val_real <= max_val_real) == false), "clamp(): real(min_val) must be less than real(max_val)" ); + arma_conform_check( ((min_val_imag <= max_val_imag) == false), "clamp(): imag(min_val) must be less than imag(max_val)" ); if(&out != &X) { @@ -554,8 +554,8 @@ op_clamp_cx::apply_proxy_noalias(Cube& out, const ProxyC const T max_val_real = std::real(max_val); const T max_val_imag = std::imag(max_val); - arma_conform_check( (min_val_real > max_val_real), "clamp(): real(min_val) must be less than real(max_val)" ); - arma_conform_check( (min_val_imag > max_val_imag), "clamp(): imag(min_val) must be less than imag(max_val)" ); + arma_conform_check( ((min_val_real <= max_val_real) == false), "clamp(): real(min_val) must be less than real(max_val)" ); + arma_conform_check( ((min_val_imag <= max_val_imag) == false), "clamp(): imag(min_val) must be less than imag(max_val)" ); const uword n_rows = P.get_n_rows(); const uword n_cols = P.get_n_cols(); diff --git a/include/armadillo_bits/spdiagview_meat.hpp b/include/armadillo_bits/spdiagview_meat.hpp index 721afa61..1d3c4a4e 100644 --- a/include/armadillo_bits/spdiagview_meat.hpp +++ b/include/armadillo_bits/spdiagview_meat.hpp @@ -923,7 +923,7 @@ spdiagview::clamp(const eT min_val, const eT max_val) { arma_debug_sigprint(); - SpMat tmp(*this); + Mat tmp(*this); tmp.clamp(min_val, max_val); diff --git a/include/armadillo_bits/subview_cube_meat.hpp b/include/armadillo_bits/subview_cube_meat.hpp index 776c1b7c..e031e074 100644 --- a/include/armadillo_bits/subview_cube_meat.hpp +++ b/include/armadillo_bits/subview_cube_meat.hpp @@ -1226,12 +1226,12 @@ subview_cube::clamp(const eT min_val, const eT max_val) if(is_cx::no) { - arma_conform_check( (access::tmp_real(min_val) > access::tmp_real(max_val)), "subview_cube::clamp(): min_val must be less than max_val" ); + arma_conform_check( ((access::tmp_real(min_val) <= access::tmp_real(max_val)) == false), "subview_cube::clamp(): min_val must be less than max_val" ); } else { - arma_conform_check( (access::tmp_real(min_val) > access::tmp_real(max_val)), "subview_cube::clamp(): real(min_val) must be less than real(max_val)" ); - arma_conform_check( (access::tmp_imag(min_val) > access::tmp_imag(max_val)), "subview_cube::clamp(): imag(min_val) must be less than imag(max_val)" ); + arma_conform_check( ((access::tmp_real(min_val) <= access::tmp_real(max_val)) == false), "subview_cube::clamp(): real(min_val) must be less than real(max_val)" ); + arma_conform_check( ((access::tmp_imag(min_val) <= access::tmp_imag(max_val)) == false), "subview_cube::clamp(): imag(min_val) must be less than imag(max_val)" ); } const uword local_n_rows = n_rows; diff --git a/include/armadillo_bits/subview_meat.hpp b/include/armadillo_bits/subview_meat.hpp index c09e9f56..556b3c1f 100644 --- a/include/armadillo_bits/subview_meat.hpp +++ b/include/armadillo_bits/subview_meat.hpp @@ -1027,12 +1027,12 @@ subview::clamp(const eT min_val, const eT max_val) if(is_cx::no) { - arma_conform_check( (access::tmp_real(min_val) > access::tmp_real(max_val)), "subview::clamp(): min_val must be less than max_val" ); + arma_conform_check( ((access::tmp_real(min_val) <= access::tmp_real(max_val)) == false), "subview::clamp(): min_val must be less than max_val" ); } else { - arma_conform_check( (access::tmp_real(min_val) > access::tmp_real(max_val)), "subview::clamp(): real(min_val) must be less than real(max_val)" ); - arma_conform_check( (access::tmp_imag(min_val) > access::tmp_imag(max_val)), "subview::clamp(): imag(min_val) must be less than imag(max_val)" ); + arma_conform_check( ((access::tmp_real(min_val) <= access::tmp_real(max_val)) == false), "subview::clamp(): real(min_val) must be less than real(max_val)" ); + arma_conform_check( ((access::tmp_imag(min_val) <= access::tmp_imag(max_val)) == false), "subview::clamp(): imag(min_val) must be less than imag(max_val)" ); } subview& s = *this;