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. 1, pp. 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() & max()</a></li> <li><a href="#min_and_max_member">.min() & .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> </small><i>x</i><small> </small>|<small> </small><i>m<sub>g</sub></i><small> </small>, <i>C<sub>g</sub></i><small> </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> ≥ 0 and ∑<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> ≥ 0 and ∑<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> + +</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. 2, 2017. +<br> +<br>bibtex: <br> +<br> +<font size=-1> +<code> +@article{gmm2017,<br> + author = {Conrad Sanderson and Ryan Curtin},<br> + title = {gmm{\tt\char95}diag and gmm{\tt\char95}full: C++ classes for multi-threaded Gaussian mixture models and Expectation-Maximisation},<br> + journal = {Journal of Open Source Software},<br> + volume = {2},<br> + year = {2017}<br> + } +</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.
