35#ifndef _BLAZE_MATH_ADAPTORS_LOWERMATRIX_H_
36#define _BLAZE_MATH_ADAPTORS_LOWERMATRIX_H_
125template< RelaxationFlag RF,
typename MT,
bool SO,
bool DF >
126bool isDefault(
const LowerMatrix<MT,SO,DF>& m );
128template<
typename MT,
bool SO,
bool DF >
129bool isIntact(
const LowerMatrix<MT,SO,DF>& m );
131template<
typename MT,
bool SO,
bool DF >
132void swap( LowerMatrix<MT,SO,DF>& a, LowerMatrix<MT,SO,DF>& b )
noexcept;
172 return m.rows() == 0UL;
173 else return isStrictlyUpper<RF>( m );
253inline void invert( LowerMatrix<MT,SO,true>& m )
268 invert<flag>( derestrict( m ) );
295template<
typename MT1,
bool SO1,
typename MT2,
typename MT3,
typename MT4,
bool SO2 >
296inline void lu(
const LowerMatrix<MT1,SO1,true>& A, DenseMatrix<MT2,SO1>& L,
297 DenseMatrix<MT3,SO1>& U, Matrix<MT4,SO2>& P )
311 using ET3 = ElementType_t<MT3>;
312 using ET4 = ElementType_t<MT4>;
314 const size_t n( (*A).rows() );
316 decltype(
auto) U2( derestrict( *U ) );
326 for(
size_t i=0UL; i<n; ++i ) {
355inline bool trySet(
const LowerMatrix<MT,SO,DF>& mat,
size_t i,
size_t j,
const ET& value )
391 trySet(
const LowerMatrix<MT,SO,DF>& mat,
size_t row,
size_t column,
size_t m,
size_t n,
const ET& value )
400 return ( m == 0UL ) ||
429inline bool tryAdd(
const LowerMatrix<MT,SO,DF>& mat,
size_t i,
size_t j,
const ET& value )
431 return trySet( mat, i, j, value );
460 tryAdd(
const LowerMatrix<MT,SO,DF>& mat,
size_t row,
size_t column,
size_t m,
size_t n,
const ET& value )
462 return trySet( mat,
row,
column, m, n, value );
488inline bool trySub(
const LowerMatrix<MT,SO,DF>& mat,
size_t i,
size_t j,
const ET& value )
490 return trySet( mat, i, j, value );
519 trySub(
const LowerMatrix<MT,SO,DF>& mat,
size_t row,
size_t column,
size_t m,
size_t n,
const ET& value )
521 return trySet( mat,
row,
column, m, n, value );
547inline bool tryBitor(
const LowerMatrix<MT,SO,DF>& mat,
size_t i,
size_t j,
const ET& value )
549 return trySet( mat, i, j, value );
578 tryBitor(
const LowerMatrix<MT,SO,DF>& mat,
size_t row,
size_t column,
size_t m,
size_t n,
const ET& value )
580 return trySet( mat,
row,
column, m, n, value );
606inline bool tryBitxor(
const LowerMatrix<MT,SO,DF>& mat,
size_t i,
size_t j,
const ET& value )
608 return tryAdd( mat, i, j, value );
637 tryBitxor(
const LowerMatrix<MT,SO,DF>& mat,
size_t row,
size_t column,
size_t m,
size_t n,
const ET& value )
639 return tryAdd( mat,
row,
column, m, n, value );
665inline bool tryAssign(
const LowerMatrix<MT,SO,DF>& lhs,
666 const DenseVector<VT,false>& rhs,
size_t row,
size_t column )
679 const size_t iend(
min(
column -
row, (*rhs).size() ) );
681 for(
size_t i=0UL; i<iend; ++i ) {
712inline bool tryAssign(
const LowerMatrix<MT,SO,DF>& lhs,
713 const DenseVector<VT,true>& rhs,
size_t row,
size_t column )
725 for(
size_t i=ibegin; i<(*rhs).size(); ++i ) {
759inline bool tryAssign(
const LowerMatrix<MT,SO,DF>& lhs,
const DenseVector<VT,TF>& rhs,
772 for(
size_t i=0UL; i<(*rhs).size(); ++i ) {
804inline bool tryAssign(
const LowerMatrix<MT,SO,DF>& lhs,
805 const SparseVector<VT,false>& rhs,
size_t row,
size_t column )
818 const auto last( (*rhs).lowerBound(
column -
row ) );
820 for(
auto element=(*rhs).begin(); element!=last; ++element ) {
851inline bool tryAssign(
const LowerMatrix<MT,SO,DF>& lhs,
852 const SparseVector<VT,true>& rhs,
size_t row,
size_t column )
862 const auto last( (*rhs).end() );
865 for( ; element!=last; ++element ) {
899inline bool tryAssign(
const LowerMatrix<MT,SO,DF>& lhs,
const SparseVector<VT,TF>& rhs,
912 for(
const auto& element : *rhs ) {
940template<
typename MT1
944inline bool tryAssign(
const LowerMatrix<MT1,SO,DF>& lhs,
945 const DenseMatrix<MT2,false>& rhs,
size_t row,
size_t column )
956 const size_t M( (*rhs).rows() );
957 const size_t N( (*rhs).columns() );
964 for(
size_t i=0UL; i<iend; ++i )
966 const bool containsDiagonal(
row + i >=
column );
967 const size_t jbegin( ( containsDiagonal )?(
row + i -
column + 1UL ):( 0UL ) );
969 for(
size_t j=jbegin; j<N; ++j ) {
997template<
typename MT1
1001inline bool tryAssign(
const LowerMatrix<MT1,SO,DF>& lhs,
1002 const DenseMatrix<MT2,true>& rhs,
size_t row,
size_t column )
1013 const size_t M( (*rhs).rows() );
1014 const size_t N( (*rhs).columns() );
1021 for(
size_t j=jbegin; j<N; ++j )
1025 for(
size_t i=0UL; i<iend; ++i ) {
1053template<
typename MT1
1057inline bool tryAssign(
const LowerMatrix<MT1,SO,DF>& lhs,
1058 const SparseMatrix<MT2,false>& rhs,
size_t row,
size_t column )
1069 const size_t M( (*rhs).rows() );
1070 const size_t N( (*rhs).columns() );
1077 for(
size_t i=0UL; i<iend; ++i )
1079 const bool containsDiagonal(
row + i >=
column );
1080 const size_t index( ( containsDiagonal )?(
row + i -
column + 1UL ):( 0UL ) );
1082 const auto last( (*rhs).end(i) );
1083 auto element( (*rhs).lowerBound( i, index ) );
1085 for( ; element!=last; ++element ) {
1113template<
typename MT1
1117inline bool tryAssign(
const LowerMatrix<MT1,SO,DF>& lhs,
1118 const SparseMatrix<MT2,true>& rhs,
size_t row,
size_t column )
1129 const size_t M( (*rhs).rows() );
1130 const size_t N( (*rhs).columns() );
1137 for(
size_t j=jbegin; j<N; ++j )
1140 const auto last( (*rhs).lowerBound(
min( index, M ), j ) );
1142 for(
auto element=(*rhs).begin(j); element!=last; ++element ) {
1170template<
typename MT
1175inline bool tryAddAssign(
const LowerMatrix<MT,SO,DF>& lhs,
1176 const Vector<VT,TF>& rhs,
size_t row,
size_t column )
1178 return tryAssign( lhs, *rhs,
row,
column );
1202template<
typename MT
1207inline bool tryAddAssign(
const LowerMatrix<MT,SO,DF>& lhs,
const Vector<VT,TF>& rhs,
1232template<
typename MT1
1237inline bool tryAddAssign(
const LowerMatrix<MT1,SO1,DF>& lhs,
1238 const Matrix<MT2,SO2>& rhs,
size_t row,
size_t column )
1240 return tryAssign( lhs, *rhs,
row,
column );
1262template<
typename MT
1267inline bool trySubAssign(
const LowerMatrix<MT,SO,DF>& lhs,
1268 const Vector<VT,TF>& rhs,
size_t row,
size_t column )
1270 return tryAssign( lhs, *rhs,
row,
column );
1294template<
typename MT
1299inline bool trySubAssign(
const LowerMatrix<MT,SO,DF>& lhs,
const Vector<VT,TF>& rhs,
1324template<
typename MT1
1329inline bool trySubAssign(
const LowerMatrix<MT1,SO1,DF>& lhs,
1330 const Matrix<MT2,SO2>& rhs,
size_t row,
size_t column )
1332 return tryAssign( lhs, *rhs,
row,
column );
1355template<
typename MT
1360inline bool tryBitorAssign(
const LowerMatrix<MT,SO,DF>& lhs,
1361 const Vector<VT,TF>& rhs,
size_t row,
size_t column )
1363 return tryAssign( lhs, *rhs,
row,
column );
1386template<
typename MT
1391inline bool tryBitorAssign(
const LowerMatrix<MT,SO,DF>& lhs,
const Vector<VT,TF>& rhs,
1416template<
typename MT1
1421inline bool tryBitorAssign(
const LowerMatrix<MT1,SO1,DF>& lhs,
1422 const Matrix<MT2,SO2>& rhs,
size_t row,
size_t column )
1424 return tryAssign( lhs, *rhs,
row,
column );
1447template<
typename MT
1452inline bool tryBitxorAssign(
const LowerMatrix<MT,SO,DF>& lhs,
1453 const Vector<VT,TF>& rhs,
size_t row,
size_t column )
1455 return tryAssign( lhs, *rhs,
row,
column );
1478template<
typename MT
1483inline bool tryBitxorAssign(
const LowerMatrix<MT,SO,DF>& lhs,
const Vector<VT,TF>& rhs,
1508template<
typename MT1
1513inline bool tryBitxorAssign(
const LowerMatrix<MT1,SO1,DF>& lhs,
1514 const Matrix<MT2,SO2>& rhs,
size_t row,
size_t column )
1516 return tryAssign( lhs, *rhs,
row,
column );
1536template<
typename MT
1539inline MT& derestrict( LowerMatrix<MT,SO,DF>& m )
1557template<
typename MT,
bool SO,
bool DF >
1558struct Size< LowerMatrix<MT,SO,DF>, 0UL >
1559 :
public Size<MT,0UL>
1562template<
typename MT,
bool SO,
bool DF >
1563struct Size< LowerMatrix<MT,SO,DF>, 1UL >
1564 :
public Size<MT,1UL>
1580template<
typename MT,
bool SO,
bool DF >
1581struct MaxSize< LowerMatrix<MT,SO,DF>, 0UL >
1582 :
public MaxSize<MT,0UL>
1585template<
typename MT,
bool SO,
bool DF >
1586struct MaxSize< LowerMatrix<MT,SO,DF>, 1UL >
1587 :
public MaxSize<MT,1UL>
1603template<
typename MT,
bool SO,
bool DF >
1604struct IsSquare< LowerMatrix<MT,SO,DF> >
1621template<
typename MT,
bool SO,
bool DF >
1622struct IsUniform< LowerMatrix<MT,SO,DF> >
1623 :
public IsUniform<MT>
1639template<
typename MT,
bool SO,
bool DF >
1640struct IsSymmetric< LowerMatrix<MT,SO,DF> >
1657template<
typename MT,
bool SO,
bool DF >
1658struct IsHermitian< LowerMatrix<MT,SO,DF> >
1675template<
typename MT,
bool SO,
bool DF >
1676struct IsLower< LowerMatrix<MT,SO,DF> >
1693template<
typename MT,
bool SO,
bool DF >
1694struct IsStrictlyLower< LowerMatrix<MT,SO,DF> >
1711template<
typename MT,
bool SO,
bool DF >
1712struct IsStrictlyUpper< LowerMatrix<MT,SO,DF> >
1729template<
typename MT,
bool SO,
bool DF >
1730struct IsAdaptor< LowerMatrix<MT,SO,DF> >
1747template<
typename MT,
bool SO,
bool DF >
1748struct IsRestricted< LowerMatrix<MT,SO,DF> >
1765template<
typename MT,
bool SO >
1766struct HasConstDataAccess< LowerMatrix<MT,SO,true> >
1783template<
typename MT,
bool SO,
bool DF >
1784struct IsAligned< LowerMatrix<MT,SO,DF> >
1785 :
public IsAligned<MT>
1801template<
typename MT,
bool SO,
bool DF >
1802struct IsContiguous< LowerMatrix<MT,SO,DF> >
1803 :
public IsContiguous<MT>
1819template<
typename MT,
bool SO,
bool DF >
1820struct IsPadded< LowerMatrix<MT,SO,DF> >
1821 :
public IsPadded<MT>
1837template<
typename MT,
bool SO,
bool DF >
1838struct RemoveAdaptor< LowerMatrix<MT,SO,DF> >
1856template<
typename T1,
typename T2 >
1857struct AddTraitEval1< T1, T2
1860 ( ( IsLower_v<T1> && IsLower_v<T2> ) ||
1861 ( IsLower_v<T1> && IsDiagonal_v<T2> ) ||
1862 ( IsDiagonal_v<T1> && IsLower_v<T2> ) ) &&
1863 !( IsUniLower_v<T1> && IsStrictlyLower_v<T2> ) &&
1864 !( IsStrictlyLower_v<T1> && ( IsUniLower_v<T2> || IsStrictlyLower_v<T2> ) ) &&
1865 !( IsDiagonal_v<T1> && IsDiagonal_v<T2> ) &&
1866 !( IsUniform_v<T1> && IsUniform_v<T2> ) &&
1867 !( IsZero_v<T1> || IsZero_v<T2> ) > >
1869 using Type = LowerMatrix< typename AddTraitEval2<T1,T2>::Type >;
1885template<
typename T1,
typename T2 >
1886struct SubTraitEval1< T1, T2
1889 ( ( IsLower_v<T1> && IsLower_v<T2> ) ||
1890 ( IsLower_v<T1> && IsDiagonal_v<T2> ) ||
1891 ( IsDiagonal_v<T1> && IsLower_v<T2> ) ) &&
1892 !( IsUniLower_v<T1> && IsStrictlyLower_v<T2> ) &&
1893 !( IsUniLower_v<T1> && IsUniLower_v<T2> ) &&
1894 !( IsStrictlyLower_v<T1> && IsStrictlyLower_v<T2> ) &&
1895 !( IsDiagonal_v<T1> && IsDiagonal_v<T2> ) &&
1896 !( IsZero_v<T1> || IsZero_v<T2> ) > >
1898 using Type = LowerMatrix< typename SubTraitEval2<T1,T2>::Type >;
1914template<
typename T1,
typename T2 >
1915struct SchurTraitEval1< T1, T2
1918 ( ( IsLower_v<T1> && !IsUpper_v<T2> ) ||
1919 ( !IsUpper_v<T1> && IsLower_v<T2> ) ) &&
1920 !( IsUniLower_v<T1> && IsUniLower_v<T2> ) &&
1921 !( IsStrictlyLower_v<T1> || IsStrictlyLower_v<T2> ) &&
1922 !( IsDiagonal_v<T1> || IsDiagonal_v<T2> ) &&
1923 !( IsZero_v<T1> || IsZero_v<T2> ) > >
1925 using Type = LowerMatrix< typename SchurTraitEval2<T1,T2>::Type >;
1941template<
typename T1,
typename T2 >
1942struct MultTraitEval1< T1, T2
1945 ( IsLower_v<T1> && !IsStrictlyLower_v<T1> &&
1946 !IsDiagonal_v<T1> && !IsUniform_v<T1> ) > >
1948 using Type = LowerMatrix< typename MultTraitEval2<T1,T2>::Type >;
1951template<
typename T1,
typename T2 >
1952struct MultTraitEval1< T1, T2
1955 ( IsLower_v<T2> && !IsStrictlyLower_v<T2> &&
1956 !IsDiagonal_v<T2> && !IsUniform_v<T2> ) > >
1958 using Type = LowerMatrix< typename MultTraitEval2<T1,T2>::Type >;
1961template<
typename T1,
typename T2 >
1962struct MultTraitEval1< T1, T2
1965 ( IsLower_v<T1> && IsLower_v<T2> ) &&
1966 !( IsUniLower_v<T1> && IsUniLower_v<T2> ) &&
1967 !( IsStrictlyLower_v<T1> && IsLower_v<T2> ) &&
1968 !( IsLower_v<T1> && IsStrictlyLower_v<T2> ) &&
1969 !( IsDiagonal_v<T1> && IsDiagonal_v<T2> ) &&
1970 !( IsIdentity_v<T1> || IsIdentity_v<T2> ) &&
1971 !( IsZero_v<T1> || IsZero_v<T2> ) > >
1973 using Type = LowerMatrix< typename MultTraitEval2<T1,T2>::Type >;
1989template<
typename T1,
typename T2 >
1990struct KronTraitEval1< T1, T2
1993 ( IsLower_v<T1> && IsLower_v<T2> ) &&
1994 !( IsUniLower_v<T1> && IsUniLower_v<T2> ) &&
1995 !( IsStrictlyLower_v<T1> || IsStrictlyLower_v<T2> ) &&
1996 !( IsDiagonal_v<T1> && IsDiagonal_v<T2> ) &&
1997 !( IsZero_v<T1> || IsZero_v<T2> ) > >
1999 using Type = LowerMatrix< typename KronTraitEval2<T1,T2>::Type >;
2015template<
typename T1,
typename T2 >
2016struct DivTraitEval1< T1, T2
2018 !IsStrictlyLower_v<T1> &&
2019 !IsDiagonal_v<T1> &&
2022 using Type = LowerMatrix< typename DivTraitEval2<T1,T2>::Type >;
2038template<
typename T,
typename OP >
2039struct UnaryMapTraitEval1< T, OP
2041 !YieldsUniLower_v<OP,T> &&
2042 !YieldsStrictlyLower_v<OP,T> &&
2043 !YieldsDiagonal_v<OP,T> > >
2045 using Type = LowerMatrix< typename UnaryMapTraitEval2<T,OP>::Type, StorageOrder_v<T> >;
2053template<
typename T1,
typename T2,
typename OP >
2054struct BinaryMapTraitEval1< T1, T2, OP
2056 !YieldsUniLower_v<OP,T1,T2> &&
2057 !YieldsStrictlyLower_v<OP,T1,T2> &&
2058 !YieldsDiagonal_v<OP,T1,T2> > >
2060 using Type = LowerMatrix< typename BinaryMapTraitEval2<T1,T2,OP>::Type >;
2076template<
typename MT,
bool SO,
bool DF >
2077struct DeclSymTrait< LowerMatrix<MT,SO,DF> >
2079 using Type = DiagonalMatrix<MT,SO,DF>;
2095template<
typename MT,
bool SO,
bool DF >
2096struct DeclHermTrait< LowerMatrix<MT,SO,DF> >
2098 using Type = HermitianMatrix<MT,SO,DF>;
2114template<
typename MT,
bool SO,
bool DF >
2115struct DeclLowTrait< LowerMatrix<MT,SO,DF> >
2117 using Type = LowerMatrix<MT,SO,DF>;
2133template<
typename MT,
bool SO,
bool DF >
2134struct DeclUniLowTrait< LowerMatrix<MT,SO,DF> >
2136 using Type = UniLowerMatrix<MT,SO,DF>;
2152template<
typename MT,
bool SO,
bool DF >
2153struct DeclStrLowTrait< LowerMatrix<MT,SO,DF> >
2155 using Type = StrictlyLowerMatrix<MT,SO,DF>;
2171template<
typename MT,
bool SO,
bool DF >
2172struct DeclUppTrait< LowerMatrix<MT,SO,DF> >
2174 using Type = DiagonalMatrix<MT,SO,DF>;
2190template<
typename MT,
bool SO,
bool DF >
2191struct DeclUniUppTrait< LowerMatrix<MT,SO,DF> >
2193 using Type = IdentityMatrix< ElementType_t<MT>, SO >;
2209template<
typename MT,
bool SO,
bool DF >
2210struct DeclStrUppTrait< LowerMatrix<MT,SO,DF> >
2212 using Type = ZeroMatrix< ElementType_t<MT>, SO >;
2228template<
typename MT,
bool SO,
bool DF >
2229struct DeclDiagTrait< LowerMatrix<MT,SO,DF> >
2231 using Type = DiagonalMatrix<MT,SO,DF>;
2247template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2248struct HighType< LowerMatrix<MT1,SO1,DF1>, LowerMatrix<MT2,SO2,DF2> >
2250 using Type = LowerMatrix< typename HighType<MT1,MT2>::Type >;
2266template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2267struct LowType< LowerMatrix<MT1,SO1,DF1>, LowerMatrix<MT2,SO2,DF2> >
2269 using Type = LowerMatrix< typename LowType<MT1,MT2>::Type >;
2285template<
typename MT,
size_t I,
size_t N >
2286struct SubmatrixTraitEval1< MT, I, I, N, N
2289 !IsUniLower_v<MT> &&
2290 !IsStrictlyLower_v<MT> &&
2291 !IsDiagonal_v<MT> &&
2295 using Type = LowerMatrix< typename SubmatrixTraitEval2<MT,I,I,N,N>::Type >;
Header file for the addition trait.
Header file for auxiliary alias declarations.
Header file for run time assertion macros.
Constraint on the data type.
Header file for the decldiag trait.
Header file for the declherm trait.
Header file for the decllow trait.
Header file for the declstrlow trait.
Header file for the declstrupp trait.
Header file for the declsym trait.
Header file for the declunilow trait.
Header file for the decluniupp trait.
Header file for the declupp trait.
Header file for the division trait.
Header file for the EnableIf class template.
Header file for the HasConstDataAccess type trait.
Constraint on the data type.
Header file for the HighType type trait.
Header file for the IntegralConstant class template.
Header file for the dense matrix inversion flags.
Header file for the IsAdaptor type trait.
Header file for the IsAligned type trait.
Header file for the IsContiguous type trait.
Header file for the isDefault shim.
Header file for the IsDiagonal type trait.
Header file for the isDivisor shim.
Header file for the IsHermitian type trait.
Header file for the IsIdentity type trait.
Header file for the IsLower type trait.
Header file for the IsMatrix type trait.
Header file for the IsPadded type trait.
Header file for the IsRestricted type trait.
Header file for the IsScalar type trait.
Header file for the IsSquare type trait.
Header file for the IsStrictlyLower type trait.
Header file for the IsStrictlyUpper type trait.
Header file for the IsSymmetric type trait.
Header file for the IsUniLower type trait.
Header file for the IsUpper type trait.
Header file for the Kron product trait.
Header file for the LowType type trait.
Constraint on the data type.
Header file for the map trait.
Header file for the MaxSize type trait.
Header file for the MAYBE_UNUSED function template.
Header file for the multiplication trait.
Header file for the relaxation flag enumeration.
Header file for the RemoveAdaptor type trait.
Header file for the Schur product trait.
Header file for the subtraction trait.
Header file for the submatrix trait.
Constraint on the data type.
Constraint on the data type.
Constraint on the data type.
Header file for the YieldsDiagonal type trait.
Header file for the YieldsLower type trait.
Header file for the YieldsStrictlyLower type trait.
Header file for the YieldsUniLower type trait.
Header file for the implementation of the base template of the LowerMatrix.
LowerMatrix specialization for dense matrices.
LowerMatrix specialization for sparse matrices.
Matrix adapter for lower triangular matrices.
Definition: BaseTemplate.h:558
Pointer difference type of the Blaze library.
Constraint on the data type.
decltype(auto) band(Matrix< MT, SO > &matrix, RBAs... args)
Creating a view on a specific band of the given matrix.
Definition: Band.h:140
decltype(auto) column(Matrix< MT, SO > &matrix, RCAs... args)
Creating a view on a specific column of the given matrix.
Definition: Column.h:137
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:222
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:1339
bool isIdentity(const DenseMatrix< MT, SO > &dm)
Checks if the given dense matrix is an identity matrix.
Definition: DenseMatrix.h:2561
void invert(const HermitianProxy< MT > &proxy)
In-place inversion of the represented element.
Definition: HermitianProxy.h:693
bool isIntact(const LowerMatrix< MT, SO, DF > &m)
Returns whether the invariants of the given lower matrix are intact.
Definition: LowerMatrix.h:202
bool isDefault(const LowerMatrix< MT, SO, DF > &m)
Returns whether the given lower matrix is in default state.
Definition: LowerMatrix.h:169
void swap(LowerMatrix< MT, SO, DF > &a, LowerMatrix< MT, SO, DF > &b) noexcept
Swapping the contents of two matrices.
Definition: LowerMatrix.h:220
#define BLAZE_CONSTRAINT_MUST_NOT_BE_SYMMETRIC_MATRIX_TYPE(T)
Constraint on the data type.
Definition: Symmetric.h:79
#define BLAZE_CONSTRAINT_MUST_BE_BLAS_COMPATIBLE_TYPE(T)
Constraint on the data type.
Definition: BLASCompatible.h:61
#define BLAZE_CONSTRAINT_MUST_NOT_REQUIRE_EVALUATION(T)
Constraint on the data type.
Definition: RequiresEvaluation.h:81
#define BLAZE_CONSTRAINT_MUST_NOT_BE_HERMITIAN_MATRIX_TYPE(T)
Constraint on the data type.
Definition: Hermitian.h:79
#define BLAZE_CONSTRAINT_MUST_NOT_BE_UPPER_MATRIX_TYPE(T)
Constraint on the data type.
Definition: Upper.h:81
#define BLAZE_CONSTRAINT_MUST_NOT_BE_LOWER_MATRIX_TYPE(T)
Constraint on the data type.
Definition: Lower.h:81
#define BLAZE_CONSTRAINT_MUST_NOT_BE_UNITRIANGULAR_MATRIX_TYPE(T)
Constraint on the data type.
Definition: UniTriangular.h:81
constexpr bool IsScalar_v
Auxiliary variable template for the IsScalar type trait.
Definition: IsScalar.h:104
constexpr ptrdiff_t DefaultSize_v
Default size of the Size type trait.
Definition: Size.h:72
constexpr bool IsMatrix_v
Auxiliary variable template for the IsMatrix type trait.
Definition: IsMatrix.h:124
constexpr bool YieldsLower_v
Auxiliary variable template for the YieldsLower type trait.
Definition: YieldsLower.h:126
constexpr bool IsLower_v
Auxiliary variable template for the IsLower type trait.
Definition: IsLower.h:175
RelaxationFlag
Relaxation flag for strict or relaxed semantics.
Definition: RelaxationFlag.h:66
constexpr Infinity inf
Global Infinity instance.
Definition: Infinity.h:1080
InversionFlag
Inversion flag.
Definition: InversionFlag.h:102
@ asUniLower
Flag for the inversion of a lower unitriangular matrix.
Definition: InversionFlag.h:112
@ asLower
Flag for the inversion of a lower triangular matrix.
Definition: InversionFlag.h:111
@ asUniUpper
Flag for the inversion of a upper unitriangular matrix.
Definition: InversionFlag.h:114
@ asDiagonal
Flag for the inversion of a diagonal matrix.
Definition: InversionFlag.h:115
@ byLU
Flag for the LU-based matrix inversion.
Definition: InversionFlag.h:103
@ asGeneral
Flag for the inversion of a general matrix (same as byLU).
Definition: InversionFlag.h:108
constexpr void reset(Matrix< MT, SO > &matrix)
Resetting the given matrix.
Definition: Matrix.h:806
void resize(Matrix< MT, SO > &matrix, size_t rows, size_t columns, bool preserve=true)
Changing the size of the matrix.
Definition: Matrix.h:1108
decltype(auto) row(Matrix< MT, SO > &, RRAs...)
Creating a view on a specific row of the given matrix.
Definition: Row.h:137
#define BLAZE_INTERNAL_ASSERT(expr, msg)
Run time assertion macro for internal checks.
Definition: Assert.h:101
#define BLAZE_ALWAYS_INLINE
Platform dependent setup of an enforced inline keyword.
Definition: Inline.h:85
BoolConstant< true > TrueType
Type traits base class.
Definition: IntegralConstant.h:132
typename EnableIf< Condition, T >::Type EnableIf_t
Auxiliary type for the EnableIf class template.
Definition: EnableIf.h:138
constexpr void MAYBE_UNUSED(const Args &...)
Suppression of unused parameter warnings.
Definition: MaybeUnused.h:81
Header file for the exception macros of the math module.
Header file for all forward declarations of the math module.
Header file for the Size type trait.
Header file for the StorageOrder type trait.
Header file for the IsZero type trait.
Header file for the generic min algorithm.