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,434 @@
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-2009 Benoit Jacob <jacob.benoit.1@gmail.com>
6
+ // Copyright (C) 2010 Hauke Heibel <hauke.heibel@gmail.com>
7
+ //
8
+ // This Source Code Form is subject to the terms of the Mozilla
9
+ // Public License v. 2.0. If a copy of the MPL was not distributed
10
+ // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
11
+
12
+ #ifndef EIGEN_MATRIXSTORAGE_H
13
+ #define EIGEN_MATRIXSTORAGE_H
14
+
15
+ #ifdef EIGEN_DENSE_STORAGE_CTOR_PLUGIN
16
+ #define EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN EIGEN_DENSE_STORAGE_CTOR_PLUGIN;
17
+ #else
18
+ #define EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN
19
+ #endif
20
+
21
+ namespace Eigen {
22
+
23
+ namespace internal {
24
+
25
+ struct constructor_without_unaligned_array_assert {};
26
+
27
+ template<typename T, int Size> void check_static_allocation_size()
28
+ {
29
+ // if EIGEN_STACK_ALLOCATION_LIMIT is defined to 0, then no limit
30
+ #if EIGEN_STACK_ALLOCATION_LIMIT
31
+ EIGEN_STATIC_ASSERT(Size * sizeof(T) <= EIGEN_STACK_ALLOCATION_LIMIT, OBJECT_ALLOCATED_ON_STACK_IS_TOO_BIG);
32
+ #endif
33
+ }
34
+
35
+ /** \internal
36
+ * Static array. If the MatrixOrArrayOptions require auto-alignment, the array will be automatically aligned:
37
+ * to 16 bytes boundary if the total size is a multiple of 16 bytes.
38
+ */
39
+ template <typename T, int Size, int MatrixOrArrayOptions,
40
+ int Alignment = (MatrixOrArrayOptions&DontAlign) ? 0
41
+ : (((Size*sizeof(T))%16)==0) ? 16
42
+ : 0 >
43
+ struct plain_array
44
+ {
45
+ T array[Size];
46
+
47
+ plain_array()
48
+ {
49
+ check_static_allocation_size<T,Size>();
50
+ }
51
+
52
+ plain_array(constructor_without_unaligned_array_assert)
53
+ {
54
+ check_static_allocation_size<T,Size>();
55
+ }
56
+ };
57
+
58
+ #if defined(EIGEN_DISABLE_UNALIGNED_ARRAY_ASSERT)
59
+ #define EIGEN_MAKE_UNALIGNED_ARRAY_ASSERT(sizemask)
60
+ #elif EIGEN_GNUC_AT_LEAST(4,7)
61
+ // GCC 4.7 is too aggressive in its optimizations and remove the alignement test based on the fact the array is declared to be aligned.
62
+ // See this bug report: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53900
63
+ // Hiding the origin of the array pointer behind a function argument seems to do the trick even if the function is inlined:
64
+ template<typename PtrType>
65
+ EIGEN_ALWAYS_INLINE PtrType eigen_unaligned_array_assert_workaround_gcc47(PtrType array) { return array; }
66
+ #define EIGEN_MAKE_UNALIGNED_ARRAY_ASSERT(sizemask) \
67
+ eigen_assert((reinterpret_cast<size_t>(eigen_unaligned_array_assert_workaround_gcc47(array)) & sizemask) == 0 \
68
+ && "this assertion is explained here: " \
69
+ "http://eigen.tuxfamily.org/dox-devel/group__TopicUnalignedArrayAssert.html" \
70
+ " **** READ THIS WEB PAGE !!! ****");
71
+ #else
72
+ #define EIGEN_MAKE_UNALIGNED_ARRAY_ASSERT(sizemask) \
73
+ eigen_assert((reinterpret_cast<size_t>(array) & sizemask) == 0 \
74
+ && "this assertion is explained here: " \
75
+ "http://eigen.tuxfamily.org/dox-devel/group__TopicUnalignedArrayAssert.html" \
76
+ " **** READ THIS WEB PAGE !!! ****");
77
+ #endif
78
+
79
+ template <typename T, int Size, int MatrixOrArrayOptions>
80
+ struct plain_array<T, Size, MatrixOrArrayOptions, 16>
81
+ {
82
+ EIGEN_USER_ALIGN16 T array[Size];
83
+
84
+ plain_array()
85
+ {
86
+ EIGEN_MAKE_UNALIGNED_ARRAY_ASSERT(0xf);
87
+ check_static_allocation_size<T,Size>();
88
+ }
89
+
90
+ plain_array(constructor_without_unaligned_array_assert)
91
+ {
92
+ check_static_allocation_size<T,Size>();
93
+ }
94
+ };
95
+
96
+ template <typename T, int MatrixOrArrayOptions, int Alignment>
97
+ struct plain_array<T, 0, MatrixOrArrayOptions, Alignment>
98
+ {
99
+ EIGEN_USER_ALIGN16 T array[1];
100
+ plain_array() {}
101
+ plain_array(constructor_without_unaligned_array_assert) {}
102
+ };
103
+
104
+ } // end namespace internal
105
+
106
+ /** \internal
107
+ *
108
+ * \class DenseStorage
109
+ * \ingroup Core_Module
110
+ *
111
+ * \brief Stores the data of a matrix
112
+ *
113
+ * This class stores the data of fixed-size, dynamic-size or mixed matrices
114
+ * in a way as compact as possible.
115
+ *
116
+ * \sa Matrix
117
+ */
118
+ template<typename T, int Size, int _Rows, int _Cols, int _Options> class DenseStorage;
119
+
120
+ // purely fixed-size matrix
121
+ template<typename T, int Size, int _Rows, int _Cols, int _Options> class DenseStorage
122
+ {
123
+ internal::plain_array<T,Size,_Options> m_data;
124
+ public:
125
+ DenseStorage() {}
126
+ DenseStorage(internal::constructor_without_unaligned_array_assert)
127
+ : m_data(internal::constructor_without_unaligned_array_assert()) {}
128
+ DenseStorage(const DenseStorage& other) : m_data(other.m_data) {}
129
+ DenseStorage& operator=(const DenseStorage& other)
130
+ {
131
+ if (this != &other) m_data = other.m_data;
132
+ return *this;
133
+ }
134
+ DenseStorage(DenseIndex,DenseIndex,DenseIndex) {}
135
+ void swap(DenseStorage& other) { std::swap(m_data,other.m_data); }
136
+ static DenseIndex rows(void) {return _Rows;}
137
+ static DenseIndex cols(void) {return _Cols;}
138
+ void conservativeResize(DenseIndex,DenseIndex,DenseIndex) {}
139
+ void resize(DenseIndex,DenseIndex,DenseIndex) {}
140
+ const T *data() const { return m_data.array; }
141
+ T *data() { return m_data.array; }
142
+ };
143
+
144
+ // null matrix
145
+ template<typename T, int _Rows, int _Cols, int _Options> class DenseStorage<T, 0, _Rows, _Cols, _Options>
146
+ {
147
+ public:
148
+ DenseStorage() {}
149
+ DenseStorage(internal::constructor_without_unaligned_array_assert) {}
150
+ DenseStorage(const DenseStorage&) {}
151
+ DenseStorage& operator=(const DenseStorage&) { return *this; }
152
+ DenseStorage(DenseIndex,DenseIndex,DenseIndex) {}
153
+ void swap(DenseStorage& ) {}
154
+ static DenseIndex rows(void) {return _Rows;}
155
+ static DenseIndex cols(void) {return _Cols;}
156
+ void conservativeResize(DenseIndex,DenseIndex,DenseIndex) {}
157
+ void resize(DenseIndex,DenseIndex,DenseIndex) {}
158
+ const T *data() const { return 0; }
159
+ T *data() { return 0; }
160
+ };
161
+
162
+ // more specializations for null matrices; these are necessary to resolve ambiguities
163
+ template<typename T, int _Options> class DenseStorage<T, 0, Dynamic, Dynamic, _Options>
164
+ : public DenseStorage<T, 0, 0, 0, _Options> { };
165
+
166
+ template<typename T, int _Rows, int _Options> class DenseStorage<T, 0, _Rows, Dynamic, _Options>
167
+ : public DenseStorage<T, 0, 0, 0, _Options> { };
168
+
169
+ template<typename T, int _Cols, int _Options> class DenseStorage<T, 0, Dynamic, _Cols, _Options>
170
+ : public DenseStorage<T, 0, 0, 0, _Options> { };
171
+
172
+ // dynamic-size matrix with fixed-size storage
173
+ template<typename T, int Size, int _Options> class DenseStorage<T, Size, Dynamic, Dynamic, _Options>
174
+ {
175
+ internal::plain_array<T,Size,_Options> m_data;
176
+ DenseIndex m_rows;
177
+ DenseIndex m_cols;
178
+ public:
179
+ DenseStorage() : m_rows(0), m_cols(0) {}
180
+ DenseStorage(internal::constructor_without_unaligned_array_assert)
181
+ : m_data(internal::constructor_without_unaligned_array_assert()), m_rows(0), m_cols(0) {}
182
+ DenseStorage(const DenseStorage& other) : m_data(other.m_data), m_rows(other.m_rows), m_cols(other.m_cols) {}
183
+ DenseStorage& operator=(const DenseStorage& other)
184
+ {
185
+ if (this != &other)
186
+ {
187
+ m_data = other.m_data;
188
+ m_rows = other.m_rows;
189
+ m_cols = other.m_cols;
190
+ }
191
+ return *this;
192
+ }
193
+ DenseStorage(DenseIndex, DenseIndex nbRows, DenseIndex nbCols) : m_rows(nbRows), m_cols(nbCols) {}
194
+ void swap(DenseStorage& other)
195
+ { std::swap(m_data,other.m_data); std::swap(m_rows,other.m_rows); std::swap(m_cols,other.m_cols); }
196
+ DenseIndex rows() const {return m_rows;}
197
+ DenseIndex cols() const {return m_cols;}
198
+ void conservativeResize(DenseIndex, DenseIndex nbRows, DenseIndex nbCols) { m_rows = nbRows; m_cols = nbCols; }
199
+ void resize(DenseIndex, DenseIndex nbRows, DenseIndex nbCols) { m_rows = nbRows; m_cols = nbCols; }
200
+ const T *data() const { return m_data.array; }
201
+ T *data() { return m_data.array; }
202
+ };
203
+
204
+ // dynamic-size matrix with fixed-size storage and fixed width
205
+ template<typename T, int Size, int _Cols, int _Options> class DenseStorage<T, Size, Dynamic, _Cols, _Options>
206
+ {
207
+ internal::plain_array<T,Size,_Options> m_data;
208
+ DenseIndex m_rows;
209
+ public:
210
+ DenseStorage() : m_rows(0) {}
211
+ DenseStorage(internal::constructor_without_unaligned_array_assert)
212
+ : m_data(internal::constructor_without_unaligned_array_assert()), m_rows(0) {}
213
+ DenseStorage(const DenseStorage& other) : m_data(other.m_data), m_rows(other.m_rows) {}
214
+ DenseStorage& operator=(const DenseStorage& other)
215
+ {
216
+ if (this != &other)
217
+ {
218
+ m_data = other.m_data;
219
+ m_rows = other.m_rows;
220
+ }
221
+ return *this;
222
+ }
223
+ DenseStorage(DenseIndex, DenseIndex nbRows, DenseIndex) : m_rows(nbRows) {}
224
+ void swap(DenseStorage& other) { std::swap(m_data,other.m_data); std::swap(m_rows,other.m_rows); }
225
+ DenseIndex rows(void) const {return m_rows;}
226
+ DenseIndex cols(void) const {return _Cols;}
227
+ void conservativeResize(DenseIndex, DenseIndex nbRows, DenseIndex) { m_rows = nbRows; }
228
+ void resize(DenseIndex, DenseIndex nbRows, DenseIndex) { m_rows = nbRows; }
229
+ const T *data() const { return m_data.array; }
230
+ T *data() { return m_data.array; }
231
+ };
232
+
233
+ // dynamic-size matrix with fixed-size storage and fixed height
234
+ template<typename T, int Size, int _Rows, int _Options> class DenseStorage<T, Size, _Rows, Dynamic, _Options>
235
+ {
236
+ internal::plain_array<T,Size,_Options> m_data;
237
+ DenseIndex m_cols;
238
+ public:
239
+ DenseStorage() : m_cols(0) {}
240
+ DenseStorage(internal::constructor_without_unaligned_array_assert)
241
+ : m_data(internal::constructor_without_unaligned_array_assert()), m_cols(0) {}
242
+ DenseStorage(const DenseStorage& other) : m_data(other.m_data), m_cols(other.m_cols) {}
243
+ DenseStorage& operator=(const DenseStorage& other)
244
+ {
245
+ if (this != &other)
246
+ {
247
+ m_data = other.m_data;
248
+ m_cols = other.m_cols;
249
+ }
250
+ return *this;
251
+ }
252
+ DenseStorage(DenseIndex, DenseIndex, DenseIndex nbCols) : m_cols(nbCols) {}
253
+ void swap(DenseStorage& other) { std::swap(m_data,other.m_data); std::swap(m_cols,other.m_cols); }
254
+ DenseIndex rows(void) const {return _Rows;}
255
+ DenseIndex cols(void) const {return m_cols;}
256
+ void conservativeResize(DenseIndex, DenseIndex, DenseIndex nbCols) { m_cols = nbCols; }
257
+ void resize(DenseIndex, DenseIndex, DenseIndex nbCols) { m_cols = nbCols; }
258
+ const T *data() const { return m_data.array; }
259
+ T *data() { return m_data.array; }
260
+ };
261
+
262
+ // purely dynamic matrix.
263
+ template<typename T, int _Options> class DenseStorage<T, Dynamic, Dynamic, Dynamic, _Options>
264
+ {
265
+ T *m_data;
266
+ DenseIndex m_rows;
267
+ DenseIndex m_cols;
268
+ public:
269
+ DenseStorage() : m_data(0), m_rows(0), m_cols(0) {}
270
+ DenseStorage(internal::constructor_without_unaligned_array_assert)
271
+ : m_data(0), m_rows(0), m_cols(0) {}
272
+ DenseStorage(DenseIndex size, DenseIndex nbRows, DenseIndex nbCols)
273
+ : m_data(internal::conditional_aligned_new_auto<T,(_Options&DontAlign)==0>(size)), m_rows(nbRows), m_cols(nbCols)
274
+ { EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN }
275
+ #ifdef EIGEN_HAVE_RVALUE_REFERENCES
276
+ DenseStorage(DenseStorage&& other)
277
+ : m_data(std::move(other.m_data))
278
+ , m_rows(std::move(other.m_rows))
279
+ , m_cols(std::move(other.m_cols))
280
+ {
281
+ other.m_data = nullptr;
282
+ }
283
+ DenseStorage& operator=(DenseStorage&& other)
284
+ {
285
+ using std::swap;
286
+ swap(m_data, other.m_data);
287
+ swap(m_rows, other.m_rows);
288
+ swap(m_cols, other.m_cols);
289
+ return *this;
290
+ }
291
+ #endif
292
+ ~DenseStorage() { internal::conditional_aligned_delete_auto<T,(_Options&DontAlign)==0>(m_data, m_rows*m_cols); }
293
+ void swap(DenseStorage& other)
294
+ { std::swap(m_data,other.m_data); std::swap(m_rows,other.m_rows); std::swap(m_cols,other.m_cols); }
295
+ DenseIndex rows(void) const {return m_rows;}
296
+ DenseIndex cols(void) const {return m_cols;}
297
+ void conservativeResize(DenseIndex size, DenseIndex nbRows, DenseIndex nbCols)
298
+ {
299
+ m_data = internal::conditional_aligned_realloc_new_auto<T,(_Options&DontAlign)==0>(m_data, size, m_rows*m_cols);
300
+ m_rows = nbRows;
301
+ m_cols = nbCols;
302
+ }
303
+ void resize(DenseIndex size, DenseIndex nbRows, DenseIndex nbCols)
304
+ {
305
+ if(size != m_rows*m_cols)
306
+ {
307
+ internal::conditional_aligned_delete_auto<T,(_Options&DontAlign)==0>(m_data, m_rows*m_cols);
308
+ if (size)
309
+ m_data = internal::conditional_aligned_new_auto<T,(_Options&DontAlign)==0>(size);
310
+ else
311
+ m_data = 0;
312
+ EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN
313
+ }
314
+ m_rows = nbRows;
315
+ m_cols = nbCols;
316
+ }
317
+ const T *data() const { return m_data; }
318
+ T *data() { return m_data; }
319
+ private:
320
+ DenseStorage(const DenseStorage&);
321
+ DenseStorage& operator=(const DenseStorage&);
322
+ };
323
+
324
+ // matrix with dynamic width and fixed height (so that matrix has dynamic size).
325
+ template<typename T, int _Rows, int _Options> class DenseStorage<T, Dynamic, _Rows, Dynamic, _Options>
326
+ {
327
+ T *m_data;
328
+ DenseIndex m_cols;
329
+ public:
330
+ DenseStorage() : m_data(0), m_cols(0) {}
331
+ DenseStorage(internal::constructor_without_unaligned_array_assert) : m_data(0), m_cols(0) {}
332
+ DenseStorage(DenseIndex size, DenseIndex, DenseIndex nbCols) : m_data(internal::conditional_aligned_new_auto<T,(_Options&DontAlign)==0>(size)), m_cols(nbCols)
333
+ { EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN }
334
+ #ifdef EIGEN_HAVE_RVALUE_REFERENCES
335
+ DenseStorage(DenseStorage&& other)
336
+ : m_data(std::move(other.m_data))
337
+ , m_cols(std::move(other.m_cols))
338
+ {
339
+ other.m_data = nullptr;
340
+ }
341
+ DenseStorage& operator=(DenseStorage&& other)
342
+ {
343
+ using std::swap;
344
+ swap(m_data, other.m_data);
345
+ swap(m_cols, other.m_cols);
346
+ return *this;
347
+ }
348
+ #endif
349
+ ~DenseStorage() { internal::conditional_aligned_delete_auto<T,(_Options&DontAlign)==0>(m_data, _Rows*m_cols); }
350
+ void swap(DenseStorage& other) { std::swap(m_data,other.m_data); std::swap(m_cols,other.m_cols); }
351
+ static DenseIndex rows(void) {return _Rows;}
352
+ DenseIndex cols(void) const {return m_cols;}
353
+ void conservativeResize(DenseIndex size, DenseIndex, DenseIndex nbCols)
354
+ {
355
+ m_data = internal::conditional_aligned_realloc_new_auto<T,(_Options&DontAlign)==0>(m_data, size, _Rows*m_cols);
356
+ m_cols = nbCols;
357
+ }
358
+ EIGEN_STRONG_INLINE void resize(DenseIndex size, DenseIndex, DenseIndex nbCols)
359
+ {
360
+ if(size != _Rows*m_cols)
361
+ {
362
+ internal::conditional_aligned_delete_auto<T,(_Options&DontAlign)==0>(m_data, _Rows*m_cols);
363
+ if (size)
364
+ m_data = internal::conditional_aligned_new_auto<T,(_Options&DontAlign)==0>(size);
365
+ else
366
+ m_data = 0;
367
+ EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN
368
+ }
369
+ m_cols = nbCols;
370
+ }
371
+ const T *data() const { return m_data; }
372
+ T *data() { return m_data; }
373
+ private:
374
+ DenseStorage(const DenseStorage&);
375
+ DenseStorage& operator=(const DenseStorage&);
376
+ };
377
+
378
+ // matrix with dynamic height and fixed width (so that matrix has dynamic size).
379
+ template<typename T, int _Cols, int _Options> class DenseStorage<T, Dynamic, Dynamic, _Cols, _Options>
380
+ {
381
+ T *m_data;
382
+ DenseIndex m_rows;
383
+ public:
384
+ DenseStorage() : m_data(0), m_rows(0) {}
385
+ DenseStorage(internal::constructor_without_unaligned_array_assert) : m_data(0), m_rows(0) {}
386
+ DenseStorage(DenseIndex size, DenseIndex nbRows, DenseIndex) : m_data(internal::conditional_aligned_new_auto<T,(_Options&DontAlign)==0>(size)), m_rows(nbRows)
387
+ { EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN }
388
+ #ifdef EIGEN_HAVE_RVALUE_REFERENCES
389
+ DenseStorage(DenseStorage&& other)
390
+ : m_data(std::move(other.m_data))
391
+ , m_rows(std::move(other.m_rows))
392
+ {
393
+ other.m_data = nullptr;
394
+ }
395
+ DenseStorage& operator=(DenseStorage&& other)
396
+ {
397
+ using std::swap;
398
+ swap(m_data, other.m_data);
399
+ swap(m_rows, other.m_rows);
400
+ return *this;
401
+ }
402
+ #endif
403
+ ~DenseStorage() { internal::conditional_aligned_delete_auto<T,(_Options&DontAlign)==0>(m_data, _Cols*m_rows); }
404
+ void swap(DenseStorage& other) { std::swap(m_data,other.m_data); std::swap(m_rows,other.m_rows); }
405
+ DenseIndex rows(void) const {return m_rows;}
406
+ static DenseIndex cols(void) {return _Cols;}
407
+ void conservativeResize(DenseIndex size, DenseIndex nbRows, DenseIndex)
408
+ {
409
+ m_data = internal::conditional_aligned_realloc_new_auto<T,(_Options&DontAlign)==0>(m_data, size, m_rows*_Cols);
410
+ m_rows = nbRows;
411
+ }
412
+ EIGEN_STRONG_INLINE void resize(DenseIndex size, DenseIndex nbRows, DenseIndex)
413
+ {
414
+ if(size != m_rows*_Cols)
415
+ {
416
+ internal::conditional_aligned_delete_auto<T,(_Options&DontAlign)==0>(m_data, _Cols*m_rows);
417
+ if (size)
418
+ m_data = internal::conditional_aligned_new_auto<T,(_Options&DontAlign)==0>(size);
419
+ else
420
+ m_data = 0;
421
+ EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN
422
+ }
423
+ m_rows = nbRows;
424
+ }
425
+ const T *data() const { return m_data; }
426
+ T *data() { return m_data; }
427
+ private:
428
+ DenseStorage(const DenseStorage&);
429
+ DenseStorage& operator=(const DenseStorage&);
430
+ };
431
+
432
+ } // end namespace Eigen
433
+
434
+ #endif // EIGEN_MATRIX_H
@@ -0,0 +1,237 @@
1
+ // This file is part of Eigen, a lightweight C++ template library
2
+ // for linear algebra.
3
+ //
4
+ // Copyright (C) 2007-2009 Benoit Jacob <jacob.benoit.1@gmail.com>
5
+ // Copyright (C) 2009-2010 Gael Guennebaud <gael.guennebaud@inria.fr>
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_DIAGONAL_H
12
+ #define EIGEN_DIAGONAL_H
13
+
14
+ namespace Eigen {
15
+
16
+ /** \class Diagonal
17
+ * \ingroup Core_Module
18
+ *
19
+ * \brief Expression of a diagonal/subdiagonal/superdiagonal in a matrix
20
+ *
21
+ * \param MatrixType the type of the object in which we are taking a sub/main/super diagonal
22
+ * \param DiagIndex the index of the sub/super diagonal. The default is 0 and it means the main diagonal.
23
+ * A positive value means a superdiagonal, a negative value means a subdiagonal.
24
+ * You can also use Dynamic so the index can be set at runtime.
25
+ *
26
+ * The matrix is not required to be square.
27
+ *
28
+ * This class represents an expression of the main diagonal, or any sub/super diagonal
29
+ * of a square matrix. It is the return type of MatrixBase::diagonal() and MatrixBase::diagonal(Index) and most of the
30
+ * time this is the only way it is used.
31
+ *
32
+ * \sa MatrixBase::diagonal(), MatrixBase::diagonal(Index)
33
+ */
34
+
35
+ namespace internal {
36
+ template<typename MatrixType, int DiagIndex>
37
+ struct traits<Diagonal<MatrixType,DiagIndex> >
38
+ : traits<MatrixType>
39
+ {
40
+ typedef typename nested<MatrixType>::type MatrixTypeNested;
41
+ typedef typename remove_reference<MatrixTypeNested>::type _MatrixTypeNested;
42
+ typedef typename MatrixType::StorageKind StorageKind;
43
+ enum {
44
+ RowsAtCompileTime = (int(DiagIndex) == DynamicIndex || int(MatrixType::SizeAtCompileTime) == Dynamic) ? Dynamic
45
+ : (EIGEN_PLAIN_ENUM_MIN(MatrixType::RowsAtCompileTime - EIGEN_PLAIN_ENUM_MAX(-DiagIndex, 0),
46
+ MatrixType::ColsAtCompileTime - EIGEN_PLAIN_ENUM_MAX( DiagIndex, 0))),
47
+ ColsAtCompileTime = 1,
48
+ MaxRowsAtCompileTime = int(MatrixType::MaxSizeAtCompileTime) == Dynamic ? Dynamic
49
+ : DiagIndex == DynamicIndex ? EIGEN_SIZE_MIN_PREFER_FIXED(MatrixType::MaxRowsAtCompileTime,
50
+ MatrixType::MaxColsAtCompileTime)
51
+ : (EIGEN_PLAIN_ENUM_MIN(MatrixType::MaxRowsAtCompileTime - EIGEN_PLAIN_ENUM_MAX(-DiagIndex, 0),
52
+ MatrixType::MaxColsAtCompileTime - EIGEN_PLAIN_ENUM_MAX( DiagIndex, 0))),
53
+ MaxColsAtCompileTime = 1,
54
+ MaskLvalueBit = is_lvalue<MatrixType>::value ? LvalueBit : 0,
55
+ Flags = (unsigned int)_MatrixTypeNested::Flags & (HereditaryBits | LinearAccessBit | MaskLvalueBit | DirectAccessBit) & ~RowMajorBit,
56
+ CoeffReadCost = _MatrixTypeNested::CoeffReadCost,
57
+ MatrixTypeOuterStride = outer_stride_at_compile_time<MatrixType>::ret,
58
+ InnerStrideAtCompileTime = MatrixTypeOuterStride == Dynamic ? Dynamic : MatrixTypeOuterStride+1,
59
+ OuterStrideAtCompileTime = 0
60
+ };
61
+ };
62
+ }
63
+
64
+ template<typename MatrixType, int _DiagIndex> class Diagonal
65
+ : public internal::dense_xpr_base< Diagonal<MatrixType,_DiagIndex> >::type
66
+ {
67
+ public:
68
+
69
+ enum { DiagIndex = _DiagIndex };
70
+ typedef typename internal::dense_xpr_base<Diagonal>::type Base;
71
+ EIGEN_DENSE_PUBLIC_INTERFACE(Diagonal)
72
+
73
+ inline Diagonal(MatrixType& matrix, Index a_index = DiagIndex) : m_matrix(matrix), m_index(a_index) {}
74
+
75
+ EIGEN_INHERIT_ASSIGNMENT_OPERATORS(Diagonal)
76
+
77
+ inline Index rows() const
78
+ { return m_index.value()<0 ? (std::min<Index>)(m_matrix.cols(),m_matrix.rows()+m_index.value()) : (std::min<Index>)(m_matrix.rows(),m_matrix.cols()-m_index.value()); }
79
+
80
+ inline Index cols() const { return 1; }
81
+
82
+ inline Index innerStride() const
83
+ {
84
+ return m_matrix.outerStride() + 1;
85
+ }
86
+
87
+ inline Index outerStride() const
88
+ {
89
+ return 0;
90
+ }
91
+
92
+ typedef typename internal::conditional<
93
+ internal::is_lvalue<MatrixType>::value,
94
+ Scalar,
95
+ const Scalar
96
+ >::type ScalarWithConstIfNotLvalue;
97
+
98
+ inline ScalarWithConstIfNotLvalue* data() { return &(m_matrix.const_cast_derived().coeffRef(rowOffset(), colOffset())); }
99
+ inline const Scalar* data() const { return &(m_matrix.const_cast_derived().coeffRef(rowOffset(), colOffset())); }
100
+
101
+ inline Scalar& coeffRef(Index row, Index)
102
+ {
103
+ EIGEN_STATIC_ASSERT_LVALUE(MatrixType)
104
+ return m_matrix.const_cast_derived().coeffRef(row+rowOffset(), row+colOffset());
105
+ }
106
+
107
+ inline const Scalar& coeffRef(Index row, Index) const
108
+ {
109
+ return m_matrix.const_cast_derived().coeffRef(row+rowOffset(), row+colOffset());
110
+ }
111
+
112
+ inline CoeffReturnType coeff(Index row, Index) const
113
+ {
114
+ return m_matrix.coeff(row+rowOffset(), row+colOffset());
115
+ }
116
+
117
+ inline Scalar& coeffRef(Index idx)
118
+ {
119
+ EIGEN_STATIC_ASSERT_LVALUE(MatrixType)
120
+ return m_matrix.const_cast_derived().coeffRef(idx+rowOffset(), idx+colOffset());
121
+ }
122
+
123
+ inline const Scalar& coeffRef(Index idx) const
124
+ {
125
+ return m_matrix.const_cast_derived().coeffRef(idx+rowOffset(), idx+colOffset());
126
+ }
127
+
128
+ inline CoeffReturnType coeff(Index idx) const
129
+ {
130
+ return m_matrix.coeff(idx+rowOffset(), idx+colOffset());
131
+ }
132
+
133
+ const typename internal::remove_all<typename MatrixType::Nested>::type&
134
+ nestedExpression() const
135
+ {
136
+ return m_matrix;
137
+ }
138
+
139
+ int index() const
140
+ {
141
+ return m_index.value();
142
+ }
143
+
144
+ protected:
145
+ typename MatrixType::Nested m_matrix;
146
+ const internal::variable_if_dynamicindex<Index, DiagIndex> m_index;
147
+
148
+ private:
149
+ // some compilers may fail to optimize std::max etc in case of compile-time constants...
150
+ EIGEN_STRONG_INLINE Index absDiagIndex() const { return m_index.value()>0 ? m_index.value() : -m_index.value(); }
151
+ EIGEN_STRONG_INLINE Index rowOffset() const { return m_index.value()>0 ? 0 : -m_index.value(); }
152
+ EIGEN_STRONG_INLINE Index colOffset() const { return m_index.value()>0 ? m_index.value() : 0; }
153
+ // triger a compile time error is someone try to call packet
154
+ template<int LoadMode> typename MatrixType::PacketReturnType packet(Index) const;
155
+ template<int LoadMode> typename MatrixType::PacketReturnType packet(Index,Index) const;
156
+ };
157
+
158
+ /** \returns an expression of the main diagonal of the matrix \c *this
159
+ *
160
+ * \c *this is not required to be square.
161
+ *
162
+ * Example: \include MatrixBase_diagonal.cpp
163
+ * Output: \verbinclude MatrixBase_diagonal.out
164
+ *
165
+ * \sa class Diagonal */
166
+ template<typename Derived>
167
+ inline typename MatrixBase<Derived>::DiagonalReturnType
168
+ MatrixBase<Derived>::diagonal()
169
+ {
170
+ return derived();
171
+ }
172
+
173
+ /** This is the const version of diagonal(). */
174
+ template<typename Derived>
175
+ inline typename MatrixBase<Derived>::ConstDiagonalReturnType
176
+ MatrixBase<Derived>::diagonal() const
177
+ {
178
+ return ConstDiagonalReturnType(derived());
179
+ }
180
+
181
+ /** \returns an expression of the \a DiagIndex-th sub or super diagonal of the matrix \c *this
182
+ *
183
+ * \c *this is not required to be square.
184
+ *
185
+ * The template parameter \a DiagIndex represent a super diagonal if \a DiagIndex > 0
186
+ * and a sub diagonal otherwise. \a DiagIndex == 0 is equivalent to the main diagonal.
187
+ *
188
+ * Example: \include MatrixBase_diagonal_int.cpp
189
+ * Output: \verbinclude MatrixBase_diagonal_int.out
190
+ *
191
+ * \sa MatrixBase::diagonal(), class Diagonal */
192
+ template<typename Derived>
193
+ inline typename MatrixBase<Derived>::DiagonalDynamicIndexReturnType
194
+ MatrixBase<Derived>::diagonal(Index index)
195
+ {
196
+ return DiagonalDynamicIndexReturnType(derived(), index);
197
+ }
198
+
199
+ /** This is the const version of diagonal(Index). */
200
+ template<typename Derived>
201
+ inline typename MatrixBase<Derived>::ConstDiagonalDynamicIndexReturnType
202
+ MatrixBase<Derived>::diagonal(Index index) const
203
+ {
204
+ return ConstDiagonalDynamicIndexReturnType(derived(), index);
205
+ }
206
+
207
+ /** \returns an expression of the \a DiagIndex-th sub or super diagonal of the matrix \c *this
208
+ *
209
+ * \c *this is not required to be square.
210
+ *
211
+ * The template parameter \a DiagIndex represent a super diagonal if \a DiagIndex > 0
212
+ * and a sub diagonal otherwise. \a DiagIndex == 0 is equivalent to the main diagonal.
213
+ *
214
+ * Example: \include MatrixBase_diagonal_template_int.cpp
215
+ * Output: \verbinclude MatrixBase_diagonal_template_int.out
216
+ *
217
+ * \sa MatrixBase::diagonal(), class Diagonal */
218
+ template<typename Derived>
219
+ template<int Index>
220
+ inline typename MatrixBase<Derived>::template DiagonalIndexReturnType<Index>::Type
221
+ MatrixBase<Derived>::diagonal()
222
+ {
223
+ return derived();
224
+ }
225
+
226
+ /** This is the const version of diagonal<int>(). */
227
+ template<typename Derived>
228
+ template<int Index>
229
+ inline typename MatrixBase<Derived>::template ConstDiagonalIndexReturnType<Index>::Type
230
+ MatrixBase<Derived>::diagonal() const
231
+ {
232
+ return derived();
233
+ }
234
+
235
+ } // end namespace Eigen
236
+
237
+ #endif // EIGEN_DIAGONAL_H