@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,454 @@
1
+ // This file is part of Eigen, a lightweight C++ template library
2
+ // for linear algebra.
3
+ //
4
+ // Copyright (C) 2008-2017 Gael Guennebaud <gael.guennebaud@inria.fr>
5
+ // Copyright (C) 2014 yoco <peter.xiau@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_RESHAPED_H
12
+ #define EIGEN_RESHAPED_H
13
+
14
+ namespace Eigen {
15
+
16
+ /** \class Reshaped
17
+ * \ingroup Core_Module
18
+ *
19
+ * \brief Expression of a fixed-size or dynamic-size reshape
20
+ *
21
+ * \tparam XprType the type of the expression in which we are taking a reshape
22
+ * \tparam Rows the number of rows of the reshape we are taking at compile time (optional)
23
+ * \tparam Cols the number of columns of the reshape we are taking at compile time (optional)
24
+ * \tparam Order can be ColMajor or RowMajor, default is ColMajor.
25
+ *
26
+ * This class represents an expression of either a fixed-size or dynamic-size reshape.
27
+ * It is the return type of DenseBase::reshaped(NRowsType,NColsType) and
28
+ * most of the time this is the only way it is used.
29
+ *
30
+ * However, in C++98, if you want to directly maniputate reshaped expressions,
31
+ * for instance if you want to write a function returning such an expression, you
32
+ * will need to use this class. In C++11, it is advised to use the \em auto
33
+ * keyword for such use cases.
34
+ *
35
+ * Here is an example illustrating the dynamic case:
36
+ * \include class_Reshaped.cpp
37
+ * Output: \verbinclude class_Reshaped.out
38
+ *
39
+ * Here is an example illustrating the fixed-size case:
40
+ * \include class_FixedReshaped.cpp
41
+ * Output: \verbinclude class_FixedReshaped.out
42
+ *
43
+ * \sa DenseBase::reshaped(NRowsType,NColsType)
44
+ */
45
+
46
+ namespace internal {
47
+
48
+ template<typename XprType, int Rows, int Cols, int Order>
49
+ struct traits<Reshaped<XprType, Rows, Cols, Order> > : traits<XprType>
50
+ {
51
+ typedef typename traits<XprType>::Scalar Scalar;
52
+ typedef typename traits<XprType>::StorageKind StorageKind;
53
+ typedef typename traits<XprType>::XprKind XprKind;
54
+ enum{
55
+ MatrixRows = traits<XprType>::RowsAtCompileTime,
56
+ MatrixCols = traits<XprType>::ColsAtCompileTime,
57
+ RowsAtCompileTime = Rows,
58
+ ColsAtCompileTime = Cols,
59
+ MaxRowsAtCompileTime = Rows,
60
+ MaxColsAtCompileTime = Cols,
61
+ XpxStorageOrder = ((int(traits<XprType>::Flags) & RowMajorBit) == RowMajorBit) ? RowMajor : ColMajor,
62
+ ReshapedStorageOrder = (RowsAtCompileTime == 1 && ColsAtCompileTime != 1) ? RowMajor
63
+ : (ColsAtCompileTime == 1 && RowsAtCompileTime != 1) ? ColMajor
64
+ : XpxStorageOrder,
65
+ HasSameStorageOrderAsXprType = (ReshapedStorageOrder == XpxStorageOrder),
66
+ InnerSize = (ReshapedStorageOrder==int(RowMajor)) ? int(ColsAtCompileTime) : int(RowsAtCompileTime),
67
+ InnerStrideAtCompileTime = HasSameStorageOrderAsXprType
68
+ ? int(inner_stride_at_compile_time<XprType>::ret)
69
+ : Dynamic,
70
+ OuterStrideAtCompileTime = Dynamic,
71
+
72
+ HasDirectAccess = internal::has_direct_access<XprType>::ret
73
+ && (Order==int(XpxStorageOrder))
74
+ && ((evaluator<XprType>::Flags&LinearAccessBit)==LinearAccessBit),
75
+
76
+ MaskPacketAccessBit = (InnerSize == Dynamic || (InnerSize % packet_traits<Scalar>::size) == 0)
77
+ && (InnerStrideAtCompileTime == 1)
78
+ ? PacketAccessBit : 0,
79
+ //MaskAlignedBit = ((OuterStrideAtCompileTime!=Dynamic) && (((OuterStrideAtCompileTime * int(sizeof(Scalar))) % 16) == 0)) ? AlignedBit : 0,
80
+ FlagsLinearAccessBit = (RowsAtCompileTime == 1 || ColsAtCompileTime == 1) ? LinearAccessBit : 0,
81
+ FlagsLvalueBit = is_lvalue<XprType>::value ? LvalueBit : 0,
82
+ FlagsRowMajorBit = (ReshapedStorageOrder==int(RowMajor)) ? RowMajorBit : 0,
83
+ FlagsDirectAccessBit = HasDirectAccess ? DirectAccessBit : 0,
84
+ Flags0 = traits<XprType>::Flags & ( (HereditaryBits & ~RowMajorBit) | MaskPacketAccessBit),
85
+
86
+ Flags = (Flags0 | FlagsLinearAccessBit | FlagsLvalueBit | FlagsRowMajorBit | FlagsDirectAccessBit)
87
+ };
88
+ };
89
+
90
+ template<typename XprType, int Rows, int Cols, int Order, bool HasDirectAccess> class ReshapedImpl_dense;
91
+
92
+ } // end namespace internal
93
+
94
+ template<typename XprType, int Rows, int Cols, int Order, typename StorageKind> class ReshapedImpl;
95
+
96
+ template<typename XprType, int Rows, int Cols, int Order> class Reshaped
97
+ : public ReshapedImpl<XprType, Rows, Cols, Order, typename internal::traits<XprType>::StorageKind>
98
+ {
99
+ typedef ReshapedImpl<XprType, Rows, Cols, Order, typename internal::traits<XprType>::StorageKind> Impl;
100
+ public:
101
+ //typedef typename Impl::Base Base;
102
+ typedef Impl Base;
103
+ EIGEN_GENERIC_PUBLIC_INTERFACE(Reshaped)
104
+ EIGEN_INHERIT_ASSIGNMENT_OPERATORS(Reshaped)
105
+
106
+ /** Fixed-size constructor
107
+ */
108
+ EIGEN_DEVICE_FUNC
109
+ inline Reshaped(XprType& xpr)
110
+ : Impl(xpr)
111
+ {
112
+ EIGEN_STATIC_ASSERT(RowsAtCompileTime!=Dynamic && ColsAtCompileTime!=Dynamic,THIS_METHOD_IS_ONLY_FOR_FIXED_SIZE)
113
+ eigen_assert(Rows * Cols == xpr.rows() * xpr.cols());
114
+ }
115
+
116
+ /** Dynamic-size constructor
117
+ */
118
+ EIGEN_DEVICE_FUNC
119
+ inline Reshaped(XprType& xpr,
120
+ Index reshapeRows, Index reshapeCols)
121
+ : Impl(xpr, reshapeRows, reshapeCols)
122
+ {
123
+ eigen_assert((RowsAtCompileTime==Dynamic || RowsAtCompileTime==reshapeRows)
124
+ && (ColsAtCompileTime==Dynamic || ColsAtCompileTime==reshapeCols));
125
+ eigen_assert(reshapeRows * reshapeCols == xpr.rows() * xpr.cols());
126
+ }
127
+ };
128
+
129
+ // The generic default implementation for dense reshape simply forward to the internal::ReshapedImpl_dense
130
+ // that must be specialized for direct and non-direct access...
131
+ template<typename XprType, int Rows, int Cols, int Order>
132
+ class ReshapedImpl<XprType, Rows, Cols, Order, Dense>
133
+ : public internal::ReshapedImpl_dense<XprType, Rows, Cols, Order,internal::traits<Reshaped<XprType,Rows,Cols,Order> >::HasDirectAccess>
134
+ {
135
+ typedef internal::ReshapedImpl_dense<XprType, Rows, Cols, Order,internal::traits<Reshaped<XprType,Rows,Cols,Order> >::HasDirectAccess> Impl;
136
+ public:
137
+ typedef Impl Base;
138
+ EIGEN_INHERIT_ASSIGNMENT_OPERATORS(ReshapedImpl)
139
+ EIGEN_DEVICE_FUNC inline ReshapedImpl(XprType& xpr) : Impl(xpr) {}
140
+ EIGEN_DEVICE_FUNC inline ReshapedImpl(XprType& xpr, Index reshapeRows, Index reshapeCols)
141
+ : Impl(xpr, reshapeRows, reshapeCols) {}
142
+ };
143
+
144
+ namespace internal {
145
+
146
+ /** \internal Internal implementation of dense Reshaped in the general case. */
147
+ template<typename XprType, int Rows, int Cols, int Order>
148
+ class ReshapedImpl_dense<XprType,Rows,Cols,Order,false>
149
+ : public internal::dense_xpr_base<Reshaped<XprType, Rows, Cols, Order> >::type
150
+ {
151
+ typedef Reshaped<XprType, Rows, Cols, Order> ReshapedType;
152
+ public:
153
+
154
+ typedef typename internal::dense_xpr_base<ReshapedType>::type Base;
155
+ EIGEN_DENSE_PUBLIC_INTERFACE(ReshapedType)
156
+ EIGEN_INHERIT_ASSIGNMENT_OPERATORS(ReshapedImpl_dense)
157
+
158
+ typedef typename internal::ref_selector<XprType>::non_const_type MatrixTypeNested;
159
+ typedef typename internal::remove_all<XprType>::type NestedExpression;
160
+
161
+ class InnerIterator;
162
+
163
+ /** Fixed-size constructor
164
+ */
165
+ EIGEN_DEVICE_FUNC
166
+ inline ReshapedImpl_dense(XprType& xpr)
167
+ : m_xpr(xpr), m_rows(Rows), m_cols(Cols)
168
+ {}
169
+
170
+ /** Dynamic-size constructor
171
+ */
172
+ EIGEN_DEVICE_FUNC
173
+ inline ReshapedImpl_dense(XprType& xpr, Index nRows, Index nCols)
174
+ : m_xpr(xpr), m_rows(nRows), m_cols(nCols)
175
+ {}
176
+
177
+ EIGEN_DEVICE_FUNC Index rows() const { return m_rows; }
178
+ EIGEN_DEVICE_FUNC Index cols() const { return m_cols; }
179
+
180
+ #ifdef EIGEN_PARSED_BY_DOXYGEN
181
+ /** \sa MapBase::data() */
182
+ EIGEN_DEVICE_FUNC inline const Scalar* data() const;
183
+ EIGEN_DEVICE_FUNC inline Index innerStride() const;
184
+ EIGEN_DEVICE_FUNC inline Index outerStride() const;
185
+ #endif
186
+
187
+ /** \returns the nested expression */
188
+ EIGEN_DEVICE_FUNC
189
+ const typename internal::remove_all<XprType>::type&
190
+ nestedExpression() const { return m_xpr; }
191
+
192
+ /** \returns the nested expression */
193
+ EIGEN_DEVICE_FUNC
194
+ typename internal::remove_reference<XprType>::type&
195
+ nestedExpression() { return m_xpr; }
196
+
197
+ protected:
198
+
199
+ MatrixTypeNested m_xpr;
200
+ const internal::variable_if_dynamic<Index, Rows> m_rows;
201
+ const internal::variable_if_dynamic<Index, Cols> m_cols;
202
+ };
203
+
204
+
205
+ /** \internal Internal implementation of dense Reshaped in the direct access case. */
206
+ template<typename XprType, int Rows, int Cols, int Order>
207
+ class ReshapedImpl_dense<XprType, Rows, Cols, Order, true>
208
+ : public MapBase<Reshaped<XprType, Rows, Cols, Order> >
209
+ {
210
+ typedef Reshaped<XprType, Rows, Cols, Order> ReshapedType;
211
+ typedef typename internal::ref_selector<XprType>::non_const_type XprTypeNested;
212
+ public:
213
+
214
+ typedef MapBase<ReshapedType> Base;
215
+ EIGEN_DENSE_PUBLIC_INTERFACE(ReshapedType)
216
+ EIGEN_INHERIT_ASSIGNMENT_OPERATORS(ReshapedImpl_dense)
217
+
218
+ /** Fixed-size constructor
219
+ */
220
+ EIGEN_DEVICE_FUNC
221
+ inline ReshapedImpl_dense(XprType& xpr)
222
+ : Base(xpr.data()), m_xpr(xpr)
223
+ {}
224
+
225
+ /** Dynamic-size constructor
226
+ */
227
+ EIGEN_DEVICE_FUNC
228
+ inline ReshapedImpl_dense(XprType& xpr, Index nRows, Index nCols)
229
+ : Base(xpr.data(), nRows, nCols),
230
+ m_xpr(xpr)
231
+ {}
232
+
233
+ EIGEN_DEVICE_FUNC
234
+ const typename internal::remove_all<XprTypeNested>::type& nestedExpression() const
235
+ {
236
+ return m_xpr;
237
+ }
238
+
239
+ EIGEN_DEVICE_FUNC
240
+ XprType& nestedExpression() { return m_xpr; }
241
+
242
+ /** \sa MapBase::innerStride() */
243
+ EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
244
+ inline Index innerStride() const
245
+ {
246
+ return m_xpr.innerStride();
247
+ }
248
+
249
+ /** \sa MapBase::outerStride() */
250
+ EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
251
+ inline Index outerStride() const
252
+ {
253
+ return ((Flags&RowMajorBit)==RowMajorBit) ? this->cols() : this->rows();
254
+ }
255
+
256
+ protected:
257
+
258
+ XprTypeNested m_xpr;
259
+ };
260
+
261
+ // Evaluators
262
+ template<typename ArgType, int Rows, int Cols, int Order, bool HasDirectAccess> struct reshaped_evaluator;
263
+
264
+ template<typename ArgType, int Rows, int Cols, int Order>
265
+ struct evaluator<Reshaped<ArgType, Rows, Cols, Order> >
266
+ : reshaped_evaluator<ArgType, Rows, Cols, Order, traits<Reshaped<ArgType,Rows,Cols,Order> >::HasDirectAccess>
267
+ {
268
+ typedef Reshaped<ArgType, Rows, Cols, Order> XprType;
269
+ typedef typename XprType::Scalar Scalar;
270
+ // TODO: should check for smaller packet types
271
+ typedef typename packet_traits<Scalar>::type PacketScalar;
272
+
273
+ enum {
274
+ CoeffReadCost = evaluator<ArgType>::CoeffReadCost,
275
+ HasDirectAccess = traits<XprType>::HasDirectAccess,
276
+
277
+ // RowsAtCompileTime = traits<XprType>::RowsAtCompileTime,
278
+ // ColsAtCompileTime = traits<XprType>::ColsAtCompileTime,
279
+ // MaxRowsAtCompileTime = traits<XprType>::MaxRowsAtCompileTime,
280
+ // MaxColsAtCompileTime = traits<XprType>::MaxColsAtCompileTime,
281
+ //
282
+ // InnerStrideAtCompileTime = traits<XprType>::HasSameStorageOrderAsXprType
283
+ // ? int(inner_stride_at_compile_time<ArgType>::ret)
284
+ // : Dynamic,
285
+ // OuterStrideAtCompileTime = Dynamic,
286
+
287
+ FlagsLinearAccessBit = (traits<XprType>::RowsAtCompileTime == 1 || traits<XprType>::ColsAtCompileTime == 1 || HasDirectAccess) ? LinearAccessBit : 0,
288
+ FlagsRowMajorBit = (traits<XprType>::ReshapedStorageOrder==int(RowMajor)) ? RowMajorBit : 0,
289
+ FlagsDirectAccessBit = HasDirectAccess ? DirectAccessBit : 0,
290
+ Flags0 = evaluator<ArgType>::Flags & (HereditaryBits & ~RowMajorBit),
291
+ Flags = Flags0 | FlagsLinearAccessBit | FlagsRowMajorBit | FlagsDirectAccessBit,
292
+
293
+ PacketAlignment = unpacket_traits<PacketScalar>::alignment,
294
+ Alignment = evaluator<ArgType>::Alignment
295
+ };
296
+ typedef reshaped_evaluator<ArgType, Rows, Cols, Order, HasDirectAccess> reshaped_evaluator_type;
297
+ EIGEN_DEVICE_FUNC explicit evaluator(const XprType& xpr) : reshaped_evaluator_type(xpr)
298
+ {
299
+ EIGEN_INTERNAL_CHECK_COST_VALUE(CoeffReadCost);
300
+ }
301
+ };
302
+
303
+ template<typename ArgType, int Rows, int Cols, int Order>
304
+ struct reshaped_evaluator<ArgType, Rows, Cols, Order, /* HasDirectAccess */ false>
305
+ : evaluator_base<Reshaped<ArgType, Rows, Cols, Order> >
306
+ {
307
+ typedef Reshaped<ArgType, Rows, Cols, Order> XprType;
308
+
309
+ enum {
310
+ CoeffReadCost = evaluator<ArgType>::CoeffReadCost /* TODO + cost of index computations */,
311
+
312
+ Flags = (evaluator<ArgType>::Flags & (HereditaryBits /*| LinearAccessBit | DirectAccessBit*/)),
313
+
314
+ Alignment = 0
315
+ };
316
+
317
+ EIGEN_DEVICE_FUNC explicit reshaped_evaluator(const XprType& xpr) : m_argImpl(xpr.nestedExpression()), m_xpr(xpr)
318
+ {
319
+ EIGEN_INTERNAL_CHECK_COST_VALUE(CoeffReadCost);
320
+ }
321
+
322
+ typedef typename XprType::Scalar Scalar;
323
+ typedef typename XprType::CoeffReturnType CoeffReturnType;
324
+
325
+ typedef std::pair<Index, Index> RowCol;
326
+
327
+ inline RowCol index_remap(Index rowId, Index colId) const
328
+ {
329
+ if(Order==ColMajor)
330
+ {
331
+ const Index nth_elem_idx = colId * m_xpr.rows() + rowId;
332
+ return RowCol(nth_elem_idx % m_xpr.nestedExpression().rows(),
333
+ nth_elem_idx / m_xpr.nestedExpression().rows());
334
+ }
335
+ else
336
+ {
337
+ const Index nth_elem_idx = colId + rowId * m_xpr.cols();
338
+ return RowCol(nth_elem_idx / m_xpr.nestedExpression().cols(),
339
+ nth_elem_idx % m_xpr.nestedExpression().cols());
340
+ }
341
+ }
342
+
343
+ EIGEN_DEVICE_FUNC
344
+ inline Scalar& coeffRef(Index rowId, Index colId)
345
+ {
346
+ EIGEN_STATIC_ASSERT_LVALUE(XprType)
347
+ const RowCol row_col = index_remap(rowId, colId);
348
+ return m_argImpl.coeffRef(row_col.first, row_col.second);
349
+ }
350
+
351
+ EIGEN_DEVICE_FUNC
352
+ inline const Scalar& coeffRef(Index rowId, Index colId) const
353
+ {
354
+ const RowCol row_col = index_remap(rowId, colId);
355
+ return m_argImpl.coeffRef(row_col.first, row_col.second);
356
+ }
357
+
358
+ EIGEN_DEVICE_FUNC
359
+ EIGEN_STRONG_INLINE const CoeffReturnType coeff(Index rowId, Index colId) const
360
+ {
361
+ const RowCol row_col = index_remap(rowId, colId);
362
+ return m_argImpl.coeff(row_col.first, row_col.second);
363
+ }
364
+
365
+ EIGEN_DEVICE_FUNC
366
+ inline Scalar& coeffRef(Index index)
367
+ {
368
+ EIGEN_STATIC_ASSERT_LVALUE(XprType)
369
+ const RowCol row_col = index_remap(Rows == 1 ? 0 : index,
370
+ Rows == 1 ? index : 0);
371
+ return m_argImpl.coeffRef(row_col.first, row_col.second);
372
+
373
+ }
374
+
375
+ EIGEN_DEVICE_FUNC
376
+ inline const Scalar& coeffRef(Index index) const
377
+ {
378
+ const RowCol row_col = index_remap(Rows == 1 ? 0 : index,
379
+ Rows == 1 ? index : 0);
380
+ return m_argImpl.coeffRef(row_col.first, row_col.second);
381
+ }
382
+
383
+ EIGEN_DEVICE_FUNC
384
+ inline const CoeffReturnType coeff(Index index) const
385
+ {
386
+ const RowCol row_col = index_remap(Rows == 1 ? 0 : index,
387
+ Rows == 1 ? index : 0);
388
+ return m_argImpl.coeff(row_col.first, row_col.second);
389
+ }
390
+ #if 0
391
+ EIGEN_DEVICE_FUNC
392
+ template<int LoadMode>
393
+ inline PacketScalar packet(Index rowId, Index colId) const
394
+ {
395
+ const RowCol row_col = index_remap(rowId, colId);
396
+ return m_argImpl.template packet<Unaligned>(row_col.first, row_col.second);
397
+
398
+ }
399
+
400
+ template<int LoadMode>
401
+ EIGEN_DEVICE_FUNC
402
+ inline void writePacket(Index rowId, Index colId, const PacketScalar& val)
403
+ {
404
+ const RowCol row_col = index_remap(rowId, colId);
405
+ m_argImpl.const_cast_derived().template writePacket<Unaligned>
406
+ (row_col.first, row_col.second, val);
407
+ }
408
+
409
+ template<int LoadMode>
410
+ EIGEN_DEVICE_FUNC
411
+ inline PacketScalar packet(Index index) const
412
+ {
413
+ const RowCol row_col = index_remap(RowsAtCompileTime == 1 ? 0 : index,
414
+ RowsAtCompileTime == 1 ? index : 0);
415
+ return m_argImpl.template packet<Unaligned>(row_col.first, row_col.second);
416
+ }
417
+
418
+ template<int LoadMode>
419
+ EIGEN_DEVICE_FUNC
420
+ inline void writePacket(Index index, const PacketScalar& val)
421
+ {
422
+ const RowCol row_col = index_remap(RowsAtCompileTime == 1 ? 0 : index,
423
+ RowsAtCompileTime == 1 ? index : 0);
424
+ return m_argImpl.template packet<Unaligned>(row_col.first, row_col.second, val);
425
+ }
426
+ #endif
427
+ protected:
428
+
429
+ evaluator<ArgType> m_argImpl;
430
+ const XprType& m_xpr;
431
+
432
+ };
433
+
434
+ template<typename ArgType, int Rows, int Cols, int Order>
435
+ struct reshaped_evaluator<ArgType, Rows, Cols, Order, /* HasDirectAccess */ true>
436
+ : mapbase_evaluator<Reshaped<ArgType, Rows, Cols, Order>,
437
+ typename Reshaped<ArgType, Rows, Cols, Order>::PlainObject>
438
+ {
439
+ typedef Reshaped<ArgType, Rows, Cols, Order> XprType;
440
+ typedef typename XprType::Scalar Scalar;
441
+
442
+ EIGEN_DEVICE_FUNC explicit reshaped_evaluator(const XprType& xpr)
443
+ : mapbase_evaluator<XprType, typename XprType::PlainObject>(xpr)
444
+ {
445
+ // TODO: for the 3.4 release, this should be turned to an internal assertion, but let's keep it as is for the beta lifetime
446
+ eigen_assert(((internal::UIntPtr(xpr.data()) % EIGEN_PLAIN_ENUM_MAX(1,evaluator<XprType>::Alignment)) == 0) && "data is not aligned");
447
+ }
448
+ };
449
+
450
+ } // end namespace internal
451
+
452
+ } // end namespace Eigen
453
+
454
+ #endif // EIGEN_RESHAPED_H
@@ -60,8 +60,10 @@ template<typename Derived> class ReturnByValue
60
60
  EIGEN_DEVICE_FUNC
61
61
  inline void evalTo(Dest& dst) const
62
62
  { static_cast<const Derived*>(this)->evalTo(dst); }
63
- EIGEN_DEVICE_FUNC inline Index rows() const { return static_cast<const Derived*>(this)->rows(); }
64
- EIGEN_DEVICE_FUNC inline Index cols() const { return static_cast<const Derived*>(this)->cols(); }
63
+ EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
64
+ inline Index rows() const EIGEN_NOEXCEPT { return static_cast<const Derived*>(this)->rows(); }
65
+ EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
66
+ inline Index cols() const EIGEN_NOEXCEPT { return static_cast<const Derived*>(this)->cols(); }
65
67
 
66
68
  #ifndef EIGEN_PARSED_BY_DOXYGEN
67
69
  #define Unusable YOU_ARE_TRYING_TO_ACCESS_A_SINGLE_COEFFICIENT_IN_A_SPECIAL_EXPRESSION_WHERE_THAT_IS_NOT_ALLOWED_BECAUSE_THAT_WOULD_BE_INEFFICIENT
@@ -79,7 +81,7 @@ template<typename Derived> class ReturnByValue
79
81
 
80
82
  template<typename Derived>
81
83
  template<typename OtherDerived>
82
- Derived& DenseBase<Derived>::operator=(const ReturnByValue<OtherDerived>& other)
84
+ EIGEN_DEVICE_FUNC Derived& DenseBase<Derived>::operator=(const ReturnByValue<OtherDerived>& other)
83
85
  {
84
86
  other.evalTo(derived());
85
87
  return derived();
@@ -90,7 +92,7 @@ namespace internal {
90
92
  // Expression is evaluated in a temporary; default implementation of Assignment is bypassed so that
91
93
  // when a ReturnByValue expression is assigned, the evaluator is not constructed.
92
94
  // TODO: Finalize port to new regime; ReturnByValue should not exist in the expression world
93
-
95
+
94
96
  template<typename Derived>
95
97
  struct evaluator<ReturnByValue<Derived> >
96
98
  : public evaluator<typename internal::traits<Derived>::ReturnType>
@@ -98,7 +100,7 @@ struct evaluator<ReturnByValue<Derived> >
98
100
  typedef ReturnByValue<Derived> XprType;
99
101
  typedef typename internal::traits<Derived>::ReturnType PlainObject;
100
102
  typedef evaluator<PlainObject> Base;
101
-
103
+
102
104
  EIGEN_DEVICE_FUNC explicit evaluator(const XprType& xpr)
103
105
  : m_result(xpr.rows(), xpr.cols())
104
106
  {
@@ -12,7 +12,7 @@
12
12
  #ifndef EIGEN_REVERSE_H
13
13
  #define EIGEN_REVERSE_H
14
14
 
15
- namespace Eigen {
15
+ namespace Eigen {
16
16
 
17
17
  namespace internal {
18
18
 
@@ -44,7 +44,7 @@ template<typename PacketType> struct reverse_packet_cond<PacketType,false>
44
44
  static inline PacketType run(const PacketType& x) { return x; }
45
45
  };
46
46
 
47
- } // end namespace internal
47
+ } // end namespace internal
48
48
 
49
49
  /** \class Reverse
50
50
  * \ingroup Core_Module
@@ -89,8 +89,10 @@ template<typename MatrixType, int Direction> class Reverse
89
89
 
90
90
  EIGEN_INHERIT_ASSIGNMENT_OPERATORS(Reverse)
91
91
 
92
- EIGEN_DEVICE_FUNC inline Index rows() const { return m_matrix.rows(); }
93
- EIGEN_DEVICE_FUNC inline Index cols() const { return m_matrix.cols(); }
92
+ EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
93
+ inline Index rows() const EIGEN_NOEXCEPT { return m_matrix.rows(); }
94
+ EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
95
+ inline Index cols() const EIGEN_NOEXCEPT { return m_matrix.cols(); }
94
96
 
95
97
  EIGEN_DEVICE_FUNC inline Index innerStride() const
96
98
  {
@@ -98,7 +100,7 @@ template<typename MatrixType, int Direction> class Reverse
98
100
  }
99
101
 
100
102
  EIGEN_DEVICE_FUNC const typename internal::remove_all<typename MatrixType::Nested>::type&
101
- nestedExpression() const
103
+ nestedExpression() const
102
104
  {
103
105
  return m_matrix;
104
106
  }
@@ -114,7 +116,7 @@ template<typename MatrixType, int Direction> class Reverse
114
116
  *
115
117
  */
116
118
  template<typename Derived>
117
- inline typename DenseBase<Derived>::ReverseReturnType
119
+ EIGEN_DEVICE_FUNC inline typename DenseBase<Derived>::ReverseReturnType
118
120
  DenseBase<Derived>::reverse()
119
121
  {
120
122
  return ReverseReturnType(derived());
@@ -136,7 +138,7 @@ DenseBase<Derived>::reverse()
136
138
  *
137
139
  * \sa VectorwiseOp::reverseInPlace(), reverse() */
138
140
  template<typename Derived>
139
- inline void DenseBase<Derived>::reverseInPlace()
141
+ EIGEN_DEVICE_FUNC inline void DenseBase<Derived>::reverseInPlace()
140
142
  {
141
143
  if(cols()>rows())
142
144
  {
@@ -161,7 +163,7 @@ inline void DenseBase<Derived>::reverseInPlace()
161
163
  }
162
164
 
163
165
  namespace internal {
164
-
166
+
165
167
  template<int Direction>
166
168
  struct vectorwise_reverse_inplace_impl;
167
169
 
@@ -171,8 +173,10 @@ struct vectorwise_reverse_inplace_impl<Vertical>
171
173
  template<typename ExpressionType>
172
174
  static void run(ExpressionType &xpr)
173
175
  {
176
+ const int HalfAtCompileTime = ExpressionType::RowsAtCompileTime==Dynamic?Dynamic:ExpressionType::RowsAtCompileTime/2;
174
177
  Index half = xpr.rows()/2;
175
- xpr.topRows(half).swap(xpr.bottomRows(half).colwise().reverse());
178
+ xpr.topRows(fix<HalfAtCompileTime>(half))
179
+ .swap(xpr.bottomRows(fix<HalfAtCompileTime>(half)).colwise().reverse());
176
180
  }
177
181
  };
178
182
 
@@ -182,8 +186,10 @@ struct vectorwise_reverse_inplace_impl<Horizontal>
182
186
  template<typename ExpressionType>
183
187
  static void run(ExpressionType &xpr)
184
188
  {
189
+ const int HalfAtCompileTime = ExpressionType::ColsAtCompileTime==Dynamic?Dynamic:ExpressionType::ColsAtCompileTime/2;
185
190
  Index half = xpr.cols()/2;
186
- xpr.leftCols(half).swap(xpr.rightCols(half).rowwise().reverse());
191
+ xpr.leftCols(fix<HalfAtCompileTime>(half))
192
+ .swap(xpr.rightCols(fix<HalfAtCompileTime>(half)).rowwise().reverse());
187
193
  }
188
194
  };
189
195
 
@@ -201,9 +207,9 @@ struct vectorwise_reverse_inplace_impl<Horizontal>
201
207
  *
202
208
  * \sa DenseBase::reverseInPlace(), reverse() */
203
209
  template<typename ExpressionType, int Direction>
204
- void VectorwiseOp<ExpressionType,Direction>::reverseInPlace()
210
+ EIGEN_DEVICE_FUNC void VectorwiseOp<ExpressionType,Direction>::reverseInPlace()
205
211
  {
206
- internal::vectorwise_reverse_inplace_impl<Direction>::run(_expression().const_cast_derived());
212
+ internal::vectorwise_reverse_inplace_impl<Direction>::run(m_matrix);
207
213
  }
208
214
 
209
215
  } // end namespace Eigen
@@ -10,7 +10,7 @@
10
10
  #ifndef EIGEN_SELECT_H
11
11
  #define EIGEN_SELECT_H
12
12
 
13
- namespace Eigen {
13
+ namespace Eigen {
14
14
 
15
15
  /** \class Select
16
16
  * \ingroup Core_Module
@@ -67,8 +67,10 @@ class Select : public internal::dense_xpr_base< Select<ConditionMatrixType, Then
67
67
  eigen_assert(m_condition.cols() == m_then.cols() && m_condition.cols() == m_else.cols());
68
68
  }
69
69
 
70
- inline EIGEN_DEVICE_FUNC Index rows() const { return m_condition.rows(); }
71
- inline EIGEN_DEVICE_FUNC Index cols() const { return m_condition.cols(); }
70
+ inline EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
71
+ Index rows() const EIGEN_NOEXCEPT { return m_condition.rows(); }
72
+ inline EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
73
+ Index cols() const EIGEN_NOEXCEPT { return m_condition.cols(); }
72
74
 
73
75
  inline EIGEN_DEVICE_FUNC
74
76
  const Scalar coeff(Index i, Index j) const
@@ -120,7 +122,7 @@ class Select : public internal::dense_xpr_base< Select<ConditionMatrixType, Then
120
122
  */
121
123
  template<typename Derived>
122
124
  template<typename ThenDerived,typename ElseDerived>
123
- inline const Select<Derived,ThenDerived,ElseDerived>
125
+ inline EIGEN_DEVICE_FUNC const Select<Derived,ThenDerived,ElseDerived>
124
126
  DenseBase<Derived>::select(const DenseBase<ThenDerived>& thenMatrix,
125
127
  const DenseBase<ElseDerived>& elseMatrix) const
126
128
  {
@@ -134,7 +136,7 @@ DenseBase<Derived>::select(const DenseBase<ThenDerived>& thenMatrix,
134
136
  */
135
137
  template<typename Derived>
136
138
  template<typename ThenDerived>
137
- inline const Select<Derived,ThenDerived, typename ThenDerived::ConstantReturnType>
139
+ inline EIGEN_DEVICE_FUNC const Select<Derived,ThenDerived, typename ThenDerived::ConstantReturnType>
138
140
  DenseBase<Derived>::select(const DenseBase<ThenDerived>& thenMatrix,
139
141
  const typename ThenDerived::Scalar& elseScalar) const
140
142
  {
@@ -149,7 +151,7 @@ DenseBase<Derived>::select(const DenseBase<ThenDerived>& thenMatrix,
149
151
  */
150
152
  template<typename Derived>
151
153
  template<typename ElseDerived>
152
- inline const Select<Derived, typename ElseDerived::ConstantReturnType, ElseDerived >
154
+ inline EIGEN_DEVICE_FUNC const Select<Derived, typename ElseDerived::ConstantReturnType, ElseDerived >
153
155
  DenseBase<Derived>::select(const typename ElseDerived::Scalar& thenScalar,
154
156
  const DenseBase<ElseDerived>& elseMatrix) const
155
157
  {