@smake/eigen 1.1.0 → 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 (431) hide show
  1. package/README.md +1 -1
  2. package/eigen/Eigen/AccelerateSupport +52 -0
  3. package/eigen/Eigen/Cholesky +18 -20
  4. package/eigen/Eigen/CholmodSupport +28 -28
  5. package/eigen/Eigen/Core +187 -120
  6. package/eigen/Eigen/Eigenvalues +16 -13
  7. package/eigen/Eigen/Geometry +18 -18
  8. package/eigen/Eigen/Householder +9 -7
  9. package/eigen/Eigen/IterativeLinearSolvers +8 -4
  10. package/eigen/Eigen/Jacobi +14 -13
  11. package/eigen/Eigen/KLUSupport +23 -21
  12. package/eigen/Eigen/LU +15 -16
  13. package/eigen/Eigen/MetisSupport +12 -12
  14. package/eigen/Eigen/OrderingMethods +54 -51
  15. package/eigen/Eigen/PaStiXSupport +23 -21
  16. package/eigen/Eigen/PardisoSupport +17 -14
  17. package/eigen/Eigen/QR +18 -20
  18. package/eigen/Eigen/QtAlignedMalloc +5 -12
  19. package/eigen/Eigen/SPQRSupport +21 -14
  20. package/eigen/Eigen/SVD +23 -17
  21. package/eigen/Eigen/Sparse +1 -2
  22. package/eigen/Eigen/SparseCholesky +18 -15
  23. package/eigen/Eigen/SparseCore +18 -17
  24. package/eigen/Eigen/SparseLU +9 -9
  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 +366 -405
  37. package/eigen/Eigen/src/Cholesky/LLT.h +323 -367
  38. package/eigen/Eigen/src/Cholesky/LLT_LAPACKE.h +81 -56
  39. package/eigen/Eigen/src/CholmodSupport/CholmodSupport.h +585 -529
  40. package/eigen/Eigen/src/CholmodSupport/InternalHeaderCheck.h +3 -0
  41. package/eigen/Eigen/src/Core/ArithmeticSequence.h +143 -317
  42. package/eigen/Eigen/src/Core/Array.h +329 -370
  43. package/eigen/Eigen/src/Core/ArrayBase.h +190 -203
  44. package/eigen/Eigen/src/Core/ArrayWrapper.h +126 -170
  45. package/eigen/Eigen/src/Core/Assign.h +30 -40
  46. package/eigen/Eigen/src/Core/AssignEvaluator.h +651 -604
  47. package/eigen/Eigen/src/Core/Assign_MKL.h +125 -120
  48. package/eigen/Eigen/src/Core/BandMatrix.h +267 -282
  49. package/eigen/Eigen/src/Core/Block.h +371 -390
  50. package/eigen/Eigen/src/Core/CommaInitializer.h +85 -100
  51. package/eigen/Eigen/src/Core/ConditionEstimator.h +51 -53
  52. package/eigen/Eigen/src/Core/CoreEvaluators.h +1214 -937
  53. package/eigen/Eigen/src/Core/CoreIterators.h +72 -63
  54. package/eigen/Eigen/src/Core/CwiseBinaryOp.h +112 -129
  55. package/eigen/Eigen/src/Core/CwiseNullaryOp.h +676 -702
  56. package/eigen/Eigen/src/Core/CwiseTernaryOp.h +77 -103
  57. package/eigen/Eigen/src/Core/CwiseUnaryOp.h +55 -67
  58. package/eigen/Eigen/src/Core/CwiseUnaryView.h +127 -92
  59. package/eigen/Eigen/src/Core/DenseBase.h +630 -658
  60. package/eigen/Eigen/src/Core/DenseCoeffsBase.h +511 -628
  61. package/eigen/Eigen/src/Core/DenseStorage.h +511 -590
  62. package/eigen/Eigen/src/Core/DeviceWrapper.h +153 -0
  63. package/eigen/Eigen/src/Core/Diagonal.h +168 -207
  64. package/eigen/Eigen/src/Core/DiagonalMatrix.h +346 -317
  65. package/eigen/Eigen/src/Core/DiagonalProduct.h +12 -10
  66. package/eigen/Eigen/src/Core/Dot.h +167 -217
  67. package/eigen/Eigen/src/Core/EigenBase.h +74 -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 -113
  71. package/eigen/Eigen/src/Core/Fuzzy.h +82 -105
  72. package/eigen/Eigen/src/Core/GeneralProduct.h +315 -261
  73. package/eigen/Eigen/src/Core/GenericPacketMath.h +1182 -520
  74. package/eigen/Eigen/src/Core/GlobalFunctions.h +193 -157
  75. package/eigen/Eigen/src/Core/IO.h +131 -156
  76. package/eigen/Eigen/src/Core/IndexedView.h +209 -125
  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 +50 -59
  80. package/eigen/Eigen/src/Core/Map.h +123 -141
  81. package/eigen/Eigen/src/Core/MapBase.h +255 -282
  82. package/eigen/Eigen/src/Core/MathFunctions.h +1247 -1201
  83. package/eigen/Eigen/src/Core/MathFunctionsImpl.h +162 -99
  84. package/eigen/Eigen/src/Core/Matrix.h +463 -494
  85. package/eigen/Eigen/src/Core/MatrixBase.h +468 -470
  86. package/eigen/Eigen/src/Core/NestByValue.h +58 -52
  87. package/eigen/Eigen/src/Core/NoAlias.h +79 -86
  88. package/eigen/Eigen/src/Core/NumTraits.h +206 -206
  89. package/eigen/Eigen/src/Core/PartialReduxEvaluator.h +163 -142
  90. package/eigen/Eigen/src/Core/PermutationMatrix.h +461 -511
  91. package/eigen/Eigen/src/Core/PlainObjectBase.h +858 -972
  92. package/eigen/Eigen/src/Core/Product.h +246 -130
  93. package/eigen/Eigen/src/Core/ProductEvaluators.h +779 -671
  94. package/eigen/Eigen/src/Core/Random.h +153 -164
  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 +334 -314
  98. package/eigen/Eigen/src/Core/Ref.h +259 -257
  99. package/eigen/Eigen/src/Core/Replicate.h +92 -104
  100. package/eigen/Eigen/src/Core/Reshaped.h +215 -271
  101. package/eigen/Eigen/src/Core/ReturnByValue.h +47 -55
  102. package/eigen/Eigen/src/Core/Reverse.h +133 -148
  103. package/eigen/Eigen/src/Core/Select.h +68 -140
  104. package/eigen/Eigen/src/Core/SelfAdjointView.h +254 -290
  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 +88 -102
  108. package/eigen/Eigen/src/Core/SolveTriangular.h +126 -124
  109. package/eigen/Eigen/src/Core/SolverBase.h +132 -133
  110. package/eigen/Eigen/src/Core/StableNorm.h +113 -147
  111. package/eigen/Eigen/src/Core/StlIterators.h +404 -248
  112. package/eigen/Eigen/src/Core/Stride.h +90 -92
  113. package/eigen/Eigen/src/Core/Swap.h +70 -39
  114. package/eigen/Eigen/src/Core/Transpose.h +258 -295
  115. package/eigen/Eigen/src/Core/Transpositions.h +270 -333
  116. package/eigen/Eigen/src/Core/TriangularMatrix.h +642 -743
  117. package/eigen/Eigen/src/Core/VectorBlock.h +59 -72
  118. package/eigen/Eigen/src/Core/VectorwiseOp.h +653 -704
  119. package/eigen/Eigen/src/Core/Visitor.h +464 -308
  120. package/eigen/Eigen/src/Core/arch/AVX/Complex.h +380 -187
  121. package/eigen/Eigen/src/Core/arch/AVX/MathFunctions.h +65 -163
  122. package/eigen/Eigen/src/Core/arch/AVX/PacketMath.h +2145 -638
  123. package/eigen/Eigen/src/Core/arch/AVX/Reductions.h +353 -0
  124. package/eigen/Eigen/src/Core/arch/AVX/TypeCasting.h +253 -60
  125. package/eigen/Eigen/src/Core/arch/AVX512/Complex.h +278 -228
  126. package/eigen/Eigen/src/Core/arch/AVX512/GemmKernel.h +1245 -0
  127. package/eigen/Eigen/src/Core/arch/AVX512/MathFunctions.h +48 -269
  128. package/eigen/Eigen/src/Core/arch/AVX512/MathFunctionsFP16.h +75 -0
  129. package/eigen/Eigen/src/Core/arch/AVX512/PacketMath.h +1597 -754
  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 +229 -41
  135. package/eigen/Eigen/src/Core/arch/AVX512/TypeCastingFP16.h +130 -0
  136. package/eigen/Eigen/src/Core/arch/AltiVec/Complex.h +420 -184
  137. package/eigen/Eigen/src/Core/arch/AltiVec/MathFunctions.h +40 -49
  138. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProduct.h +2962 -2213
  139. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h +196 -212
  140. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h +713 -441
  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 +2380 -1362
  144. package/eigen/Eigen/src/Core/arch/AltiVec/TypeCasting.h +153 -0
  145. package/eigen/Eigen/src/Core/arch/Default/BFloat16.h +390 -224
  146. package/eigen/Eigen/src/Core/arch/Default/ConjHelper.h +78 -67
  147. package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h +1784 -799
  148. package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h +167 -50
  149. package/eigen/Eigen/src/Core/arch/Default/Half.h +528 -379
  150. package/eigen/Eigen/src/Core/arch/Default/Settings.h +10 -12
  151. package/eigen/Eigen/src/Core/arch/GPU/Complex.h +244 -0
  152. package/eigen/Eigen/src/Core/arch/GPU/MathFunctions.h +41 -40
  153. package/eigen/Eigen/src/Core/arch/GPU/PacketMath.h +550 -523
  154. package/eigen/Eigen/src/Core/arch/GPU/Tuple.h +268 -0
  155. package/eigen/Eigen/src/Core/arch/GPU/TypeCasting.h +27 -30
  156. package/eigen/Eigen/src/Core/arch/HIP/hcc/math_constants.h +8 -8
  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 +54 -82
  164. package/eigen/Eigen/src/Core/arch/MSA/MathFunctions.h +84 -92
  165. package/eigen/Eigen/src/Core/arch/MSA/PacketMath.h +51 -47
  166. package/eigen/Eigen/src/Core/arch/NEON/Complex.h +454 -306
  167. package/eigen/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h +175 -115
  168. package/eigen/Eigen/src/Core/arch/NEON/MathFunctions.h +23 -30
  169. package/eigen/Eigen/src/Core/arch/NEON/PacketMath.h +4366 -2857
  170. package/eigen/Eigen/src/Core/arch/NEON/TypeCasting.h +616 -393
  171. package/eigen/Eigen/src/Core/arch/NEON/UnaryFunctors.h +57 -0
  172. package/eigen/Eigen/src/Core/arch/SSE/Complex.h +350 -198
  173. package/eigen/Eigen/src/Core/arch/SSE/MathFunctions.h +38 -149
  174. package/eigen/Eigen/src/Core/arch/SSE/PacketMath.h +1791 -912
  175. package/eigen/Eigen/src/Core/arch/SSE/Reductions.h +324 -0
  176. package/eigen/Eigen/src/Core/arch/SSE/TypeCasting.h +128 -40
  177. package/eigen/Eigen/src/Core/arch/SVE/MathFunctions.h +10 -6
  178. package/eigen/Eigen/src/Core/arch/SVE/PacketMath.h +156 -234
  179. package/eigen/Eigen/src/Core/arch/SVE/TypeCasting.h +6 -3
  180. package/eigen/Eigen/src/Core/arch/SYCL/InteropHeaders.h +27 -32
  181. package/eigen/Eigen/src/Core/arch/SYCL/MathFunctions.h +119 -117
  182. package/eigen/Eigen/src/Core/arch/SYCL/PacketMath.h +325 -419
  183. package/eigen/Eigen/src/Core/arch/SYCL/TypeCasting.h +15 -17
  184. package/eigen/Eigen/src/Core/arch/ZVector/Complex.h +325 -181
  185. package/eigen/Eigen/src/Core/arch/ZVector/MathFunctions.h +94 -83
  186. package/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h +811 -458
  187. package/eigen/Eigen/src/Core/functors/AssignmentFunctors.h +121 -124
  188. package/eigen/Eigen/src/Core/functors/BinaryFunctors.h +576 -370
  189. package/eigen/Eigen/src/Core/functors/NullaryFunctors.h +194 -109
  190. package/eigen/Eigen/src/Core/functors/StlFunctors.h +95 -112
  191. package/eigen/Eigen/src/Core/functors/TernaryFunctors.h +34 -7
  192. package/eigen/Eigen/src/Core/functors/UnaryFunctors.h +1038 -749
  193. package/eigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h +1883 -1375
  194. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix.h +312 -370
  195. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +189 -176
  196. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h +84 -81
  197. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h +154 -73
  198. package/eigen/Eigen/src/Core/products/GeneralMatrixVector.h +292 -337
  199. package/eigen/Eigen/src/Core/products/GeneralMatrixVector_BLAS.h +80 -77
  200. package/eigen/Eigen/src/Core/products/Parallelizer.h +207 -105
  201. package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +327 -388
  202. package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h +206 -224
  203. package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector.h +138 -147
  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 -47
  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 -277
  212. package/eigen/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h +108 -109
  213. package/eigen/Eigen/src/Core/products/TriangularSolverVector.h +68 -94
  214. package/eigen/Eigen/src/Core/util/Assert.h +158 -0
  215. package/eigen/Eigen/src/Core/util/BlasUtil.h +342 -303
  216. package/eigen/Eigen/src/Core/util/ConfigureVectorization.h +348 -317
  217. package/eigen/Eigen/src/Core/util/Constants.h +297 -262
  218. package/eigen/Eigen/src/Core/util/DisableStupidWarnings.h +130 -90
  219. package/eigen/Eigen/src/Core/util/EmulateArray.h +270 -0
  220. package/eigen/Eigen/src/Core/util/ForwardDeclarations.h +449 -247
  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 +417 -116
  224. package/eigen/Eigen/src/Core/util/IntegralConstant.h +211 -204
  225. package/eigen/Eigen/src/Core/util/MKL_support.h +39 -37
  226. package/eigen/Eigen/src/Core/util/Macros.h +655 -773
  227. package/eigen/Eigen/src/Core/util/MaxSizeVector.h +139 -0
  228. package/eigen/Eigen/src/Core/util/Memory.h +970 -748
  229. package/eigen/Eigen/src/Core/util/Meta.h +581 -633
  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 +17 -17
  233. package/eigen/Eigen/src/Core/util/Serializer.h +209 -0
  234. package/eigen/Eigen/src/Core/util/StaticAssert.h +50 -166
  235. package/eigen/Eigen/src/Core/util/SymbolicIndex.h +377 -225
  236. package/eigen/Eigen/src/Core/util/XprHelper.h +784 -547
  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 +89 -105
  246. package/eigen/Eigen/src/Eigenvalues/RealQZ.h +537 -607
  247. package/eigen/Eigen/src/Eigenvalues/RealSchur.h +342 -381
  248. package/eigen/Eigen/src/Eigenvalues/RealSchur_LAPACKE.h +41 -35
  249. package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +541 -595
  250. package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h +47 -44
  251. package/eigen/Eigen/src/Eigenvalues/Tridiagonalization.h +430 -462
  252. package/eigen/Eigen/src/Geometry/AlignedBox.h +226 -227
  253. package/eigen/Eigen/src/Geometry/AngleAxis.h +131 -133
  254. package/eigen/Eigen/src/Geometry/EulerAngles.h +163 -74
  255. package/eigen/Eigen/src/Geometry/Homogeneous.h +285 -333
  256. package/eigen/Eigen/src/Geometry/Hyperplane.h +151 -160
  257. package/eigen/Eigen/src/Geometry/InternalHeaderCheck.h +3 -0
  258. package/eigen/Eigen/src/Geometry/OrthoMethods.h +168 -146
  259. package/eigen/Eigen/src/Geometry/ParametrizedLine.h +127 -127
  260. package/eigen/Eigen/src/Geometry/Quaternion.h +566 -506
  261. package/eigen/Eigen/src/Geometry/Rotation2D.h +107 -105
  262. package/eigen/Eigen/src/Geometry/RotationBase.h +148 -145
  263. package/eigen/Eigen/src/Geometry/Scaling.h +113 -106
  264. package/eigen/Eigen/src/Geometry/Transform.h +858 -936
  265. package/eigen/Eigen/src/Geometry/Translation.h +94 -92
  266. package/eigen/Eigen/src/Geometry/Umeyama.h +79 -84
  267. package/eigen/Eigen/src/Geometry/arch/Geometry_SIMD.h +90 -104
  268. package/eigen/Eigen/src/Householder/BlockHouseholder.h +51 -46
  269. package/eigen/Eigen/src/Householder/Householder.h +102 -124
  270. package/eigen/Eigen/src/Householder/HouseholderSequence.h +412 -453
  271. package/eigen/Eigen/src/Householder/InternalHeaderCheck.h +3 -0
  272. package/eigen/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +149 -162
  273. package/eigen/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +124 -119
  274. package/eigen/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +92 -104
  275. package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +251 -243
  276. package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +224 -228
  277. package/eigen/Eigen/src/IterativeLinearSolvers/InternalHeaderCheck.h +3 -0
  278. package/eigen/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +178 -227
  279. package/eigen/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h +79 -84
  280. package/eigen/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h +54 -60
  281. package/eigen/Eigen/src/Jacobi/InternalHeaderCheck.h +3 -0
  282. package/eigen/Eigen/src/Jacobi/Jacobi.h +252 -308
  283. package/eigen/Eigen/src/KLUSupport/InternalHeaderCheck.h +3 -0
  284. package/eigen/Eigen/src/KLUSupport/KLUSupport.h +208 -227
  285. package/eigen/Eigen/src/LU/Determinant.h +50 -69
  286. package/eigen/Eigen/src/LU/FullPivLU.h +545 -596
  287. package/eigen/Eigen/src/LU/InternalHeaderCheck.h +3 -0
  288. package/eigen/Eigen/src/LU/InverseImpl.h +206 -285
  289. package/eigen/Eigen/src/LU/PartialPivLU.h +390 -428
  290. package/eigen/Eigen/src/LU/PartialPivLU_LAPACKE.h +54 -40
  291. package/eigen/Eigen/src/LU/arch/InverseSize4.h +72 -70
  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 +243 -265
  295. package/eigen/Eigen/src/OrderingMethods/Eigen_Colamd.h +831 -1004
  296. package/eigen/Eigen/src/OrderingMethods/InternalHeaderCheck.h +3 -0
  297. package/eigen/Eigen/src/OrderingMethods/Ordering.h +112 -119
  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 -430
  302. package/eigen/Eigen/src/QR/ColPivHouseholderQR.h +479 -479
  303. package/eigen/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h +120 -56
  304. package/eigen/Eigen/src/QR/CompleteOrthogonalDecomposition.h +166 -153
  305. package/eigen/Eigen/src/QR/FullPivHouseholderQR.h +495 -475
  306. package/eigen/Eigen/src/QR/HouseholderQR.h +394 -285
  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 +244 -264
  311. package/eigen/Eigen/src/SVD/BDCSVD.h +817 -713
  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 +577 -543
  315. package/eigen/Eigen/src/SVD/JacobiSVD_LAPACKE.h +85 -49
  316. package/eigen/Eigen/src/SVD/SVDBase.h +242 -182
  317. package/eigen/Eigen/src/SVD/UpperBidiagonalization.h +200 -235
  318. package/eigen/Eigen/src/SparseCholesky/InternalHeaderCheck.h +3 -0
  319. package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky.h +765 -594
  320. package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +308 -94
  321. package/eigen/Eigen/src/SparseCore/AmbiVector.h +202 -251
  322. package/eigen/Eigen/src/SparseCore/CompressedStorage.h +184 -252
  323. package/eigen/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +134 -178
  324. package/eigen/Eigen/src/SparseCore/InternalHeaderCheck.h +3 -0
  325. package/eigen/Eigen/src/SparseCore/SparseAssign.h +149 -140
  326. package/eigen/Eigen/src/SparseCore/SparseBlock.h +403 -440
  327. package/eigen/Eigen/src/SparseCore/SparseColEtree.h +100 -112
  328. package/eigen/Eigen/src/SparseCore/SparseCompressedBase.h +525 -303
  329. package/eigen/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +555 -339
  330. package/eigen/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +100 -108
  331. package/eigen/Eigen/src/SparseCore/SparseDenseProduct.h +169 -197
  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 +1603 -1245
  337. package/eigen/Eigen/src/SparseCore/SparseMatrixBase.h +403 -350
  338. package/eigen/Eigen/src/SparseCore/SparsePermutation.h +186 -115
  339. package/eigen/Eigen/src/SparseCore/SparseProduct.h +94 -97
  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 +370 -416
  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 +138 -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 +756 -710
  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 +245 -301
  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 +89 -100
  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 +124 -132
  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 +450 -502
  370. package/eigen/Eigen/src/StlSupport/StdDeque.h +28 -93
  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 -730
  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 +428 -464
  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 +9972 -16179
  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.h → BlockMethods.inc} +434 -506
  401. package/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.inc +116 -0
  402. package/eigen/Eigen/src/plugins/{CommonCwiseUnaryOps.h → CommonCwiseUnaryOps.inc} +58 -68
  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/package.json +1 -1
  409. package/eigen/COPYING.APACHE +0 -203
  410. package/eigen/COPYING.BSD +0 -26
  411. package/eigen/COPYING.GPL +0 -674
  412. package/eigen/COPYING.LGPL +0 -502
  413. package/eigen/COPYING.MINPACK +0 -51
  414. package/eigen/COPYING.MPL2 +0 -373
  415. package/eigen/COPYING.README +0 -18
  416. package/eigen/Eigen/src/Core/BooleanRedux.h +0 -162
  417. package/eigen/Eigen/src/Core/arch/CUDA/Complex.h +0 -258
  418. package/eigen/Eigen/src/Core/arch/Default/TypeCasting.h +0 -120
  419. package/eigen/Eigen/src/Core/arch/SYCL/SyclMemoryModel.h +0 -694
  420. package/eigen/Eigen/src/Core/util/NonMPL2.h +0 -3
  421. package/eigen/Eigen/src/SparseCore/MappedSparseMatrix.h +0 -67
  422. package/eigen/Eigen/src/SparseLU/SparseLU_gemm_kernel.h +0 -280
  423. package/eigen/Eigen/src/misc/lapack.h +0 -152
  424. package/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.h +0 -358
  425. package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.h +0 -696
  426. package/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.h +0 -115
  427. package/eigen/Eigen/src/plugins/IndexedViewMethods.h +0 -262
  428. package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.h +0 -152
  429. package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.h +0 -95
  430. package/eigen/Eigen/src/plugins/ReshapedMethods.h +0 -149
  431. package/eigen/README.md +0 -5
@@ -11,438 +11,419 @@
11
11
  #ifndef EIGEN_BLOCK_H
12
12
  #define EIGEN_BLOCK_H
13
13
 
14
+ // IWYU pragma: private
15
+ #include "./InternalHeaderCheck.h"
16
+
14
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;
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;
64
68
 
65
- } // end namespace internal
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 EIGEN_STRONG_INLINE
118
- 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 EIGEN_STRONG_INLINE
128
- 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 EIGEN_STRONG_INLINE
139
- 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
166
 
151
- // The generic default implementation for dense block simplu forward to the internal::BlockImpl_dense
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 EIGEN_STRONG_INLINE BlockImpl(XprType& xpr, Index i) : Impl(xpr,i) {}
163
- EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE BlockImpl(XprType& xpr, Index startRow, Index startCol) : Impl(xpr, startRow, startCol) {}
164
- EIGEN_DEVICE_FUNC
165
- EIGEN_STRONG_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 EIGEN_STRONG_INLINE
298
- const typename internal::remove_all<XprTypeNested>::type& nestedExpression() const
299
- {
300
- return m_xpr;
301
- }
302
-
303
- EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
304
- XprType& nestedExpression() { return m_xpr; }
305
-
306
- EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE EIGEN_CONSTEXPR
307
- StorageIndex startRow() const EIGEN_NOEXCEPT
308
- {
309
- return m_startRow.value();
310
- }
311
-
312
- EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE EIGEN_CONSTEXPR
313
- StorageIndex startCol() const EIGEN_NOEXCEPT
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 EIGEN_STRONG_INLINE
346
- 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()),
351
340
  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 EIGEN_STRONG_INLINE
361
- 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 EIGEN_STRONG_INLINE
371
- 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 EIGEN_STRONG_INLINE
381
- const typename internal::remove_all<XprTypeNested>::type& nestedExpression() const EIGEN_NOEXCEPT
382
- {
383
- return m_xpr;
384
- }
385
-
386
- EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
387
- XprType& nestedExpression() { return m_xpr; }
388
-
389
- /** \sa MapBase::innerStride() */
390
- EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE EIGEN_CONSTEXPR
391
- Index innerStride() const EIGEN_NOEXCEPT
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 EIGEN_STRONG_INLINE EIGEN_CONSTEXPR
400
- Index outerStride() const EIGEN_NOEXCEPT
401
- {
402
- return internal::traits<BlockType>::HasSameStorageOrderAsXprType
403
- ? m_xpr.outerStride()
404
- : m_xpr.innerStride();
405
- }
406
-
407
- EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE EIGEN_CONSTEXPR
408
- StorageIndex startRow() const EIGEN_NOEXCEPT { return m_startRow.value(); }
409
-
410
- EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE EIGEN_CONSTEXPR
411
- StorageIndex startCol() const EIGEN_NOEXCEPT { return m_startCol.value(); }
412
-
413
- #ifndef __SUNPRO_CC
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),
370
+ m_xpr(xpr),
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
414
397
  // FIXME sunstudio is not friendly with the above friend...
415
398
  // META-FIXME there is no 'friend' keyword around here. Is this obsolete?
416
- protected:
417
- #endif
418
-
419
- #ifndef EIGEN_PARSED_BY_DOXYGEN
420
- /** \internal used by allowAligned() */
421
- EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
422
- BlockImpl_dense(XprType& xpr, const Scalar* data, Index blockRows, Index blockCols)
423
- : Base(data, blockRows, blockCols), m_xpr(xpr)
424
- {
425
- init();
426
- }
427
- #endif
428
-
429
- protected:
430
- EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
431
- void init()
432
- {
433
- m_outerStride = internal::traits<BlockType>::HasSameStorageOrderAsXprType
434
- ? m_xpr.outerStride()
435
- : m_xpr.innerStride();
436
- }
437
-
438
- XprTypeNested m_xpr;
439
- const internal::variable_if_dynamic<StorageIndex, (XprType::RowsAtCompileTime == 1 && BlockRows==1) ? 0 : Dynamic> m_startRow;
440
- const internal::variable_if_dynamic<StorageIndex, (XprType::ColsAtCompileTime == 1 && BlockCols==1) ? 0 : Dynamic> m_startCol;
441
- 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;
442
423
  };
443
424
 
444
- } // end namespace internal
425
+ } // end namespace internal
445
426
 
446
- } // end namespace Eigen
427
+ } // end namespace Eigen
447
428
 
448
- #endif // EIGEN_BLOCK_H
429
+ #endif // EIGEN_BLOCK_H