@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
|
@@ -0,0 +1,413 @@
|
|
|
1
|
+
// This file is part of Eigen, a lightweight C++ template library
|
|
2
|
+
// for linear algebra.
|
|
3
|
+
//
|
|
4
|
+
// Copyright (C) 2017 Gael Guennebaud <gael.guennebaud@inria.fr>
|
|
5
|
+
//
|
|
6
|
+
// This Source Code Form is subject to the terms of the Mozilla
|
|
7
|
+
// Public License v. 2.0. If a copy of the MPL was not distributed
|
|
8
|
+
// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
9
|
+
|
|
10
|
+
#ifndef EIGEN_ARITHMETIC_SEQUENCE_H
|
|
11
|
+
#define EIGEN_ARITHMETIC_SEQUENCE_H
|
|
12
|
+
|
|
13
|
+
namespace Eigen {
|
|
14
|
+
|
|
15
|
+
namespace internal {
|
|
16
|
+
|
|
17
|
+
#if (!EIGEN_HAS_CXX11) || !((!EIGEN_COMP_GNUC) || EIGEN_COMP_GNUC>=48)
|
|
18
|
+
template<typename T> struct aseq_negate {};
|
|
19
|
+
|
|
20
|
+
template<> struct aseq_negate<Index> {
|
|
21
|
+
typedef Index type;
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
template<int N> struct aseq_negate<FixedInt<N> > {
|
|
25
|
+
typedef FixedInt<-N> type;
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
// Compilation error in the following case:
|
|
29
|
+
template<> struct aseq_negate<FixedInt<DynamicIndex> > {};
|
|
30
|
+
|
|
31
|
+
template<typename FirstType,typename SizeType,typename IncrType,
|
|
32
|
+
bool FirstIsSymbolic=symbolic::is_symbolic<FirstType>::value,
|
|
33
|
+
bool SizeIsSymbolic =symbolic::is_symbolic<SizeType>::value>
|
|
34
|
+
struct aseq_reverse_first_type {
|
|
35
|
+
typedef Index type;
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
template<typename FirstType,typename SizeType,typename IncrType>
|
|
39
|
+
struct aseq_reverse_first_type<FirstType,SizeType,IncrType,true,true> {
|
|
40
|
+
typedef symbolic::AddExpr<FirstType,
|
|
41
|
+
symbolic::ProductExpr<symbolic::AddExpr<SizeType,symbolic::ValueExpr<FixedInt<-1> > >,
|
|
42
|
+
symbolic::ValueExpr<IncrType> >
|
|
43
|
+
> type;
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
template<typename SizeType,typename IncrType,typename EnableIf = void>
|
|
47
|
+
struct aseq_reverse_first_type_aux {
|
|
48
|
+
typedef Index type;
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
template<typename SizeType,typename IncrType>
|
|
52
|
+
struct aseq_reverse_first_type_aux<SizeType,IncrType,typename internal::enable_if<bool((SizeType::value+IncrType::value)|0x1)>::type> {
|
|
53
|
+
typedef FixedInt<(SizeType::value-1)*IncrType::value> type;
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
template<typename FirstType,typename SizeType,typename IncrType>
|
|
57
|
+
struct aseq_reverse_first_type<FirstType,SizeType,IncrType,true,false> {
|
|
58
|
+
typedef typename aseq_reverse_first_type_aux<SizeType,IncrType>::type Aux;
|
|
59
|
+
typedef symbolic::AddExpr<FirstType,symbolic::ValueExpr<Aux> > type;
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
template<typename FirstType,typename SizeType,typename IncrType>
|
|
63
|
+
struct aseq_reverse_first_type<FirstType,SizeType,IncrType,false,true> {
|
|
64
|
+
typedef symbolic::AddExpr<symbolic::ProductExpr<symbolic::AddExpr<SizeType,symbolic::ValueExpr<FixedInt<-1> > >,
|
|
65
|
+
symbolic::ValueExpr<IncrType> >,
|
|
66
|
+
symbolic::ValueExpr<> > type;
|
|
67
|
+
};
|
|
68
|
+
#endif
|
|
69
|
+
|
|
70
|
+
// Helper to cleanup the type of the increment:
|
|
71
|
+
template<typename T> struct cleanup_seq_incr {
|
|
72
|
+
typedef typename cleanup_index_type<T,DynamicIndex>::type type;
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
//--------------------------------------------------------------------------------
|
|
78
|
+
// seq(first,last,incr) and seqN(first,size,incr)
|
|
79
|
+
//--------------------------------------------------------------------------------
|
|
80
|
+
|
|
81
|
+
template<typename FirstType=Index,typename SizeType=Index,typename IncrType=internal::FixedInt<1> >
|
|
82
|
+
class ArithmeticSequence;
|
|
83
|
+
|
|
84
|
+
template<typename FirstType,typename SizeType,typename IncrType>
|
|
85
|
+
ArithmeticSequence<typename internal::cleanup_index_type<FirstType>::type,
|
|
86
|
+
typename internal::cleanup_index_type<SizeType>::type,
|
|
87
|
+
typename internal::cleanup_seq_incr<IncrType>::type >
|
|
88
|
+
seqN(FirstType first, SizeType size, IncrType incr);
|
|
89
|
+
|
|
90
|
+
/** \class ArithmeticSequence
|
|
91
|
+
* \ingroup Core_Module
|
|
92
|
+
*
|
|
93
|
+
* This class represents an arithmetic progression \f$ a_0, a_1, a_2, ..., a_{n-1}\f$ defined by
|
|
94
|
+
* its \em first value \f$ a_0 \f$, its \em size (aka length) \em n, and the \em increment (aka stride)
|
|
95
|
+
* that is equal to \f$ a_{i+1}-a_{i}\f$ for any \em i.
|
|
96
|
+
*
|
|
97
|
+
* It is internally used as the return type of the Eigen::seq and Eigen::seqN functions, and as the input arguments
|
|
98
|
+
* of DenseBase::operator()(const RowIndices&, const ColIndices&), and most of the time this is the
|
|
99
|
+
* only way it is used.
|
|
100
|
+
*
|
|
101
|
+
* \tparam FirstType type of the first element, usually an Index,
|
|
102
|
+
* but internally it can be a symbolic expression
|
|
103
|
+
* \tparam SizeType type representing the size of the sequence, usually an Index
|
|
104
|
+
* or a compile time integral constant. Internally, it can also be a symbolic expression
|
|
105
|
+
* \tparam IncrType type of the increment, can be a runtime Index, or a compile time integral constant (default is compile-time 1)
|
|
106
|
+
*
|
|
107
|
+
* \sa Eigen::seq, Eigen::seqN, DenseBase::operator()(const RowIndices&, const ColIndices&), class IndexedView
|
|
108
|
+
*/
|
|
109
|
+
template<typename FirstType,typename SizeType,typename IncrType>
|
|
110
|
+
class ArithmeticSequence
|
|
111
|
+
{
|
|
112
|
+
public:
|
|
113
|
+
ArithmeticSequence(FirstType first, SizeType size) : m_first(first), m_size(size) {}
|
|
114
|
+
ArithmeticSequence(FirstType first, SizeType size, IncrType incr) : m_first(first), m_size(size), m_incr(incr) {}
|
|
115
|
+
|
|
116
|
+
enum {
|
|
117
|
+
SizeAtCompileTime = internal::get_fixed_value<SizeType>::value,
|
|
118
|
+
IncrAtCompileTime = internal::get_fixed_value<IncrType,DynamicIndex>::value
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
/** \returns the size, i.e., number of elements, of the sequence */
|
|
122
|
+
Index size() const { return m_size; }
|
|
123
|
+
|
|
124
|
+
/** \returns the first element \f$ a_0 \f$ in the sequence */
|
|
125
|
+
Index first() const { return m_first; }
|
|
126
|
+
|
|
127
|
+
/** \returns the value \f$ a_i \f$ at index \a i in the sequence. */
|
|
128
|
+
Index operator[](Index i) const { return m_first + i * m_incr; }
|
|
129
|
+
|
|
130
|
+
const FirstType& firstObject() const { return m_first; }
|
|
131
|
+
const SizeType& sizeObject() const { return m_size; }
|
|
132
|
+
const IncrType& incrObject() const { return m_incr; }
|
|
133
|
+
|
|
134
|
+
protected:
|
|
135
|
+
FirstType m_first;
|
|
136
|
+
SizeType m_size;
|
|
137
|
+
IncrType m_incr;
|
|
138
|
+
|
|
139
|
+
public:
|
|
140
|
+
|
|
141
|
+
#if EIGEN_HAS_CXX11 && ((!EIGEN_COMP_GNUC) || EIGEN_COMP_GNUC>=48)
|
|
142
|
+
auto reverse() const -> decltype(Eigen::seqN(m_first+(m_size+fix<-1>())*m_incr,m_size,-m_incr)) {
|
|
143
|
+
return seqN(m_first+(m_size+fix<-1>())*m_incr,m_size,-m_incr);
|
|
144
|
+
}
|
|
145
|
+
#else
|
|
146
|
+
protected:
|
|
147
|
+
typedef typename internal::aseq_negate<IncrType>::type ReverseIncrType;
|
|
148
|
+
typedef typename internal::aseq_reverse_first_type<FirstType,SizeType,IncrType>::type ReverseFirstType;
|
|
149
|
+
public:
|
|
150
|
+
ArithmeticSequence<ReverseFirstType,SizeType,ReverseIncrType>
|
|
151
|
+
reverse() const {
|
|
152
|
+
return seqN(m_first+(m_size+fix<-1>())*m_incr,m_size,-m_incr);
|
|
153
|
+
}
|
|
154
|
+
#endif
|
|
155
|
+
};
|
|
156
|
+
|
|
157
|
+
/** \returns an ArithmeticSequence starting at \a first, of length \a size, and increment \a incr
|
|
158
|
+
*
|
|
159
|
+
* \sa seqN(FirstType,SizeType), seq(FirstType,LastType,IncrType) */
|
|
160
|
+
template<typename FirstType,typename SizeType,typename IncrType>
|
|
161
|
+
ArithmeticSequence<typename internal::cleanup_index_type<FirstType>::type,typename internal::cleanup_index_type<SizeType>::type,typename internal::cleanup_seq_incr<IncrType>::type >
|
|
162
|
+
seqN(FirstType first, SizeType size, IncrType incr) {
|
|
163
|
+
return ArithmeticSequence<typename internal::cleanup_index_type<FirstType>::type,typename internal::cleanup_index_type<SizeType>::type,typename internal::cleanup_seq_incr<IncrType>::type>(first,size,incr);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/** \returns an ArithmeticSequence starting at \a first, of length \a size, and unit increment
|
|
167
|
+
*
|
|
168
|
+
* \sa seqN(FirstType,SizeType,IncrType), seq(FirstType,LastType) */
|
|
169
|
+
template<typename FirstType,typename SizeType>
|
|
170
|
+
ArithmeticSequence<typename internal::cleanup_index_type<FirstType>::type,typename internal::cleanup_index_type<SizeType>::type >
|
|
171
|
+
seqN(FirstType first, SizeType size) {
|
|
172
|
+
return ArithmeticSequence<typename internal::cleanup_index_type<FirstType>::type,typename internal::cleanup_index_type<SizeType>::type>(first,size);
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
#ifdef EIGEN_PARSED_BY_DOXYGEN
|
|
176
|
+
|
|
177
|
+
/** \returns an ArithmeticSequence starting at \a f, up (or down) to \a l, and with positive (or negative) increment \a incr
|
|
178
|
+
*
|
|
179
|
+
* It is essentially an alias to:
|
|
180
|
+
* \code
|
|
181
|
+
* seqN(f, (l-f+incr)/incr, incr);
|
|
182
|
+
* \endcode
|
|
183
|
+
*
|
|
184
|
+
* \sa seqN(FirstType,SizeType,IncrType), seq(FirstType,LastType)
|
|
185
|
+
*/
|
|
186
|
+
template<typename FirstType,typename LastType, typename IncrType>
|
|
187
|
+
auto seq(FirstType f, LastType l, IncrType incr);
|
|
188
|
+
|
|
189
|
+
/** \returns an ArithmeticSequence starting at \a f, up (or down) to \a l, and unit increment
|
|
190
|
+
*
|
|
191
|
+
* It is essentially an alias to:
|
|
192
|
+
* \code
|
|
193
|
+
* seqN(f,l-f+1);
|
|
194
|
+
* \endcode
|
|
195
|
+
*
|
|
196
|
+
* \sa seqN(FirstType,SizeType), seq(FirstType,LastType,IncrType)
|
|
197
|
+
*/
|
|
198
|
+
template<typename FirstType,typename LastType>
|
|
199
|
+
auto seq(FirstType f, LastType l);
|
|
200
|
+
|
|
201
|
+
#else // EIGEN_PARSED_BY_DOXYGEN
|
|
202
|
+
|
|
203
|
+
#if EIGEN_HAS_CXX11
|
|
204
|
+
template<typename FirstType,typename LastType>
|
|
205
|
+
auto seq(FirstType f, LastType l) -> decltype(seqN(typename internal::cleanup_index_type<FirstType>::type(f),
|
|
206
|
+
( typename internal::cleanup_index_type<LastType>::type(l)
|
|
207
|
+
- typename internal::cleanup_index_type<FirstType>::type(f)+fix<1>())))
|
|
208
|
+
{
|
|
209
|
+
return seqN(typename internal::cleanup_index_type<FirstType>::type(f),
|
|
210
|
+
(typename internal::cleanup_index_type<LastType>::type(l)
|
|
211
|
+
-typename internal::cleanup_index_type<FirstType>::type(f)+fix<1>()));
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
template<typename FirstType,typename LastType, typename IncrType>
|
|
215
|
+
auto seq(FirstType f, LastType l, IncrType incr)
|
|
216
|
+
-> decltype(seqN(typename internal::cleanup_index_type<FirstType>::type(f),
|
|
217
|
+
( typename internal::cleanup_index_type<LastType>::type(l)
|
|
218
|
+
- typename internal::cleanup_index_type<FirstType>::type(f)+typename internal::cleanup_seq_incr<IncrType>::type(incr)
|
|
219
|
+
) / typename internal::cleanup_seq_incr<IncrType>::type(incr),
|
|
220
|
+
typename internal::cleanup_seq_incr<IncrType>::type(incr)))
|
|
221
|
+
{
|
|
222
|
+
typedef typename internal::cleanup_seq_incr<IncrType>::type CleanedIncrType;
|
|
223
|
+
return seqN(typename internal::cleanup_index_type<FirstType>::type(f),
|
|
224
|
+
( typename internal::cleanup_index_type<LastType>::type(l)
|
|
225
|
+
-typename internal::cleanup_index_type<FirstType>::type(f)+CleanedIncrType(incr)) / CleanedIncrType(incr),
|
|
226
|
+
CleanedIncrType(incr));
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
#else // EIGEN_HAS_CXX11
|
|
230
|
+
|
|
231
|
+
template<typename FirstType,typename LastType>
|
|
232
|
+
typename internal::enable_if<!(symbolic::is_symbolic<FirstType>::value || symbolic::is_symbolic<LastType>::value),
|
|
233
|
+
ArithmeticSequence<typename internal::cleanup_index_type<FirstType>::type,Index> >::type
|
|
234
|
+
seq(FirstType f, LastType l)
|
|
235
|
+
{
|
|
236
|
+
return seqN(typename internal::cleanup_index_type<FirstType>::type(f),
|
|
237
|
+
Index((typename internal::cleanup_index_type<LastType>::type(l)-typename internal::cleanup_index_type<FirstType>::type(f)+fix<1>())));
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
template<typename FirstTypeDerived,typename LastType>
|
|
241
|
+
typename internal::enable_if<!symbolic::is_symbolic<LastType>::value,
|
|
242
|
+
ArithmeticSequence<FirstTypeDerived, symbolic::AddExpr<symbolic::AddExpr<symbolic::NegateExpr<FirstTypeDerived>,symbolic::ValueExpr<> >,
|
|
243
|
+
symbolic::ValueExpr<internal::FixedInt<1> > > > >::type
|
|
244
|
+
seq(const symbolic::BaseExpr<FirstTypeDerived> &f, LastType l)
|
|
245
|
+
{
|
|
246
|
+
return seqN(f.derived(),(typename internal::cleanup_index_type<LastType>::type(l)-f.derived()+fix<1>()));
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
template<typename FirstType,typename LastTypeDerived>
|
|
250
|
+
typename internal::enable_if<!symbolic::is_symbolic<FirstType>::value,
|
|
251
|
+
ArithmeticSequence<typename internal::cleanup_index_type<FirstType>::type,
|
|
252
|
+
symbolic::AddExpr<symbolic::AddExpr<LastTypeDerived,symbolic::ValueExpr<> >,
|
|
253
|
+
symbolic::ValueExpr<internal::FixedInt<1> > > > >::type
|
|
254
|
+
seq(FirstType f, const symbolic::BaseExpr<LastTypeDerived> &l)
|
|
255
|
+
{
|
|
256
|
+
return seqN(typename internal::cleanup_index_type<FirstType>::type(f),(l.derived()-typename internal::cleanup_index_type<FirstType>::type(f)+fix<1>()));
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
template<typename FirstTypeDerived,typename LastTypeDerived>
|
|
260
|
+
ArithmeticSequence<FirstTypeDerived,
|
|
261
|
+
symbolic::AddExpr<symbolic::AddExpr<LastTypeDerived,symbolic::NegateExpr<FirstTypeDerived> >,symbolic::ValueExpr<internal::FixedInt<1> > > >
|
|
262
|
+
seq(const symbolic::BaseExpr<FirstTypeDerived> &f, const symbolic::BaseExpr<LastTypeDerived> &l)
|
|
263
|
+
{
|
|
264
|
+
return seqN(f.derived(),(l.derived()-f.derived()+fix<1>()));
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
|
|
268
|
+
template<typename FirstType,typename LastType, typename IncrType>
|
|
269
|
+
typename internal::enable_if<!(symbolic::is_symbolic<FirstType>::value || symbolic::is_symbolic<LastType>::value),
|
|
270
|
+
ArithmeticSequence<typename internal::cleanup_index_type<FirstType>::type,Index,typename internal::cleanup_seq_incr<IncrType>::type> >::type
|
|
271
|
+
seq(FirstType f, LastType l, IncrType incr)
|
|
272
|
+
{
|
|
273
|
+
typedef typename internal::cleanup_seq_incr<IncrType>::type CleanedIncrType;
|
|
274
|
+
return seqN(typename internal::cleanup_index_type<FirstType>::type(f),
|
|
275
|
+
Index((typename internal::cleanup_index_type<LastType>::type(l)-typename internal::cleanup_index_type<FirstType>::type(f)+CleanedIncrType(incr))/CleanedIncrType(incr)), incr);
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
template<typename FirstTypeDerived,typename LastType, typename IncrType>
|
|
279
|
+
typename internal::enable_if<!symbolic::is_symbolic<LastType>::value,
|
|
280
|
+
ArithmeticSequence<FirstTypeDerived,
|
|
281
|
+
symbolic::QuotientExpr<symbolic::AddExpr<symbolic::AddExpr<symbolic::NegateExpr<FirstTypeDerived>,
|
|
282
|
+
symbolic::ValueExpr<> >,
|
|
283
|
+
symbolic::ValueExpr<typename internal::cleanup_seq_incr<IncrType>::type> >,
|
|
284
|
+
symbolic::ValueExpr<typename internal::cleanup_seq_incr<IncrType>::type> >,
|
|
285
|
+
typename internal::cleanup_seq_incr<IncrType>::type> >::type
|
|
286
|
+
seq(const symbolic::BaseExpr<FirstTypeDerived> &f, LastType l, IncrType incr)
|
|
287
|
+
{
|
|
288
|
+
typedef typename internal::cleanup_seq_incr<IncrType>::type CleanedIncrType;
|
|
289
|
+
return seqN(f.derived(),(typename internal::cleanup_index_type<LastType>::type(l)-f.derived()+CleanedIncrType(incr))/CleanedIncrType(incr), incr);
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
template<typename FirstType,typename LastTypeDerived, typename IncrType>
|
|
293
|
+
typename internal::enable_if<!symbolic::is_symbolic<FirstType>::value,
|
|
294
|
+
ArithmeticSequence<typename internal::cleanup_index_type<FirstType>::type,
|
|
295
|
+
symbolic::QuotientExpr<symbolic::AddExpr<symbolic::AddExpr<LastTypeDerived,symbolic::ValueExpr<> >,
|
|
296
|
+
symbolic::ValueExpr<typename internal::cleanup_seq_incr<IncrType>::type> >,
|
|
297
|
+
symbolic::ValueExpr<typename internal::cleanup_seq_incr<IncrType>::type> >,
|
|
298
|
+
typename internal::cleanup_seq_incr<IncrType>::type> >::type
|
|
299
|
+
seq(FirstType f, const symbolic::BaseExpr<LastTypeDerived> &l, IncrType incr)
|
|
300
|
+
{
|
|
301
|
+
typedef typename internal::cleanup_seq_incr<IncrType>::type CleanedIncrType;
|
|
302
|
+
return seqN(typename internal::cleanup_index_type<FirstType>::type(f),
|
|
303
|
+
(l.derived()-typename internal::cleanup_index_type<FirstType>::type(f)+CleanedIncrType(incr))/CleanedIncrType(incr), incr);
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
template<typename FirstTypeDerived,typename LastTypeDerived, typename IncrType>
|
|
307
|
+
ArithmeticSequence<FirstTypeDerived,
|
|
308
|
+
symbolic::QuotientExpr<symbolic::AddExpr<symbolic::AddExpr<LastTypeDerived,
|
|
309
|
+
symbolic::NegateExpr<FirstTypeDerived> >,
|
|
310
|
+
symbolic::ValueExpr<typename internal::cleanup_seq_incr<IncrType>::type> >,
|
|
311
|
+
symbolic::ValueExpr<typename internal::cleanup_seq_incr<IncrType>::type> >,
|
|
312
|
+
typename internal::cleanup_seq_incr<IncrType>::type>
|
|
313
|
+
seq(const symbolic::BaseExpr<FirstTypeDerived> &f, const symbolic::BaseExpr<LastTypeDerived> &l, IncrType incr)
|
|
314
|
+
{
|
|
315
|
+
typedef typename internal::cleanup_seq_incr<IncrType>::type CleanedIncrType;
|
|
316
|
+
return seqN(f.derived(),(l.derived()-f.derived()+CleanedIncrType(incr))/CleanedIncrType(incr), incr);
|
|
317
|
+
}
|
|
318
|
+
#endif // EIGEN_HAS_CXX11
|
|
319
|
+
|
|
320
|
+
#endif // EIGEN_PARSED_BY_DOXYGEN
|
|
321
|
+
|
|
322
|
+
|
|
323
|
+
#if EIGEN_HAS_CXX11 || defined(EIGEN_PARSED_BY_DOXYGEN)
|
|
324
|
+
/** \cpp11
|
|
325
|
+
* \returns a symbolic ArithmeticSequence representing the last \a size elements with increment \a incr.
|
|
326
|
+
*
|
|
327
|
+
* It is a shortcut for: \code seqN(last-(size-fix<1>)*incr, size, incr) \endcode
|
|
328
|
+
*
|
|
329
|
+
* \sa lastN(SizeType), seqN(FirstType,SizeType), seq(FirstType,LastType,IncrType) */
|
|
330
|
+
template<typename SizeType,typename IncrType>
|
|
331
|
+
auto lastN(SizeType size, IncrType incr)
|
|
332
|
+
-> decltype(seqN(Eigen::last-(size-fix<1>())*incr, size, incr))
|
|
333
|
+
{
|
|
334
|
+
return seqN(Eigen::last-(size-fix<1>())*incr, size, incr);
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
/** \cpp11
|
|
338
|
+
* \returns a symbolic ArithmeticSequence representing the last \a size elements with a unit increment.
|
|
339
|
+
*
|
|
340
|
+
* It is a shortcut for: \code seq(last+fix<1>-size, last) \endcode
|
|
341
|
+
*
|
|
342
|
+
* \sa lastN(SizeType,IncrType, seqN(FirstType,SizeType), seq(FirstType,LastType) */
|
|
343
|
+
template<typename SizeType>
|
|
344
|
+
auto lastN(SizeType size)
|
|
345
|
+
-> decltype(seqN(Eigen::last+fix<1>()-size, size))
|
|
346
|
+
{
|
|
347
|
+
return seqN(Eigen::last+fix<1>()-size, size);
|
|
348
|
+
}
|
|
349
|
+
#endif
|
|
350
|
+
|
|
351
|
+
namespace internal {
|
|
352
|
+
|
|
353
|
+
// Convert a symbolic span into a usable one (i.e., remove last/end "keywords")
|
|
354
|
+
template<typename T>
|
|
355
|
+
struct make_size_type {
|
|
356
|
+
typedef typename internal::conditional<symbolic::is_symbolic<T>::value, Index, T>::type type;
|
|
357
|
+
};
|
|
358
|
+
|
|
359
|
+
template<typename FirstType,typename SizeType,typename IncrType,int XprSize>
|
|
360
|
+
struct IndexedViewCompatibleType<ArithmeticSequence<FirstType,SizeType,IncrType>, XprSize> {
|
|
361
|
+
typedef ArithmeticSequence<Index,typename make_size_type<SizeType>::type,IncrType> type;
|
|
362
|
+
};
|
|
363
|
+
|
|
364
|
+
template<typename FirstType,typename SizeType,typename IncrType>
|
|
365
|
+
ArithmeticSequence<Index,typename make_size_type<SizeType>::type,IncrType>
|
|
366
|
+
makeIndexedViewCompatible(const ArithmeticSequence<FirstType,SizeType,IncrType>& ids, Index size,SpecializedType) {
|
|
367
|
+
return ArithmeticSequence<Index,typename make_size_type<SizeType>::type,IncrType>(
|
|
368
|
+
eval_expr_given_size(ids.firstObject(),size),eval_expr_given_size(ids.sizeObject(),size),ids.incrObject());
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
template<typename FirstType,typename SizeType,typename IncrType>
|
|
372
|
+
struct get_compile_time_incr<ArithmeticSequence<FirstType,SizeType,IncrType> > {
|
|
373
|
+
enum { value = get_fixed_value<IncrType,DynamicIndex>::value };
|
|
374
|
+
};
|
|
375
|
+
|
|
376
|
+
} // end namespace internal
|
|
377
|
+
|
|
378
|
+
/** \namespace Eigen::indexing
|
|
379
|
+
* \ingroup Core_Module
|
|
380
|
+
*
|
|
381
|
+
* The sole purpose of this namespace is to be able to import all functions
|
|
382
|
+
* and symbols that are expected to be used within operator() for indexing
|
|
383
|
+
* and slicing. If you already imported the whole Eigen namespace:
|
|
384
|
+
* \code using namespace Eigen; \endcode
|
|
385
|
+
* then you are already all set. Otherwise, if you don't want/cannot import
|
|
386
|
+
* the whole Eigen namespace, the following line:
|
|
387
|
+
* \code using namespace Eigen::indexing; \endcode
|
|
388
|
+
* is equivalent to:
|
|
389
|
+
* \code
|
|
390
|
+
using Eigen::all;
|
|
391
|
+
using Eigen::seq;
|
|
392
|
+
using Eigen::seqN;
|
|
393
|
+
using Eigen::lastN; // c++11 only
|
|
394
|
+
using Eigen::last;
|
|
395
|
+
using Eigen::lastp1;
|
|
396
|
+
using Eigen::fix;
|
|
397
|
+
\endcode
|
|
398
|
+
*/
|
|
399
|
+
namespace indexing {
|
|
400
|
+
using Eigen::all;
|
|
401
|
+
using Eigen::seq;
|
|
402
|
+
using Eigen::seqN;
|
|
403
|
+
#if EIGEN_HAS_CXX11
|
|
404
|
+
using Eigen::lastN;
|
|
405
|
+
#endif
|
|
406
|
+
using Eigen::last;
|
|
407
|
+
using Eigen::lastp1;
|
|
408
|
+
using Eigen::fix;
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
} // end namespace Eigen
|
|
412
|
+
|
|
413
|
+
#endif // EIGEN_ARITHMETIC_SEQUENCE_H
|
|
@@ -117,7 +117,7 @@ class Array
|
|
|
117
117
|
{
|
|
118
118
|
return Base::_set(other);
|
|
119
119
|
}
|
|
120
|
-
|
|
120
|
+
|
|
121
121
|
/** Default constructor.
|
|
122
122
|
*
|
|
123
123
|
* For fixed-size matrices, does nothing.
|
|
@@ -157,11 +157,50 @@ class Array
|
|
|
157
157
|
EIGEN_DEVICE_FUNC
|
|
158
158
|
Array& operator=(Array&& other) EIGEN_NOEXCEPT_IF(std::is_nothrow_move_assignable<Scalar>::value)
|
|
159
159
|
{
|
|
160
|
-
other
|
|
160
|
+
Base::operator=(std::move(other));
|
|
161
161
|
return *this;
|
|
162
162
|
}
|
|
163
163
|
#endif
|
|
164
164
|
|
|
165
|
+
#if EIGEN_HAS_CXX11
|
|
166
|
+
/** \copydoc PlainObjectBase(const Scalar& a0, const Scalar& a1, const Scalar& a2, const Scalar& a3, const ArgTypes&... args)
|
|
167
|
+
*
|
|
168
|
+
* Example: \include Array_variadic_ctor_cxx11.cpp
|
|
169
|
+
* Output: \verbinclude Array_variadic_ctor_cxx11.out
|
|
170
|
+
*
|
|
171
|
+
* \sa Array(const std::initializer_list<std::initializer_list<Scalar>>&)
|
|
172
|
+
* \sa Array(const Scalar&), Array(const Scalar&,const Scalar&)
|
|
173
|
+
*/
|
|
174
|
+
template <typename... ArgTypes>
|
|
175
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
|
176
|
+
Array(const Scalar& a0, const Scalar& a1, const Scalar& a2, const Scalar& a3, const ArgTypes&... args)
|
|
177
|
+
: Base(a0, a1, a2, a3, args...) {}
|
|
178
|
+
|
|
179
|
+
/** \brief Constructs an array and initializes it from the coefficients given as initializer-lists grouped by row. \cpp11
|
|
180
|
+
*
|
|
181
|
+
* In the general case, the constructor takes a list of rows, each row being represented as a list of coefficients:
|
|
182
|
+
*
|
|
183
|
+
* Example: \include Array_initializer_list_23_cxx11.cpp
|
|
184
|
+
* Output: \verbinclude Array_initializer_list_23_cxx11.out
|
|
185
|
+
*
|
|
186
|
+
* Each of the inner initializer lists must contain the exact same number of elements, otherwise an assertion is triggered.
|
|
187
|
+
*
|
|
188
|
+
* In the case of a compile-time column 1D array, implicit transposition from a single row is allowed.
|
|
189
|
+
* Therefore <code> Array<int,Dynamic,1>{{1,2,3,4,5}}</code> is legal and the more verbose syntax
|
|
190
|
+
* <code>Array<int,Dynamic,1>{{1},{2},{3},{4},{5}}</code> can be avoided:
|
|
191
|
+
*
|
|
192
|
+
* Example: \include Array_initializer_list_vector_cxx11.cpp
|
|
193
|
+
* Output: \verbinclude Array_initializer_list_vector_cxx11.out
|
|
194
|
+
*
|
|
195
|
+
* In the case of fixed-sized arrays, the initializer list sizes must exactly match the array sizes,
|
|
196
|
+
* and implicit transposition is allowed for compile-time 1D arrays only.
|
|
197
|
+
*
|
|
198
|
+
* \sa Array(const Scalar& a0, const Scalar& a1, const Scalar& a2, const Scalar& a3, const ArgTypes&... args)
|
|
199
|
+
*/
|
|
200
|
+
EIGEN_DEVICE_FUNC
|
|
201
|
+
EIGEN_STRONG_INLINE Array(const std::initializer_list<std::initializer_list<Scalar>>& list) : Base(list) {}
|
|
202
|
+
#endif // end EIGEN_HAS_CXX11
|
|
203
|
+
|
|
165
204
|
#ifndef EIGEN_PARSED_BY_DOXYGEN
|
|
166
205
|
template<typename T>
|
|
167
206
|
EIGEN_DEVICE_FUNC
|
|
@@ -178,6 +217,7 @@ class Array
|
|
|
178
217
|
Base::_check_template_params();
|
|
179
218
|
this->template _init2<T0,T1>(val0, val1);
|
|
180
219
|
}
|
|
220
|
+
|
|
181
221
|
#else
|
|
182
222
|
/** \brief Constructs a fixed-sized array initialized with coefficients starting at \a data */
|
|
183
223
|
EIGEN_DEVICE_FUNC explicit Array(const Scalar *data);
|
|
@@ -189,7 +229,8 @@ class Array
|
|
|
189
229
|
*/
|
|
190
230
|
EIGEN_DEVICE_FUNC
|
|
191
231
|
EIGEN_STRONG_INLINE explicit Array(Index dim);
|
|
192
|
-
/** constructs an initialized 1x1 Array with the given coefficient
|
|
232
|
+
/** constructs an initialized 1x1 Array with the given coefficient
|
|
233
|
+
* \sa const Scalar& a0, const Scalar& a1, const Scalar& a2, const Scalar& a3, const ArgTypes&... args */
|
|
193
234
|
Array(const Scalar& value);
|
|
194
235
|
/** constructs an uninitialized array with \a rows rows and \a cols columns.
|
|
195
236
|
*
|
|
@@ -197,11 +238,14 @@ class Array
|
|
|
197
238
|
* it is redundant to pass these parameters, so one should use the default constructor
|
|
198
239
|
* Array() instead. */
|
|
199
240
|
Array(Index rows, Index cols);
|
|
200
|
-
/** constructs an initialized 2D vector with given coefficients
|
|
241
|
+
/** constructs an initialized 2D vector with given coefficients
|
|
242
|
+
* \sa Array(const Scalar& a0, const Scalar& a1, const Scalar& a2, const Scalar& a3, const ArgTypes&... args) */
|
|
201
243
|
Array(const Scalar& val0, const Scalar& val1);
|
|
202
|
-
#endif
|
|
244
|
+
#endif // end EIGEN_PARSED_BY_DOXYGEN
|
|
203
245
|
|
|
204
|
-
/** constructs an initialized 3D vector with given coefficients
|
|
246
|
+
/** constructs an initialized 3D vector with given coefficients
|
|
247
|
+
* \sa Array(const Scalar& a0, const Scalar& a1, const Scalar& a2, const Scalar& a3, const ArgTypes&... args)
|
|
248
|
+
*/
|
|
205
249
|
EIGEN_DEVICE_FUNC
|
|
206
250
|
EIGEN_STRONG_INLINE Array(const Scalar& val0, const Scalar& val1, const Scalar& val2)
|
|
207
251
|
{
|
|
@@ -211,7 +255,9 @@ class Array
|
|
|
211
255
|
m_storage.data()[1] = val1;
|
|
212
256
|
m_storage.data()[2] = val2;
|
|
213
257
|
}
|
|
214
|
-
/** constructs an initialized 4D vector with given coefficients
|
|
258
|
+
/** constructs an initialized 4D vector with given coefficients
|
|
259
|
+
* \sa Array(const Scalar& a0, const Scalar& a1, const Scalar& a2, const Scalar& a3, const ArgTypes&... args)
|
|
260
|
+
*/
|
|
215
261
|
EIGEN_DEVICE_FUNC
|
|
216
262
|
EIGEN_STRONG_INLINE Array(const Scalar& val0, const Scalar& val1, const Scalar& val2, const Scalar& val3)
|
|
217
263
|
{
|
|
@@ -242,8 +288,10 @@ class Array
|
|
|
242
288
|
: Base(other.derived())
|
|
243
289
|
{ }
|
|
244
290
|
|
|
245
|
-
EIGEN_DEVICE_FUNC
|
|
246
|
-
|
|
291
|
+
EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
|
|
292
|
+
inline Index innerStride() const EIGEN_NOEXCEPT{ return 1; }
|
|
293
|
+
EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
|
|
294
|
+
inline Index outerStride() const EIGEN_NOEXCEPT { return this->innerSize(); }
|
|
247
295
|
|
|
248
296
|
#ifdef EIGEN_ARRAY_PLUGIN
|
|
249
297
|
#include EIGEN_ARRAY_PLUGIN
|
|
@@ -258,7 +306,7 @@ class Array
|
|
|
258
306
|
/** \defgroup arraytypedefs Global array typedefs
|
|
259
307
|
* \ingroup Core_Module
|
|
260
308
|
*
|
|
261
|
-
* Eigen defines several typedef shortcuts for most common 1D and 2D array types.
|
|
309
|
+
* %Eigen defines several typedef shortcuts for most common 1D and 2D array types.
|
|
262
310
|
*
|
|
263
311
|
* The general patterns are the following:
|
|
264
312
|
*
|
|
@@ -271,6 +319,12 @@ class Array
|
|
|
271
319
|
* There are also \c ArraySizeType which are self-explanatory. For example, \c Array4cf is
|
|
272
320
|
* a fixed-size 1D array of 4 complex floats.
|
|
273
321
|
*
|
|
322
|
+
* With \cpp11, template alias are also defined for common sizes.
|
|
323
|
+
* They follow the same pattern as above except that the scalar type suffix is replaced by a
|
|
324
|
+
* template parameter, i.e.:
|
|
325
|
+
* - `ArrayRowsCols<Type>` where `Rows` and `Cols` can be \c 2,\c 3,\c 4, or \c X for fixed or dynamic size.
|
|
326
|
+
* - `ArraySize<Type>` where `Size` can be \c 2,\c 3,\c 4 or \c X for fixed or dynamic size 1D arrays.
|
|
327
|
+
*
|
|
274
328
|
* \sa class Array
|
|
275
329
|
*/
|
|
276
330
|
|
|
@@ -303,8 +357,42 @@ EIGEN_MAKE_ARRAY_TYPEDEFS_ALL_SIZES(std::complex<double>, cd)
|
|
|
303
357
|
|
|
304
358
|
#undef EIGEN_MAKE_ARRAY_TYPEDEFS_ALL_SIZES
|
|
305
359
|
#undef EIGEN_MAKE_ARRAY_TYPEDEFS
|
|
360
|
+
#undef EIGEN_MAKE_ARRAY_FIXED_TYPEDEFS
|
|
361
|
+
|
|
362
|
+
#if EIGEN_HAS_CXX11
|
|
363
|
+
|
|
364
|
+
#define EIGEN_MAKE_ARRAY_TYPEDEFS(Size, SizeSuffix) \
|
|
365
|
+
/** \ingroup arraytypedefs */ \
|
|
366
|
+
/** \brief \cpp11 */ \
|
|
367
|
+
template <typename Type> \
|
|
368
|
+
using Array##SizeSuffix##SizeSuffix = Array<Type, Size, Size>; \
|
|
369
|
+
/** \ingroup arraytypedefs */ \
|
|
370
|
+
/** \brief \cpp11 */ \
|
|
371
|
+
template <typename Type> \
|
|
372
|
+
using Array##SizeSuffix = Array<Type, Size, 1>;
|
|
373
|
+
|
|
374
|
+
#define EIGEN_MAKE_ARRAY_FIXED_TYPEDEFS(Size) \
|
|
375
|
+
/** \ingroup arraytypedefs */ \
|
|
376
|
+
/** \brief \cpp11 */ \
|
|
377
|
+
template <typename Type> \
|
|
378
|
+
using Array##Size##X = Array<Type, Size, Dynamic>; \
|
|
379
|
+
/** \ingroup arraytypedefs */ \
|
|
380
|
+
/** \brief \cpp11 */ \
|
|
381
|
+
template <typename Type> \
|
|
382
|
+
using Array##X##Size = Array<Type, Dynamic, Size>;
|
|
383
|
+
|
|
384
|
+
EIGEN_MAKE_ARRAY_TYPEDEFS(2, 2)
|
|
385
|
+
EIGEN_MAKE_ARRAY_TYPEDEFS(3, 3)
|
|
386
|
+
EIGEN_MAKE_ARRAY_TYPEDEFS(4, 4)
|
|
387
|
+
EIGEN_MAKE_ARRAY_TYPEDEFS(Dynamic, X)
|
|
388
|
+
EIGEN_MAKE_ARRAY_FIXED_TYPEDEFS(2)
|
|
389
|
+
EIGEN_MAKE_ARRAY_FIXED_TYPEDEFS(3)
|
|
390
|
+
EIGEN_MAKE_ARRAY_FIXED_TYPEDEFS(4)
|
|
391
|
+
|
|
392
|
+
#undef EIGEN_MAKE_ARRAY_TYPEDEFS
|
|
393
|
+
#undef EIGEN_MAKE_ARRAY_FIXED_TYPEDEFS
|
|
306
394
|
|
|
307
|
-
#
|
|
395
|
+
#endif // EIGEN_HAS_CXX11
|
|
308
396
|
|
|
309
397
|
#define EIGEN_USING_ARRAY_TYPEDEFS_FOR_TYPE_AND_SIZE(TypeSuffix, SizeSuffix) \
|
|
310
398
|
using Eigen::Matrix##SizeSuffix##TypeSuffix; \
|
|
@@ -69,6 +69,7 @@ template<typename Derived> class ArrayBase
|
|
|
69
69
|
using Base::coeff;
|
|
70
70
|
using Base::coeffRef;
|
|
71
71
|
using Base::lazyAssign;
|
|
72
|
+
using Base::operator-;
|
|
72
73
|
using Base::operator=;
|
|
73
74
|
using Base::operator+=;
|
|
74
75
|
using Base::operator-=;
|
|
@@ -88,7 +89,6 @@ template<typename Derived> class ArrayBase
|
|
|
88
89
|
|
|
89
90
|
#define EIGEN_CURRENT_STORAGE_BASE_CLASS Eigen::ArrayBase
|
|
90
91
|
#define EIGEN_DOC_UNARY_ADDONS(X,Y)
|
|
91
|
-
# include "../plugins/CommonCwiseUnaryOps.h"
|
|
92
92
|
# include "../plugins/MatrixCwiseUnaryOps.h"
|
|
93
93
|
# include "../plugins/ArrayCwiseUnaryOps.h"
|
|
94
94
|
# include "../plugins/CommonCwiseBinaryOps.h"
|