10 #ifndef EIGEN_SPARSEASSIGN_H
11 #define EIGEN_SPARSEASSIGN_H
18 template <
typename Derived>
19 template <
typename OtherDerived>
25 template <
typename Derived>
26 template <
typename OtherDerived>
33 template <
typename Derived>
34 template <
typename OtherDerived>
42 template <
typename Derived>
80 template <
typename DstXprType,
typename SrcXprType>
86 SrcEvaluatorType srcEvaluator(src);
89 const Index outerEvaluationSize = (SrcEvaluatorType::Flags &
RowMajorBit) ? src.rows() : src.cols();
91 Index reserveSize = 0;
92 for (
Index j = 0;
j < outerEvaluationSize; ++
j)
93 for (
typename SrcEvaluatorType::InnerIterator it(srcEvaluator,
j); it; ++it) reserveSize++;
97 dst.resize(src.rows(), src.cols());
99 dst.reserve(reserveSize);
100 for (
Index j = 0;
j < outerEvaluationSize; ++
j) {
102 for (
typename SrcEvaluatorType::InnerIterator it(srcEvaluator,
j); it; ++it) {
104 dst.insertBackByOuterInner(
j, it.index()) =
v;
113 "the transpose operation is supposed to be handled in SparseMatrix::operator=");
117 DstXprType temp(src.rows(), src.cols());
119 temp.reserve(reserveSize);
120 for (
Index j = 0;
j < outerEvaluationSize; ++
j) {
122 for (
typename SrcEvaluatorType::InnerIterator it(srcEvaluator,
j); it; ++it) {
124 temp.insertBackByOuterInner(Flip ? it.index() :
j, Flip ?
j : it.index()) =
v;
129 dst = temp.markAsRValue();
134 template <
typename DstXprType,
typename SrcXprType,
typename Functor>
136 static void run(DstXprType &dst,
const SrcXprType &src,
143 template <
typename DstXprType,
typename SrcXprType,
typename Functor,
typename Weak>
155 for (
Index j = 0;
j < outerEvaluationSize; ++
j)
157 func.assignCoeff(dstEval.coeffRef(
i.row(),
i.col()),
i.value());
162 template <
typename DstXprType,
typename Func1,
typename Func2>
164 template <
typename SrcXprType,
typename InitialFunc>
166 const InitialFunc & ) {
167 #ifdef EIGEN_SPARSE_ASSIGNMENT_FROM_DENSE_OP_SPARSE_PLUGIN
176 template <
typename Lhs,
typename Rhs,
typename Scalar>
178 std::enable_if_t<internal::is_same<typename internal::evaluator_traits<Rhs>::Shape,
DenseShape>
::value>
181 #ifdef EIGEN_SPARSE_ASSIGNMENT_FROM_SPARSE_ADD_DENSE_PLUGIN
191 template <
typename Lhs,
typename Rhs,
typename Scalar>
193 std::enable_if_t<internal::is_same<typename internal::evaluator_traits<Rhs>::Shape,
DenseShape>
::value>
197 #ifdef EIGEN_SPARSE_ASSIGNMENT_FROM_SPARSE_SUB_DENSE_PLUGIN
207 #define EIGEN_CATCH_ASSIGN_DENSE_OP_SPARSE(ASSIGN_OP, BINOP, ASSIGN_OP2) \
208 template <typename DstXprType, typename Lhs, typename Rhs, typename Scalar> \
210 DstXprType, CwiseBinaryOp<internal::BINOP<Scalar, Scalar>, const Lhs, const Rhs>, \
211 internal::ASSIGN_OP<typename DstXprType::Scalar, Scalar>, Sparse2Dense, \
212 std::enable_if_t<internal::is_same<typename internal::evaluator_traits<Lhs>::Shape, DenseShape>::value || \
213 internal::is_same<typename internal::evaluator_traits<Rhs>::Shape, DenseShape>::value>> \
214 : assignment_from_dense_op_sparse<DstXprType, \
215 internal::ASSIGN_OP<typename DstXprType::Scalar, typename Lhs::Scalar>, \
216 internal::ASSIGN_OP2<typename DstXprType::Scalar, typename Rhs::Scalar>> {}
228 template <
typename DstXprType,
typename DecType,
typename RhsType,
typename Scalar>
234 if ((dst.rows() != dstRows) || (dst.cols() != dstCols)) dst.resize(dstRows, dstCols);
236 src.
dec()._solve_impl(src.
rhs(), dst);
247 template <
typename DstXprType,
typename SrcXprType,
typename Functor>
252 template <
int Options,
typename AssignFunc>
257 template <
typename DstDerived>
260 dst.
derived().diagonal() = src.diagonal();
263 template <
typename DstDerived>
266 dst.
derived().diagonal() += src.diagonal();
269 template <
typename DstDerived>
272 dst.
derived().diagonal() -= src.diagonal();
Array< int, Dynamic, 1 > v
Definition: Array_initializer_list_vector_cxx11.cpp:1
int i
Definition: BiCGSTAB_step_by_step.cpp:9
#define EIGEN_DEVICE_FUNC
Definition: Macros.h:892
#define eigen_assert(x)
Definition: Macros.h:910
#define EIGEN_STRONG_INLINE
Definition: Macros.h:834
SCALAR Scalar
Definition: bench_gemm.cpp:45
Generic expression where a coefficient-wise binary operator is applied to two expressions.
Definition: CwiseBinaryOp.h:79
Definition: ReturnByValue.h:50
EIGEN_DEVICE_FUNC void evalTo(Dest &dst) const
Definition: ReturnByValue.h:58
Pseudo expression representing a solving operation.
Definition: Solve.h:62
EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR Index cols() const EIGEN_NOEXCEPT
Definition: Solve.h:70
EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR Index rows() const EIGEN_NOEXCEPT
Definition: Solve.h:69
EIGEN_DEVICE_FUNC const Decomposition & dec() const
Definition: Solve.h:72
EIGEN_DEVICE_FUNC const RhsType & rhs() const
Definition: Solve.h:73
Base class of any sparse matrices or sparse expressions.
Definition: SparseMatrixBase.h:30
Derived & operator=(const EigenBase< OtherDerived > &other)
Definition: SparseAssign.h:20
const Derived & derived() const
Definition: SparseMatrixBase.h:144
A versatible sparse matrix representation.
Definition: SparseMatrix.h:121
void assignDiagonal(const DiagXpr diagXpr, const Func &assignFunc)
Definition: SparseMatrix.h:1005
const unsigned int RowMajorBit
Definition: Constants.h:70
@ Lhs
Definition: TensorContractionMapper.h:20
@ Rhs
Definition: TensorContractionMapper.h:20
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void resize_if_allowed(DstXprType &dst, const SrcXprType &src, const Functor &)
Definition: AssignEvaluator.h:703
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE EIGEN_CONSTEXPR void call_assignment_no_alias(Dst &dst, const Src &src, const Func &func)
Definition: AssignEvaluator.h:812
void assign_sparse_to_sparse(DstXprType &dst, const SrcXprType &src)
Definition: SparseAssign.h:81
EIGEN_CATCH_ASSIGN_DENSE_OP_SPARSE(assign_op, scalar_sum_op, add_assign_op)
Namespace containing all symbols from the Eigen library.
Definition: bench_norm.cpp:70
auto run(Kernel kernel, Args &&... args) -> decltype(kernel(args...))
Definition: gpu_test_helper.h:414
squared absolute value
Definition: GlobalFunctions.h:87
const int OuterRandomAccessPattern
Definition: SparseUtil.h:43
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
Definition: Meta.h:83
void transpose()
Definition: skew_symmetric_matrix3.cpp:135
Definition: Eigen_Colamd.h:49
#define EIGEN_SPARSE_ASSIGNMENT_FROM_DENSE_OP_SPARSE_PLUGIN
Definition: sparse_basic.cpp:17
#define EIGEN_SPARSE_ASSIGNMENT_FROM_SPARSE_ADD_DENSE_PLUGIN
Definition: sparse_basic.cpp:18
#define EIGEN_SPARSE_ASSIGNMENT_FROM_SPARSE_SUB_DENSE_PLUGIN
Definition: sparse_basic.cpp:19
Definition: Constants.h:540
Definition: Constants.h:549
Definition: EigenBase.h:33
constexpr EIGEN_DEVICE_FUNC Derived & derived()
Definition: EigenBase.h:49
Definition: Constants.h:570
Definition: Constants.h:522
Sparse2Dense Kind
Definition: SparseAssign.h:73
Sparse2Dense Kind
Definition: SparseAssign.h:77
Diagonal2Sparse Kind
Definition: SparseAssign.h:244
Sparse2Sparse Kind
Definition: SparseAssign.h:65
Sparse2Sparse Kind
Definition: SparseAssign.h:69
Definition: AssignEvaluator.h:760
Solve< DecType, RhsType > SrcXprType
Definition: SparseAssign.h:230
static void run(DstXprType &dst, const SrcXprType &src, const internal::assign_op< Scalar, Scalar > &)
Definition: SparseAssign.h:231
DstXprType::Scalar Scalar
Definition: SparseAssign.h:250
static void run(SparseMatrixBase< DstDerived > &dst, const SrcXprType &src, const internal::add_assign_op< typename DstXprType::Scalar, typename SrcXprType::Scalar > &)
Definition: SparseAssign.h:264
static void run(SparseMatrixBase< DstDerived > &dst, const SrcXprType &src, const internal::sub_assign_op< typename DstXprType::Scalar, typename SrcXprType::Scalar > &)
Definition: SparseAssign.h:270
DstXprType::StorageIndex StorageIndex
Definition: SparseAssign.h:249
static void run(SparseMatrixBase< DstDerived > &dst, const SrcXprType &src, const internal::assign_op< typename DstXprType::Scalar, typename SrcXprType::Scalar > &)
Definition: SparseAssign.h:258
static void run(SparseMatrix< Scalar, Options, StorageIndex > &dst, const SrcXprType &src, const AssignFunc &func)
Definition: SparseAssign.h:253
static void run(DstXprType &dst, const SrcXprType &src, const Functor &func)
Definition: SparseAssign.h:145
static void run(DstXprType &dst, const SrcXprType &src, const internal::assign_op< typename DstXprType::Scalar, typename SrcXprType::Scalar > &)
Definition: SparseAssign.h:136
Definition: AssignEvaluator.h:773
Definition: SparseAssign.h:240
Definition: Constants.h:580
Definition: SparseAssign.h:61
Definition: SparseAssign.h:60
Definition: SparseUtil.h:152
Template functor for scalar/packet assignment with addition.
Definition: AssignmentFunctors.h:52
Template functor for scalar/packet assignment.
Definition: AssignmentFunctors.h:25
Definition: SparseAssign.h:163
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE std::enable_if_t< internal::is_same< typename internal::evaluator_traits< Rhs >::Shape, DenseShape >::value > run(DstXprType &dst, const CwiseBinaryOp< internal::scalar_sum_op< Scalar, Scalar >, const Lhs, const Rhs > &src, const internal::assign_op< typename DstXprType::Scalar, Scalar > &)
Definition: SparseAssign.h:179
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void run(DstXprType &dst, const SrcXprType &src, const InitialFunc &)
Definition: SparseAssign.h:165
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE std::enable_if_t< internal::is_same< typename internal::evaluator_traits< Rhs >::Shape, DenseShape >::value > run(DstXprType &dst, const CwiseBinaryOp< internal::scalar_difference_op< Scalar, Scalar >, const Lhs, const Rhs > &src, const internal::assign_op< typename DstXprType::Scalar, Scalar > &)
Definition: SparseAssign.h:194
Definition: CoreEvaluators.h:104
Template functor to compute the difference of two scalars.
Definition: BinaryFunctors.h:381
Template functor to compute the sum of two scalars.
Definition: BinaryFunctors.h:34
IteratorBased Kind
Definition: SparseAssign.h:52
Definition: CoreEvaluators.h:25
SparseShape Shape
Definition: SparseAssign.h:57
Definition: CoreEvaluators.h:32
Template functor for scalar/packet assignment with subtraction.
Definition: AssignmentFunctors.h:73
Definition: ForwardDeclarations.h:21
Definition: NonLinearOptimization.cpp:97
Definition: benchGeometry.cpp:21
std::ptrdiff_t j
Definition: tut_arithmetic_redux_minmax.cpp:2