@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.
Files changed (431) hide show
  1. package/README.md +1 -1
  2. package/eigen/Eigen/AccelerateSupport +52 -0
  3. package/eigen/Eigen/Cholesky +18 -20
  4. package/eigen/Eigen/CholmodSupport +28 -28
  5. package/eigen/Eigen/Core +187 -120
  6. package/eigen/Eigen/Eigenvalues +16 -13
  7. package/eigen/Eigen/Geometry +18 -18
  8. package/eigen/Eigen/Householder +9 -7
  9. package/eigen/Eigen/IterativeLinearSolvers +8 -4
  10. package/eigen/Eigen/Jacobi +14 -13
  11. package/eigen/Eigen/KLUSupport +23 -21
  12. package/eigen/Eigen/LU +15 -16
  13. package/eigen/Eigen/MetisSupport +12 -12
  14. package/eigen/Eigen/OrderingMethods +54 -51
  15. package/eigen/Eigen/PaStiXSupport +23 -21
  16. package/eigen/Eigen/PardisoSupport +17 -14
  17. package/eigen/Eigen/QR +18 -20
  18. package/eigen/Eigen/QtAlignedMalloc +5 -12
  19. package/eigen/Eigen/SPQRSupport +21 -14
  20. package/eigen/Eigen/SVD +23 -17
  21. package/eigen/Eigen/Sparse +1 -2
  22. package/eigen/Eigen/SparseCholesky +18 -15
  23. package/eigen/Eigen/SparseCore +18 -17
  24. package/eigen/Eigen/SparseLU +9 -9
  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 +366 -405
  37. package/eigen/Eigen/src/Cholesky/LLT.h +323 -367
  38. package/eigen/Eigen/src/Cholesky/LLT_LAPACKE.h +81 -56
  39. package/eigen/Eigen/src/CholmodSupport/CholmodSupport.h +585 -529
  40. package/eigen/Eigen/src/CholmodSupport/InternalHeaderCheck.h +3 -0
  41. package/eigen/Eigen/src/Core/ArithmeticSequence.h +143 -317
  42. package/eigen/Eigen/src/Core/Array.h +329 -370
  43. package/eigen/Eigen/src/Core/ArrayBase.h +190 -203
  44. package/eigen/Eigen/src/Core/ArrayWrapper.h +126 -170
  45. package/eigen/Eigen/src/Core/Assign.h +30 -40
  46. package/eigen/Eigen/src/Core/AssignEvaluator.h +651 -604
  47. package/eigen/Eigen/src/Core/Assign_MKL.h +125 -120
  48. package/eigen/Eigen/src/Core/BandMatrix.h +267 -282
  49. package/eigen/Eigen/src/Core/Block.h +371 -390
  50. package/eigen/Eigen/src/Core/CommaInitializer.h +85 -100
  51. package/eigen/Eigen/src/Core/ConditionEstimator.h +51 -53
  52. package/eigen/Eigen/src/Core/CoreEvaluators.h +1214 -937
  53. package/eigen/Eigen/src/Core/CoreIterators.h +72 -63
  54. package/eigen/Eigen/src/Core/CwiseBinaryOp.h +112 -129
  55. package/eigen/Eigen/src/Core/CwiseNullaryOp.h +676 -702
  56. package/eigen/Eigen/src/Core/CwiseTernaryOp.h +77 -103
  57. package/eigen/Eigen/src/Core/CwiseUnaryOp.h +55 -67
  58. package/eigen/Eigen/src/Core/CwiseUnaryView.h +127 -92
  59. package/eigen/Eigen/src/Core/DenseBase.h +630 -658
  60. package/eigen/Eigen/src/Core/DenseCoeffsBase.h +511 -628
  61. package/eigen/Eigen/src/Core/DenseStorage.h +511 -590
  62. package/eigen/Eigen/src/Core/DeviceWrapper.h +153 -0
  63. package/eigen/Eigen/src/Core/Diagonal.h +168 -207
  64. package/eigen/Eigen/src/Core/DiagonalMatrix.h +346 -317
  65. package/eigen/Eigen/src/Core/DiagonalProduct.h +12 -10
  66. package/eigen/Eigen/src/Core/Dot.h +167 -217
  67. package/eigen/Eigen/src/Core/EigenBase.h +74 -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 -113
  71. package/eigen/Eigen/src/Core/Fuzzy.h +82 -105
  72. package/eigen/Eigen/src/Core/GeneralProduct.h +315 -261
  73. package/eigen/Eigen/src/Core/GenericPacketMath.h +1182 -520
  74. package/eigen/Eigen/src/Core/GlobalFunctions.h +193 -157
  75. package/eigen/Eigen/src/Core/IO.h +131 -156
  76. package/eigen/Eigen/src/Core/IndexedView.h +209 -125
  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 +50 -59
  80. package/eigen/Eigen/src/Core/Map.h +123 -141
  81. package/eigen/Eigen/src/Core/MapBase.h +255 -282
  82. package/eigen/Eigen/src/Core/MathFunctions.h +1247 -1201
  83. package/eigen/Eigen/src/Core/MathFunctionsImpl.h +162 -99
  84. package/eigen/Eigen/src/Core/Matrix.h +463 -494
  85. package/eigen/Eigen/src/Core/MatrixBase.h +468 -470
  86. package/eigen/Eigen/src/Core/NestByValue.h +58 -52
  87. package/eigen/Eigen/src/Core/NoAlias.h +79 -86
  88. package/eigen/Eigen/src/Core/NumTraits.h +206 -206
  89. package/eigen/Eigen/src/Core/PartialReduxEvaluator.h +163 -142
  90. package/eigen/Eigen/src/Core/PermutationMatrix.h +461 -511
  91. package/eigen/Eigen/src/Core/PlainObjectBase.h +858 -972
  92. package/eigen/Eigen/src/Core/Product.h +246 -130
  93. package/eigen/Eigen/src/Core/ProductEvaluators.h +779 -671
  94. package/eigen/Eigen/src/Core/Random.h +153 -164
  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 +334 -314
  98. package/eigen/Eigen/src/Core/Ref.h +259 -257
  99. package/eigen/Eigen/src/Core/Replicate.h +92 -104
  100. package/eigen/Eigen/src/Core/Reshaped.h +215 -271
  101. package/eigen/Eigen/src/Core/ReturnByValue.h +47 -55
  102. package/eigen/Eigen/src/Core/Reverse.h +133 -148
  103. package/eigen/Eigen/src/Core/Select.h +68 -140
  104. package/eigen/Eigen/src/Core/SelfAdjointView.h +254 -290
  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 +88 -102
  108. package/eigen/Eigen/src/Core/SolveTriangular.h +126 -124
  109. package/eigen/Eigen/src/Core/SolverBase.h +132 -133
  110. package/eigen/Eigen/src/Core/StableNorm.h +113 -147
  111. package/eigen/Eigen/src/Core/StlIterators.h +404 -248
  112. package/eigen/Eigen/src/Core/Stride.h +90 -92
  113. package/eigen/Eigen/src/Core/Swap.h +70 -39
  114. package/eigen/Eigen/src/Core/Transpose.h +258 -295
  115. package/eigen/Eigen/src/Core/Transpositions.h +270 -333
  116. package/eigen/Eigen/src/Core/TriangularMatrix.h +642 -743
  117. package/eigen/Eigen/src/Core/VectorBlock.h +59 -72
  118. package/eigen/Eigen/src/Core/VectorwiseOp.h +653 -704
  119. package/eigen/Eigen/src/Core/Visitor.h +464 -308
  120. package/eigen/Eigen/src/Core/arch/AVX/Complex.h +380 -187
  121. package/eigen/Eigen/src/Core/arch/AVX/MathFunctions.h +65 -163
  122. package/eigen/Eigen/src/Core/arch/AVX/PacketMath.h +2145 -638
  123. package/eigen/Eigen/src/Core/arch/AVX/Reductions.h +353 -0
  124. package/eigen/Eigen/src/Core/arch/AVX/TypeCasting.h +253 -60
  125. package/eigen/Eigen/src/Core/arch/AVX512/Complex.h +278 -228
  126. package/eigen/Eigen/src/Core/arch/AVX512/GemmKernel.h +1245 -0
  127. package/eigen/Eigen/src/Core/arch/AVX512/MathFunctions.h +48 -269
  128. package/eigen/Eigen/src/Core/arch/AVX512/MathFunctionsFP16.h +75 -0
  129. package/eigen/Eigen/src/Core/arch/AVX512/PacketMath.h +1597 -754
  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 +229 -41
  135. package/eigen/Eigen/src/Core/arch/AVX512/TypeCastingFP16.h +130 -0
  136. package/eigen/Eigen/src/Core/arch/AltiVec/Complex.h +420 -184
  137. package/eigen/Eigen/src/Core/arch/AltiVec/MathFunctions.h +40 -49
  138. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProduct.h +2962 -2213
  139. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h +196 -212
  140. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h +713 -441
  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 +2380 -1362
  144. package/eigen/Eigen/src/Core/arch/AltiVec/TypeCasting.h +153 -0
  145. package/eigen/Eigen/src/Core/arch/Default/BFloat16.h +390 -224
  146. package/eigen/Eigen/src/Core/arch/Default/ConjHelper.h +78 -67
  147. package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h +1784 -799
  148. package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h +167 -50
  149. package/eigen/Eigen/src/Core/arch/Default/Half.h +528 -379
  150. package/eigen/Eigen/src/Core/arch/Default/Settings.h +10 -12
  151. package/eigen/Eigen/src/Core/arch/GPU/Complex.h +244 -0
  152. package/eigen/Eigen/src/Core/arch/GPU/MathFunctions.h +41 -40
  153. package/eigen/Eigen/src/Core/arch/GPU/PacketMath.h +550 -523
  154. package/eigen/Eigen/src/Core/arch/GPU/Tuple.h +268 -0
  155. package/eigen/Eigen/src/Core/arch/GPU/TypeCasting.h +27 -30
  156. package/eigen/Eigen/src/Core/arch/HIP/hcc/math_constants.h +8 -8
  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 +54 -82
  164. package/eigen/Eigen/src/Core/arch/MSA/MathFunctions.h +84 -92
  165. package/eigen/Eigen/src/Core/arch/MSA/PacketMath.h +51 -47
  166. package/eigen/Eigen/src/Core/arch/NEON/Complex.h +454 -306
  167. package/eigen/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h +175 -115
  168. package/eigen/Eigen/src/Core/arch/NEON/MathFunctions.h +23 -30
  169. package/eigen/Eigen/src/Core/arch/NEON/PacketMath.h +4366 -2857
  170. package/eigen/Eigen/src/Core/arch/NEON/TypeCasting.h +616 -393
  171. package/eigen/Eigen/src/Core/arch/NEON/UnaryFunctors.h +57 -0
  172. package/eigen/Eigen/src/Core/arch/SSE/Complex.h +350 -198
  173. package/eigen/Eigen/src/Core/arch/SSE/MathFunctions.h +38 -149
  174. package/eigen/Eigen/src/Core/arch/SSE/PacketMath.h +1791 -912
  175. package/eigen/Eigen/src/Core/arch/SSE/Reductions.h +324 -0
  176. package/eigen/Eigen/src/Core/arch/SSE/TypeCasting.h +128 -40
  177. package/eigen/Eigen/src/Core/arch/SVE/MathFunctions.h +10 -6
  178. package/eigen/Eigen/src/Core/arch/SVE/PacketMath.h +156 -234
  179. package/eigen/Eigen/src/Core/arch/SVE/TypeCasting.h +6 -3
  180. package/eigen/Eigen/src/Core/arch/SYCL/InteropHeaders.h +27 -32
  181. package/eigen/Eigen/src/Core/arch/SYCL/MathFunctions.h +119 -117
  182. package/eigen/Eigen/src/Core/arch/SYCL/PacketMath.h +325 -419
  183. package/eigen/Eigen/src/Core/arch/SYCL/TypeCasting.h +15 -17
  184. package/eigen/Eigen/src/Core/arch/ZVector/Complex.h +325 -181
  185. package/eigen/Eigen/src/Core/arch/ZVector/MathFunctions.h +94 -83
  186. package/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h +811 -458
  187. package/eigen/Eigen/src/Core/functors/AssignmentFunctors.h +121 -124
  188. package/eigen/Eigen/src/Core/functors/BinaryFunctors.h +576 -370
  189. package/eigen/Eigen/src/Core/functors/NullaryFunctors.h +194 -109
  190. package/eigen/Eigen/src/Core/functors/StlFunctors.h +95 -112
  191. package/eigen/Eigen/src/Core/functors/TernaryFunctors.h +34 -7
  192. package/eigen/Eigen/src/Core/functors/UnaryFunctors.h +1038 -749
  193. package/eigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h +1883 -1375
  194. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix.h +312 -370
  195. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +189 -176
  196. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h +84 -81
  197. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h +154 -73
  198. package/eigen/Eigen/src/Core/products/GeneralMatrixVector.h +292 -337
  199. package/eigen/Eigen/src/Core/products/GeneralMatrixVector_BLAS.h +80 -77
  200. package/eigen/Eigen/src/Core/products/Parallelizer.h +207 -105
  201. package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +327 -388
  202. package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h +206 -224
  203. package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector.h +138 -147
  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 -47
  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 -277
  212. package/eigen/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h +108 -109
  213. package/eigen/Eigen/src/Core/products/TriangularSolverVector.h +68 -94
  214. package/eigen/Eigen/src/Core/util/Assert.h +158 -0
  215. package/eigen/Eigen/src/Core/util/BlasUtil.h +342 -303
  216. package/eigen/Eigen/src/Core/util/ConfigureVectorization.h +348 -317
  217. package/eigen/Eigen/src/Core/util/Constants.h +297 -262
  218. package/eigen/Eigen/src/Core/util/DisableStupidWarnings.h +130 -90
  219. package/eigen/Eigen/src/Core/util/EmulateArray.h +270 -0
  220. package/eigen/Eigen/src/Core/util/ForwardDeclarations.h +449 -247
  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 +417 -116
  224. package/eigen/Eigen/src/Core/util/IntegralConstant.h +211 -204
  225. package/eigen/Eigen/src/Core/util/MKL_support.h +39 -37
  226. package/eigen/Eigen/src/Core/util/Macros.h +655 -773
  227. package/eigen/Eigen/src/Core/util/MaxSizeVector.h +139 -0
  228. package/eigen/Eigen/src/Core/util/Memory.h +970 -748
  229. package/eigen/Eigen/src/Core/util/Meta.h +581 -633
  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 +17 -17
  233. package/eigen/Eigen/src/Core/util/Serializer.h +209 -0
  234. package/eigen/Eigen/src/Core/util/StaticAssert.h +50 -166
  235. package/eigen/Eigen/src/Core/util/SymbolicIndex.h +377 -225
  236. package/eigen/Eigen/src/Core/util/XprHelper.h +784 -547
  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 +89 -105
  246. package/eigen/Eigen/src/Eigenvalues/RealQZ.h +537 -607
  247. package/eigen/Eigen/src/Eigenvalues/RealSchur.h +342 -381
  248. package/eigen/Eigen/src/Eigenvalues/RealSchur_LAPACKE.h +41 -35
  249. package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +541 -595
  250. package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h +47 -44
  251. package/eigen/Eigen/src/Eigenvalues/Tridiagonalization.h +430 -462
  252. package/eigen/Eigen/src/Geometry/AlignedBox.h +226 -227
  253. package/eigen/Eigen/src/Geometry/AngleAxis.h +131 -133
  254. package/eigen/Eigen/src/Geometry/EulerAngles.h +163 -74
  255. package/eigen/Eigen/src/Geometry/Homogeneous.h +285 -333
  256. package/eigen/Eigen/src/Geometry/Hyperplane.h +151 -160
  257. package/eigen/Eigen/src/Geometry/InternalHeaderCheck.h +3 -0
  258. package/eigen/Eigen/src/Geometry/OrthoMethods.h +168 -146
  259. package/eigen/Eigen/src/Geometry/ParametrizedLine.h +127 -127
  260. package/eigen/Eigen/src/Geometry/Quaternion.h +566 -506
  261. package/eigen/Eigen/src/Geometry/Rotation2D.h +107 -105
  262. package/eigen/Eigen/src/Geometry/RotationBase.h +148 -145
  263. package/eigen/Eigen/src/Geometry/Scaling.h +113 -106
  264. package/eigen/Eigen/src/Geometry/Transform.h +858 -936
  265. package/eigen/Eigen/src/Geometry/Translation.h +94 -92
  266. package/eigen/Eigen/src/Geometry/Umeyama.h +79 -84
  267. package/eigen/Eigen/src/Geometry/arch/Geometry_SIMD.h +90 -104
  268. package/eigen/Eigen/src/Householder/BlockHouseholder.h +51 -46
  269. package/eigen/Eigen/src/Householder/Householder.h +102 -124
  270. package/eigen/Eigen/src/Householder/HouseholderSequence.h +412 -453
  271. package/eigen/Eigen/src/Householder/InternalHeaderCheck.h +3 -0
  272. package/eigen/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +149 -162
  273. package/eigen/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +124 -119
  274. package/eigen/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +92 -104
  275. package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +251 -243
  276. package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +224 -228
  277. package/eigen/Eigen/src/IterativeLinearSolvers/InternalHeaderCheck.h +3 -0
  278. package/eigen/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +178 -227
  279. package/eigen/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h +79 -84
  280. package/eigen/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h +54 -60
  281. package/eigen/Eigen/src/Jacobi/InternalHeaderCheck.h +3 -0
  282. package/eigen/Eigen/src/Jacobi/Jacobi.h +252 -308
  283. package/eigen/Eigen/src/KLUSupport/InternalHeaderCheck.h +3 -0
  284. package/eigen/Eigen/src/KLUSupport/KLUSupport.h +208 -227
  285. package/eigen/Eigen/src/LU/Determinant.h +50 -69
  286. package/eigen/Eigen/src/LU/FullPivLU.h +545 -596
  287. package/eigen/Eigen/src/LU/InternalHeaderCheck.h +3 -0
  288. package/eigen/Eigen/src/LU/InverseImpl.h +206 -285
  289. package/eigen/Eigen/src/LU/PartialPivLU.h +390 -428
  290. package/eigen/Eigen/src/LU/PartialPivLU_LAPACKE.h +54 -40
  291. package/eigen/Eigen/src/LU/arch/InverseSize4.h +72 -70
  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 +243 -265
  295. package/eigen/Eigen/src/OrderingMethods/Eigen_Colamd.h +831 -1004
  296. package/eigen/Eigen/src/OrderingMethods/InternalHeaderCheck.h +3 -0
  297. package/eigen/Eigen/src/OrderingMethods/Ordering.h +112 -119
  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 -430
  302. package/eigen/Eigen/src/QR/ColPivHouseholderQR.h +479 -479
  303. package/eigen/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h +120 -56
  304. package/eigen/Eigen/src/QR/CompleteOrthogonalDecomposition.h +166 -153
  305. package/eigen/Eigen/src/QR/FullPivHouseholderQR.h +495 -475
  306. package/eigen/Eigen/src/QR/HouseholderQR.h +394 -285
  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 +244 -264
  311. package/eigen/Eigen/src/SVD/BDCSVD.h +817 -713
  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 +577 -543
  315. package/eigen/Eigen/src/SVD/JacobiSVD_LAPACKE.h +85 -49
  316. package/eigen/Eigen/src/SVD/SVDBase.h +242 -182
  317. package/eigen/Eigen/src/SVD/UpperBidiagonalization.h +200 -235
  318. package/eigen/Eigen/src/SparseCholesky/InternalHeaderCheck.h +3 -0
  319. package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky.h +765 -594
  320. package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +308 -94
  321. package/eigen/Eigen/src/SparseCore/AmbiVector.h +202 -251
  322. package/eigen/Eigen/src/SparseCore/CompressedStorage.h +184 -252
  323. package/eigen/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +134 -178
  324. package/eigen/Eigen/src/SparseCore/InternalHeaderCheck.h +3 -0
  325. package/eigen/Eigen/src/SparseCore/SparseAssign.h +149 -140
  326. package/eigen/Eigen/src/SparseCore/SparseBlock.h +403 -440
  327. package/eigen/Eigen/src/SparseCore/SparseColEtree.h +100 -112
  328. package/eigen/Eigen/src/SparseCore/SparseCompressedBase.h +525 -303
  329. package/eigen/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +555 -339
  330. package/eigen/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +100 -108
  331. package/eigen/Eigen/src/SparseCore/SparseDenseProduct.h +169 -197
  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 +1603 -1245
  337. package/eigen/Eigen/src/SparseCore/SparseMatrixBase.h +403 -350
  338. package/eigen/Eigen/src/SparseCore/SparsePermutation.h +186 -115
  339. package/eigen/Eigen/src/SparseCore/SparseProduct.h +94 -97
  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 +370 -416
  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 +138 -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 +756 -710
  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 +245 -301
  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 +89 -100
  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 +124 -132
  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 +450 -502
  370. package/eigen/Eigen/src/StlSupport/StdDeque.h +28 -93
  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 -730
  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 +428 -464
  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 +9972 -16179
  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.h → BlockMethods.inc} +434 -506
  401. package/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.inc +116 -0
  402. package/eigen/Eigen/src/plugins/{CommonCwiseUnaryOps.h → CommonCwiseUnaryOps.inc} +58 -68
  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/package.json +1 -1
  409. package/eigen/COPYING.APACHE +0 -203
  410. package/eigen/COPYING.BSD +0 -26
  411. package/eigen/COPYING.GPL +0 -674
  412. package/eigen/COPYING.LGPL +0 -502
  413. package/eigen/COPYING.MINPACK +0 -51
  414. package/eigen/COPYING.MPL2 +0 -373
  415. package/eigen/COPYING.README +0 -18
  416. package/eigen/Eigen/src/Core/BooleanRedux.h +0 -162
  417. package/eigen/Eigen/src/Core/arch/CUDA/Complex.h +0 -258
  418. package/eigen/Eigen/src/Core/arch/Default/TypeCasting.h +0 -120
  419. package/eigen/Eigen/src/Core/arch/SYCL/SyclMemoryModel.h +0 -694
  420. package/eigen/Eigen/src/Core/util/NonMPL2.h +0 -3
  421. package/eigen/Eigen/src/SparseCore/MappedSparseMatrix.h +0 -67
  422. package/eigen/Eigen/src/SparseLU/SparseLU_gemm_kernel.h +0 -280
  423. package/eigen/Eigen/src/misc/lapack.h +0 -152
  424. package/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.h +0 -358
  425. package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.h +0 -696
  426. package/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.h +0 -115
  427. package/eigen/Eigen/src/plugins/IndexedViewMethods.h +0 -262
  428. package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.h +0 -152
  429. package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.h +0 -95
  430. package/eigen/Eigen/src/plugins/ReshapedMethods.h +0 -149
  431. 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
- * \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
- EIGEN_DEVICE_FUNC
41
- JacobiRotation() {}
42
-
43
- /** Construct a planar rotation from a cosine-sine pair (\a c, \c s). */
44
- EIGEN_DEVICE_FUNC
45
- JacobiRotation(const Scalar& c, const Scalar& s) : m_c(c), m_s(s) {}
46
-
47
- EIGEN_DEVICE_FUNC Scalar& c() { return m_c; }
48
- EIGEN_DEVICE_FUNC Scalar c() const { return m_c; }
49
- EIGEN_DEVICE_FUNC Scalar& s() { return m_s; }
50
- EIGEN_DEVICE_FUNC Scalar s() const { return m_s; }
51
-
52
- /** Concatenates two planar rotation */
53
- EIGEN_DEVICE_FUNC
54
- JacobiRotation operator*(const JacobiRotation& other)
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
- /** Returns the transposed transformation */
62
- EIGEN_DEVICE_FUNC
63
- 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
+ }
64
65
 
65
- /** Returns the adjoint transformation */
66
- EIGEN_DEVICE_FUNC
67
- 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
+ }
68
71
 
69
- template<typename Derived>
70
- EIGEN_DEVICE_FUNC
71
- bool makeJacobi(const MatrixBase<Derived>&, Index p, Index q);
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
- EIGEN_DEVICE_FUNC
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
- protected:
79
- EIGEN_DEVICE_FUNC
80
- void makeGivens(const Scalar& p, const Scalar& q, Scalar* r, internal::true_type);
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
- Scalar m_c, m_s;
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 2x2 matrix
88
- * \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$
89
- *
90
- * \sa MatrixBase::makeJacobi(const MatrixBase<Derived>&, Index, Index), MatrixBase::applyOnTheLeft(), MatrixBase::applyOnTheRight()
91
- */
92
- template<typename Scalar>
93
- EIGEN_DEVICE_FUNC
94
- bool JacobiRotation<Scalar>::makeJacobi(const RealScalar& x, const Scalar& y, const RealScalar& z)
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
- else
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 = - 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;
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 selfadjoint matrix
128
- * \f$ B = \left ( \begin{array}{cc} \text{this}_{pp} & \text{this}_{pq} \\ (\text{this}_{pq})^* & \text{this}_{qq} \end{array} \right )\f$ yields
129
- * a diagonal matrix \f$ A = J^* B J \f$
130
- *
131
- * Example: \include Jacobi_makeJacobi.cpp
132
- * Output: \verbinclude Jacobi_makeJacobi.out
133
- *
134
- * \sa JacobiRotation::makeJacobi(RealScalar, Scalar, RealScalar), MatrixBase::applyOnTheLeft(), MatrixBase::applyOnTheRight()
135
- */
136
- template<typename Scalar>
137
- template<typename Derived>
138
- EIGEN_DEVICE_FUNC
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
- * \f$ V = \left ( \begin{array}{c} p \\ q \end{array} \right )\f$ yields:
146
- * \f$ G^* V = \left ( \begin{array}{c} r \\ 0 \end{array} \right )\f$.
147
- *
148
- * The value of \a r is returned if \a r is not null (the default is null).
149
- * Also note that G is built such that the cosine is always real.
150
- *
151
- * Example: \include Jacobi_makeGivens.cpp
152
- * Output: \verbinclude Jacobi_makeGivens.out
153
- *
154
- * This function implements the continuous Givens rotation generation algorithm
155
- * found in Anderson (2000), Discontinuous Plane Rotations and the Symmetric Eigenvalue Problem.
156
- * LAPACK Working Note 150, University of Tennessee, UT-CS-00-454, December 4, 2000.
157
- *
158
- * \sa MatrixBase::applyOnTheLeft(), MatrixBase::applyOnTheRight()
159
- */
160
- template<typename Scalar>
161
- EIGEN_DEVICE_FUNC
162
- void JacobiRotation<Scalar>::makeGivens(const Scalar& p, const Scalar& q, Scalar* r)
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
- void JacobiRotation<Scalar>::makeGivens(const Scalar& p, const Scalar& q, Scalar* r, internal::true_type)
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
- void JacobiRotation<Scalar>::makeGivens(const Scalar& p, const Scalar& q, Scalar* r, internal::false_type)
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
- if(q==Scalar(0))
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
- else if(abs(p) > abs(q))
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
- u = -u;
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
- else
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
- u = -u;
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
- * Applies the clock wise 2D rotation \a j to the set of 2D vectors of coordinates \a x and \a y:
277
- * \f$ \left ( \begin{array}{cc} x \\ y \end{array} \right ) = J \left ( \begin{array}{cc} x \\ y \end{array} \right ) \f$
278
- *
279
- * \sa MatrixBase::applyOnTheLeft(), MatrixBase::applyOnTheRight()
280
- */
281
- template<typename VectorX, typename VectorY, typename OtherScalar>
282
- EIGEN_DEVICE_FUNC
283
- void apply_rotation_in_the_plane(DenseBase<VectorX>& xpr_x, DenseBase<VectorY>& xpr_y, const JacobiRotation<OtherScalar>& j);
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
- * 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,
288
- * with \f$ B = \left ( \begin{array}{cc} \text{*this.row}(p) \\ \text{*this.row}(q) \end{array} \right ) \f$.
289
- *
290
- * \sa class JacobiRotation, MatrixBase::applyOnTheRight(), internal::apply_rotation_in_the_plane()
291
- */
292
- template<typename Derived>
293
- template<typename OtherScalar>
294
- EIGEN_DEVICE_FUNC
295
- inline void MatrixBase<Derived>::applyOnTheLeft(Index p, Index q, const JacobiRotation<OtherScalar>& j)
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
- /** \ingroup Jacobi_Module
303
- * 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
304
- * with \f$ B = \left ( \begin{array}{cc} \text{*this.col}(p) & \text{*this.col}(q) \end{array} \right ) \f$.
305
- *
306
- * \sa class JacobiRotation, MatrixBase::applyOnTheLeft(), internal::apply_rotation_in_the_plane()
307
- */
308
- template<typename Derived>
309
- template<typename OtherScalar>
310
- EIGEN_DEVICE_FUNC
311
- inline void MatrixBase<Derived>::applyOnTheRight(Index p, Index q, const JacobiRotation<OtherScalar>& j)
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
- int SizeAtCompileTime, int MinAlignment, bool Vectorizable>
322
- struct apply_rotation_in_the_plane_selector
323
- {
324
- static EIGEN_DEVICE_FUNC
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 = c * xi + numext::conj(s) * yi;
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
- int SizeAtCompileTime, int MinAlignment>
341
- struct apply_rotation_in_the_plane_selector<Scalar,OtherScalar,SizeAtCompileTime,MinAlignment,true /* vectorizable */>
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
- enum { Peeling = 2 };
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] = c * xi + numext::conj(s) * yi;
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
- else
390
- {
391
- Index peelingEnd = alignedStart + ((size-alignedStart)/(Peeling*PacketSize))*(Peeling*PacketSize);
392
- for(Index i=alignedStart; i<peelingEnd; i+=Peeling*PacketSize)
393
- {
394
- Packet xi = ploadu<Packet>(px);
395
- Packet xi1 = ploadu<Packet>(px+PacketSize);
396
- Packet yi = pload <Packet>(py);
397
- Packet yi1 = pload <Packet>(py+PacketSize);
398
- pstoreu(px, padd(pm.pmul(pc,xi),pcj.pmul(ps,yi)));
399
- pstoreu(px+PacketSize, padd(pm.pmul(pc,xi1),pcj.pmul(ps,yi1)));
400
- pstore (py, psub(pcj.pmul(pc,yi),pm.pmul(ps,xi)));
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 xi = ploadu<Packet>(x+peelingEnd);
408
- Packet yi = pload <Packet>(y+peelingEnd);
409
- pstoreu(x+peelingEnd, padd(pm.pmul(pc,xi),pcj.pmul(ps,yi)));
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] = c * xi + numext::conj(s) * yi;
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>0) // FIXME should be compared to the required alignment
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<OtherPacket>::IsComplex,false> pcj;
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
- 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);
447
395
  }
448
396
  }
449
397
  };
450
398
 
451
- template<typename VectorX, typename VectorY, typename OtherScalar>
452
- EIGEN_DEVICE_FUNC
453
- void /*EIGEN_DONT_INLINE*/ apply_rotation_in_the_plane(DenseBase<VectorX>& xpr_x, DenseBase<VectorY>& xpr_y, const JacobiRotation<OtherScalar>& j)
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
- const bool Vectorizable = (int(VectorX::Flags) & int(VectorY::Flags) & PacketAccessBit)
457
- && (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));
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==OtherScalar(1) && s==OtherScalar(0))
470
- return;
471
-
472
- apply_rotation_in_the_plane_selector<
473
- Scalar,OtherScalar,
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
- } // end namespace internal
423
+ } // end namespace internal
480
424
 
481
- } // end namespace Eigen
425
+ } // end namespace Eigen
482
426
 
483
- #endif // EIGEN_JACOBI_H
427
+ #endif // EIGEN_JACOBI_H