commit armadillo for openSUSE:Factory
Hello community, here is the log from the commit of package armadillo for openSUSE:Factory checked in at 2016-07-30 00:28:17 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/armadillo (Old) and /work/SRC/openSUSE:Factory/.armadillo.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Package is "armadillo" Changes: -------- --- /work/SRC/openSUSE:Factory/armadillo/armadillo.changes 2016-07-14 09:44:57.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.armadillo.new/armadillo.changes 2016-07-30 00:28:19.000000000 +0200 @@ -1,0 +2,8 @@ +Thu Jul 28 02:02:26 UTC 2016 - badshah400@gmail.com + +- Update to version 7.300.0: + + Added index_min() and index_max() standalone functions. + + Expanded .subvec() to accept size() arguments. + + More robust handling of non-square matrices by lu(). + +------------------------------------------------------------------- Old: ---- armadillo-7.200.2.tar.xz New: ---- armadillo-7.300.0.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ armadillo.spec ++++++ --- /var/tmp/diff_new_pack.v7B7i3/_old 2016-07-30 00:28:21.000000000 +0200 +++ /var/tmp/diff_new_pack.v7B7i3/_new 2016-07-30 00:28:21.000000000 +0200 @@ -19,7 +19,7 @@ %define soname libarmadillo7 Name: armadillo -Version: 7.200.2 +Version: 7.300.0 Release: 0 Summary: Fast C++ matrix library with interfaces to LAPACK and ATLAS License: MPL-2.0 ++++++ armadillo-7.200.2.tar.xz -> armadillo-7.300.0.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/armadillo-7.200.2/CMakeLists.txt new/armadillo-7.300.0/CMakeLists.txt --- old/armadillo-7.200.2/CMakeLists.txt 2016-06-16 17:38:45.000000000 +0200 +++ new/armadillo-7.300.0/CMakeLists.txt 2016-06-16 18:16:00.000000000 +0200 @@ -15,8 +15,8 @@ cmake_minimum_required(VERSION 2.8 FATAL_ERROR) set(ARMA_MAJOR 7) -set(ARMA_MINOR 200) -set(ARMA_PATCH 2) +set(ARMA_MINOR 300) +set(ARMA_PATCH 0) set(ARMADILLO_VERSION ${ARMA_MAJOR}.${ARMA_MINOR}.${ARMA_PATCH}) message(STATUS "Configuring Armadillo ${ARMADILLO_VERSION}") Files old/armadillo-7.200.2/armadillo_joss_2016.pdf and new/armadillo-7.300.0/armadillo_joss_2016.pdf differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/armadillo-7.200.2/docs.html new/armadillo-7.300.0/docs.html --- old/armadillo-7.200.2/docs.html 2016-06-16 17:19:27.000000000 +0200 +++ new/armadillo-7.300.0/docs.html 2016-06-16 18:16:00.000000000 +0200 @@ -144,7 +144,7 @@ <!-- --> <a class="noprint" style="display:scroll; position:fixed; bottom:5px; right:5px;" href="#top"><font size=-1>[top]</font></a> -<big><b>API Documentation for Armadillo 7.200</b></big> +<big><b>API Documentation for Armadillo 7.300</b></big> <br> <br> <br> @@ -294,7 +294,7 @@ <tr><td><a href="#t_st_members">.t / .st </a></td><td> </td><td>return matrix transpose</td></tr> <tr><td><a href="#i_member">.i </a></td><td> </td><td>return inverse of square matrix</td></tr> <tr><td><a href="#min_and_max_member">.min / .max</a></td><td> </td><td>return extremum value</td></tr> -<tr><td><a href="#index_min_and_index_max">.index_min / .index_max</a></td><td> </td><td>return index of extremum value</td></tr> +<tr><td><a href="#index_min_and_index_max_member">.index_min / .index_max</a></td><td> </td><td>return index of extremum value</td></tr> <tr><td><a href="#eval_member">.eval</a></td><td> </td><td>force evaluation of delayed expression</td></tr> <tr><td><small><small> </small></small></td><td><small><small> </small></small></td><td><small><small> </small></small></td></tr> <tr><td><a href="#in_range">.in_range</a></td><td> </td><td>check whether given location or span is valid</td></tr> @@ -372,39 +372,40 @@ <tr style="background-color: #F5F5F5;"><td><a href="#flip">fliplr / flipud</a></td><td> </td><td>reverse order of columns or rows</td></tr> <tr style="background-color: #F5F5F5;"><td><a href="#imag_real">imag / real</a></td><td> </td><td>extract imaginary/real part</td></tr> <tr style="background-color: #F5F5F5;"><td><a href="#ind2sub">ind2sub</a></td><td> </td><td>convert linear index to subscripts</td></tr> +<tr><td><a href="#index_min_and_index_max_standalone">index_min / index_max</a></td><td> </td><td>indices of extremum values</td></tr> <tr><td><a href="#inplace_trans">inplace_trans</a></td><td> </td><td>in-place transpose</td></tr> <tr><td><a href="#is_finite">is_finite</a></td><td> </td><td>check whether all elements are finite</td></tr> -<tr><td><a href="#join">join_rows / join_cols</a></td><td> </td><td>concatenation of matrices</td></tr> +<tr style="background-color: #F5F5F5;"><td><a href="#join">join_rows / join_cols</a></td><td> </td><td>concatenation of matrices</td></tr> <tr style="background-color: #F5F5F5;"><td><a href="#join_slices">join_slices</a></td><td> </td><td>concatenation of cubes</td></tr> <tr style="background-color: #F5F5F5;"><td><a href="#kron">kron</a></td><td> </td><td>Kronecker tensor product</td></tr> -<tr style="background-color: #F5F5F5;"><td><a href="#logmat">logmat</a></td><td> </td><td>matrix logarithm</td></tr> +<tr><td><a href="#logmat">logmat</a></td><td> </td><td>matrix logarithm</td></tr> <tr><td><a href="#min_and_max">min / max</a></td><td> </td><td>return extremum values</td></tr> <tr><td><a href="#nonzeros">nonzeros</a></td><td> </td><td>return non-zero values</td></tr> -<tr><td><a href="#norm">norm</a></td><td> </td><td>various norms of vectors and matrices</td></tr> +<tr style="background-color: #F5F5F5;"><td><a href="#norm">norm</a></td><td> </td><td>various norms of vectors and matrices</td></tr> <tr style="background-color: #F5F5F5;"><td><a href="#normalise">normalise</a></td><td> </td><td>normalise vectors to unit <i>p</i>-norm</td></tr> <tr style="background-color: #F5F5F5;"><td><a href="#prod">prod</a></td><td> </td><td>product of elements</td></tr> -<tr style="background-color: #F5F5F5;"><td><a href="#rank">rank</a></td><td> </td><td>rank of matrix</td></tr> +<tr><td><a href="#rank">rank</a></td><td> </td><td>rank of matrix</td></tr> <tr><td><a href="#rcond">rcond</a></td><td> </td><td>reciprocal of condition number</td></tr> <tr><td><a href="#repmat">repmat</a></td><td> </td><td>replicate matrix in block-like fashion</td></tr> -<tr><td><a href="#reshape">reshape</a></td><td> </td><td>change size while keeping elements</td></tr> +<tr style="background-color: #F5F5F5;"><td><a href="#reshape">reshape</a></td><td> </td><td>change size while keeping elements</td></tr> <tr style="background-color: #F5F5F5;"><td><a href="#resize">resize</a></td><td> </td><td>change size while keeping elements and preserving layout</td></tr> <tr style="background-color: #F5F5F5;"><td><a href="#shift">shift</a></td><td> </td><td>shift elements</td></tr> -<tr style="background-color: #F5F5F5;"><td><a href="#shuffle">shuffle</a></td><td> </td><td>randomly shuffle elements</td></tr> +<tr><td><a href="#shuffle">shuffle</a></td><td> </td><td>randomly shuffle elements</td></tr> <tr><td><a href="#size">size</a></td><td> </td><td>obtain dimensions of given object</td></tr> <tr><td><a href="#sort">sort</a></td><td> </td><td>sort elements</td></tr> -<tr><td><a href="#sort_index">sort_index</a></td><td> </td><td>vector describing sorted order of elements</td></tr> +<tr style="background-color: #F5F5F5;"><td><a href="#sort_index">sort_index</a></td><td> </td><td>vector describing sorted order of elements</td></tr> <tr style="background-color: #F5F5F5;"><td><a href="#sqrtmat">sqrtmat</a></td><td> </td><td>square root of matrix</td></tr> <tr style="background-color: #F5F5F5;"><td><a href="#sum">sum</a></td><td> </td><td>sum of elements</td></tr> -<tr style="background-color: #F5F5F5;"><td><a href="#sub2ind">sub2ind</a></td><td> </td><td>convert subscripts to linear index</td></tr> +<tr><td><a href="#sub2ind">sub2ind</a></td><td> </td><td>convert subscripts to linear index</td></tr> <tr><td><a href="#symmat">symmatu / symmatl</a></td><td> </td><td>generate symmetric matrix from given matrix</td></tr> <tr><td><a href="#trace">trace</a></td><td> </td><td>sum of diagonal elements</td></tr> -<tr><td><a href="#trans">trans</a></td><td> </td><td>transpose of matrix</td></tr> +<tr style="background-color: #F5F5F5;"><td><a href="#trans">trans</a></td><td> </td><td>transpose of matrix</td></tr> <tr style="background-color: #F5F5F5;"><td><a href="#trapz">trapz</a></td><td> </td><td>trapezoidal numerical integration</td></tr> <tr style="background-color: #F5F5F5;"><td><a href="#trimat">trimatu / trimatl</a></td><td> </td><td>generate triangular matrix from given matrix</td></tr> -<tr style="background-color: #F5F5F5;"><td><a href="#unique">unique</a></td><td> </td><td>return unique elements</td></tr> +<tr><td><a href="#unique">unique</a></td><td> </td><td>return unique elements</td></tr> <tr><td><a href="#vectorise">vectorise</a></td><td> </td><td>convert matrix to vector</td></tr> <tr><td><a href="#misc_fns">misc functions</a></td><td> </td><td>miscellaneous element-wise functions: exp, log, pow, sqrt, round, sign, ...</td></tr> -<tr><td><a href="#trig_fns">trig functions</a></td><td> </td><td>trigonometric element-wise functions: cos, sin, ...</td></tr> +<tr style="background-color: #F5F5F5;"><td><a href="#trig_fns">trig functions</a></td><td> </td><td>trigonometric element-wise functions: cos, sin, ...</td></tr> </tbody> </table> </ul> @@ -3303,6 +3304,8 @@ V<b>( span(</b>first_index<b>,</b> last_index<b>) )</b><br> V.<b>subvec( </b>first_index<b>,</b> last_index<b> )</b><br> <br> +V.<b>subvec( </b>first_index<b>, size(</b>W<b>) )</b> <i>(W is a vector)</i><br> +<br> V.<b>head( </b>number_of_elements<b> )</b><br> V.<b>tail( </b>number_of_elements<b> )</b> </ul> @@ -4987,7 +4990,7 @@ <li> See also: <ul> -<li><a href="#index_min_and_index_max">.index_min() & .index_max()</a></li> +<li><a href="#index_min_and_index_max_member">.index_min() & .index_max()</a></li> <li><a href="#min_and_max">min() & max()</a> (standalone functions)</li> <li><a href="#clamp">clamp()</a> <li><a href="#running_stat">running_stat</a></li> @@ -4998,7 +5001,7 @@ </ul> <div class="pagebreak"></div><div class="noprint"><hr class="greyline"><br></div> -<a name="index_min_and_index_max"></a> +<a name="index_min_and_index_max_member"></a> <b>.index_min()</b> <br><b>.index_max()</b> <ul> @@ -5031,6 +5034,7 @@ See also: <ul> <li><a href="#min_and_max_member">.min() & .max()</a></li> +<li><a href="#index_min_and_index_max_standalone">index_min() & index_max()</a> (standalone functions)</li> <li><a href="#ind2sub">ind2sub()</a></li> <li><a href="#sort_index">sort_index()</a></li> <li><a href="#element_access">element access</a></li> @@ -6842,7 +6846,6 @@ <li> <i>dim=0</i>, return a row vector (of type <a href="#Row">urowvec</a> or <a href="#Mat">umat</a>), with each element (0 or 1) indicating whether the corresponding column of <i>X</i> has all non-zero elements</li> -<br> <li> <i>dim=1</i>, return a column vector (of type <a href="#Col">ucolvec</a> or <a href="#Mat">umat</a>), with each element (0 or 1) indicating whether the corresponding row of <i>X</i> has all non-zero elements</li> @@ -6909,7 +6912,6 @@ <li> <i>dim=0</i>, return a row vector (of type <a href="#Row">urowvec</a> or <a href="#Mat">umat</a>), with each element (0 or 1) indicating whether the corresponding column of <i>X</i> has any non-zero elements</li> -<br> <li> <i>dim=1</i>, return a column vector (of type <a href="#Col">ucolvec</a> or <a href="#Mat">umat</a>), with each element (0 or 1) indicating whether the corresponding row of <i>X</i> has any non-zero elements</li> @@ -7715,7 +7717,7 @@ <li><a href="#nonzeros">nonzeros()</a></li> <li><a href="#unique">unique()</a></li> <li><a href="#sort_index">sort_index()</a></li> -<li><a href="#index_min_and_index_max">.index_min() & .index_max()</a></li> +<li><a href="#index_min_and_index_max_member">.index_min() & .index_max()</a></li> <li><a href="#submat">submatrix views</a></li> <li><a href="#subcube">subcube views</a></li> </ul> @@ -7995,6 +7997,89 @@ </ul> <div class="pagebreak"></div><div class="noprint"><hr class="greyline"><br></div> +<a name="index_min_and_index_max_standalone"></a> +<table> +<tbody> +<tr> +<td> +<b>index_min( V )</b> +<br><b>index_min( M )</b> +<br><b>index_min( M, dim )</b> +</td> +<td> </td> +<td> +<b>index_max( V )</b> +<br><b>index_max( M )</b> +<br><b>index_max( M, dim )</b> +</td> +</tr> +</tbody> +</table> +<ul> +<li> +For vector <i>V</i>, return the linear index of the extremum value; the returned index is of type <a href="#uword">uword</a> +</li> +<br> +<li> +For matrix <i>M</i> and: +<ul> +<li> +<i>dim=0</i>, return a row vector (of type <a href="#Row">urowvec</a> or <a href="#Mat">umat</a>), +with each column containing the index of the extremum value in the corresponding column of <i>M</i> +</li> +<li> +<i>dim=1</i>, return a column vector (of type <a href="#Col">uvec</a> or <a href="#Mat">umat</a>), +with each row containing the index of the extremum value in the corresponding row of <i>M</i> +</li> +</ul> +</li> +<br> +<li> +For each column and row, the index starts at zero +</li> +<br> +<li> +The <i>dim</i> argument is optional; by default <i>dim=0</i> is used +</li> +<br> +<li> +For objects with complex numbers, absolute values are used for comparison +</li> +<br> +<li> +Examples: +<ul> +<pre> +vec v = randu<vec>(10); +uword i = index_max(v); + +double max_val_in_v = v(i); + + +mat M = randu<mat>(5,6); + +urowvec ii = index_max(M); +ucolvec jj = index_max(M,1); + +double max_val_in_col_2 = M( ii(2), 2 ); + +double max_val_in_row_4 = M( 4, jj(4) ); +</pre> +</ul> +</li> +<br> +<li> +See also: +<ul> +<li><a href="#min_and_max">min() & max()</a></li> +<li><a href="#index_min_and_index_max_member">.index_min() & .index_max()</a> (member functions)</li> +<li><a href="#sort_index">sort_index()</a></li> +</ul> +</li> +<br> +</ul> + +<div class="pagebreak"></div><div class="noprint"><hr class="greyline"><br></div> <a name="inplace_trans"></a> <b>inplace_trans( X ) <br>inplace_trans( X, method ) @@ -8358,7 +8443,7 @@ See also: <ul> <li><a href="#min_and_max_member">.min() & .max()</a> (member functions)</li> -<li><a href="#index_min_and_index_max">.index_min() & .index_max()</a> +<li><a href="#index_min_and_index_max_standalone">index_min() & index_max()</a> <li><a href="#clamp">clamp()</a> <li><a href="#running_stat">running_stat</a></li> <li><a href="#running_stat_vec">running_stat_vec</a></li> @@ -9036,7 +9121,7 @@ <ul> <li><a href="#sort">sort()</a></li> <li><a href="#find">find()</a></li> -<li><a href="#index_min_and_index_max">.index_min() & .index_max()</a></li> +<li><a href="#index_min_and_index_max_member">.index_min() & .index_max()</a></li> <li><a href="#ind2sub">ind2sub()</a></li> </ul> </li> @@ -15587,10 +15672,19 @@ <br> <ul> +<a name="version_7300"></a> +<li>Version 7.300: +<ul> +<li>added <a href="#index_min_and_index_max_standalone">index_min()</a> and <a href="#index_min_and_index_max_standalone">index_max()</a> standalone functions</li> +<li>expanded <a href="#submat">.subvec()</a> to accept <a href="#size">size()</a> arguments</li> +<li>more robust handling of non-square matrices by <a href="#lu">lu()</a></li> +</ul> +</li> +<br> <a name="version_7200"></a> <li>Version 7.200: <ul> -<li>added <a href="#index_min_and_index_max">.index_min()</a> and <a href="#index_min_and_index_max">.index_max()</a></li> +<li>added <a href="#index_min_and_index_max_member">.index_min()</a> and <a href="#index_min_and_index_max_member">.index_max()</a> member functions</li> <li>expanded <a href="#ind2sub">ind2sub()</a> to handle vectors of indices</li> <li>expanded <a href="#sub2ind">sub2ind()</a> to handle matrix of subscripts</li> <li>expanded <a href="#expmat">expmat()</a>, <a href="#logmat">logmat()</a> and <a href="#sqrtmat">sqrtmat()</a> to optionally return a bool indicating success</li> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/armadillo-7.200.2/include/armadillo new/armadillo-7.300.0/include/armadillo --- old/armadillo-7.200.2/include/armadillo 2016-05-30 05:40:45.000000000 +0200 +++ new/armadillo-7.300.0/include/armadillo 2016-06-16 18:16:00.000000000 +0200 @@ -219,6 +219,8 @@ #include "armadillo_bits/op_htrans_bones.hpp" #include "armadillo_bits/op_max_bones.hpp" #include "armadillo_bits/op_min_bones.hpp" + #include "armadillo_bits/op_index_max_bones.hpp" + #include "armadillo_bits/op_index_min_bones.hpp" #include "armadillo_bits/op_mean_bones.hpp" #include "armadillo_bits/op_median_bones.hpp" #include "armadillo_bits/op_sort_bones.hpp" @@ -406,8 +408,10 @@ // as some files require functionality given in preceding files #include "armadillo_bits/fn_conv_to.hpp" - #include "armadillo_bits/fn_min.hpp" #include "armadillo_bits/fn_max.hpp" + #include "armadillo_bits/fn_min.hpp" + #include "armadillo_bits/fn_index_max.hpp" + #include "armadillo_bits/fn_index_min.hpp" #include "armadillo_bits/fn_accu.hpp" #include "armadillo_bits/fn_sum.hpp" #include "armadillo_bits/fn_diagmat.hpp" @@ -577,6 +581,8 @@ #include "armadillo_bits/op_inv_meat.hpp" #include "armadillo_bits/op_htrans_meat.hpp" #include "armadillo_bits/op_max_meat.hpp" + #include "armadillo_bits/op_index_max_meat.hpp" + #include "armadillo_bits/op_index_min_meat.hpp" #include "armadillo_bits/op_min_meat.hpp" #include "armadillo_bits/op_mean_meat.hpp" #include "armadillo_bits/op_median_meat.hpp" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/armadillo-7.200.2/include/armadillo_bits/Col_bones.hpp new/armadillo-7.300.0/include/armadillo_bits/Col_bones.hpp --- old/armadillo-7.200.2/include/armadillo_bits/Col_bones.hpp 2016-05-30 05:38:11.000000000 +0200 +++ new/armadillo-7.300.0/include/armadillo_bits/Col_bones.hpp 2016-06-16 18:16:00.000000000 +0200 @@ -98,6 +98,9 @@ arma_inline subview_col<eT> operator()(const span& row_span); arma_inline const subview_col<eT> operator()(const span& row_span) const; + arma_inline subview_col<eT> subvec(const uword start_row, const SizeMat& s); + arma_inline const subview_col<eT> subvec(const uword start_row, const SizeMat& s) const; + arma_inline subview_col<eT> head(const uword N); arma_inline const subview_col<eT> head(const uword N) const; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/armadillo-7.200.2/include/armadillo_bits/Col_meat.hpp new/armadillo-7.300.0/include/armadillo_bits/Col_meat.hpp --- old/armadillo-7.200.2/include/armadillo_bits/Col_meat.hpp 2016-05-30 05:38:11.000000000 +0200 +++ new/armadillo-7.300.0/include/armadillo_bits/Col_meat.hpp 2016-06-16 18:16:00.000000000 +0200 @@ -730,6 +730,38 @@ template<typename eT> arma_inline subview_col<eT> +Col<eT>::subvec(const uword start_row, const SizeMat& s) + { + arma_extra_debug_sigprint(); + + arma_debug_check( (s.n_cols != 1), "Col::subvec(): given size does not specify a column vector" ); + + arma_debug_check( ( (start_row >= Mat<eT>::n_rows) || ((start_row + s.n_rows) > Mat<eT>::n_rows) ), "Col::subvec(): size out of bounds" ); + + return subview_col<eT>(*this, 0, start_row, s.n_rows); + } + + + +template<typename eT> +arma_inline +const subview_col<eT> +Col<eT>::subvec(const uword start_row, const SizeMat& s) const + { + arma_extra_debug_sigprint(); + + arma_debug_check( (s.n_cols != 1), "Col::subvec(): given size does not specify a column vector" ); + + arma_debug_check( ( (start_row >= Mat<eT>::n_rows) || ((start_row + s.n_rows) > Mat<eT>::n_rows) ), "Col::subvec(): size out of bounds" ); + + return subview_col<eT>(*this, 0, start_row, s.n_rows); + } + + + +template<typename eT> +arma_inline +subview_col<eT> Col<eT>::head(const uword N) { arma_extra_debug_sigprint(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/armadillo-7.200.2/include/armadillo_bits/Row_bones.hpp new/armadillo-7.300.0/include/armadillo_bits/Row_bones.hpp --- old/armadillo-7.200.2/include/armadillo_bits/Row_bones.hpp 2016-05-30 05:38:11.000000000 +0200 +++ new/armadillo-7.300.0/include/armadillo_bits/Row_bones.hpp 2016-06-16 18:16:00.000000000 +0200 @@ -98,6 +98,9 @@ arma_inline subview_row<eT> operator()(const span& col_span); arma_inline const subview_row<eT> operator()(const span& col_span) const; + arma_inline subview_row<eT> subvec(const uword start_col, const SizeMat& s); + arma_inline const subview_row<eT> subvec(const uword start_col, const SizeMat& s) const; + arma_inline subview_row<eT> head(const uword N); arma_inline const subview_row<eT> head(const uword N) const; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/armadillo-7.200.2/include/armadillo_bits/Row_meat.hpp new/armadillo-7.300.0/include/armadillo_bits/Row_meat.hpp --- old/armadillo-7.200.2/include/armadillo_bits/Row_meat.hpp 2016-05-30 05:38:11.000000000 +0200 +++ new/armadillo-7.300.0/include/armadillo_bits/Row_meat.hpp 2016-06-16 18:16:00.000000000 +0200 @@ -696,6 +696,38 @@ template<typename eT> arma_inline subview_row<eT> +Row<eT>::subvec(const uword start_col, const SizeMat& s) + { + arma_extra_debug_sigprint(); + + arma_debug_check( (s.n_rows != 1), "Row::subvec(): given size does not specify a row vector" ); + + arma_debug_check( ( (start_col >= Mat<eT>::n_cols) || ((start_col + s.n_cols) > Mat<eT>::n_cols) ), "Row::subvec(): size out of bounds" ); + + return subview_row<eT>(*this, 0, start_col, s.n_cols); + } + + + +template<typename eT> +arma_inline +const subview_row<eT> +Row<eT>::subvec(const uword start_col, const SizeMat& s) const + { + arma_extra_debug_sigprint(); + + arma_debug_check( (s.n_rows != 1), "Row::subvec(): given size does not specify a row vector" ); + + arma_debug_check( ( (start_col >= Mat<eT>::n_cols) || ((start_col + s.n_cols) > Mat<eT>::n_cols) ), "Row::subvec(): size out of bounds" ); + + return subview_row<eT>(*this, 0, start_col, s.n_cols); + } + + + +template<typename eT> +arma_inline +subview_row<eT> Row<eT>::head(const uword N) { arma_extra_debug_sigprint(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/armadillo-7.200.2/include/armadillo_bits/arma_version.hpp new/armadillo-7.300.0/include/armadillo_bits/arma_version.hpp --- old/armadillo-7.200.2/include/armadillo_bits/arma_version.hpp 2016-06-12 06:13:38.000000000 +0200 +++ new/armadillo-7.300.0/include/armadillo_bits/arma_version.hpp 2016-06-16 18:16:00.000000000 +0200 @@ -14,9 +14,9 @@ #define ARMA_VERSION_MAJOR 7 -#define ARMA_VERSION_MINOR 200 -#define ARMA_VERSION_PATCH 2 -#define ARMA_VERSION_NAME "Plutocratic Climate Change Denialist" +#define ARMA_VERSION_MINOR 300 +#define ARMA_VERSION_PATCH 0 +#define ARMA_VERSION_NAME "Feral Winter" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/armadillo-7.200.2/include/armadillo_bits/auxlib_meat.hpp new/armadillo-7.300.0/include/armadillo_bits/auxlib_meat.hpp --- old/armadillo-7.200.2/include/armadillo_bits/auxlib_meat.hpp 2016-06-12 06:13:38.000000000 +0200 +++ new/armadillo-7.300.0/include/armadillo_bits/auxlib_meat.hpp 2016-06-16 18:16:00.000000000 +0200 @@ -805,7 +805,7 @@ arma_extra_debug_print("atlas::clapack_getrf()"); int info = atlas::clapack_getrf(atlas::CblasColMajor, U_n_rows, U_n_cols, U.memptr(), U_n_rows, ipiv.memptr()); - status = (info == 0); + status = (info >= 0); } #elif defined(ARMA_USE_LAPACK) { @@ -824,7 +824,7 @@ // take into account that Fortran counts from 1 arrayops::inplace_minus(ipiv.memptr(), blas_int(1), ipiv.n_elem); - status = (info == 0); + status = (info >= 0); } #endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/armadillo-7.200.2/include/armadillo_bits/compiler_setup.hpp new/armadillo-7.300.0/include/armadillo_bits/compiler_setup.hpp --- old/armadillo-7.200.2/include/armadillo_bits/compiler_setup.hpp 2016-06-05 18:37:54.000000000 +0200 +++ new/armadillo-7.300.0/include/armadillo_bits/compiler_setup.hpp 2016-06-16 18:16:00.000000000 +0200 @@ -117,10 +117,13 @@ #endif -#if defined(__APPLE__) +#if defined(__APPLE__) || defined(__apple_build_version__) #undef ARMA_BLAS_SDOT_BUG #define ARMA_BLAS_SDOT_BUG + #undef ARMA_HAVE_POSIX_MEMALIGN + #undef ARMA_USE_EXTERN_CXX11_RNG + // TODO: thread local storage (TLS) (eg. "extern thread_local") appears currently broken on Mac OS X #endif @@ -144,7 +147,7 @@ #endif -#if (defined(__GNUG__) || defined(__GNUC__)) && (defined(__clang__) || defined(__INTEL_COMPILER) || defined(__NVCC__) || defined(__CUDACC__) || defined(__PGI) || defined(__PATHSCALE__)) +#if (defined(__GNUG__) || defined(__GNUC__)) && (defined(__clang__) || defined(__INTEL_COMPILER) || defined(__NVCC__) || defined(__CUDACC__) || defined(__PGI) || defined(__PATHSCALE__) || defined(__ARMCC_VERSION) || defined(__IBMCPP__)) #undef ARMA_FAKE_GCC #define ARMA_FAKE_GCC #endif @@ -231,7 +234,7 @@ #endif -#if defined(__clang__) && (defined(__INTEL_COMPILER) || defined(__NVCC__) || defined(__CUDACC__) || defined(__PGI) || defined(__PATHSCALE__)) +#if defined(__clang__) && (defined(__INTEL_COMPILER) || defined(__NVCC__) || defined(__CUDACC__) || defined(__PGI) || defined(__PATHSCALE__) || defined(__ARMCC_VERSION) || defined(__IBMCPP__)) #undef ARMA_FAKE_CLANG #define ARMA_FAKE_CLANG #endif @@ -296,11 +299,6 @@ #define ARMA_HAVE_GCC_ASSUME_ALIGNED #endif - #if defined(__apple_build_version__) - #undef ARMA_USE_EXTERN_CXX11_RNG - // TODO: check the status of support for "extern thread_local" in clang shipped with Mac OS X - #endif - #if !defined(ARMA_USE_CXX11) && (defined(_POSIX_C_SOURCE) && (_POSIX_C_SOURCE >= 200112L)) #define ARMA_HAVE_SNPRINTF #define ARMA_HAVE_ISFINITE @@ -351,6 +349,7 @@ #pragma warning(push) #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: 4510) // default constructor could not be generated #pragma warning(disable: 4511) // copy constructor can't be generated diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/armadillo-7.200.2/include/armadillo_bits/fn_index_max.hpp new/armadillo-7.300.0/include/armadillo_bits/fn_index_max.hpp --- old/armadillo-7.200.2/include/armadillo_bits/fn_index_max.hpp 1970-01-01 01:00:00.000000000 +0100 +++ new/armadillo-7.300.0/include/armadillo_bits/fn_index_max.hpp 2016-06-16 18:16:00.000000000 +0200 @@ -0,0 +1,138 @@ +// Copyright (C) 2016 National ICT Australia (NICTA) +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. +// ------------------------------------------------------------------- +// +// Written by Conrad Sanderson - http://conradsanderson.id.au + + +//! \addtogroup fn_index_max +//! @{ + + +template<typename T1> +arma_warn_unused +arma_inline +const mtOp<uword, T1, op_index_max> +index_max + ( + const T1& X, + const uword dim = 0, + const typename enable_if< is_arma_type<T1>::value == true >::result* junk1 = 0, + const typename enable_if< resolves_to_vector<T1>::value == false >::result* junk2 = 0 + ) + { + arma_extra_debug_sigprint(); + arma_ignore(junk1); + arma_ignore(junk2); + + return mtOp<uword, T1, op_index_max>(X, dim, 0); + } + + + +template<typename T1> +arma_warn_unused +arma_inline +const mtOp<uword, T1, op_index_max> +index_max + ( + const T1& X, + const uword dim, + const typename enable_if<resolves_to_vector<T1>::value == true>::result* junk = 0 + ) + { + arma_extra_debug_sigprint(); + arma_ignore(junk); + + return mtOp<uword, T1, op_index_max>(X, dim, 0); + } + + + +template<typename T1> +arma_warn_unused +inline +uword +index_max + ( + const T1& X, + const arma_empty_class junk1 = arma_empty_class(), + const typename enable_if<resolves_to_vector<T1>::value == true>::result* junk2 = 0 + ) + { + arma_extra_debug_sigprint(); + arma_ignore(junk1); + arma_ignore(junk2); + + return X.index_max(); + } + + + +template<typename T1> +arma_warn_unused +inline +typename +enable_if2 + < + (is_arma_sparse_type<T1>::value == true) && (resolves_to_sparse_vector<T1>::value == true), + typename T1::elem_type + >::result +index_max(const T1& x) + { + arma_extra_debug_sigprint(); + + return x.index_max(); + } + + + +template<typename T1> +arma_warn_unused +inline +typename +enable_if2 + < + (is_arma_sparse_type<T1>::value == true) && (resolves_to_sparse_vector<T1>::value == false), + Mat<uword> + >::result +index_max(const T1& X, const uword dim = 0) + { + arma_extra_debug_sigprint(); + + Mat<uword> out; + + op_index_max::apply(out, X, dim); + + return out; + } + + + +arma_warn_unused +inline +uword +index_max(const SizeMat& s) + { + return (s.n_rows >= s.n_cols) ? uword(0) : uword(1); + } + + + +arma_warn_unused +inline +uword +index_max(const SizeCube& s) + { + const uword tmp_val = (s.n_rows >= s.n_cols) ? s.n_rows : s.n_cols; + const uword tmp_index = (s.n_rows >= s.n_cols) ? uword(0) : uword(1); + + return (tmp_val >= s.n_slices) ? tmp_index : uword(2); + } + + + +//! @} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/armadillo-7.200.2/include/armadillo_bits/fn_index_min.hpp new/armadillo-7.300.0/include/armadillo_bits/fn_index_min.hpp --- old/armadillo-7.200.2/include/armadillo_bits/fn_index_min.hpp 1970-01-01 01:00:00.000000000 +0100 +++ new/armadillo-7.300.0/include/armadillo_bits/fn_index_min.hpp 2016-06-16 18:16:00.000000000 +0200 @@ -0,0 +1,138 @@ +// Copyright (C) 2016 National ICT Australia (NICTA) +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. +// ------------------------------------------------------------------- +// +// Written by Conrad Sanderson - http://conradsanderson.id.au + + +//! \addtogroup fn_index_min +//! @{ + + +template<typename T1> +arma_warn_unused +arma_inline +const mtOp<uword, T1, op_index_min> +index_min + ( + const T1& X, + const uword dim = 0, + const typename enable_if< is_arma_type<T1>::value == true >::result* junk1 = 0, + const typename enable_if< resolves_to_vector<T1>::value == false >::result* junk2 = 0 + ) + { + arma_extra_debug_sigprint(); + arma_ignore(junk1); + arma_ignore(junk2); + + return mtOp<uword, T1, op_index_min>(X, dim, 0); + } + + + +template<typename T1> +arma_warn_unused +arma_inline +const mtOp<uword, T1, op_index_min> +index_min + ( + const T1& X, + const uword dim, + const typename enable_if<resolves_to_vector<T1>::value == true>::result* junk = 0 + ) + { + arma_extra_debug_sigprint(); + arma_ignore(junk); + + return mtOp<uword, T1, op_index_min>(X, dim, 0); + } + + + +template<typename T1> +arma_warn_unused +inline +uword +index_min + ( + const T1& X, + const arma_empty_class junk1 = arma_empty_class(), + const typename enable_if<resolves_to_vector<T1>::value == true>::result* junk2 = 0 + ) + { + arma_extra_debug_sigprint(); + arma_ignore(junk1); + arma_ignore(junk2); + + return X.index_min(); + } + + + +template<typename T1> +arma_warn_unused +inline +typename +enable_if2 + < + (is_arma_sparse_type<T1>::value == true) && (resolves_to_sparse_vector<T1>::value == true), + typename T1::elem_type + >::result +index_min(const T1& x) + { + arma_extra_debug_sigprint(); + + return x.index_min(); + } + + + +template<typename T1> +arma_warn_unused +inline +typename +enable_if2 + < + (is_arma_sparse_type<T1>::value == true) && (resolves_to_sparse_vector<T1>::value == false), + Mat<uword> + >::result +index_min(const T1& X, const uword dim = 0) + { + arma_extra_debug_sigprint(); + + Mat<uword> out; + + op_index_min::apply(out, X, dim); + + return out; + } + + + +arma_warn_unused +inline +uword +index_min(const SizeMat& s) + { + return (s.n_rows <= s.n_cols) ? uword(0) : uword(1); + } + + + +arma_warn_unused +inline +uword +index_min(const SizeCube& s) + { + const uword tmp_val = (s.n_rows <= s.n_cols) ? s.n_rows : s.n_cols; + const uword tmp_index = (s.n_rows <= s.n_cols) ? uword(0) : uword(1); + + return (tmp_val <= s.n_slices) ? tmp_index : uword(2); + } + + + +//! @} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/armadillo-7.200.2/include/armadillo_bits/op_expmat_meat.hpp new/armadillo-7.300.0/include/armadillo_bits/op_expmat_meat.hpp --- old/armadillo-7.200.2/include/armadillo_bits/op_expmat_meat.hpp 2016-06-05 16:43:44.000000000 +0200 +++ new/armadillo-7.300.0/include/armadillo_bits/op_expmat_meat.hpp 2016-06-16 18:16:00.000000000 +0200 @@ -41,7 +41,7 @@ template<typename T1> inline bool -op_expmat::apply_direct(Mat<typename T1::elem_type>& out, const Base<typename T1::elem_type, T1>& X) +op_expmat::apply_direct(Mat<typename T1::elem_type>& out, const Base<typename T1::elem_type, T1>& expr) { arma_extra_debug_sigprint(); @@ -50,7 +50,7 @@ if(is_op_diagmat<T1>::value) { - out = X.get_ref(); // force the evaluation of diagmat() + out = expr.get_ref(); // force the evaluation of diagmat() arma_debug_check( (out.is_square() == false), "expmat(): given matrix must be square sized" ); @@ -63,7 +63,7 @@ } else { - Mat<eT> A = X.get_ref(); + Mat<eT> A = expr.get_ref(); arma_debug_check( (A.is_square() == false), "expmat(): given matrix must be square sized" ); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/armadillo-7.200.2/include/armadillo_bits/op_index_max_bones.hpp new/armadillo-7.300.0/include/armadillo_bits/op_index_max_bones.hpp --- old/armadillo-7.200.2/include/armadillo_bits/op_index_max_bones.hpp 1970-01-01 01:00:00.000000000 +0100 +++ new/armadillo-7.300.0/include/armadillo_bits/op_index_max_bones.hpp 2016-06-16 18:16:00.000000000 +0200 @@ -0,0 +1,36 @@ +// Copyright (C) 2016 National ICT Australia (NICTA) +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. +// ------------------------------------------------------------------- +// +// Written by Conrad Sanderson - http://conradsanderson.id.au + + +//! \addtogroup op_index_max +//! @{ + + +class op_index_max + { + public: + + // dense matrices + + template<typename T1> + inline static void apply(Mat<uword>& out, const mtOp<uword,T1,op_index_max>& in); + + template<typename eT> + inline static void apply_noalias(Mat<uword>& out, const Mat<eT>& X, const uword dim); + + + // sparse matrices + + template<typename T1> + inline static void apply(Mat<uword>& out, const SpBase<typename T1::elem_type,T1>& expr, const uword dim); + }; + + + +//! @} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/armadillo-7.200.2/include/armadillo_bits/op_index_max_meat.hpp new/armadillo-7.300.0/include/armadillo_bits/op_index_max_meat.hpp --- old/armadillo-7.200.2/include/armadillo_bits/op_index_max_meat.hpp 1970-01-01 01:00:00.000000000 +0100 +++ new/armadillo-7.300.0/include/armadillo_bits/op_index_max_meat.hpp 2016-06-16 18:16:00.000000000 +0200 @@ -0,0 +1,144 @@ +// Copyright (C) 2016 National ICT Australia (NICTA) +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. +// ------------------------------------------------------------------- +// +// Written by Conrad Sanderson - http://conradsanderson.id.au + + +//! \addtogroup op_index_max +//! @{ + + + +template<typename T1> +inline +void +op_index_max::apply(Mat<uword>& out, const mtOp<uword,T1,op_index_max>& in) + { + arma_extra_debug_sigprint(); + + typedef typename T1::elem_type eT; + + const uword dim = in.aux_uword_a; + arma_debug_check( (dim > 1), "index_max(): parameter 'dim' must be 0 or 1"); + + const quasi_unwrap<T1> U(in.m); + const Mat<eT>& X = U.M; + + if(U.is_alias(out) == false) + { + op_index_max::apply_noalias(out, X, dim); + } + else + { + Mat<uword> tmp; + + op_index_max::apply_noalias(tmp, X, dim); + + out.steal_mem(tmp); + } + } + + + +template<typename eT> +inline +void +op_index_max::apply_noalias(Mat<uword>& out, const Mat<eT>& X, const uword dim) + { + arma_extra_debug_sigprint(); + + const uword X_n_rows = X.n_rows; + const uword X_n_cols = X.n_cols; + + if(dim == 0) + { + arma_extra_debug_print("op_index_max::apply(): dim = 0"); + + out.set_size((X_n_rows > 0) ? 1 : 0, X_n_cols); + + if(X_n_rows == 0) { return; } + + uword* out_mem = out.memptr(); + + for(uword col=0; col < X_n_cols; ++col) + { + op_max::direct_max( X.colptr(col), X_n_rows, out_mem[col] ); + } + } + else + if(dim == 1) + { + arma_extra_debug_print("op_index_max::apply(): dim = 1"); + + out.set_size(X_n_rows, (X_n_cols > 0) ? 1 : 0); + + if(X_n_cols == 0) { return; } + + uword* out_mem = out.memptr(); + + for(uword row=0; row<X_n_rows; ++row) + { + out_mem[row] = X.row(row).index_max(); + } + } + } + + + +template<typename T1> +inline +void +op_index_max::apply(Mat<uword>& out, const SpBase<typename T1::elem_type,T1>& expr, const uword dim) + { + arma_extra_debug_sigprint(); + + typedef typename T1::elem_type eT; + + arma_debug_check( (dim > 1), "index_max(): parameter 'dim' must be 0 or 1" ); + + const unwrap_spmat<T1> U(expr.get_ref()); + const SpMat<eT>& X = U.M; + + const uword X_n_rows = X.n_rows; + const uword X_n_cols = X.n_cols; + + if(dim == 0) + { + arma_extra_debug_print("op_index_max::apply(): dim = 0"); + + out.set_size((X_n_rows > 0) ? 1 : 0, X_n_cols); + + if(X_n_rows == 0) { return; } + + uword* out_mem = out.memptr(); + + for(uword col=0; col < X_n_cols; ++col) + { + out_mem[col] = X.col(col).index_max(); + } + } + else + if(dim == 1) + { + arma_extra_debug_print("op_index_max::apply(): dim = 1"); + + out.set_size(X_n_rows, (X_n_cols > 0) ? 1 : 0); + + if(X_n_cols == 0) { return; } + + uword* out_mem = out.memptr(); + + for(uword row=0; row<X_n_rows; ++row) + { + out_mem[row] = X.row(row).index_max(); + } + } + } + + + +//! @} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/armadillo-7.200.2/include/armadillo_bits/op_index_min_bones.hpp new/armadillo-7.300.0/include/armadillo_bits/op_index_min_bones.hpp --- old/armadillo-7.200.2/include/armadillo_bits/op_index_min_bones.hpp 1970-01-01 01:00:00.000000000 +0100 +++ new/armadillo-7.300.0/include/armadillo_bits/op_index_min_bones.hpp 2016-06-16 18:16:00.000000000 +0200 @@ -0,0 +1,36 @@ +// Copyright (C) 2016 National ICT Australia (NICTA) +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. +// ------------------------------------------------------------------- +// +// Written by Conrad Sanderson - http://conradsanderson.id.au + + +//! \addtogroup op_index_min +//! @{ + + +class op_index_min + { + public: + + // dense matrices + + template<typename T1> + inline static void apply(Mat<uword>& out, const mtOp<uword,T1,op_index_min>& in); + + template<typename eT> + inline static void apply_noalias(Mat<uword>& out, const Mat<eT>& X, const uword dim); + + + // sparse matrices + + template<typename T1> + inline static void apply(Mat<uword>& out, const SpBase<typename T1::elem_type,T1>& expr, const uword dim); + }; + + + +//! @} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/armadillo-7.200.2/include/armadillo_bits/op_index_min_meat.hpp new/armadillo-7.300.0/include/armadillo_bits/op_index_min_meat.hpp --- old/armadillo-7.200.2/include/armadillo_bits/op_index_min_meat.hpp 1970-01-01 01:00:00.000000000 +0100 +++ new/armadillo-7.300.0/include/armadillo_bits/op_index_min_meat.hpp 2016-06-16 18:16:00.000000000 +0200 @@ -0,0 +1,144 @@ +// Copyright (C) 2016 National ICT Australia (NICTA) +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. +// ------------------------------------------------------------------- +// +// Written by Conrad Sanderson - http://conradsanderson.id.au + + +//! \addtogroup op_index_min +//! @{ + + + +template<typename T1> +inline +void +op_index_min::apply(Mat<uword>& out, const mtOp<uword,T1,op_index_min>& in) + { + arma_extra_debug_sigprint(); + + typedef typename T1::elem_type eT; + + const uword dim = in.aux_uword_a; + arma_debug_check( (dim > 1), "index_min(): parameter 'dim' must be 0 or 1"); + + const quasi_unwrap<T1> U(in.m); + const Mat<eT>& X = U.M; + + if(U.is_alias(out) == false) + { + op_index_min::apply_noalias(out, X, dim); + } + else + { + Mat<uword> tmp; + + op_index_min::apply_noalias(tmp, X, dim); + + out.steal_mem(tmp); + } + } + + + +template<typename eT> +inline +void +op_index_min::apply_noalias(Mat<uword>& out, const Mat<eT>& X, const uword dim) + { + arma_extra_debug_sigprint(); + + const uword X_n_rows = X.n_rows; + const uword X_n_cols = X.n_cols; + + if(dim == 0) + { + arma_extra_debug_print("op_index_min::apply(): dim = 0"); + + out.set_size((X_n_rows > 0) ? 1 : 0, X_n_cols); + + if(X_n_rows == 0) { return; } + + uword* out_mem = out.memptr(); + + for(uword col=0; col < X_n_cols; ++col) + { + op_min::direct_min( X.colptr(col), X_n_rows, out_mem[col] ); + } + } + else + if(dim == 1) + { + arma_extra_debug_print("op_index_min::apply(): dim = 1"); + + out.set_size(X_n_rows, (X_n_cols > 0) ? 1 : 0); + + if(X_n_cols == 0) { return; } + + uword* out_mem = out.memptr(); + + for(uword row=0; row<X_n_rows; ++row) + { + out_mem[row] = X.row(row).index_min(); + } + } + } + + + +template<typename T1> +inline +void +op_index_min::apply(Mat<uword>& out, const SpBase<typename T1::elem_type,T1>& expr, const uword dim) + { + arma_extra_debug_sigprint(); + + typedef typename T1::elem_type eT; + + arma_debug_check( (dim > 1), "index_min(): parameter 'dim' must be 0 or 1" ); + + const unwrap_spmat<T1> U(expr.get_ref()); + const SpMat<eT>& X = U.M; + + const uword X_n_rows = X.n_rows; + const uword X_n_cols = X.n_cols; + + if(dim == 0) + { + arma_extra_debug_print("op_index_min::apply(): dim = 0"); + + out.set_size((X_n_rows > 0) ? 1 : 0, X_n_cols); + + if(X_n_rows == 0) { return; } + + uword* out_mem = out.memptr(); + + for(uword col=0; col < X_n_cols; ++col) + { + out_mem[col] = X.col(col).index_min(); + } + } + else + if(dim == 1) + { + arma_extra_debug_print("op_index_min::apply(): dim = 1"); + + out.set_size(X_n_rows, (X_n_cols > 0) ? 1 : 0); + + if(X_n_cols == 0) { return; } + + uword* out_mem = out.memptr(); + + for(uword row=0; row<X_n_rows; ++row) + { + out_mem[row] = X.row(row).index_min(); + } + } + } + + + +//! @} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/armadillo-7.200.2/include/armadillo_bits/op_max_meat.hpp new/armadillo-7.300.0/include/armadillo_bits/op_max_meat.hpp --- old/armadillo-7.200.2/include/armadillo_bits/op_max_meat.hpp 2016-05-30 07:41:31.000000000 +0200 +++ new/armadillo-7.300.0/include/armadillo_bits/op_max_meat.hpp 2016-06-16 18:16:00.000000000 +0200 @@ -25,10 +25,10 @@ const uword dim = in.aux_uword_a; arma_debug_check( (dim > 1), "max(): parameter 'dim' must be 0 or 1"); - const unwrap<T1> U(in.m); + const quasi_unwrap<T1> U(in.m); const Mat<eT>& X = U.M; - if(&out != &X) + if(U.is_alias(out) == false) { op_max::apply_noalias(out, X, dim); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/armadillo-7.200.2/include/armadillo_bits/op_min_meat.hpp new/armadillo-7.300.0/include/armadillo_bits/op_min_meat.hpp --- old/armadillo-7.200.2/include/armadillo_bits/op_min_meat.hpp 2016-05-30 07:41:31.000000000 +0200 +++ new/armadillo-7.300.0/include/armadillo_bits/op_min_meat.hpp 2016-06-16 18:16:00.000000000 +0200 @@ -25,10 +25,10 @@ const uword dim = in.aux_uword_a; arma_debug_check( (dim > 1), "min(): parameter 'dim' must be 0 or 1"); - const unwrap<T1> U(in.m); + const quasi_unwrap<T1> U(in.m); const Mat<eT>& X = U.M; - if(&out != &X) + if(U.is_alias(out) == false) { op_min::apply_noalias(out, X, dim); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/armadillo-7.200.2/include/armadillo_bits/subview_bones.hpp new/armadillo-7.300.0/include/armadillo_bits/subview_bones.hpp --- old/armadillo-7.200.2/include/armadillo_bits/subview_bones.hpp 2016-05-31 04:41:52.000000000 +0200 +++ new/armadillo-7.300.0/include/armadillo_bits/subview_bones.hpp 2016-06-16 18:16:00.000000000 +0200 @@ -236,6 +236,9 @@ inline subview_col<eT> subvec(const uword in_row1, const uword in_row2); inline const subview_col<eT> subvec(const uword in_row1, const uword in_row2) const; + inline subview_col<eT> subvec(const uword start_row, const SizeMat& s); + inline const subview_col<eT> subvec(const uword start_row, const SizeMat& s) const; + inline subview_col<eT> head(const uword N); inline const subview_col<eT> head(const uword N) const; @@ -311,6 +314,9 @@ inline subview_row<eT> subvec(const uword in_col1, const uword in_col2); inline const subview_row<eT> subvec(const uword in_col1, const uword in_col2) const; + inline subview_row<eT> subvec(const uword start_col, const SizeMat& s); + inline const subview_row<eT> subvec(const uword start_col, const SizeMat& s) const; + inline subview_row<eT> head(const uword N); inline const subview_row<eT> head(const uword N) const; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/armadillo-7.200.2/include/armadillo_bits/subview_meat.hpp new/armadillo-7.300.0/include/armadillo_bits/subview_meat.hpp --- old/armadillo-7.200.2/include/armadillo_bits/subview_meat.hpp 2016-06-01 07:46:28.000000000 +0200 +++ new/armadillo-7.300.0/include/armadillo_bits/subview_meat.hpp 2016-06-16 18:16:00.000000000 +0200 @@ -2705,6 +2705,42 @@ template<typename eT> inline subview_col<eT> +subview_col<eT>::subvec(const uword start_row, const SizeMat& s) + { + arma_extra_debug_sigprint(); + + arma_debug_check( (s.n_cols != 1), "subview_col::subvec(): given size does not specify a column vector" ); + + arma_debug_check( ( (start_row >= subview<eT>::n_rows) || ((start_row + s.n_rows) > subview<eT>::n_rows) ), "subview_col::subvec(): size out of bounds" ); + + const uword base_row1 = this->aux_row1 + start_row; + + return subview_col<eT>(this->m, this->aux_col1, base_row1, s.n_rows); + } + + + +template<typename eT> +inline +const subview_col<eT> +subview_col<eT>::subvec(const uword start_row, const SizeMat& s) const + { + arma_extra_debug_sigprint(); + + arma_debug_check( (s.n_cols != 1), "subview_col::subvec(): given size does not specify a column vector" ); + + arma_debug_check( ( (start_row >= subview<eT>::n_rows) || ((start_row + s.n_rows) > subview<eT>::n_rows) ), "subview_col::subvec(): size out of bounds" ); + + const uword base_row1 = this->aux_row1 + start_row; + + return subview_col<eT>(this->m, this->aux_col1, base_row1, s.n_rows); + } + + + +template<typename eT> +inline +subview_col<eT> subview_col<eT>::head(const uword N) { arma_extra_debug_sigprint(); @@ -3153,6 +3189,42 @@ } + +template<typename eT> +inline +subview_row<eT> +subview_row<eT>::subvec(const uword start_col, const SizeMat& s) + { + arma_extra_debug_sigprint(); + + arma_debug_check( (s.n_rows != 1), "subview_row::subvec(): given size does not specify a row vector" ); + + arma_debug_check( ( (start_col >= subview<eT>::n_cols) || ((start_col + s.n_cols) > subview<eT>::n_cols) ), "subview_row::subvec(): size out of bounds" ); + + const uword base_col1 = this->aux_col1 + start_col; + + return subview_row<eT>(this->m, this->aux_row1, base_col1, s.n_cols); + } + + + +template<typename eT> +inline +const subview_row<eT> +subview_row<eT>::subvec(const uword start_col, const SizeMat& s) const + { + arma_extra_debug_sigprint(); + + arma_debug_check( (s.n_rows != 1), "subview_row::subvec(): given size does not specify a row vector" ); + + arma_debug_check( ( (start_col >= subview<eT>::n_cols) || ((start_col + s.n_cols) > subview<eT>::n_cols) ), "subview_row::subvec(): size out of bounds" ); + + const uword base_col1 = this->aux_col1 + start_col; + + return subview_row<eT>(this->m, this->aux_row1, base_col1, s.n_cols); + } + + template<typename eT> inline diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/armadillo-7.200.2/src/wrapper.cpp new/armadillo-7.300.0/src/wrapper.cpp --- old/armadillo-7.200.2/src/wrapper.cpp 2016-05-30 05:40:45.000000000 +0200 +++ new/armadillo-7.300.0/src/wrapper.cpp 2016-06-16 18:16:00.000000000 +0200 @@ -13,7 +13,7 @@ #include <limits> #include <complex> -#if (__cplusplus >= 201103L) || defined(__GXX_EXPERIMENTAL_CXX0X__) +#if (__cplusplus >= 201103L) #undef ARMA_USE_CXX11 #define ARMA_USE_CXX11 #endif
participants (1)
-
root@hilbert.suse.de