@smake/eigen 1.0.1 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/eigen/COPYING.APACHE +203 -0
- package/eigen/COPYING.BSD +1 -1
- package/eigen/COPYING.MINPACK +51 -52
- package/eigen/Eigen/Cholesky +0 -1
- package/eigen/Eigen/Core +108 -266
- package/eigen/Eigen/Eigenvalues +0 -1
- package/eigen/Eigen/Geometry +3 -6
- package/eigen/Eigen/Householder +0 -1
- package/eigen/Eigen/Jacobi +0 -1
- package/eigen/Eigen/KLUSupport +41 -0
- package/eigen/Eigen/LU +2 -5
- package/eigen/Eigen/OrderingMethods +0 -3
- package/eigen/Eigen/PaStiXSupport +1 -0
- package/eigen/Eigen/PardisoSupport +0 -0
- package/eigen/Eigen/QR +0 -1
- package/eigen/Eigen/QtAlignedMalloc +0 -1
- package/eigen/Eigen/SVD +0 -1
- package/eigen/Eigen/Sparse +0 -2
- package/eigen/Eigen/SparseCholesky +0 -8
- package/eigen/Eigen/SparseLU +4 -0
- package/eigen/Eigen/src/Cholesky/LDLT.h +42 -27
- package/eigen/Eigen/src/Cholesky/LLT.h +39 -23
- package/eigen/Eigen/src/CholmodSupport/CholmodSupport.h +90 -47
- package/eigen/Eigen/src/Core/ArithmeticSequence.h +413 -0
- package/eigen/Eigen/src/Core/Array.h +99 -11
- package/eigen/Eigen/src/Core/ArrayBase.h +1 -1
- package/eigen/Eigen/src/Core/ArrayWrapper.h +21 -21
- package/eigen/Eigen/src/Core/Assign.h +1 -1
- package/eigen/Eigen/src/Core/AssignEvaluator.h +125 -50
- package/eigen/Eigen/src/Core/Assign_MKL.h +10 -10
- package/eigen/Eigen/src/Core/BandMatrix.h +16 -16
- package/eigen/Eigen/src/Core/Block.h +56 -60
- package/eigen/Eigen/src/Core/BooleanRedux.h +29 -31
- package/eigen/Eigen/src/Core/CommaInitializer.h +7 -3
- package/eigen/Eigen/src/Core/CoreEvaluators.h +325 -272
- package/eigen/Eigen/src/Core/CoreIterators.h +5 -0
- package/eigen/Eigen/src/Core/CwiseBinaryOp.h +21 -22
- package/eigen/Eigen/src/Core/CwiseNullaryOp.h +153 -18
- package/eigen/Eigen/src/Core/CwiseUnaryOp.h +6 -6
- package/eigen/Eigen/src/Core/CwiseUnaryView.h +12 -10
- package/eigen/Eigen/src/Core/DenseBase.h +128 -39
- package/eigen/Eigen/src/Core/DenseCoeffsBase.h +25 -21
- package/eigen/Eigen/src/Core/DenseStorage.h +150 -68
- package/eigen/Eigen/src/Core/Diagonal.h +21 -23
- package/eigen/Eigen/src/Core/DiagonalMatrix.h +50 -2
- package/eigen/Eigen/src/Core/DiagonalProduct.h +1 -1
- package/eigen/Eigen/src/Core/Dot.h +10 -10
- package/eigen/Eigen/src/Core/EigenBase.h +10 -9
- package/eigen/Eigen/src/Core/ForceAlignedAccess.h +8 -4
- package/eigen/Eigen/src/Core/Fuzzy.h +3 -3
- package/eigen/Eigen/src/Core/GeneralProduct.h +20 -10
- package/eigen/Eigen/src/Core/GenericPacketMath.h +597 -147
- package/eigen/Eigen/src/Core/GlobalFunctions.h +40 -33
- package/eigen/Eigen/src/Core/IO.h +40 -7
- package/eigen/Eigen/src/Core/IndexedView.h +237 -0
- package/eigen/Eigen/src/Core/Inverse.h +9 -10
- package/eigen/Eigen/src/Core/Map.h +7 -7
- package/eigen/Eigen/src/Core/MapBase.h +5 -3
- package/eigen/Eigen/src/Core/MathFunctions.h +756 -120
- package/eigen/Eigen/src/Core/MathFunctionsImpl.h +118 -19
- package/eigen/Eigen/src/Core/Matrix.h +131 -25
- package/eigen/Eigen/src/Core/MatrixBase.h +19 -2
- package/eigen/Eigen/src/Core/NestByValue.h +25 -50
- package/eigen/Eigen/src/Core/NoAlias.h +4 -3
- package/eigen/Eigen/src/Core/NumTraits.h +107 -20
- package/eigen/Eigen/src/Core/PartialReduxEvaluator.h +232 -0
- package/eigen/Eigen/src/Core/PermutationMatrix.h +3 -3
- package/eigen/Eigen/src/Core/PlainObjectBase.h +145 -54
- package/eigen/Eigen/src/Core/Product.h +30 -25
- package/eigen/Eigen/src/Core/ProductEvaluators.h +183 -142
- package/eigen/Eigen/src/Core/Random.h +37 -1
- package/eigen/Eigen/src/Core/Redux.h +180 -170
- package/eigen/Eigen/src/Core/Ref.h +118 -21
- package/eigen/Eigen/src/Core/Replicate.h +8 -8
- package/eigen/Eigen/src/Core/Reshaped.h +454 -0
- package/eigen/Eigen/src/Core/ReturnByValue.h +7 -5
- package/eigen/Eigen/src/Core/Reverse.h +18 -12
- package/eigen/Eigen/src/Core/Select.h +8 -6
- package/eigen/Eigen/src/Core/SelfAdjointView.h +33 -20
- package/eigen/Eigen/src/Core/Solve.h +14 -14
- package/eigen/Eigen/src/Core/SolveTriangular.h +13 -13
- package/eigen/Eigen/src/Core/SolverBase.h +41 -3
- package/eigen/Eigen/src/Core/StableNorm.h +100 -70
- package/eigen/Eigen/src/Core/StlIterators.h +463 -0
- package/eigen/Eigen/src/Core/Stride.h +9 -4
- package/eigen/Eigen/src/Core/Swap.h +5 -4
- package/eigen/Eigen/src/Core/Transpose.h +86 -27
- package/eigen/Eigen/src/Core/Transpositions.h +26 -8
- package/eigen/Eigen/src/Core/TriangularMatrix.h +88 -72
- package/eigen/Eigen/src/Core/VectorBlock.h +5 -5
- package/eigen/Eigen/src/Core/VectorwiseOp.h +159 -70
- package/eigen/Eigen/src/Core/Visitor.h +137 -29
- package/eigen/Eigen/src/Core/arch/AVX/Complex.h +50 -129
- package/eigen/Eigen/src/Core/arch/AVX/MathFunctions.h +126 -337
- package/eigen/Eigen/src/Core/arch/AVX/PacketMath.h +1092 -155
- package/eigen/Eigen/src/Core/arch/AVX/TypeCasting.h +65 -1
- package/eigen/Eigen/src/Core/arch/AVX512/Complex.h +422 -0
- package/eigen/Eigen/src/Core/arch/AVX512/MathFunctions.h +186 -213
- package/eigen/Eigen/src/Core/arch/AVX512/PacketMath.h +1250 -252
- package/eigen/Eigen/src/Core/arch/AVX512/TypeCasting.h +89 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/Complex.h +152 -165
- package/eigen/Eigen/src/Core/arch/AltiVec/MathFunctions.h +19 -251
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProduct.h +2937 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h +221 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h +629 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/PacketMath.h +2042 -392
- package/eigen/Eigen/src/Core/arch/CUDA/Complex.h +235 -80
- package/eigen/Eigen/src/Core/arch/Default/BFloat16.h +700 -0
- package/eigen/Eigen/src/Core/arch/Default/ConjHelper.h +102 -14
- package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h +1649 -0
- package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h +110 -0
- package/eigen/Eigen/src/Core/arch/Default/Half.h +942 -0
- package/eigen/Eigen/src/Core/arch/Default/Settings.h +1 -1
- package/eigen/Eigen/src/Core/arch/Default/TypeCasting.h +120 -0
- package/eigen/Eigen/src/Core/arch/{CUDA → GPU}/MathFunctions.h +16 -4
- package/eigen/Eigen/src/Core/arch/GPU/PacketMath.h +1685 -0
- package/eigen/Eigen/src/Core/arch/GPU/TypeCasting.h +80 -0
- package/eigen/Eigen/src/Core/arch/HIP/hcc/math_constants.h +23 -0
- package/eigen/Eigen/src/Core/arch/MSA/Complex.h +648 -0
- package/eigen/Eigen/src/Core/arch/MSA/MathFunctions.h +387 -0
- package/eigen/Eigen/src/Core/arch/MSA/PacketMath.h +1233 -0
- package/eigen/Eigen/src/Core/arch/NEON/Complex.h +313 -219
- package/eigen/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h +183 -0
- package/eigen/Eigen/src/Core/arch/NEON/MathFunctions.h +54 -70
- package/eigen/Eigen/src/Core/arch/NEON/PacketMath.h +4376 -549
- package/eigen/Eigen/src/Core/arch/NEON/TypeCasting.h +1419 -0
- package/eigen/Eigen/src/Core/arch/SSE/Complex.h +59 -179
- package/eigen/Eigen/src/Core/arch/SSE/MathFunctions.h +65 -428
- package/eigen/Eigen/src/Core/arch/SSE/PacketMath.h +893 -283
- package/eigen/Eigen/src/Core/arch/SSE/TypeCasting.h +65 -0
- package/eigen/Eigen/src/Core/arch/SVE/MathFunctions.h +44 -0
- package/eigen/Eigen/src/Core/arch/SVE/PacketMath.h +752 -0
- package/eigen/Eigen/src/Core/arch/SVE/TypeCasting.h +49 -0
- package/eigen/Eigen/src/Core/arch/SYCL/InteropHeaders.h +232 -0
- package/eigen/Eigen/src/Core/arch/SYCL/MathFunctions.h +301 -0
- package/eigen/Eigen/src/Core/arch/SYCL/PacketMath.h +670 -0
- package/eigen/Eigen/src/Core/arch/SYCL/SyclMemoryModel.h +694 -0
- package/eigen/Eigen/src/Core/arch/SYCL/TypeCasting.h +85 -0
- package/eigen/Eigen/src/Core/arch/ZVector/Complex.h +212 -183
- package/eigen/Eigen/src/Core/arch/ZVector/MathFunctions.h +101 -5
- package/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h +510 -395
- package/eigen/Eigen/src/Core/functors/AssignmentFunctors.h +11 -2
- package/eigen/Eigen/src/Core/functors/BinaryFunctors.h +112 -46
- package/eigen/Eigen/src/Core/functors/NullaryFunctors.h +31 -30
- package/eigen/Eigen/src/Core/functors/StlFunctors.h +32 -2
- package/eigen/Eigen/src/Core/functors/UnaryFunctors.h +354 -15
- package/eigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h +1073 -585
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix.h +29 -7
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +4 -4
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h +1 -1
- package/eigen/Eigen/src/Core/products/GeneralMatrixVector.h +382 -483
- package/eigen/Eigen/src/Core/products/Parallelizer.h +23 -9
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +23 -6
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector.h +8 -6
- package/eigen/Eigen/src/Core/products/SelfadjointProduct.h +2 -2
- package/eigen/Eigen/src/Core/products/SelfadjointRank2Update.h +5 -4
- package/eigen/Eigen/src/Core/products/TriangularMatrixMatrix.h +3 -3
- package/eigen/Eigen/src/Core/products/TriangularSolverMatrix.h +5 -3
- package/eigen/Eigen/src/Core/products/TriangularSolverVector.h +13 -10
- package/eigen/Eigen/src/Core/util/BlasUtil.h +208 -124
- package/eigen/Eigen/src/Core/util/ConfigureVectorization.h +512 -0
- package/eigen/Eigen/src/Core/util/Constants.h +25 -9
- package/eigen/Eigen/src/Core/util/DisableStupidWarnings.h +14 -2
- package/eigen/Eigen/src/Core/util/ForwardDeclarations.h +28 -4
- package/eigen/Eigen/src/Core/util/IndexedViewHelper.h +186 -0
- package/eigen/Eigen/src/Core/util/IntegralConstant.h +272 -0
- package/eigen/Eigen/src/Core/util/MKL_support.h +8 -1
- package/eigen/Eigen/src/Core/util/Macros.h +661 -250
- package/eigen/Eigen/src/Core/util/Memory.h +222 -52
- package/eigen/Eigen/src/Core/util/Meta.h +349 -105
- package/eigen/Eigen/src/Core/util/ReshapedHelper.h +51 -0
- package/eigen/Eigen/src/Core/util/StaticAssert.h +8 -5
- package/eigen/Eigen/src/Core/util/SymbolicIndex.h +293 -0
- package/eigen/Eigen/src/Core/util/XprHelper.h +48 -30
- package/eigen/Eigen/src/Eigenvalues/ComplexEigenSolver.h +1 -1
- package/eigen/Eigen/src/Eigenvalues/ComplexSchur.h +1 -1
- package/eigen/Eigen/src/Eigenvalues/EigenSolver.h +2 -2
- package/eigen/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h +1 -1
- package/eigen/Eigen/src/Eigenvalues/HessenbergDecomposition.h +2 -2
- package/eigen/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h +2 -2
- package/eigen/Eigen/src/Eigenvalues/RealQZ.h +9 -6
- package/eigen/Eigen/src/Eigenvalues/RealSchur.h +10 -5
- package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +75 -42
- package/eigen/Eigen/src/Eigenvalues/Tridiagonalization.h +20 -15
- package/eigen/Eigen/src/Geometry/AlignedBox.h +99 -5
- package/eigen/Eigen/src/Geometry/AngleAxis.h +4 -4
- package/eigen/Eigen/src/Geometry/EulerAngles.h +3 -3
- package/eigen/Eigen/src/Geometry/Homogeneous.h +15 -11
- package/eigen/Eigen/src/Geometry/Hyperplane.h +1 -1
- package/eigen/Eigen/src/Geometry/OrthoMethods.h +3 -2
- package/eigen/Eigen/src/Geometry/ParametrizedLine.h +39 -2
- package/eigen/Eigen/src/Geometry/Quaternion.h +52 -14
- package/eigen/Eigen/src/Geometry/Rotation2D.h +3 -3
- package/eigen/Eigen/src/Geometry/Scaling.h +22 -4
- package/eigen/Eigen/src/Geometry/Transform.h +86 -65
- package/eigen/Eigen/src/Geometry/Translation.h +6 -6
- package/eigen/Eigen/src/Geometry/arch/Geometry_SIMD.h +168 -0
- package/eigen/Eigen/src/Householder/BlockHouseholder.h +9 -2
- package/eigen/Eigen/src/Householder/Householder.h +8 -4
- package/eigen/Eigen/src/Householder/HouseholderSequence.h +123 -48
- package/eigen/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +15 -15
- package/eigen/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +7 -23
- package/eigen/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +5 -22
- package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +41 -47
- package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +51 -60
- package/eigen/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +70 -20
- package/eigen/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h +2 -20
- package/eigen/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h +11 -9
- package/eigen/Eigen/src/Jacobi/Jacobi.h +31 -10
- package/eigen/Eigen/src/KLUSupport/KLUSupport.h +358 -0
- package/eigen/Eigen/src/LU/Determinant.h +35 -19
- package/eigen/Eigen/src/LU/FullPivLU.h +29 -43
- package/eigen/Eigen/src/LU/InverseImpl.h +25 -8
- package/eigen/Eigen/src/LU/PartialPivLU.h +67 -57
- package/eigen/Eigen/src/LU/arch/InverseSize4.h +351 -0
- package/eigen/Eigen/src/OrderingMethods/Amd.h +7 -17
- package/eigen/Eigen/src/OrderingMethods/Eigen_Colamd.h +297 -277
- package/eigen/Eigen/src/OrderingMethods/Ordering.h +6 -10
- package/eigen/Eigen/src/PaStiXSupport/PaStiXSupport.h +1 -1
- package/eigen/Eigen/src/PardisoSupport/PardisoSupport.h +10 -9
- package/eigen/Eigen/src/QR/ColPivHouseholderQR.h +41 -20
- package/eigen/Eigen/src/QR/CompleteOrthogonalDecomposition.h +100 -27
- package/eigen/Eigen/src/QR/FullPivHouseholderQR.h +59 -22
- package/eigen/Eigen/src/QR/HouseholderQR.h +48 -23
- package/eigen/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h +25 -3
- package/eigen/Eigen/src/SVD/BDCSVD.h +137 -48
- package/eigen/Eigen/src/SVD/JacobiSVD.h +22 -14
- package/eigen/Eigen/src/SVD/SVDBase.h +82 -21
- package/eigen/Eigen/src/SVD/UpperBidiagonalization.h +3 -3
- package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky.h +16 -8
- package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +11 -36
- package/eigen/Eigen/src/SparseCore/CompressedStorage.h +16 -0
- package/eigen/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +6 -6
- package/eigen/Eigen/src/SparseCore/SparseAssign.h +81 -27
- package/eigen/Eigen/src/SparseCore/SparseBlock.h +25 -57
- package/eigen/Eigen/src/SparseCore/SparseCompressedBase.h +40 -11
- package/eigen/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +11 -15
- package/eigen/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +2 -2
- package/eigen/Eigen/src/SparseCore/SparseDenseProduct.h +30 -8
- package/eigen/Eigen/src/SparseCore/SparseMatrix.h +124 -10
- package/eigen/Eigen/src/SparseCore/SparseMatrixBase.h +5 -12
- package/eigen/Eigen/src/SparseCore/SparseProduct.h +13 -1
- package/eigen/Eigen/src/SparseCore/SparseRef.h +7 -7
- package/eigen/Eigen/src/SparseCore/SparseSelfAdjointView.h +3 -0
- package/eigen/Eigen/src/SparseCore/SparseUtil.h +8 -0
- package/eigen/Eigen/src/SparseCore/SparseVector.h +1 -1
- package/eigen/Eigen/src/SparseLU/SparseLU.h +160 -10
- package/eigen/Eigen/src/SparseLU/SparseLU_Memory.h +1 -1
- package/eigen/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h +76 -2
- package/eigen/Eigen/src/SparseLU/SparseLU_column_dfs.h +2 -2
- package/eigen/Eigen/src/SparseLU/SparseLU_gemm_kernel.h +1 -1
- package/eigen/Eigen/src/SparseLU/SparseLU_panel_bmod.h +1 -1
- package/eigen/Eigen/src/SparseQR/SparseQR.h +19 -6
- package/eigen/Eigen/src/StlSupport/StdDeque.h +2 -14
- package/eigen/Eigen/src/StlSupport/StdList.h +2 -2
- package/eigen/Eigen/src/StlSupport/StdVector.h +2 -2
- package/eigen/Eigen/src/SuperLUSupport/SuperLUSupport.h +6 -8
- package/eigen/Eigen/src/UmfPackSupport/UmfPackSupport.h +175 -39
- package/eigen/Eigen/src/misc/lapacke.h +5 -4
- package/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.h +27 -1
- package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.h +155 -11
- package/eigen/Eigen/src/plugins/BlockMethods.h +626 -242
- package/eigen/Eigen/src/plugins/CommonCwiseUnaryOps.h +14 -0
- package/eigen/Eigen/src/plugins/IndexedViewMethods.h +262 -0
- package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.h +4 -4
- package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.h +10 -0
- package/eigen/Eigen/src/plugins/ReshapedMethods.h +149 -0
- package/eigen/README.md +2 -0
- package/lib/LibEigen.d.ts +4 -0
- package/lib/LibEigen.js +14 -0
- package/lib/index.d.ts +1 -1
- package/lib/index.js +7 -3
- package/package.json +2 -10
- package/eigen/Eigen/CMakeLists.txt +0 -19
- package/eigen/Eigen/src/Core/arch/CUDA/Half.h +0 -675
- package/eigen/Eigen/src/Core/arch/CUDA/PacketMath.h +0 -333
- package/eigen/Eigen/src/Core/arch/CUDA/PacketMathHalf.h +0 -1124
- package/eigen/Eigen/src/Core/arch/CUDA/TypeCasting.h +0 -212
- package/eigen/Eigen/src/Geometry/arch/Geometry_SSE.h +0 -161
- package/eigen/Eigen/src/LU/arch/Inverse_SSE.h +0 -338
- package/lib/eigen.d.ts +0 -2
- package/lib/eigen.js +0 -15
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// This file is part of Eigen, a lightweight C++ template library
|
|
2
2
|
// for linear algebra.
|
|
3
3
|
//
|
|
4
|
-
// Copyright (C) 2008-
|
|
4
|
+
// Copyright (C) 2008-2019 Gael Guennebaud <gael.guennebaud@inria.fr>
|
|
5
5
|
// Copyright (C) 2006-2008 Benoit Jacob <jacob.benoit.1@gmail.com>
|
|
6
6
|
//
|
|
7
7
|
// This Source Code Form is subject to the terms of the Mozilla
|
|
@@ -65,10 +65,10 @@ class PartialReduxExpr : public internal::dense_xpr_base< PartialReduxExpr<Matri
|
|
|
65
65
|
explicit PartialReduxExpr(const MatrixType& mat, const MemberOp& func = MemberOp())
|
|
66
66
|
: m_matrix(mat), m_functor(func) {}
|
|
67
67
|
|
|
68
|
-
EIGEN_DEVICE_FUNC
|
|
69
|
-
Index rows() const { return (Direction==Vertical ? 1 : m_matrix.rows()); }
|
|
70
|
-
EIGEN_DEVICE_FUNC
|
|
71
|
-
Index cols() const { return (Direction==Horizontal ? 1 : m_matrix.cols()); }
|
|
68
|
+
EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
|
|
69
|
+
Index rows() const EIGEN_NOEXCEPT { return (Direction==Vertical ? 1 : m_matrix.rows()); }
|
|
70
|
+
EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
|
|
71
|
+
Index cols() const EIGEN_NOEXCEPT { return (Direction==Horizontal ? 1 : m_matrix.cols()); }
|
|
72
72
|
|
|
73
73
|
EIGEN_DEVICE_FUNC
|
|
74
74
|
typename MatrixType::Nested nestedExpression() const { return m_matrix; }
|
|
@@ -81,39 +81,46 @@ class PartialReduxExpr : public internal::dense_xpr_base< PartialReduxExpr<Matri
|
|
|
81
81
|
const MemberOp m_functor;
|
|
82
82
|
};
|
|
83
83
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
84
|
+
template<typename A,typename B> struct partial_redux_dummy_func;
|
|
85
|
+
|
|
86
|
+
#define EIGEN_MAKE_PARTIAL_REDUX_FUNCTOR(MEMBER,COST,VECTORIZABLE,BINARYOP) \
|
|
87
|
+
template <typename ResultType,typename Scalar> \
|
|
88
|
+
struct member_##MEMBER { \
|
|
89
|
+
EIGEN_EMPTY_STRUCT_CTOR(member_##MEMBER) \
|
|
90
|
+
typedef ResultType result_type; \
|
|
91
|
+
typedef BINARYOP<Scalar,Scalar> BinaryOp; \
|
|
92
|
+
template<int Size> struct Cost { enum { value = COST }; }; \
|
|
93
|
+
enum { Vectorizable = VECTORIZABLE }; \
|
|
94
|
+
template<typename XprType> \
|
|
95
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE \
|
|
96
|
+
ResultType operator()(const XprType& mat) const \
|
|
97
|
+
{ return mat.MEMBER(); } \
|
|
98
|
+
BinaryOp binaryFunc() const { return BinaryOp(); } \
|
|
95
99
|
}
|
|
96
100
|
|
|
101
|
+
#define EIGEN_MEMBER_FUNCTOR(MEMBER,COST) \
|
|
102
|
+
EIGEN_MAKE_PARTIAL_REDUX_FUNCTOR(MEMBER,COST,0,partial_redux_dummy_func)
|
|
103
|
+
|
|
97
104
|
namespace internal {
|
|
98
105
|
|
|
99
|
-
EIGEN_MEMBER_FUNCTOR(squaredNorm, Size * NumTraits<Scalar>::MulCost + (Size-1)*NumTraits<Scalar>::AddCost);
|
|
100
106
|
EIGEN_MEMBER_FUNCTOR(norm, (Size+5) * NumTraits<Scalar>::MulCost + (Size-1)*NumTraits<Scalar>::AddCost);
|
|
101
107
|
EIGEN_MEMBER_FUNCTOR(stableNorm, (Size+5) * NumTraits<Scalar>::MulCost + (Size-1)*NumTraits<Scalar>::AddCost);
|
|
102
108
|
EIGEN_MEMBER_FUNCTOR(blueNorm, (Size+5) * NumTraits<Scalar>::MulCost + (Size-1)*NumTraits<Scalar>::AddCost);
|
|
103
109
|
EIGEN_MEMBER_FUNCTOR(hypotNorm, (Size-1) * functor_traits<scalar_hypot_op<Scalar> >::Cost );
|
|
104
|
-
EIGEN_MEMBER_FUNCTOR(sum, (Size-1)*NumTraits<Scalar>::AddCost);
|
|
105
|
-
EIGEN_MEMBER_FUNCTOR(mean, (Size-1)*NumTraits<Scalar>::AddCost + NumTraits<Scalar>::MulCost);
|
|
106
|
-
EIGEN_MEMBER_FUNCTOR(minCoeff, (Size-1)*NumTraits<Scalar>::AddCost);
|
|
107
|
-
EIGEN_MEMBER_FUNCTOR(maxCoeff, (Size-1)*NumTraits<Scalar>::AddCost);
|
|
108
110
|
EIGEN_MEMBER_FUNCTOR(all, (Size-1)*NumTraits<Scalar>::AddCost);
|
|
109
111
|
EIGEN_MEMBER_FUNCTOR(any, (Size-1)*NumTraits<Scalar>::AddCost);
|
|
110
112
|
EIGEN_MEMBER_FUNCTOR(count, (Size-1)*NumTraits<Scalar>::AddCost);
|
|
111
|
-
EIGEN_MEMBER_FUNCTOR(prod, (Size-1)*NumTraits<Scalar>::MulCost);
|
|
112
113
|
|
|
113
|
-
|
|
114
|
+
EIGEN_MAKE_PARTIAL_REDUX_FUNCTOR(sum, (Size-1)*NumTraits<Scalar>::AddCost, 1, internal::scalar_sum_op);
|
|
115
|
+
EIGEN_MAKE_PARTIAL_REDUX_FUNCTOR(minCoeff, (Size-1)*NumTraits<Scalar>::AddCost, 1, internal::scalar_min_op);
|
|
116
|
+
EIGEN_MAKE_PARTIAL_REDUX_FUNCTOR(maxCoeff, (Size-1)*NumTraits<Scalar>::AddCost, 1, internal::scalar_max_op);
|
|
117
|
+
EIGEN_MAKE_PARTIAL_REDUX_FUNCTOR(prod, (Size-1)*NumTraits<Scalar>::MulCost, 1, internal::scalar_product_op);
|
|
118
|
+
|
|
119
|
+
template <int p, typename ResultType,typename Scalar>
|
|
114
120
|
struct member_lpnorm {
|
|
115
121
|
typedef ResultType result_type;
|
|
116
|
-
|
|
122
|
+
enum { Vectorizable = 0 };
|
|
123
|
+
template<int Size> struct Cost
|
|
117
124
|
{ enum { value = (Size+5) * NumTraits<Scalar>::MulCost + (Size-1)*NumTraits<Scalar>::AddCost }; };
|
|
118
125
|
EIGEN_DEVICE_FUNC member_lpnorm() {}
|
|
119
126
|
template<typename XprType>
|
|
@@ -121,17 +128,20 @@ struct member_lpnorm {
|
|
|
121
128
|
{ return mat.template lpNorm<p>(); }
|
|
122
129
|
};
|
|
123
130
|
|
|
124
|
-
template <typename
|
|
131
|
+
template <typename BinaryOpT, typename Scalar>
|
|
125
132
|
struct member_redux {
|
|
133
|
+
typedef BinaryOpT BinaryOp;
|
|
126
134
|
typedef typename result_of<
|
|
127
135
|
BinaryOp(const Scalar&,const Scalar&)
|
|
128
136
|
>::type result_type;
|
|
129
|
-
|
|
130
|
-
|
|
137
|
+
|
|
138
|
+
enum { Vectorizable = functor_traits<BinaryOp>::PacketAccess };
|
|
139
|
+
template<int Size> struct Cost { enum { value = (Size-1) * functor_traits<BinaryOp>::Cost }; };
|
|
131
140
|
EIGEN_DEVICE_FUNC explicit member_redux(const BinaryOp func) : m_functor(func) {}
|
|
132
141
|
template<typename Derived>
|
|
133
142
|
EIGEN_DEVICE_FUNC inline result_type operator()(const DenseBase<Derived>& mat) const
|
|
134
143
|
{ return mat.redux(m_functor); }
|
|
144
|
+
const BinaryOp& binaryFunc() const { return m_functor; }
|
|
135
145
|
const BinaryOp m_functor;
|
|
136
146
|
};
|
|
137
147
|
}
|
|
@@ -139,18 +149,38 @@ struct member_redux {
|
|
|
139
149
|
/** \class VectorwiseOp
|
|
140
150
|
* \ingroup Core_Module
|
|
141
151
|
*
|
|
142
|
-
* \brief Pseudo expression providing partial reduction operations
|
|
152
|
+
* \brief Pseudo expression providing broadcasting and partial reduction operations
|
|
143
153
|
*
|
|
144
154
|
* \tparam ExpressionType the type of the object on which to do partial reductions
|
|
145
|
-
* \tparam Direction indicates
|
|
155
|
+
* \tparam Direction indicates whether to operate on columns (#Vertical) or rows (#Horizontal)
|
|
146
156
|
*
|
|
147
|
-
* This class represents a pseudo expression with partial reduction features.
|
|
157
|
+
* This class represents a pseudo expression with broadcasting and partial reduction features.
|
|
148
158
|
* It is the return type of DenseBase::colwise() and DenseBase::rowwise()
|
|
149
|
-
* and most of the time this is the only way it is used.
|
|
159
|
+
* and most of the time this is the only way it is explicitly used.
|
|
160
|
+
*
|
|
161
|
+
* To understand the logic of rowwise/colwise expression, let's consider a generic case `A.colwise().foo()`
|
|
162
|
+
* where `foo` is any method of `VectorwiseOp`. This expression is equivalent to applying `foo()` to each
|
|
163
|
+
* column of `A` and then re-assemble the outputs in a matrix expression:
|
|
164
|
+
* \code [A.col(0).foo(), A.col(1).foo(), ..., A.col(A.cols()-1).foo()] \endcode
|
|
150
165
|
*
|
|
151
166
|
* Example: \include MatrixBase_colwise.cpp
|
|
152
167
|
* Output: \verbinclude MatrixBase_colwise.out
|
|
153
168
|
*
|
|
169
|
+
* The begin() and end() methods are obviously exceptions to the previous rule as they
|
|
170
|
+
* return STL-compatible begin/end iterators to the rows or columns of the nested expression.
|
|
171
|
+
* Typical use cases include for-range-loop and calls to STL algorithms:
|
|
172
|
+
*
|
|
173
|
+
* Example: \include MatrixBase_colwise_iterator_cxx11.cpp
|
|
174
|
+
* Output: \verbinclude MatrixBase_colwise_iterator_cxx11.out
|
|
175
|
+
*
|
|
176
|
+
* For a partial reduction on an empty input, some rules apply.
|
|
177
|
+
* For the sake of clarity, let's consider a vertical reduction:
|
|
178
|
+
* - If the number of columns is zero, then a 1x0 row-major vector expression is returned.
|
|
179
|
+
* - Otherwise, if the number of rows is zero, then
|
|
180
|
+
* - a row vector of zeros is returned for sum-like reductions (sum, squaredNorm, norm, etc.)
|
|
181
|
+
* - a row vector of ones is returned for a product reduction (e.g., <code>MatrixXd(n,0).colwise().prod()</code>)
|
|
182
|
+
* - an assert is triggered for all other reductions (minCoeff,maxCoeff,redux(bin_op))
|
|
183
|
+
*
|
|
154
184
|
* \sa DenseBase::colwise(), DenseBase::rowwise(), class PartialReduxExpr
|
|
155
185
|
*/
|
|
156
186
|
template<typename ExpressionType, int Direction> class VectorwiseOp
|
|
@@ -163,11 +193,11 @@ template<typename ExpressionType, int Direction> class VectorwiseOp
|
|
|
163
193
|
typedef typename internal::ref_selector<ExpressionType>::non_const_type ExpressionTypeNested;
|
|
164
194
|
typedef typename internal::remove_all<ExpressionTypeNested>::type ExpressionTypeNestedCleaned;
|
|
165
195
|
|
|
166
|
-
template<template<typename
|
|
167
|
-
typename
|
|
196
|
+
template<template<typename OutScalar,typename InputScalar> class Functor,
|
|
197
|
+
typename ReturnScalar=Scalar> struct ReturnType
|
|
168
198
|
{
|
|
169
199
|
typedef PartialReduxExpr<ExpressionType,
|
|
170
|
-
Functor<
|
|
200
|
+
Functor<ReturnScalar,Scalar>,
|
|
171
201
|
Direction
|
|
172
202
|
> Type;
|
|
173
203
|
};
|
|
@@ -187,23 +217,6 @@ template<typename ExpressionType, int Direction> class VectorwiseOp
|
|
|
187
217
|
|
|
188
218
|
protected:
|
|
189
219
|
|
|
190
|
-
typedef typename internal::conditional<isVertical,
|
|
191
|
-
typename ExpressionType::ColXpr,
|
|
192
|
-
typename ExpressionType::RowXpr>::type SubVector;
|
|
193
|
-
/** \internal
|
|
194
|
-
* \returns the i-th subvector according to the \c Direction */
|
|
195
|
-
EIGEN_DEVICE_FUNC
|
|
196
|
-
SubVector subVector(Index i)
|
|
197
|
-
{
|
|
198
|
-
return SubVector(m_matrix.derived(),i);
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
/** \internal
|
|
202
|
-
* \returns the number of subvectors in the direction \c Direction */
|
|
203
|
-
EIGEN_DEVICE_FUNC
|
|
204
|
-
Index subVectors() const
|
|
205
|
-
{ return isVertical?m_matrix.cols():m_matrix.rows(); }
|
|
206
|
-
|
|
207
220
|
template<typename OtherDerived> struct ExtendedType {
|
|
208
221
|
typedef Replicate<OtherDerived,
|
|
209
222
|
isVertical ? 1 : ExpressionType::RowsAtCompileTime,
|
|
@@ -258,42 +271,101 @@ template<typename ExpressionType, int Direction> class VectorwiseOp
|
|
|
258
271
|
EIGEN_DEVICE_FUNC
|
|
259
272
|
inline const ExpressionType& _expression() const { return m_matrix; }
|
|
260
273
|
|
|
274
|
+
#ifdef EIGEN_PARSED_BY_DOXYGEN
|
|
275
|
+
/** STL-like <a href="https://en.cppreference.com/w/cpp/named_req/RandomAccessIterator">RandomAccessIterator</a>
|
|
276
|
+
* iterator type over the columns or rows as returned by the begin() and end() methods.
|
|
277
|
+
*/
|
|
278
|
+
random_access_iterator_type iterator;
|
|
279
|
+
/** This is the const version of iterator (aka read-only) */
|
|
280
|
+
random_access_iterator_type const_iterator;
|
|
281
|
+
#else
|
|
282
|
+
typedef internal::subvector_stl_iterator<ExpressionType, DirectionType(Direction)> iterator;
|
|
283
|
+
typedef internal::subvector_stl_iterator<const ExpressionType, DirectionType(Direction)> const_iterator;
|
|
284
|
+
typedef internal::subvector_stl_reverse_iterator<ExpressionType, DirectionType(Direction)> reverse_iterator;
|
|
285
|
+
typedef internal::subvector_stl_reverse_iterator<const ExpressionType, DirectionType(Direction)> const_reverse_iterator;
|
|
286
|
+
#endif
|
|
287
|
+
|
|
288
|
+
/** returns an iterator to the first row (rowwise) or column (colwise) of the nested expression.
|
|
289
|
+
* \sa end(), cbegin()
|
|
290
|
+
*/
|
|
291
|
+
iterator begin() { return iterator (m_matrix, 0); }
|
|
292
|
+
/** const version of begin() */
|
|
293
|
+
const_iterator begin() const { return const_iterator(m_matrix, 0); }
|
|
294
|
+
/** const version of begin() */
|
|
295
|
+
const_iterator cbegin() const { return const_iterator(m_matrix, 0); }
|
|
296
|
+
|
|
297
|
+
/** returns a reverse iterator to the last row (rowwise) or column (colwise) of the nested expression.
|
|
298
|
+
* \sa rend(), crbegin()
|
|
299
|
+
*/
|
|
300
|
+
reverse_iterator rbegin() { return reverse_iterator (m_matrix, m_matrix.template subVectors<DirectionType(Direction)>()-1); }
|
|
301
|
+
/** const version of rbegin() */
|
|
302
|
+
const_reverse_iterator rbegin() const { return const_reverse_iterator (m_matrix, m_matrix.template subVectors<DirectionType(Direction)>()-1); }
|
|
303
|
+
/** const version of rbegin() */
|
|
304
|
+
const_reverse_iterator crbegin() const { return const_reverse_iterator (m_matrix, m_matrix.template subVectors<DirectionType(Direction)>()-1); }
|
|
305
|
+
|
|
306
|
+
/** returns an iterator to the row (resp. column) following the last row (resp. column) of the nested expression
|
|
307
|
+
* \sa begin(), cend()
|
|
308
|
+
*/
|
|
309
|
+
iterator end() { return iterator (m_matrix, m_matrix.template subVectors<DirectionType(Direction)>()); }
|
|
310
|
+
/** const version of end() */
|
|
311
|
+
const_iterator end() const { return const_iterator(m_matrix, m_matrix.template subVectors<DirectionType(Direction)>()); }
|
|
312
|
+
/** const version of end() */
|
|
313
|
+
const_iterator cend() const { return const_iterator(m_matrix, m_matrix.template subVectors<DirectionType(Direction)>()); }
|
|
314
|
+
|
|
315
|
+
/** returns a reverse iterator to the row (resp. column) before the first row (resp. column) of the nested expression
|
|
316
|
+
* \sa begin(), cend()
|
|
317
|
+
*/
|
|
318
|
+
reverse_iterator rend() { return reverse_iterator (m_matrix, -1); }
|
|
319
|
+
/** const version of rend() */
|
|
320
|
+
const_reverse_iterator rend() const { return const_reverse_iterator (m_matrix, -1); }
|
|
321
|
+
/** const version of rend() */
|
|
322
|
+
const_reverse_iterator crend() const { return const_reverse_iterator (m_matrix, -1); }
|
|
323
|
+
|
|
261
324
|
/** \returns a row or column vector expression of \c *this reduxed by \a func
|
|
262
325
|
*
|
|
263
326
|
* The template parameter \a BinaryOp is the type of the functor
|
|
264
327
|
* of the custom redux operator. Note that func must be an associative operator.
|
|
265
328
|
*
|
|
329
|
+
* \warning the size along the reduction direction must be strictly positive,
|
|
330
|
+
* otherwise an assertion is triggered.
|
|
331
|
+
*
|
|
266
332
|
* \sa class VectorwiseOp, DenseBase::colwise(), DenseBase::rowwise()
|
|
267
333
|
*/
|
|
268
334
|
template<typename BinaryOp>
|
|
269
335
|
EIGEN_DEVICE_FUNC
|
|
270
336
|
const typename ReduxReturnType<BinaryOp>::Type
|
|
271
337
|
redux(const BinaryOp& func = BinaryOp()) const
|
|
272
|
-
{
|
|
338
|
+
{
|
|
339
|
+
eigen_assert(redux_length()>0 && "you are using an empty matrix");
|
|
340
|
+
return typename ReduxReturnType<BinaryOp>::Type(_expression(), internal::member_redux<BinaryOp,Scalar>(func));
|
|
341
|
+
}
|
|
273
342
|
|
|
274
343
|
typedef typename ReturnType<internal::member_minCoeff>::Type MinCoeffReturnType;
|
|
275
344
|
typedef typename ReturnType<internal::member_maxCoeff>::Type MaxCoeffReturnType;
|
|
276
|
-
typedef
|
|
277
|
-
typedef
|
|
345
|
+
typedef PartialReduxExpr<const CwiseUnaryOp<internal::scalar_abs2_op<Scalar>, const ExpressionTypeNestedCleaned>,internal::member_sum<RealScalar,RealScalar>,Direction> SquaredNormReturnType;
|
|
346
|
+
typedef CwiseUnaryOp<internal::scalar_sqrt_op<RealScalar>, const SquaredNormReturnType> NormReturnType;
|
|
278
347
|
typedef typename ReturnType<internal::member_blueNorm,RealScalar>::Type BlueNormReturnType;
|
|
279
348
|
typedef typename ReturnType<internal::member_stableNorm,RealScalar>::Type StableNormReturnType;
|
|
280
349
|
typedef typename ReturnType<internal::member_hypotNorm,RealScalar>::Type HypotNormReturnType;
|
|
281
350
|
typedef typename ReturnType<internal::member_sum>::Type SumReturnType;
|
|
282
|
-
typedef
|
|
351
|
+
typedef EIGEN_EXPR_BINARYOP_SCALAR_RETURN_TYPE(SumReturnType,Scalar,quotient) MeanReturnType;
|
|
283
352
|
typedef typename ReturnType<internal::member_all>::Type AllReturnType;
|
|
284
353
|
typedef typename ReturnType<internal::member_any>::Type AnyReturnType;
|
|
285
|
-
typedef PartialReduxExpr<ExpressionType, internal::member_count<Index>, Direction> CountReturnType;
|
|
354
|
+
typedef PartialReduxExpr<ExpressionType, internal::member_count<Index,Scalar>, Direction> CountReturnType;
|
|
286
355
|
typedef typename ReturnType<internal::member_prod>::Type ProdReturnType;
|
|
287
356
|
typedef Reverse<const ExpressionType, Direction> ConstReverseReturnType;
|
|
288
357
|
typedef Reverse<ExpressionType, Direction> ReverseReturnType;
|
|
289
358
|
|
|
290
359
|
template<int p> struct LpNormReturnType {
|
|
291
|
-
typedef PartialReduxExpr<ExpressionType, internal::member_lpnorm<p,RealScalar>,Direction> Type;
|
|
360
|
+
typedef PartialReduxExpr<ExpressionType, internal::member_lpnorm<p,RealScalar,Scalar>,Direction> Type;
|
|
292
361
|
};
|
|
293
362
|
|
|
294
363
|
/** \returns a row (or column) vector expression of the smallest coefficient
|
|
295
364
|
* of each column (or row) of the referenced expression.
|
|
296
365
|
*
|
|
366
|
+
* \warning the size along the reduction direction must be strictly positive,
|
|
367
|
+
* otherwise an assertion is triggered.
|
|
368
|
+
*
|
|
297
369
|
* \warning the result is undefined if \c *this contains NaN.
|
|
298
370
|
*
|
|
299
371
|
* Example: \include PartialRedux_minCoeff.cpp
|
|
@@ -302,11 +374,17 @@ template<typename ExpressionType, int Direction> class VectorwiseOp
|
|
|
302
374
|
* \sa DenseBase::minCoeff() */
|
|
303
375
|
EIGEN_DEVICE_FUNC
|
|
304
376
|
const MinCoeffReturnType minCoeff() const
|
|
305
|
-
{
|
|
377
|
+
{
|
|
378
|
+
eigen_assert(redux_length()>0 && "you are using an empty matrix");
|
|
379
|
+
return MinCoeffReturnType(_expression());
|
|
380
|
+
}
|
|
306
381
|
|
|
307
382
|
/** \returns a row (or column) vector expression of the largest coefficient
|
|
308
383
|
* of each column (or row) of the referenced expression.
|
|
309
384
|
*
|
|
385
|
+
* \warning the size along the reduction direction must be strictly positive,
|
|
386
|
+
* otherwise an assertion is triggered.
|
|
387
|
+
*
|
|
310
388
|
* \warning the result is undefined if \c *this contains NaN.
|
|
311
389
|
*
|
|
312
390
|
* Example: \include PartialRedux_maxCoeff.cpp
|
|
@@ -315,7 +393,10 @@ template<typename ExpressionType, int Direction> class VectorwiseOp
|
|
|
315
393
|
* \sa DenseBase::maxCoeff() */
|
|
316
394
|
EIGEN_DEVICE_FUNC
|
|
317
395
|
const MaxCoeffReturnType maxCoeff() const
|
|
318
|
-
{
|
|
396
|
+
{
|
|
397
|
+
eigen_assert(redux_length()>0 && "you are using an empty matrix");
|
|
398
|
+
return MaxCoeffReturnType(_expression());
|
|
399
|
+
}
|
|
319
400
|
|
|
320
401
|
/** \returns a row (or column) vector expression of the squared norm
|
|
321
402
|
* of each column (or row) of the referenced expression.
|
|
@@ -327,7 +408,7 @@ template<typename ExpressionType, int Direction> class VectorwiseOp
|
|
|
327
408
|
* \sa DenseBase::squaredNorm() */
|
|
328
409
|
EIGEN_DEVICE_FUNC
|
|
329
410
|
const SquaredNormReturnType squaredNorm() const
|
|
330
|
-
{ return SquaredNormReturnType(
|
|
411
|
+
{ return SquaredNormReturnType(m_matrix.cwiseAbs2()); }
|
|
331
412
|
|
|
332
413
|
/** \returns a row (or column) vector expression of the norm
|
|
333
414
|
* of each column (or row) of the referenced expression.
|
|
@@ -339,7 +420,7 @@ template<typename ExpressionType, int Direction> class VectorwiseOp
|
|
|
339
420
|
* \sa DenseBase::norm() */
|
|
340
421
|
EIGEN_DEVICE_FUNC
|
|
341
422
|
const NormReturnType norm() const
|
|
342
|
-
{ return NormReturnType(
|
|
423
|
+
{ return NormReturnType(squaredNorm()); }
|
|
343
424
|
|
|
344
425
|
/** \returns a row (or column) vector expression of the norm
|
|
345
426
|
* of each column (or row) of the referenced expression.
|
|
@@ -404,7 +485,7 @@ template<typename ExpressionType, int Direction> class VectorwiseOp
|
|
|
404
485
|
* \sa DenseBase::mean() */
|
|
405
486
|
EIGEN_DEVICE_FUNC
|
|
406
487
|
const MeanReturnType mean() const
|
|
407
|
-
{ return
|
|
488
|
+
{ return sum() / Scalar(Direction==Vertical?m_matrix.rows():m_matrix.cols()); }
|
|
408
489
|
|
|
409
490
|
/** \returns a row (or column) vector expression representing
|
|
410
491
|
* whether \b all coefficients of each respective column (or row) are \c true.
|
|
@@ -500,7 +581,7 @@ template<typename ExpressionType, int Direction> class VectorwiseOp
|
|
|
500
581
|
EIGEN_STATIC_ASSERT_VECTOR_ONLY(OtherDerived)
|
|
501
582
|
EIGEN_STATIC_ASSERT_SAME_XPR_KIND(ExpressionType, OtherDerived)
|
|
502
583
|
//eigen_assert((m_matrix.isNull()) == (other.isNull())); FIXME
|
|
503
|
-
return
|
|
584
|
+
return m_matrix = extendedTo(other.derived());
|
|
504
585
|
}
|
|
505
586
|
|
|
506
587
|
/** Adds the vector \a other to each subvector of \c *this */
|
|
@@ -510,7 +591,7 @@ template<typename ExpressionType, int Direction> class VectorwiseOp
|
|
|
510
591
|
{
|
|
511
592
|
EIGEN_STATIC_ASSERT_VECTOR_ONLY(OtherDerived)
|
|
512
593
|
EIGEN_STATIC_ASSERT_SAME_XPR_KIND(ExpressionType, OtherDerived)
|
|
513
|
-
return
|
|
594
|
+
return m_matrix += extendedTo(other.derived());
|
|
514
595
|
}
|
|
515
596
|
|
|
516
597
|
/** Substracts the vector \a other to each subvector of \c *this */
|
|
@@ -520,7 +601,7 @@ template<typename ExpressionType, int Direction> class VectorwiseOp
|
|
|
520
601
|
{
|
|
521
602
|
EIGEN_STATIC_ASSERT_VECTOR_ONLY(OtherDerived)
|
|
522
603
|
EIGEN_STATIC_ASSERT_SAME_XPR_KIND(ExpressionType, OtherDerived)
|
|
523
|
-
return
|
|
604
|
+
return m_matrix -= extendedTo(other.derived());
|
|
524
605
|
}
|
|
525
606
|
|
|
526
607
|
/** Multiples each subvector of \c *this by the vector \a other */
|
|
@@ -532,7 +613,7 @@ template<typename ExpressionType, int Direction> class VectorwiseOp
|
|
|
532
613
|
EIGEN_STATIC_ASSERT_ARRAYXPR(ExpressionType)
|
|
533
614
|
EIGEN_STATIC_ASSERT_SAME_XPR_KIND(ExpressionType, OtherDerived)
|
|
534
615
|
m_matrix *= extendedTo(other.derived());
|
|
535
|
-
return
|
|
616
|
+
return m_matrix;
|
|
536
617
|
}
|
|
537
618
|
|
|
538
619
|
/** Divides each subvector of \c *this by the vector \a other */
|
|
@@ -544,7 +625,7 @@ template<typename ExpressionType, int Direction> class VectorwiseOp
|
|
|
544
625
|
EIGEN_STATIC_ASSERT_ARRAYXPR(ExpressionType)
|
|
545
626
|
EIGEN_STATIC_ASSERT_SAME_XPR_KIND(ExpressionType, OtherDerived)
|
|
546
627
|
m_matrix /= extendedTo(other.derived());
|
|
547
|
-
return
|
|
628
|
+
return m_matrix;
|
|
548
629
|
}
|
|
549
630
|
|
|
550
631
|
/** Returns the expression of the sum of the vector \a other to each subvector of \c *this */
|
|
@@ -609,7 +690,7 @@ template<typename ExpressionType, int Direction> class VectorwiseOp
|
|
|
609
690
|
EIGEN_DEVICE_FUNC
|
|
610
691
|
CwiseBinaryOp<internal::scalar_quotient_op<Scalar>,
|
|
611
692
|
const ExpressionTypeNestedCleaned,
|
|
612
|
-
const typename OppositeExtendedType<
|
|
693
|
+
const typename OppositeExtendedType<NormReturnType>::Type>
|
|
613
694
|
normalized() const { return m_matrix.cwiseQuotient(extendedToOpposite(this->norm())); }
|
|
614
695
|
|
|
615
696
|
|
|
@@ -658,7 +739,15 @@ template<typename ExpressionType, int Direction> class VectorwiseOp
|
|
|
658
739
|
EIGEN_DEVICE_FUNC
|
|
659
740
|
const HNormalizedReturnType hnormalized() const;
|
|
660
741
|
|
|
742
|
+
# ifdef EIGEN_VECTORWISEOP_PLUGIN
|
|
743
|
+
# include EIGEN_VECTORWISEOP_PLUGIN
|
|
744
|
+
# endif
|
|
745
|
+
|
|
661
746
|
protected:
|
|
747
|
+
Index redux_length() const
|
|
748
|
+
{
|
|
749
|
+
return Direction==Vertical ? m_matrix.rows() : m_matrix.cols();
|
|
750
|
+
}
|
|
662
751
|
ExpressionTypeNested m_matrix;
|
|
663
752
|
};
|
|
664
753
|
|
|
@@ -670,7 +759,7 @@ template<typename ExpressionType, int Direction> class VectorwiseOp
|
|
|
670
759
|
* \sa rowwise(), class VectorwiseOp, \ref TutorialReductionsVisitorsBroadcasting
|
|
671
760
|
*/
|
|
672
761
|
template<typename Derived>
|
|
673
|
-
inline typename DenseBase<Derived>::ColwiseReturnType
|
|
762
|
+
EIGEN_DEVICE_FUNC inline typename DenseBase<Derived>::ColwiseReturnType
|
|
674
763
|
DenseBase<Derived>::colwise()
|
|
675
764
|
{
|
|
676
765
|
return ColwiseReturnType(derived());
|
|
@@ -684,7 +773,7 @@ DenseBase<Derived>::colwise()
|
|
|
684
773
|
* \sa colwise(), class VectorwiseOp, \ref TutorialReductionsVisitorsBroadcasting
|
|
685
774
|
*/
|
|
686
775
|
template<typename Derived>
|
|
687
|
-
inline typename DenseBase<Derived>::RowwiseReturnType
|
|
776
|
+
EIGEN_DEVICE_FUNC inline typename DenseBase<Derived>::RowwiseReturnType
|
|
688
777
|
DenseBase<Derived>::rowwise()
|
|
689
778
|
{
|
|
690
779
|
return RowwiseReturnType(derived());
|