Skip to content

Commit 71a9c18

Browse files
committed
Sync with Armadillo 15.2-rc1
1 parent 9c42bac commit 71a9c18

File tree

131 files changed

+2597
-584
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

131 files changed

+2597
-584
lines changed

inst/include/current/armadillo

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -581,6 +581,7 @@ namespace arma
581581
#include "armadillo_bits/fn_inplace_trans.hpp"
582582
#include "armadillo_bits/fn_randi.hpp"
583583
#include "armadillo_bits/fn_randg.hpp"
584+
#include "armadillo_bits/fn_rande.hpp"
584585
#include "armadillo_bits/fn_cond_rcond.hpp"
585586
#include "armadillo_bits/fn_normalise.hpp"
586587
#include "armadillo_bits/fn_clamp.hpp"

inst/include/current/armadillo_bits/Base_meat.hpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -667,7 +667,7 @@ Base<elem_type,derived>::is_finite() const
667667

668668
if(arma_config::fast_math_warn) { arma_warn(1, "is_finite(): detection of non-finite values is not reliable in fast math mode"); }
669669

670-
if(is_Mat<typename Proxy<derived>::stored_type>::value)
670+
if( (quasi_unwrap<derived>::has_orig_mem) || (is_Mat<typename Proxy<derived>::stored_type>::value) )
671671
{
672672
const quasi_unwrap<derived> U( (*this).get_ref() );
673673

@@ -715,7 +715,7 @@ Base<elem_type,derived>::has_inf() const
715715

716716
if(arma_config::fast_math_warn) { arma_warn(1, "has_inf(): detection of non-finite values is not reliable in fast math mode"); }
717717

718-
if(is_Mat<typename Proxy<derived>::stored_type>::value)
718+
if( (quasi_unwrap<derived>::has_orig_mem) || (is_Mat<typename Proxy<derived>::stored_type>::value) )
719719
{
720720
const quasi_unwrap<derived> U( (*this).get_ref() );
721721

@@ -763,7 +763,7 @@ Base<elem_type,derived>::has_nan() const
763763

764764
if(arma_config::fast_math_warn) { arma_warn(1, "has_nan(): detection of non-finite values is not reliable in fast math mode"); }
765765

766-
if(is_Mat<typename Proxy<derived>::stored_type>::value)
766+
if( (quasi_unwrap<derived>::has_orig_mem) || (is_Mat<typename Proxy<derived>::stored_type>::value) )
767767
{
768768
const quasi_unwrap<derived> U( (*this).get_ref() );
769769

@@ -811,7 +811,7 @@ Base<elem_type,derived>::has_nonfinite() const
811811

812812
if(arma_config::fast_math_warn) { arma_warn(1, "has_nonfinite(): detection of non-finite values is not reliable in fast math mode"); }
813813

814-
if(is_Mat<typename Proxy<derived>::stored_type>::value)
814+
if( (quasi_unwrap<derived>::has_orig_mem) || (is_Mat<typename Proxy<derived>::stored_type>::value) )
815815
{
816816
const quasi_unwrap<derived> U( (*this).get_ref() );
817817

inst/include/current/armadillo_bits/Col_bones.hpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ class Col : public Mat<eT>
142142
template<typename T1> inline void shed_rows(const Base<uword, T1>& indices);
143143

144144
[[deprecated]] inline void insert_rows(const uword row_num, const uword N, const bool set_to_zero);
145-
inline void insert_rows(const uword row_num, const uword N);
145+
inline void insert_rows(const uword row_num, const uword N);
146146

147147
template<typename T1> inline void insert_rows(const uword row_num, const Base<eT,T1>& X);
148148

@@ -154,6 +154,11 @@ class Col : public Mat<eT>
154154
arma_warn_unused arma_inline const eT& at(const uword in_row, const uword in_col) const;
155155

156156

157+
inline constexpr bool is_vec() const { return true; }
158+
inline constexpr bool is_rowvec() const { return false; }
159+
inline constexpr bool is_colvec() const { return true; }
160+
161+
157162
typedef eT* row_iterator;
158163
typedef const eT* const_row_iterator;
159164

inst/include/current/armadillo_bits/Col_meat.hpp

Lines changed: 10 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -483,7 +483,7 @@ Col<eT>::operator=(Col<eT>&& X)
483483
// if(X.n_cols != 1) { const Mat<eT>& XX = X; Mat<eT>::operator=(XX); return *this; }
484484
//
485485
// (*this).steal_mem(X, true);
486-
//
486+
//
487487
// return *this;
488488
// }
489489

@@ -521,11 +521,9 @@ template<typename eT>
521521
template<typename T1>
522522
inline
523523
Col<eT>::Col(const Base<eT,T1>& X)
524-
: Mat<eT>(arma_vec_indicator(), 1)
524+
: Mat<eT>(X.get_ref(), arma_vec_indicator(), 1)
525525
{
526-
arma_debug_sigprint();
527-
528-
Mat<eT>::operator=(X.get_ref());
526+
arma_debug_sigprint_this(this);
529527
}
530528

531529

@@ -549,11 +547,9 @@ template<typename eT>
549547
template<typename T1>
550548
inline
551549
Col<eT>::Col(const SpBase<eT,T1>& X)
552-
: Mat<eT>(arma_vec_indicator(), 1)
550+
: Mat<eT>(X.get_ref(), arma_vec_indicator(), 1)
553551
{
554552
arma_debug_sigprint_this(this);
555-
556-
Mat<eT>::operator=(X.get_ref());
557553
}
558554

559555

@@ -607,12 +603,9 @@ Col<eT>::Col
607603
const Base<typename Col<eT>::pod_type, T1>& A,
608604
const Base<typename Col<eT>::pod_type, T2>& B
609605
)
606+
: Mat<eT>(A.get_ref(), B.get_ref(), arma_vec_indicator(), 1)
610607
{
611-
arma_debug_sigprint();
612-
613-
access::rw(Mat<eT>::vec_state) = 1;
614-
615-
Mat<eT>::init(A,B);
608+
arma_debug_sigprint_this(this);
616609
}
617610

618611

@@ -621,12 +614,9 @@ template<typename eT>
621614
template<typename T1>
622615
inline
623616
Col<eT>::Col(const BaseCube<eT,T1>& X)
617+
: Mat<eT>(X.get_ref(), arma_vec_indicator(), 1)
624618
{
625-
arma_debug_sigprint();
626-
627-
access::rw(Mat<eT>::vec_state) = 1;
628-
629-
Mat<eT>::operator=(X);
619+
arma_debug_sigprint_this(this);
630620
}
631621

632622

@@ -649,12 +639,9 @@ Col<eT>::operator=(const BaseCube<eT,T1>& X)
649639
template<typename eT>
650640
inline
651641
Col<eT>::Col(const subview_cube<eT>& X)
642+
: Mat<eT>(X, arma_vec_indicator(), 1)
652643
{
653-
arma_debug_sigprint();
654-
655-
access::rw(Mat<eT>::vec_state) = 1;
656-
657-
Mat<eT>::operator=(X);
644+
arma_debug_sigprint_this(this);
658645
}
659646

660647

inst/include/current/armadillo_bits/Mat_bones.hpp

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ class Mat : public Base< eT, Mat<eT> >
9999
inline Mat& operator*=(const eT val);
100100
inline Mat& operator/=(const eT val);
101101

102+
inline Mat(const Mat& m, const arma_vec_indicator&, const uhword in_vec_state);
102103
inline Mat(const Mat& m);
103104
inline Mat& operator= (const Mat& m);
104105
inline Mat& operator+=(const Mat& m);
@@ -107,6 +108,7 @@ class Mat : public Base< eT, Mat<eT> >
107108
inline Mat& operator%=(const Mat& m);
108109
inline Mat& operator/=(const Mat& m);
109110

111+
template<typename T1> inline Mat(const BaseCube<eT,T1>& X, const arma_vec_indicator&, const uhword in_vec_state);
110112
template<typename T1> inline Mat(const BaseCube<eT,T1>& X);
111113
template<typename T1> inline Mat& operator= (const BaseCube<eT,T1>& X);
112114
template<typename T1> inline Mat& operator+=(const BaseCube<eT,T1>& X);
@@ -115,11 +117,12 @@ class Mat : public Base< eT, Mat<eT> >
115117
template<typename T1> inline Mat& operator%=(const BaseCube<eT,T1>& X);
116118
template<typename T1> inline Mat& operator/=(const BaseCube<eT,T1>& X);
117119

118-
template<typename T1, typename T2>
119-
inline explicit Mat(const Base<pod_type,T1>& A, const Base<pod_type,T2>& B);
120+
template<typename T1, typename T2> inline explicit Mat(const Base<pod_type,T1>& A, const Base<pod_type,T2>& B, const arma_vec_indicator&, const uhword in_vec_state);
121+
template<typename T1, typename T2> inline explicit Mat(const Base<pod_type,T1>& A, const Base<pod_type,T2>& B);
120122

121123
inline explicit Mat(const subview<eT>& X, const bool use_colmem); // only to be used by the quasi_unwrap class
122124

125+
inline Mat(const subview<eT>& X, const arma_vec_indicator&, const uhword in_vec_state);
123126
inline Mat(const subview<eT>& X);
124127
inline Mat& operator= (const subview<eT>& X);
125128
inline Mat& operator+=(const subview<eT>& X);
@@ -135,6 +138,7 @@ class Mat : public Base< eT, Mat<eT> >
135138
template<bool do_conj>
136139
inline Mat(const xtrans_mat<eT,do_conj>& X); // xtrans_mat can only be generated by the Proxy class
137140

141+
inline Mat(const subview_cube<eT>& X, const arma_vec_indicator&, const uhword in_vec_state);
138142
inline Mat(const subview_cube<eT>& X);
139143
inline Mat& operator= (const subview_cube<eT>& X);
140144
inline Mat& operator+=(const subview_cube<eT>& X);
@@ -143,6 +147,7 @@ class Mat : public Base< eT, Mat<eT> >
143147
inline Mat& operator%=(const subview_cube<eT>& X);
144148
inline Mat& operator/=(const subview_cube<eT>& X);
145149

150+
inline Mat(const diagview<eT>& X, const arma_vec_indicator&, const uhword in_vec_state);
146151
inline Mat(const diagview<eT>& X);
147152
inline Mat& operator= (const diagview<eT>& X);
148153
inline Mat& operator+=(const diagview<eT>& X);
@@ -151,6 +156,7 @@ class Mat : public Base< eT, Mat<eT> >
151156
inline Mat& operator%=(const diagview<eT>& X);
152157
inline Mat& operator/=(const diagview<eT>& X);
153158

159+
template<typename T1> inline Mat(const subview_elem1<eT,T1>& X, const arma_vec_indicator&, const uhword in_vec_state);
154160
template<typename T1> inline Mat(const subview_elem1<eT,T1>& X);
155161
template<typename T1> inline Mat& operator= (const subview_elem1<eT,T1>& X);
156162
template<typename T1> inline Mat& operator+=(const subview_elem1<eT,T1>& X);
@@ -159,6 +165,7 @@ class Mat : public Base< eT, Mat<eT> >
159165
template<typename T1> inline Mat& operator%=(const subview_elem1<eT,T1>& X);
160166
template<typename T1> inline Mat& operator/=(const subview_elem1<eT,T1>& X);
161167

168+
template<typename T1, typename T2> inline Mat(const subview_elem2<eT,T1,T2>& X, const arma_vec_indicator&, const uhword in_vec_state);
162169
template<typename T1, typename T2> inline Mat(const subview_elem2<eT,T1,T2>& X);
163170
template<typename T1, typename T2> inline Mat& operator= (const subview_elem2<eT,T1,T2>& X);
164171
template<typename T1, typename T2> inline Mat& operator+=(const subview_elem2<eT,T1,T2>& X);
@@ -168,6 +175,7 @@ class Mat : public Base< eT, Mat<eT> >
168175
template<typename T1, typename T2> inline Mat& operator/=(const subview_elem2<eT,T1,T2>& X);
169176

170177
// Operators on sparse matrices (and subviews)
178+
template<typename T1> inline explicit Mat(const SpBase<eT, T1>& m, const arma_vec_indicator&, const uhword in_vec_state);
171179
template<typename T1> inline explicit Mat(const SpBase<eT, T1>& m);
172180
template<typename T1> inline Mat& operator= (const SpBase<eT, T1>& m);
173181
template<typename T1> inline Mat& operator+=(const SpBase<eT, T1>& m);
@@ -176,11 +184,13 @@ class Mat : public Base< eT, Mat<eT> >
176184
template<typename T1> inline Mat& operator%=(const SpBase<eT, T1>& m);
177185
template<typename T1> inline Mat& operator/=(const SpBase<eT, T1>& m);
178186

187+
inline explicit Mat(const SpSubview<eT>& X, const arma_vec_indicator&, const uhword in_vec_state);
179188
inline explicit Mat(const SpSubview<eT>& X);
180189
inline Mat& operator= (const SpSubview<eT>& X);
181190
inline Mat& operator+=(const SpSubview<eT>& X);
182191
inline Mat& operator-=(const SpSubview<eT>& X);
183192

193+
inline explicit Mat(const spdiagview<eT>& X, const arma_vec_indicator&, const uhword in_vec_state);
184194
inline explicit Mat(const spdiagview<eT>& X);
185195
inline Mat& operator= (const spdiagview<eT>& X);
186196
inline Mat& operator+=(const spdiagview<eT>& X);
@@ -320,6 +330,7 @@ class Mat : public Base< eT, Mat<eT> >
320330
template<typename T1> inline void insert_cols(const uword col_num, const Base<eT,T1>& X);
321331

322332

333+
template<typename T1, typename gen_type> inline Mat(const Gen<T1, gen_type>& X, const arma_vec_indicator&, const uhword in_vec_state);
323334
template<typename T1, typename gen_type> inline Mat(const Gen<T1, gen_type>& X);
324335
template<typename T1, typename gen_type> inline Mat& operator= (const Gen<T1, gen_type>& X);
325336
template<typename T1, typename gen_type> inline Mat& operator+=(const Gen<T1, gen_type>& X);
@@ -328,6 +339,7 @@ class Mat : public Base< eT, Mat<eT> >
328339
template<typename T1, typename gen_type> inline Mat& operator%=(const Gen<T1, gen_type>& X);
329340
template<typename T1, typename gen_type> inline Mat& operator/=(const Gen<T1, gen_type>& X);
330341

342+
template<typename T1, typename op_type> inline Mat(const Op<T1, op_type>& X, const arma_vec_indicator&, const uhword in_vec_state);
331343
template<typename T1, typename op_type> inline Mat(const Op<T1, op_type>& X);
332344
template<typename T1, typename op_type> inline Mat& operator= (const Op<T1, op_type>& X);
333345
template<typename T1, typename op_type> inline Mat& operator+=(const Op<T1, op_type>& X);
@@ -336,6 +348,7 @@ class Mat : public Base< eT, Mat<eT> >
336348
template<typename T1, typename op_type> inline Mat& operator%=(const Op<T1, op_type>& X);
337349
template<typename T1, typename op_type> inline Mat& operator/=(const Op<T1, op_type>& X);
338350

351+
template<typename T1, typename eop_type> inline Mat(const eOp<T1, eop_type>& X, const arma_vec_indicator&, const uhword in_vec_state);
339352
template<typename T1, typename eop_type> inline Mat(const eOp<T1, eop_type>& X);
340353
template<typename T1, typename eop_type> inline Mat& operator= (const eOp<T1, eop_type>& X);
341354
template<typename T1, typename eop_type> inline Mat& operator+=(const eOp<T1, eop_type>& X);
@@ -344,6 +357,7 @@ class Mat : public Base< eT, Mat<eT> >
344357
template<typename T1, typename eop_type> inline Mat& operator%=(const eOp<T1, eop_type>& X);
345358
template<typename T1, typename eop_type> inline Mat& operator/=(const eOp<T1, eop_type>& X);
346359

360+
template<typename T1, typename op_type> inline Mat(const mtOp<eT, T1, op_type>& X, const arma_vec_indicator&, const uhword in_vec_state);
347361
template<typename T1, typename op_type> inline Mat(const mtOp<eT, T1, op_type>& X);
348362
template<typename T1, typename op_type> inline Mat& operator= (const mtOp<eT, T1, op_type>& X);
349363
template<typename T1, typename op_type> inline Mat& operator+=(const mtOp<eT, T1, op_type>& X);
@@ -352,6 +366,7 @@ class Mat : public Base< eT, Mat<eT> >
352366
template<typename T1, typename op_type> inline Mat& operator%=(const mtOp<eT, T1, op_type>& X);
353367
template<typename T1, typename op_type> inline Mat& operator/=(const mtOp<eT, T1, op_type>& X);
354368

369+
template<typename T1, typename op_type> inline Mat(const CubeToMatOp<T1, op_type>& X, const arma_vec_indicator&, const uhword in_vec_state);
355370
template<typename T1, typename op_type> inline Mat(const CubeToMatOp<T1, op_type>& X);
356371
template<typename T1, typename op_type> inline Mat& operator= (const CubeToMatOp<T1, op_type>& X);
357372
template<typename T1, typename op_type> inline Mat& operator+=(const CubeToMatOp<T1, op_type>& X);
@@ -360,6 +375,7 @@ class Mat : public Base< eT, Mat<eT> >
360375
template<typename T1, typename op_type> inline Mat& operator%=(const CubeToMatOp<T1, op_type>& X);
361376
template<typename T1, typename op_type> inline Mat& operator/=(const CubeToMatOp<T1, op_type>& X);
362377

378+
template<typename T1, typename op_type> inline Mat(const SpToDOp<T1, op_type>& X, const arma_vec_indicator&, const uhword in_vec_state);
363379
template<typename T1, typename op_type> inline Mat(const SpToDOp<T1, op_type>& X);
364380
template<typename T1, typename op_type> inline Mat& operator= (const SpToDOp<T1, op_type>& X);
365381
template<typename T1, typename op_type> inline Mat& operator+=(const SpToDOp<T1, op_type>& X);
@@ -368,6 +384,7 @@ class Mat : public Base< eT, Mat<eT> >
368384
template<typename T1, typename op_type> inline Mat& operator%=(const SpToDOp<T1, op_type>& X);
369385
template<typename T1, typename op_type> inline Mat& operator/=(const SpToDOp<T1, op_type>& X);
370386

387+
template<typename T1, typename op_type> inline explicit Mat(const mtSpReduceOp<eT, T1, op_type>& X, const arma_vec_indicator&, const uhword in_vec_state);
371388
template<typename T1, typename op_type> inline explicit Mat(const mtSpReduceOp<eT, T1, op_type>& X);
372389
template<typename T1, typename op_type> inline Mat& operator= (const mtSpReduceOp<eT, T1, op_type>& X);
373390
template<typename T1, typename op_type> inline Mat& operator+=(const mtSpReduceOp<eT, T1, op_type>& X);
@@ -376,6 +393,7 @@ class Mat : public Base< eT, Mat<eT> >
376393
template<typename T1, typename op_type> inline Mat& operator%=(const mtSpReduceOp<eT, T1, op_type>& X);
377394
template<typename T1, typename op_type> inline Mat& operator/=(const mtSpReduceOp<eT, T1, op_type>& X);
378395

396+
template<typename T1, typename T2, typename glue_type> inline Mat(const Glue<T1, T2, glue_type>& X, const arma_vec_indicator&, const uhword in_vec_state);
379397
template<typename T1, typename T2, typename glue_type> inline Mat(const Glue<T1, T2, glue_type>& X);
380398
template<typename T1, typename T2, typename glue_type> inline Mat& operator= (const Glue<T1, T2, glue_type>& X);
381399
template<typename T1, typename T2, typename glue_type> inline Mat& operator+=(const Glue<T1, T2, glue_type>& X);
@@ -387,6 +405,7 @@ class Mat : public Base< eT, Mat<eT> >
387405
template<typename T1, typename T2> inline Mat& operator+=(const Glue<T1, T2, glue_times>& X);
388406
template<typename T1, typename T2> inline Mat& operator-=(const Glue<T1, T2, glue_times>& X);
389407

408+
template<typename T1, typename T2, typename eglue_type> inline Mat(const eGlue<T1, T2, eglue_type>& X, const arma_vec_indicator&, const uhword in_vec_state);
390409
template<typename T1, typename T2, typename eglue_type> inline Mat(const eGlue<T1, T2, eglue_type>& X);
391410
template<typename T1, typename T2, typename eglue_type> inline Mat& operator= (const eGlue<T1, T2, eglue_type>& X);
392411
template<typename T1, typename T2, typename eglue_type> inline Mat& operator+=(const eGlue<T1, T2, eglue_type>& X);
@@ -395,6 +414,7 @@ class Mat : public Base< eT, Mat<eT> >
395414
template<typename T1, typename T2, typename eglue_type> inline Mat& operator%=(const eGlue<T1, T2, eglue_type>& X);
396415
template<typename T1, typename T2, typename eglue_type> inline Mat& operator/=(const eGlue<T1, T2, eglue_type>& X);
397416

417+
template<typename T1, typename T2, typename glue_type> inline Mat(const mtGlue<eT, T1, T2, glue_type>& X, const arma_vec_indicator&, const uhword in_vec_state);
398418
template<typename T1, typename T2, typename glue_type> inline Mat(const mtGlue<eT, T1, T2, glue_type>& X);
399419
template<typename T1, typename T2, typename glue_type> inline Mat& operator= (const mtGlue<eT, T1, T2, glue_type>& X);
400420
template<typename T1, typename T2, typename glue_type> inline Mat& operator+=(const mtGlue<eT, T1, T2, glue_type>& X);
@@ -403,6 +423,7 @@ class Mat : public Base< eT, Mat<eT> >
403423
template<typename T1, typename T2, typename glue_type> inline Mat& operator%=(const mtGlue<eT, T1, T2, glue_type>& X);
404424
template<typename T1, typename T2, typename glue_type> inline Mat& operator/=(const mtGlue<eT, T1, T2, glue_type>& X);
405425

426+
template<typename T1, typename T2, typename glue_type> inline Mat(const SpToDGlue<T1, T2, glue_type>& X, const arma_vec_indicator&, const uhword in_vec_state);
406427
template<typename T1, typename T2, typename glue_type> inline Mat(const SpToDGlue<T1, T2, glue_type>& X);
407428
template<typename T1, typename T2, typename glue_type> inline Mat& operator= (const SpToDGlue<T1, T2, glue_type>& X);
408429
template<typename T1, typename T2, typename glue_type> inline Mat& operator+=(const SpToDGlue<T1, T2, glue_type>& X);
@@ -958,4 +979,8 @@ class Mat_aux
958979

959980

960981

982+
template<typename eT> class Mat_noalias : public Mat<eT> {};
983+
984+
985+
961986
//! @}

0 commit comments

Comments
 (0)