@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
@@ -144,7 +144,7 @@ template<typename Scalar> struct swap_assign_op {
144
144
  EIGEN_EMPTY_STRUCT_CTOR(swap_assign_op)
145
145
  EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void assignCoeff(Scalar& a, const Scalar& b) const
146
146
  {
147
- #ifdef __CUDACC__
147
+ #ifdef EIGEN_GPUCC
148
148
  // FIXME is there some kind of cuda::swap?
149
149
  Scalar t=b; const_cast<Scalar&>(b)=a; a=t;
150
150
  #else
@@ -157,7 +157,16 @@ template<typename Scalar>
157
157
  struct functor_traits<swap_assign_op<Scalar> > {
158
158
  enum {
159
159
  Cost = 3 * NumTraits<Scalar>::ReadCost,
160
- PacketAccess = packet_traits<Scalar>::Vectorizable
160
+ PacketAccess =
161
+ #if defined(EIGEN_VECTORIZE_AVX) && EIGEN_COMP_CLANG && (EIGEN_COMP_CLANG<800 || defined(__apple_build_version__))
162
+ // This is a partial workaround for a bug in clang generating bad code
163
+ // when mixing 256/512 bits loads and 128 bits moves.
164
+ // See http://eigen.tuxfamily.org/bz/show_bug.cgi?id=1684
165
+ // https://bugs.llvm.org/show_bug.cgi?id=40815
166
+ 0
167
+ #else
168
+ packet_traits<Scalar>::Vectorizable
169
+ #endif
161
170
  };
162
171
  };
163
172
 
@@ -39,32 +39,26 @@ struct scalar_sum_op : binary_op_base<LhsScalar,RhsScalar>
39
39
  EIGEN_SCALAR_BINARY_OP_PLUGIN
40
40
  }
41
41
  #endif
42
- EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const result_type operator() (const LhsScalar& a, const RhsScalar& b) const { return a + b; }
42
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE result_type operator() (const LhsScalar& a, const RhsScalar& b) const { return a + b; }
43
43
  template<typename Packet>
44
- EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Packet packetOp(const Packet& a, const Packet& b) const
44
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet packetOp(const Packet& a, const Packet& b) const
45
45
  { return internal::padd(a,b); }
46
46
  template<typename Packet>
47
- EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const result_type predux(const Packet& a) const
47
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE result_type predux(const Packet& a) const
48
48
  { return internal::predux(a); }
49
49
  };
50
50
  template<typename LhsScalar,typename RhsScalar>
51
51
  struct functor_traits<scalar_sum_op<LhsScalar,RhsScalar> > {
52
52
  enum {
53
- Cost = (NumTraits<LhsScalar>::AddCost+NumTraits<RhsScalar>::AddCost)/2, // rough estimate!
53
+ Cost = (int(NumTraits<LhsScalar>::AddCost) + int(NumTraits<RhsScalar>::AddCost)) / 2, // rough estimate!
54
54
  PacketAccess = is_same<LhsScalar,RhsScalar>::value && packet_traits<LhsScalar>::HasAdd && packet_traits<RhsScalar>::HasAdd
55
55
  // TODO vectorize mixed sum
56
56
  };
57
57
  };
58
58
 
59
- /** \internal
60
- * \brief Template specialization to deprecate the summation of boolean expressions.
61
- * This is required to solve Bug 426.
62
- * \sa DenseBase::count(), DenseBase::any(), ArrayBase::cast(), MatrixBase::cast()
63
- */
64
- template<> struct scalar_sum_op<bool,bool> : scalar_sum_op<int,int> {
65
- EIGEN_DEPRECATED
66
- scalar_sum_op() {}
67
- };
59
+
60
+ template<>
61
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE bool scalar_sum_op<bool,bool>::operator() (const bool& a, const bool& b) const { return a || b; }
68
62
 
69
63
 
70
64
  /** \internal
@@ -83,23 +77,27 @@ struct scalar_product_op : binary_op_base<LhsScalar,RhsScalar>
83
77
  EIGEN_SCALAR_BINARY_OP_PLUGIN
84
78
  }
85
79
  #endif
86
- EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const result_type operator() (const LhsScalar& a, const RhsScalar& b) const { return a * b; }
80
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE result_type operator() (const LhsScalar& a, const RhsScalar& b) const { return a * b; }
87
81
  template<typename Packet>
88
- EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Packet packetOp(const Packet& a, const Packet& b) const
82
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet packetOp(const Packet& a, const Packet& b) const
89
83
  { return internal::pmul(a,b); }
90
84
  template<typename Packet>
91
- EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const result_type predux(const Packet& a) const
85
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE result_type predux(const Packet& a) const
92
86
  { return internal::predux_mul(a); }
93
87
  };
94
88
  template<typename LhsScalar,typename RhsScalar>
95
89
  struct functor_traits<scalar_product_op<LhsScalar,RhsScalar> > {
96
90
  enum {
97
- Cost = (NumTraits<LhsScalar>::MulCost + NumTraits<RhsScalar>::MulCost)/2, // rough estimate!
91
+ Cost = (int(NumTraits<LhsScalar>::MulCost) + int(NumTraits<RhsScalar>::MulCost))/2, // rough estimate!
98
92
  PacketAccess = is_same<LhsScalar,RhsScalar>::value && packet_traits<LhsScalar>::HasMul && packet_traits<RhsScalar>::HasMul
99
93
  // TODO vectorize mixed product
100
94
  };
101
95
  };
102
96
 
97
+ template<>
98
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE bool scalar_product_op<bool,bool>::operator() (const bool& a, const bool& b) const { return a && b; }
99
+
100
+
103
101
  /** \internal
104
102
  * \brief Template functor to compute the conjugate product of two scalars
105
103
  *
@@ -116,11 +114,11 @@ struct scalar_conj_product_op : binary_op_base<LhsScalar,RhsScalar>
116
114
  typedef typename ScalarBinaryOpTraits<LhsScalar,RhsScalar,scalar_conj_product_op>::ReturnType result_type;
117
115
 
118
116
  EIGEN_EMPTY_STRUCT_CTOR(scalar_conj_product_op)
119
- EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const result_type operator() (const LhsScalar& a, const RhsScalar& b) const
117
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE result_type operator() (const LhsScalar& a, const RhsScalar& b) const
120
118
  { return conj_helper<LhsScalar,RhsScalar,Conj,false>().pmul(a,b); }
121
119
 
122
120
  template<typename Packet>
123
- EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Packet packetOp(const Packet& a, const Packet& b) const
121
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet packetOp(const Packet& a, const Packet& b) const
124
122
  { return conj_helper<Packet,Packet,Conj,false>().pmul(a,b); }
125
123
  };
126
124
  template<typename LhsScalar,typename RhsScalar>
@@ -136,21 +134,28 @@ struct functor_traits<scalar_conj_product_op<LhsScalar,RhsScalar> > {
136
134
  *
137
135
  * \sa class CwiseBinaryOp, MatrixBase::cwiseMin, class VectorwiseOp, MatrixBase::minCoeff()
138
136
  */
139
- template<typename LhsScalar,typename RhsScalar>
137
+ template<typename LhsScalar,typename RhsScalar, int NaNPropagation>
140
138
  struct scalar_min_op : binary_op_base<LhsScalar,RhsScalar>
141
139
  {
142
140
  typedef typename ScalarBinaryOpTraits<LhsScalar,RhsScalar,scalar_min_op>::ReturnType result_type;
143
141
  EIGEN_EMPTY_STRUCT_CTOR(scalar_min_op)
144
- EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const result_type operator() (const LhsScalar& a, const RhsScalar& b) const { return numext::mini(a, b); }
142
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE result_type operator() (const LhsScalar& a, const RhsScalar& b) const {
143
+ return internal::pmin<NaNPropagation>(a, b);
144
+ }
145
145
  template<typename Packet>
146
- EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Packet packetOp(const Packet& a, const Packet& b) const
147
- { return internal::pmin(a,b); }
146
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet packetOp(const Packet& a, const Packet& b) const
147
+ {
148
+ return internal::pmin<NaNPropagation>(a,b);
149
+ }
148
150
  template<typename Packet>
149
- EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const result_type predux(const Packet& a) const
150
- { return internal::predux_min(a); }
151
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE result_type predux(const Packet& a) const
152
+ {
153
+ return internal::predux_min<NaNPropagation>(a);
154
+ }
151
155
  };
152
- template<typename LhsScalar,typename RhsScalar>
153
- struct functor_traits<scalar_min_op<LhsScalar,RhsScalar> > {
156
+
157
+ template<typename LhsScalar,typename RhsScalar, int NaNPropagation>
158
+ struct functor_traits<scalar_min_op<LhsScalar,RhsScalar, NaNPropagation> > {
154
159
  enum {
155
160
  Cost = (NumTraits<LhsScalar>::AddCost+NumTraits<RhsScalar>::AddCost)/2,
156
161
  PacketAccess = internal::is_same<LhsScalar, RhsScalar>::value && packet_traits<LhsScalar>::HasMin
@@ -162,21 +167,28 @@ struct functor_traits<scalar_min_op<LhsScalar,RhsScalar> > {
162
167
  *
163
168
  * \sa class CwiseBinaryOp, MatrixBase::cwiseMax, class VectorwiseOp, MatrixBase::maxCoeff()
164
169
  */
165
- template<typename LhsScalar,typename RhsScalar>
166
- struct scalar_max_op : binary_op_base<LhsScalar,RhsScalar>
170
+ template<typename LhsScalar,typename RhsScalar, int NaNPropagation>
171
+ struct scalar_max_op : binary_op_base<LhsScalar,RhsScalar>
167
172
  {
168
173
  typedef typename ScalarBinaryOpTraits<LhsScalar,RhsScalar,scalar_max_op>::ReturnType result_type;
169
174
  EIGEN_EMPTY_STRUCT_CTOR(scalar_max_op)
170
- EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const result_type operator() (const LhsScalar& a, const RhsScalar& b) const { return numext::maxi(a, b); }
175
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE result_type operator() (const LhsScalar& a, const RhsScalar& b) const {
176
+ return internal::pmax<NaNPropagation>(a,b);
177
+ }
171
178
  template<typename Packet>
172
- EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Packet packetOp(const Packet& a, const Packet& b) const
173
- { return internal::pmax(a,b); }
179
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet packetOp(const Packet& a, const Packet& b) const
180
+ {
181
+ return internal::pmax<NaNPropagation>(a,b);
182
+ }
174
183
  template<typename Packet>
175
- EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const result_type predux(const Packet& a) const
176
- { return internal::predux_max(a); }
184
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE result_type predux(const Packet& a) const
185
+ {
186
+ return internal::predux_max<NaNPropagation>(a);
187
+ }
177
188
  };
178
- template<typename LhsScalar,typename RhsScalar>
179
- struct functor_traits<scalar_max_op<LhsScalar,RhsScalar> > {
189
+
190
+ template<typename LhsScalar,typename RhsScalar, int NaNPropagation>
191
+ struct functor_traits<scalar_max_op<LhsScalar,RhsScalar, NaNPropagation> > {
180
192
  enum {
181
193
  Cost = (NumTraits<LhsScalar>::AddCost+NumTraits<RhsScalar>::AddCost)/2,
182
194
  PacketAccess = internal::is_same<LhsScalar, RhsScalar>::value && packet_traits<LhsScalar>::HasMax
@@ -253,7 +265,6 @@ struct scalar_cmp_op<LhsScalar,RhsScalar, cmp_NEQ> : binary_op_base<LhsScalar,Rh
253
265
  EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE bool operator()(const LhsScalar& a, const RhsScalar& b) const {return a!=b;}
254
266
  };
255
267
 
256
-
257
268
  /** \internal
258
269
  * \brief Template functor to compute the hypot of two \b positive \b and \b real scalars
259
270
  *
@@ -287,6 +298,7 @@ struct functor_traits<scalar_hypot_op<Scalar,Scalar> > {
287
298
 
288
299
  /** \internal
289
300
  * \brief Template functor to compute the pow of two scalars
301
+ * See the specification of pow in https://en.cppreference.com/w/cpp/numeric/math/pow
290
302
  */
291
303
  template<typename Scalar, typename Exponent>
292
304
  struct scalar_pow_op : binary_op_base<Scalar,Exponent>
@@ -301,16 +313,31 @@ struct scalar_pow_op : binary_op_base<Scalar,Exponent>
301
313
  EIGEN_SCALAR_BINARY_OP_PLUGIN
302
314
  }
303
315
  #endif
316
+
304
317
  EIGEN_DEVICE_FUNC
305
318
  inline result_type operator() (const Scalar& a, const Exponent& b) const { return numext::pow(a, b); }
319
+
320
+ template<typename Packet>
321
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Packet packetOp(const Packet& a, const Packet& b) const
322
+ {
323
+ return generic_pow(a,b);
324
+ }
306
325
  };
326
+
307
327
  template<typename Scalar, typename Exponent>
308
328
  struct functor_traits<scalar_pow_op<Scalar,Exponent> > {
309
- enum { Cost = 5 * NumTraits<Scalar>::MulCost, PacketAccess = false };
329
+ enum {
330
+ Cost = 5 * NumTraits<Scalar>::MulCost,
331
+ PacketAccess = (!NumTraits<Scalar>::IsComplex && !NumTraits<Scalar>::IsInteger &&
332
+ packet_traits<Scalar>::HasExp && packet_traits<Scalar>::HasLog &&
333
+ packet_traits<Scalar>::HasRound && packet_traits<Scalar>::HasCmp &&
334
+ // Temporarly disable packet access for half/bfloat16 until
335
+ // accuracy is improved.
336
+ !is_same<Scalar, half>::value && !is_same<Scalar, bfloat16>::value
337
+ )
338
+ };
310
339
  };
311
340
 
312
-
313
-
314
341
  //---------- non associative binary functors ----------
315
342
 
316
343
  /** \internal
@@ -337,7 +364,7 @@ struct scalar_difference_op : binary_op_base<LhsScalar,RhsScalar>
337
364
  template<typename LhsScalar,typename RhsScalar>
338
365
  struct functor_traits<scalar_difference_op<LhsScalar,RhsScalar> > {
339
366
  enum {
340
- Cost = (NumTraits<LhsScalar>::AddCost+NumTraits<RhsScalar>::AddCost)/2,
367
+ Cost = (int(NumTraits<LhsScalar>::AddCost) + int(NumTraits<RhsScalar>::AddCost)) / 2,
341
368
  PacketAccess = is_same<LhsScalar,RhsScalar>::value && packet_traits<LhsScalar>::HasSub && packet_traits<RhsScalar>::HasSub
342
369
  };
343
370
  };
@@ -382,11 +409,14 @@ struct functor_traits<scalar_quotient_op<LhsScalar,RhsScalar> > {
382
409
  struct scalar_boolean_and_op {
383
410
  EIGEN_EMPTY_STRUCT_CTOR(scalar_boolean_and_op)
384
411
  EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE bool operator() (const bool& a, const bool& b) const { return a && b; }
412
+ template<typename Packet>
413
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Packet packetOp(const Packet& a, const Packet& b) const
414
+ { return internal::pand(a,b); }
385
415
  };
386
416
  template<> struct functor_traits<scalar_boolean_and_op> {
387
417
  enum {
388
418
  Cost = NumTraits<bool>::AddCost,
389
- PacketAccess = false
419
+ PacketAccess = true
390
420
  };
391
421
  };
392
422
 
@@ -398,11 +428,14 @@ template<> struct functor_traits<scalar_boolean_and_op> {
398
428
  struct scalar_boolean_or_op {
399
429
  EIGEN_EMPTY_STRUCT_CTOR(scalar_boolean_or_op)
400
430
  EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE bool operator() (const bool& a, const bool& b) const { return a || b; }
431
+ template<typename Packet>
432
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Packet packetOp(const Packet& a, const Packet& b) const
433
+ { return internal::por(a,b); }
401
434
  };
402
435
  template<> struct functor_traits<scalar_boolean_or_op> {
403
436
  enum {
404
437
  Cost = NumTraits<bool>::AddCost,
405
- PacketAccess = false
438
+ PacketAccess = true
406
439
  };
407
440
  };
408
441
 
@@ -414,11 +447,44 @@ template<> struct functor_traits<scalar_boolean_or_op> {
414
447
  struct scalar_boolean_xor_op {
415
448
  EIGEN_EMPTY_STRUCT_CTOR(scalar_boolean_xor_op)
416
449
  EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE bool operator() (const bool& a, const bool& b) const { return a ^ b; }
450
+ template<typename Packet>
451
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Packet packetOp(const Packet& a, const Packet& b) const
452
+ { return internal::pxor(a,b); }
417
453
  };
418
454
  template<> struct functor_traits<scalar_boolean_xor_op> {
419
455
  enum {
420
456
  Cost = NumTraits<bool>::AddCost,
421
- PacketAccess = false
457
+ PacketAccess = true
458
+ };
459
+ };
460
+
461
+ /** \internal
462
+ * \brief Template functor to compute the absolute difference of two scalars
463
+ *
464
+ * \sa class CwiseBinaryOp, MatrixBase::absolute_difference
465
+ */
466
+ template<typename LhsScalar,typename RhsScalar>
467
+ struct scalar_absolute_difference_op : binary_op_base<LhsScalar,RhsScalar>
468
+ {
469
+ typedef typename ScalarBinaryOpTraits<LhsScalar,RhsScalar,scalar_absolute_difference_op>::ReturnType result_type;
470
+ #ifndef EIGEN_SCALAR_BINARY_OP_PLUGIN
471
+ EIGEN_EMPTY_STRUCT_CTOR(scalar_absolute_difference_op)
472
+ #else
473
+ scalar_absolute_difference_op() {
474
+ EIGEN_SCALAR_BINARY_OP_PLUGIN
475
+ }
476
+ #endif
477
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const result_type operator() (const LhsScalar& a, const RhsScalar& b) const
478
+ { return numext::absdiff(a,b); }
479
+ template<typename Packet>
480
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Packet packetOp(const Packet& a, const Packet& b) const
481
+ { return internal::pabsdiff(a,b); }
482
+ };
483
+ template<typename LhsScalar,typename RhsScalar>
484
+ struct functor_traits<scalar_absolute_difference_op<LhsScalar,RhsScalar> > {
485
+ enum {
486
+ Cost = (NumTraits<LhsScalar>::AddCost+NumTraits<RhsScalar>::AddCost)/2,
487
+ PacketAccess = is_same<LhsScalar,RhsScalar>::value && packet_traits<LhsScalar>::HasAbsDiff
422
488
  };
423
489
  };
424
490
 
@@ -436,7 +502,7 @@ template<typename BinaryOp> struct bind1st_op : BinaryOp {
436
502
  typedef typename BinaryOp::second_argument_type second_argument_type;
437
503
  typedef typename BinaryOp::result_type result_type;
438
504
 
439
- bind1st_op(const first_argument_type &val) : m_value(val) {}
505
+ EIGEN_DEVICE_FUNC explicit bind1st_op(const first_argument_type &val) : m_value(val) {}
440
506
 
441
507
  EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const result_type operator() (const second_argument_type& b) const { return BinaryOp::operator()(m_value,b); }
442
508
 
@@ -455,7 +521,7 @@ template<typename BinaryOp> struct bind2nd_op : BinaryOp {
455
521
  typedef typename BinaryOp::second_argument_type second_argument_type;
456
522
  typedef typename BinaryOp::result_type result_type;
457
523
 
458
- bind2nd_op(const second_argument_type &val) : m_value(val) {}
524
+ EIGEN_DEVICE_FUNC explicit bind2nd_op(const second_argument_type &val) : m_value(val) {}
459
525
 
460
526
  EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const result_type operator() (const first_argument_type& a) const { return BinaryOp::operator()(a,m_value); }
461
527
 
@@ -37,26 +37,27 @@ template<typename Scalar>
37
37
  struct functor_traits<scalar_identity_op<Scalar> >
38
38
  { enum { Cost = NumTraits<Scalar>::AddCost, PacketAccess = false, IsRepeatable = true }; };
39
39
 
40
- template <typename Scalar, typename Packet, bool IsInteger> struct linspaced_op_impl;
40
+ template <typename Scalar, bool IsInteger> struct linspaced_op_impl;
41
41
 
42
- template <typename Scalar, typename Packet>
43
- struct linspaced_op_impl<Scalar,Packet,/*IsInteger*/false>
42
+ template <typename Scalar>
43
+ struct linspaced_op_impl<Scalar,/*IsInteger*/false>
44
44
  {
45
- linspaced_op_impl(const Scalar& low, const Scalar& high, Index num_steps) :
46
- m_low(low), m_high(high), m_size1(num_steps==1 ? 1 : num_steps-1), m_step(num_steps==1 ? Scalar() : (high-low)/Scalar(num_steps-1)),
45
+ typedef typename NumTraits<Scalar>::Real RealScalar;
46
+
47
+ EIGEN_DEVICE_FUNC linspaced_op_impl(const Scalar& low, const Scalar& high, Index num_steps) :
48
+ m_low(low), m_high(high), m_size1(num_steps==1 ? 1 : num_steps-1), m_step(num_steps==1 ? Scalar() : Scalar((high-low)/RealScalar(num_steps-1))),
47
49
  m_flip(numext::abs(high)<numext::abs(low))
48
50
  {}
49
51
 
50
52
  template<typename IndexType>
51
53
  EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Scalar operator() (IndexType i) const {
52
- typedef typename NumTraits<Scalar>::Real RealScalar;
53
54
  if(m_flip)
54
- return (i==0)? m_low : (m_high - RealScalar(m_size1-i)*m_step);
55
+ return (i==0)? m_low : Scalar(m_high - RealScalar(m_size1-i)*m_step);
55
56
  else
56
- return (i==m_size1)? m_high : (m_low + RealScalar(i)*m_step);
57
+ return (i==m_size1)? m_high : Scalar(m_low + RealScalar(i)*m_step);
57
58
  }
58
59
 
59
- template<typename IndexType>
60
+ template<typename Packet, typename IndexType>
60
61
  EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Packet packetOp(IndexType i) const
61
62
  {
62
63
  // Principle:
@@ -65,17 +66,17 @@ struct linspaced_op_impl<Scalar,Packet,/*IsInteger*/false>
65
66
  {
66
67
  Packet pi = plset<Packet>(Scalar(i-m_size1));
67
68
  Packet res = padd(pset1<Packet>(m_high), pmul(pset1<Packet>(m_step), pi));
68
- if(i==0)
69
- res = pinsertfirst(res, m_low);
70
- return res;
69
+ if (EIGEN_PREDICT_TRUE(i != 0)) return res;
70
+ Packet mask = pcmp_lt(pset1<Packet>(0), plset<Packet>(0));
71
+ return pselect<Packet>(mask, res, pset1<Packet>(m_low));
71
72
  }
72
73
  else
73
74
  {
74
75
  Packet pi = plset<Packet>(Scalar(i));
75
76
  Packet res = padd(pset1<Packet>(m_low), pmul(pset1<Packet>(m_step), pi));
76
- if(i==m_size1-unpacket_traits<Packet>::size+1)
77
- res = pinsertlast(res, m_high);
78
- return res;
77
+ if(EIGEN_PREDICT_TRUE(i != m_size1-unpacket_traits<Packet>::size+1)) return res;
78
+ Packet mask = pcmp_lt(plset<Packet>(0), pset1<Packet>(unpacket_traits<Packet>::size-1));
79
+ return pselect<Packet>(mask, res, pset1<Packet>(m_high));
79
80
  }
80
81
  }
81
82
 
@@ -86,10 +87,10 @@ struct linspaced_op_impl<Scalar,Packet,/*IsInteger*/false>
86
87
  const bool m_flip;
87
88
  };
88
89
 
89
- template <typename Scalar, typename Packet>
90
- struct linspaced_op_impl<Scalar,Packet,/*IsInteger*/true>
90
+ template <typename Scalar>
91
+ struct linspaced_op_impl<Scalar,/*IsInteger*/true>
91
92
  {
92
- linspaced_op_impl(const Scalar& low, const Scalar& high, Index num_steps) :
93
+ EIGEN_DEVICE_FUNC linspaced_op_impl(const Scalar& low, const Scalar& high, Index num_steps) :
93
94
  m_low(low),
94
95
  m_multiplier((high-low)/convert_index<Scalar>(num_steps<=1 ? 1 : num_steps-1)),
95
96
  m_divisor(convert_index<Scalar>((high>=low?num_steps:-num_steps)+(high-low))/((numext::abs(high-low)+1)==0?1:(numext::abs(high-low)+1))),
@@ -115,8 +116,8 @@ struct linspaced_op_impl<Scalar,Packet,/*IsInteger*/true>
115
116
  // Forward declaration (we default to random access which does not really give
116
117
  // us a speed gain when using packet access but it allows to use the functor in
117
118
  // nested expressions).
118
- template <typename Scalar, typename PacketType> struct linspaced_op;
119
- template <typename Scalar, typename PacketType> struct functor_traits< linspaced_op<Scalar,PacketType> >
119
+ template <typename Scalar> struct linspaced_op;
120
+ template <typename Scalar> struct functor_traits< linspaced_op<Scalar> >
120
121
  {
121
122
  enum
122
123
  {
@@ -126,9 +127,9 @@ template <typename Scalar, typename PacketType> struct functor_traits< linspaced
126
127
  IsRepeatable = true
127
128
  };
128
129
  };
129
- template <typename Scalar, typename PacketType> struct linspaced_op
130
+ template <typename Scalar> struct linspaced_op
130
131
  {
131
- linspaced_op(const Scalar& low, const Scalar& high, Index num_steps)
132
+ EIGEN_DEVICE_FUNC linspaced_op(const Scalar& low, const Scalar& high, Index num_steps)
132
133
  : impl((num_steps==1 ? high : low),high,num_steps)
133
134
  {}
134
135
 
@@ -136,11 +137,11 @@ template <typename Scalar, typename PacketType> struct linspaced_op
136
137
  EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Scalar operator() (IndexType i) const { return impl(i); }
137
138
 
138
139
  template<typename Packet,typename IndexType>
139
- EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Packet packetOp(IndexType i) const { return impl.packetOp(i); }
140
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Packet packetOp(IndexType i) const { return impl.template packetOp<Packet>(i); }
140
141
 
141
142
  // This proxy object handles the actual required temporaries and the different
142
143
  // implementations (integer vs. floating point).
143
- const linspaced_op_impl<Scalar,PacketType,NumTraits<Scalar>::IsInteger> impl;
144
+ const linspaced_op_impl<Scalar,NumTraits<Scalar>::IsInteger> impl;
144
145
  };
145
146
 
146
147
  // Linear access is automatically determined from the operator() prototypes available for the given functor.
@@ -166,12 +167,12 @@ struct has_unary_operator<scalar_identity_op<Scalar>,IndexType> { enum { value =
166
167
  template<typename Scalar,typename IndexType>
167
168
  struct has_binary_operator<scalar_identity_op<Scalar>,IndexType> { enum { value = 1}; };
168
169
 
169
- template<typename Scalar, typename PacketType,typename IndexType>
170
- struct has_nullary_operator<linspaced_op<Scalar,PacketType>,IndexType> { enum { value = 0}; };
171
- template<typename Scalar, typename PacketType,typename IndexType>
172
- struct has_unary_operator<linspaced_op<Scalar,PacketType>,IndexType> { enum { value = 1}; };
173
- template<typename Scalar, typename PacketType,typename IndexType>
174
- struct has_binary_operator<linspaced_op<Scalar,PacketType>,IndexType> { enum { value = 0}; };
170
+ template<typename Scalar,typename IndexType>
171
+ struct has_nullary_operator<linspaced_op<Scalar>,IndexType> { enum { value = 0}; };
172
+ template<typename Scalar,typename IndexType>
173
+ struct has_unary_operator<linspaced_op<Scalar>,IndexType> { enum { value = 1}; };
174
+ template<typename Scalar,typename IndexType>
175
+ struct has_binary_operator<linspaced_op<Scalar>,IndexType> { enum { value = 0}; };
175
176
 
176
177
  template<typename Scalar,typename IndexType>
177
178
  struct has_nullary_operator<scalar_random_op<Scalar>,IndexType> { enum { value = 1}; };
@@ -12,6 +12,28 @@
12
12
 
13
13
  namespace Eigen {
14
14
 
15
+ // Portable replacements for certain functors.
16
+ namespace numext {
17
+
18
+ template<typename T = void>
19
+ struct equal_to {
20
+ typedef bool result_type;
21
+ EIGEN_DEVICE_FUNC bool operator()(const T& lhs, const T& rhs) const {
22
+ return lhs == rhs;
23
+ }
24
+ };
25
+
26
+ template<typename T = void>
27
+ struct not_equal_to {
28
+ typedef bool result_type;
29
+ EIGEN_DEVICE_FUNC bool operator()(const T& lhs, const T& rhs) const {
30
+ return lhs != rhs;
31
+ }
32
+ };
33
+
34
+ }
35
+
36
+
15
37
  namespace internal {
16
38
 
17
39
  // default functor traits for STL functors:
@@ -68,11 +90,19 @@ template<typename T>
68
90
  struct functor_traits<std::equal_to<T> >
69
91
  { enum { Cost = 1, PacketAccess = false }; };
70
92
 
93
+ template<typename T>
94
+ struct functor_traits<numext::equal_to<T> >
95
+ : functor_traits<std::equal_to<T> > {};
96
+
71
97
  template<typename T>
72
98
  struct functor_traits<std::not_equal_to<T> >
73
99
  { enum { Cost = 1, PacketAccess = false }; };
74
100
 
75
- #if (__cplusplus < 201103L) && (EIGEN_COMP_MSVC <= 1900)
101
+ template<typename T>
102
+ struct functor_traits<numext::not_equal_to<T> >
103
+ : functor_traits<std::not_equal_to<T> > {};
104
+
105
+ #if (EIGEN_COMP_CXXVER < 11)
76
106
  // std::binder* are deprecated since c++11 and will be removed in c++17
77
107
  template<typename T>
78
108
  struct functor_traits<std::binder2nd<T> >
@@ -83,7 +113,7 @@ struct functor_traits<std::binder1st<T> >
83
113
  { enum { Cost = functor_traits<T>::Cost, PacketAccess = false }; };
84
114
  #endif
85
115
 
86
- #if (__cplusplus < 201703L) && (EIGEN_COMP_MSVC < 1910)
116
+ #if (EIGEN_COMP_CXXVER < 17)
87
117
  // std::unary_negate is deprecated since c++17 and will be removed in c++20
88
118
  template<typename T>
89
119
  struct functor_traits<std::unary_negate<T> >