@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
@@ -13,10 +13,10 @@
13
13
 
14
14
  #if defined(EIGEN_INITIALIZE_MATRICES_BY_ZERO)
15
15
  # define EIGEN_INITIALIZE_COEFFS
16
- # define EIGEN_INITIALIZE_COEFFS_IF_THAT_OPTION_IS_ENABLED for(int i=0;i<base().size();++i) coeffRef(i)=Scalar(0);
16
+ # define EIGEN_INITIALIZE_COEFFS_IF_THAT_OPTION_IS_ENABLED for(Index i=0;i<base().size();++i) coeffRef(i)=Scalar(0);
17
17
  #elif defined(EIGEN_INITIALIZE_MATRICES_BY_NAN)
18
18
  # define EIGEN_INITIALIZE_COEFFS
19
- # define EIGEN_INITIALIZE_COEFFS_IF_THAT_OPTION_IS_ENABLED for(int i=0;i<base().size();++i) coeffRef(i)=std::numeric_limits<Scalar>::quiet_NaN();
19
+ # define EIGEN_INITIALIZE_COEFFS_IF_THAT_OPTION_IS_ENABLED for(Index i=0;i<base().size();++i) coeffRef(i)=std::numeric_limits<Scalar>::quiet_NaN();
20
20
  #else
21
21
  # undef EIGEN_INITIALIZE_COEFFS
22
22
  # define EIGEN_INITIALIZE_COEFFS_IF_THAT_OPTION_IS_ENABLED
@@ -104,7 +104,7 @@ class PlainObjectBase : public internal::dense_xpr_base<Derived>::type
104
104
 
105
105
  typedef typename internal::traits<Derived>::StorageKind StorageKind;
106
106
  typedef typename internal::traits<Derived>::Scalar Scalar;
107
-
107
+
108
108
  typedef typename internal::packet_traits<Scalar>::type PacketScalar;
109
109
  typedef typename NumTraits<Scalar>::Real RealScalar;
110
110
  typedef Derived DenseType;
@@ -118,16 +118,8 @@ class PlainObjectBase : public internal::dense_xpr_base<Derived>::type
118
118
  using Base::IsVectorAtCompileTime;
119
119
  using Base::Flags;
120
120
 
121
- template<typename PlainObjectType, int MapOptions, typename StrideType> friend class Eigen::Map;
122
- friend class Eigen::Map<Derived, Unaligned>;
123
121
  typedef Eigen::Map<Derived, Unaligned> MapType;
124
- friend class Eigen::Map<const Derived, Unaligned>;
125
122
  typedef const Eigen::Map<const Derived, Unaligned> ConstMapType;
126
- #if EIGEN_MAX_ALIGN_BYTES>0
127
- // for EIGEN_MAX_ALIGN_BYTES==0, AlignedMax==Unaligned, and many compilers generate warnings for friend-ing a class twice.
128
- friend class Eigen::Map<Derived, AlignedMax>;
129
- friend class Eigen::Map<const Derived, AlignedMax>;
130
- #endif
131
123
  typedef Eigen::Map<Derived, AlignedMax> AlignedMapType;
132
124
  typedef const Eigen::Map<const Derived, AlignedMax> ConstAlignedMapType;
133
125
  template<typename StrideType> struct StridedMapType { typedef Eigen::Map<Derived, Unaligned, StrideType> type; };
@@ -147,10 +139,10 @@ class PlainObjectBase : public internal::dense_xpr_base<Derived>::type
147
139
  EIGEN_DEVICE_FUNC
148
140
  const Base& base() const { return *static_cast<const Base*>(this); }
149
141
 
150
- EIGEN_DEVICE_FUNC
151
- EIGEN_STRONG_INLINE Index rows() const { return m_storage.rows(); }
152
- EIGEN_DEVICE_FUNC
153
- EIGEN_STRONG_INLINE Index cols() const { return m_storage.cols(); }
142
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE EIGEN_CONSTEXPR
143
+ Index rows() const EIGEN_NOEXCEPT { return m_storage.rows(); }
144
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE EIGEN_CONSTEXPR
145
+ Index cols() const EIGEN_NOEXCEPT { return m_storage.cols(); }
154
146
 
155
147
  /** This is an overloaded version of DenseCoeffsBase<Derived,ReadOnlyAccessors>::coeff(Index,Index) const
156
148
  * provided to by-pass the creation of an evaluator of the expression, thus saving compilation efforts.
@@ -358,7 +350,7 @@ class PlainObjectBase : public internal::dense_xpr_base<Derived>::type
358
350
  * remain row-vectors and vectors remain vectors.
359
351
  */
360
352
  template<typename OtherDerived>
361
- EIGEN_DEVICE_FUNC
353
+ EIGEN_DEVICE_FUNC
362
354
  EIGEN_STRONG_INLINE void resizeLike(const EigenBase<OtherDerived>& _other)
363
355
  {
364
356
  const OtherDerived& other = _other.derived();
@@ -383,7 +375,7 @@ class PlainObjectBase : public internal::dense_xpr_base<Derived>::type
383
375
  * of rows and/or of columns, you can use conservativeResize(NoChange_t, Index) or
384
376
  * conservativeResize(Index, NoChange_t).
385
377
  *
386
- * Matrices are resized relative to the top-left element. In case values need to be
378
+ * Matrices are resized relative to the top-left element. In case values need to be
387
379
  * appended to the matrix they will be uninitialized.
388
380
  */
389
381
  EIGEN_DEVICE_FUNC
@@ -440,7 +432,7 @@ class PlainObjectBase : public internal::dense_xpr_base<Derived>::type
440
432
  * of rows and/or of columns, you can use conservativeResize(NoChange_t, Index) or
441
433
  * conservativeResize(Index, NoChange_t).
442
434
  *
443
- * Matrices are resized relative to the top-left element. In case values need to be
435
+ * Matrices are resized relative to the top-left element. In case values need to be
444
436
  * appended to the matrix they will copied from \c other.
445
437
  */
446
438
  template<typename OtherDerived>
@@ -508,8 +500,8 @@ class PlainObjectBase : public internal::dense_xpr_base<Derived>::type
508
500
  EIGEN_DEVICE_FUNC
509
501
  PlainObjectBase& operator=(PlainObjectBase&& other) EIGEN_NOEXCEPT
510
502
  {
511
- using std::swap;
512
- swap(m_storage, other.m_storage);
503
+ _check_template_params();
504
+ m_storage = std::move(other.m_storage);
513
505
  return *this;
514
506
  }
515
507
  #endif
@@ -526,6 +518,71 @@ class PlainObjectBase : public internal::dense_xpr_base<Derived>::type
526
518
  // EIGEN_INITIALIZE_COEFFS_IF_THAT_OPTION_IS_ENABLED
527
519
  }
528
520
 
521
+ #if EIGEN_HAS_CXX11
522
+ /** \brief Construct a row of column vector with fixed size from an arbitrary number of coefficients. \cpp11
523
+ *
524
+ * \only_for_vectors
525
+ *
526
+ * This constructor is for 1D array or vectors with more than 4 coefficients.
527
+ * There exists C++98 analogue constructors for fixed-size array/vector having 1, 2, 3, or 4 coefficients.
528
+ *
529
+ * \warning To construct a column (resp. row) vector of fixed length, the number of values passed to this
530
+ * constructor must match the the fixed number of rows (resp. columns) of \c *this.
531
+ */
532
+ template <typename... ArgTypes>
533
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
534
+ PlainObjectBase(const Scalar& a0, const Scalar& a1, const Scalar& a2, const Scalar& a3, const ArgTypes&... args)
535
+ : m_storage()
536
+ {
537
+ _check_template_params();
538
+ EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(PlainObjectBase, sizeof...(args) + 4);
539
+ m_storage.data()[0] = a0;
540
+ m_storage.data()[1] = a1;
541
+ m_storage.data()[2] = a2;
542
+ m_storage.data()[3] = a3;
543
+ Index i = 4;
544
+ auto x = {(m_storage.data()[i++] = args, 0)...};
545
+ static_cast<void>(x);
546
+ }
547
+
548
+ /** \brief Constructs a Matrix or Array and initializes it by elements given by an initializer list of initializer
549
+ * lists \cpp11
550
+ */
551
+ EIGEN_DEVICE_FUNC
552
+ explicit EIGEN_STRONG_INLINE PlainObjectBase(const std::initializer_list<std::initializer_list<Scalar>>& list)
553
+ : m_storage()
554
+ {
555
+ _check_template_params();
556
+
557
+ size_t list_size = 0;
558
+ if (list.begin() != list.end()) {
559
+ list_size = list.begin()->size();
560
+ }
561
+
562
+ // This is to allow syntax like VectorXi {{1, 2, 3, 4}}
563
+ if (ColsAtCompileTime == 1 && list.size() == 1) {
564
+ eigen_assert(list_size == static_cast<size_t>(RowsAtCompileTime) || RowsAtCompileTime == Dynamic);
565
+ resize(list_size, ColsAtCompileTime);
566
+ std::copy(list.begin()->begin(), list.begin()->end(), m_storage.data());
567
+ } else {
568
+ eigen_assert(list.size() == static_cast<size_t>(RowsAtCompileTime) || RowsAtCompileTime == Dynamic);
569
+ eigen_assert(list_size == static_cast<size_t>(ColsAtCompileTime) || ColsAtCompileTime == Dynamic);
570
+ resize(list.size(), list_size);
571
+
572
+ Index row_index = 0;
573
+ for (const std::initializer_list<Scalar>& row : list) {
574
+ eigen_assert(list_size == row.size());
575
+ Index col_index = 0;
576
+ for (const Scalar& e : row) {
577
+ coeffRef(row_index, col_index) = e;
578
+ ++col_index;
579
+ }
580
+ ++row_index;
581
+ }
582
+ }
583
+ }
584
+ #endif // end EIGEN_HAS_CXX11
585
+
529
586
  /** \sa PlainObjectBase::operator=(const EigenBase<OtherDerived>&) */
530
587
  template<typename OtherDerived>
531
588
  EIGEN_DEVICE_FUNC
@@ -564,7 +621,7 @@ class PlainObjectBase : public internal::dense_xpr_base<Derived>::type
564
621
  * \copydetails DenseBase::operator=(const EigenBase<OtherDerived> &other)
565
622
  */
566
623
  template<typename OtherDerived>
567
- EIGEN_DEVICE_FUNC
624
+ EIGEN_DEVICE_FUNC
568
625
  EIGEN_STRONG_INLINE Derived& operator=(const EigenBase<OtherDerived> &other)
569
626
  {
570
627
  _resize_to_match(other);
@@ -652,18 +709,26 @@ class PlainObjectBase : public internal::dense_xpr_base<Derived>::type
652
709
  using Base::setConstant;
653
710
  EIGEN_DEVICE_FUNC Derived& setConstant(Index size, const Scalar& val);
654
711
  EIGEN_DEVICE_FUNC Derived& setConstant(Index rows, Index cols, const Scalar& val);
712
+ EIGEN_DEVICE_FUNC Derived& setConstant(NoChange_t, Index cols, const Scalar& val);
713
+ EIGEN_DEVICE_FUNC Derived& setConstant(Index rows, NoChange_t, const Scalar& val);
655
714
 
656
715
  using Base::setZero;
657
716
  EIGEN_DEVICE_FUNC Derived& setZero(Index size);
658
717
  EIGEN_DEVICE_FUNC Derived& setZero(Index rows, Index cols);
718
+ EIGEN_DEVICE_FUNC Derived& setZero(NoChange_t, Index cols);
719
+ EIGEN_DEVICE_FUNC Derived& setZero(Index rows, NoChange_t);
659
720
 
660
721
  using Base::setOnes;
661
722
  EIGEN_DEVICE_FUNC Derived& setOnes(Index size);
662
723
  EIGEN_DEVICE_FUNC Derived& setOnes(Index rows, Index cols);
724
+ EIGEN_DEVICE_FUNC Derived& setOnes(NoChange_t, Index cols);
725
+ EIGEN_DEVICE_FUNC Derived& setOnes(Index rows, NoChange_t);
663
726
 
664
727
  using Base::setRandom;
665
728
  Derived& setRandom(Index size);
666
729
  Derived& setRandom(Index rows, Index cols);
730
+ Derived& setRandom(NoChange_t, Index cols);
731
+ Derived& setRandom(Index rows, NoChange_t);
667
732
 
668
733
  #ifdef EIGEN_PLAINOBJECTBASE_PLUGIN
669
734
  #include EIGEN_PLAINOBJECTBASE_PLUGIN
@@ -678,7 +743,7 @@ class PlainObjectBase : public internal::dense_xpr_base<Derived>::type
678
743
  * remain row-vectors and vectors remain vectors.
679
744
  */
680
745
  template<typename OtherDerived>
681
- EIGEN_DEVICE_FUNC
746
+ EIGEN_DEVICE_FUNC
682
747
  EIGEN_STRONG_INLINE void _resize_to_match(const EigenBase<OtherDerived>& other)
683
748
  {
684
749
  #ifdef EIGEN_NO_AUTOMATIC_RESIZING
@@ -705,10 +770,10 @@ class PlainObjectBase : public internal::dense_xpr_base<Derived>::type
705
770
  *
706
771
  * \internal
707
772
  */
708
- // aliasing is dealt once in internall::call_assignment
773
+ // aliasing is dealt once in internal::call_assignment
709
774
  // so at this stage we have to assume aliasing... and resising has to be done later.
710
775
  template<typename OtherDerived>
711
- EIGEN_DEVICE_FUNC
776
+ EIGEN_DEVICE_FUNC
712
777
  EIGEN_STRONG_INLINE Derived& _set(const DenseBase<OtherDerived>& other)
713
778
  {
714
779
  internal::call_assignment(this->derived(), other.derived());
@@ -721,7 +786,7 @@ class PlainObjectBase : public internal::dense_xpr_base<Derived>::type
721
786
  * \sa operator=(const MatrixBase<OtherDerived>&), _set()
722
787
  */
723
788
  template<typename OtherDerived>
724
- EIGEN_DEVICE_FUNC
789
+ EIGEN_DEVICE_FUNC
725
790
  EIGEN_STRONG_INLINE Derived& _set_noalias(const DenseBase<OtherDerived>& other)
726
791
  {
727
792
  // I don't think we need this resize call since the lazyAssign will anyways resize
@@ -744,18 +809,18 @@ class PlainObjectBase : public internal::dense_xpr_base<Derived>::type
744
809
  FLOATING_POINT_ARGUMENT_PASSED__INTEGER_WAS_EXPECTED)
745
810
  resize(rows,cols);
746
811
  }
747
-
812
+
748
813
  template<typename T0, typename T1>
749
- EIGEN_DEVICE_FUNC
814
+ EIGEN_DEVICE_FUNC
750
815
  EIGEN_STRONG_INLINE void _init2(const T0& val0, const T1& val1, typename internal::enable_if<Base::SizeAtCompileTime==2,T0>::type* = 0)
751
816
  {
752
817
  EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(PlainObjectBase, 2)
753
818
  m_storage.data()[0] = Scalar(val0);
754
819
  m_storage.data()[1] = Scalar(val1);
755
820
  }
756
-
821
+
757
822
  template<typename T0, typename T1>
758
- EIGEN_DEVICE_FUNC
823
+ EIGEN_DEVICE_FUNC
759
824
  EIGEN_STRONG_INLINE void _init2(const Index& val0, const Index& val1,
760
825
  typename internal::enable_if< (!internal::is_same<Index,Scalar>::value)
761
826
  && (internal::is_same<T0,Index>::value)
@@ -781,8 +846,8 @@ class PlainObjectBase : public internal::dense_xpr_base<Derived>::type
781
846
  FLOATING_POINT_ARGUMENT_PASSED__INTEGER_WAS_EXPECTED)
782
847
  resize(size);
783
848
  }
784
-
785
- // We have a 1x1 matrix/array => the argument is interpreted as the value of the unique coefficient (case where scalar type can be implicitely converted)
849
+
850
+ // We have a 1x1 matrix/array => the argument is interpreted as the value of the unique coefficient (case where scalar type can be implicitly converted)
786
851
  template<typename T>
787
852
  EIGEN_DEVICE_FUNC
788
853
  EIGEN_STRONG_INLINE void _init1(const Scalar& val0, typename internal::enable_if<Base::SizeAtCompileTime==1 && internal::is_convertible<T, Scalar>::value,T>::type* = 0)
@@ -790,7 +855,7 @@ class PlainObjectBase : public internal::dense_xpr_base<Derived>::type
790
855
  EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(PlainObjectBase, 1)
791
856
  m_storage.data()[0] = val0;
792
857
  }
793
-
858
+
794
859
  // We have a 1x1 matrix/array => the argument is interpreted as the value of the unique coefficient (case where scalar type match the index type)
795
860
  template<typename T>
796
861
  EIGEN_DEVICE_FUNC
@@ -846,7 +911,7 @@ class PlainObjectBase : public internal::dense_xpr_base<Derived>::type
846
911
  {
847
912
  this->derived() = r;
848
913
  }
849
-
914
+
850
915
  // For fixed-size Array<Scalar,...>
851
916
  template<typename T>
852
917
  EIGEN_DEVICE_FUNC
@@ -858,7 +923,7 @@ class PlainObjectBase : public internal::dense_xpr_base<Derived>::type
858
923
  {
859
924
  Base::setConstant(val0);
860
925
  }
861
-
926
+
862
927
  // For fixed-size Array<Index,...>
863
928
  template<typename T>
864
929
  EIGEN_DEVICE_FUNC
@@ -872,38 +937,38 @@ class PlainObjectBase : public internal::dense_xpr_base<Derived>::type
872
937
  {
873
938
  Base::setConstant(val0);
874
939
  }
875
-
940
+
876
941
  template<typename MatrixTypeA, typename MatrixTypeB, bool SwapPointers>
877
942
  friend struct internal::matrix_swap_impl;
878
943
 
879
944
  public:
880
-
945
+
881
946
  #ifndef EIGEN_PARSED_BY_DOXYGEN
882
947
  /** \internal
883
948
  * \brief Override DenseBase::swap() since for dynamic-sized matrices
884
949
  * of same type it is enough to swap the data pointers.
885
950
  */
886
951
  template<typename OtherDerived>
887
- EIGEN_DEVICE_FUNC
952
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
888
953
  void swap(DenseBase<OtherDerived> & other)
889
954
  {
890
955
  enum { SwapPointers = internal::is_same<Derived, OtherDerived>::value && Base::SizeAtCompileTime==Dynamic };
891
956
  internal::matrix_swap_impl<Derived, OtherDerived, bool(SwapPointers)>::run(this->derived(), other.derived());
892
957
  }
893
-
958
+
894
959
  /** \internal
895
960
  * \brief const version forwarded to DenseBase::swap
896
961
  */
897
962
  template<typename OtherDerived>
898
- EIGEN_DEVICE_FUNC
963
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
899
964
  void swap(DenseBase<OtherDerived> const & other)
900
965
  { Base::swap(other.derived()); }
901
-
902
- EIGEN_DEVICE_FUNC
966
+
967
+ EIGEN_DEVICE_FUNC
903
968
  static EIGEN_STRONG_INLINE void _check_template_params()
904
969
  {
905
- EIGEN_STATIC_ASSERT((EIGEN_IMPLIES(MaxRowsAtCompileTime==1 && MaxColsAtCompileTime!=1, (Options&RowMajor)==RowMajor)
906
- && EIGEN_IMPLIES(MaxColsAtCompileTime==1 && MaxRowsAtCompileTime!=1, (Options&RowMajor)==0)
970
+ EIGEN_STATIC_ASSERT((EIGEN_IMPLIES(MaxRowsAtCompileTime==1 && MaxColsAtCompileTime!=1, (int(Options)&RowMajor)==RowMajor)
971
+ && EIGEN_IMPLIES(MaxColsAtCompileTime==1 && MaxRowsAtCompileTime!=1, (int(Options)&RowMajor)==0)
907
972
  && ((RowsAtCompileTime == Dynamic) || (RowsAtCompileTime >= 0))
908
973
  && ((ColsAtCompileTime == Dynamic) || (ColsAtCompileTime >= 0))
909
974
  && ((MaxRowsAtCompileTime == Dynamic) || (MaxRowsAtCompileTime >= 0))
@@ -915,6 +980,17 @@ class PlainObjectBase : public internal::dense_xpr_base<Derived>::type
915
980
  }
916
981
 
917
982
  enum { IsPlainObjectBase = 1 };
983
+ #endif
984
+ public:
985
+ // These apparently need to be down here for nvcc+icc to prevent duplicate
986
+ // Map symbol.
987
+ template<typename PlainObjectType, int MapOptions, typename StrideType> friend class Eigen::Map;
988
+ friend class Eigen::Map<Derived, Unaligned>;
989
+ friend class Eigen::Map<const Derived, Unaligned>;
990
+ #if EIGEN_MAX_ALIGN_BYTES>0
991
+ // for EIGEN_MAX_ALIGN_BYTES==0, AlignedMax==Unaligned, and many compilers generate warnings for friend-ing a class twice.
992
+ friend class Eigen::Map<Derived, AlignedMax>;
993
+ friend class Eigen::Map<const Derived, AlignedMax>;
918
994
  #endif
919
995
  };
920
996
 
@@ -923,13 +999,19 @@ namespace internal {
923
999
  template <typename Derived, typename OtherDerived, bool IsVector>
924
1000
  struct conservative_resize_like_impl
925
1001
  {
1002
+ #if EIGEN_HAS_TYPE_TRAITS
1003
+ static const bool IsRelocatable = std::is_trivially_copyable<typename Derived::Scalar>::value;
1004
+ #else
1005
+ static const bool IsRelocatable = !NumTraits<typename Derived::Scalar>::RequireInitialization;
1006
+ #endif
926
1007
  static void run(DenseBase<Derived>& _this, Index rows, Index cols)
927
1008
  {
928
1009
  if (_this.rows() == rows && _this.cols() == cols) return;
929
1010
  EIGEN_STATIC_ASSERT_DYNAMIC_SIZE(Derived)
930
1011
 
931
- if ( ( Derived::IsRowMajor && _this.cols() == cols) || // row-major and we change only the number of rows
932
- (!Derived::IsRowMajor && _this.rows() == rows) ) // column-major and we change only the number of columns
1012
+ if ( IsRelocatable
1013
+ && (( Derived::IsRowMajor && _this.cols() == cols) || // row-major and we change only the number of rows
1014
+ (!Derived::IsRowMajor && _this.rows() == rows) )) // column-major and we change only the number of columns
933
1015
  {
934
1016
  internal::check_rows_cols_for_overflow<Derived::MaxSizeAtCompileTime>::run(rows, cols);
935
1017
  _this.derived().m_storage.conservativeResize(rows*cols,rows,cols);
@@ -937,7 +1019,7 @@ struct conservative_resize_like_impl
937
1019
  else
938
1020
  {
939
1021
  // The storage order does not allow us to use reallocation.
940
- typename Derived::PlainObject tmp(rows,cols);
1022
+ Derived tmp(rows,cols);
941
1023
  const Index common_rows = numext::mini(rows, _this.rows());
942
1024
  const Index common_cols = numext::mini(cols, _this.cols());
943
1025
  tmp.block(0,0,common_rows,common_cols) = _this.block(0,0,common_rows,common_cols);
@@ -957,8 +1039,9 @@ struct conservative_resize_like_impl
957
1039
  EIGEN_STATIC_ASSERT_DYNAMIC_SIZE(Derived)
958
1040
  EIGEN_STATIC_ASSERT_DYNAMIC_SIZE(OtherDerived)
959
1041
 
960
- if ( ( Derived::IsRowMajor && _this.cols() == other.cols()) || // row-major and we change only the number of rows
961
- (!Derived::IsRowMajor && _this.rows() == other.rows()) ) // column-major and we change only the number of columns
1042
+ if ( IsRelocatable &&
1043
+ (( Derived::IsRowMajor && _this.cols() == other.cols()) || // row-major and we change only the number of rows
1044
+ (!Derived::IsRowMajor && _this.rows() == other.rows()) )) // column-major and we change only the number of columns
962
1045
  {
963
1046
  const Index new_rows = other.rows() - _this.rows();
964
1047
  const Index new_cols = other.cols() - _this.cols();
@@ -971,7 +1054,7 @@ struct conservative_resize_like_impl
971
1054
  else
972
1055
  {
973
1056
  // The storage order does not allow us to use reallocation.
974
- typename Derived::PlainObject tmp(other);
1057
+ Derived tmp(other);
975
1058
  const Index common_rows = numext::mini(tmp.rows(), _this.rows());
976
1059
  const Index common_cols = numext::mini(tmp.cols(), _this.cols());
977
1060
  tmp.block(0,0,common_rows,common_cols) = _this.block(0,0,common_rows,common_cols);
@@ -986,13 +1069,18 @@ template <typename Derived, typename OtherDerived>
986
1069
  struct conservative_resize_like_impl<Derived,OtherDerived,true>
987
1070
  : conservative_resize_like_impl<Derived,OtherDerived,false>
988
1071
  {
989
- using conservative_resize_like_impl<Derived,OtherDerived,false>::run;
990
-
1072
+ typedef conservative_resize_like_impl<Derived,OtherDerived,false> Base;
1073
+ using Base::run;
1074
+ using Base::IsRelocatable;
1075
+
991
1076
  static void run(DenseBase<Derived>& _this, Index size)
992
1077
  {
993
1078
  const Index new_rows = Derived::RowsAtCompileTime==1 ? 1 : size;
994
1079
  const Index new_cols = Derived::RowsAtCompileTime==1 ? size : 1;
995
- _this.derived().m_storage.conservativeResize(size,new_rows,new_cols);
1080
+ if(IsRelocatable)
1081
+ _this.derived().m_storage.conservativeResize(size,new_rows,new_cols);
1082
+ else
1083
+ Base::run(_this.derived(), new_rows, new_cols);
996
1084
  }
997
1085
 
998
1086
  static void run(DenseBase<Derived>& _this, const DenseBase<OtherDerived>& other)
@@ -1003,7 +1091,10 @@ struct conservative_resize_like_impl<Derived,OtherDerived,true>
1003
1091
 
1004
1092
  const Index new_rows = Derived::RowsAtCompileTime==1 ? 1 : other.rows();
1005
1093
  const Index new_cols = Derived::RowsAtCompileTime==1 ? other.cols() : 1;
1006
- _this.derived().m_storage.conservativeResize(other.size(),new_rows,new_cols);
1094
+ if(IsRelocatable)
1095
+ _this.derived().m_storage.conservativeResize(other.size(),new_rows,new_cols);
1096
+ else
1097
+ Base::run(_this.derived(), new_rows, new_cols);
1007
1098
 
1008
1099
  if (num_new_elements > 0)
1009
1100
  _this.tail(num_new_elements) = other.tail(num_new_elements);
@@ -1014,7 +1105,7 @@ template<typename MatrixTypeA, typename MatrixTypeB, bool SwapPointers>
1014
1105
  struct matrix_swap_impl
1015
1106
  {
1016
1107
  EIGEN_DEVICE_FUNC
1017
- static inline void run(MatrixTypeA& a, MatrixTypeB& b)
1108
+ static EIGEN_STRONG_INLINE void run(MatrixTypeA& a, MatrixTypeB& b)
1018
1109
  {
1019
1110
  a.base().swap(b);
1020
1111
  }
@@ -23,25 +23,25 @@ struct traits<Product<Lhs, Rhs, Option> >
23
23
  typedef typename remove_all<Rhs>::type RhsCleaned;
24
24
  typedef traits<LhsCleaned> LhsTraits;
25
25
  typedef traits<RhsCleaned> RhsTraits;
26
-
26
+
27
27
  typedef MatrixXpr XprKind;
28
-
28
+
29
29
  typedef typename ScalarBinaryOpTraits<typename traits<LhsCleaned>::Scalar, typename traits<RhsCleaned>::Scalar>::ReturnType Scalar;
30
30
  typedef typename product_promote_storage_type<typename LhsTraits::StorageKind,
31
31
  typename RhsTraits::StorageKind,
32
32
  internal::product_type<Lhs,Rhs>::ret>::ret StorageKind;
33
33
  typedef typename promote_index_type<typename LhsTraits::StorageIndex,
34
34
  typename RhsTraits::StorageIndex>::type StorageIndex;
35
-
35
+
36
36
  enum {
37
37
  RowsAtCompileTime = LhsTraits::RowsAtCompileTime,
38
38
  ColsAtCompileTime = RhsTraits::ColsAtCompileTime,
39
39
  MaxRowsAtCompileTime = LhsTraits::MaxRowsAtCompileTime,
40
40
  MaxColsAtCompileTime = RhsTraits::MaxColsAtCompileTime,
41
-
41
+
42
42
  // FIXME: only needed by GeneralMatrixMatrixTriangular
43
43
  InnerSize = EIGEN_SIZE_MIN_PREFER_FIXED(LhsTraits::ColsAtCompileTime, RhsTraits::RowsAtCompileTime),
44
-
44
+
45
45
  // The storage order is somewhat arbitrary here. The correct one will be determined through the evaluator.
46
46
  Flags = (MaxRowsAtCompileTime==1 && MaxColsAtCompileTime!=1) ? RowMajorBit
47
47
  : (MaxColsAtCompileTime==1 && MaxRowsAtCompileTime!=1) ? 0
@@ -74,10 +74,10 @@ class Product : public ProductImpl<_Lhs,_Rhs,Option,
74
74
  internal::product_type<_Lhs,_Rhs>::ret>::ret>
75
75
  {
76
76
  public:
77
-
77
+
78
78
  typedef _Lhs Lhs;
79
79
  typedef _Rhs Rhs;
80
-
80
+
81
81
  typedef typename ProductImpl<
82
82
  Lhs, Rhs, Option,
83
83
  typename internal::product_promote_storage_type<typename internal::traits<Lhs>::StorageKind,
@@ -90,18 +90,23 @@ class Product : public ProductImpl<_Lhs,_Rhs,Option,
90
90
  typedef typename internal::remove_all<LhsNested>::type LhsNestedCleaned;
91
91
  typedef typename internal::remove_all<RhsNested>::type RhsNestedCleaned;
92
92
 
93
- EIGEN_DEVICE_FUNC Product(const Lhs& lhs, const Rhs& rhs) : m_lhs(lhs), m_rhs(rhs)
93
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
94
+ Product(const Lhs& lhs, const Rhs& rhs) : m_lhs(lhs), m_rhs(rhs)
94
95
  {
95
96
  eigen_assert(lhs.cols() == rhs.rows()
96
97
  && "invalid matrix product"
97
98
  && "if you wanted a coeff-wise or a dot product use the respective explicit functions");
98
99
  }
99
100
 
100
- EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Index rows() const { return m_lhs.rows(); }
101
- EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Index cols() const { return m_rhs.cols(); }
101
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE EIGEN_CONSTEXPR
102
+ Index rows() const EIGEN_NOEXCEPT { return m_lhs.rows(); }
103
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE EIGEN_CONSTEXPR
104
+ Index cols() const EIGEN_NOEXCEPT { return m_rhs.cols(); }
102
105
 
103
- EIGEN_DEVICE_FUNC const LhsNestedCleaned& lhs() const { return m_lhs; }
104
- EIGEN_DEVICE_FUNC const RhsNestedCleaned& rhs() const { return m_rhs; }
106
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
107
+ const LhsNestedCleaned& lhs() const { return m_lhs; }
108
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
109
+ const RhsNestedCleaned& rhs() const { return m_rhs; }
105
110
 
106
111
  protected:
107
112
 
@@ -110,13 +115,13 @@ class Product : public ProductImpl<_Lhs,_Rhs,Option,
110
115
  };
111
116
 
112
117
  namespace internal {
113
-
118
+
114
119
  template<typename Lhs, typename Rhs, int Option, int ProductTag = internal::product_type<Lhs,Rhs>::ret>
115
120
  class dense_product_base
116
121
  : public internal::dense_xpr_base<Product<Lhs,Rhs,Option> >::type
117
122
  {};
118
123
 
119
- /** Convertion to scalar for inner-products */
124
+ /** Conversion to scalar for inner-products */
120
125
  template<typename Lhs, typename Rhs, int Option>
121
126
  class dense_product_base<Lhs, Rhs, Option, InnerProduct>
122
127
  : public internal::dense_xpr_base<Product<Lhs,Rhs,Option> >::type
@@ -126,8 +131,8 @@ class dense_product_base<Lhs, Rhs, Option, InnerProduct>
126
131
  public:
127
132
  using Base::derived;
128
133
  typedef typename Base::Scalar Scalar;
129
-
130
- EIGEN_STRONG_INLINE operator const Scalar() const
134
+
135
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE operator const Scalar() const
131
136
  {
132
137
  return internal::evaluator<ProductXpr>(derived()).coeff(0,0);
133
138
  }
@@ -148,25 +153,25 @@ class ProductImpl<Lhs,Rhs,Option,Dense>
148
153
  : public internal::dense_product_base<Lhs,Rhs,Option>
149
154
  {
150
155
  typedef Product<Lhs, Rhs, Option> Derived;
151
-
156
+
152
157
  public:
153
-
158
+
154
159
  typedef typename internal::dense_product_base<Lhs, Rhs, Option> Base;
155
160
  EIGEN_DENSE_PUBLIC_INTERFACE(Derived)
156
161
  protected:
157
162
  enum {
158
- IsOneByOne = (RowsAtCompileTime == 1 || RowsAtCompileTime == Dynamic) &&
163
+ IsOneByOne = (RowsAtCompileTime == 1 || RowsAtCompileTime == Dynamic) &&
159
164
  (ColsAtCompileTime == 1 || ColsAtCompileTime == Dynamic),
160
165
  EnableCoeff = IsOneByOne || Option==LazyProduct
161
166
  };
162
-
167
+
163
168
  public:
164
-
169
+
165
170
  EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar coeff(Index row, Index col) const
166
171
  {
167
172
  EIGEN_STATIC_ASSERT(EnableCoeff, THIS_METHOD_IS_ONLY_FOR_INNER_OR_LAZY_PRODUCTS);
168
173
  eigen_assert( (Option==LazyProduct) || (this->rows() == 1 && this->cols() == 1) );
169
-
174
+
170
175
  return internal::evaluator<Derived>(derived()).coeff(row,col);
171
176
  }
172
177
 
@@ -174,11 +179,11 @@ class ProductImpl<Lhs,Rhs,Option,Dense>
174
179
  {
175
180
  EIGEN_STATIC_ASSERT(EnableCoeff, THIS_METHOD_IS_ONLY_FOR_INNER_OR_LAZY_PRODUCTS);
176
181
  eigen_assert( (Option==LazyProduct) || (this->rows() == 1 && this->cols() == 1) );
177
-
182
+
178
183
  return internal::evaluator<Derived>(derived()).coeff(i);
179
184
  }
180
-
181
-
185
+
186
+
182
187
  };
183
188
 
184
189
  } // end namespace Eigen