35 #ifndef _BLAZE_MATH_ADAPTORS_UPPERMATRIX_H_ 36 #define _BLAZE_MATH_ADAPTORS_UPPERMATRIX_H_ 122 template<
typename MT,
bool SO,
bool DF >
123 void reset( UpperMatrix<MT,SO,DF>& m );
125 template<
typename MT,
bool SO,
bool DF >
126 void reset( UpperMatrix<MT,SO,DF>& m,
size_t i );
128 template<
typename MT,
bool SO,
bool DF >
129 void clear( UpperMatrix<MT,SO,DF>& m );
131 template<
bool RF,
typename MT,
bool SO,
bool DF >
132 bool isDefault(
const UpperMatrix<MT,SO,DF>& m );
134 template<
typename MT,
bool SO,
bool DF >
135 bool isIntact(
const UpperMatrix<MT,SO,DF>& m );
137 template<
typename MT,
bool SO,
bool DF >
138 void swap( UpperMatrix<MT,SO,DF>& a, UpperMatrix<MT,SO,DF>& b ) noexcept;
150 template<
typename MT
173 template<
typename MT
190 template<
typename MT
234 return isDefault<RF>( m.matrix_ );
260 template<
typename MT
278 template<
typename MT
314 inline void invert( UpperMatrix<MT,SO,true>& m )
329 invert<flag>( derestrict( m ) );
356 template<
typename MT1,
bool SO1,
typename MT2,
typename MT3,
typename MT4,
bool SO2 >
357 inline void lu(
const UpperMatrix<MT1,SO1,true>& A, DenseMatrix<MT2,SO1>& L,
358 DenseMatrix<MT3,SO1>& U, Matrix<MT4,SO2>& P )
372 using ET2 = ElementType_t<MT2>;
373 using ET4 = ElementType_t<MT4>;
375 const size_t n( (~A).
rows() );
377 decltype(
auto) L2( derestrict( ~L ) );
387 for(
size_t i=0UL; i<n; ++i ) {
412 template<
typename MT
416 inline bool trySet(
const UpperMatrix<MT,SO,DF>& mat,
size_t i,
size_t j,
const ET& value )
447 template<
typename MT
452 trySet(
const UpperMatrix<MT,SO,DF>& mat,
size_t row,
size_t column,
size_t m,
size_t n,
const ET& value )
461 return ( m == 0UL ) ||
486 template<
typename MT
490 inline bool tryAdd(
const UpperMatrix<MT,SO,DF>& mat,
size_t i,
size_t j,
const ET& value )
492 return trySet( mat, i, j, value );
516 template<
typename MT
521 tryAdd(
const UpperMatrix<MT,SO,DF>& mat,
size_t row,
size_t column,
size_t m,
size_t n,
const ET& value )
523 return trySet( mat,
row,
column, m, n, value );
545 template<
typename MT
549 inline bool trySub(
const UpperMatrix<MT,SO,DF>& mat,
size_t i,
size_t j,
const ET& value )
551 return trySet( mat, i, j, value );
575 template<
typename MT
580 trySub(
const UpperMatrix<MT,SO,DF>& mat,
size_t row,
size_t column,
size_t m,
size_t n,
const ET& value )
582 return trySet( mat,
row,
column, m, n, value );
604 template<
typename MT
608 inline bool tryBitor(
const UpperMatrix<MT,SO,DF>& mat,
size_t i,
size_t j,
const ET& value )
610 return trySet( mat, i, j, value );
634 template<
typename MT
639 tryBitor(
const UpperMatrix<MT,SO,DF>& mat,
size_t row,
size_t column,
size_t m,
size_t n,
const ET& value )
641 return trySet( mat,
row,
column, m, n, value );
663 template<
typename MT
667 inline bool tryBitxor(
const UpperMatrix<MT,SO,DF>& mat,
size_t i,
size_t j,
const ET& value )
669 return tryAdd( mat, i, j, value );
693 template<
typename MT
698 tryBitxor(
const UpperMatrix<MT,SO,DF>& mat,
size_t row,
size_t column,
size_t m,
size_t n,
const ET& value )
700 return tryAdd( mat,
row,
column, m, n, value );
722 template<
typename MT
726 inline bool tryAssign(
const UpperMatrix<MT,SO,DF>& lhs,
727 const DenseVector<VT,false>& rhs,
size_t row,
size_t column )
739 for(
size_t i=ibegin; i<(~rhs).
size(); ++i ) {
766 template<
typename MT
770 inline bool tryAssign(
const UpperMatrix<MT,SO,DF>& lhs,
771 const DenseVector<VT,true>& rhs,
size_t row,
size_t column )
786 for(
size_t i=0UL; i<iend; ++i ) {
815 template<
typename MT
820 inline bool tryAssign(
const UpperMatrix<MT,SO,DF>& lhs,
const DenseVector<VT,TF>& rhs,
833 for(
size_t i=0UL; i<(~rhs).
size(); ++i ) {
861 template<
typename MT
865 inline bool tryAssign(
const UpperMatrix<MT,SO,DF>& lhs,
866 const SparseVector<VT,false>& rhs,
size_t row,
size_t column )
876 const auto last( (~rhs).
end() );
879 for( ; element!=last; ++element ) {
906 template<
typename MT
910 inline bool tryAssign(
const UpperMatrix<MT,SO,DF>& lhs,
911 const SparseVector<VT,true>& rhs,
size_t row,
size_t column )
924 const auto last( (~rhs).lowerBound(
row -
column ) );
926 for(
auto element=(~rhs).
begin(); element!=last; ++element ) {
955 template<
typename MT
960 inline bool tryAssign(
const UpperMatrix<MT,SO,DF>& lhs,
const SparseVector<VT,TF>& rhs,
973 for(
const auto& element : ~rhs ) {
1001 template<
typename MT1
1005 inline bool tryAssign(
const UpperMatrix<MT1,SO,DF>& lhs,
1006 const DenseMatrix<MT2,false>& rhs,
size_t row,
size_t column )
1017 const size_t M( (~rhs).
rows() );
1018 const size_t N( (~rhs).
columns() );
1025 for(
size_t i=ibegin; i<M; ++i )
1029 for(
size_t j=0UL; j<jend; ++j ) {
1057 template<
typename MT1
1061 inline bool tryAssign(
const UpperMatrix<MT1,SO,DF>& lhs,
1062 const DenseMatrix<MT2,true>& rhs,
size_t row,
size_t column )
1073 const size_t M( (~rhs).
rows() );
1074 const size_t N( (~rhs).
columns() );
1081 for(
size_t j=0UL; j<jend; ++j )
1083 const bool containsDiagonal(
column + j >=
row );
1084 const size_t ibegin( ( containsDiagonal )?(
column + j -
row + 1UL ):( 0UL ) );
1086 for(
size_t i=ibegin; i<M; ++i ) {
1114 template<
typename MT1
1118 inline bool tryAssign(
const UpperMatrix<MT1,SO,DF>& lhs,
1119 const SparseMatrix<MT2,false>& rhs,
size_t row,
size_t column )
1130 const size_t M( (~rhs).
rows() );
1131 const size_t N( (~rhs).
columns() );
1138 for(
size_t i=ibegin; i<M; ++i )
1141 const auto last( (~rhs).lowerBound( i,
min( index, N ) ) );
1143 for(
auto element=(~rhs).
begin(i); element!=last; ++element ) {
1171 template<
typename MT1
1175 inline bool tryAssign(
const UpperMatrix<MT1,SO,DF>& lhs,
1176 const SparseMatrix<MT2,true>& rhs,
size_t row,
size_t column )
1187 const size_t M( (~rhs).
rows() );
1188 const size_t N( (~rhs).
columns() );
1195 for(
size_t j=0UL; j<jend; ++j )
1197 const bool containsDiagonal(
column + j >=
row );
1198 const size_t index( ( containsDiagonal )?(
column + j -
row + 1UL ):( 0UL ) );
1200 const auto last( (~rhs).
end(j) );
1201 auto element( (~rhs).lowerBound( index, j ) );
1203 for( ; element!=last; ++element ) {
1231 template<
typename MT
1236 inline bool tryAddAssign(
const UpperMatrix<MT,SO,DF>& lhs,
1237 const Vector<VT,TF>& rhs,
size_t row,
size_t column )
1239 return tryAssign( lhs, ~rhs,
row,
column );
1263 template<
typename MT
1268 inline bool tryAddAssign(
const UpperMatrix<MT,SO,DF>& lhs,
const Vector<VT,TF>& rhs,
1293 template<
typename MT1
1298 inline bool tryAddAssign(
const UpperMatrix<MT1,SO1,DF>& lhs,
1299 const Matrix<MT2,SO2>& rhs,
size_t row,
size_t column )
1301 return tryAssign( lhs, ~rhs,
row,
column );
1323 template<
typename MT
1328 inline bool trySubAssign(
const UpperMatrix<MT,SO,DF>& lhs,
1329 const Vector<VT,TF>& rhs,
size_t row,
size_t column )
1331 return tryAssign( lhs, ~rhs,
row,
column );
1355 template<
typename MT
1360 inline bool trySubAssign(
const UpperMatrix<MT,SO,DF>& lhs,
const Vector<VT,TF>& rhs,
1385 template<
typename MT1
1390 inline bool trySubAssign(
const UpperMatrix<MT1,SO1,DF>& lhs,
1391 const Matrix<MT2,SO2>& rhs,
size_t row,
size_t column )
1393 return tryAssign( lhs, ~rhs,
row,
column );
1415 template<
typename MT
1420 inline bool tryBitorAssign(
const UpperMatrix<MT,SO,DF>& lhs,
1421 const Vector<VT,TF>& rhs,
size_t row,
size_t column )
1423 return tryAssign( lhs, ~rhs,
row,
column );
1446 template<
typename MT
1451 inline bool tryBitorAssign(
const UpperMatrix<MT,SO,DF>& lhs,
const Vector<VT,TF>& rhs,
1476 template<
typename MT1
1481 inline bool tryBitorAssign(
const UpperMatrix<MT1,SO1,DF>& lhs,
1482 const Matrix<MT2,SO2>& rhs,
size_t row,
size_t column )
1484 return tryAssign( lhs, ~rhs,
row,
column );
1506 template<
typename MT
1511 inline bool tryBitxorAssign(
const UpperMatrix<MT,SO,DF>& lhs,
1512 const Vector<VT,TF>& rhs,
size_t row,
size_t column )
1514 return tryAssign( lhs, ~rhs,
row,
column );
1537 template<
typename MT
1542 inline bool tryBitxorAssign(
const UpperMatrix<MT,SO,DF>& lhs,
const Vector<VT,TF>& rhs,
1567 template<
typename MT1
1572 inline bool tryBitxorAssign(
const UpperMatrix<MT1,SO1,DF>& lhs,
1573 const Matrix<MT2,SO2>& rhs,
size_t row,
size_t column )
1575 return tryAssign( lhs, ~rhs,
row,
column );
1595 template<
typename MT
1598 inline MT& derestrict( UpperMatrix<MT,SO,DF>& m )
1616 template<
typename MT,
bool SO,
bool DF >
1617 struct Size< UpperMatrix<MT,SO,DF>, 0UL >
1618 :
public Size<MT,0UL>
1621 template<
typename MT,
bool SO,
bool DF >
1622 struct Size< UpperMatrix<MT,SO,DF>, 1UL >
1623 :
public Size<MT,1UL>
1639 template<
typename MT,
bool SO,
bool DF >
1640 struct MaxSize< UpperMatrix<MT,SO,DF>, 0UL >
1641 :
public MaxSize<MT,0UL>
1644 template<
typename MT,
bool SO,
bool DF >
1645 struct MaxSize< UpperMatrix<MT,SO,DF>, 1UL >
1646 :
public MaxSize<MT,1UL>
1662 template<
typename MT,
bool SO,
bool DF >
1663 struct IsSquare< UpperMatrix<MT,SO,DF> >
1680 template<
typename MT,
bool SO,
bool DF >
1681 struct IsUniform< UpperMatrix<MT,SO,DF> >
1682 :
public IsUniform<MT>
1698 template<
typename MT,
bool SO,
bool DF >
1699 struct IsSymmetric< UpperMatrix<MT,SO,DF> >
1716 template<
typename MT,
bool SO,
bool DF >
1717 struct IsHermitian< UpperMatrix<MT,SO,DF> >
1734 template<
typename MT,
bool SO,
bool DF >
1735 struct IsStrictlyLower< UpperMatrix<MT,SO,DF> >
1752 template<
typename MT,
bool SO,
bool DF >
1753 struct IsUpper< UpperMatrix<MT,SO,DF> >
1770 template<
typename MT,
bool SO,
bool DF >
1771 struct IsStrictlyUpper< UpperMatrix<MT,SO,DF> >
1788 template<
typename MT,
bool SO,
bool DF >
1789 struct IsAdaptor< UpperMatrix<MT,SO,DF> >
1806 template<
typename MT,
bool SO,
bool DF >
1807 struct IsRestricted< UpperMatrix<MT,SO,DF> >
1824 template<
typename MT,
bool SO >
1825 struct HasConstDataAccess< UpperMatrix<MT,SO,true> >
1842 template<
typename MT,
bool SO,
bool DF >
1843 struct IsAligned< UpperMatrix<MT,SO,DF> >
1844 :
public IsAligned<MT>
1860 template<
typename MT,
bool SO,
bool DF >
1861 struct IsContiguous< UpperMatrix<MT,SO,DF> >
1862 :
public IsContiguous<MT>
1878 template<
typename MT,
bool SO,
bool DF >
1879 struct IsPadded< UpperMatrix<MT,SO,DF> >
1880 :
public IsPadded<MT>
1896 template<
typename MT,
bool SO,
bool DF >
1897 struct IsResizable< UpperMatrix<MT,SO,DF> >
1898 :
public IsResizable<MT>
1914 template<
typename MT,
bool SO,
bool DF >
1915 struct IsShrinkable< UpperMatrix<MT,SO,DF> >
1916 :
public IsShrinkable<MT>
1932 template<
typename MT,
bool SO,
bool DF >
1933 struct RemoveAdaptor< UpperMatrix<MT,SO,DF> >
1951 template<
typename T1,
typename T2 >
1952 struct AddTraitEval1< T1, T2
1955 ( ( IsUpper_v<T1> && IsUpper_v<T2> ) ||
1956 ( IsUpper_v<T1> && IsDiagonal_v<T2> ) ||
1957 ( IsDiagonal_v<T1> && IsUpper_v<T2> ) ) &&
1958 !( IsUniUpper_v<T1> && IsStrictlyUpper_v<T2> ) &&
1959 !( IsStrictlyUpper_v<T1> && ( IsUniUpper_v<T2> || IsStrictlyUpper_v<T2> ) ) &&
1960 !( IsDiagonal_v<T1> && IsDiagonal_v<T2> ) &&
1961 !( IsUniform_v<T1> && IsUniform_v<T2> ) &&
1962 !( IsZero_v<T1> || IsZero_v<T2> ) > >
1964 using Type = UpperMatrix< typename AddTraitEval2<T1,T2>::Type >;
1980 template<
typename T1,
typename T2 >
1981 struct SubTraitEval1< T1, T2
1984 ( ( IsUpper_v<T1> && IsUpper_v<T2> ) ||
1985 ( IsUpper_v<T1> && IsDiagonal_v<T2> ) ||
1986 ( IsDiagonal_v<T1> && IsUpper_v<T2> ) ) &&
1987 !( IsUniUpper_v<T1> && IsStrictlyUpper_v<T2> ) &&
1988 !( IsUniUpper_v<T1> && IsUniUpper_v<T2> ) &&
1989 !( IsStrictlyUpper_v<T1> && IsStrictlyUpper_v<T2> ) &&
1990 !( IsDiagonal_v<T1> && IsDiagonal_v<T2> ) &&
1991 !( IsZero_v<T1> || IsZero_v<T2> ) > >
1993 using Type = UpperMatrix< typename SubTraitEval2<T1,T2>::Type >;
2009 template<
typename T1,
typename T2 >
2010 struct SchurTraitEval1< T1, T2
2013 ( ( IsUpper_v<T1> && !IsLower_v<T2> ) ||
2014 ( !IsLower_v<T1> && IsUpper_v<T2> ) ) &&
2015 !( IsUniUpper_v<T1> && IsUniUpper_v<T2> ) &&
2016 !( IsStrictlyUpper_v<T1> || IsStrictlyUpper_v<T2> ) &&
2017 !( IsDiagonal_v<T1> || IsDiagonal_v<T2> ) &&
2018 !( IsZero_v<T1> || IsZero_v<T2> ) > >
2020 using Type = UpperMatrix< typename SchurTraitEval2<T1,T2>::Type >;
2036 template<
typename T1,
typename T2 >
2037 struct MultTraitEval1< T1, T2
2040 ( IsUpper_v<T1> && !IsStrictlyUpper_v<T1> &&
2041 !IsDiagonal_v<T1> && !IsUniform_v<T1> ) > >
2043 using Type = UpperMatrix< typename MultTraitEval2<T1,T2>::Type >;
2046 template<
typename T1,
typename T2 >
2047 struct MultTraitEval1< T1, T2
2050 ( IsUpper_v<T2> && !IsStrictlyUpper_v<T2> &&
2051 !IsDiagonal_v<T2> && !IsUniform_v<T2> ) > >
2053 using Type = UpperMatrix< typename MultTraitEval2<T1,T2>::Type >;
2056 template<
typename T1,
typename T2 >
2057 struct MultTraitEval1< T1, T2
2060 ( IsUpper_v<T1> && IsUpper_v<T2> ) &&
2061 !( IsUniUpper_v<T1> && IsUniUpper_v<T2> ) &&
2062 !( IsStrictlyUpper_v<T1> && IsUpper_v<T2> ) &&
2063 !( IsUpper_v<T1> && IsStrictlyUpper_v<T2> ) &&
2064 !( IsDiagonal_v<T1> && IsDiagonal_v<T2> ) &&
2065 !( IsIdentity_v<T1> || IsIdentity_v<T2> ) &&
2066 !( IsZero_v<T1> || IsZero_v<T2> ) > >
2068 using Type = UpperMatrix< typename MultTraitEval2<T1,T2>::Type >;
2084 template<
typename T1,
typename T2 >
2085 struct KronTraitEval1< T1, T2
2088 ( IsUpper_v<T1> && IsUpper_v<T2> ) &&
2089 !( IsUniUpper_v<T1> && IsUniUpper_v<T2> ) &&
2090 !( IsStrictlyUpper_v<T1> || IsStrictlyUpper_v<T2> ) &&
2091 !( IsDiagonal_v<T1> && IsDiagonal_v<T2> ) &&
2092 !( IsZero_v<T1> || IsZero_v<T2> ) > >
2094 using Type = UpperMatrix< typename KronTraitEval2<T1,T2>::Type >;
2110 template<
typename T1,
typename T2 >
2111 struct DivTraitEval1< T1, T2
2113 !IsStrictlyUpper_v<T1> &&
2114 !IsDiagonal_v<T1> &&
2117 using Type = UpperMatrix< typename DivTraitEval2<T1,T2>::Type >;
2133 template<
typename T,
typename OP >
2134 struct UnaryMapTraitEval1< T, OP
2136 !YieldsUniUpper_v<OP,T> &&
2137 !YieldsStrictlyUpper_v<OP,T> &&
2138 !YieldsDiagonal_v<OP,T> > >
2140 using Type = UpperMatrix< typename UnaryMapTraitEval2<T,OP>::Type, StorageOrder_v<T> >;
2148 template<
typename T1,
typename T2,
typename OP >
2149 struct BinaryMapTraitEval1< T1, T2, OP
2151 !YieldsUniUpper_v<OP,T1,T2> &&
2152 !YieldsStrictlyUpper_v<OP,T1,T2> &&
2153 !YieldsDiagonal_v<OP,T1,T2> > >
2155 using Type = UpperMatrix< typename BinaryMapTraitEval2<T1,T2,OP>::Type >;
2171 template<
typename MT,
bool SO,
bool DF >
2172 struct DeclSymTrait< UpperMatrix<MT,SO,DF> >
2174 using Type = DiagonalMatrix<MT>;
2190 template<
typename MT,
bool SO,
bool DF >
2191 struct DeclHermTrait< UpperMatrix<MT,SO,DF> >
2193 using Type = HermitianMatrix<MT>;
2209 template<
typename MT,
bool SO,
bool DF >
2210 struct DeclLowTrait< UpperMatrix<MT,SO,DF> >
2212 using Type = DiagonalMatrix<MT>;
2228 template<
typename MT,
bool SO,
bool DF >
2229 struct DeclUppTrait< UpperMatrix<MT,SO,DF> >
2231 using Type = UpperMatrix<MT,SO,DF>;
2247 template<
typename MT,
bool SO,
bool DF >
2248 struct DeclDiagTrait< UpperMatrix<MT,SO,DF> >
2250 using Type = DiagonalMatrix<MT>;
2266 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2267 struct HighType< UpperMatrix<MT1,SO1,DF1>, UpperMatrix<MT2,SO2,DF2> >
2269 using Type = UpperMatrix< typename HighType<MT1,MT2>::Type >;
2285 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2286 struct LowType< UpperMatrix<MT1,SO1,DF1>, UpperMatrix<MT2,SO2,DF2> >
2288 using Type = UpperMatrix< typename LowType<MT1,MT2>::Type >;
2304 template<
typename MT,
size_t I,
size_t N >
2305 struct SubmatrixTraitEval1< MT, I, I, N, N
2307 !IsUniUpper_v<MT> &&
2308 !IsStrictlyUpper_v<MT> &&
2309 !IsDiagonal_v<MT> > >
2311 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.
constexpr bool IsMatrix_v
Auxiliary variable template for the IsMatrix type trait.The IsMatrix_v variable template provides a c...
Definition: IsMatrix.h:138
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
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:595
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 MAYBE_UNUSED function template.
Header file for the IsIdentity type trait.
BoolConstant< true > TrueType
Type traits base class.The TrueType class is used as base class for type traits and value traits that...
Definition: IntegralConstant.h:132
Header file for all forward declarations of the math module.
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:2433
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:779
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
#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.
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:1162
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:222
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.
constexpr void MAYBE_UNUSED(const Args &...)
Suppression of unused parameter warnings.
Definition: MaybeUnused.h:81
Header file for the IsAligned type trait.
Header file for the Kron product 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:615
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:137
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,...
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:282
constexpr bool IsUpper_v
Auxiliary variable template for the IsUpper type trait.The IsUpper_v variable template provides a con...
Definition: IsUpper.h:175
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
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 YieldsDiagonal type trait.
Header file for the isDivisor shim.
Header file for the StorageOrder type trait.
Header file for the IntegralConstant class template.
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:264
bool isDefault(const DiagonalProxy< MT > &proxy)
Returns whether the represented element is in default state.
Definition: DiagonalProxy.h:635
#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,...
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,...
Definition: Assert.h:101
Header file for the HighType type trait.