35 #ifndef _BLAZE_MATH_ADAPTORS_UPPERMATRIX_H_
36 #define _BLAZE_MATH_ADAPTORS_UPPERMATRIX_H_
98 template<
typename MT,
bool SO,
bool DF >
99 inline void reset( UpperMatrix<MT,SO,DF>& m );
101 template<
typename MT,
bool SO,
bool DF >
102 inline void reset( UpperMatrix<MT,SO,DF>& m,
size_t i );
104 template<
typename MT,
bool SO,
bool DF >
105 inline void clear( UpperMatrix<MT,SO,DF>& m );
107 template<
typename MT,
bool SO,
bool DF >
108 inline bool isDefault(
const UpperMatrix<MT,SO,DF>& m );
110 template<
typename MT,
bool SO,
bool DF >
111 inline bool isIntact(
const UpperMatrix<MT,SO,DF>& m );
113 template<
typename MT,
bool SO,
bool DF >
114 inline void swap( UpperMatrix<MT,SO,DF>& a, UpperMatrix<MT,SO,DF>& b ) ;
126 template<
typename MT
149 template<
typename MT
166 template<
typename MT
197 template<
typename MT
228 template<
typename MT
247 template<
typename MT
273 template<
typename MT
275 inline void invert2x2( UpperMatrix<MT,SO,true>& m )
284 typename DerestrictTrait<MT>::Type A( derestrict( m ) );
286 const ET
det( A(0,0) * A(1,1) );
292 const ET idet( ET(1) /
det );
293 const ET a11( A(0,0) * idet );
295 A(0,0) = A(1,1) * idet;
296 A(0,1) = -A(0,1) * idet;
321 template<
typename MT
323 inline void invert3x3( UpperMatrix<MT,SO,true>& m )
332 const StaticMatrix<ET,3UL,3UL,SO> A( m );
333 typename DerestrictTrait<MT>::Type B( derestrict( m ) );
335 const ET tmp( A(1,1)*A(2,2) );
336 const ET
det( A(0,0)*tmp );
343 B(0,1) = - A(0,1)*A(2,2);
344 B(1,1) = A(0,0)*A(2,2);
345 B(0,2) = A(0,1)*A(1,2) - A(0,2)*A(1,1);
346 B(1,2) = - A(0,0)*A(1,2);
347 B(2,2) = A(0,0)*A(1,1);
373 template<
typename MT
375 inline void invert4x4( UpperMatrix<MT,SO,true>& m )
384 const StaticMatrix<ET,4UL,4UL,SO> A( m );
385 typename DerestrictTrait<MT>::Type B( derestrict( m ) );
387 ET tmp1( A(2,2)*A(3,3) );
388 ET tmp2( A(0,1)*A(1,2) - A(0,2)*A(1,1) );
389 ET tmp3( A(0,0)*A(1,2) );
390 ET tmp4( A(0,0)*A(1,1) );
392 const ET
det( A(0,0)*A(1,1)*tmp1 );
398 B(0,0) = A(1,1)*tmp1;
399 B(0,1) = - A(0,1)*tmp1;
400 B(1,1) = A(0,0)*tmp1;
401 B(0,2) = A(3,3)*tmp2;
402 B(1,2) = - A(3,3)*tmp3;
403 B(2,2) = A(3,3)*tmp4;
404 B(0,3) = A(2,2)*( A(0,1)*A(1,3) - A(0,3)*A(1,1) ) - A(2,3)*tmp2;
405 B(1,3) = A(2,3)*tmp3 - A(2,2)*A(0,0)*A(1,3);
406 B(2,3) = - A(2,3)*tmp4;
407 B(3,3) = A(2,2)*tmp4;
433 template<
typename MT
435 inline void invert5x5( UpperMatrix<MT,SO,true>& m )
444 const StaticMatrix<ET,5UL,5UL,SO> A( m );
445 typename DerestrictTrait<MT>::Type B( derestrict( m ) );
447 const ET tmp1( A(3,3)*A(4,4) );
448 const ET tmp2( A(0,1)*A(1,2) - A(0,2)*A(1,1) );
449 const ET tmp3( A(0,0)*A(1,2) );
450 const ET tmp4( A(0,0)*A(1,1) );
452 const ET tmp5 ( A(2,2)*tmp1 );
453 const ET tmp6 ( A(1,2)*tmp1 );
454 const ET tmp7 ( A(1,1)*tmp1 );
455 const ET tmp8 ( A(2,3)*tmp2 - A(2,2)*( A(0,1)*A(1,3) - A(0,3)*A(1,1) ) );
456 const ET tmp9 ( A(2,3)*tmp3 - A(2,2)*A(0,0)*A(1,3) );
457 const ET tmp10( A(2,3)*tmp4 );
458 const ET tmp11( A(2,2)*tmp4 );
460 B(0,0) = A(1,1)*tmp5;
461 B(0,1) = - A(0,1)*tmp5;
462 B(1,1) = A(0,0)*tmp5;
463 B(0,2) = A(0,1)*tmp6 - A(0,2)*tmp7;
464 B(1,2) = - A(0,0)*tmp6;
465 B(2,2) = A(0,0)*tmp7;
466 B(0,3) = - A(4,4)*tmp8;
467 B(1,3) = A(4,4)*tmp9;
468 B(2,3) = - A(4,4)*tmp10;
469 B(3,3) = A(4,4)*tmp11;
470 B(0,4) = A(3,4)*tmp8 - A(3,3)*( A(2,4)*tmp2 - A(2,2)*( A(0,1)*A(1,4) - A(0,4)*A(1,1) ) );
471 B(1,4) = A(3,3)*( A(2,4)*tmp3 - A(2,2)*A(0,0)*A(1,4) ) - A(3,4)*tmp9;
472 B(2,4) = A(3,4)*tmp10 - A(3,3)*A(2,4)*tmp4;
473 B(3,4) = - A(3,4)*tmp11;
474 B(4,4) = A(3,3)*tmp11;
476 const ET
det( A(0,0) * B(0,0) );
506 template<
typename MT
508 inline void invert6x6( UpperMatrix<MT,SO,true>& m )
517 const StaticMatrix<ET,6UL,6UL,SO> A( m );
518 typename DerestrictTrait<MT>::Type B( derestrict( m ) );
520 const ET tmp1( A(0,1)*A(1,2) - A(0,2)*A(1,1) );
521 const ET tmp2( A(0,0)*A(1,2) );
522 const ET tmp3( A(0,0)*A(1,1) );
524 const ET tmp4( A(3,3)*A(4,4)*A(5,5) );
525 const ET tmp5( A(2,3)*tmp1 - A(2,2)*( A(0,1)*A(1,3) - A(0,3)*A(1,1) ) );
526 const ET tmp6( A(2,3)*tmp2 - A(0,0)*A(1,3)*A(2,2) );
527 const ET tmp7( A(2,3)*tmp3 );
528 const ET tmp8( A(2,2)*tmp3 );
530 const ET tmp9 ( A(2,2)*tmp4 );
531 const ET tmp10( A(1,2)*tmp4 );
532 const ET tmp11( A(1,1)*tmp4 );
533 const ET tmp12( A(3,3)*( A(2,4)*tmp1 - A(2,2)*( A(0,1)*A(1,4) - A(0,4)*A(1,1) ) ) - A(3,4)*tmp5 );
534 const ET tmp13( A(3,3)*( A(2,4)*tmp2 - A(0,0)*A(1,4)*A(2,2) ) - A(3,4)*tmp6 );
535 const ET tmp14( A(3,3)*A(2,4)*tmp3 - A(3,4)*tmp7 );
536 const ET tmp15( - A(3,4)*tmp8 );
537 const ET tmp16( - A(3,3)*tmp8 );
539 B(0,0) = A(1,1)*tmp9;
540 B(0,1) = - A(0,1)*tmp9;
541 B(1,1) = A(0,0)*tmp9;
542 B(0,2) = A(0,1)*tmp10 - A(0,2)*tmp11;
543 B(1,2) = - A(0,0)*tmp10;
544 B(2,2) = A(0,0)*tmp11;
545 B(0,3) = - A(5,5)*A(4,4)*tmp5;
546 B(1,3) = A(5,5)*A(4,4)*tmp6;
547 B(2,3) = - A(5,5)*A(4,4)*tmp7;
548 B(3,3) = A(5,5)*A(4,4)*tmp8;
549 B(0,4) = - A(5,5)*tmp12;
550 B(1,4) = A(5,5)*tmp13;
551 B(2,4) = - A(5,5)*tmp14;
552 B(3,4) = A(5,5)*tmp15;
553 B(4,4) = - A(5,5)*tmp16;
554 B(0,5) = - A(4,4)*( A(3,3)*( A(2,5)*tmp1 - A(2,2)*( A(0,1)*A(1,5) - A(0,5)*A(1,1) ) ) - A(3,5)*tmp5 ) + A(4,5)*tmp12;
555 B(1,5) = A(4,4)*( A(3,3)*( A(2,5)*tmp2 - A(0,0)*A(1,5)*A(2,2) ) - A(3,5)*tmp6 ) - A(4,5)*tmp13;
556 B(2,5) = - A(4,4)*( A(3,3)*A(2,5)*tmp3 - A(3,5)*tmp7 ) + A(4,5)*tmp14;
557 B(3,5) = - A(4,4)*A(3,5)*tmp8 - A(4,5)*tmp15;
558 B(4,5) = A(4,5)*tmp16;
559 B(5,5) = - A(4,4)*tmp16;
561 const ET
det( A(0,0)*B(0,0) );
598 template<
typename MT
600 inline void invertByDefault( UpperMatrix<MT,SO,true>& m )
631 template<
typename MT
633 inline void invertByLU( UpperMatrix<MT,SO,true>& m )
637 typename DerestrictTrait<MT>::Type A( derestrict( ~m ) );
639 trtri( A,
'U',
'N' );
668 template<
typename MT
670 inline void invertByLDLT( UpperMatrix<MT,SO,true>& m )
701 template<
typename MT
703 inline void invertByLDLH( UpperMatrix<MT,SO,true>& m )
731 template<
typename MT
733 inline void invertByLLH( UpperMatrix<MT,SO,true>& m )
739 typename DerestrictTrait<MT>::Type A( derestrict( ~m ) );
741 for(
size_t i=0UL; i<A.rows(); ++i )
773 template<
typename MT1,
bool SO1,
typename MT2,
typename MT3,
typename MT4,
bool SO2 >
774 inline void lu(
const UpperMatrix<MT1,SO1,true>& A, DenseMatrix<MT2,SO1>& L,
775 DenseMatrix<MT3,SO1>& U, Matrix<MT4,SO2>& P )
792 const size_t n( (~A).
rows() );
794 typename DerestrictTrait<MT2>::Type L2( derestrict( ~L ) );
804 for(
size_t i=0UL; i<n; ++i ) {
829 template<
typename MT
833 inline bool tryAssign(
const UpperMatrix<MT,SO,DF>& lhs,
834 const DenseVector<VT,false>& rhs,
size_t row,
size_t column )
844 const size_t ibegin( ( column < row )?( 0UL ):( column - row + 1UL ) );
846 for(
size_t i=ibegin; i<(~rhs).
size(); ++i ) {
873 template<
typename MT
877 inline bool tryAssign(
const UpperMatrix<MT,SO,DF>& lhs,
878 const DenseVector<VT,true>& rhs,
size_t row,
size_t column )
891 const size_t iend(
min( row - column, (~rhs).
size() ) );
893 for(
size_t i=0UL; i<iend; ++i ) {
920 template<
typename MT
924 inline bool tryAssign(
const UpperMatrix<MT,SO,DF>& lhs,
925 const SparseVector<VT,false>& rhs,
size_t row,
size_t column )
937 const RhsIterator last( (~rhs).
end() );
938 RhsIterator element( (~rhs).lowerBound( ( column < row )?( 0UL ):( column - row + 1UL ) ) );
940 for( ; element!=last; ++element ) {
967 template<
typename MT
971 inline bool tryAssign(
const UpperMatrix<MT,SO,DF>& lhs,
972 const SparseVector<VT,true>& rhs,
size_t row,
size_t column )
987 const RhsIterator last( (~rhs).lowerBound( row - column ) );
989 for( RhsIterator element=(~rhs).
begin(); element!=last; ++element ) {
1016 template<
typename MT1
1020 inline bool tryAssign(
const UpperMatrix<MT1,SO,DF>& lhs,
1021 const DenseMatrix<MT2,false>& rhs,
size_t row,
size_t column )
1032 const size_t M( (~rhs).
rows() );
1033 const size_t N( (~rhs).
columns() );
1035 if( column + 1UL >= row + M )
1038 const size_t ibegin( ( column < row )?( 0UL ):( column - row + 1UL ) );
1040 for(
size_t i=ibegin; i<M; ++i )
1042 const size_t jend(
min( row + i - column, N ) );
1044 for(
size_t j=0UL; j<jend; ++j ) {
1072 template<
typename MT1
1076 inline bool tryAssign(
const UpperMatrix<MT1,SO,DF>& lhs,
1077 const DenseMatrix<MT2,true>& rhs,
size_t row,
size_t column )
1088 const size_t M( (~rhs).
rows() );
1089 const size_t N( (~rhs).
columns() );
1091 if( column + 1UL >= row + M )
1094 const size_t jend(
min( row + M - column - 1UL, N ) );
1096 for(
size_t j=0UL; j<jend; ++j )
1098 const bool containsDiagonal( column + j >= row );
1099 const size_t ibegin( ( containsDiagonal )?( column + j - row + 1UL ):( 0UL ) );
1101 for(
size_t i=ibegin; i<M; ++i ) {
1129 template<
typename MT1
1133 inline bool tryAssign(
const UpperMatrix<MT1,SO,DF>& lhs,
1134 const SparseMatrix<MT2,false>& rhs,
size_t row,
size_t column )
1147 const size_t M( (~rhs).
rows() );
1148 const size_t N( (~rhs).
columns() );
1150 if( column + 1UL >= row + M )
1153 const size_t ibegin( ( column < row )?( 0UL ):( column - row + 1UL ) );
1155 for(
size_t i=ibegin; i<M; ++i )
1157 const size_t index( row + i - column );
1158 const RhsIterator last( (~rhs).lowerBound( i,
min( index, N ) ) );
1160 for( RhsIterator element=(~rhs).
begin(i); element!=last; ++element ) {
1188 template<
typename MT1
1192 inline bool tryAssign(
const UpperMatrix<MT1,SO,DF>& lhs,
1193 const SparseMatrix<MT2,true>& rhs,
size_t row,
size_t column )
1206 const size_t M( (~rhs).
rows() );
1207 const size_t N( (~rhs).
columns() );
1209 if( column + 1UL >= row + M )
1212 const size_t jend(
min( row + M - column - 1UL, N ) );
1214 for(
size_t j=0UL; j<jend; ++j )
1216 const bool containsDiagonal( column + j >= row );
1217 const size_t index( ( containsDiagonal )?( column + j - row + 1UL ):( 0UL ) );
1219 const RhsIterator last( (~rhs).
end(j) );
1220 RhsIterator element( (~rhs).lowerBound( index, j ) );
1222 for( ; element!=last; ++element ) {
1250 template<
typename MT
1255 inline bool tryAddAssign(
const UpperMatrix<MT,SO,DF>& lhs,
1256 const Vector<VT,TF>& rhs,
size_t row,
size_t column )
1258 return tryAssign( lhs, ~rhs, row, column );
1280 template<
typename MT1
1285 inline bool tryAddAssign(
const UpperMatrix<MT1,SO1,DF>& lhs,
1286 const Matrix<MT2,SO2>& rhs,
size_t row,
size_t column )
1288 return tryAssign( lhs, ~rhs, row, column );
1310 template<
typename MT
1315 inline bool trySubAssign(
const UpperMatrix<MT,SO,DF>& lhs,
1316 const Vector<VT,TF>& rhs,
size_t row,
size_t column )
1318 return tryAssign( lhs, ~rhs, row, column );
1340 template<
typename MT1
1345 inline bool trySubAssign(
const UpperMatrix<MT1,SO1,DF>& lhs,
1346 const Matrix<MT2,SO2>& rhs,
size_t row,
size_t column )
1348 return tryAssign( lhs, ~rhs, row, column );
1368 template<
typename MT
1371 inline MT& derestrict( UpperMatrix<MT,SO,DF>& m )
1389 template<
typename MT,
bool SO,
bool DF >
1390 struct Rows< UpperMatrix<MT,SO,DF> > :
public Rows<MT>
1406 template<
typename MT,
bool SO,
bool DF >
1407 struct Columns< UpperMatrix<MT,SO,DF> > :
public Columns<MT>
1423 template<
typename MT,
bool SO,
bool DF >
1424 struct IsSquare< UpperMatrix<MT,SO,DF> > :
public IsTrue<true>
1440 template<
typename MT,
bool SO,
bool DF >
1441 struct IsUpper< UpperMatrix<MT,SO,DF> > :
public IsTrue<true>
1457 template<
typename MT,
bool SO,
bool DF >
1458 struct IsAdaptor< UpperMatrix<MT,SO,DF> > :
public IsTrue<true>
1474 template<
typename MT,
bool SO,
bool DF >
1475 struct IsRestricted< UpperMatrix<MT,SO,DF> > :
public IsTrue<true>
1491 template<
typename MT,
bool SO >
1492 struct HasConstDataAccess< UpperMatrix<MT,SO,true> > :
public IsTrue<true>
1508 template<
typename MT,
bool SO,
bool DF >
1509 struct IsAligned< UpperMatrix<MT,SO,DF> > :
public IsTrue< IsAligned<MT>::value >
1525 template<
typename MT,
bool SO,
bool DF >
1526 struct IsPadded< UpperMatrix<MT,SO,DF> > :
public IsTrue< IsPadded<MT>::value >
1542 template<
typename MT,
bool SO,
bool DF >
1543 struct IsResizable< UpperMatrix<MT,SO,DF> > :
public IsTrue< IsResizable<MT>::value >
1559 template<
typename MT,
bool SO,
bool DF >
1560 struct RemoveAdaptor< UpperMatrix<MT,SO,DF> >
1578 template<
typename MT,
bool SO,
bool DF >
1579 struct DerestrictTrait< UpperMatrix<MT,SO,DF> >
1597 template<
typename MT,
bool SO1,
bool DF,
typename T,
size_t M,
size_t N,
bool SO2 >
1598 struct AddTrait< UpperMatrix<MT,SO1,DF>, StaticMatrix<T,M,N,SO2> >
1600 typedef typename AddTrait< MT, StaticMatrix<T,M,N,SO2> >::Type Type;
1603 template<
typename T,
size_t M,
size_t N,
bool SO1,
typename MT,
bool SO2,
bool DF >
1604 struct AddTrait< StaticMatrix<T,M,N,SO1>, UpperMatrix<MT,SO2,DF> >
1606 typedef typename AddTrait< StaticMatrix<T,M,N,SO1>, MT >::Type Type;
1609 template<
typename MT,
bool SO1,
bool DF,
typename T,
size_t M,
size_t N,
bool SO2 >
1610 struct AddTrait< UpperMatrix<MT,SO1,DF>, HybridMatrix<T,M,N,SO2> >
1612 typedef typename AddTrait< MT, HybridMatrix<T,M,N,SO2> >::Type Type;
1615 template<
typename T,
size_t M,
size_t N,
bool SO1,
typename MT,
bool SO2,
bool DF >
1616 struct AddTrait< HybridMatrix<T,M,N,SO1>, UpperMatrix<MT,SO2,DF> >
1618 typedef typename AddTrait< HybridMatrix<T,M,N,SO1>, MT >::Type Type;
1621 template<
typename MT,
bool SO1,
bool DF,
typename T,
bool SO2 >
1622 struct AddTrait< UpperMatrix<MT,SO1,DF>, DynamicMatrix<T,SO2> >
1624 typedef typename AddTrait< MT, DynamicMatrix<T,SO2> >::Type Type;
1627 template<
typename T,
bool SO1,
typename MT,
bool SO2,
bool DF >
1628 struct AddTrait< DynamicMatrix<T,SO1>, UpperMatrix<MT,SO2,DF> >
1630 typedef typename AddTrait< DynamicMatrix<T,SO1>, MT >::Type Type;
1633 template<
typename MT,
bool SO1,
bool DF,
typename T,
bool AF,
bool PF,
bool SO2 >
1634 struct AddTrait< UpperMatrix<MT,SO1,DF>, CustomMatrix<T,AF,PF,SO2> >
1636 typedef typename AddTrait< MT, CustomMatrix<T,AF,PF,SO2> >::Type Type;
1639 template<
typename T,
bool AF,
bool PF,
bool SO1,
typename MT,
bool SO2,
bool DF >
1640 struct AddTrait< CustomMatrix<T,AF,PF,SO1>, UpperMatrix<MT,SO2,DF> >
1642 typedef typename AddTrait< CustomMatrix<T,AF,PF,SO1>, MT >::Type Type;
1645 template<
typename MT,
bool SO1,
bool DF,
typename T,
bool SO2 >
1646 struct AddTrait< UpperMatrix<MT,SO1,DF>, CompressedMatrix<T,SO2> >
1648 typedef typename AddTrait< MT, CompressedMatrix<T,SO2> >::Type Type;
1651 template<
typename T,
bool SO1,
typename MT,
bool SO2,
bool DF >
1652 struct AddTrait< CompressedMatrix<T,SO1>, UpperMatrix<MT,SO2,DF> >
1654 typedef typename AddTrait< CompressedMatrix<T,SO1>, MT >::Type Type;
1657 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2,
bool NF >
1658 struct AddTrait< UpperMatrix<MT1,SO1,DF1>, SymmetricMatrix<MT2,SO2,DF2,NF> >
1660 typedef typename AddTrait<MT1,MT2>::Type Type;
1663 template<
typename MT1,
bool SO1,
bool DF1,
bool NF,
typename MT2,
bool SO2,
bool DF2 >
1664 struct AddTrait< SymmetricMatrix<MT1,SO1,DF1,NF>, UpperMatrix<MT2,SO2,DF2> >
1666 typedef typename AddTrait<MT1,MT2>::Type Type;
1669 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1670 struct AddTrait< UpperMatrix<MT1,SO1,DF1>, HermitianMatrix<MT2,SO2,DF2> >
1672 typedef typename AddTrait<MT1,MT2>::Type Type;
1675 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1676 struct AddTrait< HermitianMatrix<MT1,SO1,DF1>, UpperMatrix<MT2,SO2,DF2> >
1678 typedef typename AddTrait<MT1,MT2>::Type Type;
1681 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1682 struct AddTrait< UpperMatrix<MT1,SO1,DF1>, LowerMatrix<MT2,SO2,DF2> >
1684 typedef typename AddTrait<MT1,MT2>::Type Type;
1687 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1688 struct AddTrait< LowerMatrix<MT1,SO1,DF1>, UpperMatrix<MT2,SO2,DF2> >
1690 typedef typename AddTrait<MT1,MT2>::Type Type;
1693 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1694 struct AddTrait< UpperMatrix<MT1,SO1,DF1>, UniLowerMatrix<MT2,SO2,DF2> >
1696 typedef typename AddTrait<MT1,MT2>::Type Type;
1699 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1700 struct AddTrait< UniLowerMatrix<MT1,SO1,DF1>, UpperMatrix<MT2,SO2,DF2> >
1702 typedef typename AddTrait<MT1,MT2>::Type Type;
1705 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1706 struct AddTrait< UpperMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1708 typedef typename AddTrait<MT1,MT2>::Type Type;
1711 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1712 struct AddTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, UpperMatrix<MT2,SO2,DF2> >
1714 typedef typename AddTrait<MT1,MT2>::Type Type;
1717 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1718 struct AddTrait< UpperMatrix<MT1,SO1,DF1>, UpperMatrix<MT2,SO2,DF2> >
1720 typedef UpperMatrix< typename AddTrait<MT1,MT2>::Type > Type;
1736 template<
typename MT,
bool SO1,
bool DF,
typename T,
size_t M,
size_t N,
bool SO2 >
1737 struct SubTrait< UpperMatrix<MT,SO1,DF>, StaticMatrix<T,M,N,SO2> >
1739 typedef typename SubTrait< MT, StaticMatrix<T,M,N,SO2> >::Type Type;
1742 template<
typename T,
size_t M,
size_t N,
bool SO1,
typename MT,
bool SO2,
bool DF >
1743 struct SubTrait< StaticMatrix<T,M,N,SO1>, UpperMatrix<MT,SO2,DF> >
1745 typedef typename SubTrait< StaticMatrix<T,M,N,SO1>, MT >::Type Type;
1748 template<
typename MT,
bool SO1,
bool DF,
typename T,
size_t M,
size_t N,
bool SO2 >
1749 struct SubTrait< UpperMatrix<MT,SO1,DF>, HybridMatrix<T,M,N,SO2> >
1751 typedef typename SubTrait< MT, HybridMatrix<T,M,N,SO2> >::Type Type;
1754 template<
typename T,
size_t M,
size_t N,
bool SO1,
typename MT,
bool SO2,
bool DF >
1755 struct SubTrait< HybridMatrix<T,M,N,SO1>, UpperMatrix<MT,SO2,DF> >
1757 typedef typename SubTrait< HybridMatrix<T,M,N,SO1>, MT >::Type Type;
1760 template<
typename MT,
bool SO1,
bool DF,
typename T,
bool SO2 >
1761 struct SubTrait< UpperMatrix<MT,SO1,DF>, DynamicMatrix<T,SO2> >
1763 typedef typename SubTrait< MT, DynamicMatrix<T,SO2> >::Type Type;
1766 template<
typename T,
bool SO1,
typename MT,
bool SO2,
bool DF >
1767 struct SubTrait< DynamicMatrix<T,SO1>, UpperMatrix<MT,SO2,DF> >
1769 typedef typename SubTrait< DynamicMatrix<T,SO1>, MT >::Type Type;
1772 template<
typename MT,
bool SO1,
bool DF,
typename T,
bool AF,
bool PF,
bool SO2 >
1773 struct SubTrait< UpperMatrix<MT,SO1,DF>, CustomMatrix<T,AF,PF,SO2> >
1775 typedef typename SubTrait< MT, CustomMatrix<T,AF,PF,SO2> >::Type Type;
1778 template<
typename T,
bool AF,
bool PF,
bool SO1,
typename MT,
bool SO2,
bool DF >
1779 struct SubTrait< CustomMatrix<T,AF,PF,SO1>, UpperMatrix<MT,SO2,DF> >
1781 typedef typename SubTrait< CustomMatrix<T,AF,PF,SO1>, MT >::Type Type;
1784 template<
typename MT,
bool SO1,
bool DF,
typename T,
bool SO2 >
1785 struct SubTrait< UpperMatrix<MT,SO1,DF>, CompressedMatrix<T,SO2> >
1787 typedef typename SubTrait< MT, CompressedMatrix<T,SO2> >::Type Type;
1790 template<
typename T,
bool SO1,
typename MT,
bool SO2,
bool DF >
1791 struct SubTrait< CompressedMatrix<T,SO1>, UpperMatrix<MT,SO2,DF> >
1793 typedef typename SubTrait< CompressedMatrix<T,SO1>, MT >::Type Type;
1796 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2,
bool NF >
1797 struct SubTrait< UpperMatrix<MT1,SO1,DF1>, SymmetricMatrix<MT2,SO2,DF2,NF> >
1799 typedef typename SubTrait<MT1,MT2>::Type Type;
1802 template<
typename MT1,
bool SO1,
bool DF1,
bool NF,
typename MT2,
bool SO2,
bool DF2 >
1803 struct SubTrait< SymmetricMatrix<MT1,SO1,DF1,NF>, UpperMatrix<MT2,SO2,DF2> >
1805 typedef typename SubTrait<MT1,MT2>::Type Type;
1808 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1809 struct SubTrait< UpperMatrix<MT1,SO1,DF1>, HermitianMatrix<MT2,SO2,DF2> >
1811 typedef typename SubTrait<MT1,MT2>::Type Type;
1814 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1815 struct SubTrait< HermitianMatrix<MT1,SO1,DF1>, UpperMatrix<MT2,SO2,DF2> >
1817 typedef typename SubTrait<MT1,MT2>::Type Type;
1820 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1821 struct SubTrait< UpperMatrix<MT1,SO1,DF1>, LowerMatrix<MT2,SO2,DF2> >
1823 typedef typename SubTrait<MT1,MT2>::Type Type;
1826 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1827 struct SubTrait< LowerMatrix<MT1,SO1,DF1>, UpperMatrix<MT2,SO2,DF2> >
1829 typedef typename SubTrait<MT1,MT2>::Type Type;
1832 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1833 struct SubTrait< UpperMatrix<MT1,SO1,DF1>, UniLowerMatrix<MT2,SO2,DF2> >
1835 typedef typename SubTrait<MT1,MT2>::Type Type;
1838 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1839 struct SubTrait< UniLowerMatrix<MT1,SO1,DF1>, UpperMatrix<MT2,SO2,DF2> >
1841 typedef typename SubTrait<MT1,MT2>::Type Type;
1844 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1845 struct SubTrait< UpperMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1847 typedef typename SubTrait<MT1,MT2>::Type Type;
1850 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1851 struct SubTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, UpperMatrix<MT2,SO2,DF2> >
1853 typedef typename SubTrait<MT1,MT2>::Type Type;
1856 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1857 struct SubTrait< UpperMatrix<MT1,SO1,DF1>, UpperMatrix<MT2,SO2,DF2> >
1859 typedef UpperMatrix< typename SubTrait<MT1,MT2>::Type > Type;
1875 template<
typename MT,
bool SO,
bool DF,
typename T >
1876 struct MultTrait< UpperMatrix<MT,SO,DF>, T, typename EnableIf< IsNumeric<T> >::Type >
1878 typedef UpperMatrix< typename MultTrait<MT,T>::Type > Type;
1881 template<
typename T,
typename MT,
bool SO,
bool DF >
1882 struct MultTrait< T, UpperMatrix<MT,SO,DF>, typename EnableIf< IsNumeric<T> >::Type >
1884 typedef UpperMatrix< typename MultTrait<T,MT>::Type > Type;
1887 template<
typename MT,
bool SO,
bool DF,
typename T,
size_t N >
1888 struct MultTrait< UpperMatrix<MT,SO,DF>, StaticVector<T,N,false> >
1890 typedef typename MultTrait< MT, StaticVector<T,N,false> >::Type Type;
1893 template<
typename T,
size_t N,
typename MT,
bool SO,
bool DF >
1894 struct MultTrait< StaticVector<T,N,true>, UpperMatrix<MT,SO,DF> >
1896 typedef typename MultTrait< StaticVector<T,N,true>, MT >::Type Type;
1899 template<
typename MT,
bool SO,
bool DF,
typename T,
size_t N >
1900 struct MultTrait< UpperMatrix<MT,SO,DF>, HybridVector<T,N,false> >
1902 typedef typename MultTrait< MT, HybridVector<T,N,false> >::Type Type;
1905 template<
typename T,
size_t N,
typename MT,
bool SO,
bool DF >
1906 struct MultTrait< HybridVector<T,N,true>, UpperMatrix<MT,SO,DF> >
1908 typedef typename MultTrait< HybridVector<T,N,true>, MT >::Type Type;
1911 template<
typename MT,
bool SO,
bool DF,
typename T >
1912 struct MultTrait< UpperMatrix<MT,SO,DF>, DynamicVector<T,false> >
1914 typedef typename MultTrait< MT, DynamicVector<T,false> >::Type Type;
1917 template<
typename T,
typename MT,
bool SO,
bool DF >
1918 struct MultTrait< DynamicVector<T,true>, UpperMatrix<MT,SO,DF> >
1920 typedef typename MultTrait< DynamicVector<T,true>, MT >::Type Type;
1923 template<
typename MT,
bool SO,
bool DF,
typename T,
bool AF,
bool PF >
1924 struct MultTrait< UpperMatrix<MT,SO,DF>, CustomVector<T,AF,PF,false> >
1926 typedef typename MultTrait< MT, CustomVector<T,AF,PF,false> >::Type Type;
1929 template<
typename T,
bool AF,
bool PF,
typename MT,
bool SO,
bool DF >
1930 struct MultTrait< CustomVector<T,AF,PF,true>, UpperMatrix<MT,SO,DF> >
1932 typedef typename MultTrait< CustomVector<T,AF,PF,true>, MT >::Type Type;
1935 template<
typename MT,
bool SO,
bool DF,
typename T >
1936 struct MultTrait< UpperMatrix<MT,SO,DF>, CompressedVector<T,false> >
1938 typedef typename MultTrait< MT, CompressedVector<T,false> >::Type Type;
1941 template<
typename T,
typename MT,
bool SO,
bool DF >
1942 struct MultTrait< CompressedVector<T,true>, UpperMatrix<MT,SO,DF> >
1944 typedef typename MultTrait< CompressedVector<T,true>, MT >::Type Type;
1947 template<
typename MT,
bool SO1,
bool DF,
typename T,
size_t M,
size_t N,
bool SO2 >
1948 struct MultTrait< UpperMatrix<MT,SO1,DF>, StaticMatrix<T,M,N,SO2> >
1950 typedef typename MultTrait< MT, StaticMatrix<T,M,N,SO2> >::Type Type;
1953 template<
typename T,
size_t M,
size_t N,
bool SO1,
typename MT,
bool SO2,
bool DF >
1954 struct MultTrait< StaticMatrix<T,M,N,SO1>, UpperMatrix<MT,SO2,DF> >
1956 typedef typename MultTrait< StaticMatrix<T,M,N,SO1>, MT >::Type Type;
1959 template<
typename MT,
bool SO1,
bool DF,
typename T,
size_t M,
size_t N,
bool SO2 >
1960 struct MultTrait< UpperMatrix<MT,SO1,DF>, HybridMatrix<T,M,N,SO2> >
1962 typedef typename MultTrait< MT, HybridMatrix<T,M,N,SO2> >::Type Type;
1965 template<
typename T,
size_t M,
size_t N,
bool SO1,
typename MT,
bool SO2,
bool DF >
1966 struct MultTrait< HybridMatrix<T,M,N,SO1>, UpperMatrix<MT,SO2,DF> >
1968 typedef typename MultTrait< HybridMatrix<T,M,N,SO1>, MT >::Type Type;
1971 template<
typename MT,
bool SO1,
bool DF,
typename T,
bool SO2 >
1972 struct MultTrait< UpperMatrix<MT,SO1,DF>, DynamicMatrix<T,SO2> >
1974 typedef typename MultTrait< MT, DynamicMatrix<T,SO2> >::Type Type;
1977 template<
typename T,
bool SO1,
typename MT,
bool SO2,
bool DF >
1978 struct MultTrait< DynamicMatrix<T,SO1>, UpperMatrix<MT,SO2,DF> >
1980 typedef typename MultTrait< DynamicMatrix<T,SO1>, MT >::Type Type;
1983 template<
typename MT,
bool SO1,
bool DF,
typename T,
bool AF,
bool PF,
bool SO2 >
1984 struct MultTrait< UpperMatrix<MT,SO1,DF>, CustomMatrix<T,AF,PF,SO2> >
1986 typedef typename MultTrait< MT, CustomMatrix<T,AF,PF,SO2> >::Type Type;
1989 template<
typename T,
bool AF,
bool PF,
bool SO1,
typename MT,
bool SO2,
bool DF >
1990 struct MultTrait< CustomMatrix<T,AF,PF,SO1>, UpperMatrix<MT,SO2,DF> >
1992 typedef typename MultTrait< CustomMatrix<T,AF,PF,SO1>, MT >::Type Type;
1995 template<
typename MT,
bool SO1,
bool DF,
typename T,
bool SO2 >
1996 struct MultTrait< UpperMatrix<MT,SO1,DF>, CompressedMatrix<T,SO2> >
1998 typedef typename MultTrait< MT, CompressedMatrix<T,SO2> >::Type Type;
2001 template<
typename T,
bool SO1,
typename MT,
bool SO2,
bool DF >
2002 struct MultTrait< CompressedMatrix<T,SO1>, UpperMatrix<MT,SO2,DF> >
2004 typedef typename MultTrait< CompressedMatrix<T,SO1>, MT >::Type Type;
2007 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2,
bool NF >
2008 struct MultTrait< UpperMatrix<MT1,SO1,DF1>, SymmetricMatrix<MT2,SO2,DF2,NF> >
2010 typedef typename MultTrait<MT1,MT2>::Type Type;
2013 template<
typename MT1,
bool SO1,
bool DF1,
bool NF,
typename MT2,
bool SO2,
bool DF2 >
2014 struct MultTrait< SymmetricMatrix<MT1,SO1,DF1,NF>, UpperMatrix<MT2,SO2,DF2> >
2016 typedef typename MultTrait<MT1,MT2>::Type Type;
2019 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2020 struct MultTrait< UpperMatrix<MT1,SO1,DF1>, HermitianMatrix<MT2,SO2,DF2> >
2022 typedef typename MultTrait<MT1,MT2>::Type Type;
2025 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2026 struct MultTrait< HermitianMatrix<MT1,SO1,DF1>, UpperMatrix<MT2,SO2,DF2> >
2028 typedef typename MultTrait<MT1,MT2>::Type Type;
2031 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2032 struct MultTrait< UpperMatrix<MT1,SO1,DF1>, LowerMatrix<MT2,SO2,DF2> >
2034 typedef typename MultTrait<MT1,MT2>::Type Type;
2037 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2038 struct MultTrait< LowerMatrix<MT1,SO1,DF1>, UpperMatrix<MT2,SO2,DF2> >
2040 typedef typename MultTrait<MT1,MT2>::Type Type;
2043 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2044 struct MultTrait< UpperMatrix<MT1,SO1,DF1>, UniLowerMatrix<MT2,SO2,DF2> >
2046 typedef typename MultTrait<MT1,MT2>::Type Type;
2049 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2050 struct MultTrait< UniLowerMatrix<MT1,SO1,DF1>, UpperMatrix<MT2,SO2,DF2> >
2052 typedef typename MultTrait<MT1,MT2>::Type Type;
2055 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2056 struct MultTrait< UpperMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
2058 typedef typename MultTrait<MT1,MT2>::Type Type;
2061 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2062 struct MultTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, UpperMatrix<MT2,SO2,DF2> >
2064 typedef typename MultTrait<MT1,MT2>::Type Type;
2067 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2068 struct MultTrait< UpperMatrix<MT1,SO1,DF1>, UpperMatrix<MT2,SO2,DF2> >
2070 typedef UpperMatrix< typename MultTrait<MT1,MT2>::Type > Type;
2086 template<
typename MT,
bool SO,
bool DF,
typename T >
2087 struct DivTrait< UpperMatrix<MT,SO,DF>, T, typename EnableIf< IsNumeric<T> >::Type >
2089 typedef UpperMatrix< typename DivTrait<MT,T>::Type > Type;
2105 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2106 struct MathTrait< UpperMatrix<MT1,SO1,DF1>, UpperMatrix<MT2,SO2,DF2> >
2108 typedef UpperMatrix< typename MathTrait<MT1,MT2>::HighType > HighType;
2109 typedef UpperMatrix< typename MathTrait<MT1,MT2>::LowType > LowType;
2125 template<
typename MT,
bool SO,
bool DF >
2126 struct SubmatrixTrait< UpperMatrix<MT,SO,DF> >
2128 typedef typename SubmatrixTrait<MT>::Type Type;
2144 template<
typename MT,
bool SO,
bool DF >
2145 struct RowTrait< UpperMatrix<MT,SO,DF> >
2147 typedef typename RowTrait<MT>::Type Type;
2163 template<
typename MT,
bool SO,
bool DF >
2164 struct ColumnTrait< UpperMatrix<MT,SO,DF> >
2166 typedef typename ColumnTrait<MT>::Type Type;
#define BLAZE_THROW_INVALID_ARGUMENT(MESSAGE)
Macro for the emission of a std::invalid_argument exceptionThis macro encapsulates the default way of...
Definition: Exception.h:187
Header file for mathematical functions.
void trtri(char uplo, char diag, int n, float *A, int lda, int *info)
LAPACK kernel for the inversion of the given dense triangular single precision column-major matrix...
Definition: trtri.h:133
bool isDiagonal(const DenseMatrix< MT, SO > &dm)
Checks if the give dense matrix is diagonal.
Definition: DenseMatrix.h:1511
Header file for the Rows type trait.
Header file for the UNUSED_PARAMETER function template.
Header file for the subtraction trait.
BLAZE_ALWAYS_INLINE size_t size(const Vector< VT, TF > &vector)
Returns the current size/dimension of the vector.
Definition: Vector.h:252
Header file for the row trait.
BLAZE_ALWAYS_INLINE MT::Iterator end(Matrix< MT, SO > &matrix, size_t i)
Returns an iterator just past the last element of row/column i.
Definition: Matrix.h:250
void reset(const DiagonalProxy< MT > &proxy)
Resetting the represented element to the default initial values.
Definition: DiagonalProxy.h:507
MT::ElementType det(const DenseMatrix< MT, SO > &dm)
Computation of the determinant of the given dense square matrix.
Definition: DMatDetExpr.h:382
BLAZE_ALWAYS_INLINE size_t rows(const Matrix< MT, SO > &matrix)
Returns the current number of rows of the matrix.
Definition: Matrix.h:308
DisableIf< Or< IsComputation< MT >, IsTransExpr< MT > >, typename ColumnExprTrait< MT >::Type >::Type column(Matrix< MT, SO > &matrix, size_t index)
Creating a view on a specific column of the given matrix.
Definition: Column.h:107
void UNUSED_PARAMETER(const T1 &)
Suppression of unused parameter warnings.
Definition: Unused.h:81
#define BLAZE_CONSTRAINT_MUST_NOT_BE_UNITRIANGULAR_MATRIX_TYPE(T)
Constraint on the data type.In case the given data type T is a lower or upper unitriangular matrix ty...
Definition: UniTriangular.h:118
Header file for the invert shim.
Constraint on the data type.
bool isDefault(const DiagonalProxy< MT > &proxy)
Returns whether the represented element is in default state.
Definition: DiagonalProxy.h:547
Constraint on the data type.
Header file for the implementation of the base template of the UpperMatrix.
Header file for the IsSquare type trait.
void invert(const HermitianProxy< MT > &proxy)
In-place inversion of the represented element.
Definition: HermitianProxy.h:767
Header file for the multiplication trait.
Header file for the LAPACK triangular matrix inversion functions (trtri)
Namespace of the Blaze C++ math library.
Definition: Blaze.h:57
Header file for all forward declarations of the math module.
const Element * ConstIterator
Iterator over constant elements.
Definition: CompressedMatrix.h:2592
const MT::ElementType min(const DenseMatrix< MT, SO > &dm)
Returns the smallest element of the dense matrix.
Definition: DenseMatrix.h:1682
void lu(const DenseMatrix< MT1, SO1 > &A, DenseMatrix< MT2, SO1 > &L, DenseMatrix< MT3, SO1 > &U, Matrix< MT4, SO2 > &P)
LU decomposition of the given dense matrix.
Definition: LU.h:217
Header file for the Columns type trait.
Header file for the implementation of a fixed-size matrix.
UpperMatrix specialization for dense matrices.
Header file for the IsAligned type trait.
#define BLAZE_CONSTRAINT_MUST_NOT_BE_UPPER_MATRIX_TYPE(T)
Constraint on the data type.In case the given data type T is a upper triangular matrix type...
Definition: Upper.h:118
BLAZE_ALWAYS_INLINE MT::Iterator begin(Matrix< MT, SO > &matrix, size_t i)
Returns an iterator to the first element of row/column i.
Definition: Matrix.h:187
BLAZE_ALWAYS_INLINE void resize(Matrix< MT, SO > &matrix, size_t rows, size_t columns, bool preserve=true)
Changing the size of the matrix.
Definition: Matrix.h:532
Type ElementType
Type of the sparse matrix elements.
Definition: CompressedMatrix.h:2586
Constraint on the data type.
Header file for the RemoveAdaptor type trait.
Constraint on the data type.
Matrix adapter for upper triangular matrices.
Definition: Forward.h:55
Header file for the EnableIf class template.
void clear(const DiagonalProxy< MT > &proxy)
Clearing the represented element.
Definition: DiagonalProxy.h:527
Header file for the IsPadded type trait.
Header file for the IsAdaptor type trait.
Header file for the DerestrictTrait class template.
Constraint on the data type.
Header file for the IsNumeric type trait.
Header file for the HasConstDataAccess type trait.
DisableIf< Or< IsComputation< MT >, IsTransExpr< MT > >, typename RowExprTrait< MT >::Type >::Type row(Matrix< MT, SO > &matrix, size_t index)
Creating a view on a specific row of the given matrix.
Definition: Row.h:107
#define BLAZE_CONSTRAINT_MUST_NOT_BE_SYMMETRIC_MATRIX_TYPE(T)
Constraint on the data type.In case the given data type T is a symmetric matrix type, a compilation error is created.
Definition: Symmetric.h:116
Header file for run time assertion macros.
UpperMatrix specialization for sparse matrices.
Header file for the addition trait.
Header file for the division trait.
Header file for the submatrix trait.
Constraint on the data type.
#define BLAZE_CONSTRAINT_MUST_NOT_BE_LOWER_MATRIX_TYPE(T)
Constraint on the data type.In case the given data type T is a lower triangular matrix type...
Definition: Lower.h:118
Header file for the column trait.
Header file for the isDefault shim.
#define BLAZE_CONSTRAINT_MUST_BE_BLAS_COMPATIBLE_TYPE(T)
Constraint on the data type.In case the given data type T is not a BLAS compatible data type (i...
Definition: BlasCompatible.h:79
Constraint on the data type.
#define BLAZE_CONSTRAINT_MUST_NOT_REQUIRE_EVALUATION(T)
Constraint on the data type.In case the given data type T requires an intermediate evaluation within ...
Definition: RequiresEvaluation.h:118
void swap(DiagonalMatrix< MT, SO, DF > &a, DiagonalMatrix< MT, SO, DF > &b)
Swapping the contents of two matrices.
Definition: DiagonalMatrix.h:256
Header file for the mathematical trait.
Header file for the IsTrue value trait.
BLAZE_ALWAYS_INLINE size_t columns(const Matrix< MT, SO > &matrix)
Returns the current number of columns of the matrix.
Definition: Matrix.h:324
bool isIntact(const DiagonalMatrix< MT, SO, DF > &m)
Returns whether the invariants of the given diagonal matrix are intact.
Definition: DiagonalMatrix.h:237
#define BLAZE_CONSTRAINT_MUST_NOT_BE_HERMITIAN_MATRIX_TYPE(T)
Constraint on the data type.In case the given data type T is an Hermitian matrix type, a compilation error is created.
Definition: Hermitian.h:116
Header file for the IsUpper type trait.
Header file for exception macros.
Header file for the IsResizable type trait.
Header file for the IsRestricted type trait.
#define BLAZE_INTERNAL_ASSERT(expr, msg)
Run time assertion macro for internal checks.In case of an invalid run time expression, the program execution is terminated. The BLAZE_INTERNAL_ASSERT macro can be disabled by setting the BLAZE_USER_ASSERTION flag to zero or by defining NDEBUG during the compilation.
Definition: Assert.h:101