35 #ifndef _BLAZE_MATH_ADAPTORS_UNIUPPERMATRIX_H_
36 #define _BLAZE_MATH_ADAPTORS_UNIUPPERMATRIX_H_
98 template<
typename MT,
bool SO,
bool DF >
99 inline void reset( UniUpperMatrix<MT,SO,DF>& m );
101 template<
typename MT,
bool SO,
bool DF >
102 inline void reset( UniUpperMatrix<MT,SO,DF>& m,
size_t i );
104 template<
typename MT,
bool SO,
bool DF >
105 inline void clear( UniUpperMatrix<MT,SO,DF>& m );
107 template<
typename MT,
bool SO,
bool DF >
108 inline bool isDefault(
const UniUpperMatrix<MT,SO,DF>& m );
110 template<
typename MT,
bool SO,
bool DF >
111 inline bool isIntact(
const UniUpperMatrix<MT,SO,DF>& m );
113 template<
typename MT,
bool SO,
bool DF >
114 inline void swap( UniUpperMatrix<MT,SO,DF>& a, UniUpperMatrix<MT,SO,DF>& b ) ;
126 template<
typename MT
149 template<
typename MT
166 template<
typename MT
186 template<
typename MT
189 inline bool isDefault_backend(
const UniUpperMatrix<MT,SO,DF>& m,
TrueType )
191 return ( m.rows() == 0UL );
207 template<
typename MT
210 inline bool isDefault_backend(
const UniUpperMatrix<MT,SO,DF>& m,
FalseType )
239 template<
typename MT
269 template<
typename MT
288 template<
typename MT
312 template<
typename MT
314 inline void invert2x2( UniUpperMatrix<MT,SO,true>& m )
323 typename DerestrictTrait<MT>::Type A( derestrict( m ) );
347 template<
typename MT
349 inline void invert3x3( UniUpperMatrix<MT,SO,true>& m )
358 const StaticMatrix<ET,3UL,3UL,SO> A( m );
359 typename DerestrictTrait<MT>::Type B( derestrict( m ) );
362 B(0,2) = A(0,1)*A(1,2) - A(0,2);
385 template<
typename MT
387 inline void invert4x4( UniUpperMatrix<MT,SO,true>& m )
396 const StaticMatrix<ET,4UL,4UL,SO> A( m );
397 typename DerestrictTrait<MT>::Type B( derestrict( m ) );
399 ET tmp( A(0,1)*A(1,2) - A(0,2) );
404 B(0,3) = A(0,1)*A(1,3) - A(0,3) - A(2,3)*tmp;
405 B(1,3) = A(2,3)*A(1,2) - A(1,3);
428 template<
typename MT
430 inline void invert5x5( UniUpperMatrix<MT,SO,true>& m )
439 const StaticMatrix<ET,5UL,5UL,SO> A( m );
440 typename DerestrictTrait<MT>::Type B( derestrict( m ) );
442 const ET tmp2( A(0,1)*A(1,2) - A(0,2) );
444 const ET tmp8 ( A(2,3)*tmp2 - A(0,1)*A(1,3) + A(0,3) );
445 const ET tmp9 ( A(2,3)*A(1,2) - A(1,3) );
446 const ET tmp10( A(2,3) );
449 B(0,2) = A(0,1)*A(1,2) - A(0,2);
454 B(0,4) = A(3,4)*tmp8 - A(2,4)*tmp2 + A(0,1)*A(1,4) - A(0,4);
455 B(1,4) = A(2,4)*A(1,2) - A(1,4) - A(3,4)*tmp9;
456 B(2,4) = A(3,4)*A(2,3) - A(2,4);
479 template<
typename MT
481 inline void invert6x6( UniUpperMatrix<MT,SO,true>& m )
490 const StaticMatrix<ET,6UL,6UL,SO> A( m );
491 typename DerestrictTrait<MT>::Type B( derestrict( m ) );
493 const ET tmp1( A(0,1)*A(1,2) - A(0,2) );
494 const ET tmp2( A(2,3)*tmp1 - A(0,1)*A(1,3) + A(0,3) );
495 const ET tmp3( A(2,3)*A(1,2) - A(1,3) );
496 const ET tmp4( A(2,4)*tmp1 - A(0,1)*A(1,4) + A(0,4) - A(3,4)*tmp2 );
497 const ET tmp5( A(2,4)*A(1,2) - A(1,4) - A(3,4)*tmp3 );
498 const ET tmp6( A(2,4) - A(3,4)*A(2,3) );
501 B(0,2) = A(0,1)*A(1,2) - A(0,2);
510 B(0,5) = - A(2,5)*tmp1 + A(0,1)*A(1,5) - A(0,5) + A(3,5)*tmp2 + A(4,5)*tmp4;
511 B(1,5) = A(2,5)*A(1,2) - A(1,5) - A(3,5)*tmp3 - A(4,5)*tmp5;
512 B(2,5) = - A(2,5) + A(3,5)*A(2,3) + A(4,5)*tmp6;
513 B(3,5) = - A(3,5) + A(4,5)*A(3,4);
543 template<
typename MT
545 inline void invertByDefault( UniUpperMatrix<MT,SO,true>& m )
573 template<
typename MT
575 inline void invertByLU( UniUpperMatrix<MT,SO,true>& m )
579 typename DerestrictTrait<MT>::Type A( derestrict( ~m ) );
581 trtri( A,
'U',
'U' );
604 template<
typename MT
606 inline void invertByLDLT( UniUpperMatrix<MT,SO,true>& m )
631 template<
typename MT
633 inline void invertByLDLH( UniUpperMatrix<MT,SO,true>& m )
655 template<
typename MT
657 inline void invertByLLH( UniUpperMatrix<MT,SO,true>& m )
688 template<
typename MT1,
bool SO1,
typename MT2,
typename MT3,
typename MT4,
bool SO2 >
689 inline void lu(
const UniUpperMatrix<MT1,SO1,true>& A, DenseMatrix<MT2,SO1>& L,
690 DenseMatrix<MT3,SO1>& U, Matrix<MT4,SO2>& P )
707 const size_t n( (~A).
rows() );
709 typename DerestrictTrait<MT2>::Type L2( derestrict( ~L ) );
719 for(
size_t i=0UL; i<n; ++i ) {
744 template<
typename MT
748 inline bool tryAssign(
const UniUpperMatrix<MT,SO,DF>& lhs,
749 const DenseVector<VT,false>& rhs,
size_t row,
size_t column )
759 if( column >= row + (~rhs).
size() )
762 const bool containsDiagonal( column >= row );
763 const size_t ibegin( ( !containsDiagonal )?( 0UL ):( column - row + 1UL ) );
765 if( containsDiagonal && !
isOne( (~rhs)[column-row] ) )
768 for(
size_t i=ibegin; i<(~rhs).
size(); ++i ) {
795 template<
typename MT
799 inline bool tryAssign(
const UniUpperMatrix<MT,SO,DF>& lhs,
800 const DenseVector<VT,true>& rhs,
size_t row,
size_t column )
813 const bool containsDiagonal( row < column + (~rhs).
size() );
814 const size_t iend(
min( row - column, (~rhs).
size() ) );
816 for(
size_t i=0UL; i<iend; ++i ) {
821 if( containsDiagonal && !
isOne( (~rhs)[iend] ) )
846 template<
typename MT
850 inline bool tryAssign(
const UniUpperMatrix<MT,SO,DF>& lhs,
851 const SparseVector<VT,false>& rhs,
size_t row,
size_t column )
863 if( column >= row + (~rhs).
size() )
866 const bool containsDiagonal( column >= row );
867 const size_t index( ( containsDiagonal )?( column - row ):( 0UL ) );
868 const RhsIterator last( (~rhs).
end() );
869 RhsIterator element( (~rhs).lowerBound( index ) );
871 if( containsDiagonal ) {
872 if( element == last || element->index() != index || !
isOne( element->value() ) )
877 for( ; element!=last; ++element ) {
904 template<
typename MT
908 inline bool tryAssign(
const UniUpperMatrix<MT,SO,DF>& lhs,
909 const SparseVector<VT,true>& rhs,
size_t row,
size_t column )
924 const bool containsDiagonal( row < column + (~rhs).
size() );
925 const size_t index( row - column );
926 const RhsIterator last( (~rhs).lowerBound( index ) );
928 if( containsDiagonal ) {
929 if( last == (~rhs).
end() || last->index() != index || !
isOne( last->value() ) )
933 for( RhsIterator element=(~rhs).begin(); element!=last; ++element ) {
960 template<
typename MT1
964 inline bool tryAssign(
const UniUpperMatrix<MT1,SO,DF>& lhs,
965 const DenseMatrix<MT2,false>& rhs,
size_t row,
size_t column )
976 const size_t M( (~rhs).
rows() );
977 const size_t N( (~rhs).
columns() );
979 if( column + 1UL >= row + M )
982 const size_t ibegin( ( column < row )?( 0UL ):( column - row ) );
984 for(
size_t i=ibegin; i<M; ++i )
986 const size_t jend(
min( row + i - column, N ) );
988 for(
size_t j=0UL; j<jend; ++j ) {
993 const bool containsDiagonal( row + i < column + N );
995 if( containsDiagonal && !
isOne( (~rhs)(i,jend) ) )
1021 template<
typename MT1
1025 inline bool tryAssign(
const UniUpperMatrix<MT1,SO,DF>& lhs,
1026 const DenseMatrix<MT2,true>& rhs,
size_t row,
size_t column )
1037 const size_t M( (~rhs).
rows() );
1038 const size_t N( (~rhs).
columns() );
1040 if( column + 1UL >= row + M )
1043 const size_t jend(
min( row + M - column, N ) );
1045 for(
size_t j=0UL; j<jend; ++j )
1047 const bool containsDiagonal( column + j >= row );
1049 if( containsDiagonal && !
isOne( (~rhs)(column+j-row,j) ) )
1052 const size_t ibegin( ( containsDiagonal )?( column + j - row + 1UL ):( 0UL ) );
1054 for(
size_t i=ibegin; i<M; ++i ) {
1082 template<
typename MT1
1086 inline bool tryAssign(
const UniUpperMatrix<MT1,SO,DF>& lhs,
1087 const SparseMatrix<MT2,false>& rhs,
size_t row,
size_t column )
1100 const size_t M( (~rhs).
rows() );
1101 const size_t N( (~rhs).
columns() );
1103 if( column + 1UL >= row + M )
1106 const size_t ibegin( ( column < row )?( 0UL ):( column - row ) );
1108 for(
size_t i=ibegin; i<M; ++i )
1110 const bool containsDiagonal( row + i < column + N );
1112 const size_t index( row + i - column );
1113 const RhsIterator last( (~rhs).lowerBound( i,
min( index, N ) ) );
1115 if( containsDiagonal ) {
1116 if( last == (~rhs).
end(i) || ( last->index() != index ) || !
isOne( last->value() ) )
1120 for( RhsIterator element=(~rhs).begin(i); element!=last; ++element ) {
1148 template<
typename MT1
1152 inline bool tryAssign(
const UniUpperMatrix<MT1,SO,DF>& lhs,
1153 const SparseMatrix<MT2,true>& rhs,
size_t row,
size_t column )
1166 const size_t M( (~rhs).
rows() );
1167 const size_t N( (~rhs).
columns() );
1169 if( column + 1UL >= row + M )
1172 const size_t jend(
min( row + M - column, N ) );
1174 for(
size_t j=0UL; j<jend; ++j )
1176 const bool containsDiagonal( column + j >= row );
1177 const size_t index( ( containsDiagonal )?( column + j - row ):( 0UL ) );
1179 const RhsIterator last( (~rhs).
end(j) );
1180 RhsIterator element( (~rhs).lowerBound( index, j ) );
1182 if( containsDiagonal ) {
1183 if( element == last || ( element->index() != index ) || !
isOne( element->value() ) )
1188 for( ; element!=last; ++element ) {
1217 template<
typename MT
1221 inline bool tryAddAssign(
const UniUpperMatrix<MT,SO,DF>& lhs,
1222 const DenseVector<VT,false>& rhs,
size_t row,
size_t column )
1232 const size_t ibegin( ( column <= row )?( 0UL ):( column - row ) );
1234 for(
size_t i=ibegin; i<(~rhs).
size(); ++i ) {
1262 template<
typename MT
1266 inline bool tryAddAssign(
const UniUpperMatrix<MT,SO,DF>& lhs,
1267 const DenseVector<VT,true>& rhs,
size_t row,
size_t column )
1280 const size_t iend(
min( row - column + 1UL, (~rhs).
size() ) );
1282 for(
size_t i=0UL; i<iend; ++i ) {
1310 template<
typename MT
1314 inline bool tryAddAssign(
const UniUpperMatrix<MT,SO,DF>& lhs,
1315 const SparseVector<VT,false>& rhs,
size_t row,
size_t column )
1327 const RhsIterator last( (~rhs).
end() );
1328 RhsIterator element( (~rhs).lowerBound( ( column <= row )?( 0UL ):( column - row ) ) );
1330 for( ; element!=last; ++element ) {
1358 template<
typename MT
1362 inline bool tryAddAssign(
const UniUpperMatrix<MT,SO,DF>& lhs,
1363 const SparseVector<VT,true>& rhs,
size_t row,
size_t column )
1378 const RhsIterator last( (~rhs).lowerBound( row - column + 1UL ) );
1380 for( RhsIterator element=(~rhs).
begin(); element!=last; ++element ) {
1408 template<
typename MT1
1412 inline bool tryAddAssign(
const UniUpperMatrix<MT1,SO,DF>& lhs,
1413 const DenseMatrix<MT2,false>& rhs,
size_t row,
size_t column )
1424 const size_t M( (~rhs).
rows() );
1425 const size_t N( (~rhs).
columns() );
1427 if( column + 1UL >= row + M )
1430 const size_t ibegin( ( column <= row )?( 0UL ):( column - row ) );
1432 for(
size_t i=ibegin; i<M; ++i )
1434 const size_t jend(
min( row + i - column + 1UL, N ) );
1436 for(
size_t j=0UL; j<jend; ++j ) {
1465 template<
typename MT1
1469 inline bool tryAddAssign(
const UniUpperMatrix<MT1,SO,DF>& lhs,
1470 const DenseMatrix<MT2,true>& rhs,
size_t row,
size_t column )
1481 const size_t M( (~rhs).
rows() );
1482 const size_t N( (~rhs).
columns() );
1484 if( column + 1UL >= row + M )
1487 const size_t jend(
min( row + M - column, N ) );
1489 for(
size_t j=0UL; j<jend; ++j )
1491 const bool containsDiagonal( column + j >= row );
1492 const size_t ibegin( ( containsDiagonal )?( column + j - row ):( 0UL ) );
1494 for(
size_t i=ibegin; i<M; ++i ) {
1523 template<
typename MT1
1527 inline bool tryAddAssign(
const UniUpperMatrix<MT1,SO,DF>& lhs,
1528 const SparseMatrix<MT2,false>& rhs,
size_t row,
size_t column )
1541 const size_t M( (~rhs).
rows() );
1542 const size_t N( (~rhs).
columns() );
1544 if( column + 1UL >= row + M )
1547 const size_t ibegin( ( column < row )?( 0UL ):( column - row ) );
1549 for(
size_t i=ibegin; i<M; ++i )
1551 const size_t index( row + i - column + 1UL );
1552 const RhsIterator last( (~rhs).lowerBound( i,
min( index, N ) ) );
1554 for( RhsIterator element=(~rhs).
begin(i); element!=last; ++element ) {
1583 template<
typename MT1
1587 inline bool tryAddAssign(
const UniUpperMatrix<MT1,SO,DF>& lhs,
1588 const SparseMatrix<MT2,true>& rhs,
size_t row,
size_t column )
1601 const size_t M( (~rhs).
rows() );
1602 const size_t N( (~rhs).
columns() );
1604 if( column + 1UL >= row + M )
1607 const size_t jend(
min( row + M - column, N ) );
1609 for(
size_t j=0UL; j<jend; ++j )
1611 const bool containsDiagonal( column + j >= row );
1612 const size_t index( ( containsDiagonal )?( column + j - row ):( 0UL ) );
1614 const RhsIterator last( (~rhs).
end(j) );
1615 RhsIterator element( (~rhs).lowerBound( index, j ) );
1617 for( ; element!=last; ++element ) {
1646 template<
typename MT
1651 inline bool trySubAssign(
const UniUpperMatrix<MT,SO,DF>& lhs,
1652 const Vector<VT,TF>& rhs,
size_t row,
size_t column )
1654 return tryAddAssign( lhs, ~rhs, row, column );
1677 template<
typename MT1
1682 inline bool trySubAssign(
const UniUpperMatrix<MT1,SO1,DF>& lhs,
1683 const Matrix<MT2,SO2>& rhs,
size_t row,
size_t column )
1685 return tryAddAssign( lhs, ~rhs, row, column );
1708 template<
typename MT
1712 inline bool tryMultAssign(
const UniUpperMatrix<MT,SO,DF>& lhs,
1713 const Vector<VT,false>& rhs,
size_t row,
size_t column )
1723 return ( column < row || (~rhs).
size() <= column - row ||
isOne( (~rhs)[column-row] ) );
1746 template<
typename MT
1750 inline bool tryMultAssign(
const UniUpperMatrix<MT,SO,DF>& lhs,
1751 const Vector<VT,true>& rhs,
size_t row,
size_t column )
1761 return ( row < column || (~rhs).
size() <= row - column ||
isOne( (~rhs)[row-column] ) );
1781 template<
typename MT
1784 inline MT& derestrict( UniUpperMatrix<MT,SO,DF>& m )
1802 template<
typename MT,
bool SO,
bool DF >
1803 struct Rows< UniUpperMatrix<MT,SO,DF> > :
public Rows<MT>
1819 template<
typename MT,
bool SO,
bool DF >
1820 struct Columns< UniUpperMatrix<MT,SO,DF> > :
public Columns<MT>
1836 template<
typename MT,
bool SO,
bool DF >
1837 struct IsSquare< UniUpperMatrix<MT,SO,DF> > :
public IsTrue<true>
1853 template<
typename MT,
bool SO,
bool DF >
1854 struct IsUniUpper< UniUpperMatrix<MT,SO,DF> > :
public IsTrue<true>
1870 template<
typename MT,
bool SO,
bool DF >
1871 struct IsAdaptor< UniUpperMatrix<MT,SO,DF> > :
public IsTrue<true>
1887 template<
typename MT,
bool SO,
bool DF >
1888 struct IsRestricted< UniUpperMatrix<MT,SO,DF> > :
public IsTrue<true>
1904 template<
typename MT,
bool SO >
1905 struct HasConstDataAccess< UniUpperMatrix<MT,SO,true> > :
public IsTrue<true>
1921 template<
typename MT,
bool SO,
bool DF >
1922 struct IsAligned< UniUpperMatrix<MT,SO,DF> > :
public IsTrue< IsAligned<MT>::value >
1938 template<
typename MT,
bool SO,
bool DF >
1939 struct IsPadded< UniUpperMatrix<MT,SO,DF> > :
public IsTrue< IsPadded<MT>::value >
1955 template<
typename MT,
bool SO,
bool DF >
1956 struct IsResizable< UniUpperMatrix<MT,SO,DF> > :
public IsTrue< IsResizable<MT>::value >
1972 template<
typename MT,
bool SO,
bool DF >
1973 struct RemoveAdaptor< UniUpperMatrix<MT,SO,DF> >
1991 template<
typename MT,
bool SO,
bool DF >
1992 struct DerestrictTrait< UniUpperMatrix<MT,SO,DF> >
2010 template<
typename MT,
bool SO1,
bool DF,
typename T,
size_t M,
size_t N,
bool SO2 >
2011 struct AddTrait< UniUpperMatrix<MT,SO1,DF>, StaticMatrix<T,M,N,SO2> >
2013 typedef typename AddTrait< MT, StaticMatrix<T,M,N,SO2> >::Type Type;
2016 template<
typename T,
size_t M,
size_t N,
bool SO1,
typename MT,
bool SO2,
bool DF >
2017 struct AddTrait< StaticMatrix<T,M,N,SO1>, UniUpperMatrix<MT,SO2,DF> >
2019 typedef typename AddTrait< StaticMatrix<T,M,N,SO1>, MT >::Type Type;
2022 template<
typename MT,
bool SO1,
bool DF,
typename T,
size_t M,
size_t N,
bool SO2 >
2023 struct AddTrait< UniUpperMatrix<MT,SO1,DF>, HybridMatrix<T,M,N,SO2> >
2025 typedef typename AddTrait< MT, HybridMatrix<T,M,N,SO2> >::Type Type;
2028 template<
typename T,
size_t M,
size_t N,
bool SO1,
typename MT,
bool SO2,
bool DF >
2029 struct AddTrait< HybridMatrix<T,M,N,SO1>, UniUpperMatrix<MT,SO2,DF> >
2031 typedef typename AddTrait< HybridMatrix<T,M,N,SO1>, MT >::Type Type;
2034 template<
typename MT,
bool SO1,
bool DF,
typename T,
bool SO2 >
2035 struct AddTrait< UniUpperMatrix<MT,SO1,DF>, DynamicMatrix<T,SO2> >
2037 typedef typename AddTrait< MT, DynamicMatrix<T,SO2> >::Type Type;
2040 template<
typename T,
bool SO1,
typename MT,
bool SO2,
bool DF >
2041 struct AddTrait< DynamicMatrix<T,SO1>, UniUpperMatrix<MT,SO2,DF> >
2043 typedef typename AddTrait< DynamicMatrix<T,SO1>, MT >::Type Type;
2046 template<
typename MT,
bool SO1,
bool DF,
typename T,
bool AF,
bool PF,
bool SO2 >
2047 struct AddTrait< UniUpperMatrix<MT,SO1,DF>, CustomMatrix<T,AF,PF,SO2> >
2049 typedef typename AddTrait< MT, CustomMatrix<T,AF,PF,SO2> >::Type Type;
2052 template<
typename T,
bool AF,
bool PF,
bool SO1,
typename MT,
bool SO2,
bool DF >
2053 struct AddTrait< CustomMatrix<T,AF,PF,SO1>, UniUpperMatrix<MT,SO2,DF> >
2055 typedef typename AddTrait< CustomMatrix<T,AF,PF,SO1>, MT >::Type Type;
2058 template<
typename MT,
bool SO1,
bool DF,
typename T,
bool SO2 >
2059 struct AddTrait< UniUpperMatrix<MT,SO1,DF>, CompressedMatrix<T,SO2> >
2061 typedef typename AddTrait< MT, CompressedMatrix<T,SO2> >::Type Type;
2064 template<
typename T,
bool SO1,
typename MT,
bool SO2,
bool DF >
2065 struct AddTrait< CompressedMatrix<T,SO1>, UniUpperMatrix<MT,SO2,DF> >
2067 typedef typename AddTrait< CompressedMatrix<T,SO1>, MT >::Type Type;
2070 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2,
bool NF >
2071 struct AddTrait< UniUpperMatrix<MT1,SO1,DF1>, SymmetricMatrix<MT2,SO2,DF2,NF> >
2073 typedef typename AddTrait<MT1,MT2>::Type Type;
2076 template<
typename MT1,
bool SO1,
bool DF1,
bool NF,
typename MT2,
bool SO2,
bool DF2 >
2077 struct AddTrait< SymmetricMatrix<MT1,SO1,DF1,NF>, UniUpperMatrix<MT2,SO2,DF2> >
2079 typedef typename AddTrait<MT1,MT2>::Type Type;
2082 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2083 struct AddTrait< UniUpperMatrix<MT1,SO1,DF1>, HermitianMatrix<MT2,SO2,DF2> >
2085 typedef typename AddTrait<MT1,MT2>::Type Type;
2088 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2089 struct AddTrait< HermitianMatrix<MT1,SO1,DF1>, UniUpperMatrix<MT2,SO2,DF2> >
2091 typedef typename AddTrait<MT1,MT2>::Type Type;
2094 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2095 struct AddTrait< UniUpperMatrix<MT1,SO1,DF1>, LowerMatrix<MT2,SO2,DF2> >
2097 typedef typename AddTrait<MT1,MT2>::Type Type;
2100 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2101 struct AddTrait< LowerMatrix<MT1,SO1,DF1>, UniUpperMatrix<MT2,SO2,DF2> >
2103 typedef typename AddTrait<MT1,MT2>::Type Type;
2106 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2107 struct AddTrait< UniUpperMatrix<MT1,SO1,DF1>, UniLowerMatrix<MT2,SO2,DF2> >
2109 typedef typename AddTrait<MT1,MT2>::Type Type;
2112 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2113 struct AddTrait< UniLowerMatrix<MT1,SO1,DF1>, UniUpperMatrix<MT2,SO2,DF2> >
2115 typedef typename AddTrait<MT1,MT2>::Type Type;
2118 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2119 struct AddTrait< UniUpperMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
2121 typedef typename AddTrait<MT1,MT2>::Type Type;
2124 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2125 struct AddTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, UniUpperMatrix<MT2,SO2,DF2> >
2127 typedef typename AddTrait<MT1,MT2>::Type Type;
2130 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2131 struct AddTrait< UniUpperMatrix<MT1,SO1,DF1>, UpperMatrix<MT2,SO2,DF2> >
2133 typedef UpperMatrix< typename AddTrait<MT1,MT2>::Type > Type;
2136 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2137 struct AddTrait< UpperMatrix<MT1,SO1,DF1>, UniUpperMatrix<MT2,SO2,DF2> >
2139 typedef UpperMatrix< typename AddTrait<MT1,MT2>::Type > Type;
2142 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2143 struct AddTrait< UniUpperMatrix<MT1,SO1,DF1>, UniUpperMatrix<MT2,SO2,DF2> >
2145 typedef UpperMatrix< typename AddTrait<MT1,MT2>::Type > Type;
2161 template<
typename MT,
bool SO1,
bool DF,
typename T,
size_t M,
size_t N,
bool SO2 >
2162 struct SubTrait< UniUpperMatrix<MT,SO1,DF>, StaticMatrix<T,M,N,SO2> >
2164 typedef typename SubTrait< MT, StaticMatrix<T,M,N,SO2> >::Type Type;
2167 template<
typename T,
size_t M,
size_t N,
bool SO1,
typename MT,
bool SO2,
bool DF >
2168 struct SubTrait< StaticMatrix<T,M,N,SO1>, UniUpperMatrix<MT,SO2,DF> >
2170 typedef typename SubTrait< StaticMatrix<T,M,N,SO1>, MT >::Type Type;
2173 template<
typename MT,
bool SO1,
bool DF,
typename T,
size_t M,
size_t N,
bool SO2 >
2174 struct SubTrait< UniUpperMatrix<MT,SO1,DF>, HybridMatrix<T,M,N,SO2> >
2176 typedef typename SubTrait< MT, HybridMatrix<T,M,N,SO2> >::Type Type;
2179 template<
typename T,
size_t M,
size_t N,
bool SO1,
typename MT,
bool SO2,
bool DF >
2180 struct SubTrait< HybridMatrix<T,M,N,SO1>, UniUpperMatrix<MT,SO2,DF> >
2182 typedef typename SubTrait< HybridMatrix<T,M,N,SO1>, MT >::Type Type;
2185 template<
typename MT,
bool SO1,
bool DF,
typename T,
bool SO2 >
2186 struct SubTrait< UniUpperMatrix<MT,SO1,DF>, DynamicMatrix<T,SO2> >
2188 typedef typename SubTrait< MT, DynamicMatrix<T,SO2> >::Type Type;
2191 template<
typename T,
bool SO1,
typename MT,
bool SO2,
bool DF >
2192 struct SubTrait< DynamicMatrix<T,SO1>, UniUpperMatrix<MT,SO2,DF> >
2194 typedef typename SubTrait< DynamicMatrix<T,SO1>, MT >::Type Type;
2197 template<
typename MT,
bool SO1,
bool DF,
typename T,
bool AF,
bool PF,
bool SO2 >
2198 struct SubTrait< UniUpperMatrix<MT,SO1,DF>, CustomMatrix<T,AF,PF,SO2> >
2200 typedef typename SubTrait< MT, CustomMatrix<T,AF,PF,SO2> >::Type Type;
2203 template<
typename T,
bool AF,
bool PF,
bool SO1,
typename MT,
bool SO2,
bool DF >
2204 struct SubTrait< CustomMatrix<T,AF,PF,SO1>, UniUpperMatrix<MT,SO2,DF> >
2206 typedef typename SubTrait< CustomMatrix<T,AF,PF,SO1>, MT >::Type Type;
2209 template<
typename MT,
bool SO1,
bool DF,
typename T,
bool SO2 >
2210 struct SubTrait< UniUpperMatrix<MT,SO1,DF>, CompressedMatrix<T,SO2> >
2212 typedef typename SubTrait< MT, CompressedMatrix<T,SO2> >::Type Type;
2215 template<
typename T,
bool SO1,
typename MT,
bool SO2,
bool DF >
2216 struct SubTrait< CompressedMatrix<T,SO1>, UniUpperMatrix<MT,SO2,DF> >
2218 typedef typename SubTrait< CompressedMatrix<T,SO1>, MT >::Type Type;
2221 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2,
bool NF >
2222 struct SubTrait< UniUpperMatrix<MT1,SO1,DF1>, SymmetricMatrix<MT2,SO2,DF2,NF> >
2224 typedef typename SubTrait<MT1,MT2>::Type Type;
2227 template<
typename MT1,
bool SO1,
bool DF1,
bool NF,
typename MT2,
bool SO2,
bool DF2 >
2228 struct SubTrait< SymmetricMatrix<MT1,SO1,DF1,NF>, UniUpperMatrix<MT2,SO2,DF2> >
2230 typedef typename SubTrait<MT1,MT2>::Type Type;
2233 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2234 struct SubTrait< UniUpperMatrix<MT1,SO1,DF1>, HermitianMatrix<MT2,SO2,DF2> >
2236 typedef typename SubTrait<MT1,MT2>::Type Type;
2239 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2240 struct SubTrait< HermitianMatrix<MT1,SO1,DF1>, UniUpperMatrix<MT2,SO2,DF2> >
2242 typedef typename SubTrait<MT1,MT2>::Type Type;
2245 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2246 struct SubTrait< UniUpperMatrix<MT1,SO1,DF1>, LowerMatrix<MT2,SO2,DF2> >
2248 typedef typename SubTrait<MT1,MT2>::Type Type;
2251 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2252 struct SubTrait< LowerMatrix<MT1,SO1,DF1>, UniUpperMatrix<MT2,SO2,DF2> >
2254 typedef typename SubTrait<MT1,MT2>::Type Type;
2257 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2258 struct SubTrait< UniUpperMatrix<MT1,SO1,DF1>, UniLowerMatrix<MT2,SO2,DF2> >
2260 typedef typename SubTrait<MT1,MT2>::Type Type;
2263 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2264 struct SubTrait< UniLowerMatrix<MT1,SO1,DF1>, UniUpperMatrix<MT2,SO2,DF2> >
2266 typedef typename SubTrait<MT1,MT2>::Type Type;
2269 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2270 struct SubTrait< UniUpperMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
2272 typedef typename SubTrait<MT1,MT2>::Type Type;
2275 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2276 struct SubTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, UniUpperMatrix<MT2,SO2,DF2> >
2278 typedef typename SubTrait<MT1,MT2>::Type Type;
2281 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2282 struct SubTrait< UniUpperMatrix<MT1,SO1,DF1>, UpperMatrix<MT2,SO2,DF2> >
2284 typedef UpperMatrix< typename SubTrait<MT1,MT2>::Type > Type;
2287 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2288 struct SubTrait< UpperMatrix<MT1,SO1,DF1>, UniUpperMatrix<MT2,SO2,DF2> >
2290 typedef UpperMatrix< typename SubTrait<MT1,MT2>::Type > Type;
2293 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2294 struct SubTrait< UniUpperMatrix<MT1,SO1,DF1>, UniUpperMatrix<MT2,SO2,DF2> >
2296 typedef UpperMatrix< typename SubTrait<MT1,MT2>::Type > Type;
2312 template<
typename MT,
bool SO,
bool DF,
typename T >
2313 struct MultTrait< UniUpperMatrix<MT,SO,DF>, T, typename EnableIf< IsNumeric<T> >::Type >
2315 typedef UpperMatrix< typename MultTrait<MT,T>::Type > Type;
2318 template<
typename T,
typename MT,
bool SO,
bool DF >
2319 struct MultTrait< T, UniUpperMatrix<MT,SO,DF>, typename EnableIf< IsNumeric<T> >::Type >
2321 typedef UpperMatrix< typename MultTrait<T,MT>::Type > Type;
2324 template<
typename MT,
bool SO,
bool DF,
typename T,
size_t N >
2325 struct MultTrait< UniUpperMatrix<MT,SO,DF>, StaticVector<T,N,false> >
2327 typedef typename MultTrait< MT, StaticVector<T,N,false> >::Type Type;
2330 template<
typename T,
size_t N,
typename MT,
bool SO,
bool DF >
2331 struct MultTrait< StaticVector<T,N,true>, UniUpperMatrix<MT,SO,DF> >
2333 typedef typename MultTrait< StaticVector<T,N,true>, MT >::Type Type;
2336 template<
typename MT,
bool SO,
bool DF,
typename T,
size_t N >
2337 struct MultTrait< UniUpperMatrix<MT,SO,DF>, HybridVector<T,N,false> >
2339 typedef typename MultTrait< MT, HybridVector<T,N,false> >::Type Type;
2342 template<
typename T,
size_t N,
typename MT,
bool SO,
bool DF >
2343 struct MultTrait< HybridVector<T,N,true>, UniUpperMatrix<MT,SO,DF> >
2345 typedef typename MultTrait< HybridVector<T,N,true>, MT >::Type Type;
2348 template<
typename MT,
bool SO,
bool DF,
typename T >
2349 struct MultTrait< UniUpperMatrix<MT,SO,DF>, DynamicVector<T,false> >
2351 typedef typename MultTrait< MT, DynamicVector<T,false> >::Type Type;
2354 template<
typename T,
typename MT,
bool SO,
bool DF >
2355 struct MultTrait< DynamicVector<T,true>, UniUpperMatrix<MT,SO,DF> >
2357 typedef typename MultTrait< DynamicVector<T,true>, MT >::Type Type;
2360 template<
typename MT,
bool SO,
bool DF,
typename T,
bool AF,
bool PF >
2361 struct MultTrait< UniUpperMatrix<MT,SO,DF>, CustomVector<T,AF,PF,false> >
2363 typedef typename MultTrait< MT, CustomVector<T,AF,PF,false> >::Type Type;
2366 template<
typename T,
bool AF,
bool PF,
typename MT,
bool SO,
bool DF >
2367 struct MultTrait< CustomVector<T,AF,PF,true>, UniUpperMatrix<MT,SO,DF> >
2369 typedef typename MultTrait< CustomVector<T,AF,PF,true>, MT >::Type Type;
2372 template<
typename MT,
bool SO,
bool DF,
typename T >
2373 struct MultTrait< UniUpperMatrix<MT,SO,DF>, CompressedVector<T,false> >
2375 typedef typename MultTrait< MT, CompressedVector<T,false> >::Type Type;
2378 template<
typename T,
typename MT,
bool SO,
bool DF >
2379 struct MultTrait< CompressedVector<T,true>, UniUpperMatrix<MT,SO,DF> >
2381 typedef typename MultTrait< CompressedVector<T,true>, MT >::Type Type;
2384 template<
typename MT,
bool SO1,
bool DF,
typename T,
size_t M,
size_t N,
bool SO2 >
2385 struct MultTrait< UniUpperMatrix<MT,SO1,DF>, StaticMatrix<T,M,N,SO2> >
2387 typedef typename MultTrait< MT, StaticMatrix<T,M,N,SO2> >::Type Type;
2390 template<
typename T,
size_t M,
size_t N,
bool SO1,
typename MT,
bool SO2,
bool DF >
2391 struct MultTrait< StaticMatrix<T,M,N,SO1>, UniUpperMatrix<MT,SO2,DF> >
2393 typedef typename MultTrait< StaticMatrix<T,M,N,SO1>, MT >::Type Type;
2396 template<
typename MT,
bool SO1,
bool DF,
typename T,
size_t M,
size_t N,
bool SO2 >
2397 struct MultTrait< UniUpperMatrix<MT,SO1,DF>, HybridMatrix<T,M,N,SO2> >
2399 typedef typename MultTrait< MT, HybridMatrix<T,M,N,SO2> >::Type Type;
2402 template<
typename T,
size_t M,
size_t N,
bool SO1,
typename MT,
bool SO2,
bool DF >
2403 struct MultTrait< HybridMatrix<T,M,N,SO1>, UniUpperMatrix<MT,SO2,DF> >
2405 typedef typename MultTrait< HybridMatrix<T,M,N,SO1>, MT >::Type Type;
2408 template<
typename MT,
bool SO1,
bool DF,
typename T,
bool SO2 >
2409 struct MultTrait< UniUpperMatrix<MT,SO1,DF>, DynamicMatrix<T,SO2> >
2411 typedef typename MultTrait< MT, DynamicMatrix<T,SO2> >::Type Type;
2414 template<
typename T,
bool SO1,
typename MT,
bool SO2,
bool DF >
2415 struct MultTrait< DynamicMatrix<T,SO1>, UniUpperMatrix<MT,SO2,DF> >
2417 typedef typename MultTrait< DynamicMatrix<T,SO1>, MT >::Type Type;
2420 template<
typename MT,
bool SO1,
bool DF,
typename T,
bool AF,
bool PF,
bool SO2 >
2421 struct MultTrait< UniUpperMatrix<MT,SO1,DF>, CustomMatrix<T,AF,PF,SO2> >
2423 typedef typename MultTrait< MT, CustomMatrix<T,AF,PF,SO2> >::Type Type;
2426 template<
typename T,
bool AF,
bool PF,
bool SO1,
typename MT,
bool SO2,
bool DF >
2427 struct MultTrait< CustomMatrix<T,AF,PF,SO1>, UniUpperMatrix<MT,SO2,DF> >
2429 typedef typename MultTrait< CustomMatrix<T,AF,PF,SO1>, MT >::Type Type;
2432 template<
typename MT,
bool SO1,
bool DF,
typename T,
bool SO2 >
2433 struct MultTrait< UniUpperMatrix<MT,SO1,DF>, CompressedMatrix<T,SO2> >
2435 typedef typename MultTrait< MT, CompressedMatrix<T,SO2> >::Type Type;
2438 template<
typename T,
bool SO1,
typename MT,
bool SO2,
bool DF >
2439 struct MultTrait< CompressedMatrix<T,SO1>, UniUpperMatrix<MT,SO2,DF> >
2441 typedef typename MultTrait< CompressedMatrix<T,SO1>, MT >::Type Type;
2444 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2,
bool NF >
2445 struct MultTrait< UniUpperMatrix<MT1,SO1,DF1>, SymmetricMatrix<MT2,SO2,DF2,NF> >
2447 typedef typename MultTrait<MT1,MT2>::Type Type;
2450 template<
typename MT1,
bool SO1,
bool DF1,
bool NF,
typename MT2,
bool SO2,
bool DF2 >
2451 struct MultTrait< SymmetricMatrix<MT1,SO1,DF1,NF>, UniUpperMatrix<MT2,SO2,DF2> >
2453 typedef typename MultTrait<MT1,MT2>::Type Type;
2456 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2457 struct MultTrait< UniUpperMatrix<MT1,SO1,DF1>, HermitianMatrix<MT2,SO2,DF2> >
2459 typedef typename MultTrait<MT1,MT2>::Type Type;
2462 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2463 struct MultTrait< HermitianMatrix<MT1,SO1,DF1>, UniUpperMatrix<MT2,SO2,DF2> >
2465 typedef typename MultTrait<MT1,MT2>::Type Type;
2468 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2469 struct MultTrait< UniUpperMatrix<MT1,SO1,DF1>, LowerMatrix<MT2,SO2,DF2> >
2471 typedef typename MultTrait<MT1,MT2>::Type Type;
2474 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2475 struct MultTrait< LowerMatrix<MT1,SO1,DF1>, UniUpperMatrix<MT2,SO2,DF2> >
2477 typedef typename MultTrait<MT1,MT2>::Type Type;
2480 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2481 struct MultTrait< UniUpperMatrix<MT1,SO1,DF1>, UniLowerMatrix<MT2,SO2,DF2> >
2483 typedef typename MultTrait<MT1,MT2>::Type Type;
2486 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2487 struct MultTrait< UniLowerMatrix<MT1,SO1,DF1>, UniUpperMatrix<MT2,SO2,DF2> >
2489 typedef typename MultTrait<MT1,MT2>::Type Type;
2492 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2493 struct MultTrait< UniUpperMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
2495 typedef typename MultTrait<MT1,MT2>::Type Type;
2498 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2499 struct MultTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, UniUpperMatrix<MT2,SO2,DF2> >
2501 typedef typename MultTrait<MT1,MT2>::Type Type;
2504 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2505 struct MultTrait< UniUpperMatrix<MT1,SO1,DF1>, UpperMatrix<MT2,SO2,DF2> >
2507 typedef UpperMatrix< typename MultTrait<MT1,MT2>::Type > Type;
2510 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2511 struct MultTrait< UpperMatrix<MT1,SO1,DF1>, UniUpperMatrix<MT2,SO2,DF2> >
2513 typedef UpperMatrix< typename MultTrait<MT1,MT2>::Type > Type;
2516 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2517 struct MultTrait< UniUpperMatrix<MT1,SO1,DF1>, UniUpperMatrix<MT2,SO2,DF2> >
2519 typedef UniUpperMatrix< typename MultTrait<MT1,MT2>::Type > Type;
2535 template<
typename MT,
bool SO,
bool DF,
typename T >
2536 struct DivTrait< UniUpperMatrix<MT,SO,DF>, T, typename EnableIf< IsNumeric<T> >::Type >
2538 typedef UpperMatrix< typename DivTrait<MT,T>::Type > Type;
2554 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2555 struct MathTrait< UniUpperMatrix<MT1,SO1,DF1>, UniUpperMatrix<MT2,SO2,DF2> >
2557 typedef UniUpperMatrix< typename MathTrait<MT1,MT2>::HighType > HighType;
2558 typedef UniUpperMatrix< typename MathTrait<MT1,MT2>::LowType > LowType;
2574 template<
typename MT,
bool SO,
bool DF >
2575 struct SubmatrixTrait< UniUpperMatrix<MT,SO,DF> >
2577 typedef typename SubmatrixTrait<MT>::Type Type;
2593 template<
typename MT,
bool SO,
bool DF >
2594 struct RowTrait< UniUpperMatrix<MT,SO,DF> >
2596 typedef typename RowTrait<MT>::Type Type;
2612 template<
typename MT,
bool SO,
bool DF >
2613 struct ColumnTrait< UniUpperMatrix<MT,SO,DF> >
2615 typedef typename ColumnTrait<MT>::Type Type;
bool isOne(const DiagonalProxy< MT > &proxy)
Returns whether the represented element is 1.
Definition: DiagonalProxy.h:609
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
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.
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
UniUpperMatrix specialization for sparse matrices.
void reset(const DiagonalProxy< MT > &proxy)
Resetting the represented element to the default initial values.
Definition: DiagonalProxy.h:507
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 implementation of the base template of the UniUpperMatrix.
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.
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.
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.
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 isOne shim.
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.
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 > >, 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
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:116
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: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.
boost::false_type FalseType
Type/value traits base class.The FalseType class is used as base class for type traits and value trai...
Definition: FalseType.h:61
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
boost::true_type TrueType
Type traits base class.The TrueType class is used as base class for type traits and value traits that...
Definition: TrueType.h:61
UniUpperMatrix specialization for dense matrices.
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
bool isIdentity(const DenseMatrix< MT, SO > &dm)
Checks if the give dense matrix is an identity matrix.
Definition: DenseMatrix.h:1605