@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
@@ -0,0 +1,101 @@
1
+ // This file is part of Eigen, a lightweight C++ template library
2
+ // for linear algebra.
3
+ //
4
+ // Copyright (C) 2014 Benoit Steiner <benoit.steiner.goog@gmail.com>
5
+ // Copyright (C) 2018 Deven Desai <deven.desai.amd@gmail.com>
6
+ //
7
+ // This Source Code Form is subject to the terms of the Mozilla
8
+ // Public License v. 2.0. If a copy of the MPL was not distributed
9
+ // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
10
+
11
+ #if defined(EIGEN_USE_GPU) && !defined(EIGEN_CORE_GPU_HIP_CUDA_DEFINES_H)
12
+ #define EIGEN_CXX11_TENSOR_GPU_HIP_CUDA_DEFINES_H
13
+
14
+ // Note that we are using EIGEN_USE_HIP here instead of EIGEN_HIPCC...this is by design
15
+ // There is code in the Tensorflow codebase that will define EIGEN_USE_GPU, but
16
+ // for some reason gets sent to the gcc/host compiler instead of the gpu/nvcc/hipcc compiler
17
+ // When compiling such files, gcc will end up trying to pick up the CUDA headers by
18
+ // default (see the code within "unsupported/Eigen/CXX11/Tensor" that is guarded by EIGEN_USE_GPU)
19
+ // This will obviously not work when trying to compile tensorflow on a system with no CUDA
20
+ // To work around this issue for HIP systems (and leave the default behaviour intact), the
21
+ // HIP tensorflow build defines EIGEN_USE_HIP when compiling all source files, and
22
+ // "unsupported/Eigen/CXX11/Tensor" has been updated to use HIP header when EIGEN_USE_HIP is
23
+ // defined. In continuation of that requirement, the guard here needs to be EIGEN_USE_HIP as well
24
+
25
+ #if defined(EIGEN_USE_HIP)
26
+
27
+ #define gpuStream_t hipStream_t
28
+ #define gpuDeviceProp_t hipDeviceProp_t
29
+ #define gpuError_t hipError_t
30
+ #define gpuSuccess hipSuccess
31
+ #define gpuErrorNotReady hipErrorNotReady
32
+ #define gpuGetDeviceCount hipGetDeviceCount
33
+ #define gpuGetLastError hipGetLastError
34
+ #define gpuPeekAtLastError hipPeekAtLastError
35
+ #define gpuGetErrorName hipGetErrorName
36
+ #define gpuGetErrorString hipGetErrorString
37
+ #define gpuGetDeviceProperties hipGetDeviceProperties
38
+ #define gpuStreamDefault hipStreamDefault
39
+ #define gpuGetDevice hipGetDevice
40
+ #define gpuSetDevice hipSetDevice
41
+ #define gpuMalloc hipMalloc
42
+ #define gpuFree hipFree
43
+ #define gpuMemsetAsync hipMemsetAsync
44
+ #define gpuMemset2DAsync hipMemset2DAsync
45
+ #define gpuMemcpyAsync hipMemcpyAsync
46
+ #define gpuMemcpyDeviceToDevice hipMemcpyDeviceToDevice
47
+ #define gpuMemcpyDeviceToHost hipMemcpyDeviceToHost
48
+ #define gpuMemcpyHostToDevice hipMemcpyHostToDevice
49
+ #define gpuStreamQuery hipStreamQuery
50
+ #define gpuSharedMemConfig hipSharedMemConfig
51
+ #define gpuDeviceSetSharedMemConfig hipDeviceSetSharedMemConfig
52
+ #define gpuStreamSynchronize hipStreamSynchronize
53
+ #define gpuDeviceSynchronize hipDeviceSynchronize
54
+ #define gpuMemcpy hipMemcpy
55
+
56
+ #else
57
+
58
+ #define gpuStream_t cudaStream_t
59
+ #define gpuDeviceProp_t cudaDeviceProp
60
+ #define gpuError_t cudaError_t
61
+ #define gpuSuccess cudaSuccess
62
+ #define gpuErrorNotReady cudaErrorNotReady
63
+ #define gpuGetDeviceCount cudaGetDeviceCount
64
+ #define gpuGetLastError cudaGetLastError
65
+ #define gpuPeekAtLastError cudaPeekAtLastError
66
+ #define gpuGetErrorName cudaGetErrorName
67
+ #define gpuGetErrorString cudaGetErrorString
68
+ #define gpuGetDeviceProperties cudaGetDeviceProperties
69
+ #define gpuStreamDefault cudaStreamDefault
70
+ #define gpuGetDevice cudaGetDevice
71
+ #define gpuSetDevice cudaSetDevice
72
+ #define gpuMalloc cudaMalloc
73
+ #define gpuFree cudaFree
74
+ #define gpuMemsetAsync cudaMemsetAsync
75
+ #define gpuMemset2DAsync cudaMemset2DAsync
76
+ #define gpuMemcpyAsync cudaMemcpyAsync
77
+ #define gpuMemcpyDeviceToDevice cudaMemcpyDeviceToDevice
78
+ #define gpuMemcpyDeviceToHost cudaMemcpyDeviceToHost
79
+ #define gpuMemcpyHostToDevice cudaMemcpyHostToDevice
80
+ #define gpuStreamQuery cudaStreamQuery
81
+ #define gpuSharedMemConfig cudaSharedMemConfig
82
+ #define gpuDeviceSetSharedMemConfig cudaDeviceSetSharedMemConfig
83
+ #define gpuStreamSynchronize cudaStreamSynchronize
84
+ #define gpuDeviceSynchronize cudaDeviceSynchronize
85
+ #define gpuMemcpy cudaMemcpy
86
+
87
+ #endif
88
+
89
+ // gpu_assert can be overridden
90
+ #ifndef gpu_assert
91
+
92
+ #if defined(EIGEN_HIP_DEVICE_COMPILE)
93
+ // HIPCC do not support the use of assert on the GPU side.
94
+ #define gpu_assert(COND)
95
+ #else
96
+ #define gpu_assert(COND) eigen_assert(COND)
97
+ #endif
98
+
99
+ #endif // gpu_assert
100
+
101
+ #endif // EIGEN_CORE_GPU_HIP_CUDA_DEFINES_H
@@ -0,0 +1,45 @@
1
+ // This file is part of Eigen, a lightweight C++ template library
2
+ // for linear algebra.
3
+ //
4
+ // Copyright (C) 2014 Benoit Steiner <benoit.steiner.goog@gmail.com>
5
+ // Copyright (C) 2018 Deven Desai <deven.desai.amd@gmail.com>
6
+ //
7
+ // This Source Code Form is subject to the terms of the Mozilla
8
+ // Public License v. 2.0. If a copy of the MPL was not distributed
9
+ // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
10
+
11
+ #if defined(EIGEN_CORE_GPU_HIP_CUDA_DEFINES_H)
12
+
13
+ #ifndef EIGEN_PERMANENTLY_ENABLE_GPU_HIP_CUDA_DEFINES
14
+
15
+ #undef gpuStream_t
16
+ #undef gpuDeviceProp_t
17
+ #undef gpuError_t
18
+ #undef gpuSuccess
19
+ #undef gpuErrorNotReady
20
+ #undef gpuGetDeviceCount
21
+ #undef gpuGetErrorString
22
+ #undef gpuGetDeviceProperties
23
+ #undef gpuStreamDefault
24
+ #undef gpuGetDevice
25
+ #undef gpuSetDevice
26
+ #undef gpuMalloc
27
+ #undef gpuFree
28
+ #undef gpuMemsetAsync
29
+ #undef gpuMemset2DAsync
30
+ #undef gpuMemcpyAsync
31
+ #undef gpuMemcpyDeviceToDevice
32
+ #undef gpuMemcpyDeviceToHost
33
+ #undef gpuMemcpyHostToDevice
34
+ #undef gpuStreamQuery
35
+ #undef gpuSharedMemConfig
36
+ #undef gpuDeviceSetSharedMemConfig
37
+ #undef gpuStreamSynchronize
38
+ #undef gpuDeviceSynchronize
39
+ #undef gpuMemcpy
40
+
41
+ #endif // EIGEN_PERMANENTLY_ENABLE_GPU_HIP_CUDA_DEFINES
42
+
43
+ #undef EIGEN_CORE_GPU_HIP_CUDA_DEFINES_H
44
+
45
+ #endif // EIGEN_CORE_GPU_HIP_CUDA_DEFINES_H
@@ -0,0 +1,487 @@
1
+ // This file is part of Eigen, a lightweight C++ template library
2
+ // for linear algebra.
3
+ //
4
+ // Copyright (C) 2017 Gael Guennebaud <gael.guennebaud@inria.fr>
5
+ //
6
+ // This Source Code Form is subject to the terms of the Mozilla
7
+ // Public License v. 2.0. If a copy of the MPL was not distributed
8
+ // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
9
+
10
+ #ifndef EIGEN_INDEXED_VIEW_HELPER_H
11
+ #define EIGEN_INDEXED_VIEW_HELPER_H
12
+
13
+ // IWYU pragma: private
14
+ #include "../InternalHeaderCheck.h"
15
+
16
+ namespace Eigen {
17
+
18
+ namespace internal {
19
+ struct symbolic_last_tag {};
20
+
21
+ struct all_t {};
22
+
23
+ } // namespace internal
24
+
25
+ namespace placeholders {
26
+
27
+ typedef symbolic::SymbolExpr<internal::symbolic_last_tag> last_t;
28
+
29
+ /** \var last
30
+ * \ingroup Core_Module
31
+ *
32
+ * Can be used as a parameter to Eigen::seq and Eigen::seqN functions to symbolically reference the last
33
+ * element/row/columns of the underlying vector or matrix once passed to DenseBase::operator()(const RowIndices&, const
34
+ * ColIndices&).
35
+ *
36
+ * This symbolic placeholder supports standard arithmetic operations.
37
+ *
38
+ * A typical usage example would be:
39
+ * \code
40
+ * using namespace Eigen;
41
+ * using Eigen::placeholders::last;
42
+ * VectorXd v(n);
43
+ * v(seq(2,last-2)).setOnes();
44
+ * \endcode
45
+ *
46
+ * \sa end
47
+ */
48
+ static constexpr const last_t last;
49
+
50
+ typedef symbolic::AddExpr<symbolic::SymbolExpr<internal::symbolic_last_tag>,
51
+ symbolic::ValueExpr<Eigen::internal::FixedInt<1>>>
52
+ lastp1_t;
53
+ typedef Eigen::internal::all_t all_t;
54
+
55
+ /** \var lastp1
56
+ * \ingroup Core_Module
57
+ *
58
+ * Can be used as a parameter to Eigen::seq and Eigen::seqN functions to symbolically
59
+ * reference the last+1 element/row/columns of the underlying vector or matrix once
60
+ * passed to DenseBase::operator()(const RowIndices&, const ColIndices&).
61
+ *
62
+ * This symbolic placeholder supports standard arithmetic operations.
63
+ * It is essentially an alias to last+fix<1>.
64
+ *
65
+ * \sa last
66
+ */
67
+ #ifdef EIGEN_PARSED_BY_DOXYGEN
68
+ static constexpr auto lastp1 = last + fix<1>;
69
+ #else
70
+ // Using a FixedExpr<1> expression is important here to make sure the compiler
71
+ // can fully optimize the computation starting indices with zero overhead.
72
+ static constexpr lastp1_t lastp1 = lastp1_t{};
73
+ #endif
74
+
75
+ /** \var end
76
+ * \ingroup Core_Module
77
+ * \sa lastp1
78
+ */
79
+ static constexpr lastp1_t end = lastp1;
80
+
81
+ /** \var all
82
+ * \ingroup Core_Module
83
+ * Can be used as a parameter to DenseBase::operator()(const RowIndices&, const ColIndices&) to index all rows or
84
+ * columns
85
+ */
86
+ static constexpr Eigen::internal::all_t all;
87
+
88
+ } // namespace placeholders
89
+
90
+ namespace internal {
91
+
92
+ // Evaluate a symbolic expression or constant given the "size" of an object, allowing
93
+ // any symbols like `last` to be evaluated. The default here assumes a dynamic constant.
94
+ template <typename Expr, int SizeAtCompileTime, typename EnableIf = void>
95
+ struct SymbolicExpressionEvaluator {
96
+ static constexpr Index ValueAtCompileTime = Undefined;
97
+ static Index eval(const Expr& expr, Index /*size*/) { return static_cast<Index>(expr); }
98
+ };
99
+
100
+ // Symbolic expression with size known at compile-time.
101
+ template <typename Expr, int SizeAtCompileTime>
102
+ struct SymbolicExpressionEvaluator<Expr, SizeAtCompileTime, std::enable_if_t<symbolic::is_symbolic<Expr>::value>> {
103
+ static constexpr Index ValueAtCompileTime =
104
+ Expr::Derived::eval_at_compile_time(Eigen::placeholders::last = fix<SizeAtCompileTime - 1>);
105
+ static Index eval(const Expr& expr, Index /*size*/) {
106
+ return expr.eval(Eigen::placeholders::last = fix<SizeAtCompileTime - 1>);
107
+ }
108
+ };
109
+
110
+ // Symbolic expression with dynamic size.
111
+ template <typename Expr>
112
+ struct SymbolicExpressionEvaluator<Expr, Dynamic, std::enable_if_t<symbolic::is_symbolic<Expr>::value>> {
113
+ static constexpr Index ValueAtCompileTime = Undefined;
114
+ static Index eval(const Expr& expr, Index size) { return expr.eval(Eigen::placeholders::last = size - 1); }
115
+ };
116
+
117
+ // Fixed int.
118
+ template <int N, int SizeAtCompileTime>
119
+ struct SymbolicExpressionEvaluator<FixedInt<N>, SizeAtCompileTime, void> {
120
+ static constexpr Index ValueAtCompileTime = static_cast<Index>(N);
121
+ static Index eval(const FixedInt<N>& /*expr*/, Index /*size*/) { return ValueAtCompileTime; }
122
+ };
123
+
124
+ //--------------------------------------------------------------------------------
125
+ // Handling of generic indices (e.g. array)
126
+ //--------------------------------------------------------------------------------
127
+
128
+ // Potentially wrap indices in a type that is better-suited for IndexedView evaluation.
129
+ template <typename Indices, int NestedSizeAtCompileTime, typename EnableIf = void>
130
+ struct IndexedViewHelperIndicesWrapper {
131
+ using type = Indices;
132
+ static const type& CreateIndexSequence(const Indices& indices, Index /*nested_size*/) { return indices; }
133
+ };
134
+
135
+ // Extract compile-time and runtime first, size, increments.
136
+ template <typename Indices, typename EnableIf = void>
137
+ struct IndexedViewHelper {
138
+ static constexpr Index FirstAtCompileTime = Undefined;
139
+ static constexpr Index SizeAtCompileTime = array_size<Indices>::value;
140
+ static constexpr Index IncrAtCompileTime = Undefined;
141
+
142
+ static constexpr Index first(const Indices& indices) { return static_cast<Index>(indices[0]); }
143
+ static constexpr Index size(const Indices& indices) { return index_list_size(indices); }
144
+ static constexpr Index incr(const Indices& /*indices*/) { return Undefined; }
145
+ };
146
+
147
+ //--------------------------------------------------------------------------------
148
+ // Handling of ArithmeticSequence
149
+ //--------------------------------------------------------------------------------
150
+
151
+ template <Index FirstAtCompileTime_, Index SizeAtCompileTime_, Index IncrAtCompileTime_>
152
+ class ArithmeticSequenceRange {
153
+ public:
154
+ static constexpr Index FirstAtCompileTime = FirstAtCompileTime_;
155
+ static constexpr Index SizeAtCompileTime = SizeAtCompileTime_;
156
+ static constexpr Index IncrAtCompileTime = IncrAtCompileTime_;
157
+
158
+ constexpr ArithmeticSequenceRange(Index first, Index size, Index incr) : first_{first}, size_{size}, incr_{incr} {}
159
+ constexpr Index operator[](Index i) const { return first() + i * incr(); }
160
+ constexpr Index first() const noexcept { return first_.value(); }
161
+ constexpr Index size() const noexcept { return size_.value(); }
162
+ constexpr Index incr() const noexcept { return incr_.value(); }
163
+
164
+ private:
165
+ variable_if_dynamicindex<Index, int(FirstAtCompileTime)> first_;
166
+ variable_if_dynamic<Index, int(SizeAtCompileTime)> size_;
167
+ variable_if_dynamicindex<Index, int(IncrAtCompileTime)> incr_;
168
+ };
169
+
170
+ template <typename FirstType, typename SizeType, typename IncrType, int NestedSizeAtCompileTime>
171
+ struct IndexedViewHelperIndicesWrapper<ArithmeticSequence<FirstType, SizeType, IncrType>, NestedSizeAtCompileTime,
172
+ void> {
173
+ static constexpr Index EvalFirstAtCompileTime =
174
+ SymbolicExpressionEvaluator<FirstType, NestedSizeAtCompileTime>::ValueAtCompileTime;
175
+ static constexpr Index EvalSizeAtCompileTime =
176
+ SymbolicExpressionEvaluator<SizeType, NestedSizeAtCompileTime>::ValueAtCompileTime;
177
+ static constexpr Index EvalIncrAtCompileTime =
178
+ SymbolicExpressionEvaluator<IncrType, NestedSizeAtCompileTime>::ValueAtCompileTime;
179
+
180
+ static constexpr Index FirstAtCompileTime =
181
+ (int(EvalFirstAtCompileTime) == Undefined) ? Index(DynamicIndex) : EvalFirstAtCompileTime;
182
+ static constexpr Index SizeAtCompileTime =
183
+ (int(EvalSizeAtCompileTime) == Undefined) ? Index(Dynamic) : EvalSizeAtCompileTime;
184
+ static constexpr Index IncrAtCompileTime =
185
+ (int(EvalIncrAtCompileTime) == Undefined) ? Index(DynamicIndex) : EvalIncrAtCompileTime;
186
+
187
+ using Indices = ArithmeticSequence<FirstType, SizeType, IncrType>;
188
+ using type = ArithmeticSequenceRange<FirstAtCompileTime, SizeAtCompileTime, IncrAtCompileTime>;
189
+
190
+ static type CreateIndexSequence(const Indices& indices, Index nested_size) {
191
+ Index first =
192
+ SymbolicExpressionEvaluator<FirstType, NestedSizeAtCompileTime>::eval(indices.firstObject(), nested_size);
193
+ Index size =
194
+ SymbolicExpressionEvaluator<SizeType, NestedSizeAtCompileTime>::eval(indices.sizeObject(), nested_size);
195
+ Index incr =
196
+ SymbolicExpressionEvaluator<IncrType, NestedSizeAtCompileTime>::eval(indices.incrObject(), nested_size);
197
+ return type(first, size, incr);
198
+ }
199
+ };
200
+
201
+ template <Index FirstAtCompileTime_, Index SizeAtCompileTime_, Index IncrAtCompileTime_>
202
+ struct IndexedViewHelper<ArithmeticSequenceRange<FirstAtCompileTime_, SizeAtCompileTime_, IncrAtCompileTime_>, void> {
203
+ public:
204
+ using Indices = ArithmeticSequenceRange<FirstAtCompileTime_, SizeAtCompileTime_, IncrAtCompileTime_>;
205
+ static constexpr Index FirstAtCompileTime = Indices::FirstAtCompileTime;
206
+ static constexpr Index SizeAtCompileTime = Indices::SizeAtCompileTime;
207
+ static constexpr Index IncrAtCompileTime = Indices::IncrAtCompileTime;
208
+ static Index first(const Indices& indices) { return indices.first(); }
209
+ static Index size(const Indices& indices) { return indices.size(); }
210
+ static Index incr(const Indices& indices) { return indices.incr(); }
211
+ };
212
+
213
+ //--------------------------------------------------------------------------------
214
+ // Handling of a single index.
215
+ //--------------------------------------------------------------------------------
216
+
217
+ template <Index ValueAtCompileTime>
218
+ class SingleRange {
219
+ public:
220
+ static constexpr Index FirstAtCompileTime = ValueAtCompileTime;
221
+ static constexpr Index SizeAtCompileTime = Index(1);
222
+ static constexpr Index IncrAtCompileTime = Index(1); // Needs to be 1 to be treated as block-like.
223
+
224
+ constexpr SingleRange(Index v) noexcept : value_(v) {}
225
+ constexpr Index operator[](Index) const noexcept { return first(); }
226
+ constexpr Index first() const noexcept { return value_.value(); }
227
+ constexpr Index size() const noexcept { return SizeAtCompileTime; }
228
+ constexpr Index incr() const noexcept { return IncrAtCompileTime; }
229
+
230
+ private:
231
+ variable_if_dynamicindex<Index, int(ValueAtCompileTime)> value_;
232
+ };
233
+
234
+ template <typename T>
235
+ struct is_single_range : public std::false_type {};
236
+
237
+ template <Index ValueAtCompileTime>
238
+ struct is_single_range<SingleRange<ValueAtCompileTime>> : public std::true_type {};
239
+
240
+ template <typename SingleIndex, int NestedSizeAtCompileTime>
241
+ struct IndexedViewHelperIndicesWrapper<
242
+ SingleIndex, NestedSizeAtCompileTime,
243
+ std::enable_if_t<std::is_integral<SingleIndex>::value || symbolic::is_symbolic<SingleIndex>::value>> {
244
+ static constexpr Index EvalValueAtCompileTime =
245
+ SymbolicExpressionEvaluator<SingleIndex, NestedSizeAtCompileTime>::ValueAtCompileTime;
246
+ static constexpr Index ValueAtCompileTime =
247
+ (int(EvalValueAtCompileTime) == Undefined) ? Index(DynamicIndex) : EvalValueAtCompileTime;
248
+ using type = SingleRange<ValueAtCompileTime>;
249
+ static type CreateIndexSequence(const SingleIndex& index, Index nested_size) {
250
+ return type(SymbolicExpressionEvaluator<SingleIndex, NestedSizeAtCompileTime>::eval(index, nested_size));
251
+ }
252
+ };
253
+
254
+ template <int N, int NestedSizeAtCompileTime>
255
+ struct IndexedViewHelperIndicesWrapper<FixedInt<N>, NestedSizeAtCompileTime, void> {
256
+ using type = SingleRange<Index(N)>;
257
+ static type CreateIndexSequence(const FixedInt<N>& /*index*/) { return type(Index(N)); }
258
+ };
259
+
260
+ template <Index ValueAtCompileTime>
261
+ struct IndexedViewHelper<SingleRange<ValueAtCompileTime>, void> {
262
+ using Indices = SingleRange<ValueAtCompileTime>;
263
+ static constexpr Index FirstAtCompileTime = Indices::FirstAtCompileTime;
264
+ static constexpr Index SizeAtCompileTime = Indices::SizeAtCompileTime;
265
+ static constexpr Index IncrAtCompileTime = Indices::IncrAtCompileTime;
266
+
267
+ static constexpr Index first(const Indices& indices) { return indices.first(); }
268
+ static constexpr Index size(const Indices& /*indices*/) { return SizeAtCompileTime; }
269
+ static constexpr Index incr(const Indices& /*indices*/) { return IncrAtCompileTime; }
270
+ };
271
+
272
+ //--------------------------------------------------------------------------------
273
+ // Handling of all
274
+ //--------------------------------------------------------------------------------
275
+
276
+ // Convert a symbolic 'all' into a usable range type
277
+ template <Index SizeAtCompileTime_>
278
+ class AllRange {
279
+ public:
280
+ static constexpr Index FirstAtCompileTime = Index(0);
281
+ static constexpr Index SizeAtCompileTime = SizeAtCompileTime_;
282
+ static constexpr Index IncrAtCompileTime = Index(1);
283
+ constexpr AllRange(Index size) : size_(size) {}
284
+ constexpr Index operator[](Index i) const noexcept { return i; }
285
+ constexpr Index first() const noexcept { return FirstAtCompileTime; }
286
+ constexpr Index size() const noexcept { return size_.value(); }
287
+ constexpr Index incr() const noexcept { return IncrAtCompileTime; }
288
+
289
+ private:
290
+ variable_if_dynamic<Index, int(SizeAtCompileTime)> size_;
291
+ };
292
+
293
+ template <int NestedSizeAtCompileTime>
294
+ struct IndexedViewHelperIndicesWrapper<all_t, NestedSizeAtCompileTime, void> {
295
+ using type = AllRange<Index(NestedSizeAtCompileTime)>;
296
+ static type CreateIndexSequence(const all_t& /*indices*/, Index nested_size) { return type(nested_size); }
297
+ };
298
+
299
+ template <Index SizeAtCompileTime_>
300
+ struct IndexedViewHelper<AllRange<SizeAtCompileTime_>, void> {
301
+ using Indices = AllRange<SizeAtCompileTime_>;
302
+ static constexpr Index FirstAtCompileTime = Indices::FirstAtCompileTime;
303
+ static constexpr Index SizeAtCompileTime = Indices::SizeAtCompileTime;
304
+ static constexpr Index IncrAtCompileTime = Indices::IncrAtCompileTime;
305
+
306
+ static Index first(const Indices& indices) { return indices.first(); }
307
+ static Index size(const Indices& indices) { return indices.size(); }
308
+ static Index incr(const Indices& indices) { return indices.incr(); }
309
+ };
310
+
311
+ // this helper class assumes internal::valid_indexed_view_overload<RowIndices, ColIndices>::value == true
312
+ template <typename Derived, typename RowIndices, typename ColIndices, typename EnableIf = void>
313
+ struct IndexedViewSelector;
314
+
315
+ template <typename Indices, int SizeAtCompileTime>
316
+ using IvcType = typename internal::IndexedViewHelperIndicesWrapper<Indices, SizeAtCompileTime>::type;
317
+
318
+ template <int SizeAtCompileTime, typename Indices>
319
+ inline IvcType<Indices, SizeAtCompileTime> CreateIndexSequence(size_t size, const Indices& indices) {
320
+ return internal::IndexedViewHelperIndicesWrapper<Indices, SizeAtCompileTime>::CreateIndexSequence(indices, size);
321
+ }
322
+
323
+ // Generic
324
+ template <typename Derived, typename RowIndices, typename ColIndices>
325
+ struct IndexedViewSelector<Derived, RowIndices, ColIndices,
326
+ std::enable_if_t<internal::traits<
327
+ IndexedView<Derived, IvcType<RowIndices, Derived::RowsAtCompileTime>,
328
+ IvcType<ColIndices, Derived::ColsAtCompileTime>>>::ReturnAsIndexedView>> {
329
+ using ReturnType = IndexedView<Derived, IvcType<RowIndices, Derived::RowsAtCompileTime>,
330
+ IvcType<ColIndices, Derived::ColsAtCompileTime>>;
331
+ using ConstReturnType = IndexedView<const Derived, IvcType<RowIndices, Derived::RowsAtCompileTime>,
332
+ IvcType<ColIndices, Derived::ColsAtCompileTime>>;
333
+
334
+ static inline ReturnType run(Derived& derived, const RowIndices& rowIndices, const ColIndices& colIndices) {
335
+ return ReturnType(derived, CreateIndexSequence<Derived::RowsAtCompileTime>(derived.rows(), rowIndices),
336
+ CreateIndexSequence<Derived::ColsAtCompileTime>(derived.cols(), colIndices));
337
+ }
338
+ static inline ConstReturnType run(const Derived& derived, const RowIndices& rowIndices,
339
+ const ColIndices& colIndices) {
340
+ return ConstReturnType(derived, CreateIndexSequence<Derived::RowsAtCompileTime>(derived.rows(), rowIndices),
341
+ CreateIndexSequence<Derived::ColsAtCompileTime>(derived.cols(), colIndices));
342
+ }
343
+ };
344
+
345
+ // Block
346
+ template <typename Derived, typename RowIndices, typename ColIndices>
347
+ struct IndexedViewSelector<
348
+ Derived, RowIndices, ColIndices,
349
+ std::enable_if_t<internal::traits<IndexedView<Derived, IvcType<RowIndices, Derived::RowsAtCompileTime>,
350
+ IvcType<ColIndices, Derived::ColsAtCompileTime>>>::ReturnAsBlock>> {
351
+ using ActualRowIndices = IvcType<RowIndices, Derived::RowsAtCompileTime>;
352
+ using ActualColIndices = IvcType<ColIndices, Derived::ColsAtCompileTime>;
353
+ using IndexedViewType = IndexedView<Derived, ActualRowIndices, ActualColIndices>;
354
+ using ConstIndexedViewType = IndexedView<const Derived, ActualRowIndices, ActualColIndices>;
355
+ using ReturnType = typename internal::traits<IndexedViewType>::BlockType;
356
+ using ConstReturnType = typename internal::traits<ConstIndexedViewType>::BlockType;
357
+ using RowHelper = internal::IndexedViewHelper<ActualRowIndices>;
358
+ using ColHelper = internal::IndexedViewHelper<ActualColIndices>;
359
+
360
+ static inline ReturnType run(Derived& derived, const RowIndices& rowIndices, const ColIndices& colIndices) {
361
+ auto actualRowIndices = CreateIndexSequence<Derived::RowsAtCompileTime>(derived.rows(), rowIndices);
362
+ auto actualColIndices = CreateIndexSequence<Derived::ColsAtCompileTime>(derived.cols(), colIndices);
363
+ return ReturnType(derived, RowHelper::first(actualRowIndices), ColHelper::first(actualColIndices),
364
+ RowHelper::size(actualRowIndices), ColHelper::size(actualColIndices));
365
+ }
366
+ static inline ConstReturnType run(const Derived& derived, const RowIndices& rowIndices,
367
+ const ColIndices& colIndices) {
368
+ auto actualRowIndices = CreateIndexSequence<Derived::RowsAtCompileTime>(derived.rows(), rowIndices);
369
+ auto actualColIndices = CreateIndexSequence<Derived::ColsAtCompileTime>(derived.cols(), colIndices);
370
+ return ConstReturnType(derived, RowHelper::first(actualRowIndices), ColHelper::first(actualColIndices),
371
+ RowHelper::size(actualRowIndices), ColHelper::size(actualColIndices));
372
+ }
373
+ };
374
+
375
+ // Scalar
376
+ template <typename Derived, typename RowIndices, typename ColIndices>
377
+ struct IndexedViewSelector<
378
+ Derived, RowIndices, ColIndices,
379
+ std::enable_if_t<internal::traits<IndexedView<Derived, IvcType<RowIndices, Derived::RowsAtCompileTime>,
380
+ IvcType<ColIndices, Derived::ColsAtCompileTime>>>::ReturnAsScalar>> {
381
+ using ReturnType = typename DenseBase<Derived>::Scalar&;
382
+ using ConstReturnType = typename DenseBase<Derived>::CoeffReturnType;
383
+ using ActualRowIndices = IvcType<RowIndices, Derived::RowsAtCompileTime>;
384
+ using ActualColIndices = IvcType<ColIndices, Derived::ColsAtCompileTime>;
385
+ using RowHelper = internal::IndexedViewHelper<ActualRowIndices>;
386
+ using ColHelper = internal::IndexedViewHelper<ActualColIndices>;
387
+ static inline ReturnType run(Derived& derived, const RowIndices& rowIndices, const ColIndices& colIndices) {
388
+ auto actualRowIndices = CreateIndexSequence<Derived::RowsAtCompileTime>(derived.rows(), rowIndices);
389
+ auto actualColIndices = CreateIndexSequence<Derived::ColsAtCompileTime>(derived.cols(), colIndices);
390
+ return derived(RowHelper::first(actualRowIndices), ColHelper::first(actualColIndices));
391
+ }
392
+ static inline ConstReturnType run(const Derived& derived, const RowIndices& rowIndices,
393
+ const ColIndices& colIndices) {
394
+ auto actualRowIndices = CreateIndexSequence<Derived::RowsAtCompileTime>(derived.rows(), rowIndices);
395
+ auto actualColIndices = CreateIndexSequence<Derived::ColsAtCompileTime>(derived.cols(), colIndices);
396
+ return derived(RowHelper::first(actualRowIndices), ColHelper::first(actualColIndices));
397
+ }
398
+ };
399
+
400
+ // this helper class assumes internal::is_valid_index_type<Indices>::value == false
401
+ template <typename Derived, typename Indices, typename EnableIf = void>
402
+ struct VectorIndexedViewSelector;
403
+
404
+ // Generic
405
+ template <typename Derived, typename Indices>
406
+ struct VectorIndexedViewSelector<
407
+ Derived, Indices,
408
+ std::enable_if_t<!internal::is_single_range<IvcType<Indices, Derived::SizeAtCompileTime>>::value &&
409
+ internal::IndexedViewHelper<IvcType<Indices, Derived::SizeAtCompileTime>>::IncrAtCompileTime !=
410
+ 1>> {
411
+ static constexpr bool IsRowMajor = DenseBase<Derived>::IsRowMajor;
412
+ using ZeroIndex = internal::SingleRange<Index(0)>;
413
+ using RowMajorReturnType = IndexedView<Derived, ZeroIndex, IvcType<Indices, Derived::SizeAtCompileTime>>;
414
+ using ConstRowMajorReturnType = IndexedView<const Derived, ZeroIndex, IvcType<Indices, Derived::SizeAtCompileTime>>;
415
+
416
+ using ColMajorReturnType = IndexedView<Derived, IvcType<Indices, Derived::SizeAtCompileTime>, ZeroIndex>;
417
+ using ConstColMajorReturnType = IndexedView<const Derived, IvcType<Indices, Derived::SizeAtCompileTime>, ZeroIndex>;
418
+
419
+ using ReturnType = typename internal::conditional<IsRowMajor, RowMajorReturnType, ColMajorReturnType>::type;
420
+ using ConstReturnType =
421
+ typename internal::conditional<IsRowMajor, ConstRowMajorReturnType, ConstColMajorReturnType>::type;
422
+
423
+ template <bool UseRowMajor = IsRowMajor, std::enable_if_t<UseRowMajor, bool> = true>
424
+ static inline RowMajorReturnType run(Derived& derived, const Indices& indices) {
425
+ return RowMajorReturnType(derived, ZeroIndex(0),
426
+ CreateIndexSequence<Derived::ColsAtCompileTime>(derived.cols(), indices));
427
+ }
428
+ template <bool UseRowMajor = IsRowMajor, std::enable_if_t<UseRowMajor, bool> = true>
429
+ static inline ConstRowMajorReturnType run(const Derived& derived, const Indices& indices) {
430
+ return ConstRowMajorReturnType(derived, ZeroIndex(0),
431
+ CreateIndexSequence<Derived::ColsAtCompileTime>(derived.cols(), indices));
432
+ }
433
+ template <bool UseRowMajor = IsRowMajor, std::enable_if_t<!UseRowMajor, bool> = true>
434
+ static inline ColMajorReturnType run(Derived& derived, const Indices& indices) {
435
+ return ColMajorReturnType(derived, CreateIndexSequence<Derived::RowsAtCompileTime>(derived.rows(), indices),
436
+ ZeroIndex(0));
437
+ }
438
+ template <bool UseRowMajor = IsRowMajor, std::enable_if_t<!UseRowMajor, bool> = true>
439
+ static inline ConstColMajorReturnType run(const Derived& derived, const Indices& indices) {
440
+ return ConstColMajorReturnType(derived, CreateIndexSequence<Derived::RowsAtCompileTime>(derived.rows(), indices),
441
+ ZeroIndex(0));
442
+ }
443
+ };
444
+
445
+ // Block
446
+ template <typename Derived, typename Indices>
447
+ struct VectorIndexedViewSelector<
448
+ Derived, Indices,
449
+ std::enable_if_t<!internal::is_single_range<IvcType<Indices, Derived::SizeAtCompileTime>>::value &&
450
+ internal::IndexedViewHelper<IvcType<Indices, Derived::SizeAtCompileTime>>::IncrAtCompileTime ==
451
+ 1>> {
452
+ using Helper = internal::IndexedViewHelper<IvcType<Indices, Derived::SizeAtCompileTime>>;
453
+ using ReturnType = VectorBlock<Derived, Helper::SizeAtCompileTime>;
454
+ using ConstReturnType = VectorBlock<const Derived, Helper::SizeAtCompileTime>;
455
+ static inline ReturnType run(Derived& derived, const Indices& indices) {
456
+ auto actualIndices = CreateIndexSequence<Derived::SizeAtCompileTime>(derived.size(), indices);
457
+ return ReturnType(derived, Helper::first(actualIndices), Helper::size(actualIndices));
458
+ }
459
+ static inline ConstReturnType run(const Derived& derived, const Indices& indices) {
460
+ auto actualIndices = CreateIndexSequence<Derived::SizeAtCompileTime>(derived.size(), indices);
461
+ return ConstReturnType(derived, Helper::first(actualIndices), Helper::size(actualIndices));
462
+ }
463
+ };
464
+
465
+ // Symbolic
466
+ template <typename Derived, typename Indices>
467
+ struct VectorIndexedViewSelector<
468
+ Derived, Indices,
469
+ std::enable_if_t<internal::is_single_range<IvcType<Indices, Derived::SizeAtCompileTime>>::value>> {
470
+ using ReturnType = typename DenseBase<Derived>::Scalar&;
471
+ using ConstReturnType = typename DenseBase<Derived>::CoeffReturnType;
472
+ using Helper = internal::IndexedViewHelper<IvcType<Indices, Derived::SizeAtCompileTime>>;
473
+ static inline ReturnType run(Derived& derived, const Indices& indices) {
474
+ auto actualIndices = CreateIndexSequence<Derived::SizeAtCompileTime>(derived.size(), indices);
475
+ return derived(Helper::first(actualIndices));
476
+ }
477
+ static inline ConstReturnType run(const Derived& derived, const Indices& indices) {
478
+ auto actualIndices = CreateIndexSequence<Derived::SizeAtCompileTime>(derived.size(), indices);
479
+ return derived(Helper::first(actualIndices));
480
+ }
481
+ };
482
+
483
+ } // end namespace internal
484
+
485
+ } // end namespace Eigen
486
+
487
+ #endif // EIGEN_INDEXED_VIEW_HELPER_H