@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
@@ -109,7 +109,7 @@ struct functor_traits<scalar_abs2_op<Scalar> >
109
109
  template<typename Scalar> struct scalar_conjugate_op {
110
110
  EIGEN_EMPTY_STRUCT_CTOR(scalar_conjugate_op)
111
111
  EIGEN_DEVICE_FUNC
112
- EIGEN_STRONG_INLINE const Scalar operator() (const Scalar& a) const { using numext::conj; return conj(a); }
112
+ EIGEN_STRONG_INLINE const Scalar operator() (const Scalar& a) const { return numext::conj(a); }
113
113
  template<typename Packet>
114
114
  EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Packet packetOp(const Packet& a) const { return internal::pconj(a); }
115
115
  };
@@ -117,7 +117,15 @@ template<typename Scalar>
117
117
  struct functor_traits<scalar_conjugate_op<Scalar> >
118
118
  {
119
119
  enum {
120
- Cost = NumTraits<Scalar>::IsComplex ? NumTraits<Scalar>::AddCost : 0,
120
+ Cost = 0,
121
+ // Yes the cost is zero even for complexes because in most cases for which
122
+ // the cost is used, conjugation turns to be a no-op. Some examples:
123
+ // cost(a*conj(b)) == cost(a*b)
124
+ // cost(a+conj(b)) == cost(a+b)
125
+ // <etc.
126
+ // If we don't set it to zero, then:
127
+ // A.conjugate().lazyProduct(B.conjugate())
128
+ // will bake its operands. We definitely don't want that!
121
129
  PacketAccess = packet_traits<Scalar>::HasConj
122
130
  };
123
131
  };
@@ -130,7 +138,7 @@ struct functor_traits<scalar_conjugate_op<Scalar> >
130
138
  template<typename Scalar> struct scalar_arg_op {
131
139
  EIGEN_EMPTY_STRUCT_CTOR(scalar_arg_op)
132
140
  typedef typename NumTraits<Scalar>::Real result_type;
133
- EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const result_type operator() (const Scalar& a) const { using numext::arg; return arg(a); }
141
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const result_type operator() (const Scalar& a) const { return numext::arg(a); }
134
142
  template<typename Packet>
135
143
  EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Packet packetOp(const Packet& a) const
136
144
  { return internal::parg(a); }
@@ -158,6 +166,44 @@ template<typename Scalar, typename NewType>
158
166
  struct functor_traits<scalar_cast_op<Scalar,NewType> >
159
167
  { enum { Cost = is_same<Scalar, NewType>::value ? 0 : NumTraits<NewType>::AddCost, PacketAccess = false }; };
160
168
 
169
+ /** \internal
170
+ * \brief Template functor to arithmetically shift a scalar right by a number of bits
171
+ *
172
+ * \sa class CwiseUnaryOp, MatrixBase::shift_right()
173
+ */
174
+ template<typename Scalar, int N>
175
+ struct scalar_shift_right_op {
176
+ EIGEN_EMPTY_STRUCT_CTOR(scalar_shift_right_op)
177
+
178
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Scalar operator() (const Scalar& a) const
179
+ { return a >> N; }
180
+ template<typename Packet>
181
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Packet packetOp(const Packet& a) const
182
+ { return internal::parithmetic_shift_right<N>(a); }
183
+ };
184
+ template<typename Scalar, int N>
185
+ struct functor_traits<scalar_shift_right_op<Scalar,N> >
186
+ { enum { Cost = NumTraits<Scalar>::AddCost, PacketAccess = packet_traits<Scalar>::HasShift }; };
187
+
188
+ /** \internal
189
+ * \brief Template functor to logically shift a scalar left by a number of bits
190
+ *
191
+ * \sa class CwiseUnaryOp, MatrixBase::shift_left()
192
+ */
193
+ template<typename Scalar, int N>
194
+ struct scalar_shift_left_op {
195
+ EIGEN_EMPTY_STRUCT_CTOR(scalar_shift_left_op)
196
+
197
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Scalar operator() (const Scalar& a) const
198
+ { return a << N; }
199
+ template<typename Packet>
200
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Packet packetOp(const Packet& a) const
201
+ { return internal::plogical_shift_left<N>(a); }
202
+ };
203
+ template<typename Scalar, int N>
204
+ struct functor_traits<scalar_shift_left_op<Scalar,N> >
205
+ { enum { Cost = NumTraits<Scalar>::AddCost, PacketAccess = packet_traits<Scalar>::HasShift }; };
206
+
161
207
  /** \internal
162
208
  * \brief Template functor to extract the real part of a complex
163
209
  *
@@ -262,6 +308,26 @@ struct functor_traits<scalar_exp_op<Scalar> > {
262
308
  };
263
309
  };
264
310
 
311
+ /** \internal
312
+ *
313
+ * \brief Template functor to compute the exponential of a scalar - 1.
314
+ *
315
+ * \sa class CwiseUnaryOp, ArrayBase::expm1()
316
+ */
317
+ template<typename Scalar> struct scalar_expm1_op {
318
+ EIGEN_EMPTY_STRUCT_CTOR(scalar_expm1_op)
319
+ EIGEN_DEVICE_FUNC inline const Scalar operator() (const Scalar& a) const { return numext::expm1(a); }
320
+ template <typename Packet>
321
+ EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& a) const { return internal::pexpm1(a); }
322
+ };
323
+ template <typename Scalar>
324
+ struct functor_traits<scalar_expm1_op<Scalar> > {
325
+ enum {
326
+ PacketAccess = packet_traits<Scalar>::HasExpm1,
327
+ Cost = functor_traits<scalar_exp_op<Scalar> >::Cost // TODO measure cost of expm1
328
+ };
329
+ };
330
+
265
331
  /** \internal
266
332
  *
267
333
  * \brief Template functor to compute the logarithm of a scalar
@@ -321,7 +387,7 @@ struct functor_traits<scalar_log1p_op<Scalar> > {
321
387
  */
322
388
  template<typename Scalar> struct scalar_log10_op {
323
389
  EIGEN_EMPTY_STRUCT_CTOR(scalar_log10_op)
324
- EIGEN_DEVICE_FUNC inline const Scalar operator() (const Scalar& a) const { EIGEN_USING_STD_MATH(log10) return log10(a); }
390
+ EIGEN_DEVICE_FUNC inline const Scalar operator() (const Scalar& a) const { EIGEN_USING_STD(log10) return log10(a); }
325
391
  template <typename Packet>
326
392
  EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& a) const { return internal::plog10(a); }
327
393
  };
@@ -329,6 +395,22 @@ template<typename Scalar>
329
395
  struct functor_traits<scalar_log10_op<Scalar> >
330
396
  { enum { Cost = 5 * NumTraits<Scalar>::MulCost, PacketAccess = packet_traits<Scalar>::HasLog10 }; };
331
397
 
398
+ /** \internal
399
+ *
400
+ * \brief Template functor to compute the base-2 logarithm of a scalar
401
+ *
402
+ * \sa class CwiseUnaryOp, Cwise::log2()
403
+ */
404
+ template<typename Scalar> struct scalar_log2_op {
405
+ EIGEN_EMPTY_STRUCT_CTOR(scalar_log2_op)
406
+ EIGEN_DEVICE_FUNC inline const Scalar operator() (const Scalar& a) const { return Scalar(EIGEN_LOG2E) * numext::log(a); }
407
+ template <typename Packet>
408
+ EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& a) const { return internal::plog2(a); }
409
+ };
410
+ template<typename Scalar>
411
+ struct functor_traits<scalar_log2_op<Scalar> >
412
+ { enum { Cost = 5 * NumTraits<Scalar>::MulCost, PacketAccess = packet_traits<Scalar>::HasLog }; };
413
+
332
414
  /** \internal
333
415
  * \brief Template functor to compute the square root of a scalar
334
416
  * \sa class CwiseUnaryOp, Cwise::sqrt()
@@ -356,13 +438,25 @@ struct functor_traits<scalar_sqrt_op<Scalar> > {
356
438
  };
357
439
  };
358
440
 
441
+ // Boolean specialization to eliminate -Wimplicit-conversion-floating-point-to-bool warnings.
442
+ template<> struct scalar_sqrt_op<bool> {
443
+ EIGEN_EMPTY_STRUCT_CTOR(scalar_sqrt_op)
444
+ EIGEN_DEPRECATED EIGEN_DEVICE_FUNC inline bool operator() (const bool& a) const { return a; }
445
+ template <typename Packet>
446
+ EIGEN_DEPRECATED EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& a) const { return a; }
447
+ };
448
+ template <>
449
+ struct functor_traits<scalar_sqrt_op<bool> > {
450
+ enum { Cost = 1, PacketAccess = packet_traits<bool>::Vectorizable };
451
+ };
452
+
359
453
  /** \internal
360
454
  * \brief Template functor to compute the reciprocal square root of a scalar
361
455
  * \sa class CwiseUnaryOp, Cwise::rsqrt()
362
456
  */
363
457
  template<typename Scalar> struct scalar_rsqrt_op {
364
458
  EIGEN_EMPTY_STRUCT_CTOR(scalar_rsqrt_op)
365
- EIGEN_DEVICE_FUNC inline const Scalar operator() (const Scalar& a) const { return Scalar(1)/numext::sqrt(a); }
459
+ EIGEN_DEVICE_FUNC inline const Scalar operator() (const Scalar& a) const { return numext::rsqrt(a); }
366
460
  template <typename Packet>
367
461
  EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& a) const { return internal::prsqrt(a); }
368
462
  };
@@ -528,6 +622,23 @@ struct functor_traits<scalar_tanh_op<Scalar> > {
528
622
  };
529
623
  };
530
624
 
625
+ #if EIGEN_HAS_CXX11_MATH
626
+ /** \internal
627
+ * \brief Template functor to compute the atanh of a scalar
628
+ * \sa class CwiseUnaryOp, ArrayBase::atanh()
629
+ */
630
+ template <typename Scalar>
631
+ struct scalar_atanh_op {
632
+ EIGEN_EMPTY_STRUCT_CTOR(scalar_atanh_op)
633
+ EIGEN_DEVICE_FUNC inline const Scalar operator()(const Scalar& a) const { return numext::atanh(a); }
634
+ };
635
+
636
+ template <typename Scalar>
637
+ struct functor_traits<scalar_atanh_op<Scalar> > {
638
+ enum { Cost = 5 * NumTraits<Scalar>::MulCost, PacketAccess = false };
639
+ };
640
+ #endif
641
+
531
642
  /** \internal
532
643
  * \brief Template functor to compute the sinh of a scalar
533
644
  * \sa class CwiseUnaryOp, ArrayBase::sinh()
@@ -547,6 +658,23 @@ struct functor_traits<scalar_sinh_op<Scalar> >
547
658
  };
548
659
  };
549
660
 
661
+ #if EIGEN_HAS_CXX11_MATH
662
+ /** \internal
663
+ * \brief Template functor to compute the asinh of a scalar
664
+ * \sa class CwiseUnaryOp, ArrayBase::asinh()
665
+ */
666
+ template <typename Scalar>
667
+ struct scalar_asinh_op {
668
+ EIGEN_EMPTY_STRUCT_CTOR(scalar_asinh_op)
669
+ EIGEN_DEVICE_FUNC inline const Scalar operator()(const Scalar& a) const { return numext::asinh(a); }
670
+ };
671
+
672
+ template <typename Scalar>
673
+ struct functor_traits<scalar_asinh_op<Scalar> > {
674
+ enum { Cost = 5 * NumTraits<Scalar>::MulCost, PacketAccess = false };
675
+ };
676
+ #endif
677
+
550
678
  /** \internal
551
679
  * \brief Template functor to compute the cosh of a scalar
552
680
  * \sa class CwiseUnaryOp, ArrayBase::cosh()
@@ -566,6 +694,23 @@ struct functor_traits<scalar_cosh_op<Scalar> >
566
694
  };
567
695
  };
568
696
 
697
+ #if EIGEN_HAS_CXX11_MATH
698
+ /** \internal
699
+ * \brief Template functor to compute the acosh of a scalar
700
+ * \sa class CwiseUnaryOp, ArrayBase::acosh()
701
+ */
702
+ template <typename Scalar>
703
+ struct scalar_acosh_op {
704
+ EIGEN_EMPTY_STRUCT_CTOR(scalar_acosh_op)
705
+ EIGEN_DEVICE_FUNC inline const Scalar operator()(const Scalar& a) const { return numext::acosh(a); }
706
+ };
707
+
708
+ template <typename Scalar>
709
+ struct functor_traits<scalar_acosh_op<Scalar> > {
710
+ enum { Cost = 5 * NumTraits<Scalar>::MulCost, PacketAccess = false };
711
+ };
712
+ #endif
713
+
569
714
  /** \internal
570
715
  * \brief Template functor to compute the inverse of a scalar
571
716
  * \sa class CwiseUnaryOp, Cwise::inverse()
@@ -578,9 +723,13 @@ struct scalar_inverse_op {
578
723
  EIGEN_DEVICE_FUNC inline const Packet packetOp(const Packet& a) const
579
724
  { return internal::pdiv(pset1<Packet>(Scalar(1)),a); }
580
725
  };
581
- template<typename Scalar>
582
- struct functor_traits<scalar_inverse_op<Scalar> >
583
- { enum { Cost = NumTraits<Scalar>::MulCost, PacketAccess = packet_traits<Scalar>::HasDiv }; };
726
+ template <typename Scalar>
727
+ struct functor_traits<scalar_inverse_op<Scalar> > {
728
+ enum {
729
+ PacketAccess = packet_traits<Scalar>::HasDiv,
730
+ Cost = scalar_div_cost<Scalar, PacketAccess>::value
731
+ };
732
+ };
584
733
 
585
734
  /** \internal
586
735
  * \brief Template functor to compute the square of a scalar
@@ -598,6 +747,19 @@ template<typename Scalar>
598
747
  struct functor_traits<scalar_square_op<Scalar> >
599
748
  { enum { Cost = NumTraits<Scalar>::MulCost, PacketAccess = packet_traits<Scalar>::HasMul }; };
600
749
 
750
+ // Boolean specialization to avoid -Wint-in-bool-context warnings on GCC.
751
+ template<>
752
+ struct scalar_square_op<bool> {
753
+ EIGEN_EMPTY_STRUCT_CTOR(scalar_square_op)
754
+ EIGEN_DEPRECATED EIGEN_DEVICE_FUNC inline bool operator() (const bool& a) const { return a; }
755
+ template<typename Packet>
756
+ EIGEN_DEPRECATED EIGEN_DEVICE_FUNC inline const Packet packetOp(const Packet& a) const
757
+ { return a; }
758
+ };
759
+ template<>
760
+ struct functor_traits<scalar_square_op<bool> >
761
+ { enum { Cost = 0, PacketAccess = packet_traits<bool>::Vectorizable }; };
762
+
601
763
  /** \internal
602
764
  * \brief Template functor to compute the cube of a scalar
603
765
  * \sa class CwiseUnaryOp, Cwise::cube()
@@ -614,6 +776,19 @@ template<typename Scalar>
614
776
  struct functor_traits<scalar_cube_op<Scalar> >
615
777
  { enum { Cost = 2*NumTraits<Scalar>::MulCost, PacketAccess = packet_traits<Scalar>::HasMul }; };
616
778
 
779
+ // Boolean specialization to avoid -Wint-in-bool-context warnings on GCC.
780
+ template<>
781
+ struct scalar_cube_op<bool> {
782
+ EIGEN_EMPTY_STRUCT_CTOR(scalar_cube_op)
783
+ EIGEN_DEPRECATED EIGEN_DEVICE_FUNC inline bool operator() (const bool& a) const { return a; }
784
+ template<typename Packet>
785
+ EIGEN_DEPRECATED EIGEN_DEVICE_FUNC inline const Packet packetOp(const Packet& a) const
786
+ { return a; }
787
+ };
788
+ template<>
789
+ struct functor_traits<scalar_cube_op<bool> >
790
+ { enum { Cost = 0, PacketAccess = packet_traits<bool>::Vectorizable }; };
791
+
617
792
  /** \internal
618
793
  * \brief Template functor to compute the rounded value of a scalar
619
794
  * \sa class CwiseUnaryOp, ArrayBase::round()
@@ -652,6 +827,25 @@ struct functor_traits<scalar_floor_op<Scalar> >
652
827
  };
653
828
  };
654
829
 
830
+ /** \internal
831
+ * \brief Template functor to compute the rounded (with current rounding mode) value of a scalar
832
+ * \sa class CwiseUnaryOp, ArrayBase::rint()
833
+ */
834
+ template<typename Scalar> struct scalar_rint_op {
835
+ EIGEN_EMPTY_STRUCT_CTOR(scalar_rint_op)
836
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Scalar operator() (const Scalar& a) const { return numext::rint(a); }
837
+ template <typename Packet>
838
+ EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& a) const { return internal::print(a); }
839
+ };
840
+ template<typename Scalar>
841
+ struct functor_traits<scalar_rint_op<Scalar> >
842
+ {
843
+ enum {
844
+ Cost = NumTraits<Scalar>::MulCost,
845
+ PacketAccess = packet_traits<Scalar>::HasRint
846
+ };
847
+ };
848
+
655
849
  /** \internal
656
850
  * \brief Template functor to compute the ceil of a scalar
657
851
  * \sa class CwiseUnaryOp, ArrayBase::ceil()
@@ -678,7 +872,13 @@ struct functor_traits<scalar_ceil_op<Scalar> >
678
872
  template<typename Scalar> struct scalar_isnan_op {
679
873
  EIGEN_EMPTY_STRUCT_CTOR(scalar_isnan_op)
680
874
  typedef bool result_type;
681
- EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE result_type operator() (const Scalar& a) const { return (numext::isnan)(a); }
875
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE result_type operator() (const Scalar& a) const {
876
+ #if defined(SYCL_DEVICE_ONLY)
877
+ return numext::isnan(a);
878
+ #else
879
+ return (numext::isnan)(a);
880
+ #endif
881
+ }
682
882
  };
683
883
  template<typename Scalar>
684
884
  struct functor_traits<scalar_isnan_op<Scalar> >
@@ -696,7 +896,13 @@ struct functor_traits<scalar_isnan_op<Scalar> >
696
896
  template<typename Scalar> struct scalar_isinf_op {
697
897
  EIGEN_EMPTY_STRUCT_CTOR(scalar_isinf_op)
698
898
  typedef bool result_type;
699
- EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE result_type operator() (const Scalar& a) const { return (numext::isinf)(a); }
899
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE result_type operator() (const Scalar& a) const {
900
+ #if defined(SYCL_DEVICE_ONLY)
901
+ return numext::isinf(a);
902
+ #else
903
+ return (numext::isinf)(a);
904
+ #endif
905
+ }
700
906
  };
701
907
  template<typename Scalar>
702
908
  struct functor_traits<scalar_isinf_op<Scalar> >
@@ -714,7 +920,13 @@ struct functor_traits<scalar_isinf_op<Scalar> >
714
920
  template<typename Scalar> struct scalar_isfinite_op {
715
921
  EIGEN_EMPTY_STRUCT_CTOR(scalar_isfinite_op)
716
922
  typedef bool result_type;
717
- EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE result_type operator() (const Scalar& a) const { return (numext::isfinite)(a); }
923
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE result_type operator() (const Scalar& a) const {
924
+ #if defined(SYCL_DEVICE_ONLY)
925
+ return numext::isfinite(a);
926
+ #else
927
+ return (numext::isfinite)(a);
928
+ #endif
929
+ }
718
930
  };
719
931
  template<typename Scalar>
720
932
  struct functor_traits<scalar_isfinite_op<Scalar> >
@@ -746,9 +958,9 @@ struct functor_traits<scalar_boolean_not_op<Scalar> > {
746
958
  * \brief Template functor to compute the signum of a scalar
747
959
  * \sa class CwiseUnaryOp, Cwise::sign()
748
960
  */
749
- template<typename Scalar,bool iscpx=(NumTraits<Scalar>::IsComplex!=0) > struct scalar_sign_op;
961
+ template<typename Scalar,bool is_complex=(NumTraits<Scalar>::IsComplex!=0), bool is_integer=(NumTraits<Scalar>::IsInteger!=0) > struct scalar_sign_op;
750
962
  template<typename Scalar>
751
- struct scalar_sign_op<Scalar,false> {
963
+ struct scalar_sign_op<Scalar, false, true> {
752
964
  EIGEN_EMPTY_STRUCT_CTOR(scalar_sign_op)
753
965
  EIGEN_DEVICE_FUNC inline const Scalar operator() (const Scalar& a) const
754
966
  {
@@ -758,8 +970,21 @@ struct scalar_sign_op<Scalar,false> {
758
970
  //template <typename Packet>
759
971
  //EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& a) const { return internal::psign(a); }
760
972
  };
973
+
761
974
  template<typename Scalar>
762
- struct scalar_sign_op<Scalar,true> {
975
+ struct scalar_sign_op<Scalar, false, false> {
976
+ EIGEN_EMPTY_STRUCT_CTOR(scalar_sign_op)
977
+ EIGEN_DEVICE_FUNC inline const Scalar operator() (const Scalar& a) const
978
+ {
979
+ return (numext::isnan)(a) ? a : Scalar( (a>Scalar(0)) - (a<Scalar(0)) );
980
+ }
981
+ //TODO
982
+ //template <typename Packet>
983
+ //EIGEN_DEVICE_FUNC inline Packet packetOp(const Packet& a) const { return internal::psign(a); }
984
+ };
985
+
986
+ template<typename Scalar, bool is_integer>
987
+ struct scalar_sign_op<Scalar,true, is_integer> {
763
988
  EIGEN_EMPTY_STRUCT_CTOR(scalar_sign_op)
764
989
  EIGEN_DEVICE_FUNC inline const Scalar operator() (const Scalar& a) const
765
990
  {
@@ -777,7 +1002,7 @@ struct scalar_sign_op<Scalar,true> {
777
1002
  template<typename Scalar>
778
1003
  struct functor_traits<scalar_sign_op<Scalar> >
779
1004
  { enum {
780
- Cost =
1005
+ Cost =
781
1006
  NumTraits<Scalar>::IsComplex
782
1007
  ? ( 8*NumTraits<Scalar>::MulCost ) // roughly
783
1008
  : ( 3*NumTraits<Scalar>::AddCost),
@@ -785,6 +1010,120 @@ struct functor_traits<scalar_sign_op<Scalar> >
785
1010
  };
786
1011
  };
787
1012
 
1013
+ /** \internal
1014
+ * \brief Template functor to compute the logistic function of a scalar
1015
+ * \sa class CwiseUnaryOp, ArrayBase::logistic()
1016
+ */
1017
+ template <typename T>
1018
+ struct scalar_logistic_op {
1019
+ EIGEN_EMPTY_STRUCT_CTOR(scalar_logistic_op)
1020
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE T operator()(const T& x) const {
1021
+ return packetOp(x);
1022
+ }
1023
+
1024
+ template <typename Packet> EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
1025
+ Packet packetOp(const Packet& x) const {
1026
+ const Packet one = pset1<Packet>(T(1));
1027
+ return pdiv(one, padd(one, pexp(pnegate(x))));
1028
+ }
1029
+ };
1030
+
1031
+ #ifndef EIGEN_GPU_COMPILE_PHASE
1032
+ /** \internal
1033
+ * \brief Template specialization of the logistic function for float.
1034
+ *
1035
+ * Uses just a 9/10-degree rational interpolant which
1036
+ * interpolates 1/(1+exp(-x)) - 0.5 up to a couple of ulps in the range
1037
+ * [-9, 18]. Below -9 we use the more accurate approximation
1038
+ * 1/(1+exp(-x)) ~= exp(x), and above 18 the logistic function is 1 withing
1039
+ * one ulp. The shifted logistic is interpolated because it was easier to
1040
+ * make the fit converge.
1041
+ *
1042
+ */
1043
+ template <>
1044
+ struct scalar_logistic_op<float> {
1045
+ EIGEN_EMPTY_STRUCT_CTOR(scalar_logistic_op)
1046
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE float operator()(const float& x) const {
1047
+ return packetOp(x);
1048
+ }
1049
+
1050
+ template <typename Packet> EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
1051
+ Packet packetOp(const Packet& _x) const {
1052
+ const Packet cutoff_lower = pset1<Packet>(-9.f);
1053
+ const Packet lt_mask = pcmp_lt<Packet>(_x, cutoff_lower);
1054
+ const bool any_small = predux_any(lt_mask);
1055
+
1056
+ // The upper cut-off is the smallest x for which the rational approximation evaluates to 1.
1057
+ // Choosing this value saves us a few instructions clamping the results at the end.
1058
+ #ifdef EIGEN_VECTORIZE_FMA
1059
+ const Packet cutoff_upper = pset1<Packet>(15.7243833541870117f);
1060
+ #else
1061
+ const Packet cutoff_upper = pset1<Packet>(15.6437711715698242f);
1062
+ #endif
1063
+ const Packet x = pmin(_x, cutoff_upper);
1064
+
1065
+ // The monomial coefficients of the numerator polynomial (odd).
1066
+ const Packet alpha_1 = pset1<Packet>(2.48287947061529e-01f);
1067
+ const Packet alpha_3 = pset1<Packet>(8.51377133304701e-03f);
1068
+ const Packet alpha_5 = pset1<Packet>(6.08574864600143e-05f);
1069
+ const Packet alpha_7 = pset1<Packet>(1.15627324459942e-07f);
1070
+ const Packet alpha_9 = pset1<Packet>(4.37031012579801e-11f);
1071
+
1072
+ // The monomial coefficients of the denominator polynomial (even).
1073
+ const Packet beta_0 = pset1<Packet>(9.93151921023180e-01f);
1074
+ const Packet beta_2 = pset1<Packet>(1.16817656904453e-01f);
1075
+ const Packet beta_4 = pset1<Packet>(1.70198817374094e-03f);
1076
+ const Packet beta_6 = pset1<Packet>(6.29106785017040e-06f);
1077
+ const Packet beta_8 = pset1<Packet>(5.76102136993427e-09f);
1078
+ const Packet beta_10 = pset1<Packet>(6.10247389755681e-13f);
1079
+
1080
+ // Since the polynomials are odd/even, we need x^2.
1081
+ const Packet x2 = pmul(x, x);
1082
+
1083
+ // Evaluate the numerator polynomial p.
1084
+ Packet p = pmadd(x2, alpha_9, alpha_7);
1085
+ p = pmadd(x2, p, alpha_5);
1086
+ p = pmadd(x2, p, alpha_3);
1087
+ p = pmadd(x2, p, alpha_1);
1088
+ p = pmul(x, p);
1089
+
1090
+ // Evaluate the denominator polynomial q.
1091
+ Packet q = pmadd(x2, beta_10, beta_8);
1092
+ q = pmadd(x2, q, beta_6);
1093
+ q = pmadd(x2, q, beta_4);
1094
+ q = pmadd(x2, q, beta_2);
1095
+ q = pmadd(x2, q, beta_0);
1096
+ // Divide the numerator by the denominator and shift it up.
1097
+ const Packet logistic = padd(pdiv(p, q), pset1<Packet>(0.5f));
1098
+ if (EIGEN_PREDICT_FALSE(any_small)) {
1099
+ const Packet exponential = pexp(_x);
1100
+ return pselect(lt_mask, exponential, logistic);
1101
+ } else {
1102
+ return logistic;
1103
+ }
1104
+ }
1105
+ };
1106
+ #endif // #ifndef EIGEN_GPU_COMPILE_PHASE
1107
+
1108
+ template <typename T>
1109
+ struct functor_traits<scalar_logistic_op<T> > {
1110
+ enum {
1111
+ // The cost estimate for float here here is for the common(?) case where
1112
+ // all arguments are greater than -9.
1113
+ Cost = scalar_div_cost<T, packet_traits<T>::HasDiv>::value +
1114
+ (internal::is_same<T, float>::value
1115
+ ? NumTraits<T>::AddCost * 15 + NumTraits<T>::MulCost * 11
1116
+ : NumTraits<T>::AddCost * 2 +
1117
+ functor_traits<scalar_exp_op<T> >::Cost),
1118
+ PacketAccess =
1119
+ packet_traits<T>::HasAdd && packet_traits<T>::HasDiv &&
1120
+ (internal::is_same<T, float>::value
1121
+ ? packet_traits<T>::HasMul && packet_traits<T>::HasMax &&
1122
+ packet_traits<T>::HasMin
1123
+ : packet_traits<T>::HasNegate && packet_traits<T>::HasExp)
1124
+ };
1125
+ };
1126
+
788
1127
  } // end namespace internal
789
1128
 
790
1129
  } // end namespace Eigen