@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
@@ -79,6 +79,8 @@ template<typename ExpressionType> class ForceAlignedAccess;
79
79
  template<typename ExpressionType> class SwapWrapper;
80
80
 
81
81
  template<typename XprType, int BlockRows=Dynamic, int BlockCols=Dynamic, bool InnerPanel = false> class Block;
82
+ template<typename XprType, typename RowIndices, typename ColIndices> class IndexedView;
83
+ template<typename XprType, int Rows=Dynamic, int Cols=Dynamic, int Order=0> class Reshaped;
82
84
 
83
85
  template<typename MatrixType, int Size=Dynamic> class VectorBlock;
84
86
  template<typename MatrixType> class Transpose;
@@ -108,7 +110,7 @@ template<typename _IndicesType> class TranspositionsWrapper;
108
110
  template<typename Derived,
109
111
  int Level = internal::accessors_level<Derived>::has_write_access ? WriteAccessors : ReadOnlyAccessors
110
112
  > class MapBase;
111
- template<int InnerStrideAtCompileTime, int OuterStrideAtCompileTime> class Stride;
113
+ template<int OuterStrideAtCompileTime, int InnerStrideAtCompileTime> class Stride;
112
114
  template<int Value = Dynamic> class InnerStride;
113
115
  template<int Value = Dynamic> class OuterStride;
114
116
  template<typename MatrixType, int MapOptions=Unaligned, typename StrideType = Stride<0,0> > class Map;
@@ -129,6 +131,10 @@ template<typename Derived> class SolverBase;
129
131
  template<typename XprType> class InnerIterator;
130
132
 
131
133
  namespace internal {
134
+ template<typename XprType> class generic_randaccess_stl_iterator;
135
+ template<typename XprType> class pointer_based_stl_iterator;
136
+ template<typename XprType, DirectionType Direction> class subvector_stl_iterator;
137
+ template<typename XprType, DirectionType Direction> class subvector_stl_reverse_iterator;
132
138
  template<typename DecompositionType> struct kernel_retval_base;
133
139
  template<typename DecompositionType> struct kernel_retval;
134
140
  template<typename DecompositionType> struct image_retval_base;
@@ -174,14 +180,15 @@ template<typename LhsScalar, typename RhsScalar, bool ConjLhs=false, bool ConjRh
174
180
  template<typename LhsScalar,typename RhsScalar=LhsScalar> struct scalar_sum_op;
175
181
  template<typename LhsScalar,typename RhsScalar=LhsScalar> struct scalar_difference_op;
176
182
  template<typename LhsScalar,typename RhsScalar=LhsScalar> struct scalar_conj_product_op;
177
- template<typename LhsScalar,typename RhsScalar=LhsScalar> struct scalar_min_op;
178
- template<typename LhsScalar,typename RhsScalar=LhsScalar> struct scalar_max_op;
183
+ template<typename LhsScalar,typename RhsScalar=LhsScalar, int NaNPropagation=PropagateFast> struct scalar_min_op;
184
+ template<typename LhsScalar,typename RhsScalar=LhsScalar, int NaNPropagation=PropagateFast> struct scalar_max_op;
179
185
  template<typename Scalar> struct scalar_opposite_op;
180
186
  template<typename Scalar> struct scalar_conjugate_op;
181
187
  template<typename Scalar> struct scalar_real_op;
182
188
  template<typename Scalar> struct scalar_imag_op;
183
189
  template<typename Scalar> struct scalar_abs_op;
184
190
  template<typename Scalar> struct scalar_abs2_op;
191
+ template<typename LhsScalar,typename RhsScalar=LhsScalar> struct scalar_absolute_difference_op;
185
192
  template<typename Scalar> struct scalar_sqrt_op;
186
193
  template<typename Scalar> struct scalar_rsqrt_op;
187
194
  template<typename Scalar> struct scalar_exp_op;
@@ -198,7 +205,7 @@ template<typename Scalar, typename NewType> struct scalar_cast_op;
198
205
  template<typename Scalar> struct scalar_random_op;
199
206
  template<typename Scalar> struct scalar_constant_op;
200
207
  template<typename Scalar> struct scalar_identity_op;
201
- template<typename Scalar,bool iscpx> struct scalar_sign_op;
208
+ template<typename Scalar,bool is_complex, bool is_integer> struct scalar_sign_op;
202
209
  template<typename Scalar,typename ScalarExponent> struct scalar_pow_op;
203
210
  template<typename LhsScalar,typename RhsScalar=LhsScalar> struct scalar_hypot_op;
204
211
  template<typename LhsScalar,typename RhsScalar=LhsScalar> struct scalar_product_op;
@@ -209,11 +216,27 @@ template<typename Scalar> struct scalar_lgamma_op;
209
216
  template<typename Scalar> struct scalar_digamma_op;
210
217
  template<typename Scalar> struct scalar_erf_op;
211
218
  template<typename Scalar> struct scalar_erfc_op;
219
+ template<typename Scalar> struct scalar_ndtri_op;
212
220
  template<typename Scalar> struct scalar_igamma_op;
213
221
  template<typename Scalar> struct scalar_igammac_op;
214
222
  template<typename Scalar> struct scalar_zeta_op;
215
223
  template<typename Scalar> struct scalar_betainc_op;
216
224
 
225
+ // Bessel functions in SpecialFunctions module
226
+ template<typename Scalar> struct scalar_bessel_i0_op;
227
+ template<typename Scalar> struct scalar_bessel_i0e_op;
228
+ template<typename Scalar> struct scalar_bessel_i1_op;
229
+ template<typename Scalar> struct scalar_bessel_i1e_op;
230
+ template<typename Scalar> struct scalar_bessel_j0_op;
231
+ template<typename Scalar> struct scalar_bessel_y0_op;
232
+ template<typename Scalar> struct scalar_bessel_j1_op;
233
+ template<typename Scalar> struct scalar_bessel_y1_op;
234
+ template<typename Scalar> struct scalar_bessel_k0_op;
235
+ template<typename Scalar> struct scalar_bessel_k0e_op;
236
+ template<typename Scalar> struct scalar_bessel_k1_op;
237
+ template<typename Scalar> struct scalar_bessel_k1e_op;
238
+
239
+
217
240
  } // end namespace internal
218
241
 
219
242
  struct IOFormat;
@@ -251,6 +274,7 @@ template<typename MatrixType> class HouseholderQR;
251
274
  template<typename MatrixType> class ColPivHouseholderQR;
252
275
  template<typename MatrixType> class FullPivHouseholderQR;
253
276
  template<typename MatrixType> class CompleteOrthogonalDecomposition;
277
+ template<typename MatrixType> class SVDBase;
254
278
  template<typename MatrixType, int QRPreconditioner = ColPivHouseholderQRPreconditioner> class JacobiSVD;
255
279
  template<typename MatrixType> class BDCSVD;
256
280
  template<typename MatrixType, int UpLo = Lower> class LLT;
@@ -0,0 +1,186 @@
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
+
11
+ #ifndef EIGEN_INDEXED_VIEW_HELPER_H
12
+ #define EIGEN_INDEXED_VIEW_HELPER_H
13
+
14
+ namespace Eigen {
15
+
16
+ namespace internal {
17
+ struct symbolic_last_tag {};
18
+ }
19
+
20
+ /** \var last
21
+ * \ingroup Core_Module
22
+ *
23
+ * Can be used as a parameter to Eigen::seq and Eigen::seqN functions to symbolically reference the last element/row/columns
24
+ * of the underlying vector or matrix once passed to DenseBase::operator()(const RowIndices&, const ColIndices&).
25
+ *
26
+ * This symbolic placeholder supports standard arithmetic operations.
27
+ *
28
+ * A typical usage example would be:
29
+ * \code
30
+ * using namespace Eigen;
31
+ * using Eigen::last;
32
+ * VectorXd v(n);
33
+ * v(seq(2,last-2)).setOnes();
34
+ * \endcode
35
+ *
36
+ * \sa end
37
+ */
38
+ static const symbolic::SymbolExpr<internal::symbolic_last_tag> last; // PLEASE use Eigen::last instead of Eigen::placeholders::last
39
+
40
+ /** \var lastp1
41
+ * \ingroup Core_Module
42
+ *
43
+ * Can be used as a parameter to Eigen::seq and Eigen::seqN functions to symbolically
44
+ * reference the last+1 element/row/columns of the underlying vector or matrix once
45
+ * passed to DenseBase::operator()(const RowIndices&, const ColIndices&).
46
+ *
47
+ * This symbolic placeholder supports standard arithmetic operations.
48
+ * It is essentially an alias to last+fix<1>.
49
+ *
50
+ * \sa last
51
+ */
52
+ #ifdef EIGEN_PARSED_BY_DOXYGEN
53
+ static const auto lastp1 = last+fix<1>;
54
+ #else
55
+ // Using a FixedExpr<1> expression is important here to make sure the compiler
56
+ // can fully optimize the computation starting indices with zero overhead.
57
+ static const symbolic::AddExpr<symbolic::SymbolExpr<internal::symbolic_last_tag>,symbolic::ValueExpr<Eigen::internal::FixedInt<1> > > lastp1(last+fix<1>());
58
+ #endif
59
+
60
+ namespace internal {
61
+
62
+ // Replace symbolic last/end "keywords" by their true runtime value
63
+ inline Index eval_expr_given_size(Index x, Index /* size */) { return x; }
64
+
65
+ template<int N>
66
+ FixedInt<N> eval_expr_given_size(FixedInt<N> x, Index /*size*/) { return x; }
67
+
68
+ template<typename Derived>
69
+ Index eval_expr_given_size(const symbolic::BaseExpr<Derived> &x, Index size)
70
+ {
71
+ return x.derived().eval(last=size-1);
72
+ }
73
+
74
+ // Extract increment/step at compile time
75
+ template<typename T, typename EnableIf = void> struct get_compile_time_incr {
76
+ enum { value = UndefinedIncr };
77
+ };
78
+
79
+ // Analogue of std::get<0>(x), but tailored for our needs.
80
+ template<typename T>
81
+ EIGEN_CONSTEXPR Index first(const T& x) EIGEN_NOEXCEPT { return x.first(); }
82
+
83
+ // IndexedViewCompatibleType/makeIndexedViewCompatible turn an arbitrary object of type T into something usable by MatrixSlice
84
+ // The generic implementation is a no-op
85
+ template<typename T,int XprSize,typename EnableIf=void>
86
+ struct IndexedViewCompatibleType {
87
+ typedef T type;
88
+ };
89
+
90
+ template<typename T,typename Q>
91
+ const T& makeIndexedViewCompatible(const T& x, Index /*size*/, Q) { return x; }
92
+
93
+ //--------------------------------------------------------------------------------
94
+ // Handling of a single Index
95
+ //--------------------------------------------------------------------------------
96
+
97
+ struct SingleRange {
98
+ enum {
99
+ SizeAtCompileTime = 1
100
+ };
101
+ SingleRange(Index val) : m_value(val) {}
102
+ Index operator[](Index) const { return m_value; }
103
+ static EIGEN_CONSTEXPR Index size() EIGEN_NOEXCEPT { return 1; }
104
+ Index first() const EIGEN_NOEXCEPT { return m_value; }
105
+ Index m_value;
106
+ };
107
+
108
+ template<> struct get_compile_time_incr<SingleRange> {
109
+ enum { value = 1 }; // 1 or 0 ??
110
+ };
111
+
112
+ // Turn a single index into something that looks like an array (i.e., that exposes a .size(), and operator[](int) methods)
113
+ template<typename T, int XprSize>
114
+ struct IndexedViewCompatibleType<T,XprSize,typename internal::enable_if<internal::is_integral<T>::value>::type> {
115
+ // Here we could simply use Array, but maybe it's less work for the compiler to use
116
+ // a simpler wrapper as SingleRange
117
+ //typedef Eigen::Array<Index,1,1> type;
118
+ typedef SingleRange type;
119
+ };
120
+
121
+ template<typename T, int XprSize>
122
+ struct IndexedViewCompatibleType<T, XprSize, typename enable_if<symbolic::is_symbolic<T>::value>::type> {
123
+ typedef SingleRange type;
124
+ };
125
+
126
+
127
+ template<typename T>
128
+ typename enable_if<symbolic::is_symbolic<T>::value,SingleRange>::type
129
+ makeIndexedViewCompatible(const T& id, Index size, SpecializedType) {
130
+ return eval_expr_given_size(id,size);
131
+ }
132
+
133
+ //--------------------------------------------------------------------------------
134
+ // Handling of all
135
+ //--------------------------------------------------------------------------------
136
+
137
+ struct all_t { all_t() {} };
138
+
139
+ // Convert a symbolic 'all' into a usable range type
140
+ template<int XprSize>
141
+ struct AllRange {
142
+ enum { SizeAtCompileTime = XprSize };
143
+ AllRange(Index size = XprSize) : m_size(size) {}
144
+ EIGEN_CONSTEXPR Index operator[](Index i) const EIGEN_NOEXCEPT { return i; }
145
+ EIGEN_CONSTEXPR Index size() const EIGEN_NOEXCEPT { return m_size.value(); }
146
+ EIGEN_CONSTEXPR Index first() const EIGEN_NOEXCEPT { return 0; }
147
+ variable_if_dynamic<Index,XprSize> m_size;
148
+ };
149
+
150
+ template<int XprSize>
151
+ struct IndexedViewCompatibleType<all_t,XprSize> {
152
+ typedef AllRange<XprSize> type;
153
+ };
154
+
155
+ template<typename XprSizeType>
156
+ inline AllRange<get_fixed_value<XprSizeType>::value> makeIndexedViewCompatible(all_t , XprSizeType size, SpecializedType) {
157
+ return AllRange<get_fixed_value<XprSizeType>::value>(size);
158
+ }
159
+
160
+ template<int Size> struct get_compile_time_incr<AllRange<Size> > {
161
+ enum { value = 1 };
162
+ };
163
+
164
+ } // end namespace internal
165
+
166
+
167
+ /** \var all
168
+ * \ingroup Core_Module
169
+ * Can be used as a parameter to DenseBase::operator()(const RowIndices&, const ColIndices&) to index all rows or columns
170
+ */
171
+ static const Eigen::internal::all_t all; // PLEASE use Eigen::all instead of Eigen::placeholders::all
172
+
173
+
174
+ namespace placeholders {
175
+ typedef symbolic::SymbolExpr<internal::symbolic_last_tag> last_t;
176
+ typedef symbolic::AddExpr<symbolic::SymbolExpr<internal::symbolic_last_tag>,symbolic::ValueExpr<Eigen::internal::FixedInt<1> > > end_t;
177
+ typedef Eigen::internal::all_t all_t;
178
+
179
+ EIGEN_DEPRECATED static const all_t all = Eigen::all; // PLEASE use Eigen::all instead of Eigen::placeholders::all
180
+ EIGEN_DEPRECATED static const last_t last = Eigen::last; // PLEASE use Eigen::last instead of Eigen::placeholders::last
181
+ EIGEN_DEPRECATED static const end_t end = Eigen::lastp1; // PLEASE use Eigen::lastp1 instead of Eigen::placeholders::end
182
+ }
183
+
184
+ } // end namespace Eigen
185
+
186
+ #endif // EIGEN_INDEXED_VIEW_HELPER_H
@@ -0,0 +1,272 @@
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
+
11
+ #ifndef EIGEN_INTEGRAL_CONSTANT_H
12
+ #define EIGEN_INTEGRAL_CONSTANT_H
13
+
14
+ namespace Eigen {
15
+
16
+ namespace internal {
17
+
18
+ template<int N> class FixedInt;
19
+ template<int N> class VariableAndFixedInt;
20
+
21
+ /** \internal
22
+ * \class FixedInt
23
+ *
24
+ * This class embeds a compile-time integer \c N.
25
+ *
26
+ * It is similar to c++11 std::integral_constant<int,N> but with some additional features
27
+ * such as:
28
+ * - implicit conversion to int
29
+ * - arithmetic and some bitwise operators: -, +, *, /, %, &, |
30
+ * - c++98/14 compatibility with fix<N> and fix<N>() syntax to define integral constants.
31
+ *
32
+ * It is strongly discouraged to directly deal with this class FixedInt. Instances are expcected to
33
+ * be created by the user using Eigen::fix<N> or Eigen::fix<N>(). In C++98-11, the former syntax does
34
+ * not create a FixedInt<N> instance but rather a point to function that needs to be \em cleaned-up
35
+ * using the generic helper:
36
+ * \code
37
+ * internal::cleanup_index_type<T>::type
38
+ * internal::cleanup_index_type<T,DynamicKey>::type
39
+ * \endcode
40
+ * where T can a FixedInt<N>, a pointer to function FixedInt<N> (*)(), or numerous other integer-like representations.
41
+ * \c DynamicKey is either Dynamic (default) or DynamicIndex and used to identify true compile-time values.
42
+ *
43
+ * For convenience, you can extract the compile-time value \c N in a generic way using the following helper:
44
+ * \code
45
+ * internal::get_fixed_value<T,DefaultVal>::value
46
+ * \endcode
47
+ * that will give you \c N if T equals FixedInt<N> or FixedInt<N> (*)(), and \c DefaultVal if T does not embed any compile-time value (e.g., T==int).
48
+ *
49
+ * \sa fix<N>, class VariableAndFixedInt
50
+ */
51
+ template<int N> class FixedInt
52
+ {
53
+ public:
54
+ static const int value = N;
55
+ EIGEN_CONSTEXPR operator int() const { return value; }
56
+ FixedInt() {}
57
+ FixedInt( VariableAndFixedInt<N> other) {
58
+ #ifndef EIGEN_INTERNAL_DEBUGGING
59
+ EIGEN_UNUSED_VARIABLE(other);
60
+ #endif
61
+ eigen_internal_assert(int(other)==N);
62
+ }
63
+
64
+ FixedInt<-N> operator-() const { return FixedInt<-N>(); }
65
+ template<int M>
66
+ FixedInt<N+M> operator+( FixedInt<M>) const { return FixedInt<N+M>(); }
67
+ template<int M>
68
+ FixedInt<N-M> operator-( FixedInt<M>) const { return FixedInt<N-M>(); }
69
+ template<int M>
70
+ FixedInt<N*M> operator*( FixedInt<M>) const { return FixedInt<N*M>(); }
71
+ template<int M>
72
+ FixedInt<N/M> operator/( FixedInt<M>) const { return FixedInt<N/M>(); }
73
+ template<int M>
74
+ FixedInt<N%M> operator%( FixedInt<M>) const { return FixedInt<N%M>(); }
75
+ template<int M>
76
+ FixedInt<N|M> operator|( FixedInt<M>) const { return FixedInt<N|M>(); }
77
+ template<int M>
78
+ FixedInt<N&M> operator&( FixedInt<M>) const { return FixedInt<N&M>(); }
79
+
80
+ #if EIGEN_HAS_CXX14_VARIABLE_TEMPLATES
81
+ // Needed in C++14 to allow fix<N>():
82
+ FixedInt operator() () const { return *this; }
83
+
84
+ VariableAndFixedInt<N> operator() (int val) const { return VariableAndFixedInt<N>(val); }
85
+ #else
86
+ FixedInt ( FixedInt<N> (*)() ) {}
87
+ #endif
88
+
89
+ #if EIGEN_HAS_CXX11
90
+ FixedInt(std::integral_constant<int,N>) {}
91
+ #endif
92
+ };
93
+
94
+ /** \internal
95
+ * \class VariableAndFixedInt
96
+ *
97
+ * This class embeds both a compile-time integer \c N and a runtime integer.
98
+ * Both values are supposed to be equal unless the compile-time value \c N has a special
99
+ * value meaning that the runtime-value should be used. Depending on the context, this special
100
+ * value can be either Eigen::Dynamic (for positive quantities) or Eigen::DynamicIndex (for
101
+ * quantities that can be negative).
102
+ *
103
+ * It is the return-type of the function Eigen::fix<N>(int), and most of the time this is the only
104
+ * way it is used. It is strongly discouraged to directly deal with instances of VariableAndFixedInt.
105
+ * Indeed, in order to write generic code, it is the responsibility of the callee to properly convert
106
+ * it to either a true compile-time quantity (i.e. a FixedInt<N>), or to a runtime quantity (e.g., an Index)
107
+ * using the following generic helper:
108
+ * \code
109
+ * internal::cleanup_index_type<T>::type
110
+ * internal::cleanup_index_type<T,DynamicKey>::type
111
+ * \endcode
112
+ * where T can be a template instantiation of VariableAndFixedInt or numerous other integer-like representations.
113
+ * \c DynamicKey is either Dynamic (default) or DynamicIndex and used to identify true compile-time values.
114
+ *
115
+ * For convenience, you can also extract the compile-time value \c N using the following helper:
116
+ * \code
117
+ * internal::get_fixed_value<T,DefaultVal>::value
118
+ * \endcode
119
+ * that will give you \c N if T equals VariableAndFixedInt<N>, and \c DefaultVal if T does not embed any compile-time value (e.g., T==int).
120
+ *
121
+ * \sa fix<N>(int), class FixedInt
122
+ */
123
+ template<int N> class VariableAndFixedInt
124
+ {
125
+ public:
126
+ static const int value = N;
127
+ operator int() const { return m_value; }
128
+ VariableAndFixedInt(int val) { m_value = val; }
129
+ protected:
130
+ int m_value;
131
+ };
132
+
133
+ template<typename T, int Default=Dynamic> struct get_fixed_value {
134
+ static const int value = Default;
135
+ };
136
+
137
+ template<int N,int Default> struct get_fixed_value<FixedInt<N>,Default> {
138
+ static const int value = N;
139
+ };
140
+
141
+ #if !EIGEN_HAS_CXX14
142
+ template<int N,int Default> struct get_fixed_value<FixedInt<N> (*)(),Default> {
143
+ static const int value = N;
144
+ };
145
+ #endif
146
+
147
+ template<int N,int Default> struct get_fixed_value<VariableAndFixedInt<N>,Default> {
148
+ static const int value = N ;
149
+ };
150
+
151
+ template<typename T, int N, int Default>
152
+ struct get_fixed_value<variable_if_dynamic<T,N>,Default> {
153
+ static const int value = N;
154
+ };
155
+
156
+ template<typename T> EIGEN_DEVICE_FUNC Index get_runtime_value(const T &x) { return x; }
157
+ #if !EIGEN_HAS_CXX14
158
+ template<int N> EIGEN_DEVICE_FUNC Index get_runtime_value(FixedInt<N> (*)()) { return N; }
159
+ #endif
160
+
161
+ // Cleanup integer/FixedInt/VariableAndFixedInt/etc types:
162
+
163
+ // By default, no cleanup:
164
+ template<typename T, int DynamicKey=Dynamic, typename EnableIf=void> struct cleanup_index_type { typedef T type; };
165
+
166
+ // Convert any integral type (e.g., short, int, unsigned int, etc.) to Eigen::Index
167
+ template<typename T, int DynamicKey> struct cleanup_index_type<T,DynamicKey,typename internal::enable_if<internal::is_integral<T>::value>::type> { typedef Index type; };
168
+
169
+ #if !EIGEN_HAS_CXX14
170
+ // In c++98/c++11, fix<N> is a pointer to function that we better cleanup to a true FixedInt<N>:
171
+ template<int N, int DynamicKey> struct cleanup_index_type<FixedInt<N> (*)(), DynamicKey> { typedef FixedInt<N> type; };
172
+ #endif
173
+
174
+ // If VariableAndFixedInt does not match DynamicKey, then we turn it to a pure compile-time value:
175
+ template<int N, int DynamicKey> struct cleanup_index_type<VariableAndFixedInt<N>, DynamicKey> { typedef FixedInt<N> type; };
176
+ // If VariableAndFixedInt matches DynamicKey, then we turn it to a pure runtime-value (aka Index):
177
+ template<int DynamicKey> struct cleanup_index_type<VariableAndFixedInt<DynamicKey>, DynamicKey> { typedef Index type; };
178
+
179
+ #if EIGEN_HAS_CXX11
180
+ template<int N, int DynamicKey> struct cleanup_index_type<std::integral_constant<int,N>, DynamicKey> { typedef FixedInt<N> type; };
181
+ #endif
182
+
183
+ } // end namespace internal
184
+
185
+ #ifndef EIGEN_PARSED_BY_DOXYGEN
186
+
187
+ #if EIGEN_HAS_CXX14_VARIABLE_TEMPLATES
188
+ template<int N>
189
+ static const internal::FixedInt<N> fix{};
190
+ #else
191
+ template<int N>
192
+ inline internal::FixedInt<N> fix() { return internal::FixedInt<N>(); }
193
+
194
+ // The generic typename T is mandatory. Otherwise, a code like fix<N> could refer to either the function above or this next overload.
195
+ // This way a code like fix<N> can only refer to the previous function.
196
+ template<int N,typename T>
197
+ inline internal::VariableAndFixedInt<N> fix(T val) { return internal::VariableAndFixedInt<N>(internal::convert_index<int>(val)); }
198
+ #endif
199
+
200
+ #else // EIGEN_PARSED_BY_DOXYGEN
201
+
202
+ /** \var fix<N>()
203
+ * \ingroup Core_Module
204
+ *
205
+ * This \em identifier permits to construct an object embedding a compile-time integer \c N.
206
+ *
207
+ * \tparam N the compile-time integer value
208
+ *
209
+ * It is typically used in conjunction with the Eigen::seq and Eigen::seqN functions to pass compile-time values to them:
210
+ * \code
211
+ * seqN(10,fix<4>,fix<-3>) // <=> [10 7 4 1]
212
+ * \endcode
213
+ *
214
+ * See also the function fix(int) to pass both a compile-time and runtime value.
215
+ *
216
+ * In c++14, it is implemented as:
217
+ * \code
218
+ * template<int N> static const internal::FixedInt<N> fix{};
219
+ * \endcode
220
+ * where internal::FixedInt<N> is an internal template class similar to
221
+ * <a href="http://en.cppreference.com/w/cpp/types/integral_constant">\c std::integral_constant </a><tt> <int,N> </tt>
222
+ * Here, \c fix<N> is thus an object of type \c internal::FixedInt<N>.
223
+ *
224
+ * In c++98/11, it is implemented as a function:
225
+ * \code
226
+ * template<int N> inline internal::FixedInt<N> fix();
227
+ * \endcode
228
+ * Here internal::FixedInt<N> is thus a pointer to function.
229
+ *
230
+ * If for some reason you want a true object in c++98 then you can write: \code fix<N>() \endcode which is also valid in c++14.
231
+ *
232
+ * \sa fix<N>(int), seq, seqN
233
+ */
234
+ template<int N>
235
+ static const auto fix();
236
+
237
+ /** \fn fix<N>(int)
238
+ * \ingroup Core_Module
239
+ *
240
+ * This function returns an object embedding both a compile-time integer \c N, and a fallback runtime value \a val.
241
+ *
242
+ * \tparam N the compile-time integer value
243
+ * \param val the fallback runtime integer value
244
+ *
245
+ * This function is a more general version of the \ref fix identifier/function that can be used in template code
246
+ * where the compile-time value could turn out to actually mean "undefined at compile-time". For positive integers
247
+ * such as a size or a dimension, this case is identified by Eigen::Dynamic, whereas runtime signed integers
248
+ * (e.g., an increment/stride) are identified as Eigen::DynamicIndex. In such a case, the runtime value \a val
249
+ * will be used as a fallback.
250
+ *
251
+ * A typical use case would be:
252
+ * \code
253
+ * template<typename Derived> void foo(const MatrixBase<Derived> &mat) {
254
+ * const int N = Derived::RowsAtCompileTime==Dynamic ? Dynamic : Derived::RowsAtCompileTime/2;
255
+ * const int n = mat.rows()/2;
256
+ * ... mat( seqN(0,fix<N>(n) ) ...;
257
+ * }
258
+ * \endcode
259
+ * In this example, the function Eigen::seqN knows that the second argument is expected to be a size.
260
+ * If the passed compile-time value N equals Eigen::Dynamic, then the proxy object returned by fix will be dissmissed, and converted to an Eigen::Index of value \c n.
261
+ * Otherwise, the runtime-value \c n will be dissmissed, and the returned ArithmeticSequence will be of the exact same type as <tt> seqN(0,fix<N>) </tt>.
262
+ *
263
+ * \sa fix, seqN, class ArithmeticSequence
264
+ */
265
+ template<int N>
266
+ static const auto fix(int val);
267
+
268
+ #endif // EIGEN_PARSED_BY_DOXYGEN
269
+
270
+ } // end namespace Eigen
271
+
272
+ #endif // EIGEN_INTEGRAL_CONSTANT_H
@@ -55,7 +55,11 @@
55
55
 
56
56
 
57
57
  #if defined EIGEN_USE_MKL
58
- # include <mkl.h>
58
+ # if (!defined MKL_DIRECT_CALL) && (!defined EIGEN_MKL_NO_DIRECT_CALL)
59
+ # define MKL_DIRECT_CALL
60
+ # define MKL_DIRECT_CALL_JUST_SET
61
+ # endif
62
+ # include <mkl.h>
59
63
  /*Check IMKL version for compatibility: < 10.3 is not usable with Eigen*/
60
64
  # ifndef INTEL_MKL_VERSION
61
65
  # undef EIGEN_USE_MKL /* INTEL_MKL_VERSION is not even defined on older versions */
@@ -69,6 +73,9 @@
69
73
  # undef EIGEN_USE_MKL_VML
70
74
  # undef EIGEN_USE_LAPACKE_STRICT
71
75
  # undef EIGEN_USE_LAPACKE
76
+ # ifdef MKL_DIRECT_CALL_JUST_SET
77
+ # undef MKL_DIRECT_CALL
78
+ # endif
72
79
  # endif
73
80
  #endif
74
81