35 #ifndef _BLAZE_MATH_ADAPTORS_UNILOWERMATRIX_H_ 36 #define _BLAZE_MATH_ADAPTORS_UNILOWERMATRIX_H_ 113 template<
typename MT,
bool SO,
bool DF >
114 void reset( UniLowerMatrix<MT,SO,DF>& m );
116 template<
typename MT,
bool SO,
bool DF >
117 void reset( UniLowerMatrix<MT,SO,DF>& m,
size_t i );
119 template<
typename MT,
bool SO,
bool DF >
120 void clear( UniLowerMatrix<MT,SO,DF>& m );
122 template<
bool RF,
typename MT,
bool SO,
bool DF >
123 bool isDefault(
const UniLowerMatrix<MT,SO,DF>& m );
125 template<
typename MT,
bool SO,
bool DF >
126 bool isIntact(
const UniLowerMatrix<MT,SO,DF>& m );
128 template<
typename MT,
bool SO,
bool DF >
129 void swap( UniLowerMatrix<MT,SO,DF>& a, UniLowerMatrix<MT,SO,DF>& b ) noexcept;
141 template<
typename MT
164 template<
typename MT
181 template<
typename MT
205 inline bool isDefault_backend(
const UniLowerMatrix<MT,SO,DF>& m,
TrueType )
207 return ( m.rows() == 0UL );
227 inline bool isDefault_backend(
const UniLowerMatrix<MT,SO,DF>& m,
FalseType )
229 return isIdentity<RF>( m );
293 template<
typename MT
311 template<
typename MT
347 inline void invert( UniLowerMatrix<MT,SO,true>& m )
360 invert<flag>( derestrict( m ) );
387 template<
typename MT1,
bool SO1,
typename MT2,
typename MT3,
typename MT4,
bool SO2 >
388 inline void lu(
const UniLowerMatrix<MT1,SO1,true>& A, DenseMatrix<MT2,SO1>& L,
389 DenseMatrix<MT3,SO1>& U, Matrix<MT4,SO2>& P )
403 using ET3 = ElementType_t<MT3>;
404 using ET4 = ElementType_t<MT4>;
406 const size_t n( (~A).
rows() );
408 decltype(
auto) U2( derestrict( ~U ) );
418 for(
size_t i=0UL; i<n; ++i ) {
443 template<
typename MT
447 inline bool trySet(
const UniLowerMatrix<MT,SO,DF>& mat,
size_t i,
size_t j,
const ET& value )
457 return isOne( value );
481 template<
typename MT
485 inline bool tryAdd(
const UniLowerMatrix<MT,SO,DF>& mat,
size_t i,
size_t j,
const ET& value )
517 template<
typename MT
521 inline bool trySub(
const UniLowerMatrix<MT,SO,DF>& mat,
size_t i,
size_t j,
const ET& value )
523 return tryAdd( mat, i, j, value );
545 template<
typename MT
549 inline bool tryMult(
const UniLowerMatrix<MT,SO,DF>& mat,
size_t i,
size_t j,
const ET& value )
556 return ( i != j || IsOne( value ) );
580 template<
typename MT
585 tryMult(
const UniLowerMatrix<MT,SO,DF>& mat,
size_t row,
size_t column,
size_t m,
size_t n,
const ET& value )
616 template<
typename MT
620 inline bool tryDiv(
const UniLowerMatrix<MT,SO,DF>& mat,
size_t i,
size_t j,
const ET& value )
622 return tryMult( mat, i, j, value );
646 template<
typename MT
651 tryDiv(
const UniLowerMatrix<MT,SO,DF>& mat,
size_t row,
size_t column,
size_t m,
size_t n,
const ET& value )
682 template<
typename MT
686 inline bool tryAssign(
const UniLowerMatrix<MT,SO,DF>& lhs,
687 const DenseVector<VT,false>& rhs,
size_t row,
size_t column )
703 for(
size_t i=0UL; i<iend; ++i ) {
708 if( containsDiagonal && !
isOne( (~rhs)[iend] ) )
733 template<
typename MT
737 inline bool tryAssign(
const UniLowerMatrix<MT,SO,DF>& lhs,
738 const DenseVector<VT,true>& rhs,
size_t row,
size_t column )
751 const bool containsDiagonal(
row >=
column );
752 const size_t ibegin( ( !containsDiagonal )?( 0UL ):(
row -
column + 1UL ) );
757 for(
size_t i=ibegin; i<(~rhs).
size(); ++i ) {
786 template<
typename MT
791 inline bool tryAssign(
const UniLowerMatrix<MT,SO,DF>& lhs,
const DenseVector<VT,TF>& rhs,
804 for(
size_t i=0UL; i<(~rhs).
size(); ++i ) {
805 if( !
isOne( (~rhs)[i] ) )
809 else if(
band > 0L ) {
810 for(
size_t i=0UL; i<(~rhs).
size(); ++i ) {
838 template<
typename MT
842 inline bool tryAssign(
const UniLowerMatrix<MT,SO,DF>& lhs,
843 const SparseVector<VT,false>& rhs,
size_t row,
size_t column )
858 const auto last( (~rhs).lowerBound( index ) );
860 if( containsDiagonal ) {
861 if( last == (~rhs).
end() || last->index() != index || !
isOne( last->value() ) )
865 for(
auto element=(~rhs).begin(); element!=last; ++element ) {
892 template<
typename MT
896 inline bool tryAssign(
const UniLowerMatrix<MT,SO,DF>& lhs,
897 const SparseVector<VT,true>& rhs,
size_t row,
size_t column )
910 const bool containsDiagonal(
row >=
column );
911 const size_t index( ( containsDiagonal )?(
row -
column ):( 0UL ) );
912 const auto last( (~rhs).
end() );
913 auto element( (~rhs).lowerBound( index ) );
915 if( containsDiagonal ) {
916 if( element == last || element->index() != index || !
isOne( element->value() ) )
921 for( ; element!=last; ++element ) {
950 template<
typename MT
955 inline bool tryAssign(
const UniLowerMatrix<MT,SO,DF>& lhs,
const SparseVector<VT,TF>& rhs,
970 for(
const auto& element : ~rhs ) {
971 if( !
isOne( element.value() ) )
975 else if(
band > 0L ) {
976 for(
const auto& element : ~rhs ) {
1004 template<
typename MT1
1008 inline bool tryAssign(
const UniLowerMatrix<MT1,SO,DF>& lhs,
1009 const DenseMatrix<MT2,false>& rhs,
size_t row,
size_t column )
1020 const size_t M( (~rhs).
rows() );
1021 const size_t N( (~rhs).
columns() );
1028 for(
size_t i=0UL; i<iend; ++i )
1030 const bool containsDiagonal(
row + i >=
column );
1035 const size_t jbegin( ( containsDiagonal )?(
row + i -
column + 1UL ):( 0UL ) );
1037 for(
size_t j=jbegin; j<N; ++j ) {
1065 template<
typename MT1
1069 inline bool tryAssign(
const UniLowerMatrix<MT1,SO,DF>& lhs,
1070 const DenseMatrix<MT2,true>& rhs,
size_t row,
size_t column )
1081 const size_t M( (~rhs).
rows() );
1082 const size_t N( (~rhs).
columns() );
1089 for(
size_t j=jbegin; j<N; ++j )
1093 for(
size_t i=0UL; i<iend; ++i ) {
1098 const bool containsDiagonal(
column + j <
row + M );
1100 if( containsDiagonal && !
isOne( (~rhs)(iend,j) ) )
1126 template<
typename MT1
1130 inline bool tryAssign(
const UniLowerMatrix<MT1,SO,DF>& lhs,
1131 const SparseMatrix<MT2,false>& rhs,
size_t row,
size_t column )
1142 const size_t M( (~rhs).
rows() );
1143 const size_t N( (~rhs).
columns() );
1150 for(
size_t i=0UL; i<iend; ++i )
1152 const bool containsDiagonal(
row + i >=
column );
1153 const size_t index( ( containsDiagonal )?(
row + i -
column ):( 0UL ) );
1155 const auto last( (~rhs).
end(i) );
1156 auto element( (~rhs).lowerBound( i, index ) );
1158 if( containsDiagonal ) {
1159 if( element == last || ( element->index() != index ) || !
isOne( element->value() ) )
1164 for( ; element!=last; ++element ) {
1192 template<
typename MT1
1196 inline bool tryAssign(
const UniLowerMatrix<MT1,SO,DF>& lhs,
1197 const SparseMatrix<MT2,true>& rhs,
size_t row,
size_t column )
1208 const size_t M( (~rhs).
rows() );
1209 const size_t N( (~rhs).
columns() );
1216 for(
size_t j=jbegin; j<N; ++j )
1218 const bool containsDiagonal(
column + j <
row + M );
1221 const auto last( (~rhs).lowerBound(
min( index, M ), j ) );
1223 if( containsDiagonal ) {
1224 if( last == (~rhs).
end(j) || ( last->index() != index ) || !
isOne( last->value() ) )
1228 for(
auto element=(~rhs).begin(j); element!=last; ++element ) {
1257 template<
typename MT
1261 inline bool tryAddAssign(
const UniLowerMatrix<MT,SO,DF>& lhs,
1262 const DenseVector<VT,false>& rhs,
size_t row,
size_t column )
1277 for(
size_t i=0UL; i<iend; ++i ) {
1305 template<
typename MT
1309 inline bool tryAddAssign(
const UniLowerMatrix<MT,SO,DF>& lhs,
1310 const DenseVector<VT,true>& rhs,
size_t row,
size_t column )
1322 for(
size_t i=ibegin; i<(~rhs).
size(); ++i ) {
1350 template<
typename MT
1355 inline bool tryAddAssign(
const UniLowerMatrix<MT,SO,DF>& lhs,
const DenseVector<VT,TF>& rhs,
1368 for(
size_t i=0UL; i<(~rhs).
size(); ++i ) {
1397 template<
typename MT
1401 inline bool tryAddAssign(
const UniLowerMatrix<MT,SO,DF>& lhs,
1402 const SparseVector<VT,false>& rhs,
size_t row,
size_t column )
1415 const auto last( (~rhs).lowerBound(
column -
row + 1UL ) );
1417 for(
auto element=(~rhs).
begin(); element!=last; ++element ) {
1445 template<
typename MT
1449 inline bool tryAddAssign(
const UniLowerMatrix<MT,SO,DF>& lhs,
1450 const SparseVector<VT,true>& rhs,
size_t row,
size_t column )
1460 const auto last( (~rhs).
end() );
1463 for( ; element!=last; ++element ) {
1491 template<
typename MT
1496 inline bool tryAddAssign(
const UniLowerMatrix<MT,SO,DF>& lhs,
const SparseVector<VT,TF>& rhs,
1509 for(
const auto& element : ~rhs ) {
1538 template<
typename MT1
1542 inline bool tryAddAssign(
const UniLowerMatrix<MT1,SO,DF>& lhs,
1543 const DenseMatrix<MT2,false>& rhs,
size_t row,
size_t column )
1554 const size_t M( (~rhs).
rows() );
1555 const size_t N( (~rhs).
columns() );
1562 for(
size_t i=0UL; i<iend; ++i )
1564 const bool containsDiagonal(
row + i >=
column );
1565 const size_t jbegin( ( containsDiagonal )?(
row + i -
column ):( 0UL ) );
1567 for(
size_t j=jbegin; j<N; ++j ) {
1596 template<
typename MT1
1600 inline bool tryAddAssign(
const UniLowerMatrix<MT1,SO,DF>& lhs,
1601 const DenseMatrix<MT2,true>& rhs,
size_t row,
size_t column )
1612 const size_t M( (~rhs).
rows() );
1613 const size_t N( (~rhs).
columns() );
1620 for(
size_t j=jbegin; j<N; ++j )
1624 for(
size_t i=0UL; i<iend; ++i ) {
1653 template<
typename MT1
1657 inline bool tryAddAssign(
const UniLowerMatrix<MT1,SO,DF>& lhs,
1658 const SparseMatrix<MT2,false>& rhs,
size_t row,
size_t column )
1669 const size_t M( (~rhs).
rows() );
1670 const size_t N( (~rhs).
columns() );
1677 for(
size_t i=0UL; i<iend; ++i )
1679 const bool containsDiagonal(
row + i >=
column );
1680 const size_t index( ( containsDiagonal )?(
row + i -
column ):( 0UL ) );
1682 const auto last( (~rhs).
end(i) );
1683 auto element( (~rhs).lowerBound( i, index ) );
1685 for( ; element!=last; ++element ) {
1714 template<
typename MT1
1718 inline bool tryAddAssign(
const UniLowerMatrix<MT1,SO,DF>& lhs,
1719 const SparseMatrix<MT2,true>& rhs,
size_t row,
size_t column )
1730 const size_t M( (~rhs).
rows() );
1731 const size_t N( (~rhs).
columns() );
1738 for(
size_t j=jbegin; j<N; ++j )
1740 const size_t index(
column + j -
row + 1UL );
1741 const auto last( (~rhs).lowerBound(
min( index, M ), j ) );
1743 for(
auto element=(~rhs).
begin(j); element!=last; ++element ) {
1772 template<
typename MT
1777 inline bool trySubAssign(
const UniLowerMatrix<MT,SO,DF>& lhs,
1778 const Vector<VT,TF>& rhs,
size_t row,
size_t column )
1780 return tryAddAssign( lhs, ~rhs,
row,
column );
1804 template<
typename MT
1809 inline bool trySubAssign(
const UniLowerMatrix<MT,SO,DF>& lhs,
const Vector<VT,TF>& rhs,
1835 template<
typename MT1
1840 inline bool trySubAssign(
const UniLowerMatrix<MT1,SO1,DF>& lhs,
1841 const Matrix<MT2,SO2>& rhs,
size_t row,
size_t column )
1843 return tryAddAssign( lhs, ~rhs,
row,
column );
1866 template<
typename MT
1870 inline bool tryMultAssign(
const UniLowerMatrix<MT,SO,DF>& lhs,
1871 const Vector<VT,false>& rhs,
size_t row,
size_t column )
1904 template<
typename MT
1908 inline bool tryMultAssign(
const UniLowerMatrix<MT,SO,DF>& lhs,
1909 const Vector<VT,true>& rhs,
size_t row,
size_t column )
1942 template<
typename MT
1947 inline bool tryMultAssign(
const UniLowerMatrix<MT,SO,DF>& lhs,
const DenseVector<VT,TF>& rhs,
1960 for(
size_t i=0UL; i<(~rhs).
size(); ++i ) {
1961 if( !
isOne( (~rhs)[i] ) )
1989 template<
typename MT
1994 inline bool tryMultAssign(
const UniLowerMatrix<MT,SO,DF>& lhs,
const SparseVector<VT,TF>& rhs,
2009 for(
const auto& element : ~rhs ) {
2010 if( !
isOne( element.value() ) )
2038 template<
typename MT1
2043 inline bool trySchurAssign(
const UniLowerMatrix<MT1,SO1,DF>& lhs,
2044 const Matrix<MT2,SO2>& rhs,
size_t row,
size_t column )
2055 const size_t M( (~rhs).
rows() );
2056 const size_t N( (~rhs).
columns() );
2064 for( ; i<M && j<N; ++i, ++j )
2066 if( !
isOne( (~rhs)(i,j) ) )
2092 template<
typename MT
2097 inline bool tryDivAssign(
const UniLowerMatrix<MT,SO,DF>& lhs,
2098 const Vector<VT,TF>& rhs,
size_t row,
size_t column )
2100 return tryMultAssign( lhs, ~rhs,
row,
column );
2123 template<
typename MT
2128 inline bool tryDivAssign(
const UniLowerMatrix<MT,SO,DF>& lhs,
const Vector<VT,TF>& rhs,
2151 template<
typename MT
2154 inline MT& derestrict( UniLowerMatrix<MT,SO,DF>& m )
2172 template<
typename MT,
bool SO,
bool DF >
2173 struct Size< UniLowerMatrix<MT,SO,DF>, 0UL >
2174 :
public Size<MT,0UL>
2177 template<
typename MT,
bool SO,
bool DF >
2178 struct Size< UniLowerMatrix<MT,SO,DF>, 1UL >
2179 :
public Size<MT,1UL>
2195 template<
typename MT,
bool SO,
bool DF >
2196 struct MaxSize< UniLowerMatrix<MT,SO,DF>, 0UL >
2197 :
public MaxSize<MT,0UL>
2200 template<
typename MT,
bool SO,
bool DF >
2201 struct MaxSize< UniLowerMatrix<MT,SO,DF>, 1UL >
2202 :
public MaxSize<MT,1UL>
2218 template<
typename MT,
bool SO,
bool DF >
2219 struct IsSquare< UniLowerMatrix<MT,SO,DF> >
2236 template<
typename MT,
bool SO,
bool DF >
2237 struct IsUniLower< UniLowerMatrix<MT,SO,DF> >
2254 template<
typename MT,
bool SO,
bool DF >
2255 struct IsAdaptor< UniLowerMatrix<MT,SO,DF> >
2272 template<
typename MT,
bool SO,
bool DF >
2273 struct IsRestricted< UniLowerMatrix<MT,SO,DF> >
2290 template<
typename MT,
bool SO >
2291 struct HasConstDataAccess< UniLowerMatrix<MT,SO,true> >
2308 template<
typename MT,
bool SO,
bool DF >
2309 struct IsAligned< UniLowerMatrix<MT,SO,DF> >
2310 :
public IsAligned<MT>
2326 template<
typename MT,
bool SO,
bool DF >
2327 struct IsContiguous< UniLowerMatrix<MT,SO,DF> >
2328 :
public IsContiguous<MT>
2344 template<
typename MT,
bool SO,
bool DF >
2345 struct IsPadded< UniLowerMatrix<MT,SO,DF> >
2346 :
public IsPadded<MT>
2362 template<
typename MT,
bool SO,
bool DF >
2363 struct IsResizable< UniLowerMatrix<MT,SO,DF> >
2364 :
public IsResizable<MT>
2380 template<
typename MT,
bool SO,
bool DF >
2381 struct IsShrinkable< UniLowerMatrix<MT,SO,DF> >
2382 :
public IsShrinkable<MT>
2398 template<
typename MT,
bool SO,
bool DF >
2399 struct RemoveAdaptor< UniLowerMatrix<MT,SO,DF> >
2417 template<
typename T1,
typename T2 >
2418 struct AddTraitEval1< T1, T2
2421 ( ( IsUniLower_v<T1> && IsStrictlyLower_v<T2> &&
2422 !( IsUniUpper_v<T1> && IsStrictlyUpper_v<T2> ) ) ||
2423 ( IsStrictlyLower_v<T1> && IsUniLower_v<T2> &&
2424 !( IsStrictlyUpper_v<T1> && IsUniUpper_v<T2> ) ) ) &&
2425 !( IsZero_v<T1> || IsZero_v<T2> ) > >
2427 using Type = UniLowerMatrix< typename AddTraitEval2<T1,T2>::Type >;
2443 template<
typename T1,
typename T2 >
2444 struct SubTraitEval1< T1, T2
2447 ( IsUniLower_v<T1> && IsStrictlyLower_v<T2> &&
2448 !( IsUniUpper_v<T1> && IsStrictlyUpper_v<T2> ) ) &&
2449 !( IsZero_v<T1> || IsZero_v<T2> ) > >
2451 using Type = UniLowerMatrix< typename SubTraitEval2<T1,T2>::Type >;
2467 template<
typename T1,
typename T2 >
2468 struct SchurTraitEval1< T1, T2
2471 ( IsUniLower_v<T1> && IsUniLower_v<T2> ) &&
2472 !( IsDiagonal_v<T1> || IsDiagonal_v<T2> ) &&
2473 !( IsZero_v<T1> || IsZero_v<T2> ) > >
2475 using Type = UniLowerMatrix< typename SchurTraitEval2<T1,T2>::Type >;
2491 template<
typename T1,
typename T2 >
2492 struct MultTraitEval1< T1, T2
2495 ( IsUniLower_v<T1> && IsUniLower_v<T2> ) &&
2496 !( IsIdentity_v<T1> || IsIdentity_v<T2> ) > >
2498 using Type = UniLowerMatrix< typename MultTraitEval2<T1,T2>::Type >;
2514 template<
typename T,
typename OP >
2515 struct UnaryMapTraitEval1< T, OP
2517 !YieldsIdentity_v<OP,T> > >
2519 using Type = UniLowerMatrix< typename UnaryMapTraitEval2<T,OP>::Type, StorageOrder_v<T> >;
2527 template<
typename T1,
typename T2,
typename OP >
2528 struct BinaryMapTraitEval1< T1, T2, OP
2530 !YieldsIdentity_v<OP,T1,T2> > >
2532 using Type = UniLowerMatrix< typename BinaryMapTraitEval2<T1,T2,OP>::Type >;
2548 template<
typename MT,
bool SO,
bool DF >
2549 struct DeclSymTrait< UniLowerMatrix<MT,SO,DF> >
2551 using Type = IdentityMatrix< ElementType_t<MT>, SO >;
2567 template<
typename MT,
bool SO,
bool DF >
2568 struct DeclHermTrait< UniLowerMatrix<MT,SO,DF> >
2570 using Type = IdentityMatrix< ElementType_t<MT>, SO >;
2586 template<
typename MT,
bool SO,
bool DF >
2587 struct DeclLowTrait< UniLowerMatrix<MT,SO,DF> >
2589 using Type = UniLowerMatrix<MT,SO,DF>;
2605 template<
typename MT,
bool SO,
bool DF >
2606 struct DeclUppTrait< UniLowerMatrix<MT,SO,DF> >
2608 using Type = IdentityMatrix< ElementType_t<MT>, SO >;
2624 template<
typename MT,
bool SO,
bool DF >
2625 struct DeclDiagTrait< UniLowerMatrix<MT,SO,DF> >
2627 using Type = IdentityMatrix< ElementType_t<MT>, SO >;
2643 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2644 struct HighType< UniLowerMatrix<MT1,SO1,DF1>, UniLowerMatrix<MT2,SO2,DF2> >
2646 using Type = UniLowerMatrix< typename HighType<MT1,MT2>::Type >;
2662 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2663 struct LowType< UniLowerMatrix<MT1,SO1,DF1>, UniLowerMatrix<MT2,SO2,DF2> >
2665 using Type = UniLowerMatrix< typename LowType<MT1,MT2>::Type >;
2681 template<
typename MT,
size_t I,
size_t N >
2682 struct SubmatrixTraitEval1< MT, I, I, N, N
2684 !IsIdentity_v<MT> > >
2686 using Type = UniLowerMatrix< typename SubmatrixTraitEval2<MT,I,I,N,N>::Type >;
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
Header file for the implementation of the base template of the UniLowerMatrix.
Header file for auxiliary alias declarations.
decltype(auto) column(Matrix< MT, SO > &matrix, RCAs... args)
Creating a view on a specific column of the given matrix.
Definition: Column.h:133
Headerfile for the generic min algorithm.
Header file for the decldiag trait.
Header file for the Schur product trait.
Header file for the UNUSED_PARAMETER function template.
Header file for the IsUniUpper type trait.
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
constexpr bool IsMatrix_v
Auxiliary variable template for the IsMatrix type trait.The IsMatrix_v variable template provides a c...
Definition: IsMatrix.h:139
Header file for the declherm trait.
Flag for the inversion of a upper unitriangular matrix.
Definition: InversionFlag.h:114
Flag for the inversion of a lower unitriangular matrix.
Definition: InversionFlag.h:112
Header file for the IsDiagonal type trait.
Header file for the dense matrix inversion flags.
MT::Iterator begin(Matrix< MT, SO > &matrix, size_t i)
Returns an iterator to the first element of row/column i.
Definition: Matrix.h:372
void reset(const DiagonalProxy< MT > &proxy)
Resetting the represented element to the default initial values.
Definition: DiagonalProxy.h:591
Header file for the YieldsIdentity type trait.
#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
Header file for the IsIdentity type trait.
size_t nonZeros(const Matrix< MT, SO > &matrix)
Returns the total number of non-zero elements in the matrix.
Definition: Matrix.h:584
constexpr bool YieldsUniLower_v
Auxiliary variable template for the YieldsUniLower type trait.The YieldsUniLower_v variable template ...
Definition: YieldsUniLower.h:125
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
constexpr void UNUSED_PARAMETER(const Args &...)
Suppression of unused parameter warnings.
Definition: Unused.h:81
Constraint on the data type.
Header file for the IsUniLower type trait.
Header file for the MaxSize type trait.
constexpr size_t columns(const Matrix< MT, SO > &matrix) noexcept
Returns the current number of columns of the matrix.
Definition: Matrix.h:514
bool isIdentity(const DenseMatrix< MT, SO > &dm)
Checks if the give dense matrix is an identity matrix.
Definition: DenseMatrix.h:1644
Constraint on the data type.
Header file for the IsMatrix type trait.
Header file for the IsSquare type trait.
typename EnableIf< Condition, T >::Type EnableIf_t
Auxiliary type for the EnableIf class template.The EnableIf_t alias declaration provides a convenient...
Definition: EnableIf.h:138
void invert(const HermitianProxy< MT > &proxy)
In-place inversion of the represented element.
Definition: HermitianProxy.h:775
Flag for the inversion of a upper triangular matrix.
Definition: InversionFlag.h:113
Constraint on the data type.
Header file for the LowType type trait.
Flag for the inversion of a lower triangular matrix.
Definition: InversionFlag.h:111
Header file for the multiplication trait.
Header file for the IsStrictlyUpper type trait.
Namespace of the Blaze C++ math library.
Definition: Blaze.h:58
#define BLAZE_ALWAYS_INLINE
Platform dependent setup of an enforced inline keyword.
Definition: Inline.h:85
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.
decltype(auto) min(const DenseMatrix< MT1, SO1 > &lhs, const DenseMatrix< MT2, SO2 > &rhs)
Computes the componentwise minimum of the dense matrices lhs and rhs.
Definition: DMatDMatMapExpr.h:1147
Header file for the YieldsUniLower type trait.
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:221
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:81
UniLowerMatrix specialization for sparse matrices.
void resize(Matrix< MT, SO > &matrix, size_t rows, size_t columns, bool preserve=true)
Changing the size of the matrix.
Definition: Matrix.h:738
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:438
Header file for the RemoveAdaptor type trait.
Constraint on the data type.
Header file for the EnableIf class template.
Header file for the IsStrictlyLower type trait.
void clear(const DiagonalProxy< MT > &proxy)
Clearing the represented element.
Definition: DiagonalProxy.h:611
Header file for the IsPadded type trait.
Header file for the IsAdaptor type trait.
decltype(auto) band(Matrix< MT, SO > &matrix, RBAs... args)
Creating a view on a specific band of the given matrix.
Definition: Band.h:135
Header file for the isOne shim.
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
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 run time assertion macros.
constexpr bool IsUniLower_v
Auxiliary variable template for the IsUniLower type trait.The IsUniLower_v variable template provides...
Definition: IsUniLower.h:172
Header file for the addition trait.
Header file for the submatrix trait.
Constraint on the data type.
Header file for the IsContiguous type trait.
decltype(auto) row(Matrix< MT, SO > &, RRAs...)
Creating a view on a specific row of the given matrix.
Definition: Row.h:133
Header file for the IsZero type trait.
#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.
bool isOne(const DiagonalProxy< MT > &proxy)
Returns whether the represented element is 1.
Definition: DiagonalProxy.h:693
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:281
constexpr size_t size(const Matrix< MT, SO > &matrix) noexcept
Returns the total number of elements of the matrix.
Definition: Matrix.h:530
#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
constexpr size_t rows(const Matrix< MT, SO > &matrix) noexcept
Returns the current number of rows of the matrix.
Definition: Matrix.h:498
Header file for the StorageOrder type trait.
Matrix adapter for lower unitriangular matrices.
Definition: BaseTemplate.h:577
Header file for the map trait.
bool isIntact(const DiagonalMatrix< MT, SO, DF > &m)
Returns whether the invariants of the given diagonal matrix are intact.
Definition: DiagonalMatrix.h:263
bool isDefault(const DiagonalProxy< MT > &proxy)
Returns whether the represented element is in default state.
Definition: DiagonalProxy.h:631
#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
Header file for the IsResizable type trait.
Header file for the IsRestricted type trait.
Header file for the Size type trait.
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.