@smake/eigen 1.0.2 → 1.1.1

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 (435) hide show
  1. package/README.md +1 -1
  2. package/eigen/Eigen/AccelerateSupport +52 -0
  3. package/eigen/Eigen/Cholesky +18 -21
  4. package/eigen/Eigen/CholmodSupport +28 -28
  5. package/eigen/Eigen/Core +235 -326
  6. package/eigen/Eigen/Eigenvalues +16 -14
  7. package/eigen/Eigen/Geometry +21 -24
  8. package/eigen/Eigen/Householder +9 -8
  9. package/eigen/Eigen/IterativeLinearSolvers +8 -4
  10. package/eigen/Eigen/Jacobi +14 -14
  11. package/eigen/Eigen/KLUSupport +43 -0
  12. package/eigen/Eigen/LU +16 -20
  13. package/eigen/Eigen/MetisSupport +12 -12
  14. package/eigen/Eigen/OrderingMethods +54 -54
  15. package/eigen/Eigen/PaStiXSupport +23 -20
  16. package/eigen/Eigen/PardisoSupport +17 -14
  17. package/eigen/Eigen/QR +18 -21
  18. package/eigen/Eigen/QtAlignedMalloc +5 -13
  19. package/eigen/Eigen/SPQRSupport +21 -14
  20. package/eigen/Eigen/SVD +23 -18
  21. package/eigen/Eigen/Sparse +1 -4
  22. package/eigen/Eigen/SparseCholesky +18 -23
  23. package/eigen/Eigen/SparseCore +18 -17
  24. package/eigen/Eigen/SparseLU +12 -8
  25. package/eigen/Eigen/SparseQR +16 -14
  26. package/eigen/Eigen/StdDeque +5 -2
  27. package/eigen/Eigen/StdList +5 -2
  28. package/eigen/Eigen/StdVector +5 -2
  29. package/eigen/Eigen/SuperLUSupport +30 -24
  30. package/eigen/Eigen/ThreadPool +80 -0
  31. package/eigen/Eigen/UmfPackSupport +19 -17
  32. package/eigen/Eigen/Version +14 -0
  33. package/eigen/Eigen/src/AccelerateSupport/AccelerateSupport.h +423 -0
  34. package/eigen/Eigen/src/AccelerateSupport/InternalHeaderCheck.h +3 -0
  35. package/eigen/Eigen/src/Cholesky/InternalHeaderCheck.h +3 -0
  36. package/eigen/Eigen/src/Cholesky/LDLT.h +377 -401
  37. package/eigen/Eigen/src/Cholesky/LLT.h +332 -360
  38. package/eigen/Eigen/src/Cholesky/LLT_LAPACKE.h +81 -56
  39. package/eigen/Eigen/src/CholmodSupport/CholmodSupport.h +620 -521
  40. package/eigen/Eigen/src/CholmodSupport/InternalHeaderCheck.h +3 -0
  41. package/eigen/Eigen/src/Core/ArithmeticSequence.h +239 -0
  42. package/eigen/Eigen/src/Core/Array.h +341 -294
  43. package/eigen/Eigen/src/Core/ArrayBase.h +190 -203
  44. package/eigen/Eigen/src/Core/ArrayWrapper.h +127 -171
  45. package/eigen/Eigen/src/Core/Assign.h +30 -40
  46. package/eigen/Eigen/src/Core/AssignEvaluator.h +711 -589
  47. package/eigen/Eigen/src/Core/Assign_MKL.h +130 -125
  48. package/eigen/Eigen/src/Core/BandMatrix.h +268 -283
  49. package/eigen/Eigen/src/Core/Block.h +375 -398
  50. package/eigen/Eigen/src/Core/CommaInitializer.h +86 -97
  51. package/eigen/Eigen/src/Core/ConditionEstimator.h +51 -53
  52. package/eigen/Eigen/src/Core/CoreEvaluators.h +1356 -1026
  53. package/eigen/Eigen/src/Core/CoreIterators.h +73 -59
  54. package/eigen/Eigen/src/Core/CwiseBinaryOp.h +114 -132
  55. package/eigen/Eigen/src/Core/CwiseNullaryOp.h +726 -617
  56. package/eigen/Eigen/src/Core/CwiseTernaryOp.h +77 -103
  57. package/eigen/Eigen/src/Core/CwiseUnaryOp.h +56 -68
  58. package/eigen/Eigen/src/Core/CwiseUnaryView.h +132 -95
  59. package/eigen/Eigen/src/Core/DenseBase.h +632 -571
  60. package/eigen/Eigen/src/Core/DenseCoeffsBase.h +511 -624
  61. package/eigen/Eigen/src/Core/DenseStorage.h +512 -509
  62. package/eigen/Eigen/src/Core/DeviceWrapper.h +153 -0
  63. package/eigen/Eigen/src/Core/Diagonal.h +169 -210
  64. package/eigen/Eigen/src/Core/DiagonalMatrix.h +351 -274
  65. package/eigen/Eigen/src/Core/DiagonalProduct.h +12 -10
  66. package/eigen/Eigen/src/Core/Dot.h +172 -222
  67. package/eigen/Eigen/src/Core/EigenBase.h +75 -85
  68. package/eigen/Eigen/src/Core/Fill.h +138 -0
  69. package/eigen/Eigen/src/Core/FindCoeff.h +464 -0
  70. package/eigen/Eigen/src/Core/ForceAlignedAccess.h +90 -109
  71. package/eigen/Eigen/src/Core/Fuzzy.h +82 -105
  72. package/eigen/Eigen/src/Core/GeneralProduct.h +327 -263
  73. package/eigen/Eigen/src/Core/GenericPacketMath.h +1472 -360
  74. package/eigen/Eigen/src/Core/GlobalFunctions.h +194 -151
  75. package/eigen/Eigen/src/Core/IO.h +147 -139
  76. package/eigen/Eigen/src/Core/IndexedView.h +321 -0
  77. package/eigen/Eigen/src/Core/InnerProduct.h +260 -0
  78. package/eigen/Eigen/src/Core/InternalHeaderCheck.h +3 -0
  79. package/eigen/Eigen/src/Core/Inverse.h +56 -66
  80. package/eigen/Eigen/src/Core/Map.h +124 -142
  81. package/eigen/Eigen/src/Core/MapBase.h +256 -281
  82. package/eigen/Eigen/src/Core/MathFunctions.h +1620 -938
  83. package/eigen/Eigen/src/Core/MathFunctionsImpl.h +233 -71
  84. package/eigen/Eigen/src/Core/Matrix.h +491 -416
  85. package/eigen/Eigen/src/Core/MatrixBase.h +468 -453
  86. package/eigen/Eigen/src/Core/NestByValue.h +66 -85
  87. package/eigen/Eigen/src/Core/NoAlias.h +79 -85
  88. package/eigen/Eigen/src/Core/NumTraits.h +235 -148
  89. package/eigen/Eigen/src/Core/PartialReduxEvaluator.h +253 -0
  90. package/eigen/Eigen/src/Core/PermutationMatrix.h +461 -511
  91. package/eigen/Eigen/src/Core/PlainObjectBase.h +871 -894
  92. package/eigen/Eigen/src/Core/Product.h +260 -139
  93. package/eigen/Eigen/src/Core/ProductEvaluators.h +863 -714
  94. package/eigen/Eigen/src/Core/Random.h +161 -136
  95. package/eigen/Eigen/src/Core/RandomImpl.h +262 -0
  96. package/eigen/Eigen/src/Core/RealView.h +250 -0
  97. package/eigen/Eigen/src/Core/Redux.h +366 -336
  98. package/eigen/Eigen/src/Core/Ref.h +308 -209
  99. package/eigen/Eigen/src/Core/Replicate.h +94 -106
  100. package/eigen/Eigen/src/Core/Reshaped.h +398 -0
  101. package/eigen/Eigen/src/Core/ReturnByValue.h +49 -55
  102. package/eigen/Eigen/src/Core/Reverse.h +136 -145
  103. package/eigen/Eigen/src/Core/Select.h +70 -140
  104. package/eigen/Eigen/src/Core/SelfAdjointView.h +262 -285
  105. package/eigen/Eigen/src/Core/SelfCwiseBinaryOp.h +23 -20
  106. package/eigen/Eigen/src/Core/SkewSymmetricMatrix3.h +382 -0
  107. package/eigen/Eigen/src/Core/Solve.h +97 -111
  108. package/eigen/Eigen/src/Core/SolveTriangular.h +131 -129
  109. package/eigen/Eigen/src/Core/SolverBase.h +138 -101
  110. package/eigen/Eigen/src/Core/StableNorm.h +156 -160
  111. package/eigen/Eigen/src/Core/StlIterators.h +619 -0
  112. package/eigen/Eigen/src/Core/Stride.h +91 -88
  113. package/eigen/Eigen/src/Core/Swap.h +70 -38
  114. package/eigen/Eigen/src/Core/Transpose.h +295 -273
  115. package/eigen/Eigen/src/Core/Transpositions.h +272 -317
  116. package/eigen/Eigen/src/Core/TriangularMatrix.h +670 -755
  117. package/eigen/Eigen/src/Core/VectorBlock.h +59 -72
  118. package/eigen/Eigen/src/Core/VectorwiseOp.h +668 -630
  119. package/eigen/Eigen/src/Core/Visitor.h +480 -216
  120. package/eigen/Eigen/src/Core/arch/AVX/Complex.h +407 -293
  121. package/eigen/Eigen/src/Core/arch/AVX/MathFunctions.h +79 -388
  122. package/eigen/Eigen/src/Core/arch/AVX/PacketMath.h +2935 -491
  123. package/eigen/Eigen/src/Core/arch/AVX/Reductions.h +353 -0
  124. package/eigen/Eigen/src/Core/arch/AVX/TypeCasting.h +279 -22
  125. package/eigen/Eigen/src/Core/arch/AVX512/Complex.h +472 -0
  126. package/eigen/Eigen/src/Core/arch/AVX512/GemmKernel.h +1245 -0
  127. package/eigen/Eigen/src/Core/arch/AVX512/MathFunctions.h +85 -333
  128. package/eigen/Eigen/src/Core/arch/AVX512/MathFunctionsFP16.h +75 -0
  129. package/eigen/Eigen/src/Core/arch/AVX512/PacketMath.h +2490 -649
  130. package/eigen/Eigen/src/Core/arch/AVX512/PacketMathFP16.h +1413 -0
  131. package/eigen/Eigen/src/Core/arch/AVX512/Reductions.h +297 -0
  132. package/eigen/Eigen/src/Core/arch/AVX512/TrsmKernel.h +1167 -0
  133. package/eigen/Eigen/src/Core/arch/AVX512/TrsmUnrolls.inc +1219 -0
  134. package/eigen/Eigen/src/Core/arch/AVX512/TypeCasting.h +277 -0
  135. package/eigen/Eigen/src/Core/arch/AVX512/TypeCastingFP16.h +130 -0
  136. package/eigen/Eigen/src/Core/arch/AltiVec/Complex.h +521 -298
  137. package/eigen/Eigen/src/Core/arch/AltiVec/MathFunctions.h +39 -280
  138. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProduct.h +3686 -0
  139. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h +205 -0
  140. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h +901 -0
  141. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMAbfloat16.h +742 -0
  142. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixVectorProduct.inc +2818 -0
  143. package/eigen/Eigen/src/Core/arch/AltiVec/PacketMath.h +3391 -723
  144. package/eigen/Eigen/src/Core/arch/AltiVec/TypeCasting.h +153 -0
  145. package/eigen/Eigen/src/Core/arch/Default/BFloat16.h +866 -0
  146. package/eigen/Eigen/src/Core/arch/Default/ConjHelper.h +113 -14
  147. package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h +2634 -0
  148. package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h +227 -0
  149. package/eigen/Eigen/src/Core/arch/Default/Half.h +1091 -0
  150. package/eigen/Eigen/src/Core/arch/Default/Settings.h +11 -13
  151. package/eigen/Eigen/src/Core/arch/GPU/Complex.h +244 -0
  152. package/eigen/Eigen/src/Core/arch/GPU/MathFunctions.h +104 -0
  153. package/eigen/Eigen/src/Core/arch/GPU/PacketMath.h +1712 -0
  154. package/eigen/Eigen/src/Core/arch/GPU/Tuple.h +268 -0
  155. package/eigen/Eigen/src/Core/arch/GPU/TypeCasting.h +77 -0
  156. package/eigen/Eigen/src/Core/arch/HIP/hcc/math_constants.h +23 -0
  157. package/eigen/Eigen/src/Core/arch/HVX/PacketMath.h +1088 -0
  158. package/eigen/Eigen/src/Core/arch/LSX/Complex.h +520 -0
  159. package/eigen/Eigen/src/Core/arch/LSX/GeneralBlockPanelKernel.h +23 -0
  160. package/eigen/Eigen/src/Core/arch/LSX/MathFunctions.h +43 -0
  161. package/eigen/Eigen/src/Core/arch/LSX/PacketMath.h +2866 -0
  162. package/eigen/Eigen/src/Core/arch/LSX/TypeCasting.h +526 -0
  163. package/eigen/Eigen/src/Core/arch/MSA/Complex.h +620 -0
  164. package/eigen/Eigen/src/Core/arch/MSA/MathFunctions.h +379 -0
  165. package/eigen/Eigen/src/Core/arch/MSA/PacketMath.h +1237 -0
  166. package/eigen/Eigen/src/Core/arch/NEON/Complex.h +531 -289
  167. package/eigen/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h +243 -0
  168. package/eigen/Eigen/src/Core/arch/NEON/MathFunctions.h +50 -73
  169. package/eigen/Eigen/src/Core/arch/NEON/PacketMath.h +5915 -579
  170. package/eigen/Eigen/src/Core/arch/NEON/TypeCasting.h +1642 -0
  171. package/eigen/Eigen/src/Core/arch/NEON/UnaryFunctors.h +57 -0
  172. package/eigen/Eigen/src/Core/arch/SSE/Complex.h +366 -334
  173. package/eigen/Eigen/src/Core/arch/SSE/MathFunctions.h +40 -514
  174. package/eigen/Eigen/src/Core/arch/SSE/PacketMath.h +2164 -675
  175. package/eigen/Eigen/src/Core/arch/SSE/Reductions.h +324 -0
  176. package/eigen/Eigen/src/Core/arch/SSE/TypeCasting.h +188 -35
  177. package/eigen/Eigen/src/Core/arch/SVE/MathFunctions.h +48 -0
  178. package/eigen/Eigen/src/Core/arch/SVE/PacketMath.h +674 -0
  179. package/eigen/Eigen/src/Core/arch/SVE/TypeCasting.h +52 -0
  180. package/eigen/Eigen/src/Core/arch/SYCL/InteropHeaders.h +227 -0
  181. package/eigen/Eigen/src/Core/arch/SYCL/MathFunctions.h +303 -0
  182. package/eigen/Eigen/src/Core/arch/SYCL/PacketMath.h +576 -0
  183. package/eigen/Eigen/src/Core/arch/SYCL/TypeCasting.h +83 -0
  184. package/eigen/Eigen/src/Core/arch/ZVector/Complex.h +434 -261
  185. package/eigen/Eigen/src/Core/arch/ZVector/MathFunctions.h +160 -53
  186. package/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h +1073 -605
  187. package/eigen/Eigen/src/Core/functors/AssignmentFunctors.h +123 -117
  188. package/eigen/Eigen/src/Core/functors/BinaryFunctors.h +594 -322
  189. package/eigen/Eigen/src/Core/functors/NullaryFunctors.h +204 -118
  190. package/eigen/Eigen/src/Core/functors/StlFunctors.h +110 -97
  191. package/eigen/Eigen/src/Core/functors/TernaryFunctors.h +34 -7
  192. package/eigen/Eigen/src/Core/functors/UnaryFunctors.h +1158 -530
  193. package/eigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h +2329 -1333
  194. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix.h +328 -364
  195. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +191 -178
  196. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h +85 -82
  197. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h +154 -73
  198. package/eigen/Eigen/src/Core/products/GeneralMatrixVector.h +396 -542
  199. package/eigen/Eigen/src/Core/products/GeneralMatrixVector_BLAS.h +80 -77
  200. package/eigen/Eigen/src/Core/products/Parallelizer.h +208 -92
  201. package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +331 -375
  202. package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h +206 -224
  203. package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector.h +139 -146
  204. package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector_BLAS.h +58 -61
  205. package/eigen/Eigen/src/Core/products/SelfadjointProduct.h +71 -71
  206. package/eigen/Eigen/src/Core/products/SelfadjointRank2Update.h +48 -46
  207. package/eigen/Eigen/src/Core/products/TriangularMatrixMatrix.h +294 -369
  208. package/eigen/Eigen/src/Core/products/TriangularMatrixMatrix_BLAS.h +246 -238
  209. package/eigen/Eigen/src/Core/products/TriangularMatrixVector.h +244 -247
  210. package/eigen/Eigen/src/Core/products/TriangularMatrixVector_BLAS.h +212 -192
  211. package/eigen/Eigen/src/Core/products/TriangularSolverMatrix.h +328 -275
  212. package/eigen/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h +108 -109
  213. package/eigen/Eigen/src/Core/products/TriangularSolverVector.h +70 -93
  214. package/eigen/Eigen/src/Core/util/Assert.h +158 -0
  215. package/eigen/Eigen/src/Core/util/BlasUtil.h +413 -290
  216. package/eigen/Eigen/src/Core/util/ConfigureVectorization.h +543 -0
  217. package/eigen/Eigen/src/Core/util/Constants.h +314 -263
  218. package/eigen/Eigen/src/Core/util/DisableStupidWarnings.h +130 -78
  219. package/eigen/Eigen/src/Core/util/EmulateArray.h +270 -0
  220. package/eigen/Eigen/src/Core/util/ForwardDeclarations.h +450 -224
  221. package/eigen/Eigen/src/Core/util/GpuHipCudaDefines.inc +101 -0
  222. package/eigen/Eigen/src/Core/util/GpuHipCudaUndefines.inc +45 -0
  223. package/eigen/Eigen/src/Core/util/IndexedViewHelper.h +487 -0
  224. package/eigen/Eigen/src/Core/util/IntegralConstant.h +279 -0
  225. package/eigen/Eigen/src/Core/util/MKL_support.h +39 -30
  226. package/eigen/Eigen/src/Core/util/Macros.h +939 -646
  227. package/eigen/Eigen/src/Core/util/MaxSizeVector.h +139 -0
  228. package/eigen/Eigen/src/Core/util/Memory.h +1042 -650
  229. package/eigen/Eigen/src/Core/util/Meta.h +618 -426
  230. package/eigen/Eigen/src/Core/util/MoreMeta.h +638 -0
  231. package/eigen/Eigen/src/Core/util/ReenableStupidWarnings.h +32 -19
  232. package/eigen/Eigen/src/Core/util/ReshapedHelper.h +51 -0
  233. package/eigen/Eigen/src/Core/util/Serializer.h +209 -0
  234. package/eigen/Eigen/src/Core/util/StaticAssert.h +51 -164
  235. package/eigen/Eigen/src/Core/util/SymbolicIndex.h +445 -0
  236. package/eigen/Eigen/src/Core/util/XprHelper.h +793 -538
  237. package/eigen/Eigen/src/Eigenvalues/ComplexEigenSolver.h +246 -277
  238. package/eigen/Eigen/src/Eigenvalues/ComplexSchur.h +299 -319
  239. package/eigen/Eigen/src/Eigenvalues/ComplexSchur_LAPACKE.h +52 -48
  240. package/eigen/Eigen/src/Eigenvalues/EigenSolver.h +413 -456
  241. package/eigen/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h +309 -325
  242. package/eigen/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h +157 -171
  243. package/eigen/Eigen/src/Eigenvalues/HessenbergDecomposition.h +292 -310
  244. package/eigen/Eigen/src/Eigenvalues/InternalHeaderCheck.h +3 -0
  245. package/eigen/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h +91 -107
  246. package/eigen/Eigen/src/Eigenvalues/RealQZ.h +539 -606
  247. package/eigen/Eigen/src/Eigenvalues/RealSchur.h +348 -382
  248. package/eigen/Eigen/src/Eigenvalues/RealSchur_LAPACKE.h +41 -35
  249. package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +579 -600
  250. package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h +47 -44
  251. package/eigen/Eigen/src/Eigenvalues/Tridiagonalization.h +434 -461
  252. package/eigen/Eigen/src/Geometry/AlignedBox.h +307 -214
  253. package/eigen/Eigen/src/Geometry/AngleAxis.h +135 -137
  254. package/eigen/Eigen/src/Geometry/EulerAngles.h +163 -74
  255. package/eigen/Eigen/src/Geometry/Homogeneous.h +289 -333
  256. package/eigen/Eigen/src/Geometry/Hyperplane.h +152 -161
  257. package/eigen/Eigen/src/Geometry/InternalHeaderCheck.h +3 -0
  258. package/eigen/Eigen/src/Geometry/OrthoMethods.h +168 -145
  259. package/eigen/Eigen/src/Geometry/ParametrizedLine.h +141 -104
  260. package/eigen/Eigen/src/Geometry/Quaternion.h +595 -497
  261. package/eigen/Eigen/src/Geometry/Rotation2D.h +110 -108
  262. package/eigen/Eigen/src/Geometry/RotationBase.h +148 -145
  263. package/eigen/Eigen/src/Geometry/Scaling.h +115 -90
  264. package/eigen/Eigen/src/Geometry/Transform.h +896 -953
  265. package/eigen/Eigen/src/Geometry/Translation.h +100 -98
  266. package/eigen/Eigen/src/Geometry/Umeyama.h +79 -84
  267. package/eigen/Eigen/src/Geometry/arch/Geometry_SIMD.h +154 -0
  268. package/eigen/Eigen/src/Householder/BlockHouseholder.h +54 -42
  269. package/eigen/Eigen/src/Householder/Householder.h +104 -122
  270. package/eigen/Eigen/src/Householder/HouseholderSequence.h +416 -382
  271. package/eigen/Eigen/src/Householder/InternalHeaderCheck.h +3 -0
  272. package/eigen/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +153 -166
  273. package/eigen/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +127 -138
  274. package/eigen/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +95 -124
  275. package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +269 -267
  276. package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +246 -259
  277. package/eigen/Eigen/src/IterativeLinearSolvers/InternalHeaderCheck.h +3 -0
  278. package/eigen/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +218 -217
  279. package/eigen/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h +80 -103
  280. package/eigen/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h +59 -63
  281. package/eigen/Eigen/src/Jacobi/InternalHeaderCheck.h +3 -0
  282. package/eigen/Eigen/src/Jacobi/Jacobi.h +256 -291
  283. package/eigen/Eigen/src/KLUSupport/InternalHeaderCheck.h +3 -0
  284. package/eigen/Eigen/src/KLUSupport/KLUSupport.h +339 -0
  285. package/eigen/Eigen/src/LU/Determinant.h +60 -63
  286. package/eigen/Eigen/src/LU/FullPivLU.h +561 -626
  287. package/eigen/Eigen/src/LU/InternalHeaderCheck.h +3 -0
  288. package/eigen/Eigen/src/LU/InverseImpl.h +213 -275
  289. package/eigen/Eigen/src/LU/PartialPivLU.h +407 -435
  290. package/eigen/Eigen/src/LU/PartialPivLU_LAPACKE.h +54 -40
  291. package/eigen/Eigen/src/LU/arch/InverseSize4.h +353 -0
  292. package/eigen/Eigen/src/MetisSupport/InternalHeaderCheck.h +3 -0
  293. package/eigen/Eigen/src/MetisSupport/MetisSupport.h +81 -93
  294. package/eigen/Eigen/src/OrderingMethods/Amd.h +250 -282
  295. package/eigen/Eigen/src/OrderingMethods/Eigen_Colamd.h +950 -1103
  296. package/eigen/Eigen/src/OrderingMethods/InternalHeaderCheck.h +3 -0
  297. package/eigen/Eigen/src/OrderingMethods/Ordering.h +111 -122
  298. package/eigen/Eigen/src/PaStiXSupport/InternalHeaderCheck.h +3 -0
  299. package/eigen/Eigen/src/PaStiXSupport/PaStiXSupport.h +524 -570
  300. package/eigen/Eigen/src/PardisoSupport/InternalHeaderCheck.h +3 -0
  301. package/eigen/Eigen/src/PardisoSupport/PardisoSupport.h +385 -429
  302. package/eigen/Eigen/src/QR/ColPivHouseholderQR.h +494 -473
  303. package/eigen/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h +120 -56
  304. package/eigen/Eigen/src/QR/CompleteOrthogonalDecomposition.h +223 -137
  305. package/eigen/Eigen/src/QR/FullPivHouseholderQR.h +517 -460
  306. package/eigen/Eigen/src/QR/HouseholderQR.h +412 -278
  307. package/eigen/Eigen/src/QR/HouseholderQR_LAPACKE.h +32 -23
  308. package/eigen/Eigen/src/QR/InternalHeaderCheck.h +3 -0
  309. package/eigen/Eigen/src/SPQRSupport/InternalHeaderCheck.h +3 -0
  310. package/eigen/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h +263 -261
  311. package/eigen/Eigen/src/SVD/BDCSVD.h +872 -679
  312. package/eigen/Eigen/src/SVD/BDCSVD_LAPACKE.h +174 -0
  313. package/eigen/Eigen/src/SVD/InternalHeaderCheck.h +3 -0
  314. package/eigen/Eigen/src/SVD/JacobiSVD.h +585 -543
  315. package/eigen/Eigen/src/SVD/JacobiSVD_LAPACKE.h +85 -49
  316. package/eigen/Eigen/src/SVD/SVDBase.h +281 -160
  317. package/eigen/Eigen/src/SVD/UpperBidiagonalization.h +202 -237
  318. package/eigen/Eigen/src/SparseCholesky/InternalHeaderCheck.h +3 -0
  319. package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky.h +769 -590
  320. package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +318 -129
  321. package/eigen/Eigen/src/SparseCore/AmbiVector.h +202 -251
  322. package/eigen/Eigen/src/SparseCore/CompressedStorage.h +184 -236
  323. package/eigen/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +140 -184
  324. package/eigen/Eigen/src/SparseCore/InternalHeaderCheck.h +3 -0
  325. package/eigen/Eigen/src/SparseCore/SparseAssign.h +174 -111
  326. package/eigen/Eigen/src/SparseCore/SparseBlock.h +408 -477
  327. package/eigen/Eigen/src/SparseCore/SparseColEtree.h +100 -112
  328. package/eigen/Eigen/src/SparseCore/SparseCompressedBase.h +531 -280
  329. package/eigen/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +559 -347
  330. package/eigen/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +100 -108
  331. package/eigen/Eigen/src/SparseCore/SparseDenseProduct.h +185 -191
  332. package/eigen/Eigen/src/SparseCore/SparseDiagonalProduct.h +71 -71
  333. package/eigen/Eigen/src/SparseCore/SparseDot.h +49 -47
  334. package/eigen/Eigen/src/SparseCore/SparseFuzzy.h +13 -11
  335. package/eigen/Eigen/src/SparseCore/SparseMap.h +243 -253
  336. package/eigen/Eigen/src/SparseCore/SparseMatrix.h +1614 -1142
  337. package/eigen/Eigen/src/SparseCore/SparseMatrixBase.h +403 -357
  338. package/eigen/Eigen/src/SparseCore/SparsePermutation.h +186 -115
  339. package/eigen/Eigen/src/SparseCore/SparseProduct.h +100 -91
  340. package/eigen/Eigen/src/SparseCore/SparseRedux.h +22 -24
  341. package/eigen/Eigen/src/SparseCore/SparseRef.h +268 -295
  342. package/eigen/Eigen/src/SparseCore/SparseSelfAdjointView.h +371 -414
  343. package/eigen/Eigen/src/SparseCore/SparseSolverBase.h +78 -87
  344. package/eigen/Eigen/src/SparseCore/SparseSparseProductWithPruning.h +81 -95
  345. package/eigen/Eigen/src/SparseCore/SparseTranspose.h +62 -71
  346. package/eigen/Eigen/src/SparseCore/SparseTriangularView.h +132 -144
  347. package/eigen/Eigen/src/SparseCore/SparseUtil.h +146 -115
  348. package/eigen/Eigen/src/SparseCore/SparseVector.h +426 -372
  349. package/eigen/Eigen/src/SparseCore/SparseView.h +164 -193
  350. package/eigen/Eigen/src/SparseCore/TriangularSolver.h +129 -170
  351. package/eigen/Eigen/src/SparseLU/InternalHeaderCheck.h +3 -0
  352. package/eigen/Eigen/src/SparseLU/SparseLU.h +814 -618
  353. package/eigen/Eigen/src/SparseLU/SparseLUImpl.h +61 -48
  354. package/eigen/Eigen/src/SparseLU/SparseLU_Memory.h +102 -118
  355. package/eigen/Eigen/src/SparseLU/SparseLU_Structs.h +38 -35
  356. package/eigen/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h +273 -255
  357. package/eigen/Eigen/src/SparseLU/SparseLU_Utils.h +44 -49
  358. package/eigen/Eigen/src/SparseLU/SparseLU_column_bmod.h +104 -108
  359. package/eigen/Eigen/src/SparseLU/SparseLU_column_dfs.h +90 -101
  360. package/eigen/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h +57 -58
  361. package/eigen/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h +43 -55
  362. package/eigen/Eigen/src/SparseLU/SparseLU_kernel_bmod.h +74 -71
  363. package/eigen/Eigen/src/SparseLU/SparseLU_panel_bmod.h +125 -133
  364. package/eigen/Eigen/src/SparseLU/SparseLU_panel_dfs.h +136 -159
  365. package/eigen/Eigen/src/SparseLU/SparseLU_pivotL.h +51 -52
  366. package/eigen/Eigen/src/SparseLU/SparseLU_pruneL.h +67 -73
  367. package/eigen/Eigen/src/SparseLU/SparseLU_relax_snode.h +24 -26
  368. package/eigen/Eigen/src/SparseQR/InternalHeaderCheck.h +3 -0
  369. package/eigen/Eigen/src/SparseQR/SparseQR.h +451 -490
  370. package/eigen/Eigen/src/StlSupport/StdDeque.h +28 -105
  371. package/eigen/Eigen/src/StlSupport/StdList.h +28 -84
  372. package/eigen/Eigen/src/StlSupport/StdVector.h +28 -108
  373. package/eigen/Eigen/src/StlSupport/details.h +48 -50
  374. package/eigen/Eigen/src/SuperLUSupport/InternalHeaderCheck.h +3 -0
  375. package/eigen/Eigen/src/SuperLUSupport/SuperLUSupport.h +634 -732
  376. package/eigen/Eigen/src/ThreadPool/Barrier.h +70 -0
  377. package/eigen/Eigen/src/ThreadPool/CoreThreadPoolDevice.h +336 -0
  378. package/eigen/Eigen/src/ThreadPool/EventCount.h +241 -0
  379. package/eigen/Eigen/src/ThreadPool/ForkJoin.h +140 -0
  380. package/eigen/Eigen/src/ThreadPool/InternalHeaderCheck.h +4 -0
  381. package/eigen/Eigen/src/ThreadPool/NonBlockingThreadPool.h +587 -0
  382. package/eigen/Eigen/src/ThreadPool/RunQueue.h +230 -0
  383. package/eigen/Eigen/src/ThreadPool/ThreadCancel.h +21 -0
  384. package/eigen/Eigen/src/ThreadPool/ThreadEnvironment.h +43 -0
  385. package/eigen/Eigen/src/ThreadPool/ThreadLocal.h +289 -0
  386. package/eigen/Eigen/src/ThreadPool/ThreadPoolInterface.h +50 -0
  387. package/eigen/Eigen/src/ThreadPool/ThreadYield.h +16 -0
  388. package/eigen/Eigen/src/UmfPackSupport/InternalHeaderCheck.h +3 -0
  389. package/eigen/Eigen/src/UmfPackSupport/UmfPackSupport.h +480 -380
  390. package/eigen/Eigen/src/misc/Image.h +41 -43
  391. package/eigen/Eigen/src/misc/InternalHeaderCheck.h +3 -0
  392. package/eigen/Eigen/src/misc/Kernel.h +39 -41
  393. package/eigen/Eigen/src/misc/RealSvd2x2.h +19 -21
  394. package/eigen/Eigen/src/misc/blas.h +83 -426
  395. package/eigen/Eigen/src/misc/lapacke.h +9976 -16182
  396. package/eigen/Eigen/src/misc/lapacke_helpers.h +163 -0
  397. package/eigen/Eigen/src/misc/lapacke_mangling.h +4 -5
  398. package/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.inc +344 -0
  399. package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.inc +544 -0
  400. package/eigen/Eigen/src/plugins/BlockMethods.inc +1370 -0
  401. package/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.inc +116 -0
  402. package/eigen/Eigen/src/plugins/CommonCwiseUnaryOps.inc +167 -0
  403. package/eigen/Eigen/src/plugins/IndexedViewMethods.inc +192 -0
  404. package/eigen/Eigen/src/plugins/InternalHeaderCheck.inc +3 -0
  405. package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.inc +331 -0
  406. package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.inc +118 -0
  407. package/eigen/Eigen/src/plugins/ReshapedMethods.inc +133 -0
  408. package/lib/LibEigen.d.ts +4 -0
  409. package/lib/LibEigen.js +14 -0
  410. package/lib/index.d.ts +1 -1
  411. package/lib/index.js +7 -3
  412. package/package.json +2 -10
  413. package/eigen/Eigen/CMakeLists.txt +0 -19
  414. package/eigen/Eigen/src/Core/BooleanRedux.h +0 -164
  415. package/eigen/Eigen/src/Core/arch/CUDA/Complex.h +0 -103
  416. package/eigen/Eigen/src/Core/arch/CUDA/Half.h +0 -675
  417. package/eigen/Eigen/src/Core/arch/CUDA/MathFunctions.h +0 -91
  418. package/eigen/Eigen/src/Core/arch/CUDA/PacketMath.h +0 -333
  419. package/eigen/Eigen/src/Core/arch/CUDA/PacketMathHalf.h +0 -1124
  420. package/eigen/Eigen/src/Core/arch/CUDA/TypeCasting.h +0 -212
  421. package/eigen/Eigen/src/Core/util/NonMPL2.h +0 -3
  422. package/eigen/Eigen/src/Geometry/arch/Geometry_SSE.h +0 -161
  423. package/eigen/Eigen/src/LU/arch/Inverse_SSE.h +0 -338
  424. package/eigen/Eigen/src/SparseCore/MappedSparseMatrix.h +0 -67
  425. package/eigen/Eigen/src/SparseLU/SparseLU_gemm_kernel.h +0 -280
  426. package/eigen/Eigen/src/misc/lapack.h +0 -152
  427. package/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.h +0 -332
  428. package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.h +0 -552
  429. package/eigen/Eigen/src/plugins/BlockMethods.h +0 -1058
  430. package/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.h +0 -115
  431. package/eigen/Eigen/src/plugins/CommonCwiseUnaryOps.h +0 -163
  432. package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.h +0 -152
  433. package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.h +0 -85
  434. package/lib/eigen.d.ts +0 -2
  435. package/lib/eigen.js +0 -15
@@ -10,83 +10,183 @@
10
10
  #ifndef EIGEN_NUMTRAITS_H
11
11
  #define EIGEN_NUMTRAITS_H
12
12
 
13
+ // IWYU pragma: private
14
+ #include "./InternalHeaderCheck.h"
15
+
13
16
  namespace Eigen {
14
17
 
15
18
  namespace internal {
16
19
 
17
- // default implementation of digits10(), based on numeric_limits if specialized,
18
- // 0 for integer types, and log10(epsilon()) otherwise.
19
- template< typename T,
20
- bool use_numeric_limits = std::numeric_limits<T>::is_specialized,
20
+ // default implementation of digits(), based on numeric_limits if specialized,
21
+ // 0 for integer types, and log2(epsilon()) otherwise.
22
+ template <typename T, bool use_numeric_limits = std::numeric_limits<T>::is_specialized,
21
23
  bool is_integer = NumTraits<T>::IsInteger>
22
- struct default_digits10_impl
24
+ struct default_digits_impl {
25
+ EIGEN_DEVICE_FUNC constexpr static int run() { return std::numeric_limits<T>::digits; }
26
+ };
27
+
28
+ template <typename T>
29
+ struct default_digits_impl<T, false, false> // Floating point
23
30
  {
24
- static int run() { return std::numeric_limits<T>::digits10; }
31
+ EIGEN_DEVICE_FUNC constexpr static int run() {
32
+ using std::ceil;
33
+ using std::log2;
34
+ typedef typename NumTraits<T>::Real Real;
35
+ return int(ceil(-log2(NumTraits<Real>::epsilon())));
36
+ }
25
37
  };
26
38
 
27
- template<typename T>
28
- struct default_digits10_impl<T,false,false> // Floating point
39
+ template <typename T>
40
+ struct default_digits_impl<T, false, true> // Integer
29
41
  {
30
- static int run() {
42
+ EIGEN_DEVICE_FUNC constexpr static int run() { return 0; }
43
+ };
44
+
45
+ // default implementation of digits10(), based on numeric_limits if specialized,
46
+ // 0 for integer types, and floor((digits()-1)*log10(2)) otherwise.
47
+ template <typename T, bool use_numeric_limits = std::numeric_limits<T>::is_specialized,
48
+ bool is_integer = NumTraits<T>::IsInteger>
49
+ struct default_digits10_impl {
50
+ EIGEN_DEVICE_FUNC constexpr static int run() { return std::numeric_limits<T>::digits10; }
51
+ };
52
+
53
+ template <typename T>
54
+ struct default_digits10_impl<T, false, false> // Floating point
55
+ {
56
+ EIGEN_DEVICE_FUNC constexpr static int run() {
57
+ using std::floor;
31
58
  using std::log10;
32
- using std::ceil;
33
59
  typedef typename NumTraits<T>::Real Real;
34
- return int(ceil(-log10(NumTraits<Real>::epsilon())));
60
+ return int(floor((internal::default_digits_impl<Real>::run() - 1) * log10(2)));
35
61
  }
36
62
  };
37
63
 
38
- template<typename T>
39
- struct default_digits10_impl<T,false,true> // Integer
64
+ template <typename T>
65
+ struct default_digits10_impl<T, false, true> // Integer
40
66
  {
41
- static int run() { return 0; }
67
+ EIGEN_DEVICE_FUNC constexpr static int run() { return 0; }
42
68
  };
43
69
 
44
- } // end namespace internal
70
+ // default implementation of max_digits10(), based on numeric_limits if specialized,
71
+ // 0 for integer types, and log10(2) * digits() + 1 otherwise.
72
+ template <typename T, bool use_numeric_limits = std::numeric_limits<T>::is_specialized,
73
+ bool is_integer = NumTraits<T>::IsInteger>
74
+ struct default_max_digits10_impl {
75
+ EIGEN_DEVICE_FUNC constexpr static int run() { return std::numeric_limits<T>::max_digits10; }
76
+ };
45
77
 
46
- /** \class NumTraits
47
- * \ingroup Core_Module
48
- *
49
- * \brief Holds information about the various numeric (i.e. scalar) types allowed by Eigen.
50
- *
51
- * \tparam T the numeric type at hand
52
- *
53
- * This class stores enums, typedefs and static methods giving information about a numeric type.
54
- *
55
- * The provided data consists of:
56
- * \li A typedef \c Real, giving the "real part" type of \a T. If \a T is already real,
57
- * then \c Real is just a typedef to \a T. If \a T is \c std::complex<U> then \c Real
58
- * is a typedef to \a U.
59
- * \li A typedef \c NonInteger, giving the type that should be used for operations producing non-integral values,
60
- * such as quotients, square roots, etc. If \a T is a floating-point type, then this typedef just gives
61
- * \a T again. Note however that many Eigen functions such as internal::sqrt simply refuse to
62
- * take integers. Outside of a few cases, Eigen doesn't do automatic type promotion. Thus, this typedef is
63
- * only intended as a helper for code that needs to explicitly promote types.
64
- * \li A typedef \c Literal giving the type to use for numeric literals such as "2" or "0.5". For instance, for \c std::complex<U>, Literal is defined as \c U.
65
- * Of course, this type must be fully compatible with \a T. In doubt, just use \a T here.
66
- * \li A typedef \a Nested giving the type to use to nest a value inside of the expression tree. If you don't know what
67
- * this means, just use \a T here.
68
- * \li An enum value \a IsComplex. It is equal to 1 if \a T is a \c std::complex
69
- * type, and to 0 otherwise.
70
- * \li An enum value \a IsInteger. It is equal to \c 1 if \a T is an integer type such as \c int,
71
- * and to \c 0 otherwise.
72
- * \li Enum values ReadCost, AddCost and MulCost representing a rough estimate of the number of CPU cycles needed
73
- * 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.
75
- * \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
- * \li An enum value \a RequireInitialization. It is equal to \c 1 if the constructor of the numeric type \a T must
77
- * 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.
78
- * \li An epsilon() function which, unlike <a href="http://en.cppreference.com/w/cpp/types/numeric_limits/epsilon">std::numeric_limits::epsilon()</a>,
79
- * it returns a \a Real instead of a \a T.
80
- * \li A dummy_precision() function returning a weak epsilon value. It is mainly used as a default
81
- * value by the fuzzy comparison operators.
82
- * \li highest() and lowest() functions returning the highest and lowest possible values respectively.
83
- * \li digits10() function returning the number of decimal digits that can be represented without change. This is
84
- * the analogue of <a href="http://en.cppreference.com/w/cpp/types/numeric_limits/digits10">std::numeric_limits<T>::digits10</a>
85
- * which is used as the default implementation if specialized.
86
- */
87
-
88
- template<typename T> struct GenericNumTraits
78
+ template <typename T>
79
+ struct default_max_digits10_impl<T, false, false> // Floating point
80
+ {
81
+ EIGEN_DEVICE_FUNC constexpr static int run() {
82
+ using std::ceil;
83
+ using std::log10;
84
+ typedef typename NumTraits<T>::Real Real;
85
+ return int(ceil(internal::default_digits_impl<Real>::run() * log10(2) + 1));
86
+ }
87
+ };
88
+
89
+ template <typename T>
90
+ struct default_max_digits10_impl<T, false, true> // Integer
89
91
  {
92
+ EIGEN_DEVICE_FUNC constexpr static int run() { return 0; }
93
+ };
94
+
95
+ } // end namespace internal
96
+
97
+ namespace numext {
98
+
99
+ /** \internal bit-wise cast without changing the underlying bit representation. */
100
+ #if defined(__cpp_lib_bit_cast) && __cpp_lib_bit_cast >= 201806L
101
+ template <typename Tgt, typename Src>
102
+ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC constexpr Tgt bit_cast(const Src& src) {
103
+ return std::bit_cast<Tgt>(src);
104
+ }
105
+ #elif EIGEN_HAS_BUILTIN(__builtin_bit_cast)
106
+ template <typename Tgt, typename Src>
107
+ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC constexpr Tgt bit_cast(const Src& src) {
108
+ EIGEN_STATIC_ASSERT(std::is_trivially_copyable<Src>::value, THIS_TYPE_IS_NOT_SUPPORTED)
109
+ EIGEN_STATIC_ASSERT(std::is_trivially_copyable<Tgt>::value, THIS_TYPE_IS_NOT_SUPPORTED)
110
+ EIGEN_STATIC_ASSERT(sizeof(Src) == sizeof(Tgt), THIS_TYPE_IS_NOT_SUPPORTED)
111
+ return __builtin_bit_cast(Tgt, src);
112
+ }
113
+ #else
114
+ template <typename Tgt, typename Src>
115
+ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC Tgt bit_cast(const Src& src) {
116
+ // The behaviour of memcpy is not specified for non-trivially copyable types
117
+ EIGEN_STATIC_ASSERT(std::is_trivially_copyable<Src>::value, THIS_TYPE_IS_NOT_SUPPORTED)
118
+ EIGEN_STATIC_ASSERT(std::is_trivially_copyable<Tgt>::value && std::is_default_constructible<Tgt>::value,
119
+ THIS_TYPE_IS_NOT_SUPPORTED)
120
+ EIGEN_STATIC_ASSERT(sizeof(Src) == sizeof(Tgt), THIS_TYPE_IS_NOT_SUPPORTED)
121
+
122
+ Tgt tgt;
123
+ // Load src into registers first. This allows the memcpy to be elided by CUDA.
124
+ const Src staged = src;
125
+ EIGEN_USING_STD(memcpy)
126
+ memcpy(static_cast<void*>(&tgt), static_cast<const void*>(&staged), sizeof(Tgt));
127
+ return tgt;
128
+ }
129
+ #endif
130
+ } // namespace numext
131
+
132
+ // clang-format off
133
+ /** \class NumTraits
134
+ * \ingroup Core_Module
135
+ *
136
+ * \brief Holds information about the various numeric (i.e. scalar) types allowed by Eigen.
137
+ *
138
+ * \tparam T the numeric type at hand
139
+ *
140
+ * This class stores enums, typedefs and static methods giving information about a numeric type.
141
+ *
142
+ * The provided data consists of:
143
+ * \li A typedef \c Real, giving the "real part" type of \a T. If \a T is already real,
144
+ * then \c Real is just a typedef to \a T. If \a T is `std::complex<U>` then \c Real
145
+ * is a typedef to \a U.
146
+ * \li A typedef \c NonInteger, giving the type that should be used for operations producing non-integral values,
147
+ * such as quotients, square roots, etc. If \a T is a floating-point type, then this typedef just gives
148
+ * \a T again. Note however that many Eigen functions such as internal::sqrt simply refuse to
149
+ * take integers. Outside of a few cases, Eigen doesn't do automatic type promotion. Thus, this typedef is
150
+ * only intended as a helper for code that needs to explicitly promote types.
151
+ * \li A typedef \c Literal giving the type to use for numeric literals such as "2" or "0.5". For instance, for
152
+ * `std::complex<U>`, Literal is defined as \a U. Of course, this type must be fully compatible with \a T. In doubt,
153
+ * just use \a T here.
154
+ * \li A typedef \c Nested giving the type to use to nest a value inside of the expression tree. If you don't know what
155
+ * this means, just use \a T here.
156
+ * \li An enum value \c IsComplex. It is equal to 1 if \a T is a \c std::complex type, and to 0 otherwise.
157
+ * \li An enum value \c IsInteger. It is equal to \c 1 if \a T is an integer type such as \c int, and to \c 0 otherwise.
158
+ * \li Enum values \c ReadCost, \c AddCost and \c MulCost representing a rough estimate of the number of CPU cycles needed to by
159
+ * move / add / mul instructions respectively, assuming the data is already stored in CPU registers. Stay vague here.
160
+ * No need to do architecture-specific stuff. If you don't know what this means, just use \c Eigen::HugeCost.
161
+ * \li An enum value \c IsSigned. It is equal to \c 1 if \a T is a signed type and to 0 if \a T is unsigned.
162
+ * \li An enum value \c RequireInitialization. It is equal to \c 1 if the constructor of the numeric type \a T must be
163
+ * 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.
164
+ * \li An epsilon() function which, unlike <a href="http://en.cppreference.com/w/cpp/types/numeric_limits/epsilon">
165
+ * `std::numeric_limits::epsilon()`</a>, it returns a \c Real instead of a \a T.
166
+ * \li A dummy_precision() function returning a weak epsilon value. It is mainly used as a default value by the fuzzy
167
+ * comparison operators.
168
+ * \li highest() and lowest() functions returning the highest and lowest possible values respectively.
169
+ * \li digits() function returning the number of radix digits (non-sign digits for integers, mantissa for floating-point).
170
+ * This is the analogue of <a href="http://en.cppreference.com/w/cpp/types/numeric_limits/digits">
171
+ * `std::numeric_limits<T>::digits`</a> which is used as the default implementation if specialized.
172
+ * \li digits10() function returning the number of decimal digits that can be represented without change. This is the
173
+ * analogue of <a href="http://en.cppreference.com/w/cpp/types/numeric_limits/digits10">
174
+ * `std::numeric_limits<T>::digits10`</a> which is used as the default implementation if specialized.
175
+ * \li max_digits10() function returning the number of decimal digits required to uniquely represent all distinct values
176
+ * of the type. This is the analogue of <a
177
+ * href="http://en.cppreference.com/w/cpp/types/numeric_limits/max_digits10">`std::numeric_limits<T>::max_digits10`</a>
178
+ * which is used as the default implementation if specialized.
179
+ * \li min_exponent() and max_exponent() functions returning the highest and lowest possible values, respectively,
180
+ * such that the radix raised to the power exponent-1 is a normalized floating-point number. These are equivalent
181
+ * to <a href="http://en.cppreference.com/w/cpp/types/numeric_limits/min_exponent">
182
+ * `std::numeric_limits<T>::min_exponent`</a>/<a
183
+ * href="http://en.cppreference.com/w/cpp/types/numeric_limits/max_exponent">`std::numeric_limits<T>::max_exponent`</a>.
184
+ * \li infinity() function returning a representation of positive infinity, if available.
185
+ * \li quiet_NaN() function returning a non-signaling "not-a-number", if available.
186
+ */
187
+ // clang-format on
188
+ template <typename T>
189
+ struct GenericNumTraits {
90
190
  enum {
91
191
  IsInteger = std::numeric_limits<T>::is_integer,
92
192
  IsSigned = std::numeric_limits<T>::is_signed,
@@ -98,140 +198,123 @@ template<typename T> struct GenericNumTraits
98
198
  };
99
199
 
100
200
  typedef T Real;
101
- typedef typename internal::conditional<
102
- IsInteger,
103
- typename internal::conditional<sizeof(T)<=2, float, double>::type,
104
- T
105
- >::type NonInteger;
201
+ typedef std::conditional_t<IsInteger, std::conditional_t<sizeof(T) <= 2, float, double>, T> NonInteger;
106
202
  typedef T Nested;
107
203
  typedef T Literal;
108
204
 
109
- EIGEN_DEVICE_FUNC
110
- static inline Real epsilon()
111
- {
112
- return numext::numeric_limits<T>::epsilon();
113
- }
205
+ EIGEN_DEVICE_FUNC constexpr static Real epsilon() { return numext::numeric_limits<T>::epsilon(); }
114
206
 
115
- EIGEN_DEVICE_FUNC
116
- static inline int digits10()
117
- {
118
- return internal::default_digits10_impl<T>::run();
119
- }
207
+ EIGEN_DEVICE_FUNC constexpr static int digits10() { return internal::default_digits10_impl<T>::run(); }
208
+
209
+ EIGEN_DEVICE_FUNC constexpr static int max_digits10() { return internal::default_max_digits10_impl<T>::run(); }
210
+
211
+ EIGEN_DEVICE_FUNC constexpr static int digits() { return internal::default_digits_impl<T>::run(); }
120
212
 
121
- EIGEN_DEVICE_FUNC
122
- static inline Real dummy_precision()
123
- {
213
+ EIGEN_DEVICE_FUNC constexpr static int min_exponent() { return numext::numeric_limits<T>::min_exponent; }
214
+
215
+ EIGEN_DEVICE_FUNC constexpr static int max_exponent() { return numext::numeric_limits<T>::max_exponent; }
216
+
217
+ EIGEN_DEVICE_FUNC constexpr static Real dummy_precision() {
124
218
  // make sure to override this for floating-point types
125
219
  return Real(0);
126
220
  }
127
221
 
222
+ EIGEN_DEVICE_FUNC constexpr static T highest() { return (numext::numeric_limits<T>::max)(); }
128
223
 
129
- EIGEN_DEVICE_FUNC
130
- static inline T highest() {
131
- return (numext::numeric_limits<T>::max)();
132
- }
133
-
134
- EIGEN_DEVICE_FUNC
135
- static inline T lowest() {
136
- return IsInteger ? (numext::numeric_limits<T>::min)() : (-(numext::numeric_limits<T>::max)());
137
- }
224
+ EIGEN_DEVICE_FUNC constexpr static T lowest() { return (numext::numeric_limits<T>::lowest)(); }
138
225
 
139
- EIGEN_DEVICE_FUNC
140
- static inline T infinity() {
141
- return numext::numeric_limits<T>::infinity();
142
- }
226
+ EIGEN_DEVICE_FUNC constexpr static T infinity() { return numext::numeric_limits<T>::infinity(); }
143
227
 
144
- EIGEN_DEVICE_FUNC
145
- static inline T quiet_NaN() {
146
- return numext::numeric_limits<T>::quiet_NaN();
147
- }
228
+ EIGEN_DEVICE_FUNC constexpr static T quiet_NaN() { return numext::numeric_limits<T>::quiet_NaN(); }
148
229
  };
149
230
 
150
- template<typename T> struct NumTraits : GenericNumTraits<T>
151
- {};
231
+ template <typename T>
232
+ struct NumTraits : GenericNumTraits<T> {};
152
233
 
153
- template<> struct NumTraits<float>
154
- : GenericNumTraits<float>
155
- {
156
- EIGEN_DEVICE_FUNC
157
- static inline float dummy_precision() { return 1e-5f; }
234
+ template <>
235
+ struct NumTraits<float> : GenericNumTraits<float> {
236
+ EIGEN_DEVICE_FUNC constexpr static float dummy_precision() { return 1e-5f; }
158
237
  };
159
238
 
160
- template<> struct NumTraits<double> : GenericNumTraits<double>
161
- {
162
- EIGEN_DEVICE_FUNC
163
- static inline double dummy_precision() { return 1e-12; }
239
+ template <>
240
+ struct NumTraits<double> : GenericNumTraits<double> {
241
+ EIGEN_DEVICE_FUNC constexpr static double dummy_precision() { return 1e-12; }
164
242
  };
165
243
 
166
- template<> struct NumTraits<long double>
167
- : GenericNumTraits<long double>
168
- {
169
- static inline long double dummy_precision() { return 1e-15l; }
244
+ // GPU devices treat `long double` as `double`.
245
+ #ifndef EIGEN_GPU_COMPILE_PHASE
246
+ template <>
247
+ struct NumTraits<long double> : GenericNumTraits<long double> {
248
+ EIGEN_DEVICE_FUNC constexpr static long double dummy_precision() { return static_cast<long double>(1e-15l); }
249
+
250
+ #if defined(EIGEN_ARCH_PPC) && (__LDBL_MANT_DIG__ == 106)
251
+ // PowerPC double double causes issues with some values
252
+ EIGEN_DEVICE_FUNC constexpr static long double epsilon() {
253
+ // 2^(-(__LDBL_MANT_DIG__)+1)
254
+ return static_cast<long double>(2.4651903288156618919116517665087e-32l);
255
+ }
256
+ #endif
170
257
  };
258
+ #endif
171
259
 
172
- template<typename _Real> struct NumTraits<std::complex<_Real> >
173
- : GenericNumTraits<std::complex<_Real> >
174
- {
175
- typedef _Real Real;
176
- typedef typename NumTraits<_Real>::Literal Literal;
260
+ template <typename Real_>
261
+ struct NumTraits<std::complex<Real_> > : GenericNumTraits<std::complex<Real_> > {
262
+ typedef Real_ Real;
263
+ typedef typename NumTraits<Real_>::Literal Literal;
177
264
  enum {
178
265
  IsComplex = 1,
179
- RequireInitialization = NumTraits<_Real>::RequireInitialization,
180
- ReadCost = 2 * NumTraits<_Real>::ReadCost,
266
+ IsSigned = NumTraits<Real_>::IsSigned,
267
+ RequireInitialization = NumTraits<Real_>::RequireInitialization,
268
+ ReadCost = 2 * NumTraits<Real_>::ReadCost,
181
269
  AddCost = 2 * NumTraits<Real>::AddCost,
182
270
  MulCost = 4 * NumTraits<Real>::MulCost + 2 * NumTraits<Real>::AddCost
183
271
  };
184
272
 
185
- EIGEN_DEVICE_FUNC
186
- static inline Real epsilon() { return NumTraits<Real>::epsilon(); }
187
- EIGEN_DEVICE_FUNC
188
- static inline Real dummy_precision() { return NumTraits<Real>::dummy_precision(); }
189
- EIGEN_DEVICE_FUNC
190
- static inline int digits10() { return NumTraits<Real>::digits10(); }
273
+ EIGEN_DEVICE_FUNC constexpr static Real epsilon() { return NumTraits<Real>::epsilon(); }
274
+ EIGEN_DEVICE_FUNC constexpr static Real dummy_precision() { return NumTraits<Real>::dummy_precision(); }
275
+ EIGEN_DEVICE_FUNC constexpr static int digits10() { return NumTraits<Real>::digits10(); }
276
+ EIGEN_DEVICE_FUNC constexpr static int max_digits10() { return NumTraits<Real>::max_digits10(); }
191
277
  };
192
278
 
193
- template<typename Scalar, int Rows, int Cols, int Options, int MaxRows, int MaxCols>
194
- struct NumTraits<Array<Scalar, Rows, Cols, Options, MaxRows, MaxCols> >
195
- {
279
+ template <typename Scalar, int Rows, int Cols, int Options, int MaxRows, int MaxCols>
280
+ struct NumTraits<Array<Scalar, Rows, Cols, Options, MaxRows, MaxCols> > {
196
281
  typedef Array<Scalar, Rows, Cols, Options, MaxRows, MaxCols> ArrayType;
197
282
  typedef typename NumTraits<Scalar>::Real RealScalar;
198
283
  typedef Array<RealScalar, Rows, Cols, Options, MaxRows, MaxCols> Real;
199
284
  typedef typename NumTraits<Scalar>::NonInteger NonIntegerScalar;
200
285
  typedef Array<NonIntegerScalar, Rows, Cols, Options, MaxRows, MaxCols> NonInteger;
201
- typedef ArrayType & Nested;
286
+ typedef ArrayType& Nested;
202
287
  typedef typename NumTraits<Scalar>::Literal Literal;
203
288
 
204
289
  enum {
205
290
  IsComplex = NumTraits<Scalar>::IsComplex,
206
291
  IsInteger = NumTraits<Scalar>::IsInteger,
207
- IsSigned = NumTraits<Scalar>::IsSigned,
292
+ IsSigned = NumTraits<Scalar>::IsSigned,
208
293
  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
294
+ ReadCost = ArrayType::SizeAtCompileTime == Dynamic
295
+ ? HugeCost
296
+ : ArrayType::SizeAtCompileTime * int(NumTraits<Scalar>::ReadCost),
297
+ AddCost = ArrayType::SizeAtCompileTime == Dynamic ? HugeCost
298
+ : ArrayType::SizeAtCompileTime * int(NumTraits<Scalar>::AddCost),
299
+ MulCost = ArrayType::SizeAtCompileTime == Dynamic ? HugeCost
300
+ : ArrayType::SizeAtCompileTime * int(NumTraits<Scalar>::MulCost)
212
301
  };
213
302
 
214
- EIGEN_DEVICE_FUNC
215
- static inline RealScalar epsilon() { return NumTraits<RealScalar>::epsilon(); }
216
- EIGEN_DEVICE_FUNC
217
- static inline RealScalar dummy_precision() { return NumTraits<RealScalar>::dummy_precision(); }
303
+ EIGEN_DEVICE_FUNC constexpr static RealScalar epsilon() { return NumTraits<RealScalar>::epsilon(); }
304
+ EIGEN_DEVICE_FUNC constexpr static RealScalar dummy_precision() { return NumTraits<RealScalar>::dummy_precision(); }
218
305
 
219
- static inline int digits10() { return NumTraits<Scalar>::digits10(); }
306
+ constexpr static int digits10() { return NumTraits<Scalar>::digits10(); }
307
+ constexpr static int max_digits10() { return NumTraits<Scalar>::max_digits10(); }
220
308
  };
221
309
 
222
- template<> struct NumTraits<std::string>
223
- : GenericNumTraits<std::string>
224
- {
225
- enum {
226
- RequireInitialization = 1,
227
- ReadCost = HugeCost,
228
- AddCost = HugeCost,
229
- MulCost = HugeCost
230
- };
310
+ template <>
311
+ struct NumTraits<std::string> : GenericNumTraits<std::string> {
312
+ enum { RequireInitialization = 1, ReadCost = HugeCost, AddCost = HugeCost, MulCost = HugeCost };
231
313
 
232
- static inline int digits10() { return 0; }
314
+ constexpr static int digits10() { return 0; }
315
+ constexpr static int max_digits10() { return 0; }
233
316
 
234
- private:
317
+ private:
235
318
  static inline std::string epsilon();
236
319
  static inline std::string dummy_precision();
237
320
  static inline std::string lowest();
@@ -241,8 +324,12 @@ private:
241
324
  };
242
325
 
243
326
  // Empty specialization for void to allow template specialization based on NumTraits<T>::Real with T==void and SFINAE.
244
- template<> struct NumTraits<void> {};
327
+ template <>
328
+ struct NumTraits<void> {};
329
+
330
+ template <>
331
+ struct NumTraits<bool> : GenericNumTraits<bool> {};
245
332
 
246
- } // end namespace Eigen
333
+ } // end namespace Eigen
247
334
 
248
- #endif // EIGEN_NUMTRAITS_H
335
+ #endif // EIGEN_NUMTRAITS_H