10 #ifndef EIGEN_SELFADJOINT_PRODUCT_H 11 #define EIGEN_SELFADJOINT_PRODUCT_H 22 template<
typename Scalar,
typename Index,
int UpLo,
bool ConjLhs,
bool ConjRhs>
33 += (alpha * cj(vecY[
i])) * ConjLhsType(OtherMap(vecX+(UpLo==
Lower ? i : 0),UpLo==
Lower ? size-i : (i+1)));
38 template<
typename Scalar,
typename Index,
int UpLo,
bool ConjLhs,
bool ConjRhs>
43 selfadjoint_rank1_update<Scalar,Index,ColMajor,UpLo==Lower?Upper:Lower,ConjRhs,ConjLhs>::run(size,mat,stride,vecY,vecX,alpha);
47 template<
typename MatrixType,
typename OtherType,
int UpLo,
bool OtherIsVector = OtherType::IsVectorAtCompileTime>
50 template<
typename MatrixType,
typename OtherType,
int UpLo>
57 typedef typename OtherBlasTraits::DirectLinearAccessType ActualOtherType;
61 Scalar actualAlpha = alpha * OtherBlasTraits::extractScalarFactor(other.derived());
65 UseOtherDirectly = _ActualOtherType::InnerStrideAtCompileTime==1
70 (UseOtherDirectly ?
const_cast<Scalar*
>(actualOther.data()) : static_other.data()));
77 (!OtherBlasTraits::NeedToConjugate) && NumTraits<Scalar>::IsComplex>
78 ::
run(other.size(), mat.data(), mat.outerStride(), actualOtherPtr, actualOtherPtr, actualAlpha);
82 template<
typename MatrixType,
typename OtherType,
int UpLo>
89 typedef typename OtherBlasTraits::DirectLinearAccessType ActualOtherType;
93 Scalar actualAlpha = alpha * OtherBlasTraits::extractScalarFactor(other.derived());
97 OtherIsRowMajor = _ActualOtherType::Flags&
RowMajorBit ? 1 : 0
101 Index depth = actualOther.cols();
104 MatrixType::MaxColsAtCompileTime, MatrixType::MaxColsAtCompileTime, _ActualOtherType::MaxColsAtCompileTime> BlockingType;
106 BlockingType blocking(size, size, depth, 1,
false);
111 Scalar, OtherIsRowMajor ?
ColMajor :
RowMajor, (!OtherBlasTraits::NeedToConjugate) && NumTraits<Scalar>::IsComplex,
114 &actualOther.coeffRef(0,0), actualOther.outerStride(), &actualOther.coeffRef(0,0), actualOther.outerStride(),
115 mat.data(), mat.outerStride(), actualAlpha, blocking);
121 template<
typename MatrixType,
unsigned int UpLo>
122 template<
typename DerivedU>
133 #endif // EIGEN_SELFADJOINT_PRODUCT_H
static void run(MatrixType &mat, const OtherType &other, const typename MatrixType::Scalar &alpha)
A matrix or vector expression mapping an existing array of data.
Namespace containing all symbols from the Eigen library.
Holds information about the various numeric (i.e. scalar) types allowed by Eigen. ...
const unsigned int RowMajorBit
internal::traits< SelfAdjointView >::Scalar Scalar
The type of coefficients in this matrix.
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
static void run(MatrixType &mat, const OtherType &other, const typename MatrixType::Scalar &alpha)
Expression of a selfadjoint matrix from a triangular part of a dense matrix.
static void run(Index size, Scalar *mat, Index stride, const Scalar *vecX, const Scalar *vecY, const Scalar &alpha)
EIGEN_DEVICE_FUNC SelfAdjointView & rankUpdate(const MatrixBase< DerivedU > &u, const MatrixBase< DerivedV > &v, const Scalar &alpha=Scalar(1))
#define ei_declare_aligned_stack_constructed_variable(TYPE, NAME, SIZE, BUFFER)
void run(Expr &expr, Dev &dev)
static void run(Index size, Scalar *mat, Index stride, const Scalar *vecX, const Scalar *vecY, const Scalar &alpha)
Base class for all dense matrices, vectors, and expressions.