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,260 @@
1
+ // This file is part of Eigen, a lightweight C++ template library
2
+ // for linear algebra.
3
+ //
4
+ // Copyright (C) 2008-2009 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
+ #ifndef EIGEN_SOLVETRIANGULAR_H
11
+ #define EIGEN_SOLVETRIANGULAR_H
12
+
13
+ namespace Eigen {
14
+
15
+ namespace internal {
16
+
17
+ // Forward declarations:
18
+ // The following two routines are implemented in the products/TriangularSolver*.h files
19
+ template<typename LhsScalar, typename RhsScalar, typename Index, int Side, int Mode, bool Conjugate, int StorageOrder>
20
+ struct triangular_solve_vector;
21
+
22
+ template <typename Scalar, typename Index, int Side, int Mode, bool Conjugate, int TriStorageOrder, int OtherStorageOrder>
23
+ struct triangular_solve_matrix;
24
+
25
+ // small helper struct extracting some traits on the underlying solver operation
26
+ template<typename Lhs, typename Rhs, int Side>
27
+ class trsolve_traits
28
+ {
29
+ private:
30
+ enum {
31
+ RhsIsVectorAtCompileTime = (Side==OnTheLeft ? Rhs::ColsAtCompileTime : Rhs::RowsAtCompileTime)==1
32
+ };
33
+ public:
34
+ enum {
35
+ Unrolling = (RhsIsVectorAtCompileTime && Rhs::SizeAtCompileTime != Dynamic && Rhs::SizeAtCompileTime <= 8)
36
+ ? CompleteUnrolling : NoUnrolling,
37
+ RhsVectors = RhsIsVectorAtCompileTime ? 1 : Dynamic
38
+ };
39
+ };
40
+
41
+ template<typename Lhs, typename Rhs,
42
+ int Side, // can be OnTheLeft/OnTheRight
43
+ int Mode, // can be Upper/Lower | UnitDiag
44
+ int Unrolling = trsolve_traits<Lhs,Rhs,Side>::Unrolling,
45
+ int RhsVectors = trsolve_traits<Lhs,Rhs,Side>::RhsVectors
46
+ >
47
+ struct triangular_solver_selector;
48
+
49
+ template<typename Lhs, typename Rhs, int Side, int Mode>
50
+ struct triangular_solver_selector<Lhs,Rhs,Side,Mode,NoUnrolling,1>
51
+ {
52
+ typedef typename Lhs::Scalar LhsScalar;
53
+ typedef typename Rhs::Scalar RhsScalar;
54
+ typedef blas_traits<Lhs> LhsProductTraits;
55
+ typedef typename LhsProductTraits::ExtractType ActualLhsType;
56
+ typedef Map<Matrix<RhsScalar,Dynamic,1>, Aligned> MappedRhs;
57
+ static void run(const Lhs& lhs, Rhs& rhs)
58
+ {
59
+ ActualLhsType actualLhs = LhsProductTraits::extract(lhs);
60
+
61
+ // FIXME find a way to allow an inner stride if packet_traits<Scalar>::size==1
62
+
63
+ bool useRhsDirectly = Rhs::InnerStrideAtCompileTime==1 || rhs.innerStride()==1;
64
+
65
+ ei_declare_aligned_stack_constructed_variable(RhsScalar,actualRhs,rhs.size(),
66
+ (useRhsDirectly ? rhs.data() : 0));
67
+
68
+ if(!useRhsDirectly)
69
+ MappedRhs(actualRhs,rhs.size()) = rhs;
70
+
71
+ triangular_solve_vector<LhsScalar, RhsScalar, typename Lhs::Index, Side, Mode, LhsProductTraits::NeedToConjugate,
72
+ (int(Lhs::Flags) & RowMajorBit) ? RowMajor : ColMajor>
73
+ ::run(actualLhs.cols(), actualLhs.data(), actualLhs.outerStride(), actualRhs);
74
+
75
+ if(!useRhsDirectly)
76
+ rhs = MappedRhs(actualRhs, rhs.size());
77
+ }
78
+ };
79
+
80
+ // the rhs is a matrix
81
+ template<typename Lhs, typename Rhs, int Side, int Mode>
82
+ struct triangular_solver_selector<Lhs,Rhs,Side,Mode,NoUnrolling,Dynamic>
83
+ {
84
+ typedef typename Rhs::Scalar Scalar;
85
+ typedef typename Rhs::Index Index;
86
+ typedef blas_traits<Lhs> LhsProductTraits;
87
+ typedef typename LhsProductTraits::DirectLinearAccessType ActualLhsType;
88
+
89
+ static void run(const Lhs& lhs, Rhs& rhs)
90
+ {
91
+ typename internal::add_const_on_value_type<ActualLhsType>::type actualLhs = LhsProductTraits::extract(lhs);
92
+
93
+ const Index size = lhs.rows();
94
+ const Index othersize = Side==OnTheLeft? rhs.cols() : rhs.rows();
95
+
96
+ typedef internal::gemm_blocking_space<(Rhs::Flags&RowMajorBit) ? RowMajor : ColMajor,Scalar,Scalar,
97
+ Rhs::MaxRowsAtCompileTime, Rhs::MaxColsAtCompileTime, Lhs::MaxRowsAtCompileTime,4> BlockingType;
98
+
99
+ BlockingType blocking(rhs.rows(), rhs.cols(), size);
100
+
101
+ triangular_solve_matrix<Scalar,Index,Side,Mode,LhsProductTraits::NeedToConjugate,(int(Lhs::Flags) & RowMajorBit) ? RowMajor : ColMajor,
102
+ (Rhs::Flags&RowMajorBit) ? RowMajor : ColMajor>
103
+ ::run(size, othersize, &actualLhs.coeffRef(0,0), actualLhs.outerStride(), &rhs.coeffRef(0,0), rhs.outerStride(), blocking);
104
+ }
105
+ };
106
+
107
+ /***************************************************************************
108
+ * meta-unrolling implementation
109
+ ***************************************************************************/
110
+
111
+ template<typename Lhs, typename Rhs, int Mode, int Index, int Size,
112
+ bool Stop = Index==Size>
113
+ struct triangular_solver_unroller;
114
+
115
+ template<typename Lhs, typename Rhs, int Mode, int Index, int Size>
116
+ struct triangular_solver_unroller<Lhs,Rhs,Mode,Index,Size,false> {
117
+ enum {
118
+ IsLower = ((Mode&Lower)==Lower),
119
+ I = IsLower ? Index : Size - Index - 1,
120
+ S = IsLower ? 0 : I+1
121
+ };
122
+ static void run(const Lhs& lhs, Rhs& rhs)
123
+ {
124
+ if (Index>0)
125
+ rhs.coeffRef(I) -= lhs.row(I).template segment<Index>(S).transpose()
126
+ .cwiseProduct(rhs.template segment<Index>(S)).sum();
127
+
128
+ if(!(Mode & UnitDiag))
129
+ rhs.coeffRef(I) /= lhs.coeff(I,I);
130
+
131
+ triangular_solver_unroller<Lhs,Rhs,Mode,Index+1,Size>::run(lhs,rhs);
132
+ }
133
+ };
134
+
135
+ template<typename Lhs, typename Rhs, int Mode, int Index, int Size>
136
+ struct triangular_solver_unroller<Lhs,Rhs,Mode,Index,Size,true> {
137
+ static void run(const Lhs&, Rhs&) {}
138
+ };
139
+
140
+ template<typename Lhs, typename Rhs, int Mode>
141
+ struct triangular_solver_selector<Lhs,Rhs,OnTheLeft,Mode,CompleteUnrolling,1> {
142
+ static void run(const Lhs& lhs, Rhs& rhs)
143
+ { triangular_solver_unroller<Lhs,Rhs,Mode,0,Rhs::SizeAtCompileTime>::run(lhs,rhs); }
144
+ };
145
+
146
+ template<typename Lhs, typename Rhs, int Mode>
147
+ struct triangular_solver_selector<Lhs,Rhs,OnTheRight,Mode,CompleteUnrolling,1> {
148
+ static void run(const Lhs& lhs, Rhs& rhs)
149
+ {
150
+ Transpose<const Lhs> trLhs(lhs);
151
+ Transpose<Rhs> trRhs(rhs);
152
+
153
+ triangular_solver_unroller<Transpose<const Lhs>,Transpose<Rhs>,
154
+ ((Mode&Upper)==Upper ? Lower : Upper) | (Mode&UnitDiag),
155
+ 0,Rhs::SizeAtCompileTime>::run(trLhs,trRhs);
156
+ }
157
+ };
158
+
159
+ } // end namespace internal
160
+
161
+ /***************************************************************************
162
+ * TriangularView methods
163
+ ***************************************************************************/
164
+
165
+ /** "in-place" version of TriangularView::solve() where the result is written in \a other
166
+ *
167
+ * \warning The parameter is only marked 'const' to make the C++ compiler accept a temporary expression here.
168
+ * This function will const_cast it, so constness isn't honored here.
169
+ *
170
+ * See TriangularView:solve() for the details.
171
+ */
172
+ template<typename MatrixType, unsigned int Mode>
173
+ template<int Side, typename OtherDerived>
174
+ void TriangularView<MatrixType,Mode>::solveInPlace(const MatrixBase<OtherDerived>& _other) const
175
+ {
176
+ OtherDerived& other = _other.const_cast_derived();
177
+ eigen_assert( cols() == rows() && ((Side==OnTheLeft && cols() == other.rows()) || (Side==OnTheRight && cols() == other.cols())) );
178
+ eigen_assert((!(Mode & ZeroDiag)) && bool(Mode & (Upper|Lower)));
179
+
180
+ enum { copy = internal::traits<OtherDerived>::Flags & RowMajorBit && OtherDerived::IsVectorAtCompileTime };
181
+ typedef typename internal::conditional<copy,
182
+ typename internal::plain_matrix_type_column_major<OtherDerived>::type, OtherDerived&>::type OtherCopy;
183
+ OtherCopy otherCopy(other);
184
+
185
+ internal::triangular_solver_selector<MatrixType, typename internal::remove_reference<OtherCopy>::type,
186
+ Side, Mode>::run(nestedExpression(), otherCopy);
187
+
188
+ if (copy)
189
+ other = otherCopy;
190
+ }
191
+
192
+ /** \returns the product of the inverse of \c *this with \a other, \a *this being triangular.
193
+ *
194
+ * This function computes the inverse-matrix matrix product inverse(\c *this) * \a other if
195
+ * \a Side==OnTheLeft (the default), or the right-inverse-multiply \a other * inverse(\c *this) if
196
+ * \a Side==OnTheRight.
197
+ *
198
+ * The matrix \c *this must be triangular and invertible (i.e., all the coefficients of the
199
+ * diagonal must be non zero). It works as a forward (resp. backward) substitution if \c *this
200
+ * is an upper (resp. lower) triangular matrix.
201
+ *
202
+ * Example: \include MatrixBase_marked.cpp
203
+ * Output: \verbinclude MatrixBase_marked.out
204
+ *
205
+ * This function returns an expression of the inverse-multiply and can works in-place if it is assigned
206
+ * to the same matrix or vector \a other.
207
+ *
208
+ * For users coming from BLAS, this function (and more specifically solveInPlace()) offer
209
+ * all the operations supported by the \c *TRSV and \c *TRSM BLAS routines.
210
+ *
211
+ * \sa TriangularView::solveInPlace()
212
+ */
213
+ template<typename Derived, unsigned int Mode>
214
+ template<int Side, typename Other>
215
+ const internal::triangular_solve_retval<Side,TriangularView<Derived,Mode>,Other>
216
+ TriangularView<Derived,Mode>::solve(const MatrixBase<Other>& other) const
217
+ {
218
+ return internal::triangular_solve_retval<Side,TriangularView,Other>(*this, other.derived());
219
+ }
220
+
221
+ namespace internal {
222
+
223
+
224
+ template<int Side, typename TriangularType, typename Rhs>
225
+ struct traits<triangular_solve_retval<Side, TriangularType, Rhs> >
226
+ {
227
+ typedef typename internal::plain_matrix_type_column_major<Rhs>::type ReturnType;
228
+ };
229
+
230
+ template<int Side, typename TriangularType, typename Rhs> struct triangular_solve_retval
231
+ : public ReturnByValue<triangular_solve_retval<Side, TriangularType, Rhs> >
232
+ {
233
+ typedef typename remove_all<typename Rhs::Nested>::type RhsNestedCleaned;
234
+ typedef ReturnByValue<triangular_solve_retval> Base;
235
+ typedef typename Base::Index Index;
236
+
237
+ triangular_solve_retval(const TriangularType& tri, const Rhs& rhs)
238
+ : m_triangularMatrix(tri), m_rhs(rhs)
239
+ {}
240
+
241
+ inline Index rows() const { return m_rhs.rows(); }
242
+ inline Index cols() const { return m_rhs.cols(); }
243
+
244
+ template<typename Dest> inline void evalTo(Dest& dst) const
245
+ {
246
+ if(!(is_same<RhsNestedCleaned,Dest>::value && extract_data(dst) == extract_data(m_rhs)))
247
+ dst = m_rhs;
248
+ m_triangularMatrix.template solveInPlace<Side>(dst);
249
+ }
250
+
251
+ protected:
252
+ const TriangularType& m_triangularMatrix;
253
+ typename Rhs::Nested m_rhs;
254
+ };
255
+
256
+ } // namespace internal
257
+
258
+ } // end namespace Eigen
259
+
260
+ #endif // EIGEN_SOLVETRIANGULAR_H
@@ -0,0 +1,203 @@
1
+ // This file is part of Eigen, a lightweight C++ template library
2
+ // for linear algebra.
3
+ //
4
+ // Copyright (C) 2009 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
+ #ifndef EIGEN_STABLENORM_H
11
+ #define EIGEN_STABLENORM_H
12
+
13
+ namespace Eigen {
14
+
15
+ namespace internal {
16
+
17
+ template<typename ExpressionType, typename Scalar>
18
+ inline void stable_norm_kernel(const ExpressionType& bl, Scalar& ssq, Scalar& scale, Scalar& invScale)
19
+ {
20
+ using std::max;
21
+ Scalar maxCoeff = bl.cwiseAbs().maxCoeff();
22
+
23
+ if (maxCoeff>scale)
24
+ {
25
+ ssq = ssq * numext::abs2(scale/maxCoeff);
26
+ Scalar tmp = Scalar(1)/maxCoeff;
27
+ if(tmp > NumTraits<Scalar>::highest())
28
+ {
29
+ invScale = NumTraits<Scalar>::highest();
30
+ scale = Scalar(1)/invScale;
31
+ }
32
+ else
33
+ {
34
+ scale = maxCoeff;
35
+ invScale = tmp;
36
+ }
37
+ }
38
+
39
+ // TODO if the maxCoeff is much much smaller than the current scale,
40
+ // then we can neglect this sub vector
41
+ if(scale>Scalar(0)) // if scale==0, then bl is 0
42
+ ssq += (bl*invScale).squaredNorm();
43
+ }
44
+
45
+ template<typename Derived>
46
+ inline typename NumTraits<typename traits<Derived>::Scalar>::Real
47
+ blueNorm_impl(const EigenBase<Derived>& _vec)
48
+ {
49
+ typedef typename Derived::RealScalar RealScalar;
50
+ typedef typename Derived::Index Index;
51
+ using std::pow;
52
+ using std::min;
53
+ using std::max;
54
+ using std::sqrt;
55
+ using std::abs;
56
+ const Derived& vec(_vec.derived());
57
+ static bool initialized = false;
58
+ static RealScalar b1, b2, s1m, s2m, overfl, rbig, relerr;
59
+ if(!initialized)
60
+ {
61
+ int ibeta, it, iemin, iemax, iexp;
62
+ RealScalar eps;
63
+ // This program calculates the machine-dependent constants
64
+ // bl, b2, slm, s2m, relerr overfl
65
+ // from the "basic" machine-dependent numbers
66
+ // nbig, ibeta, it, iemin, iemax, rbig.
67
+ // The following define the basic machine-dependent constants.
68
+ // For portability, the PORT subprograms "ilmaeh" and "rlmach"
69
+ // are used. For any specific computer, each of the assignment
70
+ // statements can be replaced
71
+ ibeta = std::numeric_limits<RealScalar>::radix; // base for floating-point numbers
72
+ it = std::numeric_limits<RealScalar>::digits; // number of base-beta digits in mantissa
73
+ iemin = std::numeric_limits<RealScalar>::min_exponent; // minimum exponent
74
+ iemax = std::numeric_limits<RealScalar>::max_exponent; // maximum exponent
75
+ rbig = (std::numeric_limits<RealScalar>::max)(); // largest floating-point number
76
+
77
+ iexp = -((1-iemin)/2);
78
+ b1 = RealScalar(pow(RealScalar(ibeta),RealScalar(iexp))); // lower boundary of midrange
79
+ iexp = (iemax + 1 - it)/2;
80
+ b2 = RealScalar(pow(RealScalar(ibeta),RealScalar(iexp))); // upper boundary of midrange
81
+
82
+ iexp = (2-iemin)/2;
83
+ s1m = RealScalar(pow(RealScalar(ibeta),RealScalar(iexp))); // scaling factor for lower range
84
+ iexp = - ((iemax+it)/2);
85
+ s2m = RealScalar(pow(RealScalar(ibeta),RealScalar(iexp))); // scaling factor for upper range
86
+
87
+ overfl = rbig*s2m; // overflow boundary for abig
88
+ eps = RealScalar(pow(double(ibeta), 1-it));
89
+ relerr = sqrt(eps); // tolerance for neglecting asml
90
+ initialized = true;
91
+ }
92
+ Index n = vec.size();
93
+ RealScalar ab2 = b2 / RealScalar(n);
94
+ RealScalar asml = RealScalar(0);
95
+ RealScalar amed = RealScalar(0);
96
+ RealScalar abig = RealScalar(0);
97
+ for(typename Derived::InnerIterator it(vec, 0); it; ++it)
98
+ {
99
+ RealScalar ax = abs(it.value());
100
+ if(ax > ab2) abig += numext::abs2(ax*s2m);
101
+ else if(ax < b1) asml += numext::abs2(ax*s1m);
102
+ else amed += numext::abs2(ax);
103
+ }
104
+ if(abig > RealScalar(0))
105
+ {
106
+ abig = sqrt(abig);
107
+ if(abig > overfl)
108
+ {
109
+ return rbig;
110
+ }
111
+ if(amed > RealScalar(0))
112
+ {
113
+ abig = abig/s2m;
114
+ amed = sqrt(amed);
115
+ }
116
+ else
117
+ return abig/s2m;
118
+ }
119
+ else if(asml > RealScalar(0))
120
+ {
121
+ if (amed > RealScalar(0))
122
+ {
123
+ abig = sqrt(amed);
124
+ amed = sqrt(asml) / s1m;
125
+ }
126
+ else
127
+ return sqrt(asml)/s1m;
128
+ }
129
+ else
130
+ return sqrt(amed);
131
+ asml = (min)(abig, amed);
132
+ abig = (max)(abig, amed);
133
+ if(asml <= abig*relerr)
134
+ return abig;
135
+ else
136
+ return abig * sqrt(RealScalar(1) + numext::abs2(asml/abig));
137
+ }
138
+
139
+ } // end namespace internal
140
+
141
+ /** \returns the \em l2 norm of \c *this avoiding underflow and overflow.
142
+ * This version use a blockwise two passes algorithm:
143
+ * 1 - find the absolute largest coefficient \c s
144
+ * 2 - compute \f$ s \Vert \frac{*this}{s} \Vert \f$ in a standard way
145
+ *
146
+ * For architecture/scalar types supporting vectorization, this version
147
+ * is faster than blueNorm(). Otherwise the blueNorm() is much faster.
148
+ *
149
+ * \sa norm(), blueNorm(), hypotNorm()
150
+ */
151
+ template<typename Derived>
152
+ inline typename NumTraits<typename internal::traits<Derived>::Scalar>::Real
153
+ MatrixBase<Derived>::stableNorm() const
154
+ {
155
+ using std::min;
156
+ using std::sqrt;
157
+ const Index blockSize = 4096;
158
+ RealScalar scale(0);
159
+ RealScalar invScale(1);
160
+ RealScalar ssq(0); // sum of square
161
+ enum {
162
+ Alignment = (int(Flags)&DirectAccessBit) || (int(Flags)&AlignedBit) ? 1 : 0
163
+ };
164
+ Index n = size();
165
+ Index bi = internal::first_aligned(derived());
166
+ if (bi>0)
167
+ internal::stable_norm_kernel(this->head(bi), ssq, scale, invScale);
168
+ for (; bi<n; bi+=blockSize)
169
+ internal::stable_norm_kernel(this->segment(bi,(min)(blockSize, n - bi)).template forceAlignedAccessIf<Alignment>(), ssq, scale, invScale);
170
+ return scale * sqrt(ssq);
171
+ }
172
+
173
+ /** \returns the \em l2 norm of \c *this using the Blue's algorithm.
174
+ * A Portable Fortran Program to Find the Euclidean Norm of a Vector,
175
+ * ACM TOMS, Vol 4, Issue 1, 1978.
176
+ *
177
+ * For architecture/scalar types without vectorization, this version
178
+ * is much faster than stableNorm(). Otherwise the stableNorm() is faster.
179
+ *
180
+ * \sa norm(), stableNorm(), hypotNorm()
181
+ */
182
+ template<typename Derived>
183
+ inline typename NumTraits<typename internal::traits<Derived>::Scalar>::Real
184
+ MatrixBase<Derived>::blueNorm() const
185
+ {
186
+ return internal::blueNorm_impl(*this);
187
+ }
188
+
189
+ /** \returns the \em l2 norm of \c *this avoiding undeflow and overflow.
190
+ * This version use a concatenation of hypot() calls, and it is very slow.
191
+ *
192
+ * \sa norm(), stableNorm()
193
+ */
194
+ template<typename Derived>
195
+ inline typename NumTraits<typename internal::traits<Derived>::Scalar>::Real
196
+ MatrixBase<Derived>::hypotNorm() const
197
+ {
198
+ return this->cwiseAbs().redux(internal::scalar_hypot_op<RealScalar>());
199
+ }
200
+
201
+ } // end namespace Eigen
202
+
203
+ #endif // EIGEN_STABLENORM_H