@smake/eigen 1.0.2 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (287) hide show
  1. package/README.md +1 -1
  2. package/eigen/COPYING.APACHE +203 -0
  3. package/eigen/COPYING.BSD +26 -0
  4. package/eigen/COPYING.GPL +674 -0
  5. package/eigen/COPYING.LGPL +502 -0
  6. package/eigen/COPYING.MINPACK +51 -0
  7. package/eigen/COPYING.MPL2 +373 -0
  8. package/eigen/COPYING.README +18 -0
  9. package/eigen/Eigen/Cholesky +0 -1
  10. package/eigen/Eigen/Core +108 -266
  11. package/eigen/Eigen/Eigenvalues +0 -1
  12. package/eigen/Eigen/Geometry +3 -6
  13. package/eigen/Eigen/Householder +0 -1
  14. package/eigen/Eigen/Jacobi +0 -1
  15. package/eigen/Eigen/KLUSupport +41 -0
  16. package/eigen/Eigen/LU +2 -5
  17. package/eigen/Eigen/OrderingMethods +0 -3
  18. package/eigen/Eigen/PaStiXSupport +1 -0
  19. package/eigen/Eigen/PardisoSupport +0 -0
  20. package/eigen/Eigen/QR +0 -1
  21. package/eigen/Eigen/QtAlignedMalloc +0 -1
  22. package/eigen/Eigen/SVD +0 -1
  23. package/eigen/Eigen/Sparse +0 -2
  24. package/eigen/Eigen/SparseCholesky +0 -8
  25. package/eigen/Eigen/SparseLU +4 -0
  26. package/eigen/Eigen/src/Cholesky/LDLT.h +42 -27
  27. package/eigen/Eigen/src/Cholesky/LLT.h +39 -23
  28. package/eigen/Eigen/src/CholmodSupport/CholmodSupport.h +90 -47
  29. package/eigen/Eigen/src/Core/ArithmeticSequence.h +413 -0
  30. package/eigen/Eigen/src/Core/Array.h +99 -11
  31. package/eigen/Eigen/src/Core/ArrayBase.h +1 -1
  32. package/eigen/Eigen/src/Core/ArrayWrapper.h +21 -21
  33. package/eigen/Eigen/src/Core/Assign.h +1 -1
  34. package/eigen/Eigen/src/Core/AssignEvaluator.h +125 -50
  35. package/eigen/Eigen/src/Core/Assign_MKL.h +10 -10
  36. package/eigen/Eigen/src/Core/BandMatrix.h +16 -16
  37. package/eigen/Eigen/src/Core/Block.h +56 -60
  38. package/eigen/Eigen/src/Core/BooleanRedux.h +29 -31
  39. package/eigen/Eigen/src/Core/CommaInitializer.h +7 -3
  40. package/eigen/Eigen/src/Core/CoreEvaluators.h +325 -272
  41. package/eigen/Eigen/src/Core/CoreIterators.h +5 -0
  42. package/eigen/Eigen/src/Core/CwiseBinaryOp.h +21 -22
  43. package/eigen/Eigen/src/Core/CwiseNullaryOp.h +153 -18
  44. package/eigen/Eigen/src/Core/CwiseUnaryOp.h +6 -6
  45. package/eigen/Eigen/src/Core/CwiseUnaryView.h +12 -10
  46. package/eigen/Eigen/src/Core/DenseBase.h +128 -39
  47. package/eigen/Eigen/src/Core/DenseCoeffsBase.h +25 -21
  48. package/eigen/Eigen/src/Core/DenseStorage.h +150 -68
  49. package/eigen/Eigen/src/Core/Diagonal.h +21 -23
  50. package/eigen/Eigen/src/Core/DiagonalMatrix.h +50 -2
  51. package/eigen/Eigen/src/Core/DiagonalProduct.h +1 -1
  52. package/eigen/Eigen/src/Core/Dot.h +10 -10
  53. package/eigen/Eigen/src/Core/EigenBase.h +10 -9
  54. package/eigen/Eigen/src/Core/ForceAlignedAccess.h +8 -4
  55. package/eigen/Eigen/src/Core/Fuzzy.h +3 -3
  56. package/eigen/Eigen/src/Core/GeneralProduct.h +20 -10
  57. package/eigen/Eigen/src/Core/GenericPacketMath.h +597 -147
  58. package/eigen/Eigen/src/Core/GlobalFunctions.h +40 -33
  59. package/eigen/Eigen/src/Core/IO.h +40 -7
  60. package/eigen/Eigen/src/Core/IndexedView.h +237 -0
  61. package/eigen/Eigen/src/Core/Inverse.h +9 -10
  62. package/eigen/Eigen/src/Core/Map.h +7 -7
  63. package/eigen/Eigen/src/Core/MapBase.h +5 -3
  64. package/eigen/Eigen/src/Core/MathFunctions.h +756 -120
  65. package/eigen/Eigen/src/Core/MathFunctionsImpl.h +118 -19
  66. package/eigen/Eigen/src/Core/Matrix.h +131 -25
  67. package/eigen/Eigen/src/Core/MatrixBase.h +19 -2
  68. package/eigen/Eigen/src/Core/NestByValue.h +25 -50
  69. package/eigen/Eigen/src/Core/NoAlias.h +4 -3
  70. package/eigen/Eigen/src/Core/NumTraits.h +107 -20
  71. package/eigen/Eigen/src/Core/PartialReduxEvaluator.h +232 -0
  72. package/eigen/Eigen/src/Core/PermutationMatrix.h +3 -3
  73. package/eigen/Eigen/src/Core/PlainObjectBase.h +145 -54
  74. package/eigen/Eigen/src/Core/Product.h +30 -25
  75. package/eigen/Eigen/src/Core/ProductEvaluators.h +183 -142
  76. package/eigen/Eigen/src/Core/Random.h +37 -1
  77. package/eigen/Eigen/src/Core/Redux.h +180 -170
  78. package/eigen/Eigen/src/Core/Ref.h +118 -21
  79. package/eigen/Eigen/src/Core/Replicate.h +8 -8
  80. package/eigen/Eigen/src/Core/Reshaped.h +454 -0
  81. package/eigen/Eigen/src/Core/ReturnByValue.h +7 -5
  82. package/eigen/Eigen/src/Core/Reverse.h +18 -12
  83. package/eigen/Eigen/src/Core/Select.h +8 -6
  84. package/eigen/Eigen/src/Core/SelfAdjointView.h +33 -20
  85. package/eigen/Eigen/src/Core/Solve.h +14 -14
  86. package/eigen/Eigen/src/Core/SolveTriangular.h +13 -13
  87. package/eigen/Eigen/src/Core/SolverBase.h +41 -3
  88. package/eigen/Eigen/src/Core/StableNorm.h +100 -70
  89. package/eigen/Eigen/src/Core/StlIterators.h +463 -0
  90. package/eigen/Eigen/src/Core/Stride.h +9 -4
  91. package/eigen/Eigen/src/Core/Swap.h +5 -4
  92. package/eigen/Eigen/src/Core/Transpose.h +86 -27
  93. package/eigen/Eigen/src/Core/Transpositions.h +26 -8
  94. package/eigen/Eigen/src/Core/TriangularMatrix.h +88 -72
  95. package/eigen/Eigen/src/Core/VectorBlock.h +5 -5
  96. package/eigen/Eigen/src/Core/VectorwiseOp.h +159 -70
  97. package/eigen/Eigen/src/Core/Visitor.h +137 -29
  98. package/eigen/Eigen/src/Core/arch/AVX/Complex.h +50 -129
  99. package/eigen/Eigen/src/Core/arch/AVX/MathFunctions.h +126 -337
  100. package/eigen/Eigen/src/Core/arch/AVX/PacketMath.h +1092 -155
  101. package/eigen/Eigen/src/Core/arch/AVX/TypeCasting.h +65 -1
  102. package/eigen/Eigen/src/Core/arch/AVX512/Complex.h +422 -0
  103. package/eigen/Eigen/src/Core/arch/AVX512/MathFunctions.h +186 -213
  104. package/eigen/Eigen/src/Core/arch/AVX512/PacketMath.h +1250 -252
  105. package/eigen/Eigen/src/Core/arch/AVX512/TypeCasting.h +89 -0
  106. package/eigen/Eigen/src/Core/arch/AltiVec/Complex.h +152 -165
  107. package/eigen/Eigen/src/Core/arch/AltiVec/MathFunctions.h +19 -251
  108. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProduct.h +2937 -0
  109. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h +221 -0
  110. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h +629 -0
  111. package/eigen/Eigen/src/Core/arch/AltiVec/PacketMath.h +2042 -392
  112. package/eigen/Eigen/src/Core/arch/CUDA/Complex.h +235 -80
  113. package/eigen/Eigen/src/Core/arch/Default/BFloat16.h +700 -0
  114. package/eigen/Eigen/src/Core/arch/Default/ConjHelper.h +102 -14
  115. package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h +1649 -0
  116. package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h +110 -0
  117. package/eigen/Eigen/src/Core/arch/Default/Half.h +942 -0
  118. package/eigen/Eigen/src/Core/arch/Default/Settings.h +1 -1
  119. package/eigen/Eigen/src/Core/arch/Default/TypeCasting.h +120 -0
  120. package/eigen/Eigen/src/Core/arch/{CUDA → GPU}/MathFunctions.h +16 -4
  121. package/eigen/Eigen/src/Core/arch/GPU/PacketMath.h +1685 -0
  122. package/eigen/Eigen/src/Core/arch/GPU/TypeCasting.h +80 -0
  123. package/eigen/Eigen/src/Core/arch/HIP/hcc/math_constants.h +23 -0
  124. package/eigen/Eigen/src/Core/arch/MSA/Complex.h +648 -0
  125. package/eigen/Eigen/src/Core/arch/MSA/MathFunctions.h +387 -0
  126. package/eigen/Eigen/src/Core/arch/MSA/PacketMath.h +1233 -0
  127. package/eigen/Eigen/src/Core/arch/NEON/Complex.h +313 -219
  128. package/eigen/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h +183 -0
  129. package/eigen/Eigen/src/Core/arch/NEON/MathFunctions.h +54 -70
  130. package/eigen/Eigen/src/Core/arch/NEON/PacketMath.h +4376 -549
  131. package/eigen/Eigen/src/Core/arch/NEON/TypeCasting.h +1419 -0
  132. package/eigen/Eigen/src/Core/arch/SSE/Complex.h +59 -179
  133. package/eigen/Eigen/src/Core/arch/SSE/MathFunctions.h +65 -428
  134. package/eigen/Eigen/src/Core/arch/SSE/PacketMath.h +893 -283
  135. package/eigen/Eigen/src/Core/arch/SSE/TypeCasting.h +65 -0
  136. package/eigen/Eigen/src/Core/arch/SVE/MathFunctions.h +44 -0
  137. package/eigen/Eigen/src/Core/arch/SVE/PacketMath.h +752 -0
  138. package/eigen/Eigen/src/Core/arch/SVE/TypeCasting.h +49 -0
  139. package/eigen/Eigen/src/Core/arch/SYCL/InteropHeaders.h +232 -0
  140. package/eigen/Eigen/src/Core/arch/SYCL/MathFunctions.h +301 -0
  141. package/eigen/Eigen/src/Core/arch/SYCL/PacketMath.h +670 -0
  142. package/eigen/Eigen/src/Core/arch/SYCL/SyclMemoryModel.h +694 -0
  143. package/eigen/Eigen/src/Core/arch/SYCL/TypeCasting.h +85 -0
  144. package/eigen/Eigen/src/Core/arch/ZVector/Complex.h +212 -183
  145. package/eigen/Eigen/src/Core/arch/ZVector/MathFunctions.h +101 -5
  146. package/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h +510 -395
  147. package/eigen/Eigen/src/Core/functors/AssignmentFunctors.h +11 -2
  148. package/eigen/Eigen/src/Core/functors/BinaryFunctors.h +112 -46
  149. package/eigen/Eigen/src/Core/functors/NullaryFunctors.h +31 -30
  150. package/eigen/Eigen/src/Core/functors/StlFunctors.h +32 -2
  151. package/eigen/Eigen/src/Core/functors/UnaryFunctors.h +354 -15
  152. package/eigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h +1073 -585
  153. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix.h +29 -7
  154. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +4 -4
  155. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h +1 -1
  156. package/eigen/Eigen/src/Core/products/GeneralMatrixVector.h +382 -483
  157. package/eigen/Eigen/src/Core/products/Parallelizer.h +23 -9
  158. package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +23 -6
  159. package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector.h +8 -6
  160. package/eigen/Eigen/src/Core/products/SelfadjointProduct.h +2 -2
  161. package/eigen/Eigen/src/Core/products/SelfadjointRank2Update.h +5 -4
  162. package/eigen/Eigen/src/Core/products/TriangularMatrixMatrix.h +3 -3
  163. package/eigen/Eigen/src/Core/products/TriangularSolverMatrix.h +5 -3
  164. package/eigen/Eigen/src/Core/products/TriangularSolverVector.h +13 -10
  165. package/eigen/Eigen/src/Core/util/BlasUtil.h +208 -124
  166. package/eigen/Eigen/src/Core/util/ConfigureVectorization.h +512 -0
  167. package/eigen/Eigen/src/Core/util/Constants.h +25 -9
  168. package/eigen/Eigen/src/Core/util/DisableStupidWarnings.h +14 -2
  169. package/eigen/Eigen/src/Core/util/ForwardDeclarations.h +28 -4
  170. package/eigen/Eigen/src/Core/util/IndexedViewHelper.h +186 -0
  171. package/eigen/Eigen/src/Core/util/IntegralConstant.h +272 -0
  172. package/eigen/Eigen/src/Core/util/MKL_support.h +8 -1
  173. package/eigen/Eigen/src/Core/util/Macros.h +661 -250
  174. package/eigen/Eigen/src/Core/util/Memory.h +222 -52
  175. package/eigen/Eigen/src/Core/util/Meta.h +349 -105
  176. package/eigen/Eigen/src/Core/util/ReshapedHelper.h +51 -0
  177. package/eigen/Eigen/src/Core/util/StaticAssert.h +8 -5
  178. package/eigen/Eigen/src/Core/util/SymbolicIndex.h +293 -0
  179. package/eigen/Eigen/src/Core/util/XprHelper.h +48 -30
  180. package/eigen/Eigen/src/Eigenvalues/ComplexEigenSolver.h +1 -1
  181. package/eigen/Eigen/src/Eigenvalues/ComplexSchur.h +1 -1
  182. package/eigen/Eigen/src/Eigenvalues/EigenSolver.h +2 -2
  183. package/eigen/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h +1 -1
  184. package/eigen/Eigen/src/Eigenvalues/HessenbergDecomposition.h +2 -2
  185. package/eigen/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h +2 -2
  186. package/eigen/Eigen/src/Eigenvalues/RealQZ.h +9 -6
  187. package/eigen/Eigen/src/Eigenvalues/RealSchur.h +10 -5
  188. package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +75 -42
  189. package/eigen/Eigen/src/Eigenvalues/Tridiagonalization.h +20 -15
  190. package/eigen/Eigen/src/Geometry/AlignedBox.h +99 -5
  191. package/eigen/Eigen/src/Geometry/AngleAxis.h +4 -4
  192. package/eigen/Eigen/src/Geometry/EulerAngles.h +3 -3
  193. package/eigen/Eigen/src/Geometry/Homogeneous.h +15 -11
  194. package/eigen/Eigen/src/Geometry/Hyperplane.h +1 -1
  195. package/eigen/Eigen/src/Geometry/OrthoMethods.h +3 -2
  196. package/eigen/Eigen/src/Geometry/ParametrizedLine.h +39 -2
  197. package/eigen/Eigen/src/Geometry/Quaternion.h +52 -14
  198. package/eigen/Eigen/src/Geometry/Rotation2D.h +3 -3
  199. package/eigen/Eigen/src/Geometry/Scaling.h +22 -4
  200. package/eigen/Eigen/src/Geometry/Transform.h +86 -65
  201. package/eigen/Eigen/src/Geometry/Translation.h +6 -6
  202. package/eigen/Eigen/src/Geometry/arch/Geometry_SIMD.h +168 -0
  203. package/eigen/Eigen/src/Householder/BlockHouseholder.h +9 -2
  204. package/eigen/Eigen/src/Householder/Householder.h +8 -4
  205. package/eigen/Eigen/src/Householder/HouseholderSequence.h +123 -48
  206. package/eigen/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +15 -15
  207. package/eigen/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +7 -23
  208. package/eigen/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +5 -22
  209. package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +41 -47
  210. package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +51 -60
  211. package/eigen/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +70 -20
  212. package/eigen/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h +2 -20
  213. package/eigen/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h +11 -9
  214. package/eigen/Eigen/src/Jacobi/Jacobi.h +31 -10
  215. package/eigen/Eigen/src/KLUSupport/KLUSupport.h +358 -0
  216. package/eigen/Eigen/src/LU/Determinant.h +35 -19
  217. package/eigen/Eigen/src/LU/FullPivLU.h +29 -43
  218. package/eigen/Eigen/src/LU/InverseImpl.h +25 -8
  219. package/eigen/Eigen/src/LU/PartialPivLU.h +67 -57
  220. package/eigen/Eigen/src/LU/arch/InverseSize4.h +351 -0
  221. package/eigen/Eigen/src/OrderingMethods/Amd.h +7 -17
  222. package/eigen/Eigen/src/OrderingMethods/Eigen_Colamd.h +297 -277
  223. package/eigen/Eigen/src/OrderingMethods/Ordering.h +6 -10
  224. package/eigen/Eigen/src/PaStiXSupport/PaStiXSupport.h +1 -1
  225. package/eigen/Eigen/src/PardisoSupport/PardisoSupport.h +10 -9
  226. package/eigen/Eigen/src/QR/ColPivHouseholderQR.h +41 -20
  227. package/eigen/Eigen/src/QR/CompleteOrthogonalDecomposition.h +100 -27
  228. package/eigen/Eigen/src/QR/FullPivHouseholderQR.h +59 -22
  229. package/eigen/Eigen/src/QR/HouseholderQR.h +48 -23
  230. package/eigen/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h +25 -3
  231. package/eigen/Eigen/src/SVD/BDCSVD.h +137 -48
  232. package/eigen/Eigen/src/SVD/JacobiSVD.h +22 -14
  233. package/eigen/Eigen/src/SVD/SVDBase.h +82 -21
  234. package/eigen/Eigen/src/SVD/UpperBidiagonalization.h +3 -3
  235. package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky.h +16 -8
  236. package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +11 -36
  237. package/eigen/Eigen/src/SparseCore/CompressedStorage.h +16 -0
  238. package/eigen/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +6 -6
  239. package/eigen/Eigen/src/SparseCore/SparseAssign.h +81 -27
  240. package/eigen/Eigen/src/SparseCore/SparseBlock.h +25 -57
  241. package/eigen/Eigen/src/SparseCore/SparseCompressedBase.h +40 -11
  242. package/eigen/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +11 -15
  243. package/eigen/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +2 -2
  244. package/eigen/Eigen/src/SparseCore/SparseDenseProduct.h +30 -8
  245. package/eigen/Eigen/src/SparseCore/SparseMatrix.h +124 -10
  246. package/eigen/Eigen/src/SparseCore/SparseMatrixBase.h +5 -12
  247. package/eigen/Eigen/src/SparseCore/SparseProduct.h +13 -1
  248. package/eigen/Eigen/src/SparseCore/SparseRef.h +7 -7
  249. package/eigen/Eigen/src/SparseCore/SparseSelfAdjointView.h +3 -0
  250. package/eigen/Eigen/src/SparseCore/SparseUtil.h +8 -0
  251. package/eigen/Eigen/src/SparseCore/SparseVector.h +1 -1
  252. package/eigen/Eigen/src/SparseLU/SparseLU.h +160 -10
  253. package/eigen/Eigen/src/SparseLU/SparseLU_Memory.h +1 -1
  254. package/eigen/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h +76 -2
  255. package/eigen/Eigen/src/SparseLU/SparseLU_column_dfs.h +2 -2
  256. package/eigen/Eigen/src/SparseLU/SparseLU_gemm_kernel.h +1 -1
  257. package/eigen/Eigen/src/SparseLU/SparseLU_panel_bmod.h +1 -1
  258. package/eigen/Eigen/src/SparseQR/SparseQR.h +19 -6
  259. package/eigen/Eigen/src/StlSupport/StdDeque.h +2 -14
  260. package/eigen/Eigen/src/StlSupport/StdList.h +2 -2
  261. package/eigen/Eigen/src/StlSupport/StdVector.h +2 -2
  262. package/eigen/Eigen/src/SuperLUSupport/SuperLUSupport.h +6 -8
  263. package/eigen/Eigen/src/UmfPackSupport/UmfPackSupport.h +175 -39
  264. package/eigen/Eigen/src/misc/lapacke.h +5 -4
  265. package/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.h +27 -1
  266. package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.h +155 -11
  267. package/eigen/Eigen/src/plugins/BlockMethods.h +626 -242
  268. package/eigen/Eigen/src/plugins/CommonCwiseUnaryOps.h +14 -0
  269. package/eigen/Eigen/src/plugins/IndexedViewMethods.h +262 -0
  270. package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.h +4 -4
  271. package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.h +10 -0
  272. package/eigen/Eigen/src/plugins/ReshapedMethods.h +149 -0
  273. package/eigen/README.md +5 -0
  274. package/lib/LibEigen.d.ts +4 -0
  275. package/lib/LibEigen.js +14 -0
  276. package/lib/index.d.ts +1 -1
  277. package/lib/index.js +7 -3
  278. package/package.json +2 -10
  279. package/eigen/Eigen/CMakeLists.txt +0 -19
  280. package/eigen/Eigen/src/Core/arch/CUDA/Half.h +0 -675
  281. package/eigen/Eigen/src/Core/arch/CUDA/PacketMath.h +0 -333
  282. package/eigen/Eigen/src/Core/arch/CUDA/PacketMathHalf.h +0 -1124
  283. package/eigen/Eigen/src/Core/arch/CUDA/TypeCasting.h +0 -212
  284. package/eigen/Eigen/src/Geometry/arch/Geometry_SSE.h +0 -161
  285. package/eigen/Eigen/src/LU/arch/Inverse_SSE.h +0 -338
  286. package/lib/eigen.d.ts +0 -2
  287. package/lib/eigen.js +0 -15
@@ -0,0 +1,351 @@
1
+ // This file is part of Eigen, a lightweight C++ template library
2
+ // for linear algebra.
3
+ //
4
+ // Copyright (C) 2001 Intel Corporation
5
+ // Copyright (C) 2010 Gael Guennebaud <gael.guennebaud@inria.fr>
6
+ // Copyright (C) 2009 Benoit Jacob <jacob.benoit.1@gmail.com>
7
+ //
8
+ // This Source Code Form is subject to the terms of the Mozilla
9
+ // Public License v. 2.0. If a copy of the MPL was not distributed
10
+ // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
11
+ //
12
+ // The algorithm below is a reimplementation of former \src\LU\Inverse_SSE.h using PacketMath.
13
+ // inv(M) = M#/|M|, where inv(M), M# and |M| denote the inverse of M,
14
+ // adjugate of M and determinant of M respectively. M# is computed block-wise
15
+ // using specific formulae. For proof, see:
16
+ // https://lxjk.github.io/2017/09/03/Fast-4x4-Matrix-Inverse-with-SSE-SIMD-Explained.html
17
+ // Variable names are adopted from \src\LU\Inverse_SSE.h.
18
+ //
19
+ // The SSE code for the 4x4 float and double matrix inverse in former (deprecated) \src\LU\Inverse_SSE.h
20
+ // comes from the following Intel's library:
21
+ // http://software.intel.com/en-us/articles/optimized-matrix-library-for-use-with-the-intel-pentiumr-4-processors-sse2-instructions/
22
+ //
23
+ // Here is the respective copyright and license statement:
24
+ //
25
+ // Copyright (c) 2001 Intel Corporation.
26
+ //
27
+ // Permition is granted to use, copy, distribute and prepare derivative works
28
+ // of this library for any purpose and without fee, provided, that the above
29
+ // copyright notice and this statement appear in all copies.
30
+ // Intel makes no representations about the suitability of this software for
31
+ // any purpose, and specifically disclaims all warranties.
32
+ // See LEGAL.TXT for all the legal information.
33
+ //
34
+ // TODO: Unify implementations of different data types (i.e. float and double).
35
+ #ifndef EIGEN_INVERSE_SIZE_4_H
36
+ #define EIGEN_INVERSE_SIZE_4_H
37
+
38
+ namespace Eigen
39
+ {
40
+ namespace internal
41
+ {
42
+ template <typename MatrixType, typename ResultType>
43
+ struct compute_inverse_size4<Architecture::Target, float, MatrixType, ResultType>
44
+ {
45
+ enum
46
+ {
47
+ MatrixAlignment = traits<MatrixType>::Alignment,
48
+ ResultAlignment = traits<ResultType>::Alignment,
49
+ StorageOrdersMatch = (MatrixType::Flags & RowMajorBit) == (ResultType::Flags & RowMajorBit)
50
+ };
51
+ typedef typename conditional<(MatrixType::Flags & LinearAccessBit), MatrixType const &, typename MatrixType::PlainObject>::type ActualMatrixType;
52
+
53
+ static void run(const MatrixType &mat, ResultType &result)
54
+ {
55
+ ActualMatrixType matrix(mat);
56
+
57
+ const float* data = matrix.data();
58
+ const Index stride = matrix.innerStride();
59
+ Packet4f _L1 = ploadt<Packet4f,MatrixAlignment>(data);
60
+ Packet4f _L2 = ploadt<Packet4f,MatrixAlignment>(data + stride*4);
61
+ Packet4f _L3 = ploadt<Packet4f,MatrixAlignment>(data + stride*8);
62
+ Packet4f _L4 = ploadt<Packet4f,MatrixAlignment>(data + stride*12);
63
+
64
+ // Four 2x2 sub-matrices of the input matrix
65
+ // input = [[A, B],
66
+ // [C, D]]
67
+ Packet4f A, B, C, D;
68
+
69
+ if (!StorageOrdersMatch)
70
+ {
71
+ A = vec4f_unpacklo(_L1, _L2);
72
+ B = vec4f_unpacklo(_L3, _L4);
73
+ C = vec4f_unpackhi(_L1, _L2);
74
+ D = vec4f_unpackhi(_L3, _L4);
75
+ }
76
+ else
77
+ {
78
+ A = vec4f_movelh(_L1, _L2);
79
+ B = vec4f_movehl(_L2, _L1);
80
+ C = vec4f_movelh(_L3, _L4);
81
+ D = vec4f_movehl(_L4, _L3);
82
+ }
83
+
84
+ Packet4f AB, DC;
85
+
86
+ // AB = A# * B, where A# denotes the adjugate of A, and * denotes matrix product.
87
+ AB = pmul(vec4f_swizzle2(A, A, 3, 3, 0, 0), B);
88
+ AB = psub(AB, pmul(vec4f_swizzle2(A, A, 1, 1, 2, 2), vec4f_swizzle2(B, B, 2, 3, 0, 1)));
89
+
90
+ // DC = D#*C
91
+ DC = pmul(vec4f_swizzle2(D, D, 3, 3, 0, 0), C);
92
+ DC = psub(DC, pmul(vec4f_swizzle2(D, D, 1, 1, 2, 2), vec4f_swizzle2(C, C, 2, 3, 0, 1)));
93
+
94
+ // determinants of the sub-matrices
95
+ Packet4f dA, dB, dC, dD;
96
+
97
+ dA = pmul(vec4f_swizzle2(A, A, 3, 3, 1, 1), A);
98
+ dA = psub(dA, vec4f_movehl(dA, dA));
99
+
100
+ dB = pmul(vec4f_swizzle2(B, B, 3, 3, 1, 1), B);
101
+ dB = psub(dB, vec4f_movehl(dB, dB));
102
+
103
+ dC = pmul(vec4f_swizzle2(C, C, 3, 3, 1, 1), C);
104
+ dC = psub(dC, vec4f_movehl(dC, dC));
105
+
106
+ dD = pmul(vec4f_swizzle2(D, D, 3, 3, 1, 1), D);
107
+ dD = psub(dD, vec4f_movehl(dD, dD));
108
+
109
+ Packet4f d, d1, d2;
110
+
111
+ d = pmul(vec4f_swizzle2(DC, DC, 0, 2, 1, 3), AB);
112
+ d = padd(d, vec4f_movehl(d, d));
113
+ d = padd(d, vec4f_swizzle2(d, d, 1, 0, 0, 0));
114
+ d1 = pmul(dA, dD);
115
+ d2 = pmul(dB, dC);
116
+
117
+ // determinant of the input matrix, det = |A||D| + |B||C| - trace(A#*B*D#*C)
118
+ Packet4f det = vec4f_duplane(psub(padd(d1, d2), d), 0);
119
+
120
+ // reciprocal of the determinant of the input matrix, rd = 1/det
121
+ Packet4f rd = pdiv(pset1<Packet4f>(1.0f), det);
122
+
123
+ // Four sub-matrices of the inverse
124
+ Packet4f iA, iB, iC, iD;
125
+
126
+ // iD = D*|A| - C*A#*B
127
+ iD = pmul(vec4f_swizzle2(C, C, 0, 0, 2, 2), vec4f_movelh(AB, AB));
128
+ iD = padd(iD, pmul(vec4f_swizzle2(C, C, 1, 1, 3, 3), vec4f_movehl(AB, AB)));
129
+ iD = psub(pmul(D, vec4f_duplane(dA, 0)), iD);
130
+
131
+ // iA = A*|D| - B*D#*C
132
+ iA = pmul(vec4f_swizzle2(B, B, 0, 0, 2, 2), vec4f_movelh(DC, DC));
133
+ iA = padd(iA, pmul(vec4f_swizzle2(B, B, 1, 1, 3, 3), vec4f_movehl(DC, DC)));
134
+ iA = psub(pmul(A, vec4f_duplane(dD, 0)), iA);
135
+
136
+ // iB = C*|B| - D * (A#B)# = C*|B| - D*B#*A
137
+ iB = pmul(D, vec4f_swizzle2(AB, AB, 3, 0, 3, 0));
138
+ iB = psub(iB, pmul(vec4f_swizzle2(D, D, 1, 0, 3, 2), vec4f_swizzle2(AB, AB, 2, 1, 2, 1)));
139
+ iB = psub(pmul(C, vec4f_duplane(dB, 0)), iB);
140
+
141
+ // iC = B*|C| - A * (D#C)# = B*|C| - A*C#*D
142
+ iC = pmul(A, vec4f_swizzle2(DC, DC, 3, 0, 3, 0));
143
+ iC = psub(iC, pmul(vec4f_swizzle2(A, A, 1, 0, 3, 2), vec4f_swizzle2(DC, DC, 2, 1, 2, 1)));
144
+ iC = psub(pmul(B, vec4f_duplane(dC, 0)), iC);
145
+
146
+ const float sign_mask[4] = {0.0f, numext::bit_cast<float>(0x80000000u), numext::bit_cast<float>(0x80000000u), 0.0f};
147
+ const Packet4f p4f_sign_PNNP = ploadu<Packet4f>(sign_mask);
148
+ rd = pxor(rd, p4f_sign_PNNP);
149
+ iA = pmul(iA, rd);
150
+ iB = pmul(iB, rd);
151
+ iC = pmul(iC, rd);
152
+ iD = pmul(iD, rd);
153
+
154
+ Index res_stride = result.outerStride();
155
+ float *res = result.data();
156
+
157
+ pstoret<float, Packet4f, ResultAlignment>(res + 0, vec4f_swizzle2(iA, iB, 3, 1, 3, 1));
158
+ pstoret<float, Packet4f, ResultAlignment>(res + res_stride, vec4f_swizzle2(iA, iB, 2, 0, 2, 0));
159
+ pstoret<float, Packet4f, ResultAlignment>(res + 2 * res_stride, vec4f_swizzle2(iC, iD, 3, 1, 3, 1));
160
+ pstoret<float, Packet4f, ResultAlignment>(res + 3 * res_stride, vec4f_swizzle2(iC, iD, 2, 0, 2, 0));
161
+ }
162
+ };
163
+
164
+ #if !(defined EIGEN_VECTORIZE_NEON && !(EIGEN_ARCH_ARM64 && !EIGEN_APPLE_DOUBLE_NEON_BUG))
165
+ // same algorithm as above, except that each operand is split into
166
+ // halves for two registers to hold.
167
+ template <typename MatrixType, typename ResultType>
168
+ struct compute_inverse_size4<Architecture::Target, double, MatrixType, ResultType>
169
+ {
170
+ enum
171
+ {
172
+ MatrixAlignment = traits<MatrixType>::Alignment,
173
+ ResultAlignment = traits<ResultType>::Alignment,
174
+ StorageOrdersMatch = (MatrixType::Flags & RowMajorBit) == (ResultType::Flags & RowMajorBit)
175
+ };
176
+ typedef typename conditional<(MatrixType::Flags & LinearAccessBit),
177
+ MatrixType const &,
178
+ typename MatrixType::PlainObject>::type
179
+ ActualMatrixType;
180
+
181
+ static void run(const MatrixType &mat, ResultType &result)
182
+ {
183
+ ActualMatrixType matrix(mat);
184
+
185
+ // Four 2x2 sub-matrices of the input matrix, each is further divided into upper and lower
186
+ // row e.g. A1, upper row of A, A2, lower row of A
187
+ // input = [[A, B], = [[[A1, [B1,
188
+ // [C, D]] A2], B2]],
189
+ // [[C1, [D1,
190
+ // C2], D2]]]
191
+
192
+ Packet2d A1, A2, B1, B2, C1, C2, D1, D2;
193
+
194
+ const double* data = matrix.data();
195
+ const Index stride = matrix.innerStride();
196
+ if (StorageOrdersMatch)
197
+ {
198
+ A1 = ploadt<Packet2d,MatrixAlignment>(data + stride*0);
199
+ B1 = ploadt<Packet2d,MatrixAlignment>(data + stride*2);
200
+ A2 = ploadt<Packet2d,MatrixAlignment>(data + stride*4);
201
+ B2 = ploadt<Packet2d,MatrixAlignment>(data + stride*6);
202
+ C1 = ploadt<Packet2d,MatrixAlignment>(data + stride*8);
203
+ D1 = ploadt<Packet2d,MatrixAlignment>(data + stride*10);
204
+ C2 = ploadt<Packet2d,MatrixAlignment>(data + stride*12);
205
+ D2 = ploadt<Packet2d,MatrixAlignment>(data + stride*14);
206
+ }
207
+ else
208
+ {
209
+ Packet2d temp;
210
+ A1 = ploadt<Packet2d,MatrixAlignment>(data + stride*0);
211
+ C1 = ploadt<Packet2d,MatrixAlignment>(data + stride*2);
212
+ A2 = ploadt<Packet2d,MatrixAlignment>(data + stride*4);
213
+ C2 = ploadt<Packet2d,MatrixAlignment>(data + stride*6);
214
+ temp = A1;
215
+ A1 = vec2d_unpacklo(A1, A2);
216
+ A2 = vec2d_unpackhi(temp, A2);
217
+
218
+ temp = C1;
219
+ C1 = vec2d_unpacklo(C1, C2);
220
+ C2 = vec2d_unpackhi(temp, C2);
221
+
222
+ B1 = ploadt<Packet2d,MatrixAlignment>(data + stride*8);
223
+ D1 = ploadt<Packet2d,MatrixAlignment>(data + stride*10);
224
+ B2 = ploadt<Packet2d,MatrixAlignment>(data + stride*12);
225
+ D2 = ploadt<Packet2d,MatrixAlignment>(data + stride*14);
226
+
227
+ temp = B1;
228
+ B1 = vec2d_unpacklo(B1, B2);
229
+ B2 = vec2d_unpackhi(temp, B2);
230
+
231
+ temp = D1;
232
+ D1 = vec2d_unpacklo(D1, D2);
233
+ D2 = vec2d_unpackhi(temp, D2);
234
+ }
235
+
236
+ // determinants of the sub-matrices
237
+ Packet2d dA, dB, dC, dD;
238
+
239
+ dA = vec2d_swizzle2(A2, A2, 1);
240
+ dA = pmul(A1, dA);
241
+ dA = psub(dA, vec2d_duplane(dA, 1));
242
+
243
+ dB = vec2d_swizzle2(B2, B2, 1);
244
+ dB = pmul(B1, dB);
245
+ dB = psub(dB, vec2d_duplane(dB, 1));
246
+
247
+ dC = vec2d_swizzle2(C2, C2, 1);
248
+ dC = pmul(C1, dC);
249
+ dC = psub(dC, vec2d_duplane(dC, 1));
250
+
251
+ dD = vec2d_swizzle2(D2, D2, 1);
252
+ dD = pmul(D1, dD);
253
+ dD = psub(dD, vec2d_duplane(dD, 1));
254
+
255
+ Packet2d DC1, DC2, AB1, AB2;
256
+
257
+ // AB = A# * B, where A# denotes the adjugate of A, and * denotes matrix product.
258
+ AB1 = pmul(B1, vec2d_duplane(A2, 1));
259
+ AB2 = pmul(B2, vec2d_duplane(A1, 0));
260
+ AB1 = psub(AB1, pmul(B2, vec2d_duplane(A1, 1)));
261
+ AB2 = psub(AB2, pmul(B1, vec2d_duplane(A2, 0)));
262
+
263
+ // DC = D#*C
264
+ DC1 = pmul(C1, vec2d_duplane(D2, 1));
265
+ DC2 = pmul(C2, vec2d_duplane(D1, 0));
266
+ DC1 = psub(DC1, pmul(C2, vec2d_duplane(D1, 1)));
267
+ DC2 = psub(DC2, pmul(C1, vec2d_duplane(D2, 0)));
268
+
269
+ Packet2d d1, d2;
270
+
271
+ // determinant of the input matrix, det = |A||D| + |B||C| - trace(A#*B*D#*C)
272
+ Packet2d det;
273
+
274
+ // reciprocal of the determinant of the input matrix, rd = 1/det
275
+ Packet2d rd;
276
+
277
+ d1 = pmul(AB1, vec2d_swizzle2(DC1, DC2, 0));
278
+ d2 = pmul(AB2, vec2d_swizzle2(DC1, DC2, 3));
279
+ rd = padd(d1, d2);
280
+ rd = padd(rd, vec2d_duplane(rd, 1));
281
+
282
+ d1 = pmul(dA, dD);
283
+ d2 = pmul(dB, dC);
284
+
285
+ det = padd(d1, d2);
286
+ det = psub(det, rd);
287
+ det = vec2d_duplane(det, 0);
288
+ rd = pdiv(pset1<Packet2d>(1.0), det);
289
+
290
+ // rows of four sub-matrices of the inverse
291
+ Packet2d iA1, iA2, iB1, iB2, iC1, iC2, iD1, iD2;
292
+
293
+ // iD = D*|A| - C*A#*B
294
+ iD1 = pmul(AB1, vec2d_duplane(C1, 0));
295
+ iD2 = pmul(AB1, vec2d_duplane(C2, 0));
296
+ iD1 = padd(iD1, pmul(AB2, vec2d_duplane(C1, 1)));
297
+ iD2 = padd(iD2, pmul(AB2, vec2d_duplane(C2, 1)));
298
+ dA = vec2d_duplane(dA, 0);
299
+ iD1 = psub(pmul(D1, dA), iD1);
300
+ iD2 = psub(pmul(D2, dA), iD2);
301
+
302
+ // iA = A*|D| - B*D#*C
303
+ iA1 = pmul(DC1, vec2d_duplane(B1, 0));
304
+ iA2 = pmul(DC1, vec2d_duplane(B2, 0));
305
+ iA1 = padd(iA1, pmul(DC2, vec2d_duplane(B1, 1)));
306
+ iA2 = padd(iA2, pmul(DC2, vec2d_duplane(B2, 1)));
307
+ dD = vec2d_duplane(dD, 0);
308
+ iA1 = psub(pmul(A1, dD), iA1);
309
+ iA2 = psub(pmul(A2, dD), iA2);
310
+
311
+ // iB = C*|B| - D * (A#B)# = C*|B| - D*B#*A
312
+ iB1 = pmul(D1, vec2d_swizzle2(AB2, AB1, 1));
313
+ iB2 = pmul(D2, vec2d_swizzle2(AB2, AB1, 1));
314
+ iB1 = psub(iB1, pmul(vec2d_swizzle2(D1, D1, 1), vec2d_swizzle2(AB2, AB1, 2)));
315
+ iB2 = psub(iB2, pmul(vec2d_swizzle2(D2, D2, 1), vec2d_swizzle2(AB2, AB1, 2)));
316
+ dB = vec2d_duplane(dB, 0);
317
+ iB1 = psub(pmul(C1, dB), iB1);
318
+ iB2 = psub(pmul(C2, dB), iB2);
319
+
320
+ // iC = B*|C| - A * (D#C)# = B*|C| - A*C#*D
321
+ iC1 = pmul(A1, vec2d_swizzle2(DC2, DC1, 1));
322
+ iC2 = pmul(A2, vec2d_swizzle2(DC2, DC1, 1));
323
+ iC1 = psub(iC1, pmul(vec2d_swizzle2(A1, A1, 1), vec2d_swizzle2(DC2, DC1, 2)));
324
+ iC2 = psub(iC2, pmul(vec2d_swizzle2(A2, A2, 1), vec2d_swizzle2(DC2, DC1, 2)));
325
+ dC = vec2d_duplane(dC, 0);
326
+ iC1 = psub(pmul(B1, dC), iC1);
327
+ iC2 = psub(pmul(B2, dC), iC2);
328
+
329
+ const double sign_mask1[2] = {0.0, numext::bit_cast<double>(0x8000000000000000ull)};
330
+ const double sign_mask2[2] = {numext::bit_cast<double>(0x8000000000000000ull), 0.0};
331
+ const Packet2d sign_PN = ploadu<Packet2d>(sign_mask1);
332
+ const Packet2d sign_NP = ploadu<Packet2d>(sign_mask2);
333
+ d1 = pxor(rd, sign_PN);
334
+ d2 = pxor(rd, sign_NP);
335
+
336
+ Index res_stride = result.outerStride();
337
+ double *res = result.data();
338
+ pstoret<double, Packet2d, ResultAlignment>(res + 0, pmul(vec2d_swizzle2(iA2, iA1, 3), d1));
339
+ pstoret<double, Packet2d, ResultAlignment>(res + res_stride, pmul(vec2d_swizzle2(iA2, iA1, 0), d2));
340
+ pstoret<double, Packet2d, ResultAlignment>(res + 2, pmul(vec2d_swizzle2(iB2, iB1, 3), d1));
341
+ pstoret<double, Packet2d, ResultAlignment>(res + res_stride + 2, pmul(vec2d_swizzle2(iB2, iB1, 0), d2));
342
+ pstoret<double, Packet2d, ResultAlignment>(res + 2 * res_stride, pmul(vec2d_swizzle2(iC2, iC1, 3), d1));
343
+ pstoret<double, Packet2d, ResultAlignment>(res + 3 * res_stride, pmul(vec2d_swizzle2(iC2, iC1, 0), d2));
344
+ pstoret<double, Packet2d, ResultAlignment>(res + 2 * res_stride + 2, pmul(vec2d_swizzle2(iD2, iD1, 3), d1));
345
+ pstoret<double, Packet2d, ResultAlignment>(res + 3 * res_stride + 2, pmul(vec2d_swizzle2(iD2, iD1, 0), d2));
346
+ }
347
+ };
348
+ #endif
349
+ } // namespace internal
350
+ } // namespace Eigen
351
+ #endif
@@ -2,32 +2,22 @@
2
2
  // for linear algebra.
3
3
  //
4
4
  // Copyright (C) 2010 Gael Guennebaud <gael.guennebaud@inria.fr>
5
+ //
6
+ // This Source Code Form is subject to the terms of the Mozilla
7
+ // Public License v. 2.0. If a copy of the MPL was not distributed
8
+ // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
5
9
 
6
10
  /*
7
-
8
11
  NOTE: this routine has been adapted from the CSparse library:
9
12
 
10
13
  Copyright (c) 2006, Timothy A. Davis.
11
14
  http://www.suitesparse.com
12
15
 
13
- CSparse is free software; you can redistribute it and/or
14
- modify it under the terms of the GNU Lesser General Public
15
- License as published by the Free Software Foundation; either
16
- version 2.1 of the License, or (at your option) any later version.
17
-
18
- CSparse is distributed in the hope that it will be useful,
19
- but WITHOUT ANY WARRANTY; without even the implied warranty of
20
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
21
- Lesser General Public License for more details.
22
-
23
- You should have received a copy of the GNU Lesser General Public
24
- License along with this Module; if not, write to the Free Software
25
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
26
-
16
+ The author of CSparse, Timothy A. Davis., has executed a license with Google LLC
17
+ to permit distribution of this code and derivative works as part of Eigen under
18
+ the Mozilla Public License v. 2.0, as stated at the top of this file.
27
19
  */
28
20
 
29
- #include "../Core/util/NonMPL2.h"
30
-
31
21
  #ifndef EIGEN_SPARSE_AMD_H
32
22
  #define EIGEN_SPARSE_AMD_H
33
23