@smake/eigen 1.0.2 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (435) hide show
  1. package/README.md +1 -1
  2. package/eigen/Eigen/AccelerateSupport +52 -0
  3. package/eigen/Eigen/Cholesky +18 -21
  4. package/eigen/Eigen/CholmodSupport +28 -28
  5. package/eigen/Eigen/Core +235 -326
  6. package/eigen/Eigen/Eigenvalues +16 -14
  7. package/eigen/Eigen/Geometry +21 -24
  8. package/eigen/Eigen/Householder +9 -8
  9. package/eigen/Eigen/IterativeLinearSolvers +8 -4
  10. package/eigen/Eigen/Jacobi +14 -14
  11. package/eigen/Eigen/KLUSupport +43 -0
  12. package/eigen/Eigen/LU +16 -20
  13. package/eigen/Eigen/MetisSupport +12 -12
  14. package/eigen/Eigen/OrderingMethods +54 -54
  15. package/eigen/Eigen/PaStiXSupport +23 -20
  16. package/eigen/Eigen/PardisoSupport +17 -14
  17. package/eigen/Eigen/QR +18 -21
  18. package/eigen/Eigen/QtAlignedMalloc +5 -13
  19. package/eigen/Eigen/SPQRSupport +21 -14
  20. package/eigen/Eigen/SVD +23 -18
  21. package/eigen/Eigen/Sparse +1 -4
  22. package/eigen/Eigen/SparseCholesky +18 -23
  23. package/eigen/Eigen/SparseCore +18 -17
  24. package/eigen/Eigen/SparseLU +12 -8
  25. package/eigen/Eigen/SparseQR +16 -14
  26. package/eigen/Eigen/StdDeque +5 -2
  27. package/eigen/Eigen/StdList +5 -2
  28. package/eigen/Eigen/StdVector +5 -2
  29. package/eigen/Eigen/SuperLUSupport +30 -24
  30. package/eigen/Eigen/ThreadPool +80 -0
  31. package/eigen/Eigen/UmfPackSupport +19 -17
  32. package/eigen/Eigen/Version +14 -0
  33. package/eigen/Eigen/src/AccelerateSupport/AccelerateSupport.h +423 -0
  34. package/eigen/Eigen/src/AccelerateSupport/InternalHeaderCheck.h +3 -0
  35. package/eigen/Eigen/src/Cholesky/InternalHeaderCheck.h +3 -0
  36. package/eigen/Eigen/src/Cholesky/LDLT.h +377 -401
  37. package/eigen/Eigen/src/Cholesky/LLT.h +332 -360
  38. package/eigen/Eigen/src/Cholesky/LLT_LAPACKE.h +81 -56
  39. package/eigen/Eigen/src/CholmodSupport/CholmodSupport.h +620 -521
  40. package/eigen/Eigen/src/CholmodSupport/InternalHeaderCheck.h +3 -0
  41. package/eigen/Eigen/src/Core/ArithmeticSequence.h +239 -0
  42. package/eigen/Eigen/src/Core/Array.h +341 -294
  43. package/eigen/Eigen/src/Core/ArrayBase.h +190 -203
  44. package/eigen/Eigen/src/Core/ArrayWrapper.h +127 -171
  45. package/eigen/Eigen/src/Core/Assign.h +30 -40
  46. package/eigen/Eigen/src/Core/AssignEvaluator.h +711 -589
  47. package/eigen/Eigen/src/Core/Assign_MKL.h +130 -125
  48. package/eigen/Eigen/src/Core/BandMatrix.h +268 -283
  49. package/eigen/Eigen/src/Core/Block.h +375 -398
  50. package/eigen/Eigen/src/Core/CommaInitializer.h +86 -97
  51. package/eigen/Eigen/src/Core/ConditionEstimator.h +51 -53
  52. package/eigen/Eigen/src/Core/CoreEvaluators.h +1356 -1026
  53. package/eigen/Eigen/src/Core/CoreIterators.h +73 -59
  54. package/eigen/Eigen/src/Core/CwiseBinaryOp.h +114 -132
  55. package/eigen/Eigen/src/Core/CwiseNullaryOp.h +726 -617
  56. package/eigen/Eigen/src/Core/CwiseTernaryOp.h +77 -103
  57. package/eigen/Eigen/src/Core/CwiseUnaryOp.h +56 -68
  58. package/eigen/Eigen/src/Core/CwiseUnaryView.h +132 -95
  59. package/eigen/Eigen/src/Core/DenseBase.h +632 -571
  60. package/eigen/Eigen/src/Core/DenseCoeffsBase.h +511 -624
  61. package/eigen/Eigen/src/Core/DenseStorage.h +512 -509
  62. package/eigen/Eigen/src/Core/DeviceWrapper.h +153 -0
  63. package/eigen/Eigen/src/Core/Diagonal.h +169 -210
  64. package/eigen/Eigen/src/Core/DiagonalMatrix.h +351 -274
  65. package/eigen/Eigen/src/Core/DiagonalProduct.h +12 -10
  66. package/eigen/Eigen/src/Core/Dot.h +172 -222
  67. package/eigen/Eigen/src/Core/EigenBase.h +75 -85
  68. package/eigen/Eigen/src/Core/Fill.h +138 -0
  69. package/eigen/Eigen/src/Core/FindCoeff.h +464 -0
  70. package/eigen/Eigen/src/Core/ForceAlignedAccess.h +90 -109
  71. package/eigen/Eigen/src/Core/Fuzzy.h +82 -105
  72. package/eigen/Eigen/src/Core/GeneralProduct.h +327 -263
  73. package/eigen/Eigen/src/Core/GenericPacketMath.h +1472 -360
  74. package/eigen/Eigen/src/Core/GlobalFunctions.h +194 -151
  75. package/eigen/Eigen/src/Core/IO.h +147 -139
  76. package/eigen/Eigen/src/Core/IndexedView.h +321 -0
  77. package/eigen/Eigen/src/Core/InnerProduct.h +260 -0
  78. package/eigen/Eigen/src/Core/InternalHeaderCheck.h +3 -0
  79. package/eigen/Eigen/src/Core/Inverse.h +56 -66
  80. package/eigen/Eigen/src/Core/Map.h +124 -142
  81. package/eigen/Eigen/src/Core/MapBase.h +256 -281
  82. package/eigen/Eigen/src/Core/MathFunctions.h +1620 -938
  83. package/eigen/Eigen/src/Core/MathFunctionsImpl.h +233 -71
  84. package/eigen/Eigen/src/Core/Matrix.h +491 -416
  85. package/eigen/Eigen/src/Core/MatrixBase.h +468 -453
  86. package/eigen/Eigen/src/Core/NestByValue.h +66 -85
  87. package/eigen/Eigen/src/Core/NoAlias.h +79 -85
  88. package/eigen/Eigen/src/Core/NumTraits.h +235 -148
  89. package/eigen/Eigen/src/Core/PartialReduxEvaluator.h +253 -0
  90. package/eigen/Eigen/src/Core/PermutationMatrix.h +461 -511
  91. package/eigen/Eigen/src/Core/PlainObjectBase.h +871 -894
  92. package/eigen/Eigen/src/Core/Product.h +260 -139
  93. package/eigen/Eigen/src/Core/ProductEvaluators.h +863 -714
  94. package/eigen/Eigen/src/Core/Random.h +161 -136
  95. package/eigen/Eigen/src/Core/RandomImpl.h +262 -0
  96. package/eigen/Eigen/src/Core/RealView.h +250 -0
  97. package/eigen/Eigen/src/Core/Redux.h +366 -336
  98. package/eigen/Eigen/src/Core/Ref.h +308 -209
  99. package/eigen/Eigen/src/Core/Replicate.h +94 -106
  100. package/eigen/Eigen/src/Core/Reshaped.h +398 -0
  101. package/eigen/Eigen/src/Core/ReturnByValue.h +49 -55
  102. package/eigen/Eigen/src/Core/Reverse.h +136 -145
  103. package/eigen/Eigen/src/Core/Select.h +70 -140
  104. package/eigen/Eigen/src/Core/SelfAdjointView.h +262 -285
  105. package/eigen/Eigen/src/Core/SelfCwiseBinaryOp.h +23 -20
  106. package/eigen/Eigen/src/Core/SkewSymmetricMatrix3.h +382 -0
  107. package/eigen/Eigen/src/Core/Solve.h +97 -111
  108. package/eigen/Eigen/src/Core/SolveTriangular.h +131 -129
  109. package/eigen/Eigen/src/Core/SolverBase.h +138 -101
  110. package/eigen/Eigen/src/Core/StableNorm.h +156 -160
  111. package/eigen/Eigen/src/Core/StlIterators.h +619 -0
  112. package/eigen/Eigen/src/Core/Stride.h +91 -88
  113. package/eigen/Eigen/src/Core/Swap.h +70 -38
  114. package/eigen/Eigen/src/Core/Transpose.h +295 -273
  115. package/eigen/Eigen/src/Core/Transpositions.h +272 -317
  116. package/eigen/Eigen/src/Core/TriangularMatrix.h +670 -755
  117. package/eigen/Eigen/src/Core/VectorBlock.h +59 -72
  118. package/eigen/Eigen/src/Core/VectorwiseOp.h +668 -630
  119. package/eigen/Eigen/src/Core/Visitor.h +480 -216
  120. package/eigen/Eigen/src/Core/arch/AVX/Complex.h +407 -293
  121. package/eigen/Eigen/src/Core/arch/AVX/MathFunctions.h +79 -388
  122. package/eigen/Eigen/src/Core/arch/AVX/PacketMath.h +2935 -491
  123. package/eigen/Eigen/src/Core/arch/AVX/Reductions.h +353 -0
  124. package/eigen/Eigen/src/Core/arch/AVX/TypeCasting.h +279 -22
  125. package/eigen/Eigen/src/Core/arch/AVX512/Complex.h +472 -0
  126. package/eigen/Eigen/src/Core/arch/AVX512/GemmKernel.h +1245 -0
  127. package/eigen/Eigen/src/Core/arch/AVX512/MathFunctions.h +85 -333
  128. package/eigen/Eigen/src/Core/arch/AVX512/MathFunctionsFP16.h +75 -0
  129. package/eigen/Eigen/src/Core/arch/AVX512/PacketMath.h +2490 -649
  130. package/eigen/Eigen/src/Core/arch/AVX512/PacketMathFP16.h +1413 -0
  131. package/eigen/Eigen/src/Core/arch/AVX512/Reductions.h +297 -0
  132. package/eigen/Eigen/src/Core/arch/AVX512/TrsmKernel.h +1167 -0
  133. package/eigen/Eigen/src/Core/arch/AVX512/TrsmUnrolls.inc +1219 -0
  134. package/eigen/Eigen/src/Core/arch/AVX512/TypeCasting.h +277 -0
  135. package/eigen/Eigen/src/Core/arch/AVX512/TypeCastingFP16.h +130 -0
  136. package/eigen/Eigen/src/Core/arch/AltiVec/Complex.h +521 -298
  137. package/eigen/Eigen/src/Core/arch/AltiVec/MathFunctions.h +39 -280
  138. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProduct.h +3686 -0
  139. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h +205 -0
  140. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h +901 -0
  141. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMAbfloat16.h +742 -0
  142. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixVectorProduct.inc +2818 -0
  143. package/eigen/Eigen/src/Core/arch/AltiVec/PacketMath.h +3391 -723
  144. package/eigen/Eigen/src/Core/arch/AltiVec/TypeCasting.h +153 -0
  145. package/eigen/Eigen/src/Core/arch/Default/BFloat16.h +866 -0
  146. package/eigen/Eigen/src/Core/arch/Default/ConjHelper.h +113 -14
  147. package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h +2634 -0
  148. package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h +227 -0
  149. package/eigen/Eigen/src/Core/arch/Default/Half.h +1091 -0
  150. package/eigen/Eigen/src/Core/arch/Default/Settings.h +11 -13
  151. package/eigen/Eigen/src/Core/arch/GPU/Complex.h +244 -0
  152. package/eigen/Eigen/src/Core/arch/GPU/MathFunctions.h +104 -0
  153. package/eigen/Eigen/src/Core/arch/GPU/PacketMath.h +1712 -0
  154. package/eigen/Eigen/src/Core/arch/GPU/Tuple.h +268 -0
  155. package/eigen/Eigen/src/Core/arch/GPU/TypeCasting.h +77 -0
  156. package/eigen/Eigen/src/Core/arch/HIP/hcc/math_constants.h +23 -0
  157. package/eigen/Eigen/src/Core/arch/HVX/PacketMath.h +1088 -0
  158. package/eigen/Eigen/src/Core/arch/LSX/Complex.h +520 -0
  159. package/eigen/Eigen/src/Core/arch/LSX/GeneralBlockPanelKernel.h +23 -0
  160. package/eigen/Eigen/src/Core/arch/LSX/MathFunctions.h +43 -0
  161. package/eigen/Eigen/src/Core/arch/LSX/PacketMath.h +2866 -0
  162. package/eigen/Eigen/src/Core/arch/LSX/TypeCasting.h +526 -0
  163. package/eigen/Eigen/src/Core/arch/MSA/Complex.h +620 -0
  164. package/eigen/Eigen/src/Core/arch/MSA/MathFunctions.h +379 -0
  165. package/eigen/Eigen/src/Core/arch/MSA/PacketMath.h +1237 -0
  166. package/eigen/Eigen/src/Core/arch/NEON/Complex.h +531 -289
  167. package/eigen/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h +243 -0
  168. package/eigen/Eigen/src/Core/arch/NEON/MathFunctions.h +50 -73
  169. package/eigen/Eigen/src/Core/arch/NEON/PacketMath.h +5915 -579
  170. package/eigen/Eigen/src/Core/arch/NEON/TypeCasting.h +1642 -0
  171. package/eigen/Eigen/src/Core/arch/NEON/UnaryFunctors.h +57 -0
  172. package/eigen/Eigen/src/Core/arch/SSE/Complex.h +366 -334
  173. package/eigen/Eigen/src/Core/arch/SSE/MathFunctions.h +40 -514
  174. package/eigen/Eigen/src/Core/arch/SSE/PacketMath.h +2164 -675
  175. package/eigen/Eigen/src/Core/arch/SSE/Reductions.h +324 -0
  176. package/eigen/Eigen/src/Core/arch/SSE/TypeCasting.h +188 -35
  177. package/eigen/Eigen/src/Core/arch/SVE/MathFunctions.h +48 -0
  178. package/eigen/Eigen/src/Core/arch/SVE/PacketMath.h +674 -0
  179. package/eigen/Eigen/src/Core/arch/SVE/TypeCasting.h +52 -0
  180. package/eigen/Eigen/src/Core/arch/SYCL/InteropHeaders.h +227 -0
  181. package/eigen/Eigen/src/Core/arch/SYCL/MathFunctions.h +303 -0
  182. package/eigen/Eigen/src/Core/arch/SYCL/PacketMath.h +576 -0
  183. package/eigen/Eigen/src/Core/arch/SYCL/TypeCasting.h +83 -0
  184. package/eigen/Eigen/src/Core/arch/ZVector/Complex.h +434 -261
  185. package/eigen/Eigen/src/Core/arch/ZVector/MathFunctions.h +160 -53
  186. package/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h +1073 -605
  187. package/eigen/Eigen/src/Core/functors/AssignmentFunctors.h +123 -117
  188. package/eigen/Eigen/src/Core/functors/BinaryFunctors.h +594 -322
  189. package/eigen/Eigen/src/Core/functors/NullaryFunctors.h +204 -118
  190. package/eigen/Eigen/src/Core/functors/StlFunctors.h +110 -97
  191. package/eigen/Eigen/src/Core/functors/TernaryFunctors.h +34 -7
  192. package/eigen/Eigen/src/Core/functors/UnaryFunctors.h +1158 -530
  193. package/eigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h +2329 -1333
  194. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix.h +328 -364
  195. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +191 -178
  196. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h +85 -82
  197. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h +154 -73
  198. package/eigen/Eigen/src/Core/products/GeneralMatrixVector.h +396 -542
  199. package/eigen/Eigen/src/Core/products/GeneralMatrixVector_BLAS.h +80 -77
  200. package/eigen/Eigen/src/Core/products/Parallelizer.h +208 -92
  201. package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +331 -375
  202. package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h +206 -224
  203. package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector.h +139 -146
  204. package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector_BLAS.h +58 -61
  205. package/eigen/Eigen/src/Core/products/SelfadjointProduct.h +71 -71
  206. package/eigen/Eigen/src/Core/products/SelfadjointRank2Update.h +48 -46
  207. package/eigen/Eigen/src/Core/products/TriangularMatrixMatrix.h +294 -369
  208. package/eigen/Eigen/src/Core/products/TriangularMatrixMatrix_BLAS.h +246 -238
  209. package/eigen/Eigen/src/Core/products/TriangularMatrixVector.h +244 -247
  210. package/eigen/Eigen/src/Core/products/TriangularMatrixVector_BLAS.h +212 -192
  211. package/eigen/Eigen/src/Core/products/TriangularSolverMatrix.h +328 -275
  212. package/eigen/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h +108 -109
  213. package/eigen/Eigen/src/Core/products/TriangularSolverVector.h +70 -93
  214. package/eigen/Eigen/src/Core/util/Assert.h +158 -0
  215. package/eigen/Eigen/src/Core/util/BlasUtil.h +413 -290
  216. package/eigen/Eigen/src/Core/util/ConfigureVectorization.h +543 -0
  217. package/eigen/Eigen/src/Core/util/Constants.h +314 -263
  218. package/eigen/Eigen/src/Core/util/DisableStupidWarnings.h +130 -78
  219. package/eigen/Eigen/src/Core/util/EmulateArray.h +270 -0
  220. package/eigen/Eigen/src/Core/util/ForwardDeclarations.h +450 -224
  221. package/eigen/Eigen/src/Core/util/GpuHipCudaDefines.inc +101 -0
  222. package/eigen/Eigen/src/Core/util/GpuHipCudaUndefines.inc +45 -0
  223. package/eigen/Eigen/src/Core/util/IndexedViewHelper.h +487 -0
  224. package/eigen/Eigen/src/Core/util/IntegralConstant.h +279 -0
  225. package/eigen/Eigen/src/Core/util/MKL_support.h +39 -30
  226. package/eigen/Eigen/src/Core/util/Macros.h +939 -646
  227. package/eigen/Eigen/src/Core/util/MaxSizeVector.h +139 -0
  228. package/eigen/Eigen/src/Core/util/Memory.h +1042 -650
  229. package/eigen/Eigen/src/Core/util/Meta.h +618 -426
  230. package/eigen/Eigen/src/Core/util/MoreMeta.h +638 -0
  231. package/eigen/Eigen/src/Core/util/ReenableStupidWarnings.h +32 -19
  232. package/eigen/Eigen/src/Core/util/ReshapedHelper.h +51 -0
  233. package/eigen/Eigen/src/Core/util/Serializer.h +209 -0
  234. package/eigen/Eigen/src/Core/util/StaticAssert.h +51 -164
  235. package/eigen/Eigen/src/Core/util/SymbolicIndex.h +445 -0
  236. package/eigen/Eigen/src/Core/util/XprHelper.h +793 -538
  237. package/eigen/Eigen/src/Eigenvalues/ComplexEigenSolver.h +246 -277
  238. package/eigen/Eigen/src/Eigenvalues/ComplexSchur.h +299 -319
  239. package/eigen/Eigen/src/Eigenvalues/ComplexSchur_LAPACKE.h +52 -48
  240. package/eigen/Eigen/src/Eigenvalues/EigenSolver.h +413 -456
  241. package/eigen/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h +309 -325
  242. package/eigen/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h +157 -171
  243. package/eigen/Eigen/src/Eigenvalues/HessenbergDecomposition.h +292 -310
  244. package/eigen/Eigen/src/Eigenvalues/InternalHeaderCheck.h +3 -0
  245. package/eigen/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h +91 -107
  246. package/eigen/Eigen/src/Eigenvalues/RealQZ.h +539 -606
  247. package/eigen/Eigen/src/Eigenvalues/RealSchur.h +348 -382
  248. package/eigen/Eigen/src/Eigenvalues/RealSchur_LAPACKE.h +41 -35
  249. package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +579 -600
  250. package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h +47 -44
  251. package/eigen/Eigen/src/Eigenvalues/Tridiagonalization.h +434 -461
  252. package/eigen/Eigen/src/Geometry/AlignedBox.h +307 -214
  253. package/eigen/Eigen/src/Geometry/AngleAxis.h +135 -137
  254. package/eigen/Eigen/src/Geometry/EulerAngles.h +163 -74
  255. package/eigen/Eigen/src/Geometry/Homogeneous.h +289 -333
  256. package/eigen/Eigen/src/Geometry/Hyperplane.h +152 -161
  257. package/eigen/Eigen/src/Geometry/InternalHeaderCheck.h +3 -0
  258. package/eigen/Eigen/src/Geometry/OrthoMethods.h +168 -145
  259. package/eigen/Eigen/src/Geometry/ParametrizedLine.h +141 -104
  260. package/eigen/Eigen/src/Geometry/Quaternion.h +595 -497
  261. package/eigen/Eigen/src/Geometry/Rotation2D.h +110 -108
  262. package/eigen/Eigen/src/Geometry/RotationBase.h +148 -145
  263. package/eigen/Eigen/src/Geometry/Scaling.h +115 -90
  264. package/eigen/Eigen/src/Geometry/Transform.h +896 -953
  265. package/eigen/Eigen/src/Geometry/Translation.h +100 -98
  266. package/eigen/Eigen/src/Geometry/Umeyama.h +79 -84
  267. package/eigen/Eigen/src/Geometry/arch/Geometry_SIMD.h +154 -0
  268. package/eigen/Eigen/src/Householder/BlockHouseholder.h +54 -42
  269. package/eigen/Eigen/src/Householder/Householder.h +104 -122
  270. package/eigen/Eigen/src/Householder/HouseholderSequence.h +416 -382
  271. package/eigen/Eigen/src/Householder/InternalHeaderCheck.h +3 -0
  272. package/eigen/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +153 -166
  273. package/eigen/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +127 -138
  274. package/eigen/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +95 -124
  275. package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +269 -267
  276. package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +246 -259
  277. package/eigen/Eigen/src/IterativeLinearSolvers/InternalHeaderCheck.h +3 -0
  278. package/eigen/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +218 -217
  279. package/eigen/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h +80 -103
  280. package/eigen/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h +59 -63
  281. package/eigen/Eigen/src/Jacobi/InternalHeaderCheck.h +3 -0
  282. package/eigen/Eigen/src/Jacobi/Jacobi.h +256 -291
  283. package/eigen/Eigen/src/KLUSupport/InternalHeaderCheck.h +3 -0
  284. package/eigen/Eigen/src/KLUSupport/KLUSupport.h +339 -0
  285. package/eigen/Eigen/src/LU/Determinant.h +60 -63
  286. package/eigen/Eigen/src/LU/FullPivLU.h +561 -626
  287. package/eigen/Eigen/src/LU/InternalHeaderCheck.h +3 -0
  288. package/eigen/Eigen/src/LU/InverseImpl.h +213 -275
  289. package/eigen/Eigen/src/LU/PartialPivLU.h +407 -435
  290. package/eigen/Eigen/src/LU/PartialPivLU_LAPACKE.h +54 -40
  291. package/eigen/Eigen/src/LU/arch/InverseSize4.h +353 -0
  292. package/eigen/Eigen/src/MetisSupport/InternalHeaderCheck.h +3 -0
  293. package/eigen/Eigen/src/MetisSupport/MetisSupport.h +81 -93
  294. package/eigen/Eigen/src/OrderingMethods/Amd.h +250 -282
  295. package/eigen/Eigen/src/OrderingMethods/Eigen_Colamd.h +950 -1103
  296. package/eigen/Eigen/src/OrderingMethods/InternalHeaderCheck.h +3 -0
  297. package/eigen/Eigen/src/OrderingMethods/Ordering.h +111 -122
  298. package/eigen/Eigen/src/PaStiXSupport/InternalHeaderCheck.h +3 -0
  299. package/eigen/Eigen/src/PaStiXSupport/PaStiXSupport.h +524 -570
  300. package/eigen/Eigen/src/PardisoSupport/InternalHeaderCheck.h +3 -0
  301. package/eigen/Eigen/src/PardisoSupport/PardisoSupport.h +385 -429
  302. package/eigen/Eigen/src/QR/ColPivHouseholderQR.h +494 -473
  303. package/eigen/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h +120 -56
  304. package/eigen/Eigen/src/QR/CompleteOrthogonalDecomposition.h +223 -137
  305. package/eigen/Eigen/src/QR/FullPivHouseholderQR.h +517 -460
  306. package/eigen/Eigen/src/QR/HouseholderQR.h +412 -278
  307. package/eigen/Eigen/src/QR/HouseholderQR_LAPACKE.h +32 -23
  308. package/eigen/Eigen/src/QR/InternalHeaderCheck.h +3 -0
  309. package/eigen/Eigen/src/SPQRSupport/InternalHeaderCheck.h +3 -0
  310. package/eigen/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h +263 -261
  311. package/eigen/Eigen/src/SVD/BDCSVD.h +872 -679
  312. package/eigen/Eigen/src/SVD/BDCSVD_LAPACKE.h +174 -0
  313. package/eigen/Eigen/src/SVD/InternalHeaderCheck.h +3 -0
  314. package/eigen/Eigen/src/SVD/JacobiSVD.h +585 -543
  315. package/eigen/Eigen/src/SVD/JacobiSVD_LAPACKE.h +85 -49
  316. package/eigen/Eigen/src/SVD/SVDBase.h +281 -160
  317. package/eigen/Eigen/src/SVD/UpperBidiagonalization.h +202 -237
  318. package/eigen/Eigen/src/SparseCholesky/InternalHeaderCheck.h +3 -0
  319. package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky.h +769 -590
  320. package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +318 -129
  321. package/eigen/Eigen/src/SparseCore/AmbiVector.h +202 -251
  322. package/eigen/Eigen/src/SparseCore/CompressedStorage.h +184 -236
  323. package/eigen/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +140 -184
  324. package/eigen/Eigen/src/SparseCore/InternalHeaderCheck.h +3 -0
  325. package/eigen/Eigen/src/SparseCore/SparseAssign.h +174 -111
  326. package/eigen/Eigen/src/SparseCore/SparseBlock.h +408 -477
  327. package/eigen/Eigen/src/SparseCore/SparseColEtree.h +100 -112
  328. package/eigen/Eigen/src/SparseCore/SparseCompressedBase.h +531 -280
  329. package/eigen/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +559 -347
  330. package/eigen/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +100 -108
  331. package/eigen/Eigen/src/SparseCore/SparseDenseProduct.h +185 -191
  332. package/eigen/Eigen/src/SparseCore/SparseDiagonalProduct.h +71 -71
  333. package/eigen/Eigen/src/SparseCore/SparseDot.h +49 -47
  334. package/eigen/Eigen/src/SparseCore/SparseFuzzy.h +13 -11
  335. package/eigen/Eigen/src/SparseCore/SparseMap.h +243 -253
  336. package/eigen/Eigen/src/SparseCore/SparseMatrix.h +1614 -1142
  337. package/eigen/Eigen/src/SparseCore/SparseMatrixBase.h +403 -357
  338. package/eigen/Eigen/src/SparseCore/SparsePermutation.h +186 -115
  339. package/eigen/Eigen/src/SparseCore/SparseProduct.h +100 -91
  340. package/eigen/Eigen/src/SparseCore/SparseRedux.h +22 -24
  341. package/eigen/Eigen/src/SparseCore/SparseRef.h +268 -295
  342. package/eigen/Eigen/src/SparseCore/SparseSelfAdjointView.h +371 -414
  343. package/eigen/Eigen/src/SparseCore/SparseSolverBase.h +78 -87
  344. package/eigen/Eigen/src/SparseCore/SparseSparseProductWithPruning.h +81 -95
  345. package/eigen/Eigen/src/SparseCore/SparseTranspose.h +62 -71
  346. package/eigen/Eigen/src/SparseCore/SparseTriangularView.h +132 -144
  347. package/eigen/Eigen/src/SparseCore/SparseUtil.h +146 -115
  348. package/eigen/Eigen/src/SparseCore/SparseVector.h +426 -372
  349. package/eigen/Eigen/src/SparseCore/SparseView.h +164 -193
  350. package/eigen/Eigen/src/SparseCore/TriangularSolver.h +129 -170
  351. package/eigen/Eigen/src/SparseLU/InternalHeaderCheck.h +3 -0
  352. package/eigen/Eigen/src/SparseLU/SparseLU.h +814 -618
  353. package/eigen/Eigen/src/SparseLU/SparseLUImpl.h +61 -48
  354. package/eigen/Eigen/src/SparseLU/SparseLU_Memory.h +102 -118
  355. package/eigen/Eigen/src/SparseLU/SparseLU_Structs.h +38 -35
  356. package/eigen/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h +273 -255
  357. package/eigen/Eigen/src/SparseLU/SparseLU_Utils.h +44 -49
  358. package/eigen/Eigen/src/SparseLU/SparseLU_column_bmod.h +104 -108
  359. package/eigen/Eigen/src/SparseLU/SparseLU_column_dfs.h +90 -101
  360. package/eigen/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h +57 -58
  361. package/eigen/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h +43 -55
  362. package/eigen/Eigen/src/SparseLU/SparseLU_kernel_bmod.h +74 -71
  363. package/eigen/Eigen/src/SparseLU/SparseLU_panel_bmod.h +125 -133
  364. package/eigen/Eigen/src/SparseLU/SparseLU_panel_dfs.h +136 -159
  365. package/eigen/Eigen/src/SparseLU/SparseLU_pivotL.h +51 -52
  366. package/eigen/Eigen/src/SparseLU/SparseLU_pruneL.h +67 -73
  367. package/eigen/Eigen/src/SparseLU/SparseLU_relax_snode.h +24 -26
  368. package/eigen/Eigen/src/SparseQR/InternalHeaderCheck.h +3 -0
  369. package/eigen/Eigen/src/SparseQR/SparseQR.h +451 -490
  370. package/eigen/Eigen/src/StlSupport/StdDeque.h +28 -105
  371. package/eigen/Eigen/src/StlSupport/StdList.h +28 -84
  372. package/eigen/Eigen/src/StlSupport/StdVector.h +28 -108
  373. package/eigen/Eigen/src/StlSupport/details.h +48 -50
  374. package/eigen/Eigen/src/SuperLUSupport/InternalHeaderCheck.h +3 -0
  375. package/eigen/Eigen/src/SuperLUSupport/SuperLUSupport.h +634 -732
  376. package/eigen/Eigen/src/ThreadPool/Barrier.h +70 -0
  377. package/eigen/Eigen/src/ThreadPool/CoreThreadPoolDevice.h +336 -0
  378. package/eigen/Eigen/src/ThreadPool/EventCount.h +241 -0
  379. package/eigen/Eigen/src/ThreadPool/ForkJoin.h +140 -0
  380. package/eigen/Eigen/src/ThreadPool/InternalHeaderCheck.h +4 -0
  381. package/eigen/Eigen/src/ThreadPool/NonBlockingThreadPool.h +587 -0
  382. package/eigen/Eigen/src/ThreadPool/RunQueue.h +230 -0
  383. package/eigen/Eigen/src/ThreadPool/ThreadCancel.h +21 -0
  384. package/eigen/Eigen/src/ThreadPool/ThreadEnvironment.h +43 -0
  385. package/eigen/Eigen/src/ThreadPool/ThreadLocal.h +289 -0
  386. package/eigen/Eigen/src/ThreadPool/ThreadPoolInterface.h +50 -0
  387. package/eigen/Eigen/src/ThreadPool/ThreadYield.h +16 -0
  388. package/eigen/Eigen/src/UmfPackSupport/InternalHeaderCheck.h +3 -0
  389. package/eigen/Eigen/src/UmfPackSupport/UmfPackSupport.h +480 -380
  390. package/eigen/Eigen/src/misc/Image.h +41 -43
  391. package/eigen/Eigen/src/misc/InternalHeaderCheck.h +3 -0
  392. package/eigen/Eigen/src/misc/Kernel.h +39 -41
  393. package/eigen/Eigen/src/misc/RealSvd2x2.h +19 -21
  394. package/eigen/Eigen/src/misc/blas.h +83 -426
  395. package/eigen/Eigen/src/misc/lapacke.h +9976 -16182
  396. package/eigen/Eigen/src/misc/lapacke_helpers.h +163 -0
  397. package/eigen/Eigen/src/misc/lapacke_mangling.h +4 -5
  398. package/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.inc +344 -0
  399. package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.inc +544 -0
  400. package/eigen/Eigen/src/plugins/BlockMethods.inc +1370 -0
  401. package/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.inc +116 -0
  402. package/eigen/Eigen/src/plugins/CommonCwiseUnaryOps.inc +167 -0
  403. package/eigen/Eigen/src/plugins/IndexedViewMethods.inc +192 -0
  404. package/eigen/Eigen/src/plugins/InternalHeaderCheck.inc +3 -0
  405. package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.inc +331 -0
  406. package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.inc +118 -0
  407. package/eigen/Eigen/src/plugins/ReshapedMethods.inc +133 -0
  408. package/lib/LibEigen.d.ts +4 -0
  409. package/lib/LibEigen.js +14 -0
  410. package/lib/index.d.ts +1 -1
  411. package/lib/index.js +7 -3
  412. package/package.json +2 -10
  413. package/eigen/Eigen/CMakeLists.txt +0 -19
  414. package/eigen/Eigen/src/Core/BooleanRedux.h +0 -164
  415. package/eigen/Eigen/src/Core/arch/CUDA/Complex.h +0 -103
  416. package/eigen/Eigen/src/Core/arch/CUDA/Half.h +0 -675
  417. package/eigen/Eigen/src/Core/arch/CUDA/MathFunctions.h +0 -91
  418. package/eigen/Eigen/src/Core/arch/CUDA/PacketMath.h +0 -333
  419. package/eigen/Eigen/src/Core/arch/CUDA/PacketMathHalf.h +0 -1124
  420. package/eigen/Eigen/src/Core/arch/CUDA/TypeCasting.h +0 -212
  421. package/eigen/Eigen/src/Core/util/NonMPL2.h +0 -3
  422. package/eigen/Eigen/src/Geometry/arch/Geometry_SSE.h +0 -161
  423. package/eigen/Eigen/src/LU/arch/Inverse_SSE.h +0 -338
  424. package/eigen/Eigen/src/SparseCore/MappedSparseMatrix.h +0 -67
  425. package/eigen/Eigen/src/SparseLU/SparseLU_gemm_kernel.h +0 -280
  426. package/eigen/Eigen/src/misc/lapack.h +0 -152
  427. package/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.h +0 -332
  428. package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.h +0 -552
  429. package/eigen/Eigen/src/plugins/BlockMethods.h +0 -1058
  430. package/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.h +0 -115
  431. package/eigen/Eigen/src/plugins/CommonCwiseUnaryOps.h +0 -163
  432. package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.h +0 -152
  433. package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.h +0 -85
  434. package/lib/eigen.d.ts +0 -2
  435. package/lib/eigen.js +0 -15
@@ -0,0 +1,1370 @@
1
+ // This file is part of Eigen, a lightweight C++ template library
2
+ // for linear algebra.
3
+ //
4
+ // Copyright (C) 2008-2010 Gael Guennebaud <gael.guennebaud@inria.fr>
5
+ // Copyright (C) 2006-2010 Benoit Jacob <jacob.benoit.1@gmail.com>
6
+ //
7
+ // This Source Code Form is subject to the terms of the Mozilla
8
+ // Public License v. 2.0. If a copy of the MPL was not distributed
9
+ // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
10
+
11
+ #ifndef EIGEN_PARSED_BY_DOXYGEN
12
+
13
+ /// \internal expression type of a column */
14
+ typedef Block<Derived, internal::traits<Derived>::RowsAtCompileTime, 1, !IsRowMajor> ColXpr;
15
+ typedef const Block<const Derived, internal::traits<Derived>::RowsAtCompileTime, 1, !IsRowMajor> ConstColXpr;
16
+ /// \internal expression type of a row */
17
+ typedef Block<Derived, 1, internal::traits<Derived>::ColsAtCompileTime, IsRowMajor> RowXpr;
18
+ typedef const Block<const Derived, 1, internal::traits<Derived>::ColsAtCompileTime, IsRowMajor> ConstRowXpr;
19
+ /// \internal expression type of a block of whole columns */
20
+ typedef Block<Derived, internal::traits<Derived>::RowsAtCompileTime, Dynamic, !IsRowMajor> ColsBlockXpr;
21
+ typedef const Block<const Derived, internal::traits<Derived>::RowsAtCompileTime, Dynamic, !IsRowMajor>
22
+ ConstColsBlockXpr;
23
+ /// \internal expression type of a block of whole rows */
24
+ typedef Block<Derived, Dynamic, internal::traits<Derived>::ColsAtCompileTime, IsRowMajor> RowsBlockXpr;
25
+ typedef const Block<const Derived, Dynamic, internal::traits<Derived>::ColsAtCompileTime, IsRowMajor> ConstRowsBlockXpr;
26
+ /// \internal expression type of a block of whole columns */
27
+ template <int N>
28
+ struct NColsBlockXpr {
29
+ typedef Block<Derived, internal::traits<Derived>::RowsAtCompileTime, N, !IsRowMajor> Type;
30
+ };
31
+ template <int N>
32
+ struct ConstNColsBlockXpr {
33
+ typedef const Block<const Derived, internal::traits<Derived>::RowsAtCompileTime, N, !IsRowMajor> Type;
34
+ };
35
+ /// \internal expression type of a block of whole rows */
36
+ template <int N>
37
+ struct NRowsBlockXpr {
38
+ typedef Block<Derived, N, internal::traits<Derived>::ColsAtCompileTime, IsRowMajor> Type;
39
+ };
40
+ template <int N>
41
+ struct ConstNRowsBlockXpr {
42
+ typedef const Block<const Derived, N, internal::traits<Derived>::ColsAtCompileTime, IsRowMajor> Type;
43
+ };
44
+ /// \internal expression of a block */
45
+ typedef Block<Derived> BlockXpr;
46
+ typedef const Block<const Derived> ConstBlockXpr;
47
+ /// \internal expression of a block of fixed sizes */
48
+ template <int Rows, int Cols>
49
+ struct FixedBlockXpr {
50
+ typedef Block<Derived, Rows, Cols> Type;
51
+ };
52
+ template <int Rows, int Cols>
53
+ struct ConstFixedBlockXpr {
54
+ typedef Block<const Derived, Rows, Cols> Type;
55
+ };
56
+
57
+ typedef VectorBlock<Derived> SegmentReturnType;
58
+ typedef const VectorBlock<const Derived> ConstSegmentReturnType;
59
+ template <int Size>
60
+ struct FixedSegmentReturnType {
61
+ typedef VectorBlock<Derived, Size> Type;
62
+ };
63
+ template <int Size>
64
+ struct ConstFixedSegmentReturnType {
65
+ typedef const VectorBlock<const Derived, Size> Type;
66
+ };
67
+
68
+ /// \internal inner-vector
69
+ typedef Block<Derived, IsRowMajor ? 1 : Dynamic, IsRowMajor ? Dynamic : 1, true> InnerVectorReturnType;
70
+ typedef Block<const Derived, IsRowMajor ? 1 : Dynamic, IsRowMajor ? Dynamic : 1, true> ConstInnerVectorReturnType;
71
+
72
+ /// \internal set of inner-vectors
73
+ typedef Block<Derived, Dynamic, Dynamic, true> InnerVectorsReturnType;
74
+ typedef Block<const Derived, Dynamic, Dynamic, true> ConstInnerVectorsReturnType;
75
+
76
+ #endif // not EIGEN_PARSED_BY_DOXYGEN
77
+
78
+ /// \returns an expression of a block in \c *this with either dynamic or fixed sizes.
79
+ ///
80
+ /// \param startRow the first row in the block
81
+ /// \param startCol the first column in the block
82
+ /// \param blockRows number of rows in the block, specified at either run-time or compile-time
83
+ /// \param blockCols number of columns in the block, specified at either run-time or compile-time
84
+ /// \tparam NRowsType the type of the value handling the number of rows in the block, typically Index.
85
+ /// \tparam NColsType the type of the value handling the number of columns in the block, typically Index.
86
+ ///
87
+ /// Example using runtime (aka dynamic) sizes: \include MatrixBase_block_int_int_int_int.cpp
88
+ /// Output: \verbinclude MatrixBase_block_int_int_int_int.out
89
+ ///
90
+ /// \newin{3.4}:
91
+ ///
92
+ /// The number of rows \a blockRows and columns \a blockCols can also be specified at compile-time by passing
93
+ /// Eigen::fix<N>, or Eigen::fix<N>(n) as arguments. In the later case, \c n plays the role of a runtime fallback value
94
+ /// in case \c N equals Eigen::Dynamic. Here is an example with a fixed number of rows \c NRows and dynamic number of
95
+ /// columns \c cols: \code mat.block(i,j,fix<NRows>,cols) \endcode
96
+ ///
97
+ /// This function thus fully covers the features offered by the following overloads block<NRows,NCols>(Index, Index),
98
+ /// and block<NRows,NCols>(Index, Index, Index, Index) that are thus obsolete. Indeed, this generic version avoids
99
+ /// redundancy, it preserves the argument order, and prevents the need to rely on the template keyword in templated
100
+ /// code.
101
+ ///
102
+ /// but with less redundancy and more consistency as it does not modify the argument order
103
+ /// and seamlessly enable hybrid fixed/dynamic sizes.
104
+ ///
105
+ /// \note Even in the case that the returned expression has dynamic size, in the case
106
+ /// when it is applied to a fixed-size matrix, it inherits a fixed maximal size,
107
+ /// which means that evaluating it does not cause a dynamic memory allocation.
108
+ ///
109
+ EIGEN_DOC_BLOCK_ADDONS_NOT_INNER_PANEL
110
+ ///
111
+ /// \sa class Block, fix, fix<N>(int)
112
+ ///
113
+ template <typename NRowsType, typename NColsType>
114
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
115
+ #ifndef EIGEN_PARSED_BY_DOXYGEN
116
+ typename FixedBlockXpr<internal::get_fixed_value<NRowsType>::value,
117
+ internal::get_fixed_value<NColsType>::value>::Type
118
+ #else
119
+ typename FixedBlockXpr<..., ...>::Type
120
+ #endif
121
+ block(Index startRow, Index startCol, NRowsType blockRows, NColsType blockCols) {
122
+ return
123
+ typename FixedBlockXpr<internal::get_fixed_value<NRowsType>::value,
124
+ internal::get_fixed_value<NColsType>::value>::Type(derived(), startRow, startCol,
125
+ internal::get_runtime_value(blockRows),
126
+ internal::get_runtime_value(blockCols));
127
+ }
128
+
129
+ /// This is the const version of block(Index,Index,NRowsType,NColsType)
130
+ template <typename NRowsType, typename NColsType>
131
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
132
+ #ifndef EIGEN_PARSED_BY_DOXYGEN
133
+ const typename ConstFixedBlockXpr<internal::get_fixed_value<NRowsType>::value,
134
+ internal::get_fixed_value<NColsType>::value>::Type
135
+ #else
136
+ const typename ConstFixedBlockXpr<..., ...>::Type
137
+ #endif
138
+ block(Index startRow, Index startCol, NRowsType blockRows, NColsType blockCols) const {
139
+ return typename ConstFixedBlockXpr<internal::get_fixed_value<NRowsType>::value,
140
+ internal::get_fixed_value<NColsType>::value>::Type(derived(), startRow, startCol,
141
+ internal::get_runtime_value(
142
+ blockRows),
143
+ internal::get_runtime_value(
144
+ blockCols));
145
+ }
146
+
147
+ /// \returns a expression of a top-right corner of \c *this with either dynamic or fixed sizes.
148
+ ///
149
+ /// \param cRows the number of rows in the corner
150
+ /// \param cCols the number of columns in the corner
151
+ /// \tparam NRowsType the type of the value handling the number of rows in the block, typically Index.
152
+ /// \tparam NColsType the type of the value handling the number of columns in the block, typically Index.
153
+ ///
154
+ /// Example with dynamic sizes: \include MatrixBase_topRightCorner_int_int.cpp
155
+ /// Output: \verbinclude MatrixBase_topRightCorner_int_int.out
156
+ ///
157
+ /// The number of rows \a blockRows and columns \a blockCols can also be specified at compile-time by passing
158
+ /// Eigen::fix<N>, or Eigen::fix<N>(n) as arguments. See \link block(Index,Index,NRowsType,NColsType) block() \endlink
159
+ /// for the details.
160
+ ///
161
+ EIGEN_DOC_BLOCK_ADDONS_NOT_INNER_PANEL
162
+ ///
163
+ /// \sa block(Index,Index,NRowsType,NColsType), class Block
164
+ ///
165
+ template <typename NRowsType, typename NColsType>
166
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
167
+ #ifndef EIGEN_PARSED_BY_DOXYGEN
168
+ typename FixedBlockXpr<internal::get_fixed_value<NRowsType>::value,
169
+ internal::get_fixed_value<NColsType>::value>::Type
170
+ #else
171
+ typename FixedBlockXpr<..., ...>::Type
172
+ #endif
173
+ topRightCorner(NRowsType cRows, NColsType cCols) {
174
+ return typename FixedBlockXpr<internal::get_fixed_value<NRowsType>::value,
175
+ internal::get_fixed_value<NColsType>::value>::Type(derived(), 0,
176
+ cols() - internal::get_runtime_value(
177
+ cCols),
178
+ internal::get_runtime_value(cRows),
179
+ internal::get_runtime_value(cCols));
180
+ }
181
+
182
+ /// This is the const version of topRightCorner(NRowsType, NColsType).
183
+ template <typename NRowsType, typename NColsType>
184
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
185
+ #ifndef EIGEN_PARSED_BY_DOXYGEN
186
+ const typename ConstFixedBlockXpr<internal::get_fixed_value<NRowsType>::value,
187
+ internal::get_fixed_value<NColsType>::value>::Type
188
+ #else
189
+ const typename ConstFixedBlockXpr<..., ...>::Type
190
+ #endif
191
+ topRightCorner(NRowsType cRows, NColsType cCols) const {
192
+ return
193
+ typename ConstFixedBlockXpr<internal::get_fixed_value<NRowsType>::value,
194
+ internal::get_fixed_value<NColsType>::value>::Type(derived(), 0,
195
+ cols() -
196
+ internal::get_runtime_value(
197
+ cCols),
198
+ internal::get_runtime_value(cRows),
199
+ internal::get_runtime_value(
200
+ cCols));
201
+ }
202
+
203
+ /// \returns an expression of a fixed-size top-right corner of \c *this.
204
+ ///
205
+ /// \tparam CRows the number of rows in the corner
206
+ /// \tparam CCols the number of columns in the corner
207
+ ///
208
+ /// Example: \include MatrixBase_template_int_int_topRightCorner.cpp
209
+ /// Output: \verbinclude MatrixBase_template_int_int_topRightCorner.out
210
+ ///
211
+ EIGEN_DOC_BLOCK_ADDONS_NOT_INNER_PANEL
212
+ ///
213
+ /// \sa class Block, block<int,int>(Index,Index)
214
+ ///
215
+ template <int CRows, int CCols>
216
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE typename FixedBlockXpr<CRows, CCols>::Type topRightCorner() {
217
+ return typename FixedBlockXpr<CRows, CCols>::Type(derived(), 0, cols() - CCols);
218
+ }
219
+
220
+ /// This is the const version of topRightCorner<int, int>().
221
+ template <int CRows, int CCols>
222
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const typename ConstFixedBlockXpr<CRows, CCols>::Type topRightCorner() const {
223
+ return typename ConstFixedBlockXpr<CRows, CCols>::Type(derived(), 0, cols() - CCols);
224
+ }
225
+
226
+ /// \returns an expression of a top-right corner of \c *this.
227
+ ///
228
+ /// \tparam CRows number of rows in corner as specified at compile-time
229
+ /// \tparam CCols number of columns in corner as specified at compile-time
230
+ /// \param cRows number of rows in corner as specified at run-time
231
+ /// \param cCols number of columns in corner as specified at run-time
232
+ ///
233
+ /// This function is mainly useful for corners where the number of rows is specified at compile-time
234
+ /// and the number of columns is specified at run-time, or vice versa. The compile-time and run-time
235
+ /// information should not contradict. In other words, \a cRows should equal \a CRows unless
236
+ /// \a CRows is \a Dynamic, and the same for the number of columns.
237
+ ///
238
+ /// Example: \include MatrixBase_template_int_int_topRightCorner_int_int.cpp
239
+ /// Output: \verbinclude MatrixBase_template_int_int_topRightCorner_int_int.out
240
+ ///
241
+ EIGEN_DOC_BLOCK_ADDONS_NOT_INNER_PANEL
242
+ ///
243
+ /// \sa class Block
244
+ ///
245
+ template <int CRows, int CCols>
246
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE typename FixedBlockXpr<CRows, CCols>::Type topRightCorner(Index cRows,
247
+ Index cCols) {
248
+ return typename FixedBlockXpr<CRows, CCols>::Type(derived(), 0, cols() - cCols, cRows, cCols);
249
+ }
250
+
251
+ /// This is the const version of topRightCorner<int, int>(Index, Index).
252
+ template <int CRows, int CCols>
253
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const typename ConstFixedBlockXpr<CRows, CCols>::Type topRightCorner(
254
+ Index cRows, Index cCols) const {
255
+ return typename ConstFixedBlockXpr<CRows, CCols>::Type(derived(), 0, cols() - cCols, cRows, cCols);
256
+ }
257
+
258
+ /// \returns an expression of a top-left corner of \c *this with either dynamic or fixed sizes.
259
+ ///
260
+ /// \param cRows the number of rows in the corner
261
+ /// \param cCols the number of columns in the corner
262
+ /// \tparam NRowsType the type of the value handling the number of rows in the block, typically Index.
263
+ /// \tparam NColsType the type of the value handling the number of columns in the block, typically Index.
264
+ ///
265
+ /// Example: \include MatrixBase_topLeftCorner_int_int.cpp
266
+ /// Output: \verbinclude MatrixBase_topLeftCorner_int_int.out
267
+ ///
268
+ /// The number of rows \a blockRows and columns \a blockCols can also be specified at compile-time by passing
269
+ /// Eigen::fix<N>, or Eigen::fix<N>(n) as arguments. See \link block(Index,Index,NRowsType,NColsType) block() \endlink
270
+ /// for the details.
271
+ ///
272
+ EIGEN_DOC_BLOCK_ADDONS_NOT_INNER_PANEL
273
+ ///
274
+ /// \sa block(Index,Index,NRowsType,NColsType), class Block
275
+ ///
276
+ template <typename NRowsType, typename NColsType>
277
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
278
+ #ifndef EIGEN_PARSED_BY_DOXYGEN
279
+ typename FixedBlockXpr<internal::get_fixed_value<NRowsType>::value,
280
+ internal::get_fixed_value<NColsType>::value>::Type
281
+ #else
282
+ typename FixedBlockXpr<..., ...>::Type
283
+ #endif
284
+ topLeftCorner(NRowsType cRows, NColsType cCols) {
285
+ return typename FixedBlockXpr<internal::get_fixed_value<NRowsType>::value,
286
+ internal::get_fixed_value<NColsType>::value>::Type(derived(), 0, 0,
287
+ internal::get_runtime_value(cRows),
288
+ internal::get_runtime_value(cCols));
289
+ }
290
+
291
+ /// This is the const version of topLeftCorner(Index, Index).
292
+ template <typename NRowsType, typename NColsType>
293
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
294
+ #ifndef EIGEN_PARSED_BY_DOXYGEN
295
+ const typename ConstFixedBlockXpr<internal::get_fixed_value<NRowsType>::value,
296
+ internal::get_fixed_value<NColsType>::value>::Type
297
+ #else
298
+ const typename ConstFixedBlockXpr<..., ...>::Type
299
+ #endif
300
+ topLeftCorner(NRowsType cRows, NColsType cCols) const {
301
+ return
302
+ typename ConstFixedBlockXpr<internal::get_fixed_value<NRowsType>::value,
303
+ internal::get_fixed_value<NColsType>::value>::Type(derived(), 0, 0,
304
+ internal::get_runtime_value(cRows),
305
+ internal::get_runtime_value(
306
+ cCols));
307
+ }
308
+
309
+ /// \returns an expression of a fixed-size top-left corner of \c *this.
310
+ ///
311
+ /// The template parameters CRows and CCols are the number of rows and columns in the corner.
312
+ ///
313
+ /// Example: \include MatrixBase_template_int_int_topLeftCorner.cpp
314
+ /// Output: \verbinclude MatrixBase_template_int_int_topLeftCorner.out
315
+ ///
316
+ EIGEN_DOC_BLOCK_ADDONS_NOT_INNER_PANEL
317
+ ///
318
+ /// \sa block(Index,Index,NRowsType,NColsType), class Block
319
+ ///
320
+ template <int CRows, int CCols>
321
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE typename FixedBlockXpr<CRows, CCols>::Type topLeftCorner() {
322
+ return typename FixedBlockXpr<CRows, CCols>::Type(derived(), 0, 0);
323
+ }
324
+
325
+ /// This is the const version of topLeftCorner<int, int>().
326
+ template <int CRows, int CCols>
327
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const typename ConstFixedBlockXpr<CRows, CCols>::Type topLeftCorner() const {
328
+ return typename ConstFixedBlockXpr<CRows, CCols>::Type(derived(), 0, 0);
329
+ }
330
+
331
+ /// \returns an expression of a top-left corner of \c *this.
332
+ ///
333
+ /// \tparam CRows number of rows in corner as specified at compile-time
334
+ /// \tparam CCols number of columns in corner as specified at compile-time
335
+ /// \param cRows number of rows in corner as specified at run-time
336
+ /// \param cCols number of columns in corner as specified at run-time
337
+ ///
338
+ /// This function is mainly useful for corners where the number of rows is specified at compile-time
339
+ /// and the number of columns is specified at run-time, or vice versa. The compile-time and run-time
340
+ /// information should not contradict. In other words, \a cRows should equal \a CRows unless
341
+ /// \a CRows is \a Dynamic, and the same for the number of columns.
342
+ ///
343
+ /// Example: \include MatrixBase_template_int_int_topLeftCorner_int_int.cpp
344
+ /// Output: \verbinclude MatrixBase_template_int_int_topLeftCorner_int_int.out
345
+ ///
346
+ EIGEN_DOC_BLOCK_ADDONS_NOT_INNER_PANEL
347
+ ///
348
+ /// \sa class Block
349
+ ///
350
+ template <int CRows, int CCols>
351
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE typename FixedBlockXpr<CRows, CCols>::Type topLeftCorner(Index cRows,
352
+ Index cCols) {
353
+ return typename FixedBlockXpr<CRows, CCols>::Type(derived(), 0, 0, cRows, cCols);
354
+ }
355
+
356
+ /// This is the const version of topLeftCorner<int, int>(Index, Index).
357
+ template <int CRows, int CCols>
358
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const typename ConstFixedBlockXpr<CRows, CCols>::Type topLeftCorner(
359
+ Index cRows, Index cCols) const {
360
+ return typename ConstFixedBlockXpr<CRows, CCols>::Type(derived(), 0, 0, cRows, cCols);
361
+ }
362
+
363
+ /// \returns an expression of a bottom-right corner of \c *this with either dynamic or fixed sizes.
364
+ ///
365
+ /// \param cRows the number of rows in the corner
366
+ /// \param cCols the number of columns in the corner
367
+ /// \tparam NRowsType the type of the value handling the number of rows in the block, typically Index.
368
+ /// \tparam NColsType the type of the value handling the number of columns in the block, typically Index.
369
+ ///
370
+ /// Example: \include MatrixBase_bottomRightCorner_int_int.cpp
371
+ /// Output: \verbinclude MatrixBase_bottomRightCorner_int_int.out
372
+ ///
373
+ /// The number of rows \a blockRows and columns \a blockCols can also be specified at compile-time by passing
374
+ /// Eigen::fix<N>, or Eigen::fix<N>(n) as arguments. See \link block(Index,Index,NRowsType,NColsType) block() \endlink
375
+ /// for the details.
376
+ ///
377
+ EIGEN_DOC_BLOCK_ADDONS_NOT_INNER_PANEL
378
+ ///
379
+ /// \sa block(Index,Index,NRowsType,NColsType), class Block
380
+ ///
381
+ template <typename NRowsType, typename NColsType>
382
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
383
+ #ifndef EIGEN_PARSED_BY_DOXYGEN
384
+ typename FixedBlockXpr<internal::get_fixed_value<NRowsType>::value,
385
+ internal::get_fixed_value<NColsType>::value>::Type
386
+ #else
387
+ typename FixedBlockXpr<..., ...>::Type
388
+ #endif
389
+ bottomRightCorner(NRowsType cRows, NColsType cCols) {
390
+ return
391
+ typename FixedBlockXpr<internal::get_fixed_value<NRowsType>::value, internal::get_fixed_value<NColsType>::value>::
392
+ Type(derived(), rows() - internal::get_runtime_value(cRows), cols() - internal::get_runtime_value(cCols),
393
+ internal::get_runtime_value(cRows), internal::get_runtime_value(cCols));
394
+ }
395
+
396
+ /// This is the const version of bottomRightCorner(NRowsType, NColsType).
397
+ template <typename NRowsType, typename NColsType>
398
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
399
+ #ifndef EIGEN_PARSED_BY_DOXYGEN
400
+ const typename ConstFixedBlockXpr<internal::get_fixed_value<NRowsType>::value,
401
+ internal::get_fixed_value<NColsType>::value>::Type
402
+ #else
403
+ const typename ConstFixedBlockXpr<..., ...>::Type
404
+ #endif
405
+ bottomRightCorner(NRowsType cRows, NColsType cCols) const {
406
+ return typename ConstFixedBlockXpr<
407
+ internal::get_fixed_value<NRowsType>::value,
408
+ internal::get_fixed_value<NColsType>::value>::Type(derived(), rows() - internal::get_runtime_value(cRows),
409
+ cols() - internal::get_runtime_value(cCols),
410
+ internal::get_runtime_value(cRows),
411
+ internal::get_runtime_value(cCols));
412
+ }
413
+
414
+ /// \returns an expression of a fixed-size bottom-right corner of \c *this.
415
+ ///
416
+ /// The template parameters CRows and CCols are the number of rows and columns in the corner.
417
+ ///
418
+ /// Example: \include MatrixBase_template_int_int_bottomRightCorner.cpp
419
+ /// Output: \verbinclude MatrixBase_template_int_int_bottomRightCorner.out
420
+ ///
421
+ EIGEN_DOC_BLOCK_ADDONS_NOT_INNER_PANEL
422
+ ///
423
+ /// \sa block(Index,Index,NRowsType,NColsType), class Block
424
+ ///
425
+ template <int CRows, int CCols>
426
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE typename FixedBlockXpr<CRows, CCols>::Type bottomRightCorner() {
427
+ return typename FixedBlockXpr<CRows, CCols>::Type(derived(), rows() - CRows, cols() - CCols);
428
+ }
429
+
430
+ /// This is the const version of bottomRightCorner<int, int>().
431
+ template <int CRows, int CCols>
432
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const typename ConstFixedBlockXpr<CRows, CCols>::Type bottomRightCorner() const {
433
+ return typename ConstFixedBlockXpr<CRows, CCols>::Type(derived(), rows() - CRows, cols() - CCols);
434
+ }
435
+
436
+ /// \returns an expression of a bottom-right corner of \c *this.
437
+ ///
438
+ /// \tparam CRows number of rows in corner as specified at compile-time
439
+ /// \tparam CCols number of columns in corner as specified at compile-time
440
+ /// \param cRows number of rows in corner as specified at run-time
441
+ /// \param cCols number of columns in corner as specified at run-time
442
+ ///
443
+ /// This function is mainly useful for corners where the number of rows is specified at compile-time
444
+ /// and the number of columns is specified at run-time, or vice versa. The compile-time and run-time
445
+ /// information should not contradict. In other words, \a cRows should equal \a CRows unless
446
+ /// \a CRows is \a Dynamic, and the same for the number of columns.
447
+ ///
448
+ /// Example: \include MatrixBase_template_int_int_bottomRightCorner_int_int.cpp
449
+ /// Output: \verbinclude MatrixBase_template_int_int_bottomRightCorner_int_int.out
450
+ ///
451
+ EIGEN_DOC_BLOCK_ADDONS_NOT_INNER_PANEL
452
+ ///
453
+ /// \sa class Block
454
+ ///
455
+ template <int CRows, int CCols>
456
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE typename FixedBlockXpr<CRows, CCols>::Type bottomRightCorner(Index cRows,
457
+ Index cCols) {
458
+ return typename FixedBlockXpr<CRows, CCols>::Type(derived(), rows() - cRows, cols() - cCols, cRows, cCols);
459
+ }
460
+
461
+ /// This is the const version of bottomRightCorner<int, int>(Index, Index).
462
+ template <int CRows, int CCols>
463
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const typename ConstFixedBlockXpr<CRows, CCols>::Type bottomRightCorner(
464
+ Index cRows, Index cCols) const {
465
+ return typename ConstFixedBlockXpr<CRows, CCols>::Type(derived(), rows() - cRows, cols() - cCols, cRows, cCols);
466
+ }
467
+
468
+ /// \returns an expression of a bottom-left corner of \c *this with either dynamic or fixed sizes.
469
+ ///
470
+ /// \param cRows the number of rows in the corner
471
+ /// \param cCols the number of columns in the corner
472
+ /// \tparam NRowsType the type of the value handling the number of rows in the block, typically Index.
473
+ /// \tparam NColsType the type of the value handling the number of columns in the block, typically Index.
474
+ ///
475
+ /// Example: \include MatrixBase_bottomLeftCorner_int_int.cpp
476
+ /// Output: \verbinclude MatrixBase_bottomLeftCorner_int_int.out
477
+ ///
478
+ /// The number of rows \a blockRows and columns \a blockCols can also be specified at compile-time by passing
479
+ /// Eigen::fix<N>, or Eigen::fix<N>(n) as arguments. See \link block(Index,Index,NRowsType,NColsType) block() \endlink
480
+ /// for the details.
481
+ ///
482
+ EIGEN_DOC_BLOCK_ADDONS_NOT_INNER_PANEL
483
+ ///
484
+ /// \sa block(Index,Index,NRowsType,NColsType), class Block
485
+ ///
486
+ template <typename NRowsType, typename NColsType>
487
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
488
+ #ifndef EIGEN_PARSED_BY_DOXYGEN
489
+ typename FixedBlockXpr<internal::get_fixed_value<NRowsType>::value,
490
+ internal::get_fixed_value<NColsType>::value>::Type
491
+ #else
492
+ typename FixedBlockXpr<..., ...>::Type
493
+ #endif
494
+ bottomLeftCorner(NRowsType cRows, NColsType cCols) {
495
+ return
496
+ typename FixedBlockXpr<internal::get_fixed_value<NRowsType>::value,
497
+ internal::get_fixed_value<NColsType>::value>::Type(derived(),
498
+ rows() -
499
+ internal::get_runtime_value(cRows),
500
+ 0, internal::get_runtime_value(cRows),
501
+ internal::get_runtime_value(cCols));
502
+ }
503
+
504
+ /// This is the const version of bottomLeftCorner(NRowsType, NColsType).
505
+ template <typename NRowsType, typename NColsType>
506
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
507
+ #ifndef EIGEN_PARSED_BY_DOXYGEN
508
+ typename ConstFixedBlockXpr<internal::get_fixed_value<NRowsType>::value,
509
+ internal::get_fixed_value<NColsType>::value>::Type
510
+ #else
511
+ typename ConstFixedBlockXpr<..., ...>::Type
512
+ #endif
513
+ bottomLeftCorner(NRowsType cRows, NColsType cCols) const {
514
+ return typename ConstFixedBlockXpr<
515
+ internal::get_fixed_value<NRowsType>::value,
516
+ internal::get_fixed_value<NColsType>::value>::Type(derived(), rows() - internal::get_runtime_value(cRows), 0,
517
+ internal::get_runtime_value(cRows),
518
+ internal::get_runtime_value(cCols));
519
+ }
520
+
521
+ /// \returns an expression of a fixed-size bottom-left corner of \c *this.
522
+ ///
523
+ /// The template parameters CRows and CCols are the number of rows and columns in the corner.
524
+ ///
525
+ /// Example: \include MatrixBase_template_int_int_bottomLeftCorner.cpp
526
+ /// Output: \verbinclude MatrixBase_template_int_int_bottomLeftCorner.out
527
+ ///
528
+ EIGEN_DOC_BLOCK_ADDONS_NOT_INNER_PANEL
529
+ ///
530
+ /// \sa block(Index,Index,NRowsType,NColsType), class Block
531
+ ///
532
+ template <int CRows, int CCols>
533
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE typename FixedBlockXpr<CRows, CCols>::Type bottomLeftCorner() {
534
+ return typename FixedBlockXpr<CRows, CCols>::Type(derived(), rows() - CRows, 0);
535
+ }
536
+
537
+ /// This is the const version of bottomLeftCorner<int, int>().
538
+ template <int CRows, int CCols>
539
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const typename ConstFixedBlockXpr<CRows, CCols>::Type bottomLeftCorner() const {
540
+ return typename ConstFixedBlockXpr<CRows, CCols>::Type(derived(), rows() - CRows, 0);
541
+ }
542
+
543
+ /// \returns an expression of a bottom-left corner of \c *this.
544
+ ///
545
+ /// \tparam CRows number of rows in corner as specified at compile-time
546
+ /// \tparam CCols number of columns in corner as specified at compile-time
547
+ /// \param cRows number of rows in corner as specified at run-time
548
+ /// \param cCols number of columns in corner as specified at run-time
549
+ ///
550
+ /// This function is mainly useful for corners where the number of rows is specified at compile-time
551
+ /// and the number of columns is specified at run-time, or vice versa. The compile-time and run-time
552
+ /// information should not contradict. In other words, \a cRows should equal \a CRows unless
553
+ /// \a CRows is \a Dynamic, and the same for the number of columns.
554
+ ///
555
+ /// Example: \include MatrixBase_template_int_int_bottomLeftCorner_int_int.cpp
556
+ /// Output: \verbinclude MatrixBase_template_int_int_bottomLeftCorner_int_int.out
557
+ ///
558
+ EIGEN_DOC_BLOCK_ADDONS_NOT_INNER_PANEL
559
+ ///
560
+ /// \sa class Block
561
+ ///
562
+ template <int CRows, int CCols>
563
+ EIGEN_STRONG_INLINE typename FixedBlockXpr<CRows, CCols>::Type bottomLeftCorner(Index cRows, Index cCols) {
564
+ return typename FixedBlockXpr<CRows, CCols>::Type(derived(), rows() - cRows, 0, cRows, cCols);
565
+ }
566
+
567
+ /// This is the const version of bottomLeftCorner<int, int>(Index, Index).
568
+ template <int CRows, int CCols>
569
+ EIGEN_STRONG_INLINE const typename ConstFixedBlockXpr<CRows, CCols>::Type bottomLeftCorner(Index cRows,
570
+ Index cCols) const {
571
+ return typename ConstFixedBlockXpr<CRows, CCols>::Type(derived(), rows() - cRows, 0, cRows, cCols);
572
+ }
573
+
574
+ /// \returns a block consisting of the top rows of \c *this.
575
+ ///
576
+ /// \param n the number of rows in the block
577
+ /// \tparam NRowsType the type of the value handling the number of rows in the block, typically Index.
578
+ ///
579
+ /// Example: \include MatrixBase_topRows_int.cpp
580
+ /// Output: \verbinclude MatrixBase_topRows_int.out
581
+ ///
582
+ /// The number of rows \a n can also be specified at compile-time by passing Eigen::fix<N>,
583
+ /// or Eigen::fix<N>(n) as arguments.
584
+ /// See \link block(Index,Index,NRowsType,NColsType) block() \endlink for the details.
585
+ ///
586
+ EIGEN_DOC_BLOCK_ADDONS_INNER_PANEL_IF(row - major)
587
+ ///
588
+ /// \sa block(Index,Index,NRowsType,NColsType), class Block
589
+ ///
590
+ template <typename NRowsType>
591
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
592
+ #ifndef EIGEN_PARSED_BY_DOXYGEN
593
+ typename NRowsBlockXpr<internal::get_fixed_value<NRowsType>::value>::Type
594
+ #else
595
+ typename NRowsBlockXpr<...>::Type
596
+ #endif
597
+ topRows(NRowsType n) {
598
+ return typename NRowsBlockXpr<internal::get_fixed_value<NRowsType>::value>::Type(
599
+ derived(), 0, 0, internal::get_runtime_value(n), cols());
600
+ }
601
+
602
+ /// This is the const version of topRows(NRowsType).
603
+ template <typename NRowsType>
604
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
605
+ #ifndef EIGEN_PARSED_BY_DOXYGEN
606
+ const typename ConstNRowsBlockXpr<internal::get_fixed_value<NRowsType>::value>::Type
607
+ #else
608
+ const typename ConstNRowsBlockXpr<...>::Type
609
+ #endif
610
+ topRows(NRowsType n) const {
611
+ return typename ConstNRowsBlockXpr<internal::get_fixed_value<NRowsType>::value>::Type(
612
+ derived(), 0, 0, internal::get_runtime_value(n), cols());
613
+ }
614
+
615
+ /// \returns a block consisting of the top rows of \c *this.
616
+ ///
617
+ /// \tparam N the number of rows in the block as specified at compile-time
618
+ /// \param n the number of rows in the block as specified at run-time
619
+ ///
620
+ /// The compile-time and run-time information should not contradict. In other words,
621
+ /// \a n should equal \a N unless \a N is \a Dynamic.
622
+ ///
623
+ /// Example: \include MatrixBase_template_int_topRows.cpp
624
+ /// Output: \verbinclude MatrixBase_template_int_topRows.out
625
+ ///
626
+ EIGEN_DOC_BLOCK_ADDONS_INNER_PANEL_IF(row - major)
627
+ ///
628
+ /// \sa block(Index,Index,NRowsType,NColsType), class Block
629
+ ///
630
+ template <int N>
631
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE typename NRowsBlockXpr<N>::Type topRows(Index n = N) {
632
+ return typename NRowsBlockXpr<N>::Type(derived(), 0, 0, n, cols());
633
+ }
634
+
635
+ /// This is the const version of topRows<int>().
636
+ template <int N>
637
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE typename ConstNRowsBlockXpr<N>::Type topRows(Index n = N) const {
638
+ return typename ConstNRowsBlockXpr<N>::Type(derived(), 0, 0, n, cols());
639
+ }
640
+
641
+ /// \returns a block consisting of the bottom rows of \c *this.
642
+ ///
643
+ /// \param n the number of rows in the block
644
+ /// \tparam NRowsType the type of the value handling the number of rows in the block, typically Index.
645
+ ///
646
+ /// Example: \include MatrixBase_bottomRows_int.cpp
647
+ /// Output: \verbinclude MatrixBase_bottomRows_int.out
648
+ ///
649
+ /// The number of rows \a n can also be specified at compile-time by passing Eigen::fix<N>,
650
+ /// or Eigen::fix<N>(n) as arguments.
651
+ /// See \link block(Index,Index,NRowsType,NColsType) block() \endlink for the details.
652
+ ///
653
+ EIGEN_DOC_BLOCK_ADDONS_INNER_PANEL_IF(row - major)
654
+ ///
655
+ /// \sa block(Index,Index,NRowsType,NColsType), class Block
656
+ ///
657
+ template <typename NRowsType>
658
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
659
+ #ifndef EIGEN_PARSED_BY_DOXYGEN
660
+ typename NRowsBlockXpr<internal::get_fixed_value<NRowsType>::value>::Type
661
+ #else
662
+ typename NRowsBlockXpr<...>::Type
663
+ #endif
664
+ bottomRows(NRowsType n) {
665
+ return typename NRowsBlockXpr<internal::get_fixed_value<NRowsType>::value>::Type(
666
+ derived(), rows() - internal::get_runtime_value(n), 0, internal::get_runtime_value(n), cols());
667
+ }
668
+
669
+ /// This is the const version of bottomRows(NRowsType).
670
+ template <typename NRowsType>
671
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
672
+ #ifndef EIGEN_PARSED_BY_DOXYGEN
673
+ const typename ConstNRowsBlockXpr<internal::get_fixed_value<NRowsType>::value>::Type
674
+ #else
675
+ const typename ConstNRowsBlockXpr<...>::Type
676
+ #endif
677
+ bottomRows(NRowsType n) const {
678
+ return typename ConstNRowsBlockXpr<internal::get_fixed_value<NRowsType>::value>::Type(
679
+ derived(), rows() - internal::get_runtime_value(n), 0, internal::get_runtime_value(n), cols());
680
+ }
681
+
682
+ /// \returns a block consisting of the bottom rows of \c *this.
683
+ ///
684
+ /// \tparam N the number of rows in the block as specified at compile-time
685
+ /// \param n the number of rows in the block as specified at run-time
686
+ ///
687
+ /// The compile-time and run-time information should not contradict. In other words,
688
+ /// \a n should equal \a N unless \a N is \a Dynamic.
689
+ ///
690
+ /// Example: \include MatrixBase_template_int_bottomRows.cpp
691
+ /// Output: \verbinclude MatrixBase_template_int_bottomRows.out
692
+ ///
693
+ EIGEN_DOC_BLOCK_ADDONS_INNER_PANEL_IF(row - major)
694
+ ///
695
+ /// \sa block(Index,Index,NRowsType,NColsType), class Block
696
+ ///
697
+ template <int N>
698
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE typename NRowsBlockXpr<N>::Type bottomRows(Index n = N) {
699
+ return typename NRowsBlockXpr<N>::Type(derived(), rows() - n, 0, n, cols());
700
+ }
701
+
702
+ /// This is the const version of bottomRows<int>().
703
+ template <int N>
704
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE typename ConstNRowsBlockXpr<N>::Type bottomRows(Index n = N) const {
705
+ return typename ConstNRowsBlockXpr<N>::Type(derived(), rows() - n, 0, n, cols());
706
+ }
707
+
708
+ /// \returns a block consisting of a range of rows of \c *this.
709
+ ///
710
+ /// \param startRow the index of the first row in the block
711
+ /// \param n the number of rows in the block
712
+ /// \tparam NRowsType the type of the value handling the number of rows in the block, typically Index.
713
+ ///
714
+ /// Example: \include DenseBase_middleRows_int.cpp
715
+ /// Output: \verbinclude DenseBase_middleRows_int.out
716
+ ///
717
+ /// The number of rows \a n can also be specified at compile-time by passing Eigen::fix<N>,
718
+ /// or Eigen::fix<N>(n) as arguments.
719
+ /// See \link block(Index,Index,NRowsType,NColsType) block() \endlink for the details.
720
+ ///
721
+ EIGEN_DOC_BLOCK_ADDONS_INNER_PANEL_IF(row - major)
722
+ ///
723
+ /// \sa block(Index,Index,NRowsType,NColsType), class Block
724
+ ///
725
+ template <typename NRowsType>
726
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
727
+ #ifndef EIGEN_PARSED_BY_DOXYGEN
728
+ typename NRowsBlockXpr<internal::get_fixed_value<NRowsType>::value>::Type
729
+ #else
730
+ typename NRowsBlockXpr<...>::Type
731
+ #endif
732
+ middleRows(Index startRow, NRowsType n) {
733
+ return typename NRowsBlockXpr<internal::get_fixed_value<NRowsType>::value>::Type(
734
+ derived(), startRow, 0, internal::get_runtime_value(n), cols());
735
+ }
736
+
737
+ /// This is the const version of middleRows(Index,NRowsType).
738
+ template <typename NRowsType>
739
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
740
+ #ifndef EIGEN_PARSED_BY_DOXYGEN
741
+ const typename ConstNRowsBlockXpr<internal::get_fixed_value<NRowsType>::value>::Type
742
+ #else
743
+ const typename ConstNRowsBlockXpr<...>::Type
744
+ #endif
745
+ middleRows(Index startRow, NRowsType n) const {
746
+ return typename ConstNRowsBlockXpr<internal::get_fixed_value<NRowsType>::value>::Type(
747
+ derived(), startRow, 0, internal::get_runtime_value(n), cols());
748
+ }
749
+
750
+ /// \returns a block consisting of a range of rows of \c *this.
751
+ ///
752
+ /// \tparam N the number of rows in the block as specified at compile-time
753
+ /// \param startRow the index of the first row in the block
754
+ /// \param n the number of rows in the block as specified at run-time
755
+ ///
756
+ /// The compile-time and run-time information should not contradict. In other words,
757
+ /// \a n should equal \a N unless \a N is \a Dynamic.
758
+ ///
759
+ /// Example: \include DenseBase_template_int_middleRows.cpp
760
+ /// Output: \verbinclude DenseBase_template_int_middleRows.out
761
+ ///
762
+ EIGEN_DOC_BLOCK_ADDONS_INNER_PANEL_IF(row - major)
763
+ ///
764
+ /// \sa block(Index,Index,NRowsType,NColsType), class Block
765
+ ///
766
+ template <int N>
767
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE typename NRowsBlockXpr<N>::Type middleRows(Index startRow, Index n = N) {
768
+ return typename NRowsBlockXpr<N>::Type(derived(), startRow, 0, n, cols());
769
+ }
770
+
771
+ /// This is the const version of middleRows<int>().
772
+ template <int N>
773
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE typename ConstNRowsBlockXpr<N>::Type middleRows(Index startRow,
774
+ Index n = N) const {
775
+ return typename ConstNRowsBlockXpr<N>::Type(derived(), startRow, 0, n, cols());
776
+ }
777
+
778
+ /// \returns a block consisting of the left columns of \c *this.
779
+ ///
780
+ /// \param n the number of columns in the block
781
+ /// \tparam NColsType the type of the value handling the number of columns in the block, typically Index.
782
+ ///
783
+ /// Example: \include MatrixBase_leftCols_int.cpp
784
+ /// Output: \verbinclude MatrixBase_leftCols_int.out
785
+ ///
786
+ /// The number of columns \a n can also be specified at compile-time by passing Eigen::fix<N>,
787
+ /// or Eigen::fix<N>(n) as arguments.
788
+ /// See \link block(Index,Index,NRowsType,NColsType) block() \endlink for the details.
789
+ ///
790
+ EIGEN_DOC_BLOCK_ADDONS_INNER_PANEL_IF(column - major)
791
+ ///
792
+ /// \sa block(Index,Index,NRowsType,NColsType), class Block
793
+ ///
794
+ template <typename NColsType>
795
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
796
+ #ifndef EIGEN_PARSED_BY_DOXYGEN
797
+ typename NColsBlockXpr<internal::get_fixed_value<NColsType>::value>::Type
798
+ #else
799
+ typename NColsBlockXpr<...>::Type
800
+ #endif
801
+ leftCols(NColsType n) {
802
+ return typename NColsBlockXpr<internal::get_fixed_value<NColsType>::value>::Type(derived(), 0, 0, rows(),
803
+ internal::get_runtime_value(n));
804
+ }
805
+
806
+ /// This is the const version of leftCols(NColsType).
807
+ template <typename NColsType>
808
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
809
+ #ifndef EIGEN_PARSED_BY_DOXYGEN
810
+ const typename ConstNColsBlockXpr<internal::get_fixed_value<NColsType>::value>::Type
811
+ #else
812
+ const typename ConstNColsBlockXpr<...>::Type
813
+ #endif
814
+ leftCols(NColsType n) const {
815
+ return typename ConstNColsBlockXpr<internal::get_fixed_value<NColsType>::value>::Type(derived(), 0, 0, rows(),
816
+ internal::get_runtime_value(n));
817
+ }
818
+
819
+ /// \returns a block consisting of the left columns of \c *this.
820
+ ///
821
+ /// \tparam N the number of columns in the block as specified at compile-time
822
+ /// \param n the number of columns in the block as specified at run-time
823
+ ///
824
+ /// The compile-time and run-time information should not contradict. In other words,
825
+ /// \a n should equal \a N unless \a N is \a Dynamic.
826
+ ///
827
+ /// Example: \include MatrixBase_template_int_leftCols.cpp
828
+ /// Output: \verbinclude MatrixBase_template_int_leftCols.out
829
+ ///
830
+ EIGEN_DOC_BLOCK_ADDONS_INNER_PANEL_IF(column - major)
831
+ ///
832
+ /// \sa block(Index,Index,NRowsType,NColsType), class Block
833
+ ///
834
+ template <int N>
835
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE typename NColsBlockXpr<N>::Type leftCols(Index n = N) {
836
+ return typename NColsBlockXpr<N>::Type(derived(), 0, 0, rows(), n);
837
+ }
838
+
839
+ /// This is the const version of leftCols<int>().
840
+ template <int N>
841
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE typename ConstNColsBlockXpr<N>::Type leftCols(Index n = N) const {
842
+ return typename ConstNColsBlockXpr<N>::Type(derived(), 0, 0, rows(), n);
843
+ }
844
+
845
+ /// \returns a block consisting of the right columns of \c *this.
846
+ ///
847
+ /// \param n the number of columns in the block
848
+ /// \tparam NColsType the type of the value handling the number of columns in the block, typically Index.
849
+ ///
850
+ /// Example: \include MatrixBase_rightCols_int.cpp
851
+ /// Output: \verbinclude MatrixBase_rightCols_int.out
852
+ ///
853
+ /// The number of columns \a n can also be specified at compile-time by passing Eigen::fix<N>,
854
+ /// or Eigen::fix<N>(n) as arguments.
855
+ /// See \link block(Index,Index,NRowsType,NColsType) block() \endlink for the details.
856
+ ///
857
+ EIGEN_DOC_BLOCK_ADDONS_INNER_PANEL_IF(column - major)
858
+ ///
859
+ /// \sa block(Index,Index,NRowsType,NColsType), class Block
860
+ ///
861
+ template <typename NColsType>
862
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
863
+ #ifndef EIGEN_PARSED_BY_DOXYGEN
864
+ typename NColsBlockXpr<internal::get_fixed_value<NColsType>::value>::Type
865
+ #else
866
+ typename NColsBlockXpr<...>::Type
867
+ #endif
868
+ rightCols(NColsType n) {
869
+ return typename NColsBlockXpr<internal::get_fixed_value<NColsType>::value>::Type(
870
+ derived(), 0, cols() - internal::get_runtime_value(n), rows(), internal::get_runtime_value(n));
871
+ }
872
+
873
+ /// This is the const version of rightCols(NColsType).
874
+ template <typename NColsType>
875
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
876
+ #ifndef EIGEN_PARSED_BY_DOXYGEN
877
+ const typename ConstNColsBlockXpr<internal::get_fixed_value<NColsType>::value>::Type
878
+ #else
879
+ const typename ConstNColsBlockXpr<...>::Type
880
+ #endif
881
+ rightCols(NColsType n) const {
882
+ return typename ConstNColsBlockXpr<internal::get_fixed_value<NColsType>::value>::Type(
883
+ derived(), 0, cols() - internal::get_runtime_value(n), rows(), internal::get_runtime_value(n));
884
+ }
885
+
886
+ /// \returns a block consisting of the right columns of \c *this.
887
+ ///
888
+ /// \tparam N the number of columns in the block as specified at compile-time
889
+ /// \param n the number of columns in the block as specified at run-time
890
+ ///
891
+ /// The compile-time and run-time information should not contradict. In other words,
892
+ /// \a n should equal \a N unless \a N is \a Dynamic.
893
+ ///
894
+ /// Example: \include MatrixBase_template_int_rightCols.cpp
895
+ /// Output: \verbinclude MatrixBase_template_int_rightCols.out
896
+ ///
897
+ EIGEN_DOC_BLOCK_ADDONS_INNER_PANEL_IF(column - major)
898
+ ///
899
+ /// \sa block(Index,Index,NRowsType,NColsType), class Block
900
+ ///
901
+ template <int N>
902
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE typename NColsBlockXpr<N>::Type rightCols(Index n = N) {
903
+ return typename NColsBlockXpr<N>::Type(derived(), 0, cols() - n, rows(), n);
904
+ }
905
+
906
+ /// This is the const version of rightCols<int>().
907
+ template <int N>
908
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE typename ConstNColsBlockXpr<N>::Type rightCols(Index n = N) const {
909
+ return typename ConstNColsBlockXpr<N>::Type(derived(), 0, cols() - n, rows(), n);
910
+ }
911
+
912
+ /// \returns a block consisting of a range of columns of \c *this.
913
+ ///
914
+ /// \param startCol the index of the first column in the block
915
+ /// \param numCols the number of columns in the block
916
+ /// \tparam NColsType the type of the value handling the number of columns in the block, typically Index.
917
+ ///
918
+ /// Example: \include DenseBase_middleCols_int.cpp
919
+ /// Output: \verbinclude DenseBase_middleCols_int.out
920
+ ///
921
+ /// The number of columns \a n can also be specified at compile-time by passing Eigen::fix<N>,
922
+ /// or Eigen::fix<N>(n) as arguments.
923
+ /// See \link block(Index,Index,NRowsType,NColsType) block() \endlink for the details.
924
+ ///
925
+ EIGEN_DOC_BLOCK_ADDONS_INNER_PANEL_IF(column - major)
926
+ ///
927
+ /// \sa block(Index,Index,NRowsType,NColsType), class Block
928
+ ///
929
+ template <typename NColsType>
930
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
931
+ #ifndef EIGEN_PARSED_BY_DOXYGEN
932
+ typename NColsBlockXpr<internal::get_fixed_value<NColsType>::value>::Type
933
+ #else
934
+ typename NColsBlockXpr<...>::Type
935
+ #endif
936
+ middleCols(Index startCol, NColsType numCols) {
937
+ return typename NColsBlockXpr<internal::get_fixed_value<NColsType>::value>::Type(
938
+ derived(), 0, startCol, rows(), internal::get_runtime_value(numCols));
939
+ }
940
+
941
+ /// This is the const version of middleCols(Index,NColsType).
942
+ template <typename NColsType>
943
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
944
+ #ifndef EIGEN_PARSED_BY_DOXYGEN
945
+ const typename ConstNColsBlockXpr<internal::get_fixed_value<NColsType>::value>::Type
946
+ #else
947
+ const typename ConstNColsBlockXpr<...>::Type
948
+ #endif
949
+ middleCols(Index startCol, NColsType numCols) const {
950
+ return typename ConstNColsBlockXpr<internal::get_fixed_value<NColsType>::value>::Type(
951
+ derived(), 0, startCol, rows(), internal::get_runtime_value(numCols));
952
+ }
953
+
954
+ /// \returns a block consisting of a range of columns of \c *this.
955
+ ///
956
+ /// \tparam N the number of columns in the block as specified at compile-time
957
+ /// \param startCol the index of the first column in the block
958
+ /// \param n the number of columns in the block as specified at run-time
959
+ ///
960
+ /// The compile-time and run-time information should not contradict. In other words,
961
+ /// \a n should equal \a N unless \a N is \a Dynamic.
962
+ ///
963
+ /// Example: \include DenseBase_template_int_middleCols.cpp
964
+ /// Output: \verbinclude DenseBase_template_int_middleCols.out
965
+ ///
966
+ EIGEN_DOC_BLOCK_ADDONS_INNER_PANEL_IF(column - major)
967
+ ///
968
+ /// \sa block(Index,Index,NRowsType,NColsType), class Block
969
+ ///
970
+ template <int N>
971
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE typename NColsBlockXpr<N>::Type middleCols(Index startCol, Index n = N) {
972
+ return typename NColsBlockXpr<N>::Type(derived(), 0, startCol, rows(), n);
973
+ }
974
+
975
+ /// This is the const version of middleCols<int>().
976
+ template <int N>
977
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE typename ConstNColsBlockXpr<N>::Type middleCols(Index startCol,
978
+ Index n = N) const {
979
+ return typename ConstNColsBlockXpr<N>::Type(derived(), 0, startCol, rows(), n);
980
+ }
981
+
982
+ /// \returns a fixed-size expression of a block of \c *this.
983
+ ///
984
+ /// The template parameters \a NRows and \a NCols are the number of
985
+ /// rows and columns in the block.
986
+ ///
987
+ /// \param startRow the first row in the block
988
+ /// \param startCol the first column in the block
989
+ ///
990
+ /// Example: \include MatrixBase_block_int_int.cpp
991
+ /// Output: \verbinclude MatrixBase_block_int_int.out
992
+ ///
993
+ /// \note The usage of of this overload is discouraged from %Eigen 3.4, better used the generic
994
+ /// block(Index,Index,NRowsType,NColsType), here is the one-to-one equivalence:
995
+ /// \code
996
+ /// mat.template block<NRows,NCols>(i,j) <--> mat.block(i,j,fix<NRows>,fix<NCols>)
997
+ /// \endcode
998
+ ///
999
+ /// \note since block is a templated member, the keyword template has to be used
1000
+ /// if the matrix type is also a template parameter: \code m.template block<3,3>(1,1); \endcode
1001
+ ///
1002
+ EIGEN_DOC_BLOCK_ADDONS_NOT_INNER_PANEL
1003
+ ///
1004
+ /// \sa block(Index,Index,NRowsType,NColsType), class Block
1005
+ ///
1006
+ template <int NRows, int NCols>
1007
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE typename FixedBlockXpr<NRows, NCols>::Type block(Index startRow, Index startCol) {
1008
+ return typename FixedBlockXpr<NRows, NCols>::Type(derived(), startRow, startCol);
1009
+ }
1010
+
1011
+ /// This is the const version of block<>(Index, Index). */
1012
+ template <int NRows, int NCols>
1013
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const typename ConstFixedBlockXpr<NRows, NCols>::Type block(
1014
+ Index startRow, Index startCol) const {
1015
+ return typename ConstFixedBlockXpr<NRows, NCols>::Type(derived(), startRow, startCol);
1016
+ }
1017
+
1018
+ /// \returns an expression of a block of \c *this.
1019
+ ///
1020
+ /// \tparam NRows number of rows in block as specified at compile-time
1021
+ /// \tparam NCols number of columns in block as specified at compile-time
1022
+ /// \param startRow the first row in the block
1023
+ /// \param startCol the first column in the block
1024
+ /// \param blockRows number of rows in block as specified at run-time
1025
+ /// \param blockCols number of columns in block as specified at run-time
1026
+ ///
1027
+ /// This function is mainly useful for blocks where the number of rows is specified at compile-time
1028
+ /// and the number of columns is specified at run-time, or vice versa. The compile-time and run-time
1029
+ /// information should not contradict. In other words, \a blockRows should equal \a NRows unless
1030
+ /// \a NRows is \a Dynamic, and the same for the number of columns.
1031
+ ///
1032
+ /// Example: \include MatrixBase_template_int_int_block_int_int_int_int.cpp
1033
+ /// Output: \verbinclude MatrixBase_template_int_int_block_int_int_int_int.out
1034
+ ///
1035
+ /// \note The usage of of this overload is discouraged from %Eigen 3.4, better used the generic
1036
+ /// block(Index,Index,NRowsType,NColsType), here is the one-to-one complete equivalence:
1037
+ /// \code
1038
+ /// mat.template block<NRows,NCols>(i,j,rows,cols) <--> mat.block(i,j,fix<NRows>(rows),fix<NCols>(cols))
1039
+ /// \endcode
1040
+ /// If we known that, e.g., NRows==Dynamic and NCols!=Dynamic, then the equivalence becomes:
1041
+ /// \code
1042
+ /// mat.template block<Dynamic,NCols>(i,j,rows,NCols) <--> mat.block(i,j,rows,fix<NCols>)
1043
+ /// \endcode
1044
+ ///
1045
+ EIGEN_DOC_BLOCK_ADDONS_NOT_INNER_PANEL
1046
+ ///
1047
+ /// \sa block(Index,Index,NRowsType,NColsType), class Block
1048
+ ///
1049
+ template <int NRows, int NCols>
1050
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE typename FixedBlockXpr<NRows, NCols>::Type block(Index startRow, Index startCol,
1051
+ Index blockRows,
1052
+ Index blockCols) {
1053
+ return typename FixedBlockXpr<NRows, NCols>::Type(derived(), startRow, startCol, blockRows, blockCols);
1054
+ }
1055
+
1056
+ /// This is the const version of block<>(Index, Index, Index, Index).
1057
+ template <int NRows, int NCols>
1058
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const typename ConstFixedBlockXpr<NRows, NCols>::Type block(
1059
+ Index startRow, Index startCol, Index blockRows, Index blockCols) const {
1060
+ return typename ConstFixedBlockXpr<NRows, NCols>::Type(derived(), startRow, startCol, blockRows, blockCols);
1061
+ }
1062
+
1063
+ /// \returns an expression of the \a i-th column of \c *this. Note that the numbering starts at 0.
1064
+ ///
1065
+ /// Example: \include MatrixBase_col.cpp
1066
+ /// Output: \verbinclude MatrixBase_col.out
1067
+ ///
1068
+ EIGEN_DOC_BLOCK_ADDONS_INNER_PANEL_IF(column - major)
1069
+ /**
1070
+ * \sa row(), class Block */
1071
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE ColXpr col(Index i) { return ColXpr(derived(), i); }
1072
+
1073
+ /// This is the const version of col().
1074
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE ConstColXpr col(Index i) const { return ConstColXpr(derived(), i); }
1075
+
1076
+ /// \returns an expression of the \a i-th row of \c *this. Note that the numbering starts at 0.
1077
+ ///
1078
+ /// Example: \include MatrixBase_row.cpp
1079
+ /// Output: \verbinclude MatrixBase_row.out
1080
+ ///
1081
+ EIGEN_DOC_BLOCK_ADDONS_INNER_PANEL_IF(row - major)
1082
+ /**
1083
+ * \sa col(), class Block */
1084
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE RowXpr row(Index i) { return RowXpr(derived(), i); }
1085
+
1086
+ /// This is the const version of row(). */
1087
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE ConstRowXpr row(Index i) const { return ConstRowXpr(derived(), i); }
1088
+
1089
+ /// \returns an expression of a segment (i.e. a vector block) in \c *this with either dynamic or fixed sizes.
1090
+ ///
1091
+ /// \only_for_vectors
1092
+ ///
1093
+ /// \param start the first coefficient in the segment
1094
+ /// \param n the number of coefficients in the segment
1095
+ /// \tparam NType the type of the value handling the number of coefficients in the segment, typically Index.
1096
+ ///
1097
+ /// Example: \include MatrixBase_segment_int_int.cpp
1098
+ /// Output: \verbinclude MatrixBase_segment_int_int.out
1099
+ ///
1100
+ /// The number of coefficients \a n can also be specified at compile-time by passing Eigen::fix<N>,
1101
+ /// or Eigen::fix<N>(n) as arguments.
1102
+ /// See \link block(Index,Index,NRowsType,NColsType) block() \endlink for the details.
1103
+ ///
1104
+ /// \note Even in the case that the returned expression has dynamic size, in the case
1105
+ /// when it is applied to a fixed-size vector, it inherits a fixed maximal size,
1106
+ /// which means that evaluating it does not cause a dynamic memory allocation.
1107
+ ///
1108
+ /// \sa block(Index,Index,NRowsType,NColsType), fix<N>, fix<N>(int), class Block
1109
+ ///
1110
+ template <typename NType>
1111
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
1112
+ #ifndef EIGEN_PARSED_BY_DOXYGEN
1113
+ typename FixedSegmentReturnType<internal::get_fixed_value<NType>::value>::Type
1114
+ #else
1115
+ typename FixedSegmentReturnType<...>::Type
1116
+ #endif
1117
+ segment(Index start, NType n) {
1118
+ EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived)
1119
+ return typename FixedSegmentReturnType<internal::get_fixed_value<NType>::value>::Type(derived(), start,
1120
+ internal::get_runtime_value(n));
1121
+ }
1122
+
1123
+ /// This is the const version of segment(Index,NType).
1124
+ template <typename NType>
1125
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
1126
+ #ifndef EIGEN_PARSED_BY_DOXYGEN
1127
+ const typename ConstFixedSegmentReturnType<internal::get_fixed_value<NType>::value>::Type
1128
+ #else
1129
+ const typename ConstFixedSegmentReturnType<...>::Type
1130
+ #endif
1131
+ segment(Index start, NType n) const {
1132
+ EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived)
1133
+ return typename ConstFixedSegmentReturnType<internal::get_fixed_value<NType>::value>::Type(
1134
+ derived(), start, internal::get_runtime_value(n));
1135
+ }
1136
+
1137
+ /// \returns an expression of the first coefficients of \c *this with either dynamic or fixed sizes.
1138
+ ///
1139
+ /// \only_for_vectors
1140
+ ///
1141
+ /// \param n the number of coefficients in the segment
1142
+ /// \tparam NType the type of the value handling the number of coefficients in the segment, typically Index.
1143
+ ///
1144
+ /// Example: \include MatrixBase_start_int.cpp
1145
+ /// Output: \verbinclude MatrixBase_start_int.out
1146
+ ///
1147
+ /// The number of coefficients \a n can also be specified at compile-time by passing Eigen::fix<N>,
1148
+ /// or Eigen::fix<N>(n) as arguments.
1149
+ /// See \link block(Index,Index,NRowsType,NColsType) block() \endlink for the details.
1150
+ ///
1151
+ /// \note Even in the case that the returned expression has dynamic size, in the case
1152
+ /// when it is applied to a fixed-size vector, it inherits a fixed maximal size,
1153
+ /// which means that evaluating it does not cause a dynamic memory allocation.
1154
+ ///
1155
+ /// \sa class Block, block(Index,Index)
1156
+ ///
1157
+ template <typename NType>
1158
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
1159
+ #ifndef EIGEN_PARSED_BY_DOXYGEN
1160
+ typename FixedSegmentReturnType<internal::get_fixed_value<NType>::value>::Type
1161
+ #else
1162
+ typename FixedSegmentReturnType<...>::Type
1163
+ #endif
1164
+ head(NType n) {
1165
+ EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived)
1166
+ return typename FixedSegmentReturnType<internal::get_fixed_value<NType>::value>::Type(derived(), 0,
1167
+ internal::get_runtime_value(n));
1168
+ }
1169
+
1170
+ /// This is the const version of head(NType).
1171
+ template <typename NType>
1172
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
1173
+ #ifndef EIGEN_PARSED_BY_DOXYGEN
1174
+ const typename ConstFixedSegmentReturnType<internal::get_fixed_value<NType>::value>::Type
1175
+ #else
1176
+ const typename ConstFixedSegmentReturnType<...>::Type
1177
+ #endif
1178
+ head(NType n) const {
1179
+ EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived)
1180
+ return typename ConstFixedSegmentReturnType<internal::get_fixed_value<NType>::value>::Type(
1181
+ derived(), 0, internal::get_runtime_value(n));
1182
+ }
1183
+
1184
+ /// \returns an expression of a last coefficients of \c *this with either dynamic or fixed sizes.
1185
+ ///
1186
+ /// \only_for_vectors
1187
+ ///
1188
+ /// \param n the number of coefficients in the segment
1189
+ /// \tparam NType the type of the value handling the number of coefficients in the segment, typically Index.
1190
+ ///
1191
+ /// Example: \include MatrixBase_end_int.cpp
1192
+ /// Output: \verbinclude MatrixBase_end_int.out
1193
+ ///
1194
+ /// The number of coefficients \a n can also be specified at compile-time by passing Eigen::fix<N>,
1195
+ /// or Eigen::fix<N>(n) as arguments.
1196
+ /// See \link block(Index,Index,NRowsType,NColsType) block() \endlink for the details.
1197
+ ///
1198
+ /// \note Even in the case that the returned expression has dynamic size, in the case
1199
+ /// when it is applied to a fixed-size vector, it inherits a fixed maximal size,
1200
+ /// which means that evaluating it does not cause a dynamic memory allocation.
1201
+ ///
1202
+ /// \sa class Block, block(Index,Index)
1203
+ ///
1204
+ template <typename NType>
1205
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
1206
+ #ifndef EIGEN_PARSED_BY_DOXYGEN
1207
+ typename FixedSegmentReturnType<internal::get_fixed_value<NType>::value>::Type
1208
+ #else
1209
+ typename FixedSegmentReturnType<...>::Type
1210
+ #endif
1211
+ tail(NType n) {
1212
+ EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived)
1213
+ return typename FixedSegmentReturnType<internal::get_fixed_value<NType>::value>::Type(
1214
+ derived(), this->size() - internal::get_runtime_value(n), internal::get_runtime_value(n));
1215
+ }
1216
+
1217
+ /// This is the const version of tail(Index).
1218
+ template <typename NType>
1219
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
1220
+ #ifndef EIGEN_PARSED_BY_DOXYGEN
1221
+ const typename ConstFixedSegmentReturnType<internal::get_fixed_value<NType>::value>::Type
1222
+ #else
1223
+ const typename ConstFixedSegmentReturnType<...>::Type
1224
+ #endif
1225
+ tail(NType n) const {
1226
+ EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived)
1227
+ return typename ConstFixedSegmentReturnType<internal::get_fixed_value<NType>::value>::Type(
1228
+ derived(), this->size() - internal::get_runtime_value(n), internal::get_runtime_value(n));
1229
+ }
1230
+
1231
+ /// \returns a fixed-size expression of a segment (i.e. a vector block) in \c *this
1232
+ ///
1233
+ /// \only_for_vectors
1234
+ ///
1235
+ /// \tparam N the number of coefficients in the segment as specified at compile-time
1236
+ /// \param start the index of the first element in the segment
1237
+ /// \param n the number of coefficients in the segment as specified at compile-time
1238
+ ///
1239
+ /// The compile-time and run-time information should not contradict. In other words,
1240
+ /// \a n should equal \a N unless \a N is \a Dynamic.
1241
+ ///
1242
+ /// Example: \include MatrixBase_template_int_segment.cpp
1243
+ /// Output: \verbinclude MatrixBase_template_int_segment.out
1244
+ ///
1245
+ /// \sa segment(Index,NType), class Block
1246
+ ///
1247
+ template <int N>
1248
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE typename FixedSegmentReturnType<N>::Type segment(Index start, Index n = N) {
1249
+ EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived)
1250
+ return typename FixedSegmentReturnType<N>::Type(derived(), start, n);
1251
+ }
1252
+
1253
+ /// This is the const version of segment<int>(Index).
1254
+ template <int N>
1255
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE typename ConstFixedSegmentReturnType<N>::Type segment(Index start,
1256
+ Index n = N) const {
1257
+ EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived)
1258
+ return typename ConstFixedSegmentReturnType<N>::Type(derived(), start, n);
1259
+ }
1260
+
1261
+ /// \returns a fixed-size expression of the first coefficients of \c *this.
1262
+ ///
1263
+ /// \only_for_vectors
1264
+ ///
1265
+ /// \tparam N the number of coefficients in the segment as specified at compile-time
1266
+ /// \param n the number of coefficients in the segment as specified at run-time
1267
+ ///
1268
+ /// The compile-time and run-time information should not contradict. In other words,
1269
+ /// \a n should equal \a N unless \a N is \a Dynamic.
1270
+ ///
1271
+ /// Example: \include MatrixBase_template_int_start.cpp
1272
+ /// Output: \verbinclude MatrixBase_template_int_start.out
1273
+ ///
1274
+ /// \sa head(NType), class Block
1275
+ ///
1276
+ template <int N>
1277
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE typename FixedSegmentReturnType<N>::Type head(Index n = N) {
1278
+ EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived)
1279
+ return typename FixedSegmentReturnType<N>::Type(derived(), 0, n);
1280
+ }
1281
+
1282
+ /// This is the const version of head<int>().
1283
+ template <int N>
1284
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE typename ConstFixedSegmentReturnType<N>::Type head(Index n = N) const {
1285
+ EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived)
1286
+ return typename ConstFixedSegmentReturnType<N>::Type(derived(), 0, n);
1287
+ }
1288
+
1289
+ /// \returns a fixed-size expression of the last coefficients of \c *this.
1290
+ ///
1291
+ /// \only_for_vectors
1292
+ ///
1293
+ /// \tparam N the number of coefficients in the segment as specified at compile-time
1294
+ /// \param n the number of coefficients in the segment as specified at run-time
1295
+ ///
1296
+ /// The compile-time and run-time information should not contradict. In other words,
1297
+ /// \a n should equal \a N unless \a N is \a Dynamic.
1298
+ ///
1299
+ /// Example: \include MatrixBase_template_int_end.cpp
1300
+ /// Output: \verbinclude MatrixBase_template_int_end.out
1301
+ ///
1302
+ /// \sa tail(NType), class Block
1303
+ ///
1304
+ template <int N>
1305
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE typename FixedSegmentReturnType<N>::Type tail(Index n = N) {
1306
+ EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived)
1307
+ return typename FixedSegmentReturnType<N>::Type(derived(), size() - n, n);
1308
+ }
1309
+
1310
+ /// This is the const version of tail<int>.
1311
+ template <int N>
1312
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE typename ConstFixedSegmentReturnType<N>::Type tail(Index n = N) const {
1313
+ EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived)
1314
+ return typename ConstFixedSegmentReturnType<N>::Type(derived(), size() - n, n);
1315
+ }
1316
+
1317
+ /// \returns the \a outer -th column (resp. row) of the matrix \c *this if \c *this
1318
+ /// is col-major (resp. row-major).
1319
+ ///
1320
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE InnerVectorReturnType innerVector(Index outer) {
1321
+ return InnerVectorReturnType(derived(), outer);
1322
+ }
1323
+
1324
+ /// \returns the \a outer -th column (resp. row) of the matrix \c *this if \c *this
1325
+ /// is col-major (resp. row-major). Read-only.
1326
+ ///
1327
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const ConstInnerVectorReturnType innerVector(Index outer) const {
1328
+ return ConstInnerVectorReturnType(derived(), outer);
1329
+ }
1330
+
1331
+ /// \returns the \a outer -th column (resp. row) of the matrix \c *this if \c *this
1332
+ /// is col-major (resp. row-major).
1333
+ ///
1334
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE InnerVectorsReturnType innerVectors(Index outerStart, Index outerSize) {
1335
+ return Block<Derived, Dynamic, Dynamic, true>(derived(), IsRowMajor ? outerStart : 0, IsRowMajor ? 0 : outerStart,
1336
+ IsRowMajor ? outerSize : rows(), IsRowMajor ? cols() : outerSize);
1337
+ }
1338
+
1339
+ /// \returns the \a outer -th column (resp. row) of the matrix \c *this if \c *this
1340
+ /// is col-major (resp. row-major). Read-only.
1341
+ ///
1342
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const ConstInnerVectorsReturnType innerVectors(Index outerStart,
1343
+ Index outerSize) const {
1344
+ return Block<const Derived, Dynamic, Dynamic, true>(derived(), IsRowMajor ? outerStart : 0,
1345
+ IsRowMajor ? 0 : outerStart, IsRowMajor ? outerSize : rows(),
1346
+ IsRowMajor ? cols() : outerSize);
1347
+ }
1348
+
1349
+ /** \returns the i-th subvector (column or vector) according to the \c Direction
1350
+ * \sa subVectors()
1351
+ */
1352
+ template <DirectionType Direction>
1353
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE std::conditional_t<Direction == Vertical, ColXpr, RowXpr> subVector(Index i) {
1354
+ return std::conditional_t<Direction == Vertical, ColXpr, RowXpr>(derived(), i);
1355
+ }
1356
+
1357
+ /** This is the const version of subVector(Index) */
1358
+ template <DirectionType Direction>
1359
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE std::conditional_t<Direction == Vertical, ConstColXpr, ConstRowXpr> subVector(
1360
+ Index i) const {
1361
+ return std::conditional_t<Direction == Vertical, ConstColXpr, ConstRowXpr>(derived(), i);
1362
+ }
1363
+
1364
+ /** \returns the number of subvectors (rows or columns) in the direction \c Direction
1365
+ * \sa subVector(Index)
1366
+ */
1367
+ template <DirectionType Direction>
1368
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr Index subVectors() const {
1369
+ return (Direction == Vertical) ? cols() : rows();
1370
+ }