Hello community,

here is the log from the commit of package armadillo for openSUSE:Factory 
checked in at 2017-10-19 19:33:26
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/armadillo (Old)
 and      /work/SRC/openSUSE:Factory/.armadillo.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "armadillo"

Thu Oct 19 19:33:26 2017 rev:114 rq:535169 version:8.200.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/armadillo/armadillo.changes      2017-10-18 
10:53:56.343142229 +0200
+++ /work/SRC/openSUSE:Factory/.armadillo.new/armadillo.changes 2017-10-19 
19:33:28.541117693 +0200
@@ -1,0 +2,6 @@
+Wed Oct 18 12:50:38 UTC 2017 - [email protected]
+
+- Update to version 8.200.1:
+  + Misc bug fixes.
+
+-------------------------------------------------------------------

Old:
----
  armadillo-8.200.0.tar.xz

New:
----
  armadillo-8.200.1.tar.xz

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

Other differences:
------------------
++++++ armadillo.spec ++++++
--- /var/tmp/diff_new_pack.I1TgFA/_old  2017-10-19 19:33:29.341080264 +0200
+++ /var/tmp/diff_new_pack.I1TgFA/_new  2017-10-19 19:33:29.345080077 +0200
@@ -18,7 +18,7 @@
 
 %define soname libarmadillo8
 Name:           armadillo
-Version:        8.200.0
+Version:        8.200.1
 Release:        0
 Summary:        C++ matrix library with interfaces to LAPACK and ATLAS
 License:        Apache-2.0

++++++ armadillo-8.200.0.tar.xz -> armadillo-8.200.1.tar.xz ++++++
Binary files old/armadillo-8.200.0/armadillo_mtgmm_2017.pdf and 
new/armadillo-8.200.1/armadillo_mtgmm_2017.pdf differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/armadillo-8.200.0/docs.html 
new/armadillo-8.200.1/docs.html
--- old/armadillo-8.200.0/docs.html     2016-06-16 18:17:10.000000000 +0200
+++ new/armadillo-8.200.1/docs.html     2016-06-16 18:17:11.000000000 +0200
@@ -194,11 +194,9 @@
 Citations are useful for the continued development and maintenance of the 
library.
 <br>
 <br>
-<font size=-1>
 Conrad Sanderson and Ryan Curtin.
 <br><i><a href="armadillo_joss_2016.pdf">Armadillo: a template-based C++ 
library for linear algebra</a></i>.
 <br>Journal of Open Source Software, Vol.&nbsp;1, pp.&nbsp;26, 2016.
-</font>
 </li>
 </ul>
 </td>
@@ -2995,6 +2993,7 @@
 <li><a href="#transform">.transform()</a></li>
 <li><a href="#fill">.fill()</a></li>
 <li><a href="#find">find()</a></li>
+<li><a href="#clamp">clamp()</a></li>
 <li><a href="#operators">relational operators</a></li>
 <li><a href="#constants">constants (pi, nan, inf, ...)</a></li>
 </ul>
@@ -7449,6 +7448,7 @@
 <ul>
 <li><a href="#min_and_max">min() &amp; max()</a></li>
 <li><a href="#min_and_max_member">.min() &amp; .max()</a> (member functions of 
Mat)</li>
+<li><a href="#replace">replace()</a></li>
 <li><a href="#find">find()</a></li>
 </ul>
 </li>
@@ -13455,9 +13455,17 @@
 <a name="gmm_full"></a>
 <b>gmm_diag</b>
 <br><b>gmm_full</b>
+
+<br>
+<br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tbody>
+<tr>
+<td style="text-align: left; vertical-align: top; width: 55%;">
+
 <ul>
 <li>
-Classes for multivariate data modelling and evaluation via Gaussian Mixture 
Models (GMMs)
+Classes for multivariate data modelling and evaluation via <b>Gaussian Mixture 
Models</b> (GMMs)
 </li>
 <br>
 <li>
@@ -13486,7 +13494,7 @@
 
<li>N(<small>&nbsp;</small><i>x</i><small>&nbsp;</small>|<small>&nbsp;</small><i>m<sub>g</sub></i><small>&nbsp;</small>,&nbsp;<i>C<sub>g</sub></i><small>&nbsp;</small>)
 represents a Gaussian (normal) distribution</li>
 <li>for each Gaussian <i>g</i>:
 <ul>
-<li><i>h<sub>g</sub></i> is the heft (weight), with constraints 
<i>h<sub>g</sub></i> &ge; 0 and &sum;<i>h<sub>g</sub></i> = 1</li>
+<li><i>h<sub>g</sub></i> is the heft (weight), with constraints 
<i>h<sub>g</sub></i>&nbsp;&ge;&nbsp;0 and &sum;<i>h<sub>g</sub></i> = 1</li>
 <li><i>m<sub>g</sub></i> is the mean (centroid) vector with dimensionality 
<i>n_dims</i></li>
 <li><i>C<sub>g</sub></i> is the covariance matrix (either diagonal or 
full)</li>
 </ul>
@@ -13511,18 +13519,50 @@
 The classes include parameter estimation (training) algorithms: k-means 
clustering and Expectation-Maximisation (EM);
 the training algorithms will run much quicker on multi-core machines when 
OpenMP is enabled in your compiler (eg. <i>-fopenmp</i> in GCC and clang)
 </li>
+</ul>
+</td>
+
+<td>
+&nbsp;
+</td>
+<td class="line" style="vertical-align: top;">
 <br>
+</td>
+<td style="text-align: left; vertical-align: top; width: 40%;">
+
+<ul>
 <li>
-Please cite the following paper if you use the classes in your research and/or 
software:
+Please cite the following article if you use the <i>gmm_diag</i> or 
<i>gmm_full</i> classes in your research and/or software:
 <br>
 <br>
-<ul>
 Conrad Sanderson and Ryan Curtin.
-<br><i><a href="armadillo_mtgmm_2017.pdf">An Open Source C++ Implementation of 
Multi-Threaded Gaussian Mixture Models, k-Means and Expectation 
Maximisation</a></i>.
-<br>International Conference on Signal Processing and Communication Systems, 
2017.
-</ul>
-</li>
+<br><i><a href="gmm_joss_2017.pdf">gmm_diag and gmm_full: C++ classes for 
multi-threaded Gaussian mixture models and Expectation-Maximisation</a></i>.
+<br>Journal of Open Source Software, Vol.&nbsp;2, 2017.
+<br>
+<br>bibtex:
 <br>
+<br>
+<font size=-1>
+<code>
+@article{gmm2017,<br>
+&nbsp;author&nbsp;&nbsp;= {Conrad Sanderson and Ryan Curtin},<br>
+&nbsp;title&nbsp;&nbsp;&nbsp;= {gmm{\tt\char95}diag and gmm{\tt\char95}full: 
C++ classes for multi-threaded Gaussian mixture models and 
Expectation-Maximisation},<br>
+&nbsp;journal&nbsp;= {Journal of Open Source Software},<br>
+&nbsp;volume&nbsp;&nbsp;= {2},<br>
+&nbsp;year&nbsp;&nbsp;&nbsp;&nbsp;= {2017}<br>
+&nbsp;}
+</code>
+</font>
+</li>
+</ul>
+
+</td>
+</tr>
+</tbody>
+</table>
+
+
+<ul>
 <li>
 For an instance of <i>gmm_diag</i> or <i>gmm_full</i> named as <i>M</i>, the 
member functions and variables are:
 <br>
Binary files old/armadillo-8.200.0/gmm_joss_2017.pdf and 
new/armadillo-8.200.1/gmm_joss_2017.pdf differ
Binary files old/armadillo-8.200.0/gmm_spcs_2017.pdf and 
new/armadillo-8.200.1/gmm_spcs_2017.pdf differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/armadillo-8.200.0/include/armadillo_bits/SpMat_bones.hpp 
new/armadillo-8.200.1/include/armadillo_bits/SpMat_bones.hpp
--- old/armadillo-8.200.0/include/armadillo_bits/SpMat_bones.hpp        
2016-06-16 18:17:10.000000000 +0200
+++ new/armadillo-8.200.1/include/armadillo_bits/SpMat_bones.hpp        
2016-06-16 18:17:11.000000000 +0200
@@ -593,14 +593,9 @@
   arma_inline arma_hot arma_warn_unused uword get_position(const uword i) 
const;
   arma_inline arma_hot                  void  get_position(const uword i, 
uword& row_of_i, uword& col_of_i) const;
   
-  /**
-   * Add an element at the given position, and return a reference to it.
-   * The element will be set to 0 (unless otherwise specified).
-   * If the element already exists, its value will be overwritten.
-   */
-  inline arma_hot arma_warn_unused eT& add_element(const uword in_row, const 
uword in_col, const eT in_val = eT(0));
   
-  inline arma_hot void delete_element(const uword in_row, const uword in_col);
+  inline arma_warn_unused eT&  insert_element(const uword in_row, const uword 
in_col, const eT in_val = eT(0));
+  inline                  void delete_element(const uword in_row, const uword 
in_col);
   
   
   // cache related
@@ -618,7 +613,7 @@
   arma_inline void sync_csc()   const;
   
   
-  friend class SpValProxy< SpMat<eT> >;  // so that SpValProxy can call 
add_element() and delete_element()
+  friend class SpValProxy< SpMat<eT> >;  // allow SpValProxy to call 
insert_element() and delete_element()
   friend class SpSubview<eT>;
   friend class SpRow<eT>;
   friend class SpCol<eT>;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/armadillo-8.200.0/include/armadillo_bits/SpMat_meat.hpp 
new/armadillo-8.200.1/include/armadillo_bits/SpMat_meat.hpp
--- old/armadillo-8.200.0/include/armadillo_bits/SpMat_meat.hpp 2016-06-16 
18:17:10.000000000 +0200
+++ new/armadillo-8.200.1/include/armadillo_bits/SpMat_meat.hpp 2016-06-16 
18:17:11.000000000 +0200
@@ -5479,20 +5479,19 @@
 
 
 /**
- * Add an element at the given position, and return a reference to it.  The
- * element will be set to 0 (unless otherwise specified).  If the element
- * already exists, its value will be overwritten.
+ * Insert an element at the given position, and return a reference to it.  
+ * The element will be set to 0, unless otherwise specified.
+ * If the element already exists, its value will be overwritten.
  *
  * @param in_row Row of new element.
  * @param in_col Column of new element.
- * @param in_val Value to set new element to (default 0.0).
+ * @param in_val Value to set new element to (default 0).
  */
 template<typename eT>
 inline
-arma_hot
 arma_warn_unused
 eT&
-SpMat<eT>::add_element(const uword in_row, const uword in_col, const eT val)
+SpMat<eT>::insert_element(const uword in_row, const uword in_col, const eT val)
   {
   arma_extra_debug_sigprint();
   
@@ -5601,7 +5600,6 @@
  */
 template<typename eT>
 inline
-arma_hot
 void
 SpMat<eT>::delete_element(const uword in_row, const uword in_col)
   {
@@ -5715,12 +5713,20 @@
   {
   arma_extra_debug_sigprint();
   
-  if(sync_state == 0)
-    {
-    cache = (*this);
-    
-    sync_state = 2;
-    }
+  #if defined(_OPENMP)
+  #pragma omp critical
+    if(sync_state == 0)
+      {
+      cache      = (*this);
+      sync_state = 2;
+      }
+  #else
+    if(sync_state == 0)
+      {
+      cache      = (*this);
+      sync_state = 2;
+      }
+  #endif
   }
 
 
@@ -5733,19 +5739,37 @@
   {
   arma_extra_debug_sigprint();
   
-  if(sync_state == 1)
-    {
-    SpMat<eT> tmp(cache);  // construct separate matrix to prevent the cache 
getting zapped
-    
-    // sync_state is only set to 1 by non-const element access operators,
-    // so the shenanigans with const_cast are to satisfy the compiler
-    
-    SpMat<eT>& x = const_cast< SpMat<eT>& >(*this);
-    
-    x.steal_mem_simple(tmp);
-    
-    sync_state = 2;
-    }
+  // method:
+  // 1. construct temporary matrix to prevent the cache from getting zapped
+  // 2. steal memory from the temporary matrix
+  
+  // sync_state is only set to 1 by non-const element access operators,
+  // so the shenanigans with const_cast are to satisfy the compiler
+  
+  #if defined(_OPENMP)
+  #pragma omp critical
+    if(sync_state == 1)
+      {
+      SpMat<eT> tmp(cache);
+      
+      SpMat<eT>& x = const_cast< SpMat<eT>& >(*this);
+      
+      x.steal_mem_simple(tmp);
+      
+      sync_state = 2;
+      }
+  #else
+    if(sync_state == 1)
+      {
+      SpMat<eT> tmp(cache);
+      
+      SpMat<eT>& x = const_cast< SpMat<eT>& >(*this);
+      
+      x.steal_mem_simple(tmp);
+      
+      sync_state = 2;
+      }
+  #endif
   }
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/armadillo-8.200.0/include/armadillo_bits/SpSubview_bones.hpp 
new/armadillo-8.200.1/include/armadillo_bits/SpSubview_bones.hpp
--- old/armadillo-8.200.0/include/armadillo_bits/SpSubview_bones.hpp    
2016-06-16 18:17:10.000000000 +0200
+++ new/armadillo-8.200.1/include/armadillo_bits/SpSubview_bones.hpp    
2016-06-16 18:17:11.000000000 +0200
@@ -37,10 +37,9 @@
   const uword n_cols;
   const uword n_elem;
   const uword n_nonzero;
-
-  // So that SpValProxy can call add_element() and delete_element().
-  friend class SpValProxy<SpSubview<eT> >;
-
+  
+  friend class SpValProxy< SpSubview<eT> >;   // allow SpValProxy to call 
insert_element() and delete_element()
+  
   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);
@@ -305,11 +304,11 @@
   private:
   friend class SpMat<eT>;
   SpSubview();
-
-  // For use by SpValProxy.  We just update n_nonzero and pass the call on to 
the matrix.
-  inline arma_hot arma_warn_unused eT&  add_element(const uword in_row, const 
uword in_col, const eT in_val = 0.0);
-  inline arma_hot                  void delete_element(const uword in_row, 
const uword in_col);
-
+  
+  inline arma_warn_unused eT&  insert_element(const uword in_row, const uword 
in_col, const eT in_val = eT(0));
+  inline                  void delete_element(const uword in_row, const uword 
in_col);
+  
+  inline void invalidate_cache() const;
   };
 
 /*
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/armadillo-8.200.0/include/armadillo_bits/SpSubview_meat.hpp 
new/armadillo-8.200.1/include/armadillo_bits/SpSubview_meat.hpp
--- old/armadillo-8.200.0/include/armadillo_bits/SpSubview_meat.hpp     
2016-06-16 18:17:10.000000000 +0200
+++ new/armadillo-8.200.1/include/armadillo_bits/SpSubview_meat.hpp     
2016-06-16 18:17:11.000000000 +0200
@@ -1646,16 +1646,15 @@
 
 template<typename eT>
 inline
-arma_hot
 arma_warn_unused
 eT&
-SpSubview<eT>::add_element(const uword in_row, const uword in_col, const eT 
in_val)
+SpSubview<eT>::insert_element(const uword in_row, const uword in_col, const eT 
in_val)
   {
   arma_extra_debug_sigprint();
 
-  // This may not actually add an element.
+  // This may not actually insert an element.
   const uword old_n_nonzero = m.n_nonzero;
-  eT& retval = access::rw(m).add_element(in_row + aux_row1, in_col + aux_col1, 
in_val);
+  eT& retval = access::rw(m).insert_element(in_row + aux_row1, in_col + 
aux_col1, in_val);
   // Update n_nonzero (if necessary).
   access::rw(n_nonzero) += (m.n_nonzero - old_n_nonzero);
 
@@ -1678,6 +1677,18 @@
   }
 
 
+
+template<typename eT>
+inline
+void
+SpSubview<eT>::invalidate_cache() const
+  {
+  arma_extra_debug_sigprint();
+  
+  m.invalidate_cache();
+  }
+
+
 
 /**
  * Sparse subview col
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/armadillo-8.200.0/include/armadillo_bits/SpValProxy_bones.hpp 
new/armadillo-8.200.1/include/armadillo_bits/SpValProxy_bones.hpp
--- old/armadillo-8.200.0/include/armadillo_bits/SpValProxy_bones.hpp   
2016-06-16 18:17:10.000000000 +0200
+++ new/armadillo-8.200.1/include/armadillo_bits/SpValProxy_bones.hpp   
2016-06-16 18:17:11.000000000 +0200
@@ -18,12 +18,10 @@
 //! @{
 
 
-/**
- * Sparse value proxy class, meant to prevent 0s from being added to sparse
- * matrices.  T1 should be either SpMat or SpSubview, and if it's not, bad news
- * is probably coming.  This class only uses T1::add_element() and
- * T1::delete_element().
- */
+// Sparse value proxy class, to prevent inserting 0s into sparse matrices.
+// T1 must be either SpMat or SpSubview.
+// This class uses T1::insert_element(), T1::delete_element(), 
T1::invalidate_cache()
+
 template<typename T1>
 class SpValProxy
   {
@@ -66,7 +64,7 @@
   private:
   
   // Deletes the element if it is zero.  Does not check if val_ptr == NULL!
-  arma_inline arma_hot void check_zero();
+  arma_inline void check_zero();
   
   arma_aligned const uword row;
   arma_aligned const uword col;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/armadillo-8.200.0/include/armadillo_bits/SpValProxy_meat.hpp 
new/armadillo-8.200.1/include/armadillo_bits/SpValProxy_meat.hpp
--- old/armadillo-8.200.0/include/armadillo_bits/SpValProxy_meat.hpp    
2016-06-16 18:17:10.000000000 +0200
+++ new/armadillo-8.200.1/include/armadillo_bits/SpValProxy_meat.hpp    
2016-06-16 18:17:11.000000000 +0200
@@ -65,12 +65,13 @@
       {
       // The value exists and merely needs to be updated.
       *val_ptr = rhs;
+      parent.invalidate_cache();
       }
 
     else
       {
-      // The value is nonzero and must be added.
-      val_ptr = &parent.add_element(row, col, rhs);
+      // The value is nonzero and must be inserted.
+      val_ptr = &parent.insert_element(row, col, rhs);
       }
 
     }
@@ -102,14 +103,15 @@
     {
     // The value already exists and merely needs to be updated.
     *val_ptr += rhs;
+    parent.invalidate_cache();
     check_zero();
     }
   else
     {
     if (rhs != eT(0))
       {
-      // The value does not exist and must be added.
-      val_ptr = &parent.add_element(row, col, rhs);
+      // The value does not exist and must be inserted.
+      val_ptr = &parent.insert_element(row, col, rhs);
       }
     }
   
@@ -127,14 +129,15 @@
     {
     // The value already exists and merely needs to be updated.
     *val_ptr -= rhs;
+    parent.invalidate_cache();
     check_zero();
     }
   else
     {
     if (rhs != eT(0))
       {
-      // The value does not exist and must be added.
-      val_ptr = &parent.add_element(row, col, -rhs);
+      // The value does not exist and must be inserted.
+      val_ptr = &parent.insert_element(row, col, -rhs);
       }
     }
 
@@ -155,6 +158,7 @@
       {
       // The value already exists and merely needs to be updated.
       *val_ptr *= rhs;
+      parent.invalidate_cache();
       check_zero();
       }
 
@@ -187,6 +191,7 @@
     if (val_ptr)
       {
       *val_ptr /= rhs;
+      parent.invalidate_cache();
       check_zero();
       }
 
@@ -211,8 +216,8 @@
 
       if (val != eT(0))
         {
-        // Ok, now we have to add it.
-        val_ptr = &parent.add_element(row, col, val);
+        // Ok, now we have to insert it.
+        val_ptr = &parent.insert_element(row, col, val);
         }
 
       }
@@ -231,12 +236,13 @@
   if (val_ptr)
     {
     (*val_ptr) += eT(1);
+    parent.invalidate_cache();
     check_zero();
     }
 
   else
     {
-    val_ptr = &parent.add_element(row, col, eT(1));
+    val_ptr = &parent.insert_element(row, col, eT(1));
     }
 
   return *this;
@@ -252,12 +258,13 @@
   if (val_ptr)
     {
     (*val_ptr) -= eT(1);
+    parent.invalidate_cache();
     check_zero();
     }
 
   else
     {
-    val_ptr = &parent.add_element(row, col, eT(-1));
+    val_ptr = &parent.insert_element(row, col, eT(-1));
     }
 
   return *this;
@@ -273,12 +280,13 @@
   if (val_ptr)
     {
     (*val_ptr) += eT(1);
+    parent.invalidate_cache();
     check_zero();
     }
 
   else
     {
-    val_ptr = &parent.add_element(row, col, eT(1));
+    val_ptr = &parent.insert_element(row, col, eT(1));
     }
 
   if (val_ptr) // It may have changed to now be 0.
@@ -301,12 +309,13 @@
   if (val_ptr)
     {
     (*val_ptr) -= eT(1);
+    parent.invalidate_cache();
     check_zero();
     }
 
   else
     {
-    val_ptr = &parent.add_element(row, col, eT(-1));
+    val_ptr = &parent.insert_element(row, col, eT(-1));
     }
 
   if (val_ptr) // It may have changed to now be 0.
@@ -339,7 +348,6 @@
 
 template<typename T1>
 arma_inline
-arma_hot
 void
 SpValProxy<T1>::check_zero()
   {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/armadillo-8.200.0/include/armadillo_bits/arma_version.hpp 
new/armadillo-8.200.1/include/armadillo_bits/arma_version.hpp
--- old/armadillo-8.200.0/include/armadillo_bits/arma_version.hpp       
2016-06-16 18:17:10.000000000 +0200
+++ new/armadillo-8.200.1/include/armadillo_bits/arma_version.hpp       
2016-06-16 18:17:11.000000000 +0200
@@ -21,7 +21,7 @@
 
 #define ARMA_VERSION_MAJOR 8
 #define ARMA_VERSION_MINOR 200
-#define ARMA_VERSION_PATCH 0
+#define ARMA_VERSION_PATCH 1
 #define ARMA_VERSION_NAME  "Feral Pursuits Deluxe"
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/armadillo-8.200.0/include/armadillo_bits/newarp_DenseGenMatProd_meat.hpp 
new/armadillo-8.200.1/include/armadillo_bits/newarp_DenseGenMatProd_meat.hpp
--- 
old/armadillo-8.200.0/include/armadillo_bits/newarp_DenseGenMatProd_meat.hpp    
    2016-06-16 18:17:10.000000000 +0200
+++ 
new/armadillo-8.200.1/include/armadillo_bits/newarp_DenseGenMatProd_meat.hpp    
    2016-06-16 18:17:11.000000000 +0200
@@ -39,8 +39,9 @@
   {
   arma_extra_debug_sigprint();
   
-  Col<eT> x(x_in , n_cols, false);
-  Col<eT> y(y_out, n_rows, false);
+  const Col<eT> x(x_in , n_cols, false, true);
+        Col<eT> y(y_out, n_rows, false, true);
+  
   y = op_mat * x;
   }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/armadillo-8.200.0/include/armadillo_bits/newarp_SparseGenMatProd_meat.hpp 
new/armadillo-8.200.1/include/armadillo_bits/newarp_SparseGenMatProd_meat.hpp
--- 
old/armadillo-8.200.0/include/armadillo_bits/newarp_SparseGenMatProd_meat.hpp   
    2016-06-16 18:17:10.000000000 +0200
+++ 
new/armadillo-8.200.1/include/armadillo_bits/newarp_SparseGenMatProd_meat.hpp   
    2016-06-16 18:17:11.000000000 +0200
@@ -39,8 +39,9 @@
   {
   arma_extra_debug_sigprint();
   
-  Col<eT> x(x_in , n_cols, false);
-  Col<eT> y(y_out, n_rows, false);
+  const Col<eT> x(x_in , n_cols, false, true);
+        Col<eT> y(y_out, n_rows, false, true);
+  
   y = op_mat * x;
   }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/armadillo-8.200.0/include/armadillo_bits/sp_auxlib_meat.hpp 
new/armadillo-8.200.1/include/armadillo_bits/sp_auxlib_meat.hpp
--- old/armadillo-8.200.0/include/armadillo_bits/sp_auxlib_meat.hpp     
2016-06-16 18:17:10.000000000 +0200
+++ new/armadillo-8.200.1/include/armadillo_bits/sp_auxlib_meat.hpp     
2016-06-16 18:17:11.000000000 +0200
@@ -89,7 +89,7 @@
 template<typename eT, typename T1>
 inline
 bool
-sp_auxlib::eigs_sym_newarp(Col<eT>& eigval, Mat<eT>& eigvec, const SpBase<eT, 
T1>& X, const uword n_eigvals, const char* form_str, const eT default_tol)
+sp_auxlib::eigs_sym_newarp(Col<eT>& eigval, Mat<eT>& eigvec, const SpBase<eT, 
T1>& X_expr, const uword n_eigvals, const char* form_str, const eT default_tol)
   {
   arma_extra_debug_sigprint();
   
@@ -99,7 +99,10 @@
     
     arma_debug_check( (form_val != form_lm) && (form_val != form_sm) && 
(form_val != form_la) && (form_val != form_sa), "eigs_sym(): unknown form 
specified" );
     
-    const newarp::SparseGenMatProd<eT> op(X.get_ref());
+    const unwrap_spmat<T1> U(X_expr.get_ref());
+    const SpMat<eT>&       X = U.M;
+    
+    const newarp::SparseGenMatProd<eT> op(X);
     
     arma_debug_check( (op.n_rows != op.n_cols), "eigs_sym(): given matrix must 
be square sized" );
     
@@ -182,7 +185,7 @@
     {
     arma_ignore(eigval);
     arma_ignore(eigvec);
-    arma_ignore(X);
+    arma_ignore(X_expr);
     arma_ignore(n_eigvals);
     arma_ignore(form_str);
     arma_ignore(default_tol);
@@ -331,7 +334,7 @@
 template<typename T, typename T1>
 inline
 bool
-sp_auxlib::eigs_gen_newarp(Col< std::complex<T> >& eigval, Mat< 
std::complex<T> >& eigvec, const SpBase<T, T1>& X, const uword n_eigvals, const 
char* form_str, const T default_tol)
+sp_auxlib::eigs_gen_newarp(Col< std::complex<T> >& eigval, Mat< 
std::complex<T> >& eigvec, const SpBase<T, T1>& X_expr, const uword n_eigvals, 
const char* form_str, const T default_tol)
   {
   arma_extra_debug_sigprint();
   
@@ -341,7 +344,10 @@
     
     arma_debug_check( (form_val == form_none), "eigs_gen(): unknown form 
specified" );
     
-    const newarp::SparseGenMatProd<T> op(X.get_ref());
+    const unwrap_spmat<T1> U(X_expr.get_ref());
+    const SpMat<T>&        X = U.M;
+    
+    const newarp::SparseGenMatProd<T> op(X);
     
     arma_debug_check( (op.n_rows != op.n_cols), "eigs_sym(): given matrix must 
be square sized" );
     
@@ -442,7 +448,7 @@
     {
     arma_ignore(eigval);
     arma_ignore(eigvec);
-    arma_ignore(X);
+    arma_ignore(X_expr);
     arma_ignore(n_eigvals);
     arma_ignore(form_str);
     arma_ignore(default_tol);
@@ -812,6 +818,7 @@
     
     int info = 0; // Return code.
     
+    arma_extra_debug_print("superlu::gssv()");
     superlu::gssv<eT>(&options, &a, perm_c, perm_r, &l, &u, &x, &stat, &info);
     
     
@@ -994,6 +1001,7 @@
     char  work[8];
     int  lwork = int(0);  // 0 means superlu will allocate memory
     
+    arma_extra_debug_print("superlu::gssvx()");
     superlu::gssvx<eT>(&options, &a, perm_c, perm_r, etree, equed, R, C, &l, 
&u, &work[0], lwork, &b, &x, &rpg, &rcond, ferr, berr, &glu, &mu, &stat, &info);
     
     // Process the return code.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/armadillo-8.200.0/index.html 
new/armadillo-8.200.1/index.html
--- old/armadillo-8.200.0/index.html    2016-06-16 18:17:10.000000000 +0200
+++ new/armadillo-8.200.1/index.html    2016-06-16 18:17:11.000000000 +0200
@@ -15,7 +15,7 @@
 </li>
 </ul>
 <ul>
-<li>Journal article - <b>please cite this article if you use Armadillo in your 
research or software</b>
+<li>Journal article - <b>please cite this article if you use Armadillo in your 
research and/or software</b>
 <ul>
 <li><a 
href="http://arma.sourceforge.net/armadillo_joss_2016.pdf";>armadillo_joss_2016.pdf</a>
 (online copy)</li>
 <li><a href="armadillo_joss_2016.pdf">armadillo_joss_2016.pdf</a> (local 
copy)</li>
@@ -23,10 +23,18 @@
 </li>
 </ul>
 <ul>
-<li>GMM implementation technical report
+<li>Journal article on Gaussian Mixture Models in Armadillo:
 <ul>
-<li><a 
href="http://arma.sourceforge.net/armadillo_mtgmm_2017.pdf";>armadillo_mtgmm_2017.pdf</a>
 (online copy)</li>
-<li><a href="armadillo_mtgmm_2017.pdf">armadillo_mtgmm_2017.pdf</a> (local 
copy)</li>
+<li><a 
href="http://arma.sourceforge.net/gmm_joss_2017.pdf";>gmm_joss_2017.pdf</a> 
(online copy)</li>
+<li><a href="gmm_joss_2017.pdf">gmm_joss_2017.pdf</a> (local copy)</li>
+</ul>
+</li>
+</ul>
+<ul>
+<li>Conference paper with mathematical details on Gaussian Mixture Models:
+<ul>
+<li><a 
href="http://arma.sourceforge.net/gmm_spcs_2017.pdf";>gmm_spcs_2017.pdf</a> 
(online copy)</li>
+<li><a href="gmm_spcs_2017.pdf">gmm_spcs_2017.pdf</a> (local copy)</li>
 </ul>
 </li>
 </ul>
@@ -39,7 +47,7 @@
 </li>
 </ul>
 <ul>
-<li>Related article
+<li>Article on integration of Armadillo with R:
 <ul>
 <li><a 
href="http://arma.sourceforge.net/rcpp_armadillo_csda_2014.pdf";>rcpp_armadillo_csda_2014.pdf</a>
 (online copy)</li>
 <li><a href="rcpp_armadillo_csda_2014.pdf">rcpp_armadillo_csda_2014.pdf</a> 
(local copy)</li>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/armadillo-8.200.0/src/README.txt 
new/armadillo-8.200.1/src/README.txt
--- old/armadillo-8.200.0/src/README.txt        1970-01-01 01:00:00.000000000 
+0100
+++ new/armadillo-8.200.1/src/README.txt        2016-06-16 18:17:11.000000000 
+0200
@@ -0,0 +1,3 @@
+NOTE:
+99.9% of Armadillo source code is in the include folder,
+in the form of heavily templated C++ code stored in header files.


Reply via email to