35 #ifndef _BLAZE_MATH_ADAPTORS_LOWERMATRIX_H_ 36 #define _BLAZE_MATH_ADAPTORS_LOWERMATRIX_H_ 122 template<
typename MT,
bool SO,
bool DF >
123 void reset( LowerMatrix<MT,SO,DF>& m );
125 template<
typename MT,
bool SO,
bool DF >
126 void reset( LowerMatrix<MT,SO,DF>& m,
size_t i );
128 template<
typename MT,
bool SO,
bool DF >
129 void clear( LowerMatrix<MT,SO,DF>& m );
131 template<
bool RF,
typename MT,
bool SO,
bool DF >
132 bool isDefault(
const LowerMatrix<MT,SO,DF>& m );
134 template<
typename MT,
bool SO,
bool DF >
135 bool isIntact(
const LowerMatrix<MT,SO,DF>& m );
137 template<
typename MT,
bool SO,
bool DF >
138 void swap( LowerMatrix<MT,SO,DF>& a, LowerMatrix<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( LowerMatrix<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 LowerMatrix<MT1,SO1,true>& A, DenseMatrix<MT2,SO1>& L,
358 DenseMatrix<MT3,SO1>& U, Matrix<MT4,SO2>& P )
372 using ET3 = ElementType_t<MT3>;
373 using ET4 = ElementType_t<MT4>;
375 const size_t n( (~A).
rows() );
377 decltype(
auto) U2( derestrict( ~U ) );
387 for(
size_t i=0UL; i<n; ++i ) {
412 template<
typename MT
416 inline bool trySet(
const LowerMatrix<MT,SO,DF>& mat,
size_t i,
size_t j,
const ET& value )
447 template<
typename MT
452 trySet(
const LowerMatrix<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 LowerMatrix<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 LowerMatrix<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 LowerMatrix<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 LowerMatrix<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 LowerMatrix<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 LowerMatrix<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 LowerMatrix<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 LowerMatrix<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 LowerMatrix<MT,SO,DF>& lhs,
727 const DenseVector<VT,false>& rhs,
size_t row,
size_t column )
742 for(
size_t i=0UL; i<iend; ++i ) {
769 template<
typename MT
773 inline bool tryAssign(
const LowerMatrix<MT,SO,DF>& lhs,
774 const DenseVector<VT,true>& rhs,
size_t row,
size_t column )
786 for(
size_t i=ibegin; i<(~rhs).
size(); ++i ) {
815 template<
typename MT
820 inline bool tryAssign(
const LowerMatrix<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 LowerMatrix<MT,SO,DF>& lhs,
866 const SparseVector<VT,false>& rhs,
size_t row,
size_t column )
879 const auto last( (~rhs).lowerBound(
column -
row ) );
881 for(
auto element=(~rhs).
begin(); element!=last; ++element ) {
908 template<
typename MT
912 inline bool tryAssign(
const LowerMatrix<MT,SO,DF>& lhs,
913 const SparseVector<VT,true>& rhs,
size_t row,
size_t column )
923 const auto last( (~rhs).
end() );
926 for( ; element!=last; ++element ) {
955 template<
typename MT
960 inline bool tryAssign(
const LowerMatrix<MT,SO,DF>& lhs,
const SparseVector<VT,TF>& rhs,
973 for(
const auto& element : ~rhs ) {
1001 template<
typename MT1
1005 inline bool tryAssign(
const LowerMatrix<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=0UL; i<iend; ++i )
1027 const bool containsDiagonal(
row + i >=
column );
1028 const size_t jbegin( ( containsDiagonal )?(
row + i -
column + 1UL ):( 0UL ) );
1030 for(
size_t j=jbegin; j<N; ++j ) {
1058 template<
typename MT1
1062 inline bool tryAssign(
const LowerMatrix<MT1,SO,DF>& lhs,
1063 const DenseMatrix<MT2,true>& rhs,
size_t row,
size_t column )
1074 const size_t M( (~rhs).
rows() );
1075 const size_t N( (~rhs).
columns() );
1082 for(
size_t j=jbegin; j<N; ++j )
1086 for(
size_t i=0UL; i<iend; ++i ) {
1114 template<
typename MT1
1118 inline bool tryAssign(
const LowerMatrix<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=0UL; i<iend; ++i )
1140 const bool containsDiagonal(
row + i >=
column );
1141 const size_t index( ( containsDiagonal )?(
row + i -
column + 1UL ):( 0UL ) );
1143 const auto last( (~rhs).
end(i) );
1144 auto element( (~rhs).lowerBound( i, index ) );
1146 for( ; element!=last; ++element ) {
1174 template<
typename MT1
1178 inline bool tryAssign(
const LowerMatrix<MT1,SO,DF>& lhs,
1179 const SparseMatrix<MT2,true>& rhs,
size_t row,
size_t column )
1190 const size_t M( (~rhs).
rows() );
1191 const size_t N( (~rhs).
columns() );
1198 for(
size_t j=jbegin; j<N; ++j )
1201 const auto last( (~rhs).lowerBound(
min( index, M ), j ) );
1203 for(
auto element=(~rhs).
begin(j); element!=last; ++element ) {
1231 template<
typename MT
1236 inline bool tryAddAssign(
const LowerMatrix<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 LowerMatrix<MT,SO,DF>& lhs,
const Vector<VT,TF>& rhs,
1293 template<
typename MT1
1298 inline bool tryAddAssign(
const LowerMatrix<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 LowerMatrix<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 LowerMatrix<MT,SO,DF>& lhs,
const Vector<VT,TF>& rhs,
1385 template<
typename MT1
1390 inline bool trySubAssign(
const LowerMatrix<MT1,SO1,DF>& lhs,
1391 const Matrix<MT2,SO2>& rhs,
size_t row,
size_t column )
1393 return tryAssign( lhs, ~rhs,
row,
column );
1416 template<
typename MT
1421 inline bool tryBitorAssign(
const LowerMatrix<MT,SO,DF>& lhs,
1422 const Vector<VT,TF>& rhs,
size_t row,
size_t column )
1424 return tryAssign( lhs, ~rhs,
row,
column );
1447 template<
typename MT
1452 inline bool tryBitorAssign(
const LowerMatrix<MT,SO,DF>& lhs,
const Vector<VT,TF>& rhs,
1477 template<
typename MT1
1482 inline bool tryBitorAssign(
const LowerMatrix<MT1,SO1,DF>& lhs,
1483 const Matrix<MT2,SO2>& rhs,
size_t row,
size_t column )
1485 return tryAssign( lhs, ~rhs,
row,
column );
1508 template<
typename MT
1513 inline bool tryBitxorAssign(
const LowerMatrix<MT,SO,DF>& lhs,
1514 const Vector<VT,TF>& rhs,
size_t row,
size_t column )
1516 return tryAssign( lhs, ~rhs,
row,
column );
1539 template<
typename MT
1544 inline bool tryBitxorAssign(
const LowerMatrix<MT,SO,DF>& lhs,
const Vector<VT,TF>& rhs,
1569 template<
typename MT1
1574 inline bool tryBitxorAssign(
const LowerMatrix<MT1,SO1,DF>& lhs,
1575 const Matrix<MT2,SO2>& rhs,
size_t row,
size_t column )
1577 return tryAssign( lhs, ~rhs,
row,
column );
1597 template<
typename MT
1600 inline MT& derestrict( LowerMatrix<MT,SO,DF>& m )
1618 template<
typename MT,
bool SO,
bool DF >
1619 struct Size< LowerMatrix<MT,SO,DF>, 0UL >
1620 :
public Size<MT,0UL>
1623 template<
typename MT,
bool SO,
bool DF >
1624 struct Size< LowerMatrix<MT,SO,DF>, 1UL >
1625 :
public Size<MT,1UL>
1641 template<
typename MT,
bool SO,
bool DF >
1642 struct MaxSize< LowerMatrix<MT,SO,DF>, 0UL >
1643 :
public MaxSize<MT,0UL>
1646 template<
typename MT,
bool SO,
bool DF >
1647 struct MaxSize< LowerMatrix<MT,SO,DF>, 1UL >
1648 :
public MaxSize<MT,1UL>
1664 template<
typename MT,
bool SO,
bool DF >
1665 struct IsSquare< LowerMatrix<MT,SO,DF> >
1682 template<
typename MT,
bool SO,
bool DF >
1683 struct IsUniform< LowerMatrix<MT,SO,DF> >
1684 :
public IsUniform<MT>
1700 template<
typename MT,
bool SO,
bool DF >
1701 struct IsSymmetric< LowerMatrix<MT,SO,DF> >
1718 template<
typename MT,
bool SO,
bool DF >
1719 struct IsHermitian< LowerMatrix<MT,SO,DF> >
1736 template<
typename MT,
bool SO,
bool DF >
1737 struct IsLower< LowerMatrix<MT,SO,DF> >
1754 template<
typename MT,
bool SO,
bool DF >
1755 struct IsStrictlyLower< LowerMatrix<MT,SO,DF> >
1772 template<
typename MT,
bool SO,
bool DF >
1773 struct IsStrictlyUpper< LowerMatrix<MT,SO,DF> >
1790 template<
typename MT,
bool SO,
bool DF >
1791 struct IsAdaptor< LowerMatrix<MT,SO,DF> >
1808 template<
typename MT,
bool SO,
bool DF >
1809 struct IsRestricted< LowerMatrix<MT,SO,DF> >
1826 template<
typename MT,
bool SO >
1827 struct HasConstDataAccess< LowerMatrix<MT,SO,true> >
1844 template<
typename MT,
bool SO,
bool DF >
1845 struct IsAligned< LowerMatrix<MT,SO,DF> >
1846 :
public IsAligned<MT>
1862 template<
typename MT,
bool SO,
bool DF >
1863 struct IsContiguous< LowerMatrix<MT,SO,DF> >
1864 :
public IsContiguous<MT>
1880 template<
typename MT,
bool SO,
bool DF >
1881 struct IsPadded< LowerMatrix<MT,SO,DF> >
1882 :
public IsPadded<MT>
1898 template<
typename MT,
bool SO,
bool DF >
1899 struct IsResizable< LowerMatrix<MT,SO,DF> >
1900 :
public IsResizable<MT>
1916 template<
typename MT,
bool SO,
bool DF >
1917 struct IsShrinkable< LowerMatrix<MT,SO,DF> >
1918 :
public IsShrinkable<MT>
1934 template<
typename MT,
bool SO,
bool DF >
1935 struct RemoveAdaptor< LowerMatrix<MT,SO,DF> >
1953 template<
typename T1,
typename T2 >
1954 struct AddTraitEval1< T1, T2
1957 ( ( IsLower_v<T1> && IsLower_v<T2> ) ||
1958 ( IsLower_v<T1> && IsDiagonal_v<T2> ) ||
1959 ( IsDiagonal_v<T1> && IsLower_v<T2> ) ) &&
1960 !( IsUniLower_v<T1> && IsStrictlyLower_v<T2> ) &&
1961 !( IsStrictlyLower_v<T1> && ( IsUniLower_v<T2> || IsStrictlyLower_v<T2> ) ) &&
1962 !( IsDiagonal_v<T1> && IsDiagonal_v<T2> ) &&
1963 !( IsUniform_v<T1> && IsUniform_v<T2> ) &&
1964 !( IsZero_v<T1> || IsZero_v<T2> ) > >
1966 using Type = LowerMatrix< typename AddTraitEval2<T1,T2>::Type >;
1982 template<
typename T1,
typename T2 >
1983 struct SubTraitEval1< T1, T2
1986 ( ( IsLower_v<T1> && IsLower_v<T2> ) ||
1987 ( IsLower_v<T1> && IsDiagonal_v<T2> ) ||
1988 ( IsDiagonal_v<T1> && IsLower_v<T2> ) ) &&
1989 !( IsUniLower_v<T1> && IsStrictlyLower_v<T2> ) &&
1990 !( IsUniLower_v<T1> && IsUniLower_v<T2> ) &&
1991 !( IsStrictlyLower_v<T1> && IsStrictlyLower_v<T2> ) &&
1992 !( IsDiagonal_v<T1> && IsDiagonal_v<T2> ) &&
1993 !( IsZero_v<T1> || IsZero_v<T2> ) > >
1995 using Type = LowerMatrix< typename SubTraitEval2<T1,T2>::Type >;
2011 template<
typename T1,
typename T2 >
2012 struct SchurTraitEval1< T1, T2
2015 ( ( IsLower_v<T1> && !IsUpper_v<T2> ) ||
2016 ( !IsUpper_v<T1> && IsLower_v<T2> ) ) &&
2017 !( IsUniLower_v<T1> && IsUniLower_v<T2> ) &&
2018 !( IsStrictlyLower_v<T1> || IsStrictlyLower_v<T2> ) &&
2019 !( IsDiagonal_v<T1> || IsDiagonal_v<T2> ) &&
2020 !( IsZero_v<T1> || IsZero_v<T2> ) > >
2022 using Type = LowerMatrix< typename SchurTraitEval2<T1,T2>::Type >;
2038 template<
typename T1,
typename T2 >
2039 struct MultTraitEval1< T1, T2
2042 ( IsLower_v<T1> && !IsStrictlyLower_v<T1> &&
2043 !IsDiagonal_v<T1> && !IsUniform_v<T1> ) > >
2045 using Type = LowerMatrix< typename MultTraitEval2<T1,T2>::Type >;
2048 template<
typename T1,
typename T2 >
2049 struct MultTraitEval1< T1, T2
2052 ( IsLower_v<T2> && !IsStrictlyLower_v<T2> &&
2053 !IsDiagonal_v<T2> && !IsUniform_v<T2> ) > >
2055 using Type = LowerMatrix< typename MultTraitEval2<T1,T2>::Type >;
2058 template<
typename T1,
typename T2 >
2059 struct MultTraitEval1< T1, T2
2062 ( IsLower_v<T1> && IsLower_v<T2> ) &&
2063 !( IsUniLower_v<T1> && IsUniLower_v<T2> ) &&
2064 !( IsStrictlyLower_v<T1> && IsLower_v<T2> ) &&
2065 !( IsLower_v<T1> && IsStrictlyLower_v<T2> ) &&
2066 !( IsDiagonal_v<T1> && IsDiagonal_v<T2> ) &&
2067 !( IsIdentity_v<T1> || IsIdentity_v<T2> ) &&
2068 !( IsZero_v<T1> || IsZero_v<T2> ) > >
2070 using Type = LowerMatrix< typename MultTraitEval2<T1,T2>::Type >;
2086 template<
typename T1,
typename T2 >
2087 struct KronTraitEval1< T1, T2
2090 ( IsLower_v<T1> && IsLower_v<T2> ) &&
2091 !( IsUniLower_v<T1> && IsUniLower_v<T2> ) &&
2092 !( IsStrictlyLower_v<T1> || IsStrictlyLower_v<T2> ) &&
2093 !( IsDiagonal_v<T1> && IsDiagonal_v<T2> ) &&
2094 !( IsZero_v<T1> || IsZero_v<T2> ) > >
2096 using Type = LowerMatrix< typename KronTraitEval2<T1,T2>::Type >;
2112 template<
typename T1,
typename T2 >
2113 struct DivTraitEval1< T1, T2
2115 !IsStrictlyLower_v<T1> &&
2116 !IsDiagonal_v<T1> &&
2119 using Type = LowerMatrix< typename DivTraitEval2<T1,T2>::Type >;
2135 template<
typename T,
typename OP >
2136 struct UnaryMapTraitEval1< T, OP
2138 !YieldsUniLower_v<OP,T> &&
2139 !YieldsStrictlyLower_v<OP,T> &&
2140 !YieldsDiagonal_v<OP,T> > >
2142 using Type = LowerMatrix< typename UnaryMapTraitEval2<T,OP>::Type, StorageOrder_v<T> >;
2150 template<
typename T1,
typename T2,
typename OP >
2151 struct BinaryMapTraitEval1< T1, T2, OP
2153 !YieldsUniLower_v<OP,T1,T2> &&
2154 !YieldsStrictlyLower_v<OP,T1,T2> &&
2155 !YieldsDiagonal_v<OP,T1,T2> > >
2157 using Type = LowerMatrix< typename BinaryMapTraitEval2<T1,T2,OP>::Type >;
2173 template<
typename MT,
bool SO,
bool DF >
2174 struct DeclSymTrait< LowerMatrix<MT,SO,DF> >
2176 using Type = DiagonalMatrix<MT>;
2192 template<
typename MT,
bool SO,
bool DF >
2193 struct DeclHermTrait< LowerMatrix<MT,SO,DF> >
2195 using Type = HermitianMatrix<MT>;
2211 template<
typename MT,
bool SO,
bool DF >
2212 struct DeclLowTrait< LowerMatrix<MT,SO,DF> >
2214 using Type = LowerMatrix<MT,SO,DF>;
2230 template<
typename MT,
bool SO,
bool DF >
2231 struct DeclUppTrait< LowerMatrix<MT,SO,DF> >
2233 using Type = DiagonalMatrix<MT,SO,DF>;
2249 template<
typename MT,
bool SO,
bool DF >
2250 struct DeclDiagTrait< LowerMatrix<MT,SO,DF> >
2252 using Type = DiagonalMatrix<MT,SO,DF>;
2268 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2269 struct HighType< LowerMatrix<MT1,SO1,DF1>, LowerMatrix<MT2,SO2,DF2> >
2271 using Type = LowerMatrix< typename HighType<MT1,MT2>::Type >;
2287 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2288 struct LowType< LowerMatrix<MT1,SO1,DF1>, LowerMatrix<MT2,SO2,DF2> >
2290 using Type = LowerMatrix< typename LowType<MT1,MT2>::Type >;
2306 template<
typename MT,
size_t I,
size_t N >
2307 struct SubmatrixTraitEval1< MT, I, I, N, N
2309 !IsUniLower_v<MT> &&
2310 !IsStrictlyLower_v<MT> &&
2311 !IsDiagonal_v<MT> > >
2313 using Type = LowerMatrix< 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 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 YieldsStrictlyLower type trait.
Header file for the IsDiagonal type trait.
Matrix adapter for lower triangular matrices.
Definition: BaseTemplate.h:553
Header file for the dense matrix inversion flags.
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
#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.
constexpr bool IsLower_v
Auxiliary variable template for the IsLower type trait.The IsLower_v variable template provides a con...
Definition: IsLower.h:175
Constraint on the data type.
Header file for the IsUniLower type trait.
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
Constraint on the data type.
Header file for the LowType type trait.
Flag for the inversion of a lower triangular matrix.
Definition: InversionFlag.h:111
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.
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 YieldsUniLower type trait.
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.
constexpr bool YieldsLower_v
Auxiliary variable template for the YieldsLower type trait.The YieldsLower_v variable template provid...
Definition: YieldsLower.h:126
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.
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 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 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
Header file for the YieldsLower type trait.
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.
Header file for the implementation of the base template of the LowerMatrix.
LowerMatrix specialization for sparse matrices.
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 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
LowerMatrix specialization for dense matrices.
Header file for the HighType type trait.