35#ifndef _BLAZE_MATH_ADAPTORS_DIAGONALMATRIX_H_
36#define _BLAZE_MATH_ADAPTORS_DIAGONALMATRIX_H_
125template< RelaxationFlag RF,
typename MT,
bool SO,
bool DF >
126bool isDefault(
const DiagonalMatrix<MT,SO,DF>& m );
128template<
typename MT,
bool SO,
bool DF >
129bool isIntact(
const DiagonalMatrix<MT,SO,DF>& m );
131template<
typename MT,
bool SO,
bool DF >
132void swap( DiagonalMatrix<MT,SO,DF>& a, DiagonalMatrix<MT,SO,DF>& b )
noexcept;
172 return m.rows() == 0UL;
174 for(
size_t i=0UL; i<m.rows(); ++i ) {
175 if( !isDefault<RF>( m(i,i) ) )
return false;
258inline void invert( DiagonalMatrix<MT,SO,true>& m )
267 invert<asDiagonal>( derestrict( m ) );
294template<
typename MT1,
bool SO1,
typename MT2,
typename MT3,
typename MT4,
bool SO2 >
295inline void lu(
const DiagonalMatrix<MT1,SO1,true>& A, DenseMatrix<MT2,SO1>& L,
296 DenseMatrix<MT3,SO1>& U, Matrix<MT4,SO2>& P )
310 using ET3 = ElementType_t<MT3>;
311 using ET4 = ElementType_t<MT4>;
313 const size_t n( (*A).rows() );
315 decltype(
auto) U2( derestrict( *U ) );
325 for(
size_t i=0UL; i<n; ++i ) {
354inline bool trySet(
const DiagonalMatrix<MT,SO,DF>& mat,
size_t i,
size_t j,
const ET& value )
390 trySet(
const DiagonalMatrix<MT,SO,DF>& mat,
size_t row,
size_t column,
size_t m,
size_t n,
const ET& value )
399 return ( m == 0UL ) ||
401 (
row ==
column && m == 1UL && n == 1UL ) ||
428inline bool tryAdd(
const DiagonalMatrix<MT,SO,DF>& mat,
size_t i,
size_t j,
const ET& value )
430 return trySet( mat, i, j, value );
459 tryAdd(
const DiagonalMatrix<MT,SO,DF>& mat,
size_t row,
size_t column,
size_t m,
size_t n,
const ET& value )
461 return trySet( mat,
row,
column, m, n, value );
487inline bool trySub(
const DiagonalMatrix<MT,SO,DF>& mat,
size_t i,
size_t j,
const ET& value )
489 return trySet( mat, i, j, value );
518 trySub(
const DiagonalMatrix<MT,SO,DF>& mat,
size_t row,
size_t column,
size_t m,
size_t n,
const ET& value )
520 return trySet( mat,
row,
column, m, n, value );
546inline bool tryBitor(
const DiagonalMatrix<MT,SO,DF>& mat,
size_t i,
size_t j,
const ET& value )
548 return trySet( mat, i, j, value );
577 tryBitor(
const DiagonalMatrix<MT,SO,DF>& mat,
size_t row,
size_t column,
size_t m,
size_t n,
const ET& value )
579 return trySet( mat,
row,
column, m, n, value );
605inline bool tryBitxor(
const DiagonalMatrix<MT,SO,DF>& mat,
size_t i,
size_t j,
const ET& value )
607 return tryAdd( mat, i, j, value );
636 tryBitxor(
const DiagonalMatrix<MT,SO,DF>& mat,
size_t row,
size_t column,
size_t m,
size_t n,
const ET& value )
638 return tryAdd( mat,
row,
column, m, n, value );
664inline bool tryAssign(
const DiagonalMatrix<MT,SO,DF>& lhs,
665 const DenseVector<VT,false>& rhs,
size_t row,
size_t column )
677 for(
size_t i=0UL; i<index; ++i ) {
682 for(
size_t i=index+1UL; i<(*rhs).size(); ++i ) {
713inline bool tryAssign(
const DiagonalMatrix<MT,SO,DF>& lhs,
714 const DenseVector<VT,true>& rhs,
size_t row,
size_t column )
726 for(
size_t i=0UL; i<index; ++i ) {
731 for(
size_t i=index+1UL; i<(*rhs).size(); ++i ) {
765inline bool tryAssign(
const DiagonalMatrix<MT,SO,DF>& lhs,
const DenseVector<VT,TF>& rhs,
777 for(
size_t i=0UL; i<(*rhs).size(); ++i ) {
809inline bool tryAssign(
const DiagonalMatrix<MT,SO,DF>& lhs,
810 const SparseVector<VT,false>& rhs,
size_t row,
size_t column )
822 for(
auto element=(*rhs).begin(); element!=(*rhs).end(); ++element ) {
823 if( element->index() != index && !
isDefault( element->value() ) )
853inline bool tryAssign(
const DiagonalMatrix<MT,SO,DF>& lhs,
854 const SparseVector<VT,true>& rhs,
size_t row,
size_t column )
866 for(
auto element=(*rhs).begin(); element!=(*rhs).end(); ++element ) {
867 if( element->index() != index && !
isDefault( element->value() ) )
900inline bool tryAssign(
const DiagonalMatrix<MT,SO,DF>& lhs,
const SparseVector<VT,TF>& rhs,
912 for(
const auto& element : *rhs ) {
940template<
typename MT1
944inline bool tryAssign(
const DiagonalMatrix<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() );
959 for(
size_t i=0UL; i<M; ++i ) {
960 for(
size_t j=0UL; j<N; ++j ) {
988template<
typename MT1
992inline bool tryAssign(
const DiagonalMatrix<MT1,SO,DF>& lhs,
993 const DenseMatrix<MT2,true>& rhs,
size_t row,
size_t column )
1004 const size_t M( (*rhs).rows() );
1005 const size_t N( (*rhs).columns() );
1007 for(
size_t j=0UL; j<N; ++j ) {
1008 for(
size_t i=0UL; i<M; ++i ) {
1036template<
typename MT1
1040inline bool tryAssign(
const DiagonalMatrix<MT1,SO,DF>& lhs,
1041 const SparseMatrix<MT2,false>& rhs,
size_t row,
size_t column )
1052 const size_t M( (*rhs).rows() );
1054 for(
size_t i=0UL; i<M; ++i ) {
1055 for(
auto element=(*rhs).begin(i); element!=(*rhs).end(i); ++element ) {
1083template<
typename MT1
1087inline bool tryAssign(
const DiagonalMatrix<MT1,SO,DF>& lhs,
1088 const SparseMatrix<MT2,true>& rhs,
size_t row,
size_t column )
1099 const size_t N( (*rhs).columns() );
1101 for(
size_t j=0UL; j<N; ++j ) {
1102 for(
auto element=(*rhs).begin(j); element!=(*rhs).end(j); ++element ) {
1130template<
typename MT
1135inline bool tryAddAssign(
const DiagonalMatrix<MT,SO,DF>& lhs,
1136 const Vector<VT,TF>& rhs,
size_t row,
size_t column )
1138 return tryAssign( lhs, *rhs,
row,
column );
1162template<
typename MT
1167inline bool tryAddAssign(
const DiagonalMatrix<MT,SO,DF>& lhs,
const Vector<VT,TF>& rhs,
1192template<
typename MT1
1197inline bool tryAddAssign(
const DiagonalMatrix<MT1,SO1,DF>& lhs,
1198 const Matrix<MT2,SO2>& rhs,
size_t row,
size_t column )
1200 return tryAssign( lhs, *rhs,
row,
column );
1223template<
typename MT
1228inline bool trySubAssign(
const DiagonalMatrix<MT,SO,DF>& lhs,
1229 const Vector<VT,TF>& rhs,
size_t row,
size_t column )
1231 return tryAssign( lhs, *rhs,
row,
column );
1255template<
typename MT
1260inline bool trySubAssign(
const DiagonalMatrix<MT,SO,DF>& lhs,
const Vector<VT,TF>& rhs,
1286template<
typename MT1
1291inline bool trySubAssign(
const DiagonalMatrix<MT1,SO1,DF>& lhs,
1292 const Matrix<MT2,SO2>& rhs,
size_t row,
size_t column )
1294 return tryAssign( lhs, *rhs,
row,
column );
1317template<
typename MT
1322inline bool tryBitorAssign(
const DiagonalMatrix<MT,SO,DF>& lhs,
1323 const Vector<VT,TF>& rhs,
size_t row,
size_t column )
1325 return tryAssign( lhs, *rhs,
row,
column );
1348template<
typename MT
1353inline bool tryBitorAssign(
const DiagonalMatrix<MT,SO,DF>& lhs,
const Vector<VT,TF>& rhs,
1378template<
typename MT1
1383inline bool tryBitorAssign(
const DiagonalMatrix<MT1,SO1,DF>& lhs,
1384 const Matrix<MT2,SO2>& rhs,
size_t row,
size_t column )
1386 return tryAssign( lhs, *rhs,
row,
column );
1409template<
typename MT
1414inline bool tryBitxorAssign(
const DiagonalMatrix<MT,SO,DF>& lhs,
1415 const Vector<VT,TF>& rhs,
size_t row,
size_t column )
1417 return tryAssign( lhs, *rhs,
row,
column );
1440template<
typename MT
1445inline bool tryBitxorAssign(
const DiagonalMatrix<MT,SO,DF>& lhs,
const Vector<VT,TF>& rhs,
1471template<
typename MT1
1476inline bool tryBitxorAssign(
const DiagonalMatrix<MT1,SO1,DF>& lhs,
1477 const Matrix<MT2,SO2>& rhs,
size_t row,
size_t column )
1479 return tryAssign( lhs, *rhs,
row,
column );
1500template<
typename MT
1503inline MT& derestrict( DiagonalMatrix<MT,SO,DF>& m )
1521template<
typename MT,
bool SO,
bool DF >
1522struct Size< DiagonalMatrix<MT,SO,DF>, 0UL >
1523 :
public Size<MT,0UL>
1526template<
typename MT,
bool SO,
bool DF >
1527struct Size< DiagonalMatrix<MT,SO,DF>, 1UL >
1528 :
public Size<MT,1UL>
1544template<
typename MT,
bool SO,
bool DF >
1545struct MaxSize< DiagonalMatrix<MT,SO,DF>, 0UL >
1546 :
public MaxSize<MT,0UL>
1549template<
typename MT,
bool SO,
bool DF >
1550struct MaxSize< DiagonalMatrix<MT,SO,DF>, 1UL >
1551 :
public MaxSize<MT,1UL>
1567template<
typename MT,
bool SO,
bool DF >
1568struct IsSquare< DiagonalMatrix<MT,SO,DF> >
1585template<
typename MT,
bool SO,
bool DF >
1586struct IsUniform< DiagonalMatrix<MT,SO,DF> >
1587 :
public IsUniform<MT>
1603template<
typename MT,
bool SO,
bool DF >
1604struct IsSymmetric< DiagonalMatrix<MT,SO,DF> >
1621template<
typename MT,
bool SO,
bool DF >
1622struct IsHermitian< DiagonalMatrix<MT,SO,DF> >
1623 :
public IsBuiltin< ElementType_t<MT> >
1639template<
typename MT,
bool SO,
bool DF >
1640struct IsLower< DiagonalMatrix<MT,SO,DF> >
1657template<
typename MT,
bool SO,
bool DF >
1658struct IsStrictlyLower< DiagonalMatrix<MT,SO,DF> >
1675template<
typename MT,
bool SO,
bool DF >
1676struct IsUpper< DiagonalMatrix<MT,SO,DF> >
1693template<
typename MT,
bool SO,
bool DF >
1694struct IsStrictlyUpper< DiagonalMatrix<MT,SO,DF> >
1711template<
typename MT,
bool SO,
bool DF >
1712struct IsAdaptor< DiagonalMatrix<MT,SO,DF> >
1729template<
typename MT,
bool SO,
bool DF >
1730struct IsRestricted< DiagonalMatrix<MT,SO,DF> >
1747template<
typename MT,
bool SO >
1748struct HasConstDataAccess< DiagonalMatrix<MT,SO,true> >
1765template<
typename MT,
bool SO,
bool DF >
1766struct IsAligned< DiagonalMatrix<MT,SO,DF> >
1767 :
public IsAligned<MT>
1783template<
typename MT,
bool SO,
bool DF >
1784struct IsContiguous< DiagonalMatrix<MT,SO,DF> >
1785 :
public IsContiguous<MT>
1801template<
typename MT,
bool SO,
bool DF >
1802struct IsPadded< DiagonalMatrix<MT,SO,DF> >
1803 :
public IsPadded<MT>
1819template<
typename MT,
bool SO,
bool DF >
1820struct RemoveAdaptor< DiagonalMatrix<MT,SO,DF> >
1838template<
typename T1,
typename T2 >
1839struct AddTraitEval1< T1, T2
1842 IsDiagonal_v<T1> && IsDiagonal_v<T2> &&
1843 !( IsZero_v<T1> || IsZero_v<T2> ) > >
1845 using Type = DiagonalMatrix< typename AddTraitEval2<T1,T2>::Type >;
1861template<
typename T1,
typename T2 >
1862struct SubTraitEval1< T1, T2
1865 IsDiagonal_v<T1> && IsDiagonal_v<T2> &&
1866 !( IsZero_v<T1> || IsZero_v<T2> ) > >
1868 using Type = DiagonalMatrix< typename SubTraitEval2<T1,T2>::Type >;
1871template<
typename T1,
typename T2 >
1872struct SubTraitEval1< T1, T2
1875 IsZero_v<T1> && IsIdentity_v<T2> > >
1877 using Tmp = If_t< StorageOrder_v<T1> != StorageOrder_v<T2>, OppositeType_t<T1>, T1 >;
1878 using Type = DiagonalMatrix< typename SubTraitEval2<Tmp,T2>::Type >;
1894template<
typename T1,
typename T2 >
1895struct SchurTraitEval1< T1, T2
1898 ( IsDiagonal_v<T1> ||
1900 ( IsLower_v<T1> && IsUpper_v<T2> ) ||
1901 ( IsUpper_v<T1> && IsLower_v<T2> ) ) &&
1902 !( IsStrictlyLower_v<T1> && IsUpper_v<T2> ) &&
1903 !( IsStrictlyUpper_v<T1> && IsLower_v<T2> ) &&
1904 !( IsLower_v<T1> && IsStrictlyUpper_v<T2> ) &&
1905 !( IsUpper_v<T1> && IsStrictlyLower_v<T2> ) &&
1906 !( IsUniTriangular_v<T1> && IsUniTriangular_v<T2> ) &&
1907 !( IsZero_v<T1> || IsZero_v<T2> ) > >
1909 using Type = DiagonalMatrix< typename SchurTraitEval2<T1,T2>::Type >;
1925template<
typename T1,
typename T2 >
1926struct MultTraitEval1< T1, T2
1929 ( IsDiagonal_v<T1> && !IsUniform_v<T1> ) > >
1931 using Type = DiagonalMatrix< typename MultTraitEval2<T1,T2>::Type >;
1934template<
typename T1,
typename T2 >
1935struct MultTraitEval1< T1, T2
1938 ( IsDiagonal_v<T2> && !IsUniform_v<T2> ) > >
1940 using Type = DiagonalMatrix< typename MultTraitEval2<T1,T2>::Type >;
1943template<
typename T1,
typename T2 >
1944struct MultTraitEval1< T1, T2
1947 ( IsDiagonal_v<T1> && IsDiagonal_v<T2> ) &&
1948 !( IsIdentity_v<T1> || IsIdentity_v<T2> ) &&
1949 !( IsZero_v<T1> || IsZero_v<T2> ) > >
1951 using Type = DiagonalMatrix< typename MultTraitEval2<T1,T2>::Type >;
1967template<
typename T1,
typename T2 >
1968struct KronTraitEval1< T1, T2
1971 ( IsDiagonal_v<T1> && IsDiagonal_v<T2> ) &&
1972 !( IsIdentity_v<T1> && IsIdentity_v<T2> ) &&
1973 !( IsZero_v<T1> || IsZero_v<T2> ) > >
1975 using Type = DiagonalMatrix< typename KronTraitEval2<T1,T2>::Type >;
1991template<
typename T1,
typename T2 >
1992struct DivTraitEval1< T1, T2
1995 using Type = DiagonalMatrix< typename DivTraitEval2<T1,T2>::Type >;
2011template<
typename T,
typename OP >
2012struct UnaryMapTraitEval1< T, OP
2014 !YieldsIdentity_v<OP,T> &&
2015 !YieldsZero_v<OP,T> > >
2017 using Type = DiagonalMatrix< typename UnaryMapTraitEval2<T,OP>::Type, StorageOrder_v<T> >;
2025template<
typename T1,
typename T2,
typename OP >
2026struct BinaryMapTraitEval1< T1, T2, OP
2028 !YieldsIdentity_v<OP,T1,T2> &&
2029 !YieldsZero_v<OP,T1,T2> > >
2031 using Type = DiagonalMatrix< typename BinaryMapTraitEval2<T1,T2,OP>::Type >;
2047template<
typename MT,
bool SO,
bool DF >
2048struct DeclSymTrait< DiagonalMatrix<MT,SO,DF> >
2050 using Type = DiagonalMatrix<MT,SO,DF>;
2066template<
typename MT,
bool SO,
bool DF >
2067struct DeclHermTrait< DiagonalMatrix<MT,SO,DF> >
2069 using Type = HermitianMatrix<MT,SO,DF>;
2085template<
typename MT,
bool SO,
bool DF >
2086struct DeclLowTrait< DiagonalMatrix<MT,SO,DF> >
2088 using Type = DiagonalMatrix<MT,SO,DF>;
2104template<
typename MT,
bool SO,
bool DF >
2105struct DeclUniLowTrait< DiagonalMatrix<MT,SO,DF> >
2107 using Type = IdentityMatrix< ElementType_t<MT>, SO >;
2123template<
typename MT,
bool SO,
bool DF >
2124struct DeclStrLowTrait< DiagonalMatrix<MT,SO,DF> >
2126 using Type = ZeroMatrix< ElementType_t<MT>, SO >;
2142template<
typename MT,
bool SO,
bool DF >
2143struct DeclUppTrait< DiagonalMatrix<MT,SO,DF> >
2145 using Type = DiagonalMatrix<MT,SO,DF>;
2161template<
typename MT,
bool SO,
bool DF >
2162struct DeclUniUppTrait< DiagonalMatrix<MT,SO,DF> >
2164 using Type = IdentityMatrix< ElementType_t<MT>, SO >;
2180template<
typename MT,
bool SO,
bool DF >
2181struct DeclStrUppTrait< DiagonalMatrix<MT,SO,DF> >
2183 using Type = ZeroMatrix< ElementType_t<MT>, SO >;
2199template<
typename MT,
bool SO,
bool DF >
2200struct DeclDiagTrait< DiagonalMatrix<MT,SO,DF> >
2202 using Type = DiagonalMatrix<MT,SO,DF>;
2218template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2219struct HighType< DiagonalMatrix<MT1,SO1,DF1>, DiagonalMatrix<MT2,SO2,DF2> >
2221 using Type = DiagonalMatrix< typename HighType<MT1,MT2>::Type >;
2237template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2238struct LowType< DiagonalMatrix<MT1,SO1,DF1>, DiagonalMatrix<MT2,SO2,DF2> >
2240 using Type = DiagonalMatrix< typename LowType<MT1,MT2>::Type >;
2256template<
typename MT,
size_t I,
size_t N >
2257struct SubmatrixTraitEval1< MT, I, I, N, N
2260 !IsIdentity_v<MT> &&
2263 using Type = DiagonalMatrix< 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 If class template.
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 IsBuiltin 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 IsUniTriangular 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 YieldsIdentity type trait.
Header file for the YieldsZero type trait.
Header file for the implementation of the base template of the DiagonalMatrix.
DiagonalMatrix specialization for dense matrices.
DiagonalMatrix specialization for sparse matrices.
Matrix adapter for diagonal matrices.
Definition: BaseTemplate.h:565
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
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 IsScalar_v
Auxiliary variable template for the IsScalar type trait.
Definition: IsScalar.h:104
constexpr bool YieldsDiagonal_v
Auxiliary variable template for the YieldsDiagonal type trait.
Definition: YieldsDiagonal.h:126
constexpr ptrdiff_t DefaultSize_v
Default size of the Size type trait.
Definition: Size.h:72
constexpr bool IsDiagonal_v
Auxiliary variable template for the IsDiagonal type trait.
Definition: IsDiagonal.h:148
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
@ asUniUpper
Flag for the inversion of a upper unitriangular matrix.
Definition: InversionFlag.h:114
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.