ruby-eigen 0.0.9 → 0.0.10.pre1

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 (293) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +22 -0
  3. data/README.md +21 -0
  4. data/ext/eigen/eigen3/COPYING.BSD +26 -0
  5. data/ext/eigen/eigen3/COPYING.MPL2 +373 -0
  6. data/ext/eigen/eigen3/COPYING.README +18 -0
  7. data/ext/eigen/eigen3/Eigen/Array +11 -0
  8. data/ext/eigen/eigen3/Eigen/Cholesky +32 -0
  9. data/ext/eigen/eigen3/Eigen/CholmodSupport +45 -0
  10. data/ext/eigen/eigen3/Eigen/Core +376 -0
  11. data/ext/eigen/eigen3/Eigen/Dense +7 -0
  12. data/ext/eigen/eigen3/Eigen/Eigen +2 -0
  13. data/ext/eigen/eigen3/Eigen/Eigen2Support +95 -0
  14. data/ext/eigen/eigen3/Eigen/Eigenvalues +48 -0
  15. data/ext/eigen/eigen3/Eigen/Geometry +63 -0
  16. data/ext/eigen/eigen3/Eigen/Householder +23 -0
  17. data/ext/eigen/eigen3/Eigen/IterativeLinearSolvers +40 -0
  18. data/ext/eigen/eigen3/Eigen/Jacobi +26 -0
  19. data/ext/eigen/eigen3/Eigen/LU +41 -0
  20. data/ext/eigen/eigen3/Eigen/LeastSquares +32 -0
  21. data/ext/eigen/eigen3/Eigen/MetisSupport +28 -0
  22. data/ext/eigen/eigen3/Eigen/PaStiXSupport +46 -0
  23. data/ext/eigen/eigen3/Eigen/PardisoSupport +30 -0
  24. data/ext/eigen/eigen3/Eigen/QR +45 -0
  25. data/ext/eigen/eigen3/Eigen/QtAlignedMalloc +34 -0
  26. data/ext/eigen/eigen3/Eigen/SPQRSupport +29 -0
  27. data/ext/eigen/eigen3/Eigen/SVD +37 -0
  28. data/ext/eigen/eigen3/Eigen/Sparse +27 -0
  29. data/ext/eigen/eigen3/Eigen/SparseCore +64 -0
  30. data/ext/eigen/eigen3/Eigen/SparseLU +49 -0
  31. data/ext/eigen/eigen3/Eigen/SparseQR +33 -0
  32. data/ext/eigen/eigen3/Eigen/StdDeque +27 -0
  33. data/ext/eigen/eigen3/Eigen/StdList +26 -0
  34. data/ext/eigen/eigen3/Eigen/StdVector +27 -0
  35. data/ext/eigen/eigen3/Eigen/SuperLUSupport +59 -0
  36. data/ext/eigen/eigen3/Eigen/UmfPackSupport +36 -0
  37. data/ext/eigen/eigen3/Eigen/src/Cholesky/LDLT.h +611 -0
  38. data/ext/eigen/eigen3/Eigen/src/Cholesky/LLT.h +498 -0
  39. data/ext/eigen/eigen3/Eigen/src/Cholesky/LLT_MKL.h +102 -0
  40. data/ext/eigen/eigen3/Eigen/src/CholmodSupport/CholmodSupport.h +607 -0
  41. data/ext/eigen/eigen3/Eigen/src/Core/Array.h +323 -0
  42. data/ext/eigen/eigen3/Eigen/src/Core/ArrayBase.h +226 -0
  43. data/ext/eigen/eigen3/Eigen/src/Core/ArrayWrapper.h +264 -0
  44. data/ext/eigen/eigen3/Eigen/src/Core/Assign.h +590 -0
  45. data/ext/eigen/eigen3/Eigen/src/Core/Assign_MKL.h +224 -0
  46. data/ext/eigen/eigen3/Eigen/src/Core/BandMatrix.h +334 -0
  47. data/ext/eigen/eigen3/Eigen/src/Core/Block.h +406 -0
  48. data/ext/eigen/eigen3/Eigen/src/Core/BooleanRedux.h +154 -0
  49. data/ext/eigen/eigen3/Eigen/src/Core/CommaInitializer.h +154 -0
  50. data/ext/eigen/eigen3/Eigen/src/Core/CoreIterators.h +61 -0
  51. data/ext/eigen/eigen3/Eigen/src/Core/CwiseBinaryOp.h +230 -0
  52. data/ext/eigen/eigen3/Eigen/src/Core/CwiseNullaryOp.h +864 -0
  53. data/ext/eigen/eigen3/Eigen/src/Core/CwiseUnaryOp.h +126 -0
  54. data/ext/eigen/eigen3/Eigen/src/Core/CwiseUnaryView.h +139 -0
  55. data/ext/eigen/eigen3/Eigen/src/Core/DenseBase.h +521 -0
  56. data/ext/eigen/eigen3/Eigen/src/Core/DenseCoeffsBase.h +754 -0
  57. data/ext/eigen/eigen3/Eigen/src/Core/DenseStorage.h +434 -0
  58. data/ext/eigen/eigen3/Eigen/src/Core/Diagonal.h +237 -0
  59. data/ext/eigen/eigen3/Eigen/src/Core/DiagonalMatrix.h +313 -0
  60. data/ext/eigen/eigen3/Eigen/src/Core/DiagonalProduct.h +131 -0
  61. data/ext/eigen/eigen3/Eigen/src/Core/Dot.h +263 -0
  62. data/ext/eigen/eigen3/Eigen/src/Core/EigenBase.h +131 -0
  63. data/ext/eigen/eigen3/Eigen/src/Core/Flagged.h +140 -0
  64. data/ext/eigen/eigen3/Eigen/src/Core/ForceAlignedAccess.h +146 -0
  65. data/ext/eigen/eigen3/Eigen/src/Core/Functors.h +1026 -0
  66. data/ext/eigen/eigen3/Eigen/src/Core/Fuzzy.h +150 -0
  67. data/ext/eigen/eigen3/Eigen/src/Core/GeneralProduct.h +635 -0
  68. data/ext/eigen/eigen3/Eigen/src/Core/GenericPacketMath.h +350 -0
  69. data/ext/eigen/eigen3/Eigen/src/Core/GlobalFunctions.h +92 -0
  70. data/ext/eigen/eigen3/Eigen/src/Core/IO.h +250 -0
  71. data/ext/eigen/eigen3/Eigen/src/Core/Map.h +192 -0
  72. data/ext/eigen/eigen3/Eigen/src/Core/MapBase.h +247 -0
  73. data/ext/eigen/eigen3/Eigen/src/Core/MathFunctions.h +768 -0
  74. data/ext/eigen/eigen3/Eigen/src/Core/Matrix.h +420 -0
  75. data/ext/eigen/eigen3/Eigen/src/Core/MatrixBase.h +563 -0
  76. data/ext/eigen/eigen3/Eigen/src/Core/NestByValue.h +111 -0
  77. data/ext/eigen/eigen3/Eigen/src/Core/NoAlias.h +134 -0
  78. data/ext/eigen/eigen3/Eigen/src/Core/NumTraits.h +150 -0
  79. data/ext/eigen/eigen3/Eigen/src/Core/PermutationMatrix.h +721 -0
  80. data/ext/eigen/eigen3/Eigen/src/Core/PlainObjectBase.h +822 -0
  81. data/ext/eigen/eigen3/Eigen/src/Core/ProductBase.h +290 -0
  82. data/ext/eigen/eigen3/Eigen/src/Core/Random.h +152 -0
  83. data/ext/eigen/eigen3/Eigen/src/Core/Redux.h +409 -0
  84. data/ext/eigen/eigen3/Eigen/src/Core/Ref.h +278 -0
  85. data/ext/eigen/eigen3/Eigen/src/Core/Replicate.h +177 -0
  86. data/ext/eigen/eigen3/Eigen/src/Core/ReturnByValue.h +99 -0
  87. data/ext/eigen/eigen3/Eigen/src/Core/Reverse.h +224 -0
  88. data/ext/eigen/eigen3/Eigen/src/Core/Select.h +162 -0
  89. data/ext/eigen/eigen3/Eigen/src/Core/SelfAdjointView.h +314 -0
  90. data/ext/eigen/eigen3/Eigen/src/Core/SelfCwiseBinaryOp.h +191 -0
  91. data/ext/eigen/eigen3/Eigen/src/Core/SolveTriangular.h +260 -0
  92. data/ext/eigen/eigen3/Eigen/src/Core/StableNorm.h +203 -0
  93. data/ext/eigen/eigen3/Eigen/src/Core/Stride.h +108 -0
  94. data/ext/eigen/eigen3/Eigen/src/Core/Swap.h +126 -0
  95. data/ext/eigen/eigen3/Eigen/src/Core/Transpose.h +419 -0
  96. data/ext/eigen/eigen3/Eigen/src/Core/Transpositions.h +436 -0
  97. data/ext/eigen/eigen3/Eigen/src/Core/TriangularMatrix.h +839 -0
  98. data/ext/eigen/eigen3/Eigen/src/Core/VectorBlock.h +95 -0
  99. data/ext/eigen/eigen3/Eigen/src/Core/VectorwiseOp.h +642 -0
  100. data/ext/eigen/eigen3/Eigen/src/Core/Visitor.h +237 -0
  101. data/ext/eigen/eigen3/Eigen/src/Core/arch/AltiVec/Complex.h +217 -0
  102. data/ext/eigen/eigen3/Eigen/src/Core/arch/AltiVec/PacketMath.h +501 -0
  103. data/ext/eigen/eigen3/Eigen/src/Core/arch/Default/Settings.h +49 -0
  104. data/ext/eigen/eigen3/Eigen/src/Core/arch/NEON/Complex.h +253 -0
  105. data/ext/eigen/eigen3/Eigen/src/Core/arch/NEON/PacketMath.h +420 -0
  106. data/ext/eigen/eigen3/Eigen/src/Core/arch/SSE/Complex.h +442 -0
  107. data/ext/eigen/eigen3/Eigen/src/Core/arch/SSE/MathFunctions.h +475 -0
  108. data/ext/eigen/eigen3/Eigen/src/Core/arch/SSE/PacketMath.h +649 -0
  109. data/ext/eigen/eigen3/Eigen/src/Core/products/CoeffBasedProduct.h +476 -0
  110. data/ext/eigen/eigen3/Eigen/src/Core/products/GeneralBlockPanelKernel.h +1341 -0
  111. data/ext/eigen/eigen3/Eigen/src/Core/products/GeneralMatrixMatrix.h +427 -0
  112. data/ext/eigen/eigen3/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +278 -0
  113. data/ext/eigen/eigen3/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_MKL.h +146 -0
  114. data/ext/eigen/eigen3/Eigen/src/Core/products/GeneralMatrixMatrix_MKL.h +118 -0
  115. data/ext/eigen/eigen3/Eigen/src/Core/products/GeneralMatrixVector.h +566 -0
  116. data/ext/eigen/eigen3/Eigen/src/Core/products/GeneralMatrixVector_MKL.h +131 -0
  117. data/ext/eigen/eigen3/Eigen/src/Core/products/Parallelizer.h +162 -0
  118. data/ext/eigen/eigen3/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +436 -0
  119. data/ext/eigen/eigen3/Eigen/src/Core/products/SelfadjointMatrixMatrix_MKL.h +295 -0
  120. data/ext/eigen/eigen3/Eigen/src/Core/products/SelfadjointMatrixVector.h +281 -0
  121. data/ext/eigen/eigen3/Eigen/src/Core/products/SelfadjointMatrixVector_MKL.h +114 -0
  122. data/ext/eigen/eigen3/Eigen/src/Core/products/SelfadjointProduct.h +123 -0
  123. data/ext/eigen/eigen3/Eigen/src/Core/products/SelfadjointRank2Update.h +93 -0
  124. data/ext/eigen/eigen3/Eigen/src/Core/products/TriangularMatrixMatrix.h +427 -0
  125. data/ext/eigen/eigen3/Eigen/src/Core/products/TriangularMatrixMatrix_MKL.h +309 -0
  126. data/ext/eigen/eigen3/Eigen/src/Core/products/TriangularMatrixVector.h +348 -0
  127. data/ext/eigen/eigen3/Eigen/src/Core/products/TriangularMatrixVector_MKL.h +247 -0
  128. data/ext/eigen/eigen3/Eigen/src/Core/products/TriangularSolverMatrix.h +332 -0
  129. data/ext/eigen/eigen3/Eigen/src/Core/products/TriangularSolverMatrix_MKL.h +155 -0
  130. data/ext/eigen/eigen3/Eigen/src/Core/products/TriangularSolverVector.h +139 -0
  131. data/ext/eigen/eigen3/Eigen/src/Core/util/BlasUtil.h +264 -0
  132. data/ext/eigen/eigen3/Eigen/src/Core/util/Constants.h +451 -0
  133. data/ext/eigen/eigen3/Eigen/src/Core/util/DisableStupidWarnings.h +40 -0
  134. data/ext/eigen/eigen3/Eigen/src/Core/util/ForwardDeclarations.h +302 -0
  135. data/ext/eigen/eigen3/Eigen/src/Core/util/MKL_support.h +158 -0
  136. data/ext/eigen/eigen3/Eigen/src/Core/util/Macros.h +451 -0
  137. data/ext/eigen/eigen3/Eigen/src/Core/util/Memory.h +977 -0
  138. data/ext/eigen/eigen3/Eigen/src/Core/util/Meta.h +243 -0
  139. data/ext/eigen/eigen3/Eigen/src/Core/util/NonMPL2.h +3 -0
  140. data/ext/eigen/eigen3/Eigen/src/Core/util/ReenableStupidWarnings.h +14 -0
  141. data/ext/eigen/eigen3/Eigen/src/Core/util/StaticAssert.h +208 -0
  142. data/ext/eigen/eigen3/Eigen/src/Core/util/XprHelper.h +469 -0
  143. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Block.h +126 -0
  144. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Cwise.h +192 -0
  145. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/CwiseOperators.h +298 -0
  146. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Geometry/AlignedBox.h +159 -0
  147. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Geometry/All.h +115 -0
  148. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Geometry/AngleAxis.h +214 -0
  149. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Geometry/Hyperplane.h +254 -0
  150. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Geometry/ParametrizedLine.h +141 -0
  151. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Geometry/Quaternion.h +495 -0
  152. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Geometry/Rotation2D.h +145 -0
  153. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Geometry/RotationBase.h +123 -0
  154. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Geometry/Scaling.h +167 -0
  155. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Geometry/Transform.h +786 -0
  156. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Geometry/Translation.h +184 -0
  157. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/LU.h +120 -0
  158. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Lazy.h +71 -0
  159. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/LeastSquares.h +169 -0
  160. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Macros.h +20 -0
  161. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/MathFunctions.h +57 -0
  162. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Memory.h +45 -0
  163. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Meta.h +75 -0
  164. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Minor.h +117 -0
  165. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/QR.h +67 -0
  166. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/SVD.h +637 -0
  167. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/TriangularSolver.h +42 -0
  168. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/VectorBlock.h +94 -0
  169. data/ext/eigen/eigen3/Eigen/src/Eigenvalues/ComplexEigenSolver.h +341 -0
  170. data/ext/eigen/eigen3/Eigen/src/Eigenvalues/ComplexSchur.h +456 -0
  171. data/ext/eigen/eigen3/Eigen/src/Eigenvalues/ComplexSchur_MKL.h +94 -0
  172. data/ext/eigen/eigen3/Eigen/src/Eigenvalues/EigenSolver.h +607 -0
  173. data/ext/eigen/eigen3/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h +350 -0
  174. data/ext/eigen/eigen3/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h +227 -0
  175. data/ext/eigen/eigen3/Eigen/src/Eigenvalues/HessenbergDecomposition.h +373 -0
  176. data/ext/eigen/eigen3/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h +160 -0
  177. data/ext/eigen/eigen3/Eigen/src/Eigenvalues/RealQZ.h +624 -0
  178. data/ext/eigen/eigen3/Eigen/src/Eigenvalues/RealSchur.h +525 -0
  179. data/ext/eigen/eigen3/Eigen/src/Eigenvalues/RealSchur_MKL.h +83 -0
  180. data/ext/eigen/eigen3/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +801 -0
  181. data/ext/eigen/eigen3/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_MKL.h +92 -0
  182. data/ext/eigen/eigen3/Eigen/src/Eigenvalues/Tridiagonalization.h +557 -0
  183. data/ext/eigen/eigen3/Eigen/src/Geometry/AlignedBox.h +392 -0
  184. data/ext/eigen/eigen3/Eigen/src/Geometry/AngleAxis.h +233 -0
  185. data/ext/eigen/eigen3/Eigen/src/Geometry/EulerAngles.h +104 -0
  186. data/ext/eigen/eigen3/Eigen/src/Geometry/Homogeneous.h +307 -0
  187. data/ext/eigen/eigen3/Eigen/src/Geometry/Hyperplane.h +280 -0
  188. data/ext/eigen/eigen3/Eigen/src/Geometry/OrthoMethods.h +218 -0
  189. data/ext/eigen/eigen3/Eigen/src/Geometry/ParametrizedLine.h +195 -0
  190. data/ext/eigen/eigen3/Eigen/src/Geometry/Quaternion.h +776 -0
  191. data/ext/eigen/eigen3/Eigen/src/Geometry/Rotation2D.h +160 -0
  192. data/ext/eigen/eigen3/Eigen/src/Geometry/RotationBase.h +206 -0
  193. data/ext/eigen/eigen3/Eigen/src/Geometry/Scaling.h +166 -0
  194. data/ext/eigen/eigen3/Eigen/src/Geometry/Transform.h +1455 -0
  195. data/ext/eigen/eigen3/Eigen/src/Geometry/Translation.h +206 -0
  196. data/ext/eigen/eigen3/Eigen/src/Geometry/Umeyama.h +177 -0
  197. data/ext/eigen/eigen3/Eigen/src/Geometry/arch/Geometry_SSE.h +115 -0
  198. data/ext/eigen/eigen3/Eigen/src/Householder/BlockHouseholder.h +68 -0
  199. data/ext/eigen/eigen3/Eigen/src/Householder/Householder.h +171 -0
  200. data/ext/eigen/eigen3/Eigen/src/Householder/HouseholderSequence.h +441 -0
  201. data/ext/eigen/eigen3/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +149 -0
  202. data/ext/eigen/eigen3/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +263 -0
  203. data/ext/eigen/eigen3/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +256 -0
  204. data/ext/eigen/eigen3/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +282 -0
  205. data/ext/eigen/eigen3/Eigen/src/Jacobi/Jacobi.h +433 -0
  206. data/ext/eigen/eigen3/Eigen/src/LU/Determinant.h +101 -0
  207. data/ext/eigen/eigen3/Eigen/src/LU/FullPivLU.h +751 -0
  208. data/ext/eigen/eigen3/Eigen/src/LU/Inverse.h +400 -0
  209. data/ext/eigen/eigen3/Eigen/src/LU/PartialPivLU.h +509 -0
  210. data/ext/eigen/eigen3/Eigen/src/LU/PartialPivLU_MKL.h +85 -0
  211. data/ext/eigen/eigen3/Eigen/src/LU/arch/Inverse_SSE.h +329 -0
  212. data/ext/eigen/eigen3/Eigen/src/MetisSupport/MetisSupport.h +137 -0
  213. data/ext/eigen/eigen3/Eigen/src/OrderingMethods/Amd.h +444 -0
  214. data/ext/eigen/eigen3/Eigen/src/OrderingMethods/Eigen_Colamd.h +1850 -0
  215. data/ext/eigen/eigen3/Eigen/src/PaStiXSupport/PaStiXSupport.h +721 -0
  216. data/ext/eigen/eigen3/Eigen/src/PardisoSupport/PardisoSupport.h +592 -0
  217. data/ext/eigen/eigen3/Eigen/src/QR/ColPivHouseholderQR.h +580 -0
  218. data/ext/eigen/eigen3/Eigen/src/QR/ColPivHouseholderQR_MKL.h +99 -0
  219. data/ext/eigen/eigen3/Eigen/src/QR/FullPivHouseholderQR.h +622 -0
  220. data/ext/eigen/eigen3/Eigen/src/QR/HouseholderQR.h +388 -0
  221. data/ext/eigen/eigen3/Eigen/src/QR/HouseholderQR_MKL.h +71 -0
  222. data/ext/eigen/eigen3/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h +338 -0
  223. data/ext/eigen/eigen3/Eigen/src/SVD/JacobiSVD.h +976 -0
  224. data/ext/eigen/eigen3/Eigen/src/SVD/JacobiSVD_MKL.h +92 -0
  225. data/ext/eigen/eigen3/Eigen/src/SVD/UpperBidiagonalization.h +148 -0
  226. data/ext/eigen/eigen3/Eigen/src/SparseCholesky/SimplicialCholesky.h +671 -0
  227. data/ext/eigen/eigen3/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +199 -0
  228. data/ext/eigen/eigen3/Eigen/src/SparseCore/AmbiVector.h +373 -0
  229. data/ext/eigen/eigen3/Eigen/src/SparseCore/CompressedStorage.h +233 -0
  230. data/ext/eigen/eigen3/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +245 -0
  231. data/ext/eigen/eigen3/Eigen/src/SparseCore/MappedSparseMatrix.h +181 -0
  232. data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseBlock.h +537 -0
  233. data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseColEtree.h +206 -0
  234. data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +325 -0
  235. data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +163 -0
  236. data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseDenseProduct.h +311 -0
  237. data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseDiagonalProduct.h +196 -0
  238. data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseDot.h +101 -0
  239. data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseFuzzy.h +26 -0
  240. data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseMatrix.h +1262 -0
  241. data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseMatrixBase.h +461 -0
  242. data/ext/eigen/eigen3/Eigen/src/SparseCore/SparsePermutation.h +148 -0
  243. data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseProduct.h +188 -0
  244. data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseRedux.h +45 -0
  245. data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseSelfAdjointView.h +507 -0
  246. data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseSparseProductWithPruning.h +150 -0
  247. data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseTranspose.h +63 -0
  248. data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseTriangularView.h +179 -0
  249. data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseUtil.h +172 -0
  250. data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseVector.h +448 -0
  251. data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseView.h +99 -0
  252. data/ext/eigen/eigen3/Eigen/src/SparseCore/TriangularSolver.h +334 -0
  253. data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU.h +806 -0
  254. data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLUImpl.h +66 -0
  255. data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_Memory.h +227 -0
  256. data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_Structs.h +111 -0
  257. data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h +298 -0
  258. data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_Utils.h +80 -0
  259. data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_column_bmod.h +180 -0
  260. data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_column_dfs.h +177 -0
  261. data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h +106 -0
  262. data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_gemm_kernel.h +279 -0
  263. data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h +127 -0
  264. data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_kernel_bmod.h +130 -0
  265. data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_panel_bmod.h +223 -0
  266. data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_panel_dfs.h +258 -0
  267. data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_pivotL.h +137 -0
  268. data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_pruneL.h +135 -0
  269. data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_relax_snode.h +83 -0
  270. data/ext/eigen/eigen3/Eigen/src/SparseQR/SparseQR.h +714 -0
  271. data/ext/eigen/eigen3/Eigen/src/StlSupport/StdDeque.h +134 -0
  272. data/ext/eigen/eigen3/Eigen/src/StlSupport/StdList.h +114 -0
  273. data/ext/eigen/eigen3/Eigen/src/StlSupport/StdVector.h +126 -0
  274. data/ext/eigen/eigen3/Eigen/src/StlSupport/details.h +84 -0
  275. data/ext/eigen/eigen3/Eigen/src/SuperLUSupport/SuperLUSupport.h +1026 -0
  276. data/ext/eigen/eigen3/Eigen/src/UmfPackSupport/UmfPackSupport.h +474 -0
  277. data/ext/eigen/eigen3/Eigen/src/misc/Image.h +84 -0
  278. data/ext/eigen/eigen3/Eigen/src/misc/Kernel.h +81 -0
  279. data/ext/eigen/eigen3/Eigen/src/misc/Solve.h +76 -0
  280. data/ext/eigen/eigen3/Eigen/src/misc/SparseSolve.h +128 -0
  281. data/ext/eigen/eigen3/Eigen/src/misc/blas.h +658 -0
  282. data/ext/eigen/eigen3/Eigen/src/plugins/ArrayCwiseBinaryOps.h +253 -0
  283. data/ext/eigen/eigen3/Eigen/src/plugins/ArrayCwiseUnaryOps.h +187 -0
  284. data/ext/eigen/eigen3/Eigen/src/plugins/BlockMethods.h +935 -0
  285. data/ext/eigen/eigen3/Eigen/src/plugins/CommonCwiseBinaryOps.h +46 -0
  286. data/ext/eigen/eigen3/Eigen/src/plugins/CommonCwiseUnaryOps.h +172 -0
  287. data/ext/eigen/eigen3/Eigen/src/plugins/MatrixCwiseBinaryOps.h +143 -0
  288. data/ext/eigen/eigen3/Eigen/src/plugins/MatrixCwiseUnaryOps.h +52 -0
  289. data/ext/eigen/eigen3/signature_of_eigen3_matrix_library +1 -0
  290. data/ext/eigen/eigen_wrap.cxx +19420 -10396
  291. data/ext/eigen/extconf.rb +37 -2
  292. data/lib/eigen.rb +146 -3
  293. metadata +294 -7
@@ -0,0 +1,469 @@
1
+ // This file is part of Eigen, a lightweight C++ template library
2
+ // for linear algebra.
3
+ //
4
+ // Copyright (C) 2008 Gael Guennebaud <gael.guennebaud@inria.fr>
5
+ // Copyright (C) 2006-2008 Benoit Jacob <jacob.benoit.1@gmail.com>
6
+ //
7
+ // This Source Code Form is subject to the terms of the Mozilla
8
+ // Public License v. 2.0. If a copy of the MPL was not distributed
9
+ // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
10
+
11
+ #ifndef EIGEN_XPRHELPER_H
12
+ #define EIGEN_XPRHELPER_H
13
+
14
+ // just a workaround because GCC seems to not really like empty structs
15
+ // FIXME: gcc 4.3 generates bad code when strict-aliasing is enabled
16
+ // so currently we simply disable this optimization for gcc 4.3
17
+ #if (defined __GNUG__) && !((__GNUC__==4) && (__GNUC_MINOR__==3))
18
+ #define EIGEN_EMPTY_STRUCT_CTOR(X) \
19
+ EIGEN_STRONG_INLINE X() {} \
20
+ EIGEN_STRONG_INLINE X(const X& ) {}
21
+ #else
22
+ #define EIGEN_EMPTY_STRUCT_CTOR(X)
23
+ #endif
24
+
25
+ namespace Eigen {
26
+
27
+ typedef EIGEN_DEFAULT_DENSE_INDEX_TYPE DenseIndex;
28
+
29
+ namespace internal {
30
+
31
+ //classes inheriting no_assignment_operator don't generate a default operator=.
32
+ class no_assignment_operator
33
+ {
34
+ private:
35
+ no_assignment_operator& operator=(const no_assignment_operator&);
36
+ };
37
+
38
+ /** \internal return the index type with the largest number of bits */
39
+ template<typename I1, typename I2>
40
+ struct promote_index_type
41
+ {
42
+ typedef typename conditional<(sizeof(I1)<sizeof(I2)), I2, I1>::type type;
43
+ };
44
+
45
+ /** \internal If the template parameter Value is Dynamic, this class is just a wrapper around a T variable that
46
+ * can be accessed using value() and setValue().
47
+ * Otherwise, this class is an empty structure and value() just returns the template parameter Value.
48
+ */
49
+ template<typename T, int Value> class variable_if_dynamic
50
+ {
51
+ public:
52
+ EIGEN_EMPTY_STRUCT_CTOR(variable_if_dynamic)
53
+ explicit variable_if_dynamic(T v) { EIGEN_ONLY_USED_FOR_DEBUG(v); assert(v == T(Value)); }
54
+ static T value() { return T(Value); }
55
+ void setValue(T) {}
56
+ };
57
+
58
+ template<typename T> class variable_if_dynamic<T, Dynamic>
59
+ {
60
+ T m_value;
61
+ variable_if_dynamic() { assert(false); }
62
+ public:
63
+ explicit variable_if_dynamic(T value) : m_value(value) {}
64
+ T value() const { return m_value; }
65
+ void setValue(T value) { m_value = value; }
66
+ };
67
+
68
+ /** \internal like variable_if_dynamic but for DynamicIndex
69
+ */
70
+ template<typename T, int Value> class variable_if_dynamicindex
71
+ {
72
+ public:
73
+ EIGEN_EMPTY_STRUCT_CTOR(variable_if_dynamicindex)
74
+ explicit variable_if_dynamicindex(T v) { EIGEN_ONLY_USED_FOR_DEBUG(v); assert(v == T(Value)); }
75
+ static T value() { return T(Value); }
76
+ void setValue(T) {}
77
+ };
78
+
79
+ template<typename T> class variable_if_dynamicindex<T, DynamicIndex>
80
+ {
81
+ T m_value;
82
+ variable_if_dynamicindex() { assert(false); }
83
+ public:
84
+ explicit variable_if_dynamicindex(T value) : m_value(value) {}
85
+ T value() const { return m_value; }
86
+ void setValue(T value) { m_value = value; }
87
+ };
88
+
89
+ template<typename T> struct functor_traits
90
+ {
91
+ enum
92
+ {
93
+ Cost = 10,
94
+ PacketAccess = false,
95
+ IsRepeatable = false
96
+ };
97
+ };
98
+
99
+ template<typename T> struct packet_traits;
100
+
101
+ template<typename T> struct unpacket_traits
102
+ {
103
+ typedef T type;
104
+ enum {size=1};
105
+ };
106
+
107
+ template<typename _Scalar, int _Rows, int _Cols,
108
+ int _Options = AutoAlign |
109
+ ( (_Rows==1 && _Cols!=1) ? RowMajor
110
+ : (_Cols==1 && _Rows!=1) ? ColMajor
111
+ : EIGEN_DEFAULT_MATRIX_STORAGE_ORDER_OPTION ),
112
+ int _MaxRows = _Rows,
113
+ int _MaxCols = _Cols
114
+ > class make_proper_matrix_type
115
+ {
116
+ enum {
117
+ IsColVector = _Cols==1 && _Rows!=1,
118
+ IsRowVector = _Rows==1 && _Cols!=1,
119
+ Options = IsColVector ? (_Options | ColMajor) & ~RowMajor
120
+ : IsRowVector ? (_Options | RowMajor) & ~ColMajor
121
+ : _Options
122
+ };
123
+ public:
124
+ typedef Matrix<_Scalar, _Rows, _Cols, Options, _MaxRows, _MaxCols> type;
125
+ };
126
+
127
+ template<typename Scalar, int Rows, int Cols, int Options, int MaxRows, int MaxCols>
128
+ class compute_matrix_flags
129
+ {
130
+ enum {
131
+ row_major_bit = Options&RowMajor ? RowMajorBit : 0,
132
+ is_dynamic_size_storage = MaxRows==Dynamic || MaxCols==Dynamic,
133
+
134
+ aligned_bit =
135
+ (
136
+ ((Options&DontAlign)==0)
137
+ && (
138
+ #if EIGEN_ALIGN_STATICALLY
139
+ ((!is_dynamic_size_storage) && (((MaxCols*MaxRows*int(sizeof(Scalar))) % 16) == 0))
140
+ #else
141
+ 0
142
+ #endif
143
+
144
+ ||
145
+
146
+ #if EIGEN_ALIGN
147
+ is_dynamic_size_storage
148
+ #else
149
+ 0
150
+ #endif
151
+
152
+ )
153
+ ) ? AlignedBit : 0,
154
+ packet_access_bit = packet_traits<Scalar>::Vectorizable && aligned_bit ? PacketAccessBit : 0
155
+ };
156
+
157
+ public:
158
+ enum { ret = LinearAccessBit | LvalueBit | DirectAccessBit | NestByRefBit | packet_access_bit | row_major_bit | aligned_bit };
159
+ };
160
+
161
+ template<int _Rows, int _Cols> struct size_at_compile_time
162
+ {
163
+ enum { ret = (_Rows==Dynamic || _Cols==Dynamic) ? Dynamic : _Rows * _Cols };
164
+ };
165
+
166
+ /* plain_matrix_type : the difference from eval is that plain_matrix_type is always a plain matrix type,
167
+ * whereas eval is a const reference in the case of a matrix
168
+ */
169
+
170
+ template<typename T, typename StorageKind = typename traits<T>::StorageKind> struct plain_matrix_type;
171
+ template<typename T, typename BaseClassType> struct plain_matrix_type_dense;
172
+ template<typename T> struct plain_matrix_type<T,Dense>
173
+ {
174
+ typedef typename plain_matrix_type_dense<T,typename traits<T>::XprKind>::type type;
175
+ };
176
+
177
+ template<typename T> struct plain_matrix_type_dense<T,MatrixXpr>
178
+ {
179
+ typedef Matrix<typename traits<T>::Scalar,
180
+ traits<T>::RowsAtCompileTime,
181
+ traits<T>::ColsAtCompileTime,
182
+ AutoAlign | (traits<T>::Flags&RowMajorBit ? RowMajor : ColMajor),
183
+ traits<T>::MaxRowsAtCompileTime,
184
+ traits<T>::MaxColsAtCompileTime
185
+ > type;
186
+ };
187
+
188
+ template<typename T> struct plain_matrix_type_dense<T,ArrayXpr>
189
+ {
190
+ typedef Array<typename traits<T>::Scalar,
191
+ traits<T>::RowsAtCompileTime,
192
+ traits<T>::ColsAtCompileTime,
193
+ AutoAlign | (traits<T>::Flags&RowMajorBit ? RowMajor : ColMajor),
194
+ traits<T>::MaxRowsAtCompileTime,
195
+ traits<T>::MaxColsAtCompileTime
196
+ > type;
197
+ };
198
+
199
+ /* eval : the return type of eval(). For matrices, this is just a const reference
200
+ * in order to avoid a useless copy
201
+ */
202
+
203
+ template<typename T, typename StorageKind = typename traits<T>::StorageKind> struct eval;
204
+
205
+ template<typename T> struct eval<T,Dense>
206
+ {
207
+ typedef typename plain_matrix_type<T>::type type;
208
+ // typedef typename T::PlainObject type;
209
+ // typedef T::Matrix<typename traits<T>::Scalar,
210
+ // traits<T>::RowsAtCompileTime,
211
+ // traits<T>::ColsAtCompileTime,
212
+ // AutoAlign | (traits<T>::Flags&RowMajorBit ? RowMajor : ColMajor),
213
+ // traits<T>::MaxRowsAtCompileTime,
214
+ // traits<T>::MaxColsAtCompileTime
215
+ // > type;
216
+ };
217
+
218
+ // for matrices, no need to evaluate, just use a const reference to avoid a useless copy
219
+ template<typename _Scalar, int _Rows, int _Cols, int _Options, int _MaxRows, int _MaxCols>
220
+ struct eval<Matrix<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols>, Dense>
221
+ {
222
+ typedef const Matrix<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols>& type;
223
+ };
224
+
225
+ template<typename _Scalar, int _Rows, int _Cols, int _Options, int _MaxRows, int _MaxCols>
226
+ struct eval<Array<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols>, Dense>
227
+ {
228
+ typedef const Array<_Scalar, _Rows, _Cols, _Options, _MaxRows, _MaxCols>& type;
229
+ };
230
+
231
+
232
+
233
+ /* plain_matrix_type_column_major : same as plain_matrix_type but guaranteed to be column-major
234
+ */
235
+ template<typename T> struct plain_matrix_type_column_major
236
+ {
237
+ enum { Rows = traits<T>::RowsAtCompileTime,
238
+ Cols = traits<T>::ColsAtCompileTime,
239
+ MaxRows = traits<T>::MaxRowsAtCompileTime,
240
+ MaxCols = traits<T>::MaxColsAtCompileTime
241
+ };
242
+ typedef Matrix<typename traits<T>::Scalar,
243
+ Rows,
244
+ Cols,
245
+ (MaxRows==1&&MaxCols!=1) ? RowMajor : ColMajor,
246
+ MaxRows,
247
+ MaxCols
248
+ > type;
249
+ };
250
+
251
+ /* plain_matrix_type_row_major : same as plain_matrix_type but guaranteed to be row-major
252
+ */
253
+ template<typename T> struct plain_matrix_type_row_major
254
+ {
255
+ enum { Rows = traits<T>::RowsAtCompileTime,
256
+ Cols = traits<T>::ColsAtCompileTime,
257
+ MaxRows = traits<T>::MaxRowsAtCompileTime,
258
+ MaxCols = traits<T>::MaxColsAtCompileTime
259
+ };
260
+ typedef Matrix<typename traits<T>::Scalar,
261
+ Rows,
262
+ Cols,
263
+ (MaxCols==1&&MaxRows!=1) ? RowMajor : ColMajor,
264
+ MaxRows,
265
+ MaxCols
266
+ > type;
267
+ };
268
+
269
+ // we should be able to get rid of this one too
270
+ template<typename T> struct must_nest_by_value { enum { ret = false }; };
271
+
272
+ /** \internal The reference selector for template expressions. The idea is that we don't
273
+ * need to use references for expressions since they are light weight proxy
274
+ * objects which should generate no copying overhead. */
275
+ template <typename T>
276
+ struct ref_selector
277
+ {
278
+ typedef typename conditional<
279
+ bool(traits<T>::Flags & NestByRefBit),
280
+ T const&,
281
+ const T
282
+ >::type type;
283
+ };
284
+
285
+ /** \internal Adds the const qualifier on the value-type of T2 if and only if T1 is a const type */
286
+ template<typename T1, typename T2>
287
+ struct transfer_constness
288
+ {
289
+ typedef typename conditional<
290
+ bool(internal::is_const<T1>::value),
291
+ typename internal::add_const_on_value_type<T2>::type,
292
+ T2
293
+ >::type type;
294
+ };
295
+
296
+ /** \internal Determines how a given expression should be nested into another one.
297
+ * For example, when you do a * (b+c), Eigen will determine how the expression b+c should be
298
+ * nested into the bigger product expression. The choice is between nesting the expression b+c as-is, or
299
+ * evaluating that expression b+c into a temporary variable d, and nest d so that the resulting expression is
300
+ * a*d. Evaluating can be beneficial for example if every coefficient access in the resulting expression causes
301
+ * many coefficient accesses in the nested expressions -- as is the case with matrix product for example.
302
+ *
303
+ * \param T the type of the expression being nested
304
+ * \param n the number of coefficient accesses in the nested expression for each coefficient access in the bigger expression.
305
+ *
306
+ * Note that if no evaluation occur, then the constness of T is preserved.
307
+ *
308
+ * Example. Suppose that a, b, and c are of type Matrix3d. The user forms the expression a*(b+c).
309
+ * b+c is an expression "sum of matrices", which we will denote by S. In order to determine how to nest it,
310
+ * the Product expression uses: nested<S, 3>::ret, which turns out to be Matrix3d because the internal logic of
311
+ * nested determined that in this case it was better to evaluate the expression b+c into a temporary. On the other hand,
312
+ * since a is of type Matrix3d, the Product expression nests it as nested<Matrix3d, 3>::ret, which turns out to be
313
+ * const Matrix3d&, because the internal logic of nested determined that since a was already a matrix, there was no point
314
+ * in copying it into another matrix.
315
+ */
316
+ template<typename T, int n=1, typename PlainObject = typename eval<T>::type> struct nested
317
+ {
318
+ enum {
319
+ // for the purpose of this test, to keep it reasonably simple, we arbitrarily choose a value of Dynamic values.
320
+ // the choice of 10000 makes it larger than any practical fixed value and even most dynamic values.
321
+ // in extreme cases where these assumptions would be wrong, we would still at worst suffer performance issues
322
+ // (poor choice of temporaries).
323
+ // it's important that this value can still be squared without integer overflowing.
324
+ DynamicAsInteger = 10000,
325
+ ScalarReadCost = NumTraits<typename traits<T>::Scalar>::ReadCost,
326
+ ScalarReadCostAsInteger = ScalarReadCost == Dynamic ? int(DynamicAsInteger) : int(ScalarReadCost),
327
+ CoeffReadCost = traits<T>::CoeffReadCost,
328
+ CoeffReadCostAsInteger = CoeffReadCost == Dynamic ? int(DynamicAsInteger) : int(CoeffReadCost),
329
+ NAsInteger = n == Dynamic ? int(DynamicAsInteger) : n,
330
+ CostEvalAsInteger = (NAsInteger+1) * ScalarReadCostAsInteger + CoeffReadCostAsInteger,
331
+ CostNoEvalAsInteger = NAsInteger * CoeffReadCostAsInteger
332
+ };
333
+
334
+ typedef typename conditional<
335
+ ( (int(traits<T>::Flags) & EvalBeforeNestingBit) ||
336
+ int(CostEvalAsInteger) < int(CostNoEvalAsInteger)
337
+ ),
338
+ PlainObject,
339
+ typename ref_selector<T>::type
340
+ >::type type;
341
+ };
342
+
343
+ template<typename T>
344
+ inline T* const_cast_ptr(const T* ptr)
345
+ {
346
+ return const_cast<T*>(ptr);
347
+ }
348
+
349
+ template<typename Derived, typename XprKind = typename traits<Derived>::XprKind>
350
+ struct dense_xpr_base
351
+ {
352
+ /* dense_xpr_base should only ever be used on dense expressions, thus falling either into the MatrixXpr or into the ArrayXpr cases */
353
+ };
354
+
355
+ template<typename Derived>
356
+ struct dense_xpr_base<Derived, MatrixXpr>
357
+ {
358
+ typedef MatrixBase<Derived> type;
359
+ };
360
+
361
+ template<typename Derived>
362
+ struct dense_xpr_base<Derived, ArrayXpr>
363
+ {
364
+ typedef ArrayBase<Derived> type;
365
+ };
366
+
367
+ /** \internal Helper base class to add a scalar multiple operator
368
+ * overloads for complex types */
369
+ template<typename Derived, typename Scalar, typename OtherScalar, typename BaseType,
370
+ bool EnableIt = !is_same<Scalar,OtherScalar>::value >
371
+ struct special_scalar_op_base : public BaseType
372
+ {
373
+ // dummy operator* so that the
374
+ // "using special_scalar_op_base::operator*" compiles
375
+ void operator*() const;
376
+ };
377
+
378
+ template<typename Derived,typename Scalar,typename OtherScalar, typename BaseType>
379
+ struct special_scalar_op_base<Derived,Scalar,OtherScalar,BaseType,true> : public BaseType
380
+ {
381
+ const CwiseUnaryOp<scalar_multiple2_op<Scalar,OtherScalar>, Derived>
382
+ operator*(const OtherScalar& scalar) const
383
+ {
384
+ return CwiseUnaryOp<scalar_multiple2_op<Scalar,OtherScalar>, Derived>
385
+ (*static_cast<const Derived*>(this), scalar_multiple2_op<Scalar,OtherScalar>(scalar));
386
+ }
387
+
388
+ inline friend const CwiseUnaryOp<scalar_multiple2_op<Scalar,OtherScalar>, Derived>
389
+ operator*(const OtherScalar& scalar, const Derived& matrix)
390
+ { return static_cast<const special_scalar_op_base&>(matrix).operator*(scalar); }
391
+ };
392
+
393
+ template<typename XprType, typename CastType> struct cast_return_type
394
+ {
395
+ typedef typename XprType::Scalar CurrentScalarType;
396
+ typedef typename remove_all<CastType>::type _CastType;
397
+ typedef typename _CastType::Scalar NewScalarType;
398
+ typedef typename conditional<is_same<CurrentScalarType,NewScalarType>::value,
399
+ const XprType&,CastType>::type type;
400
+ };
401
+
402
+ template <typename A, typename B> struct promote_storage_type;
403
+
404
+ template <typename A> struct promote_storage_type<A,A>
405
+ {
406
+ typedef A ret;
407
+ };
408
+
409
+ /** \internal gives the plain matrix or array type to store a row/column/diagonal of a matrix type.
410
+ * \param Scalar optional parameter allowing to pass a different scalar type than the one of the MatrixType.
411
+ */
412
+ template<typename ExpressionType, typename Scalar = typename ExpressionType::Scalar>
413
+ struct plain_row_type
414
+ {
415
+ typedef Matrix<Scalar, 1, ExpressionType::ColsAtCompileTime,
416
+ ExpressionType::PlainObject::Options | RowMajor, 1, ExpressionType::MaxColsAtCompileTime> MatrixRowType;
417
+ typedef Array<Scalar, 1, ExpressionType::ColsAtCompileTime,
418
+ ExpressionType::PlainObject::Options | RowMajor, 1, ExpressionType::MaxColsAtCompileTime> ArrayRowType;
419
+
420
+ typedef typename conditional<
421
+ is_same< typename traits<ExpressionType>::XprKind, MatrixXpr >::value,
422
+ MatrixRowType,
423
+ ArrayRowType
424
+ >::type type;
425
+ };
426
+
427
+ template<typename ExpressionType, typename Scalar = typename ExpressionType::Scalar>
428
+ struct plain_col_type
429
+ {
430
+ typedef Matrix<Scalar, ExpressionType::RowsAtCompileTime, 1,
431
+ ExpressionType::PlainObject::Options & ~RowMajor, ExpressionType::MaxRowsAtCompileTime, 1> MatrixColType;
432
+ typedef Array<Scalar, ExpressionType::RowsAtCompileTime, 1,
433
+ ExpressionType::PlainObject::Options & ~RowMajor, ExpressionType::MaxRowsAtCompileTime, 1> ArrayColType;
434
+
435
+ typedef typename conditional<
436
+ is_same< typename traits<ExpressionType>::XprKind, MatrixXpr >::value,
437
+ MatrixColType,
438
+ ArrayColType
439
+ >::type type;
440
+ };
441
+
442
+ template<typename ExpressionType, typename Scalar = typename ExpressionType::Scalar>
443
+ struct plain_diag_type
444
+ {
445
+ enum { diag_size = EIGEN_SIZE_MIN_PREFER_DYNAMIC(ExpressionType::RowsAtCompileTime, ExpressionType::ColsAtCompileTime),
446
+ max_diag_size = EIGEN_SIZE_MIN_PREFER_FIXED(ExpressionType::MaxRowsAtCompileTime, ExpressionType::MaxColsAtCompileTime)
447
+ };
448
+ typedef Matrix<Scalar, diag_size, 1, ExpressionType::PlainObject::Options & ~RowMajor, max_diag_size, 1> MatrixDiagType;
449
+ typedef Array<Scalar, diag_size, 1, ExpressionType::PlainObject::Options & ~RowMajor, max_diag_size, 1> ArrayDiagType;
450
+
451
+ typedef typename conditional<
452
+ is_same< typename traits<ExpressionType>::XprKind, MatrixXpr >::value,
453
+ MatrixDiagType,
454
+ ArrayDiagType
455
+ >::type type;
456
+ };
457
+
458
+ template<typename ExpressionType>
459
+ struct is_lvalue
460
+ {
461
+ enum { value = !bool(is_const<ExpressionType>::value) &&
462
+ bool(traits<ExpressionType>::Flags & LvalueBit) };
463
+ };
464
+
465
+ } // end namespace internal
466
+
467
+ } // end namespace Eigen
468
+
469
+ #endif // EIGEN_XPRHELPER_H