@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,264 +10,528 @@
10
10
  #ifndef EIGEN_VISITOR_H
11
11
  #define EIGEN_VISITOR_H
12
12
 
13
- namespace Eigen {
13
+ // IWYU pragma: private
14
+ #include "./InternalHeaderCheck.h"
15
+
16
+ namespace Eigen {
14
17
 
15
18
  namespace internal {
16
19
 
17
- template<typename Visitor, typename Derived, int UnrollCount>
18
- struct visitor_impl
19
- {
20
- enum {
21
- col = (UnrollCount-1) / Derived::RowsAtCompileTime,
22
- row = (UnrollCount-1) % Derived::RowsAtCompileTime
23
- };
20
+ template <typename Visitor, typename Derived, int UnrollCount,
21
+ bool Vectorize = (Derived::PacketAccess && functor_traits<Visitor>::PacketAccess), bool LinearAccess = false,
22
+ bool ShortCircuitEvaluation = false>
23
+ struct visitor_impl;
24
+
25
+ template <typename Visitor, bool ShortCircuitEvaluation = false>
26
+ struct short_circuit_eval_impl {
27
+ // if short circuit evaluation is not used, do nothing
28
+ static constexpr EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE bool run(const Visitor&) { return false; }
29
+ };
30
+ template <typename Visitor>
31
+ struct short_circuit_eval_impl<Visitor, true> {
32
+ // if short circuit evaluation is used, check the visitor
33
+ static constexpr EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE bool run(const Visitor& visitor) { return visitor.done(); }
34
+ };
35
+
36
+ // unrolled inner-outer traversal
37
+ template <typename Visitor, typename Derived, int UnrollCount, bool Vectorize, bool ShortCircuitEvaluation>
38
+ struct visitor_impl<Visitor, Derived, UnrollCount, Vectorize, false, ShortCircuitEvaluation> {
39
+ // don't use short circuit evaluation for unrolled version
40
+ using Scalar = typename Derived::Scalar;
41
+ using Packet = typename packet_traits<Scalar>::type;
42
+ static constexpr bool RowMajor = Derived::IsRowMajor;
43
+ static constexpr int RowsAtCompileTime = Derived::RowsAtCompileTime;
44
+ static constexpr int ColsAtCompileTime = Derived::ColsAtCompileTime;
45
+ static constexpr int PacketSize = packet_traits<Scalar>::size;
46
+
47
+ static constexpr bool CanVectorize(int K) {
48
+ constexpr int InnerSizeAtCompileTime = RowMajor ? ColsAtCompileTime : RowsAtCompileTime;
49
+ if (InnerSizeAtCompileTime < PacketSize) return false;
50
+ return Vectorize && (InnerSizeAtCompileTime - (K % InnerSizeAtCompileTime) >= PacketSize);
51
+ }
52
+
53
+ template <int K = 0, bool Empty = (K == UnrollCount), std::enable_if_t<Empty, bool> = true>
54
+ static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void run(const Derived&, Visitor&) {}
55
+
56
+ template <int K = 0, bool Empty = (K == UnrollCount), bool Initialize = (K == 0), bool DoVectorOp = CanVectorize(K),
57
+ std::enable_if_t<!Empty && Initialize && !DoVectorOp, bool> = true>
58
+ static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void run(const Derived& mat, Visitor& visitor) {
59
+ visitor.init(mat.coeff(0, 0), 0, 0);
60
+ run<1>(mat, visitor);
61
+ }
24
62
 
25
- EIGEN_DEVICE_FUNC
26
- static inline void run(const Derived &mat, Visitor& visitor)
27
- {
28
- visitor_impl<Visitor, Derived, UnrollCount-1>::run(mat, visitor);
29
- visitor(mat.coeff(row, col), row, col);
63
+ template <int K = 0, bool Empty = (K == UnrollCount), bool Initialize = (K == 0), bool DoVectorOp = CanVectorize(K),
64
+ std::enable_if_t<!Empty && !Initialize && !DoVectorOp, bool> = true>
65
+ static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void run(const Derived& mat, Visitor& visitor) {
66
+ static constexpr int R = RowMajor ? (K / ColsAtCompileTime) : (K % RowsAtCompileTime);
67
+ static constexpr int C = RowMajor ? (K % ColsAtCompileTime) : (K / RowsAtCompileTime);
68
+ visitor(mat.coeff(R, C), R, C);
69
+ run<K + 1>(mat, visitor);
70
+ }
71
+
72
+ template <int K = 0, bool Empty = (K == UnrollCount), bool Initialize = (K == 0), bool DoVectorOp = CanVectorize(K),
73
+ std::enable_if_t<!Empty && Initialize && DoVectorOp, bool> = true>
74
+ static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void run(const Derived& mat, Visitor& visitor) {
75
+ Packet P = mat.template packet<Packet>(0, 0);
76
+ visitor.initpacket(P, 0, 0);
77
+ run<PacketSize>(mat, visitor);
78
+ }
79
+
80
+ template <int K = 0, bool Empty = (K == UnrollCount), bool Initialize = (K == 0), bool DoVectorOp = CanVectorize(K),
81
+ std::enable_if_t<!Empty && !Initialize && DoVectorOp, bool> = true>
82
+ static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void run(const Derived& mat, Visitor& visitor) {
83
+ static constexpr int R = RowMajor ? (K / ColsAtCompileTime) : (K % RowsAtCompileTime);
84
+ static constexpr int C = RowMajor ? (K % ColsAtCompileTime) : (K / RowsAtCompileTime);
85
+ Packet P = mat.template packet<Packet>(R, C);
86
+ visitor.packet(P, R, C);
87
+ run<K + PacketSize>(mat, visitor);
30
88
  }
31
89
  };
32
90
 
33
- template<typename Visitor, typename Derived>
34
- struct visitor_impl<Visitor, Derived, 1>
35
- {
36
- EIGEN_DEVICE_FUNC
37
- static inline void run(const Derived &mat, Visitor& visitor)
38
- {
39
- return visitor.init(mat.coeff(0, 0), 0, 0);
91
+ // unrolled linear traversal
92
+ template <typename Visitor, typename Derived, int UnrollCount, bool Vectorize, bool ShortCircuitEvaluation>
93
+ struct visitor_impl<Visitor, Derived, UnrollCount, Vectorize, true, ShortCircuitEvaluation> {
94
+ // don't use short circuit evaluation for unrolled version
95
+ using Scalar = typename Derived::Scalar;
96
+ using Packet = typename packet_traits<Scalar>::type;
97
+ static constexpr int PacketSize = packet_traits<Scalar>::size;
98
+
99
+ static constexpr bool CanVectorize(int K) { return Vectorize && ((UnrollCount - K) >= PacketSize); }
100
+
101
+ // empty
102
+ template <int K = 0, bool Empty = (K == UnrollCount), std::enable_if_t<Empty, bool> = true>
103
+ static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void run(const Derived&, Visitor&) {}
104
+
105
+ // scalar initialization
106
+ template <int K = 0, bool Empty = (K == UnrollCount), bool Initialize = (K == 0), bool DoVectorOp = CanVectorize(K),
107
+ std::enable_if_t<!Empty && Initialize && !DoVectorOp, bool> = true>
108
+ static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void run(const Derived& mat, Visitor& visitor) {
109
+ visitor.init(mat.coeff(0), 0);
110
+ run<1>(mat, visitor);
111
+ }
112
+
113
+ // scalar iteration
114
+ template <int K = 0, bool Empty = (K == UnrollCount), bool Initialize = (K == 0), bool DoVectorOp = CanVectorize(K),
115
+ std::enable_if_t<!Empty && !Initialize && !DoVectorOp, bool> = true>
116
+ static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void run(const Derived& mat, Visitor& visitor) {
117
+ visitor(mat.coeff(K), K);
118
+ run<K + 1>(mat, visitor);
119
+ }
120
+
121
+ // vector initialization
122
+ template <int K = 0, bool Empty = (K == UnrollCount), bool Initialize = (K == 0), bool DoVectorOp = CanVectorize(K),
123
+ std::enable_if_t<!Empty && Initialize && DoVectorOp, bool> = true>
124
+ static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void run(const Derived& mat, Visitor& visitor) {
125
+ Packet P = mat.template packet<Packet>(0);
126
+ visitor.initpacket(P, 0);
127
+ run<PacketSize>(mat, visitor);
128
+ }
129
+
130
+ // vector iteration
131
+ template <int K = 0, bool Empty = (K == UnrollCount), bool Initialize = (K == 0), bool DoVectorOp = CanVectorize(K),
132
+ std::enable_if_t<!Empty && !Initialize && DoVectorOp, bool> = true>
133
+ static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void run(const Derived& mat, Visitor& visitor) {
134
+ Packet P = mat.template packet<Packet>(K);
135
+ visitor.packet(P, K);
136
+ run<K + PacketSize>(mat, visitor);
137
+ }
138
+ };
139
+
140
+ // dynamic scalar outer-inner traversal
141
+ template <typename Visitor, typename Derived, bool ShortCircuitEvaluation>
142
+ struct visitor_impl<Visitor, Derived, Dynamic, /*Vectorize=*/false, /*LinearAccess=*/false, ShortCircuitEvaluation> {
143
+ using short_circuit = short_circuit_eval_impl<Visitor, ShortCircuitEvaluation>;
144
+ static constexpr bool RowMajor = Derived::IsRowMajor;
145
+
146
+ static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void run(const Derived& mat, Visitor& visitor) {
147
+ const Index innerSize = RowMajor ? mat.cols() : mat.rows();
148
+ const Index outerSize = RowMajor ? mat.rows() : mat.cols();
149
+ if (innerSize == 0 || outerSize == 0) return;
150
+ {
151
+ visitor.init(mat.coeff(0, 0), 0, 0);
152
+ if (short_circuit::run(visitor)) return;
153
+ for (Index i = 1; i < innerSize; ++i) {
154
+ Index r = RowMajor ? 0 : i;
155
+ Index c = RowMajor ? i : 0;
156
+ visitor(mat.coeff(r, c), r, c);
157
+ if EIGEN_PREDICT_FALSE (short_circuit::run(visitor)) return;
158
+ }
159
+ }
160
+ for (Index j = 1; j < outerSize; j++) {
161
+ for (Index i = 0; i < innerSize; ++i) {
162
+ Index r = RowMajor ? j : i;
163
+ Index c = RowMajor ? i : j;
164
+ visitor(mat.coeff(r, c), r, c);
165
+ if EIGEN_PREDICT_FALSE (short_circuit::run(visitor)) return;
166
+ }
167
+ }
40
168
  }
41
169
  };
42
170
 
43
- template<typename Visitor, typename Derived>
44
- struct visitor_impl<Visitor, Derived, Dynamic>
45
- {
46
- EIGEN_DEVICE_FUNC
47
- static inline void run(const Derived& mat, Visitor& visitor)
48
- {
49
- visitor.init(mat.coeff(0,0), 0, 0);
50
- for(Index i = 1; i < mat.rows(); ++i)
51
- visitor(mat.coeff(i, 0), i, 0);
52
- for(Index j = 1; j < mat.cols(); ++j)
53
- for(Index i = 0; i < mat.rows(); ++i)
54
- visitor(mat.coeff(i, j), i, j);
171
+ // dynamic vectorized outer-inner traversal
172
+ template <typename Visitor, typename Derived, bool ShortCircuitEvaluation>
173
+ struct visitor_impl<Visitor, Derived, Dynamic, /*Vectorize=*/true, /*LinearAccess=*/false, ShortCircuitEvaluation> {
174
+ using Scalar = typename Derived::Scalar;
175
+ using Packet = typename packet_traits<Scalar>::type;
176
+ static constexpr int PacketSize = packet_traits<Scalar>::size;
177
+ using short_circuit = short_circuit_eval_impl<Visitor, ShortCircuitEvaluation>;
178
+ static constexpr bool RowMajor = Derived::IsRowMajor;
179
+
180
+ static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void run(const Derived& mat, Visitor& visitor) {
181
+ const Index innerSize = RowMajor ? mat.cols() : mat.rows();
182
+ const Index outerSize = RowMajor ? mat.rows() : mat.cols();
183
+ if (innerSize == 0 || outerSize == 0) return;
184
+ {
185
+ Index i = 0;
186
+ if (innerSize < PacketSize) {
187
+ visitor.init(mat.coeff(0, 0), 0, 0);
188
+ i = 1;
189
+ } else {
190
+ Packet p = mat.template packet<Packet>(0, 0);
191
+ visitor.initpacket(p, 0, 0);
192
+ i = PacketSize;
193
+ }
194
+ if EIGEN_PREDICT_FALSE (short_circuit::run(visitor)) return;
195
+ for (; i + PacketSize - 1 < innerSize; i += PacketSize) {
196
+ Index r = RowMajor ? 0 : i;
197
+ Index c = RowMajor ? i : 0;
198
+ Packet p = mat.template packet<Packet>(r, c);
199
+ visitor.packet(p, r, c);
200
+ if EIGEN_PREDICT_FALSE (short_circuit::run(visitor)) return;
201
+ }
202
+ for (; i < innerSize; ++i) {
203
+ Index r = RowMajor ? 0 : i;
204
+ Index c = RowMajor ? i : 0;
205
+ visitor(mat.coeff(r, c), r, c);
206
+ if EIGEN_PREDICT_FALSE (short_circuit::run(visitor)) return;
207
+ }
208
+ }
209
+ for (Index j = 1; j < outerSize; j++) {
210
+ Index i = 0;
211
+ for (; i + PacketSize - 1 < innerSize; i += PacketSize) {
212
+ Index r = RowMajor ? j : i;
213
+ Index c = RowMajor ? i : j;
214
+ Packet p = mat.template packet<Packet>(r, c);
215
+ visitor.packet(p, r, c);
216
+ if EIGEN_PREDICT_FALSE (short_circuit::run(visitor)) return;
217
+ }
218
+ for (; i < innerSize; ++i) {
219
+ Index r = RowMajor ? j : i;
220
+ Index c = RowMajor ? i : j;
221
+ visitor(mat.coeff(r, c), r, c);
222
+ if EIGEN_PREDICT_FALSE (short_circuit::run(visitor)) return;
223
+ }
224
+ }
225
+ }
226
+ };
227
+
228
+ // dynamic scalar linear traversal
229
+ template <typename Visitor, typename Derived, bool ShortCircuitEvaluation>
230
+ struct visitor_impl<Visitor, Derived, Dynamic, /*Vectorize=*/false, /*LinearAccess=*/true, ShortCircuitEvaluation> {
231
+ using short_circuit = short_circuit_eval_impl<Visitor, ShortCircuitEvaluation>;
232
+
233
+ static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void run(const Derived& mat, Visitor& visitor) {
234
+ const Index size = mat.size();
235
+ if (size == 0) return;
236
+ visitor.init(mat.coeff(0), 0);
237
+ if EIGEN_PREDICT_FALSE (short_circuit::run(visitor)) return;
238
+ for (Index k = 1; k < size; k++) {
239
+ visitor(mat.coeff(k), k);
240
+ if EIGEN_PREDICT_FALSE (short_circuit::run(visitor)) return;
241
+ }
242
+ }
243
+ };
244
+
245
+ // dynamic vectorized linear traversal
246
+ template <typename Visitor, typename Derived, bool ShortCircuitEvaluation>
247
+ struct visitor_impl<Visitor, Derived, Dynamic, /*Vectorize=*/true, /*LinearAccess=*/true, ShortCircuitEvaluation> {
248
+ using Scalar = typename Derived::Scalar;
249
+ using Packet = typename packet_traits<Scalar>::type;
250
+ static constexpr int PacketSize = packet_traits<Scalar>::size;
251
+ using short_circuit = short_circuit_eval_impl<Visitor, ShortCircuitEvaluation>;
252
+
253
+ static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void run(const Derived& mat, Visitor& visitor) {
254
+ const Index size = mat.size();
255
+ if (size == 0) return;
256
+ Index k = 0;
257
+ if (size < PacketSize) {
258
+ visitor.init(mat.coeff(0), 0);
259
+ k = 1;
260
+ } else {
261
+ Packet p = mat.template packet<Packet>(k);
262
+ visitor.initpacket(p, k);
263
+ k = PacketSize;
264
+ }
265
+ if EIGEN_PREDICT_FALSE (short_circuit::run(visitor)) return;
266
+ for (; k + PacketSize - 1 < size; k += PacketSize) {
267
+ Packet p = mat.template packet<Packet>(k);
268
+ visitor.packet(p, k);
269
+ if EIGEN_PREDICT_FALSE (short_circuit::run(visitor)) return;
270
+ }
271
+ for (; k < size; k++) {
272
+ visitor(mat.coeff(k), k);
273
+ if EIGEN_PREDICT_FALSE (short_circuit::run(visitor)) return;
274
+ }
55
275
  }
56
276
  };
57
277
 
58
278
  // evaluator adaptor
59
- template<typename XprType>
60
- class visitor_evaluator
61
- {
62
- public:
63
- EIGEN_DEVICE_FUNC
64
- explicit visitor_evaluator(const XprType &xpr) : m_evaluator(xpr), m_xpr(xpr) {}
65
-
279
+ template <typename XprType>
280
+ class visitor_evaluator {
281
+ public:
282
+ typedef evaluator<XprType> Evaluator;
66
283
  typedef typename XprType::Scalar Scalar;
67
- typedef typename XprType::CoeffReturnType CoeffReturnType;
68
-
69
- enum {
70
- RowsAtCompileTime = XprType::RowsAtCompileTime,
71
- CoeffReadCost = internal::evaluator<XprType>::CoeffReadCost
72
- };
73
-
74
- EIGEN_DEVICE_FUNC Index rows() const { return m_xpr.rows(); }
75
- EIGEN_DEVICE_FUNC Index cols() const { return m_xpr.cols(); }
76
- EIGEN_DEVICE_FUNC Index size() const { return m_xpr.size(); }
77
-
78
- EIGEN_DEVICE_FUNC CoeffReturnType coeff(Index row, Index col) const
79
- { return m_evaluator.coeff(row, col); }
80
-
81
- protected:
82
- internal::evaluator<XprType> m_evaluator;
83
- const XprType &m_xpr;
284
+ using Packet = typename packet_traits<Scalar>::type;
285
+ typedef std::remove_const_t<typename XprType::CoeffReturnType> CoeffReturnType;
286
+
287
+ static constexpr bool PacketAccess = static_cast<bool>(Evaluator::Flags & PacketAccessBit);
288
+ static constexpr bool LinearAccess = static_cast<bool>(Evaluator::Flags & LinearAccessBit);
289
+ static constexpr bool IsRowMajor = static_cast<bool>(XprType::IsRowMajor);
290
+ static constexpr int RowsAtCompileTime = XprType::RowsAtCompileTime;
291
+ static constexpr int ColsAtCompileTime = XprType::ColsAtCompileTime;
292
+ static constexpr int XprAlignment = Evaluator::Alignment;
293
+ static constexpr int CoeffReadCost = Evaluator::CoeffReadCost;
294
+
295
+ EIGEN_DEVICE_FUNC explicit visitor_evaluator(const XprType& xpr) : m_evaluator(xpr), m_xpr(xpr) {}
296
+
297
+ EIGEN_DEVICE_FUNC constexpr Index rows() const noexcept { return m_xpr.rows(); }
298
+ EIGEN_DEVICE_FUNC constexpr Index cols() const noexcept { return m_xpr.cols(); }
299
+ EIGEN_DEVICE_FUNC constexpr Index size() const noexcept { return m_xpr.size(); }
300
+ // outer-inner access
301
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE CoeffReturnType coeff(Index row, Index col) const {
302
+ return m_evaluator.coeff(row, col);
303
+ }
304
+ template <typename Packet, int Alignment = Unaligned>
305
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet packet(Index row, Index col) const {
306
+ return m_evaluator.template packet<Alignment, Packet>(row, col);
307
+ }
308
+ // linear access
309
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE CoeffReturnType coeff(Index index) const { return m_evaluator.coeff(index); }
310
+ template <typename Packet, int Alignment = XprAlignment>
311
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet packet(Index index) const {
312
+ return m_evaluator.template packet<Alignment, Packet>(index);
313
+ }
314
+
315
+ protected:
316
+ Evaluator m_evaluator;
317
+ const XprType& m_xpr;
318
+ };
319
+
320
+ template <typename Derived, typename Visitor, bool ShortCircuitEvaulation>
321
+ struct visit_impl {
322
+ using Evaluator = visitor_evaluator<Derived>;
323
+ using Scalar = typename DenseBase<Derived>::Scalar;
324
+
325
+ static constexpr bool IsRowMajor = DenseBase<Derived>::IsRowMajor;
326
+ static constexpr int SizeAtCompileTime = DenseBase<Derived>::SizeAtCompileTime;
327
+ static constexpr int RowsAtCompileTime = DenseBase<Derived>::RowsAtCompileTime;
328
+ static constexpr int ColsAtCompileTime = DenseBase<Derived>::ColsAtCompileTime;
329
+ static constexpr int InnerSizeAtCompileTime = IsRowMajor ? ColsAtCompileTime : RowsAtCompileTime;
330
+ static constexpr int OuterSizeAtCompileTime = IsRowMajor ? RowsAtCompileTime : ColsAtCompileTime;
331
+
332
+ static constexpr bool LinearAccess =
333
+ Evaluator::LinearAccess && static_cast<bool>(functor_traits<Visitor>::LinearAccess);
334
+ static constexpr bool Vectorize = Evaluator::PacketAccess && static_cast<bool>(functor_traits<Visitor>::PacketAccess);
335
+
336
+ static constexpr int PacketSize = packet_traits<Scalar>::size;
337
+ static constexpr int VectorOps =
338
+ Vectorize ? (LinearAccess ? (SizeAtCompileTime / PacketSize)
339
+ : (OuterSizeAtCompileTime * (InnerSizeAtCompileTime / PacketSize)))
340
+ : 0;
341
+ static constexpr int ScalarOps = SizeAtCompileTime - (VectorOps * PacketSize);
342
+ // treat vector op and scalar op as same cost for unroll logic
343
+ static constexpr int TotalOps = VectorOps + ScalarOps;
344
+
345
+ static constexpr int UnrollCost = int(Evaluator::CoeffReadCost) + int(functor_traits<Visitor>::Cost);
346
+ static constexpr bool Unroll = (SizeAtCompileTime != Dynamic) && ((TotalOps * UnrollCost) <= EIGEN_UNROLLING_LIMIT);
347
+ static constexpr int UnrollCount = Unroll ? int(SizeAtCompileTime) : Dynamic;
348
+
349
+ using impl = visitor_impl<Visitor, Evaluator, UnrollCount, Vectorize, LinearAccess, ShortCircuitEvaulation>;
350
+
351
+ static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void run(const DenseBase<Derived>& mat, Visitor& visitor) {
352
+ Evaluator evaluator(mat.derived());
353
+ impl::run(evaluator, visitor);
354
+ }
84
355
  };
85
- } // end namespace internal
356
+
357
+ } // end namespace internal
86
358
 
87
359
  /** Applies the visitor \a visitor to the whole coefficients of the matrix or vector.
88
- *
89
- * The template parameter \a Visitor is the type of the visitor and provides the following interface:
90
- * \code
91
- * struct MyVisitor {
92
- * // called for the first coefficient
93
- * void init(const Scalar& value, Index i, Index j);
94
- * // called for all other coefficients
95
- * void operator() (const Scalar& value, Index i, Index j);
96
- * };
97
- * \endcode
98
- *
99
- * \note compared to one or two \em for \em loops, visitors offer automatic
100
- * unrolling for small fixed size matrix.
101
- *
102
- * \sa minCoeff(Index*,Index*), maxCoeff(Index*,Index*), DenseBase::redux()
103
- */
104
- template<typename Derived>
105
- template<typename Visitor>
106
- EIGEN_DEVICE_FUNC
107
- void DenseBase<Derived>::visit(Visitor& visitor) const
108
- {
109
- typedef typename internal::visitor_evaluator<Derived> ThisEvaluator;
110
- ThisEvaluator thisEval(derived());
111
-
112
- enum {
113
- unroll = SizeAtCompileTime != Dynamic
114
- && SizeAtCompileTime * ThisEvaluator::CoeffReadCost + (SizeAtCompileTime-1) * internal::functor_traits<Visitor>::Cost <= EIGEN_UNROLLING_LIMIT
115
- };
116
- return internal::visitor_impl<Visitor, ThisEvaluator, unroll ? int(SizeAtCompileTime) : Dynamic>::run(thisEval, visitor);
360
+ *
361
+ * The template parameter \a Visitor is the type of the visitor and provides the following interface:
362
+ * \code
363
+ * struct MyVisitor {
364
+ * // called for the first coefficient
365
+ * void init(const Scalar& value, Index i, Index j);
366
+ * // called for all other coefficients
367
+ * void operator() (const Scalar& value, Index i, Index j);
368
+ * };
369
+ * \endcode
370
+ *
371
+ * \note compared to one or two \em for \em loops, visitors offer automatic
372
+ * unrolling for small fixed size matrix.
373
+ *
374
+ * \note if the matrix is empty, then the visitor is left unchanged.
375
+ *
376
+ * \sa minCoeff(Index*,Index*), maxCoeff(Index*,Index*), DenseBase::redux()
377
+ */
378
+ template <typename Derived>
379
+ template <typename Visitor>
380
+ EIGEN_DEVICE_FUNC void DenseBase<Derived>::visit(Visitor& visitor) const {
381
+ using impl = internal::visit_impl<Derived, Visitor, /*ShortCircuitEvaulation*/ false>;
382
+ impl::run(derived(), visitor);
117
383
  }
118
384
 
119
385
  namespace internal {
120
386
 
121
- /** \internal
122
- * \brief Base class to implement min and max visitors
123
- */
124
- template <typename Derived>
125
- struct coeff_visitor
126
- {
127
- typedef typename Derived::Scalar Scalar;
128
- Index row, col;
129
- Scalar res;
130
- EIGEN_DEVICE_FUNC
131
- inline void init(const Scalar& value, Index i, Index j)
132
- {
133
- res = value;
134
- row = i;
135
- col = j;
387
+ template <typename Scalar>
388
+ struct all_visitor {
389
+ using result_type = bool;
390
+ using Packet = typename packet_traits<Scalar>::type;
391
+ EIGEN_DEVICE_FUNC inline void init(const Scalar& value, Index, Index) { res = (value != Scalar(0)); }
392
+ EIGEN_DEVICE_FUNC inline void init(const Scalar& value, Index) { res = (value != Scalar(0)); }
393
+ EIGEN_DEVICE_FUNC inline bool all_predux(const Packet& p) const { return !predux_any(pcmp_eq(p, pzero(p))); }
394
+ EIGEN_DEVICE_FUNC inline void initpacket(const Packet& p, Index, Index) { res = all_predux(p); }
395
+ EIGEN_DEVICE_FUNC inline void initpacket(const Packet& p, Index) { res = all_predux(p); }
396
+ EIGEN_DEVICE_FUNC inline void operator()(const Scalar& value, Index, Index) { res = res && (value != Scalar(0)); }
397
+ EIGEN_DEVICE_FUNC inline void operator()(const Scalar& value, Index) { res = res && (value != Scalar(0)); }
398
+ EIGEN_DEVICE_FUNC inline void packet(const Packet& p, Index, Index) { res = res && all_predux(p); }
399
+ EIGEN_DEVICE_FUNC inline void packet(const Packet& p, Index) { res = res && all_predux(p); }
400
+ EIGEN_DEVICE_FUNC inline bool done() const { return !res; }
401
+ bool res = true;
402
+ };
403
+ template <typename Scalar>
404
+ struct functor_traits<all_visitor<Scalar>> {
405
+ enum { Cost = NumTraits<Scalar>::ReadCost, LinearAccess = true, PacketAccess = packet_traits<Scalar>::HasCmp };
406
+ };
407
+
408
+ template <typename Scalar>
409
+ struct any_visitor {
410
+ using result_type = bool;
411
+ using Packet = typename packet_traits<Scalar>::type;
412
+ EIGEN_DEVICE_FUNC inline void init(const Scalar& value, Index, Index) { res = (value != Scalar(0)); }
413
+ EIGEN_DEVICE_FUNC inline void init(const Scalar& value, Index) { res = (value != Scalar(0)); }
414
+ EIGEN_DEVICE_FUNC inline bool any_predux(const Packet& p) const {
415
+ return predux_any(pandnot(ptrue(p), pcmp_eq(p, pzero(p))));
136
416
  }
417
+ EIGEN_DEVICE_FUNC inline void initpacket(const Packet& p, Index, Index) { res = any_predux(p); }
418
+ EIGEN_DEVICE_FUNC inline void initpacket(const Packet& p, Index) { res = any_predux(p); }
419
+ EIGEN_DEVICE_FUNC inline void operator()(const Scalar& value, Index, Index) { res = res || (value != Scalar(0)); }
420
+ EIGEN_DEVICE_FUNC inline void operator()(const Scalar& value, Index) { res = res || (value != Scalar(0)); }
421
+ EIGEN_DEVICE_FUNC inline void packet(const Packet& p, Index, Index) { res = res || any_predux(p); }
422
+ EIGEN_DEVICE_FUNC inline void packet(const Packet& p, Index) { res = res || any_predux(p); }
423
+ EIGEN_DEVICE_FUNC inline bool done() const { return res; }
424
+ bool res = false;
425
+ };
426
+ template <typename Scalar>
427
+ struct functor_traits<any_visitor<Scalar>> {
428
+ enum { Cost = NumTraits<Scalar>::ReadCost, LinearAccess = true, PacketAccess = packet_traits<Scalar>::HasCmp };
137
429
  };
138
430
 
139
- /** \internal
140
- * \brief Visitor computing the min coefficient with its value and coordinates
141
- *
142
- * \sa DenseBase::minCoeff(Index*, Index*)
143
- */
144
- template <typename Derived>
145
- struct min_coeff_visitor : coeff_visitor<Derived>
146
- {
147
- typedef typename Derived::Scalar Scalar;
148
- EIGEN_DEVICE_FUNC
149
- void operator() (const Scalar& value, Index i, Index j)
150
- {
151
- if(value < this->res)
152
- {
153
- this->res = value;
154
- this->row = i;
155
- this->col = j;
156
- }
431
+ template <typename Scalar>
432
+ struct count_visitor {
433
+ using result_type = Index;
434
+ using Packet = typename packet_traits<Scalar>::type;
435
+ EIGEN_DEVICE_FUNC inline void init(const Scalar& value, Index, Index) { res = value != Scalar(0) ? 1 : 0; }
436
+ EIGEN_DEVICE_FUNC inline void init(const Scalar& value, Index) { res = value != Scalar(0) ? 1 : 0; }
437
+ EIGEN_DEVICE_FUNC inline Index count_redux(const Packet& p) const {
438
+ const Packet cst_one = pset1<Packet>(Scalar(1));
439
+ Packet true_vals = pandnot(cst_one, pcmp_eq(p, pzero(p)));
440
+ Scalar num_true = predux(true_vals);
441
+ return static_cast<Index>(num_true);
442
+ }
443
+ EIGEN_DEVICE_FUNC inline void initpacket(const Packet& p, Index, Index) { res = count_redux(p); }
444
+ EIGEN_DEVICE_FUNC inline void initpacket(const Packet& p, Index) { res = count_redux(p); }
445
+ EIGEN_DEVICE_FUNC inline void operator()(const Scalar& value, Index, Index) {
446
+ if (value != Scalar(0)) res++;
447
+ }
448
+ EIGEN_DEVICE_FUNC inline void operator()(const Scalar& value, Index) {
449
+ if (value != Scalar(0)) res++;
157
450
  }
451
+ EIGEN_DEVICE_FUNC inline void packet(const Packet& p, Index, Index) { res += count_redux(p); }
452
+ EIGEN_DEVICE_FUNC inline void packet(const Packet& p, Index) { res += count_redux(p); }
453
+ Index res = 0;
158
454
  };
159
455
 
160
- template<typename Scalar>
161
- struct functor_traits<min_coeff_visitor<Scalar> > {
456
+ template <typename Scalar>
457
+ struct functor_traits<count_visitor<Scalar>> {
162
458
  enum {
163
- Cost = NumTraits<Scalar>::AddCost
459
+ Cost = NumTraits<Scalar>::AddCost,
460
+ LinearAccess = true,
461
+ // predux is problematic for bool
462
+ PacketAccess = packet_traits<Scalar>::HasCmp && packet_traits<Scalar>::HasAdd && !is_same<Scalar, bool>::value
164
463
  };
165
464
  };
166
465
 
167
- /** \internal
168
- * \brief Visitor computing the max coefficient with its value and coordinates
169
- *
170
- * \sa DenseBase::maxCoeff(Index*, Index*)
171
- */
466
+ template <typename Derived, bool AlwaysTrue = NumTraits<typename traits<Derived>::Scalar>::IsInteger>
467
+ struct all_finite_impl {
468
+ static EIGEN_DEVICE_FUNC inline bool run(const Derived& /*derived*/) { return true; }
469
+ };
470
+ #if !defined(__FINITE_MATH_ONLY__) || !(__FINITE_MATH_ONLY__)
172
471
  template <typename Derived>
173
- struct max_coeff_visitor : coeff_visitor<Derived>
174
- {
175
- typedef typename Derived::Scalar Scalar;
176
- EIGEN_DEVICE_FUNC
177
- void operator() (const Scalar& value, Index i, Index j)
178
- {
179
- if(value > this->res)
180
- {
181
- this->res = value;
182
- this->row = i;
183
- this->col = j;
184
- }
185
- }
472
+ struct all_finite_impl<Derived, false> {
473
+ static EIGEN_DEVICE_FUNC inline bool run(const Derived& derived) { return derived.array().isFiniteTyped().all(); }
186
474
  };
475
+ #endif
187
476
 
188
- template<typename Scalar>
189
- struct functor_traits<max_coeff_visitor<Scalar> > {
190
- enum {
191
- Cost = NumTraits<Scalar>::AddCost
192
- };
193
- };
477
+ } // end namespace internal
194
478
 
195
- } // end namespace internal
196
-
197
- /** \fn DenseBase<Derived>::minCoeff(IndexType* rowId, IndexType* colId) const
198
- * \returns the minimum of all coefficients of *this and puts in *row and *col its location.
199
- * \warning the result is undefined if \c *this contains NaN.
200
- *
201
- * \sa DenseBase::minCoeff(Index*), DenseBase::maxCoeff(Index*,Index*), DenseBase::visit(), DenseBase::minCoeff()
202
- */
203
- template<typename Derived>
204
- template<typename IndexType>
205
- EIGEN_DEVICE_FUNC
206
- typename internal::traits<Derived>::Scalar
207
- DenseBase<Derived>::minCoeff(IndexType* rowId, IndexType* colId) const
208
- {
209
- internal::min_coeff_visitor<Derived> minVisitor;
210
- this->visit(minVisitor);
211
- *rowId = minVisitor.row;
212
- if (colId) *colId = minVisitor.col;
213
- return minVisitor.res;
479
+ /** \returns true if all coefficients are true
480
+ *
481
+ * Example: \include MatrixBase_all.cpp
482
+ * Output: \verbinclude MatrixBase_all.out
483
+ *
484
+ * \sa any(), Cwise::operator<()
485
+ */
486
+ template <typename Derived>
487
+ EIGEN_DEVICE_FUNC inline bool DenseBase<Derived>::all() const {
488
+ using Visitor = internal::all_visitor<Scalar>;
489
+ using impl = internal::visit_impl<Derived, Visitor, /*ShortCircuitEvaulation*/ true>;
490
+ Visitor visitor;
491
+ impl::run(derived(), visitor);
492
+ return visitor.res;
214
493
  }
215
494
 
216
- /** \returns the minimum of all coefficients of *this and puts in *index its location.
217
- * \warning the result is undefined if \c *this contains NaN.
218
- *
219
- * \sa DenseBase::minCoeff(IndexType*,IndexType*), DenseBase::maxCoeff(IndexType*,IndexType*), DenseBase::visit(), DenseBase::minCoeff()
220
- */
221
- template<typename Derived>
222
- template<typename IndexType>
223
- EIGEN_DEVICE_FUNC
224
- typename internal::traits<Derived>::Scalar
225
- DenseBase<Derived>::minCoeff(IndexType* index) const
226
- {
227
- EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived)
228
- internal::min_coeff_visitor<Derived> minVisitor;
229
- this->visit(minVisitor);
230
- *index = IndexType((RowsAtCompileTime==1) ? minVisitor.col : minVisitor.row);
231
- return minVisitor.res;
495
+ /** \returns true if at least one coefficient is true
496
+ *
497
+ * \sa all()
498
+ */
499
+ template <typename Derived>
500
+ EIGEN_DEVICE_FUNC inline bool DenseBase<Derived>::any() const {
501
+ using Visitor = internal::any_visitor<Scalar>;
502
+ using impl = internal::visit_impl<Derived, Visitor, /*ShortCircuitEvaulation*/ true>;
503
+ Visitor visitor;
504
+ impl::run(derived(), visitor);
505
+ return visitor.res;
232
506
  }
233
507
 
234
- /** \fn DenseBase<Derived>::maxCoeff(IndexType* rowId, IndexType* colId) const
235
- * \returns the maximum of all coefficients of *this and puts in *row and *col its location.
236
- * \warning the result is undefined if \c *this contains NaN.
237
- *
238
- * \sa DenseBase::minCoeff(IndexType*,IndexType*), DenseBase::visit(), DenseBase::maxCoeff()
239
- */
240
- template<typename Derived>
241
- template<typename IndexType>
242
- EIGEN_DEVICE_FUNC
243
- typename internal::traits<Derived>::Scalar
244
- DenseBase<Derived>::maxCoeff(IndexType* rowPtr, IndexType* colPtr) const
245
- {
246
- internal::max_coeff_visitor<Derived> maxVisitor;
247
- this->visit(maxVisitor);
248
- *rowPtr = maxVisitor.row;
249
- if (colPtr) *colPtr = maxVisitor.col;
250
- return maxVisitor.res;
508
+ /** \returns the number of coefficients which evaluate to true
509
+ *
510
+ * \sa all(), any()
511
+ */
512
+ template <typename Derived>
513
+ EIGEN_DEVICE_FUNC Index DenseBase<Derived>::count() const {
514
+ using Visitor = internal::count_visitor<Scalar>;
515
+ using impl = internal::visit_impl<Derived, Visitor, /*ShortCircuitEvaulation*/ false>;
516
+ Visitor visitor;
517
+ impl::run(derived(), visitor);
518
+ return visitor.res;
251
519
  }
252
520
 
253
- /** \returns the maximum of all coefficients of *this and puts in *index its location.
254
- * \warning the result is undefined if \c *this contains NaN.
255
- *
256
- * \sa DenseBase::maxCoeff(IndexType*,IndexType*), DenseBase::minCoeff(IndexType*,IndexType*), DenseBase::visitor(), DenseBase::maxCoeff()
257
- */
258
- template<typename Derived>
259
- template<typename IndexType>
260
- EIGEN_DEVICE_FUNC
261
- typename internal::traits<Derived>::Scalar
262
- DenseBase<Derived>::maxCoeff(IndexType* index) const
263
- {
264
- EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived)
265
- internal::max_coeff_visitor<Derived> maxVisitor;
266
- this->visit(maxVisitor);
267
- *index = (RowsAtCompileTime==1) ? maxVisitor.col : maxVisitor.row;
268
- return maxVisitor.res;
521
+ template <typename Derived>
522
+ EIGEN_DEVICE_FUNC inline bool DenseBase<Derived>::hasNaN() const {
523
+ return derived().cwiseTypedNotEqual(derived()).any();
524
+ }
525
+
526
+ /** \returns true if \c *this contains only finite numbers, i.e., no NaN and no +/-INF values.
527
+ *
528
+ * \sa hasNaN()
529
+ */
530
+ template <typename Derived>
531
+ EIGEN_DEVICE_FUNC inline bool DenseBase<Derived>::allFinite() const {
532
+ return internal::all_finite_impl<Derived>::run(derived());
269
533
  }
270
534
 
271
- } // end namespace Eigen
535
+ } // end namespace Eigen
272
536
 
273
- #endif // EIGEN_VISITOR_H
537
+ #endif // EIGEN_VISITOR_H