35#ifndef _BLAZE_MATH_EXPRESSIONS_SMATREDUCEEXPR_H_
36#define _BLAZE_MATH_EXPRESSIONS_SMATREDUCEEXPR_H_
120 :
public MatReduceExpr< DenseVector< SMatReduceExpr<MT,OP,columnwise>, true >, columnwise >
137 template<
typename VT >
138 static constexpr bool UseSMPAssign_v = ( !MT::smpAssignable && RequiresEvaluation_v<MT> );
166 static constexpr bool simdEnabled =
false;
169 static constexpr bool smpAssignable = MT::smpAssignable;
180 , op_( std::move(op) )
204 if( index >= sm_.columns() ) {
207 return (*
this)[index];
216 inline size_t size() const noexcept {
217 return sm_.columns();
247 template<
typename T >
248 inline bool canAlias(
const T* alias )
const noexcept {
249 return ( sm_.isAliased( alias ) );
259 template<
typename T >
260 inline bool isAliased(
const T* alias )
const noexcept {
261 return ( sm_.isAliased( alias ) );
281 return sm_.canSMPAssign() || (
size() > SMP_SMATREDUCE_THRESHOLD );
303 template<
typename VT1 >
315 assign( *lhs, reduce<columnwise>( tmp, rhs.op_ ) );
333 template<
typename VT1 >
344 const ResultType tmp(
serial( rhs ) );
363 template<
typename VT1 >
364 friend inline void addAssign( DenseVector<VT1,true>& lhs,
const SMatReduceExpr& rhs )
374 const OT tmp(
serial( rhs.sm_ ) );
375 addAssign( *lhs, reduce<columnwise>( tmp, rhs.op_ ) );
393 template<
typename VT1 >
394 friend inline void addAssign( SparseVector<VT1,true>& lhs,
const SMatReduceExpr& rhs )
404 const ResultType tmp(
serial( rhs ) );
405 addAssign( *lhs, tmp );
423 template<
typename VT1 >
424 friend inline void subAssign( DenseVector<VT1,true>& lhs,
const SMatReduceExpr& rhs )
434 const OT tmp(
serial( rhs.sm_ ) );
435 subAssign( *lhs, reduce<columnwise>( tmp, rhs.op_ ) );
453 template<
typename VT1 >
454 friend inline void subAssign( SparseVector<VT1,true>& lhs,
const SMatReduceExpr& rhs )
464 const ResultType tmp(
serial( rhs ) );
465 subAssign( *lhs, tmp );
483 template<
typename VT1 >
484 friend inline void multAssign( DenseVector<VT1,true>& lhs,
const SMatReduceExpr& rhs )
494 const OT tmp(
serial( rhs.sm_ ) );
495 multAssign( *lhs, reduce<columnwise>( tmp, rhs.op_ ) );
513 template<
typename VT1 >
514 friend inline void multAssign( SparseVector<VT1,true>& lhs,
const SMatReduceExpr& rhs )
524 const ResultType tmp(
serial( rhs ) );
525 multAssign( *lhs, tmp );
543 template<
typename VT1 >
544 friend inline void divAssign( DenseVector<VT1,true>& lhs,
const SMatReduceExpr& rhs )
554 const OT tmp(
serial( rhs.sm_ ) );
555 divAssign( *lhs, reduce<columnwise>( tmp, rhs.op_ ) );
573 template<
typename VT1 >
574 friend inline void divAssign( SparseVector<VT1,true>& lhs,
const SMatReduceExpr& rhs )
584 const ResultType tmp(
serial( rhs ) );
585 divAssign( *lhs, tmp );
604 template<
typename VT1 >
605 friend inline auto smpAssign( Vector<VT1,true>& lhs,
const SMatReduceExpr& rhs )
606 -> EnableIf_t< UseSMPAssign_v<VT1> >
612 const RT tmp( rhs.sm_ );
613 smpAssign( *lhs, reduce<columnwise>( tmp, rhs.op_ ) );
633 template<
typename VT1 >
634 friend inline auto smpAddAssign( Vector<VT1,true>& lhs,
const SMatReduceExpr& rhs )
635 -> EnableIf_t< UseSMPAssign_v<VT1> >
641 const RT tmp( rhs.sm_ );
642 smpAddAssign( *lhs, reduce<columnwise>( tmp, rhs.op_ ) );
662 template<
typename VT1 >
663 friend inline auto smpSubAssign( Vector<VT1,true>& lhs,
const SMatReduceExpr& rhs )
664 -> EnableIf_t< UseSMPAssign_v<VT1> >
670 const RT tmp( rhs.sm_ );
671 smpSubAssign( *lhs, reduce<columnwise>( tmp, rhs.op_ ) );
691 template<
typename VT1 >
692 friend inline auto smpMultAssign( Vector<VT1,true>& lhs,
const SMatReduceExpr& rhs )
693 -> EnableIf_t< UseSMPAssign_v<VT1> >
699 const RT tmp( rhs.sm_ );
720 template<
typename VT1 >
721 friend inline auto smpDivAssign( Vector<VT1,true>& lhs,
const SMatReduceExpr& rhs )
722 -> EnableIf_t< UseSMPAssign_v<VT1> >
728 const RT tmp( rhs.sm_ );
729 smpDivAssign( *lhs, reduce<columnwise>( tmp, rhs.op_ ) );
762 :
public MatReduceExpr< DenseVector< SMatReduceExpr<MT,OP,rowwise>, false >, rowwise >
778 static constexpr bool useAssign = RequiresEvaluation_v<MT>;
782 template<
typename VT >
783 static constexpr bool UseAssign_v = useAssign;
794 template<
typename VT >
795 static constexpr bool UseSMPAssign_v = ( !MT::smpAssignable && useAssign );
854 , op_ ( std::move(op) )
899 return ConstIterator( index_++ );
920 return ConstIterator( index_-- );
941 return index_ == rhs.index_;
952 return index_ != rhs.index_;
962 inline bool operator<(
const ConstIterator& rhs )
const {
963 return index_ < rhs.index_;
973 inline bool operator>(
const ConstIterator& rhs )
const {
974 return index_ > rhs.index_;
985 return index_ <= rhs.index_;
996 return index_ >= rhs.index_;
1007 return index_ - rhs.index_;
1018 friend inline const ConstIterator
operator+(
const ConstIterator& it,
size_t inc ) {
1019 return ConstIterator( it.index_ + inc );
1030 friend inline const ConstIterator
operator+(
size_t inc,
const ConstIterator& it ) {
1031 return ConstIterator( it.index_ + inc );
1042 friend inline const ConstIterator
operator-(
const ConstIterator& it,
size_t dec ) {
1043 return ConstIterator( it.index_ - dec );
1058 static constexpr bool simdEnabled =
false;
1061 static constexpr bool smpAssignable = MT::smpAssignable;
1072 , op_( std::move(op) )
1096 if( index >= sm_.rows() ) {
1099 return (*
this)[index];
1109 return ConstIterator( sm_, 0UL, op_ );
1118 inline ConstIterator
end()
const {
1119 return ConstIterator( sm_,
size(), op_ );
1128 inline size_t size() const noexcept {
1159 template<
typename T >
1160 inline bool canAlias(
const T* alias )
const noexcept {
1161 return ( sm_.isAliased( alias ) );
1171 template<
typename T >
1173 return ( sm_.isAliased( alias ) );
1193 return sm_.canSMPAssign() || (
size() > SMP_SMATREDUCE_THRESHOLD );
1217 template<
typename VT1 >
1226 assign( *lhs, reduce<rowwise>( tmp, rhs.op_ ) );
1245 template<
typename VT1 >
1253 const RT tmp(
serial( rhs.sm_ ) );
1254 addAssign( *lhs, reduce<rowwise>( tmp, rhs.op_ ) );
1274 template<
typename VT1 >
1275 friend inline auto subAssign( Vector<VT1,false>& lhs,
const SMatReduceExpr& rhs )
1276 -> EnableIf_t< UseAssign_v<VT1> >
1282 const RT tmp(
serial( rhs.sm_ ) );
1283 subAssign( *lhs, reduce<rowwise>( tmp, rhs.op_ ) );
1303 template<
typename VT1 >
1304 friend inline auto multAssign( Vector<VT1,false>& lhs,
const SMatReduceExpr& rhs )
1305 -> EnableIf_t< UseAssign_v<VT1> >
1311 const RT tmp(
serial( rhs.sm_ ) );
1312 multAssign( *lhs, reduce<rowwise>( tmp, rhs.op_ ) );
1331 template<
typename VT1 >
1332 friend inline auto divAssign( Vector<VT1,false>& lhs,
const SMatReduceExpr& rhs )
1333 -> EnableIf_t< UseAssign_v<VT1> >
1339 const RT tmp(
serial( rhs.sm_ ) );
1340 divAssign( *lhs, reduce<rowwise>( tmp, rhs.op_ ) );
1359 template<
typename VT1 >
1360 friend inline auto smpAssign( Vector<VT1,false>& lhs,
const SMatReduceExpr& rhs )
1361 -> EnableIf_t< UseSMPAssign_v<VT1> >
1367 const RT tmp( rhs.sm_ );
1368 smpAssign( *lhs, reduce<rowwise>( tmp, rhs.op_ ) );
1388 template<
typename VT1 >
1389 friend inline auto smpAddAssign( Vector<VT1,false>& lhs,
const SMatReduceExpr& rhs )
1390 -> EnableIf_t< UseSMPAssign_v<VT1> >
1396 const RT tmp( rhs.sm_ );
1417 template<
typename VT1 >
1418 friend inline auto smpSubAssign( Vector<VT1,false>& lhs,
const SMatReduceExpr& rhs )
1419 -> EnableIf_t< UseSMPAssign_v<VT1> >
1425 const RT tmp( rhs.sm_ );
1446 template<
typename VT1 >
1447 friend inline auto smpMultAssign( Vector<VT1,false>& lhs,
const SMatReduceExpr& rhs )
1448 -> EnableIf_t< UseSMPAssign_v<VT1> >
1454 const RT tmp( rhs.sm_ );
1475 template<
typename VT1 >
1476 friend inline auto smpDivAssign( Vector<VT1,false>& lhs,
const SMatReduceExpr& rhs )
1477 -> EnableIf_t< UseSMPAssign_v<VT1> >
1483 const RT tmp( rhs.sm_ );
1534template<
typename MT
1544 const size_t M( (*sm).rows() );
1545 const size_t N( (*sm).columns() );
1547 if( M == 0UL || N == 0UL )
return RT{};
1549 const size_t iend( SO ? N : M );
1558 for(
size_t i=0UL; i<iend; ++i )
1560 const auto end( tmp.end(i) );
1561 auto element( tmp.begin(i) );
1563 if( element ==
end )
continue;
1565 RT redux1( element->value() );
1568 for( ; element!=
end; ++element ) {
1569 redux1 = op( redux1, element->value() );
1572 if( i == 0UL ) redux0 = redux1;
1573 else redux0 = op( redux0, redux1 );
1590template< ReductionFlag RF
1593inline const SMatReduceExpr<MT,OP,RF> reduce_backend(
const SparseMatrix<MT,false>& sm, OP op )
1595 using ReturnType =
const SMatReduceExpr<MT,OP,RF>;
1596 return ReturnType( *sm, std::move(op) );
1614inline decltype(
auto) reduce_backend(
const SparseMatrix<MT,true>& sm, OP op )
1616 constexpr ReductionFlag RF2( RF == rowwise ? columnwise : rowwise );
1617 return trans( reduce<RF2>(
trans( *sm ), std::move(op) ) );
1673 return reduce_backend<RF>( *sm, std::move(op) );
1696template<
typename MT
1740template< ReductionFlag RF
1747 return reduce<RF>( *sm,
Add() );
1770template<
typename MT
1814template< ReductionFlag RF
1821 return reduce<RF>( *sm,
Mult() );
1848template<
typename MT
1892template< ReductionFlag RF
1899 return reduce<RF>( *sm,
Min() );
1926template<
typename MT
1970template< ReductionFlag RF
1977 return reduce<RF>( *sm,
Max() );
Header file for auxiliary alias declarations.
typename T::CompositeType CompositeType_t
Alias declaration for nested CompositeType type definitions.
Definition: Aliases.h:110
typename T::ResultType ResultType_t
Alias declaration for nested ResultType type definitions.
Definition: Aliases.h:450
typename T::ElementType ElementType_t
Alias declaration for nested ElementType type definitions.
Definition: Aliases.h:190
typename T::OppositeType OppositeType_t
Alias declaration for nested OppositeType type definitions.
Definition: Aliases.h:310
typename T::TransposeType TransposeType_t
Alias declaration for nested TransposeType type definitions.
Definition: Aliases.h:550
Header file for run time assertion macros.
Header file for the blaze::checked and blaze::unchecked instances.
Constraints on the storage order of matrix types.
Constraint on the transpose flag of vector types.
Header file for the EnableIf class template.
Header file for the function trace functionality.
Header file for the HasMember type traits.
Header file for the If class template.
Header file for the IsExpression type trait class.
Deactivation of problematic macros.
Header file for the reduce trait.
Header file for the reduction flags.
constexpr ReductionFlag columnwise
Reduction flag for column-wise reduction operations.
Definition: ReductionFlag.h:97
constexpr ReductionFlag rowwise
Reduction flag for row-wise reduction operations.
Definition: ReductionFlag.h:77
size_t ReductionFlag
Type of the reduction flags.
Definition: ReductionFlag.h:57
Constraints on the storage order of matrix types.
Constraint on the transpose flag of vector types.
Base class for N-dimensional dense vectors.
Definition: DenseVector.h:77
Expression object for column-wise row-major sparse matrix reduction operations.
Definition: SMatReduceExpr.h:122
TransposeType_t< ResultType > TransposeType
Transpose type for expression template evaluations.
Definition: SMatReduceExpr.h:151
Operand operand() const noexcept
Returns the sparse matrix operand.
Definition: SMatReduceExpr.h:226
SMatReduceExpr(const MT &sm, OP op) noexcept
Constructor for the SMatReduceExpr class.
Definition: SMatReduceExpr.h:178
If_t< IsExpression_v< MT >, const MT, const MT & > Operand
Composite type of the left-hand side sparse matrix expression.
Definition: SMatReduceExpr.h:158
bool isAliased(const T *alias) const noexcept
Returns whether the expression is aliased with the given address alias.
Definition: SMatReduceExpr.h:260
size_t size() const noexcept
Returns the current size/dimension of the vector.
Definition: SMatReduceExpr.h:216
const ElementType ReturnType
Return type for expression template evaluations.
Definition: SMatReduceExpr.h:154
ReturnType at(size_t index) const
Checked access to the vector elements.
Definition: SMatReduceExpr.h:203
bool canAlias(const T *alias) const noexcept
Returns whether the expression can alias with the given address alias.
Definition: SMatReduceExpr.h:248
ElementType_t< ResultType > ElementType
Resulting element type.
Definition: SMatReduceExpr.h:152
ReduceTrait_t< RT, OP, columnwise > ResultType
Result type for expression template evaluations.
Definition: SMatReduceExpr.h:150
bool canSMPAssign() const noexcept
Returns whether the expression can be used in SMP assignments.
Definition: SMatReduceExpr.h:280
ResultType_t< MT > RT
Result type of the sparse matrix expression.
Definition: SMatReduceExpr.h:125
Operand sm_
Sparse matrix of the reduction expression.
Definition: SMatReduceExpr.h:287
OP Operation
Data type of the custom unary operation.
Definition: SMatReduceExpr.h:161
bool isAligned() const noexcept
Returns whether the operands of the expression are properly aligned in memory.
Definition: SMatReduceExpr.h:270
const ResultType CompositeType
Data type for composite expression templates.
Definition: SMatReduceExpr.h:155
ReturnType operator[](size_t index) const
Subscript operator for the direct access to the vector elements.
Definition: SMatReduceExpr.h:190
Operation op_
The reduction operation.
Definition: SMatReduceExpr.h:288
SIMDTrait_t< ElementType > SIMDType
Resulting SIMD element type.
Definition: SMatReduceExpr.h:153
OppositeType_t< MT > OT
Opposite type of the sparse matrix expression.
Definition: SMatReduceExpr.h:126
Operation operation() const
Returns a copy of the reduction operation.
Definition: SMatReduceExpr.h:236
CompositeType_t< MT > CT
Composite type of the sparse matrix expression.
Definition: SMatReduceExpr.h:127
std::random_access_iterator_tag IteratorCategory
The iterator category.
Definition: SMatReduceExpr.h:830
PointerType pointer
Pointer return type.
Definition: SMatReduceExpr.h:839
DifferenceType difference_type
Difference between two iterators.
Definition: SMatReduceExpr.h:841
ElementType ValueType
Type of the underlying elements.
Definition: SMatReduceExpr.h:831
ConstIterator & operator++()
Pre-increment operator.
Definition: SMatReduceExpr.h:887
ElementType * PointerType
Pointer return type.
Definition: SMatReduceExpr.h:832
ptrdiff_t DifferenceType
Difference between two iterators.
Definition: SMatReduceExpr.h:834
ValueType value_type
Type of the underlying elements.
Definition: SMatReduceExpr.h:838
ConstIterator & operator-=(size_t dec)
Subtraction assignment operator.
Definition: SMatReduceExpr.h:876
friend const ConstIterator operator+(const ConstIterator &it, size_t inc)
Addition between a ConstIterator and an integral value.
Definition: SMatReduceExpr.h:1018
size_t index_
Index to the current matrix row.
Definition: SMatReduceExpr.h:1050
OP op_
The reduction operation.
Definition: SMatReduceExpr.h:1051
IteratorCategory iterator_category
The iterator category.
Definition: SMatReduceExpr.h:837
ConstIterator(Operand sm, size_t index, OP op)
Constructor for the ConstIterator class.
Definition: SMatReduceExpr.h:851
friend const ConstIterator operator-(const ConstIterator &it, size_t dec)
Subtraction between a ConstIterator and an integral value.
Definition: SMatReduceExpr.h:1042
ReturnType operator*() const
Direct access to the element at the current iterator position.
Definition: SMatReduceExpr.h:929
bool operator>(const ConstIterator &rhs) const
Greater-than comparison between two ConstIterator objects.
Definition: SMatReduceExpr.h:973
bool operator<(const ConstIterator &rhs) const
Less-than comparison between two ConstIterator objects.
Definition: SMatReduceExpr.h:962
friend const ConstIterator operator+(size_t inc, const ConstIterator &it)
Addition between an integral value and a ConstIterator.
Definition: SMatReduceExpr.h:1030
bool operator>=(const ConstIterator &rhs) const
Greater-than comparison between two ConstIterator objects.
Definition: SMatReduceExpr.h:995
ConstIterator & operator--()
Pre-decrement operator.
Definition: SMatReduceExpr.h:908
ReferenceType reference
Reference return type.
Definition: SMatReduceExpr.h:840
const ConstIterator operator++(int)
Post-increment operator.
Definition: SMatReduceExpr.h:898
Operand sm_
Sparse matrix of the reduction expression.
Definition: SMatReduceExpr.h:1049
const ConstIterator operator--(int)
Post-decrement operator.
Definition: SMatReduceExpr.h:919
bool operator<=(const ConstIterator &rhs) const
Less-than comparison between two ConstIterator objects.
Definition: SMatReduceExpr.h:984
bool operator!=(const ConstIterator &rhs) const
Inequality comparison between two ConstIterator objects.
Definition: SMatReduceExpr.h:951
DifferenceType operator-(const ConstIterator &rhs) const
Calculating the number of elements between two iterators.
Definition: SMatReduceExpr.h:1006
ElementType & ReferenceType
Reference return type.
Definition: SMatReduceExpr.h:833
ConstIterator & operator+=(size_t inc)
Addition assignment operator.
Definition: SMatReduceExpr.h:864
bool operator==(const ConstIterator &rhs) const
Equality comparison between two ConstIterator objects.
Definition: SMatReduceExpr.h:940
Expression object for row-wise row-major sparse matrix reduction operations.
Definition: SMatReduceExpr.h:764
TransposeType_t< ResultType > TransposeType
Transpose type for expression template evaluations.
Definition: SMatReduceExpr.h:808
bool canSMPAssign() const noexcept
Returns whether the expression can be used in SMP assignments.
Definition: SMatReduceExpr.h:1192
If_t< useAssign, const ResultType, const SMatReduceExpr & > CompositeType
Data type for composite expression templates.
Definition: SMatReduceExpr.h:814
size_t size() const noexcept
Returns the current size/dimension of the vector.
Definition: SMatReduceExpr.h:1128
ConstIterator begin() const
Returns an iterator to the first non-zero element of the dense vector.
Definition: SMatReduceExpr.h:1108
Operation op_
The reduction operation.
Definition: SMatReduceExpr.h:1200
bool isAligned() const noexcept
Returns whether the operands of the expression are properly aligned in memory.
Definition: SMatReduceExpr.h:1182
Operation operation() const
Returns a copy of the reduction operation.
Definition: SMatReduceExpr.h:1148
If_t< IsExpression_v< MT >, const MT, const MT & > Operand
Composite type of the left-hand side sparse matrix expression.
Definition: SMatReduceExpr.h:817
ElementType_t< ResultType > ElementType
Resulting element type.
Definition: SMatReduceExpr.h:809
ReturnType operator[](size_t index) const
Subscript operator for the direct access to the vector elements.
Definition: SMatReduceExpr.h:1082
ResultType_t< MT > RT
Result type of the sparse matrix expression.
Definition: SMatReduceExpr.h:767
Operand operand() const noexcept
Returns the sparse matrix operand.
Definition: SMatReduceExpr.h:1138
SMatReduceExpr(const MT &sm, OP op) noexcept
Constructor for the SMatReduceExpr class.
Definition: SMatReduceExpr.h:1070
ConstIterator end() const
Returns an iterator just past the last non-zero element of the dense vector.
Definition: SMatReduceExpr.h:1118
ReduceTrait_t< RT, OP, rowwise > ResultType
Result type for expression template evaluations.
Definition: SMatReduceExpr.h:807
bool canAlias(const T *alias) const noexcept
Returns whether the expression can alias with the given address alias.
Definition: SMatReduceExpr.h:1160
bool isAliased(const T *alias) const noexcept
Returns whether the expression is aliased with the given address alias.
Definition: SMatReduceExpr.h:1172
SIMDTrait_t< ElementType > SIMDType
Resulting SIMD element type.
Definition: SMatReduceExpr.h:810
Operand sm_
Sparse matrix of the reduction expression.
Definition: SMatReduceExpr.h:1199
const ElementType ReturnType
Return type for expression template evaluations.
Definition: SMatReduceExpr.h:811
ReturnType at(size_t index) const
Checked access to the vector elements.
Definition: SMatReduceExpr.h:1095
OP Operation
Data type of the custom unary operation.
Definition: SMatReduceExpr.h:820
Base template for row-major sparse matrix partial reduction operations.
Definition: SMatReduceExpr.h:98
Base class for sparse matrices.
Definition: SparseMatrix.h:77
Base class for sparse vectors.
Definition: SparseVector.h:72
Base class for N-dimensional vectors.
Definition: Vector.h:82
Constraint on the data type.
Constraint on the data type.
Constraint on the data type.
Header file for the Computation base class.
Header file for the DenseVector base class.
Header file for the MatReduceExpr base class.
Header file for the SparseMatrix base class.
Header file for the Add functor.
Header file for the Mult functor.
decltype(auto) column(Matrix< MT, SO > &matrix, RCAs... args)
Creating a view on a specific column of the given matrix.
Definition: Column.h:137
decltype(auto) reduce(const DenseMatrix< MT, SO > &dm, OP op)
Performs a custom reduction operation on the given dense matrix.
Definition: DMatReduceExpr.h:2025
decltype(auto) trans(const DenseMatrix< MT, SO > &dm)
Calculation of the transpose of the given dense matrix.
Definition: DMatTransExpr.h:766
decltype(auto) serial(const DenseMatrix< MT, SO > &dm)
Forces the serial evaluation of the given dense matrix expression dm.
Definition: DMatSerialExpr.h:812
#define BLAZE_CONSTRAINT_MUST_BE_ROW_MAJOR_MATRIX_TYPE(T)
Constraint on the data type.
Definition: RowMajorMatrix.h:61
#define BLAZE_CONSTRAINT_MUST_NOT_REQUIRE_EVALUATION(T)
Constraint on the data type.
Definition: RequiresEvaluation.h:81
#define BLAZE_CONSTRAINT_MUST_BE_SPARSE_MATRIX_TYPE(T)
Constraint on the data type.
Definition: SparseMatrix.h:61
#define BLAZE_CONSTRAINT_MUST_BE_DENSE_VECTOR_TYPE(T)
Constraint on the data type.
Definition: DenseVector.h:61
#define BLAZE_CONSTRAINT_MUST_BE_ROW_VECTOR_TYPE(T)
Constraint on the data type.
Definition: RowVector.h:61
#define BLAZE_CONSTRAINT_MUST_BE_COLUMN_MAJOR_MATRIX_TYPE(T)
Constraint on the data type.
Definition: ColumnMajorMatrix.h:61
typename ReduceTrait< T, OP, RF... >::Type ReduceTrait_t
Auxiliary alias declaration for the ReduceTrait class template.
Definition: ReduceTrait.h:150
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:584
constexpr size_t size(const Matrix< MT, SO > &matrix) noexcept
Returns the total number of elements of the matrix.
Definition: Matrix.h:676
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
typename SIMDTrait< T >::Type SIMDTrait_t
Auxiliary alias declaration for the SIMDTrait class template.
Definition: SIMDTrait.h:315
auto smpDivAssign(Vector< VT1, TF1 > &lhs, const Vector< VT2, TF2 > &rhs) -> EnableIf_t< IsDenseVector_v< VT1 > >
Default implementation of the SMP division assignment of a vector to a dense vector.
Definition: DenseVector.h:221
auto smpSubAssign(Matrix< MT1, SO1 > &lhs, const Matrix< MT2, SO2 > &rhs) -> EnableIf_t< IsDenseMatrix_v< MT1 > >
Default implementation of the SMP subtraction assignment of a matrix to dense matrix.
Definition: DenseMatrix.h:162
auto smpAssign(Matrix< MT1, SO1 > &lhs, const Matrix< MT2, SO2 > &rhs) -> EnableIf_t< IsDenseMatrix_v< MT1 > >
Default implementation of the SMP assignment of a matrix to a dense matrix.
Definition: DenseMatrix.h:100
auto smpMultAssign(Vector< VT1, TF1 > &lhs, const Vector< VT2, TF2 > &rhs) -> EnableIf_t< IsDenseVector_v< VT1 > >
Default implementation of the SMP multiplication assignment of a vector to a dense vector.
Definition: DenseVector.h:192
auto smpAddAssign(Matrix< MT1, SO1 > &lhs, const Matrix< MT2, SO2 > &rhs) -> EnableIf_t< IsDenseMatrix_v< MT1 > >
Default implementation of the SMP addition assignment of a matrix to a dense matrix.
Definition: DenseMatrix.h:131
decltype(auto) max(const SparseMatrix< MT, SO > &sm)
Returns the largest element of each row/columns of the sparse matrix.
Definition: SMatReduceExpr.h:1973
decltype(auto) prod(const SparseMatrix< MT, SO > &sm)
Reduces the given sparse matrix by means of multiplication.
Definition: SMatReduceExpr.h:1817
decltype(auto) min(const SparseMatrix< MT, SO > &sm)
Returns the smallest element of each row/columns of the sparse matrix.
Definition: SMatReduceExpr.h:1895
decltype(auto) sum(const SparseMatrix< MT, SO > &sm)
Reduces the given sparse matrix by means of addition.
Definition: SMatReduceExpr.h:1743
#define BLAZE_STATIC_ASSERT_MSG(expr, msg)
Compile time assertion macro.
Definition: StaticAssert.h:123
typename RemoveCV< T >::Type RemoveCV_t
Auxiliary alias declaration for the RemoveCV type trait.
Definition: RemoveCV.h:97
typename EnableIf< Condition, T >::Type EnableIf_t
Auxiliary type for the EnableIf class template.
Definition: EnableIf.h:138
typename If< Condition >::template Type< T1, T2 > If_t
Auxiliary alias template for the If class template.
Definition: If.h:108
#define BLAZE_THROW_OUT_OF_RANGE(MESSAGE)
Macro for the emission of a std::out_of_range exception.
Definition: Exception.h:331
#define BLAZE_FUNCTION_TRACE
Function trace macro.
Definition: FunctionTrace.h:94
constexpr Unchecked unchecked
Global Unchecked instance.
Definition: Check.h:146
Header file for the exception macros of the math module.
Header file for all forward declarations for expression class templates.
Header file for the Max functor.
Header file for the Min functor.
Header file for the serial shim.
Generic wrapper for the addition operator.
Definition: Add.h:85
Base class for all compute expression templates.
Definition: Computation.h:68
Base class for all matrix reduction expression templates.
Definition: MatReduceExpr.h:70
Generic wrapper for the max() function.
Definition: Max.h:82
Generic wrapper for the min() function.
Definition: Min.h:82
Generic wrapper for the multiplication operator.
Definition: Mult.h:82
Header file for the thresholds for matrix/vector and matrix/matrix multiplications.
Header file for the RequiresEvaluation type trait.
Header file for basic type definitions.