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