@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
@@ -11,442 +11,419 @@
11
11
  #ifndef EIGEN_BLOCK_H
12
12
  #define EIGEN_BLOCK_H
13
13
 
14
- namespace Eigen {
14
+ // IWYU pragma: private
15
+ #include "./InternalHeaderCheck.h"
16
+
17
+ namespace Eigen {
15
18
 
16
19
  namespace internal {
17
- template<typename XprType, int BlockRows, int BlockCols, bool InnerPanel>
18
- struct traits<Block<XprType, BlockRows, BlockCols, InnerPanel> > : traits<XprType>
19
- {
20
- typedef typename traits<XprType>::Scalar Scalar;
21
- typedef typename traits<XprType>::StorageKind StorageKind;
22
- typedef typename traits<XprType>::XprKind XprKind;
23
- typedef typename ref_selector<XprType>::type XprTypeNested;
24
- typedef typename remove_reference<XprTypeNested>::type _XprTypeNested;
25
- enum{
26
- MatrixRows = traits<XprType>::RowsAtCompileTime,
27
- MatrixCols = traits<XprType>::ColsAtCompileTime,
20
+ template <typename XprType_, int BlockRows, int BlockCols, bool InnerPanel_>
21
+ struct traits<Block<XprType_, BlockRows, BlockCols, InnerPanel_>> : traits<XprType_> {
22
+ typedef typename traits<XprType_>::Scalar Scalar;
23
+ typedef typename traits<XprType_>::StorageKind StorageKind;
24
+ typedef typename traits<XprType_>::XprKind XprKind;
25
+ typedef typename ref_selector<XprType_>::type XprTypeNested;
26
+ typedef std::remove_reference_t<XprTypeNested> XprTypeNested_;
27
+ enum {
28
+ MatrixRows = traits<XprType_>::RowsAtCompileTime,
29
+ MatrixCols = traits<XprType_>::ColsAtCompileTime,
28
30
  RowsAtCompileTime = MatrixRows == 0 ? 0 : BlockRows,
29
31
  ColsAtCompileTime = MatrixCols == 0 ? 0 : BlockCols,
30
- MaxRowsAtCompileTime = BlockRows==0 ? 0
31
- : RowsAtCompileTime != Dynamic ? int(RowsAtCompileTime)
32
- : int(traits<XprType>::MaxRowsAtCompileTime),
33
- MaxColsAtCompileTime = BlockCols==0 ? 0
34
- : ColsAtCompileTime != Dynamic ? int(ColsAtCompileTime)
35
- : int(traits<XprType>::MaxColsAtCompileTime),
36
-
37
- XprTypeIsRowMajor = (int(traits<XprType>::Flags)&RowMajorBit) != 0,
38
- IsRowMajor = (MaxRowsAtCompileTime==1&&MaxColsAtCompileTime!=1) ? 1
39
- : (MaxColsAtCompileTime==1&&MaxRowsAtCompileTime!=1) ? 0
40
- : XprTypeIsRowMajor,
32
+ MaxRowsAtCompileTime = BlockRows == 0 ? 0
33
+ : RowsAtCompileTime != Dynamic ? int(RowsAtCompileTime)
34
+ : int(traits<XprType_>::MaxRowsAtCompileTime),
35
+ MaxColsAtCompileTime = BlockCols == 0 ? 0
36
+ : ColsAtCompileTime != Dynamic ? int(ColsAtCompileTime)
37
+ : int(traits<XprType_>::MaxColsAtCompileTime),
38
+
39
+ XprTypeIsRowMajor = (int(traits<XprType_>::Flags) & RowMajorBit) != 0,
40
+ IsRowMajor = (MaxRowsAtCompileTime == 1 && MaxColsAtCompileTime != 1) ? 1
41
+ : (MaxColsAtCompileTime == 1 && MaxRowsAtCompileTime != 1) ? 0
42
+ : XprTypeIsRowMajor,
41
43
  HasSameStorageOrderAsXprType = (IsRowMajor == XprTypeIsRowMajor),
42
44
  InnerSize = IsRowMajor ? int(ColsAtCompileTime) : int(RowsAtCompileTime),
43
- InnerStrideAtCompileTime = HasSameStorageOrderAsXprType
44
- ? int(inner_stride_at_compile_time<XprType>::ret)
45
- : int(outer_stride_at_compile_time<XprType>::ret),
46
- OuterStrideAtCompileTime = HasSameStorageOrderAsXprType
47
- ? int(outer_stride_at_compile_time<XprType>::ret)
48
- : int(inner_stride_at_compile_time<XprType>::ret),
45
+ InnerStrideAtCompileTime = HasSameStorageOrderAsXprType ? int(inner_stride_at_compile_time<XprType_>::ret)
46
+ : int(outer_stride_at_compile_time<XprType_>::ret),
47
+ OuterStrideAtCompileTime = HasSameStorageOrderAsXprType ? int(outer_stride_at_compile_time<XprType_>::ret)
48
+ : int(inner_stride_at_compile_time<XprType_>::ret),
49
49
 
50
50
  // FIXME, this traits is rather specialized for dense object and it needs to be cleaned further
51
- FlagsLvalueBit = is_lvalue<XprType>::value ? LvalueBit : 0,
51
+ FlagsLvalueBit = is_lvalue<XprType_>::value ? LvalueBit : 0,
52
52
  FlagsRowMajorBit = IsRowMajor ? RowMajorBit : 0,
53
- Flags = (traits<XprType>::Flags & (DirectAccessBit | (InnerPanel?CompressedAccessBit:0))) | FlagsLvalueBit | FlagsRowMajorBit,
53
+ Flags = (traits<XprType_>::Flags & (DirectAccessBit | (InnerPanel_ ? CompressedAccessBit : 0))) | FlagsLvalueBit |
54
+ FlagsRowMajorBit,
54
55
  // FIXME DirectAccessBit should not be handled by expressions
55
- //
56
+ //
56
57
  // Alignment is needed by MapBase's assertions
57
- // We can sefely set it to false here. Internal alignment errors will be detected by an eigen_internal_assert in the respective evaluator
58
- Alignment = 0
58
+ // We can sefely set it to false here. Internal alignment errors will be detected by an eigen_internal_assert in the
59
+ // respective evaluator
60
+ Alignment = 0,
61
+ InnerPanel = InnerPanel_ ? 1 : 0
59
62
  };
60
63
  };
61
64
 
62
- template<typename XprType, int BlockRows=Dynamic, int BlockCols=Dynamic, bool InnerPanel = false,
63
- bool HasDirectAccess = internal::has_direct_access<XprType>::ret> class BlockImpl_dense;
64
-
65
- } // end namespace internal
65
+ template <typename XprType, int BlockRows = Dynamic, int BlockCols = Dynamic, bool InnerPanel = false,
66
+ bool HasDirectAccess = internal::has_direct_access<XprType>::ret>
67
+ class BlockImpl_dense;
68
+
69
+ } // end namespace internal
66
70
 
67
- template<typename XprType, int BlockRows, int BlockCols, bool InnerPanel, typename StorageKind> class BlockImpl;
71
+ template <typename XprType, int BlockRows, int BlockCols, bool InnerPanel, typename StorageKind>
72
+ class BlockImpl;
68
73
 
69
74
  /** \class Block
70
- * \ingroup Core_Module
71
- *
72
- * \brief Expression of a fixed-size or dynamic-size block
73
- *
74
- * \tparam XprType the type of the expression in which we are taking a block
75
- * \tparam BlockRows the number of rows of the block we are taking at compile time (optional)
76
- * \tparam BlockCols the number of columns of the block we are taking at compile time (optional)
77
- * \tparam InnerPanel is true, if the block maps to a set of rows of a row major matrix or
78
- * to set of columns of a column major matrix (optional). The parameter allows to determine
79
- * at compile time whether aligned access is possible on the block expression.
80
- *
81
- * This class represents an expression of either a fixed-size or dynamic-size block. It is the return
82
- * type of DenseBase::block(Index,Index,Index,Index) and DenseBase::block<int,int>(Index,Index) and
83
- * most of the time this is the only way it is used.
84
- *
85
- * However, if you want to directly maniputate block expressions,
86
- * for instance if you want to write a function returning such an expression, you
87
- * will need to use this class.
88
- *
89
- * Here is an example illustrating the dynamic case:
90
- * \include class_Block.cpp
91
- * Output: \verbinclude class_Block.out
92
- *
93
- * \note Even though this expression has dynamic size, in the case where \a XprType
94
- * has fixed size, this expression inherits a fixed maximal size which means that evaluating
95
- * it does not cause a dynamic memory allocation.
96
- *
97
- * Here is an example illustrating the fixed-size case:
98
- * \include class_FixedBlock.cpp
99
- * Output: \verbinclude class_FixedBlock.out
100
- *
101
- * \sa DenseBase::block(Index,Index,Index,Index), DenseBase::block(Index,Index), class VectorBlock
102
- */
103
- template<typename XprType, int BlockRows, int BlockCols, bool InnerPanel> class Block
104
- : public BlockImpl<XprType, BlockRows, BlockCols, InnerPanel, typename internal::traits<XprType>::StorageKind>
105
- {
106
- typedef BlockImpl<XprType, BlockRows, BlockCols, InnerPanel, typename internal::traits<XprType>::StorageKind> Impl;
107
- public:
108
- //typedef typename Impl::Base Base;
109
- typedef Impl Base;
110
- EIGEN_GENERIC_PUBLIC_INTERFACE(Block)
111
- EIGEN_INHERIT_ASSIGNMENT_OPERATORS(Block)
112
-
113
- typedef typename internal::remove_all<XprType>::type NestedExpression;
114
-
115
- /** Column or Row constructor
116
- */
117
- EIGEN_DEVICE_FUNC
118
- inline Block(XprType& xpr, Index i) : Impl(xpr,i)
119
- {
120
- eigen_assert( (i>=0) && (
121
- ((BlockRows==1) && (BlockCols==XprType::ColsAtCompileTime) && i<xpr.rows())
122
- ||((BlockRows==XprType::RowsAtCompileTime) && (BlockCols==1) && i<xpr.cols())));
123
- }
124
-
125
- /** Fixed-size constructor
126
- */
127
- EIGEN_DEVICE_FUNC
128
- inline Block(XprType& xpr, Index startRow, Index startCol)
129
- : Impl(xpr, startRow, startCol)
130
- {
131
- EIGEN_STATIC_ASSERT(RowsAtCompileTime!=Dynamic && ColsAtCompileTime!=Dynamic,THIS_METHOD_IS_ONLY_FOR_FIXED_SIZE)
132
- eigen_assert(startRow >= 0 && BlockRows >= 0 && startRow + BlockRows <= xpr.rows()
133
- && startCol >= 0 && BlockCols >= 0 && startCol + BlockCols <= xpr.cols());
134
- }
135
-
136
- /** Dynamic-size constructor
137
- */
138
- EIGEN_DEVICE_FUNC
139
- inline Block(XprType& xpr,
140
- Index startRow, Index startCol,
141
- Index blockRows, Index blockCols)
142
- : Impl(xpr, startRow, startCol, blockRows, blockCols)
143
- {
144
- eigen_assert((RowsAtCompileTime==Dynamic || RowsAtCompileTime==blockRows)
145
- && (ColsAtCompileTime==Dynamic || ColsAtCompileTime==blockCols));
146
- eigen_assert(startRow >= 0 && blockRows >= 0 && startRow <= xpr.rows() - blockRows
147
- && startCol >= 0 && blockCols >= 0 && startCol <= xpr.cols() - blockCols);
148
- }
75
+ * \ingroup Core_Module
76
+ *
77
+ * \brief Expression of a fixed-size or dynamic-size block
78
+ *
79
+ * \tparam XprType the type of the expression in which we are taking a block
80
+ * \tparam BlockRows the number of rows of the block we are taking at compile time (optional)
81
+ * \tparam BlockCols the number of columns of the block we are taking at compile time (optional)
82
+ * \tparam InnerPanel is true, if the block maps to a set of rows of a row major matrix or
83
+ * to set of columns of a column major matrix (optional). The parameter allows to determine
84
+ * at compile time whether aligned access is possible on the block expression.
85
+ *
86
+ * This class represents an expression of either a fixed-size or dynamic-size block. It is the return
87
+ * type of DenseBase::block(Index,Index,Index,Index) and DenseBase::block<int,int>(Index,Index) and
88
+ * most of the time this is the only way it is used.
89
+ *
90
+ * However, if you want to directly manipulate block expressions,
91
+ * for instance if you want to write a function returning such an expression, you
92
+ * will need to use this class.
93
+ *
94
+ * Here is an example illustrating the dynamic case:
95
+ * \include class_Block.cpp
96
+ * Output: \verbinclude class_Block.out
97
+ *
98
+ * \note Even though this expression has dynamic size, in the case where \a XprType
99
+ * has fixed size, this expression inherits a fixed maximal size which means that evaluating
100
+ * it does not cause a dynamic memory allocation.
101
+ *
102
+ * Here is an example illustrating the fixed-size case:
103
+ * \include class_FixedBlock.cpp
104
+ * Output: \verbinclude class_FixedBlock.out
105
+ *
106
+ * \sa DenseBase::block(Index,Index,Index,Index), DenseBase::block(Index,Index), class VectorBlock
107
+ */
108
+ template <typename XprType, int BlockRows, int BlockCols, bool InnerPanel>
109
+ class Block
110
+ : public BlockImpl<XprType, BlockRows, BlockCols, InnerPanel, typename internal::traits<XprType>::StorageKind> {
111
+ typedef BlockImpl<XprType, BlockRows, BlockCols, InnerPanel, typename internal::traits<XprType>::StorageKind> Impl;
112
+ using BlockHelper = internal::block_xpr_helper<Block>;
113
+
114
+ public:
115
+ // typedef typename Impl::Base Base;
116
+ typedef Impl Base;
117
+ EIGEN_GENERIC_PUBLIC_INTERFACE(Block)
118
+ EIGEN_INHERIT_ASSIGNMENT_OPERATORS(Block)
119
+
120
+ typedef internal::remove_all_t<XprType> NestedExpression;
121
+
122
+ /** Column or Row constructor
123
+ */
124
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Block(XprType& xpr, Index i) : Impl(xpr, i) {
125
+ eigen_assert((i >= 0) && (((BlockRows == 1) && (BlockCols == XprType::ColsAtCompileTime) && i < xpr.rows()) ||
126
+ ((BlockRows == XprType::RowsAtCompileTime) && (BlockCols == 1) && i < xpr.cols())));
127
+ }
128
+
129
+ /** Fixed-size constructor
130
+ */
131
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Block(XprType& xpr, Index startRow, Index startCol)
132
+ : Impl(xpr, startRow, startCol) {
133
+ EIGEN_STATIC_ASSERT(RowsAtCompileTime != Dynamic && ColsAtCompileTime != Dynamic,
134
+ THIS_METHOD_IS_ONLY_FOR_FIXED_SIZE)
135
+ eigen_assert(startRow >= 0 && BlockRows >= 0 && startRow + BlockRows <= xpr.rows() && startCol >= 0 &&
136
+ BlockCols >= 0 && startCol + BlockCols <= xpr.cols());
137
+ }
138
+
139
+ /** Dynamic-size constructor
140
+ */
141
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Block(XprType& xpr, Index startRow, Index startCol, Index blockRows,
142
+ Index blockCols)
143
+ : Impl(xpr, startRow, startCol, blockRows, blockCols) {
144
+ eigen_assert((RowsAtCompileTime == Dynamic || RowsAtCompileTime == blockRows) &&
145
+ (ColsAtCompileTime == Dynamic || ColsAtCompileTime == blockCols));
146
+ eigen_assert(startRow >= 0 && blockRows >= 0 && startRow <= xpr.rows() - blockRows && startCol >= 0 &&
147
+ blockCols >= 0 && startCol <= xpr.cols() - blockCols);
148
+ }
149
+
150
+ // convert nested blocks (e.g. Block<Block<MatrixType>>) to a simple block expression (Block<MatrixType>)
151
+
152
+ using ConstUnwindReturnType = Block<const typename BlockHelper::BaseType, BlockRows, BlockCols, InnerPanel>;
153
+ using UnwindReturnType = Block<typename BlockHelper::BaseType, BlockRows, BlockCols, InnerPanel>;
154
+
155
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE ConstUnwindReturnType unwind() const {
156
+ return ConstUnwindReturnType(BlockHelper::base(*this), BlockHelper::row(*this, 0), BlockHelper::col(*this, 0),
157
+ this->rows(), this->cols());
158
+ }
159
+
160
+ template <typename T = Block, typename EnableIf = std::enable_if_t<!std::is_const<T>::value>>
161
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE UnwindReturnType unwind() {
162
+ return UnwindReturnType(BlockHelper::base(*this), BlockHelper::row(*this, 0), BlockHelper::col(*this, 0),
163
+ this->rows(), this->cols());
164
+ }
149
165
  };
150
-
151
- // The generic default implementation for dense block simplu forward to the internal::BlockImpl_dense
166
+
167
+ // The generic default implementation for dense block simply forward to the internal::BlockImpl_dense
152
168
  // that must be specialized for direct and non-direct access...
153
- template<typename XprType, int BlockRows, int BlockCols, bool InnerPanel>
169
+ template <typename XprType, int BlockRows, int BlockCols, bool InnerPanel>
154
170
  class BlockImpl<XprType, BlockRows, BlockCols, InnerPanel, Dense>
155
- : public internal::BlockImpl_dense<XprType, BlockRows, BlockCols, InnerPanel>
156
- {
157
- typedef internal::BlockImpl_dense<XprType, BlockRows, BlockCols, InnerPanel> Impl;
158
- typedef typename XprType::StorageIndex StorageIndex;
159
- public:
160
- typedef Impl Base;
161
- EIGEN_INHERIT_ASSIGNMENT_OPERATORS(BlockImpl)
162
- EIGEN_DEVICE_FUNC inline BlockImpl(XprType& xpr, Index i) : Impl(xpr,i) {}
163
- EIGEN_DEVICE_FUNC inline BlockImpl(XprType& xpr, Index startRow, Index startCol) : Impl(xpr, startRow, startCol) {}
164
- EIGEN_DEVICE_FUNC
165
- inline BlockImpl(XprType& xpr, Index startRow, Index startCol, Index blockRows, Index blockCols)
171
+ : public internal::BlockImpl_dense<XprType, BlockRows, BlockCols, InnerPanel> {
172
+ typedef internal::BlockImpl_dense<XprType, BlockRows, BlockCols, InnerPanel> Impl;
173
+ typedef typename XprType::StorageIndex StorageIndex;
174
+
175
+ public:
176
+ typedef Impl Base;
177
+ EIGEN_INHERIT_ASSIGNMENT_OPERATORS(BlockImpl)
178
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE BlockImpl(XprType& xpr, Index i) : Impl(xpr, i) {}
179
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE BlockImpl(XprType& xpr, Index startRow, Index startCol)
180
+ : Impl(xpr, startRow, startCol) {}
181
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE BlockImpl(XprType& xpr, Index startRow, Index startCol, Index blockRows,
182
+ Index blockCols)
166
183
  : Impl(xpr, startRow, startCol, blockRows, blockCols) {}
167
184
  };
168
185
 
169
186
  namespace internal {
170
187
 
171
188
  /** \internal Internal implementation of dense Blocks in the general case. */
172
- template<typename XprType, int BlockRows, int BlockCols, bool InnerPanel, bool HasDirectAccess> class BlockImpl_dense
173
- : public internal::dense_xpr_base<Block<XprType, BlockRows, BlockCols, InnerPanel> >::type
174
- {
175
- typedef Block<XprType, BlockRows, BlockCols, InnerPanel> BlockType;
176
- typedef typename internal::ref_selector<XprType>::non_const_type XprTypeNested;
177
- public:
178
-
179
- typedef typename internal::dense_xpr_base<BlockType>::type Base;
180
- EIGEN_DENSE_PUBLIC_INTERFACE(BlockType)
181
- EIGEN_INHERIT_ASSIGNMENT_OPERATORS(BlockImpl_dense)
182
-
183
- // class InnerIterator; // FIXME apparently never used
184
-
185
- /** Column or Row constructor
186
- */
187
- EIGEN_DEVICE_FUNC
188
- inline BlockImpl_dense(XprType& xpr, Index i)
189
+ template <typename XprType, int BlockRows, int BlockCols, bool InnerPanel, bool HasDirectAccess>
190
+ class BlockImpl_dense : public internal::dense_xpr_base<Block<XprType, BlockRows, BlockCols, InnerPanel>>::type {
191
+ typedef Block<XprType, BlockRows, BlockCols, InnerPanel> BlockType;
192
+ typedef typename internal::ref_selector<XprType>::non_const_type XprTypeNested;
193
+
194
+ public:
195
+ typedef typename internal::dense_xpr_base<BlockType>::type Base;
196
+ EIGEN_DENSE_PUBLIC_INTERFACE(BlockType)
197
+ EIGEN_INHERIT_ASSIGNMENT_OPERATORS(BlockImpl_dense)
198
+
199
+ // class InnerIterator; // FIXME apparently never used
200
+
201
+ /** Column or Row constructor
202
+ */
203
+ EIGEN_DEVICE_FUNC inline BlockImpl_dense(XprType& xpr, Index i)
189
204
  : m_xpr(xpr),
190
205
  // It is a row if and only if BlockRows==1 and BlockCols==XprType::ColsAtCompileTime,
191
206
  // and it is a column if and only if BlockRows==XprType::RowsAtCompileTime and BlockCols==1,
192
207
  // all other cases are invalid.
193
208
  // The case a 1x1 matrix seems ambiguous, but the result is the same anyway.
194
- m_startRow( (BlockRows==1) && (BlockCols==XprType::ColsAtCompileTime) ? i : 0),
195
- m_startCol( (BlockRows==XprType::RowsAtCompileTime) && (BlockCols==1) ? i : 0),
196
- m_blockRows(BlockRows==1 ? 1 : xpr.rows()),
197
- m_blockCols(BlockCols==1 ? 1 : xpr.cols())
198
- {}
199
-
200
- /** Fixed-size constructor
201
- */
202
- EIGEN_DEVICE_FUNC
203
- inline BlockImpl_dense(XprType& xpr, Index startRow, Index startCol)
204
- : m_xpr(xpr), m_startRow(startRow), m_startCol(startCol),
205
- m_blockRows(BlockRows), m_blockCols(BlockCols)
206
- {}
207
-
208
- /** Dynamic-size constructor
209
- */
210
- EIGEN_DEVICE_FUNC
211
- inline BlockImpl_dense(XprType& xpr,
212
- Index startRow, Index startCol,
213
- Index blockRows, Index blockCols)
214
- : m_xpr(xpr), m_startRow(startRow), m_startCol(startCol),
215
- m_blockRows(blockRows), m_blockCols(blockCols)
216
- {}
217
-
218
- EIGEN_DEVICE_FUNC inline Index rows() const { return m_blockRows.value(); }
219
- EIGEN_DEVICE_FUNC inline Index cols() const { return m_blockCols.value(); }
220
-
221
- EIGEN_DEVICE_FUNC
222
- inline Scalar& coeffRef(Index rowId, Index colId)
223
- {
224
- EIGEN_STATIC_ASSERT_LVALUE(XprType)
225
- return m_xpr.coeffRef(rowId + m_startRow.value(), colId + m_startCol.value());
226
- }
227
-
228
- EIGEN_DEVICE_FUNC
229
- inline const Scalar& coeffRef(Index rowId, Index colId) const
230
- {
231
- return m_xpr.derived().coeffRef(rowId + m_startRow.value(), colId + m_startCol.value());
232
- }
233
-
234
- EIGEN_DEVICE_FUNC
235
- EIGEN_STRONG_INLINE const CoeffReturnType coeff(Index rowId, Index colId) const
236
- {
237
- return m_xpr.coeff(rowId + m_startRow.value(), colId + m_startCol.value());
238
- }
239
-
240
- EIGEN_DEVICE_FUNC
241
- inline Scalar& coeffRef(Index index)
242
- {
243
- EIGEN_STATIC_ASSERT_LVALUE(XprType)
244
- return m_xpr.coeffRef(m_startRow.value() + (RowsAtCompileTime == 1 ? 0 : index),
245
- m_startCol.value() + (RowsAtCompileTime == 1 ? index : 0));
246
- }
247
-
248
- EIGEN_DEVICE_FUNC
249
- inline const Scalar& coeffRef(Index index) const
250
- {
251
- return m_xpr.coeffRef(m_startRow.value() + (RowsAtCompileTime == 1 ? 0 : index),
252
- m_startCol.value() + (RowsAtCompileTime == 1 ? index : 0));
253
- }
254
-
255
- EIGEN_DEVICE_FUNC
256
- inline const CoeffReturnType coeff(Index index) const
257
- {
258
- return m_xpr.coeff(m_startRow.value() + (RowsAtCompileTime == 1 ? 0 : index),
259
- m_startCol.value() + (RowsAtCompileTime == 1 ? index : 0));
260
- }
261
-
262
- template<int LoadMode>
263
- inline PacketScalar packet(Index rowId, Index colId) const
264
- {
265
- return m_xpr.template packet<Unaligned>(rowId + m_startRow.value(), colId + m_startCol.value());
266
- }
267
-
268
- template<int LoadMode>
269
- inline void writePacket(Index rowId, Index colId, const PacketScalar& val)
270
- {
271
- m_xpr.template writePacket<Unaligned>(rowId + m_startRow.value(), colId + m_startCol.value(), val);
272
- }
273
-
274
- template<int LoadMode>
275
- inline PacketScalar packet(Index index) const
276
- {
277
- return m_xpr.template packet<Unaligned>
278
- (m_startRow.value() + (RowsAtCompileTime == 1 ? 0 : index),
279
- m_startCol.value() + (RowsAtCompileTime == 1 ? index : 0));
280
- }
281
-
282
- template<int LoadMode>
283
- inline void writePacket(Index index, const PacketScalar& val)
284
- {
285
- m_xpr.template writePacket<Unaligned>
286
- (m_startRow.value() + (RowsAtCompileTime == 1 ? 0 : index),
287
- m_startCol.value() + (RowsAtCompileTime == 1 ? index : 0), val);
288
- }
289
-
290
- #ifdef EIGEN_PARSED_BY_DOXYGEN
291
- /** \sa MapBase::data() */
292
- EIGEN_DEVICE_FUNC inline const Scalar* data() const;
293
- EIGEN_DEVICE_FUNC inline Index innerStride() const;
294
- EIGEN_DEVICE_FUNC inline Index outerStride() const;
295
- #endif
296
-
297
- EIGEN_DEVICE_FUNC
298
- const typename internal::remove_all<XprTypeNested>::type& nestedExpression() const
299
- {
300
- return m_xpr;
301
- }
302
-
303
- EIGEN_DEVICE_FUNC
304
- XprType& nestedExpression() { return m_xpr; }
305
-
306
- EIGEN_DEVICE_FUNC
307
- StorageIndex startRow() const
308
- {
309
- return m_startRow.value();
310
- }
311
-
312
- EIGEN_DEVICE_FUNC
313
- StorageIndex startCol() const
314
- {
315
- return m_startCol.value();
316
- }
317
-
318
- protected:
319
-
320
- XprTypeNested m_xpr;
321
- const internal::variable_if_dynamic<StorageIndex, (XprType::RowsAtCompileTime == 1 && BlockRows==1) ? 0 : Dynamic> m_startRow;
322
- const internal::variable_if_dynamic<StorageIndex, (XprType::ColsAtCompileTime == 1 && BlockCols==1) ? 0 : Dynamic> m_startCol;
323
- const internal::variable_if_dynamic<StorageIndex, RowsAtCompileTime> m_blockRows;
324
- const internal::variable_if_dynamic<StorageIndex, ColsAtCompileTime> m_blockCols;
209
+ m_startRow((BlockRows == 1) && (BlockCols == XprType::ColsAtCompileTime) ? i : 0),
210
+ m_startCol((BlockRows == XprType::RowsAtCompileTime) && (BlockCols == 1) ? i : 0),
211
+ m_blockRows(BlockRows == 1 ? 1 : xpr.rows()),
212
+ m_blockCols(BlockCols == 1 ? 1 : xpr.cols()) {}
213
+
214
+ /** Fixed-size constructor
215
+ */
216
+ EIGEN_DEVICE_FUNC inline BlockImpl_dense(XprType& xpr, Index startRow, Index startCol)
217
+ : m_xpr(xpr), m_startRow(startRow), m_startCol(startCol), m_blockRows(BlockRows), m_blockCols(BlockCols) {}
218
+
219
+ /** Dynamic-size constructor
220
+ */
221
+ EIGEN_DEVICE_FUNC inline BlockImpl_dense(XprType& xpr, Index startRow, Index startCol, Index blockRows,
222
+ Index blockCols)
223
+ : m_xpr(xpr), m_startRow(startRow), m_startCol(startCol), m_blockRows(blockRows), m_blockCols(blockCols) {}
224
+
225
+ EIGEN_DEVICE_FUNC inline Index rows() const { return m_blockRows.value(); }
226
+ EIGEN_DEVICE_FUNC inline Index cols() const { return m_blockCols.value(); }
227
+
228
+ EIGEN_DEVICE_FUNC inline Scalar& coeffRef(Index rowId, Index colId) {
229
+ EIGEN_STATIC_ASSERT_LVALUE(XprType)
230
+ return m_xpr.coeffRef(rowId + m_startRow.value(), colId + m_startCol.value());
231
+ }
232
+
233
+ EIGEN_DEVICE_FUNC inline const Scalar& coeffRef(Index rowId, Index colId) const {
234
+ return m_xpr.derived().coeffRef(rowId + m_startRow.value(), colId + m_startCol.value());
235
+ }
236
+
237
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const CoeffReturnType coeff(Index rowId, Index colId) const {
238
+ return m_xpr.coeff(rowId + m_startRow.value(), colId + m_startCol.value());
239
+ }
240
+
241
+ EIGEN_DEVICE_FUNC inline Scalar& coeffRef(Index index) {
242
+ EIGEN_STATIC_ASSERT_LVALUE(XprType)
243
+ return m_xpr.coeffRef(m_startRow.value() + (RowsAtCompileTime == 1 ? 0 : index),
244
+ m_startCol.value() + (RowsAtCompileTime == 1 ? index : 0));
245
+ }
246
+
247
+ EIGEN_DEVICE_FUNC inline const Scalar& coeffRef(Index index) const {
248
+ return m_xpr.coeffRef(m_startRow.value() + (RowsAtCompileTime == 1 ? 0 : index),
249
+ m_startCol.value() + (RowsAtCompileTime == 1 ? index : 0));
250
+ }
251
+
252
+ EIGEN_DEVICE_FUNC inline const CoeffReturnType coeff(Index index) const {
253
+ return m_xpr.coeff(m_startRow.value() + (RowsAtCompileTime == 1 ? 0 : index),
254
+ m_startCol.value() + (RowsAtCompileTime == 1 ? index : 0));
255
+ }
256
+
257
+ template <int LoadMode>
258
+ EIGEN_DEVICE_FUNC inline PacketScalar packet(Index rowId, Index colId) const {
259
+ return m_xpr.template packet<Unaligned>(rowId + m_startRow.value(), colId + m_startCol.value());
260
+ }
261
+
262
+ template <int LoadMode>
263
+ EIGEN_DEVICE_FUNC inline void writePacket(Index rowId, Index colId, const PacketScalar& val) {
264
+ m_xpr.template writePacket<Unaligned>(rowId + m_startRow.value(), colId + m_startCol.value(), val);
265
+ }
266
+
267
+ template <int LoadMode>
268
+ EIGEN_DEVICE_FUNC inline PacketScalar packet(Index index) const {
269
+ return m_xpr.template packet<Unaligned>(m_startRow.value() + (RowsAtCompileTime == 1 ? 0 : index),
270
+ m_startCol.value() + (RowsAtCompileTime == 1 ? index : 0));
271
+ }
272
+
273
+ template <int LoadMode>
274
+ EIGEN_DEVICE_FUNC inline void writePacket(Index index, const PacketScalar& val) {
275
+ m_xpr.template writePacket<Unaligned>(m_startRow.value() + (RowsAtCompileTime == 1 ? 0 : index),
276
+ m_startCol.value() + (RowsAtCompileTime == 1 ? index : 0), val);
277
+ }
278
+
279
+ #ifdef EIGEN_PARSED_BY_DOXYGEN
280
+ /** \sa MapBase::data() */
281
+ EIGEN_DEVICE_FUNC constexpr const Scalar* data() const;
282
+ EIGEN_DEVICE_FUNC inline Index innerStride() const;
283
+ EIGEN_DEVICE_FUNC inline Index outerStride() const;
284
+ #endif
285
+
286
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const internal::remove_all_t<XprTypeNested>& nestedExpression() const {
287
+ return m_xpr;
288
+ }
289
+
290
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE XprType& nestedExpression() { return m_xpr; }
291
+
292
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr StorageIndex startRow() const noexcept { return m_startRow.value(); }
293
+
294
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr StorageIndex startCol() const noexcept { return m_startCol.value(); }
295
+
296
+ protected:
297
+ XprTypeNested m_xpr;
298
+ const internal::variable_if_dynamic<StorageIndex, (XprType::RowsAtCompileTime == 1 && BlockRows == 1) ? 0 : Dynamic>
299
+ m_startRow;
300
+ const internal::variable_if_dynamic<StorageIndex, (XprType::ColsAtCompileTime == 1 && BlockCols == 1) ? 0 : Dynamic>
301
+ m_startCol;
302
+ const internal::variable_if_dynamic<StorageIndex, RowsAtCompileTime> m_blockRows;
303
+ const internal::variable_if_dynamic<StorageIndex, ColsAtCompileTime> m_blockCols;
325
304
  };
326
305
 
327
306
  /** \internal Internal implementation of dense Blocks in the direct access case.*/
328
- template<typename XprType, int BlockRows, int BlockCols, bool InnerPanel>
329
- class BlockImpl_dense<XprType,BlockRows,BlockCols, InnerPanel,true>
330
- : public MapBase<Block<XprType, BlockRows, BlockCols, InnerPanel> >
331
- {
332
- typedef Block<XprType, BlockRows, BlockCols, InnerPanel> BlockType;
333
- typedef typename internal::ref_selector<XprType>::non_const_type XprTypeNested;
334
- enum {
335
- XprTypeIsRowMajor = (int(traits<XprType>::Flags)&RowMajorBit) != 0
336
- };
337
- public:
338
-
339
- typedef MapBase<BlockType> Base;
340
- EIGEN_DENSE_PUBLIC_INTERFACE(BlockType)
341
- EIGEN_INHERIT_ASSIGNMENT_OPERATORS(BlockImpl_dense)
342
-
343
- /** Column or Row constructor
344
- */
345
- EIGEN_DEVICE_FUNC
346
- inline BlockImpl_dense(XprType& xpr, Index i)
347
- : Base(xpr.data() + i * ( ((BlockRows==1) && (BlockCols==XprType::ColsAtCompileTime) && (!XprTypeIsRowMajor))
348
- || ((BlockRows==XprType::RowsAtCompileTime) && (BlockCols==1) && ( XprTypeIsRowMajor)) ? xpr.innerStride() : xpr.outerStride()),
349
- BlockRows==1 ? 1 : xpr.rows(),
350
- BlockCols==1 ? 1 : xpr.cols()),
307
+ template <typename XprType, int BlockRows, int BlockCols, bool InnerPanel>
308
+ class BlockImpl_dense<XprType, BlockRows, BlockCols, InnerPanel, true>
309
+ : public MapBase<Block<XprType, BlockRows, BlockCols, InnerPanel>> {
310
+ typedef Block<XprType, BlockRows, BlockCols, InnerPanel> BlockType;
311
+ typedef typename internal::ref_selector<XprType>::non_const_type XprTypeNested;
312
+ enum { XprTypeIsRowMajor = (int(traits<XprType>::Flags) & RowMajorBit) != 0 };
313
+
314
+ /** \internal Returns base+offset (unless base is null, in which case returns null).
315
+ * Adding an offset to nullptr is undefined behavior, so we must avoid it.
316
+ */
317
+ template <typename Scalar>
318
+ EIGEN_DEVICE_FUNC constexpr EIGEN_ALWAYS_INLINE static Scalar* add_to_nullable_pointer(Scalar* base, Index offset) {
319
+ return base != nullptr ? base + offset : nullptr;
320
+ }
321
+
322
+ public:
323
+ typedef MapBase<BlockType> Base;
324
+ EIGEN_DENSE_PUBLIC_INTERFACE(BlockType)
325
+ EIGEN_INHERIT_ASSIGNMENT_OPERATORS(BlockImpl_dense)
326
+
327
+ /** Column or Row constructor
328
+ */
329
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE BlockImpl_dense(XprType& xpr, Index i)
330
+ : Base((BlockRows == 0 || BlockCols == 0)
331
+ ? nullptr
332
+ : add_to_nullable_pointer(
333
+ xpr.data(),
334
+ i * (((BlockRows == 1) && (BlockCols == XprType::ColsAtCompileTime) && (!XprTypeIsRowMajor)) ||
335
+ ((BlockRows == XprType::RowsAtCompileTime) && (BlockCols == 1) &&
336
+ (XprTypeIsRowMajor))
337
+ ? xpr.innerStride()
338
+ : xpr.outerStride())),
339
+ BlockRows == 1 ? 1 : xpr.rows(), BlockCols == 1 ? 1 : xpr.cols()),
340
+ m_xpr(xpr),
341
+ m_startRow((BlockRows == 1) && (BlockCols == XprType::ColsAtCompileTime) ? i : 0),
342
+ m_startCol((BlockRows == XprType::RowsAtCompileTime) && (BlockCols == 1) ? i : 0) {
343
+ init();
344
+ }
345
+
346
+ /** Fixed-size constructor
347
+ */
348
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE BlockImpl_dense(XprType& xpr, Index startRow, Index startCol)
349
+ : Base((BlockRows == 0 || BlockCols == 0)
350
+ ? nullptr
351
+ : add_to_nullable_pointer(xpr.data(),
352
+ xpr.innerStride() * (XprTypeIsRowMajor ? startCol : startRow) +
353
+ xpr.outerStride() * (XprTypeIsRowMajor ? startRow : startCol))),
354
+ m_xpr(xpr),
355
+ m_startRow(startRow),
356
+ m_startCol(startCol) {
357
+ init();
358
+ }
359
+
360
+ /** Dynamic-size constructor
361
+ */
362
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE BlockImpl_dense(XprType& xpr, Index startRow, Index startCol, Index blockRows,
363
+ Index blockCols)
364
+ : Base((blockRows == 0 || blockCols == 0)
365
+ ? nullptr
366
+ : add_to_nullable_pointer(xpr.data(),
367
+ xpr.innerStride() * (XprTypeIsRowMajor ? startCol : startRow) +
368
+ xpr.outerStride() * (XprTypeIsRowMajor ? startRow : startCol)),
369
+ blockRows, blockCols),
351
370
  m_xpr(xpr),
352
- m_startRow( (BlockRows==1) && (BlockCols==XprType::ColsAtCompileTime) ? i : 0),
353
- m_startCol( (BlockRows==XprType::RowsAtCompileTime) && (BlockCols==1) ? i : 0)
354
- {
355
- init();
356
- }
357
-
358
- /** Fixed-size constructor
359
- */
360
- EIGEN_DEVICE_FUNC
361
- inline BlockImpl_dense(XprType& xpr, Index startRow, Index startCol)
362
- : Base(xpr.data()+xpr.innerStride()*(XprTypeIsRowMajor?startCol:startRow) + xpr.outerStride()*(XprTypeIsRowMajor?startRow:startCol)),
363
- m_xpr(xpr), m_startRow(startRow), m_startCol(startCol)
364
- {
365
- init();
366
- }
367
-
368
- /** Dynamic-size constructor
369
- */
370
- EIGEN_DEVICE_FUNC
371
- inline BlockImpl_dense(XprType& xpr,
372
- Index startRow, Index startCol,
373
- Index blockRows, Index blockCols)
374
- : Base(xpr.data()+xpr.innerStride()*(XprTypeIsRowMajor?startCol:startRow) + xpr.outerStride()*(XprTypeIsRowMajor?startRow:startCol), blockRows, blockCols),
375
- m_xpr(xpr), m_startRow(startRow), m_startCol(startCol)
376
- {
377
- init();
378
- }
379
-
380
- EIGEN_DEVICE_FUNC
381
- const typename internal::remove_all<XprTypeNested>::type& nestedExpression() const
382
- {
383
- return m_xpr;
384
- }
385
-
386
- EIGEN_DEVICE_FUNC
387
- XprType& nestedExpression() { return m_xpr; }
388
-
389
- /** \sa MapBase::innerStride() */
390
- EIGEN_DEVICE_FUNC
391
- inline Index innerStride() const
392
- {
393
- return internal::traits<BlockType>::HasSameStorageOrderAsXprType
394
- ? m_xpr.innerStride()
395
- : m_xpr.outerStride();
396
- }
397
-
398
- /** \sa MapBase::outerStride() */
399
- EIGEN_DEVICE_FUNC
400
- inline Index outerStride() const
401
- {
402
- return m_outerStride;
403
- }
404
-
405
- EIGEN_DEVICE_FUNC
406
- StorageIndex startRow() const
407
- {
408
- return m_startRow.value();
409
- }
410
-
411
- EIGEN_DEVICE_FUNC
412
- StorageIndex startCol() const
413
- {
414
- return m_startCol.value();
415
- }
416
-
417
- #ifndef __SUNPRO_CC
371
+ m_startRow(startRow),
372
+ m_startCol(startCol) {
373
+ init();
374
+ }
375
+
376
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const internal::remove_all_t<XprTypeNested>& nestedExpression() const noexcept {
377
+ return m_xpr;
378
+ }
379
+
380
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE XprType& nestedExpression() { return m_xpr; }
381
+
382
+ /** \sa MapBase::innerStride() */
383
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr Index innerStride() const noexcept {
384
+ return internal::traits<BlockType>::HasSameStorageOrderAsXprType ? m_xpr.innerStride() : m_xpr.outerStride();
385
+ }
386
+
387
+ /** \sa MapBase::outerStride() */
388
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr Index outerStride() const noexcept {
389
+ return internal::traits<BlockType>::HasSameStorageOrderAsXprType ? m_xpr.outerStride() : m_xpr.innerStride();
390
+ }
391
+
392
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr StorageIndex startRow() const noexcept { return m_startRow.value(); }
393
+
394
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr StorageIndex startCol() const noexcept { return m_startCol.value(); }
395
+
396
+ #ifndef __SUNPRO_CC
418
397
  // FIXME sunstudio is not friendly with the above friend...
419
398
  // META-FIXME there is no 'friend' keyword around here. Is this obsolete?
420
- protected:
421
- #endif
422
-
423
- #ifndef EIGEN_PARSED_BY_DOXYGEN
424
- /** \internal used by allowAligned() */
425
- EIGEN_DEVICE_FUNC
426
- inline BlockImpl_dense(XprType& xpr, const Scalar* data, Index blockRows, Index blockCols)
427
- : Base(data, blockRows, blockCols), m_xpr(xpr)
428
- {
429
- init();
430
- }
431
- #endif
432
-
433
- protected:
434
- EIGEN_DEVICE_FUNC
435
- void init()
436
- {
437
- m_outerStride = internal::traits<BlockType>::HasSameStorageOrderAsXprType
438
- ? m_xpr.outerStride()
439
- : m_xpr.innerStride();
440
- }
441
-
442
- XprTypeNested m_xpr;
443
- const internal::variable_if_dynamic<StorageIndex, (XprType::RowsAtCompileTime == 1 && BlockRows==1) ? 0 : Dynamic> m_startRow;
444
- const internal::variable_if_dynamic<StorageIndex, (XprType::ColsAtCompileTime == 1 && BlockCols==1) ? 0 : Dynamic> m_startCol;
445
- Index m_outerStride;
399
+ protected:
400
+ #endif
401
+
402
+ #ifndef EIGEN_PARSED_BY_DOXYGEN
403
+ /** \internal used by allowAligned() */
404
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE BlockImpl_dense(XprType& xpr, const Scalar* data, Index blockRows,
405
+ Index blockCols)
406
+ : Base(data, blockRows, blockCols), m_xpr(xpr) {
407
+ init();
408
+ }
409
+ #endif
410
+
411
+ protected:
412
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void init() {
413
+ m_outerStride =
414
+ internal::traits<BlockType>::HasSameStorageOrderAsXprType ? m_xpr.outerStride() : m_xpr.innerStride();
415
+ }
416
+
417
+ XprTypeNested m_xpr;
418
+ const internal::variable_if_dynamic<StorageIndex, (XprType::RowsAtCompileTime == 1 && BlockRows == 1) ? 0 : Dynamic>
419
+ m_startRow;
420
+ const internal::variable_if_dynamic<StorageIndex, (XprType::ColsAtCompileTime == 1 && BlockCols == 1) ? 0 : Dynamic>
421
+ m_startCol;
422
+ Index m_outerStride;
446
423
  };
447
424
 
448
- } // end namespace internal
425
+ } // end namespace internal
449
426
 
450
- } // end namespace Eigen
427
+ } // end namespace Eigen
451
428
 
452
- #endif // EIGEN_BLOCK_H
429
+ #endif // EIGEN_BLOCK_H