@smake/eigen 1.0.1 → 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 (283) hide show
  1. package/README.md +1 -1
  2. package/eigen/COPYING.APACHE +203 -0
  3. package/eigen/COPYING.BSD +1 -1
  4. package/eigen/COPYING.MINPACK +51 -52
  5. package/eigen/Eigen/Cholesky +0 -1
  6. package/eigen/Eigen/Core +108 -266
  7. package/eigen/Eigen/Eigenvalues +0 -1
  8. package/eigen/Eigen/Geometry +3 -6
  9. package/eigen/Eigen/Householder +0 -1
  10. package/eigen/Eigen/Jacobi +0 -1
  11. package/eigen/Eigen/KLUSupport +41 -0
  12. package/eigen/Eigen/LU +2 -5
  13. package/eigen/Eigen/OrderingMethods +0 -3
  14. package/eigen/Eigen/PaStiXSupport +1 -0
  15. package/eigen/Eigen/PardisoSupport +0 -0
  16. package/eigen/Eigen/QR +0 -1
  17. package/eigen/Eigen/QtAlignedMalloc +0 -1
  18. package/eigen/Eigen/SVD +0 -1
  19. package/eigen/Eigen/Sparse +0 -2
  20. package/eigen/Eigen/SparseCholesky +0 -8
  21. package/eigen/Eigen/SparseLU +4 -0
  22. package/eigen/Eigen/src/Cholesky/LDLT.h +42 -27
  23. package/eigen/Eigen/src/Cholesky/LLT.h +39 -23
  24. package/eigen/Eigen/src/CholmodSupport/CholmodSupport.h +90 -47
  25. package/eigen/Eigen/src/Core/ArithmeticSequence.h +413 -0
  26. package/eigen/Eigen/src/Core/Array.h +99 -11
  27. package/eigen/Eigen/src/Core/ArrayBase.h +1 -1
  28. package/eigen/Eigen/src/Core/ArrayWrapper.h +21 -21
  29. package/eigen/Eigen/src/Core/Assign.h +1 -1
  30. package/eigen/Eigen/src/Core/AssignEvaluator.h +125 -50
  31. package/eigen/Eigen/src/Core/Assign_MKL.h +10 -10
  32. package/eigen/Eigen/src/Core/BandMatrix.h +16 -16
  33. package/eigen/Eigen/src/Core/Block.h +56 -60
  34. package/eigen/Eigen/src/Core/BooleanRedux.h +29 -31
  35. package/eigen/Eigen/src/Core/CommaInitializer.h +7 -3
  36. package/eigen/Eigen/src/Core/CoreEvaluators.h +325 -272
  37. package/eigen/Eigen/src/Core/CoreIterators.h +5 -0
  38. package/eigen/Eigen/src/Core/CwiseBinaryOp.h +21 -22
  39. package/eigen/Eigen/src/Core/CwiseNullaryOp.h +153 -18
  40. package/eigen/Eigen/src/Core/CwiseUnaryOp.h +6 -6
  41. package/eigen/Eigen/src/Core/CwiseUnaryView.h +12 -10
  42. package/eigen/Eigen/src/Core/DenseBase.h +128 -39
  43. package/eigen/Eigen/src/Core/DenseCoeffsBase.h +25 -21
  44. package/eigen/Eigen/src/Core/DenseStorage.h +150 -68
  45. package/eigen/Eigen/src/Core/Diagonal.h +21 -23
  46. package/eigen/Eigen/src/Core/DiagonalMatrix.h +50 -2
  47. package/eigen/Eigen/src/Core/DiagonalProduct.h +1 -1
  48. package/eigen/Eigen/src/Core/Dot.h +10 -10
  49. package/eigen/Eigen/src/Core/EigenBase.h +10 -9
  50. package/eigen/Eigen/src/Core/ForceAlignedAccess.h +8 -4
  51. package/eigen/Eigen/src/Core/Fuzzy.h +3 -3
  52. package/eigen/Eigen/src/Core/GeneralProduct.h +20 -10
  53. package/eigen/Eigen/src/Core/GenericPacketMath.h +597 -147
  54. package/eigen/Eigen/src/Core/GlobalFunctions.h +40 -33
  55. package/eigen/Eigen/src/Core/IO.h +40 -7
  56. package/eigen/Eigen/src/Core/IndexedView.h +237 -0
  57. package/eigen/Eigen/src/Core/Inverse.h +9 -10
  58. package/eigen/Eigen/src/Core/Map.h +7 -7
  59. package/eigen/Eigen/src/Core/MapBase.h +5 -3
  60. package/eigen/Eigen/src/Core/MathFunctions.h +756 -120
  61. package/eigen/Eigen/src/Core/MathFunctionsImpl.h +118 -19
  62. package/eigen/Eigen/src/Core/Matrix.h +131 -25
  63. package/eigen/Eigen/src/Core/MatrixBase.h +19 -2
  64. package/eigen/Eigen/src/Core/NestByValue.h +25 -50
  65. package/eigen/Eigen/src/Core/NoAlias.h +4 -3
  66. package/eigen/Eigen/src/Core/NumTraits.h +107 -20
  67. package/eigen/Eigen/src/Core/PartialReduxEvaluator.h +232 -0
  68. package/eigen/Eigen/src/Core/PermutationMatrix.h +3 -3
  69. package/eigen/Eigen/src/Core/PlainObjectBase.h +145 -54
  70. package/eigen/Eigen/src/Core/Product.h +30 -25
  71. package/eigen/Eigen/src/Core/ProductEvaluators.h +183 -142
  72. package/eigen/Eigen/src/Core/Random.h +37 -1
  73. package/eigen/Eigen/src/Core/Redux.h +180 -170
  74. package/eigen/Eigen/src/Core/Ref.h +118 -21
  75. package/eigen/Eigen/src/Core/Replicate.h +8 -8
  76. package/eigen/Eigen/src/Core/Reshaped.h +454 -0
  77. package/eigen/Eigen/src/Core/ReturnByValue.h +7 -5
  78. package/eigen/Eigen/src/Core/Reverse.h +18 -12
  79. package/eigen/Eigen/src/Core/Select.h +8 -6
  80. package/eigen/Eigen/src/Core/SelfAdjointView.h +33 -20
  81. package/eigen/Eigen/src/Core/Solve.h +14 -14
  82. package/eigen/Eigen/src/Core/SolveTriangular.h +13 -13
  83. package/eigen/Eigen/src/Core/SolverBase.h +41 -3
  84. package/eigen/Eigen/src/Core/StableNorm.h +100 -70
  85. package/eigen/Eigen/src/Core/StlIterators.h +463 -0
  86. package/eigen/Eigen/src/Core/Stride.h +9 -4
  87. package/eigen/Eigen/src/Core/Swap.h +5 -4
  88. package/eigen/Eigen/src/Core/Transpose.h +86 -27
  89. package/eigen/Eigen/src/Core/Transpositions.h +26 -8
  90. package/eigen/Eigen/src/Core/TriangularMatrix.h +88 -72
  91. package/eigen/Eigen/src/Core/VectorBlock.h +5 -5
  92. package/eigen/Eigen/src/Core/VectorwiseOp.h +159 -70
  93. package/eigen/Eigen/src/Core/Visitor.h +137 -29
  94. package/eigen/Eigen/src/Core/arch/AVX/Complex.h +50 -129
  95. package/eigen/Eigen/src/Core/arch/AVX/MathFunctions.h +126 -337
  96. package/eigen/Eigen/src/Core/arch/AVX/PacketMath.h +1092 -155
  97. package/eigen/Eigen/src/Core/arch/AVX/TypeCasting.h +65 -1
  98. package/eigen/Eigen/src/Core/arch/AVX512/Complex.h +422 -0
  99. package/eigen/Eigen/src/Core/arch/AVX512/MathFunctions.h +186 -213
  100. package/eigen/Eigen/src/Core/arch/AVX512/PacketMath.h +1250 -252
  101. package/eigen/Eigen/src/Core/arch/AVX512/TypeCasting.h +89 -0
  102. package/eigen/Eigen/src/Core/arch/AltiVec/Complex.h +152 -165
  103. package/eigen/Eigen/src/Core/arch/AltiVec/MathFunctions.h +19 -251
  104. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProduct.h +2937 -0
  105. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h +221 -0
  106. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h +629 -0
  107. package/eigen/Eigen/src/Core/arch/AltiVec/PacketMath.h +2042 -392
  108. package/eigen/Eigen/src/Core/arch/CUDA/Complex.h +235 -80
  109. package/eigen/Eigen/src/Core/arch/Default/BFloat16.h +700 -0
  110. package/eigen/Eigen/src/Core/arch/Default/ConjHelper.h +102 -14
  111. package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h +1649 -0
  112. package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h +110 -0
  113. package/eigen/Eigen/src/Core/arch/Default/Half.h +942 -0
  114. package/eigen/Eigen/src/Core/arch/Default/Settings.h +1 -1
  115. package/eigen/Eigen/src/Core/arch/Default/TypeCasting.h +120 -0
  116. package/eigen/Eigen/src/Core/arch/{CUDA → GPU}/MathFunctions.h +16 -4
  117. package/eigen/Eigen/src/Core/arch/GPU/PacketMath.h +1685 -0
  118. package/eigen/Eigen/src/Core/arch/GPU/TypeCasting.h +80 -0
  119. package/eigen/Eigen/src/Core/arch/HIP/hcc/math_constants.h +23 -0
  120. package/eigen/Eigen/src/Core/arch/MSA/Complex.h +648 -0
  121. package/eigen/Eigen/src/Core/arch/MSA/MathFunctions.h +387 -0
  122. package/eigen/Eigen/src/Core/arch/MSA/PacketMath.h +1233 -0
  123. package/eigen/Eigen/src/Core/arch/NEON/Complex.h +313 -219
  124. package/eigen/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h +183 -0
  125. package/eigen/Eigen/src/Core/arch/NEON/MathFunctions.h +54 -70
  126. package/eigen/Eigen/src/Core/arch/NEON/PacketMath.h +4376 -549
  127. package/eigen/Eigen/src/Core/arch/NEON/TypeCasting.h +1419 -0
  128. package/eigen/Eigen/src/Core/arch/SSE/Complex.h +59 -179
  129. package/eigen/Eigen/src/Core/arch/SSE/MathFunctions.h +65 -428
  130. package/eigen/Eigen/src/Core/arch/SSE/PacketMath.h +893 -283
  131. package/eigen/Eigen/src/Core/arch/SSE/TypeCasting.h +65 -0
  132. package/eigen/Eigen/src/Core/arch/SVE/MathFunctions.h +44 -0
  133. package/eigen/Eigen/src/Core/arch/SVE/PacketMath.h +752 -0
  134. package/eigen/Eigen/src/Core/arch/SVE/TypeCasting.h +49 -0
  135. package/eigen/Eigen/src/Core/arch/SYCL/InteropHeaders.h +232 -0
  136. package/eigen/Eigen/src/Core/arch/SYCL/MathFunctions.h +301 -0
  137. package/eigen/Eigen/src/Core/arch/SYCL/PacketMath.h +670 -0
  138. package/eigen/Eigen/src/Core/arch/SYCL/SyclMemoryModel.h +694 -0
  139. package/eigen/Eigen/src/Core/arch/SYCL/TypeCasting.h +85 -0
  140. package/eigen/Eigen/src/Core/arch/ZVector/Complex.h +212 -183
  141. package/eigen/Eigen/src/Core/arch/ZVector/MathFunctions.h +101 -5
  142. package/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h +510 -395
  143. package/eigen/Eigen/src/Core/functors/AssignmentFunctors.h +11 -2
  144. package/eigen/Eigen/src/Core/functors/BinaryFunctors.h +112 -46
  145. package/eigen/Eigen/src/Core/functors/NullaryFunctors.h +31 -30
  146. package/eigen/Eigen/src/Core/functors/StlFunctors.h +32 -2
  147. package/eigen/Eigen/src/Core/functors/UnaryFunctors.h +354 -15
  148. package/eigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h +1073 -585
  149. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix.h +29 -7
  150. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +4 -4
  151. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h +1 -1
  152. package/eigen/Eigen/src/Core/products/GeneralMatrixVector.h +382 -483
  153. package/eigen/Eigen/src/Core/products/Parallelizer.h +23 -9
  154. package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +23 -6
  155. package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector.h +8 -6
  156. package/eigen/Eigen/src/Core/products/SelfadjointProduct.h +2 -2
  157. package/eigen/Eigen/src/Core/products/SelfadjointRank2Update.h +5 -4
  158. package/eigen/Eigen/src/Core/products/TriangularMatrixMatrix.h +3 -3
  159. package/eigen/Eigen/src/Core/products/TriangularSolverMatrix.h +5 -3
  160. package/eigen/Eigen/src/Core/products/TriangularSolverVector.h +13 -10
  161. package/eigen/Eigen/src/Core/util/BlasUtil.h +208 -124
  162. package/eigen/Eigen/src/Core/util/ConfigureVectorization.h +512 -0
  163. package/eigen/Eigen/src/Core/util/Constants.h +25 -9
  164. package/eigen/Eigen/src/Core/util/DisableStupidWarnings.h +14 -2
  165. package/eigen/Eigen/src/Core/util/ForwardDeclarations.h +28 -4
  166. package/eigen/Eigen/src/Core/util/IndexedViewHelper.h +186 -0
  167. package/eigen/Eigen/src/Core/util/IntegralConstant.h +272 -0
  168. package/eigen/Eigen/src/Core/util/MKL_support.h +8 -1
  169. package/eigen/Eigen/src/Core/util/Macros.h +661 -250
  170. package/eigen/Eigen/src/Core/util/Memory.h +222 -52
  171. package/eigen/Eigen/src/Core/util/Meta.h +349 -105
  172. package/eigen/Eigen/src/Core/util/ReshapedHelper.h +51 -0
  173. package/eigen/Eigen/src/Core/util/StaticAssert.h +8 -5
  174. package/eigen/Eigen/src/Core/util/SymbolicIndex.h +293 -0
  175. package/eigen/Eigen/src/Core/util/XprHelper.h +48 -30
  176. package/eigen/Eigen/src/Eigenvalues/ComplexEigenSolver.h +1 -1
  177. package/eigen/Eigen/src/Eigenvalues/ComplexSchur.h +1 -1
  178. package/eigen/Eigen/src/Eigenvalues/EigenSolver.h +2 -2
  179. package/eigen/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h +1 -1
  180. package/eigen/Eigen/src/Eigenvalues/HessenbergDecomposition.h +2 -2
  181. package/eigen/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h +2 -2
  182. package/eigen/Eigen/src/Eigenvalues/RealQZ.h +9 -6
  183. package/eigen/Eigen/src/Eigenvalues/RealSchur.h +10 -5
  184. package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +75 -42
  185. package/eigen/Eigen/src/Eigenvalues/Tridiagonalization.h +20 -15
  186. package/eigen/Eigen/src/Geometry/AlignedBox.h +99 -5
  187. package/eigen/Eigen/src/Geometry/AngleAxis.h +4 -4
  188. package/eigen/Eigen/src/Geometry/EulerAngles.h +3 -3
  189. package/eigen/Eigen/src/Geometry/Homogeneous.h +15 -11
  190. package/eigen/Eigen/src/Geometry/Hyperplane.h +1 -1
  191. package/eigen/Eigen/src/Geometry/OrthoMethods.h +3 -2
  192. package/eigen/Eigen/src/Geometry/ParametrizedLine.h +39 -2
  193. package/eigen/Eigen/src/Geometry/Quaternion.h +52 -14
  194. package/eigen/Eigen/src/Geometry/Rotation2D.h +3 -3
  195. package/eigen/Eigen/src/Geometry/Scaling.h +22 -4
  196. package/eigen/Eigen/src/Geometry/Transform.h +86 -65
  197. package/eigen/Eigen/src/Geometry/Translation.h +6 -6
  198. package/eigen/Eigen/src/Geometry/arch/Geometry_SIMD.h +168 -0
  199. package/eigen/Eigen/src/Householder/BlockHouseholder.h +9 -2
  200. package/eigen/Eigen/src/Householder/Householder.h +8 -4
  201. package/eigen/Eigen/src/Householder/HouseholderSequence.h +123 -48
  202. package/eigen/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +15 -15
  203. package/eigen/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +7 -23
  204. package/eigen/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +5 -22
  205. package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +41 -47
  206. package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +51 -60
  207. package/eigen/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +70 -20
  208. package/eigen/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h +2 -20
  209. package/eigen/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h +11 -9
  210. package/eigen/Eigen/src/Jacobi/Jacobi.h +31 -10
  211. package/eigen/Eigen/src/KLUSupport/KLUSupport.h +358 -0
  212. package/eigen/Eigen/src/LU/Determinant.h +35 -19
  213. package/eigen/Eigen/src/LU/FullPivLU.h +29 -43
  214. package/eigen/Eigen/src/LU/InverseImpl.h +25 -8
  215. package/eigen/Eigen/src/LU/PartialPivLU.h +67 -57
  216. package/eigen/Eigen/src/LU/arch/InverseSize4.h +351 -0
  217. package/eigen/Eigen/src/OrderingMethods/Amd.h +7 -17
  218. package/eigen/Eigen/src/OrderingMethods/Eigen_Colamd.h +297 -277
  219. package/eigen/Eigen/src/OrderingMethods/Ordering.h +6 -10
  220. package/eigen/Eigen/src/PaStiXSupport/PaStiXSupport.h +1 -1
  221. package/eigen/Eigen/src/PardisoSupport/PardisoSupport.h +10 -9
  222. package/eigen/Eigen/src/QR/ColPivHouseholderQR.h +41 -20
  223. package/eigen/Eigen/src/QR/CompleteOrthogonalDecomposition.h +100 -27
  224. package/eigen/Eigen/src/QR/FullPivHouseholderQR.h +59 -22
  225. package/eigen/Eigen/src/QR/HouseholderQR.h +48 -23
  226. package/eigen/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h +25 -3
  227. package/eigen/Eigen/src/SVD/BDCSVD.h +137 -48
  228. package/eigen/Eigen/src/SVD/JacobiSVD.h +22 -14
  229. package/eigen/Eigen/src/SVD/SVDBase.h +82 -21
  230. package/eigen/Eigen/src/SVD/UpperBidiagonalization.h +3 -3
  231. package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky.h +16 -8
  232. package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +11 -36
  233. package/eigen/Eigen/src/SparseCore/CompressedStorage.h +16 -0
  234. package/eigen/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +6 -6
  235. package/eigen/Eigen/src/SparseCore/SparseAssign.h +81 -27
  236. package/eigen/Eigen/src/SparseCore/SparseBlock.h +25 -57
  237. package/eigen/Eigen/src/SparseCore/SparseCompressedBase.h +40 -11
  238. package/eigen/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +11 -15
  239. package/eigen/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +2 -2
  240. package/eigen/Eigen/src/SparseCore/SparseDenseProduct.h +30 -8
  241. package/eigen/Eigen/src/SparseCore/SparseMatrix.h +124 -10
  242. package/eigen/Eigen/src/SparseCore/SparseMatrixBase.h +5 -12
  243. package/eigen/Eigen/src/SparseCore/SparseProduct.h +13 -1
  244. package/eigen/Eigen/src/SparseCore/SparseRef.h +7 -7
  245. package/eigen/Eigen/src/SparseCore/SparseSelfAdjointView.h +3 -0
  246. package/eigen/Eigen/src/SparseCore/SparseUtil.h +8 -0
  247. package/eigen/Eigen/src/SparseCore/SparseVector.h +1 -1
  248. package/eigen/Eigen/src/SparseLU/SparseLU.h +160 -10
  249. package/eigen/Eigen/src/SparseLU/SparseLU_Memory.h +1 -1
  250. package/eigen/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h +76 -2
  251. package/eigen/Eigen/src/SparseLU/SparseLU_column_dfs.h +2 -2
  252. package/eigen/Eigen/src/SparseLU/SparseLU_gemm_kernel.h +1 -1
  253. package/eigen/Eigen/src/SparseLU/SparseLU_panel_bmod.h +1 -1
  254. package/eigen/Eigen/src/SparseQR/SparseQR.h +19 -6
  255. package/eigen/Eigen/src/StlSupport/StdDeque.h +2 -14
  256. package/eigen/Eigen/src/StlSupport/StdList.h +2 -2
  257. package/eigen/Eigen/src/StlSupport/StdVector.h +2 -2
  258. package/eigen/Eigen/src/SuperLUSupport/SuperLUSupport.h +6 -8
  259. package/eigen/Eigen/src/UmfPackSupport/UmfPackSupport.h +175 -39
  260. package/eigen/Eigen/src/misc/lapacke.h +5 -4
  261. package/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.h +27 -1
  262. package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.h +155 -11
  263. package/eigen/Eigen/src/plugins/BlockMethods.h +626 -242
  264. package/eigen/Eigen/src/plugins/CommonCwiseUnaryOps.h +14 -0
  265. package/eigen/Eigen/src/plugins/IndexedViewMethods.h +262 -0
  266. package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.h +4 -4
  267. package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.h +10 -0
  268. package/eigen/Eigen/src/plugins/ReshapedMethods.h +149 -0
  269. package/eigen/README.md +2 -0
  270. package/lib/LibEigen.d.ts +4 -0
  271. package/lib/LibEigen.js +14 -0
  272. package/lib/index.d.ts +1 -1
  273. package/lib/index.js +7 -3
  274. package/package.json +2 -10
  275. package/eigen/Eigen/CMakeLists.txt +0 -19
  276. package/eigen/Eigen/src/Core/arch/CUDA/Half.h +0 -675
  277. package/eigen/Eigen/src/Core/arch/CUDA/PacketMath.h +0 -333
  278. package/eigen/Eigen/src/Core/arch/CUDA/PacketMathHalf.h +0 -1124
  279. package/eigen/Eigen/src/Core/arch/CUDA/TypeCasting.h +0 -212
  280. package/eigen/Eigen/src/Geometry/arch/Geometry_SSE.h +0 -161
  281. package/eigen/Eigen/src/LU/arch/Inverse_SSE.h +0 -338
  282. package/lib/eigen.d.ts +0 -2
  283. package/lib/eigen.js +0 -15
@@ -11,7 +11,7 @@
11
11
  #ifndef EIGEN_TRANSPOSE_H
12
12
  #define EIGEN_TRANSPOSE_H
13
13
 
14
- namespace Eigen {
14
+ namespace Eigen {
15
15
 
16
16
  namespace internal {
17
17
  template<typename MatrixType>
@@ -61,24 +61,27 @@ template<typename MatrixType> class Transpose
61
61
  typedef typename internal::remove_all<MatrixType>::type NestedExpression;
62
62
 
63
63
  EIGEN_DEVICE_FUNC
64
- explicit inline Transpose(MatrixType& matrix) : m_matrix(matrix) {}
64
+ explicit EIGEN_STRONG_INLINE Transpose(MatrixType& matrix) : m_matrix(matrix) {}
65
65
 
66
66
  EIGEN_INHERIT_ASSIGNMENT_OPERATORS(Transpose)
67
67
 
68
- EIGEN_DEVICE_FUNC inline Index rows() const { return m_matrix.cols(); }
69
- EIGEN_DEVICE_FUNC inline Index cols() const { return m_matrix.rows(); }
68
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE EIGEN_CONSTEXPR
69
+ Index rows() const EIGEN_NOEXCEPT { return m_matrix.cols(); }
70
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE EIGEN_CONSTEXPR
71
+ Index cols() const EIGEN_NOEXCEPT { return m_matrix.rows(); }
70
72
 
71
73
  /** \returns the nested expression */
72
- EIGEN_DEVICE_FUNC
74
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
73
75
  const typename internal::remove_all<MatrixTypeNested>::type&
74
76
  nestedExpression() const { return m_matrix; }
75
77
 
76
78
  /** \returns the nested expression */
77
- EIGEN_DEVICE_FUNC
79
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
78
80
  typename internal::remove_reference<MatrixTypeNested>::type&
79
81
  nestedExpression() { return m_matrix; }
80
82
 
81
83
  /** \internal */
84
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
82
85
  void resize(Index nrows, Index ncols) {
83
86
  m_matrix.resize(ncols,nrows);
84
87
  }
@@ -122,8 +125,10 @@ template<typename MatrixType> class TransposeImpl<MatrixType,Dense>
122
125
  EIGEN_DENSE_PUBLIC_INTERFACE(Transpose<MatrixType>)
123
126
  EIGEN_INHERIT_ASSIGNMENT_OPERATORS(TransposeImpl)
124
127
 
125
- EIGEN_DEVICE_FUNC inline Index innerStride() const { return derived().nestedExpression().innerStride(); }
126
- EIGEN_DEVICE_FUNC inline Index outerStride() const { return derived().nestedExpression().outerStride(); }
128
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
129
+ Index innerStride() const { return derived().nestedExpression().innerStride(); }
130
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
131
+ Index outerStride() const { return derived().nestedExpression().outerStride(); }
127
132
 
128
133
  typedef typename internal::conditional<
129
134
  internal::is_lvalue<MatrixType>::value,
@@ -131,18 +136,20 @@ template<typename MatrixType> class TransposeImpl<MatrixType,Dense>
131
136
  const Scalar
132
137
  >::type ScalarWithConstIfNotLvalue;
133
138
 
134
- EIGEN_DEVICE_FUNC inline ScalarWithConstIfNotLvalue* data() { return derived().nestedExpression().data(); }
135
- EIGEN_DEVICE_FUNC inline const Scalar* data() const { return derived().nestedExpression().data(); }
139
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
140
+ ScalarWithConstIfNotLvalue* data() { return derived().nestedExpression().data(); }
141
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
142
+ const Scalar* data() const { return derived().nestedExpression().data(); }
136
143
 
137
144
  // FIXME: shall we keep the const version of coeffRef?
138
- EIGEN_DEVICE_FUNC
139
- inline const Scalar& coeffRef(Index rowId, Index colId) const
145
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
146
+ const Scalar& coeffRef(Index rowId, Index colId) const
140
147
  {
141
148
  return derived().nestedExpression().coeffRef(colId, rowId);
142
149
  }
143
150
 
144
- EIGEN_DEVICE_FUNC
145
- inline const Scalar& coeffRef(Index index) const
151
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
152
+ const Scalar& coeffRef(Index index) const
146
153
  {
147
154
  return derived().nestedExpression().coeffRef(index);
148
155
  }
@@ -170,7 +177,8 @@ template<typename MatrixType> class TransposeImpl<MatrixType,Dense>
170
177
  *
171
178
  * \sa transposeInPlace(), adjoint() */
172
179
  template<typename Derived>
173
- inline Transpose<Derived>
180
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
181
+ Transpose<Derived>
174
182
  DenseBase<Derived>::transpose()
175
183
  {
176
184
  return TransposeReturnType(derived());
@@ -182,7 +190,8 @@ DenseBase<Derived>::transpose()
182
190
  *
183
191
  * \sa transposeInPlace(), adjoint() */
184
192
  template<typename Derived>
185
- inline typename DenseBase<Derived>::ConstTransposeReturnType
193
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
194
+ typename DenseBase<Derived>::ConstTransposeReturnType
186
195
  DenseBase<Derived>::transpose() const
187
196
  {
188
197
  return ConstTransposeReturnType(derived());
@@ -208,7 +217,7 @@ DenseBase<Derived>::transpose() const
208
217
  *
209
218
  * \sa adjointInPlace(), transpose(), conjugate(), class Transpose, class internal::scalar_conjugate_op */
210
219
  template<typename Derived>
211
- inline const typename MatrixBase<Derived>::AdjointReturnType
220
+ EIGEN_DEVICE_FUNC inline const typename MatrixBase<Derived>::AdjointReturnType
212
221
  MatrixBase<Derived>::adjoint() const
213
222
  {
214
223
  return AdjointReturnType(this->transpose());
@@ -230,11 +239,10 @@ struct inplace_transpose_selector;
230
239
  template<typename MatrixType>
231
240
  struct inplace_transpose_selector<MatrixType,true,false> { // square matrix
232
241
  static void run(MatrixType& m) {
233
- m.matrix().template triangularView<StrictlyUpper>().swap(m.matrix().transpose());
242
+ m.matrix().template triangularView<StrictlyUpper>().swap(m.matrix().transpose().template triangularView<StrictlyUpper>());
234
243
  }
235
244
  };
236
245
 
237
- // TODO: vectorized path is currently limited to LargestPacketSize x LargestPacketSize cases only.
238
246
  template<typename MatrixType>
239
247
  struct inplace_transpose_selector<MatrixType,true,true> { // PacketSize x PacketSize
240
248
  static void run(MatrixType& m) {
@@ -251,16 +259,66 @@ struct inplace_transpose_selector<MatrixType,true,true> { // PacketSize x Packet
251
259
  }
252
260
  };
253
261
 
262
+
263
+ template <typename MatrixType, Index Alignment>
264
+ void BlockedInPlaceTranspose(MatrixType& m) {
265
+ typedef typename MatrixType::Scalar Scalar;
266
+ typedef typename internal::packet_traits<typename MatrixType::Scalar>::type Packet;
267
+ const Index PacketSize = internal::packet_traits<Scalar>::size;
268
+ eigen_assert(m.rows() == m.cols());
269
+ int row_start = 0;
270
+ for (; row_start + PacketSize <= m.rows(); row_start += PacketSize) {
271
+ for (int col_start = row_start; col_start + PacketSize <= m.cols(); col_start += PacketSize) {
272
+ PacketBlock<Packet> A;
273
+ if (row_start == col_start) {
274
+ for (Index i=0; i<PacketSize; ++i)
275
+ A.packet[i] = m.template packetByOuterInner<Alignment>(row_start + i,col_start);
276
+ internal::ptranspose(A);
277
+ for (Index i=0; i<PacketSize; ++i)
278
+ m.template writePacket<Alignment>(m.rowIndexByOuterInner(row_start + i, col_start), m.colIndexByOuterInner(row_start + i,col_start), A.packet[i]);
279
+ } else {
280
+ PacketBlock<Packet> B;
281
+ for (Index i=0; i<PacketSize; ++i) {
282
+ A.packet[i] = m.template packetByOuterInner<Alignment>(row_start + i,col_start);
283
+ B.packet[i] = m.template packetByOuterInner<Alignment>(col_start + i, row_start);
284
+ }
285
+ internal::ptranspose(A);
286
+ internal::ptranspose(B);
287
+ for (Index i=0; i<PacketSize; ++i) {
288
+ m.template writePacket<Alignment>(m.rowIndexByOuterInner(row_start + i, col_start), m.colIndexByOuterInner(row_start + i,col_start), B.packet[i]);
289
+ m.template writePacket<Alignment>(m.rowIndexByOuterInner(col_start + i, row_start), m.colIndexByOuterInner(col_start + i,row_start), A.packet[i]);
290
+ }
291
+ }
292
+ }
293
+ }
294
+ for (Index row = row_start; row < m.rows(); ++row) {
295
+ m.matrix().row(row).head(row).swap(
296
+ m.matrix().col(row).head(row).transpose());
297
+ }
298
+ }
299
+
254
300
  template<typename MatrixType,bool MatchPacketSize>
255
- struct inplace_transpose_selector<MatrixType,false,MatchPacketSize> { // non square matrix
301
+ struct inplace_transpose_selector<MatrixType,false,MatchPacketSize> { // non square or dynamic matrix
256
302
  static void run(MatrixType& m) {
257
- if (m.rows()==m.cols())
258
- m.matrix().template triangularView<StrictlyUpper>().swap(m.matrix().transpose());
259
- else
303
+ typedef typename MatrixType::Scalar Scalar;
304
+ if (m.rows() == m.cols()) {
305
+ const Index PacketSize = internal::packet_traits<Scalar>::size;
306
+ if (!NumTraits<Scalar>::IsComplex && m.rows() >= PacketSize) {
307
+ if ((m.rows() % PacketSize) == 0)
308
+ BlockedInPlaceTranspose<MatrixType,internal::evaluator<MatrixType>::Alignment>(m);
309
+ else
310
+ BlockedInPlaceTranspose<MatrixType,Unaligned>(m);
311
+ }
312
+ else {
313
+ m.matrix().template triangularView<StrictlyUpper>().swap(m.matrix().transpose().template triangularView<StrictlyUpper>());
314
+ }
315
+ } else {
260
316
  m = m.transpose().eval();
317
+ }
261
318
  }
262
319
  };
263
320
 
321
+
264
322
  } // end namespace internal
265
323
 
266
324
  /** This is the "in place" version of transpose(): it replaces \c *this by its own transpose.
@@ -278,12 +336,12 @@ struct inplace_transpose_selector<MatrixType,false,MatchPacketSize> { // non squ
278
336
  * Notice however that this method is only useful if you want to replace a matrix by its own transpose.
279
337
  * If you just need the transpose of a matrix, use transpose().
280
338
  *
281
- * \note if the matrix is not square, then \c *this must be a resizable matrix.
339
+ * \note if the matrix is not square, then \c *this must be a resizable matrix.
282
340
  * This excludes (non-square) fixed-size matrices, block-expressions and maps.
283
341
  *
284
342
  * \sa transpose(), adjoint(), adjointInPlace() */
285
343
  template<typename Derived>
286
- inline void DenseBase<Derived>::transposeInPlace()
344
+ EIGEN_DEVICE_FUNC inline void DenseBase<Derived>::transposeInPlace()
287
345
  {
288
346
  eigen_assert((rows() == cols() || (RowsAtCompileTime == Dynamic && ColsAtCompileTime == Dynamic))
289
347
  && "transposeInPlace() called on a non-square non-resizable matrix");
@@ -314,7 +372,7 @@ inline void DenseBase<Derived>::transposeInPlace()
314
372
  *
315
373
  * \sa transpose(), adjoint(), transposeInPlace() */
316
374
  template<typename Derived>
317
- inline void MatrixBase<Derived>::adjointInPlace()
375
+ EIGEN_DEVICE_FUNC inline void MatrixBase<Derived>::adjointInPlace()
318
376
  {
319
377
  derived() = adjoint().eval();
320
378
  }
@@ -393,7 +451,8 @@ struct checkTransposeAliasing_impl<Derived, OtherDerived, false>
393
451
  template<typename Dst, typename Src>
394
452
  void check_for_aliasing(const Dst &dst, const Src &src)
395
453
  {
396
- internal::checkTransposeAliasing_impl<Dst, Src>::run(dst, src);
454
+ if((!Dst::IsVectorAtCompileTime) && dst.rows()>1 && dst.cols()>1)
455
+ internal::checkTransposeAliasing_impl<Dst, Src>::run(dst, src);
397
456
  }
398
457
 
399
458
  } // end namespace internal
@@ -10,20 +10,22 @@
10
10
  #ifndef EIGEN_TRANSPOSITIONS_H
11
11
  #define EIGEN_TRANSPOSITIONS_H
12
12
 
13
- namespace Eigen {
13
+ namespace Eigen {
14
14
 
15
15
  template<typename Derived>
16
16
  class TranspositionsBase
17
17
  {
18
18
  typedef internal::traits<Derived> Traits;
19
-
19
+
20
20
  public:
21
21
 
22
22
  typedef typename Traits::IndicesType IndicesType;
23
23
  typedef typename IndicesType::Scalar StorageIndex;
24
24
  typedef Eigen::Index Index; ///< \deprecated since Eigen 3.3
25
25
 
26
+ EIGEN_DEVICE_FUNC
26
27
  Derived& derived() { return *static_cast<Derived*>(this); }
28
+ EIGEN_DEVICE_FUNC
27
29
  const Derived& derived() const { return *static_cast<const Derived*>(this); }
28
30
 
29
31
  /** Copies the \a other transpositions into \c *this */
@@ -35,13 +37,17 @@ class TranspositionsBase
35
37
  }
36
38
 
37
39
  /** \returns the number of transpositions */
40
+ EIGEN_DEVICE_FUNC
38
41
  Index size() const { return indices().size(); }
39
42
  /** \returns the number of rows of the equivalent permutation matrix */
43
+ EIGEN_DEVICE_FUNC
40
44
  Index rows() const { return indices().size(); }
41
45
  /** \returns the number of columns of the equivalent permutation matrix */
46
+ EIGEN_DEVICE_FUNC
42
47
  Index cols() const { return indices().size(); }
43
48
 
44
49
  /** Direct access to the underlying index vector */
50
+ EIGEN_DEVICE_FUNC
45
51
  inline const StorageIndex& coeff(Index i) const { return indices().coeff(i); }
46
52
  /** Direct access to the underlying index vector */
47
53
  inline StorageIndex& coeffRef(Index i) { return indices().coeffRef(i); }
@@ -55,8 +61,10 @@ class TranspositionsBase
55
61
  inline StorageIndex& operator[](Index i) { return indices()(i); }
56
62
 
57
63
  /** const version of indices(). */
64
+ EIGEN_DEVICE_FUNC
58
65
  const IndicesType& indices() const { return derived().indices(); }
59
66
  /** \returns a reference to the stored array representing the transpositions. */
67
+ EIGEN_DEVICE_FUNC
60
68
  IndicesType& indices() { return derived().indices(); }
61
69
 
62
70
  /** Resizes to given size. */
@@ -73,7 +81,7 @@ class TranspositionsBase
73
81
  }
74
82
 
75
83
  // FIXME: do we want such methods ?
76
- // might be usefull when the target matrix expression is complex, e.g.:
84
+ // might be useful when the target matrix expression is complex, e.g.:
77
85
  // object.matrix().block(..,..,..,..) = trans * object.matrix().block(..,..,..,..);
78
86
  /*
79
87
  template<typename MatrixType>
@@ -178,8 +186,10 @@ class Transpositions : public TranspositionsBase<Transpositions<SizeAtCompileTim
178
186
  {}
179
187
 
180
188
  /** const version of indices(). */
189
+ EIGEN_DEVICE_FUNC
181
190
  const IndicesType& indices() const { return m_indices; }
182
191
  /** \returns a reference to the stored array representing the transpositions. */
192
+ EIGEN_DEVICE_FUNC
183
193
  IndicesType& indices() { return m_indices; }
184
194
 
185
195
  protected:
@@ -237,9 +247,11 @@ class Map<Transpositions<SizeAtCompileTime,MaxSizeAtCompileTime,_StorageIndex>,P
237
247
  #endif
238
248
 
239
249
  /** const version of indices(). */
250
+ EIGEN_DEVICE_FUNC
240
251
  const IndicesType& indices() const { return m_indices; }
241
-
252
+
242
253
  /** \returns a reference to the stored array representing the transpositions. */
254
+ EIGEN_DEVICE_FUNC
243
255
  IndicesType& indices() { return m_indices; }
244
256
 
245
257
  protected:
@@ -279,9 +291,11 @@ class TranspositionsWrapper
279
291
  }
280
292
 
281
293
  /** const version of indices(). */
294
+ EIGEN_DEVICE_FUNC
282
295
  const IndicesType& indices() const { return m_indices; }
283
296
 
284
297
  /** \returns a reference to the stored array representing the transpositions. */
298
+ EIGEN_DEVICE_FUNC
285
299
  IndicesType& indices() { return m_indices; }
286
300
 
287
301
  protected:
@@ -335,9 +349,12 @@ class Transpose<TranspositionsBase<TranspositionsDerived> >
335
349
 
336
350
  explicit Transpose(const TranspositionType& t) : m_transpositions(t) {}
337
351
 
338
- Index size() const { return m_transpositions.size(); }
339
- Index rows() const { return m_transpositions.size(); }
340
- Index cols() const { return m_transpositions.size(); }
352
+ EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
353
+ Index size() const EIGEN_NOEXCEPT { return m_transpositions.size(); }
354
+ EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
355
+ Index rows() const EIGEN_NOEXCEPT { return m_transpositions.size(); }
356
+ EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
357
+ Index cols() const EIGEN_NOEXCEPT { return m_transpositions.size(); }
341
358
 
342
359
  /** \returns the \a matrix with the inverse transpositions applied to the columns.
343
360
  */
@@ -356,7 +373,8 @@ class Transpose<TranspositionsBase<TranspositionsDerived> >
356
373
  {
357
374
  return Product<Transpose, OtherDerived, AliasFreeProduct>(*this, matrix.derived());
358
375
  }
359
-
376
+
377
+ EIGEN_DEVICE_FUNC
360
378
  const TranspositionType& nestedExpression() const { return m_transpositions; }
361
379
 
362
380
  protected: