@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
@@ -33,6 +33,7 @@ class NoAlias
33
33
  public:
34
34
  typedef typename ExpressionType::Scalar Scalar;
35
35
 
36
+ EIGEN_DEVICE_FUNC
36
37
  explicit NoAlias(ExpressionType& expression) : m_expression(expression) {}
37
38
 
38
39
  template<typename OtherDerived>
@@ -74,10 +75,10 @@ class NoAlias
74
75
  *
75
76
  * More precisely, noalias() allows to bypass the EvalBeforeAssignBit flag.
76
77
  * Currently, even though several expressions may alias, only product
77
- * expressions have this flag. Therefore, noalias() is only usefull when
78
+ * expressions have this flag. Therefore, noalias() is only useful when
78
79
  * the source expression contains a matrix product.
79
80
  *
80
- * Here are some examples where noalias is usefull:
81
+ * Here are some examples where noalias is useful:
81
82
  * \code
82
83
  * D.noalias() = A * B;
83
84
  * D.noalias() += A.transpose() * B;
@@ -98,7 +99,7 @@ class NoAlias
98
99
  * \sa class NoAlias
99
100
  */
100
101
  template<typename Derived>
101
- NoAlias<Derived,MatrixBase> MatrixBase<Derived>::noalias()
102
+ NoAlias<Derived,MatrixBase> EIGEN_DEVICE_FUNC MatrixBase<Derived>::noalias()
102
103
  {
103
104
  return NoAlias<Derived, Eigen::MatrixBase >(derived());
104
105
  }
@@ -21,12 +21,14 @@ template< typename T,
21
21
  bool is_integer = NumTraits<T>::IsInteger>
22
22
  struct default_digits10_impl
23
23
  {
24
+ EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
24
25
  static int run() { return std::numeric_limits<T>::digits10; }
25
26
  };
26
27
 
27
28
  template<typename T>
28
29
  struct default_digits10_impl<T,false,false> // Floating point
29
30
  {
31
+ EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
30
32
  static int run() {
31
33
  using std::log10;
32
34
  using std::ceil;
@@ -38,11 +40,64 @@ struct default_digits10_impl<T,false,false> // Floating point
38
40
  template<typename T>
39
41
  struct default_digits10_impl<T,false,true> // Integer
40
42
  {
43
+ EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
44
+ static int run() { return 0; }
45
+ };
46
+
47
+
48
+ // default implementation of digits(), based on numeric_limits if specialized,
49
+ // 0 for integer types, and log2(epsilon()) otherwise.
50
+ template< typename T,
51
+ bool use_numeric_limits = std::numeric_limits<T>::is_specialized,
52
+ bool is_integer = NumTraits<T>::IsInteger>
53
+ struct default_digits_impl
54
+ {
55
+ EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
56
+ static int run() { return std::numeric_limits<T>::digits; }
57
+ };
58
+
59
+ template<typename T>
60
+ struct default_digits_impl<T,false,false> // Floating point
61
+ {
62
+ EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
63
+ static int run() {
64
+ using std::log;
65
+ using std::ceil;
66
+ typedef typename NumTraits<T>::Real Real;
67
+ return int(ceil(-log(NumTraits<Real>::epsilon())/log(static_cast<Real>(2))));
68
+ }
69
+ };
70
+
71
+ template<typename T>
72
+ struct default_digits_impl<T,false,true> // Integer
73
+ {
74
+ EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
41
75
  static int run() { return 0; }
42
76
  };
43
77
 
44
78
  } // end namespace internal
45
79
 
80
+ namespace numext {
81
+ /** \internal bit-wise cast without changing the underlying bit representation. */
82
+
83
+ // TODO: Replace by std::bit_cast (available in C++20)
84
+ template <typename Tgt, typename Src>
85
+ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC Tgt bit_cast(const Src& src) {
86
+ #if EIGEN_HAS_TYPE_TRAITS
87
+ // The behaviour of memcpy is not specified for non-trivially copyable types
88
+ EIGEN_STATIC_ASSERT(std::is_trivially_copyable<Src>::value, THIS_TYPE_IS_NOT_SUPPORTED);
89
+ EIGEN_STATIC_ASSERT(std::is_trivially_copyable<Tgt>::value && std::is_default_constructible<Tgt>::value,
90
+ THIS_TYPE_IS_NOT_SUPPORTED);
91
+ #endif
92
+
93
+ EIGEN_STATIC_ASSERT(sizeof(Src) == sizeof(Tgt), THIS_TYPE_IS_NOT_SUPPORTED);
94
+ Tgt tgt;
95
+ EIGEN_USING_STD(memcpy)
96
+ memcpy(&tgt, &src, sizeof(Tgt));
97
+ return tgt;
98
+ }
99
+ } // namespace numext
100
+
46
101
  /** \class NumTraits
47
102
  * \ingroup Core_Module
48
103
  *
@@ -71,7 +126,7 @@ struct default_digits10_impl<T,false,true> // Integer
71
126
  * and to \c 0 otherwise.
72
127
  * \li Enum values ReadCost, AddCost and MulCost representing a rough estimate of the number of CPU cycles needed
73
128
  * to by move / add / mul instructions respectively, assuming the data is already stored in CPU registers.
74
- * Stay vague here. No need to do architecture-specific stuff.
129
+ * Stay vague here. No need to do architecture-specific stuff. If you don't know what this means, just use \c Eigen::HugeCost.
75
130
  * \li An enum value \a IsSigned. It is equal to \c 1 if \a T is a signed type and to 0 if \a T is unsigned.
76
131
  * \li An enum value \a RequireInitialization. It is equal to \c 1 if the constructor of the numeric type \a T must
77
132
  * be called, and to 0 if it is safe not to call it. Default is 0 if \a T is an arithmetic type, and 1 otherwise.
@@ -80,9 +135,18 @@ struct default_digits10_impl<T,false,true> // Integer
80
135
  * \li A dummy_precision() function returning a weak epsilon value. It is mainly used as a default
81
136
  * value by the fuzzy comparison operators.
82
137
  * \li highest() and lowest() functions returning the highest and lowest possible values respectively.
138
+ * \li digits() function returning the number of radix digits (non-sign digits for integers, mantissa for floating-point). This is
139
+ * the analogue of <a href="http://en.cppreference.com/w/cpp/types/numeric_limits/digits">std::numeric_limits<T>::digits</a>
140
+ * which is used as the default implementation if specialized.
83
141
  * \li digits10() function returning the number of decimal digits that can be represented without change. This is
84
142
  * the analogue of <a href="http://en.cppreference.com/w/cpp/types/numeric_limits/digits10">std::numeric_limits<T>::digits10</a>
85
143
  * which is used as the default implementation if specialized.
144
+ * \li min_exponent() and max_exponent() functions returning the highest and lowest possible values, respectively,
145
+ * such that the radix raised to the power exponent-1 is a normalized floating-point number. These are equivalent to
146
+ * <a href="http://en.cppreference.com/w/cpp/types/numeric_limits/min_exponent">std::numeric_limits<T>::min_exponent</a>/
147
+ * <a href="http://en.cppreference.com/w/cpp/types/numeric_limits/max_exponent">std::numeric_limits<T>::max_exponent</a>.
148
+ * \li infinity() function returning a representation of positive infinity, if available.
149
+ * \li quiet_NaN function returning a non-signaling "not-a-number", if available.
86
150
  */
87
151
 
88
152
  template<typename T> struct GenericNumTraits
@@ -106,42 +170,60 @@ template<typename T> struct GenericNumTraits
106
170
  typedef T Nested;
107
171
  typedef T Literal;
108
172
 
109
- EIGEN_DEVICE_FUNC
173
+ EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
110
174
  static inline Real epsilon()
111
175
  {
112
176
  return numext::numeric_limits<T>::epsilon();
113
177
  }
114
178
 
115
- EIGEN_DEVICE_FUNC
179
+ EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
116
180
  static inline int digits10()
117
181
  {
118
182
  return internal::default_digits10_impl<T>::run();
119
183
  }
120
184
 
121
- EIGEN_DEVICE_FUNC
185
+ EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
186
+ static inline int digits()
187
+ {
188
+ return internal::default_digits_impl<T>::run();
189
+ }
190
+
191
+ EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
192
+ static inline int min_exponent()
193
+ {
194
+ return numext::numeric_limits<T>::min_exponent;
195
+ }
196
+
197
+ EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
198
+ static inline int max_exponent()
199
+ {
200
+ return numext::numeric_limits<T>::max_exponent;
201
+ }
202
+
203
+ EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
122
204
  static inline Real dummy_precision()
123
205
  {
124
206
  // make sure to override this for floating-point types
125
207
  return Real(0);
126
208
  }
127
209
 
128
-
129
- EIGEN_DEVICE_FUNC
210
+ EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
130
211
  static inline T highest() {
131
212
  return (numext::numeric_limits<T>::max)();
132
213
  }
133
214
 
134
- EIGEN_DEVICE_FUNC
215
+ EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
135
216
  static inline T lowest() {
136
- return IsInteger ? (numext::numeric_limits<T>::min)() : (-(numext::numeric_limits<T>::max)());
217
+ return IsInteger ? (numext::numeric_limits<T>::min)()
218
+ : static_cast<T>(-(numext::numeric_limits<T>::max)());
137
219
  }
138
220
 
139
- EIGEN_DEVICE_FUNC
221
+ EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
140
222
  static inline T infinity() {
141
223
  return numext::numeric_limits<T>::infinity();
142
224
  }
143
225
 
144
- EIGEN_DEVICE_FUNC
226
+ EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
145
227
  static inline T quiet_NaN() {
146
228
  return numext::numeric_limits<T>::quiet_NaN();
147
229
  }
@@ -153,19 +235,20 @@ template<typename T> struct NumTraits : GenericNumTraits<T>
153
235
  template<> struct NumTraits<float>
154
236
  : GenericNumTraits<float>
155
237
  {
156
- EIGEN_DEVICE_FUNC
238
+ EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
157
239
  static inline float dummy_precision() { return 1e-5f; }
158
240
  };
159
241
 
160
242
  template<> struct NumTraits<double> : GenericNumTraits<double>
161
243
  {
162
- EIGEN_DEVICE_FUNC
244
+ EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
163
245
  static inline double dummy_precision() { return 1e-12; }
164
246
  };
165
247
 
166
248
  template<> struct NumTraits<long double>
167
249
  : GenericNumTraits<long double>
168
250
  {
251
+ EIGEN_CONSTEXPR
169
252
  static inline long double dummy_precision() { return 1e-15l; }
170
253
  };
171
254
 
@@ -182,11 +265,11 @@ template<typename _Real> struct NumTraits<std::complex<_Real> >
182
265
  MulCost = 4 * NumTraits<Real>::MulCost + 2 * NumTraits<Real>::AddCost
183
266
  };
184
267
 
185
- EIGEN_DEVICE_FUNC
268
+ EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
186
269
  static inline Real epsilon() { return NumTraits<Real>::epsilon(); }
187
- EIGEN_DEVICE_FUNC
270
+ EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
188
271
  static inline Real dummy_precision() { return NumTraits<Real>::dummy_precision(); }
189
- EIGEN_DEVICE_FUNC
272
+ EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
190
273
  static inline int digits10() { return NumTraits<Real>::digits10(); }
191
274
  };
192
275
 
@@ -206,16 +289,17 @@ struct NumTraits<Array<Scalar, Rows, Cols, Options, MaxRows, MaxCols> >
206
289
  IsInteger = NumTraits<Scalar>::IsInteger,
207
290
  IsSigned = NumTraits<Scalar>::IsSigned,
208
291
  RequireInitialization = 1,
209
- ReadCost = ArrayType::SizeAtCompileTime==Dynamic ? HugeCost : ArrayType::SizeAtCompileTime * NumTraits<Scalar>::ReadCost,
210
- AddCost = ArrayType::SizeAtCompileTime==Dynamic ? HugeCost : ArrayType::SizeAtCompileTime * NumTraits<Scalar>::AddCost,
211
- MulCost = ArrayType::SizeAtCompileTime==Dynamic ? HugeCost : ArrayType::SizeAtCompileTime * NumTraits<Scalar>::MulCost
292
+ ReadCost = ArrayType::SizeAtCompileTime==Dynamic ? HugeCost : ArrayType::SizeAtCompileTime * int(NumTraits<Scalar>::ReadCost),
293
+ AddCost = ArrayType::SizeAtCompileTime==Dynamic ? HugeCost : ArrayType::SizeAtCompileTime * int(NumTraits<Scalar>::AddCost),
294
+ MulCost = ArrayType::SizeAtCompileTime==Dynamic ? HugeCost : ArrayType::SizeAtCompileTime * int(NumTraits<Scalar>::MulCost)
212
295
  };
213
296
 
214
- EIGEN_DEVICE_FUNC
297
+ EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
215
298
  static inline RealScalar epsilon() { return NumTraits<RealScalar>::epsilon(); }
216
- EIGEN_DEVICE_FUNC
299
+ EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
217
300
  static inline RealScalar dummy_precision() { return NumTraits<RealScalar>::dummy_precision(); }
218
301
 
302
+ EIGEN_CONSTEXPR
219
303
  static inline int digits10() { return NumTraits<Scalar>::digits10(); }
220
304
  };
221
305
 
@@ -229,6 +313,7 @@ template<> struct NumTraits<std::string>
229
313
  MulCost = HugeCost
230
314
  };
231
315
 
316
+ EIGEN_CONSTEXPR
232
317
  static inline int digits10() { return 0; }
233
318
 
234
319
  private:
@@ -243,6 +328,8 @@ private:
243
328
  // Empty specialization for void to allow template specialization based on NumTraits<T>::Real with T==void and SFINAE.
244
329
  template<> struct NumTraits<void> {};
245
330
 
331
+ template<> struct NumTraits<bool> : GenericNumTraits<bool> {};
332
+
246
333
  } // end namespace Eigen
247
334
 
248
335
  #endif // EIGEN_NUMTRAITS_H
@@ -0,0 +1,232 @@
1
+ // This file is part of Eigen, a lightweight C++ template library
2
+ // for linear algebra.
3
+ //
4
+ // Copyright (C) 2011-2018 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/.
9
+
10
+ #ifndef EIGEN_PARTIALREDUX_H
11
+ #define EIGEN_PARTIALREDUX_H
12
+
13
+ namespace Eigen {
14
+
15
+ namespace internal {
16
+
17
+
18
+ /***************************************************************************
19
+ *
20
+ * This file provides evaluators for partial reductions.
21
+ * There are two modes:
22
+ *
23
+ * - scalar path: simply calls the respective function on the column or row.
24
+ * -> nothing special here, all the tricky part is handled by the return
25
+ * types of VectorwiseOp's members. They embed the functor calling the
26
+ * respective DenseBase's member function.
27
+ *
28
+ * - vectorized path: implements a packet-wise reductions followed by
29
+ * some (optional) processing of the outcome, e.g., division by n for mean.
30
+ *
31
+ * For the vectorized path let's observe that the packet-size and outer-unrolling
32
+ * are both decided by the assignement logic. So all we have to do is to decide
33
+ * on the inner unrolling.
34
+ *
35
+ * For the unrolling, we can reuse "internal::redux_vec_unroller" from Redux.h,
36
+ * but be need to be careful to specify correct increment.
37
+ *
38
+ ***************************************************************************/
39
+
40
+
41
+ /* logic deciding a strategy for unrolling of vectorized paths */
42
+ template<typename Func, typename Evaluator>
43
+ struct packetwise_redux_traits
44
+ {
45
+ enum {
46
+ OuterSize = int(Evaluator::IsRowMajor) ? Evaluator::RowsAtCompileTime : Evaluator::ColsAtCompileTime,
47
+ Cost = OuterSize == Dynamic ? HugeCost
48
+ : OuterSize * Evaluator::CoeffReadCost + (OuterSize-1) * functor_traits<Func>::Cost,
49
+ Unrolling = Cost <= EIGEN_UNROLLING_LIMIT ? CompleteUnrolling : NoUnrolling
50
+ };
51
+
52
+ };
53
+
54
+ /* Value to be returned when size==0 , by default let's return 0 */
55
+ template<typename PacketType,typename Func>
56
+ EIGEN_DEVICE_FUNC
57
+ PacketType packetwise_redux_empty_value(const Func& ) { return pset1<PacketType>(0); }
58
+
59
+ /* For products the default is 1 */
60
+ template<typename PacketType,typename Scalar>
61
+ EIGEN_DEVICE_FUNC
62
+ PacketType packetwise_redux_empty_value(const scalar_product_op<Scalar,Scalar>& ) { return pset1<PacketType>(1); }
63
+
64
+ /* Perform the actual reduction */
65
+ template<typename Func, typename Evaluator,
66
+ int Unrolling = packetwise_redux_traits<Func, Evaluator>::Unrolling
67
+ >
68
+ struct packetwise_redux_impl;
69
+
70
+ /* Perform the actual reduction with unrolling */
71
+ template<typename Func, typename Evaluator>
72
+ struct packetwise_redux_impl<Func, Evaluator, CompleteUnrolling>
73
+ {
74
+ typedef redux_novec_unroller<Func,Evaluator, 0, Evaluator::SizeAtCompileTime> Base;
75
+ typedef typename Evaluator::Scalar Scalar;
76
+
77
+ template<typename PacketType>
78
+ EIGEN_DEVICE_FUNC static EIGEN_STRONG_INLINE
79
+ PacketType run(const Evaluator &eval, const Func& func, Index /*size*/)
80
+ {
81
+ return redux_vec_unroller<Func, Evaluator, 0, packetwise_redux_traits<Func, Evaluator>::OuterSize>::template run<PacketType>(eval,func);
82
+ }
83
+ };
84
+
85
+ /* Add a specialization of redux_vec_unroller for size==0 at compiletime.
86
+ * This specialization is not required for general reductions, which is
87
+ * why it is defined here.
88
+ */
89
+ template<typename Func, typename Evaluator, int Start>
90
+ struct redux_vec_unroller<Func, Evaluator, Start, 0>
91
+ {
92
+ template<typename PacketType>
93
+ EIGEN_DEVICE_FUNC
94
+ static EIGEN_STRONG_INLINE PacketType run(const Evaluator &, const Func& f)
95
+ {
96
+ return packetwise_redux_empty_value<PacketType>(f);
97
+ }
98
+ };
99
+
100
+ /* Perform the actual reduction for dynamic sizes */
101
+ template<typename Func, typename Evaluator>
102
+ struct packetwise_redux_impl<Func, Evaluator, NoUnrolling>
103
+ {
104
+ typedef typename Evaluator::Scalar Scalar;
105
+ typedef typename redux_traits<Func, Evaluator>::PacketType PacketScalar;
106
+
107
+ template<typename PacketType>
108
+ EIGEN_DEVICE_FUNC
109
+ static PacketType run(const Evaluator &eval, const Func& func, Index size)
110
+ {
111
+ if(size==0)
112
+ return packetwise_redux_empty_value<PacketType>(func);
113
+
114
+ const Index size4 = (size-1)&(~3);
115
+ PacketType p = eval.template packetByOuterInner<Unaligned,PacketType>(0,0);
116
+ Index i = 1;
117
+ // This loop is optimized for instruction pipelining:
118
+ // - each iteration generates two independent instructions
119
+ // - thanks to branch prediction and out-of-order execution we have independent instructions across loops
120
+ for(; i<size4; i+=4)
121
+ p = func.packetOp(p,
122
+ func.packetOp(
123
+ func.packetOp(eval.template packetByOuterInner<Unaligned,PacketType>(i+0,0),eval.template packetByOuterInner<Unaligned,PacketType>(i+1,0)),
124
+ func.packetOp(eval.template packetByOuterInner<Unaligned,PacketType>(i+2,0),eval.template packetByOuterInner<Unaligned,PacketType>(i+3,0))));
125
+ for(; i<size; ++i)
126
+ p = func.packetOp(p, eval.template packetByOuterInner<Unaligned,PacketType>(i,0));
127
+ return p;
128
+ }
129
+ };
130
+
131
+ template< typename ArgType, typename MemberOp, int Direction>
132
+ struct evaluator<PartialReduxExpr<ArgType, MemberOp, Direction> >
133
+ : evaluator_base<PartialReduxExpr<ArgType, MemberOp, Direction> >
134
+ {
135
+ typedef PartialReduxExpr<ArgType, MemberOp, Direction> XprType;
136
+ typedef typename internal::nested_eval<ArgType,1>::type ArgTypeNested;
137
+ typedef typename internal::add_const_on_value_type<ArgTypeNested>::type ConstArgTypeNested;
138
+ typedef typename internal::remove_all<ArgTypeNested>::type ArgTypeNestedCleaned;
139
+ typedef typename ArgType::Scalar InputScalar;
140
+ typedef typename XprType::Scalar Scalar;
141
+ enum {
142
+ TraversalSize = Direction==int(Vertical) ? int(ArgType::RowsAtCompileTime) : int(ArgType::ColsAtCompileTime)
143
+ };
144
+ typedef typename MemberOp::template Cost<int(TraversalSize)> CostOpType;
145
+ enum {
146
+ CoeffReadCost = TraversalSize==Dynamic ? HugeCost
147
+ : TraversalSize==0 ? 1
148
+ : int(TraversalSize) * int(evaluator<ArgType>::CoeffReadCost) + int(CostOpType::value),
149
+
150
+ _ArgFlags = evaluator<ArgType>::Flags,
151
+
152
+ _Vectorizable = bool(int(_ArgFlags)&PacketAccessBit)
153
+ && bool(MemberOp::Vectorizable)
154
+ && (Direction==int(Vertical) ? bool(_ArgFlags&RowMajorBit) : (_ArgFlags&RowMajorBit)==0)
155
+ && (TraversalSize!=0),
156
+
157
+ Flags = (traits<XprType>::Flags&RowMajorBit)
158
+ | (evaluator<ArgType>::Flags&(HereditaryBits&(~RowMajorBit)))
159
+ | (_Vectorizable ? PacketAccessBit : 0)
160
+ | LinearAccessBit,
161
+
162
+ Alignment = 0 // FIXME this will need to be improved once PartialReduxExpr is vectorized
163
+ };
164
+
165
+ EIGEN_DEVICE_FUNC explicit evaluator(const XprType xpr)
166
+ : m_arg(xpr.nestedExpression()), m_functor(xpr.functor())
167
+ {
168
+ EIGEN_INTERNAL_CHECK_COST_VALUE(TraversalSize==Dynamic ? HugeCost : (TraversalSize==0 ? 1 : int(CostOpType::value)));
169
+ EIGEN_INTERNAL_CHECK_COST_VALUE(CoeffReadCost);
170
+ }
171
+
172
+ typedef typename XprType::CoeffReturnType CoeffReturnType;
173
+
174
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
175
+ const Scalar coeff(Index i, Index j) const
176
+ {
177
+ return coeff(Direction==Vertical ? j : i);
178
+ }
179
+
180
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
181
+ const Scalar coeff(Index index) const
182
+ {
183
+ return m_functor(m_arg.template subVector<DirectionType(Direction)>(index));
184
+ }
185
+
186
+ template<int LoadMode,typename PacketType>
187
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
188
+ PacketType packet(Index i, Index j) const
189
+ {
190
+ return packet<LoadMode,PacketType>(Direction==Vertical ? j : i);
191
+ }
192
+
193
+ template<int LoadMode,typename PacketType>
194
+ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC
195
+ PacketType packet(Index idx) const
196
+ {
197
+ enum { PacketSize = internal::unpacket_traits<PacketType>::size };
198
+ typedef Block<const ArgTypeNestedCleaned,
199
+ Direction==Vertical ? int(ArgType::RowsAtCompileTime) : int(PacketSize),
200
+ Direction==Vertical ? int(PacketSize) : int(ArgType::ColsAtCompileTime),
201
+ true /* InnerPanel */> PanelType;
202
+
203
+ PanelType panel(m_arg,
204
+ Direction==Vertical ? 0 : idx,
205
+ Direction==Vertical ? idx : 0,
206
+ Direction==Vertical ? m_arg.rows() : Index(PacketSize),
207
+ Direction==Vertical ? Index(PacketSize) : m_arg.cols());
208
+
209
+ // FIXME
210
+ // See bug 1612, currently if PacketSize==1 (i.e. complex<double> with 128bits registers) then the storage-order of panel get reversed
211
+ // and methods like packetByOuterInner do not make sense anymore in this context.
212
+ // So let's just by pass "vectorization" in this case:
213
+ if(PacketSize==1)
214
+ return internal::pset1<PacketType>(coeff(idx));
215
+
216
+ typedef typename internal::redux_evaluator<PanelType> PanelEvaluator;
217
+ PanelEvaluator panel_eval(panel);
218
+ typedef typename MemberOp::BinaryOp BinaryOp;
219
+ PacketType p = internal::packetwise_redux_impl<BinaryOp,PanelEvaluator>::template run<PacketType>(panel_eval,m_functor.binaryFunc(),m_arg.outerSize());
220
+ return p;
221
+ }
222
+
223
+ protected:
224
+ ConstArgTypeNested m_arg;
225
+ const MemberOp m_functor;
226
+ };
227
+
228
+ } // end namespace internal
229
+
230
+ } // end namespace Eigen
231
+
232
+ #endif // EIGEN_PARTIALREDUX_H
@@ -88,13 +88,13 @@ class PermutationBase : public EigenBase<Derived>
88
88
  }
89
89
 
90
90
  /** \returns the number of rows */
91
- inline Index rows() const { return Index(indices().size()); }
91
+ inline EIGEN_DEVICE_FUNC Index rows() const { return Index(indices().size()); }
92
92
 
93
93
  /** \returns the number of columns */
94
- inline Index cols() const { return Index(indices().size()); }
94
+ inline EIGEN_DEVICE_FUNC Index cols() const { return Index(indices().size()); }
95
95
 
96
96
  /** \returns the size of a side of the respective square matrix, i.e., the number of indices */
97
- inline Index size() const { return Index(indices().size()); }
97
+ inline EIGEN_DEVICE_FUNC Index size() const { return Index(indices().size()); }
98
98
 
99
99
  #ifndef EIGEN_PARSED_BY_DOXYGEN
100
100
  template<typename DenseDerived>