Hello community,

here is the log from the commit of package armadillo for openSUSE:Factory 
checked in at 2020-01-06 15:21:38
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/armadillo (Old)
 and      /work/SRC/openSUSE:Factory/.armadillo.new.6675 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "armadillo"

Mon Jan  6 15:21:38 2020 rev:131 rq:761007 version:9.800.3

Changes:
--------
--- /work/SRC/openSUSE:Factory/armadillo/armadillo.changes      2019-10-30 
14:48:40.334236739 +0100
+++ /work/SRC/openSUSE:Factory/.armadillo.new.6675/armadillo.changes    
2020-01-06 15:21:41.904465673 +0100
@@ -1,0 +2,6 @@
+Sat Jan  4 14:59:19 UTC 2020 - Atri Bhattacharya <badshah...@gmail.com>
+
+- Update to version 9.800.3:
+  * Minor bug fixes.
+
+-------------------------------------------------------------------

Old:
----
  armadillo-9.800.1.tar.xz

New:
----
  armadillo-9.800.3.tar.xz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ armadillo.spec ++++++
--- /var/tmp/diff_new_pack.5v8gFj/_old  2020-01-06 15:21:42.580466023 +0100
+++ /var/tmp/diff_new_pack.5v8gFj/_new  2020-01-06 15:21:42.580466023 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package armadillo
 #
-# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2020 SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -18,12 +18,12 @@
 
 %define soname libarmadillo9
 Name:           armadillo
-Version:        9.800.1
+Version:        9.800.3
 Release:        0
 Summary:        C++ matrix library with interfaces to LAPACK and ATLAS
 License:        Apache-2.0
 Group:          Development/Libraries/C and C++
-Url:            http://arma.sourceforge.net/
+URL:            http://arma.sourceforge.net/
 Source:         http://downloads.sourceforge.net/arma/%{name}-%{version}.tar.xz
 Source2:        baselibs.conf
 BuildRequires:  arpack-ng-devel

++++++ armadillo-9.800.1.tar.xz -> armadillo-9.800.3.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/armadillo-9.800.1/CMakeLists.txt 
new/armadillo-9.800.3/CMakeLists.txt
--- old/armadillo-9.800.1/CMakeLists.txt        2016-06-16 18:20:23.000000000 
+0200
+++ new/armadillo-9.800.3/CMakeLists.txt        2016-06-16 18:20:25.000000000 
+0200
@@ -29,6 +29,14 @@
 
 cmake_minimum_required(VERSION 2.8.12 FATAL_ERROR)
 
+if(NOT (${CMAKE_MAJOR_VERSION} LESS 3))
+  if(POLICY CMP0025)
+    # enable differentiation between vanilla Clang and AppleClang
+    cmake_policy(SET CMP0025 NEW)
+    message(STATUS "*** set cmake policy CMP0025 to NEW")
+  endif()
+endif()
+
 project(armadillo CXX C)
 include(CheckIncludeFileCXX)
 include(CheckLibraryExists)
@@ -126,6 +134,14 @@
 
 option(DETECT_HDF5 "Detect HDF5 and include HDF5 support, if found" ON)
 
+option(ALLOW_OPENBLAS_MACOS "Allow detection of OpenBLAS on macOS" OFF)
+## Example use on the command line:
+## cmake -D ALLOW_OPENBLAS_MACOS=true .
+
+option(ALLOW_BLAS_LAPACK_MACOS "Allow detection of BLAS and LAPACK on macOS" 
OFF)
+## Example use on the command line:
+## cmake -D ALLOW_BLAS_LAPACK_MACOS=true .
+
 
 if(WIN32)
   message(STATUS "")
@@ -149,6 +165,8 @@
 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_OPENBLAS_MACOS       = ${ALLOW_OPENBLAS_MACOS}"      )
+message(STATUS "ALLOW_BLAS_LAPACK_MACOS    = ${ALLOW_BLAS_LAPACK_MACOS}"   )
 
 
 ##
@@ -158,18 +176,64 @@
 set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} 
"${CMAKE_CURRENT_SOURCE_DIR}/cmake_aux/Modules/")
 
 if(APPLE)
+  message(STATUS "Detected macOS")
   
   set(ARMA_OS macos)
   
-  set(ARMA_USE_LAPACK true)
-  set(ARMA_USE_BLAS   true)
+  set(ARMA_USE_LAPACK     true)
+  set(ARMA_USE_BLAS       true)
+  set(ARMA_USE_ACCELERATE true)
+  
+  if(ALLOW_OPENBLAS_MACOS)
+    include(ARMA_FindOpenBLAS)
+    message(STATUS "OpenBLAS_FOUND = ${OpenBLAS_FOUND}")
+    message(STATUS "")
+    message(STATUS "*** If use of OpenBLAS is causing problems,")
+    message(STATUS "*** rerun cmake with detection of OpenBLAS disabled:")
+    message(STATUS "*** cmake -D ALLOW_OPENBLAS_MACOS=false .")
+    message(STATUS "")
+    
+    if(OpenBLAS_FOUND)
+      set(ARMA_LIBS ${ARMA_LIBS} ${OpenBLAS_LIBRARIES})
+      set(ARMA_USE_ACCELERATE false)
+    endif()
+  endif()
   
-  set(ARMA_LIBS ${ARMA_LIBS} "-framework Accelerate")  # or "-framework 
accelerate" ?
-  message(STATUS "macOS detected. Added '-framework Accelerate' to compiler 
flags")
+  if(ALLOW_BLAS_LAPACK_MACOS)
+    include(ARMA_FindBLAS)
+    include(ARMA_FindLAPACK)
+    message(STATUS "  BLAS_FOUND = ${BLAS_FOUND}"  )
+    message(STATUS "LAPACK_FOUND = ${LAPACK_FOUND}")
+    message(STATUS "")
+    message(STATUS "*** If use of BLAS and LAPACK is causing problems,")
+    message(STATUS "*** rerun cmake with detection of BLAS and LAPACK 
disabled:")
+    message(STATUS "*** cmake -D ALLOW_BLAS_LAPACK_MACOS=false .")
+    message(STATUS "")
+    
+    if(BLAS_FOUND AND LAPACK_FOUND)
+      set(ARMA_LIBS ${ARMA_LIBS} ${BLAS_LIBRARIES})
+      set(ARMA_LIBS ${ARMA_LIBS} ${LAPACK_LIBRARIES})
+      set(ARMA_USE_ACCELERATE false)
+    endif()
+  endif()
   
-  if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
-    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++")
-    message(STATUS "Clang compiler on macOS detected. Added '-stdlib=libc++' 
to compiler flags")
+  if(ARMA_USE_ACCELERATE)
+    set(ARMA_LIBS ${ARMA_LIBS} "-framework Accelerate")  # or "-framework 
accelerate" ?
+    message(STATUS "Added '-framework Accelerate' to compiler flags")
+  endif()
+  
+  if(DEFINED CMAKE_CXX_COMPILER_ID)
+    if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
+      set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++")
+      message(STATUS "Detected Clang compiler on macOS. Added '-stdlib=libc++' 
to compiler flags")
+    endif()
+    
+    if(NOT (${CMAKE_MAJOR_VERSION} LESS 3))
+      if(CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang")
+        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++")
+        message(STATUS "Detected AppleClang compiler on macOS. Added 
'-stdlib=libc++' to compiler flags")
+      endif()
+    endif()
   endif()
   
   set(CMAKE_MACOSX_RPATH 1)
@@ -369,16 +433,32 @@
 
 # NOTE: ARMA_USE_EXTERN_CXX11_RNG requires compiler support for thread_local 
and C++11
 # NOTE: for Linux, this is available with gcc 4.8.3 onwards
-# TODO: for macOS, thread_local is supoported in Xcode 8 (mid 2016 onwards) in 
C++11 mode
+# NOTE: for macOS, thread_local is supoported in Xcode 8 (mid 2016 onwards) in 
C++11 mode
 
 if(DEFINED CMAKE_CXX_COMPILER_ID AND DEFINED CMAKE_CXX_COMPILER_VERSION)
   if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND NOT 
${CMAKE_CXX_COMPILER_VERSION} VERSION_LESS 4.8.3)
     set(ARMA_USE_EXTERN_CXX11_RNG true)
     set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
     message(STATUS "Detected gcc 4.8.3 or later. Added '-std=c++11' to 
compiler flags")
+  else()
+    if(NOT (${CMAKE_MAJOR_VERSION} LESS 3))
+      
+      if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND NOT 
${CMAKE_CXX_COMPILER_VERSION} VERSION_LESS 6.0)
+        set(ARMA_USE_EXTERN_CXX11_RNG true)
+        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14")
+        message(STATUS "Detected Clang 6.0 or later. Added '-std=c++14' to 
compiler flags")
+      elseif(CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang" AND NOT 
${CMAKE_CXX_COMPILER_VERSION} VERSION_LESS 8.0)
+        set(ARMA_USE_EXTERN_CXX11_RNG true)
+        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14")
+        message(STATUS "Detected AppleClang 8.0 or later. Added '-std=c++14' 
to compiler flags")
+      endif()
+      
+    endif()
   endif()
 endif()
 
+message(STATUS "ARMA_USE_EXTERN_CXX11_RNG = ${ARMA_USE_EXTERN_CXX11_RNG}")
+
 
 message(STATUS "Copying ${PROJECT_SOURCE_DIR}/include/ to 
${PROJECT_BINARY_DIR}/tmp/include/")
 file(COPY ${PROJECT_SOURCE_DIR}/include/ DESTINATION 
${PROJECT_BINARY_DIR}/tmp/include/)
@@ -413,8 +493,19 @@
 
 if(CMAKE_COMPILER_IS_GNUCXX)
   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2")
+else()
+  if(DEFINED CMAKE_CXX_COMPILER_ID)
+    if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
+      set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2")
+    elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
+      set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2")
+    elseif(CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang")
+      set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2")
+    endif()
+  endif()
 endif()
 
+
 message(STATUS "CMAKE_CXX_FLAGS           = ${CMAKE_CXX_FLAGS}"          )
 message(STATUS "CMAKE_SHARED_LINKER_FLAGS = ${CMAKE_SHARED_LINKER_FLAGS}")
 message(STATUS "CMAKE_REQUIRED_INCLUDES   = ${CMAKE_REQUIRED_INCLUDES}"  )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/armadillo-9.800.1/README.md 
new/armadillo-9.800.3/README.md
--- old/armadillo-9.800.1/README.md     2016-06-16 18:20:23.000000000 +0200
+++ new/armadillo-9.800.3/README.md     2016-06-16 18:20:25.000000000 +0200
@@ -106,17 +106,18 @@
 
 ### 4: Compilers and External Dependencies
 
-Armadillo makes extensive use of template meta-programming, recursive templates
-and template based function overloading. As such, C++ compilers which do not
-fully implement the C++ standard may not work correctly.
+Armadillo makes extensive use of template meta-programming and many other
+advanced C++ features.  As such, C++ compilers which do not fully implement
+the C++ standard may not work correctly.
 
 The functionality of Armadillo is partly dependent on other libraries:
-LAPACK, BLAS, ARPACK and SuperLU. The LAPACK and BLAS libraries are
-used for dense matrices, while the ARPACK and SuperLU libraries are
-used for sparse matrices. Armadillo can work without these libraries,
-but its functionality will be reduced. In particular, basic functionality
-will be available (eg. matrix addition and multiplication), but things
-like eigen decomposition or matrix inversion will not be.
+LAPACK, BLAS (preferably OpenBLAS), ARPACK and SuperLU.
+LAPACK and BLAS are used for dense matrices,
+while ARPACK and SuperLU are used for sparse matrices.
+
+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 like eigen decomposition or matrix inversion will not be.
 Matrix multiplication (mainly for big matrices) may not be as fast.
 
 As Armadillo is a template library, we recommended that optimisation
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/armadillo-9.800.1/cmake_aux/Modules/ARMA_FindOpenBLAS.cmake 
new/armadillo-9.800.3/cmake_aux/Modules/ARMA_FindOpenBLAS.cmake
--- old/armadillo-9.800.1/cmake_aux/Modules/ARMA_FindOpenBLAS.cmake     
2016-06-16 18:20:23.000000000 +0200
+++ new/armadillo-9.800.3/cmake_aux/Modules/ARMA_FindOpenBLAS.cmake     
2016-06-16 18:20:25.000000000 +0200
@@ -10,7 +10,7 @@
 foreach (OpenBLAS_NAME ${OpenBLAS_NAMES})
   find_library(${OpenBLAS_NAME}_LIBRARY
     NAMES ${OpenBLAS_NAME}
-    PATHS ${CMAKE_SYSTEM_LIBRARY_PATH} /lib64 /lib /usr/lib64 /usr/lib 
/usr/local/lib64 /usr/local/lib /opt/local/lib64 /opt/local/lib
+    PATHS ${CMAKE_SYSTEM_LIBRARY_PATH} /lib64 /lib /usr/lib64 /usr/lib 
/usr/local/lib64 /usr/local/lib /opt/local/lib64 /opt/local/lib 
/usr/lib/openblas/ /usr/lib/openblas/lib /usr/local/opt/openblas/lib 
/opt/local/lib/openblas /opt/local/lib/openblas/lib
     )
   
   set(OpenBLAS_TMP_LIBRARY ${${OpenBLAS_NAME}_LIBRARY})
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/armadillo-9.800.1/docs.html 
new/armadillo-9.800.3/docs.html
--- old/armadillo-9.800.1/docs.html     2016-06-16 18:20:23.000000000 +0200
+++ new/armadillo-9.800.3/docs.html     2016-06-16 18:20:25.000000000 +0200
@@ -18088,7 +18088,8 @@
       &nbsp;
     </td>
     <td style="vertical-align: top;">
-Disable use of so-called "hidden arguments" when calling BLAS and LAPACK 
functions
+Disable use of so-called "hidden arguments" when calling BLAS and LAPACK 
functions.
+May be necessary when using Armadillo in conjunction with broken MKL headers 
(eg. if you have <code>#include "mkl_lapack.h"</code> in your code).
     </td>
   </tr>
   <tr>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/armadillo-9.800.1/include/armadillo_bits/Mat_bones.hpp 
new/armadillo-9.800.3/include/armadillo_bits/Mat_bones.hpp
--- old/armadillo-9.800.1/include/armadillo_bits/Mat_bones.hpp  2016-06-16 
18:20:23.000000000 +0200
+++ new/armadillo-9.800.3/include/armadillo_bits/Mat_bones.hpp  2016-06-16 
18:20:25.000000000 +0200
@@ -554,7 +554,7 @@
     
     inline row_iterator();
     inline row_iterator(const row_iterator& X);
-    inline row_iterator(Mat<eT>& in_M, const uword in_row);
+    inline row_iterator(Mat<eT>& in_M, const uword in_row, const uword in_col);
     
     inline arma_warn_unused eT& operator* ();
     
@@ -576,7 +576,6 @@
     typedef eT&                             reference;
     
     arma_aligned Mat<eT>* M;
-    arma_aligned eT*      current_ptr;
     arma_aligned uword    current_row;
     arma_aligned uword    current_col;
     };
@@ -589,7 +588,7 @@
     inline const_row_iterator();
     inline const_row_iterator(const       row_iterator& X);
     inline const_row_iterator(const const_row_iterator& X);
-    inline const_row_iterator(const Mat<eT>& in_M, const uword in_row);
+    inline const_row_iterator(const Mat<eT>& in_M, const uword in_row, const 
uword in_col);
     
     inline arma_warn_unused const eT& operator*() const;
     
@@ -611,7 +610,6 @@
     typedef const eT&                       reference;
     
     arma_aligned const Mat<eT>* M;
-    arma_aligned const eT*      current_ptr;
     arma_aligned       uword    current_row;
     arma_aligned       uword    current_col;
     };
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/armadillo-9.800.1/include/armadillo_bits/Mat_meat.hpp 
new/armadillo-9.800.3/include/armadillo_bits/Mat_meat.hpp
--- old/armadillo-9.800.1/include/armadillo_bits/Mat_meat.hpp   2016-06-16 
18:20:23.000000000 +0200
+++ new/armadillo-9.800.3/include/armadillo_bits/Mat_meat.hpp   2016-06-16 
18:20:25.000000000 +0200
@@ -7796,7 +7796,6 @@
 inline
 Mat<eT>::row_iterator::row_iterator()
   : M          (NULL)
-  , current_ptr(NULL)
   , current_row(0   )
   , current_col(0   )
   {
@@ -7810,7 +7809,6 @@
 inline
 Mat<eT>::row_iterator::row_iterator(const row_iterator& X)
   : M          (X.M          )
-  , current_ptr(X.current_ptr)
   , current_row(X.current_row)
   , current_col(X.current_col)
   {
@@ -7821,11 +7819,10 @@
 
 template<typename eT>
 inline
-Mat<eT>::row_iterator::row_iterator(Mat<eT>& in_M, const uword in_row)
-  : M          (&in_M               )
-  , current_ptr(&(in_M.at(in_row,0)))
-  , current_row(in_row              )
-  , current_col(0                   )
+Mat<eT>::row_iterator::row_iterator(Mat<eT>& in_M, const uword in_row, const 
uword in_col)
+  : M          (&in_M )
+  , current_row(in_row)
+  , current_col(in_col)
   {
   arma_extra_debug_sigprint();
   }
@@ -7838,7 +7835,7 @@
 eT&
 Mat<eT>::row_iterator::operator*()
   {
-  return (*current_ptr);
+  return M->at(current_row,current_col);
   }
 
 
@@ -7854,12 +7851,6 @@
     {
     current_col = 0;
     current_row++;
-    
-    current_ptr = &(M->at(current_row, 0));
-    }
-  else
-    {
-    current_ptr += M->n_rows;
     }
   
   return *this;
@@ -7890,8 +7881,6 @@
   if(current_col > 0)
     {
     current_col--;
-    
-    current_ptr -= M->n_rows;
     }
   else
     {
@@ -7899,8 +7888,6 @@
       {
       current_col = M->n_cols - 1;
       current_row--;
-      
-      current_ptr = &(M->at(current_row, current_col));
       }
     }
   
@@ -7930,7 +7917,7 @@
 bool
 Mat<eT>::row_iterator::operator!=(const typename Mat<eT>::row_iterator& X) 
const
   {
-  return (current_ptr != X.current_ptr);
+  return ( (current_row != X.current_row) || (current_col != X.current_col) );
   }
 
 
@@ -7941,7 +7928,7 @@
 bool
 Mat<eT>::row_iterator::operator==(const typename Mat<eT>::row_iterator& X) 
const
   {
-  return (current_ptr == X.current_ptr);
+  return ( (current_row == X.current_row) && (current_col == X.current_col) );
   }
 
 
@@ -7952,7 +7939,7 @@
 bool
 Mat<eT>::row_iterator::operator!=(const typename Mat<eT>::const_row_iterator& 
X) const
   {
-  return (current_ptr != X.current_ptr);
+  return ( (current_row != X.current_row) || (current_col != X.current_col) );
   }
 
 
@@ -7963,7 +7950,7 @@
 bool
 Mat<eT>::row_iterator::operator==(const typename Mat<eT>::const_row_iterator& 
X) const
   {
-  return (current_ptr == X.current_ptr);
+  return ( (current_row == X.current_row) && (current_col == X.current_col) );
   }
 
 
@@ -7972,7 +7959,6 @@
 inline
 Mat<eT>::const_row_iterator::const_row_iterator()
   : M          (NULL)
-  , current_ptr(NULL)
   , current_row(0   )
   , current_col(0   )
   {
@@ -7986,7 +7972,6 @@
 inline
 Mat<eT>::const_row_iterator::const_row_iterator(const typename 
Mat<eT>::row_iterator& X)
   : M          (X.M          )
-  , current_ptr(X.current_ptr)
   , current_row(X.current_row)
   , current_col(X.current_col)
   {
@@ -7999,7 +7984,6 @@
 inline
 Mat<eT>::const_row_iterator::const_row_iterator(const typename 
Mat<eT>::const_row_iterator& X)
   : M          (X.M          )
-  , current_ptr(X.current_ptr)
   , current_row(X.current_row)
   , current_col(X.current_col)
   {
@@ -8010,11 +7994,10 @@
 
 template<typename eT>
 inline
-Mat<eT>::const_row_iterator::const_row_iterator(const Mat<eT>& in_M, const 
uword in_row)
-  : M          (&in_M               )
-  , current_ptr(&(in_M.at(in_row,0)))
-  , current_row(in_row              )
-  , current_col(0                   )
+Mat<eT>::const_row_iterator::const_row_iterator(const Mat<eT>& in_M, const 
uword in_row, const uword in_col)
+  : M          (&in_M )
+  , current_row(in_row)
+  , current_col(in_col)
   {
   arma_extra_debug_sigprint();
   }
@@ -8027,7 +8010,7 @@
 const eT&
 Mat<eT>::const_row_iterator::operator*() const
   {
-  return (*current_ptr);
+  return M->at(current_row,current_col);
   }
 
 
@@ -8043,12 +8026,6 @@
     {
     current_col = 0;
     current_row++;
-    
-    current_ptr = &(M->at(current_row, 0));
-    }
-  else
-    {
-    current_ptr += M->n_rows;
     }
   
   return *this;
@@ -8079,8 +8056,6 @@
   if(current_col > 0)
     {
     current_col--;
-    
-    current_ptr -= M->n_rows;
     }
   else
     {
@@ -8088,8 +8063,6 @@
       {
       current_col = M->n_cols - 1;
       current_row--;
-      
-      current_ptr = &(M->at(current_row, current_col));
       }
     }
   
@@ -8119,7 +8092,7 @@
 bool
 Mat<eT>::const_row_iterator::operator!=(const typename Mat<eT>::row_iterator& 
X) const
   {
-  return (current_ptr != X.current_ptr);
+  return ( (current_row != X.current_row) || (current_col != X.current_col) );
   }
 
 
@@ -8130,7 +8103,7 @@
 bool
 Mat<eT>::const_row_iterator::operator==(const typename Mat<eT>::row_iterator& 
X) const
   {
-  return (current_ptr == X.current_ptr);
+  return ( (current_row == X.current_row) && (current_col == X.current_col) );
   }
 
 
@@ -8141,7 +8114,7 @@
 bool
 Mat<eT>::const_row_iterator::operator!=(const typename 
Mat<eT>::const_row_iterator& X) const
   {
-  return (current_ptr != X.current_ptr);
+  return ( (current_row != X.current_row) || (current_col != X.current_col) );
   }
 
 
@@ -8152,7 +8125,7 @@
 bool
 Mat<eT>::const_row_iterator::operator==(const typename 
Mat<eT>::const_row_iterator& X) const
   {
-  return (current_ptr == X.current_ptr);
+  return ( (current_row == X.current_row) && (current_col == X.current_col) );
   }
 
 
@@ -8692,7 +8665,7 @@
   
   arma_debug_check( (row_num >= n_rows), "Mat::begin_row(): index out of 
bounds" );
   
-  return typename Mat<eT>::row_iterator(*this, row_num);
+  return typename Mat<eT>::row_iterator(*this, row_num, uword(0));
   }
 
 
@@ -8706,7 +8679,7 @@
   
   arma_debug_check( (row_num >= n_rows), "Mat::begin_row(): index out of 
bounds" );
   
-  return typename Mat<eT>::const_row_iterator(*this, row_num);
+  return typename Mat<eT>::const_row_iterator(*this, row_num, uword(0));
   }
 
 
@@ -8720,7 +8693,7 @@
   
   arma_debug_check( (row_num >= n_rows), "Mat::end_row(): index out of bounds" 
);
   
-  return typename Mat<eT>::row_iterator(*this, row_num + 1);
+  return typename Mat<eT>::row_iterator(*this, (row_num + uword(1)), 0);
   }
 
 
@@ -8734,7 +8707,7 @@
   
   arma_debug_check( (row_num >= n_rows), "Mat::end_row(): index out of bounds" 
);
   
-  return typename Mat<eT>::const_row_iterator(*this, row_num + 1);
+  return typename Mat<eT>::const_row_iterator(*this, (row_num + uword(1)), 0);
   }
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/armadillo-9.800.1/include/armadillo_bits/arma_ostream_bones.hpp 
new/armadillo-9.800.3/include/armadillo_bits/arma_ostream_bones.hpp
--- old/armadillo-9.800.1/include/armadillo_bits/arma_ostream_bones.hpp 
2016-06-16 18:20:23.000000000 +0200
+++ new/armadillo-9.800.3/include/armadillo_bits/arma_ostream_bones.hpp 
2016-06-16 18:20:25.000000000 +0200
@@ -45,7 +45,7 @@
   template<typename eT> inline static std::streamsize 
modify_stream(std::ostream& o, const eT*              data, const uword n_elem);
   template<typename  T> inline static std::streamsize 
modify_stream(std::ostream& o, const std::complex<T>* data, const uword n_elem);
   template<typename eT> inline static std::streamsize 
modify_stream(std::ostream& o, typename SpMat<eT>::const_iterator begin, const 
uword n_elem, const typename arma_not_cx<eT>::result* junk = 0);
-  template<typename  T> inline static std::streamsize 
modify_stream(std::ostream& o, typename SpMat<T>::const_iterator begin, const 
uword n_elem, const typename arma_cx_only<T>::result* junk = 0);
+  template<typename  T> inline static std::streamsize 
modify_stream(std::ostream& o, typename SpMat< T>::const_iterator begin, const 
uword n_elem, const typename arma_cx_only<T>::result* junk = 0);
   
   template<typename eT> inline static void print_elem_zero(std::ostream& o, 
const bool modify);
   
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/armadillo-9.800.1/include/armadillo_bits/arma_version.hpp 
new/armadillo-9.800.3/include/armadillo_bits/arma_version.hpp
--- old/armadillo-9.800.1/include/armadillo_bits/arma_version.hpp       
2016-06-16 18:20:23.000000000 +0200
+++ new/armadillo-9.800.3/include/armadillo_bits/arma_version.hpp       
2016-06-16 18:20:25.000000000 +0200
@@ -21,7 +21,7 @@
 
 #define ARMA_VERSION_MAJOR 9
 #define ARMA_VERSION_MINOR 800
-#define ARMA_VERSION_PATCH 1
+#define ARMA_VERSION_PATCH 3
 #define ARMA_VERSION_NAME  "Horizon Scraper"
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/armadillo-9.800.1/include/armadillo_bits/auxlib_meat.hpp 
new/armadillo-9.800.3/include/armadillo_bits/auxlib_meat.hpp
--- old/armadillo-9.800.1/include/armadillo_bits/auxlib_meat.hpp        
2016-06-16 18:20:23.000000000 +0200
+++ new/armadillo-9.800.3/include/armadillo_bits/auxlib_meat.hpp        
2016-06-16 18:20:25.000000000 +0200
@@ -6149,6 +6149,10 @@
   
   const eT* X_mem = X.memptr();
   
+  const T tol = T(10000)*std::numeric_limits<T>::epsilon();  // allow some 
leeway
+  
+  if(std::abs(X_mem[0].imag()) > tol)  { return false; }
+  
   const eT& A = X_mem[Nm1  ];  // bottom-left corner (ie. last value in first 
column)
   const eT& B = X_mem[Nm1*N];  // top-right   corner (ie. first value in last 
column)
   
@@ -6158,8 +6162,6 @@
   const T delta_real = std::abs(A.real() - B.real());
   const T delta_imag = std::abs(A.imag() + B.imag());  // take into account 
the conjugate
   
-  const T tol = T(10000)*std::numeric_limits<T>::epsilon();  // allow some 
leeway
-  
   const bool okay_real = ( (delta_real <= tol) || (delta_real <= (C_real * 
tol)) );
   const bool okay_imag = ( (delta_imag <= tol) || (delta_imag <= (C_imag * 
tol)) );
   
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/armadillo-9.800.1/include/armadillo_bits/compiler_setup.hpp 
new/armadillo-9.800.3/include/armadillo_bits/compiler_setup.hpp
--- old/armadillo-9.800.1/include/armadillo_bits/compiler_setup.hpp     
2016-06-16 18:20:23.000000000 +0200
+++ new/armadillo-9.800.3/include/armadillo_bits/compiler_setup.hpp     
2016-06-16 18:20:25.000000000 +0200
@@ -142,8 +142,8 @@
   // #undef  ARMA_HAVE_POSIX_MEMALIGN
   // NOTE: posix_memalign() is available since macOS 10.6 (late 2009 onwards)
   
-  #undef  ARMA_USE_EXTERN_CXX11_RNG
-  // TODO: thread_local seems to work in Apple clang since Xcode 8 (mid 2016 
onwards)
+  // #undef  ARMA_USE_EXTERN_CXX11_RNG
+  // NOTE: thread_local seems to work in Apple clang since Xcode 8 (mid 2016 
onwards)
   // NOTE: 
https://stackoverflow.com/questions/28094794/why-does-apple-clang-disallow-c11-thread-local-when-official-clang-supports
 #endif
 
@@ -399,7 +399,7 @@
   
   #pragma warning(disable: 4127)  // conditional expression is constant
   #pragma warning(disable: 4180)  // qualifier has no meaning
-  #pragma warning(disable: 4244)  // possible loss of data when converting 
types
+  #pragma warning(disable: 4244)  // possible loss of data when converting 
types (see also 4305)
   #pragma warning(disable: 4510)  // default constructor could not be generated
   #pragma warning(disable: 4511)  // copy constructor can't be generated
   #pragma warning(disable: 4512)  // assignment operator can't be generated
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/armadillo-9.800.1/include/armadillo_bits/config.hpp 
new/armadillo-9.800.3/include/armadillo_bits/config.hpp
--- old/armadillo-9.800.1/include/armadillo_bits/config.hpp     2016-06-16 
18:20:23.000000000 +0200
+++ new/armadillo-9.800.3/include/armadillo_bits/config.hpp     2016-06-16 
18:20:25.000000000 +0200
@@ -115,7 +115,7 @@
 // #define ARMA_64BIT_WORD
 //// Uncomment the above line if you require matrices/vectors capable of 
holding more than 4 billion elements.
 //// Your machine and compiler must have support for 64 bit integers (eg. via 
"long" or "long long").
-//// Note that ARMA_64BIT_WORD is automatically enabled when a C++11 compiler 
is detected.
+//// Note that ARMA_64BIT_WORD is automatically enabled when a C++11 compiler 
is detected and std::size_t has 64 bits.
 #endif
 
 #if !defined(ARMA_USE_HDF5)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/armadillo-9.800.1/include/armadillo_bits/config.hpp.cmake 
new/armadillo-9.800.3/include/armadillo_bits/config.hpp.cmake
--- old/armadillo-9.800.1/include/armadillo_bits/config.hpp.cmake       
2016-06-16 18:20:23.000000000 +0200
+++ new/armadillo-9.800.3/include/armadillo_bits/config.hpp.cmake       
2016-06-16 18:20:25.000000000 +0200
@@ -115,7 +115,7 @@
 // #define ARMA_64BIT_WORD
 //// Uncomment the above line if you require matrices/vectors capable of 
holding more than 4 billion elements.
 //// Your machine and compiler must have support for 64 bit integers (eg. via 
"long" or "long long").
-//// Note that ARMA_64BIT_WORD is automatically enabled when a C++11 compiler 
is detected.
+//// Note that ARMA_64BIT_WORD is automatically enabled when a C++11 compiler 
is detected and std::size_t has 64 bits.
 #endif
 
 #if !defined(ARMA_USE_HDF5)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/armadillo-9.800.1/include/armadillo_bits/def_lapack.hpp 
new/armadillo-9.800.3/include/armadillo_bits/def_lapack.hpp
--- old/armadillo-9.800.1/include/armadillo_bits/def_lapack.hpp 2016-06-16 
18:20:23.000000000 +0200
+++ new/armadillo-9.800.3/include/armadillo_bits/def_lapack.hpp 2016-06-16 
18:20:25.000000000 +0200
@@ -510,10 +510,10 @@
   void arma_fortran(arma_zgetrf)(const blas_int* m, const blas_int* n, 
blas_cxd* a, const blas_int* lda, blas_int* ipiv, blas_int* info);
   
   // solve system of linear equations using pre-computed LU decomposition
-  void arma_fortran(arma_sgetrs)(const char* trans, const blas_int* n, const 
blas_int* nrhs,    float* a, const blas_int* lda, const blas_int* ipiv,    
float* b, const blas_int* ldb, blas_int* info, const blas_len trans_len);
-  void arma_fortran(arma_dgetrs)(const char* trans, const blas_int* n, const 
blas_int* nrhs,   double* a, const blas_int* lda, const blas_int* ipiv,   
double* b, const blas_int* ldb, blas_int* info, const blas_len trans_len);
-  void arma_fortran(arma_cgetrs)(const char* trans, const blas_int* n, const 
blas_int* nrhs, blas_cxf* a, const blas_int* lda, const blas_int* ipiv, 
blas_cxf* b, const blas_int* ldb, blas_int* info, const blas_len trans_len);
-  void arma_fortran(arma_zgetrs)(const char* trans, const blas_int* n, const 
blas_int* nrhs, blas_cxd* a, const blas_int* lda, const blas_int* ipiv, 
blas_cxd* b, const blas_int* ldb, blas_int* info, const blas_len trans_len);
+  void arma_fortran(arma_sgetrs)(const char* trans, const blas_int* n, const 
blas_int* nrhs, const    float* a, const blas_int* lda, const blas_int* ipiv,   
 float* b, const blas_int* ldb, blas_int* info, const blas_len trans_len);
+  void arma_fortran(arma_dgetrs)(const char* trans, const blas_int* n, const 
blas_int* nrhs, const   double* a, const blas_int* lda, const blas_int* ipiv,   
double* b, const blas_int* ldb, blas_int* info, const blas_len trans_len);
+  void arma_fortran(arma_cgetrs)(const char* trans, const blas_int* n, const 
blas_int* nrhs, const blas_cxf* a, const blas_int* lda, const blas_int* ipiv, 
blas_cxf* b, const blas_int* ldb, blas_int* info, const blas_len trans_len);
+  void arma_fortran(arma_zgetrs)(const char* trans, const blas_int* n, const 
blas_int* nrhs, const blas_cxd* a, const blas_int* lda, const blas_int* ipiv, 
blas_cxd* b, const blas_int* ldb, blas_int* info, const blas_len trans_len);
   
   // matrix inversion (using pre-computed LU decomposition)
   void arma_fortran(arma_sgetri)(const blas_int* n,    float* a, const 
blas_int* lda, const blas_int* ipiv,    float* work, const blas_int* lwork, 
blas_int* info);
@@ -676,10 +676,10 @@
   void arma_fortran(arma_zgbtrf)(const blas_int* m, const blas_int* n, const 
blas_int* kl, const blas_int* ku, blas_cxd* ab, const blas_int* ldab, blas_int* 
ipiv, blas_int* info);
   
   // solve system of linear equations using pre-computed LU decomposition 
(general band matrix)
-  void arma_fortran(arma_sgbtrs)(const char* trans, const blas_int* n, const 
blas_int* kl, const blas_int* ku, const blas_int* nrhs,    float* ab, const 
blas_int* ldab, blas_int* ipiv,    float* b, const blas_int* ldb, blas_int* 
info, blas_len trans_len);
-  void arma_fortran(arma_dgbtrs)(const char* trans, const blas_int* n, const 
blas_int* kl, const blas_int* ku, const blas_int* nrhs,   double* ab, const 
blas_int* ldab, blas_int* ipiv,   double* b, const blas_int* ldb, blas_int* 
info, blas_len trans_len);
-  void arma_fortran(arma_cgbtrs)(const char* trans, const blas_int* n, const 
blas_int* kl, const blas_int* ku, const blas_int* nrhs, blas_cxf* ab, const 
blas_int* ldab, blas_int* ipiv, blas_cxf* b, const blas_int* ldb, blas_int* 
info, blas_len trans_len);
-  void arma_fortran(arma_zgbtrs)(const char* trans, const blas_int* n, const 
blas_int* kl, const blas_int* ku, const blas_int* nrhs, blas_cxd* ab, const 
blas_int* ldab, blas_int* ipiv, blas_cxd* b, const blas_int* ldb, blas_int* 
info, blas_len trans_len);
+  void arma_fortran(arma_sgbtrs)(const char* trans, const blas_int* n, const 
blas_int* kl, const blas_int* ku, const blas_int* nrhs, const    float* ab, 
const blas_int* ldab, const blas_int* ipiv,    float* b, const blas_int* ldb, 
blas_int* info, blas_len trans_len);
+  void arma_fortran(arma_dgbtrs)(const char* trans, const blas_int* n, const 
blas_int* kl, const blas_int* ku, const blas_int* nrhs, const   double* ab, 
const blas_int* ldab, const blas_int* ipiv,   double* b, const blas_int* ldb, 
blas_int* info, blas_len trans_len);
+  void arma_fortran(arma_cgbtrs)(const char* trans, const blas_int* n, const 
blas_int* kl, const blas_int* ku, const blas_int* nrhs, const blas_cxf* ab, 
const blas_int* ldab, const blas_int* ipiv, blas_cxf* b, const blas_int* ldb, 
blas_int* info, blas_len trans_len);
+  void arma_fortran(arma_zgbtrs)(const char* trans, const blas_int* n, const 
blas_int* kl, const blas_int* ku, const blas_int* nrhs, const blas_cxd* ab, 
const blas_int* ldab, const blas_int* ipiv, blas_cxd* b, const blas_int* ldb, 
blas_int* info, blas_len trans_len);
   
   // solve system of linear equations (general band matrix)
   void arma_fortran(arma_sgbsv)(const blas_int* n, const blas_int* kl, const 
blas_int* ku, const blas_int* nrhs,    float* ab, const blas_int* ldab, 
blas_int* ipiv,    float* b, const blas_int* ldb, blas_int* info);
@@ -821,10 +821,10 @@
   void arma_fortran(arma_zgetrf)(const blas_int* m, const blas_int* n, 
blas_cxd* a, const blas_int* lda, blas_int* ipiv, blas_int* info);
   
   // solve system of linear equations using pre-computed LU decomposition
-  void arma_fortran(arma_sgetrs)(const char* trans, const blas_int* n, const 
blas_int* nrhs,    float* a, const blas_int* lda, const blas_int* ipiv,    
float* b, const blas_int* ldb, blas_int* info);
-  void arma_fortran(arma_dgetrs)(const char* trans, const blas_int* n, const 
blas_int* nrhs,   double* a, const blas_int* lda, const blas_int* ipiv,   
double* b, const blas_int* ldb, blas_int* info);
-  void arma_fortran(arma_cgetrs)(const char* trans, const blas_int* n, const 
blas_int* nrhs, blas_cxf* a, const blas_int* lda, const blas_int* ipiv, 
blas_cxf* b, const blas_int* ldb, blas_int* info);
-  void arma_fortran(arma_zgetrs)(const char* trans, const blas_int* n, const 
blas_int* nrhs, blas_cxd* a, const blas_int* lda, const blas_int* ipiv, 
blas_cxd* b, const blas_int* ldb, blas_int* info);
+  void arma_fortran(arma_sgetrs)(const char* trans, const blas_int* n, const 
blas_int* nrhs, const    float* a, const blas_int* lda, const blas_int* ipiv,   
 float* b, const blas_int* ldb, blas_int* info);
+  void arma_fortran(arma_dgetrs)(const char* trans, const blas_int* n, const 
blas_int* nrhs, const   double* a, const blas_int* lda, const blas_int* ipiv,   
double* b, const blas_int* ldb, blas_int* info);
+  void arma_fortran(arma_cgetrs)(const char* trans, const blas_int* n, const 
blas_int* nrhs, const blas_cxf* a, const blas_int* lda, const blas_int* ipiv, 
blas_cxf* b, const blas_int* ldb, blas_int* info);
+  void arma_fortran(arma_zgetrs)(const char* trans, const blas_int* n, const 
blas_int* nrhs, const blas_cxd* a, const blas_int* lda, const blas_int* ipiv, 
blas_cxd* b, const blas_int* ldb, blas_int* info);
   
   // matrix inversion (using pre-computed LU decomposition)
   void arma_fortran(arma_sgetri)(const blas_int* n,    float* a, const 
blas_int* lda, const blas_int* ipiv,    float* work, const blas_int* lwork, 
blas_int* info);
@@ -987,10 +987,10 @@
   void arma_fortran(arma_zgbtrf)(const blas_int* m, const blas_int* n, const 
blas_int* kl, const blas_int* ku, blas_cxd* ab, const blas_int* ldab, blas_int* 
ipiv, blas_int* info);
   
   // solve system of linear equations using pre-computed LU decomposition 
(general band matrix)
-  void arma_fortran(arma_sgbtrs)(const char* trans, const blas_int* n, const 
blas_int* kl, const blas_int* ku, const blas_int* nrhs,    float* ab, const 
blas_int* ldab, blas_int* ipiv,    float* b, const blas_int* ldb, blas_int* 
info);
-  void arma_fortran(arma_dgbtrs)(const char* trans, const blas_int* n, const 
blas_int* kl, const blas_int* ku, const blas_int* nrhs,   double* ab, const 
blas_int* ldab, blas_int* ipiv,   double* b, const blas_int* ldb, blas_int* 
info);
-  void arma_fortran(arma_cgbtrs)(const char* trans, const blas_int* n, const 
blas_int* kl, const blas_int* ku, const blas_int* nrhs, blas_cxf* ab, const 
blas_int* ldab, blas_int* ipiv, blas_cxf* b, const blas_int* ldb, blas_int* 
info);
-  void arma_fortran(arma_zgbtrs)(const char* trans, const blas_int* n, const 
blas_int* kl, const blas_int* ku, const blas_int* nrhs, blas_cxd* ab, const 
blas_int* ldab, blas_int* ipiv, blas_cxd* b, const blas_int* ldb, blas_int* 
info);
+  void arma_fortran(arma_sgbtrs)(const char* trans, const blas_int* n, const 
blas_int* kl, const blas_int* ku, const blas_int* nrhs, const    float* ab, 
const blas_int* ldab, const blas_int* ipiv,    float* b, const blas_int* ldb, 
blas_int* info);
+  void arma_fortran(arma_dgbtrs)(const char* trans, const blas_int* n, const 
blas_int* kl, const blas_int* ku, const blas_int* nrhs, const   double* ab, 
const blas_int* ldab, const blas_int* ipiv,   double* b, const blas_int* ldb, 
blas_int* info);
+  void arma_fortran(arma_cgbtrs)(const char* trans, const blas_int* n, const 
blas_int* kl, const blas_int* ku, const blas_int* nrhs, const blas_cxf* ab, 
const blas_int* ldab, const blas_int* ipiv, blas_cxf* b, const blas_int* ldb, 
blas_int* info);
+  void arma_fortran(arma_zgbtrs)(const char* trans, const blas_int* n, const 
blas_int* kl, const blas_int* ku, const blas_int* nrhs, const blas_cxd* ab, 
const blas_int* ldab, const blas_int* ipiv, blas_cxd* b, const blas_int* ldb, 
blas_int* info);
   
   // solve system of linear equations (general band matrix)
   void arma_fortran(arma_sgbsv)(const blas_int* n, const blas_int* kl, const 
blas_int* ku, const blas_int* nrhs,    float* ab, const blas_int* ldab, 
blas_int* ipiv,    float* b, const blas_int* ldb, blas_int* info);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/armadillo-9.800.1/include/armadillo_bits/diskio_bones.hpp 
new/armadillo-9.800.3/include/armadillo_bits/diskio_bones.hpp
--- old/armadillo-9.800.1/include/armadillo_bits/diskio_bones.hpp       
2016-06-16 18:20:23.000000000 +0200
+++ new/armadillo-9.800.3/include/armadillo_bits/diskio_bones.hpp       
2016-06-16 18:20:25.000000000 +0200
@@ -31,7 +31,9 @@
   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_cold static file_type guess_file_type(std::istream& f);
+  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.800.1/include/armadillo_bits/diskio_meat.hpp 
new/armadillo-9.800.3/include/armadillo_bits/diskio_meat.hpp
--- old/armadillo-9.800.1/include/armadillo_bits/diskio_meat.hpp        
2016-06-16 18:20:23.000000000 +0200
+++ new/armadillo-9.800.3/include/armadillo_bits/diskio_meat.hpp        
2016-06-16 18:20:25.000000000 +0200
@@ -213,12 +213,24 @@
 
 
 inline
-arma_cold
+arma_deprecated
 file_type
 diskio::guess_file_type(std::istream& f)
   {
   arma_extra_debug_sigprint();
   
+  return diskio::guess_file_type_internal(f);
+  }
+
+
+
+inline
+arma_cold
+file_type
+diskio::guess_file_type_internal(std::istream& f)
+  {
+  arma_extra_debug_sigprint();
+  
   f.clear();
   const std::fstream::pos_type pos1 = f.tellg();
   
@@ -2164,7 +2176,7 @@
     }
   else
     {
-    const file_type ft = guess_file_type(f);
+    const file_type ft = guess_file_type_internal(f);
     
     switch(ft)
       {
@@ -3844,7 +3856,7 @@
     }
   else
     {
-    const file_type ft = guess_file_type(f);
+    const file_type ft = guess_file_type_internal(f);
     
     switch(ft)
       {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/armadillo-9.800.1/include/armadillo_bits/sp_auxlib_meat.hpp 
new/armadillo-9.800.3/include/armadillo_bits/sp_auxlib_meat.hpp
--- old/armadillo-9.800.1/include/armadillo_bits/sp_auxlib_meat.hpp     
2016-06-16 18:20:23.000000000 +0200
+++ new/armadillo-9.800.3/include/armadillo_bits/sp_auxlib_meat.hpp     
2016-06-16 18:20:25.000000000 +0200
@@ -1534,6 +1534,12 @@
       
       ++n_check;
       }
+    else
+      {
+      const eT A = (*it);
+      
+      if(std::abs(A.imag()) > tol)  { return false; }
+      }
     
     ++it;
     }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/armadillo-9.800.1/include/armadillo_bits/subview_bones.hpp 
new/armadillo-9.800.3/include/armadillo_bits/subview_bones.hpp
--- old/armadillo-9.800.1/include/armadillo_bits/subview_bones.hpp      
2016-06-16 18:20:23.000000000 +0200
+++ new/armadillo-9.800.3/include/armadillo_bits/subview_bones.hpp      
2016-06-16 18:20:25.000000000 +0200
@@ -284,7 +284,6 @@
     typedef eT&                       reference;
     
     arma_aligned Mat<eT>* M;
-    arma_aligned eT*      current_ptr;
     arma_aligned uword    current_row;
     arma_aligned uword    current_col;
     
@@ -319,7 +318,6 @@
     typedef const eT&                 reference;
     
     arma_aligned const Mat<eT>* M;
-    arma_aligned const eT*      current_ptr;
     arma_aligned       uword    current_row;
     arma_aligned       uword    current_col;
     
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/armadillo-9.800.1/include/armadillo_bits/subview_meat.hpp 
new/armadillo-9.800.3/include/armadillo_bits/subview_meat.hpp
--- old/armadillo-9.800.1/include/armadillo_bits/subview_meat.hpp       
2016-06-16 18:20:23.000000000 +0200
+++ new/armadillo-9.800.3/include/armadillo_bits/subview_meat.hpp       
2016-06-16 18:20:25.000000000 +0200
@@ -2756,7 +2756,6 @@
 inline
 subview<eT>::row_iterator::row_iterator()
   : M          (NULL)
-  , current_ptr(NULL)
   , current_row(0   )
   , current_col(0   )
   , aux_col1   (0   )
@@ -2772,7 +2771,6 @@
 inline
 subview<eT>::row_iterator::row_iterator(const row_iterator& X)
   : M          (X.M          )
-  , current_ptr(X.current_ptr)
   , current_row(X.current_row)
   , current_col(X.current_col)
   , aux_col1   (X.aux_col1   )
@@ -2787,7 +2785,6 @@
 inline
 subview<eT>::row_iterator::row_iterator(subview<eT>& in_sv, const uword 
in_row, const uword in_col)
   : M          (&(const_cast< Mat<eT>& >(in_sv.m)))
-  , current_ptr(&(M->at(in_row,in_col))           )
   , current_row(in_row                            )
   , current_col(in_col                            )
   , aux_col1   (in_sv.aux_col1                    )
@@ -2804,7 +2801,7 @@
 eT&
 subview<eT>::row_iterator::operator*()
   {
-  return (*current_ptr);
+  return M->at(current_row,current_col);
   }
 
 
@@ -2820,12 +2817,6 @@
     {
     current_col = aux_col1;
     current_row++;
-    
-    current_ptr = &( (*M).at(current_row,current_col) );
-    }
-  else
-    {
-    current_ptr += (*M).n_rows;
     }
   
   return *this;
@@ -2854,7 +2845,7 @@
 bool
 subview<eT>::row_iterator::operator==(const row_iterator& rhs) const
   {
-  return (current_ptr == rhs.current_ptr);
+  return ( (current_row == rhs.current_row) && (current_col == 
rhs.current_col) );
   }
 
 
@@ -2865,7 +2856,7 @@
 bool
 subview<eT>::row_iterator::operator!=(const row_iterator& rhs) const
   {
-  return (current_ptr != rhs.current_ptr);
+  return ( (current_row != rhs.current_row) || (current_col != 
rhs.current_col) );
   }
 
 
@@ -2876,7 +2867,7 @@
 bool
 subview<eT>::row_iterator::operator==(const const_row_iterator& rhs) const
   {
-  return (current_ptr == rhs.current_ptr);
+  return ( (current_row == rhs.current_row) && (current_col == 
rhs.current_col) );
   }
 
 
@@ -2887,7 +2878,7 @@
 bool
 subview<eT>::row_iterator::operator!=(const const_row_iterator& rhs) const
   {
-  return (current_ptr != rhs.current_ptr);
+  return ( (current_row != rhs.current_row) || (current_col != 
rhs.current_col) );
   }
 
 
@@ -2902,7 +2893,6 @@
 inline
 subview<eT>::const_row_iterator::const_row_iterator()
   : M          (NULL)
-  , current_ptr(NULL)
   , current_row(0   )
   , current_col(0   )
   , aux_col1   (0   )
@@ -2918,7 +2908,6 @@
 inline
 subview<eT>::const_row_iterator::const_row_iterator(const row_iterator& X)
   : M          (X.M          )
-  , current_ptr(X.current_ptr)
   , current_row(X.current_row)
   , current_col(X.current_col)
   , aux_col1   (X.aux_col1   )
@@ -2933,7 +2922,6 @@
 inline
 subview<eT>::const_row_iterator::const_row_iterator(const const_row_iterator& 
X)
   : M          (X.M          )
-  , current_ptr(X.current_ptr)
   , current_row(X.current_row)
   , current_col(X.current_col)
   , aux_col1   (X.aux_col1   )
@@ -2948,7 +2936,6 @@
 inline
 subview<eT>::const_row_iterator::const_row_iterator(const subview<eT>& in_sv, 
const uword in_row, const uword in_col)
   : M          (&(in_sv.m)                   )
-  , current_ptr(&(M->at(in_row,in_col))      )
   , current_row(in_row                       )
   , current_col(in_col                       )
   , aux_col1   (in_sv.aux_col1               )
@@ -2965,7 +2952,7 @@
 const eT&
 subview<eT>::const_row_iterator::operator*() const
   {
-  return (*current_ptr);
+  return M->at(current_row,current_col);
   }
 
 
@@ -2981,12 +2968,6 @@
     {
     current_col = aux_col1;
     current_row++;
-    
-    current_ptr = &( (*M).at(current_row,current_col) );
-    }
-  else
-    {
-    current_ptr += (*M).n_rows;
     }
   
   return *this;
@@ -3015,7 +2996,7 @@
 bool
 subview<eT>::const_row_iterator::operator==(const row_iterator& rhs) const
   {
-  return (current_ptr == rhs.current_ptr);
+  return ( (current_row == rhs.current_row) && (current_col == 
rhs.current_col) );
   }
 
 
@@ -3026,7 +3007,7 @@
 bool
 subview<eT>::const_row_iterator::operator!=(const row_iterator& rhs) const
   {
-  return (current_ptr != rhs.current_ptr);
+  return ( (current_row != rhs.current_row) || (current_col != 
rhs.current_col) );
   }
 
 
@@ -3037,7 +3018,7 @@
 bool
 subview<eT>::const_row_iterator::operator==(const const_row_iterator& rhs) 
const
   {
-  return (current_ptr == rhs.current_ptr);
+  return ( (current_row == rhs.current_row) && (current_col == 
rhs.current_col) );
   }
 
 
@@ -3048,7 +3029,7 @@
 bool
 subview<eT>::const_row_iterator::operator!=(const const_row_iterator& rhs) 
const
   {
-  return (current_ptr != rhs.current_ptr);
+  return ( (current_row != rhs.current_row) || (current_col != 
rhs.current_col) );
   }
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/armadillo-9.800.1/src/wrapper1.cpp 
new/armadillo-9.800.3/src/wrapper1.cpp
--- old/armadillo-9.800.1/src/wrapper1.cpp      2016-06-16 18:20:23.000000000 
+0200
+++ new/armadillo-9.800.3/src/wrapper1.cpp      2016-06-16 18:20:25.000000000 
+0200
@@ -223,22 +223,22 @@
     
     
     
-    void arma_fortran_with_prefix(arma_sgetrs)(const char* trans, const 
blas_int* n, const blas_int* nrhs,    float* a, const blas_int* lda, const 
blas_int* ipiv,    float* b, const blas_int* ldb, blas_int* info)
+    void arma_fortran_with_prefix(arma_sgetrs)(const char* trans, const 
blas_int* n, const blas_int* nrhs, const    float* a, const blas_int* lda, 
const blas_int* ipiv,    float* b, const blas_int* ldb, blas_int* info)
       {
       arma_fortran_sans_prefix(arma_sgetrs)(trans, n, nrhs, a, lda, ipiv, b, 
ldb, info);
       }
     
-    void arma_fortran_with_prefix(arma_dgetrs)(const char* trans, const 
blas_int* n, const blas_int* nrhs,   double* a, const blas_int* lda, const 
blas_int* ipiv,   double* b, const blas_int* ldb, blas_int* info)
+    void arma_fortran_with_prefix(arma_dgetrs)(const char* trans, const 
blas_int* n, const blas_int* nrhs, const   double* a, const blas_int* lda, 
const blas_int* ipiv,   double* b, const blas_int* ldb, blas_int* info)
       {
       arma_fortran_sans_prefix(arma_dgetrs)(trans, n, nrhs, a, lda, ipiv, b, 
ldb, info);
       }
     
-    void arma_fortran_with_prefix(arma_cgetrs)(const char* trans, const 
blas_int* n, const blas_int* nrhs, blas_cxf* a, const blas_int* lda, const 
blas_int* ipiv, blas_cxf* b, const blas_int* ldb, blas_int* info)
+    void arma_fortran_with_prefix(arma_cgetrs)(const char* trans, const 
blas_int* n, const blas_int* nrhs, const blas_cxf* a, const blas_int* lda, 
const blas_int* ipiv, blas_cxf* b, const blas_int* ldb, blas_int* info)
       {
       arma_fortran_sans_prefix(arma_cgetrs)(trans, n, nrhs, a, lda, ipiv, b, 
ldb, info);
       }
     
-    void arma_fortran_with_prefix(arma_zgetrs)(const char* trans, const 
blas_int* n, const blas_int* nrhs, blas_cxd* a, const blas_int* lda, const 
blas_int* ipiv, blas_cxd* b, const blas_int* ldb, blas_int* info)
+    void arma_fortran_with_prefix(arma_zgetrs)(const char* trans, const 
blas_int* n, const blas_int* nrhs, const blas_cxd* a, const blas_int* lda, 
const blas_int* ipiv, blas_cxd* b, const blas_int* ldb, blas_int* info)
       {
       arma_fortran_sans_prefix(arma_zgetrs)(trans, n, nrhs, a, lda, ipiv, b, 
ldb, info);
       }
@@ -757,22 +757,22 @@
     
     
     
-    void arma_fortran_with_prefix(arma_sgbtrs)(const char* trans, const 
blas_int* n, const blas_int* kl, const blas_int* ku, const blas_int* nrhs,    
float* ab, const blas_int* ldab, blas_int* ipiv,    float* b, const blas_int* 
ldb, blas_int* info)
+    void arma_fortran_with_prefix(arma_sgbtrs)(const char* trans, const 
blas_int* n, const blas_int* kl, const blas_int* ku, const blas_int* nrhs, 
const    float* ab, const blas_int* ldab, const blas_int* ipiv,    float* b, 
const blas_int* ldb, blas_int* info)
       {
       arma_fortran_sans_prefix(arma_sgbtrs)(trans, n, kl, ku, nrhs, ab, ldab, 
ipiv, b, ldb, info);
       }
     
-    void arma_fortran_with_prefix(arma_dgbtrs)(const char* trans, const 
blas_int* n, const blas_int* kl, const blas_int* ku, const blas_int* nrhs,   
double* ab, const blas_int* ldab, blas_int* ipiv,   double* b, const blas_int* 
ldb, blas_int* info)
+    void arma_fortran_with_prefix(arma_dgbtrs)(const char* trans, const 
blas_int* n, const blas_int* kl, const blas_int* ku, const blas_int* nrhs, 
const   double* ab, const blas_int* ldab, const blas_int* ipiv,   double* b, 
const blas_int* ldb, blas_int* info)
       {
       arma_fortran_sans_prefix(arma_dgbtrs)(trans, n, kl, ku, nrhs, ab, ldab, 
ipiv, b, ldb, info);
       }
     
-    void arma_fortran_with_prefix(arma_cgbtrs)(const char* trans, const 
blas_int* n, const blas_int* kl, const blas_int* ku, const blas_int* nrhs, 
blas_cxf* ab, const blas_int* ldab, blas_int* ipiv, blas_cxf* b, const 
blas_int* ldb, blas_int* info)
+    void arma_fortran_with_prefix(arma_cgbtrs)(const char* trans, const 
blas_int* n, const blas_int* kl, const blas_int* ku, const blas_int* nrhs, 
const blas_cxf* ab, const blas_int* ldab, const blas_int* ipiv, blas_cxf* b, 
const blas_int* ldb, blas_int* info)
       {
       arma_fortran_sans_prefix(arma_cgbtrs)(trans, n, kl, ku, nrhs, ab, ldab, 
ipiv, b, ldb, info);
       }
     
-    void arma_fortran_with_prefix(arma_zgbtrs)(const char* trans, const 
blas_int* n, const blas_int* kl, const blas_int* ku, const blas_int* nrhs, 
blas_cxd* ab, const blas_int* ldab, blas_int* ipiv, blas_cxd* b, const 
blas_int* ldb, blas_int* info)
+    void arma_fortran_with_prefix(arma_zgbtrs)(const char* trans, const 
blas_int* n, const blas_int* kl, const blas_int* ku, const blas_int* nrhs, 
const blas_cxd* ab, const blas_int* ldab, const blas_int* ipiv, blas_cxd* b, 
const blas_int* ldb, blas_int* info)
       {
       arma_fortran_sans_prefix(arma_zgbtrs)(trans, n, kl, ku, nrhs, ab, ldab, 
ipiv, b, ldb, info);
       }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/armadillo-9.800.1/src/wrapper2.cpp 
new/armadillo-9.800.3/src/wrapper2.cpp
--- old/armadillo-9.800.1/src/wrapper2.cpp      2016-06-16 18:20:23.000000000 
+0200
+++ new/armadillo-9.800.3/src/wrapper2.cpp      2016-06-16 18:20:25.000000000 
+0200
@@ -175,22 +175,22 @@
     
     
     
-    void arma_fortran_with_prefix(arma_sgetrs)(const char* trans, const 
blas_int* n, const blas_int* nrhs,    float* a, const blas_int* lda, const 
blas_int* ipiv,    float* b, const blas_int* ldb, blas_int* info, const 
blas_len trans_len)
+    void arma_fortran_with_prefix(arma_sgetrs)(const char* trans, const 
blas_int* n, const blas_int* nrhs, const    float* a, const blas_int* lda, 
const blas_int* ipiv,    float* b, const blas_int* ldb, blas_int* info, const 
blas_len trans_len)
       {
       arma_fortran_sans_prefix(arma_sgetrs)(trans, n, nrhs, a, lda, ipiv, b, 
ldb, info, trans_len);
       }
     
-    void arma_fortran_with_prefix(arma_dgetrs)(const char* trans, const 
blas_int* n, const blas_int* nrhs,   double* a, const blas_int* lda, const 
blas_int* ipiv,   double* b, const blas_int* ldb, blas_int* info, const 
blas_len trans_len)
+    void arma_fortran_with_prefix(arma_dgetrs)(const char* trans, const 
blas_int* n, const blas_int* nrhs, const   double* a, const blas_int* lda, 
const blas_int* ipiv,   double* b, const blas_int* ldb, blas_int* info, const 
blas_len trans_len)
       {
       arma_fortran_sans_prefix(arma_dgetrs)(trans, n, nrhs, a, lda, ipiv, b, 
ldb, info, trans_len);
       }
     
-    void arma_fortran_with_prefix(arma_cgetrs)(const char* trans, const 
blas_int* n, const blas_int* nrhs, blas_cxf* a, const blas_int* lda, const 
blas_int* ipiv, blas_cxf* b, const blas_int* ldb, blas_int* info, const 
blas_len trans_len)
+    void arma_fortran_with_prefix(arma_cgetrs)(const char* trans, const 
blas_int* n, const blas_int* nrhs, const blas_cxf* a, const blas_int* lda, 
const blas_int* ipiv, blas_cxf* b, const blas_int* ldb, blas_int* info, const 
blas_len trans_len)
       {
       arma_fortran_sans_prefix(arma_cgetrs)(trans, n, nrhs, a, lda, ipiv, b, 
ldb, info, trans_len);
       }
     
-    void arma_fortran_with_prefix(arma_zgetrs)(const char* trans, const 
blas_int* n, const blas_int* nrhs, blas_cxd* a, const blas_int* lda, const 
blas_int* ipiv, blas_cxd* b, const blas_int* ldb, blas_int* info, const 
blas_len trans_len)
+    void arma_fortran_with_prefix(arma_zgetrs)(const char* trans, const 
blas_int* n, const blas_int* nrhs, const blas_cxd* a, const blas_int* lda, 
const blas_int* ipiv, blas_cxd* b, const blas_int* ldb, blas_int* info, const 
blas_len trans_len)
       {
       arma_fortran_sans_prefix(arma_zgetrs)(trans, n, nrhs, a, lda, ipiv, b, 
ldb, info, trans_len);
       }
@@ -709,22 +709,22 @@
     
     
     
-    void arma_fortran_with_prefix(arma_sgbtrs)(const char* trans, const 
blas_int* n, const blas_int* kl, const blas_int* ku, const blas_int* nrhs,    
float* ab, const blas_int* ldab, blas_int* ipiv,    float* b, const blas_int* 
ldb, blas_int* info, blas_len trans_len)
+    void arma_fortran_with_prefix(arma_sgbtrs)(const char* trans, const 
blas_int* n, const blas_int* kl, const blas_int* ku, const blas_int* nrhs, 
const    float* ab, const blas_int* ldab, const blas_int* ipiv,    float* b, 
const blas_int* ldb, blas_int* info, blas_len trans_len)
       {
       arma_fortran_sans_prefix(arma_sgbtrs)(trans, n, kl, ku, nrhs, ab, ldab, 
ipiv, b, ldb, info, trans_len);
       }
     
-    void arma_fortran_with_prefix(arma_dgbtrs)(const char* trans, const 
blas_int* n, const blas_int* kl, const blas_int* ku, const blas_int* nrhs,   
double* ab, const blas_int* ldab, blas_int* ipiv,   double* b, const blas_int* 
ldb, blas_int* info, blas_len trans_len)
+    void arma_fortran_with_prefix(arma_dgbtrs)(const char* trans, const 
blas_int* n, const blas_int* kl, const blas_int* ku, const blas_int* nrhs, 
const   double* ab, const blas_int* ldab, const blas_int* ipiv,   double* b, 
const blas_int* ldb, blas_int* info, blas_len trans_len)
       {
       arma_fortran_sans_prefix(arma_dgbtrs)(trans, n, kl, ku, nrhs, ab, ldab, 
ipiv, b, ldb, info, trans_len);
       }
     
-    void arma_fortran_with_prefix(arma_cgbtrs)(const char* trans, const 
blas_int* n, const blas_int* kl, const blas_int* ku, const blas_int* nrhs, 
blas_cxf* ab, const blas_int* ldab, blas_int* ipiv, blas_cxf* b, const 
blas_int* ldb, blas_int* info, blas_len trans_len)
+    void arma_fortran_with_prefix(arma_cgbtrs)(const char* trans, const 
blas_int* n, const blas_int* kl, const blas_int* ku, const blas_int* nrhs, 
const blas_cxf* ab, const blas_int* ldab, const blas_int* ipiv, blas_cxf* b, 
const blas_int* ldb, blas_int* info, blas_len trans_len)
       {
       arma_fortran_sans_prefix(arma_cgbtrs)(trans, n, kl, ku, nrhs, ab, ldab, 
ipiv, b, ldb, info, trans_len);
       }
     
-    void arma_fortran_with_prefix(arma_zgbtrs)(const char* trans, const 
blas_int* n, const blas_int* kl, const blas_int* ku, const blas_int* nrhs, 
blas_cxd* ab, const blas_int* ldab, blas_int* ipiv, blas_cxd* b, const 
blas_int* ldb, blas_int* info, blas_len trans_len)
+    void arma_fortran_with_prefix(arma_zgbtrs)(const char* trans, const 
blas_int* n, const blas_int* kl, const blas_int* ku, const blas_int* nrhs, 
const blas_cxd* ab, const blas_int* ldab, const blas_int* ipiv, blas_cxd* b, 
const blas_int* ldb, blas_int* info, blas_len trans_len)
       {
       arma_fortran_sans_prefix(arma_zgbtrs)(trans, n, kl, ku, nrhs, ab, ldab, 
ipiv, b, ldb, info, trans_len);
       }


Reply via email to