TriangularMatrix.h
Go to the documentation of this file.
1 // This file is part of Eigen, a lightweight C++ template library
2 // for linear algebra.
3 //
4 // Copyright (C) 2008 Benoit Jacob <jacob.benoit.1@gmail.com>
5 // Copyright (C) 2008-2009 Gael Guennebaud <gael.guennebaud@inria.fr>
6 //
7 // This Source Code Form is subject to the terms of the Mozilla
8 // Public License v. 2.0. If a copy of the MPL was not distributed
9 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
10 
11 #ifndef EIGEN_TRIANGULARMATRIX_H
12 #define EIGEN_TRIANGULARMATRIX_H
13 
14 // IWYU pragma: private
15 #include "./InternalHeaderCheck.h"
16 
17 namespace Eigen {
18 
19 namespace internal {
20 
21 template <int Side, typename TriangularType, typename Rhs>
22 struct triangular_solve_retval;
23 
24 }
25 
31 template <typename Derived>
32 class TriangularBase : public EigenBase<Derived> {
33  public:
34  enum {
40 
48 
49  };
55  typedef Derived const& Nested;
56 
58  eigen_assert(!((int(Mode) & int(UnitDiag)) && (int(Mode) & int(ZeroDiag))));
59  }
60 
61  EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR inline Index rows() const EIGEN_NOEXCEPT { return derived().rows(); }
62  EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR inline Index cols() const EIGEN_NOEXCEPT { return derived().cols(); }
63  EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR inline Index outerStride() const EIGEN_NOEXCEPT { return derived().outerStride(); }
64  EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR inline Index innerStride() const EIGEN_NOEXCEPT { return derived().innerStride(); }
65 
66  // dummy resize function
70  eigen_assert(rows == this->rows() && cols == this->cols());
71  }
72 
73  EIGEN_DEVICE_FUNC inline Scalar coeff(Index row, Index col) const { return derived().coeff(row, col); }
74  EIGEN_DEVICE_FUNC inline Scalar& coeffRef(Index row, Index col) { return derived().coeffRef(row, col); }
75 
78  template <typename Other>
80  derived().coeffRef(row, col) = other.coeff(row, col);
81  }
82 
85  return coeff(row, col);
86  }
89  return coeffRef(row, col);
90  }
91 
92 #ifndef EIGEN_PARSED_BY_DOXYGEN
93  EIGEN_DEVICE_FUNC inline const Derived& derived() const { return *static_cast<const Derived*>(this); }
94  EIGEN_DEVICE_FUNC inline Derived& derived() { return *static_cast<Derived*>(this); }
95 #endif // not EIGEN_PARSED_BY_DOXYGEN
96 
97  template <typename DenseDerived>
99  template <typename DenseDerived>
101 
104  evalToLazy(res);
105  return res;
106  }
107 
108  protected:
112  eigen_assert(col >= 0 && col < cols() && row >= 0 && row < rows());
113  const int mode = int(Mode) & ~SelfAdjoint;
115  eigen_assert((mode == Upper && col >= row) || (mode == Lower && col <= row) ||
116  ((mode == StrictlyUpper || mode == UnitUpper) && col > row) ||
117  ((mode == StrictlyLower || mode == UnitLower) && col < row));
118  }
119 
120 #ifdef EIGEN_INTERNAL_DEBUGGING
122 #else
124 #endif
125 };
126 
145 namespace internal {
146 template <typename MatrixType, unsigned int Mode_>
147 struct traits<TriangularView<MatrixType, Mode_>> : traits<MatrixType> {
149  typedef std::remove_reference_t<MatrixTypeNested> MatrixTypeNestedNonRef;
151  typedef typename MatrixType::PlainObject FullMatrixType;
153  enum {
154  Mode = Mode_,
155  FlagsLvalueBit = is_lvalue<MatrixType>::value ? LvalueBit : 0,
156  Flags = (MatrixTypeNestedCleaned::Flags & (HereditaryBits | FlagsLvalueBit) &
158  };
159 };
160 } // namespace internal
161 
162 template <typename MatrixType_, unsigned int Mode_, typename StorageKind>
164 
165 template <typename MatrixType_, unsigned int Mode_>
167  : public TriangularViewImpl<MatrixType_, Mode_, typename internal::traits<MatrixType_>::StorageKind> {
168  public:
171  typedef MatrixType_ MatrixType;
172 
173  protected:
176 
179 
180  public:
183 
184  enum {
185  Mode = Mode_,
187  TransposeMode = (int(Mode) & int(Upper) ? Lower : 0) | (int(Mode) & int(Lower) ? Upper : 0) |
188  (int(Mode) & int(UnitDiag)) | (int(Mode) & int(ZeroDiag)),
189  IsVectorAtCompileTime = false
190  };
191 
193 
195 
196 
200 
203 
206 
210  return ConjugateReturnType(m_matrix.conjugate());
211  }
212 
216  template <bool Cond>
217  EIGEN_DEVICE_FUNC inline std::conditional_t<Cond, ConjugateReturnType, ConstTriangularView> conjugateIf() const {
218  typedef std::conditional_t<Cond, ConjugateReturnType, ConstTriangularView> ReturnType;
219  return ReturnType(m_matrix.template conjugateIf<Cond>());
220  }
221 
224  EIGEN_DEVICE_FUNC inline const AdjointReturnType adjoint() const { return AdjointReturnType(m_matrix.adjoint()); }
225 
228  template <class Dummy = int>
230  std::enable_if_t<Eigen::internal::is_lvalue<MatrixType>::value, Dummy*> = nullptr) {
231  typename MatrixType::TransposeReturnType tmp(m_matrix);
232  return TransposeReturnType(tmp);
233  }
234 
238  return ConstTransposeReturnType(m_matrix.transpose());
239  }
240 
241  template <typename Other>
243  return Solve<TriangularView, Other>(*this, other.derived());
244  }
245 
246 // workaround MSVC ICE
247 #if EIGEN_COMP_MSVC
248  template <int Side, typename Other>
250  const MatrixBase<Other>& other) const {
251  return Base::template solve<Side>(other);
252  }
253 #else
254  using Base::solve;
255 #endif
256 
262  EIGEN_STATIC_ASSERT((Mode & (UnitDiag | ZeroDiag)) == 0, PROGRAMMING_ERROR);
264  }
265 
268  EIGEN_STATIC_ASSERT((Mode & (UnitDiag | ZeroDiag)) == 0, PROGRAMMING_ERROR);
270  }
271 
275  if (Mode & UnitDiag)
276  return 1;
277  else if (Mode & ZeroDiag)
278  return 0;
279  else
280  return m_matrix.diagonal().prod();
281  }
282 
283  protected:
285 };
286 
296 template <typename MatrixType_, unsigned int Mode_>
297 class TriangularViewImpl<MatrixType_, Mode_, Dense> : public TriangularBase<TriangularView<MatrixType_, Mode_>> {
298  public:
300 
303 
304  typedef MatrixType_ MatrixType;
305  typedef typename MatrixType::PlainObject DenseMatrixType;
307 
308  public:
309  using Base::derived;
310  using Base::evalToLazy;
311 
313 
315 
318  EIGEN_DEVICE_FUNC inline Index outerStride() const { return derived().nestedExpression().outerStride(); }
321  EIGEN_DEVICE_FUNC inline Index innerStride() const { return derived().nestedExpression().innerStride(); }
322 
324  template <typename Other>
326  internal::call_assignment_no_alias(derived(), other.derived(),
328  return derived();
329  }
331  template <typename Other>
333  internal::call_assignment_no_alias(derived(), other.derived(),
335  return derived();
336  }
337 
340  return *this = derived().nestedExpression() * other;
341  }
344  return *this = derived().nestedExpression() / other;
345  }
346 
351  return *this = MatrixType::Constant(derived().rows(), derived().cols(), value);
352  }
357 
362  Base::check_coordinates_internal(row, col);
363  return derived().nestedExpression().coeff(row, col);
364  }
365 
371  Base::check_coordinates_internal(row, col);
372  return derived().nestedExpression().coeffRef(row, col);
373  }
374 
376  template <typename OtherDerived>
378 
380  template <typename OtherDerived>
382 
383 #ifndef EIGEN_PARSED_BY_DOXYGEN
385  return *this = other.derived().nestedExpression();
386  }
387 
388  template <typename OtherDerived>
391 
392  template <typename OtherDerived>
395 #endif
396 
398  template <typename OtherDerived>
400  const MatrixBase<OtherDerived>& rhs) const {
401  return Product<TriangularViewType, OtherDerived>(derived(), rhs.derived());
402  }
403 
405  template <typename OtherDerived>
407  const MatrixBase<OtherDerived>& lhs, const TriangularViewImpl& rhs) {
408  return Product<OtherDerived, TriangularViewType>(lhs.derived(), rhs.derived());
409  }
410 
434  template <int Side, typename Other>
436  const MatrixBase<Other>& other) const;
437 
447  template <int Side, typename OtherDerived>
449 
450  template <typename OtherDerived>
452  return solveInPlace<OnTheLeft>(other);
453  }
454 
456  template <typename OtherDerived>
458 #ifdef EIGEN_PARSED_BY_DOXYGEN
459  void
461 #else
462  void
464 #endif
465  {
466  EIGEN_STATIC_ASSERT_LVALUE(OtherDerived);
468  }
469 
471  template <typename OtherDerived>
474  EIGEN_STATIC_ASSERT_LVALUE(OtherDerived);
475  call_assignment(derived(), other.const_cast_derived(), internal::swap_assign_op<Scalar>());
476  }
477 
478  template <typename RhsType, typename DstType>
479  EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void _solve_impl(const RhsType& rhs, DstType& dst) const {
480  if (!internal::is_same_dense(dst, rhs)) dst = rhs;
481  this->solveInPlace(dst);
482  }
483 
484  template <typename ProductType>
486  bool beta);
487 
488  protected:
491 };
492 
493 /***************************************************************************
494  * Implementation of triangular evaluation/assignment
495  ***************************************************************************/
496 
497 #ifndef EIGEN_PARSED_BY_DOXYGEN
498 // FIXME should we keep that possibility
499 template <typename MatrixType, unsigned int Mode>
500 template <typename OtherDerived>
502  const MatrixBase<OtherDerived>& other) {
503  internal::call_assignment_no_alias(derived(), other.derived(),
505  return derived();
506 }
507 
508 // FIXME should we keep that possibility
509 template <typename MatrixType, unsigned int Mode>
510 template <typename OtherDerived>
511 EIGEN_DEVICE_FUNC void TriangularViewImpl<MatrixType, Mode, Dense>::lazyAssign(const MatrixBase<OtherDerived>& other) {
512  internal::call_assignment_no_alias(derived(), other.template triangularView<Mode>());
513 }
514 
515 template <typename MatrixType, unsigned int Mode>
516 template <typename OtherDerived>
517 EIGEN_DEVICE_FUNC inline TriangularView<MatrixType, Mode>& TriangularViewImpl<MatrixType, Mode, Dense>::operator=(
518  const TriangularBase<OtherDerived>& other) {
519  eigen_assert(Mode == int(OtherDerived::Mode));
520  internal::call_assignment(derived(), other.derived());
521  return derived();
522 }
523 
524 template <typename MatrixType, unsigned int Mode>
525 template <typename OtherDerived>
526 EIGEN_DEVICE_FUNC void TriangularViewImpl<MatrixType, Mode, Dense>::lazyAssign(
527  const TriangularBase<OtherDerived>& other) {
528  eigen_assert(Mode == int(OtherDerived::Mode));
529  internal::call_assignment_no_alias(derived(), other.derived());
530 }
531 #endif
532 
533 /***************************************************************************
534  * Implementation of TriangularBase methods
535  ***************************************************************************/
536 
539 template <typename Derived>
540 template <typename DenseDerived>
542  evalToLazy(other.derived());
543 }
544 
545 /***************************************************************************
546  * Implementation of TriangularView methods
547  ***************************************************************************/
548 
549 /***************************************************************************
550  * Implementation of MatrixBase methods
551  ***************************************************************************/
552 
564 template <typename Derived>
565 template <unsigned int Mode>
568  return typename TriangularViewReturnType<Mode>::Type(derived());
569 }
570 
572 template <typename Derived>
573 template <unsigned int Mode>
576  return typename ConstTriangularViewReturnType<Mode>::Type(derived());
577 }
578 
584 template <typename Derived>
586  RealScalar maxAbsOnUpperPart = static_cast<RealScalar>(-1);
587  for (Index j = 0; j < cols(); ++j) {
588  Index maxi = numext::mini(j, rows() - 1);
589  for (Index i = 0; i <= maxi; ++i) {
590  RealScalar absValue = numext::abs(coeff(i, j));
591  if (absValue > maxAbsOnUpperPart) maxAbsOnUpperPart = absValue;
592  }
593  }
594  RealScalar threshold = maxAbsOnUpperPart * prec;
595  for (Index j = 0; j < cols(); ++j)
596  for (Index i = j + 1; i < rows(); ++i)
597  if (numext::abs(coeff(i, j)) > threshold) return false;
598  return true;
599 }
600 
606 template <typename Derived>
608  RealScalar maxAbsOnLowerPart = static_cast<RealScalar>(-1);
609  for (Index j = 0; j < cols(); ++j)
610  for (Index i = j; i < rows(); ++i) {
611  RealScalar absValue = numext::abs(coeff(i, j));
612  if (absValue > maxAbsOnLowerPart) maxAbsOnLowerPart = absValue;
613  }
614  RealScalar threshold = maxAbsOnLowerPart * prec;
615  for (Index j = 1; j < cols(); ++j) {
616  Index maxi = numext::mini(j, rows() - 1);
617  for (Index i = 0; i < maxi; ++i)
618  if (numext::abs(coeff(i, j)) > threshold) return false;
619  }
620  return true;
621 }
622 
623 /***************************************************************************
624 ****************************************************************************
625 * Evaluators and Assignment of triangular expressions
626 ***************************************************************************
627 ***************************************************************************/
628 
629 namespace internal {
630 
631 // TODO currently a triangular expression has the form TriangularView<.,.>
632 // in the future triangular-ness should be defined by the expression traits
633 // such that Transpose<TriangularView<.,.> > is valid. (currently TriangularBase::transpose() is overloaded to make
634 // it work)
635 template <typename MatrixType, unsigned int Mode>
639 };
640 
641 template <typename MatrixType, unsigned int Mode>
642 struct unary_evaluator<TriangularView<MatrixType, Mode>, IndexBased> : evaluator<internal::remove_all_t<MatrixType>> {
645  EIGEN_DEVICE_FUNC unary_evaluator(const XprType& xpr) : Base(xpr.nestedExpression()) {}
646 };
647 
648 // Additional assignment kinds:
652 
653 template <typename Kernel, unsigned int Mode, int UnrollCount, bool ClearOpposite>
655 
661 template <int UpLo, int Mode, int SetOpposite, typename DstEvaluatorTypeT, typename SrcEvaluatorTypeT, typename Functor,
662  int Version = Specialized>
664  : public generic_dense_assignment_kernel<DstEvaluatorTypeT, SrcEvaluatorTypeT, Functor, Version> {
665  protected:
667  typedef typename Base::DstXprType DstXprType;
668  typedef typename Base::SrcXprType SrcXprType;
669  using Base::m_dst;
670  using Base::m_functor;
671  using Base::m_src;
672 
673  public:
676  typedef typename Base::Scalar Scalar;
678 
680  const Functor& func, DstXprType& dstExpr)
681  : Base(dst, src, func, dstExpr) {}
682 
683 #ifdef EIGEN_INTERNAL_DEBUGGING
687  }
688 #else
689  using Base::assignCoeff;
690 #endif
691 
693  if (Mode == UnitDiag && SetOpposite)
694  m_functor.assignCoeff(m_dst.coeffRef(id, id), Scalar(1));
695  else if (Mode == ZeroDiag && SetOpposite)
696  m_functor.assignCoeff(m_dst.coeffRef(id, id), Scalar(0));
697  else if (Mode == 0)
698  Base::assignCoeff(id, id);
699  }
700 
703  if (SetOpposite) m_functor.assignCoeff(m_dst.coeffRef(row, col), Scalar(0));
704  }
705 };
706 
707 template <int Mode, bool SetOpposite, typename DstXprType, typename SrcXprType, typename Functor>
708 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void call_triangular_assignment_loop(DstXprType& dst, const SrcXprType& src,
709  const Functor& func) {
710  typedef evaluator<DstXprType> DstEvaluatorType;
711  typedef evaluator<SrcXprType> SrcEvaluatorType;
712 
713  SrcEvaluatorType srcEvaluator(src);
714 
715  Index dstRows = src.rows();
716  Index dstCols = src.cols();
717  if ((dst.rows() != dstRows) || (dst.cols() != dstCols)) dst.resize(dstRows, dstCols);
718  DstEvaluatorType dstEvaluator(dst);
719 
721  SetOpposite, DstEvaluatorType, SrcEvaluatorType, Functor>
722  Kernel;
723  Kernel kernel(dstEvaluator, srcEvaluator, func, dst.const_cast_derived());
724 
725  enum {
726  unroll = DstXprType::SizeAtCompileTime != Dynamic && SrcEvaluatorType::CoeffReadCost < HugeCost &&
727  DstXprType::SizeAtCompileTime *
728  (int(DstEvaluatorType::CoeffReadCost) + int(SrcEvaluatorType::CoeffReadCost)) / 2 <=
730  };
731 
732  triangular_assignment_loop<Kernel, Mode, unroll ? int(DstXprType::SizeAtCompileTime) : Dynamic, SetOpposite>::run(
733  kernel);
734 }
735 
736 template <int Mode, bool SetOpposite, typename DstXprType, typename SrcXprType>
737 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void call_triangular_assignment_loop(DstXprType& dst, const SrcXprType& src) {
738  call_triangular_assignment_loop<Mode, SetOpposite>(
740 }
741 
742 template <>
745 };
746 template <>
749 };
750 template <>
753 };
754 
755 template <typename DstXprType, typename SrcXprType, typename Functor>
756 struct Assignment<DstXprType, SrcXprType, Functor, Triangular2Triangular> {
757  EIGEN_DEVICE_FUNC static void run(DstXprType& dst, const SrcXprType& src, const Functor& func) {
758  eigen_assert(int(DstXprType::Mode) == int(SrcXprType::Mode));
759 
760  call_triangular_assignment_loop<DstXprType::Mode, false>(dst, src, func);
761  }
762 };
763 
764 template <typename DstXprType, typename SrcXprType, typename Functor>
765 struct Assignment<DstXprType, SrcXprType, Functor, Triangular2Dense> {
766  EIGEN_DEVICE_FUNC static void run(DstXprType& dst, const SrcXprType& src, const Functor& func) {
767  call_triangular_assignment_loop<SrcXprType::Mode, (int(SrcXprType::Mode) & int(SelfAdjoint)) == 0>(dst, src, func);
768  }
769 };
770 
771 template <typename DstXprType, typename SrcXprType, typename Functor>
772 struct Assignment<DstXprType, SrcXprType, Functor, Dense2Triangular> {
773  EIGEN_DEVICE_FUNC static void run(DstXprType& dst, const SrcXprType& src, const Functor& func) {
774  call_triangular_assignment_loop<DstXprType::Mode, false>(dst, src, func);
775  }
776 };
777 
778 template <typename Kernel, unsigned int Mode, int UnrollCount, bool SetOpposite>
780  // FIXME: this is not very clean, perhaps this information should be provided by the kernel?
781  typedef typename Kernel::DstEvaluatorType DstEvaluatorType;
783 
784  enum {
785  col = (UnrollCount - 1) / DstXprType::RowsAtCompileTime,
786  row = (UnrollCount - 1) % DstXprType::RowsAtCompileTime
787  };
788 
789  typedef typename Kernel::Scalar Scalar;
790 
791  EIGEN_DEVICE_FUNC static inline void run(Kernel& kernel) {
793 
794  if (row == col)
795  kernel.assignDiagonalCoeff(row);
796  else if (((Mode & Lower) && row > col) || ((Mode & Upper) && row < col))
797  kernel.assignCoeff(row, col);
798  else if (SetOpposite)
799  kernel.assignOppositeCoeff(row, col);
800  }
801 };
802 
803 // prevent buggy user code from causing an infinite recursion
804 template <typename Kernel, unsigned int Mode, bool SetOpposite>
805 struct triangular_assignment_loop<Kernel, Mode, 0, SetOpposite> {
806  EIGEN_DEVICE_FUNC static inline void run(Kernel&) {}
807 };
808 
809 // TODO: experiment with a recursive assignment procedure splitting the current
810 // triangular part into one rectangular and two triangular parts.
811 
812 template <typename Kernel, unsigned int Mode, bool SetOpposite>
813 struct triangular_assignment_loop<Kernel, Mode, Dynamic, SetOpposite> {
814  typedef typename Kernel::Scalar Scalar;
815  EIGEN_DEVICE_FUNC static inline void run(Kernel& kernel) {
816  for (Index j = 0; j < kernel.cols(); ++j) {
817  Index maxi = numext::mini(j, kernel.rows());
818  Index i = 0;
819  if (((Mode & Lower) && SetOpposite) || (Mode & Upper)) {
820  for (; i < maxi; ++i)
821  if (Mode & Upper)
822  kernel.assignCoeff(i, j);
823  else
824  kernel.assignOppositeCoeff(i, j);
825  } else
826  i = maxi;
827 
828  if (i < kernel.rows()) // then i==j
829  kernel.assignDiagonalCoeff(i++);
830 
831  if (((Mode & Upper) && SetOpposite) || (Mode & Lower)) {
832  for (; i < kernel.rows(); ++i)
833  if (Mode & Lower)
834  kernel.assignCoeff(i, j);
835  else
836  kernel.assignOppositeCoeff(i, j);
837  }
838  }
839  }
840 };
841 
842 } // end namespace internal
843 
846 template <typename Derived>
847 template <typename DenseDerived>
849  other.derived().resize(this->rows(), this->cols());
851  (int(Derived::Mode) & int(SelfAdjoint)) == 0 /* SetOpposite */>(
852  other.derived(), derived().nestedExpression());
853 }
854 
855 namespace internal {
856 
857 // Triangular = Product
858 template <typename DstXprType, typename Lhs, typename Rhs, typename Scalar>
859 struct Assignment<DstXprType, Product<Lhs, Rhs, DefaultProduct>,
860  internal::assign_op<Scalar, typename Product<Lhs, Rhs, DefaultProduct>::Scalar>, Dense2Triangular> {
862  static void run(DstXprType& dst, const SrcXprType& src,
864  Index dstRows = src.rows();
865  Index dstCols = src.cols();
866  if ((dst.rows() != dstRows) || (dst.cols() != dstCols)) dst.resize(dstRows, dstCols);
867 
868  dst._assignProduct(src, Scalar(1), false);
869  }
870 };
871 
872 // Triangular += Product
873 template <typename DstXprType, typename Lhs, typename Rhs, typename Scalar>
874 struct Assignment<DstXprType, Product<Lhs, Rhs, DefaultProduct>,
875  internal::add_assign_op<Scalar, typename Product<Lhs, Rhs, DefaultProduct>::Scalar>,
878  static void run(DstXprType& dst, const SrcXprType& src,
880  dst._assignProduct(src, Scalar(1), true);
881  }
882 };
883 
884 // Triangular -= Product
885 template <typename DstXprType, typename Lhs, typename Rhs, typename Scalar>
886 struct Assignment<DstXprType, Product<Lhs, Rhs, DefaultProduct>,
887  internal::sub_assign_op<Scalar, typename Product<Lhs, Rhs, DefaultProduct>::Scalar>,
890  static void run(DstXprType& dst, const SrcXprType& src,
892  dst._assignProduct(src, Scalar(-1), true);
893  }
894 };
895 
896 } // end namespace internal
897 
898 } // end namespace Eigen
899 
900 #endif // EIGEN_TRIANGULARMATRIX_H
int i
Definition: BiCGSTAB_step_by_step.cpp:9
#define EIGEN_DEFAULT_COPY_CONSTRUCTOR(CLASS)
Macro to explicitly define the default copy constructor. This is necessary, because the implicit defi...
Definition: Macros.h:1119
#define EIGEN_DEPRECATED
Definition: Macros.h:931
#define eigen_internal_assert(x)
Definition: Macros.h:916
#define EIGEN_DEFAULT_EMPTY_CONSTRUCTOR_AND_DESTRUCTOR(Derived)
Macro to manually define default constructors and destructors. This is necessary when the copy constr...
Definition: Macros.h:1137
#define EIGEN_NOEXCEPT
Definition: Macros.h:1267
#define EIGEN_CONSTEXPR
Definition: Macros.h:758
#define EIGEN_UNUSED_VARIABLE(var)
Definition: Macros.h:966
#define EIGEN_DEVICE_FUNC
Definition: Macros.h:892
#define EIGEN_ONLY_USED_FOR_DEBUG(x)
Definition: Macros.h:922
#define eigen_assert(x)
Definition: Macros.h:910
#define EIGEN_INHERIT_ASSIGNMENT_OPERATORS(Derived)
Macro to manually inherit assignment operators. This is necessary, because the implicitly defined ass...
Definition: Macros.h:1126
#define EIGEN_STRONG_INLINE
Definition: Macros.h:834
m col(1)
m row(1)
v setConstant(3, 5)
cout<< "Here is the matrix m:"<< endl<< m<< endl;Matrix< ptrdiff_t, 3, 1 > res
Definition: PartialRedux_count.cpp:3
#define EIGEN_UNROLLING_LIMIT
Definition: Settings.h:23
#define EIGEN_STATIC_ASSERT_LVALUE(Derived)
Definition: StaticAssert.h:87
#define EIGEN_STATIC_ASSERT(X, MSG)
Definition: StaticAssert.h:26
int rows
Definition: Tutorial_commainit_02.cpp:1
int cols
Definition: Tutorial_commainit_02.cpp:1
SCALAR Scalar
Definition: bench_gemm.cpp:45
MatrixXf MatrixType
Definition: benchmark-blocking-sizes.cpp:52
Base class for all dense matrices, vectors, and arrays.
Definition: DenseBase.h:44
EIGEN_DEVICE_FUNC void resize(Index newSize)
Definition: DenseBase.h:228
NumTraits< Scalar >::Real RealScalar
Definition: DenseBase.h:69
Base class for all dense matrices, vectors, and expressions.
Definition: MatrixBase.h:52
bool isLowerTriangular(const RealScalar &prec=NumTraits< Scalar >::dummy_precision()) const
Definition: TriangularMatrix.h:607
EIGEN_DEVICE_FUNC TriangularViewReturnType< Mode >::Type triangularView()
bool isUpperTriangular(const RealScalar &prec=NumTraits< Scalar >::dummy_precision()) const
Definition: TriangularMatrix.h:585
Expression of the product of two arbitrary matrices or vectors.
Definition: Product.h:202
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE EIGEN_CONSTEXPR Index rows() const EIGEN_NOEXCEPT
Definition: Product.h:227
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE EIGEN_CONSTEXPR Index cols() const EIGEN_NOEXCEPT
Definition: Product.h:228
Expression of a selfadjoint matrix from a triangular part of a dense matrix.
Definition: SelfAdjointView.h:51
Pseudo expression representing a solving operation.
Definition: Solve.h:62
Base class for triangular part in a matrix.
Definition: TriangularMatrix.h:32
EIGEN_DEVICE_FUNC const Derived & derived() const
Definition: TriangularMatrix.h:93
internal::traits< Derived >::StorageKind StorageKind
Definition: TriangularMatrix.h:51
EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR Index rows() const EIGEN_NOEXCEPT
Definition: TriangularMatrix.h:61
EIGEN_DEVICE_FUNC Scalar & coeffRef(Index row, Index col)
Definition: TriangularMatrix.h:74
EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR Index innerStride() const EIGEN_NOEXCEPT
Definition: TriangularMatrix.h:64
Derived const & Nested
Definition: TriangularMatrix.h:55
EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR Index outerStride() const EIGEN_NOEXCEPT
Definition: TriangularMatrix.h:63
EIGEN_DEVICE_FUNC Scalar operator()(Index row, Index col) const
Definition: TriangularMatrix.h:83
internal::traits< Derived >::Scalar Scalar
Definition: TriangularMatrix.h:50
internal::traits< Derived >::FullMatrixType DenseMatrixType
Definition: TriangularMatrix.h:53
internal::traits< Derived >::StorageIndex StorageIndex
Definition: TriangularMatrix.h:52
EIGEN_DEVICE_FUNC void evalTo(MatrixBase< DenseDerived > &other) const
Definition: TriangularMatrix.h:541
EIGEN_DEVICE_FUNC DenseMatrixType toDenseMatrix() const
Definition: TriangularMatrix.h:102
EIGEN_DEVICE_FUNC void resize(Index rows, Index cols)
Definition: TriangularMatrix.h:67
@ RowsAtCompileTime
Definition: TriangularMatrix.h:36
@ SizeAtCompileTime
Definition: TriangularMatrix.h:41
@ MaxColsAtCompileTime
Definition: TriangularMatrix.h:39
@ MaxRowsAtCompileTime
Definition: TriangularMatrix.h:38
@ Mode
Definition: TriangularMatrix.h:35
@ MaxSizeAtCompileTime
Definition: TriangularMatrix.h:46
@ ColsAtCompileTime
Definition: TriangularMatrix.h:37
void check_coordinates_internal(Index, Index) const
Definition: TriangularMatrix.h:123
void check_coordinates(Index row, Index col) const
Definition: TriangularMatrix.h:109
EIGEN_DEVICE_FUNC Derived & derived()
Definition: TriangularMatrix.h:94
DenseMatrixType DenseType
Definition: TriangularMatrix.h:54
EIGEN_DEVICE_FUNC void evalToLazy(MatrixBase< DenseDerived > &other) const
Definition: TriangularMatrix.h:848
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void copyCoeff(Index row, Index col, Other &other)
Definition: TriangularMatrix.h:79
EIGEN_DEVICE_FUNC Scalar coeff(Index row, Index col) const
Definition: TriangularMatrix.h:73
EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR Index cols() const EIGEN_NOEXCEPT
Definition: TriangularMatrix.h:62
EIGEN_DEVICE_FUNC TriangularBase()
Definition: TriangularMatrix.h:57
EIGEN_DEVICE_FUNC Scalar & operator()(Index row, Index col)
Definition: TriangularMatrix.h:87
TriangularBase< TriangularViewType > Base
Definition: TriangularMatrix.h:301
EIGEN_DEPRECATED EIGEN_DEVICE_FUNC void lazyAssign(const MatrixBase< OtherDerived > &other)
MatrixType::PlainObject DenseMatrixType
Definition: TriangularMatrix.h:305
EIGEN_DEVICE_FUNC Index innerStride() const
Definition: TriangularMatrix.h:321
EIGEN_DEPRECATED EIGEN_DEVICE_FUNC void lazyAssign(const TriangularBase< OtherDerived > &other)
friend EIGEN_DEVICE_FUNC const Product< OtherDerived, TriangularViewType > operator*(const MatrixBase< OtherDerived > &lhs, const TriangularViewImpl &rhs)
Definition: TriangularMatrix.h:406
EIGEN_DEVICE_FUNC TriangularViewType & setOnes()
Definition: TriangularMatrix.h:356
EIGEN_DEVICE_FUNC TriangularViewType & operator=(const TriangularViewImpl &other)
Definition: TriangularMatrix.h:384
const internal::triangular_solve_retval< Side, TriangularViewType, Other > solve(const MatrixBase< Other > &other) const
internal::traits< TriangularViewType >::Scalar Scalar
Definition: TriangularMatrix.h:302
DenseMatrixType PlainObject
Definition: TriangularMatrix.h:306
EIGEN_DEVICE_FUNC Scalar & coeffRef(Index row, Index col)
Definition: TriangularMatrix.h:369
EIGEN_DEVICE_FUNC TriangularViewType & operator=(const MatrixBase< OtherDerived > &other)
EIGEN_DEPRECATED EIGEN_DEVICE_FUNC void swap(MatrixBase< OtherDerived > const &other)
Definition: TriangularMatrix.h:473
EIGEN_DEVICE_FUNC TriangularViewType & operator+=(const DenseBase< Other > &other)
Definition: TriangularMatrix.h:325
EIGEN_DEVICE_FUNC TriangularViewType & operator-=(const DenseBase< Other > &other)
Definition: TriangularMatrix.h:332
EIGEN_DEVICE_FUNC const Product< TriangularViewType, OtherDerived > operator*(const MatrixBase< OtherDerived > &rhs) const
Definition: TriangularMatrix.h:399
EIGEN_DEVICE_FUNC TriangularViewType & operator=(const TriangularBase< OtherDerived > &other)
EIGEN_DEVICE_FUNC void solveInPlace(const MatrixBase< OtherDerived > &other) const
TriangularView< MatrixType_, Mode_ > TriangularViewType
Definition: TriangularMatrix.h:299
EIGEN_DEVICE_FUNC TriangularViewType & operator/=(const typename internal::traits< MatrixType >::Scalar &other)
Definition: TriangularMatrix.h:343
EIGEN_DEVICE_FUNC Scalar coeff(Index row, Index col) const
Definition: TriangularMatrix.h:361
EIGEN_DEVICE_FUNC void swap(TriangularBase< OtherDerived > const &other)
Definition: TriangularMatrix.h:463
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE TriangularViewType & _assignProduct(const ProductType &prod, const Scalar &alpha, bool beta)
EIGEN_DEVICE_FUNC TriangularViewType & operator*=(const typename internal::traits< MatrixType >::Scalar &other)
Definition: TriangularMatrix.h:339
EIGEN_DEVICE_FUNC TriangularViewType & setConstant(const Scalar &value)
Definition: TriangularMatrix.h:350
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void _solve_impl(const RhsType &rhs, DstType &dst) const
Definition: TriangularMatrix.h:479
EIGEN_DEVICE_FUNC void fill(const Scalar &value)
Definition: TriangularMatrix.h:348
EIGEN_DEVICE_FUNC Index outerStride() const
Definition: TriangularMatrix.h:318
internal::traits< TriangularViewType >::StorageKind StorageKind
Definition: TriangularMatrix.h:312
EIGEN_DEVICE_FUNC TriangularViewType & setZero()
Definition: TriangularMatrix.h:354
EIGEN_DEVICE_FUNC void solveInPlace(const MatrixBase< OtherDerived > &other) const
Definition: TriangularMatrix.h:451
MatrixType_ MatrixType
Definition: TriangularMatrix.h:304
Definition: TriangularMatrix.h:163
Expression of a triangular part in a matrix.
Definition: TriangularMatrix.h:167
TriangularView< std::add_const_t< MatrixType >, Mode_ > ConstTriangularView
Definition: TriangularMatrix.h:178
internal::traits< TriangularView >::MatrixTypeNested MatrixTypeNested
Definition: TriangularMatrix.h:174
TriangularViewImpl< MatrixType_, Mode_, typename internal::traits< MatrixType_ >::StorageKind > Base
Definition: TriangularMatrix.h:169
MatrixType_ MatrixType
Definition: TriangularMatrix.h:171
EIGEN_DEVICE_FUNC SelfAdjointView< MatrixTypeNestedNonRef, Mode > selfadjointView()
Definition: TriangularMatrix.h:261
internal::traits< TriangularView >::StorageKind StorageKind
Definition: TriangularMatrix.h:181
EIGEN_DEVICE_FUNC TransposeReturnType transpose(std::enable_if_t< Eigen::internal::is_lvalue< MatrixType >::value, Dummy * >=nullptr)
Definition: TriangularMatrix.h:229
EIGEN_DEVICE_FUNC Scalar determinant() const
Definition: TriangularMatrix.h:274
EIGEN_DEVICE_FUNC const Solve< TriangularView, Other > solve(const MatrixBase< Other > &other) const
Definition: TriangularMatrix.h:242
MatrixTypeNested m_matrix
Definition: TriangularMatrix.h:284
TriangularView< typename MatrixType::TransposeReturnType, TransposeMode > TransposeReturnType
Definition: TriangularMatrix.h:226
TriangularView< const typename MatrixType::AdjointReturnType, TransposeMode > AdjointReturnType
Definition: TriangularMatrix.h:222
internal::traits< TriangularView >::MatrixTypeNestedNonRef MatrixTypeNestedNonRef
Definition: TriangularMatrix.h:175
EIGEN_DEVICE_FUNC TriangularView(MatrixType &matrix)
Definition: TriangularMatrix.h:192
TriangularView< const MatrixConjugateReturnType, Mode > ConjugateReturnType
Definition: TriangularMatrix.h:207
internal::traits< TriangularView >::MatrixTypeNestedCleaned NestedExpression
Definition: TriangularMatrix.h:182
EIGEN_DEVICE_FUNC const ConjugateReturnType conjugate() const
Definition: TriangularMatrix.h:209
EIGEN_DEVICE_FUNC const NestedExpression & nestedExpression() const
Definition: TriangularMatrix.h:202
EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR Index cols() const EIGEN_NOEXCEPT
Definition: TriangularMatrix.h:199
EIGEN_DEVICE_FUNC std::conditional_t< Cond, ConjugateReturnType, ConstTriangularView > conjugateIf() const
Definition: TriangularMatrix.h:217
TriangularView< const typename MatrixType::ConstTransposeReturnType, TransposeMode > ConstTransposeReturnType
Definition: TriangularMatrix.h:235
@ TransposeMode
Definition: TriangularMatrix.h:187
@ Mode
Definition: TriangularMatrix.h:185
@ IsVectorAtCompileTime
Definition: TriangularMatrix.h:189
EIGEN_DEVICE_FUNC const AdjointReturnType adjoint() const
Definition: TriangularMatrix.h:224
EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR Index rows() const EIGEN_NOEXCEPT
Definition: TriangularMatrix.h:197
EIGEN_DEVICE_FUNC NestedExpression & nestedExpression()
Definition: TriangularMatrix.h:205
internal::traits< TriangularView >::Scalar Scalar
Definition: TriangularMatrix.h:170
internal::remove_all_t< typename MatrixType::ConjugateReturnType > MatrixConjugateReturnType
Definition: TriangularMatrix.h:177
EIGEN_DEVICE_FUNC const ConstTransposeReturnType transpose() const
Definition: TriangularMatrix.h:237
Definition: AssignEvaluator.h:585
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void assignCoeff(Index row, Index col)
Assign src(row,col) to dst(row,col) through the assignment functor.
Definition: AssignEvaluator.h:617
Definition: TriangularMatrix.h:664
Base::SrcEvaluatorType SrcEvaluatorType
Definition: TriangularMatrix.h:675
Base::SrcXprType SrcXprType
Definition: TriangularMatrix.h:668
Base::DstEvaluatorType DstEvaluatorType
Definition: TriangularMatrix.h:674
EIGEN_DEVICE_FUNC void assignOppositeCoeff(Index row, Index col)
Definition: TriangularMatrix.h:701
EIGEN_DEVICE_FUNC void assignDiagonalCoeff(Index id)
Definition: TriangularMatrix.h:692
Base::AssignmentTraits AssignmentTraits
Definition: TriangularMatrix.h:677
EIGEN_DEVICE_FUNC triangular_dense_assignment_kernel(DstEvaluatorType &dst, const SrcEvaluatorType &src, const Functor &func, DstXprType &dstExpr)
Definition: TriangularMatrix.h:679
generic_dense_assignment_kernel< DstEvaluatorTypeT, SrcEvaluatorTypeT, Functor, Version > Base
Definition: TriangularMatrix.h:666
Base::DstXprType DstXprType
Definition: TriangularMatrix.h:667
Base::Scalar Scalar
Definition: TriangularMatrix.h:676
Eigen::Map< Eigen::Matrix< T, Eigen::Dynamic, Eigen::Dynamic, Eigen::ColMajor >, 0, Eigen::OuterStride<> > matrix(T *data, int rows, int cols, int stride)
Definition: common.h:85
@ DefaultProduct
Definition: Constants.h:503
@ StrictlyLower
Definition: Constants.h:223
@ UnitDiag
Definition: Constants.h:215
@ StrictlyUpper
Definition: Constants.h:225
@ UnitLower
Definition: Constants.h:219
@ ZeroDiag
Definition: Constants.h:217
@ SelfAdjoint
Definition: Constants.h:227
@ UnitUpper
Definition: Constants.h:221
@ Lower
Definition: Constants.h:211
@ Upper
Definition: Constants.h:213
@ Specialized
Definition: Constants.h:311
const unsigned int PacketAccessBit
Definition: Constants.h:97
const unsigned int LinearAccessBit
Definition: Constants.h:133
const unsigned int DirectAccessBit
Definition: Constants.h:159
const unsigned int LvalueBit
Definition: Constants.h:148
return int(ret)+1
RealScalar alpha
Definition: level1_cplx_impl.h:151
Scalar beta
Definition: level2_cplx_impl.h:36
Eigen::Matrix< Scalar, Dynamic, Dynamic, ColMajor > tmp
Definition: level3_impl.h:365
@ Lhs
Definition: TensorContractionMapper.h:20
@ Rhs
Definition: TensorContractionMapper.h:20
constexpr int size_at_compile_time(int rows, int cols)
Definition: XprHelper.h:373
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void call_assignment(Dst &dst, const Src &src)
Definition: AssignEvaluator.h:781
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
typename remove_all< T >::type remove_all_t
Definition: Meta.h:142
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void call_triangular_assignment_loop(DstXprType &dst, const SrcXprType &src, const Functor &func)
Definition: TriangularMatrix.h:708
EIGEN_DEVICE_FUNC bool is_same_dense(const T1 &mat1, const T2 &mat2, std::enable_if_t< possibly_same_dense< T1, T2 >::value > *=0)
Definition: XprHelper.h:869
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE T maxi(const T &x, const T &y)
Definition: MathFunctions.h:926
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE std::enable_if_t< NumTraits< T >::IsSigned||NumTraits< T >::IsComplex, typename NumTraits< T >::Real > abs(const T &x)
Definition: MathFunctions.h:1355
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE T mini(const T &x, const T &y)
Definition: MathFunctions.h:920
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 unsigned int HereditaryBits
Definition: Constants.h:198
const int HugeCost
Definition: Constants.h:48
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
Definition: Meta.h:83
const int Dynamic
Definition: Constants.h:25
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE std::enable_if_t< std::is_base_of< DenseBase< std::decay_t< DerivedA > >, std::decay_t< DerivedA > >::value &&std::is_base_of< DenseBase< std::decay_t< DerivedB > >, std::decay_t< DerivedB > >::value, void > swap(DerivedA &&a, DerivedB &&b)
Definition: DenseBase.h:655
const Product< Lhs, Rhs > prod(const Lhs &lhs, const Rhs &rhs)
Definition: evaluators.cpp:7
Extend namespace for flags.
Definition: fsi_chan_precond_driver.cc:56
type
Definition: compute_granudrum_aor.py:141
Definition: Eigen_Colamd.h:49
Type
Type of JSON value.
Definition: rapidjson.h:513
CwiseBinaryOp< internal::scalar_sum_op< double, double >, const CpyMatrixXd, const CpyMatrixXd > XprType
Definition: nestbyvalue.cpp:15
Update the problem specs before solve
Definition: steady_axisym_advection_diffusion.cc:353
Definition: Constants.h:540
Definition: Constants.h:519
Definition: EigenBase.h:33
Eigen::Index Index
The interface type of indices.
Definition: EigenBase.h:43
EIGEN_DEVICE_FUNC Derived & const_cast_derived() const
Definition: EigenBase.h:53
Definition: Constants.h:558
Triangular2Dense Kind
Definition: TriangularMatrix.h:748
Dense2Triangular Kind
Definition: TriangularMatrix.h:752
Triangular2Triangular Kind
Definition: TriangularMatrix.h:744
Definition: AssignEvaluator.h:760
static void run(DstXprType &dst, const SrcXprType &src, const internal::assign_op< Scalar, typename SrcXprType::Scalar > &)
Definition: TriangularMatrix.h:862
static void run(DstXprType &dst, const SrcXprType &src, const internal::sub_assign_op< Scalar, typename SrcXprType::Scalar > &)
Definition: TriangularMatrix.h:890
static void run(DstXprType &dst, const SrcXprType &src, const internal::add_assign_op< Scalar, typename SrcXprType::Scalar > &)
Definition: TriangularMatrix.h:878
static EIGEN_DEVICE_FUNC void run(DstXprType &dst, const SrcXprType &src, const Functor &func)
Definition: TriangularMatrix.h:773
static EIGEN_DEVICE_FUNC void run(DstXprType &dst, const SrcXprType &src, const Functor &func)
Definition: TriangularMatrix.h:766
static EIGEN_DEVICE_FUNC void run(DstXprType &dst, const SrcXprType &src, const Functor &func)
Definition: TriangularMatrix.h:757
Definition: AssignEvaluator.h:773
Definition: TriangularMatrix.h:651
Definition: Constants.h:577
Definition: TriangularMatrix.h:650
Definition: TriangularMatrix.h:649
Template functor for scalar/packet assignment with addition.
Definition: AssignmentFunctors.h:52
Template functor for scalar/packet assignment.
Definition: AssignmentFunctors.h:25
Definition: AssignEvaluator.h:31
storage_kind_to_evaluator_kind< typename MatrixType::StorageKind >::Kind Kind
Definition: TriangularMatrix.h:637
glue_shapes< typename evaluator_traits< MatrixType >::Shape, TriangularShape >::type Shape
Definition: TriangularMatrix.h:638
Definition: CoreEvaluators.h:95
Definition: CoreEvaluators.h:104
Definition: XprHelper.h:854
Definition: XprHelper.h:819
Definition: XprHelper.h:506
Template functor for scalar/packet assignment with subtraction.
Definition: AssignmentFunctors.h:73
Template functor for scalar/packet assignment with swapping.
Definition: AssignmentFunctors.h:147
ref_selector< MatrixType >::non_const_type MatrixTypeNested
Definition: TriangularMatrix.h:148
remove_all_t< MatrixTypeNested > MatrixTypeNestedCleaned
Definition: TriangularMatrix.h:150
MatrixType::PlainObject FullMatrixType
Definition: TriangularMatrix.h:151
MatrixType ExpressionType
Definition: TriangularMatrix.h:152
std::remove_reference_t< MatrixTypeNested > MatrixTypeNestedNonRef
Definition: TriangularMatrix.h:149
Definition: ForwardDeclarations.h:21
static EIGEN_DEVICE_FUNC void run(Kernel &)
Definition: TriangularMatrix.h:806
static EIGEN_DEVICE_FUNC void run(Kernel &kernel)
Definition: TriangularMatrix.h:815
Definition: TriangularMatrix.h:779
@ row
Definition: TriangularMatrix.h:786
@ col
Definition: TriangularMatrix.h:785
Kernel::Scalar Scalar
Definition: TriangularMatrix.h:789
DstEvaluatorType::XprType DstXprType
Definition: TriangularMatrix.h:782
Kernel::DstEvaluatorType DstEvaluatorType
Definition: TriangularMatrix.h:781
static EIGEN_DEVICE_FUNC void run(Kernel &kernel)
Definition: TriangularMatrix.h:791
Definition: SolveTriangular.h:213
TriangularView< MatrixType, Mode > XprType
Definition: TriangularMatrix.h:643
evaluator< internal::remove_all_t< MatrixType > > Base
Definition: TriangularMatrix.h:644
EIGEN_DEVICE_FUNC unary_evaluator(const XprType &xpr)
Definition: TriangularMatrix.h:645
Definition: CoreEvaluators.h:82
Definition: NonLinearOptimization.cpp:97
Definition: benchGeometry.cpp:21
std::ptrdiff_t j
Definition: tut_arithmetic_redux_minmax.cpp:2