@smake/eigen 1.1.0 → 1.1.1
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/Eigen/AccelerateSupport +52 -0
- package/eigen/Eigen/Cholesky +18 -20
- package/eigen/Eigen/CholmodSupport +28 -28
- package/eigen/Eigen/Core +187 -120
- package/eigen/Eigen/Eigenvalues +16 -13
- package/eigen/Eigen/Geometry +18 -18
- package/eigen/Eigen/Householder +9 -7
- package/eigen/Eigen/IterativeLinearSolvers +8 -4
- package/eigen/Eigen/Jacobi +14 -13
- package/eigen/Eigen/KLUSupport +23 -21
- package/eigen/Eigen/LU +15 -16
- package/eigen/Eigen/MetisSupport +12 -12
- package/eigen/Eigen/OrderingMethods +54 -51
- package/eigen/Eigen/PaStiXSupport +23 -21
- package/eigen/Eigen/PardisoSupport +17 -14
- package/eigen/Eigen/QR +18 -20
- package/eigen/Eigen/QtAlignedMalloc +5 -12
- package/eigen/Eigen/SPQRSupport +21 -14
- package/eigen/Eigen/SVD +23 -17
- package/eigen/Eigen/Sparse +1 -2
- package/eigen/Eigen/SparseCholesky +18 -15
- package/eigen/Eigen/SparseCore +18 -17
- package/eigen/Eigen/SparseLU +9 -9
- package/eigen/Eigen/SparseQR +16 -14
- package/eigen/Eigen/StdDeque +5 -2
- package/eigen/Eigen/StdList +5 -2
- package/eigen/Eigen/StdVector +5 -2
- package/eigen/Eigen/SuperLUSupport +30 -24
- package/eigen/Eigen/ThreadPool +80 -0
- package/eigen/Eigen/UmfPackSupport +19 -17
- package/eigen/Eigen/Version +14 -0
- package/eigen/Eigen/src/AccelerateSupport/AccelerateSupport.h +423 -0
- package/eigen/Eigen/src/AccelerateSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Cholesky/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Cholesky/LDLT.h +366 -405
- package/eigen/Eigen/src/Cholesky/LLT.h +323 -367
- package/eigen/Eigen/src/Cholesky/LLT_LAPACKE.h +81 -56
- package/eigen/Eigen/src/CholmodSupport/CholmodSupport.h +585 -529
- package/eigen/Eigen/src/CholmodSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Core/ArithmeticSequence.h +143 -317
- package/eigen/Eigen/src/Core/Array.h +329 -370
- package/eigen/Eigen/src/Core/ArrayBase.h +190 -203
- package/eigen/Eigen/src/Core/ArrayWrapper.h +126 -170
- package/eigen/Eigen/src/Core/Assign.h +30 -40
- package/eigen/Eigen/src/Core/AssignEvaluator.h +651 -604
- package/eigen/Eigen/src/Core/Assign_MKL.h +125 -120
- package/eigen/Eigen/src/Core/BandMatrix.h +267 -282
- package/eigen/Eigen/src/Core/Block.h +371 -390
- package/eigen/Eigen/src/Core/CommaInitializer.h +85 -100
- package/eigen/Eigen/src/Core/ConditionEstimator.h +51 -53
- package/eigen/Eigen/src/Core/CoreEvaluators.h +1214 -937
- package/eigen/Eigen/src/Core/CoreIterators.h +72 -63
- package/eigen/Eigen/src/Core/CwiseBinaryOp.h +112 -129
- package/eigen/Eigen/src/Core/CwiseNullaryOp.h +676 -702
- package/eigen/Eigen/src/Core/CwiseTernaryOp.h +77 -103
- package/eigen/Eigen/src/Core/CwiseUnaryOp.h +55 -67
- package/eigen/Eigen/src/Core/CwiseUnaryView.h +127 -92
- package/eigen/Eigen/src/Core/DenseBase.h +630 -658
- package/eigen/Eigen/src/Core/DenseCoeffsBase.h +511 -628
- package/eigen/Eigen/src/Core/DenseStorage.h +511 -590
- package/eigen/Eigen/src/Core/DeviceWrapper.h +153 -0
- package/eigen/Eigen/src/Core/Diagonal.h +168 -207
- package/eigen/Eigen/src/Core/DiagonalMatrix.h +346 -317
- package/eigen/Eigen/src/Core/DiagonalProduct.h +12 -10
- package/eigen/Eigen/src/Core/Dot.h +167 -217
- package/eigen/Eigen/src/Core/EigenBase.h +74 -85
- package/eigen/Eigen/src/Core/Fill.h +138 -0
- package/eigen/Eigen/src/Core/FindCoeff.h +464 -0
- package/eigen/Eigen/src/Core/ForceAlignedAccess.h +90 -113
- package/eigen/Eigen/src/Core/Fuzzy.h +82 -105
- package/eigen/Eigen/src/Core/GeneralProduct.h +315 -261
- package/eigen/Eigen/src/Core/GenericPacketMath.h +1182 -520
- package/eigen/Eigen/src/Core/GlobalFunctions.h +193 -157
- package/eigen/Eigen/src/Core/IO.h +131 -156
- package/eigen/Eigen/src/Core/IndexedView.h +209 -125
- package/eigen/Eigen/src/Core/InnerProduct.h +260 -0
- package/eigen/Eigen/src/Core/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Core/Inverse.h +50 -59
- package/eigen/Eigen/src/Core/Map.h +123 -141
- package/eigen/Eigen/src/Core/MapBase.h +255 -282
- package/eigen/Eigen/src/Core/MathFunctions.h +1247 -1201
- package/eigen/Eigen/src/Core/MathFunctionsImpl.h +162 -99
- package/eigen/Eigen/src/Core/Matrix.h +463 -494
- package/eigen/Eigen/src/Core/MatrixBase.h +468 -470
- package/eigen/Eigen/src/Core/NestByValue.h +58 -52
- package/eigen/Eigen/src/Core/NoAlias.h +79 -86
- package/eigen/Eigen/src/Core/NumTraits.h +206 -206
- package/eigen/Eigen/src/Core/PartialReduxEvaluator.h +163 -142
- package/eigen/Eigen/src/Core/PermutationMatrix.h +461 -511
- package/eigen/Eigen/src/Core/PlainObjectBase.h +858 -972
- package/eigen/Eigen/src/Core/Product.h +246 -130
- package/eigen/Eigen/src/Core/ProductEvaluators.h +779 -671
- package/eigen/Eigen/src/Core/Random.h +153 -164
- package/eigen/Eigen/src/Core/RandomImpl.h +262 -0
- package/eigen/Eigen/src/Core/RealView.h +250 -0
- package/eigen/Eigen/src/Core/Redux.h +334 -314
- package/eigen/Eigen/src/Core/Ref.h +259 -257
- package/eigen/Eigen/src/Core/Replicate.h +92 -104
- package/eigen/Eigen/src/Core/Reshaped.h +215 -271
- package/eigen/Eigen/src/Core/ReturnByValue.h +47 -55
- package/eigen/Eigen/src/Core/Reverse.h +133 -148
- package/eigen/Eigen/src/Core/Select.h +68 -140
- package/eigen/Eigen/src/Core/SelfAdjointView.h +254 -290
- package/eigen/Eigen/src/Core/SelfCwiseBinaryOp.h +23 -20
- package/eigen/Eigen/src/Core/SkewSymmetricMatrix3.h +382 -0
- package/eigen/Eigen/src/Core/Solve.h +88 -102
- package/eigen/Eigen/src/Core/SolveTriangular.h +126 -124
- package/eigen/Eigen/src/Core/SolverBase.h +132 -133
- package/eigen/Eigen/src/Core/StableNorm.h +113 -147
- package/eigen/Eigen/src/Core/StlIterators.h +404 -248
- package/eigen/Eigen/src/Core/Stride.h +90 -92
- package/eigen/Eigen/src/Core/Swap.h +70 -39
- package/eigen/Eigen/src/Core/Transpose.h +258 -295
- package/eigen/Eigen/src/Core/Transpositions.h +270 -333
- package/eigen/Eigen/src/Core/TriangularMatrix.h +642 -743
- package/eigen/Eigen/src/Core/VectorBlock.h +59 -72
- package/eigen/Eigen/src/Core/VectorwiseOp.h +653 -704
- package/eigen/Eigen/src/Core/Visitor.h +464 -308
- package/eigen/Eigen/src/Core/arch/AVX/Complex.h +380 -187
- package/eigen/Eigen/src/Core/arch/AVX/MathFunctions.h +65 -163
- package/eigen/Eigen/src/Core/arch/AVX/PacketMath.h +2145 -638
- package/eigen/Eigen/src/Core/arch/AVX/Reductions.h +353 -0
- package/eigen/Eigen/src/Core/arch/AVX/TypeCasting.h +253 -60
- package/eigen/Eigen/src/Core/arch/AVX512/Complex.h +278 -228
- package/eigen/Eigen/src/Core/arch/AVX512/GemmKernel.h +1245 -0
- package/eigen/Eigen/src/Core/arch/AVX512/MathFunctions.h +48 -269
- package/eigen/Eigen/src/Core/arch/AVX512/MathFunctionsFP16.h +75 -0
- package/eigen/Eigen/src/Core/arch/AVX512/PacketMath.h +1597 -754
- package/eigen/Eigen/src/Core/arch/AVX512/PacketMathFP16.h +1413 -0
- package/eigen/Eigen/src/Core/arch/AVX512/Reductions.h +297 -0
- package/eigen/Eigen/src/Core/arch/AVX512/TrsmKernel.h +1167 -0
- package/eigen/Eigen/src/Core/arch/AVX512/TrsmUnrolls.inc +1219 -0
- package/eigen/Eigen/src/Core/arch/AVX512/TypeCasting.h +229 -41
- package/eigen/Eigen/src/Core/arch/AVX512/TypeCastingFP16.h +130 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/Complex.h +420 -184
- package/eigen/Eigen/src/Core/arch/AltiVec/MathFunctions.h +40 -49
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProduct.h +2962 -2213
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h +196 -212
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h +713 -441
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMAbfloat16.h +742 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixVectorProduct.inc +2818 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/PacketMath.h +2380 -1362
- package/eigen/Eigen/src/Core/arch/AltiVec/TypeCasting.h +153 -0
- package/eigen/Eigen/src/Core/arch/Default/BFloat16.h +390 -224
- package/eigen/Eigen/src/Core/arch/Default/ConjHelper.h +78 -67
- package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h +1784 -799
- package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h +167 -50
- package/eigen/Eigen/src/Core/arch/Default/Half.h +528 -379
- package/eigen/Eigen/src/Core/arch/Default/Settings.h +10 -12
- package/eigen/Eigen/src/Core/arch/GPU/Complex.h +244 -0
- package/eigen/Eigen/src/Core/arch/GPU/MathFunctions.h +41 -40
- package/eigen/Eigen/src/Core/arch/GPU/PacketMath.h +550 -523
- package/eigen/Eigen/src/Core/arch/GPU/Tuple.h +268 -0
- package/eigen/Eigen/src/Core/arch/GPU/TypeCasting.h +27 -30
- package/eigen/Eigen/src/Core/arch/HIP/hcc/math_constants.h +8 -8
- package/eigen/Eigen/src/Core/arch/HVX/PacketMath.h +1088 -0
- package/eigen/Eigen/src/Core/arch/LSX/Complex.h +520 -0
- package/eigen/Eigen/src/Core/arch/LSX/GeneralBlockPanelKernel.h +23 -0
- package/eigen/Eigen/src/Core/arch/LSX/MathFunctions.h +43 -0
- package/eigen/Eigen/src/Core/arch/LSX/PacketMath.h +2866 -0
- package/eigen/Eigen/src/Core/arch/LSX/TypeCasting.h +526 -0
- package/eigen/Eigen/src/Core/arch/MSA/Complex.h +54 -82
- package/eigen/Eigen/src/Core/arch/MSA/MathFunctions.h +84 -92
- package/eigen/Eigen/src/Core/arch/MSA/PacketMath.h +51 -47
- package/eigen/Eigen/src/Core/arch/NEON/Complex.h +454 -306
- package/eigen/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h +175 -115
- package/eigen/Eigen/src/Core/arch/NEON/MathFunctions.h +23 -30
- package/eigen/Eigen/src/Core/arch/NEON/PacketMath.h +4366 -2857
- package/eigen/Eigen/src/Core/arch/NEON/TypeCasting.h +616 -393
- package/eigen/Eigen/src/Core/arch/NEON/UnaryFunctors.h +57 -0
- package/eigen/Eigen/src/Core/arch/SSE/Complex.h +350 -198
- package/eigen/Eigen/src/Core/arch/SSE/MathFunctions.h +38 -149
- package/eigen/Eigen/src/Core/arch/SSE/PacketMath.h +1791 -912
- package/eigen/Eigen/src/Core/arch/SSE/Reductions.h +324 -0
- package/eigen/Eigen/src/Core/arch/SSE/TypeCasting.h +128 -40
- package/eigen/Eigen/src/Core/arch/SVE/MathFunctions.h +10 -6
- package/eigen/Eigen/src/Core/arch/SVE/PacketMath.h +156 -234
- package/eigen/Eigen/src/Core/arch/SVE/TypeCasting.h +6 -3
- package/eigen/Eigen/src/Core/arch/SYCL/InteropHeaders.h +27 -32
- package/eigen/Eigen/src/Core/arch/SYCL/MathFunctions.h +119 -117
- package/eigen/Eigen/src/Core/arch/SYCL/PacketMath.h +325 -419
- package/eigen/Eigen/src/Core/arch/SYCL/TypeCasting.h +15 -17
- package/eigen/Eigen/src/Core/arch/ZVector/Complex.h +325 -181
- package/eigen/Eigen/src/Core/arch/ZVector/MathFunctions.h +94 -83
- package/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h +811 -458
- package/eigen/Eigen/src/Core/functors/AssignmentFunctors.h +121 -124
- package/eigen/Eigen/src/Core/functors/BinaryFunctors.h +576 -370
- package/eigen/Eigen/src/Core/functors/NullaryFunctors.h +194 -109
- package/eigen/Eigen/src/Core/functors/StlFunctors.h +95 -112
- package/eigen/Eigen/src/Core/functors/TernaryFunctors.h +34 -7
- package/eigen/Eigen/src/Core/functors/UnaryFunctors.h +1038 -749
- package/eigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h +1883 -1375
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix.h +312 -370
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +189 -176
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h +84 -81
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h +154 -73
- package/eigen/Eigen/src/Core/products/GeneralMatrixVector.h +292 -337
- package/eigen/Eigen/src/Core/products/GeneralMatrixVector_BLAS.h +80 -77
- package/eigen/Eigen/src/Core/products/Parallelizer.h +207 -105
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +327 -388
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h +206 -224
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector.h +138 -147
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector_BLAS.h +58 -61
- package/eigen/Eigen/src/Core/products/SelfadjointProduct.h +71 -71
- package/eigen/Eigen/src/Core/products/SelfadjointRank2Update.h +48 -47
- package/eigen/Eigen/src/Core/products/TriangularMatrixMatrix.h +294 -369
- package/eigen/Eigen/src/Core/products/TriangularMatrixMatrix_BLAS.h +246 -238
- package/eigen/Eigen/src/Core/products/TriangularMatrixVector.h +244 -247
- package/eigen/Eigen/src/Core/products/TriangularMatrixVector_BLAS.h +212 -192
- package/eigen/Eigen/src/Core/products/TriangularSolverMatrix.h +328 -277
- package/eigen/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h +108 -109
- package/eigen/Eigen/src/Core/products/TriangularSolverVector.h +68 -94
- package/eigen/Eigen/src/Core/util/Assert.h +158 -0
- package/eigen/Eigen/src/Core/util/BlasUtil.h +342 -303
- package/eigen/Eigen/src/Core/util/ConfigureVectorization.h +348 -317
- package/eigen/Eigen/src/Core/util/Constants.h +297 -262
- package/eigen/Eigen/src/Core/util/DisableStupidWarnings.h +130 -90
- package/eigen/Eigen/src/Core/util/EmulateArray.h +270 -0
- package/eigen/Eigen/src/Core/util/ForwardDeclarations.h +449 -247
- package/eigen/Eigen/src/Core/util/GpuHipCudaDefines.inc +101 -0
- package/eigen/Eigen/src/Core/util/GpuHipCudaUndefines.inc +45 -0
- package/eigen/Eigen/src/Core/util/IndexedViewHelper.h +417 -116
- package/eigen/Eigen/src/Core/util/IntegralConstant.h +211 -204
- package/eigen/Eigen/src/Core/util/MKL_support.h +39 -37
- package/eigen/Eigen/src/Core/util/Macros.h +655 -773
- package/eigen/Eigen/src/Core/util/MaxSizeVector.h +139 -0
- package/eigen/Eigen/src/Core/util/Memory.h +970 -748
- package/eigen/Eigen/src/Core/util/Meta.h +581 -633
- package/eigen/Eigen/src/Core/util/MoreMeta.h +638 -0
- package/eigen/Eigen/src/Core/util/ReenableStupidWarnings.h +32 -19
- package/eigen/Eigen/src/Core/util/ReshapedHelper.h +17 -17
- package/eigen/Eigen/src/Core/util/Serializer.h +209 -0
- package/eigen/Eigen/src/Core/util/StaticAssert.h +50 -166
- package/eigen/Eigen/src/Core/util/SymbolicIndex.h +377 -225
- package/eigen/Eigen/src/Core/util/XprHelper.h +784 -547
- package/eigen/Eigen/src/Eigenvalues/ComplexEigenSolver.h +246 -277
- package/eigen/Eigen/src/Eigenvalues/ComplexSchur.h +299 -319
- package/eigen/Eigen/src/Eigenvalues/ComplexSchur_LAPACKE.h +52 -48
- package/eigen/Eigen/src/Eigenvalues/EigenSolver.h +413 -456
- package/eigen/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h +309 -325
- package/eigen/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h +157 -171
- package/eigen/Eigen/src/Eigenvalues/HessenbergDecomposition.h +292 -310
- package/eigen/Eigen/src/Eigenvalues/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h +89 -105
- package/eigen/Eigen/src/Eigenvalues/RealQZ.h +537 -607
- package/eigen/Eigen/src/Eigenvalues/RealSchur.h +342 -381
- package/eigen/Eigen/src/Eigenvalues/RealSchur_LAPACKE.h +41 -35
- package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +541 -595
- package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h +47 -44
- package/eigen/Eigen/src/Eigenvalues/Tridiagonalization.h +430 -462
- package/eigen/Eigen/src/Geometry/AlignedBox.h +226 -227
- package/eigen/Eigen/src/Geometry/AngleAxis.h +131 -133
- package/eigen/Eigen/src/Geometry/EulerAngles.h +163 -74
- package/eigen/Eigen/src/Geometry/Homogeneous.h +285 -333
- package/eigen/Eigen/src/Geometry/Hyperplane.h +151 -160
- package/eigen/Eigen/src/Geometry/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Geometry/OrthoMethods.h +168 -146
- package/eigen/Eigen/src/Geometry/ParametrizedLine.h +127 -127
- package/eigen/Eigen/src/Geometry/Quaternion.h +566 -506
- package/eigen/Eigen/src/Geometry/Rotation2D.h +107 -105
- package/eigen/Eigen/src/Geometry/RotationBase.h +148 -145
- package/eigen/Eigen/src/Geometry/Scaling.h +113 -106
- package/eigen/Eigen/src/Geometry/Transform.h +858 -936
- package/eigen/Eigen/src/Geometry/Translation.h +94 -92
- package/eigen/Eigen/src/Geometry/Umeyama.h +79 -84
- package/eigen/Eigen/src/Geometry/arch/Geometry_SIMD.h +90 -104
- package/eigen/Eigen/src/Householder/BlockHouseholder.h +51 -46
- package/eigen/Eigen/src/Householder/Householder.h +102 -124
- package/eigen/Eigen/src/Householder/HouseholderSequence.h +412 -453
- package/eigen/Eigen/src/Householder/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +149 -162
- package/eigen/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +124 -119
- package/eigen/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +92 -104
- package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +251 -243
- package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +224 -228
- package/eigen/Eigen/src/IterativeLinearSolvers/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +178 -227
- package/eigen/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h +79 -84
- package/eigen/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h +54 -60
- package/eigen/Eigen/src/Jacobi/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Jacobi/Jacobi.h +252 -308
- package/eigen/Eigen/src/KLUSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/KLUSupport/KLUSupport.h +208 -227
- package/eigen/Eigen/src/LU/Determinant.h +50 -69
- package/eigen/Eigen/src/LU/FullPivLU.h +545 -596
- package/eigen/Eigen/src/LU/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/LU/InverseImpl.h +206 -285
- package/eigen/Eigen/src/LU/PartialPivLU.h +390 -428
- package/eigen/Eigen/src/LU/PartialPivLU_LAPACKE.h +54 -40
- package/eigen/Eigen/src/LU/arch/InverseSize4.h +72 -70
- package/eigen/Eigen/src/MetisSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/MetisSupport/MetisSupport.h +81 -93
- package/eigen/Eigen/src/OrderingMethods/Amd.h +243 -265
- package/eigen/Eigen/src/OrderingMethods/Eigen_Colamd.h +831 -1004
- package/eigen/Eigen/src/OrderingMethods/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/OrderingMethods/Ordering.h +112 -119
- package/eigen/Eigen/src/PaStiXSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/PaStiXSupport/PaStiXSupport.h +524 -570
- package/eigen/Eigen/src/PardisoSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/PardisoSupport/PardisoSupport.h +385 -430
- package/eigen/Eigen/src/QR/ColPivHouseholderQR.h +479 -479
- package/eigen/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h +120 -56
- package/eigen/Eigen/src/QR/CompleteOrthogonalDecomposition.h +166 -153
- package/eigen/Eigen/src/QR/FullPivHouseholderQR.h +495 -475
- package/eigen/Eigen/src/QR/HouseholderQR.h +394 -285
- package/eigen/Eigen/src/QR/HouseholderQR_LAPACKE.h +32 -23
- package/eigen/Eigen/src/QR/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SPQRSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h +244 -264
- package/eigen/Eigen/src/SVD/BDCSVD.h +817 -713
- package/eigen/Eigen/src/SVD/BDCSVD_LAPACKE.h +174 -0
- package/eigen/Eigen/src/SVD/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SVD/JacobiSVD.h +577 -543
- package/eigen/Eigen/src/SVD/JacobiSVD_LAPACKE.h +85 -49
- package/eigen/Eigen/src/SVD/SVDBase.h +242 -182
- package/eigen/Eigen/src/SVD/UpperBidiagonalization.h +200 -235
- package/eigen/Eigen/src/SparseCholesky/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky.h +765 -594
- package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +308 -94
- package/eigen/Eigen/src/SparseCore/AmbiVector.h +202 -251
- package/eigen/Eigen/src/SparseCore/CompressedStorage.h +184 -252
- package/eigen/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +134 -178
- package/eigen/Eigen/src/SparseCore/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SparseCore/SparseAssign.h +149 -140
- package/eigen/Eigen/src/SparseCore/SparseBlock.h +403 -440
- package/eigen/Eigen/src/SparseCore/SparseColEtree.h +100 -112
- package/eigen/Eigen/src/SparseCore/SparseCompressedBase.h +525 -303
- package/eigen/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +555 -339
- package/eigen/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +100 -108
- package/eigen/Eigen/src/SparseCore/SparseDenseProduct.h +169 -197
- package/eigen/Eigen/src/SparseCore/SparseDiagonalProduct.h +71 -71
- package/eigen/Eigen/src/SparseCore/SparseDot.h +49 -47
- package/eigen/Eigen/src/SparseCore/SparseFuzzy.h +13 -11
- package/eigen/Eigen/src/SparseCore/SparseMap.h +243 -253
- package/eigen/Eigen/src/SparseCore/SparseMatrix.h +1603 -1245
- package/eigen/Eigen/src/SparseCore/SparseMatrixBase.h +403 -350
- package/eigen/Eigen/src/SparseCore/SparsePermutation.h +186 -115
- package/eigen/Eigen/src/SparseCore/SparseProduct.h +94 -97
- package/eigen/Eigen/src/SparseCore/SparseRedux.h +22 -24
- package/eigen/Eigen/src/SparseCore/SparseRef.h +268 -295
- package/eigen/Eigen/src/SparseCore/SparseSelfAdjointView.h +370 -416
- package/eigen/Eigen/src/SparseCore/SparseSolverBase.h +78 -87
- package/eigen/Eigen/src/SparseCore/SparseSparseProductWithPruning.h +81 -95
- package/eigen/Eigen/src/SparseCore/SparseTranspose.h +62 -71
- package/eigen/Eigen/src/SparseCore/SparseTriangularView.h +132 -144
- package/eigen/Eigen/src/SparseCore/SparseUtil.h +138 -115
- package/eigen/Eigen/src/SparseCore/SparseVector.h +426 -372
- package/eigen/Eigen/src/SparseCore/SparseView.h +164 -193
- package/eigen/Eigen/src/SparseCore/TriangularSolver.h +129 -170
- package/eigen/Eigen/src/SparseLU/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SparseLU/SparseLU.h +756 -710
- package/eigen/Eigen/src/SparseLU/SparseLUImpl.h +61 -48
- package/eigen/Eigen/src/SparseLU/SparseLU_Memory.h +102 -118
- package/eigen/Eigen/src/SparseLU/SparseLU_Structs.h +38 -35
- package/eigen/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h +245 -301
- package/eigen/Eigen/src/SparseLU/SparseLU_Utils.h +44 -49
- package/eigen/Eigen/src/SparseLU/SparseLU_column_bmod.h +104 -108
- package/eigen/Eigen/src/SparseLU/SparseLU_column_dfs.h +89 -100
- package/eigen/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h +57 -58
- package/eigen/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h +43 -55
- package/eigen/Eigen/src/SparseLU/SparseLU_kernel_bmod.h +74 -71
- package/eigen/Eigen/src/SparseLU/SparseLU_panel_bmod.h +124 -132
- package/eigen/Eigen/src/SparseLU/SparseLU_panel_dfs.h +136 -159
- package/eigen/Eigen/src/SparseLU/SparseLU_pivotL.h +51 -52
- package/eigen/Eigen/src/SparseLU/SparseLU_pruneL.h +67 -73
- package/eigen/Eigen/src/SparseLU/SparseLU_relax_snode.h +24 -26
- package/eigen/Eigen/src/SparseQR/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SparseQR/SparseQR.h +450 -502
- package/eigen/Eigen/src/StlSupport/StdDeque.h +28 -93
- package/eigen/Eigen/src/StlSupport/StdList.h +28 -84
- package/eigen/Eigen/src/StlSupport/StdVector.h +28 -108
- package/eigen/Eigen/src/StlSupport/details.h +48 -50
- package/eigen/Eigen/src/SuperLUSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SuperLUSupport/SuperLUSupport.h +634 -730
- package/eigen/Eigen/src/ThreadPool/Barrier.h +70 -0
- package/eigen/Eigen/src/ThreadPool/CoreThreadPoolDevice.h +336 -0
- package/eigen/Eigen/src/ThreadPool/EventCount.h +241 -0
- package/eigen/Eigen/src/ThreadPool/ForkJoin.h +140 -0
- package/eigen/Eigen/src/ThreadPool/InternalHeaderCheck.h +4 -0
- package/eigen/Eigen/src/ThreadPool/NonBlockingThreadPool.h +587 -0
- package/eigen/Eigen/src/ThreadPool/RunQueue.h +230 -0
- package/eigen/Eigen/src/ThreadPool/ThreadCancel.h +21 -0
- package/eigen/Eigen/src/ThreadPool/ThreadEnvironment.h +43 -0
- package/eigen/Eigen/src/ThreadPool/ThreadLocal.h +289 -0
- package/eigen/Eigen/src/ThreadPool/ThreadPoolInterface.h +50 -0
- package/eigen/Eigen/src/ThreadPool/ThreadYield.h +16 -0
- package/eigen/Eigen/src/UmfPackSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/UmfPackSupport/UmfPackSupport.h +428 -464
- package/eigen/Eigen/src/misc/Image.h +41 -43
- package/eigen/Eigen/src/misc/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/misc/Kernel.h +39 -41
- package/eigen/Eigen/src/misc/RealSvd2x2.h +19 -21
- package/eigen/Eigen/src/misc/blas.h +83 -426
- package/eigen/Eigen/src/misc/lapacke.h +9972 -16179
- package/eigen/Eigen/src/misc/lapacke_helpers.h +163 -0
- package/eigen/Eigen/src/misc/lapacke_mangling.h +4 -5
- package/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.inc +344 -0
- package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.inc +544 -0
- package/eigen/Eigen/src/plugins/{BlockMethods.h → BlockMethods.inc} +434 -506
- package/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.inc +116 -0
- package/eigen/Eigen/src/plugins/{CommonCwiseUnaryOps.h → CommonCwiseUnaryOps.inc} +58 -68
- package/eigen/Eigen/src/plugins/IndexedViewMethods.inc +192 -0
- package/eigen/Eigen/src/plugins/InternalHeaderCheck.inc +3 -0
- package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.inc +331 -0
- package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.inc +118 -0
- package/eigen/Eigen/src/plugins/ReshapedMethods.inc +133 -0
- package/package.json +1 -1
- package/eigen/COPYING.APACHE +0 -203
- package/eigen/COPYING.BSD +0 -26
- package/eigen/COPYING.GPL +0 -674
- package/eigen/COPYING.LGPL +0 -502
- package/eigen/COPYING.MINPACK +0 -51
- package/eigen/COPYING.MPL2 +0 -373
- package/eigen/COPYING.README +0 -18
- package/eigen/Eigen/src/Core/BooleanRedux.h +0 -162
- package/eigen/Eigen/src/Core/arch/CUDA/Complex.h +0 -258
- package/eigen/Eigen/src/Core/arch/Default/TypeCasting.h +0 -120
- package/eigen/Eigen/src/Core/arch/SYCL/SyclMemoryModel.h +0 -694
- package/eigen/Eigen/src/Core/util/NonMPL2.h +0 -3
- package/eigen/Eigen/src/SparseCore/MappedSparseMatrix.h +0 -67
- package/eigen/Eigen/src/SparseLU/SparseLU_gemm_kernel.h +0 -280
- package/eigen/Eigen/src/misc/lapack.h +0 -152
- package/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.h +0 -358
- package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.h +0 -696
- package/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.h +0 -115
- package/eigen/Eigen/src/plugins/IndexedViewMethods.h +0 -262
- package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.h +0 -152
- package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.h +0 -95
- package/eigen/Eigen/src/plugins/ReshapedMethods.h +0 -149
- package/eigen/README.md +0 -5
|
@@ -11,305 +11,270 @@
|
|
|
11
11
|
#ifndef EIGEN_JACOBI_H
|
|
12
12
|
#define EIGEN_JACOBI_H
|
|
13
13
|
|
|
14
|
+
// IWYU pragma: private
|
|
15
|
+
#include "./InternalHeaderCheck.h"
|
|
16
|
+
|
|
14
17
|
namespace Eigen {
|
|
15
18
|
|
|
16
19
|
/** \ingroup Jacobi_Module
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
template<typename Scalar>
|
|
35
|
-
{
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
using numext::conj;
|
|
57
|
-
return JacobiRotation(m_c * other.m_c - conj(m_s) * other.m_s,
|
|
58
|
-
conj(m_c * conj(other.m_s) + conj(m_s) * conj(other.m_c)));
|
|
59
|
-
}
|
|
20
|
+
* \jacobi_module
|
|
21
|
+
* \class JacobiRotation
|
|
22
|
+
* \brief Rotation given by a cosine-sine pair.
|
|
23
|
+
*
|
|
24
|
+
* This class represents a Jacobi or Givens rotation.
|
|
25
|
+
* This is a 2D rotation in the plane \c J of angle \f$ \theta \f$ defined by
|
|
26
|
+
* its cosine \c c and sine \c s as follow:
|
|
27
|
+
* \f$ J = \left ( \begin{array}{cc} c & \overline s \\ -s & \overline c \end{array} \right ) \f$
|
|
28
|
+
*
|
|
29
|
+
* You can apply the respective counter-clockwise rotation to a column vector \c v by
|
|
30
|
+
* applying its adjoint on the left: \f$ v = J^* v \f$ that translates to the following Eigen code:
|
|
31
|
+
* \code
|
|
32
|
+
* v.applyOnTheLeft(J.adjoint());
|
|
33
|
+
* \endcode
|
|
34
|
+
*
|
|
35
|
+
* \sa MatrixBase::applyOnTheLeft(), MatrixBase::applyOnTheRight()
|
|
36
|
+
*/
|
|
37
|
+
template <typename Scalar>
|
|
38
|
+
class JacobiRotation {
|
|
39
|
+
public:
|
|
40
|
+
typedef typename NumTraits<Scalar>::Real RealScalar;
|
|
41
|
+
|
|
42
|
+
/** Default constructor without any initialization. */
|
|
43
|
+
EIGEN_DEVICE_FUNC JacobiRotation() {}
|
|
44
|
+
|
|
45
|
+
/** Construct a planar rotation from a cosine-sine pair (\a c, \c s). */
|
|
46
|
+
EIGEN_DEVICE_FUNC JacobiRotation(const Scalar& c, const Scalar& s) : m_c(c), m_s(s) {}
|
|
47
|
+
|
|
48
|
+
EIGEN_DEVICE_FUNC Scalar& c() { return m_c; }
|
|
49
|
+
EIGEN_DEVICE_FUNC Scalar c() const { return m_c; }
|
|
50
|
+
EIGEN_DEVICE_FUNC Scalar& s() { return m_s; }
|
|
51
|
+
EIGEN_DEVICE_FUNC Scalar s() const { return m_s; }
|
|
52
|
+
|
|
53
|
+
/** Concatenates two planar rotation */
|
|
54
|
+
EIGEN_DEVICE_FUNC JacobiRotation operator*(const JacobiRotation& other) {
|
|
55
|
+
using numext::conj;
|
|
56
|
+
return JacobiRotation(m_c * other.m_c - conj(m_s) * other.m_s,
|
|
57
|
+
conj(m_c * conj(other.m_s) + conj(m_s) * conj(other.m_c)));
|
|
58
|
+
}
|
|
60
59
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
60
|
+
/** Returns the transposed transformation */
|
|
61
|
+
EIGEN_DEVICE_FUNC JacobiRotation transpose() const {
|
|
62
|
+
using numext::conj;
|
|
63
|
+
return JacobiRotation(m_c, -conj(m_s));
|
|
64
|
+
}
|
|
64
65
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
66
|
+
/** Returns the adjoint transformation */
|
|
67
|
+
EIGEN_DEVICE_FUNC JacobiRotation adjoint() const {
|
|
68
|
+
using numext::conj;
|
|
69
|
+
return JacobiRotation(conj(m_c), -m_s);
|
|
70
|
+
}
|
|
68
71
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
EIGEN_DEVICE_FUNC
|
|
73
|
-
bool makeJacobi(const RealScalar& x, const Scalar& y, const RealScalar& z);
|
|
72
|
+
template <typename Derived>
|
|
73
|
+
EIGEN_DEVICE_FUNC bool makeJacobi(const MatrixBase<Derived>&, Index p, Index q);
|
|
74
|
+
EIGEN_DEVICE_FUNC bool makeJacobi(const RealScalar& x, const Scalar& y, const RealScalar& z);
|
|
74
75
|
|
|
75
|
-
|
|
76
|
-
void makeGivens(const Scalar& p, const Scalar& q, Scalar* r=0);
|
|
76
|
+
EIGEN_DEVICE_FUNC void makeGivens(const Scalar& p, const Scalar& q, Scalar* r = 0);
|
|
77
77
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
EIGEN_DEVICE_FUNC
|
|
82
|
-
void makeGivens(const Scalar& p, const Scalar& q, Scalar* r, internal::false_type);
|
|
78
|
+
protected:
|
|
79
|
+
EIGEN_DEVICE_FUNC void makeGivens(const Scalar& p, const Scalar& q, Scalar* r, internal::true_type);
|
|
80
|
+
EIGEN_DEVICE_FUNC void makeGivens(const Scalar& p, const Scalar& q, Scalar* r, internal::false_type);
|
|
83
81
|
|
|
84
|
-
|
|
82
|
+
Scalar m_c, m_s;
|
|
85
83
|
};
|
|
86
84
|
|
|
87
|
-
/** Makes \c *this as a Jacobi rotation \a J such that applying \a J on both the right and left sides of the selfadjoint
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
{
|
|
96
|
-
using std::sqrt;
|
|
85
|
+
/** Makes \c *this as a Jacobi rotation \a J such that applying \a J on both the right and left sides of the selfadjoint
|
|
86
|
+
* 2x2 matrix \f$ B = \left ( \begin{array}{cc} x & y \\ \overline y & z \end{array} \right )\f$ yields a diagonal
|
|
87
|
+
* matrix \f$ A = J^* B J \f$
|
|
88
|
+
*
|
|
89
|
+
* \sa MatrixBase::makeJacobi(const MatrixBase<Derived>&, Index, Index), MatrixBase::applyOnTheLeft(),
|
|
90
|
+
* MatrixBase::applyOnTheRight()
|
|
91
|
+
*/
|
|
92
|
+
template <typename Scalar>
|
|
93
|
+
EIGEN_DEVICE_FUNC bool JacobiRotation<Scalar>::makeJacobi(const RealScalar& x, const Scalar& y, const RealScalar& z) {
|
|
97
94
|
using std::abs;
|
|
95
|
+
using std::sqrt;
|
|
98
96
|
|
|
99
|
-
RealScalar deno = RealScalar(2)*abs(y);
|
|
100
|
-
if(deno < (std::numeric_limits<RealScalar>::min)())
|
|
101
|
-
{
|
|
97
|
+
RealScalar deno = RealScalar(2) * abs(y);
|
|
98
|
+
if (deno < (std::numeric_limits<RealScalar>::min)()) {
|
|
102
99
|
m_c = Scalar(1);
|
|
103
100
|
m_s = Scalar(0);
|
|
104
101
|
return false;
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
{
|
|
108
|
-
RealScalar tau = (x-z)/deno;
|
|
102
|
+
} else {
|
|
103
|
+
RealScalar tau = (x - z) / deno;
|
|
109
104
|
RealScalar w = sqrt(numext::abs2(tau) + RealScalar(1));
|
|
110
105
|
RealScalar t;
|
|
111
|
-
if(tau>RealScalar(0))
|
|
112
|
-
{
|
|
106
|
+
if (tau > RealScalar(0)) {
|
|
113
107
|
t = RealScalar(1) / (tau + w);
|
|
114
|
-
}
|
|
115
|
-
else
|
|
116
|
-
{
|
|
108
|
+
} else {
|
|
117
109
|
t = RealScalar(1) / (tau - w);
|
|
118
110
|
}
|
|
119
111
|
RealScalar sign_t = t > RealScalar(0) ? RealScalar(1) : RealScalar(-1);
|
|
120
|
-
RealScalar n = RealScalar(1) / sqrt(numext::abs2(t)+RealScalar(1));
|
|
121
|
-
m_s = -
|
|
112
|
+
RealScalar n = RealScalar(1) / sqrt(numext::abs2(t) + RealScalar(1));
|
|
113
|
+
m_s = -sign_t * (numext::conj(y) / abs(y)) * abs(t) * n;
|
|
122
114
|
m_c = n;
|
|
123
115
|
return true;
|
|
124
116
|
}
|
|
125
117
|
}
|
|
126
118
|
|
|
127
|
-
/** Makes \c *this as a Jacobi rotation \c J such that applying \a J on both the right and left sides of the 2x2
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
template<typename
|
|
138
|
-
|
|
139
|
-
inline bool JacobiRotation<Scalar>::makeJacobi(const MatrixBase<Derived>& m, Index p, Index q)
|
|
140
|
-
|
|
141
|
-
return makeJacobi(numext::real(m.coeff(p,p)), m.coeff(p,q), numext::real(m.coeff(q,q)));
|
|
119
|
+
/** Makes \c *this as a Jacobi rotation \c J such that applying \a J on both the right and left sides of the 2x2
|
|
120
|
+
* selfadjoint matrix \f$ B = \left ( \begin{array}{cc} \text{this}_{pp} & \text{this}_{pq} \\ (\text{this}_{pq})^* &
|
|
121
|
+
* \text{this}_{qq} \end{array} \right )\f$ yields a diagonal matrix \f$ A = J^* B J \f$
|
|
122
|
+
*
|
|
123
|
+
* Example: \include Jacobi_makeJacobi.cpp
|
|
124
|
+
* Output: \verbinclude Jacobi_makeJacobi.out
|
|
125
|
+
*
|
|
126
|
+
* \sa JacobiRotation::makeJacobi(RealScalar, Scalar, RealScalar), MatrixBase::applyOnTheLeft(),
|
|
127
|
+
* MatrixBase::applyOnTheRight()
|
|
128
|
+
*/
|
|
129
|
+
template <typename Scalar>
|
|
130
|
+
template <typename Derived>
|
|
131
|
+
EIGEN_DEVICE_FUNC inline bool JacobiRotation<Scalar>::makeJacobi(const MatrixBase<Derived>& m, Index p, Index q) {
|
|
132
|
+
return makeJacobi(numext::real(m.coeff(p, p)), m.coeff(p, q), numext::real(m.coeff(q, q)));
|
|
142
133
|
}
|
|
143
134
|
|
|
144
135
|
/** Makes \c *this as a Givens rotation \c G such that applying \f$ G^* \f$ to the left of the vector
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
template<typename Scalar>
|
|
161
|
-
EIGEN_DEVICE_FUNC
|
|
162
|
-
|
|
163
|
-
{
|
|
164
|
-
makeGivens(p, q, r, typename internal::conditional<NumTraits<Scalar>::IsComplex, internal::true_type, internal::false_type>::type());
|
|
136
|
+
* \f$ V = \left ( \begin{array}{c} p \\ q \end{array} \right )\f$ yields:
|
|
137
|
+
* \f$ G^* V = \left ( \begin{array}{c} r \\ 0 \end{array} \right )\f$.
|
|
138
|
+
*
|
|
139
|
+
* The value of \a r is returned if \a r is not null (the default is null).
|
|
140
|
+
* Also note that G is built such that the cosine is always real.
|
|
141
|
+
*
|
|
142
|
+
* Example: \include Jacobi_makeGivens.cpp
|
|
143
|
+
* Output: \verbinclude Jacobi_makeGivens.out
|
|
144
|
+
*
|
|
145
|
+
* This function implements the continuous Givens rotation generation algorithm
|
|
146
|
+
* found in Anderson (2000), Discontinuous Plane Rotations and the Symmetric Eigenvalue Problem.
|
|
147
|
+
* LAPACK Working Note 150, University of Tennessee, UT-CS-00-454, December 4, 2000.
|
|
148
|
+
*
|
|
149
|
+
* \sa MatrixBase::applyOnTheLeft(), MatrixBase::applyOnTheRight()
|
|
150
|
+
*/
|
|
151
|
+
template <typename Scalar>
|
|
152
|
+
EIGEN_DEVICE_FUNC void JacobiRotation<Scalar>::makeGivens(const Scalar& p, const Scalar& q, Scalar* r) {
|
|
153
|
+
makeGivens(p, q, r, std::conditional_t<NumTraits<Scalar>::IsComplex, internal::true_type, internal::false_type>());
|
|
165
154
|
}
|
|
166
155
|
|
|
167
|
-
|
|
168
156
|
// specialization for complexes
|
|
169
|
-
template<typename Scalar>
|
|
170
|
-
EIGEN_DEVICE_FUNC
|
|
171
|
-
|
|
172
|
-
{
|
|
173
|
-
using std::sqrt;
|
|
174
|
-
using std::abs;
|
|
157
|
+
template <typename Scalar>
|
|
158
|
+
EIGEN_DEVICE_FUNC void JacobiRotation<Scalar>::makeGivens(const Scalar& p, const Scalar& q, Scalar* r,
|
|
159
|
+
internal::true_type) {
|
|
175
160
|
using numext::conj;
|
|
161
|
+
using std::abs;
|
|
162
|
+
using std::sqrt;
|
|
176
163
|
|
|
177
|
-
if(q==Scalar(0))
|
|
178
|
-
|
|
179
|
-
m_c = numext::real(p)<0 ? Scalar(-1) : Scalar(1);
|
|
164
|
+
if (q == Scalar(0)) {
|
|
165
|
+
m_c = numext::real(p) < 0 ? Scalar(-1) : Scalar(1);
|
|
180
166
|
m_s = 0;
|
|
181
|
-
if(r) *r = m_c * p;
|
|
182
|
-
}
|
|
183
|
-
else if(p==Scalar(0))
|
|
184
|
-
{
|
|
167
|
+
if (r) *r = m_c * p;
|
|
168
|
+
} else if (p == Scalar(0)) {
|
|
185
169
|
m_c = 0;
|
|
186
|
-
m_s = -q/abs(q);
|
|
187
|
-
if(r) *r = abs(q);
|
|
188
|
-
}
|
|
189
|
-
else
|
|
190
|
-
{
|
|
170
|
+
m_s = -q / abs(q);
|
|
171
|
+
if (r) *r = abs(q);
|
|
172
|
+
} else {
|
|
191
173
|
RealScalar p1 = numext::norm1(p);
|
|
192
174
|
RealScalar q1 = numext::norm1(q);
|
|
193
|
-
if(p1>=q1)
|
|
194
|
-
{
|
|
175
|
+
if (p1 >= q1) {
|
|
195
176
|
Scalar ps = p / p1;
|
|
196
177
|
RealScalar p2 = numext::abs2(ps);
|
|
197
178
|
Scalar qs = q / p1;
|
|
198
179
|
RealScalar q2 = numext::abs2(qs);
|
|
199
180
|
|
|
200
|
-
RealScalar u = sqrt(RealScalar(1) + q2/p2);
|
|
201
|
-
if(numext::real(p)<RealScalar(0))
|
|
202
|
-
u = -u;
|
|
181
|
+
RealScalar u = sqrt(RealScalar(1) + q2 / p2);
|
|
182
|
+
if (numext::real(p) < RealScalar(0)) u = -u;
|
|
203
183
|
|
|
204
|
-
m_c = Scalar(1)/u;
|
|
205
|
-
m_s = -qs*conj(ps)*(m_c/p2);
|
|
206
|
-
if(r) *r = p * u;
|
|
207
|
-
}
|
|
208
|
-
else
|
|
209
|
-
{
|
|
184
|
+
m_c = Scalar(1) / u;
|
|
185
|
+
m_s = -qs * conj(ps) * (m_c / p2);
|
|
186
|
+
if (r) *r = p * u;
|
|
187
|
+
} else {
|
|
210
188
|
Scalar ps = p / q1;
|
|
211
189
|
RealScalar p2 = numext::abs2(ps);
|
|
212
190
|
Scalar qs = q / q1;
|
|
213
191
|
RealScalar q2 = numext::abs2(qs);
|
|
214
192
|
|
|
215
193
|
RealScalar u = q1 * sqrt(p2 + q2);
|
|
216
|
-
if(numext::real(p)<RealScalar(0))
|
|
217
|
-
u = -u;
|
|
194
|
+
if (numext::real(p) < RealScalar(0)) u = -u;
|
|
218
195
|
|
|
219
196
|
p1 = abs(p);
|
|
220
|
-
ps = p/p1;
|
|
221
|
-
m_c = p1/u;
|
|
222
|
-
m_s = -conj(ps) * (q/u);
|
|
223
|
-
if(r) *r = ps * u;
|
|
197
|
+
ps = p / p1;
|
|
198
|
+
m_c = p1 / u;
|
|
199
|
+
m_s = -conj(ps) * (q / u);
|
|
200
|
+
if (r) *r = ps * u;
|
|
224
201
|
}
|
|
225
202
|
}
|
|
226
203
|
}
|
|
227
204
|
|
|
228
205
|
// specialization for reals
|
|
229
|
-
template<typename Scalar>
|
|
230
|
-
EIGEN_DEVICE_FUNC
|
|
231
|
-
|
|
232
|
-
{
|
|
233
|
-
using std::sqrt;
|
|
206
|
+
template <typename Scalar>
|
|
207
|
+
EIGEN_DEVICE_FUNC void JacobiRotation<Scalar>::makeGivens(const Scalar& p, const Scalar& q, Scalar* r,
|
|
208
|
+
internal::false_type) {
|
|
234
209
|
using std::abs;
|
|
235
|
-
|
|
236
|
-
{
|
|
237
|
-
m_c = p<Scalar(0) ? Scalar(-1) : Scalar(1);
|
|
210
|
+
using std::sqrt;
|
|
211
|
+
if (numext::is_exactly_zero(q)) {
|
|
212
|
+
m_c = p < Scalar(0) ? Scalar(-1) : Scalar(1);
|
|
238
213
|
m_s = Scalar(0);
|
|
239
|
-
if(r) *r = abs(p);
|
|
240
|
-
}
|
|
241
|
-
else if(p==Scalar(0))
|
|
242
|
-
{
|
|
214
|
+
if (r) *r = abs(p);
|
|
215
|
+
} else if (numext::is_exactly_zero(p)) {
|
|
243
216
|
m_c = Scalar(0);
|
|
244
|
-
m_s = q<Scalar(0) ? Scalar(1) : Scalar(-1);
|
|
245
|
-
if(r) *r = abs(q);
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
{
|
|
249
|
-
Scalar t = q/p;
|
|
217
|
+
m_s = q < Scalar(0) ? Scalar(1) : Scalar(-1);
|
|
218
|
+
if (r) *r = abs(q);
|
|
219
|
+
} else if (abs(p) > abs(q)) {
|
|
220
|
+
Scalar t = q / p;
|
|
250
221
|
Scalar u = sqrt(Scalar(1) + numext::abs2(t));
|
|
251
|
-
if(p<Scalar(0))
|
|
252
|
-
|
|
253
|
-
m_c = Scalar(1)/u;
|
|
222
|
+
if (p < Scalar(0)) u = -u;
|
|
223
|
+
m_c = Scalar(1) / u;
|
|
254
224
|
m_s = -t * m_c;
|
|
255
|
-
if(r) *r = p * u;
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
-
{
|
|
259
|
-
Scalar t = p/q;
|
|
225
|
+
if (r) *r = p * u;
|
|
226
|
+
} else {
|
|
227
|
+
Scalar t = p / q;
|
|
260
228
|
Scalar u = sqrt(Scalar(1) + numext::abs2(t));
|
|
261
|
-
if(q<Scalar(0))
|
|
262
|
-
|
|
263
|
-
m_s = -Scalar(1)/u;
|
|
229
|
+
if (q < Scalar(0)) u = -u;
|
|
230
|
+
m_s = -Scalar(1) / u;
|
|
264
231
|
m_c = -t * m_s;
|
|
265
|
-
if(r) *r = q * u;
|
|
232
|
+
if (r) *r = q * u;
|
|
266
233
|
}
|
|
267
|
-
|
|
268
234
|
}
|
|
269
235
|
|
|
270
236
|
/****************************************************************************************
|
|
271
|
-
* Implementation of MatrixBase methods
|
|
272
|
-
****************************************************************************************/
|
|
237
|
+
* Implementation of MatrixBase methods
|
|
238
|
+
****************************************************************************************/
|
|
273
239
|
|
|
274
240
|
namespace internal {
|
|
275
241
|
/** \jacobi_module
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
void apply_rotation_in_the_plane(DenseBase<VectorX>& xpr_x, DenseBase<VectorY>& xpr_y,
|
|
284
|
-
|
|
242
|
+
* Applies the clock wise 2D rotation \a j to the set of 2D vectors of coordinates \a x and \a y:
|
|
243
|
+
* \f$ \left ( \begin{array}{cc} x \\ y \end{array} \right ) = J \left ( \begin{array}{cc} x \\ y \end{array} \right )
|
|
244
|
+
* \f$
|
|
245
|
+
*
|
|
246
|
+
* \sa MatrixBase::applyOnTheLeft(), MatrixBase::applyOnTheRight()
|
|
247
|
+
*/
|
|
248
|
+
template <typename VectorX, typename VectorY, typename OtherScalar>
|
|
249
|
+
EIGEN_DEVICE_FUNC void apply_rotation_in_the_plane(DenseBase<VectorX>& xpr_x, DenseBase<VectorY>& xpr_y,
|
|
250
|
+
const JacobiRotation<OtherScalar>& j);
|
|
251
|
+
} // namespace internal
|
|
285
252
|
|
|
286
253
|
/** \jacobi_module
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
template<typename Derived>
|
|
293
|
-
template<typename OtherScalar>
|
|
294
|
-
EIGEN_DEVICE_FUNC
|
|
295
|
-
|
|
296
|
-
{
|
|
254
|
+
* Applies the rotation in the plane \a j to the rows \a p and \a q of \c *this, i.e., it computes B = J * B,
|
|
255
|
+
* with \f$ B = \left ( \begin{array}{cc} \text{*this.row}(p) \\ \text{*this.row}(q) \end{array} \right ) \f$.
|
|
256
|
+
*
|
|
257
|
+
* \sa class JacobiRotation, MatrixBase::applyOnTheRight(), internal::apply_rotation_in_the_plane()
|
|
258
|
+
*/
|
|
259
|
+
template <typename Derived>
|
|
260
|
+
template <typename OtherScalar>
|
|
261
|
+
EIGEN_DEVICE_FUNC inline void MatrixBase<Derived>::applyOnTheLeft(Index p, Index q,
|
|
262
|
+
const JacobiRotation<OtherScalar>& j) {
|
|
297
263
|
RowXpr x(this->row(p));
|
|
298
264
|
RowXpr y(this->row(q));
|
|
299
265
|
internal::apply_rotation_in_the_plane(x, y, j);
|
|
300
266
|
}
|
|
301
267
|
|
|
302
|
-
/** \
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
template<typename Derived>
|
|
309
|
-
template<typename OtherScalar>
|
|
310
|
-
EIGEN_DEVICE_FUNC
|
|
311
|
-
|
|
312
|
-
{
|
|
268
|
+
/** \jacobi_module
|
|
269
|
+
* Applies the rotation in the plane \a j to the columns \a p and \a q of \c *this, i.e., it computes B = B * J
|
|
270
|
+
* with \f$ B = \left ( \begin{array}{cc} \text{*this.col}(p) & \text{*this.col}(q) \end{array} \right ) \f$.
|
|
271
|
+
*
|
|
272
|
+
* \sa class JacobiRotation, MatrixBase::applyOnTheLeft(), internal::apply_rotation_in_the_plane()
|
|
273
|
+
*/
|
|
274
|
+
template <typename Derived>
|
|
275
|
+
template <typename OtherScalar>
|
|
276
|
+
EIGEN_DEVICE_FUNC inline void MatrixBase<Derived>::applyOnTheRight(Index p, Index q,
|
|
277
|
+
const JacobiRotation<OtherScalar>& j) {
|
|
313
278
|
ColXpr x(this->col(p));
|
|
314
279
|
ColXpr y(this->col(q));
|
|
315
280
|
internal::apply_rotation_in_the_plane(x, y, j.transpose());
|
|
@@ -317,18 +282,14 @@ inline void MatrixBase<Derived>::applyOnTheRight(Index p, Index q, const JacobiR
|
|
|
317
282
|
|
|
318
283
|
namespace internal {
|
|
319
284
|
|
|
320
|
-
template<typename Scalar, typename OtherScalar,
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
{
|
|
324
|
-
|
|
325
|
-
inline void run(Scalar *x, Index incrx, Scalar *y, Index incry, Index size, OtherScalar c, OtherScalar s)
|
|
326
|
-
{
|
|
327
|
-
for(Index i=0; i<size; ++i)
|
|
328
|
-
{
|
|
285
|
+
template <typename Scalar, typename OtherScalar, int SizeAtCompileTime, int MinAlignment, bool Vectorizable>
|
|
286
|
+
struct apply_rotation_in_the_plane_selector {
|
|
287
|
+
static EIGEN_DEVICE_FUNC inline void run(Scalar* x, Index incrx, Scalar* y, Index incry, Index size, OtherScalar c,
|
|
288
|
+
OtherScalar s) {
|
|
289
|
+
for (Index i = 0; i < size; ++i) {
|
|
329
290
|
Scalar xi = *x;
|
|
330
291
|
Scalar yi = *y;
|
|
331
|
-
*x =
|
|
292
|
+
*x = c * xi + numext::conj(s) * yi;
|
|
332
293
|
*y = -s * xi + numext::conj(c) * yi;
|
|
333
294
|
x += incrx;
|
|
334
295
|
y += incry;
|
|
@@ -336,125 +297,111 @@ struct apply_rotation_in_the_plane_selector
|
|
|
336
297
|
}
|
|
337
298
|
};
|
|
338
299
|
|
|
339
|
-
template<typename Scalar, typename OtherScalar,
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
{
|
|
343
|
-
static inline void run(Scalar *x, Index incrx, Scalar *y, Index incry, Index size, OtherScalar c, OtherScalar s)
|
|
344
|
-
{
|
|
345
|
-
enum {
|
|
346
|
-
PacketSize = packet_traits<Scalar>::size,
|
|
347
|
-
OtherPacketSize = packet_traits<OtherScalar>::size
|
|
348
|
-
};
|
|
300
|
+
template <typename Scalar, typename OtherScalar, int SizeAtCompileTime, int MinAlignment>
|
|
301
|
+
struct apply_rotation_in_the_plane_selector<Scalar, OtherScalar, SizeAtCompileTime, MinAlignment,
|
|
302
|
+
true /* vectorizable */> {
|
|
303
|
+
static inline void run(Scalar* x, Index incrx, Scalar* y, Index incry, Index size, OtherScalar c, OtherScalar s) {
|
|
349
304
|
typedef typename packet_traits<Scalar>::type Packet;
|
|
350
305
|
typedef typename packet_traits<OtherScalar>::type OtherPacket;
|
|
351
306
|
|
|
307
|
+
constexpr int RequiredAlignment =
|
|
308
|
+
(std::max)(unpacket_traits<Packet>::alignment, unpacket_traits<OtherPacket>::alignment);
|
|
309
|
+
constexpr Index PacketSize = packet_traits<Scalar>::size;
|
|
310
|
+
|
|
352
311
|
/*** dynamic-size vectorized paths ***/
|
|
353
|
-
if(SizeAtCompileTime == Dynamic && ((incrx==1 && incry==1) || PacketSize == 1))
|
|
354
|
-
{
|
|
312
|
+
if (size >= 2 * PacketSize && SizeAtCompileTime == Dynamic && ((incrx == 1 && incry == 1) || PacketSize == 1)) {
|
|
355
313
|
// both vectors are sequentially stored in memory => vectorization
|
|
356
|
-
|
|
314
|
+
constexpr Index Peeling = 2;
|
|
357
315
|
|
|
358
316
|
Index alignedStart = internal::first_default_aligned(y, size);
|
|
359
|
-
Index alignedEnd = alignedStart + ((size-alignedStart)/PacketSize)*PacketSize;
|
|
317
|
+
Index alignedEnd = alignedStart + ((size - alignedStart) / PacketSize) * PacketSize;
|
|
360
318
|
|
|
361
319
|
const OtherPacket pc = pset1<OtherPacket>(c);
|
|
362
320
|
const OtherPacket ps = pset1<OtherPacket>(s);
|
|
363
|
-
conj_helper<OtherPacket,Packet,NumTraits<OtherScalar>::IsComplex,false> pcj;
|
|
364
|
-
conj_helper<OtherPacket,Packet,false,false> pm;
|
|
321
|
+
conj_helper<OtherPacket, Packet, NumTraits<OtherScalar>::IsComplex, false> pcj;
|
|
322
|
+
conj_helper<OtherPacket, Packet, false, false> pm;
|
|
365
323
|
|
|
366
|
-
for(Index i=0; i<alignedStart; ++i)
|
|
367
|
-
{
|
|
324
|
+
for (Index i = 0; i < alignedStart; ++i) {
|
|
368
325
|
Scalar xi = x[i];
|
|
369
326
|
Scalar yi = y[i];
|
|
370
|
-
x[i] =
|
|
327
|
+
x[i] = c * xi + numext::conj(s) * yi;
|
|
371
328
|
y[i] = -s * xi + numext::conj(c) * yi;
|
|
372
329
|
}
|
|
373
330
|
|
|
374
331
|
Scalar* EIGEN_RESTRICT px = x + alignedStart;
|
|
375
332
|
Scalar* EIGEN_RESTRICT py = y + alignedStart;
|
|
376
333
|
|
|
377
|
-
if(internal::first_default_aligned(x, size)==alignedStart)
|
|
378
|
-
|
|
379
|
-
for(Index i=alignedStart; i<alignedEnd; i+=PacketSize)
|
|
380
|
-
{
|
|
334
|
+
if (internal::first_default_aligned(x, size) == alignedStart) {
|
|
335
|
+
for (Index i = alignedStart; i < alignedEnd; i += PacketSize) {
|
|
381
336
|
Packet xi = pload<Packet>(px);
|
|
382
337
|
Packet yi = pload<Packet>(py);
|
|
383
|
-
pstore(px, padd(pm.pmul(pc,xi),pcj.pmul(ps,yi)));
|
|
384
|
-
pstore(py, psub(pcj.pmul(pc,yi),pm.pmul(ps,xi)));
|
|
338
|
+
pstore(px, padd(pm.pmul(pc, xi), pcj.pmul(ps, yi)));
|
|
339
|
+
pstore(py, psub(pcj.pmul(pc, yi), pm.pmul(ps, xi)));
|
|
385
340
|
px += PacketSize;
|
|
386
341
|
py += PacketSize;
|
|
387
342
|
}
|
|
388
|
-
}
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
Packet
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
pstore (py+PacketSize, psub(pcj.pmul(pc,yi1),pm.pmul(ps,xi1)));
|
|
402
|
-
px += Peeling*PacketSize;
|
|
403
|
-
py += Peeling*PacketSize;
|
|
343
|
+
} else {
|
|
344
|
+
Index peelingEnd = alignedStart + ((size - alignedStart) / (Peeling * PacketSize)) * (Peeling * PacketSize);
|
|
345
|
+
for (Index i = alignedStart; i < peelingEnd; i += Peeling * PacketSize) {
|
|
346
|
+
Packet xi = ploadu<Packet>(px);
|
|
347
|
+
Packet xi1 = ploadu<Packet>(px + PacketSize);
|
|
348
|
+
Packet yi = pload<Packet>(py);
|
|
349
|
+
Packet yi1 = pload<Packet>(py + PacketSize);
|
|
350
|
+
pstoreu(px, padd(pm.pmul(pc, xi), pcj.pmul(ps, yi)));
|
|
351
|
+
pstoreu(px + PacketSize, padd(pm.pmul(pc, xi1), pcj.pmul(ps, yi1)));
|
|
352
|
+
pstore(py, psub(pcj.pmul(pc, yi), pm.pmul(ps, xi)));
|
|
353
|
+
pstore(py + PacketSize, psub(pcj.pmul(pc, yi1), pm.pmul(ps, xi1)));
|
|
354
|
+
px += Peeling * PacketSize;
|
|
355
|
+
py += Peeling * PacketSize;
|
|
404
356
|
}
|
|
405
|
-
if(alignedEnd!=peelingEnd)
|
|
406
|
-
|
|
407
|
-
Packet
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
pstore (y+peelingEnd, psub(pcj.pmul(pc,yi),pm.pmul(ps,xi)));
|
|
357
|
+
if (alignedEnd != peelingEnd) {
|
|
358
|
+
Packet xi = ploadu<Packet>(x + peelingEnd);
|
|
359
|
+
Packet yi = pload<Packet>(y + peelingEnd);
|
|
360
|
+
pstoreu(x + peelingEnd, padd(pm.pmul(pc, xi), pcj.pmul(ps, yi)));
|
|
361
|
+
pstore(y + peelingEnd, psub(pcj.pmul(pc, yi), pm.pmul(ps, xi)));
|
|
411
362
|
}
|
|
412
363
|
}
|
|
413
364
|
|
|
414
|
-
for(Index i=alignedEnd; i<size; ++i)
|
|
415
|
-
{
|
|
365
|
+
for (Index i = alignedEnd; i < size; ++i) {
|
|
416
366
|
Scalar xi = x[i];
|
|
417
367
|
Scalar yi = y[i];
|
|
418
|
-
x[i] =
|
|
368
|
+
x[i] = c * xi + numext::conj(s) * yi;
|
|
419
369
|
y[i] = -s * xi + numext::conj(c) * yi;
|
|
420
370
|
}
|
|
421
371
|
}
|
|
422
372
|
|
|
423
373
|
/*** fixed-size vectorized path ***/
|
|
424
|
-
else if(SizeAtCompileTime != Dynamic && MinAlignment
|
|
425
|
-
{
|
|
374
|
+
else if (SizeAtCompileTime != Dynamic && MinAlignment >= RequiredAlignment) {
|
|
426
375
|
const OtherPacket pc = pset1<OtherPacket>(c);
|
|
427
376
|
const OtherPacket ps = pset1<OtherPacket>(s);
|
|
428
|
-
conj_helper<OtherPacket,Packet,NumTraits<
|
|
429
|
-
conj_helper<OtherPacket,Packet,false,false> pm;
|
|
377
|
+
conj_helper<OtherPacket, Packet, NumTraits<OtherScalar>::IsComplex, false> pcj;
|
|
378
|
+
conj_helper<OtherPacket, Packet, false, false> pm;
|
|
430
379
|
Scalar* EIGEN_RESTRICT px = x;
|
|
431
380
|
Scalar* EIGEN_RESTRICT py = y;
|
|
432
|
-
for(Index i=0; i<size; i+=PacketSize)
|
|
433
|
-
{
|
|
381
|
+
for (Index i = 0; i < size; i += PacketSize) {
|
|
434
382
|
Packet xi = pload<Packet>(px);
|
|
435
383
|
Packet yi = pload<Packet>(py);
|
|
436
|
-
pstore(px, padd(pm.pmul(pc,xi),pcj.pmul(ps,yi)));
|
|
437
|
-
pstore(py, psub(pcj.pmul(pc,yi),pm.pmul(ps,xi)));
|
|
384
|
+
pstore(px, padd(pm.pmul(pc, xi), pcj.pmul(ps, yi)));
|
|
385
|
+
pstore(py, psub(pcj.pmul(pc, yi), pm.pmul(ps, xi)));
|
|
438
386
|
px += PacketSize;
|
|
439
387
|
py += PacketSize;
|
|
440
388
|
}
|
|
441
389
|
}
|
|
442
390
|
|
|
443
391
|
/*** non-vectorized path ***/
|
|
444
|
-
else
|
|
445
|
-
|
|
446
|
-
|
|
392
|
+
else {
|
|
393
|
+
apply_rotation_in_the_plane_selector<Scalar, OtherScalar, SizeAtCompileTime, MinAlignment, false>::run(
|
|
394
|
+
x, incrx, y, incry, size, c, s);
|
|
447
395
|
}
|
|
448
396
|
}
|
|
449
397
|
};
|
|
450
398
|
|
|
451
|
-
template<typename VectorX, typename VectorY, typename OtherScalar>
|
|
452
|
-
EIGEN_DEVICE_FUNC
|
|
453
|
-
|
|
454
|
-
{
|
|
399
|
+
template <typename VectorX, typename VectorY, typename OtherScalar>
|
|
400
|
+
EIGEN_DEVICE_FUNC void inline apply_rotation_in_the_plane(DenseBase<VectorX>& xpr_x, DenseBase<VectorY>& xpr_y,
|
|
401
|
+
const JacobiRotation<OtherScalar>& j) {
|
|
455
402
|
typedef typename VectorX::Scalar Scalar;
|
|
456
|
-
|
|
457
|
-
|
|
403
|
+
constexpr bool Vectorizable = (int(evaluator<VectorX>::Flags) & int(evaluator<VectorY>::Flags) & PacketAccessBit) &&
|
|
404
|
+
(int(packet_traits<Scalar>::size) == int(packet_traits<OtherScalar>::size));
|
|
458
405
|
|
|
459
406
|
eigen_assert(xpr_x.size() == xpr_y.size());
|
|
460
407
|
Index size = xpr_x.size();
|
|
@@ -466,18 +413,15 @@ void /*EIGEN_DONT_INLINE*/ apply_rotation_in_the_plane(DenseBase<VectorX>& xpr_x
|
|
|
466
413
|
|
|
467
414
|
OtherScalar c = j.c();
|
|
468
415
|
OtherScalar s = j.s();
|
|
469
|
-
if (c
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
apply_rotation_in_the_plane_selector<
|
|
473
|
-
|
|
474
|
-
VectorX::SizeAtCompileTime,
|
|
475
|
-
EIGEN_PLAIN_ENUM_MIN(evaluator<VectorX>::Alignment, evaluator<VectorY>::Alignment),
|
|
476
|
-
Vectorizable>::run(x,incrx,y,incry,size,c,s);
|
|
416
|
+
if (numext::is_exactly_one(c) && numext::is_exactly_zero(s)) return;
|
|
417
|
+
|
|
418
|
+
constexpr int Alignment = (std::min)(int(evaluator<VectorX>::Alignment), int(evaluator<VectorY>::Alignment));
|
|
419
|
+
apply_rotation_in_the_plane_selector<Scalar, OtherScalar, VectorX::SizeAtCompileTime, Alignment, Vectorizable>::run(
|
|
420
|
+
x, incrx, y, incry, size, c, s);
|
|
477
421
|
}
|
|
478
422
|
|
|
479
|
-
}
|
|
423
|
+
} // end namespace internal
|
|
480
424
|
|
|
481
|
-
}
|
|
425
|
+
} // end namespace Eigen
|
|
482
426
|
|
|
483
|
-
#endif
|
|
427
|
+
#endif // EIGEN_JACOBI_H
|