35#ifndef _BLAZE_MATH_ADAPTORS_UPPERMATRIX_H_
36#define _BLAZE_MATH_ADAPTORS_UPPERMATRIX_H_
125template< RelaxationFlag RF,
typename MT,
bool SO,
bool DF >
126bool isDefault(
const UpperMatrix<MT,SO,DF>& m );
128template<
typename MT,
bool SO,
bool DF >
129bool isIntact(
const UpperMatrix<MT,SO,DF>& m );
131template<
typename MT,
bool SO,
bool DF >
132void swap( UpperMatrix<MT,SO,DF>& a, UpperMatrix<MT,SO,DF>& b )
noexcept;
169inline bool isDefault(
const UpperMatrix<MT,SO,DF>& m )
172 return m.rows() == 0UL;
173 else return isStrictlyLower<RF>( m );
202inline bool isIntact(
const UpperMatrix<MT,SO,DF>& m )
220inline void swap( UpperMatrix<MT,SO,DF>& a, UpperMatrix<MT,SO,DF>& b )
noexcept
253inline void invert( UpperMatrix<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 UpperMatrix<MT1,SO1,true>& A, DenseMatrix<MT2,SO1>& L,
297 DenseMatrix<MT3,SO1>& U, Matrix<MT4,SO2>& P )
311 using ET2 = ElementType_t<MT2>;
312 using ET4 = ElementType_t<MT4>;
314 const size_t n( (*A).rows() );
316 decltype(
auto) L2( derestrict( *L ) );
326 for(
size_t i=0UL; i<n; ++i ) {
355inline bool trySet(
const UpperMatrix<MT,SO,DF>& mat,
size_t i,
size_t j,
const ET& value )
391 trySet(
const UpperMatrix<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 UpperMatrix<MT,SO,DF>& mat,
size_t i,
size_t j,
const ET& value )
431 return trySet( mat, i, j, value );
460 tryAdd(
const UpperMatrix<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 UpperMatrix<MT,SO,DF>& mat,
size_t i,
size_t j,
const ET& value )
490 return trySet( mat, i, j, value );
519 trySub(
const UpperMatrix<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 UpperMatrix<MT,SO,DF>& mat,
size_t i,
size_t j,
const ET& value )
549 return trySet( mat, i, j, value );
578 tryBitor(
const UpperMatrix<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 UpperMatrix<MT,SO,DF>& mat,
size_t i,
size_t j,
const ET& value )
608 return tryAdd( mat, i, j, value );
637 tryBitxor(
const UpperMatrix<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 UpperMatrix<MT,SO,DF>& lhs,
666 const DenseVector<VT,false>& rhs,
size_t row,
size_t column )
678 for(
size_t i=ibegin; i<(*rhs).size(); ++i ) {
709inline bool tryAssign(
const UpperMatrix<MT,SO,DF>& lhs,
710 const DenseVector<VT,true>& rhs,
size_t row,
size_t column )
723 const size_t iend(
min(
row -
column, (*rhs).size() ) );
725 for(
size_t i=0UL; i<iend; ++i ) {
759inline bool tryAssign(
const UpperMatrix<MT,SO,DF>& lhs,
const DenseVector<VT,TF>& rhs,
772 for(
size_t i=0UL; i<(*rhs).size(); ++i ) {
804inline bool tryAssign(
const UpperMatrix<MT,SO,DF>& lhs,
805 const SparseVector<VT,false>& rhs,
size_t row,
size_t column )
815 const auto last( (*rhs).end() );
818 for( ; element!=last; ++element ) {
849inline bool tryAssign(
const UpperMatrix<MT,SO,DF>& lhs,
850 const SparseVector<VT,true>& rhs,
size_t row,
size_t column )
863 const auto last( (*rhs).lowerBound(
row -
column ) );
865 for(
auto element=(*rhs).begin(); element!=last; ++element ) {
899inline bool tryAssign(
const UpperMatrix<MT,SO,DF>& lhs,
const SparseVector<VT,TF>& rhs,
912 for(
const auto& element : *rhs ) {
940template<
typename MT1
944inline bool tryAssign(
const UpperMatrix<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=ibegin; i<M; ++i )
968 for(
size_t j=0UL; j<jend; ++j ) {
996template<
typename MT1
1000inline bool tryAssign(
const UpperMatrix<MT1,SO,DF>& lhs,
1001 const DenseMatrix<MT2,true>& rhs,
size_t row,
size_t column )
1012 const size_t M( (*rhs).rows() );
1013 const size_t N( (*rhs).columns() );
1020 for(
size_t j=0UL; j<jend; ++j )
1022 const bool containsDiagonal(
column + j >=
row );
1023 const size_t ibegin( ( containsDiagonal )?(
column + j -
row + 1UL ):( 0UL ) );
1025 for(
size_t i=ibegin; i<M; ++i ) {
1053template<
typename MT1
1057inline bool tryAssign(
const UpperMatrix<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=ibegin; i<M; ++i )
1080 const auto last( (*rhs).lowerBound( i,
min( index, N ) ) );
1082 for(
auto element=(*rhs).begin(i); element!=last; ++element ) {
1110template<
typename MT1
1114inline bool tryAssign(
const UpperMatrix<MT1,SO,DF>& lhs,
1115 const SparseMatrix<MT2,true>& rhs,
size_t row,
size_t column )
1126 const size_t M( (*rhs).rows() );
1127 const size_t N( (*rhs).columns() );
1134 for(
size_t j=0UL; j<jend; ++j )
1136 const bool containsDiagonal(
column + j >=
row );
1137 const size_t index( ( containsDiagonal )?(
column + j -
row + 1UL ):( 0UL ) );
1139 const auto last( (*rhs).end(j) );
1140 auto element( (*rhs).lowerBound( index, j ) );
1142 for( ; element!=last; ++element ) {
1170template<
typename MT
1175inline bool tryAddAssign(
const UpperMatrix<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 UpperMatrix<MT,SO,DF>& lhs,
const Vector<VT,TF>& rhs,
1232template<
typename MT1
1237inline bool tryAddAssign(
const UpperMatrix<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 UpperMatrix<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 UpperMatrix<MT,SO,DF>& lhs,
const Vector<VT,TF>& rhs,
1324template<
typename MT1
1329inline bool trySubAssign(
const UpperMatrix<MT1,SO1,DF>& lhs,
1330 const Matrix<MT2,SO2>& rhs,
size_t row,
size_t column )
1332 return tryAssign( lhs, *rhs,
row,
column );
1354template<
typename MT
1359inline bool tryBitorAssign(
const UpperMatrix<MT,SO,DF>& lhs,
1360 const Vector<VT,TF>& rhs,
size_t row,
size_t column )
1362 return tryAssign( lhs, *rhs,
row,
column );
1385template<
typename MT
1390inline bool tryBitorAssign(
const UpperMatrix<MT,SO,DF>& lhs,
const Vector<VT,TF>& rhs,
1415template<
typename MT1
1420inline bool tryBitorAssign(
const UpperMatrix<MT1,SO1,DF>& lhs,
1421 const Matrix<MT2,SO2>& rhs,
size_t row,
size_t column )
1423 return tryAssign( lhs, *rhs,
row,
column );
1445template<
typename MT
1450inline bool tryBitxorAssign(
const UpperMatrix<MT,SO,DF>& lhs,
1451 const Vector<VT,TF>& rhs,
size_t row,
size_t column )
1453 return tryAssign( lhs, *rhs,
row,
column );
1476template<
typename MT
1481inline bool tryBitxorAssign(
const UpperMatrix<MT,SO,DF>& lhs,
const Vector<VT,TF>& rhs,
1506template<
typename MT1
1511inline bool tryBitxorAssign(
const UpperMatrix<MT1,SO1,DF>& lhs,
1512 const Matrix<MT2,SO2>& rhs,
size_t row,
size_t column )
1514 return tryAssign( lhs, *rhs,
row,
column );
1534template<
typename MT
1537inline MT& derestrict( UpperMatrix<MT,SO,DF>& m )
1555template<
typename MT,
bool SO,
bool DF >
1556struct Size< UpperMatrix<MT,SO,DF>, 0UL >
1557 :
public Size<MT,0UL>
1560template<
typename MT,
bool SO,
bool DF >
1561struct Size< UpperMatrix<MT,SO,DF>, 1UL >
1562 :
public Size<MT,1UL>
1578template<
typename MT,
bool SO,
bool DF >
1579struct MaxSize< UpperMatrix<MT,SO,DF>, 0UL >
1580 :
public MaxSize<MT,0UL>
1583template<
typename MT,
bool SO,
bool DF >
1584struct MaxSize< UpperMatrix<MT,SO,DF>, 1UL >
1585 :
public MaxSize<MT,1UL>
1601template<
typename MT,
bool SO,
bool DF >
1602struct IsSquare< UpperMatrix<MT,SO,DF> >
1619template<
typename MT,
bool SO,
bool DF >
1620struct IsUniform< UpperMatrix<MT,SO,DF> >
1621 :
public IsUniform<MT>
1637template<
typename MT,
bool SO,
bool DF >
1638struct IsSymmetric< UpperMatrix<MT,SO,DF> >
1655template<
typename MT,
bool SO,
bool DF >
1656struct IsHermitian< UpperMatrix<MT,SO,DF> >
1673template<
typename MT,
bool SO,
bool DF >
1674struct IsStrictlyLower< UpperMatrix<MT,SO,DF> >
1691template<
typename MT,
bool SO,
bool DF >
1692struct IsUpper< UpperMatrix<MT,SO,DF> >
1709template<
typename MT,
bool SO,
bool DF >
1710struct IsStrictlyUpper< UpperMatrix<MT,SO,DF> >
1727template<
typename MT,
bool SO,
bool DF >
1728struct IsAdaptor< UpperMatrix<MT,SO,DF> >
1745template<
typename MT,
bool SO,
bool DF >
1746struct IsRestricted< UpperMatrix<MT,SO,DF> >
1763template<
typename MT,
bool SO >
1764struct HasConstDataAccess< UpperMatrix<MT,SO,true> >
1781template<
typename MT,
bool SO,
bool DF >
1782struct IsAligned< UpperMatrix<MT,SO,DF> >
1783 :
public IsAligned<MT>
1799template<
typename MT,
bool SO,
bool DF >
1800struct IsContiguous< UpperMatrix<MT,SO,DF> >
1801 :
public IsContiguous<MT>
1817template<
typename MT,
bool SO,
bool DF >
1818struct IsPadded< UpperMatrix<MT,SO,DF> >
1819 :
public IsPadded<MT>
1835template<
typename MT,
bool SO,
bool DF >
1836struct RemoveAdaptor< UpperMatrix<MT,SO,DF> >
1854template<
typename T1,
typename T2 >
1855struct AddTraitEval1< T1, T2
1858 ( ( IsUpper_v<T1> && IsUpper_v<T2> ) ||
1859 ( IsUpper_v<T1> && IsDiagonal_v<T2> ) ||
1860 ( IsDiagonal_v<T1> && IsUpper_v<T2> ) ) &&
1861 !( IsUniUpper_v<T1> && IsStrictlyUpper_v<T2> ) &&
1862 !( IsStrictlyUpper_v<T1> && ( IsUniUpper_v<T2> || IsStrictlyUpper_v<T2> ) ) &&
1863 !( IsDiagonal_v<T1> && IsDiagonal_v<T2> ) &&
1864 !( IsUniform_v<T1> && IsUniform_v<T2> ) &&
1865 !( IsZero_v<T1> || IsZero_v<T2> ) > >
1867 using Type = UpperMatrix< typename AddTraitEval2<T1,T2>::Type >;
1883template<
typename T1,
typename T2 >
1884struct SubTraitEval1< T1, T2
1887 ( ( IsUpper_v<T1> && IsUpper_v<T2> ) ||
1888 ( IsUpper_v<T1> && IsDiagonal_v<T2> ) ||
1889 ( IsDiagonal_v<T1> && IsUpper_v<T2> ) ) &&
1890 !( IsUniUpper_v<T1> && IsStrictlyUpper_v<T2> ) &&
1891 !( IsUniUpper_v<T1> && IsUniUpper_v<T2> ) &&
1892 !( IsStrictlyUpper_v<T1> && IsStrictlyUpper_v<T2> ) &&
1893 !( IsDiagonal_v<T1> && IsDiagonal_v<T2> ) &&
1894 !( IsZero_v<T1> || IsZero_v<T2> ) > >
1896 using Type = UpperMatrix< typename SubTraitEval2<T1,T2>::Type >;
1912template<
typename T1,
typename T2 >
1913struct SchurTraitEval1< T1, T2
1916 ( ( IsUpper_v<T1> && !IsLower_v<T2> ) ||
1917 ( !IsLower_v<T1> && IsUpper_v<T2> ) ) &&
1918 !( IsUniUpper_v<T1> && IsUniUpper_v<T2> ) &&
1919 !( IsStrictlyUpper_v<T1> || IsStrictlyUpper_v<T2> ) &&
1920 !( IsDiagonal_v<T1> || IsDiagonal_v<T2> ) &&
1921 !( IsZero_v<T1> || IsZero_v<T2> ) > >
1923 using Type = UpperMatrix< typename SchurTraitEval2<T1,T2>::Type >;
1939template<
typename T1,
typename T2 >
1940struct MultTraitEval1< T1, T2
1943 ( IsUpper_v<T1> && !IsStrictlyUpper_v<T1> &&
1944 !IsDiagonal_v<T1> && !IsUniform_v<T1> ) > >
1946 using Type = UpperMatrix< typename MultTraitEval2<T1,T2>::Type >;
1949template<
typename T1,
typename T2 >
1950struct MultTraitEval1< T1, T2
1953 ( IsUpper_v<T2> && !IsStrictlyUpper_v<T2> &&
1954 !IsDiagonal_v<T2> && !IsUniform_v<T2> ) > >
1956 using Type = UpperMatrix< typename MultTraitEval2<T1,T2>::Type >;
1959template<
typename T1,
typename T2 >
1960struct MultTraitEval1< T1, T2
1963 ( IsUpper_v<T1> && IsUpper_v<T2> ) &&
1964 !( IsUniUpper_v<T1> && IsUniUpper_v<T2> ) &&
1965 !( IsStrictlyUpper_v<T1> && IsUpper_v<T2> ) &&
1966 !( IsUpper_v<T1> && IsStrictlyUpper_v<T2> ) &&
1967 !( IsDiagonal_v<T1> && IsDiagonal_v<T2> ) &&
1968 !( IsIdentity_v<T1> || IsIdentity_v<T2> ) &&
1969 !( IsZero_v<T1> || IsZero_v<T2> ) > >
1971 using Type = UpperMatrix< typename MultTraitEval2<T1,T2>::Type >;
1987template<
typename T1,
typename T2 >
1988struct KronTraitEval1< T1, T2
1991 ( IsUpper_v<T1> && IsUpper_v<T2> ) &&
1992 !( IsUniUpper_v<T1> && IsUniUpper_v<T2> ) &&
1993 !( IsStrictlyUpper_v<T1> || IsStrictlyUpper_v<T2> ) &&
1994 !( IsDiagonal_v<T1> && IsDiagonal_v<T2> ) &&
1995 !( IsZero_v<T1> || IsZero_v<T2> ) > >
1997 using Type = UpperMatrix< typename KronTraitEval2<T1,T2>::Type >;
2013template<
typename T1,
typename T2 >
2014struct DivTraitEval1< T1, T2
2016 !IsStrictlyUpper_v<T1> &&
2017 !IsDiagonal_v<T1> &&
2020 using Type = UpperMatrix< typename DivTraitEval2<T1,T2>::Type >;
2036template<
typename T,
typename OP >
2037struct UnaryMapTraitEval1< T, OP
2039 !YieldsUniUpper_v<OP,T> &&
2040 !YieldsStrictlyUpper_v<OP,T> &&
2041 !YieldsDiagonal_v<OP,T> > >
2043 using Type = UpperMatrix< typename UnaryMapTraitEval2<T,OP>::Type, StorageOrder_v<T> >;
2051template<
typename T1,
typename T2,
typename OP >
2052struct BinaryMapTraitEval1< T1, T2, OP
2054 !YieldsUniUpper_v<OP,T1,T2> &&
2055 !YieldsStrictlyUpper_v<OP,T1,T2> &&
2056 !YieldsDiagonal_v<OP,T1,T2> > >
2058 using Type = UpperMatrix< typename BinaryMapTraitEval2<T1,T2,OP>::Type >;
2074template<
typename MT,
bool SO,
bool DF >
2075struct DeclSymTrait< UpperMatrix<MT,SO,DF> >
2077 using Type = DiagonalMatrix<MT,SO,DF>;
2093template<
typename MT,
bool SO,
bool DF >
2094struct DeclHermTrait< UpperMatrix<MT,SO,DF> >
2096 using Type = HermitianMatrix<MT,SO,DF>;
2112template<
typename MT,
bool SO,
bool DF >
2113struct DeclLowTrait< UpperMatrix<MT,SO,DF> >
2115 using Type = DiagonalMatrix<MT,SO,DF>;
2131template<
typename MT,
bool SO,
bool DF >
2132struct DeclUniLowTrait< UpperMatrix<MT,SO,DF> >
2134 using Type = IdentityMatrix< ElementType_t<MT>, SO >;
2150template<
typename MT,
bool SO,
bool DF >
2151struct DeclStrLowTrait< UpperMatrix<MT,SO,DF> >
2153 using Type = ZeroMatrix< ElementType_t<MT>, SO >;
2169template<
typename MT,
bool SO,
bool DF >
2170struct DeclUppTrait< UpperMatrix<MT,SO,DF> >
2172 using Type = UpperMatrix<MT,SO,DF>;
2188template<
typename MT,
bool SO,
bool DF >
2189struct DeclUniUppTrait< UpperMatrix<MT,SO,DF> >
2191 using Type = UniUpperMatrix<MT,SO,DF>;
2207template<
typename MT,
bool SO,
bool DF >
2208struct DeclStrUppTrait< UpperMatrix<MT,SO,DF> >
2210 using Type = StrictlyUpperMatrix<MT,SO,DF>;
2226template<
typename MT,
bool SO,
bool DF >
2227struct DeclDiagTrait< UpperMatrix<MT,SO,DF> >
2229 using Type = DiagonalMatrix<MT,SO,DF>;
2245template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2246struct HighType< UpperMatrix<MT1,SO1,DF1>, UpperMatrix<MT2,SO2,DF2> >
2248 using Type = UpperMatrix< typename HighType<MT1,MT2>::Type >;
2264template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2265struct LowType< UpperMatrix<MT1,SO1,DF1>, UpperMatrix<MT2,SO2,DF2> >
2267 using Type = UpperMatrix< typename LowType<MT1,MT2>::Type >;
2283template<
typename MT,
size_t I,
size_t N >
2284struct SubmatrixTraitEval1< MT, I, I, N, N
2287 !IsUniUpper_v<MT> &&
2288 !IsStrictlyUpper_v<MT> &&
2289 !IsDiagonal_v<MT> &&
2293 using Type = UpperMatrix< 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 IsUniUpper 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 YieldsStrictlyUpper type trait.
Header file for the YieldsUniUpper type trait.
Header file for the YieldsUpper type trait.
Header file for the implementation of the base template of the UpperMatrix.
UpperMatrix specialization for dense matrices.
UpperMatrix specialization for sparse matrices.
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
bool isIntact(const DiagonalMatrix< MT, SO, DF > &m)
Returns whether the invariants of the given diagonal matrix are intact.
Definition: DiagonalMatrix.h:207
void swap(DiagonalMatrix< MT, SO, DF > &a, DiagonalMatrix< MT, SO, DF > &b) noexcept
Swapping the contents of two matrices.
Definition: DiagonalMatrix.h:225
bool isDefault(const DiagonalMatrix< MT, SO, DF > &m)
Returns whether the given diagonal matrix is in default state.
Definition: DiagonalMatrix.h:169
void invert(const HermitianProxy< MT > &proxy)
In-place inversion of the represented element.
Definition: HermitianProxy.h:693
#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 YieldsUpper_v
Auxiliary variable template for the YieldsUpper type trait.
Definition: YieldsUpper.h:126
constexpr bool IsScalar_v
Auxiliary variable template for the IsScalar type trait.
Definition: IsScalar.h:104
constexpr bool IsUpper_v
Auxiliary variable template for the IsUpper type trait.
Definition: IsUpper.h:175
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
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
@ asUpper
Flag for the inversion of a upper triangular matrix.
Definition: InversionFlag.h:113
@ 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.