Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package armadillo for openSUSE:Factory checked in at 2021-12-27 16:07:30 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/armadillo (Old) and /work/SRC/openSUSE:Factory/.armadillo.new.2520 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "armadillo" Mon Dec 27 16:07:30 2021 rev:156 rq:942789 version:10.7.5 Changes: -------- --- /work/SRC/openSUSE:Factory/armadillo/armadillo.changes 2021-11-18 10:33:52.343909568 +0100 +++ /work/SRC/openSUSE:Factory/.armadillo.new.2520/armadillo.changes 2021-12-27 16:07:42.753713888 +0100 @@ -1,0 +2,6 @@ +Fri Dec 24 21:29:45 UTC 2021 - Atri Bhattacharya <badshah...@gmail.com> + +- Update to version 10.7.5: + * Undocumented bug fixes. + +------------------------------------------------------------------- Old: ---- armadillo-10.7.3.tar.xz New: ---- armadillo-10.7.5.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ armadillo.spec ++++++ --- /var/tmp/diff_new_pack.LIXSPp/_old 2021-12-27 16:07:43.285714266 +0100 +++ /var/tmp/diff_new_pack.LIXSPp/_new 2021-12-27 16:07:43.289714268 +0100 @@ -18,7 +18,7 @@ %define soname libarmadillo10 Name: armadillo -Version: 10.7.3 +Version: 10.7.5 Release: 0 Summary: C++ matrix library with interfaces to LAPACK and ATLAS License: Apache-2.0 ++++++ armadillo-10.7.3.tar.xz -> armadillo-10.7.5.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/armadillo-10.7.3/CMakeLists.txt new/armadillo-10.7.5/CMakeLists.txt --- old/armadillo-10.7.3/CMakeLists.txt 2016-06-16 18:24:03.000000000 +0200 +++ new/armadillo-10.7.5/CMakeLists.txt 2016-06-16 18:24:05.000000000 +0200 @@ -61,17 +61,6 @@ set(ARMA_USE_EXTERN_RNG false) set(ARMA_USE_SUPERLU false) # Caveat: only SuperLU version 5.x can be used! -## NOTE: OpenBLAS appears to have its own LAPACK functions, -## NOTE: but on some systems the installed version of OpenBLAS -## NOTE: has been modified not to include LAPACK functions. -## NOTE: As the presence of LAPACK functions in OpenBLAS can't be guaranteed, -## NOTE: this installer script requires LAPACK to be present on the system -## NOTE: in order to enable the use of LAPACK functions by Armadillo. -## NOTE: This installer will link with OpenBLAS first, -## NOTE: so if a full version of OpenBLAS is actually present on the system, -## NOTE: the linker should make use of LAPACK functions from OpenBLAS -## NOTE: instead of standard LAPACK. - ## extract version from sources @@ -209,6 +198,10 @@ ## you can also disable HDF5 detection directly on the command line: ## cmake -D DETECT_HDF5=false . +option(OPENBLAS_PROVIDES_LAPACK "Assume that OpenBLAS provides LAPACK functions" OFF) +## Example use on the command line: +## cmake -D OPENBLAS_PROVIDES_LAPACK=true . + option(ALLOW_FLEXIBLAS_LINUX "Allow detection of FlexiBLAS on Linux" ON) # set(ALLOW_FLEXIBLAS_LINUX false) ## uncomment the above line to disable the detection of FlexiBLAS; @@ -250,8 +243,10 @@ message(STATUS "CMAKE_CXX_COMPILER_ID = ${CMAKE_CXX_COMPILER_ID}" ) message(STATUS "CMAKE_CXX_COMPILER_VERSION = ${CMAKE_CXX_COMPILER_VERSION}") message(STATUS "CMAKE_COMPILER_IS_GNUCXX = ${CMAKE_COMPILER_IS_GNUCXX}" ) +message(STATUS "" ) message(STATUS "BUILD_SHARED_LIBS = ${BUILD_SHARED_LIBS}" ) message(STATUS "DETECT_HDF5 = ${DETECT_HDF5}" ) +message(STATUS "OPENBLAS_PROVIDES_LAPACK = ${OPENBLAS_PROVIDES_LAPACK}" ) message(STATUS "ALLOW_FLEXIBLAS_LINUX = ${ALLOW_FLEXIBLAS_LINUX}" ) message(STATUS "ALLOW_OPENBLAS_MACOS = ${ALLOW_OPENBLAS_MACOS}" ) message(STATUS "ALLOW_BLAS_LAPACK_MACOS = ${ALLOW_BLAS_LAPACK_MACOS}" ) @@ -399,6 +394,10 @@ set(ARMA_USE_BLAS true) set(ARMA_LIBS ${ARMA_LIBS} ${OpenBLAS_LIBRARIES}) + if(OPENBLAS_PROVIDES_LAPACK) + set(ARMA_USE_LAPACK true) + endif() + message(STATUS "") message(STATUS "*** If the OpenBLAS library is installed in") message(STATUS "*** /usr/local/lib or /usr/local/lib64") @@ -499,6 +498,34 @@ set(ARMA_SUPERLU_INCLUDE_DIR ${SuperLU_INCLUDE_DIR}) endif() + +if(NOT ARMA_USE_LAPACK) + message(STATUS "") + message(STATUS "*** WARNING: Use of LAPACK is not enabled, as no LAPACK compatible library has been found.") + message(STATUS "*** WARNING: This will materially degrade the available functionality in Armadillo.") + + if(OpenBLAS_FOUND) + message(STATUS "") + message(STATUS "*** NOTE: OpenBLAS found but LAPACK not found.") + message(STATUS "*** NOTE: OpenBLAS may have been built without LAPACK functions,") + message(STATUS "*** NOTE: so cannot assume that LAPACK functions are available.") + message(STATUS "*** NOTE: To forcefully assume that OpenBLAS provides LAPACK functions,") + message(STATUS "*** NOTE: rerun cmake with the OPENBLAS_PROVIDES_LAPACK option enabled:") + message(STATUS "*** NOTE: cmake -D OPENBLAS_PROVIDES_LAPACK=true .") + endif() +endif() + + +message(STATUS "") +message(STATUS "*** Result of configuration:") +message(STATUS "*** ARMA_USE_WRAPPER = ${ARMA_USE_WRAPPER}") +message(STATUS "*** ARMA_USE_LAPACK = ${ARMA_USE_LAPACK}") +message(STATUS "*** ARMA_USE_BLAS = ${ARMA_USE_BLAS}") +message(STATUS "*** ARMA_USE_ATLAS = ${ARMA_USE_ATLAS}") +message(STATUS "*** ARMA_USE_HDF5_ALT = ${ARMA_USE_HDF5_ALT}") +message(STATUS "*** ARMA_USE_ARPACK = ${ARMA_USE_ARPACK}") +message(STATUS "*** ARMA_USE_EXTERN_RNG = ${ARMA_USE_EXTERN_RNG}") +message(STATUS "*** ARMA_USE_SUPERLU = ${ARMA_USE_SUPERLU}") message(STATUS "") message(STATUS "*** Armadillo wrapper library will use the following libraries:") message(STATUS "*** ARMA_LIBS = ${ARMA_LIBS}") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/armadillo-10.7.3/README.md new/armadillo-10.7.5/README.md --- old/armadillo-10.7.3/README.md 2016-06-16 18:24:03.000000000 +0200 +++ new/armadillo-10.7.5/README.md 2016-06-16 18:24:05.000000000 +0200 @@ -21,7 +21,7 @@ 2. [Citation Details](#2-citation-details) 3. [Distribution License](#3-distribution-license) -4. [Prerequisites](#4-prerequisites) +4. [Prerequisites and Dependencies](#4-prerequisites-and-dependencies) 5. [Linux and macOS: Installation](#5-linux-and-macos-installation) 6. [Linux and macOS: Compiling and Linking](#6-linux-and-macos-compiling-and-linking) @@ -103,7 +103,14 @@ --- -### 4: Prerequisites +### 4: Prerequisites and Dependencies + +The functionality of Armadillo is partly dependent on other libraries: +OpenBLAS (or standard BLAS) and LAPACK (for dense matrices), +as well as ARPACK and SuperLU (for sparse matrices). +Caveat: only SuperLU versions 5.2.x can be used. +On macOS, the Accelerate framework can be used for BLAS and LAPACK functions. +Use of OpenBLAS is strongly recommended on all systems. Armadillo 10.x requires a C++ compiler that supports at least the C++11 standard. Use Armadillo 9.900 if your compiler only supports the old C++98/C++03 standards. @@ -118,17 +125,6 @@ On Windows systems, the MinGW toolset or Visual Studio C++ 2019 (MSVC) can be used. -The functionality of Armadillo is partly dependent on other libraries: -OpenBLAS (or standard BLAS) and LAPACK (for dense matrices), -as well as ARPACK and SuperLU (for sparse matrices). -Caveat: only SuperLU versions 5.2.x can be used. -On macOS, the Accelerate framework can be used for BLAS and LAPACK functions. - -Armadillo can work without the above libraries, but its functionality will be reduced. -Basic functionality will be available (eg. matrix addition and multiplication), -but operations such as eigen decomposition and system solvers will not be. -Matrix multiplication may not be as fast (mainly for large matrices). - --- ### 5: Linux and macOS: Installation diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/armadillo-10.7.3/docs.html new/armadillo-10.7.5/docs.html --- old/armadillo-10.7.3/docs.html 2016-06-16 18:24:03.000000000 +0200 +++ new/armadillo-10.7.5/docs.html 2016-06-16 18:24:05.000000000 +0200 @@ -1789,7 +1789,7 @@ </li> <br> <li> -Each element can have an arbitrary size (eg. in a field of matrices, each matrix can have a different size) +Each element can have an arbitrary size (eg. in a field of matrices, each matrix can have a unique size) </li> <br> <li> @@ -5957,7 +5957,7 @@ <br> <li> This function should be used sparingly and only in cases where it is absolutely necessary; -indiscriminate use can cause performance degradations +indiscriminate use can degrade performance </li> <br> <li> @@ -5974,6 +5974,7 @@ <br> <li>See also: <ul> +<li><a href="#as_scalar">as_scalar()</a></li> <li><a href="#Mat">Mat class</a></li> </ul> </li> @@ -14888,7 +14889,7 @@ </li> <br> <li> -For matrix <i>X</i>, produce a matrix with the quantiles for each column vector (<i>dim = 0</i>) or each row vector (<i>dim = 0</i>) +For matrix <i>X</i>, produce a matrix with the quantiles for each column vector (<i>dim = 0</i>) or each row vector (<i>dim = 1</i>) </li> <br> <li> @@ -18475,9 +18476,8 @@ </td> <td style="vertical-align: top;"> Enable use of SuperLU, which is used by <a href="#spsolve">spsolve()</a> for finding the solutions of sparse systems, -and by <a href="#eigs_sym">eigs_sym()</a> & <a href="#eigs_gen">eigs_gen()</a> in shift-invert mode. +as well as <a href="#eigs_sym">eigs_sym()</a> and <a href="#eigs_gen">eigs_gen()</a> in shift-invert mode. You will need to link with the superlu library, for example <code><i>-lsuperlu</i></code> -<br><b>Caveat:</b> Armadillo 7.x and later versions require SuperLU 5.2 </td> </tr> <tr> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/armadillo-10.7.3/include/armadillo_bits/GlueCube_bones.hpp new/armadillo-10.7.5/include/armadillo_bits/GlueCube_bones.hpp --- old/armadillo-10.7.3/include/armadillo_bits/GlueCube_bones.hpp 2016-06-16 18:24:03.000000000 +0200 +++ new/armadillo-10.7.5/include/armadillo_bits/GlueCube_bones.hpp 2016-06-16 18:24:05.000000000 +0200 @@ -30,8 +30,8 @@ typedef typename T1::elem_type elem_type; typedef typename get_pod_type<elem_type>::result pod_type; - arma_inline GlueCube(const BaseCube<typename T1::elem_type, T1>& in_A, const BaseCube<typename T1::elem_type, T2>& in_B); - arma_inline ~GlueCube(); + inline GlueCube(const BaseCube<typename T1::elem_type, T1>& in_A, const BaseCube<typename T1::elem_type, T2>& in_B); + inline ~GlueCube(); const T1& A; //!< first operand; must be derived from BaseCube const T2& B; //!< second operand; must be derived from BaseCube diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/armadillo-10.7.3/include/armadillo_bits/Glue_bones.hpp new/armadillo-10.7.5/include/armadillo_bits/Glue_bones.hpp --- old/armadillo-10.7.3/include/armadillo_bits/Glue_bones.hpp 2016-06-16 18:24:03.000000000 +0200 +++ new/armadillo-10.7.5/include/armadillo_bits/Glue_bones.hpp 2016-06-16 18:24:05.000000000 +0200 @@ -52,9 +52,9 @@ typedef typename T1::elem_type elem_type; typedef typename get_pod_type<elem_type>::result pod_type; - arma_inline Glue(const T1& in_A, const T2& in_B); - arma_inline Glue(const T1& in_A, const T2& in_B, const uword in_aux_uword); - arma_inline ~Glue(); + inline Glue(const T1& in_A, const T2& in_B); + inline Glue(const T1& in_A, const T2& in_B, const uword in_aux_uword); + inline ~Glue(); const T1& A; //!< first operand; must be derived from Base const T2& B; //!< second operand; must be derived from Base diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/armadillo-10.7.3/include/armadillo_bits/arma_version.hpp new/armadillo-10.7.5/include/armadillo_bits/arma_version.hpp --- old/armadillo-10.7.3/include/armadillo_bits/arma_version.hpp 2016-06-16 18:24:03.000000000 +0200 +++ new/armadillo-10.7.5/include/armadillo_bits/arma_version.hpp 2016-06-16 18:24:05.000000000 +0200 @@ -23,7 +23,7 @@ #define ARMA_VERSION_MAJOR 10 #define ARMA_VERSION_MINOR 7 -#define ARMA_VERSION_PATCH 3 +#define ARMA_VERSION_PATCH 5 #define ARMA_VERSION_NAME "Entropy Maximiser" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/armadillo-10.7.3/include/armadillo_bits/config.hpp.cmake new/armadillo-10.7.5/include/armadillo_bits/config.hpp.cmake --- old/armadillo-10.7.3/include/armadillo_bits/config.hpp.cmake 2016-06-16 18:24:03.000000000 +0200 +++ new/armadillo-10.7.5/include/armadillo_bits/config.hpp.cmake 2016-06-16 18:24:05.000000000 +0200 @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: Apache-2.0 +// // Copyright 2008-2016 Conrad Sanderson (http://conradsanderson.id.au) // Copyright 2008-2016 National ICT Australia (NICTA) // diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/armadillo-10.7.3/include/armadillo_bits/diagmat_proxy.hpp new/armadillo-10.7.5/include/armadillo_bits/diagmat_proxy.hpp --- old/armadillo-10.7.3/include/armadillo_bits/diagmat_proxy.hpp 2016-06-16 18:24:03.000000000 +0200 +++ new/armadillo-10.7.5/include/armadillo_bits/diagmat_proxy.hpp 2016-06-16 18:24:05.000000000 +0200 @@ -92,7 +92,7 @@ } - constexpr bool is_alias(const Mat<elem_type>&) const { return false; } + inline bool is_alias(const Mat<elem_type>& X) const { return P.is_alias(X); } const Proxy<T1> P; const bool P_is_vec; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/armadillo-10.7.3/include/armadillo_bits/diskio_meat.hpp new/armadillo-10.7.5/include/armadillo_bits/diskio_meat.hpp --- old/armadillo-10.7.3/include/armadillo_bits/diskio_meat.hpp 2016-06-16 18:24:03.000000000 +0200 +++ new/armadillo-10.7.5/include/armadillo_bits/diskio_meat.hpp 2016-06-16 18:24:05.000000000 +0200 @@ -469,7 +469,20 @@ { // unsigned integer - if(str[0] == '-') { val = eT(0); return true; } + if((str[0] == '-') && (N >= 2)) + { + val = eT(0); + + if((str[1] == '-') || (str[1] == '+')) { return false; } + + const char* str_offset1 = &(str[1]); + + std::strtoull(str_offset1, &endptr, 10); + + if(str_offset1 == endptr) { return false; } + + return true; + } val = eT( std::strtoull(str, &endptr, 10) ); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/armadillo-10.7.3/include/armadillo_bits/fn_as_scalar.hpp new/armadillo-10.7.5/include/armadillo_bits/fn_as_scalar.hpp --- old/armadillo-10.7.3/include/armadillo_bits/fn_as_scalar.hpp 2016-06-16 18:24:03.000000000 +0200 +++ new/armadillo-10.7.5/include/armadillo_bits/fn_as_scalar.hpp 2016-06-16 18:24:05.000000000 +0200 @@ -294,25 +294,20 @@ template<typename T1, typename T2> arma_warn_unused -arma_inline +inline typename T1::elem_type as_scalar(const Glue<T1, T2, glue_times>& X, const typename arma_not_cx<typename T1::elem_type>::result* junk = nullptr) { arma_extra_debug_sigprint(); arma_ignore(junk); - if(is_glue_times_diag<T1>::value == false) - { - constexpr uword N_mat = 1 + depth_lhs< glue_times, Glue<T1,T2,glue_times> >::num; - - arma_extra_debug_print(arma_str::format("N_mat = %u") % N_mat); - - return as_scalar_redirect<N_mat>::apply(X); - } - else - { - return as_scalar_diag(X); - } + if(is_glue_times_diag<T1>::value) { return as_scalar_diag(X); } + + constexpr uword N_mat = 1 + depth_lhs< glue_times, Glue<T1,T2,glue_times> >::num; + + arma_extra_debug_print(arma_str::format("N_mat = %u") % N_mat); + + return as_scalar_redirect<N_mat>::apply(X); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/armadillo-10.7.3/include/armadillo_bits/fn_stddev.hpp new/armadillo-10.7.5/include/armadillo_bits/fn_stddev.hpp --- old/armadillo-10.7.3/include/armadillo_bits/fn_stddev.hpp 2016-06-16 18:24:03.000000000 +0200 +++ new/armadillo-10.7.5/include/armadillo_bits/fn_stddev.hpp 2016-06-16 18:24:05.000000000 +0200 @@ -77,7 +77,7 @@ template<typename T> arma_warn_unused -arma_inline +inline typename arma_scalar_only<T>::result stddev(const T&) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/armadillo-10.7.3/include/armadillo_bits/fn_var.hpp new/armadillo-10.7.5/include/armadillo_bits/fn_var.hpp --- old/armadillo-10.7.3/include/armadillo_bits/fn_var.hpp 2016-06-16 18:24:03.000000000 +0200 +++ new/armadillo-10.7.5/include/armadillo_bits/fn_var.hpp 2016-06-16 18:24:05.000000000 +0200 @@ -77,7 +77,7 @@ template<typename T> arma_warn_unused -arma_inline +inline typename arma_scalar_only<T>::result var(const T&) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/armadillo-10.7.3/include/armadillo_bits/op_expmat_meat.hpp new/armadillo-10.7.5/include/armadillo_bits/op_expmat_meat.hpp --- old/armadillo-10.7.3/include/armadillo_bits/op_expmat_meat.hpp 2016-06-16 18:24:03.000000000 +0200 +++ new/armadillo-10.7.5/include/armadillo_bits/op_expmat_meat.hpp 2016-06-16 18:24:05.000000000 +0200 @@ -74,6 +74,8 @@ if(A.is_diagmat()) { + arma_extra_debug_print("op_expmat: detected diagonal matrix"); + const uword N = (std::min)(A.n_rows, A.n_cols); out.zeros(N,N); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/armadillo-10.7.3/include/armadillo_bits/op_logmat_meat.hpp new/armadillo-10.7.5/include/armadillo_bits/op_logmat_meat.hpp --- old/armadillo-10.7.3/include/armadillo_bits/op_logmat_meat.hpp 2016-06-16 18:24:03.000000000 +0200 +++ new/armadillo-10.7.5/include/armadillo_bits/op_logmat_meat.hpp 2016-06-16 18:24:05.000000000 +0200 @@ -111,6 +111,8 @@ if(A.is_diagmat()) { + arma_extra_debug_print("op_logmat: detected diagonal matrix"); + const uword N = A.n_rows; out.zeros(N,N); // aliasing can't happen as op_logmat is defined as cx_mat = op(mat) @@ -294,6 +296,8 @@ if(S.is_diagmat()) { + arma_extra_debug_print("op_logmat_cx: detected diagonal matrix"); + const uword N = S.n_rows; out.zeros(N,N); // aliasing can't happen as S is generated diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/armadillo-10.7.3/include/armadillo_bits/op_pinv_meat.hpp new/armadillo-10.7.5/include/armadillo_bits/op_pinv_meat.hpp --- old/armadillo-10.7.3/include/armadillo_bits/op_pinv_meat.hpp 2016-06-16 18:24:03.000000000 +0200 +++ new/armadillo-10.7.5/include/armadillo_bits/op_pinv_meat.hpp 2016-06-16 18:24:05.000000000 +0200 @@ -68,45 +68,6 @@ if(A.is_empty()) { out.set_size(n_cols,n_rows); return true; } - if(A.is_diagmat()) - { - arma_extra_debug_print("op_pinv: detected diagonal matrix"); - - out.zeros(n_cols, n_rows); - - const uword N = (std::min)(n_rows, n_cols); - - podarray<T> diag_abs_vals(N); - - T max_abs_Aii = T(0); - - for(uword i=0; i<N; ++i) - { - const eT Aii = A.at(i,i); - const T abs_Aii = std::abs(Aii); - - if(arma_isnan(Aii)) { return false; } - - diag_abs_vals[i] = abs_Aii; - - max_abs_Aii = (abs_Aii > max_abs_Aii) ? abs_Aii : max_abs_Aii; - } - - if(tol == T(0)) { tol = (std::max)(n_rows, n_cols) * max_abs_Aii * std::numeric_limits<T>::epsilon(); } - - for(uword i=0; i<N; ++i) - { - if(diag_abs_vals[i] >= tol) - { - const eT Aii = A.at(i,i); - - if(Aii != eT(0)) { out.at(i,i) = eT(eT(1) / Aii); } - } - } - - return true; - } - #if defined(ARMA_OPTIMISE_SYMPD) const bool try_sympd = (auxlib::crippled_lapack(A) == false) && (tol == T(0)) && (method_id == uword(0)) && sympd_helper::guess_sympd_anysize(A); #else diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/armadillo-10.7.3/include/armadillo_bits/op_powmat_meat.hpp new/armadillo-10.7.5/include/armadillo_bits/op_powmat_meat.hpp --- old/armadillo-10.7.3/include/armadillo_bits/op_powmat_meat.hpp 2016-06-16 18:24:03.000000000 +0200 +++ new/armadillo-10.7.5/include/armadillo_bits/op_powmat_meat.hpp 2016-06-16 18:24:05.000000000 +0200 @@ -96,6 +96,8 @@ if(X.is_diagmat()) { + arma_extra_debug_print("op_powmat: detected diagonal matrix"); + podarray<eT> tmp(N); // use temporary array in case we have aliasing for(uword i=0; i<N; ++i) { tmp[i] = eop_aux::pow(X.at(i,i), int(y)); } @@ -192,6 +194,8 @@ if(A.is_diagmat()) { + arma_extra_debug_print("op_powmat_cx: detected diagonal matrix"); + podarray<out_eT> tmp(N); // use temporary array in case we have aliasing for(uword i=0; i<N; ++i) { tmp[i] = eop_aux::pow( std::complex<in_T>(A.at(i,i)), y) ; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/armadillo-10.7.3/include/armadillo_bits/op_sqrtmat_meat.hpp new/armadillo-10.7.5/include/armadillo_bits/op_sqrtmat_meat.hpp --- old/armadillo-10.7.3/include/armadillo_bits/op_sqrtmat_meat.hpp 2016-06-16 18:24:03.000000000 +0200 +++ new/armadillo-10.7.5/include/armadillo_bits/op_sqrtmat_meat.hpp 2016-06-16 18:24:05.000000000 +0200 @@ -116,6 +116,8 @@ if(A.is_diagmat()) { + arma_extra_debug_print("op_sqrtmat: detected diagonal matrix"); + const uword N = A.n_rows; out.zeros(N,N); // aliasing can't happen as op_sqrtmat is defined as cx_mat = op(mat) @@ -327,6 +329,8 @@ if(S.is_diagmat()) { + arma_extra_debug_print("op_sqrtmat_cx: detected diagonal matrix"); + const uword N = S.n_rows; out.zeros(N,N); // aliasing can't happen as S is generated diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/armadillo-10.7.3/include/armadillo_bits/trimat_helper.hpp new/armadillo-10.7.5/include/armadillo_bits/trimat_helper.hpp --- old/armadillo-10.7.3/include/armadillo_bits/trimat_helper.hpp 2016-06-16 18:24:03.000000000 +0200 +++ new/armadillo-10.7.5/include/armadillo_bits/trimat_helper.hpp 2016-06-16 18:24:05.000000000 +0200 @@ -39,19 +39,15 @@ if(N < 2) { return false; } - const eT* A_mem = A.memptr(); + const eT* A_col = A.memptr(); const eT eT_zero = eT(0); - // quickly check bottom-left corner - const eT* A_col0 = A_mem; - const eT* A_col1 = A_col0 + N; + // quickly check element at bottom-left - if( (A_col0[N-2] != eT_zero) || (A_col0[Nm1] != eT_zero) || (A_col1[Nm1] != eT_zero) ) { return false; } + if(A_col[Nm1] != eT_zero) { return false; } // if we got to this point, do a thorough check - const eT* A_col = A_mem; - for(uword j=0; j < Nm1; ++j) { for(uword i=(j+1); i < N; ++i) @@ -84,11 +80,11 @@ const eT eT_zero = eT(0); - // quickly check top-right corner - const eT* A_colNm2 = A.colptr(N-2); - const eT* A_colNm1 = A_colNm2 + N; + // quickly check element at top-right + + const eT* A_colNm1 = A.colptr(N-1); - if( (A_colNm2[0] != eT_zero) || (A_colNm1[0] != eT_zero) || (A_colNm1[1] != eT_zero) ) { return false; } + if(A_colNm1[0] != eT_zero) { return false; } // if we got to this point, do a thorough check