35 #ifndef _BLAZE_MATH_ADAPTORS_UPPERMATRIX_H_ 36 #define _BLAZE_MATH_ADAPTORS_UPPERMATRIX_H_ 121 template<
typename MT,
bool SO,
bool DF >
122 void reset( UpperMatrix<MT,SO,DF>& m );
124 template<
typename MT,
bool SO,
bool DF >
125 void reset( UpperMatrix<MT,SO,DF>& m,
size_t i );
127 template<
typename MT,
bool SO,
bool DF >
128 void clear( UpperMatrix<MT,SO,DF>& m );
130 template<
bool RF,
typename MT,
bool SO,
bool DF >
131 bool isDefault(
const UpperMatrix<MT,SO,DF>& m );
133 template<
typename MT,
bool SO,
bool DF >
134 bool isIntact(
const UpperMatrix<MT,SO,DF>& m );
136 template<
typename MT,
bool SO,
bool DF >
137 void swap( UpperMatrix<MT,SO,DF>& a, UpperMatrix<MT,SO,DF>& b ) noexcept;
149 template<
typename MT
172 template<
typename MT
189 template<
typename MT
233 return isDefault<RF>( m.matrix_ );
259 template<
typename MT
277 template<
typename MT
313 inline void invert( UpperMatrix<MT,SO,true>& m )
328 invert<flag>( derestrict( m ) );
355 template<
typename MT1,
bool SO1,
typename MT2,
typename MT3,
typename MT4,
bool SO2 >
356 inline void lu(
const UpperMatrix<MT1,SO1,true>& A, DenseMatrix<MT2,SO1>& L,
357 DenseMatrix<MT3,SO1>& U, Matrix<MT4,SO2>& P )
371 using ET2 = ElementType_t<MT2>;
372 using ET4 = ElementType_t<MT4>;
374 const size_t n( (~A).
rows() );
376 decltype(
auto) L2( derestrict( ~L ) );
386 for(
size_t i=0UL; i<n; ++i ) {
411 template<
typename MT
415 inline bool trySet(
const UpperMatrix<MT,SO,DF>& mat,
size_t i,
size_t j,
const ET& value )
444 template<
typename MT
448 inline bool tryAdd(
const UpperMatrix<MT,SO,DF>& mat,
size_t i,
size_t j,
const ET& value )
450 return trySet( mat, i, j, value );
472 template<
typename MT
476 inline bool trySub(
const UpperMatrix<MT,SO,DF>& mat,
size_t i,
size_t j,
const ET& value )
478 return trySet( mat, i, j, value );
500 template<
typename MT
504 inline bool tryAssign(
const UpperMatrix<MT,SO,DF>& lhs,
505 const DenseVector<VT,false>& rhs,
size_t row,
size_t column )
517 for(
size_t i=ibegin; i<(~rhs).
size(); ++i ) {
544 template<
typename MT
548 inline bool tryAssign(
const UpperMatrix<MT,SO,DF>& lhs,
549 const DenseVector<VT,true>& rhs,
size_t row,
size_t column )
564 for(
size_t i=0UL; i<iend; ++i ) {
593 template<
typename MT
598 inline bool tryAssign(
const UpperMatrix<MT,SO,DF>& lhs,
const DenseVector<VT,TF>& rhs,
611 for(
size_t i=0UL; i<(~rhs).
size(); ++i ) {
639 template<
typename MT
643 inline bool tryAssign(
const UpperMatrix<MT,SO,DF>& lhs,
644 const SparseVector<VT,false>& rhs,
size_t row,
size_t column )
654 const auto last( (~rhs).
end() );
657 for( ; element!=last; ++element ) {
684 template<
typename MT
688 inline bool tryAssign(
const UpperMatrix<MT,SO,DF>& lhs,
689 const SparseVector<VT,true>& rhs,
size_t row,
size_t column )
702 const auto last( (~rhs).lowerBound(
row -
column ) );
704 for(
auto element=(~rhs).
begin(); element!=last; ++element ) {
733 template<
typename MT
738 inline bool tryAssign(
const UpperMatrix<MT,SO,DF>& lhs,
const SparseVector<VT,TF>& rhs,
751 for(
const auto& element : ~rhs ) {
779 template<
typename MT1
783 inline bool tryAssign(
const UpperMatrix<MT1,SO,DF>& lhs,
784 const DenseMatrix<MT2,false>& rhs,
size_t row,
size_t column )
795 const size_t M( (~rhs).
rows() );
796 const size_t N( (~rhs).
columns() );
803 for(
size_t i=ibegin; i<M; ++i )
807 for(
size_t j=0UL; j<jend; ++j ) {
835 template<
typename MT1
839 inline bool tryAssign(
const UpperMatrix<MT1,SO,DF>& lhs,
840 const DenseMatrix<MT2,true>& rhs,
size_t row,
size_t column )
851 const size_t M( (~rhs).
rows() );
852 const size_t N( (~rhs).
columns() );
859 for(
size_t j=0UL; j<jend; ++j )
861 const bool containsDiagonal(
column + j >=
row );
862 const size_t ibegin( ( containsDiagonal )?(
column + j -
row + 1UL ):( 0UL ) );
864 for(
size_t i=ibegin; i<M; ++i ) {
892 template<
typename MT1
896 inline bool tryAssign(
const UpperMatrix<MT1,SO,DF>& lhs,
897 const SparseMatrix<MT2,false>& rhs,
size_t row,
size_t column )
908 const size_t M( (~rhs).
rows() );
909 const size_t N( (~rhs).
columns() );
916 for(
size_t i=ibegin; i<M; ++i )
919 const auto last( (~rhs).lowerBound( i,
min( index, N ) ) );
921 for(
auto element=(~rhs).
begin(i); element!=last; ++element ) {
949 template<
typename MT1
953 inline bool tryAssign(
const UpperMatrix<MT1,SO,DF>& lhs,
954 const SparseMatrix<MT2,true>& rhs,
size_t row,
size_t column )
965 const size_t M( (~rhs).
rows() );
966 const size_t N( (~rhs).
columns() );
973 for(
size_t j=0UL; j<jend; ++j )
975 const bool containsDiagonal(
column + j >=
row );
976 const size_t index( ( containsDiagonal )?(
column + j -
row + 1UL ):( 0UL ) );
978 const auto last( (~rhs).
end(j) );
979 auto element( (~rhs).lowerBound( index, j ) );
981 for( ; element!=last; ++element ) {
1009 template<
typename MT
1014 inline bool tryAddAssign(
const UpperMatrix<MT,SO,DF>& lhs,
1015 const Vector<VT,TF>& rhs,
size_t row,
size_t column )
1017 return tryAssign( lhs, ~rhs,
row,
column );
1041 template<
typename MT
1046 inline bool tryAddAssign(
const UpperMatrix<MT,SO,DF>& lhs,
const Vector<VT,TF>& rhs,
1071 template<
typename MT1
1076 inline bool tryAddAssign(
const UpperMatrix<MT1,SO1,DF>& lhs,
1077 const Matrix<MT2,SO2>& rhs,
size_t row,
size_t column )
1079 return tryAssign( lhs, ~rhs,
row,
column );
1101 template<
typename MT
1106 inline bool trySubAssign(
const UpperMatrix<MT,SO,DF>& lhs,
1107 const Vector<VT,TF>& rhs,
size_t row,
size_t column )
1109 return tryAssign( lhs, ~rhs,
row,
column );
1133 template<
typename MT
1138 inline bool trySubAssign(
const UpperMatrix<MT,SO,DF>& lhs,
const Vector<VT,TF>& rhs,
1163 template<
typename MT1
1168 inline bool trySubAssign(
const UpperMatrix<MT1,SO1,DF>& lhs,
1169 const Matrix<MT2,SO2>& rhs,
size_t row,
size_t column )
1171 return tryAssign( lhs, ~rhs,
row,
column );
1191 template<
typename MT
1194 inline MT& derestrict( UpperMatrix<MT,SO,DF>& m )
1212 template<
typename MT,
bool SO,
bool DF >
1213 struct Size< UpperMatrix<MT,SO,DF>, 0UL >
1214 :
public Size<MT,0UL>
1217 template<
typename MT,
bool SO,
bool DF >
1218 struct Size< UpperMatrix<MT,SO,DF>, 1UL >
1219 :
public Size<MT,1UL>
1235 template<
typename MT,
bool SO,
bool DF >
1236 struct MaxSize< UpperMatrix<MT,SO,DF>, 0UL >
1237 :
public MaxSize<MT,0UL>
1240 template<
typename MT,
bool SO,
bool DF >
1241 struct MaxSize< UpperMatrix<MT,SO,DF>, 1UL >
1242 :
public MaxSize<MT,1UL>
1258 template<
typename MT,
bool SO,
bool DF >
1259 struct IsSquare< UpperMatrix<MT,SO,DF> >
1276 template<
typename MT,
bool SO,
bool DF >
1277 struct IsUniform< UpperMatrix<MT,SO,DF> >
1278 :
public IsUniform<MT>
1294 template<
typename MT,
bool SO,
bool DF >
1295 struct IsSymmetric< UpperMatrix<MT,SO,DF> >
1312 template<
typename MT,
bool SO,
bool DF >
1313 struct IsHermitian< UpperMatrix<MT,SO,DF> >
1330 template<
typename MT,
bool SO,
bool DF >
1331 struct IsStrictlyLower< UpperMatrix<MT,SO,DF> >
1348 template<
typename MT,
bool SO,
bool DF >
1349 struct IsUpper< UpperMatrix<MT,SO,DF> >
1366 template<
typename MT,
bool SO,
bool DF >
1367 struct IsStrictlyUpper< UpperMatrix<MT,SO,DF> >
1384 template<
typename MT,
bool SO,
bool DF >
1385 struct IsAdaptor< UpperMatrix<MT,SO,DF> >
1402 template<
typename MT,
bool SO,
bool DF >
1403 struct IsRestricted< UpperMatrix<MT,SO,DF> >
1420 template<
typename MT,
bool SO >
1421 struct HasConstDataAccess< UpperMatrix<MT,SO,true> >
1438 template<
typename MT,
bool SO,
bool DF >
1439 struct IsAligned< UpperMatrix<MT,SO,DF> >
1440 :
public IsAligned<MT>
1456 template<
typename MT,
bool SO,
bool DF >
1457 struct IsContiguous< UpperMatrix<MT,SO,DF> >
1458 :
public IsContiguous<MT>
1474 template<
typename MT,
bool SO,
bool DF >
1475 struct IsPadded< UpperMatrix<MT,SO,DF> >
1476 :
public IsPadded<MT>
1492 template<
typename MT,
bool SO,
bool DF >
1493 struct IsResizable< UpperMatrix<MT,SO,DF> >
1494 :
public IsResizable<MT>
1510 template<
typename MT,
bool SO,
bool DF >
1511 struct IsShrinkable< UpperMatrix<MT,SO,DF> >
1512 :
public IsShrinkable<MT>
1528 template<
typename MT,
bool SO,
bool DF >
1529 struct RemoveAdaptor< UpperMatrix<MT,SO,DF> >
1547 template<
typename T1,
typename T2 >
1548 struct AddTraitEval1< T1, T2
1551 ( ( IsUpper_v<T1> && IsUpper_v<T2> ) ||
1552 ( IsUpper_v<T1> && IsDiagonal_v<T2> ) ||
1553 ( IsDiagonal_v<T1> && IsUpper_v<T2> ) ) &&
1554 !( IsUniUpper_v<T1> && IsStrictlyUpper_v<T2> ) &&
1555 !( IsStrictlyUpper_v<T1> && ( IsUniUpper_v<T2> || IsStrictlyUpper_v<T2> ) ) &&
1556 !( IsDiagonal_v<T1> && IsDiagonal_v<T2> ) &&
1557 !( IsUniform_v<T1> && IsUniform_v<T2> ) &&
1558 !( IsZero_v<T1> || IsZero_v<T2> ) > >
1560 using Type = UpperMatrix< typename AddTraitEval2<T1,T2>::Type >;
1576 template<
typename T1,
typename T2 >
1577 struct SubTraitEval1< T1, T2
1580 ( ( IsUpper_v<T1> && IsUpper_v<T2> ) ||
1581 ( IsUpper_v<T1> && IsDiagonal_v<T2> ) ||
1582 ( IsDiagonal_v<T1> && IsUpper_v<T2> ) ) &&
1583 !( IsUniUpper_v<T1> && IsStrictlyUpper_v<T2> ) &&
1584 !( IsUniUpper_v<T1> && IsUniUpper_v<T2> ) &&
1585 !( IsStrictlyUpper_v<T1> && IsStrictlyUpper_v<T2> ) &&
1586 !( IsDiagonal_v<T1> && IsDiagonal_v<T2> ) &&
1587 !( IsZero_v<T1> || IsZero_v<T2> ) > >
1589 using Type = UpperMatrix< typename SubTraitEval2<T1,T2>::Type >;
1605 template<
typename T1,
typename T2 >
1606 struct SchurTraitEval1< T1, T2
1609 ( ( IsUpper_v<T1> && !IsLower_v<T2> ) ||
1610 ( !IsLower_v<T1> && IsUpper_v<T2> ) ) &&
1611 !( IsUniUpper_v<T1> && IsUniUpper_v<T2> ) &&
1612 !( IsStrictlyUpper_v<T1> || IsStrictlyUpper_v<T2> ) &&
1613 !( IsDiagonal_v<T1> || IsDiagonal_v<T2> ) &&
1614 !( IsZero_v<T1> || IsZero_v<T2> ) > >
1616 using Type = UpperMatrix< typename SchurTraitEval2<T1,T2>::Type >;
1632 template<
typename T1,
typename T2 >
1633 struct MultTraitEval1< T1, T2
1636 ( IsUpper_v<T1> && !IsStrictlyUpper_v<T1> &&
1637 !IsDiagonal_v<T1> && !IsUniform_v<T1> ) > >
1639 using Type = UpperMatrix< typename MultTraitEval2<T1,T2>::Type >;
1642 template<
typename T1,
typename T2 >
1643 struct MultTraitEval1< T1, T2
1646 ( IsUpper_v<T2> && !IsStrictlyUpper_v<T2> &&
1647 !IsDiagonal_v<T2> && !IsUniform_v<T2> ) > >
1649 using Type = UpperMatrix< typename MultTraitEval2<T1,T2>::Type >;
1652 template<
typename T1,
typename T2 >
1653 struct MultTraitEval1< T1, T2
1656 ( IsUpper_v<T1> && IsUpper_v<T2> ) &&
1657 !( IsUniUpper_v<T1> && IsUniUpper_v<T2> ) &&
1658 !( IsStrictlyUpper_v<T1> && IsUpper_v<T2> ) &&
1659 !( IsUpper_v<T1> && IsStrictlyUpper_v<T2> ) &&
1660 !( IsDiagonal_v<T1> && IsDiagonal_v<T2> ) &&
1661 !( IsIdentity_v<T1> || IsIdentity_v<T2> ) &&
1662 !( IsZero_v<T1> || IsZero_v<T2> ) > >
1664 using Type = UpperMatrix< typename MultTraitEval2<T1,T2>::Type >;
1680 template<
typename T1,
typename T2 >
1681 struct DivTraitEval1< T1, T2
1683 !IsStrictlyUpper_v<T1> &&
1684 !IsDiagonal_v<T1> &&
1687 using Type = UpperMatrix< typename DivTraitEval2<T1,T2>::Type >;
1703 template<
typename T,
typename OP >
1704 struct UnaryMapTraitEval1< T, OP
1706 !YieldsUniUpper_v<OP,T> &&
1707 !YieldsStrictlyUpper_v<OP,T> &&
1708 !YieldsDiagonal_v<OP,T> > >
1710 using Type = UpperMatrix< typename UnaryMapTraitEval2<T,OP>::Type, StorageOrder_v<T> >;
1718 template<
typename T1,
typename T2,
typename OP >
1719 struct BinaryMapTraitEval1< T1, T2, OP
1721 !YieldsUniUpper_v<OP,T1,T2> &&
1722 !YieldsStrictlyUpper_v<OP,T1,T2> &&
1723 !YieldsDiagonal_v<OP,T1,T2> > >
1725 using Type = UpperMatrix< typename BinaryMapTraitEval2<T1,T2,OP>::Type >;
1741 template<
typename MT,
bool SO,
bool DF >
1742 struct DeclSymTrait< UpperMatrix<MT,SO,DF> >
1744 using Type = DiagonalMatrix<MT>;
1760 template<
typename MT,
bool SO,
bool DF >
1761 struct DeclHermTrait< UpperMatrix<MT,SO,DF> >
1763 using Type = HermitianMatrix<MT>;
1779 template<
typename MT,
bool SO,
bool DF >
1780 struct DeclLowTrait< UpperMatrix<MT,SO,DF> >
1782 using Type = DiagonalMatrix<MT>;
1798 template<
typename MT,
bool SO,
bool DF >
1799 struct DeclUppTrait< UpperMatrix<MT,SO,DF> >
1801 using Type = UpperMatrix<MT,SO,DF>;
1817 template<
typename MT,
bool SO,
bool DF >
1818 struct DeclDiagTrait< UpperMatrix<MT,SO,DF> >
1820 using Type = DiagonalMatrix<MT>;
1836 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1837 struct HighType< UpperMatrix<MT1,SO1,DF1>, UpperMatrix<MT2,SO2,DF2> >
1839 using Type = UpperMatrix< typename HighType<MT1,MT2>::Type >;
1855 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1856 struct LowType< UpperMatrix<MT1,SO1,DF1>, UpperMatrix<MT2,SO2,DF2> >
1858 using Type = UpperMatrix< typename LowType<MT1,MT2>::Type >;
1874 template<
typename MT,
size_t I,
size_t N >
1875 struct SubmatrixTraitEval1< MT, I, I, N, N
1877 !IsUniUpper_v<MT> &&
1878 !IsStrictlyUpper_v<MT> &&
1879 !IsDiagonal_v<MT> > >
1881 using Type = UpperMatrix< typename SubmatrixTraitEval2<MT,I,I,N,N>::Type >;
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.
UpperMatrix specialization for dense matrices.
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
UpperMatrix specialization for sparse matrices.
#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.
constexpr bool IsUpper_v
Auxiliary variable template for the IsUpper type trait.The IsUpper_v variable template provides a con...
Definition: IsUpper.h:174
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 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.
Header file for the multiplication trait.
Header file for the IsStrictlyUpper type trait.
Header file for the IsSymmetric type trait.
Namespace of the Blaze C++ math library.
Definition: Blaze.h:58
Flag for the LU-based matrix inversion.
Definition: InversionFlag.h:103
Header file for the IsShrinkable type trait.
Header file for all forward declarations of the math module.
Header file for the YieldsStrictlyUpper type trait.
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 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
constexpr bool IsNumeric_v
Auxiliary variable template for the IsNumeric type trait.The IsNumeric_v variable template provides a...
Definition: IsNumeric.h:143
Header file for the IsLower type trait.
Header file for the IsAligned type trait.
Header file for the exception macros of the math module.
#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
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.
Matrix adapter for upper triangular matrices.
Definition: BaseTemplate.h:553
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
Constraint on the data type.
Header file for the IsNumeric type trait.
Header file for the HasConstDataAccess type trait.
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.
Header file for the addition trait.
Header file for the division 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 YieldsUpper type trait.
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.
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 YieldsDiagonal type trait.
constexpr bool YieldsUpper_v
Auxiliary variable template for the YieldsUpper type trait.The YieldsUpper_v variable template provid...
Definition: YieldsUpper.h:126
Header file for the isDivisor shim.
Header file for the StorageOrder type trait.
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 IsUpper type trait.
Header file for the YieldsUniUpper type trait.
Header file for the implementation of the base template of the UpperMatrix.
Header file for the IsHermitian type trait.
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.