@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
|
@@ -17,24 +17,28 @@ namespace internal {
|
|
|
17
17
|
|
|
18
18
|
/** \internal \returns the hyperbolic tan of \a a (coeff-wise)
|
|
19
19
|
Doesn't do anything fancy, just a 13/6-degree rational interpolant which
|
|
20
|
-
is accurate up to a couple of
|
|
21
|
-
|
|
20
|
+
is accurate up to a couple of ulps in the (approximate) range [-8, 8],
|
|
21
|
+
outside of which tanh(x) = +/-1 in single precision. The input is clamped
|
|
22
|
+
to the range [-c, c]. The value c is chosen as the smallest value where
|
|
23
|
+
the approximation evaluates to exactly 1. In the reange [-0.0004, 0.0004]
|
|
24
|
+
the approxmation tanh(x) ~= x is used for better accuracy as x tends to zero.
|
|
22
25
|
|
|
23
26
|
This implementation works on both scalars and packets.
|
|
24
27
|
*/
|
|
25
28
|
template<typename T>
|
|
26
29
|
T generic_fast_tanh_float(const T& a_x)
|
|
27
30
|
{
|
|
28
|
-
// Clamp the inputs to the range [-
|
|
29
|
-
|
|
30
|
-
const T
|
|
31
|
-
const T
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
const T x = pmax(
|
|
31
|
+
// Clamp the inputs to the range [-c, c]
|
|
32
|
+
#ifdef EIGEN_VECTORIZE_FMA
|
|
33
|
+
const T plus_clamp = pset1<T>(7.99881172180175781f);
|
|
34
|
+
const T minus_clamp = pset1<T>(-7.99881172180175781f);
|
|
35
|
+
#else
|
|
36
|
+
const T plus_clamp = pset1<T>(7.90531110763549805f);
|
|
37
|
+
const T minus_clamp = pset1<T>(-7.90531110763549805f);
|
|
38
|
+
#endif
|
|
39
|
+
const T tiny = pset1<T>(0.0004f);
|
|
40
|
+
const T x = pmax(pmin(a_x, plus_clamp), minus_clamp);
|
|
41
|
+
const T tiny_mask = pcmp_lt(pabs(a_x), tiny);
|
|
38
42
|
// The monomial coefficients of the numerator polynomial (odd).
|
|
39
43
|
const T alpha_1 = pset1<T>(4.89352455891786e-03f);
|
|
40
44
|
const T alpha_3 = pset1<T>(6.37261928875436e-04f);
|
|
@@ -62,24 +66,30 @@ T generic_fast_tanh_float(const T& a_x)
|
|
|
62
66
|
p = pmadd(x2, p, alpha_1);
|
|
63
67
|
p = pmul(x, p);
|
|
64
68
|
|
|
65
|
-
// Evaluate the denominator polynomial
|
|
69
|
+
// Evaluate the denominator polynomial q.
|
|
66
70
|
T q = pmadd(x2, beta_6, beta_4);
|
|
67
71
|
q = pmadd(x2, q, beta_2);
|
|
68
72
|
q = pmadd(x2, q, beta_0);
|
|
69
73
|
|
|
70
74
|
// Divide the numerator by the denominator.
|
|
71
|
-
return pdiv(p, q);
|
|
75
|
+
return pselect(tiny_mask, x, pdiv(p, q));
|
|
72
76
|
}
|
|
73
77
|
|
|
74
78
|
template<typename RealScalar>
|
|
75
|
-
EIGEN_STRONG_INLINE
|
|
79
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
|
76
80
|
RealScalar positive_real_hypot(const RealScalar& x, const RealScalar& y)
|
|
77
81
|
{
|
|
78
|
-
|
|
82
|
+
// IEEE IEC 6059 special cases.
|
|
83
|
+
if ((numext::isinf)(x) || (numext::isinf)(y))
|
|
84
|
+
return NumTraits<RealScalar>::infinity();
|
|
85
|
+
if ((numext::isnan)(x) || (numext::isnan)(y))
|
|
86
|
+
return NumTraits<RealScalar>::quiet_NaN();
|
|
87
|
+
|
|
88
|
+
EIGEN_USING_STD(sqrt);
|
|
79
89
|
RealScalar p, qp;
|
|
80
90
|
p = numext::maxi(x,y);
|
|
81
91
|
if(p==RealScalar(0)) return RealScalar(0);
|
|
82
|
-
qp = numext::mini(y,x) / p;
|
|
92
|
+
qp = numext::mini(y,x) / p;
|
|
83
93
|
return p * sqrt(RealScalar(1) + qp*qp);
|
|
84
94
|
}
|
|
85
95
|
|
|
@@ -87,13 +97,102 @@ template<typename Scalar>
|
|
|
87
97
|
struct hypot_impl
|
|
88
98
|
{
|
|
89
99
|
typedef typename NumTraits<Scalar>::Real RealScalar;
|
|
90
|
-
static
|
|
100
|
+
static EIGEN_DEVICE_FUNC
|
|
101
|
+
inline RealScalar run(const Scalar& x, const Scalar& y)
|
|
91
102
|
{
|
|
92
|
-
|
|
103
|
+
EIGEN_USING_STD(abs);
|
|
93
104
|
return positive_real_hypot<RealScalar>(abs(x), abs(y));
|
|
94
105
|
}
|
|
95
106
|
};
|
|
96
107
|
|
|
108
|
+
// Generic complex sqrt implementation that correctly handles corner cases
|
|
109
|
+
// according to https://en.cppreference.com/w/cpp/numeric/complex/sqrt
|
|
110
|
+
template<typename T>
|
|
111
|
+
EIGEN_DEVICE_FUNC std::complex<T> complex_sqrt(const std::complex<T>& z) {
|
|
112
|
+
// Computes the principal sqrt of the input.
|
|
113
|
+
//
|
|
114
|
+
// For a complex square root of the number x + i*y. We want to find real
|
|
115
|
+
// numbers u and v such that
|
|
116
|
+
// (u + i*v)^2 = x + i*y <=>
|
|
117
|
+
// u^2 - v^2 + i*2*u*v = x + i*v.
|
|
118
|
+
// By equating the real and imaginary parts we get:
|
|
119
|
+
// u^2 - v^2 = x
|
|
120
|
+
// 2*u*v = y.
|
|
121
|
+
//
|
|
122
|
+
// For x >= 0, this has the numerically stable solution
|
|
123
|
+
// u = sqrt(0.5 * (x + sqrt(x^2 + y^2)))
|
|
124
|
+
// v = y / (2 * u)
|
|
125
|
+
// and for x < 0,
|
|
126
|
+
// v = sign(y) * sqrt(0.5 * (-x + sqrt(x^2 + y^2)))
|
|
127
|
+
// u = y / (2 * v)
|
|
128
|
+
//
|
|
129
|
+
// Letting w = sqrt(0.5 * (|x| + |z|)),
|
|
130
|
+
// if x == 0: u = w, v = sign(y) * w
|
|
131
|
+
// if x > 0: u = w, v = y / (2 * w)
|
|
132
|
+
// if x < 0: u = |y| / (2 * w), v = sign(y) * w
|
|
133
|
+
|
|
134
|
+
const T x = numext::real(z);
|
|
135
|
+
const T y = numext::imag(z);
|
|
136
|
+
const T zero = T(0);
|
|
137
|
+
const T w = numext::sqrt(T(0.5) * (numext::abs(x) + numext::hypot(x, y)));
|
|
138
|
+
|
|
139
|
+
return
|
|
140
|
+
(numext::isinf)(y) ? std::complex<T>(NumTraits<T>::infinity(), y)
|
|
141
|
+
: x == zero ? std::complex<T>(w, y < zero ? -w : w)
|
|
142
|
+
: x > zero ? std::complex<T>(w, y / (2 * w))
|
|
143
|
+
: std::complex<T>(numext::abs(y) / (2 * w), y < zero ? -w : w );
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// Generic complex rsqrt implementation.
|
|
147
|
+
template<typename T>
|
|
148
|
+
EIGEN_DEVICE_FUNC std::complex<T> complex_rsqrt(const std::complex<T>& z) {
|
|
149
|
+
// Computes the principal reciprocal sqrt of the input.
|
|
150
|
+
//
|
|
151
|
+
// For a complex reciprocal square root of the number z = x + i*y. We want to
|
|
152
|
+
// find real numbers u and v such that
|
|
153
|
+
// (u + i*v)^2 = 1 / (x + i*y) <=>
|
|
154
|
+
// u^2 - v^2 + i*2*u*v = x/|z|^2 - i*v/|z|^2.
|
|
155
|
+
// By equating the real and imaginary parts we get:
|
|
156
|
+
// u^2 - v^2 = x/|z|^2
|
|
157
|
+
// 2*u*v = y/|z|^2.
|
|
158
|
+
//
|
|
159
|
+
// For x >= 0, this has the numerically stable solution
|
|
160
|
+
// u = sqrt(0.5 * (x + |z|)) / |z|
|
|
161
|
+
// v = -y / (2 * u * |z|)
|
|
162
|
+
// and for x < 0,
|
|
163
|
+
// v = -sign(y) * sqrt(0.5 * (-x + |z|)) / |z|
|
|
164
|
+
// u = -y / (2 * v * |z|)
|
|
165
|
+
//
|
|
166
|
+
// Letting w = sqrt(0.5 * (|x| + |z|)),
|
|
167
|
+
// if x == 0: u = w / |z|, v = -sign(y) * w / |z|
|
|
168
|
+
// if x > 0: u = w / |z|, v = -y / (2 * w * |z|)
|
|
169
|
+
// if x < 0: u = |y| / (2 * w * |z|), v = -sign(y) * w / |z|
|
|
170
|
+
|
|
171
|
+
const T x = numext::real(z);
|
|
172
|
+
const T y = numext::imag(z);
|
|
173
|
+
const T zero = T(0);
|
|
174
|
+
|
|
175
|
+
const T abs_z = numext::hypot(x, y);
|
|
176
|
+
const T w = numext::sqrt(T(0.5) * (numext::abs(x) + abs_z));
|
|
177
|
+
const T woz = w / abs_z;
|
|
178
|
+
// Corner cases consistent with 1/sqrt(z) on gcc/clang.
|
|
179
|
+
return
|
|
180
|
+
abs_z == zero ? std::complex<T>(NumTraits<T>::infinity(), NumTraits<T>::quiet_NaN())
|
|
181
|
+
: ((numext::isinf)(x) || (numext::isinf)(y)) ? std::complex<T>(zero, zero)
|
|
182
|
+
: x == zero ? std::complex<T>(woz, y < zero ? woz : -woz)
|
|
183
|
+
: x > zero ? std::complex<T>(woz, -y / (2 * w * abs_z))
|
|
184
|
+
: std::complex<T>(numext::abs(y) / (2 * w * abs_z), y < zero ? woz : -woz );
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
template<typename T>
|
|
188
|
+
EIGEN_DEVICE_FUNC std::complex<T> complex_log(const std::complex<T>& z) {
|
|
189
|
+
// Computes complex log.
|
|
190
|
+
T a = numext::abs(z);
|
|
191
|
+
EIGEN_USING_STD(atan2);
|
|
192
|
+
T b = atan2(z.imag(), z.real());
|
|
193
|
+
return std::complex<T>(numext::log(a), b);
|
|
194
|
+
}
|
|
195
|
+
|
|
97
196
|
} // end namespace internal
|
|
98
197
|
|
|
99
198
|
} // end namespace Eigen
|
|
@@ -29,7 +29,7 @@ private:
|
|
|
29
29
|
required_alignment = unpacket_traits<PacketScalar>::alignment,
|
|
30
30
|
packet_access_bit = (packet_traits<_Scalar>::Vectorizable && (EIGEN_UNALIGNED_VECTORIZE || (actual_alignment>=required_alignment))) ? PacketAccessBit : 0
|
|
31
31
|
};
|
|
32
|
-
|
|
32
|
+
|
|
33
33
|
public:
|
|
34
34
|
typedef _Scalar Scalar;
|
|
35
35
|
typedef Dense StorageKind;
|
|
@@ -44,7 +44,7 @@ public:
|
|
|
44
44
|
Options = _Options,
|
|
45
45
|
InnerStrideAtCompileTime = 1,
|
|
46
46
|
OuterStrideAtCompileTime = (Options&RowMajor) ? ColsAtCompileTime : RowsAtCompileTime,
|
|
47
|
-
|
|
47
|
+
|
|
48
48
|
// FIXME, the following flag in only used to define NeedsToAlign in PlainObjectBase
|
|
49
49
|
EvaluatorFlags = LinearAccessBit | DirectAccessBit | packet_access_bit | row_major_bit,
|
|
50
50
|
Alignment = actual_alignment
|
|
@@ -255,53 +255,93 @@ class Matrix
|
|
|
255
255
|
*
|
|
256
256
|
* \sa resize(Index,Index)
|
|
257
257
|
*/
|
|
258
|
-
EIGEN_DEVICE_FUNC
|
|
259
|
-
|
|
258
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
|
259
|
+
Matrix() : Base()
|
|
260
260
|
{
|
|
261
261
|
Base::_check_template_params();
|
|
262
262
|
EIGEN_INITIALIZE_COEFFS_IF_THAT_OPTION_IS_ENABLED
|
|
263
263
|
}
|
|
264
264
|
|
|
265
265
|
// FIXME is it still needed
|
|
266
|
-
EIGEN_DEVICE_FUNC
|
|
266
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
|
267
267
|
explicit Matrix(internal::constructor_without_unaligned_array_assert)
|
|
268
268
|
: Base(internal::constructor_without_unaligned_array_assert())
|
|
269
269
|
{ Base::_check_template_params(); EIGEN_INITIALIZE_COEFFS_IF_THAT_OPTION_IS_ENABLED }
|
|
270
270
|
|
|
271
271
|
#if EIGEN_HAS_RVALUE_REFERENCES
|
|
272
|
-
EIGEN_DEVICE_FUNC
|
|
272
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
|
273
273
|
Matrix(Matrix&& other) EIGEN_NOEXCEPT_IF(std::is_nothrow_move_constructible<Scalar>::value)
|
|
274
274
|
: Base(std::move(other))
|
|
275
275
|
{
|
|
276
276
|
Base::_check_template_params();
|
|
277
277
|
}
|
|
278
|
-
EIGEN_DEVICE_FUNC
|
|
278
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
|
279
279
|
Matrix& operator=(Matrix&& other) EIGEN_NOEXCEPT_IF(std::is_nothrow_move_assignable<Scalar>::value)
|
|
280
280
|
{
|
|
281
|
-
other
|
|
281
|
+
Base::operator=(std::move(other));
|
|
282
282
|
return *this;
|
|
283
283
|
}
|
|
284
284
|
#endif
|
|
285
285
|
|
|
286
|
-
|
|
286
|
+
#if EIGEN_HAS_CXX11
|
|
287
|
+
/** \copydoc PlainObjectBase(const Scalar&, const Scalar&, const Scalar&, const Scalar&, const ArgTypes&... args)
|
|
288
|
+
*
|
|
289
|
+
* Example: \include Matrix_variadic_ctor_cxx11.cpp
|
|
290
|
+
* Output: \verbinclude Matrix_variadic_ctor_cxx11.out
|
|
291
|
+
*
|
|
292
|
+
* \sa Matrix(const std::initializer_list<std::initializer_list<Scalar>>&)
|
|
293
|
+
*/
|
|
294
|
+
template <typename... ArgTypes>
|
|
295
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
|
296
|
+
Matrix(const Scalar& a0, const Scalar& a1, const Scalar& a2, const Scalar& a3, const ArgTypes&... args)
|
|
297
|
+
: Base(a0, a1, a2, a3, args...) {}
|
|
298
|
+
|
|
299
|
+
/** \brief Constructs a Matrix and initializes it from the coefficients given as initializer-lists grouped by row. \cpp11
|
|
300
|
+
*
|
|
301
|
+
* In the general case, the constructor takes a list of rows, each row being represented as a list of coefficients:
|
|
302
|
+
*
|
|
303
|
+
* Example: \include Matrix_initializer_list_23_cxx11.cpp
|
|
304
|
+
* Output: \verbinclude Matrix_initializer_list_23_cxx11.out
|
|
305
|
+
*
|
|
306
|
+
* Each of the inner initializer lists must contain the exact same number of elements, otherwise an assertion is triggered.
|
|
307
|
+
*
|
|
308
|
+
* In the case of a compile-time column vector, implicit transposition from a single row is allowed.
|
|
309
|
+
* Therefore <code>VectorXd{{1,2,3,4,5}}</code> is legal and the more verbose syntax
|
|
310
|
+
* <code>RowVectorXd{{1},{2},{3},{4},{5}}</code> can be avoided:
|
|
311
|
+
*
|
|
312
|
+
* Example: \include Matrix_initializer_list_vector_cxx11.cpp
|
|
313
|
+
* Output: \verbinclude Matrix_initializer_list_vector_cxx11.out
|
|
314
|
+
*
|
|
315
|
+
* In the case of fixed-sized matrices, the initializer list sizes must exactly match the matrix sizes,
|
|
316
|
+
* and implicit transposition is allowed for compile-time vectors only.
|
|
317
|
+
*
|
|
318
|
+
* \sa Matrix(const Scalar& a0, const Scalar& a1, const Scalar& a2, const Scalar& a3, const ArgTypes&... args)
|
|
319
|
+
*/
|
|
320
|
+
EIGEN_DEVICE_FUNC
|
|
321
|
+
explicit EIGEN_STRONG_INLINE Matrix(const std::initializer_list<std::initializer_list<Scalar>>& list) : Base(list) {}
|
|
322
|
+
#endif // end EIGEN_HAS_CXX11
|
|
323
|
+
|
|
324
|
+
#ifndef EIGEN_PARSED_BY_DOXYGEN
|
|
287
325
|
|
|
288
326
|
// This constructor is for both 1x1 matrices and dynamic vectors
|
|
289
327
|
template<typename T>
|
|
290
|
-
EIGEN_DEVICE_FUNC
|
|
291
|
-
|
|
328
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
|
329
|
+
explicit Matrix(const T& x)
|
|
292
330
|
{
|
|
293
331
|
Base::_check_template_params();
|
|
294
332
|
Base::template _init1<T>(x);
|
|
295
333
|
}
|
|
296
334
|
|
|
297
335
|
template<typename T0, typename T1>
|
|
298
|
-
EIGEN_DEVICE_FUNC
|
|
299
|
-
|
|
336
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
|
337
|
+
Matrix(const T0& x, const T1& y)
|
|
300
338
|
{
|
|
301
339
|
Base::_check_template_params();
|
|
302
340
|
Base::template _init2<T0,T1>(x, y);
|
|
303
341
|
}
|
|
304
|
-
|
|
342
|
+
|
|
343
|
+
|
|
344
|
+
#else
|
|
305
345
|
/** \brief Constructs a fixed-sized matrix initialized with coefficients starting at \a data */
|
|
306
346
|
EIGEN_DEVICE_FUNC
|
|
307
347
|
explicit Matrix(const Scalar *data);
|
|
@@ -311,7 +351,7 @@ class Matrix
|
|
|
311
351
|
* This is useful for dynamic-size vectors. For fixed-size vectors,
|
|
312
352
|
* it is redundant to pass these parameters, so one should use the default constructor
|
|
313
353
|
* Matrix() instead.
|
|
314
|
-
*
|
|
354
|
+
*
|
|
315
355
|
* \warning This constructor is disabled for fixed-size \c 1x1 matrices. For instance,
|
|
316
356
|
* calling Matrix<double,1,1>(1) will call the initialization constructor: Matrix(const Scalar&).
|
|
317
357
|
* For fixed-size \c 1x1 matrices it is therefore recommended to use the default
|
|
@@ -319,14 +359,15 @@ class Matrix
|
|
|
319
359
|
* \c EIGEN_INITIALIZE_MATRICES_BY_{ZERO,\c NAN} macros (see \ref TopicPreprocessorDirectives).
|
|
320
360
|
*/
|
|
321
361
|
EIGEN_STRONG_INLINE explicit Matrix(Index dim);
|
|
322
|
-
/** \brief Constructs an initialized 1x1 matrix with the given coefficient
|
|
362
|
+
/** \brief Constructs an initialized 1x1 matrix with the given coefficient
|
|
363
|
+
* \sa Matrix(const Scalar&, const Scalar&, const Scalar&, const Scalar&, const ArgTypes&...) */
|
|
323
364
|
Matrix(const Scalar& x);
|
|
324
365
|
/** \brief Constructs an uninitialized matrix with \a rows rows and \a cols columns.
|
|
325
366
|
*
|
|
326
367
|
* This is useful for dynamic-size matrices. For fixed-size matrices,
|
|
327
368
|
* it is redundant to pass these parameters, so one should use the default constructor
|
|
328
369
|
* Matrix() instead.
|
|
329
|
-
*
|
|
370
|
+
*
|
|
330
371
|
* \warning This constructor is disabled for fixed-size \c 1x2 and \c 2x1 vectors. For instance,
|
|
331
372
|
* calling Matrix2f(2,1) will call the initialization constructor: Matrix(const Scalar& x, const Scalar& y).
|
|
332
373
|
* For fixed-size \c 1x2 or \c 2x1 vectors it is therefore recommended to use the default
|
|
@@ -335,12 +376,15 @@ class Matrix
|
|
|
335
376
|
*/
|
|
336
377
|
EIGEN_DEVICE_FUNC
|
|
337
378
|
Matrix(Index rows, Index cols);
|
|
338
|
-
|
|
339
|
-
/** \brief Constructs an initialized 2D vector with given coefficients
|
|
379
|
+
|
|
380
|
+
/** \brief Constructs an initialized 2D vector with given coefficients
|
|
381
|
+
* \sa Matrix(const Scalar&, const Scalar&, const Scalar&, const Scalar&, const ArgTypes&...) */
|
|
340
382
|
Matrix(const Scalar& x, const Scalar& y);
|
|
341
|
-
#endif
|
|
383
|
+
#endif // end EIGEN_PARSED_BY_DOXYGEN
|
|
342
384
|
|
|
343
|
-
/** \brief Constructs an initialized 3D vector with given coefficients
|
|
385
|
+
/** \brief Constructs an initialized 3D vector with given coefficients
|
|
386
|
+
* \sa Matrix(const Scalar&, const Scalar&, const Scalar&, const Scalar&, const ArgTypes&...)
|
|
387
|
+
*/
|
|
344
388
|
EIGEN_DEVICE_FUNC
|
|
345
389
|
EIGEN_STRONG_INLINE Matrix(const Scalar& x, const Scalar& y, const Scalar& z)
|
|
346
390
|
{
|
|
@@ -350,7 +394,9 @@ class Matrix
|
|
|
350
394
|
m_storage.data()[1] = y;
|
|
351
395
|
m_storage.data()[2] = z;
|
|
352
396
|
}
|
|
353
|
-
/** \brief Constructs an initialized 4D vector with given coefficients
|
|
397
|
+
/** \brief Constructs an initialized 4D vector with given coefficients
|
|
398
|
+
* \sa Matrix(const Scalar&, const Scalar&, const Scalar&, const Scalar&, const ArgTypes&...)
|
|
399
|
+
*/
|
|
354
400
|
EIGEN_DEVICE_FUNC
|
|
355
401
|
EIGEN_STRONG_INLINE Matrix(const Scalar& x, const Scalar& y, const Scalar& z, const Scalar& w)
|
|
356
402
|
{
|
|
@@ -377,8 +423,10 @@ class Matrix
|
|
|
377
423
|
: Base(other.derived())
|
|
378
424
|
{ }
|
|
379
425
|
|
|
380
|
-
EIGEN_DEVICE_FUNC
|
|
381
|
-
|
|
426
|
+
EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
|
|
427
|
+
inline Index innerStride() const EIGEN_NOEXCEPT { return 1; }
|
|
428
|
+
EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
|
|
429
|
+
inline Index outerStride() const EIGEN_NOEXCEPT { return this->innerSize(); }
|
|
382
430
|
|
|
383
431
|
/////////// Geometry module ///////////
|
|
384
432
|
|
|
@@ -405,7 +453,7 @@ class Matrix
|
|
|
405
453
|
*
|
|
406
454
|
* \ingroup Core_Module
|
|
407
455
|
*
|
|
408
|
-
* Eigen defines several typedef shortcuts for most common matrix and vector types.
|
|
456
|
+
* %Eigen defines several typedef shortcuts for most common matrix and vector types.
|
|
409
457
|
*
|
|
410
458
|
* The general patterns are the following:
|
|
411
459
|
*
|
|
@@ -418,6 +466,15 @@ class Matrix
|
|
|
418
466
|
* There are also \c VectorSizeType and \c RowVectorSizeType which are self-explanatory. For example, \c Vector4cf is
|
|
419
467
|
* a fixed-size vector of 4 complex floats.
|
|
420
468
|
*
|
|
469
|
+
* With \cpp11, template alias are also defined for common sizes.
|
|
470
|
+
* They follow the same pattern as above except that the scalar type suffix is replaced by a
|
|
471
|
+
* template parameter, i.e.:
|
|
472
|
+
* - `MatrixSize<Type>` where `Size` can be \c 2,\c 3,\c 4 for fixed size square matrices or \c X for dynamic size.
|
|
473
|
+
* - `MatrixXSize<Type>` and `MatrixSizeX<Type>` where `Size` can be \c 2,\c 3,\c 4 for hybrid dynamic/fixed matrices.
|
|
474
|
+
* - `VectorSize<Type>` and `RowVectorSize<Type>` for column and row vectors.
|
|
475
|
+
*
|
|
476
|
+
* With \cpp11, you can also use fully generic column and row vector types: `Vector<Type,Size>` and `RowVector<Type,Size>`.
|
|
477
|
+
*
|
|
421
478
|
* \sa class Matrix
|
|
422
479
|
*/
|
|
423
480
|
|
|
@@ -454,6 +511,55 @@ EIGEN_MAKE_TYPEDEFS_ALL_SIZES(std::complex<double>, cd)
|
|
|
454
511
|
#undef EIGEN_MAKE_TYPEDEFS
|
|
455
512
|
#undef EIGEN_MAKE_FIXED_TYPEDEFS
|
|
456
513
|
|
|
514
|
+
#if EIGEN_HAS_CXX11
|
|
515
|
+
|
|
516
|
+
#define EIGEN_MAKE_TYPEDEFS(Size, SizeSuffix) \
|
|
517
|
+
/** \ingroup matrixtypedefs */ \
|
|
518
|
+
/** \brief \cpp11 */ \
|
|
519
|
+
template <typename Type> \
|
|
520
|
+
using Matrix##SizeSuffix = Matrix<Type, Size, Size>; \
|
|
521
|
+
/** \ingroup matrixtypedefs */ \
|
|
522
|
+
/** \brief \cpp11 */ \
|
|
523
|
+
template <typename Type> \
|
|
524
|
+
using Vector##SizeSuffix = Matrix<Type, Size, 1>; \
|
|
525
|
+
/** \ingroup matrixtypedefs */ \
|
|
526
|
+
/** \brief \cpp11 */ \
|
|
527
|
+
template <typename Type> \
|
|
528
|
+
using RowVector##SizeSuffix = Matrix<Type, 1, Size>;
|
|
529
|
+
|
|
530
|
+
#define EIGEN_MAKE_FIXED_TYPEDEFS(Size) \
|
|
531
|
+
/** \ingroup matrixtypedefs */ \
|
|
532
|
+
/** \brief \cpp11 */ \
|
|
533
|
+
template <typename Type> \
|
|
534
|
+
using Matrix##Size##X = Matrix<Type, Size, Dynamic>; \
|
|
535
|
+
/** \ingroup matrixtypedefs */ \
|
|
536
|
+
/** \brief \cpp11 */ \
|
|
537
|
+
template <typename Type> \
|
|
538
|
+
using Matrix##X##Size = Matrix<Type, Dynamic, Size>;
|
|
539
|
+
|
|
540
|
+
EIGEN_MAKE_TYPEDEFS(2, 2)
|
|
541
|
+
EIGEN_MAKE_TYPEDEFS(3, 3)
|
|
542
|
+
EIGEN_MAKE_TYPEDEFS(4, 4)
|
|
543
|
+
EIGEN_MAKE_TYPEDEFS(Dynamic, X)
|
|
544
|
+
EIGEN_MAKE_FIXED_TYPEDEFS(2)
|
|
545
|
+
EIGEN_MAKE_FIXED_TYPEDEFS(3)
|
|
546
|
+
EIGEN_MAKE_FIXED_TYPEDEFS(4)
|
|
547
|
+
|
|
548
|
+
/** \ingroup matrixtypedefs
|
|
549
|
+
* \brief \cpp11 */
|
|
550
|
+
template <typename Type, int Size>
|
|
551
|
+
using Vector = Matrix<Type, Size, 1>;
|
|
552
|
+
|
|
553
|
+
/** \ingroup matrixtypedefs
|
|
554
|
+
* \brief \cpp11 */
|
|
555
|
+
template <typename Type, int Size>
|
|
556
|
+
using RowVector = Matrix<Type, 1, Size>;
|
|
557
|
+
|
|
558
|
+
#undef EIGEN_MAKE_TYPEDEFS
|
|
559
|
+
#undef EIGEN_MAKE_FIXED_TYPEDEFS
|
|
560
|
+
|
|
561
|
+
#endif // EIGEN_HAS_CXX11
|
|
562
|
+
|
|
457
563
|
} // end namespace Eigen
|
|
458
564
|
|
|
459
565
|
#endif // EIGEN_MATRIX_H
|
|
@@ -76,6 +76,7 @@ template<typename Derived> class MatrixBase
|
|
|
76
76
|
using Base::coeffRef;
|
|
77
77
|
using Base::lazyAssign;
|
|
78
78
|
using Base::eval;
|
|
79
|
+
using Base::operator-;
|
|
79
80
|
using Base::operator+=;
|
|
80
81
|
using Base::operator-=;
|
|
81
82
|
using Base::operator*=;
|
|
@@ -122,7 +123,6 @@ template<typename Derived> class MatrixBase
|
|
|
122
123
|
|
|
123
124
|
#define EIGEN_CURRENT_STORAGE_BASE_CLASS Eigen::MatrixBase
|
|
124
125
|
#define EIGEN_DOC_UNARY_ADDONS(X,Y)
|
|
125
|
-
# include "../plugins/CommonCwiseUnaryOps.h"
|
|
126
126
|
# include "../plugins/CommonCwiseBinaryOps.h"
|
|
127
127
|
# include "../plugins/MatrixCwiseUnaryOps.h"
|
|
128
128
|
# include "../plugins/MatrixCwiseBinaryOps.h"
|
|
@@ -268,6 +268,8 @@ template<typename Derived> class MatrixBase
|
|
|
268
268
|
Derived& setIdentity();
|
|
269
269
|
EIGEN_DEVICE_FUNC
|
|
270
270
|
Derived& setIdentity(Index rows, Index cols);
|
|
271
|
+
EIGEN_DEVICE_FUNC Derived& setUnit(Index i);
|
|
272
|
+
EIGEN_DEVICE_FUNC Derived& setUnit(Index newSize, Index i);
|
|
271
273
|
|
|
272
274
|
bool isIdentity(const RealScalar& prec = NumTraits<Scalar>::dummy_precision()) const;
|
|
273
275
|
bool isDiagonal(const RealScalar& prec = NumTraits<Scalar>::dummy_precision()) const;
|
|
@@ -296,7 +298,7 @@ template<typename Derived> class MatrixBase
|
|
|
296
298
|
EIGEN_DEVICE_FUNC inline bool operator!=(const MatrixBase<OtherDerived>& other) const
|
|
297
299
|
{ return cwiseNotEqual(other).any(); }
|
|
298
300
|
|
|
299
|
-
NoAlias<Derived,Eigen::MatrixBase > noalias();
|
|
301
|
+
NoAlias<Derived,Eigen::MatrixBase > EIGEN_DEVICE_FUNC noalias();
|
|
300
302
|
|
|
301
303
|
// TODO forceAlignedAccess is temporarily disabled
|
|
302
304
|
// Need to find a nicer workaround.
|
|
@@ -326,6 +328,7 @@ template<typename Derived> class MatrixBase
|
|
|
326
328
|
|
|
327
329
|
inline const PartialPivLU<PlainObject> lu() const;
|
|
328
330
|
|
|
331
|
+
EIGEN_DEVICE_FUNC
|
|
329
332
|
inline const Inverse<Derived> inverse() const;
|
|
330
333
|
|
|
331
334
|
template<typename ResultType>
|
|
@@ -335,12 +338,15 @@ template<typename Derived> class MatrixBase
|
|
|
335
338
|
bool& invertible,
|
|
336
339
|
const RealScalar& absDeterminantThreshold = NumTraits<Scalar>::dummy_precision()
|
|
337
340
|
) const;
|
|
341
|
+
|
|
338
342
|
template<typename ResultType>
|
|
339
343
|
inline void computeInverseWithCheck(
|
|
340
344
|
ResultType& inverse,
|
|
341
345
|
bool& invertible,
|
|
342
346
|
const RealScalar& absDeterminantThreshold = NumTraits<Scalar>::dummy_precision()
|
|
343
347
|
) const;
|
|
348
|
+
|
|
349
|
+
EIGEN_DEVICE_FUNC
|
|
344
350
|
Scalar determinant() const;
|
|
345
351
|
|
|
346
352
|
/////////// Cholesky module ///////////
|
|
@@ -412,15 +418,19 @@ template<typename Derived> class MatrixBase
|
|
|
412
418
|
|
|
413
419
|
////////// Householder module ///////////
|
|
414
420
|
|
|
421
|
+
EIGEN_DEVICE_FUNC
|
|
415
422
|
void makeHouseholderInPlace(Scalar& tau, RealScalar& beta);
|
|
416
423
|
template<typename EssentialPart>
|
|
424
|
+
EIGEN_DEVICE_FUNC
|
|
417
425
|
void makeHouseholder(EssentialPart& essential,
|
|
418
426
|
Scalar& tau, RealScalar& beta) const;
|
|
419
427
|
template<typename EssentialPart>
|
|
428
|
+
EIGEN_DEVICE_FUNC
|
|
420
429
|
void applyHouseholderOnTheLeft(const EssentialPart& essential,
|
|
421
430
|
const Scalar& tau,
|
|
422
431
|
Scalar* workspace);
|
|
423
432
|
template<typename EssentialPart>
|
|
433
|
+
EIGEN_DEVICE_FUNC
|
|
424
434
|
void applyHouseholderOnTheRight(const EssentialPart& essential,
|
|
425
435
|
const Scalar& tau,
|
|
426
436
|
Scalar* workspace);
|
|
@@ -428,8 +438,10 @@ template<typename Derived> class MatrixBase
|
|
|
428
438
|
///////// Jacobi module /////////
|
|
429
439
|
|
|
430
440
|
template<typename OtherScalar>
|
|
441
|
+
EIGEN_DEVICE_FUNC
|
|
431
442
|
void applyOnTheLeft(Index p, Index q, const JacobiRotation<OtherScalar>& j);
|
|
432
443
|
template<typename OtherScalar>
|
|
444
|
+
EIGEN_DEVICE_FUNC
|
|
433
445
|
void applyOnTheRight(Index p, Index q, const JacobiRotation<OtherScalar>& j);
|
|
434
446
|
|
|
435
447
|
///////// SparseCore module /////////
|
|
@@ -456,6 +468,11 @@ template<typename Derived> class MatrixBase
|
|
|
456
468
|
const MatrixFunctionReturnValue<Derived> matrixFunction(StemFunction f) const;
|
|
457
469
|
EIGEN_MATRIX_FUNCTION(MatrixFunctionReturnValue, cosh, hyperbolic cosine)
|
|
458
470
|
EIGEN_MATRIX_FUNCTION(MatrixFunctionReturnValue, sinh, hyperbolic sine)
|
|
471
|
+
#if EIGEN_HAS_CXX11_MATH
|
|
472
|
+
EIGEN_MATRIX_FUNCTION(MatrixFunctionReturnValue, atanh, inverse hyperbolic cosine)
|
|
473
|
+
EIGEN_MATRIX_FUNCTION(MatrixFunctionReturnValue, acosh, inverse hyperbolic cosine)
|
|
474
|
+
EIGEN_MATRIX_FUNCTION(MatrixFunctionReturnValue, asinh, inverse hyperbolic sine)
|
|
475
|
+
#endif
|
|
459
476
|
EIGEN_MATRIX_FUNCTION(MatrixFunctionReturnValue, cos, cosine)
|
|
460
477
|
EIGEN_MATRIX_FUNCTION(MatrixFunctionReturnValue, sin, sine)
|
|
461
478
|
EIGEN_MATRIX_FUNCTION(MatrixSquareRootReturnValue, sqrt, square root)
|
|
@@ -16,7 +16,11 @@ namespace Eigen {
|
|
|
16
16
|
namespace internal {
|
|
17
17
|
template<typename ExpressionType>
|
|
18
18
|
struct traits<NestByValue<ExpressionType> > : public traits<ExpressionType>
|
|
19
|
-
{
|
|
19
|
+
{
|
|
20
|
+
enum {
|
|
21
|
+
Flags = traits<ExpressionType>::Flags & ~NestByRefBit
|
|
22
|
+
};
|
|
23
|
+
};
|
|
20
24
|
}
|
|
21
25
|
|
|
22
26
|
/** \class NestByValue
|
|
@@ -41,57 +45,13 @@ template<typename ExpressionType> class NestByValue
|
|
|
41
45
|
|
|
42
46
|
EIGEN_DEVICE_FUNC explicit inline NestByValue(const ExpressionType& matrix) : m_expression(matrix) {}
|
|
43
47
|
|
|
44
|
-
EIGEN_DEVICE_FUNC inline Index rows() const { return m_expression.rows(); }
|
|
45
|
-
EIGEN_DEVICE_FUNC inline Index cols() const { return m_expression.cols(); }
|
|
46
|
-
EIGEN_DEVICE_FUNC inline Index outerStride() const { return m_expression.outerStride(); }
|
|
47
|
-
EIGEN_DEVICE_FUNC inline Index innerStride() const { return m_expression.innerStride(); }
|
|
48
|
-
|
|
49
|
-
EIGEN_DEVICE_FUNC inline const CoeffReturnType coeff(Index row, Index col) const
|
|
50
|
-
{
|
|
51
|
-
return m_expression.coeff(row, col);
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
EIGEN_DEVICE_FUNC inline Scalar& coeffRef(Index row, Index col)
|
|
55
|
-
{
|
|
56
|
-
return m_expression.const_cast_derived().coeffRef(row, col);
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
EIGEN_DEVICE_FUNC inline const CoeffReturnType coeff(Index index) const
|
|
60
|
-
{
|
|
61
|
-
return m_expression.coeff(index);
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
EIGEN_DEVICE_FUNC inline Scalar& coeffRef(Index index)
|
|
65
|
-
{
|
|
66
|
-
return m_expression.const_cast_derived().coeffRef(index);
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
template<int LoadMode>
|
|
70
|
-
inline const PacketScalar packet(Index row, Index col) const
|
|
71
|
-
{
|
|
72
|
-
return m_expression.template packet<LoadMode>(row, col);
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
template<int LoadMode>
|
|
76
|
-
inline void writePacket(Index row, Index col, const PacketScalar& x)
|
|
77
|
-
{
|
|
78
|
-
m_expression.const_cast_derived().template writePacket<LoadMode>(row, col, x);
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
template<int LoadMode>
|
|
82
|
-
inline const PacketScalar packet(Index index) const
|
|
83
|
-
{
|
|
84
|
-
return m_expression.template packet<LoadMode>(index);
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
template<int LoadMode>
|
|
88
|
-
inline void writePacket(Index index, const PacketScalar& x)
|
|
89
|
-
{
|
|
90
|
-
m_expression.const_cast_derived().template writePacket<LoadMode>(index, x);
|
|
91
|
-
}
|
|
48
|
+
EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR inline Index rows() const EIGEN_NOEXCEPT { return m_expression.rows(); }
|
|
49
|
+
EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR inline Index cols() const EIGEN_NOEXCEPT { return m_expression.cols(); }
|
|
92
50
|
|
|
93
51
|
EIGEN_DEVICE_FUNC operator const ExpressionType&() const { return m_expression; }
|
|
94
52
|
|
|
53
|
+
EIGEN_DEVICE_FUNC const ExpressionType& nestedExpression() const { return m_expression; }
|
|
54
|
+
|
|
95
55
|
protected:
|
|
96
56
|
const ExpressionType m_expression;
|
|
97
57
|
};
|
|
@@ -99,12 +59,27 @@ template<typename ExpressionType> class NestByValue
|
|
|
99
59
|
/** \returns an expression of the temporary version of *this.
|
|
100
60
|
*/
|
|
101
61
|
template<typename Derived>
|
|
102
|
-
inline const NestByValue<Derived>
|
|
62
|
+
EIGEN_DEVICE_FUNC inline const NestByValue<Derived>
|
|
103
63
|
DenseBase<Derived>::nestByValue() const
|
|
104
64
|
{
|
|
105
65
|
return NestByValue<Derived>(derived());
|
|
106
66
|
}
|
|
107
67
|
|
|
68
|
+
namespace internal {
|
|
69
|
+
|
|
70
|
+
// Evaluator of Solve -> eval into a temporary
|
|
71
|
+
template<typename ArgType>
|
|
72
|
+
struct evaluator<NestByValue<ArgType> >
|
|
73
|
+
: public evaluator<ArgType>
|
|
74
|
+
{
|
|
75
|
+
typedef evaluator<ArgType> Base;
|
|
76
|
+
|
|
77
|
+
EIGEN_DEVICE_FUNC explicit evaluator(const NestByValue<ArgType>& xpr)
|
|
78
|
+
: Base(xpr.nestedExpression())
|
|
79
|
+
{}
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
|
|
108
83
|
} // end namespace Eigen
|
|
109
84
|
|
|
110
85
|
#endif // EIGEN_NESTBYVALUE_H
|