Hello community, here is the log from the commit of package armadillo for openSUSE:Factory checked in at 2020-09-08 22:50:57 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/armadillo (Old) and /work/SRC/openSUSE:Factory/.armadillo.new.3399 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "armadillo" Tue Sep 8 22:50:57 2020 rev:138 rq:832953 version:9.900.3 Changes: -------- --- /work/SRC/openSUSE:Factory/armadillo/armadillo.changes 2020-07-24 13:36:07.770725455 +0200 +++ /work/SRC/openSUSE:Factory/.armadillo.new.3399/armadillo.changes 2020-09-08 22:51:04.743626048 +0200 @@ -1,0 +2,6 @@ +Sun Sep 6 10:02:06 UTC 2020 - Atri Bhattacharya <badshah...@gmail.com> + +- Update to version 9.900.3: + * Bug-fix release, no changelog from upstream. + +------------------------------------------------------------------- Old: ---- armadillo-9.900.2.tar.xz New: ---- armadillo-9.900.3.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ armadillo.spec ++++++ --- /var/tmp/diff_new_pack.tukHAk/_old 2020-09-08 22:51:05.419626386 +0200 +++ /var/tmp/diff_new_pack.tukHAk/_new 2020-09-08 22:51:05.423626388 +0200 @@ -18,7 +18,7 @@ %define soname libarmadillo9 Name: armadillo -Version: 9.900.2 +Version: 9.900.3 Release: 0 Summary: C++ matrix library with interfaces to LAPACK and ATLAS License: Apache-2.0 ++++++ armadillo-9.900.2.tar.xz -> armadillo-9.900.3.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/armadillo-9.900.2/CMakeLists.txt new/armadillo-9.900.3/CMakeLists.txt --- old/armadillo-9.900.2/CMakeLists.txt 2016-06-16 18:21:12.000000000 +0200 +++ new/armadillo-9.900.3/CMakeLists.txt 2016-06-16 18:21:13.000000000 +0200 @@ -133,6 +133,14 @@ endif() option(DETECT_HDF5 "Detect HDF5 and include HDF5 support, if found" ON) +# set(DETECT_HDF5 false) +## uncomment the above line to disable the detection of the HDF5 library; +## you can also disable HDF5 detection directly on the command line: +## cmake -D DETECT_HDF5=false . + +option(ALLOW_FLEXIBLAS_LINUX "Allow detection of FlexiBLAS on Linux (EXPERIMENTAL)" OFF) +## Example use on the command line: +## cmake -D ALLOW_FLEXIBLAS_LINUX=true . option(ALLOW_OPENBLAS_MACOS "Allow detection of OpenBLAS on macOS" OFF) ## Example use on the command line: @@ -171,6 +179,7 @@ message(STATUS "CMAKE_COMPILER_IS_GNUCXX = ${CMAKE_COMPILER_IS_GNUCXX}" ) message(STATUS "BUILD_SHARED_LIBS = ${BUILD_SHARED_LIBS}" ) message(STATUS "DETECT_HDF5 = ${DETECT_HDF5}" ) +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}" ) message(STATUS "BUILD_SMOKE_TEST = ${BUILD_SMOKE_TEST}" ) @@ -259,15 +268,42 @@ include(ARMA_FindBLAS) include(ARMA_FindLAPACK) - message(STATUS " MKL_FOUND = ${MKL_FOUND}" ) - message(STATUS " ACMLMP_FOUND = ${ACMLMP_FOUND}" ) - message(STATUS " ACML_FOUND = ${ACML_FOUND}" ) - message(STATUS "OpenBLAS_FOUND = ${OpenBLAS_FOUND}") - message(STATUS " ATLAS_FOUND = ${ATLAS_FOUND}" ) - message(STATUS " BLAS_FOUND = ${BLAS_FOUND}" ) - message(STATUS " LAPACK_FOUND = ${LAPACK_FOUND}" ) + if(ALLOW_FLEXIBLAS_LINUX AND (${CMAKE_SYSTEM_NAME} MATCHES "Linux")) + include(ARMA_FindFlexiBLAS) + endif() - if(MKL_FOUND OR ACMLMP_FOUND OR ACML_FOUND) + message(STATUS " MKL_FOUND = ${MKL_FOUND}" ) + message(STATUS " ACMLMP_FOUND = ${ACMLMP_FOUND}" ) + message(STATUS " ACML_FOUND = ${ACML_FOUND}" ) + message(STATUS " OpenBLAS_FOUND = ${OpenBLAS_FOUND}" ) + message(STATUS " ATLAS_FOUND = ${ATLAS_FOUND}" ) + message(STATUS " BLAS_FOUND = ${BLAS_FOUND}" ) + message(STATUS " LAPACK_FOUND = ${LAPACK_FOUND}" ) + + if(FlexiBLAS_FOUND) + + message(STATUS "FlexiBLAS_FOUND = ${FlexiBLAS_FOUND}" ) + + set(ARMA_USE_LAPACK true) + set(ARMA_USE_BLAS true) + + set(ARMA_LIBS ${ARMA_LIBS} ${FlexiBLAS_LIBRARIES}) + + message(STATUS "") + message(STATUS "*** Using FlexiBLAS to access BLAS and LAPACK functions.") + message(STATUS "*** WARNING:") + message(STATUS "*** if SuperLU and/or ARPACK are used, they must also be linked with FlexiBLAS.") + message(STATUS "") + message(STATUS "*** If using FlexiBLAS causes problems, please file a bug") + message(STATUS "*** report with the FlexiBLAS developers:") + message(STATUS "*** https://www.mpi-magdeburg.mpg.de/projects/flexiblas") + message(STATUS "") + message(STATUS "*** To disable detection of FlexiBLAS,") + message(STATUS "*** rerun cmake with FlexiBLAS detection disabled:") + message(STATUS "*** cmake -D ALLOW_FLEXIBLAS_LINUX=false .") + message(STATUS "") + + elseif(MKL_FOUND OR ACMLMP_FOUND OR ACML_FOUND) set(ARMA_USE_LAPACK true) set(ARMA_USE_BLAS true) @@ -366,12 +402,6 @@ find_package(PkgConfig) -# set(DETECT_HDF5 false) - -## uncomment the above line to disable the detection of the HDF5 library; -## you can also disable HDF5 detection directly on the command line: -## cmake -D DETECT_HDF5=false . - if(DETECT_HDF5) find_package(HDF5 QUIET COMPONENTS C) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/armadillo-9.900.2/README.md new/armadillo-9.900.3/README.md --- old/armadillo-9.900.2/README.md 2016-06-16 18:21:12.000000000 +0200 +++ new/armadillo-9.900.3/README.md 2016-06-16 18:21:13.000000000 +0200 @@ -131,26 +131,28 @@ * Step 1: Ensure a C++ compiler is installed on your system. - - On macOS systems you will need to install Xcode (version 8 or later) - and then type the following command in a terminal window: - xcode-select --install + - On macOS systems install Xcode (version 8 or later) + and then type the following command in a terminal window: + + xcode-select --install * Step 2: Ensure the CMake tool is installed on your system. - You can download it from http://www.cmake.org - or (preferably) install it using your package manager. - - On Linux-based systems, you can get CMake using dnf, yum, apt, aptitude, ... - - On macOS systems, you can get CMake through MacPorts or Homebrew. + - Cmake can be downloaded from http://www.cmake.org + or (preferably) installed using the package manager on your system. + + - On Linux-based systems, CMake can be installed using dnf, yum, apt, aptitude, ... + + - On macOS systems, CMake can be installed through MacPorts or Homebrew. * Step 3: - Ensure LAPACK and BLAS (or preferably OpenBLAS) are installed on your system. - On macOS this is not necessary. + Ensure that OpenBLAS (or standard BLAS and LAPACK) is installed on your system. + On macOS, the Accelerate framework can be used for BLAS/LAPACK. - - For better performance, we recommend installing the OpenBLAS library. - See http://www.openblas.net/ + - On macOS, optionally install OpenBLAS for better performance. - - If you are using sparse matrices, also install ARPACK and SuperLU. + - If support for sparse matrices is required, also install ARPACK and SuperLU. Caveat: only SuperLU version 5.2 can be used! - On Linux-based systems, the following libraries are recommended @@ -160,12 +162,41 @@ package, also install the "lapack-devel" or "lapack-dev" package. * Step 4: - Open a terminal window, change into the directory that was created - by unpacking the armadillo archive, and type the following command: + Run the cmake installer. + + - Open a terminal window and change into the directory that was created + by unpacking the armadillo archive. + + - The simplest case is to run cmake using: cmake . - - The full stop separated from "cmake" by a space is important. + - NOTE: the full stop separated from "cmake" by a space is important. + + - Options to the cmake installer: + + - On Linux, to enable the detection of FlexiBLAS, + use the additional ALLOW_FLEXIBLAS_LINUX option when running cmake: + + cmake -DALLOW_FLEXIBLAS_LINUX=ON . + + - On macOS, to enable the detection of OpenBLAS, + use the additional ALLOW_OPENBLAS_MACOS option when running cmake: + + cmake -DALLOW_OPENBLAS_MACOS=ON . + + Note: depending on your installation, OpenBLAS may masquerade as standard BLAS. + To detect standard BLAS and LAPACK, use the ALLOW_BLAS_LAPACK_MACOS option: + + cmake -DALLOW_BLAS_LAPACK_MACOS=ON . + + - By default, cmake assumes that the Armadillo library and the + corresponding header files will be installed in the default + system directory (eg. in the /usr hierarchy in Linux-based systems). + To install the library and headers in an alternative directory, + use the additional option CMAKE_INSTALL_PREFIX in this form: + + cmake . -DCMAKE_INSTALL_PREFIX:PATH=alternative_directory - CMake will detect which relevant libraries are installed on your system (eg. OpenBLAS, LAPACK, SuperLU, ARPACK, etc) @@ -173,34 +204,21 @@ CMake will also generate the Armadillo run-time library, which is a wrapper for all the detected libraries. - - By default, cmake assumes that the Armadillo library and the - corresponding header files are going to be installed in the default - system directory (eg. in the /usr hierarchy in Linux-based systems). - If you wish to install the library and headers in an alternative directory, - use the additional option CMAKE_INSTALL_PREFIX in this form: - - cmake . -DCMAKE_INSTALL_PREFIX:PATH=alternative_directory - - - If you need to re-run cmake, it's a good idea to first delete the + - If cmake needs to re-run, it's a good idea to first delete the "CMakeCache.txt" file (not "CMakeLists.txt"). - Caveat: out-of-tree builds are currently not fully supported; - eg, creating a sub-directory called "build" and running cmake .. - from within "build" is currently not supported. + ie. creating a sub-directory called "build" and running cmake .. + from within "build" is currently not supported. - - Caveat: if you are installing Armadillo in a non-system directory, - make sure your C++ compiler is configured to use the "lib" and "include" + - Caveat: if Armadillo is installed in a non-system directory, + make sure that the C++ compiler is configured to use the "lib" and "include" sub-directories present within this directory. Note that the "lib" directory might be named differently on your system. On recent 64 bit Debian & Ubuntu systems it is "lib/x86_64-linux-gnu". On recent 64 bit Fedora & RHEL systems it is "lib64". * Step 5: - To generate the run-time armadillo library, type the following command: - - make - -* Step 6: If you and have access to root/administrator/superuser privileges (ie. able to use "sudo") and didn't use the CMAKE_INSTALL_PREFIX option, type the following command: @@ -217,25 +235,30 @@ ### 6: Linux and macOS: Compiling and Linking -The "examples" directory contains several quick example programs -that use the Armadillo library. - -In general, programs which use Armadillo are compiled along these lines: +To compile and link a program which uses Armadillo, +use the following command: - g++ example1.cpp -o example1 -O2 -larmadillo + g++ prog.cpp -o prog -O2 -larmadillo -If you want to use Armadillo without installation -(ie. without the runtime library generated by CMake during installation), -compile along these lines: +To use Armadillo without installation (ie. without the Armadillo runtime library), +compile programs with the ARMA_DONT_USE_WRAPPER option enabled, +and directly link with BLAS (or preferably OpenBLAS) and LAPACK. +For example: - g++ example1.cpp -o example1 -O2 -I /home/blah/armadillo-7.200.3/include -DARMA_DONT_USE_WRAPPER -lblas -llapack + g++ prog.cpp -o prog -O2 -I /home/blah/armadillo-7.200.3/include -DARMA_DONT_USE_WRAPPER -lblas -llapack -The above command line assumes that you have unpacked the armadillo archive into /home/blah/ -You will need to adjust this for later versions of Armadillo (ie. change the 7.200.3 part) -and/or if you have unpacked the armadillo archive into a different directory. +On Linux, Replace -lblas with -lopenblas if OpenBLAS is installed. -Replace -lblas with -lopenblas if you have OpenBLAS. On macOS, replace -lblas -llapack with -framework Accelerate +or optionally with -lopenblas if OpenBLAS is installed. + +The above command line assumes that the armadillo archive was unpacked into /home/blah/ +The command needs to be adjusted for each specific version of Armadillo +(ie. "7.200.3" part needs to be changed) +and if the archive was unpacked into a different directory. + +The "examples" directory contains several short example programs +that use the Armadillo library. --- @@ -247,12 +270,12 @@ Copy the entire "include" folder to a convenient location and tell your compiler to use that location for header files (in addition to the locations it uses already). - Alternatively, you can use the "include" folder directly. + Alternatively, the "include" folder can be used directly. * Step 2: Modify "include/armadillo_bits/config.hpp" to indicate which libraries are currently available on your system. For example, - if you have LAPACK, BLAS (or OpenBLAS), ARPACK and SuperLU present, + if LAPACK, BLAS (or OpenBLAS), ARPACK and SuperLU present, uncomment the following lines: #define ARMA_USE_LAPACK @@ -260,7 +283,8 @@ #define ARMA_USE_ARPACK #define ARMA_USE_SUPERLU - If you don't need sparse matrices, don't worry about ARPACK or SuperLU. + If support for sparse matrices is not required, + don't worry about ARPACK or SuperLU. * Step 3: Configure your compiler to link with LAPACK and BLAS @@ -275,9 +299,9 @@ 64 bit program: the active solution platform must be set to x64, instead of win32. The MSVC project was tested on 64 bit Windows 7 with Visual C++ 2012. -You may need to make adaptations for 32 bit systems, later versions of Windows -and/or the compiler. For example, you may have to enable or disable -ARMA_BLAS_LONG and ARMA_BLAS_UNDERSCORE defines in "armadillo_bits/config.hpp". +Adaptations may need to be made for 32 bit systems, later versions of Windows +and/or the compiler. For example, options such as ARMA_BLAS_LONG and ARMA_BLAS_UNDERSCORE, +defined in "armadillo_bits/config.hpp", may need to be either enabled or disabled. The folder "examples/lib_win64" contains baseline (unoptimised) LAPACK and BLAS libraries compiled for 64 bit Windows. The compilation was done by a third party. @@ -306,10 +330,10 @@ replacements for BLAS and LAPACK. In essence this involves linking with the replacement libraries instead of BLAS and LAPACK. -You may need to make minor modifications to include/armadillo_bits/config.hpp -to make sure Armadillo uses the same integer sizes and style of function names -as used by the replacement libraries. Specifically, you may need comment or uncomment -the following defines: +Minor modifications to include/armadillo_bits/config.hpp may be required +to ensure Armadillo uses the same integer sizes and style of function names +as used by the replacement libraries. Specifically, the following defines +may need to be enabled or disabled: ARMA_USE_WRAPPER ARMA_BLAS_CAPITALS @@ -326,9 +350,8 @@ the LD_LIBRARY_PATH environment variable, or for a more permanent solution, adding the directory locations to /etc/ld.so.conf. It may also be possible to store a text file with the locations in the /etc/ld.so.conf.d directory. -For example, /etc/ld.so.conf.d/mkl.conf. If you modify /etc/ld.so.conf -or create /etc/ld.so.conf.d/mkl.conf, you will need to run /sbin/ldconfig -afterwards. +For example, /etc/ld.so.conf.d/mkl.conf. If /etc/ld.so.conf is modified +or /etc/ld.so.conf.d/mkl.conf is created, /sbin/ldconfig must be run afterwards. Below is an example of /etc/ld.so.conf.d/mkl.conf where Intel MKL is installed in /opt/intel @@ -336,10 +359,10 @@ /opt/intel/lib/intel64 /opt/intel/mkl/lib/intel64 -If you have MKL installed and it is persistently giving problems -during linking, you can disable Armadillo's support for MKL by editing -the CMakeLists.txt file, deleting CMakeCache.txt and re-running -the CMake based installation. Comment out the lines containing: +If MKL is installed and it is persistently giving problems during linking, +Support for MKL can be disabled by editing the CMakeLists.txt file, +deleting CMakeCache.txt and re-running the CMake based installation. +Comment out the lines containing: INCLUDE(ARMA_FindMKL) INCLUDE(ARMA_FindACMLMP) Binary files old/armadillo-9.900.2/armadillo_solver_2020.pdf and new/armadillo-9.900.3/armadillo_solver_2020.pdf differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/armadillo-9.900.2/cmake_aux/Modules/ARMA_FindFlexiBLAS.cmake new/armadillo-9.900.3/cmake_aux/Modules/ARMA_FindFlexiBLAS.cmake --- old/armadillo-9.900.2/cmake_aux/Modules/ARMA_FindFlexiBLAS.cmake 1970-01-01 01:00:00.000000000 +0100 +++ new/armadillo-9.900.3/cmake_aux/Modules/ARMA_FindFlexiBLAS.cmake 2016-06-16 18:21:13.000000000 +0200 @@ -0,0 +1,48 @@ +set(FlexiBLAS_NAMES) +set(FlexiBLAS_NAMES ${FlexiBLAS_NAMES} flexiblas) + +set(FlexiBLAS_TMP_LIBRARY) +set(FlexiBLAS_TMP_LIBRARIES) + + +foreach (FlexiBLAS_NAME ${FlexiBLAS_NAMES}) + find_library(${FlexiBLAS_NAME}_LIBRARY + NAMES ${FlexiBLAS_NAME} + PATHS ${CMAKE_SYSTEM_LIBRARY_PATH} /lib64 /lib /usr/lib64 /usr/lib /usr/local/lib64 /usr/local/lib /opt/local/lib64 /opt/local/lib + ) + + set(FlexiBLAS_TMP_LIBRARY ${${FlexiBLAS_NAME}_LIBRARY}) + + if(FlexiBLAS_TMP_LIBRARY) + set(FlexiBLAS_TMP_LIBRARIES ${FlexiBLAS_TMP_LIBRARIES} ${FlexiBLAS_TMP_LIBRARY}) + endif() +endforeach() + + +# use only one library + +if(FlexiBLAS_TMP_LIBRARIES) + list(GET FlexiBLAS_TMP_LIBRARIES 0 FlexiBLAS_LIBRARY) +endif() + + +if(FlexiBLAS_LIBRARY) + set(FlexiBLAS_LIBRARIES ${FlexiBLAS_LIBRARY}) + set(FlexiBLAS_FOUND "YES") +else() + set(FlexiBLAS_FOUND "NO") +endif() + + +if(FlexiBLAS_FOUND) + if (NOT FlexiBLAS_FIND_QUIETLY) + message(STATUS "Found FlexiBLAS: ${FlexiBLAS_LIBRARIES}") + endif() +else() + if(FlexiBLAS_FIND_REQUIRED) + message(FATAL_ERROR "Could not find FlexiBLAS") + endif() +endif() + + +# mark_as_advanced(FlexiBLAS_LIBRARY) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/armadillo-9.900.2/docs.html new/armadillo-9.900.3/docs.html --- old/armadillo-9.900.2/docs.html 2016-06-16 18:21:12.000000000 +0200 +++ new/armadillo-9.900.3/docs.html 2016-06-16 18:21:13.000000000 +0200 @@ -244,7 +244,7 @@ <tr><td><a href="#field">field<<i>object type</i>></a></td><td> </td><td>class for storing arbitrary objects in matrix-like or cube-like layouts</td></tr> <tr><td><a href="#SpMat">SpMat<<i>type</i>>, sp_mat, sp_cx_mat</a></td><td> </td><td>sparse matrix class</td></tr> <tr><td> </td><td> </td><td> </td></tr> -<tr><td><a href="#operators">operators</a></td><td> </td><td><code><big>+</big> <big>-</big> <big>*</big> / % == != <= >= < ></code></td></tr> +<tr><td><a href="#operators">operators</a></td><td> </td><td><code><big>+</big> <big>−</big> <big>*</big> % / == != <= >= < > && ||</code></td></tr> </tbody> </table> </ul> @@ -2072,14 +2072,14 @@ <div class="pagebreak"></div><div class="noprint"><hr class="greyline"><br></div> <a name="operators"></a> -<b>operators: <code><big>+</big> <big>−</big> <big>*</big> / % == != <= >= < ></code></b> +<b>operators: <code><big>+</big> <big>−</big> <big>*</big> % / == != <= >= < > && ||</code></b> <ul> <li> Overloaded operators for <i>Mat</i>, <i>Col</i>, <i>Row</i> and <i>Cube</i> classes </li> <br> <li> -Meanings: +Operations: <br> <br> <ul> @@ -2089,13 +2089,13 @@ <td style="vertical-align: top;"><code><b><big>+</big></b></code></td> <td style="vertical-align: top;"> <br> </td> - <td style="vertical-align: top;">Addition of two objects</td> + <td style="vertical-align: top;">addition of two objects</td> </tr> <tr> <td style="vertical-align: top;"><code><b><big>−</big></b></code></td> <td style="vertical-align: top;"><br> </td> - <td style="vertical-align: top;">Subtraction of one object from another or negation of an object</td> + <td style="vertical-align: top;">subtraction of one object from another or negation of an object</td> </tr> <tr> <td style="vertical-align: top;"> </td> @@ -2103,16 +2103,10 @@ <td style="vertical-align: top;"> </td> </tr> <tr> - <td style="vertical-align: top;"><code><b>/</b></code></td> - <td style="vertical-align: top;"><br> - </td> - <td style="vertical-align: top;">Element-wise division of an object by another object or a scalar</td> - </tr> - <tr> <td style="vertical-align: top;"><code><b><big>*</big></b></code></td> <td style="vertical-align: top;"><br> </td> - <td style="vertical-align: top;">Matrix multiplication of two objects; not applicable to the <i>Cube</i> class unless multiplying a cube by a scalar</td> + <td style="vertical-align: top;">matrix multiplication of two objects; not applicable to the <i>Cube</i> class unless multiplying by a scalar</td> </tr> <tr> <td style="vertical-align: top;"> </td> @@ -2123,7 +2117,13 @@ <td style="vertical-align: top;"><code><b>%</b></code></td> <td style="vertical-align: top;"><br> </td> - <td style="vertical-align: top;"><a name="schur_product"></a>Schur product: element-wise multiplication of two objects</td> + <td style="vertical-align: top;"><a name="schur_product"></a>element-wise multiplication of two objects (Schur product)</td> + </tr> + <tr> + <td style="vertical-align: top;"><code><b>/</b></code></td> + <td style="vertical-align: top;"><br> + </td> + <td style="vertical-align: top;">element-wise division of an object by another object or a scalar</td> </tr> <tr> <td style="vertical-align: top;"> </td> @@ -2134,13 +2134,13 @@ <td style="vertical-align: top;"><code><b>==</b></code></td> <td style="vertical-align: top;"><br> </td> - <td style="vertical-align: top;">Element-wise equality evaluation of two objects; generates a matrix of type <i>umat</i> with entries that indicate whether at a given position the two elements from the two objects are equal (1) or not equal (0)</td> + <td style="vertical-align: top;">element-wise equality evaluation of two objects; generates a matrix/cube of type <i>umat</i>/<i>ucube</i></td> </tr> <tr> <td style="vertical-align: top;"><code><b>!=</b></code></td> <td style="vertical-align: top;"><br> </td> - <td style="vertical-align: top;">Element-wise non-equality evaluation of two objects</td> + <td style="vertical-align: top;">element-wise non-equality evaluation of two objects; generates a matrix/cube of type <i>umat</i>/<i>ucube</i></td> </tr> <tr> <td style="vertical-align: top;"> </td> @@ -2151,13 +2151,13 @@ <td style="vertical-align: top;"><code><b>>=</b></code></td> <td style="vertical-align: top;"><br> </td> - <td style="vertical-align: top;">As for <code>==</code>, but the check is for "greater than or equal to"</td> + <td style="vertical-align: top;">element-wise "greater than or equal to" evaluation of two objects; generates a matrix/cube of type <i>umat</i>/<i>ucube</i></td> </tr> <tr> <td style="vertical-align: top;"><code><b><=</b></code></td> <td style="vertical-align: top;"><br> </td> - <td style="vertical-align: top;">As for <code>==</code>, but the check is for "less than or equal to"</td> + <td style="vertical-align: top;">element-wise "less than or equal to" evaluation of two objects; generates a matrix/cube of type <i>umat</i>/<i>ucube</i></td> </tr> <tr> <td style="vertical-align: top;"> </td> @@ -2168,13 +2168,30 @@ <td style="vertical-align: top;"><code><b>></b></code></td> <td style="vertical-align: top;"><br> </td> - <td style="vertical-align: top;">As for <code>==</code>, but the check is for "greater than"</td> + <td style="vertical-align: top;">element-wise "greater than" evaluation of two objects; generates a matrix/cube of type <i>umat</i>/<i>ucube</i></td> </tr> <tr> <td style="vertical-align: top;"><code><b><</b></code></td> <td style="vertical-align: top;"><br> </td> - <td style="vertical-align: top;">As for <code>==</code>, but the check is for "less than"</td> + <td style="vertical-align: top;">element-wise "less than" evaluation of two objects; generates a matrix/cube of type <i>umat</i>/<i>ucube</i></td> + </tr> + <tr> + <td style="vertical-align: top;"> </td> + <td style="vertical-align: top;"> </td> + <td style="vertical-align: top;"> </td> + </tr> + <tr> + <td style="vertical-align: top;"><code><b>&&</b></code></td> + <td style="vertical-align: top;"><br> + </td> + <td style="vertical-align: top;">element-wise logical AND evaluation of two objects; generates a matrix/cube of type <i>umat</i>/<i>ucube</i></td> + </tr> + <tr> + <td style="vertical-align: top;"><code><b>||</b></code></td> + <td style="vertical-align: top;"><br> + </td> + <td style="vertical-align: top;">element-wise logical OR evaluation of two objects; generates a matrix/cube of type <i>umat</i>/<i>ucube</i></td> </tr> </tbody> </table> @@ -2182,6 +2199,12 @@ </li> <br> <li> +For element-wise relational and logical operations +(ie. <code><b>==</b></code>, <code><b>!=</b></code>, <code><b>>=</b></code>, <code><b><=</b></code>, <code><b>></b></code>, <code><b><</b></code>, <code><b>&&</b></code>, <code><b>||</b></code>) +each element in the generated object is either 0 or 1, depending on the result of the operation +</li> +<br> +<li> <b>Caveat:</b> operators involving an equality comparison (ie. <code><b>==</b></code>, <code><b>!=</b></code>, <code><b>>=</b></code>, <code><b><=</b></code>) are not recommended for matrices of type <i>mat</i> or <i>fmat</i>, due to the necessarily <a href="https://en.wikipedia.org/wiki/Floating_point">limited precision</a> of the underlying element types; consider using <a href="#approx_equal">approx_equal()</a> instead diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/armadillo-9.900.2/include/armadillo_bits/Cube_meat.hpp new/armadillo-9.900.3/include/armadillo_bits/Cube_meat.hpp --- old/armadillo-9.900.2/include/armadillo_bits/Cube_meat.hpp 2016-06-16 18:21:12.000000000 +0200 +++ new/armadillo-9.900.3/include/armadillo_bits/Cube_meat.hpp 2016-06-16 18:21:13.000000000 +0200 @@ -199,10 +199,10 @@ { arma_extra_debug_sigprint( arma_str::format("n_rows = %d, n_cols = %d, n_slices = %d") % n_rows % n_cols % n_slices ); - #if (defined(ARMA_USE_CXX11) || defined(ARMA_64BIT_WORD)) + #if defined(ARMA_64BIT_WORD) const char* error_message = "Cube::init(): requested size is too large"; #else - const char* error_message = "Cube::init(): requested size is too large; suggest to compile in C++11 mode or enable ARMA_64BIT_WORD"; + const char* error_message = "Cube::init(): requested size is too large; suggest to compile in C++11 mode and/or enable ARMA_64BIT_WORD"; #endif arma_debug_check diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/armadillo-9.900.2/include/armadillo_bits/MapMat_meat.hpp new/armadillo-9.900.3/include/armadillo_bits/MapMat_meat.hpp --- old/armadillo-9.900.2/include/armadillo_bits/MapMat_meat.hpp 2016-06-16 18:21:12.000000000 +0200 +++ new/armadillo-9.900.3/include/armadillo_bits/MapMat_meat.hpp 2016-06-16 18:21:13.000000000 +0200 @@ -744,10 +744,10 @@ // ensure that n_elem can hold the result of (n_rows * n_cols) - #if (defined(ARMA_USE_CXX11) || defined(ARMA_64BIT_WORD)) + #if defined(ARMA_64BIT_WORD) const char* error_message = "MapMat(): requested size is too large"; #else - const char* error_message = "MapMat(): requested size is too large; suggest to compile in C++11 mode or enable ARMA_64BIT_WORD"; + const char* error_message = "MapMat(): requested size is too large; suggest to compile in C++11 mode and/or enable ARMA_64BIT_WORD"; #endif arma_debug_check diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/armadillo-9.900.2/include/armadillo_bits/Mat_meat.hpp new/armadillo-9.900.3/include/armadillo_bits/Mat_meat.hpp --- old/armadillo-9.900.2/include/armadillo_bits/Mat_meat.hpp 2016-06-16 18:21:12.000000000 +0200 +++ new/armadillo-9.900.3/include/armadillo_bits/Mat_meat.hpp 2016-06-16 18:21:13.000000000 +0200 @@ -186,10 +186,10 @@ // ensure that n_elem can hold the result of (n_rows * n_cols) - #if (defined(ARMA_USE_CXX11) || defined(ARMA_64BIT_WORD)) + #if defined(ARMA_64BIT_WORD) const char* error_message = "Mat::init(): requested size is too large"; #else - const char* error_message = "Mat::init(): requested size is too large; suggest to compile in C++11 mode or enable ARMA_64BIT_WORD"; + const char* error_message = "Mat::init(): requested size is too large; suggest to compile in C++11 mode and/or enable ARMA_64BIT_WORD"; #endif arma_debug_check diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/armadillo-9.900.2/include/armadillo_bits/SpMat_meat.hpp new/armadillo-9.900.3/include/armadillo_bits/SpMat_meat.hpp --- old/armadillo-9.900.2/include/armadillo_bits/SpMat_meat.hpp 2016-06-16 18:21:12.000000000 +0200 +++ new/armadillo-9.900.3/include/armadillo_bits/SpMat_meat.hpp 2016-06-16 18:21:13.000000000 +0200 @@ -5113,10 +5113,10 @@ } } - #if(defined(ARMA_USE_CXX11) || defined(ARMA_64BIT_WORD)) + #if defined(ARMA_64BIT_WORD) const char* error_message = "SpMat::init(): requested size is too large"; #else - const char* error_message = "SpMat::init(): requested size is too large; suggest to compile in C++11 mode or enable ARMA_64BIT_WORD"; + const char* error_message = "SpMat::init(): requested size is too large; suggest to compile in C++11 mode and/or enable ARMA_64BIT_WORD"; #endif // Ensure that n_elem can hold the result of (n_rows * n_cols) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/armadillo-9.900.2/include/armadillo_bits/SpSubview_bones.hpp new/armadillo-9.900.3/include/armadillo_bits/SpSubview_bones.hpp --- old/armadillo-9.900.2/include/armadillo_bits/SpSubview_bones.hpp 2016-06-16 18:21:12.000000000 +0200 +++ new/armadillo-9.900.3/include/armadillo_bits/SpSubview_bones.hpp 2016-06-16 18:21:13.000000000 +0200 @@ -43,8 +43,8 @@ protected: - arma_inline SpSubview(const SpMat<eT>& in_m, const uword in_row1, const uword in_col1, const uword in_n_rows, const uword in_n_cols); - arma_inline SpSubview( SpMat<eT>& in_m, const uword in_row1, const uword in_col1, const uword in_n_rows, const uword in_n_cols); + inline SpSubview(const SpMat<eT>& in_m, const uword in_row1, const uword in_col1, const uword in_n_rows, const uword in_n_cols); + inline SpSubview( SpMat<eT>& in_m, const uword in_row1, const uword in_col1, const uword in_n_rows, const uword in_n_cols); public: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/armadillo-9.900.2/include/armadillo_bits/SpSubview_meat.hpp new/armadillo-9.900.3/include/armadillo_bits/SpSubview_meat.hpp --- old/armadillo-9.900.2/include/armadillo_bits/SpSubview_meat.hpp 2016-06-16 18:21:12.000000000 +0200 +++ new/armadillo-9.900.3/include/armadillo_bits/SpSubview_meat.hpp 2016-06-16 18:21:13.000000000 +0200 @@ -19,7 +19,7 @@ template<typename eT> -arma_inline +inline SpSubview<eT>::SpSubview(const SpMat<eT>& in_m, const uword in_row1, const uword in_col1, const uword in_n_rows, const uword in_n_cols) : m(in_m) , aux_row1(in_row1) @@ -53,7 +53,7 @@ template<typename eT> -arma_inline +inline SpSubview<eT>::SpSubview(SpMat<eT>& in_m, const uword in_row1, const uword in_col1, const uword in_n_rows, const uword in_n_cols) : m(in_m) , aux_row1(in_row1) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/armadillo-9.900.2/include/armadillo_bits/arma_version.hpp new/armadillo-9.900.3/include/armadillo_bits/arma_version.hpp --- old/armadillo-9.900.2/include/armadillo_bits/arma_version.hpp 2016-06-16 18:21:12.000000000 +0200 +++ new/armadillo-9.900.3/include/armadillo_bits/arma_version.hpp 2016-06-16 18:21:13.000000000 +0200 @@ -21,7 +21,7 @@ #define ARMA_VERSION_MAJOR 9 #define ARMA_VERSION_MINOR 900 -#define ARMA_VERSION_PATCH 2 +#define ARMA_VERSION_PATCH 3 #define ARMA_VERSION_NAME "Nocturnal Misbehaviour" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/armadillo-9.900.2/include/armadillo_bits/arrayops_bones.hpp new/armadillo-9.900.3/include/armadillo_bits/arrayops_bones.hpp --- old/armadillo-9.900.2/include/armadillo_bits/arrayops_bones.hpp 2016-06-16 18:21:12.000000000 +0200 +++ new/armadillo-9.900.3/include/armadillo_bits/arrayops_bones.hpp 2016-06-16 18:21:13.000000000 +0200 @@ -33,7 +33,7 @@ template<typename eT> - arma_hot inline static void + inline static void fill_zeros(eT* dest, const uword n_elem); @@ -131,6 +131,11 @@ template<typename eT> arma_hot inline static + void + inplace_set_simple(eT* dest, const eT val, const uword n_elem); + + template<typename eT> + arma_hot inline static void inplace_set_base(eT* dest, const eT val, const uword n_elem); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/armadillo-9.900.2/include/armadillo_bits/arrayops_meat.hpp new/armadillo-9.900.3/include/armadillo_bits/arrayops_meat.hpp --- old/armadillo-9.900.2/include/armadillo_bits/arrayops_meat.hpp 2016-06-16 18:21:12.000000000 +0200 +++ new/armadillo-9.900.3/include/armadillo_bits/arrayops_meat.hpp 2016-06-16 18:21:13.000000000 +0200 @@ -77,12 +77,20 @@ template<typename eT> -arma_hot inline void arrayops::fill_zeros(eT* dest, const uword n_elem) { - arrayops::inplace_set(dest, eT(0), n_elem); + typedef typename get_pod_type<eT>::result pod_type; + + if(std::numeric_limits<eT>::is_integer || std::numeric_limits<pod_type>::is_iec559) + { + if(n_elem > 0) { std::memset((void*)dest, 0, sizeof(eT)*n_elem); } + } + else + { + arrayops::inplace_set_simple(dest, eT(0), n_elem); + } } @@ -595,34 +603,43 @@ void arrayops::inplace_set(eT* dest, const eT val, const uword n_elem) { - typedef typename get_pod_type<eT>::result pod_type; - - if( (n_elem <= 9) && (is_cx<eT>::no) ) + if(val == eT(0)) { - arrayops::inplace_set_small(dest, val, n_elem); + arrayops::fill_zeros(dest, n_elem); } else { - if( (val == eT(0)) && (std::numeric_limits<eT>::is_integer || (std::numeric_limits<pod_type>::is_iec559 && is_real<pod_type>::value)) ) + if( (n_elem <= 9) && (is_cx<eT>::no) ) { - if(n_elem > 0) { std::memset((void*)dest, 0, sizeof(eT)*n_elem); } + arrayops::inplace_set_small(dest, val, n_elem); } else { - if(memory::is_aligned(dest)) - { - memory::mark_as_aligned(dest); - - arrayops::inplace_set_base(dest, val, n_elem); - } - else - { - arrayops::inplace_set_base(dest, val, n_elem); - } + arrayops::inplace_set_simple(dest, val, n_elem); } } } + + +template<typename eT> +arma_hot +inline +void +arrayops::inplace_set_simple(eT* dest, const eT val, const uword n_elem) + { + if(memory::is_aligned(dest)) + { + memory::mark_as_aligned(dest); + + arrayops::inplace_set_base(dest, val, n_elem); + } + else + { + arrayops::inplace_set_base(dest, val, n_elem); + } + } + template<typename eT> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/armadillo-9.900.2/include/armadillo_bits/band_helper.hpp new/armadillo-9.900.3/include/armadillo_bits/band_helper.hpp --- old/armadillo-9.900.2/include/armadillo_bits/band_helper.hpp 2016-06-16 18:21:12.000000000 +0200 +++ new/armadillo-9.900.3/include/armadillo_bits/band_helper.hpp 2016-06-16 18:21:13.000000000 +0200 @@ -37,7 +37,7 @@ if(N < N_min) { return false; } - // first, quickly check bottom-right and top-left corners + // first, quickly check bottom-left and top-right corners const eT eT_zero = eT(0); @@ -115,7 +115,7 @@ if(N < N_min) { return false; } - // first, quickly check bottom-right corner + // first, quickly check bottom-left corner const eT eT_zero = eT(0); @@ -178,7 +178,7 @@ if(N < N_min) { return false; } - // first, quickly check top-left corner + // first, quickly check top-right corner const eT eT_zero = eT(0); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/armadillo-9.900.2/include/armadillo_bits/diskio_bones.hpp new/armadillo-9.900.3/include/armadillo_bits/diskio_bones.hpp --- old/armadillo-9.900.2/include/armadillo_bits/diskio_bones.hpp 2016-06-16 18:21:12.000000000 +0200 +++ new/armadillo-9.900.3/include/armadillo_bits/diskio_bones.hpp 2016-06-16 18:21:13.000000000 +0200 @@ -23,6 +23,21 @@ { public: + inline arma_deprecated static file_type guess_file_type(std::istream& f); + + + private: + + template<typename eT> friend class Mat; + template<typename eT> friend class Cube; + template<typename eT> friend class SpMat; + template<typename oT> friend class field; + + friend class Mat_aux; + friend class Cube_aux; + friend class SpMat_aux; + friend class field_aux; + template<typename eT> inline arma_cold static std::string gen_txt_header(const Mat<eT>&); template<typename eT> inline arma_cold static std::string gen_bin_header(const Mat<eT>&); @@ -31,8 +46,6 @@ template<typename eT> inline arma_cold static std::string gen_txt_header(const Cube<eT>&); template<typename eT> inline arma_cold static std::string gen_bin_header(const Cube<eT>&); - inline arma_deprecated static file_type guess_file_type(std::istream& f); - inline arma_cold static file_type guess_file_type_internal(std::istream& f); inline arma_cold static std::string gen_tmp_name(const std::string& x); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/armadillo-9.900.2/include/armadillo_bits/field_meat.hpp new/armadillo-9.900.3/include/armadillo_bits/field_meat.hpp --- old/armadillo-9.900.2/include/armadillo_bits/field_meat.hpp 2016-06-16 18:21:12.000000000 +0200 +++ new/armadillo-9.900.3/include/armadillo_bits/field_meat.hpp 2016-06-16 18:21:13.000000000 +0200 @@ -1943,10 +1943,10 @@ { arma_extra_debug_sigprint( arma_str::format("n_rows_in = %d, n_cols_in = %d, n_slices_in = %d") % n_rows_in % n_cols_in % n_slices_in ); - #if (defined(ARMA_USE_CXX11) || defined(ARMA_64BIT_WORD)) + #if defined(ARMA_64BIT_WORD) const char* error_message = "field::init(): requested size is too large"; #else - const char* error_message = "field::init(): requested size is too large; suggest to compile in C++11 mode or enable ARMA_64BIT_WORD"; + const char* error_message = "field::init(): requested size is too large; suggest to compile in C++11 mode and/or enable ARMA_64BIT_WORD"; #endif arma_debug_check diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/armadillo-9.900.2/include/armadillo_bits/sp_auxlib_meat.hpp new/armadillo-9.900.3/include/armadillo_bits/sp_auxlib_meat.hpp --- old/armadillo-9.900.2/include/armadillo_bits/sp_auxlib_meat.hpp 2016-06-16 18:21:12.000000000 +0200 +++ new/armadillo-9.900.3/include/armadillo_bits/sp_auxlib_meat.hpp 2016-06-16 18:21:13.000000000 +0200 @@ -1152,6 +1152,8 @@ if(nc == NULL) { return false; } + A.sync(); + nc->nnz = A.n_nonzero; nc->nzval = (void*) superlu::malloc(sizeof(eT) * A.n_nonzero ); nc->colptr = (superlu::int_t*)superlu::malloc(sizeof(superlu::int_t) * (A.n_cols + 1)); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/armadillo-9.900.2/index.html new/armadillo-9.900.3/index.html --- old/armadillo-9.900.2/index.html 2016-06-16 18:21:12.000000000 +0200 +++ new/armadillo-9.900.3/index.html 2016-06-16 18:21:13.000000000 +0200 @@ -31,7 +31,15 @@ </li> </ul> <ul> -<li>Paper with details on Gaussian Mixture Models in Armadillo: +<li>Paper with details on the linear solver in Armadillo +<ul> +<li><a href="http://arma.sourceforge.net/armadillo_solver_2020.pdf">armadillo_solver_2020.pdf</a> (online copy)</li> +<li><a href="armadillo_solver_2020.pdf">armadillo_solver_2020.pdf</a> (local copy)</li> +</ul> +</li> +</ul> +<ul> +<li>Paper with details on Gaussian Mixture Models in Armadillo <ul> <li><a href="http://arma.sourceforge.net/armadillo_spcs_2017.pdf">armadillo_spcs_2017.pdf</a> (online copy)</li> <li><a href="armadillo_spcs_2017.pdf">armadillo_spcs_2017.pdf</a> (local copy)</li> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/armadillo-9.900.2/misc/armadillo.spec new/armadillo-9.900.3/misc/armadillo.spec --- old/armadillo-9.900.2/misc/armadillo.spec 2016-06-16 18:21:12.000000000 +0200 +++ new/armadillo-9.900.3/misc/armadillo.spec 2016-06-16 18:21:13.000000000 +0200 @@ -95,6 +95,7 @@ %doc armadillo_joss_2016.pdf %doc armadillo_lncs_2018.pdf %doc armadillo_nicta_2010.pdf +%doc armadillo_solver_2020.pdf %doc armadillo_spcs_2017.pdf %doc rcpp_armadillo_csda_2014.pdf %doc mex_interface