35 #ifndef _BLAZE_MATH_ADAPTORS_UNILOWERMATRIX_H_ 36 #define _BLAZE_MATH_ADAPTORS_UNILOWERMATRIX_H_ 107 template<
typename MT,
bool SO,
bool DF >
108 inline void reset( UniLowerMatrix<MT,SO,DF>& m );
110 template<
typename MT,
bool SO,
bool DF >
111 inline void reset( UniLowerMatrix<MT,SO,DF>& m,
size_t i );
113 template<
typename MT,
bool SO,
bool DF >
114 inline void clear( UniLowerMatrix<MT,SO,DF>& m );
116 template<
bool RF,
typename MT,
bool SO,
bool DF >
117 inline bool isDefault(
const UniLowerMatrix<MT,SO,DF>& m );
119 template<
typename MT,
bool SO,
bool DF >
120 inline bool isIntact(
const UniLowerMatrix<MT,SO,DF>& m );
122 template<
typename MT,
bool SO,
bool DF >
123 inline void swap( UniLowerMatrix<MT,SO,DF>& a, UniLowerMatrix<MT,SO,DF>& b ) noexcept;
135 template<
typename MT
158 template<
typename MT
175 template<
typename MT
201 return ( m.rows() == 0UL );
223 return isIdentity<RF>( m );
287 template<
typename MT
305 template<
typename MT
354 invert<flag>( derestrict( m ) );
381 template<
typename MT1,
bool SO1,
typename MT2,
typename MT3,
typename MT4,
bool SO2 >
400 const size_t n( (~A).
rows() );
402 decltype(
auto) U2( derestrict( ~U ) );
412 for(
size_t i=0UL; i<n; ++i ) {
437 template<
typename MT
455 const bool containsDiagonal( column < row + (~rhs).
size() );
456 const size_t iend(
min( column - row, (~rhs).
size() ) );
458 for(
size_t i=0UL; i<iend; ++i ) {
463 if( containsDiagonal && !
isOne( (~rhs)[iend] ) )
488 template<
typename MT
503 if( row >= column + (~rhs).
size() )
506 const bool containsDiagonal( row >= column );
507 const size_t ibegin( ( !containsDiagonal )?( 0UL ):( row - column + 1UL ) );
509 if( containsDiagonal && !
isOne( (~rhs)[row-column] ) )
512 for(
size_t i=ibegin; i<(~rhs).
size(); ++i ) {
539 template<
typename MT
559 const bool containsDiagonal( column < row + (~rhs).
size() );
560 const size_t index( column - row );
561 const RhsIterator last( (~rhs).lowerBound( index ) );
563 if( containsDiagonal ) {
564 if( last == (~rhs).
end() || last->index() != index || !
isOne( last->value() ) )
568 for( RhsIterator element=(~rhs).begin(); element!=last; ++element ) {
595 template<
typename MT
612 if( row >= column + (~rhs).
size() )
615 const bool containsDiagonal( row >= column );
616 const size_t index( ( containsDiagonal )?( row - column ):( 0UL ) );
617 const RhsIterator last( (~rhs).
end() );
618 RhsIterator element( (~rhs).lowerBound( index ) );
620 if( containsDiagonal ) {
621 if( element == last || element->index() != index || !
isOne( element->value() ) )
626 for( ; element!=last; ++element ) {
653 template<
typename MT1
669 const size_t M( (~rhs).
rows() );
670 const size_t N( (~rhs).
columns() );
672 if( row + 1UL >= column + N )
675 const size_t iend(
min( column + N - row, M ) );
677 for(
size_t i=0UL; i<iend; ++i )
679 const bool containsDiagonal( row + i >= column );
681 if( containsDiagonal && !
isOne( (~rhs)(i,row+i-column) ) )
684 const size_t jbegin( ( containsDiagonal )?( row + i - column + 1UL ):( 0UL ) );
686 for(
size_t j=jbegin; j<N; ++j ) {
714 template<
typename MT1
730 const size_t M( (~rhs).
rows() );
731 const size_t N( (~rhs).
columns() );
733 if( row + 1UL >= column + N )
736 const size_t jbegin( ( row < column )?( 0UL ):( row - column ) );
738 for(
size_t j=jbegin; j<N; ++j )
740 const size_t iend(
min( column + j - row, M ) );
742 for(
size_t i=0UL; i<iend; ++i ) {
747 const bool containsDiagonal( column + j < row + M );
749 if( containsDiagonal && !
isOne( (~rhs)(iend,j) ) )
775 template<
typename MT1
793 const size_t M( (~rhs).
rows() );
794 const size_t N( (~rhs).
columns() );
796 if( row + 1UL >= column + N )
799 const size_t iend(
min( column + N - row, M ) );
801 for(
size_t i=0UL; i<iend; ++i )
803 const bool containsDiagonal( row + i >= column );
804 const size_t index( ( containsDiagonal )?( row + i - column ):( 0UL ) );
806 const RhsIterator last( (~rhs).
end(i) );
807 RhsIterator element( (~rhs).lowerBound( i, index ) );
809 if( containsDiagonal ) {
810 if( element == last || ( element->index() != index ) || !
isOne( element->value() ) )
815 for( ; element!=last; ++element ) {
843 template<
typename MT1
861 const size_t M( (~rhs).
rows() );
862 const size_t N( (~rhs).
columns() );
864 if( row + 1UL >= column + N )
867 const size_t jbegin( ( row < column )?( 0UL ):( row - column ) );
869 for(
size_t j=jbegin; j<N; ++j )
871 const bool containsDiagonal( column + j < row + M );
873 const size_t index( column + j - row );
874 const RhsIterator last( (~rhs).lowerBound(
min( index, M ), j ) );
876 if( containsDiagonal ) {
877 if( last == (~rhs).
end(j) || ( last->index() != index ) || !
isOne( last->value() ) )
881 for( RhsIterator element=(~rhs).begin(j); element!=last; ++element ) {
910 template<
typename MT
928 const size_t iend(
min( column - row + 1UL, (~rhs).
size() ) );
930 for(
size_t i=0UL; i<iend; ++i ) {
958 template<
typename MT
973 const size_t ibegin( ( row <= column )?( 0UL ):( row - column ) );
975 for(
size_t i=ibegin; i<(~rhs).
size(); ++i ) {
1003 template<
typename MT
1023 const RhsIterator last( (~rhs).lowerBound( column - row + 1UL ) );
1025 for( RhsIterator element=(~rhs).
begin(); element!=last; ++element ) {
1053 template<
typename MT
1070 const RhsIterator last( (~rhs).
end() );
1071 RhsIterator element( (~rhs).lowerBound( ( row <= column )?( 0UL ):( row - column ) ) );
1073 for( ; element!=last; ++element ) {
1101 template<
typename MT1
1117 const size_t M( (~rhs).
rows() );
1118 const size_t N( (~rhs).
columns() );
1120 if( row + 1UL >= column + N )
1123 const size_t iend(
min( column + N - row, M ) );
1125 for(
size_t i=0UL; i<iend; ++i )
1127 const bool containsDiagonal( row + i >= column );
1128 const size_t jbegin( ( containsDiagonal )?( row + i - column ):( 0UL ) );
1130 for(
size_t j=jbegin; j<N; ++j ) {
1159 template<
typename MT1
1175 const size_t M( (~rhs).
rows() );
1176 const size_t N( (~rhs).
columns() );
1178 if( row + 1UL >= column + N )
1181 const size_t jbegin( ( row <= column )?( 0UL ):( row - column ) );
1183 for(
size_t j=jbegin; j<N; ++j )
1185 const size_t iend(
min( column + j - row + 1UL, M ) );
1187 for(
size_t i=0UL; i<iend; ++i ) {
1216 template<
typename MT1
1234 const size_t M( (~rhs).
rows() );
1235 const size_t N( (~rhs).
columns() );
1237 if( row + 1UL >= column + N )
1240 const size_t iend(
min( column + N - row, M ) );
1242 for(
size_t i=0UL; i<iend; ++i )
1244 const bool containsDiagonal( row + i >= column );
1245 const size_t index( ( containsDiagonal )?( row + i - column ):( 0UL ) );
1247 const RhsIterator last( (~rhs).
end(i) );
1248 RhsIterator element( (~rhs).lowerBound( i, index ) );
1250 for( ; element!=last; ++element ) {
1279 template<
typename MT1
1297 const size_t M( (~rhs).
rows() );
1298 const size_t N( (~rhs).
columns() );
1300 if( row + 1UL >= column + N )
1303 const size_t jbegin( ( row < column )?( 0UL ):( row - column ) );
1305 for(
size_t j=jbegin; j<N; ++j )
1307 const size_t index( column + j - row + 1UL );
1308 const RhsIterator last( (~rhs).lowerBound(
min( index, M ), j ) );
1310 for( RhsIterator element=(~rhs).
begin(j); element!=last; ++element ) {
1339 template<
typename MT
1347 return tryAddAssign( lhs, ~rhs, row, column );
1370 template<
typename MT1
1378 return tryAddAssign( lhs, ~rhs, row, column );
1401 template<
typename MT
1416 return ( column < row || (~rhs).
size() <= column - row ||
isOne( (~rhs)[column-row] ) );
1439 template<
typename MT
1454 return ( row < column || (~rhs).
size() <= row - column ||
isOne( (~rhs)[row-column] ) );
1477 template<
typename MT1
1494 const size_t M( (~rhs).
rows() );
1495 const size_t N( (~rhs).
columns() );
1497 if( ( row + 1UL >= column + N ) || ( column + 1UL >= row + M ) )
1500 size_t i( row < column ? column - row : 0UL );
1501 size_t j( column < row ? row - column : 0UL );
1503 for( ; i<M && j<N; ++i, ++j )
1505 if( !
isOne( (~rhs)(i,j) ) )
1531 template<
typename MT
1539 return tryMultAssign( lhs, ~rhs, row, column );
1559 template<
typename MT
1580 template<
typename MT,
bool SO,
bool DF >
1581 struct Rows< UniLowerMatrix<MT,SO,DF> >
1598 template<
typename MT,
bool SO,
bool DF >
1599 struct Columns< UniLowerMatrix<MT,SO,DF> >
1616 template<
typename MT,
bool SO,
bool DF >
1617 struct IsSquare< UniLowerMatrix<MT,SO,DF> >
1634 template<
typename MT,
bool SO,
bool DF >
1635 struct IsUniLower< UniLowerMatrix<MT,SO,DF> >
1652 template<
typename MT,
bool SO,
bool DF >
1653 struct IsAdaptor< UniLowerMatrix<MT,SO,DF> >
1670 template<
typename MT,
bool SO,
bool DF >
1688 template<
typename MT,
bool SO >
1706 template<
typename MT,
bool SO,
bool DF >
1707 struct IsAligned< UniLowerMatrix<MT,SO,DF> >
1724 template<
typename MT,
bool SO,
bool DF >
1725 struct IsPadded< UniLowerMatrix<MT,SO,DF> >
1742 template<
typename MT,
bool SO,
bool DF >
1760 template<
typename MT,
bool SO,
bool DF >
1778 template<
typename MT,
bool SO,
bool DF >
1797 template<
typename MT,
bool SO1,
bool DF,
typename T,
size_t M,
size_t N,
bool SO2 >
1798 struct AddTrait< UniLowerMatrix<MT,SO1,DF>, StaticMatrix<T,M,N,SO2> >
1803 template<
typename T,
size_t M,
size_t N,
bool SO1,
typename MT,
bool SO2,
bool DF >
1804 struct AddTrait< StaticMatrix<T,M,N,SO1>, UniLowerMatrix<MT,SO2,DF> >
1809 template<
typename MT,
bool SO1,
bool DF,
typename T,
size_t M,
size_t N,
bool SO2 >
1810 struct AddTrait< UniLowerMatrix<MT,SO1,DF>, HybridMatrix<T,M,N,SO2> >
1815 template<
typename T,
size_t M,
size_t N,
bool SO1,
typename MT,
bool SO2,
bool DF >
1816 struct AddTrait< HybridMatrix<T,M,N,SO1>, UniLowerMatrix<MT,SO2,DF> >
1821 template<
typename MT,
bool SO1,
bool DF,
typename T,
bool SO2 >
1822 struct AddTrait< UniLowerMatrix<MT,SO1,DF>, DynamicMatrix<T,SO2> >
1827 template<
typename T,
bool SO1,
typename MT,
bool SO2,
bool DF >
1828 struct AddTrait< DynamicMatrix<T,SO1>, UniLowerMatrix<MT,SO2,DF> >
1833 template<
typename MT,
bool SO1,
bool DF,
typename T,
bool AF,
bool PF,
bool SO2 >
1834 struct AddTrait< UniLowerMatrix<MT,SO1,DF>, CustomMatrix<T,AF,PF,SO2> >
1839 template<
typename T,
bool AF,
bool PF,
bool SO1,
typename MT,
bool SO2,
bool DF >
1840 struct AddTrait< CustomMatrix<T,AF,PF,SO1>, UniLowerMatrix<MT,SO2,DF> >
1845 template<
typename MT,
bool SO1,
bool DF,
typename T,
bool SO2 >
1846 struct AddTrait< UniLowerMatrix<MT,SO1,DF>, CompressedMatrix<T,SO2> >
1851 template<
typename T,
bool SO1,
typename MT,
bool SO2,
bool DF >
1852 struct AddTrait< CompressedMatrix<T,SO1>, UniLowerMatrix<MT,SO2,DF> >
1857 template<
typename MT,
bool SO1,
bool DF,
typename T,
bool SO2 >
1858 struct AddTrait< UniLowerMatrix<MT,SO1,DF>, IdentityMatrix<T,SO2> >
1863 template<
typename T,
bool SO1,
typename MT,
bool SO2,
bool DF >
1864 struct AddTrait< IdentityMatrix<T,SO1>, UniLowerMatrix<MT,SO2,DF> >
1869 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2,
bool NF >
1870 struct AddTrait< UniLowerMatrix<MT1,SO1,DF1>, SymmetricMatrix<MT2,SO2,DF2,NF> >
1875 template<
typename MT1,
bool SO1,
bool DF1,
bool NF,
typename MT2,
bool SO2,
bool DF2 >
1876 struct AddTrait< SymmetricMatrix<MT1,SO1,DF1,NF>, UniLowerMatrix<MT2,SO2,DF2> >
1881 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1882 struct AddTrait< UniLowerMatrix<MT1,SO1,DF1>, HermitianMatrix<MT2,SO2,DF2> >
1887 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1888 struct AddTrait< HermitianMatrix<MT1,SO1,DF1>, UniLowerMatrix<MT2,SO2,DF2> >
1893 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1894 struct AddTrait< UniLowerMatrix<MT1,SO1,DF1>, LowerMatrix<MT2,SO2,DF2> >
1899 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1900 struct AddTrait< LowerMatrix<MT1,SO1,DF1>, UniLowerMatrix<MT2,SO2,DF2> >
1905 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1906 struct AddTrait< UniLowerMatrix<MT1,SO1,DF1>, UniLowerMatrix<MT2,SO2,DF2> >
1924 template<
typename MT,
bool SO1,
bool DF,
typename T,
size_t M,
size_t N,
bool SO2 >
1925 struct SubTrait< UniLowerMatrix<MT,SO1,DF>, StaticMatrix<T,M,N,SO2> >
1930 template<
typename T,
size_t M,
size_t N,
bool SO1,
typename MT,
bool SO2,
bool DF >
1931 struct SubTrait< StaticMatrix<T,M,N,SO1>, UniLowerMatrix<MT,SO2,DF> >
1936 template<
typename MT,
bool SO1,
bool DF,
typename T,
size_t M,
size_t N,
bool SO2 >
1937 struct SubTrait< UniLowerMatrix<MT,SO1,DF>, HybridMatrix<T,M,N,SO2> >
1942 template<
typename T,
size_t M,
size_t N,
bool SO1,
typename MT,
bool SO2,
bool DF >
1943 struct SubTrait< HybridMatrix<T,M,N,SO1>, UniLowerMatrix<MT,SO2,DF> >
1948 template<
typename MT,
bool SO1,
bool DF,
typename T,
bool SO2 >
1949 struct SubTrait< UniLowerMatrix<MT,SO1,DF>, DynamicMatrix<T,SO2> >
1954 template<
typename T,
bool SO1,
typename MT,
bool SO2,
bool DF >
1955 struct SubTrait< DynamicMatrix<T,SO1>, UniLowerMatrix<MT,SO2,DF> >
1960 template<
typename MT,
bool SO1,
bool DF,
typename T,
bool AF,
bool PF,
bool SO2 >
1961 struct SubTrait< UniLowerMatrix<MT,SO1,DF>, CustomMatrix<T,AF,PF,SO2> >
1966 template<
typename T,
bool AF,
bool PF,
bool SO1,
typename MT,
bool SO2,
bool DF >
1967 struct SubTrait< CustomMatrix<T,AF,PF,SO1>, UniLowerMatrix<MT,SO2,DF> >
1972 template<
typename MT,
bool SO1,
bool DF,
typename T,
bool SO2 >
1973 struct SubTrait< UniLowerMatrix<MT,SO1,DF>, CompressedMatrix<T,SO2> >
1978 template<
typename T,
bool SO1,
typename MT,
bool SO2,
bool DF >
1979 struct SubTrait< CompressedMatrix<T,SO1>, UniLowerMatrix<MT,SO2,DF> >
1984 template<
typename MT,
bool SO1,
bool DF,
typename T,
bool SO2 >
1985 struct SubTrait< UniLowerMatrix<MT,SO1,DF>, IdentityMatrix<T,SO2> >
1990 template<
typename T,
bool SO1,
typename MT,
bool SO2,
bool DF >
1991 struct SubTrait< IdentityMatrix<T,SO1>, UniLowerMatrix<MT,SO2,DF> >
1996 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2,
bool NF >
1997 struct SubTrait< UniLowerMatrix<MT1,SO1,DF1>, SymmetricMatrix<MT2,SO2,DF2,NF> >
2002 template<
typename MT1,
bool SO1,
bool DF1,
bool NF,
typename MT2,
bool SO2,
bool DF2 >
2003 struct SubTrait< SymmetricMatrix<MT1,SO1,DF1,NF>, UniLowerMatrix<MT2,SO2,DF2> >
2008 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2009 struct SubTrait< UniLowerMatrix<MT1,SO1,DF1>, HermitianMatrix<MT2,SO2,DF2> >
2014 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2015 struct SubTrait< HermitianMatrix<MT1,SO1,DF1>, UniLowerMatrix<MT2,SO2,DF2> >
2020 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2021 struct SubTrait< UniLowerMatrix<MT1,SO1,DF1>, LowerMatrix<MT2,SO2,DF2> >
2026 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2027 struct SubTrait< LowerMatrix<MT1,SO1,DF1>, UniLowerMatrix<MT2,SO2,DF2> >
2032 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2033 struct SubTrait< UniLowerMatrix<MT1,SO1,DF1>, UniLowerMatrix<MT2,SO2,DF2> >
2051 template<
typename MT,
bool SO1,
bool DF,
typename T,
size_t M,
size_t N,
bool SO2 >
2052 struct SchurTrait< UniLowerMatrix<MT,SO1,DF>, StaticMatrix<T,M,N,SO2> >
2057 template<
typename T,
size_t M,
size_t N,
bool SO1,
typename MT,
bool SO2,
bool DF >
2058 struct SchurTrait< StaticMatrix<T,M,N,SO1>, UniLowerMatrix<MT,SO2,DF> >
2063 template<
typename MT,
bool SO1,
bool DF,
typename T,
size_t M,
size_t N,
bool SO2 >
2064 struct SchurTrait< UniLowerMatrix<MT,SO1,DF>, HybridMatrix<T,M,N,SO2> >
2069 template<
typename T,
size_t M,
size_t N,
bool SO1,
typename MT,
bool SO2,
bool DF >
2070 struct SchurTrait< HybridMatrix<T,M,N,SO1>, UniLowerMatrix<MT,SO2,DF> >
2075 template<
typename MT,
bool SO1,
bool DF,
typename T,
bool SO2 >
2076 struct SchurTrait< UniLowerMatrix<MT,SO1,DF>, DynamicMatrix<T,SO2> >
2081 template<
typename T,
bool SO1,
typename MT,
bool SO2,
bool DF >
2082 struct SchurTrait< DynamicMatrix<T,SO1>, UniLowerMatrix<MT,SO2,DF> >
2087 template<
typename MT,
bool SO1,
bool DF,
typename T,
bool AF,
bool PF,
bool SO2 >
2088 struct SchurTrait< UniLowerMatrix<MT,SO1,DF>, CustomMatrix<T,AF,PF,SO2> >
2093 template<
typename T,
bool AF,
bool PF,
bool SO1,
typename MT,
bool SO2,
bool DF >
2094 struct SchurTrait< CustomMatrix<T,AF,PF,SO1>, UniLowerMatrix<MT,SO2,DF> >
2099 template<
typename MT,
bool SO1,
bool DF,
typename T,
bool SO2 >
2100 struct SchurTrait< UniLowerMatrix<MT,SO1,DF>, CompressedMatrix<T,SO2> >
2105 template<
typename T,
bool SO1,
typename MT,
bool SO2,
bool DF >
2106 struct SchurTrait< CompressedMatrix<T,SO1>, UniLowerMatrix<MT,SO2,DF> >
2111 template<
typename MT,
bool SO1,
bool DF,
typename T,
bool SO2 >
2112 struct SchurTrait< UniLowerMatrix<MT,SO1,DF>, IdentityMatrix<T,SO2> >
2117 template<
typename T,
bool SO1,
typename MT,
bool SO2,
bool DF >
2118 struct SchurTrait< IdentityMatrix<T,SO1>, UniLowerMatrix<MT,SO2,DF> >
2123 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2,
bool NF >
2124 struct SchurTrait< UniLowerMatrix<MT1,SO1,DF1>, SymmetricMatrix<MT2,SO2,DF2,NF> >
2129 template<
typename MT1,
bool SO1,
bool DF1,
bool NF,
typename MT2,
bool SO2,
bool DF2 >
2130 struct SchurTrait< SymmetricMatrix<MT1,SO1,DF1,NF>, UniLowerMatrix<MT2,SO2,DF2> >
2135 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2136 struct SchurTrait< UniLowerMatrix<MT1,SO1,DF1>, HermitianMatrix<MT2,SO2,DF2> >
2141 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2142 struct SchurTrait< HermitianMatrix<MT1,SO1,DF1>, UniLowerMatrix<MT2,SO2,DF2> >
2147 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2148 struct SchurTrait< UniLowerMatrix<MT1,SO1,DF1>, LowerMatrix<MT2,SO2,DF2> >
2153 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2154 struct SchurTrait< LowerMatrix<MT1,SO1,DF1>, UniLowerMatrix<MT2,SO2,DF2> >
2159 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2160 struct SchurTrait< UniLowerMatrix<MT1,SO1,DF1>, UniLowerMatrix<MT2,SO2,DF2> >
2178 template<
typename MT,
bool SO,
bool DF,
typename T >
2179 struct MultTrait< UniLowerMatrix<MT,SO,DF>, T, EnableIf_< IsNumeric<T> > >
2184 template<
typename T,
typename MT,
bool SO,
bool DF >
2185 struct MultTrait< T, UniLowerMatrix<MT,SO,DF>, EnableIf_< IsNumeric<T> > >
2190 template<
typename MT,
bool SO,
bool DF,
typename T,
size_t N >
2191 struct MultTrait< UniLowerMatrix<MT,SO,DF>, StaticVector<T,N,false> >
2196 template<
typename T,
size_t N,
typename MT,
bool SO,
bool DF >
2197 struct MultTrait< StaticVector<T,N,true>, UniLowerMatrix<MT,SO,DF> >
2202 template<
typename MT,
bool SO,
bool DF,
typename T,
size_t N >
2203 struct MultTrait< UniLowerMatrix<MT,SO,DF>, HybridVector<T,N,false> >
2208 template<
typename T,
size_t N,
typename MT,
bool SO,
bool DF >
2209 struct MultTrait< HybridVector<T,N,true>, UniLowerMatrix<MT,SO,DF> >
2214 template<
typename MT,
bool SO,
bool DF,
typename T >
2215 struct MultTrait< UniLowerMatrix<MT,SO,DF>, DynamicVector<T,false> >
2220 template<
typename T,
typename MT,
bool SO,
bool DF >
2221 struct MultTrait< DynamicVector<T,true>, UniLowerMatrix<MT,SO,DF> >
2226 template<
typename MT,
bool SO,
bool DF,
typename T,
bool AF,
bool PF >
2227 struct MultTrait< UniLowerMatrix<MT,SO,DF>, CustomVector<T,AF,PF,false> >
2232 template<
typename T,
bool AF,
bool PF,
typename MT,
bool SO,
bool DF >
2233 struct MultTrait< CustomVector<T,AF,PF,true>, UniLowerMatrix<MT,SO,DF> >
2238 template<
typename MT,
bool SO,
bool DF,
typename T >
2239 struct MultTrait< UniLowerMatrix<MT,SO,DF>, CompressedVector<T,false> >
2244 template<
typename T,
typename MT,
bool SO,
bool DF >
2245 struct MultTrait< CompressedVector<T,true>, UniLowerMatrix<MT,SO,DF> >
2250 template<
typename MT,
bool SO1,
bool DF,
typename T,
size_t M,
size_t N,
bool SO2 >
2251 struct MultTrait< UniLowerMatrix<MT,SO1,DF>, StaticMatrix<T,M,N,SO2> >
2256 template<
typename T,
size_t M,
size_t N,
bool SO1,
typename MT,
bool SO2,
bool DF >
2257 struct MultTrait< StaticMatrix<T,M,N,SO1>, UniLowerMatrix<MT,SO2,DF> >
2262 template<
typename MT,
bool SO1,
bool DF,
typename T,
size_t M,
size_t N,
bool SO2 >
2263 struct MultTrait< UniLowerMatrix<MT,SO1,DF>, HybridMatrix<T,M,N,SO2> >
2268 template<
typename T,
size_t M,
size_t N,
bool SO1,
typename MT,
bool SO2,
bool DF >
2269 struct MultTrait< HybridMatrix<T,M,N,SO1>, UniLowerMatrix<MT,SO2,DF> >
2274 template<
typename MT,
bool SO1,
bool DF,
typename T,
bool SO2 >
2275 struct MultTrait< UniLowerMatrix<MT,SO1,DF>, DynamicMatrix<T,SO2> >
2280 template<
typename T,
bool SO1,
typename MT,
bool SO2,
bool DF >
2281 struct MultTrait< DynamicMatrix<T,SO1>, UniLowerMatrix<MT,SO2,DF> >
2286 template<
typename MT,
bool SO1,
bool DF,
typename T,
bool AF,
bool PF,
bool SO2 >
2287 struct MultTrait< UniLowerMatrix<MT,SO1,DF>, CustomMatrix<T,AF,PF,SO2> >
2292 template<
typename T,
bool AF,
bool PF,
bool SO1,
typename MT,
bool SO2,
bool DF >
2293 struct MultTrait< CustomMatrix<T,AF,PF,SO1>, UniLowerMatrix<MT,SO2,DF> >
2298 template<
typename MT,
bool SO1,
bool DF,
typename T,
bool SO2 >
2299 struct MultTrait< UniLowerMatrix<MT,SO1,DF>, CompressedMatrix<T,SO2> >
2304 template<
typename T,
bool SO1,
typename MT,
bool SO2,
bool DF >
2305 struct MultTrait< CompressedMatrix<T,SO1>, UniLowerMatrix<MT,SO2,DF> >
2310 template<
typename MT,
bool SO1,
bool DF,
typename T,
bool SO2 >
2311 struct MultTrait< UniLowerMatrix<MT,SO1,DF>, IdentityMatrix<T,SO2> >
2316 template<
typename T,
bool SO1,
typename MT,
bool SO2,
bool DF >
2317 struct MultTrait< IdentityMatrix<T,SO1>, UniLowerMatrix<MT,SO2,DF> >
2322 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2,
bool NF >
2323 struct MultTrait< UniLowerMatrix<MT1,SO1,DF1>, SymmetricMatrix<MT2,SO2,DF2,NF> >
2328 template<
typename MT1,
bool SO1,
bool DF1,
bool NF,
typename MT2,
bool SO2,
bool DF2 >
2329 struct MultTrait< SymmetricMatrix<MT1,SO1,DF1,NF>, UniLowerMatrix<MT2,SO2,DF2> >
2334 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2335 struct MultTrait< UniLowerMatrix<MT1,SO1,DF1>, HermitianMatrix<MT2,SO2,DF2> >
2340 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2341 struct MultTrait< HermitianMatrix<MT1,SO1,DF1>, UniLowerMatrix<MT2,SO2,DF2> >
2346 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2347 struct MultTrait< UniLowerMatrix<MT1,SO1,DF1>, LowerMatrix<MT2,SO2,DF2> >
2352 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2353 struct MultTrait< LowerMatrix<MT1,SO1,DF1>, UniLowerMatrix<MT2,SO2,DF2> >
2358 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2359 struct MultTrait< UniLowerMatrix<MT1,SO1,DF1>, UniLowerMatrix<MT2,SO2,DF2> >
2377 template<
typename MT,
bool SO,
bool DF,
typename T >
2378 struct DivTrait< UniLowerMatrix<MT,SO,DF>, T, EnableIf_< IsNumeric<T> > >
2396 template<
typename MT,
bool SO,
bool DF >
2402 template<
typename MT,
bool SO,
bool DF >
2408 template<
typename MT,
bool SO,
bool DF >
2414 template<
typename MT,
bool SO,
bool DF >
2420 template<
typename MT,
bool SO,
bool DF >
2426 template<
typename MT,
bool SO,
bool DF >
2432 template<
typename MT,
bool SO,
bool DF >
2438 template<
typename MT,
bool SO,
bool DF >
2444 template<
typename MT,
bool SO,
bool DF >
2450 template<
typename MT,
bool SO,
bool DF,
typename ET >
2469 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2470 struct BinaryMapTrait< UniLowerMatrix<MT1,SO1,DF1>, LowerMatrix<MT2,SO2,DF2>, Min >
2475 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2476 struct BinaryMapTrait< UniLowerMatrix<MT1,SO1,DF1>, LowerMatrix<MT2,SO2,DF2>, Max >
2481 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2482 struct BinaryMapTrait< LowerMatrix<MT1,SO1,DF1>, UniLowerMatrix<MT2,SO2,DF2>, Min >
2487 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2488 struct BinaryMapTrait< LowerMatrix<MT1,SO1,DF1>, UniLowerMatrix<MT2,SO2,DF2>, Max >
2493 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2494 struct BinaryMapTrait< UniLowerMatrix<MT1,SO1,DF1>, UniLowerMatrix<MT2,SO2,DF2>, Min >
2499 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2500 struct BinaryMapTrait< UniLowerMatrix<MT1,SO1,DF1>, UniLowerMatrix<MT2,SO2,DF2>, Max >
2518 template<
typename MT,
bool SO,
bool DF >
2537 template<
typename MT,
bool SO,
bool DF >
2556 template<
typename MT,
bool SO,
bool DF >
2575 template<
typename MT,
bool SO,
bool DF >
2594 template<
typename MT,
bool SO,
bool DF >
2613 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2614 struct HighType< UniLowerMatrix<MT1,SO1,DF1>, UniLowerMatrix<MT2,SO2,DF2> >
2632 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2633 struct LowType< UniLowerMatrix<MT1,SO1,DF1>, UniLowerMatrix<MT2,SO2,DF2> >
2651 template<
typename MT,
bool SO,
bool DF >
2670 template<
typename MT,
bool SO,
bool DF >
2671 struct RowTrait< UniLowerMatrix<MT,SO,DF> >
2689 template<
typename MT,
bool SO,
bool DF >
Header file for the implementation of the base template of the UniLowerMatrix.
Header file for auxiliary alias declarations.
Headerfile for the generic min algorithm.
Header file for the decldiag trait.
Header file for the Schur product trait.
Compile time check for low-level access to constant data.This type trait tests whether the given data...
Definition: HasConstDataAccess.h:75
Header file for the Rows type trait.
Header file for the UNUSED_PARAMETER function template.
Header file for the subtraction trait.
Flag for the inversion of a diagonal matrix.
Definition: InversionFlag.h:115
Flag for the inversion of a general matrix (same as byLU).
Definition: InversionFlag.h:108
Header file for the row trait.
Header file for the declherm trait.
Base template for the SubmatrixTrait class.
Definition: SubmatrixTrait.h:128
Flag for the inversion of a upper unitriangular matrix.
Definition: InversionFlag.h:114
Base template for the ColumnTrait class.
Definition: ColumnTrait.h:127
Flag for the inversion of a lower unitriangular matrix.
Definition: InversionFlag.h:112
typename RowTrait< MT >::Type RowTrait_
Auxiliary alias declaration for the RowTrait type trait.The RowTrait_ alias declaration provides a co...
Definition: RowTrait.h:162
BLAZE_ALWAYS_INLINE size_t size(const Vector< VT, TF > &vector) noexcept
Returns the current size/dimension of the vector.
Definition: Vector.h:265
Base template for the DeclUppTrait class.
Definition: DeclUppTrait.h:133
Generic wrapper for a compile time constant integral value.The IntegralConstant class template repres...
Definition: IntegralConstant.h:71
Matrix adapter for lower triangular matrices.
Definition: BaseTemplate.h:553
Header file for the dense matrix inversion flags.
Base template for the SchurTrait class.
Definition: SchurTrait.h:124
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:198
void reset(const DiagonalProxy< MT > &proxy)
Resetting the represented element to the default initial values.
Definition: DiagonalProxy.h:560
const ElementType_< MT > min(const DenseMatrix< MT, SO > &dm)
Returns the smallest element of the dense matrix.
Definition: DenseMatrix.h:1762
#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
typename MultTrait< T1, T2 >::Type MultTrait_
Auxiliary alias declaration for the MultTrait class template.The MultTrait_ alias declaration provide...
Definition: MultTrait.h:250
Column< MT > column(Matrix< MT, SO > &matrix, size_t index)
Creating a view on a specific column of the given matrix.
Definition: Column.h:124
Constraint on the data type.
Header file for the IsUniLower type trait.
Base class for dense matrices.The DenseMatrix class is a base class for all dense matrix classes...
Definition: DenseMatrix.h:78
Base class for sparse matrices.The SparseMatrix class is a base class for all sparse matrix classes...
Definition: Forward.h:129
bool isIdentity(const DenseMatrix< MT, SO > &dm)
Checks if the give dense matrix is an identity matrix.
Definition: DenseMatrix.h:1686
Constraint on the data type.
Compile time check for data types with restricted data access.This type trait tests whether the given...
Definition: IsRestricted.h:82
Header file for the IsSquare type trait.
Row< MT > row(Matrix< MT, SO > &matrix, size_t index)
Creating a view on a specific row of the given matrix.
Definition: Row.h:124
Compile time check for the alignment of data types.This type trait tests whether the given data type ...
Definition: IsAligned.h:87
void invert(const HermitianProxy< MT > &proxy)
In-place inversion of the represented element.
Definition: HermitianProxy.h:772
Base template for the RowTrait class.
Definition: RowTrait.h:127
Flag for the inversion of a upper triangular matrix.
Definition: InversionFlag.h:113
Constraint on the data type.
Efficient implementation of an identity matrix.The IdentityMatrix class template is the representati...
Definition: Forward.h:49
Header file for the LowType type trait.
Flag for the inversion of a lower triangular matrix.
Definition: InversionFlag.h:111
Base template for the HighType type trait.
Definition: HighType.h:133
Header file for the multiplication trait.
Header file for the unary map trait.
Namespace of the Blaze C++ math library.
Definition: Blaze.h:57
Flag for the LU-based matrix inversion.
Definition: InversionFlag.h:103
Header file for the IsShrinkable type trait.
UniLowerMatrix specialization for dense matrices.
Header file for all forward declarations of the math module.
Compile time check for data types with padding.This type trait tests whether the given data type empl...
Definition: IsPadded.h:76
Header file for the decllow trait.
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.
const Element * ConstIterator
Iterator over constant elements.
Definition: CompressedMatrix.h:3087
typename T::ElementType ElementType_
Alias declaration for nested ElementType type definitions.The ElementType_ alias declaration provides...
Definition: Aliases.h:163
Base class for N-dimensional dense vectors.The DenseVector class is a base class for all arbitrarily ...
Definition: DenseVector.h:70
Compile time check for square matrices.This type trait tests whether or not the given template parame...
Definition: IsSquare.h:88
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:340
Base template for the DeclSymTrait class.
Definition: DeclSymTrait.h:134
#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
UniLowerMatrix specialization for sparse matrices.
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:548
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:264
Header file for the RemoveAdaptor type trait.
Constraint on the data type.
Compile time check for adaptors.This type trait tests whether the given template parameter is an adap...
Definition: IsAdaptor.h:88
Header file for the EnableIf class template.
void clear(const DiagonalProxy< MT > &proxy)
Clearing the represented element.
Definition: DiagonalProxy.h:580
Header file for the IsPadded type trait.
Header file for the IsAdaptor type trait.
Header file for the isOne shim.
Compile time check for lower unitriangular matrices.This type trait tests whether or not the given te...
Definition: IsUniLower.h:86
Compile time check for shrinkable data types.This type trait tests whether the given data type is a s...
Definition: IsShrinkable.h:75
Constraint on the data type.
Header file for the IsNumeric type trait.
Base template for the LowType type trait.
Definition: LowType.h:133
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
Header file for the declupp trait.
#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 the binary map trait.
Header file for run time assertion macros.
Base template for the AddTrait class.
Definition: AddTrait.h:139
Base template for the DeclHermTrait class.
Definition: DeclHermTrait.h:134
Base template for the MultTrait class.
Definition: MultTrait.h:139
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 declsym trait.
Matrix adapter for strictly lower triangular matrices.
Definition: BaseTemplate.h:558
bool isOne(const DiagonalProxy< MT > &proxy)
Returns whether the represented element is 1.
Definition: DiagonalProxy.h:662
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:270
Base class for matrices.The Matrix class is a base class for all dense and sparse matrix classes with...
Definition: Forward.h:101
#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
typename SubmatrixTrait< MT >::Type SubmatrixTrait_
Auxiliary alias declaration for the SubmatrixTrait type trait.The SubmatrixTrait_ alias declaration p...
Definition: SubmatrixTrait.h:163
Base template for the DivTrait class.
Definition: DivTrait.h:139
typename ColumnTrait< MT >::Type ColumnTrait_
Auxiliary alias declaration for the ColumnTrait type trait.The ColumnTrait_ alias declaration provide...
Definition: ColumnTrait.h:162
BLAZE_ALWAYS_INLINE size_t rows(const Matrix< MT, SO > &matrix) noexcept
Returns the current number of rows of the matrix.
Definition: Matrix.h:324
Base template for the DeclLowTrait class.
Definition: DeclLowTrait.h:133
Removal of top level adaptor types.In case the given type is an adaptor type (SymmetricMatrix, LowerMatrix, UpperMatrix, ...), the RemoveAdaptor type trait removes the adaptor and extracts the contained general matrix type. Else the given type is returned as is. Note that cv-qualifiers are preserved.
Definition: RemoveAdaptor.h:76
Base class for N-dimensional vectors.The Vector class is a base class for all arbitrarily sized (N-di...
Definition: Forward.h:177
typename SubTrait< T1, T2 >::Type SubTrait_
Auxiliary alias declaration for the SubTrait class template.The SubTrait_ alias declaration provides ...
Definition: SubTrait.h:250
Base class for sparse vectors.The SparseVector class is a base class for all arbitrarily sized (N-dim...
Definition: Forward.h:130
Header file for the IntegralConstant class template.
Compile time evaluation of the number of columns of a matrix.The Columns type trait evaluates the num...
Definition: Columns.h:75
Matrix adapter for lower unitriangular matrices.
Definition: BaseTemplate.h:577
bool isIntact(const DiagonalMatrix< MT, SO, DF > &m)
Returns whether the invariants of the given diagonal matrix are intact.
Definition: DiagonalMatrix.h:252
Compile time evaluation of the number of rows of a matrix.The Rows type trait evaluates the number of...
Definition: Rows.h:75
bool isDefault(const DiagonalProxy< MT > &proxy)
Returns whether the represented element is in default state.
Definition: DiagonalProxy.h:600
#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
Base template for the SubTrait class.
Definition: SubTrait.h:139
void UNUSED_PARAMETER(const Args &...)
Suppression of unused parameter warnings.
Definition: Unused.h:81
Base template for the DeclDiagTrait class.
Definition: DeclDiagTrait.h:133
Base template for the BinaryMapTrait class.
Definition: BinaryMapTrait.h:119
Header file for the IsResizable type trait.
Header file for the IsRestricted type trait.
Base template for the UnaryMapTrait class.
Definition: UnaryMapTrait.h:117
typename AddTrait< T1, T2 >::Type AddTrait_
Auxiliary alias declaration for the AddTrait class template.The AddTrait_ alias declaration provides ...
Definition: AddTrait.h:250
InversionFlag
Inversion flag.The InversionFlag type enumeration represents the different types of matrix inversion ...
Definition: InversionFlag.h:101
#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 HighType type trait.
Header file for the TrueType type/value trait base class.