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 - badshah...@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&nbsp;/&nbsp;.st&nbsp;</a></td><td>&nbsp;</td><td>return 
matrix transpose</td></tr>
 <tr><td><a 
href="#i_member">.i&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a></td><td>&nbsp;</td><td>return
 inverse of square matrix</td></tr>
 <tr><td><a 
href="#min_and_max_member">.min&nbsp;/&nbsp;.max</a></td><td>&nbsp;</td><td>return
 extremum value</td></tr>
-<tr><td><a 
href="#index_min_and_index_max">.index_min&nbsp;/&nbsp;.index_max</a></td><td>&nbsp;</td><td>return
 index of extremum value</td></tr>
+<tr><td><a 
href="#index_min_and_index_max_member">.index_min&nbsp;/&nbsp;.index_max</a></td><td>&nbsp;</td><td>return
 index of extremum value</td></tr>
 <tr><td><a href="#eval_member">.eval</a></td><td>&nbsp;</td><td>force 
evaluation of delayed expression</td></tr>
 
<tr><td><small><small>&nbsp;</small></small></td><td><small><small>&nbsp;</small></small></td><td><small><small>&nbsp;</small></small></td></tr>
 <tr><td><a href="#in_range">.in_range</a></td><td>&nbsp;</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&nbsp;/&nbsp;flipud</a></td><td>&nbsp;</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>&nbsp;</td><td>extract imaginary/real part</td></tr>
 <tr style="background-color: #F5F5F5;"><td><a 
href="#ind2sub">ind2sub</a></td><td>&nbsp;</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>&nbsp;</td><td>indices of extremum values</td></tr>
 <tr><td><a 
href="#inplace_trans">inplace_trans</a></td><td>&nbsp;</td><td>in-place 
transpose</td></tr>
 <tr><td><a href="#is_finite">is_finite</a></td><td>&nbsp;</td><td>check 
whether all elements are finite</td></tr>
-<tr><td><a href="#join">join_rows / 
join_cols</a></td><td>&nbsp;</td><td>concatenation of matrices</td></tr>
+<tr style="background-color: #F5F5F5;"><td><a href="#join">join_rows / 
join_cols</a></td><td>&nbsp;</td><td>concatenation of matrices</td></tr>
 <tr style="background-color: #F5F5F5;"><td><a 
href="#join_slices">join_slices</a></td><td>&nbsp;</td><td>concatenation of 
cubes</td></tr>
 <tr style="background-color: #F5F5F5;"><td><a 
href="#kron">kron</a></td><td>&nbsp;</td><td>Kronecker tensor product</td></tr>
-<tr style="background-color: #F5F5F5;"><td><a 
href="#logmat">logmat</a></td><td>&nbsp;</td><td>matrix logarithm</td></tr>
+<tr><td><a href="#logmat">logmat</a></td><td>&nbsp;</td><td>matrix 
logarithm</td></tr>
 <tr><td><a 
href="#min_and_max">min&nbsp;/&nbsp;max</a></td><td>&nbsp;</td><td>return 
extremum values</td></tr>
 <tr><td><a href="#nonzeros">nonzeros</a></td><td>&nbsp;</td><td>return 
non-zero values</td></tr>
-<tr><td><a href="#norm">norm</a></td><td>&nbsp;</td><td>various norms of 
vectors and matrices</td></tr>
+<tr style="background-color: #F5F5F5;"><td><a 
href="#norm">norm</a></td><td>&nbsp;</td><td>various norms of vectors and 
matrices</td></tr>
 <tr style="background-color: #F5F5F5;"><td><a 
href="#normalise">normalise</a></td><td>&nbsp;</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>&nbsp;</td><td>product of elements</td></tr>
-<tr style="background-color: #F5F5F5;"><td><a 
href="#rank">rank</a></td><td>&nbsp;</td><td>rank of matrix</td></tr>
+<tr><td><a href="#rank">rank</a></td><td>&nbsp;</td><td>rank of 
matrix</td></tr>
 <tr><td><a href="#rcond">rcond</a></td><td>&nbsp;</td><td>reciprocal of 
condition number</td></tr>
 <tr><td><a href="#repmat">repmat</a></td><td>&nbsp;</td><td>replicate matrix 
in block-like fashion</td></tr>
-<tr><td><a href="#reshape">reshape</a></td><td>&nbsp;</td><td>change size 
while keeping elements</td></tr>
+<tr style="background-color: #F5F5F5;"><td><a 
href="#reshape">reshape</a></td><td>&nbsp;</td><td>change size while keeping 
elements</td></tr>
 <tr style="background-color: #F5F5F5;"><td><a 
href="#resize">resize</a></td><td>&nbsp;</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>&nbsp;</td><td>shift elements</td></tr>
-<tr style="background-color: #F5F5F5;"><td><a 
href="#shuffle">shuffle</a></td><td>&nbsp;</td><td>randomly shuffle 
elements</td></tr>
+<tr><td><a href="#shuffle">shuffle</a></td><td>&nbsp;</td><td>randomly shuffle 
elements</td></tr>
 <tr><td><a href="#size">size</a></td><td>&nbsp;</td><td>obtain dimensions of 
given object</td></tr>
 <tr><td><a href="#sort">sort</a></td><td>&nbsp;</td><td>sort elements</td></tr>
-<tr><td><a href="#sort_index">sort_index</a></td><td>&nbsp;</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>&nbsp;</td><td>vector describing 
sorted order of elements</td></tr>
 <tr style="background-color: #F5F5F5;"><td><a 
href="#sqrtmat">sqrtmat</a></td><td>&nbsp;</td><td>square root of 
matrix</td></tr>
 <tr style="background-color: #F5F5F5;"><td><a 
href="#sum">sum</a></td><td>&nbsp;</td><td>sum of elements</td></tr>
-<tr style="background-color: #F5F5F5;"><td><a 
href="#sub2ind">sub2ind</a></td><td>&nbsp;</td><td>convert subscripts to linear 
index</td></tr>
+<tr><td><a href="#sub2ind">sub2ind</a></td><td>&nbsp;</td><td>convert 
subscripts to linear index</td></tr>
 <tr><td><a 
href="#symmat">symmatu&nbsp;/&nbsp;symmatl</a></td><td>&nbsp;</td><td>generate 
symmetric matrix from given matrix</td></tr>
 <tr><td><a href="#trace">trace</a></td><td>&nbsp;</td><td>sum of diagonal 
elements</td></tr>
-<tr><td><a href="#trans">trans</a></td><td>&nbsp;</td><td>transpose of 
matrix</td></tr>
+<tr style="background-color: #F5F5F5;"><td><a 
href="#trans">trans</a></td><td>&nbsp;</td><td>transpose of matrix</td></tr>
 <tr style="background-color: #F5F5F5;"><td><a 
href="#trapz">trapz</a></td><td>&nbsp;</td><td>trapezoidal numerical 
integration</td></tr>
 <tr style="background-color: #F5F5F5;"><td><a 
href="#trimat">trimatu&nbsp;/&nbsp;trimatl</a></td><td>&nbsp;</td><td>generate 
triangular matrix from given matrix</td></tr>
-<tr style="background-color: #F5F5F5;"><td><a 
href="#unique">unique</a></td><td>&nbsp;</td><td>return unique 
elements</td></tr>
+<tr><td><a href="#unique">unique</a></td><td>&nbsp;</td><td>return unique 
elements</td></tr>
 <tr><td><a href="#vectorise">vectorise</a></td><td>&nbsp;</td><td>convert 
matrix to vector</td></tr>
 <tr><td><a 
href="#misc_fns">misc&nbsp;functions</a></td><td>&nbsp;</td><td>miscellaneous 
element-wise 
functions:&nbsp;exp,&nbsp;log,&nbsp;pow,&nbsp;sqrt,&nbsp;round,&nbsp;sign,&nbsp;...</td></tr>
-<tr><td><a 
href="#trig_fns">trig&nbsp;functions</a></td><td>&nbsp;</td><td>trigonometric 
element-wise functions:&nbsp;cos,&nbsp;sin,&nbsp;...</td></tr>
+<tr style="background-color: #F5F5F5;"><td><a 
href="#trig_fns">trig&nbsp;functions</a></td><td>&nbsp;</td><td>trigonometric 
element-wise functions:&nbsp;cos,&nbsp;sin,&nbsp;...</td></tr>
 </tbody>
 </table>
 </ul>
@@ -3303,6 +3304,8 @@
 V<b>(&nbsp;span(</b>first_index<b>,</b> last_index<b>)&nbsp;)</b><br>
 V.<b>subvec(&nbsp;</b>first_index<b>,</b> last_index<b>&nbsp;)</b><br>
 <br>
+V.<b>subvec(&nbsp;</b>first_index<b>, 
size(</b>W<b>)&nbsp;)</b>&nbsp;&nbsp;&nbsp;&nbsp;<i>(W&nbsp;is&nbsp;a&nbsp;vector)</i><br>
+<br>
 V.<b>head(&nbsp;</b>number_of_elements<b>&nbsp;)</b><br>
 V.<b>tail(&nbsp;</b>number_of_elements<b>&nbsp;)</b>
 </ul>
@@ -4987,7 +4990,7 @@
 <li>
 See also:
 <ul>
-<li><a href="#index_min_and_index_max">.index_min() &amp; .index_max()</a></li>
+<li><a href="#index_min_and_index_max_member">.index_min() &amp; 
.index_max()</a></li>
 <li><a href="#min_and_max">min() &amp; 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() &amp; .max()</a></li>
+<li><a href="#index_min_and_index_max_standalone">index_min() &amp; 
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() &amp; .index_max()</a></li>
+<li><a href="#index_min_and_index_max_member">.index_min() &amp; 
.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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</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&lt;vec&gt;(10);
+uword i = index_max(v);
+
+double max_val_in_v = v(i);
+
+
+mat     M  = randu&lt;mat&gt;(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() &amp; max()</a></li>
+<li><a href="#index_min_and_index_max_member">.index_min() &amp; 
.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() &amp; .max()</a> (member 
functions)</li>
-<li><a href="#index_min_and_index_max">.index_min() &amp; .index_max()</a>
+<li><a href="#index_min_and_index_max_standalone">index_min() &amp; 
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() &amp; .index_max()</a></li>
+<li><a href="#index_min_and_index_max_member">.index_min() &amp; 
.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


Reply via email to