35 #ifndef _BLAZE_MATH_ADAPTORS_UNIUPPERMATRIX_H_
36 #define _BLAZE_MATH_ADAPTORS_UNIUPPERMATRIX_H_
101 template<
typename MT,
bool SO,
bool DF >
102 inline void reset( UniUpperMatrix<MT,SO,DF>& m );
104 template<
typename MT,
bool SO,
bool DF >
105 inline void reset( UniUpperMatrix<MT,SO,DF>& m,
size_t i );
107 template<
typename MT,
bool SO,
bool DF >
108 inline void clear( UniUpperMatrix<MT,SO,DF>& m );
110 template<
typename MT,
bool SO,
bool DF >
111 inline bool isDefault(
const UniUpperMatrix<MT,SO,DF>& m );
113 template<
typename MT,
bool SO,
bool DF >
114 inline bool isIntact(
const UniUpperMatrix<MT,SO,DF>& m );
116 template<
typename MT,
bool SO,
bool DF >
117 inline void swap( UniUpperMatrix<MT,SO,DF>& a, UniUpperMatrix<MT,SO,DF>& b ) noexcept;
129 template<
typename MT
152 template<
typename MT
169 template<
typename MT
189 template<
typename MT
192 inline bool isDefault_backend(
const UniUpperMatrix<MT,SO,DF>& m,
TrueType )
194 return ( m.rows() == 0UL );
210 template<
typename MT
213 inline bool isDefault_backend(
const UniUpperMatrix<MT,SO,DF>& m,
FalseType )
242 template<
typename MT
272 template<
typename MT
290 template<
typename MT
326 inline void invert( UniUpperMatrix<MT,SO,true>& m )
339 invert<flag>( derestrict( m ) );
366 template<
typename MT1,
bool SO1,
typename MT2,
typename MT3,
typename MT4,
bool SO2 >
367 inline void lu(
const UniUpperMatrix<MT1,SO1,true>& A, DenseMatrix<MT2,SO1>& L,
368 DenseMatrix<MT3,SO1>& U, Matrix<MT4,SO2>& P )
382 typedef ElementType_<MT2> ET2;
383 typedef ElementType_<MT4> ET4;
385 const size_t n( (~A).
rows() );
387 DerestrictTrait_<MT2> L2( derestrict( ~L ) );
397 for(
size_t i=0UL; i<n; ++i ) {
422 template<
typename MT
426 inline bool tryAssign(
const UniUpperMatrix<MT,SO,DF>& lhs,
427 const DenseVector<VT,false>& rhs,
size_t row,
size_t column )
437 if( column >= row + (~rhs).
size() )
440 const bool containsDiagonal( column >= row );
441 const size_t ibegin( ( !containsDiagonal )?( 0UL ):( column - row + 1UL ) );
443 if( containsDiagonal && !
isOne( (~rhs)[column-row] ) )
446 for(
size_t i=ibegin; i<(~rhs).
size(); ++i ) {
473 template<
typename MT
477 inline bool tryAssign(
const UniUpperMatrix<MT,SO,DF>& lhs,
478 const DenseVector<VT,true>& rhs,
size_t row,
size_t column )
491 const bool containsDiagonal( row < column + (~rhs).
size() );
492 const size_t iend(
min( row - column, (~rhs).
size() ) );
494 for(
size_t i=0UL; i<iend; ++i ) {
499 if( containsDiagonal && !
isOne( (~rhs)[iend] ) )
524 template<
typename MT
528 inline bool tryAssign(
const UniUpperMatrix<MT,SO,DF>& lhs,
529 const SparseVector<VT,false>& rhs,
size_t row,
size_t column )
541 if( column >= row + (~rhs).
size() )
544 const bool containsDiagonal( column >= row );
545 const size_t index( ( containsDiagonal )?( column - row ):( 0UL ) );
546 const RhsIterator last( (~rhs).
end() );
547 RhsIterator element( (~rhs).lowerBound( index ) );
549 if( containsDiagonal ) {
550 if( element == last || element->index() != index || !
isOne( element->value() ) )
555 for( ; element!=last; ++element ) {
582 template<
typename MT
586 inline bool tryAssign(
const UniUpperMatrix<MT,SO,DF>& lhs,
587 const SparseVector<VT,true>& rhs,
size_t row,
size_t column )
602 const bool containsDiagonal( row < column + (~rhs).
size() );
603 const size_t index( row - column );
604 const RhsIterator last( (~rhs).lowerBound( index ) );
606 if( containsDiagonal ) {
607 if( last == (~rhs).
end() || last->index() != index || !
isOne( last->value() ) )
611 for( RhsIterator element=(~rhs).begin(); element!=last; ++element ) {
638 template<
typename MT1
642 inline bool tryAssign(
const UniUpperMatrix<MT1,SO,DF>& lhs,
643 const DenseMatrix<MT2,false>& rhs,
size_t row,
size_t column )
654 const size_t M( (~rhs).
rows() );
655 const size_t N( (~rhs).
columns() );
657 if( column + 1UL >= row + M )
660 const size_t ibegin( ( column < row )?( 0UL ):( column - row ) );
662 for(
size_t i=ibegin; i<M; ++i )
664 const size_t jend(
min( row + i - column, N ) );
666 for(
size_t j=0UL; j<jend; ++j ) {
671 const bool containsDiagonal( row + i < column + N );
673 if( containsDiagonal && !
isOne( (~rhs)(i,jend) ) )
699 template<
typename MT1
703 inline bool tryAssign(
const UniUpperMatrix<MT1,SO,DF>& lhs,
704 const DenseMatrix<MT2,true>& rhs,
size_t row,
size_t column )
715 const size_t M( (~rhs).
rows() );
716 const size_t N( (~rhs).
columns() );
718 if( column + 1UL >= row + M )
721 const size_t jend(
min( row + M - column, N ) );
723 for(
size_t j=0UL; j<jend; ++j )
725 const bool containsDiagonal( column + j >= row );
727 if( containsDiagonal && !
isOne( (~rhs)(column+j-row,j) ) )
730 const size_t ibegin( ( containsDiagonal )?( column + j - row + 1UL ):( 0UL ) );
732 for(
size_t i=ibegin; i<M; ++i ) {
760 template<
typename MT1
764 inline bool tryAssign(
const UniUpperMatrix<MT1,SO,DF>& lhs,
765 const SparseMatrix<MT2,false>& rhs,
size_t row,
size_t column )
778 const size_t M( (~rhs).
rows() );
779 const size_t N( (~rhs).
columns() );
781 if( column + 1UL >= row + M )
784 const size_t ibegin( ( column < row )?( 0UL ):( column - row ) );
786 for(
size_t i=ibegin; i<M; ++i )
788 const bool containsDiagonal( row + i < column + N );
790 const size_t index( row + i - column );
791 const RhsIterator last( (~rhs).lowerBound( i,
min( index, N ) ) );
793 if( containsDiagonal ) {
794 if( last == (~rhs).
end(i) || ( last->index() != index ) || !
isOne( last->value() ) )
798 for( RhsIterator element=(~rhs).begin(i); element!=last; ++element ) {
826 template<
typename MT1
830 inline bool tryAssign(
const UniUpperMatrix<MT1,SO,DF>& lhs,
831 const SparseMatrix<MT2,true>& rhs,
size_t row,
size_t column )
844 const size_t M( (~rhs).
rows() );
845 const size_t N( (~rhs).
columns() );
847 if( column + 1UL >= row + M )
850 const size_t jend(
min( row + M - column, N ) );
852 for(
size_t j=0UL; j<jend; ++j )
854 const bool containsDiagonal( column + j >= row );
855 const size_t index( ( containsDiagonal )?( column + j - row ):( 0UL ) );
857 const RhsIterator last( (~rhs).
end(j) );
858 RhsIterator element( (~rhs).lowerBound( index, j ) );
860 if( containsDiagonal ) {
861 if( element == last || ( element->index() != index ) || !
isOne( element->value() ) )
866 for( ; element!=last; ++element ) {
895 template<
typename MT
899 inline bool tryAddAssign(
const UniUpperMatrix<MT,SO,DF>& lhs,
900 const DenseVector<VT,false>& rhs,
size_t row,
size_t column )
910 const size_t ibegin( ( column <= row )?( 0UL ):( column - row ) );
912 for(
size_t i=ibegin; i<(~rhs).
size(); ++i ) {
940 template<
typename MT
944 inline bool tryAddAssign(
const UniUpperMatrix<MT,SO,DF>& lhs,
945 const DenseVector<VT,true>& rhs,
size_t row,
size_t column )
958 const size_t iend(
min( row - column + 1UL, (~rhs).
size() ) );
960 for(
size_t i=0UL; i<iend; ++i ) {
988 template<
typename MT
992 inline bool tryAddAssign(
const UniUpperMatrix<MT,SO,DF>& lhs,
993 const SparseVector<VT,false>& rhs,
size_t row,
size_t column )
1005 const RhsIterator last( (~rhs).
end() );
1006 RhsIterator element( (~rhs).lowerBound( ( column <= row )?( 0UL ):( column - row ) ) );
1008 for( ; element!=last; ++element ) {
1036 template<
typename MT
1040 inline bool tryAddAssign(
const UniUpperMatrix<MT,SO,DF>& lhs,
1041 const SparseVector<VT,true>& rhs,
size_t row,
size_t column )
1056 const RhsIterator last( (~rhs).lowerBound( row - column + 1UL ) );
1058 for( RhsIterator element=(~rhs).
begin(); element!=last; ++element ) {
1086 template<
typename MT1
1090 inline bool tryAddAssign(
const UniUpperMatrix<MT1,SO,DF>& lhs,
1091 const DenseMatrix<MT2,false>& rhs,
size_t row,
size_t column )
1102 const size_t M( (~rhs).
rows() );
1103 const size_t N( (~rhs).
columns() );
1105 if( column + 1UL >= row + M )
1108 const size_t ibegin( ( column <= row )?( 0UL ):( column - row ) );
1110 for(
size_t i=ibegin; i<M; ++i )
1112 const size_t jend(
min( row + i - column + 1UL, N ) );
1114 for(
size_t j=0UL; j<jend; ++j ) {
1143 template<
typename MT1
1147 inline bool tryAddAssign(
const UniUpperMatrix<MT1,SO,DF>& lhs,
1148 const DenseMatrix<MT2,true>& rhs,
size_t row,
size_t column )
1159 const size_t M( (~rhs).
rows() );
1160 const size_t N( (~rhs).
columns() );
1162 if( column + 1UL >= row + M )
1165 const size_t jend(
min( row + M - column, N ) );
1167 for(
size_t j=0UL; j<jend; ++j )
1169 const bool containsDiagonal( column + j >= row );
1170 const size_t ibegin( ( containsDiagonal )?( column + j - row ):( 0UL ) );
1172 for(
size_t i=ibegin; i<M; ++i ) {
1201 template<
typename MT1
1205 inline bool tryAddAssign(
const UniUpperMatrix<MT1,SO,DF>& lhs,
1206 const SparseMatrix<MT2,false>& rhs,
size_t row,
size_t column )
1219 const size_t M( (~rhs).
rows() );
1220 const size_t N( (~rhs).
columns() );
1222 if( column + 1UL >= row + M )
1225 const size_t ibegin( ( column < row )?( 0UL ):( column - row ) );
1227 for(
size_t i=ibegin; i<M; ++i )
1229 const size_t index( row + i - column + 1UL );
1230 const RhsIterator last( (~rhs).lowerBound( i,
min( index, N ) ) );
1232 for( RhsIterator element=(~rhs).
begin(i); element!=last; ++element ) {
1261 template<
typename MT1
1265 inline bool tryAddAssign(
const UniUpperMatrix<MT1,SO,DF>& lhs,
1266 const SparseMatrix<MT2,true>& rhs,
size_t row,
size_t column )
1279 const size_t M( (~rhs).
rows() );
1280 const size_t N( (~rhs).
columns() );
1282 if( column + 1UL >= row + M )
1285 const size_t jend(
min( row + M - column, N ) );
1287 for(
size_t j=0UL; j<jend; ++j )
1289 const bool containsDiagonal( column + j >= row );
1290 const size_t index( ( containsDiagonal )?( column + j - row ):( 0UL ) );
1292 const RhsIterator last( (~rhs).
end(j) );
1293 RhsIterator element( (~rhs).lowerBound( index, j ) );
1295 for( ; element!=last; ++element ) {
1324 template<
typename MT
1329 inline bool trySubAssign(
const UniUpperMatrix<MT,SO,DF>& lhs,
1330 const Vector<VT,TF>& rhs,
size_t row,
size_t column )
1332 return tryAddAssign( lhs, ~rhs, row, column );
1355 template<
typename MT1
1360 inline bool trySubAssign(
const UniUpperMatrix<MT1,SO1,DF>& lhs,
1361 const Matrix<MT2,SO2>& rhs,
size_t row,
size_t column )
1363 return tryAddAssign( lhs, ~rhs, row, column );
1386 template<
typename MT
1390 inline bool tryMultAssign(
const UniUpperMatrix<MT,SO,DF>& lhs,
1391 const Vector<VT,false>& rhs,
size_t row,
size_t column )
1401 return ( column < row || (~rhs).
size() <= column - row ||
isOne( (~rhs)[column-row] ) );
1424 template<
typename MT
1428 inline bool tryMultAssign(
const UniUpperMatrix<MT,SO,DF>& lhs,
1429 const Vector<VT,true>& rhs,
size_t row,
size_t column )
1439 return ( row < column || (~rhs).
size() <= row - column ||
isOne( (~rhs)[row-column] ) );
1461 template<
typename MT
1466 inline bool tryDivAssign(
const UniUpperMatrix<MT,SO,DF>& lhs,
1467 const Vector<VT,TF>& rhs,
size_t row,
size_t column )
1469 return tryMultAssign( lhs, ~rhs, row, column );
1489 template<
typename MT
1492 inline MT& derestrict( UniUpperMatrix<MT,SO,DF>& m )
1510 template<
typename MT,
bool SO,
bool DF >
1511 struct Rows< UniUpperMatrix<MT,SO,DF> > :
public Rows<MT>
1527 template<
typename MT,
bool SO,
bool DF >
1528 struct Columns< UniUpperMatrix<MT,SO,DF> > :
public Columns<MT>
1544 template<
typename MT,
bool SO,
bool DF >
1545 struct IsSquare< UniUpperMatrix<MT,SO,DF> > :
public TrueType
1561 template<
typename MT,
bool SO,
bool DF >
1562 struct IsUniUpper< UniUpperMatrix<MT,SO,DF> > :
public TrueType
1578 template<
typename MT,
bool SO,
bool DF >
1579 struct IsAdaptor< UniUpperMatrix<MT,SO,DF> > :
public TrueType
1595 template<
typename MT,
bool SO,
bool DF >
1596 struct IsRestricted< UniUpperMatrix<MT,SO,DF> > :
public TrueType
1612 template<
typename MT,
bool SO >
1613 struct HasConstDataAccess< UniUpperMatrix<MT,SO,true> > :
public TrueType
1629 template<
typename MT,
bool SO,
bool DF >
1630 struct IsAligned< UniUpperMatrix<MT,SO,DF> > :
public BoolConstant< IsAligned<MT>::value >
1646 template<
typename MT,
bool SO,
bool DF >
1647 struct IsPadded< UniUpperMatrix<MT,SO,DF> > :
public BoolConstant< IsPadded<MT>::value >
1663 template<
typename MT,
bool SO,
bool DF >
1664 struct IsResizable< UniUpperMatrix<MT,SO,DF> > :
public BoolConstant< IsResizable<MT>::value >
1680 template<
typename MT,
bool SO,
bool DF >
1681 struct RemoveAdaptor< UniUpperMatrix<MT,SO,DF> >
1699 template<
typename MT,
bool SO,
bool DF >
1700 struct DerestrictTrait< UniUpperMatrix<MT,SO,DF> >
1718 template<
typename MT,
bool SO1,
bool DF,
typename T,
size_t M,
size_t N,
bool SO2 >
1719 struct AddTrait< UniUpperMatrix<MT,SO1,DF>, StaticMatrix<T,M,N,SO2> >
1721 using Type = AddTrait_< MT, StaticMatrix<T,M,N,SO2> >;
1724 template<
typename T,
size_t M,
size_t N,
bool SO1,
typename MT,
bool SO2,
bool DF >
1725 struct AddTrait< StaticMatrix<T,M,N,SO1>, UniUpperMatrix<MT,SO2,DF> >
1727 using Type = AddTrait_< StaticMatrix<T,M,N,SO1>, MT >;
1730 template<
typename MT,
bool SO1,
bool DF,
typename T,
size_t M,
size_t N,
bool SO2 >
1731 struct AddTrait< UniUpperMatrix<MT,SO1,DF>, HybridMatrix<T,M,N,SO2> >
1733 using Type = AddTrait_< MT, HybridMatrix<T,M,N,SO2> >;
1736 template<
typename T,
size_t M,
size_t N,
bool SO1,
typename MT,
bool SO2,
bool DF >
1737 struct AddTrait< HybridMatrix<T,M,N,SO1>, UniUpperMatrix<MT,SO2,DF> >
1739 using Type = AddTrait_< HybridMatrix<T,M,N,SO1>, MT >;
1742 template<
typename MT,
bool SO1,
bool DF,
typename T,
bool SO2 >
1743 struct AddTrait< UniUpperMatrix<MT,SO1,DF>, DynamicMatrix<T,SO2> >
1745 using Type = AddTrait_< MT, DynamicMatrix<T,SO2> >;
1748 template<
typename T,
bool SO1,
typename MT,
bool SO2,
bool DF >
1749 struct AddTrait< DynamicMatrix<T,SO1>, UniUpperMatrix<MT,SO2,DF> >
1751 using Type = AddTrait_< DynamicMatrix<T,SO1>, MT >;
1754 template<
typename MT,
bool SO1,
bool DF,
typename T,
bool AF,
bool PF,
bool SO2 >
1755 struct AddTrait< UniUpperMatrix<MT,SO1,DF>, CustomMatrix<T,AF,PF,SO2> >
1757 using Type = AddTrait_< MT, CustomMatrix<T,AF,PF,SO2> >;
1760 template<
typename T,
bool AF,
bool PF,
bool SO1,
typename MT,
bool SO2,
bool DF >
1761 struct AddTrait< CustomMatrix<T,AF,PF,SO1>, UniUpperMatrix<MT,SO2,DF> >
1763 using Type = AddTrait_< CustomMatrix<T,AF,PF,SO1>, MT >;
1766 template<
typename MT,
bool SO1,
bool DF,
typename T,
bool SO2 >
1767 struct AddTrait< UniUpperMatrix<MT,SO1,DF>, CompressedMatrix<T,SO2> >
1769 using Type = AddTrait_< MT, CompressedMatrix<T,SO2> >;
1772 template<
typename T,
bool SO1,
typename MT,
bool SO2,
bool DF >
1773 struct AddTrait< CompressedMatrix<T,SO1>, UniUpperMatrix<MT,SO2,DF> >
1775 using Type = AddTrait_< CompressedMatrix<T,SO1>, MT >;
1778 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2,
bool NF >
1779 struct AddTrait< UniUpperMatrix<MT1,SO1,DF1>, SymmetricMatrix<MT2,SO2,DF2,NF> >
1781 using Type = AddTrait_<MT1,MT2>;
1784 template<
typename MT1,
bool SO1,
bool DF1,
bool NF,
typename MT2,
bool SO2,
bool DF2 >
1785 struct AddTrait< SymmetricMatrix<MT1,SO1,DF1,NF>, UniUpperMatrix<MT2,SO2,DF2> >
1787 using Type = AddTrait_<MT1,MT2>;
1790 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1791 struct AddTrait< UniUpperMatrix<MT1,SO1,DF1>, HermitianMatrix<MT2,SO2,DF2> >
1793 using Type = AddTrait_<MT1,MT2>;
1796 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1797 struct AddTrait< HermitianMatrix<MT1,SO1,DF1>, UniUpperMatrix<MT2,SO2,DF2> >
1799 using Type = AddTrait_<MT1,MT2>;
1802 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1803 struct AddTrait< UniUpperMatrix<MT1,SO1,DF1>, LowerMatrix<MT2,SO2,DF2> >
1805 using Type = AddTrait_<MT1,MT2>;
1808 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1809 struct AddTrait< LowerMatrix<MT1,SO1,DF1>, UniUpperMatrix<MT2,SO2,DF2> >
1811 using Type = AddTrait_<MT1,MT2>;
1814 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1815 struct AddTrait< UniUpperMatrix<MT1,SO1,DF1>, UniLowerMatrix<MT2,SO2,DF2> >
1817 using Type = AddTrait_<MT1,MT2>;
1820 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1821 struct AddTrait< UniLowerMatrix<MT1,SO1,DF1>, UniUpperMatrix<MT2,SO2,DF2> >
1823 using Type = AddTrait_<MT1,MT2>;
1826 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1827 struct AddTrait< UniUpperMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1829 using Type = AddTrait_<MT1,MT2>;
1832 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1833 struct AddTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, UniUpperMatrix<MT2,SO2,DF2> >
1835 using Type = AddTrait_<MT1,MT2>;
1838 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1839 struct AddTrait< UniUpperMatrix<MT1,SO1,DF1>, UpperMatrix<MT2,SO2,DF2> >
1841 using Type = UpperMatrix< AddTrait_<MT1,MT2> >;
1844 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1845 struct AddTrait< UpperMatrix<MT1,SO1,DF1>, UniUpperMatrix<MT2,SO2,DF2> >
1847 using Type = UpperMatrix< AddTrait_<MT1,MT2> >;
1850 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1851 struct AddTrait< UniUpperMatrix<MT1,SO1,DF1>, UniUpperMatrix<MT2,SO2,DF2> >
1853 using Type = UpperMatrix< AddTrait_<MT1,MT2> >;
1869 template<
typename MT,
bool SO1,
bool DF,
typename T,
size_t M,
size_t N,
bool SO2 >
1870 struct SubTrait< UniUpperMatrix<MT,SO1,DF>, StaticMatrix<T,M,N,SO2> >
1872 using Type = SubTrait_< MT, StaticMatrix<T,M,N,SO2> >;
1875 template<
typename T,
size_t M,
size_t N,
bool SO1,
typename MT,
bool SO2,
bool DF >
1876 struct SubTrait< StaticMatrix<T,M,N,SO1>, UniUpperMatrix<MT,SO2,DF> >
1878 using Type = SubTrait_< StaticMatrix<T,M,N,SO1>, MT >;
1881 template<
typename MT,
bool SO1,
bool DF,
typename T,
size_t M,
size_t N,
bool SO2 >
1882 struct SubTrait< UniUpperMatrix<MT,SO1,DF>, HybridMatrix<T,M,N,SO2> >
1884 using Type = SubTrait_< MT, HybridMatrix<T,M,N,SO2> >;
1887 template<
typename T,
size_t M,
size_t N,
bool SO1,
typename MT,
bool SO2,
bool DF >
1888 struct SubTrait< HybridMatrix<T,M,N,SO1>, UniUpperMatrix<MT,SO2,DF> >
1890 using Type = SubTrait_< HybridMatrix<T,M,N,SO1>, MT >;
1893 template<
typename MT,
bool SO1,
bool DF,
typename T,
bool SO2 >
1894 struct SubTrait< UniUpperMatrix<MT,SO1,DF>, DynamicMatrix<T,SO2> >
1896 using Type = SubTrait_< MT, DynamicMatrix<T,SO2> >;
1899 template<
typename T,
bool SO1,
typename MT,
bool SO2,
bool DF >
1900 struct SubTrait< DynamicMatrix<T,SO1>, UniUpperMatrix<MT,SO2,DF> >
1902 using Type = SubTrait_< DynamicMatrix<T,SO1>, MT >;
1905 template<
typename MT,
bool SO1,
bool DF,
typename T,
bool AF,
bool PF,
bool SO2 >
1906 struct SubTrait< UniUpperMatrix<MT,SO1,DF>, CustomMatrix<T,AF,PF,SO2> >
1908 using Type = SubTrait_< MT, CustomMatrix<T,AF,PF,SO2> >;
1911 template<
typename T,
bool AF,
bool PF,
bool SO1,
typename MT,
bool SO2,
bool DF >
1912 struct SubTrait< CustomMatrix<T,AF,PF,SO1>, UniUpperMatrix<MT,SO2,DF> >
1914 using Type = SubTrait_< CustomMatrix<T,AF,PF,SO1>, MT >;
1917 template<
typename MT,
bool SO1,
bool DF,
typename T,
bool SO2 >
1918 struct SubTrait< UniUpperMatrix<MT,SO1,DF>, CompressedMatrix<T,SO2> >
1920 using Type = SubTrait_< MT, CompressedMatrix<T,SO2> >;
1923 template<
typename T,
bool SO1,
typename MT,
bool SO2,
bool DF >
1924 struct SubTrait< CompressedMatrix<T,SO1>, UniUpperMatrix<MT,SO2,DF> >
1926 using Type = SubTrait_< CompressedMatrix<T,SO1>, MT >;
1929 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2,
bool NF >
1930 struct SubTrait< UniUpperMatrix<MT1,SO1,DF1>, SymmetricMatrix<MT2,SO2,DF2,NF> >
1932 using Type = SubTrait_<MT1,MT2>;
1935 template<
typename MT1,
bool SO1,
bool DF1,
bool NF,
typename MT2,
bool SO2,
bool DF2 >
1936 struct SubTrait< SymmetricMatrix<MT1,SO1,DF1,NF>, UniUpperMatrix<MT2,SO2,DF2> >
1938 using Type = SubTrait_<MT1,MT2>;
1941 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1942 struct SubTrait< UniUpperMatrix<MT1,SO1,DF1>, HermitianMatrix<MT2,SO2,DF2> >
1944 using Type = SubTrait_<MT1,MT2>;
1947 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1948 struct SubTrait< HermitianMatrix<MT1,SO1,DF1>, UniUpperMatrix<MT2,SO2,DF2> >
1950 using Type = SubTrait_<MT1,MT2>;
1953 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1954 struct SubTrait< UniUpperMatrix<MT1,SO1,DF1>, LowerMatrix<MT2,SO2,DF2> >
1956 using Type = SubTrait_<MT1,MT2>;
1959 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1960 struct SubTrait< LowerMatrix<MT1,SO1,DF1>, UniUpperMatrix<MT2,SO2,DF2> >
1962 using Type = SubTrait_<MT1,MT2>;
1965 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1966 struct SubTrait< UniUpperMatrix<MT1,SO1,DF1>, UniLowerMatrix<MT2,SO2,DF2> >
1968 using Type = SubTrait_<MT1,MT2>;
1971 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1972 struct SubTrait< UniLowerMatrix<MT1,SO1,DF1>, UniUpperMatrix<MT2,SO2,DF2> >
1974 using Type = SubTrait_<MT1,MT2>;
1977 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1978 struct SubTrait< UniUpperMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1980 using Type = SubTrait_<MT1,MT2>;
1983 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1984 struct SubTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, UniUpperMatrix<MT2,SO2,DF2> >
1986 using Type = SubTrait_<MT1,MT2>;
1989 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1990 struct SubTrait< UniUpperMatrix<MT1,SO1,DF1>, UpperMatrix<MT2,SO2,DF2> >
1992 using Type = UpperMatrix< SubTrait_<MT1,MT2> >;
1995 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1996 struct SubTrait< UpperMatrix<MT1,SO1,DF1>, UniUpperMatrix<MT2,SO2,DF2> >
1998 using Type = UpperMatrix< SubTrait_<MT1,MT2> >;
2001 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2002 struct SubTrait< UniUpperMatrix<MT1,SO1,DF1>, UniUpperMatrix<MT2,SO2,DF2> >
2004 using Type = UpperMatrix< SubTrait_<MT1,MT2> >;
2020 template<
typename MT,
bool SO,
bool DF,
typename T >
2021 struct MultTrait< UniUpperMatrix<MT,SO,DF>, T,
EnableIf_< IsNumeric<T> > >
2023 using Type = UpperMatrix< MultTrait_<MT,T> >;
2026 template<
typename T,
typename MT,
bool SO,
bool DF >
2027 struct MultTrait< T, UniUpperMatrix<MT,SO,DF>,
EnableIf_< IsNumeric<T> > >
2029 using Type = UpperMatrix< MultTrait_<T,MT> >;
2032 template<
typename MT,
bool SO,
bool DF,
typename T,
size_t N >
2033 struct MultTrait< UniUpperMatrix<MT,SO,DF>, StaticVector<T,N,false> >
2035 using Type = MultTrait_< MT, StaticVector<T,N,false> >;
2038 template<
typename T,
size_t N,
typename MT,
bool SO,
bool DF >
2039 struct MultTrait< StaticVector<T,N,true>, UniUpperMatrix<MT,SO,DF> >
2041 using Type = MultTrait_< StaticVector<T,N,true>, MT >;
2044 template<
typename MT,
bool SO,
bool DF,
typename T,
size_t N >
2045 struct MultTrait< UniUpperMatrix<MT,SO,DF>, HybridVector<T,N,false> >
2047 using Type = MultTrait_< MT, HybridVector<T,N,false> >;
2050 template<
typename T,
size_t N,
typename MT,
bool SO,
bool DF >
2051 struct MultTrait< HybridVector<T,N,true>, UniUpperMatrix<MT,SO,DF> >
2053 using Type = MultTrait_< HybridVector<T,N,true>, MT >;
2056 template<
typename MT,
bool SO,
bool DF,
typename T >
2057 struct MultTrait< UniUpperMatrix<MT,SO,DF>, DynamicVector<T,false> >
2059 using Type = MultTrait_< MT, DynamicVector<T,false> >;
2062 template<
typename T,
typename MT,
bool SO,
bool DF >
2063 struct MultTrait< DynamicVector<T,true>, UniUpperMatrix<MT,SO,DF> >
2065 using Type = MultTrait_< DynamicVector<T,true>, MT >;
2068 template<
typename MT,
bool SO,
bool DF,
typename T,
bool AF,
bool PF >
2069 struct MultTrait< UniUpperMatrix<MT,SO,DF>, CustomVector<T,AF,PF,false> >
2071 using Type = MultTrait_< MT, CustomVector<T,AF,PF,false> >;
2074 template<
typename T,
bool AF,
bool PF,
typename MT,
bool SO,
bool DF >
2075 struct MultTrait< CustomVector<T,AF,PF,true>, UniUpperMatrix<MT,SO,DF> >
2077 using Type = MultTrait_< CustomVector<T,AF,PF,true>, MT >;
2080 template<
typename MT,
bool SO,
bool DF,
typename T >
2081 struct MultTrait< UniUpperMatrix<MT,SO,DF>, CompressedVector<T,false> >
2083 using Type = MultTrait_< MT, CompressedVector<T,false> >;
2086 template<
typename T,
typename MT,
bool SO,
bool DF >
2087 struct MultTrait< CompressedVector<T,true>, UniUpperMatrix<MT,SO,DF> >
2089 using Type = MultTrait_< CompressedVector<T,true>, MT >;
2092 template<
typename MT,
bool SO1,
bool DF,
typename T,
size_t M,
size_t N,
bool SO2 >
2093 struct MultTrait< UniUpperMatrix<MT,SO1,DF>, StaticMatrix<T,M,N,SO2> >
2095 using Type = MultTrait_< MT, StaticMatrix<T,M,N,SO2> >;
2098 template<
typename T,
size_t M,
size_t N,
bool SO1,
typename MT,
bool SO2,
bool DF >
2099 struct MultTrait< StaticMatrix<T,M,N,SO1>, UniUpperMatrix<MT,SO2,DF> >
2101 using Type = MultTrait_< StaticMatrix<T,M,N,SO1>, MT >;
2104 template<
typename MT,
bool SO1,
bool DF,
typename T,
size_t M,
size_t N,
bool SO2 >
2105 struct MultTrait< UniUpperMatrix<MT,SO1,DF>, HybridMatrix<T,M,N,SO2> >
2107 using Type = MultTrait_< MT, HybridMatrix<T,M,N,SO2> >;
2110 template<
typename T,
size_t M,
size_t N,
bool SO1,
typename MT,
bool SO2,
bool DF >
2111 struct MultTrait< HybridMatrix<T,M,N,SO1>, UniUpperMatrix<MT,SO2,DF> >
2113 using Type = MultTrait_< HybridMatrix<T,M,N,SO1>, MT >;
2116 template<
typename MT,
bool SO1,
bool DF,
typename T,
bool SO2 >
2117 struct MultTrait< UniUpperMatrix<MT,SO1,DF>, DynamicMatrix<T,SO2> >
2119 using Type = MultTrait_< MT, DynamicMatrix<T,SO2> >;
2122 template<
typename T,
bool SO1,
typename MT,
bool SO2,
bool DF >
2123 struct MultTrait< DynamicMatrix<T,SO1>, UniUpperMatrix<MT,SO2,DF> >
2125 using Type = MultTrait_< DynamicMatrix<T,SO1>, MT >;
2128 template<
typename MT,
bool SO1,
bool DF,
typename T,
bool AF,
bool PF,
bool SO2 >
2129 struct MultTrait< UniUpperMatrix<MT,SO1,DF>, CustomMatrix<T,AF,PF,SO2> >
2131 using Type = MultTrait_< MT, CustomMatrix<T,AF,PF,SO2> >;
2134 template<
typename T,
bool AF,
bool PF,
bool SO1,
typename MT,
bool SO2,
bool DF >
2135 struct MultTrait< CustomMatrix<T,AF,PF,SO1>, UniUpperMatrix<MT,SO2,DF> >
2137 using Type = MultTrait_< CustomMatrix<T,AF,PF,SO1>, MT >;
2140 template<
typename MT,
bool SO1,
bool DF,
typename T,
bool SO2 >
2141 struct MultTrait< UniUpperMatrix<MT,SO1,DF>, CompressedMatrix<T,SO2> >
2143 using Type = MultTrait_< MT, CompressedMatrix<T,SO2> >;
2146 template<
typename T,
bool SO1,
typename MT,
bool SO2,
bool DF >
2147 struct MultTrait< CompressedMatrix<T,SO1>, UniUpperMatrix<MT,SO2,DF> >
2149 using Type = MultTrait_< CompressedMatrix<T,SO1>, MT >;
2152 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2,
bool NF >
2153 struct MultTrait< UniUpperMatrix<MT1,SO1,DF1>, SymmetricMatrix<MT2,SO2,DF2,NF> >
2155 using Type = MultTrait_<MT1,MT2>;
2158 template<
typename MT1,
bool SO1,
bool DF1,
bool NF,
typename MT2,
bool SO2,
bool DF2 >
2159 struct MultTrait< SymmetricMatrix<MT1,SO1,DF1,NF>, UniUpperMatrix<MT2,SO2,DF2> >
2161 using Type = MultTrait_<MT1,MT2>;
2164 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2165 struct MultTrait< UniUpperMatrix<MT1,SO1,DF1>, HermitianMatrix<MT2,SO2,DF2> >
2167 using Type = MultTrait_<MT1,MT2>;
2170 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2171 struct MultTrait< HermitianMatrix<MT1,SO1,DF1>, UniUpperMatrix<MT2,SO2,DF2> >
2173 using Type = MultTrait_<MT1,MT2>;
2176 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2177 struct MultTrait< UniUpperMatrix<MT1,SO1,DF1>, LowerMatrix<MT2,SO2,DF2> >
2179 using Type = MultTrait_<MT1,MT2>;
2182 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2183 struct MultTrait< LowerMatrix<MT1,SO1,DF1>, UniUpperMatrix<MT2,SO2,DF2> >
2185 using Type = MultTrait_<MT1,MT2>;
2188 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2189 struct MultTrait< UniUpperMatrix<MT1,SO1,DF1>, UniLowerMatrix<MT2,SO2,DF2> >
2191 using Type = MultTrait_<MT1,MT2>;
2194 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2195 struct MultTrait< UniLowerMatrix<MT1,SO1,DF1>, UniUpperMatrix<MT2,SO2,DF2> >
2197 using Type = MultTrait_<MT1,MT2>;
2200 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2201 struct MultTrait< UniUpperMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
2203 using Type = MultTrait_<MT1,MT2>;
2206 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2207 struct MultTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, UniUpperMatrix<MT2,SO2,DF2> >
2209 using Type = MultTrait_<MT1,MT2>;
2212 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2213 struct MultTrait< UniUpperMatrix<MT1,SO1,DF1>, UpperMatrix<MT2,SO2,DF2> >
2215 using Type = UpperMatrix< MultTrait_<MT1,MT2> >;
2218 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2219 struct MultTrait< UpperMatrix<MT1,SO1,DF1>, UniUpperMatrix<MT2,SO2,DF2> >
2221 using Type = UpperMatrix< MultTrait_<MT1,MT2> >;
2224 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2225 struct MultTrait< UniUpperMatrix<MT1,SO1,DF1>, UniUpperMatrix<MT2,SO2,DF2> >
2227 using Type = UniUpperMatrix< MultTrait_<MT1,MT2> >;
2243 template<
typename MT,
bool SO,
bool DF,
typename T >
2244 struct DivTrait< UniUpperMatrix<MT,SO,DF>, T,
EnableIf_< IsNumeric<T> > >
2246 using Type = UpperMatrix< DivTrait_<MT,T> >;
2262 template<
typename MT,
bool SO,
bool DF,
typename ET >
2263 struct ForEachTrait< UniUpperMatrix<MT,SO,DF>, Pow<ET> >
2265 using Type = UniUpperMatrix< ForEachTrait_< MT, Pow<ET> > >;
2281 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2282 struct MathTrait< UniUpperMatrix<MT1,SO1,DF1>, UniUpperMatrix<MT2,SO2,DF2> >
2284 using HighType = UniUpperMatrix< typename MathTrait<MT1,MT2>::HighType >;
2285 using LowType = UniUpperMatrix< typename MathTrait<MT1,MT2>::LowType >;
2301 template<
typename MT,
bool SO,
bool DF >
2302 struct SubmatrixTrait< UniUpperMatrix<MT,SO,DF> >
2304 using Type = SubmatrixTrait_<MT>;
2320 template<
typename MT,
bool SO,
bool DF >
2321 struct RowTrait< UniUpperMatrix<MT,SO,DF> >
2323 using Type = RowTrait_<MT>;
2339 template<
typename MT,
bool SO,
bool DF >
2340 struct ColumnTrait< UniUpperMatrix<MT,SO,DF> >
2342 using Type = ColumnTrait_<MT>;
BoolConstant< false > FalseType
Type/value traits base class.The FalseType class is used as base class for type traits and value trai...
Definition: FalseType.h:61
bool isOne(const DiagonalProxy< MT > &proxy)
Returns whether the represented element is 1.
Definition: DiagonalProxy.h:635
Header file for auxiliary alias declarations.
Header file for mathematical functions.
Header file for the Rows type trait.
Header file for the UNUSED_PARAMETER function template.
Header file for the IsUniUpper type trait.
Header file for the subtraction trait.
Header file for the row trait.
BLAZE_ALWAYS_INLINE size_t size(const Vector< VT, TF > &vector) noexcept
Returns the current size/dimension of the vector.
Definition: Vector.h:258
Header file for the dense matrix inversion flags.
UniUpperMatrix specialization for sparse matrices.
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:188
Flag for the inversion of a diagonal matrix.
Definition: InversionFlag.h:115
void reset(const DiagonalProxy< MT > &proxy)
Resetting the represented element to the default initial values.
Definition: DiagonalProxy.h:533
Flag for the inversion of a general matrix (same as byLU).
Definition: InversionFlag.h:108
Flag for the inversion of a upper unitriangular matrix.
Definition: InversionFlag.h:114
const ElementType_< MT > min(const DenseMatrix< MT, SO > &dm)
Returns the smallest element of the dense matrix.
Definition: DenseMatrix.h:1669
#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:81
BoolConstant< true > TrueType
Type traits base class.The TrueType class is used as base class for type traits and value traits that...
Definition: TrueType.h:61
Flag for the inversion of a upper triangular matrix.
Definition: InversionFlag.h:113
Constraint on the data type.
DisableIf_< Or< IsComputation< MT >, IsTransExpr< MT > >, ColumnExprTrait_< MT > > column(Matrix< MT, SO > &matrix, size_t index)
Creating a view on a specific column of the given matrix.
Definition: Column.h:126
bool isDefault(const DiagonalProxy< MT > &proxy)
Returns whether the represented element is in default state.
Definition: DiagonalProxy.h:573
Constraint on the data type.
Header file for the IsSquare type trait.
void invert(const HermitianProxy< MT > &proxy)
In-place inversion of the represented element.
Definition: HermitianProxy.h:741
Constraint on the data type.
Flag for the LU-based matrix inversion.
Definition: InversionFlag.h:103
Header file for the multiplication trait.
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:2647
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:219
Header file for the Columns type trait.
Header file for the implementation of a fixed-size matrix.
Header file for the IsAligned type trait.
BLAZE_ALWAYS_INLINE size_t columns(const Matrix< MT, SO > &matrix) noexcept
Returns the current number of columns of the matrix.
Definition: Matrix.h:330
#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:81
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:538
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:254
Header file for the RemoveAdaptor type trait.
Constraint on the data type.
Header file for the EnableIf class template.
void clear(const DiagonalProxy< MT > &proxy)
Clearing the represented element.
Definition: DiagonalProxy.h:553
Header file for the IsPadded type trait.
Header file for the IsAdaptor type trait.
Header file for the isOne shim.
InversionFlag
Inversion flag.The InversionFlag type enumeration represents the different types of matrix inversion ...
Definition: InversionFlag.h:101
Header file for the DerestrictTrait class template.
Flag for the inversion of a lower triangular matrix.
Definition: InversionFlag.h:111
Constraint on the data type.
Header file for the IsNumeric type trait.
Header file for the HasConstDataAccess type trait.
Compile time check for resizable data types.This type trait tests whether the given data type is a re...
Definition: IsResizable.h:75
DisableIf_< Or< IsComputation< MT >, IsTransExpr< MT > >, RowExprTrait_< MT > > row(Matrix< MT, SO > &matrix, size_t index)
Creating a view on a specific row of the given matrix.
Definition: Row.h:126
Matrix adapter for upper unitriangular matrices.
Definition: Forward.h:54
#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:79
Header file for run time assertion macros.
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:81
Header file for the column trait.
Header file for the isDefault shim.
void swap(DiagonalMatrix< MT, SO, DF > &a, DiagonalMatrix< MT, SO, DF > &b) noexcept
Swapping the contents of two matrices.
Definition: DiagonalMatrix.h:258
#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:61
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:81
IntegralConstant< bool, B > BoolConstant
Generic wrapper for a compile time constant boolean value.The BoolConstant class template represents ...
Definition: IntegralConstant.h:100
typename EnableIf< Condition, T >::Type EnableIf_
Auxiliary alias declaration for the EnableIf class template.The EnableIf_ alias declaration provides ...
Definition: EnableIf.h:223
Header file for the mathematical trait.
BLAZE_ALWAYS_INLINE size_t rows(const Matrix< MT, SO > &matrix) noexcept
Returns the current number of rows of the matrix.
Definition: Matrix.h:314
Header file for the for-each trait.
UniUpperMatrix specialization for dense matrices.
Header file for the IntegralConstant class template.
bool isIntact(const DiagonalMatrix< MT, SO, DF > &m)
Returns whether the invariants of the given diagonal matrix are intact.
Definition: DiagonalMatrix.h:240
#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:79
void UNUSED_PARAMETER(const Args &...)
Suppression of unused parameter warnings.
Definition: Unused.h:81
Header file for the implementation of the base template of the UpperMatrix.
Flag for the inversion of a lower unitriangular matrix.
Definition: InversionFlag.h:112
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
Header file for the implementation of the base template of the UniUpperMatrix.
Header file for the TrueType type/value trait base class.
bool isIdentity(const DenseMatrix< MT, SO > &dm)
Checks if the give dense matrix is an identity matrix.
Definition: DenseMatrix.h:1593