@smake/eigen 1.0.1 → 1.1.0

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 (283) hide show
  1. package/README.md +1 -1
  2. package/eigen/COPYING.APACHE +203 -0
  3. package/eigen/COPYING.BSD +1 -1
  4. package/eigen/COPYING.MINPACK +51 -52
  5. package/eigen/Eigen/Cholesky +0 -1
  6. package/eigen/Eigen/Core +108 -266
  7. package/eigen/Eigen/Eigenvalues +0 -1
  8. package/eigen/Eigen/Geometry +3 -6
  9. package/eigen/Eigen/Householder +0 -1
  10. package/eigen/Eigen/Jacobi +0 -1
  11. package/eigen/Eigen/KLUSupport +41 -0
  12. package/eigen/Eigen/LU +2 -5
  13. package/eigen/Eigen/OrderingMethods +0 -3
  14. package/eigen/Eigen/PaStiXSupport +1 -0
  15. package/eigen/Eigen/PardisoSupport +0 -0
  16. package/eigen/Eigen/QR +0 -1
  17. package/eigen/Eigen/QtAlignedMalloc +0 -1
  18. package/eigen/Eigen/SVD +0 -1
  19. package/eigen/Eigen/Sparse +0 -2
  20. package/eigen/Eigen/SparseCholesky +0 -8
  21. package/eigen/Eigen/SparseLU +4 -0
  22. package/eigen/Eigen/src/Cholesky/LDLT.h +42 -27
  23. package/eigen/Eigen/src/Cholesky/LLT.h +39 -23
  24. package/eigen/Eigen/src/CholmodSupport/CholmodSupport.h +90 -47
  25. package/eigen/Eigen/src/Core/ArithmeticSequence.h +413 -0
  26. package/eigen/Eigen/src/Core/Array.h +99 -11
  27. package/eigen/Eigen/src/Core/ArrayBase.h +1 -1
  28. package/eigen/Eigen/src/Core/ArrayWrapper.h +21 -21
  29. package/eigen/Eigen/src/Core/Assign.h +1 -1
  30. package/eigen/Eigen/src/Core/AssignEvaluator.h +125 -50
  31. package/eigen/Eigen/src/Core/Assign_MKL.h +10 -10
  32. package/eigen/Eigen/src/Core/BandMatrix.h +16 -16
  33. package/eigen/Eigen/src/Core/Block.h +56 -60
  34. package/eigen/Eigen/src/Core/BooleanRedux.h +29 -31
  35. package/eigen/Eigen/src/Core/CommaInitializer.h +7 -3
  36. package/eigen/Eigen/src/Core/CoreEvaluators.h +325 -272
  37. package/eigen/Eigen/src/Core/CoreIterators.h +5 -0
  38. package/eigen/Eigen/src/Core/CwiseBinaryOp.h +21 -22
  39. package/eigen/Eigen/src/Core/CwiseNullaryOp.h +153 -18
  40. package/eigen/Eigen/src/Core/CwiseUnaryOp.h +6 -6
  41. package/eigen/Eigen/src/Core/CwiseUnaryView.h +12 -10
  42. package/eigen/Eigen/src/Core/DenseBase.h +128 -39
  43. package/eigen/Eigen/src/Core/DenseCoeffsBase.h +25 -21
  44. package/eigen/Eigen/src/Core/DenseStorage.h +150 -68
  45. package/eigen/Eigen/src/Core/Diagonal.h +21 -23
  46. package/eigen/Eigen/src/Core/DiagonalMatrix.h +50 -2
  47. package/eigen/Eigen/src/Core/DiagonalProduct.h +1 -1
  48. package/eigen/Eigen/src/Core/Dot.h +10 -10
  49. package/eigen/Eigen/src/Core/EigenBase.h +10 -9
  50. package/eigen/Eigen/src/Core/ForceAlignedAccess.h +8 -4
  51. package/eigen/Eigen/src/Core/Fuzzy.h +3 -3
  52. package/eigen/Eigen/src/Core/GeneralProduct.h +20 -10
  53. package/eigen/Eigen/src/Core/GenericPacketMath.h +597 -147
  54. package/eigen/Eigen/src/Core/GlobalFunctions.h +40 -33
  55. package/eigen/Eigen/src/Core/IO.h +40 -7
  56. package/eigen/Eigen/src/Core/IndexedView.h +237 -0
  57. package/eigen/Eigen/src/Core/Inverse.h +9 -10
  58. package/eigen/Eigen/src/Core/Map.h +7 -7
  59. package/eigen/Eigen/src/Core/MapBase.h +5 -3
  60. package/eigen/Eigen/src/Core/MathFunctions.h +756 -120
  61. package/eigen/Eigen/src/Core/MathFunctionsImpl.h +118 -19
  62. package/eigen/Eigen/src/Core/Matrix.h +131 -25
  63. package/eigen/Eigen/src/Core/MatrixBase.h +19 -2
  64. package/eigen/Eigen/src/Core/NestByValue.h +25 -50
  65. package/eigen/Eigen/src/Core/NoAlias.h +4 -3
  66. package/eigen/Eigen/src/Core/NumTraits.h +107 -20
  67. package/eigen/Eigen/src/Core/PartialReduxEvaluator.h +232 -0
  68. package/eigen/Eigen/src/Core/PermutationMatrix.h +3 -3
  69. package/eigen/Eigen/src/Core/PlainObjectBase.h +145 -54
  70. package/eigen/Eigen/src/Core/Product.h +30 -25
  71. package/eigen/Eigen/src/Core/ProductEvaluators.h +183 -142
  72. package/eigen/Eigen/src/Core/Random.h +37 -1
  73. package/eigen/Eigen/src/Core/Redux.h +180 -170
  74. package/eigen/Eigen/src/Core/Ref.h +118 -21
  75. package/eigen/Eigen/src/Core/Replicate.h +8 -8
  76. package/eigen/Eigen/src/Core/Reshaped.h +454 -0
  77. package/eigen/Eigen/src/Core/ReturnByValue.h +7 -5
  78. package/eigen/Eigen/src/Core/Reverse.h +18 -12
  79. package/eigen/Eigen/src/Core/Select.h +8 -6
  80. package/eigen/Eigen/src/Core/SelfAdjointView.h +33 -20
  81. package/eigen/Eigen/src/Core/Solve.h +14 -14
  82. package/eigen/Eigen/src/Core/SolveTriangular.h +13 -13
  83. package/eigen/Eigen/src/Core/SolverBase.h +41 -3
  84. package/eigen/Eigen/src/Core/StableNorm.h +100 -70
  85. package/eigen/Eigen/src/Core/StlIterators.h +463 -0
  86. package/eigen/Eigen/src/Core/Stride.h +9 -4
  87. package/eigen/Eigen/src/Core/Swap.h +5 -4
  88. package/eigen/Eigen/src/Core/Transpose.h +86 -27
  89. package/eigen/Eigen/src/Core/Transpositions.h +26 -8
  90. package/eigen/Eigen/src/Core/TriangularMatrix.h +88 -72
  91. package/eigen/Eigen/src/Core/VectorBlock.h +5 -5
  92. package/eigen/Eigen/src/Core/VectorwiseOp.h +159 -70
  93. package/eigen/Eigen/src/Core/Visitor.h +137 -29
  94. package/eigen/Eigen/src/Core/arch/AVX/Complex.h +50 -129
  95. package/eigen/Eigen/src/Core/arch/AVX/MathFunctions.h +126 -337
  96. package/eigen/Eigen/src/Core/arch/AVX/PacketMath.h +1092 -155
  97. package/eigen/Eigen/src/Core/arch/AVX/TypeCasting.h +65 -1
  98. package/eigen/Eigen/src/Core/arch/AVX512/Complex.h +422 -0
  99. package/eigen/Eigen/src/Core/arch/AVX512/MathFunctions.h +186 -213
  100. package/eigen/Eigen/src/Core/arch/AVX512/PacketMath.h +1250 -252
  101. package/eigen/Eigen/src/Core/arch/AVX512/TypeCasting.h +89 -0
  102. package/eigen/Eigen/src/Core/arch/AltiVec/Complex.h +152 -165
  103. package/eigen/Eigen/src/Core/arch/AltiVec/MathFunctions.h +19 -251
  104. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProduct.h +2937 -0
  105. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h +221 -0
  106. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h +629 -0
  107. package/eigen/Eigen/src/Core/arch/AltiVec/PacketMath.h +2042 -392
  108. package/eigen/Eigen/src/Core/arch/CUDA/Complex.h +235 -80
  109. package/eigen/Eigen/src/Core/arch/Default/BFloat16.h +700 -0
  110. package/eigen/Eigen/src/Core/arch/Default/ConjHelper.h +102 -14
  111. package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h +1649 -0
  112. package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h +110 -0
  113. package/eigen/Eigen/src/Core/arch/Default/Half.h +942 -0
  114. package/eigen/Eigen/src/Core/arch/Default/Settings.h +1 -1
  115. package/eigen/Eigen/src/Core/arch/Default/TypeCasting.h +120 -0
  116. package/eigen/Eigen/src/Core/arch/{CUDA → GPU}/MathFunctions.h +16 -4
  117. package/eigen/Eigen/src/Core/arch/GPU/PacketMath.h +1685 -0
  118. package/eigen/Eigen/src/Core/arch/GPU/TypeCasting.h +80 -0
  119. package/eigen/Eigen/src/Core/arch/HIP/hcc/math_constants.h +23 -0
  120. package/eigen/Eigen/src/Core/arch/MSA/Complex.h +648 -0
  121. package/eigen/Eigen/src/Core/arch/MSA/MathFunctions.h +387 -0
  122. package/eigen/Eigen/src/Core/arch/MSA/PacketMath.h +1233 -0
  123. package/eigen/Eigen/src/Core/arch/NEON/Complex.h +313 -219
  124. package/eigen/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h +183 -0
  125. package/eigen/Eigen/src/Core/arch/NEON/MathFunctions.h +54 -70
  126. package/eigen/Eigen/src/Core/arch/NEON/PacketMath.h +4376 -549
  127. package/eigen/Eigen/src/Core/arch/NEON/TypeCasting.h +1419 -0
  128. package/eigen/Eigen/src/Core/arch/SSE/Complex.h +59 -179
  129. package/eigen/Eigen/src/Core/arch/SSE/MathFunctions.h +65 -428
  130. package/eigen/Eigen/src/Core/arch/SSE/PacketMath.h +893 -283
  131. package/eigen/Eigen/src/Core/arch/SSE/TypeCasting.h +65 -0
  132. package/eigen/Eigen/src/Core/arch/SVE/MathFunctions.h +44 -0
  133. package/eigen/Eigen/src/Core/arch/SVE/PacketMath.h +752 -0
  134. package/eigen/Eigen/src/Core/arch/SVE/TypeCasting.h +49 -0
  135. package/eigen/Eigen/src/Core/arch/SYCL/InteropHeaders.h +232 -0
  136. package/eigen/Eigen/src/Core/arch/SYCL/MathFunctions.h +301 -0
  137. package/eigen/Eigen/src/Core/arch/SYCL/PacketMath.h +670 -0
  138. package/eigen/Eigen/src/Core/arch/SYCL/SyclMemoryModel.h +694 -0
  139. package/eigen/Eigen/src/Core/arch/SYCL/TypeCasting.h +85 -0
  140. package/eigen/Eigen/src/Core/arch/ZVector/Complex.h +212 -183
  141. package/eigen/Eigen/src/Core/arch/ZVector/MathFunctions.h +101 -5
  142. package/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h +510 -395
  143. package/eigen/Eigen/src/Core/functors/AssignmentFunctors.h +11 -2
  144. package/eigen/Eigen/src/Core/functors/BinaryFunctors.h +112 -46
  145. package/eigen/Eigen/src/Core/functors/NullaryFunctors.h +31 -30
  146. package/eigen/Eigen/src/Core/functors/StlFunctors.h +32 -2
  147. package/eigen/Eigen/src/Core/functors/UnaryFunctors.h +354 -15
  148. package/eigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h +1073 -585
  149. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix.h +29 -7
  150. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +4 -4
  151. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h +1 -1
  152. package/eigen/Eigen/src/Core/products/GeneralMatrixVector.h +382 -483
  153. package/eigen/Eigen/src/Core/products/Parallelizer.h +23 -9
  154. package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +23 -6
  155. package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector.h +8 -6
  156. package/eigen/Eigen/src/Core/products/SelfadjointProduct.h +2 -2
  157. package/eigen/Eigen/src/Core/products/SelfadjointRank2Update.h +5 -4
  158. package/eigen/Eigen/src/Core/products/TriangularMatrixMatrix.h +3 -3
  159. package/eigen/Eigen/src/Core/products/TriangularSolverMatrix.h +5 -3
  160. package/eigen/Eigen/src/Core/products/TriangularSolverVector.h +13 -10
  161. package/eigen/Eigen/src/Core/util/BlasUtil.h +208 -124
  162. package/eigen/Eigen/src/Core/util/ConfigureVectorization.h +512 -0
  163. package/eigen/Eigen/src/Core/util/Constants.h +25 -9
  164. package/eigen/Eigen/src/Core/util/DisableStupidWarnings.h +14 -2
  165. package/eigen/Eigen/src/Core/util/ForwardDeclarations.h +28 -4
  166. package/eigen/Eigen/src/Core/util/IndexedViewHelper.h +186 -0
  167. package/eigen/Eigen/src/Core/util/IntegralConstant.h +272 -0
  168. package/eigen/Eigen/src/Core/util/MKL_support.h +8 -1
  169. package/eigen/Eigen/src/Core/util/Macros.h +661 -250
  170. package/eigen/Eigen/src/Core/util/Memory.h +222 -52
  171. package/eigen/Eigen/src/Core/util/Meta.h +349 -105
  172. package/eigen/Eigen/src/Core/util/ReshapedHelper.h +51 -0
  173. package/eigen/Eigen/src/Core/util/StaticAssert.h +8 -5
  174. package/eigen/Eigen/src/Core/util/SymbolicIndex.h +293 -0
  175. package/eigen/Eigen/src/Core/util/XprHelper.h +48 -30
  176. package/eigen/Eigen/src/Eigenvalues/ComplexEigenSolver.h +1 -1
  177. package/eigen/Eigen/src/Eigenvalues/ComplexSchur.h +1 -1
  178. package/eigen/Eigen/src/Eigenvalues/EigenSolver.h +2 -2
  179. package/eigen/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h +1 -1
  180. package/eigen/Eigen/src/Eigenvalues/HessenbergDecomposition.h +2 -2
  181. package/eigen/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h +2 -2
  182. package/eigen/Eigen/src/Eigenvalues/RealQZ.h +9 -6
  183. package/eigen/Eigen/src/Eigenvalues/RealSchur.h +10 -5
  184. package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +75 -42
  185. package/eigen/Eigen/src/Eigenvalues/Tridiagonalization.h +20 -15
  186. package/eigen/Eigen/src/Geometry/AlignedBox.h +99 -5
  187. package/eigen/Eigen/src/Geometry/AngleAxis.h +4 -4
  188. package/eigen/Eigen/src/Geometry/EulerAngles.h +3 -3
  189. package/eigen/Eigen/src/Geometry/Homogeneous.h +15 -11
  190. package/eigen/Eigen/src/Geometry/Hyperplane.h +1 -1
  191. package/eigen/Eigen/src/Geometry/OrthoMethods.h +3 -2
  192. package/eigen/Eigen/src/Geometry/ParametrizedLine.h +39 -2
  193. package/eigen/Eigen/src/Geometry/Quaternion.h +52 -14
  194. package/eigen/Eigen/src/Geometry/Rotation2D.h +3 -3
  195. package/eigen/Eigen/src/Geometry/Scaling.h +22 -4
  196. package/eigen/Eigen/src/Geometry/Transform.h +86 -65
  197. package/eigen/Eigen/src/Geometry/Translation.h +6 -6
  198. package/eigen/Eigen/src/Geometry/arch/Geometry_SIMD.h +168 -0
  199. package/eigen/Eigen/src/Householder/BlockHouseholder.h +9 -2
  200. package/eigen/Eigen/src/Householder/Householder.h +8 -4
  201. package/eigen/Eigen/src/Householder/HouseholderSequence.h +123 -48
  202. package/eigen/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +15 -15
  203. package/eigen/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +7 -23
  204. package/eigen/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +5 -22
  205. package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +41 -47
  206. package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +51 -60
  207. package/eigen/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +70 -20
  208. package/eigen/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h +2 -20
  209. package/eigen/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h +11 -9
  210. package/eigen/Eigen/src/Jacobi/Jacobi.h +31 -10
  211. package/eigen/Eigen/src/KLUSupport/KLUSupport.h +358 -0
  212. package/eigen/Eigen/src/LU/Determinant.h +35 -19
  213. package/eigen/Eigen/src/LU/FullPivLU.h +29 -43
  214. package/eigen/Eigen/src/LU/InverseImpl.h +25 -8
  215. package/eigen/Eigen/src/LU/PartialPivLU.h +67 -57
  216. package/eigen/Eigen/src/LU/arch/InverseSize4.h +351 -0
  217. package/eigen/Eigen/src/OrderingMethods/Amd.h +7 -17
  218. package/eigen/Eigen/src/OrderingMethods/Eigen_Colamd.h +297 -277
  219. package/eigen/Eigen/src/OrderingMethods/Ordering.h +6 -10
  220. package/eigen/Eigen/src/PaStiXSupport/PaStiXSupport.h +1 -1
  221. package/eigen/Eigen/src/PardisoSupport/PardisoSupport.h +10 -9
  222. package/eigen/Eigen/src/QR/ColPivHouseholderQR.h +41 -20
  223. package/eigen/Eigen/src/QR/CompleteOrthogonalDecomposition.h +100 -27
  224. package/eigen/Eigen/src/QR/FullPivHouseholderQR.h +59 -22
  225. package/eigen/Eigen/src/QR/HouseholderQR.h +48 -23
  226. package/eigen/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h +25 -3
  227. package/eigen/Eigen/src/SVD/BDCSVD.h +137 -48
  228. package/eigen/Eigen/src/SVD/JacobiSVD.h +22 -14
  229. package/eigen/Eigen/src/SVD/SVDBase.h +82 -21
  230. package/eigen/Eigen/src/SVD/UpperBidiagonalization.h +3 -3
  231. package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky.h +16 -8
  232. package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +11 -36
  233. package/eigen/Eigen/src/SparseCore/CompressedStorage.h +16 -0
  234. package/eigen/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +6 -6
  235. package/eigen/Eigen/src/SparseCore/SparseAssign.h +81 -27
  236. package/eigen/Eigen/src/SparseCore/SparseBlock.h +25 -57
  237. package/eigen/Eigen/src/SparseCore/SparseCompressedBase.h +40 -11
  238. package/eigen/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +11 -15
  239. package/eigen/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +2 -2
  240. package/eigen/Eigen/src/SparseCore/SparseDenseProduct.h +30 -8
  241. package/eigen/Eigen/src/SparseCore/SparseMatrix.h +124 -10
  242. package/eigen/Eigen/src/SparseCore/SparseMatrixBase.h +5 -12
  243. package/eigen/Eigen/src/SparseCore/SparseProduct.h +13 -1
  244. package/eigen/Eigen/src/SparseCore/SparseRef.h +7 -7
  245. package/eigen/Eigen/src/SparseCore/SparseSelfAdjointView.h +3 -0
  246. package/eigen/Eigen/src/SparseCore/SparseUtil.h +8 -0
  247. package/eigen/Eigen/src/SparseCore/SparseVector.h +1 -1
  248. package/eigen/Eigen/src/SparseLU/SparseLU.h +160 -10
  249. package/eigen/Eigen/src/SparseLU/SparseLU_Memory.h +1 -1
  250. package/eigen/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h +76 -2
  251. package/eigen/Eigen/src/SparseLU/SparseLU_column_dfs.h +2 -2
  252. package/eigen/Eigen/src/SparseLU/SparseLU_gemm_kernel.h +1 -1
  253. package/eigen/Eigen/src/SparseLU/SparseLU_panel_bmod.h +1 -1
  254. package/eigen/Eigen/src/SparseQR/SparseQR.h +19 -6
  255. package/eigen/Eigen/src/StlSupport/StdDeque.h +2 -14
  256. package/eigen/Eigen/src/StlSupport/StdList.h +2 -2
  257. package/eigen/Eigen/src/StlSupport/StdVector.h +2 -2
  258. package/eigen/Eigen/src/SuperLUSupport/SuperLUSupport.h +6 -8
  259. package/eigen/Eigen/src/UmfPackSupport/UmfPackSupport.h +175 -39
  260. package/eigen/Eigen/src/misc/lapacke.h +5 -4
  261. package/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.h +27 -1
  262. package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.h +155 -11
  263. package/eigen/Eigen/src/plugins/BlockMethods.h +626 -242
  264. package/eigen/Eigen/src/plugins/CommonCwiseUnaryOps.h +14 -0
  265. package/eigen/Eigen/src/plugins/IndexedViewMethods.h +262 -0
  266. package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.h +4 -4
  267. package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.h +10 -0
  268. package/eigen/Eigen/src/plugins/ReshapedMethods.h +149 -0
  269. package/eigen/README.md +2 -0
  270. package/lib/LibEigen.d.ts +4 -0
  271. package/lib/LibEigen.js +14 -0
  272. package/lib/index.d.ts +1 -1
  273. package/lib/index.js +7 -3
  274. package/package.json +2 -10
  275. package/eigen/Eigen/CMakeLists.txt +0 -19
  276. package/eigen/Eigen/src/Core/arch/CUDA/Half.h +0 -675
  277. package/eigen/Eigen/src/Core/arch/CUDA/PacketMath.h +0 -333
  278. package/eigen/Eigen/src/Core/arch/CUDA/PacketMathHalf.h +0 -1124
  279. package/eigen/Eigen/src/Core/arch/CUDA/TypeCasting.h +0 -212
  280. package/eigen/Eigen/src/Geometry/arch/Geometry_SSE.h +0 -161
  281. package/eigen/Eigen/src/LU/arch/Inverse_SSE.h +0 -338
  282. package/lib/eigen.d.ts +0 -2
  283. package/lib/eigen.js +0 -15
@@ -0,0 +1,413 @@
1
+ // This file is part of Eigen, a lightweight C++ template library
2
+ // for linear algebra.
3
+ //
4
+ // Copyright (C) 2017 Gael Guennebaud <gael.guennebaud@inria.fr>
5
+ //
6
+ // This Source Code Form is subject to the terms of the Mozilla
7
+ // Public License v. 2.0. If a copy of the MPL was not distributed
8
+ // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
9
+
10
+ #ifndef EIGEN_ARITHMETIC_SEQUENCE_H
11
+ #define EIGEN_ARITHMETIC_SEQUENCE_H
12
+
13
+ namespace Eigen {
14
+
15
+ namespace internal {
16
+
17
+ #if (!EIGEN_HAS_CXX11) || !((!EIGEN_COMP_GNUC) || EIGEN_COMP_GNUC>=48)
18
+ template<typename T> struct aseq_negate {};
19
+
20
+ template<> struct aseq_negate<Index> {
21
+ typedef Index type;
22
+ };
23
+
24
+ template<int N> struct aseq_negate<FixedInt<N> > {
25
+ typedef FixedInt<-N> type;
26
+ };
27
+
28
+ // Compilation error in the following case:
29
+ template<> struct aseq_negate<FixedInt<DynamicIndex> > {};
30
+
31
+ template<typename FirstType,typename SizeType,typename IncrType,
32
+ bool FirstIsSymbolic=symbolic::is_symbolic<FirstType>::value,
33
+ bool SizeIsSymbolic =symbolic::is_symbolic<SizeType>::value>
34
+ struct aseq_reverse_first_type {
35
+ typedef Index type;
36
+ };
37
+
38
+ template<typename FirstType,typename SizeType,typename IncrType>
39
+ struct aseq_reverse_first_type<FirstType,SizeType,IncrType,true,true> {
40
+ typedef symbolic::AddExpr<FirstType,
41
+ symbolic::ProductExpr<symbolic::AddExpr<SizeType,symbolic::ValueExpr<FixedInt<-1> > >,
42
+ symbolic::ValueExpr<IncrType> >
43
+ > type;
44
+ };
45
+
46
+ template<typename SizeType,typename IncrType,typename EnableIf = void>
47
+ struct aseq_reverse_first_type_aux {
48
+ typedef Index type;
49
+ };
50
+
51
+ template<typename SizeType,typename IncrType>
52
+ struct aseq_reverse_first_type_aux<SizeType,IncrType,typename internal::enable_if<bool((SizeType::value+IncrType::value)|0x1)>::type> {
53
+ typedef FixedInt<(SizeType::value-1)*IncrType::value> type;
54
+ };
55
+
56
+ template<typename FirstType,typename SizeType,typename IncrType>
57
+ struct aseq_reverse_first_type<FirstType,SizeType,IncrType,true,false> {
58
+ typedef typename aseq_reverse_first_type_aux<SizeType,IncrType>::type Aux;
59
+ typedef symbolic::AddExpr<FirstType,symbolic::ValueExpr<Aux> > type;
60
+ };
61
+
62
+ template<typename FirstType,typename SizeType,typename IncrType>
63
+ struct aseq_reverse_first_type<FirstType,SizeType,IncrType,false,true> {
64
+ typedef symbolic::AddExpr<symbolic::ProductExpr<symbolic::AddExpr<SizeType,symbolic::ValueExpr<FixedInt<-1> > >,
65
+ symbolic::ValueExpr<IncrType> >,
66
+ symbolic::ValueExpr<> > type;
67
+ };
68
+ #endif
69
+
70
+ // Helper to cleanup the type of the increment:
71
+ template<typename T> struct cleanup_seq_incr {
72
+ typedef typename cleanup_index_type<T,DynamicIndex>::type type;
73
+ };
74
+
75
+ }
76
+
77
+ //--------------------------------------------------------------------------------
78
+ // seq(first,last,incr) and seqN(first,size,incr)
79
+ //--------------------------------------------------------------------------------
80
+
81
+ template<typename FirstType=Index,typename SizeType=Index,typename IncrType=internal::FixedInt<1> >
82
+ class ArithmeticSequence;
83
+
84
+ template<typename FirstType,typename SizeType,typename IncrType>
85
+ ArithmeticSequence<typename internal::cleanup_index_type<FirstType>::type,
86
+ typename internal::cleanup_index_type<SizeType>::type,
87
+ typename internal::cleanup_seq_incr<IncrType>::type >
88
+ seqN(FirstType first, SizeType size, IncrType incr);
89
+
90
+ /** \class ArithmeticSequence
91
+ * \ingroup Core_Module
92
+ *
93
+ * This class represents an arithmetic progression \f$ a_0, a_1, a_2, ..., a_{n-1}\f$ defined by
94
+ * its \em first value \f$ a_0 \f$, its \em size (aka length) \em n, and the \em increment (aka stride)
95
+ * that is equal to \f$ a_{i+1}-a_{i}\f$ for any \em i.
96
+ *
97
+ * It is internally used as the return type of the Eigen::seq and Eigen::seqN functions, and as the input arguments
98
+ * of DenseBase::operator()(const RowIndices&, const ColIndices&), and most of the time this is the
99
+ * only way it is used.
100
+ *
101
+ * \tparam FirstType type of the first element, usually an Index,
102
+ * but internally it can be a symbolic expression
103
+ * \tparam SizeType type representing the size of the sequence, usually an Index
104
+ * or a compile time integral constant. Internally, it can also be a symbolic expression
105
+ * \tparam IncrType type of the increment, can be a runtime Index, or a compile time integral constant (default is compile-time 1)
106
+ *
107
+ * \sa Eigen::seq, Eigen::seqN, DenseBase::operator()(const RowIndices&, const ColIndices&), class IndexedView
108
+ */
109
+ template<typename FirstType,typename SizeType,typename IncrType>
110
+ class ArithmeticSequence
111
+ {
112
+ public:
113
+ ArithmeticSequence(FirstType first, SizeType size) : m_first(first), m_size(size) {}
114
+ ArithmeticSequence(FirstType first, SizeType size, IncrType incr) : m_first(first), m_size(size), m_incr(incr) {}
115
+
116
+ enum {
117
+ SizeAtCompileTime = internal::get_fixed_value<SizeType>::value,
118
+ IncrAtCompileTime = internal::get_fixed_value<IncrType,DynamicIndex>::value
119
+ };
120
+
121
+ /** \returns the size, i.e., number of elements, of the sequence */
122
+ Index size() const { return m_size; }
123
+
124
+ /** \returns the first element \f$ a_0 \f$ in the sequence */
125
+ Index first() const { return m_first; }
126
+
127
+ /** \returns the value \f$ a_i \f$ at index \a i in the sequence. */
128
+ Index operator[](Index i) const { return m_first + i * m_incr; }
129
+
130
+ const FirstType& firstObject() const { return m_first; }
131
+ const SizeType& sizeObject() const { return m_size; }
132
+ const IncrType& incrObject() const { return m_incr; }
133
+
134
+ protected:
135
+ FirstType m_first;
136
+ SizeType m_size;
137
+ IncrType m_incr;
138
+
139
+ public:
140
+
141
+ #if EIGEN_HAS_CXX11 && ((!EIGEN_COMP_GNUC) || EIGEN_COMP_GNUC>=48)
142
+ auto reverse() const -> decltype(Eigen::seqN(m_first+(m_size+fix<-1>())*m_incr,m_size,-m_incr)) {
143
+ return seqN(m_first+(m_size+fix<-1>())*m_incr,m_size,-m_incr);
144
+ }
145
+ #else
146
+ protected:
147
+ typedef typename internal::aseq_negate<IncrType>::type ReverseIncrType;
148
+ typedef typename internal::aseq_reverse_first_type<FirstType,SizeType,IncrType>::type ReverseFirstType;
149
+ public:
150
+ ArithmeticSequence<ReverseFirstType,SizeType,ReverseIncrType>
151
+ reverse() const {
152
+ return seqN(m_first+(m_size+fix<-1>())*m_incr,m_size,-m_incr);
153
+ }
154
+ #endif
155
+ };
156
+
157
+ /** \returns an ArithmeticSequence starting at \a first, of length \a size, and increment \a incr
158
+ *
159
+ * \sa seqN(FirstType,SizeType), seq(FirstType,LastType,IncrType) */
160
+ template<typename FirstType,typename SizeType,typename IncrType>
161
+ ArithmeticSequence<typename internal::cleanup_index_type<FirstType>::type,typename internal::cleanup_index_type<SizeType>::type,typename internal::cleanup_seq_incr<IncrType>::type >
162
+ seqN(FirstType first, SizeType size, IncrType incr) {
163
+ return ArithmeticSequence<typename internal::cleanup_index_type<FirstType>::type,typename internal::cleanup_index_type<SizeType>::type,typename internal::cleanup_seq_incr<IncrType>::type>(first,size,incr);
164
+ }
165
+
166
+ /** \returns an ArithmeticSequence starting at \a first, of length \a size, and unit increment
167
+ *
168
+ * \sa seqN(FirstType,SizeType,IncrType), seq(FirstType,LastType) */
169
+ template<typename FirstType,typename SizeType>
170
+ ArithmeticSequence<typename internal::cleanup_index_type<FirstType>::type,typename internal::cleanup_index_type<SizeType>::type >
171
+ seqN(FirstType first, SizeType size) {
172
+ return ArithmeticSequence<typename internal::cleanup_index_type<FirstType>::type,typename internal::cleanup_index_type<SizeType>::type>(first,size);
173
+ }
174
+
175
+ #ifdef EIGEN_PARSED_BY_DOXYGEN
176
+
177
+ /** \returns an ArithmeticSequence starting at \a f, up (or down) to \a l, and with positive (or negative) increment \a incr
178
+ *
179
+ * It is essentially an alias to:
180
+ * \code
181
+ * seqN(f, (l-f+incr)/incr, incr);
182
+ * \endcode
183
+ *
184
+ * \sa seqN(FirstType,SizeType,IncrType), seq(FirstType,LastType)
185
+ */
186
+ template<typename FirstType,typename LastType, typename IncrType>
187
+ auto seq(FirstType f, LastType l, IncrType incr);
188
+
189
+ /** \returns an ArithmeticSequence starting at \a f, up (or down) to \a l, and unit increment
190
+ *
191
+ * It is essentially an alias to:
192
+ * \code
193
+ * seqN(f,l-f+1);
194
+ * \endcode
195
+ *
196
+ * \sa seqN(FirstType,SizeType), seq(FirstType,LastType,IncrType)
197
+ */
198
+ template<typename FirstType,typename LastType>
199
+ auto seq(FirstType f, LastType l);
200
+
201
+ #else // EIGEN_PARSED_BY_DOXYGEN
202
+
203
+ #if EIGEN_HAS_CXX11
204
+ template<typename FirstType,typename LastType>
205
+ auto seq(FirstType f, LastType l) -> decltype(seqN(typename internal::cleanup_index_type<FirstType>::type(f),
206
+ ( typename internal::cleanup_index_type<LastType>::type(l)
207
+ - typename internal::cleanup_index_type<FirstType>::type(f)+fix<1>())))
208
+ {
209
+ return seqN(typename internal::cleanup_index_type<FirstType>::type(f),
210
+ (typename internal::cleanup_index_type<LastType>::type(l)
211
+ -typename internal::cleanup_index_type<FirstType>::type(f)+fix<1>()));
212
+ }
213
+
214
+ template<typename FirstType,typename LastType, typename IncrType>
215
+ auto seq(FirstType f, LastType l, IncrType incr)
216
+ -> decltype(seqN(typename internal::cleanup_index_type<FirstType>::type(f),
217
+ ( typename internal::cleanup_index_type<LastType>::type(l)
218
+ - typename internal::cleanup_index_type<FirstType>::type(f)+typename internal::cleanup_seq_incr<IncrType>::type(incr)
219
+ ) / typename internal::cleanup_seq_incr<IncrType>::type(incr),
220
+ typename internal::cleanup_seq_incr<IncrType>::type(incr)))
221
+ {
222
+ typedef typename internal::cleanup_seq_incr<IncrType>::type CleanedIncrType;
223
+ return seqN(typename internal::cleanup_index_type<FirstType>::type(f),
224
+ ( typename internal::cleanup_index_type<LastType>::type(l)
225
+ -typename internal::cleanup_index_type<FirstType>::type(f)+CleanedIncrType(incr)) / CleanedIncrType(incr),
226
+ CleanedIncrType(incr));
227
+ }
228
+
229
+ #else // EIGEN_HAS_CXX11
230
+
231
+ template<typename FirstType,typename LastType>
232
+ typename internal::enable_if<!(symbolic::is_symbolic<FirstType>::value || symbolic::is_symbolic<LastType>::value),
233
+ ArithmeticSequence<typename internal::cleanup_index_type<FirstType>::type,Index> >::type
234
+ seq(FirstType f, LastType l)
235
+ {
236
+ return seqN(typename internal::cleanup_index_type<FirstType>::type(f),
237
+ Index((typename internal::cleanup_index_type<LastType>::type(l)-typename internal::cleanup_index_type<FirstType>::type(f)+fix<1>())));
238
+ }
239
+
240
+ template<typename FirstTypeDerived,typename LastType>
241
+ typename internal::enable_if<!symbolic::is_symbolic<LastType>::value,
242
+ ArithmeticSequence<FirstTypeDerived, symbolic::AddExpr<symbolic::AddExpr<symbolic::NegateExpr<FirstTypeDerived>,symbolic::ValueExpr<> >,
243
+ symbolic::ValueExpr<internal::FixedInt<1> > > > >::type
244
+ seq(const symbolic::BaseExpr<FirstTypeDerived> &f, LastType l)
245
+ {
246
+ return seqN(f.derived(),(typename internal::cleanup_index_type<LastType>::type(l)-f.derived()+fix<1>()));
247
+ }
248
+
249
+ template<typename FirstType,typename LastTypeDerived>
250
+ typename internal::enable_if<!symbolic::is_symbolic<FirstType>::value,
251
+ ArithmeticSequence<typename internal::cleanup_index_type<FirstType>::type,
252
+ symbolic::AddExpr<symbolic::AddExpr<LastTypeDerived,symbolic::ValueExpr<> >,
253
+ symbolic::ValueExpr<internal::FixedInt<1> > > > >::type
254
+ seq(FirstType f, const symbolic::BaseExpr<LastTypeDerived> &l)
255
+ {
256
+ return seqN(typename internal::cleanup_index_type<FirstType>::type(f),(l.derived()-typename internal::cleanup_index_type<FirstType>::type(f)+fix<1>()));
257
+ }
258
+
259
+ template<typename FirstTypeDerived,typename LastTypeDerived>
260
+ ArithmeticSequence<FirstTypeDerived,
261
+ symbolic::AddExpr<symbolic::AddExpr<LastTypeDerived,symbolic::NegateExpr<FirstTypeDerived> >,symbolic::ValueExpr<internal::FixedInt<1> > > >
262
+ seq(const symbolic::BaseExpr<FirstTypeDerived> &f, const symbolic::BaseExpr<LastTypeDerived> &l)
263
+ {
264
+ return seqN(f.derived(),(l.derived()-f.derived()+fix<1>()));
265
+ }
266
+
267
+
268
+ template<typename FirstType,typename LastType, typename IncrType>
269
+ typename internal::enable_if<!(symbolic::is_symbolic<FirstType>::value || symbolic::is_symbolic<LastType>::value),
270
+ ArithmeticSequence<typename internal::cleanup_index_type<FirstType>::type,Index,typename internal::cleanup_seq_incr<IncrType>::type> >::type
271
+ seq(FirstType f, LastType l, IncrType incr)
272
+ {
273
+ typedef typename internal::cleanup_seq_incr<IncrType>::type CleanedIncrType;
274
+ return seqN(typename internal::cleanup_index_type<FirstType>::type(f),
275
+ Index((typename internal::cleanup_index_type<LastType>::type(l)-typename internal::cleanup_index_type<FirstType>::type(f)+CleanedIncrType(incr))/CleanedIncrType(incr)), incr);
276
+ }
277
+
278
+ template<typename FirstTypeDerived,typename LastType, typename IncrType>
279
+ typename internal::enable_if<!symbolic::is_symbolic<LastType>::value,
280
+ ArithmeticSequence<FirstTypeDerived,
281
+ symbolic::QuotientExpr<symbolic::AddExpr<symbolic::AddExpr<symbolic::NegateExpr<FirstTypeDerived>,
282
+ symbolic::ValueExpr<> >,
283
+ symbolic::ValueExpr<typename internal::cleanup_seq_incr<IncrType>::type> >,
284
+ symbolic::ValueExpr<typename internal::cleanup_seq_incr<IncrType>::type> >,
285
+ typename internal::cleanup_seq_incr<IncrType>::type> >::type
286
+ seq(const symbolic::BaseExpr<FirstTypeDerived> &f, LastType l, IncrType incr)
287
+ {
288
+ typedef typename internal::cleanup_seq_incr<IncrType>::type CleanedIncrType;
289
+ return seqN(f.derived(),(typename internal::cleanup_index_type<LastType>::type(l)-f.derived()+CleanedIncrType(incr))/CleanedIncrType(incr), incr);
290
+ }
291
+
292
+ template<typename FirstType,typename LastTypeDerived, typename IncrType>
293
+ typename internal::enable_if<!symbolic::is_symbolic<FirstType>::value,
294
+ ArithmeticSequence<typename internal::cleanup_index_type<FirstType>::type,
295
+ symbolic::QuotientExpr<symbolic::AddExpr<symbolic::AddExpr<LastTypeDerived,symbolic::ValueExpr<> >,
296
+ symbolic::ValueExpr<typename internal::cleanup_seq_incr<IncrType>::type> >,
297
+ symbolic::ValueExpr<typename internal::cleanup_seq_incr<IncrType>::type> >,
298
+ typename internal::cleanup_seq_incr<IncrType>::type> >::type
299
+ seq(FirstType f, const symbolic::BaseExpr<LastTypeDerived> &l, IncrType incr)
300
+ {
301
+ typedef typename internal::cleanup_seq_incr<IncrType>::type CleanedIncrType;
302
+ return seqN(typename internal::cleanup_index_type<FirstType>::type(f),
303
+ (l.derived()-typename internal::cleanup_index_type<FirstType>::type(f)+CleanedIncrType(incr))/CleanedIncrType(incr), incr);
304
+ }
305
+
306
+ template<typename FirstTypeDerived,typename LastTypeDerived, typename IncrType>
307
+ ArithmeticSequence<FirstTypeDerived,
308
+ symbolic::QuotientExpr<symbolic::AddExpr<symbolic::AddExpr<LastTypeDerived,
309
+ symbolic::NegateExpr<FirstTypeDerived> >,
310
+ symbolic::ValueExpr<typename internal::cleanup_seq_incr<IncrType>::type> >,
311
+ symbolic::ValueExpr<typename internal::cleanup_seq_incr<IncrType>::type> >,
312
+ typename internal::cleanup_seq_incr<IncrType>::type>
313
+ seq(const symbolic::BaseExpr<FirstTypeDerived> &f, const symbolic::BaseExpr<LastTypeDerived> &l, IncrType incr)
314
+ {
315
+ typedef typename internal::cleanup_seq_incr<IncrType>::type CleanedIncrType;
316
+ return seqN(f.derived(),(l.derived()-f.derived()+CleanedIncrType(incr))/CleanedIncrType(incr), incr);
317
+ }
318
+ #endif // EIGEN_HAS_CXX11
319
+
320
+ #endif // EIGEN_PARSED_BY_DOXYGEN
321
+
322
+
323
+ #if EIGEN_HAS_CXX11 || defined(EIGEN_PARSED_BY_DOXYGEN)
324
+ /** \cpp11
325
+ * \returns a symbolic ArithmeticSequence representing the last \a size elements with increment \a incr.
326
+ *
327
+ * It is a shortcut for: \code seqN(last-(size-fix<1>)*incr, size, incr) \endcode
328
+ *
329
+ * \sa lastN(SizeType), seqN(FirstType,SizeType), seq(FirstType,LastType,IncrType) */
330
+ template<typename SizeType,typename IncrType>
331
+ auto lastN(SizeType size, IncrType incr)
332
+ -> decltype(seqN(Eigen::last-(size-fix<1>())*incr, size, incr))
333
+ {
334
+ return seqN(Eigen::last-(size-fix<1>())*incr, size, incr);
335
+ }
336
+
337
+ /** \cpp11
338
+ * \returns a symbolic ArithmeticSequence representing the last \a size elements with a unit increment.
339
+ *
340
+ * It is a shortcut for: \code seq(last+fix<1>-size, last) \endcode
341
+ *
342
+ * \sa lastN(SizeType,IncrType, seqN(FirstType,SizeType), seq(FirstType,LastType) */
343
+ template<typename SizeType>
344
+ auto lastN(SizeType size)
345
+ -> decltype(seqN(Eigen::last+fix<1>()-size, size))
346
+ {
347
+ return seqN(Eigen::last+fix<1>()-size, size);
348
+ }
349
+ #endif
350
+
351
+ namespace internal {
352
+
353
+ // Convert a symbolic span into a usable one (i.e., remove last/end "keywords")
354
+ template<typename T>
355
+ struct make_size_type {
356
+ typedef typename internal::conditional<symbolic::is_symbolic<T>::value, Index, T>::type type;
357
+ };
358
+
359
+ template<typename FirstType,typename SizeType,typename IncrType,int XprSize>
360
+ struct IndexedViewCompatibleType<ArithmeticSequence<FirstType,SizeType,IncrType>, XprSize> {
361
+ typedef ArithmeticSequence<Index,typename make_size_type<SizeType>::type,IncrType> type;
362
+ };
363
+
364
+ template<typename FirstType,typename SizeType,typename IncrType>
365
+ ArithmeticSequence<Index,typename make_size_type<SizeType>::type,IncrType>
366
+ makeIndexedViewCompatible(const ArithmeticSequence<FirstType,SizeType,IncrType>& ids, Index size,SpecializedType) {
367
+ return ArithmeticSequence<Index,typename make_size_type<SizeType>::type,IncrType>(
368
+ eval_expr_given_size(ids.firstObject(),size),eval_expr_given_size(ids.sizeObject(),size),ids.incrObject());
369
+ }
370
+
371
+ template<typename FirstType,typename SizeType,typename IncrType>
372
+ struct get_compile_time_incr<ArithmeticSequence<FirstType,SizeType,IncrType> > {
373
+ enum { value = get_fixed_value<IncrType,DynamicIndex>::value };
374
+ };
375
+
376
+ } // end namespace internal
377
+
378
+ /** \namespace Eigen::indexing
379
+ * \ingroup Core_Module
380
+ *
381
+ * The sole purpose of this namespace is to be able to import all functions
382
+ * and symbols that are expected to be used within operator() for indexing
383
+ * and slicing. If you already imported the whole Eigen namespace:
384
+ * \code using namespace Eigen; \endcode
385
+ * then you are already all set. Otherwise, if you don't want/cannot import
386
+ * the whole Eigen namespace, the following line:
387
+ * \code using namespace Eigen::indexing; \endcode
388
+ * is equivalent to:
389
+ * \code
390
+ using Eigen::all;
391
+ using Eigen::seq;
392
+ using Eigen::seqN;
393
+ using Eigen::lastN; // c++11 only
394
+ using Eigen::last;
395
+ using Eigen::lastp1;
396
+ using Eigen::fix;
397
+ \endcode
398
+ */
399
+ namespace indexing {
400
+ using Eigen::all;
401
+ using Eigen::seq;
402
+ using Eigen::seqN;
403
+ #if EIGEN_HAS_CXX11
404
+ using Eigen::lastN;
405
+ #endif
406
+ using Eigen::last;
407
+ using Eigen::lastp1;
408
+ using Eigen::fix;
409
+ }
410
+
411
+ } // end namespace Eigen
412
+
413
+ #endif // EIGEN_ARITHMETIC_SEQUENCE_H
@@ -117,7 +117,7 @@ class Array
117
117
  {
118
118
  return Base::_set(other);
119
119
  }
120
-
120
+
121
121
  /** Default constructor.
122
122
  *
123
123
  * For fixed-size matrices, does nothing.
@@ -157,11 +157,50 @@ class Array
157
157
  EIGEN_DEVICE_FUNC
158
158
  Array& operator=(Array&& other) EIGEN_NOEXCEPT_IF(std::is_nothrow_move_assignable<Scalar>::value)
159
159
  {
160
- other.swap(*this);
160
+ Base::operator=(std::move(other));
161
161
  return *this;
162
162
  }
163
163
  #endif
164
164
 
165
+ #if EIGEN_HAS_CXX11
166
+ /** \copydoc PlainObjectBase(const Scalar& a0, const Scalar& a1, const Scalar& a2, const Scalar& a3, const ArgTypes&... args)
167
+ *
168
+ * Example: \include Array_variadic_ctor_cxx11.cpp
169
+ * Output: \verbinclude Array_variadic_ctor_cxx11.out
170
+ *
171
+ * \sa Array(const std::initializer_list<std::initializer_list<Scalar>>&)
172
+ * \sa Array(const Scalar&), Array(const Scalar&,const Scalar&)
173
+ */
174
+ template <typename... ArgTypes>
175
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
176
+ Array(const Scalar& a0, const Scalar& a1, const Scalar& a2, const Scalar& a3, const ArgTypes&... args)
177
+ : Base(a0, a1, a2, a3, args...) {}
178
+
179
+ /** \brief Constructs an array and initializes it from the coefficients given as initializer-lists grouped by row. \cpp11
180
+ *
181
+ * In the general case, the constructor takes a list of rows, each row being represented as a list of coefficients:
182
+ *
183
+ * Example: \include Array_initializer_list_23_cxx11.cpp
184
+ * Output: \verbinclude Array_initializer_list_23_cxx11.out
185
+ *
186
+ * Each of the inner initializer lists must contain the exact same number of elements, otherwise an assertion is triggered.
187
+ *
188
+ * In the case of a compile-time column 1D array, implicit transposition from a single row is allowed.
189
+ * Therefore <code> Array<int,Dynamic,1>{{1,2,3,4,5}}</code> is legal and the more verbose syntax
190
+ * <code>Array<int,Dynamic,1>{{1},{2},{3},{4},{5}}</code> can be avoided:
191
+ *
192
+ * Example: \include Array_initializer_list_vector_cxx11.cpp
193
+ * Output: \verbinclude Array_initializer_list_vector_cxx11.out
194
+ *
195
+ * In the case of fixed-sized arrays, the initializer list sizes must exactly match the array sizes,
196
+ * and implicit transposition is allowed for compile-time 1D arrays only.
197
+ *
198
+ * \sa Array(const Scalar& a0, const Scalar& a1, const Scalar& a2, const Scalar& a3, const ArgTypes&... args)
199
+ */
200
+ EIGEN_DEVICE_FUNC
201
+ EIGEN_STRONG_INLINE Array(const std::initializer_list<std::initializer_list<Scalar>>& list) : Base(list) {}
202
+ #endif // end EIGEN_HAS_CXX11
203
+
165
204
  #ifndef EIGEN_PARSED_BY_DOXYGEN
166
205
  template<typename T>
167
206
  EIGEN_DEVICE_FUNC
@@ -178,6 +217,7 @@ class Array
178
217
  Base::_check_template_params();
179
218
  this->template _init2<T0,T1>(val0, val1);
180
219
  }
220
+
181
221
  #else
182
222
  /** \brief Constructs a fixed-sized array initialized with coefficients starting at \a data */
183
223
  EIGEN_DEVICE_FUNC explicit Array(const Scalar *data);
@@ -189,7 +229,8 @@ class Array
189
229
  */
190
230
  EIGEN_DEVICE_FUNC
191
231
  EIGEN_STRONG_INLINE explicit Array(Index dim);
192
- /** constructs an initialized 1x1 Array with the given coefficient */
232
+ /** constructs an initialized 1x1 Array with the given coefficient
233
+ * \sa const Scalar& a0, const Scalar& a1, const Scalar& a2, const Scalar& a3, const ArgTypes&... args */
193
234
  Array(const Scalar& value);
194
235
  /** constructs an uninitialized array with \a rows rows and \a cols columns.
195
236
  *
@@ -197,11 +238,14 @@ class Array
197
238
  * it is redundant to pass these parameters, so one should use the default constructor
198
239
  * Array() instead. */
199
240
  Array(Index rows, Index cols);
200
- /** constructs an initialized 2D vector with given coefficients */
241
+ /** constructs an initialized 2D vector with given coefficients
242
+ * \sa Array(const Scalar& a0, const Scalar& a1, const Scalar& a2, const Scalar& a3, const ArgTypes&... args) */
201
243
  Array(const Scalar& val0, const Scalar& val1);
202
- #endif
244
+ #endif // end EIGEN_PARSED_BY_DOXYGEN
203
245
 
204
- /** constructs an initialized 3D vector with given coefficients */
246
+ /** constructs an initialized 3D vector with given coefficients
247
+ * \sa Array(const Scalar& a0, const Scalar& a1, const Scalar& a2, const Scalar& a3, const ArgTypes&... args)
248
+ */
205
249
  EIGEN_DEVICE_FUNC
206
250
  EIGEN_STRONG_INLINE Array(const Scalar& val0, const Scalar& val1, const Scalar& val2)
207
251
  {
@@ -211,7 +255,9 @@ class Array
211
255
  m_storage.data()[1] = val1;
212
256
  m_storage.data()[2] = val2;
213
257
  }
214
- /** constructs an initialized 4D vector with given coefficients */
258
+ /** constructs an initialized 4D vector with given coefficients
259
+ * \sa Array(const Scalar& a0, const Scalar& a1, const Scalar& a2, const Scalar& a3, const ArgTypes&... args)
260
+ */
215
261
  EIGEN_DEVICE_FUNC
216
262
  EIGEN_STRONG_INLINE Array(const Scalar& val0, const Scalar& val1, const Scalar& val2, const Scalar& val3)
217
263
  {
@@ -242,8 +288,10 @@ class Array
242
288
  : Base(other.derived())
243
289
  { }
244
290
 
245
- EIGEN_DEVICE_FUNC inline Index innerStride() const { return 1; }
246
- EIGEN_DEVICE_FUNC inline Index outerStride() const { return this->innerSize(); }
291
+ EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
292
+ inline Index innerStride() const EIGEN_NOEXCEPT{ return 1; }
293
+ EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
294
+ inline Index outerStride() const EIGEN_NOEXCEPT { return this->innerSize(); }
247
295
 
248
296
  #ifdef EIGEN_ARRAY_PLUGIN
249
297
  #include EIGEN_ARRAY_PLUGIN
@@ -258,7 +306,7 @@ class Array
258
306
  /** \defgroup arraytypedefs Global array typedefs
259
307
  * \ingroup Core_Module
260
308
  *
261
- * Eigen defines several typedef shortcuts for most common 1D and 2D array types.
309
+ * %Eigen defines several typedef shortcuts for most common 1D and 2D array types.
262
310
  *
263
311
  * The general patterns are the following:
264
312
  *
@@ -271,6 +319,12 @@ class Array
271
319
  * There are also \c ArraySizeType which are self-explanatory. For example, \c Array4cf is
272
320
  * a fixed-size 1D array of 4 complex floats.
273
321
  *
322
+ * With \cpp11, template alias are also defined for common sizes.
323
+ * They follow the same pattern as above except that the scalar type suffix is replaced by a
324
+ * template parameter, i.e.:
325
+ * - `ArrayRowsCols<Type>` where `Rows` and `Cols` can be \c 2,\c 3,\c 4, or \c X for fixed or dynamic size.
326
+ * - `ArraySize<Type>` where `Size` can be \c 2,\c 3,\c 4 or \c X for fixed or dynamic size 1D arrays.
327
+ *
274
328
  * \sa class Array
275
329
  */
276
330
 
@@ -303,8 +357,42 @@ EIGEN_MAKE_ARRAY_TYPEDEFS_ALL_SIZES(std::complex<double>, cd)
303
357
 
304
358
  #undef EIGEN_MAKE_ARRAY_TYPEDEFS_ALL_SIZES
305
359
  #undef EIGEN_MAKE_ARRAY_TYPEDEFS
360
+ #undef EIGEN_MAKE_ARRAY_FIXED_TYPEDEFS
361
+
362
+ #if EIGEN_HAS_CXX11
363
+
364
+ #define EIGEN_MAKE_ARRAY_TYPEDEFS(Size, SizeSuffix) \
365
+ /** \ingroup arraytypedefs */ \
366
+ /** \brief \cpp11 */ \
367
+ template <typename Type> \
368
+ using Array##SizeSuffix##SizeSuffix = Array<Type, Size, Size>; \
369
+ /** \ingroup arraytypedefs */ \
370
+ /** \brief \cpp11 */ \
371
+ template <typename Type> \
372
+ using Array##SizeSuffix = Array<Type, Size, 1>;
373
+
374
+ #define EIGEN_MAKE_ARRAY_FIXED_TYPEDEFS(Size) \
375
+ /** \ingroup arraytypedefs */ \
376
+ /** \brief \cpp11 */ \
377
+ template <typename Type> \
378
+ using Array##Size##X = Array<Type, Size, Dynamic>; \
379
+ /** \ingroup arraytypedefs */ \
380
+ /** \brief \cpp11 */ \
381
+ template <typename Type> \
382
+ using Array##X##Size = Array<Type, Dynamic, Size>;
383
+
384
+ EIGEN_MAKE_ARRAY_TYPEDEFS(2, 2)
385
+ EIGEN_MAKE_ARRAY_TYPEDEFS(3, 3)
386
+ EIGEN_MAKE_ARRAY_TYPEDEFS(4, 4)
387
+ EIGEN_MAKE_ARRAY_TYPEDEFS(Dynamic, X)
388
+ EIGEN_MAKE_ARRAY_FIXED_TYPEDEFS(2)
389
+ EIGEN_MAKE_ARRAY_FIXED_TYPEDEFS(3)
390
+ EIGEN_MAKE_ARRAY_FIXED_TYPEDEFS(4)
391
+
392
+ #undef EIGEN_MAKE_ARRAY_TYPEDEFS
393
+ #undef EIGEN_MAKE_ARRAY_FIXED_TYPEDEFS
306
394
 
307
- #undef EIGEN_MAKE_ARRAY_TYPEDEFS_LARGE
395
+ #endif // EIGEN_HAS_CXX11
308
396
 
309
397
  #define EIGEN_USING_ARRAY_TYPEDEFS_FOR_TYPE_AND_SIZE(TypeSuffix, SizeSuffix) \
310
398
  using Eigen::Matrix##SizeSuffix##TypeSuffix; \
@@ -69,6 +69,7 @@ template<typename Derived> class ArrayBase
69
69
  using Base::coeff;
70
70
  using Base::coeffRef;
71
71
  using Base::lazyAssign;
72
+ using Base::operator-;
72
73
  using Base::operator=;
73
74
  using Base::operator+=;
74
75
  using Base::operator-=;
@@ -88,7 +89,6 @@ template<typename Derived> class ArrayBase
88
89
 
89
90
  #define EIGEN_CURRENT_STORAGE_BASE_CLASS Eigen::ArrayBase
90
91
  #define EIGEN_DOC_UNARY_ADDONS(X,Y)
91
- # include "../plugins/CommonCwiseUnaryOps.h"
92
92
  # include "../plugins/MatrixCwiseUnaryOps.h"
93
93
  # include "../plugins/ArrayCwiseUnaryOps.h"
94
94
  # include "../plugins/CommonCwiseBinaryOps.h"