tomoto 0.2.2 → 0.3.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +10 -0
- data/README.md +8 -10
- data/ext/tomoto/ct.cpp +11 -11
- data/ext/tomoto/dmr.cpp +14 -13
- data/ext/tomoto/dt.cpp +14 -14
- data/ext/tomoto/extconf.rb +7 -5
- data/ext/tomoto/gdmr.cpp +7 -7
- data/ext/tomoto/hdp.cpp +9 -9
- data/ext/tomoto/hlda.cpp +13 -13
- data/ext/tomoto/hpa.cpp +5 -5
- data/ext/tomoto/lda.cpp +42 -39
- data/ext/tomoto/llda.cpp +6 -6
- data/ext/tomoto/mglda.cpp +15 -15
- data/ext/tomoto/pa.cpp +6 -6
- data/ext/tomoto/plda.cpp +6 -6
- data/ext/tomoto/slda.cpp +8 -8
- data/ext/tomoto/{ext.cpp → tomoto.cpp} +8 -8
- data/ext/tomoto/utils.h +16 -70
- data/lib/tomoto/version.rb +1 -1
- data/lib/tomoto.rb +5 -1
- data/vendor/EigenRand/EigenRand/Core.h +10 -10
- data/vendor/EigenRand/EigenRand/Dists/Basic.h +208 -9
- data/vendor/EigenRand/EigenRand/Dists/Discrete.h +52 -31
- data/vendor/EigenRand/EigenRand/Dists/GammaPoisson.h +9 -8
- data/vendor/EigenRand/EigenRand/Dists/NormalExp.h +28 -21
- data/vendor/EigenRand/EigenRand/EigenRand +11 -6
- data/vendor/EigenRand/EigenRand/Macro.h +13 -7
- data/vendor/EigenRand/EigenRand/MorePacketMath.h +348 -740
- data/vendor/EigenRand/EigenRand/MvDists/Multinomial.h +5 -3
- data/vendor/EigenRand/EigenRand/MvDists/MvNormal.h +9 -3
- data/vendor/EigenRand/EigenRand/PacketFilter.h +11 -253
- data/vendor/EigenRand/EigenRand/PacketRandomEngine.h +21 -47
- data/vendor/EigenRand/EigenRand/RandUtils.h +50 -344
- data/vendor/EigenRand/EigenRand/arch/AVX/MorePacketMath.h +619 -0
- data/vendor/EigenRand/EigenRand/arch/AVX/PacketFilter.h +149 -0
- data/vendor/EigenRand/EigenRand/arch/AVX/RandUtils.h +228 -0
- data/vendor/EigenRand/EigenRand/arch/NEON/MorePacketMath.h +473 -0
- data/vendor/EigenRand/EigenRand/arch/NEON/PacketFilter.h +142 -0
- data/vendor/EigenRand/EigenRand/arch/NEON/RandUtils.h +126 -0
- data/vendor/EigenRand/EigenRand/arch/SSE/MorePacketMath.h +501 -0
- data/vendor/EigenRand/EigenRand/arch/SSE/PacketFilter.h +133 -0
- data/vendor/EigenRand/EigenRand/arch/SSE/RandUtils.h +120 -0
- data/vendor/EigenRand/EigenRand/doc.h +24 -12
- data/vendor/EigenRand/README.md +57 -4
- data/vendor/eigen/COPYING.APACHE +203 -0
- data/vendor/eigen/COPYING.BSD +1 -1
- data/vendor/eigen/COPYING.MINPACK +51 -52
- data/vendor/eigen/Eigen/Cholesky +0 -1
- data/vendor/eigen/Eigen/Core +112 -265
- data/vendor/eigen/Eigen/Eigenvalues +2 -3
- data/vendor/eigen/Eigen/Geometry +5 -8
- data/vendor/eigen/Eigen/Householder +0 -1
- data/vendor/eigen/Eigen/Jacobi +0 -1
- data/vendor/eigen/Eigen/KLUSupport +41 -0
- data/vendor/eigen/Eigen/LU +2 -5
- data/vendor/eigen/Eigen/OrderingMethods +0 -3
- data/vendor/eigen/Eigen/PaStiXSupport +1 -0
- data/vendor/eigen/Eigen/PardisoSupport +0 -0
- data/vendor/eigen/Eigen/QR +2 -3
- data/vendor/eigen/Eigen/QtAlignedMalloc +0 -1
- data/vendor/eigen/Eigen/SVD +0 -1
- data/vendor/eigen/Eigen/Sparse +0 -2
- data/vendor/eigen/Eigen/SparseCholesky +0 -8
- data/vendor/eigen/Eigen/SparseLU +4 -0
- data/vendor/eigen/Eigen/SparseQR +0 -1
- data/vendor/eigen/Eigen/src/Cholesky/LDLT.h +42 -27
- data/vendor/eigen/Eigen/src/Cholesky/LLT.h +39 -23
- data/vendor/eigen/Eigen/src/CholmodSupport/CholmodSupport.h +90 -47
- data/vendor/eigen/Eigen/src/Core/ArithmeticSequence.h +413 -0
- data/vendor/eigen/Eigen/src/Core/Array.h +99 -11
- data/vendor/eigen/Eigen/src/Core/ArrayBase.h +3 -3
- data/vendor/eigen/Eigen/src/Core/ArrayWrapper.h +21 -21
- data/vendor/eigen/Eigen/src/Core/Assign.h +1 -1
- data/vendor/eigen/Eigen/src/Core/AssignEvaluator.h +125 -50
- data/vendor/eigen/Eigen/src/Core/Assign_MKL.h +10 -10
- data/vendor/eigen/Eigen/src/Core/BandMatrix.h +16 -16
- data/vendor/eigen/Eigen/src/Core/Block.h +56 -60
- data/vendor/eigen/Eigen/src/Core/BooleanRedux.h +29 -31
- data/vendor/eigen/Eigen/src/Core/CommaInitializer.h +7 -3
- data/vendor/eigen/Eigen/src/Core/CoreEvaluators.h +325 -272
- data/vendor/eigen/Eigen/src/Core/CoreIterators.h +5 -0
- data/vendor/eigen/Eigen/src/Core/CwiseBinaryOp.h +21 -22
- data/vendor/eigen/Eigen/src/Core/CwiseNullaryOp.h +153 -18
- data/vendor/eigen/Eigen/src/Core/CwiseUnaryOp.h +6 -6
- data/vendor/eigen/Eigen/src/Core/CwiseUnaryView.h +14 -10
- data/vendor/eigen/Eigen/src/Core/DenseBase.h +132 -42
- data/vendor/eigen/Eigen/src/Core/DenseCoeffsBase.h +25 -21
- data/vendor/eigen/Eigen/src/Core/DenseStorage.h +153 -71
- data/vendor/eigen/Eigen/src/Core/Diagonal.h +21 -23
- data/vendor/eigen/Eigen/src/Core/DiagonalMatrix.h +50 -2
- data/vendor/eigen/Eigen/src/Core/DiagonalProduct.h +1 -1
- data/vendor/eigen/Eigen/src/Core/Dot.h +10 -10
- data/vendor/eigen/Eigen/src/Core/EigenBase.h +10 -9
- data/vendor/eigen/Eigen/src/Core/ForceAlignedAccess.h +8 -4
- data/vendor/eigen/Eigen/src/Core/Fuzzy.h +3 -3
- data/vendor/eigen/Eigen/src/Core/GeneralProduct.h +20 -10
- data/vendor/eigen/Eigen/src/Core/GenericPacketMath.h +599 -152
- data/vendor/eigen/Eigen/src/Core/GlobalFunctions.h +40 -33
- data/vendor/eigen/Eigen/src/Core/IO.h +40 -7
- data/vendor/eigen/Eigen/src/Core/IndexedView.h +237 -0
- data/vendor/eigen/Eigen/src/Core/Inverse.h +9 -10
- data/vendor/eigen/Eigen/src/Core/Map.h +7 -7
- data/vendor/eigen/Eigen/src/Core/MapBase.h +10 -3
- data/vendor/eigen/Eigen/src/Core/MathFunctions.h +767 -125
- data/vendor/eigen/Eigen/src/Core/MathFunctionsImpl.h +118 -19
- data/vendor/eigen/Eigen/src/Core/Matrix.h +131 -25
- data/vendor/eigen/Eigen/src/Core/MatrixBase.h +21 -3
- data/vendor/eigen/Eigen/src/Core/NestByValue.h +25 -50
- data/vendor/eigen/Eigen/src/Core/NoAlias.h +4 -3
- data/vendor/eigen/Eigen/src/Core/NumTraits.h +107 -20
- data/vendor/eigen/Eigen/src/Core/PartialReduxEvaluator.h +232 -0
- data/vendor/eigen/Eigen/src/Core/PermutationMatrix.h +3 -31
- data/vendor/eigen/Eigen/src/Core/PlainObjectBase.h +152 -59
- data/vendor/eigen/Eigen/src/Core/Product.h +30 -25
- data/vendor/eigen/Eigen/src/Core/ProductEvaluators.h +192 -125
- data/vendor/eigen/Eigen/src/Core/Random.h +37 -1
- data/vendor/eigen/Eigen/src/Core/Redux.h +180 -170
- data/vendor/eigen/Eigen/src/Core/Ref.h +121 -23
- data/vendor/eigen/Eigen/src/Core/Replicate.h +8 -8
- data/vendor/eigen/Eigen/src/Core/Reshaped.h +454 -0
- data/vendor/eigen/Eigen/src/Core/ReturnByValue.h +7 -5
- data/vendor/eigen/Eigen/src/Core/Reverse.h +18 -12
- data/vendor/eigen/Eigen/src/Core/Select.h +8 -6
- data/vendor/eigen/Eigen/src/Core/SelfAdjointView.h +33 -20
- data/vendor/eigen/Eigen/src/Core/Solve.h +14 -14
- data/vendor/eigen/Eigen/src/Core/SolveTriangular.h +16 -16
- data/vendor/eigen/Eigen/src/Core/SolverBase.h +41 -3
- data/vendor/eigen/Eigen/src/Core/StableNorm.h +100 -70
- data/vendor/eigen/Eigen/src/Core/StlIterators.h +463 -0
- data/vendor/eigen/Eigen/src/Core/Stride.h +9 -4
- data/vendor/eigen/Eigen/src/Core/Swap.h +5 -4
- data/vendor/eigen/Eigen/src/Core/Transpose.h +88 -27
- data/vendor/eigen/Eigen/src/Core/Transpositions.h +26 -47
- data/vendor/eigen/Eigen/src/Core/TriangularMatrix.h +93 -75
- data/vendor/eigen/Eigen/src/Core/VectorBlock.h +5 -5
- data/vendor/eigen/Eigen/src/Core/VectorwiseOp.h +159 -70
- data/vendor/eigen/Eigen/src/Core/Visitor.h +137 -29
- data/vendor/eigen/Eigen/src/Core/arch/AVX/Complex.h +50 -129
- data/vendor/eigen/Eigen/src/Core/arch/AVX/MathFunctions.h +126 -337
- data/vendor/eigen/Eigen/src/Core/arch/AVX/PacketMath.h +1092 -155
- data/vendor/eigen/Eigen/src/Core/arch/AVX/TypeCasting.h +65 -1
- data/vendor/eigen/Eigen/src/Core/arch/AVX512/Complex.h +422 -0
- data/vendor/eigen/Eigen/src/Core/arch/AVX512/MathFunctions.h +207 -236
- data/vendor/eigen/Eigen/src/Core/arch/AVX512/PacketMath.h +1482 -495
- data/vendor/eigen/Eigen/src/Core/arch/AVX512/TypeCasting.h +89 -0
- data/vendor/eigen/Eigen/src/Core/arch/AltiVec/Complex.h +152 -165
- data/vendor/eigen/Eigen/src/Core/arch/AltiVec/MathFunctions.h +19 -251
- data/vendor/eigen/Eigen/src/Core/arch/AltiVec/MatrixProduct.h +2937 -0
- data/vendor/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h +221 -0
- data/vendor/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h +629 -0
- data/vendor/eigen/Eigen/src/Core/arch/AltiVec/PacketMath.h +2042 -392
- data/vendor/eigen/Eigen/src/Core/arch/CUDA/Complex.h +235 -80
- data/vendor/eigen/Eigen/src/Core/arch/Default/BFloat16.h +700 -0
- data/vendor/eigen/Eigen/src/Core/arch/Default/ConjHelper.h +102 -14
- data/vendor/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h +1649 -0
- data/vendor/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h +110 -0
- data/vendor/eigen/Eigen/src/Core/arch/Default/Half.h +942 -0
- data/vendor/eigen/Eigen/src/Core/arch/Default/Settings.h +1 -1
- data/vendor/eigen/Eigen/src/Core/arch/Default/TypeCasting.h +120 -0
- data/vendor/eigen/Eigen/src/Core/arch/{CUDA → GPU}/MathFunctions.h +16 -4
- data/vendor/eigen/Eigen/src/Core/arch/GPU/PacketMath.h +1685 -0
- data/vendor/eigen/Eigen/src/Core/arch/GPU/TypeCasting.h +80 -0
- data/vendor/eigen/Eigen/src/Core/arch/HIP/hcc/math_constants.h +23 -0
- data/vendor/eigen/Eigen/src/Core/arch/MSA/Complex.h +648 -0
- data/vendor/eigen/Eigen/src/Core/arch/MSA/MathFunctions.h +387 -0
- data/vendor/eigen/Eigen/src/Core/arch/MSA/PacketMath.h +1233 -0
- data/vendor/eigen/Eigen/src/Core/arch/NEON/Complex.h +313 -219
- data/vendor/eigen/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h +183 -0
- data/vendor/eigen/Eigen/src/Core/arch/NEON/MathFunctions.h +54 -70
- data/vendor/eigen/Eigen/src/Core/arch/NEON/PacketMath.h +4376 -549
- data/vendor/eigen/Eigen/src/Core/arch/NEON/TypeCasting.h +1419 -0
- data/vendor/eigen/Eigen/src/Core/arch/SSE/Complex.h +59 -179
- data/vendor/eigen/Eigen/src/Core/arch/SSE/MathFunctions.h +65 -428
- data/vendor/eigen/Eigen/src/Core/arch/SSE/PacketMath.h +893 -283
- data/vendor/eigen/Eigen/src/Core/arch/SSE/TypeCasting.h +65 -0
- data/vendor/eigen/Eigen/src/Core/arch/SVE/MathFunctions.h +44 -0
- data/vendor/eigen/Eigen/src/Core/arch/SVE/PacketMath.h +752 -0
- data/vendor/eigen/Eigen/src/Core/arch/SVE/TypeCasting.h +49 -0
- data/vendor/eigen/Eigen/src/Core/arch/SYCL/InteropHeaders.h +232 -0
- data/vendor/eigen/Eigen/src/Core/arch/SYCL/MathFunctions.h +301 -0
- data/vendor/eigen/Eigen/src/Core/arch/SYCL/PacketMath.h +670 -0
- data/vendor/eigen/Eigen/src/Core/arch/SYCL/SyclMemoryModel.h +694 -0
- data/vendor/eigen/Eigen/src/Core/arch/SYCL/TypeCasting.h +85 -0
- data/vendor/eigen/Eigen/src/Core/arch/ZVector/Complex.h +212 -183
- data/vendor/eigen/Eigen/src/Core/arch/ZVector/MathFunctions.h +101 -5
- data/vendor/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h +510 -395
- data/vendor/eigen/Eigen/src/Core/functors/AssignmentFunctors.h +11 -2
- data/vendor/eigen/Eigen/src/Core/functors/BinaryFunctors.h +112 -46
- data/vendor/eigen/Eigen/src/Core/functors/NullaryFunctors.h +31 -30
- data/vendor/eigen/Eigen/src/Core/functors/StlFunctors.h +32 -2
- data/vendor/eigen/Eigen/src/Core/functors/UnaryFunctors.h +355 -16
- data/vendor/eigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h +1075 -586
- data/vendor/eigen/Eigen/src/Core/products/GeneralMatrixMatrix.h +49 -24
- data/vendor/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +41 -35
- data/vendor/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h +6 -6
- data/vendor/eigen/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h +4 -2
- data/vendor/eigen/Eigen/src/Core/products/GeneralMatrixVector.h +382 -483
- data/vendor/eigen/Eigen/src/Core/products/Parallelizer.h +22 -5
- data/vendor/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +53 -30
- data/vendor/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h +16 -8
- data/vendor/eigen/Eigen/src/Core/products/SelfadjointMatrixVector.h +8 -6
- data/vendor/eigen/Eigen/src/Core/products/SelfadjointProduct.h +4 -4
- data/vendor/eigen/Eigen/src/Core/products/SelfadjointRank2Update.h +5 -4
- data/vendor/eigen/Eigen/src/Core/products/TriangularMatrixMatrix.h +33 -27
- data/vendor/eigen/Eigen/src/Core/products/TriangularMatrixMatrix_BLAS.h +14 -12
- data/vendor/eigen/Eigen/src/Core/products/TriangularSolverMatrix.h +36 -34
- data/vendor/eigen/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h +8 -4
- data/vendor/eigen/Eigen/src/Core/products/TriangularSolverVector.h +13 -10
- data/vendor/eigen/Eigen/src/Core/util/BlasUtil.h +304 -119
- data/vendor/eigen/Eigen/src/Core/util/ConfigureVectorization.h +512 -0
- data/vendor/eigen/Eigen/src/Core/util/Constants.h +25 -9
- data/vendor/eigen/Eigen/src/Core/util/DisableStupidWarnings.h +26 -3
- data/vendor/eigen/Eigen/src/Core/util/ForwardDeclarations.h +29 -9
- data/vendor/eigen/Eigen/src/Core/util/IndexedViewHelper.h +186 -0
- data/vendor/eigen/Eigen/src/Core/util/IntegralConstant.h +272 -0
- data/vendor/eigen/Eigen/src/Core/util/MKL_support.h +8 -1
- data/vendor/eigen/Eigen/src/Core/util/Macros.h +709 -246
- data/vendor/eigen/Eigen/src/Core/util/Memory.h +222 -52
- data/vendor/eigen/Eigen/src/Core/util/Meta.h +355 -77
- data/vendor/eigen/Eigen/src/Core/util/ReenableStupidWarnings.h +5 -1
- data/vendor/eigen/Eigen/src/Core/util/ReshapedHelper.h +51 -0
- data/vendor/eigen/Eigen/src/Core/util/StaticAssert.h +8 -5
- data/vendor/eigen/Eigen/src/Core/util/SymbolicIndex.h +293 -0
- data/vendor/eigen/Eigen/src/Core/util/XprHelper.h +65 -30
- data/vendor/eigen/Eigen/src/Eigenvalues/ComplexEigenSolver.h +1 -1
- data/vendor/eigen/Eigen/src/Eigenvalues/ComplexSchur.h +7 -4
- data/vendor/eigen/Eigen/src/Eigenvalues/EigenSolver.h +2 -2
- data/vendor/eigen/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h +1 -1
- data/vendor/eigen/Eigen/src/Eigenvalues/HessenbergDecomposition.h +2 -2
- data/vendor/eigen/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h +2 -2
- data/vendor/eigen/Eigen/src/Eigenvalues/RealQZ.h +9 -6
- data/vendor/eigen/Eigen/src/Eigenvalues/RealSchur.h +21 -9
- data/vendor/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +77 -43
- data/vendor/eigen/Eigen/src/Eigenvalues/Tridiagonalization.h +20 -15
- data/vendor/eigen/Eigen/src/Geometry/AlignedBox.h +99 -5
- data/vendor/eigen/Eigen/src/Geometry/AngleAxis.h +4 -4
- data/vendor/eigen/Eigen/src/Geometry/EulerAngles.h +3 -3
- data/vendor/eigen/Eigen/src/Geometry/Homogeneous.h +15 -11
- data/vendor/eigen/Eigen/src/Geometry/Hyperplane.h +1 -1
- data/vendor/eigen/Eigen/src/Geometry/OrthoMethods.h +3 -2
- data/vendor/eigen/Eigen/src/Geometry/ParametrizedLine.h +39 -2
- data/vendor/eigen/Eigen/src/Geometry/Quaternion.h +70 -14
- data/vendor/eigen/Eigen/src/Geometry/Rotation2D.h +3 -3
- data/vendor/eigen/Eigen/src/Geometry/Scaling.h +23 -5
- data/vendor/eigen/Eigen/src/Geometry/Transform.h +88 -67
- data/vendor/eigen/Eigen/src/Geometry/Translation.h +6 -12
- data/vendor/eigen/Eigen/src/Geometry/Umeyama.h +1 -1
- data/vendor/eigen/Eigen/src/Geometry/arch/Geometry_SIMD.h +168 -0
- data/vendor/eigen/Eigen/src/Householder/BlockHouseholder.h +9 -2
- data/vendor/eigen/Eigen/src/Householder/Householder.h +8 -4
- data/vendor/eigen/Eigen/src/Householder/HouseholderSequence.h +123 -48
- data/vendor/eigen/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +15 -15
- data/vendor/eigen/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +7 -23
- data/vendor/eigen/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +5 -22
- data/vendor/eigen/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +41 -47
- data/vendor/eigen/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +51 -60
- data/vendor/eigen/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +70 -20
- data/vendor/eigen/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h +2 -20
- data/vendor/eigen/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h +11 -9
- data/vendor/eigen/Eigen/src/Jacobi/Jacobi.h +31 -10
- data/vendor/eigen/Eigen/src/KLUSupport/KLUSupport.h +358 -0
- data/vendor/eigen/Eigen/src/LU/Determinant.h +35 -19
- data/vendor/eigen/Eigen/src/LU/FullPivLU.h +29 -43
- data/vendor/eigen/Eigen/src/LU/InverseImpl.h +25 -8
- data/vendor/eigen/Eigen/src/LU/PartialPivLU.h +71 -58
- data/vendor/eigen/Eigen/src/LU/arch/InverseSize4.h +351 -0
- data/vendor/eigen/Eigen/src/OrderingMethods/Amd.h +7 -17
- data/vendor/eigen/Eigen/src/OrderingMethods/Eigen_Colamd.h +297 -277
- data/vendor/eigen/Eigen/src/OrderingMethods/Ordering.h +6 -10
- data/vendor/eigen/Eigen/src/PaStiXSupport/PaStiXSupport.h +1 -1
- data/vendor/eigen/Eigen/src/PardisoSupport/PardisoSupport.h +9 -7
- data/vendor/eigen/Eigen/src/QR/ColPivHouseholderQR.h +41 -20
- data/vendor/eigen/Eigen/src/QR/CompleteOrthogonalDecomposition.h +100 -27
- data/vendor/eigen/Eigen/src/QR/FullPivHouseholderQR.h +59 -22
- data/vendor/eigen/Eigen/src/QR/HouseholderQR.h +48 -23
- data/vendor/eigen/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h +25 -3
- data/vendor/eigen/Eigen/src/SVD/BDCSVD.h +183 -63
- data/vendor/eigen/Eigen/src/SVD/JacobiSVD.h +22 -14
- data/vendor/eigen/Eigen/src/SVD/SVDBase.h +83 -22
- data/vendor/eigen/Eigen/src/SVD/UpperBidiagonalization.h +3 -3
- data/vendor/eigen/Eigen/src/SparseCholesky/SimplicialCholesky.h +17 -9
- data/vendor/eigen/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +12 -37
- data/vendor/eigen/Eigen/src/SparseCore/AmbiVector.h +3 -2
- data/vendor/eigen/Eigen/src/SparseCore/CompressedStorage.h +16 -0
- data/vendor/eigen/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +6 -6
- data/vendor/eigen/Eigen/src/SparseCore/SparseAssign.h +81 -27
- data/vendor/eigen/Eigen/src/SparseCore/SparseBlock.h +25 -57
- data/vendor/eigen/Eigen/src/SparseCore/SparseCompressedBase.h +40 -11
- data/vendor/eigen/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +11 -15
- data/vendor/eigen/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +4 -2
- data/vendor/eigen/Eigen/src/SparseCore/SparseDenseProduct.h +30 -8
- data/vendor/eigen/Eigen/src/SparseCore/SparseMatrix.h +126 -11
- data/vendor/eigen/Eigen/src/SparseCore/SparseMatrixBase.h +5 -12
- data/vendor/eigen/Eigen/src/SparseCore/SparseProduct.h +13 -1
- data/vendor/eigen/Eigen/src/SparseCore/SparseRef.h +7 -7
- data/vendor/eigen/Eigen/src/SparseCore/SparseSelfAdjointView.h +5 -2
- data/vendor/eigen/Eigen/src/SparseCore/SparseUtil.h +8 -0
- data/vendor/eigen/Eigen/src/SparseCore/SparseVector.h +1 -1
- data/vendor/eigen/Eigen/src/SparseCore/SparseView.h +1 -0
- data/vendor/eigen/Eigen/src/SparseLU/SparseLU.h +162 -12
- data/vendor/eigen/Eigen/src/SparseLU/SparseLU_Memory.h +1 -1
- data/vendor/eigen/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h +76 -2
- data/vendor/eigen/Eigen/src/SparseLU/SparseLU_column_dfs.h +2 -2
- data/vendor/eigen/Eigen/src/SparseLU/SparseLU_gemm_kernel.h +1 -1
- data/vendor/eigen/Eigen/src/SparseLU/SparseLU_panel_bmod.h +1 -1
- data/vendor/eigen/Eigen/src/SparseQR/SparseQR.h +19 -6
- data/vendor/eigen/Eigen/src/StlSupport/StdDeque.h +2 -12
- data/vendor/eigen/Eigen/src/StlSupport/StdList.h +2 -2
- data/vendor/eigen/Eigen/src/StlSupport/StdVector.h +2 -2
- data/vendor/eigen/Eigen/src/SuperLUSupport/SuperLUSupport.h +6 -8
- data/vendor/eigen/Eigen/src/UmfPackSupport/UmfPackSupport.h +175 -39
- data/vendor/eigen/Eigen/src/misc/lapacke.h +5 -4
- data/vendor/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.h +28 -2
- data/vendor/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.h +155 -11
- data/vendor/eigen/Eigen/src/plugins/BlockMethods.h +626 -242
- data/vendor/eigen/Eigen/src/plugins/CommonCwiseUnaryOps.h +14 -0
- data/vendor/eigen/Eigen/src/plugins/IndexedViewMethods.h +262 -0
- data/vendor/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.h +4 -4
- data/vendor/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.h +10 -0
- data/vendor/eigen/Eigen/src/plugins/ReshapedMethods.h +149 -0
- data/vendor/eigen/README.md +2 -0
- data/vendor/eigen/bench/btl/README +1 -1
- data/vendor/eigen/bench/tensors/README +6 -7
- data/vendor/eigen/ci/README.md +56 -0
- data/vendor/eigen/demos/mix_eigen_and_c/README +1 -1
- data/vendor/eigen/unsupported/Eigen/CXX11/src/Tensor/README.md +213 -158
- data/vendor/eigen/unsupported/README.txt +1 -1
- data/vendor/tomotopy/README.kr.rst +78 -0
- data/vendor/tomotopy/README.rst +75 -0
- data/vendor/tomotopy/src/Labeling/FoRelevance.cpp +2 -2
- data/vendor/tomotopy/src/Labeling/Phraser.hpp +4 -4
- data/vendor/tomotopy/src/TopicModel/CTModel.hpp +7 -3
- data/vendor/tomotopy/src/TopicModel/DMRModel.hpp +7 -3
- data/vendor/tomotopy/src/TopicModel/DTModel.hpp +6 -3
- data/vendor/tomotopy/src/TopicModel/GDMRModel.hpp +2 -2
- data/vendor/tomotopy/src/TopicModel/HDP.h +1 -0
- data/vendor/tomotopy/src/TopicModel/HDPModel.hpp +57 -6
- data/vendor/tomotopy/src/TopicModel/HLDAModel.hpp +6 -3
- data/vendor/tomotopy/src/TopicModel/HPAModel.hpp +3 -2
- data/vendor/tomotopy/src/TopicModel/LDA.h +3 -3
- data/vendor/tomotopy/src/TopicModel/LDACVB0Model.hpp +5 -5
- data/vendor/tomotopy/src/TopicModel/LDAModel.hpp +50 -19
- data/vendor/tomotopy/src/TopicModel/LLDAModel.hpp +6 -2
- data/vendor/tomotopy/src/TopicModel/MGLDAModel.hpp +3 -2
- data/vendor/tomotopy/src/TopicModel/PAModel.hpp +1 -1
- data/vendor/tomotopy/src/TopicModel/PLDAModel.hpp +6 -2
- data/vendor/tomotopy/src/TopicModel/PT.h +3 -1
- data/vendor/tomotopy/src/TopicModel/PTModel.hpp +36 -3
- data/vendor/tomotopy/src/TopicModel/SLDAModel.hpp +6 -3
- data/vendor/tomotopy/src/TopicModel/TopicModel.hpp +55 -26
- data/vendor/tomotopy/src/Utils/AliasMethod.hpp +5 -4
- data/vendor/tomotopy/src/Utils/Dictionary.h +2 -2
- data/vendor/tomotopy/src/Utils/EigenAddonOps.hpp +36 -1
- data/vendor/tomotopy/src/Utils/MultiNormalDistribution.hpp +1 -1
- data/vendor/tomotopy/src/Utils/TruncMultiNormal.hpp +1 -1
- data/vendor/tomotopy/src/Utils/exception.h +6 -0
- data/vendor/tomotopy/src/Utils/math.h +2 -2
- data/vendor/tomotopy/src/Utils/sample.hpp +14 -12
- data/vendor/tomotopy/src/Utils/serializer.hpp +30 -5
- data/vendor/tomotopy/src/Utils/sse_gamma.h +0 -3
- metadata +64 -18
- data/vendor/eigen/Eigen/CMakeLists.txt +0 -19
- data/vendor/eigen/Eigen/src/Core/arch/CUDA/Half.h +0 -674
- data/vendor/eigen/Eigen/src/Core/arch/CUDA/PacketMath.h +0 -333
- data/vendor/eigen/Eigen/src/Core/arch/CUDA/PacketMathHalf.h +0 -1124
- data/vendor/eigen/Eigen/src/Core/arch/CUDA/TypeCasting.h +0 -212
- data/vendor/eigen/Eigen/src/Geometry/arch/Geometry_SSE.h +0 -161
- data/vendor/eigen/Eigen/src/LU/arch/Inverse_SSE.h +0 -338
|
@@ -0,0 +1,51 @@
|
|
|
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
|
+
|
|
11
|
+
#ifndef EIGEN_RESHAPED_HELPER_H
|
|
12
|
+
#define EIGEN_RESHAPED_HELPER_H
|
|
13
|
+
|
|
14
|
+
namespace Eigen {
|
|
15
|
+
|
|
16
|
+
enum AutoSize_t { AutoSize };
|
|
17
|
+
const int AutoOrder = 2;
|
|
18
|
+
|
|
19
|
+
namespace internal {
|
|
20
|
+
|
|
21
|
+
template<typename SizeType,typename OtherSize, int TotalSize>
|
|
22
|
+
struct get_compiletime_reshape_size {
|
|
23
|
+
enum { value = get_fixed_value<SizeType>::value };
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
template<typename SizeType>
|
|
27
|
+
Index get_runtime_reshape_size(SizeType size, Index /*other*/, Index /*total*/) {
|
|
28
|
+
return internal::get_runtime_value(size);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
template<typename OtherSize, int TotalSize>
|
|
32
|
+
struct get_compiletime_reshape_size<AutoSize_t,OtherSize,TotalSize> {
|
|
33
|
+
enum {
|
|
34
|
+
other_size = get_fixed_value<OtherSize>::value,
|
|
35
|
+
value = (TotalSize==Dynamic || other_size==Dynamic) ? Dynamic : TotalSize / other_size };
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
inline Index get_runtime_reshape_size(AutoSize_t /*size*/, Index other, Index total) {
|
|
39
|
+
return total/other;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
template<int Flags, int Order>
|
|
43
|
+
struct get_compiletime_reshape_order {
|
|
44
|
+
enum { value = Order == AutoOrder ? Flags & RowMajorBit : Order };
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
} // end namespace Eigen
|
|
50
|
+
|
|
51
|
+
#endif // EIGEN_RESHAPED_HELPER_H
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
#ifndef EIGEN_STATIC_ASSERT
|
|
28
28
|
#ifndef EIGEN_NO_STATIC_ASSERT
|
|
29
29
|
|
|
30
|
-
#if EIGEN_MAX_CPP_VER>=11 && (__has_feature(cxx_static_assert) || (
|
|
30
|
+
#if EIGEN_MAX_CPP_VER>=11 && (__has_feature(cxx_static_assert) || (EIGEN_COMP_CXXVER >= 11) || (EIGEN_COMP_MSVC >= 1600))
|
|
31
31
|
|
|
32
32
|
// if native static_assert is enabled, let's use it
|
|
33
33
|
#define EIGEN_STATIC_ASSERT(X,MSG) static_assert(X,#MSG);
|
|
@@ -103,7 +103,10 @@
|
|
|
103
103
|
STORAGE_KIND_MUST_MATCH=1,
|
|
104
104
|
STORAGE_INDEX_MUST_MATCH=1,
|
|
105
105
|
CHOLMOD_SUPPORTS_DOUBLE_PRECISION_ONLY=1,
|
|
106
|
-
SELFADJOINTVIEW_ACCEPTS_UPPER_AND_LOWER_MODE_ONLY=1
|
|
106
|
+
SELFADJOINTVIEW_ACCEPTS_UPPER_AND_LOWER_MODE_ONLY=1,
|
|
107
|
+
INVALID_TEMPLATE_PARAMETER=1,
|
|
108
|
+
GPU_TENSOR_CONTRACTION_DOES_NOT_SUPPORT_OUTPUT_KERNELS=1,
|
|
109
|
+
THE_ARRAY_SIZE_SHOULD_EQUAL_WITH_PACKET_SIZE=1
|
|
107
110
|
};
|
|
108
111
|
};
|
|
109
112
|
|
|
@@ -182,7 +185,7 @@
|
|
|
182
185
|
)
|
|
183
186
|
|
|
184
187
|
#define EIGEN_STATIC_ASSERT_NON_INTEGER(TYPE) \
|
|
185
|
-
EIGEN_STATIC_ASSERT(!NumTraits<TYPE>::IsInteger, THIS_FUNCTION_IS_NOT_FOR_INTEGER_NUMERIC_TYPES)
|
|
188
|
+
EIGEN_STATIC_ASSERT(!Eigen::NumTraits<TYPE>::IsInteger, THIS_FUNCTION_IS_NOT_FOR_INTEGER_NUMERIC_TYPES)
|
|
186
189
|
|
|
187
190
|
|
|
188
191
|
// static assertion failing if it is guaranteed at compile-time that the two matrix expression types have different sizes
|
|
@@ -192,8 +195,8 @@
|
|
|
192
195
|
YOU_MIXED_MATRICES_OF_DIFFERENT_SIZES)
|
|
193
196
|
|
|
194
197
|
#define EIGEN_STATIC_ASSERT_SIZE_1x1(TYPE) \
|
|
195
|
-
EIGEN_STATIC_ASSERT((TYPE::RowsAtCompileTime == 1 || TYPE::RowsAtCompileTime == Dynamic) && \
|
|
196
|
-
(TYPE::ColsAtCompileTime == 1 || TYPE::ColsAtCompileTime == Dynamic), \
|
|
198
|
+
EIGEN_STATIC_ASSERT((TYPE::RowsAtCompileTime == 1 || TYPE::RowsAtCompileTime == Eigen::Dynamic) && \
|
|
199
|
+
(TYPE::ColsAtCompileTime == 1 || TYPE::ColsAtCompileTime == Eigen::Dynamic), \
|
|
197
200
|
THIS_METHOD_IS_ONLY_FOR_1x1_EXPRESSIONS)
|
|
198
201
|
|
|
199
202
|
#define EIGEN_STATIC_ASSERT_LVALUE(Derived) \
|
|
@@ -0,0 +1,293 @@
|
|
|
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_SYMBOLIC_INDEX_H
|
|
11
|
+
#define EIGEN_SYMBOLIC_INDEX_H
|
|
12
|
+
|
|
13
|
+
namespace Eigen {
|
|
14
|
+
|
|
15
|
+
/** \namespace Eigen::symbolic
|
|
16
|
+
* \ingroup Core_Module
|
|
17
|
+
*
|
|
18
|
+
* This namespace defines a set of classes and functions to build and evaluate symbolic expressions of scalar type Index.
|
|
19
|
+
* Here is a simple example:
|
|
20
|
+
*
|
|
21
|
+
* \code
|
|
22
|
+
* // First step, defines symbols:
|
|
23
|
+
* struct x_tag {}; static const symbolic::SymbolExpr<x_tag> x;
|
|
24
|
+
* struct y_tag {}; static const symbolic::SymbolExpr<y_tag> y;
|
|
25
|
+
* struct z_tag {}; static const symbolic::SymbolExpr<z_tag> z;
|
|
26
|
+
*
|
|
27
|
+
* // Defines an expression:
|
|
28
|
+
* auto expr = (x+3)/y+z;
|
|
29
|
+
*
|
|
30
|
+
* // And evaluate it: (c++14)
|
|
31
|
+
* std::cout << expr.eval(x=6,y=3,z=-13) << "\n";
|
|
32
|
+
*
|
|
33
|
+
* // In c++98/11, only one symbol per expression is supported for now:
|
|
34
|
+
* auto expr98 = (3-x)/2;
|
|
35
|
+
* std::cout << expr98.eval(x=6) << "\n";
|
|
36
|
+
* \endcode
|
|
37
|
+
*
|
|
38
|
+
* It is currently only used internally to define and manipulate the Eigen::last and Eigen::lastp1 symbols in Eigen::seq and Eigen::seqN.
|
|
39
|
+
*
|
|
40
|
+
*/
|
|
41
|
+
namespace symbolic {
|
|
42
|
+
|
|
43
|
+
template<typename Tag> class Symbol;
|
|
44
|
+
template<typename Arg0> class NegateExpr;
|
|
45
|
+
template<typename Arg1,typename Arg2> class AddExpr;
|
|
46
|
+
template<typename Arg1,typename Arg2> class ProductExpr;
|
|
47
|
+
template<typename Arg1,typename Arg2> class QuotientExpr;
|
|
48
|
+
|
|
49
|
+
// A simple wrapper around an integral value to provide the eval method.
|
|
50
|
+
// We could also use a free-function symbolic_eval...
|
|
51
|
+
template<typename IndexType=Index>
|
|
52
|
+
class ValueExpr {
|
|
53
|
+
public:
|
|
54
|
+
ValueExpr(IndexType val) : m_value(val) {}
|
|
55
|
+
template<typename T>
|
|
56
|
+
IndexType eval_impl(const T&) const { return m_value; }
|
|
57
|
+
protected:
|
|
58
|
+
IndexType m_value;
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
// Specialization for compile-time value,
|
|
62
|
+
// It is similar to ValueExpr(N) but this version helps the compiler to generate better code.
|
|
63
|
+
template<int N>
|
|
64
|
+
class ValueExpr<internal::FixedInt<N> > {
|
|
65
|
+
public:
|
|
66
|
+
ValueExpr() {}
|
|
67
|
+
template<typename T>
|
|
68
|
+
EIGEN_CONSTEXPR Index eval_impl(const T&) const { return N; }
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
/** \class BaseExpr
|
|
73
|
+
* \ingroup Core_Module
|
|
74
|
+
* Common base class of any symbolic expressions
|
|
75
|
+
*/
|
|
76
|
+
template<typename Derived>
|
|
77
|
+
class BaseExpr
|
|
78
|
+
{
|
|
79
|
+
public:
|
|
80
|
+
const Derived& derived() const { return *static_cast<const Derived*>(this); }
|
|
81
|
+
|
|
82
|
+
/** Evaluate the expression given the \a values of the symbols.
|
|
83
|
+
*
|
|
84
|
+
* \param values defines the values of the symbols, it can either be a SymbolValue or a std::tuple of SymbolValue
|
|
85
|
+
* as constructed by SymbolExpr::operator= operator.
|
|
86
|
+
*
|
|
87
|
+
*/
|
|
88
|
+
template<typename T>
|
|
89
|
+
Index eval(const T& values) const { return derived().eval_impl(values); }
|
|
90
|
+
|
|
91
|
+
#if EIGEN_HAS_CXX14
|
|
92
|
+
template<typename... Types>
|
|
93
|
+
Index eval(Types&&... values) const { return derived().eval_impl(std::make_tuple(values...)); }
|
|
94
|
+
#endif
|
|
95
|
+
|
|
96
|
+
NegateExpr<Derived> operator-() const { return NegateExpr<Derived>(derived()); }
|
|
97
|
+
|
|
98
|
+
AddExpr<Derived,ValueExpr<> > operator+(Index b) const
|
|
99
|
+
{ return AddExpr<Derived,ValueExpr<> >(derived(), b); }
|
|
100
|
+
AddExpr<Derived,ValueExpr<> > operator-(Index a) const
|
|
101
|
+
{ return AddExpr<Derived,ValueExpr<> >(derived(), -a); }
|
|
102
|
+
ProductExpr<Derived,ValueExpr<> > operator*(Index a) const
|
|
103
|
+
{ return ProductExpr<Derived,ValueExpr<> >(derived(),a); }
|
|
104
|
+
QuotientExpr<Derived,ValueExpr<> > operator/(Index a) const
|
|
105
|
+
{ return QuotientExpr<Derived,ValueExpr<> >(derived(),a); }
|
|
106
|
+
|
|
107
|
+
friend AddExpr<Derived,ValueExpr<> > operator+(Index a, const BaseExpr& b)
|
|
108
|
+
{ return AddExpr<Derived,ValueExpr<> >(b.derived(), a); }
|
|
109
|
+
friend AddExpr<NegateExpr<Derived>,ValueExpr<> > operator-(Index a, const BaseExpr& b)
|
|
110
|
+
{ return AddExpr<NegateExpr<Derived>,ValueExpr<> >(-b.derived(), a); }
|
|
111
|
+
friend ProductExpr<ValueExpr<>,Derived> operator*(Index a, const BaseExpr& b)
|
|
112
|
+
{ return ProductExpr<ValueExpr<>,Derived>(a,b.derived()); }
|
|
113
|
+
friend QuotientExpr<ValueExpr<>,Derived> operator/(Index a, const BaseExpr& b)
|
|
114
|
+
{ return QuotientExpr<ValueExpr<>,Derived>(a,b.derived()); }
|
|
115
|
+
|
|
116
|
+
template<int N>
|
|
117
|
+
AddExpr<Derived,ValueExpr<internal::FixedInt<N> > > operator+(internal::FixedInt<N>) const
|
|
118
|
+
{ return AddExpr<Derived,ValueExpr<internal::FixedInt<N> > >(derived(), ValueExpr<internal::FixedInt<N> >()); }
|
|
119
|
+
template<int N>
|
|
120
|
+
AddExpr<Derived,ValueExpr<internal::FixedInt<-N> > > operator-(internal::FixedInt<N>) const
|
|
121
|
+
{ return AddExpr<Derived,ValueExpr<internal::FixedInt<-N> > >(derived(), ValueExpr<internal::FixedInt<-N> >()); }
|
|
122
|
+
template<int N>
|
|
123
|
+
ProductExpr<Derived,ValueExpr<internal::FixedInt<N> > > operator*(internal::FixedInt<N>) const
|
|
124
|
+
{ return ProductExpr<Derived,ValueExpr<internal::FixedInt<N> > >(derived(),ValueExpr<internal::FixedInt<N> >()); }
|
|
125
|
+
template<int N>
|
|
126
|
+
QuotientExpr<Derived,ValueExpr<internal::FixedInt<N> > > operator/(internal::FixedInt<N>) const
|
|
127
|
+
{ return QuotientExpr<Derived,ValueExpr<internal::FixedInt<N> > >(derived(),ValueExpr<internal::FixedInt<N> >()); }
|
|
128
|
+
|
|
129
|
+
template<int N>
|
|
130
|
+
friend AddExpr<Derived,ValueExpr<internal::FixedInt<N> > > operator+(internal::FixedInt<N>, const BaseExpr& b)
|
|
131
|
+
{ return AddExpr<Derived,ValueExpr<internal::FixedInt<N> > >(b.derived(), ValueExpr<internal::FixedInt<N> >()); }
|
|
132
|
+
template<int N>
|
|
133
|
+
friend AddExpr<NegateExpr<Derived>,ValueExpr<internal::FixedInt<N> > > operator-(internal::FixedInt<N>, const BaseExpr& b)
|
|
134
|
+
{ return AddExpr<NegateExpr<Derived>,ValueExpr<internal::FixedInt<N> > >(-b.derived(), ValueExpr<internal::FixedInt<N> >()); }
|
|
135
|
+
template<int N>
|
|
136
|
+
friend ProductExpr<ValueExpr<internal::FixedInt<N> >,Derived> operator*(internal::FixedInt<N>, const BaseExpr& b)
|
|
137
|
+
{ return ProductExpr<ValueExpr<internal::FixedInt<N> >,Derived>(ValueExpr<internal::FixedInt<N> >(),b.derived()); }
|
|
138
|
+
template<int N>
|
|
139
|
+
friend QuotientExpr<ValueExpr<internal::FixedInt<N> >,Derived> operator/(internal::FixedInt<N>, const BaseExpr& b)
|
|
140
|
+
{ return QuotientExpr<ValueExpr<internal::FixedInt<N> > ,Derived>(ValueExpr<internal::FixedInt<N> >(),b.derived()); }
|
|
141
|
+
|
|
142
|
+
#if (!EIGEN_HAS_CXX14)
|
|
143
|
+
template<int N>
|
|
144
|
+
AddExpr<Derived,ValueExpr<internal::FixedInt<N> > > operator+(internal::FixedInt<N> (*)()) const
|
|
145
|
+
{ return AddExpr<Derived,ValueExpr<internal::FixedInt<N> > >(derived(), ValueExpr<internal::FixedInt<N> >()); }
|
|
146
|
+
template<int N>
|
|
147
|
+
AddExpr<Derived,ValueExpr<internal::FixedInt<-N> > > operator-(internal::FixedInt<N> (*)()) const
|
|
148
|
+
{ return AddExpr<Derived,ValueExpr<internal::FixedInt<-N> > >(derived(), ValueExpr<internal::FixedInt<-N> >()); }
|
|
149
|
+
template<int N>
|
|
150
|
+
ProductExpr<Derived,ValueExpr<internal::FixedInt<N> > > operator*(internal::FixedInt<N> (*)()) const
|
|
151
|
+
{ return ProductExpr<Derived,ValueExpr<internal::FixedInt<N> > >(derived(),ValueExpr<internal::FixedInt<N> >()); }
|
|
152
|
+
template<int N>
|
|
153
|
+
QuotientExpr<Derived,ValueExpr<internal::FixedInt<N> > > operator/(internal::FixedInt<N> (*)()) const
|
|
154
|
+
{ return QuotientExpr<Derived,ValueExpr<internal::FixedInt<N> > >(derived(),ValueExpr<internal::FixedInt<N> >()); }
|
|
155
|
+
|
|
156
|
+
template<int N>
|
|
157
|
+
friend AddExpr<Derived,ValueExpr<internal::FixedInt<N> > > operator+(internal::FixedInt<N> (*)(), const BaseExpr& b)
|
|
158
|
+
{ return AddExpr<Derived,ValueExpr<internal::FixedInt<N> > >(b.derived(), ValueExpr<internal::FixedInt<N> >()); }
|
|
159
|
+
template<int N>
|
|
160
|
+
friend AddExpr<NegateExpr<Derived>,ValueExpr<internal::FixedInt<N> > > operator-(internal::FixedInt<N> (*)(), const BaseExpr& b)
|
|
161
|
+
{ return AddExpr<NegateExpr<Derived>,ValueExpr<internal::FixedInt<N> > >(-b.derived(), ValueExpr<internal::FixedInt<N> >()); }
|
|
162
|
+
template<int N>
|
|
163
|
+
friend ProductExpr<ValueExpr<internal::FixedInt<N> >,Derived> operator*(internal::FixedInt<N> (*)(), const BaseExpr& b)
|
|
164
|
+
{ return ProductExpr<ValueExpr<internal::FixedInt<N> >,Derived>(ValueExpr<internal::FixedInt<N> >(),b.derived()); }
|
|
165
|
+
template<int N>
|
|
166
|
+
friend QuotientExpr<ValueExpr<internal::FixedInt<N> >,Derived> operator/(internal::FixedInt<N> (*)(), const BaseExpr& b)
|
|
167
|
+
{ return QuotientExpr<ValueExpr<internal::FixedInt<N> > ,Derived>(ValueExpr<internal::FixedInt<N> >(),b.derived()); }
|
|
168
|
+
#endif
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
template<typename OtherDerived>
|
|
172
|
+
AddExpr<Derived,OtherDerived> operator+(const BaseExpr<OtherDerived> &b) const
|
|
173
|
+
{ return AddExpr<Derived,OtherDerived>(derived(), b.derived()); }
|
|
174
|
+
|
|
175
|
+
template<typename OtherDerived>
|
|
176
|
+
AddExpr<Derived,NegateExpr<OtherDerived> > operator-(const BaseExpr<OtherDerived> &b) const
|
|
177
|
+
{ return AddExpr<Derived,NegateExpr<OtherDerived> >(derived(), -b.derived()); }
|
|
178
|
+
|
|
179
|
+
template<typename OtherDerived>
|
|
180
|
+
ProductExpr<Derived,OtherDerived> operator*(const BaseExpr<OtherDerived> &b) const
|
|
181
|
+
{ return ProductExpr<Derived,OtherDerived>(derived(), b.derived()); }
|
|
182
|
+
|
|
183
|
+
template<typename OtherDerived>
|
|
184
|
+
QuotientExpr<Derived,OtherDerived> operator/(const BaseExpr<OtherDerived> &b) const
|
|
185
|
+
{ return QuotientExpr<Derived,OtherDerived>(derived(), b.derived()); }
|
|
186
|
+
};
|
|
187
|
+
|
|
188
|
+
template<typename T>
|
|
189
|
+
struct is_symbolic {
|
|
190
|
+
// BaseExpr has no conversion ctor, so we only have to check whether T can be statically cast to its base class BaseExpr<T>.
|
|
191
|
+
enum { value = internal::is_convertible<T,BaseExpr<T> >::value };
|
|
192
|
+
};
|
|
193
|
+
|
|
194
|
+
/** Represents the actual value of a symbol identified by its tag
|
|
195
|
+
*
|
|
196
|
+
* It is the return type of SymbolValue::operator=, and most of the time this is only way it is used.
|
|
197
|
+
*/
|
|
198
|
+
template<typename Tag>
|
|
199
|
+
class SymbolValue
|
|
200
|
+
{
|
|
201
|
+
public:
|
|
202
|
+
/** Default constructor from the value \a val */
|
|
203
|
+
SymbolValue(Index val) : m_value(val) {}
|
|
204
|
+
|
|
205
|
+
/** \returns the stored value of the symbol */
|
|
206
|
+
Index value() const { return m_value; }
|
|
207
|
+
protected:
|
|
208
|
+
Index m_value;
|
|
209
|
+
};
|
|
210
|
+
|
|
211
|
+
/** Expression of a symbol uniquely identified by the template parameter type \c tag */
|
|
212
|
+
template<typename tag>
|
|
213
|
+
class SymbolExpr : public BaseExpr<SymbolExpr<tag> >
|
|
214
|
+
{
|
|
215
|
+
public:
|
|
216
|
+
/** Alias to the template parameter \c tag */
|
|
217
|
+
typedef tag Tag;
|
|
218
|
+
|
|
219
|
+
SymbolExpr() {}
|
|
220
|
+
|
|
221
|
+
/** Associate the value \a val to the given symbol \c *this, uniquely identified by its \c Tag.
|
|
222
|
+
*
|
|
223
|
+
* The returned object should be passed to ExprBase::eval() to evaluate a given expression with this specified runtime-time value.
|
|
224
|
+
*/
|
|
225
|
+
SymbolValue<Tag> operator=(Index val) const {
|
|
226
|
+
return SymbolValue<Tag>(val);
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
Index eval_impl(const SymbolValue<Tag> &values) const { return values.value(); }
|
|
230
|
+
|
|
231
|
+
#if EIGEN_HAS_CXX14
|
|
232
|
+
// C++14 versions suitable for multiple symbols
|
|
233
|
+
template<typename... Types>
|
|
234
|
+
Index eval_impl(const std::tuple<Types...>& values) const { return std::get<SymbolValue<Tag> >(values).value(); }
|
|
235
|
+
#endif
|
|
236
|
+
};
|
|
237
|
+
|
|
238
|
+
template<typename Arg0>
|
|
239
|
+
class NegateExpr : public BaseExpr<NegateExpr<Arg0> >
|
|
240
|
+
{
|
|
241
|
+
public:
|
|
242
|
+
NegateExpr(const Arg0& arg0) : m_arg0(arg0) {}
|
|
243
|
+
|
|
244
|
+
template<typename T>
|
|
245
|
+
Index eval_impl(const T& values) const { return -m_arg0.eval_impl(values); }
|
|
246
|
+
protected:
|
|
247
|
+
Arg0 m_arg0;
|
|
248
|
+
};
|
|
249
|
+
|
|
250
|
+
template<typename Arg0, typename Arg1>
|
|
251
|
+
class AddExpr : public BaseExpr<AddExpr<Arg0,Arg1> >
|
|
252
|
+
{
|
|
253
|
+
public:
|
|
254
|
+
AddExpr(const Arg0& arg0, const Arg1& arg1) : m_arg0(arg0), m_arg1(arg1) {}
|
|
255
|
+
|
|
256
|
+
template<typename T>
|
|
257
|
+
Index eval_impl(const T& values) const { return m_arg0.eval_impl(values) + m_arg1.eval_impl(values); }
|
|
258
|
+
protected:
|
|
259
|
+
Arg0 m_arg0;
|
|
260
|
+
Arg1 m_arg1;
|
|
261
|
+
};
|
|
262
|
+
|
|
263
|
+
template<typename Arg0, typename Arg1>
|
|
264
|
+
class ProductExpr : public BaseExpr<ProductExpr<Arg0,Arg1> >
|
|
265
|
+
{
|
|
266
|
+
public:
|
|
267
|
+
ProductExpr(const Arg0& arg0, const Arg1& arg1) : m_arg0(arg0), m_arg1(arg1) {}
|
|
268
|
+
|
|
269
|
+
template<typename T>
|
|
270
|
+
Index eval_impl(const T& values) const { return m_arg0.eval_impl(values) * m_arg1.eval_impl(values); }
|
|
271
|
+
protected:
|
|
272
|
+
Arg0 m_arg0;
|
|
273
|
+
Arg1 m_arg1;
|
|
274
|
+
};
|
|
275
|
+
|
|
276
|
+
template<typename Arg0, typename Arg1>
|
|
277
|
+
class QuotientExpr : public BaseExpr<QuotientExpr<Arg0,Arg1> >
|
|
278
|
+
{
|
|
279
|
+
public:
|
|
280
|
+
QuotientExpr(const Arg0& arg0, const Arg1& arg1) : m_arg0(arg0), m_arg1(arg1) {}
|
|
281
|
+
|
|
282
|
+
template<typename T>
|
|
283
|
+
Index eval_impl(const T& values) const { return m_arg0.eval_impl(values) / m_arg1.eval_impl(values); }
|
|
284
|
+
protected:
|
|
285
|
+
Arg0 m_arg0;
|
|
286
|
+
Arg1 m_arg1;
|
|
287
|
+
};
|
|
288
|
+
|
|
289
|
+
} // end namespace symbolic
|
|
290
|
+
|
|
291
|
+
} // end namespace Eigen
|
|
292
|
+
|
|
293
|
+
#endif // EIGEN_SYMBOLIC_INDEX_H
|
|
@@ -34,6 +34,26 @@ inline IndexDest convert_index(const IndexSrc& idx) {
|
|
|
34
34
|
return IndexDest(idx);
|
|
35
35
|
}
|
|
36
36
|
|
|
37
|
+
// true if T can be considered as an integral index (i.e., and integral type or enum)
|
|
38
|
+
template<typename T> struct is_valid_index_type
|
|
39
|
+
{
|
|
40
|
+
enum { value =
|
|
41
|
+
#if EIGEN_HAS_TYPE_TRAITS
|
|
42
|
+
internal::is_integral<T>::value || std::is_enum<T>::value
|
|
43
|
+
#elif EIGEN_COMP_MSVC
|
|
44
|
+
internal::is_integral<T>::value || __is_enum(T)
|
|
45
|
+
#else
|
|
46
|
+
// without C++11, we use is_convertible to Index instead of is_integral in order to treat enums as Index.
|
|
47
|
+
internal::is_convertible<T,Index>::value && !internal::is_same<T,float>::value && !is_same<T,double>::value
|
|
48
|
+
#endif
|
|
49
|
+
};
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
// true if both types are not valid index types
|
|
53
|
+
template<typename RowIndices, typename ColIndices>
|
|
54
|
+
struct valid_indexed_view_overload {
|
|
55
|
+
enum { value = !(internal::is_valid_index_type<RowIndices>::value && internal::is_valid_index_type<ColIndices>::value) };
|
|
56
|
+
};
|
|
37
57
|
|
|
38
58
|
// promote_scalar_arg is an helper used in operation between an expression and a scalar, like:
|
|
39
59
|
// expression * scalar
|
|
@@ -90,6 +110,9 @@ class no_assignment_operator
|
|
|
90
110
|
{
|
|
91
111
|
private:
|
|
92
112
|
no_assignment_operator& operator=(const no_assignment_operator&);
|
|
113
|
+
protected:
|
|
114
|
+
EIGEN_DEFAULT_COPY_CONSTRUCTOR(no_assignment_operator)
|
|
115
|
+
EIGEN_DEFAULT_EMPTY_CONSTRUCTOR_AND_DESTRUCTOR(no_assignment_operator)
|
|
93
116
|
};
|
|
94
117
|
|
|
95
118
|
/** \internal return the index type with the largest number of bits */
|
|
@@ -106,19 +129,23 @@ struct promote_index_type
|
|
|
106
129
|
template<typename T, int Value> class variable_if_dynamic
|
|
107
130
|
{
|
|
108
131
|
public:
|
|
109
|
-
|
|
132
|
+
EIGEN_DEFAULT_EMPTY_CONSTRUCTOR_AND_DESTRUCTOR(variable_if_dynamic)
|
|
110
133
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE explicit variable_if_dynamic(T v) { EIGEN_ONLY_USED_FOR_DEBUG(v); eigen_assert(v == T(Value)); }
|
|
111
|
-
EIGEN_DEVICE_FUNC static EIGEN_STRONG_INLINE
|
|
112
|
-
|
|
134
|
+
EIGEN_DEVICE_FUNC static EIGEN_STRONG_INLINE EIGEN_CONSTEXPR
|
|
135
|
+
T value() { return T(Value); }
|
|
136
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE EIGEN_CONSTEXPR
|
|
137
|
+
operator T() const { return T(Value); }
|
|
138
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
|
139
|
+
void setValue(T v) const { EIGEN_ONLY_USED_FOR_DEBUG(v); eigen_assert(v == T(Value)); }
|
|
113
140
|
};
|
|
114
141
|
|
|
115
142
|
template<typename T> class variable_if_dynamic<T, Dynamic>
|
|
116
143
|
{
|
|
117
144
|
T m_value;
|
|
118
|
-
EIGEN_DEVICE_FUNC variable_if_dynamic() { eigen_assert(false); }
|
|
119
145
|
public:
|
|
120
|
-
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE explicit variable_if_dynamic(T value) : m_value(value) {}
|
|
146
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE explicit variable_if_dynamic(T value = 0) EIGEN_NO_THROW : m_value(value) {}
|
|
121
147
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE T value() const { return m_value; }
|
|
148
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE operator T() const { return m_value; }
|
|
122
149
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void setValue(T value) { m_value = value; }
|
|
123
150
|
};
|
|
124
151
|
|
|
@@ -129,8 +156,10 @@ template<typename T, int Value> class variable_if_dynamicindex
|
|
|
129
156
|
public:
|
|
130
157
|
EIGEN_EMPTY_STRUCT_CTOR(variable_if_dynamicindex)
|
|
131
158
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE explicit variable_if_dynamicindex(T v) { EIGEN_ONLY_USED_FOR_DEBUG(v); eigen_assert(v == T(Value)); }
|
|
132
|
-
EIGEN_DEVICE_FUNC static EIGEN_STRONG_INLINE
|
|
133
|
-
|
|
159
|
+
EIGEN_DEVICE_FUNC static EIGEN_STRONG_INLINE EIGEN_CONSTEXPR
|
|
160
|
+
T value() { return T(Value); }
|
|
161
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
|
162
|
+
void setValue(T) {}
|
|
134
163
|
};
|
|
135
164
|
|
|
136
165
|
template<typename T> class variable_if_dynamicindex<T, DynamicIndex>
|
|
@@ -155,16 +184,7 @@ template<typename T> struct functor_traits
|
|
|
155
184
|
|
|
156
185
|
template<typename T> struct packet_traits;
|
|
157
186
|
|
|
158
|
-
template<typename T> struct unpacket_traits
|
|
159
|
-
{
|
|
160
|
-
typedef T type;
|
|
161
|
-
typedef T half;
|
|
162
|
-
enum
|
|
163
|
-
{
|
|
164
|
-
size = 1,
|
|
165
|
-
alignment = 1
|
|
166
|
-
};
|
|
167
|
-
};
|
|
187
|
+
template<typename T> struct unpacket_traits;
|
|
168
188
|
|
|
169
189
|
template<int Size, typename PacketType,
|
|
170
190
|
bool Stop = Size==Dynamic || (Size%unpacket_traits<PacketType>::size)==0 || is_same<PacketType,typename unpacket_traits<PacketType>::half>::value>
|
|
@@ -383,7 +403,7 @@ template<typename T> struct plain_matrix_type_row_major
|
|
|
383
403
|
typedef Matrix<typename traits<T>::Scalar,
|
|
384
404
|
Rows,
|
|
385
405
|
Cols,
|
|
386
|
-
(MaxCols==1&&MaxRows!=1) ?
|
|
406
|
+
(MaxCols==1&&MaxRows!=1) ? ColMajor : RowMajor,
|
|
387
407
|
MaxRows,
|
|
388
408
|
MaxCols
|
|
389
409
|
> type;
|
|
@@ -400,7 +420,7 @@ struct ref_selector
|
|
|
400
420
|
T const&,
|
|
401
421
|
const T
|
|
402
422
|
>::type type;
|
|
403
|
-
|
|
423
|
+
|
|
404
424
|
typedef typename conditional<
|
|
405
425
|
bool(traits<T>::Flags & NestByRefBit),
|
|
406
426
|
T &,
|
|
@@ -438,7 +458,7 @@ template<typename T, int n, typename PlainObject = typename plain_object_eval<T>
|
|
|
438
458
|
{
|
|
439
459
|
enum {
|
|
440
460
|
ScalarReadCost = NumTraits<typename traits<T>::Scalar>::ReadCost,
|
|
441
|
-
CoeffReadCost = evaluator<T>::CoeffReadCost, // NOTE What if an evaluator evaluate itself into a
|
|
461
|
+
CoeffReadCost = evaluator<T>::CoeffReadCost, // NOTE What if an evaluator evaluate itself into a temporary?
|
|
442
462
|
// Then CoeffReadCost will be small (e.g., 1) but we still have to evaluate, especially if n>1.
|
|
443
463
|
// This situation is already taken care by the EvalBeforeNestingBit flag, which is turned ON
|
|
444
464
|
// for all evaluator creating a temporary. This flag is then propagated by the parent evaluators.
|
|
@@ -579,14 +599,14 @@ template<typename ExpressionType, typename Scalar = typename ExpressionType::Sca
|
|
|
579
599
|
struct plain_row_type
|
|
580
600
|
{
|
|
581
601
|
typedef Matrix<Scalar, 1, ExpressionType::ColsAtCompileTime,
|
|
582
|
-
ExpressionType::PlainObject::Options | RowMajor, 1, ExpressionType::MaxColsAtCompileTime> MatrixRowType;
|
|
602
|
+
int(ExpressionType::PlainObject::Options) | int(RowMajor), 1, ExpressionType::MaxColsAtCompileTime> MatrixRowType;
|
|
583
603
|
typedef Array<Scalar, 1, ExpressionType::ColsAtCompileTime,
|
|
584
|
-
ExpressionType::PlainObject::Options | RowMajor, 1, ExpressionType::MaxColsAtCompileTime> ArrayRowType;
|
|
604
|
+
int(ExpressionType::PlainObject::Options) | int(RowMajor), 1, ExpressionType::MaxColsAtCompileTime> ArrayRowType;
|
|
585
605
|
|
|
586
606
|
typedef typename conditional<
|
|
587
607
|
is_same< typename traits<ExpressionType>::XprKind, MatrixXpr >::value,
|
|
588
608
|
MatrixRowType,
|
|
589
|
-
ArrayRowType
|
|
609
|
+
ArrayRowType
|
|
590
610
|
>::type type;
|
|
591
611
|
};
|
|
592
612
|
|
|
@@ -601,7 +621,7 @@ struct plain_col_type
|
|
|
601
621
|
typedef typename conditional<
|
|
602
622
|
is_same< typename traits<ExpressionType>::XprKind, MatrixXpr >::value,
|
|
603
623
|
MatrixColType,
|
|
604
|
-
ArrayColType
|
|
624
|
+
ArrayColType
|
|
605
625
|
>::type type;
|
|
606
626
|
};
|
|
607
627
|
|
|
@@ -617,7 +637,7 @@ struct plain_diag_type
|
|
|
617
637
|
typedef typename conditional<
|
|
618
638
|
is_same< typename traits<ExpressionType>::XprKind, MatrixXpr >::value,
|
|
619
639
|
MatrixDiagType,
|
|
620
|
-
ArrayDiagType
|
|
640
|
+
ArrayDiagType
|
|
621
641
|
>::type type;
|
|
622
642
|
};
|
|
623
643
|
|
|
@@ -654,24 +674,39 @@ template<typename T> struct is_diagonal<DiagonalWrapper<T> >
|
|
|
654
674
|
template<typename T, int S> struct is_diagonal<DiagonalMatrix<T,S> >
|
|
655
675
|
{ enum { ret = true }; };
|
|
656
676
|
|
|
677
|
+
|
|
678
|
+
template<typename T> struct is_identity
|
|
679
|
+
{ enum { value = false }; };
|
|
680
|
+
|
|
681
|
+
template<typename T> struct is_identity<CwiseNullaryOp<internal::scalar_identity_op<typename T::Scalar>, T> >
|
|
682
|
+
{ enum { value = true }; };
|
|
683
|
+
|
|
684
|
+
|
|
657
685
|
template<typename S1, typename S2> struct glue_shapes;
|
|
658
686
|
template<> struct glue_shapes<DenseShape,TriangularShape> { typedef TriangularShape type; };
|
|
659
687
|
|
|
660
688
|
template<typename T1, typename T2>
|
|
661
|
-
|
|
689
|
+
struct possibly_same_dense {
|
|
690
|
+
enum { value = has_direct_access<T1>::ret && has_direct_access<T2>::ret && is_same<typename T1::Scalar,typename T2::Scalar>::value };
|
|
691
|
+
};
|
|
692
|
+
|
|
693
|
+
template<typename T1, typename T2>
|
|
694
|
+
EIGEN_DEVICE_FUNC
|
|
695
|
+
bool is_same_dense(const T1 &mat1, const T2 &mat2, typename enable_if<possibly_same_dense<T1,T2>::value>::type * = 0)
|
|
662
696
|
{
|
|
663
697
|
return (mat1.data()==mat2.data()) && (mat1.innerStride()==mat2.innerStride()) && (mat1.outerStride()==mat2.outerStride());
|
|
664
698
|
}
|
|
665
699
|
|
|
666
700
|
template<typename T1, typename T2>
|
|
667
|
-
|
|
701
|
+
EIGEN_DEVICE_FUNC
|
|
702
|
+
bool is_same_dense(const T1 &, const T2 &, typename enable_if<!possibly_same_dense<T1,T2>::value>::type * = 0)
|
|
668
703
|
{
|
|
669
704
|
return false;
|
|
670
705
|
}
|
|
671
706
|
|
|
672
707
|
// Internal helper defining the cost of a scalar division for the type T.
|
|
673
708
|
// The default heuristic can be specialized for each scalar type and architecture.
|
|
674
|
-
template<typename T,bool Vectorized=false,typename
|
|
709
|
+
template<typename T,bool Vectorized=false,typename EnableIf = void>
|
|
675
710
|
struct scalar_div_cost {
|
|
676
711
|
enum { value = 8*NumTraits<T>::MulCost };
|
|
677
712
|
};
|
|
@@ -718,7 +753,7 @@ std::string demangle_flags(int f)
|
|
|
718
753
|
if(f&DirectAccessBit) res += " | Direct";
|
|
719
754
|
if(f&NestByRefBit) res += " | NestByRef";
|
|
720
755
|
if(f&NoPreferredStorageOrderBit) res += " | NoPreferredStorageOrderBit";
|
|
721
|
-
|
|
756
|
+
|
|
722
757
|
return res;
|
|
723
758
|
}
|
|
724
759
|
#endif
|
|
@@ -815,7 +850,7 @@ struct ScalarBinaryOpTraits<void,void,BinaryOp>
|
|
|
815
850
|
#define EIGEN_CHECK_BINARY_COMPATIBILIY(BINOP,LHS,RHS) \
|
|
816
851
|
EIGEN_STATIC_ASSERT((Eigen::internal::has_ReturnType<ScalarBinaryOpTraits<LHS, RHS,BINOP> >::value), \
|
|
817
852
|
YOU_MIXED_DIFFERENT_NUMERIC_TYPES__YOU_NEED_TO_USE_THE_CAST_METHOD_OF_MATRIXBASE_TO_CAST_NUMERIC_TYPES_EXPLICITLY)
|
|
818
|
-
|
|
853
|
+
|
|
819
854
|
} // end namespace Eigen
|
|
820
855
|
|
|
821
856
|
#endif // EIGEN_XPRHELPER_H
|
|
@@ -214,7 +214,7 @@ template<typename _MatrixType> class ComplexEigenSolver
|
|
|
214
214
|
|
|
215
215
|
/** \brief Reports whether previous computation was successful.
|
|
216
216
|
*
|
|
217
|
-
* \returns \c Success if computation was
|
|
217
|
+
* \returns \c Success if computation was successful, \c NoConvergence otherwise.
|
|
218
218
|
*/
|
|
219
219
|
ComputationInfo info() const
|
|
220
220
|
{
|
|
@@ -212,7 +212,7 @@ template<typename _MatrixType> class ComplexSchur
|
|
|
212
212
|
|
|
213
213
|
/** \brief Reports whether previous computation was successful.
|
|
214
214
|
*
|
|
215
|
-
* \returns \c Success if computation was
|
|
215
|
+
* \returns \c Success if computation was successful, \c NoConvergence otherwise.
|
|
216
216
|
*/
|
|
217
217
|
ComputationInfo info() const
|
|
218
218
|
{
|
|
@@ -300,10 +300,13 @@ typename ComplexSchur<MatrixType>::ComplexScalar ComplexSchur<MatrixType>::compu
|
|
|
300
300
|
ComplexScalar trace = t.coeff(0,0) + t.coeff(1,1);
|
|
301
301
|
ComplexScalar eival1 = (trace + disc) / RealScalar(2);
|
|
302
302
|
ComplexScalar eival2 = (trace - disc) / RealScalar(2);
|
|
303
|
-
|
|
304
|
-
|
|
303
|
+
RealScalar eival1_norm = numext::norm1(eival1);
|
|
304
|
+
RealScalar eival2_norm = numext::norm1(eival2);
|
|
305
|
+
// A division by zero can only occur if eival1==eival2==0.
|
|
306
|
+
// In this case, det==0, and all we have to do is checking that eival2_norm!=0
|
|
307
|
+
if(eival1_norm > eival2_norm)
|
|
305
308
|
eival2 = det / eival1;
|
|
306
|
-
else
|
|
309
|
+
else if(eival2_norm!=RealScalar(0))
|
|
307
310
|
eival1 = det / eival2;
|
|
308
311
|
|
|
309
312
|
// choose the eigenvalue closest to the bottom entry of the diagonal
|
|
@@ -110,7 +110,7 @@ template<typename _MatrixType> class EigenSolver
|
|
|
110
110
|
*
|
|
111
111
|
* \sa compute() for an example.
|
|
112
112
|
*/
|
|
113
|
-
EigenSolver() : m_eivec(), m_eivalues(), m_isInitialized(false), m_realSchur(), m_matT(), m_tmp() {}
|
|
113
|
+
EigenSolver() : m_eivec(), m_eivalues(), m_isInitialized(false), m_eigenvectorsOk(false), m_realSchur(), m_matT(), m_tmp() {}
|
|
114
114
|
|
|
115
115
|
/** \brief Default constructor with memory preallocation
|
|
116
116
|
*
|
|
@@ -277,7 +277,7 @@ template<typename _MatrixType> class EigenSolver
|
|
|
277
277
|
template<typename InputType>
|
|
278
278
|
EigenSolver& compute(const EigenBase<InputType>& matrix, bool computeEigenvectors = true);
|
|
279
279
|
|
|
280
|
-
/** \returns NumericalIssue if the input contains INF or NaN values or overflow
|
|
280
|
+
/** \returns NumericalIssue if the input contains INF or NaN values or overflow occurred. Returns Success otherwise. */
|
|
281
281
|
ComputationInfo info() const
|
|
282
282
|
{
|
|
283
283
|
eigen_assert(m_isInitialized && "EigenSolver is not initialized.");
|
|
@@ -121,7 +121,7 @@ class GeneralizedSelfAdjointEigenSolver : public SelfAdjointEigenSolver<_MatrixT
|
|
|
121
121
|
*
|
|
122
122
|
* \returns Reference to \c *this
|
|
123
123
|
*
|
|
124
|
-
*
|
|
124
|
+
* According to \p options, this function computes eigenvalues and (if requested)
|
|
125
125
|
* the eigenvectors of one of the following three generalized eigenproblems:
|
|
126
126
|
* - \c Ax_lBx: \f$ Ax = \lambda B x \f$
|
|
127
127
|
* - \c ABx_lx: \f$ ABx = \lambda x \f$
|