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,154 @@
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_COMMAINITIALIZER_H
12
+ #define EIGEN_COMMAINITIALIZER_H
13
+
14
+ namespace Eigen {
15
+
16
+ /** \class CommaInitializer
17
+ * \ingroup Core_Module
18
+ *
19
+ * \brief Helper class used by the comma initializer operator
20
+ *
21
+ * This class is internally used to implement the comma initializer feature. It is
22
+ * the return type of MatrixBase::operator<<, and most of the time this is the only
23
+ * way it is used.
24
+ *
25
+ * \sa \ref MatrixBaseCommaInitRef "MatrixBase::operator<<", CommaInitializer::finished()
26
+ */
27
+ template<typename XprType>
28
+ struct CommaInitializer
29
+ {
30
+ typedef typename XprType::Scalar Scalar;
31
+ typedef typename XprType::Index Index;
32
+
33
+ inline CommaInitializer(XprType& xpr, const Scalar& s)
34
+ : m_xpr(xpr), m_row(0), m_col(1), m_currentBlockRows(1)
35
+ {
36
+ m_xpr.coeffRef(0,0) = s;
37
+ }
38
+
39
+ template<typename OtherDerived>
40
+ inline CommaInitializer(XprType& xpr, const DenseBase<OtherDerived>& other)
41
+ : m_xpr(xpr), m_row(0), m_col(other.cols()), m_currentBlockRows(other.rows())
42
+ {
43
+ m_xpr.block(0, 0, other.rows(), other.cols()) = other;
44
+ }
45
+
46
+ /* Copy/Move constructor which transfers ownership. This is crucial in
47
+ * absence of return value optimization to avoid assertions during destruction. */
48
+ // FIXME in C++11 mode this could be replaced by a proper RValue constructor
49
+ inline CommaInitializer(const CommaInitializer& o)
50
+ : m_xpr(o.m_xpr), m_row(o.m_row), m_col(o.m_col), m_currentBlockRows(o.m_currentBlockRows) {
51
+ // Mark original object as finished. In absence of R-value references we need to const_cast:
52
+ const_cast<CommaInitializer&>(o).m_row = m_xpr.rows();
53
+ const_cast<CommaInitializer&>(o).m_col = m_xpr.cols();
54
+ const_cast<CommaInitializer&>(o).m_currentBlockRows = 0;
55
+ }
56
+
57
+ /* inserts a scalar value in the target matrix */
58
+ CommaInitializer& operator,(const Scalar& s)
59
+ {
60
+ if (m_col==m_xpr.cols())
61
+ {
62
+ m_row+=m_currentBlockRows;
63
+ m_col = 0;
64
+ m_currentBlockRows = 1;
65
+ eigen_assert(m_row<m_xpr.rows()
66
+ && "Too many rows passed to comma initializer (operator<<)");
67
+ }
68
+ eigen_assert(m_col<m_xpr.cols()
69
+ && "Too many coefficients passed to comma initializer (operator<<)");
70
+ eigen_assert(m_currentBlockRows==1);
71
+ m_xpr.coeffRef(m_row, m_col++) = s;
72
+ return *this;
73
+ }
74
+
75
+ /* inserts a matrix expression in the target matrix */
76
+ template<typename OtherDerived>
77
+ CommaInitializer& operator,(const DenseBase<OtherDerived>& other)
78
+ {
79
+ if(other.cols()==0 || other.rows()==0)
80
+ return *this;
81
+ if (m_col==m_xpr.cols())
82
+ {
83
+ m_row+=m_currentBlockRows;
84
+ m_col = 0;
85
+ m_currentBlockRows = other.rows();
86
+ eigen_assert(m_row+m_currentBlockRows<=m_xpr.rows()
87
+ && "Too many rows passed to comma initializer (operator<<)");
88
+ }
89
+ eigen_assert(m_col<m_xpr.cols()
90
+ && "Too many coefficients passed to comma initializer (operator<<)");
91
+ eigen_assert(m_currentBlockRows==other.rows());
92
+ if (OtherDerived::SizeAtCompileTime != Dynamic)
93
+ m_xpr.template block<OtherDerived::RowsAtCompileTime != Dynamic ? OtherDerived::RowsAtCompileTime : 1,
94
+ OtherDerived::ColsAtCompileTime != Dynamic ? OtherDerived::ColsAtCompileTime : 1>
95
+ (m_row, m_col) = other;
96
+ else
97
+ m_xpr.block(m_row, m_col, other.rows(), other.cols()) = other;
98
+ m_col += other.cols();
99
+ return *this;
100
+ }
101
+
102
+ inline ~CommaInitializer()
103
+ {
104
+ eigen_assert((m_row+m_currentBlockRows) == m_xpr.rows()
105
+ && m_col == m_xpr.cols()
106
+ && "Too few coefficients passed to comma initializer (operator<<)");
107
+ }
108
+
109
+ /** \returns the built matrix once all its coefficients have been set.
110
+ * Calling finished is 100% optional. Its purpose is to write expressions
111
+ * like this:
112
+ * \code
113
+ * quaternion.fromRotationMatrix((Matrix3f() << axis0, axis1, axis2).finished());
114
+ * \endcode
115
+ */
116
+ inline XprType& finished() { return m_xpr; }
117
+
118
+ XprType& m_xpr; // target expression
119
+ Index m_row; // current row id
120
+ Index m_col; // current col id
121
+ Index m_currentBlockRows; // current block height
122
+ };
123
+
124
+ /** \anchor MatrixBaseCommaInitRef
125
+ * Convenient operator to set the coefficients of a matrix.
126
+ *
127
+ * The coefficients must be provided in a row major order and exactly match
128
+ * the size of the matrix. Otherwise an assertion is raised.
129
+ *
130
+ * Example: \include MatrixBase_set.cpp
131
+ * Output: \verbinclude MatrixBase_set.out
132
+ *
133
+ * \note According the c++ standard, the argument expressions of this comma initializer are evaluated in arbitrary order.
134
+ *
135
+ * \sa CommaInitializer::finished(), class CommaInitializer
136
+ */
137
+ template<typename Derived>
138
+ inline CommaInitializer<Derived> DenseBase<Derived>::operator<< (const Scalar& s)
139
+ {
140
+ return CommaInitializer<Derived>(*static_cast<Derived*>(this), s);
141
+ }
142
+
143
+ /** \sa operator<<(const Scalar&) */
144
+ template<typename Derived>
145
+ template<typename OtherDerived>
146
+ inline CommaInitializer<Derived>
147
+ DenseBase<Derived>::operator<<(const DenseBase<OtherDerived>& other)
148
+ {
149
+ return CommaInitializer<Derived>(*static_cast<Derived *>(this), other);
150
+ }
151
+
152
+ } // end namespace Eigen
153
+
154
+ #endif // EIGEN_COMMAINITIALIZER_H
@@ -0,0 +1,61 @@
1
+ // This file is part of Eigen, a lightweight C++ template library
2
+ // for linear algebra.
3
+ //
4
+ // Copyright (C) 2008-2010 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_COREITERATORS_H
11
+ #define EIGEN_COREITERATORS_H
12
+
13
+ namespace Eigen {
14
+
15
+ /* This file contains the respective InnerIterator definition of the expressions defined in Eigen/Core
16
+ */
17
+
18
+ /** \ingroup SparseCore_Module
19
+ * \class InnerIterator
20
+ * \brief An InnerIterator allows to loop over the element of a sparse (or dense) matrix or expression
21
+ *
22
+ * todo
23
+ */
24
+
25
+ // generic version for dense matrix and expressions
26
+ template<typename Derived> class DenseBase<Derived>::InnerIterator
27
+ {
28
+ protected:
29
+ typedef typename Derived::Scalar Scalar;
30
+ typedef typename Derived::Index Index;
31
+
32
+ enum { IsRowMajor = (Derived::Flags&RowMajorBit)==RowMajorBit };
33
+ public:
34
+ EIGEN_STRONG_INLINE InnerIterator(const Derived& expr, Index outer)
35
+ : m_expression(expr), m_inner(0), m_outer(outer), m_end(expr.innerSize())
36
+ {}
37
+
38
+ EIGEN_STRONG_INLINE Scalar value() const
39
+ {
40
+ return (IsRowMajor) ? m_expression.coeff(m_outer, m_inner)
41
+ : m_expression.coeff(m_inner, m_outer);
42
+ }
43
+
44
+ EIGEN_STRONG_INLINE InnerIterator& operator++() { m_inner++; return *this; }
45
+
46
+ EIGEN_STRONG_INLINE Index index() const { return m_inner; }
47
+ inline Index row() const { return IsRowMajor ? m_outer : index(); }
48
+ inline Index col() const { return IsRowMajor ? index() : m_outer; }
49
+
50
+ EIGEN_STRONG_INLINE operator bool() const { return m_inner < m_end && m_inner>=0; }
51
+
52
+ protected:
53
+ const Derived& m_expression;
54
+ Index m_inner;
55
+ const Index m_outer;
56
+ const Index m_end;
57
+ };
58
+
59
+ } // end namespace Eigen
60
+
61
+ #endif // EIGEN_COREITERATORS_H
@@ -0,0 +1,230 @@
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
+ // 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_CWISE_BINARY_OP_H
12
+ #define EIGEN_CWISE_BINARY_OP_H
13
+
14
+ namespace Eigen {
15
+
16
+ /** \class CwiseBinaryOp
17
+ * \ingroup Core_Module
18
+ *
19
+ * \brief Generic expression where a coefficient-wise binary operator is applied to two expressions
20
+ *
21
+ * \param BinaryOp template functor implementing the operator
22
+ * \param Lhs the type of the left-hand side
23
+ * \param Rhs the type of the right-hand side
24
+ *
25
+ * This class represents an expression where a coefficient-wise binary operator is applied to two expressions.
26
+ * It is the return type of binary operators, by which we mean only those binary operators where
27
+ * both the left-hand side and the right-hand side are Eigen expressions.
28
+ * For example, the return type of matrix1+matrix2 is a CwiseBinaryOp.
29
+ *
30
+ * Most of the time, this is the only way that it is used, so you typically don't have to name
31
+ * CwiseBinaryOp types explicitly.
32
+ *
33
+ * \sa MatrixBase::binaryExpr(const MatrixBase<OtherDerived> &,const CustomBinaryOp &) const, class CwiseUnaryOp, class CwiseNullaryOp
34
+ */
35
+
36
+ namespace internal {
37
+ template<typename BinaryOp, typename Lhs, typename Rhs>
38
+ struct traits<CwiseBinaryOp<BinaryOp, Lhs, Rhs> >
39
+ {
40
+ // we must not inherit from traits<Lhs> since it has
41
+ // the potential to cause problems with MSVC
42
+ typedef typename remove_all<Lhs>::type Ancestor;
43
+ typedef typename traits<Ancestor>::XprKind XprKind;
44
+ enum {
45
+ RowsAtCompileTime = traits<Ancestor>::RowsAtCompileTime,
46
+ ColsAtCompileTime = traits<Ancestor>::ColsAtCompileTime,
47
+ MaxRowsAtCompileTime = traits<Ancestor>::MaxRowsAtCompileTime,
48
+ MaxColsAtCompileTime = traits<Ancestor>::MaxColsAtCompileTime
49
+ };
50
+
51
+ // even though we require Lhs and Rhs to have the same scalar type (see CwiseBinaryOp constructor),
52
+ // we still want to handle the case when the result type is different.
53
+ typedef typename result_of<
54
+ BinaryOp(
55
+ typename Lhs::Scalar,
56
+ typename Rhs::Scalar
57
+ )
58
+ >::type Scalar;
59
+ typedef typename promote_storage_type<typename traits<Lhs>::StorageKind,
60
+ typename traits<Rhs>::StorageKind>::ret StorageKind;
61
+ typedef typename promote_index_type<typename traits<Lhs>::Index,
62
+ typename traits<Rhs>::Index>::type Index;
63
+ typedef typename Lhs::Nested LhsNested;
64
+ typedef typename Rhs::Nested RhsNested;
65
+ typedef typename remove_reference<LhsNested>::type _LhsNested;
66
+ typedef typename remove_reference<RhsNested>::type _RhsNested;
67
+ enum {
68
+ LhsCoeffReadCost = _LhsNested::CoeffReadCost,
69
+ RhsCoeffReadCost = _RhsNested::CoeffReadCost,
70
+ LhsFlags = _LhsNested::Flags,
71
+ RhsFlags = _RhsNested::Flags,
72
+ SameType = is_same<typename _LhsNested::Scalar,typename _RhsNested::Scalar>::value,
73
+ StorageOrdersAgree = (int(Lhs::Flags)&RowMajorBit)==(int(Rhs::Flags)&RowMajorBit),
74
+ Flags0 = (int(LhsFlags) | int(RhsFlags)) & (
75
+ HereditaryBits
76
+ | (int(LhsFlags) & int(RhsFlags) &
77
+ ( AlignedBit
78
+ | (StorageOrdersAgree ? LinearAccessBit : 0)
79
+ | (functor_traits<BinaryOp>::PacketAccess && StorageOrdersAgree && SameType ? PacketAccessBit : 0)
80
+ )
81
+ )
82
+ ),
83
+ Flags = (Flags0 & ~RowMajorBit) | (LhsFlags & RowMajorBit),
84
+ Cost0 = EIGEN_ADD_COST(LhsCoeffReadCost,RhsCoeffReadCost),
85
+ CoeffReadCost = EIGEN_ADD_COST(Cost0,functor_traits<BinaryOp>::Cost)
86
+ };
87
+ };
88
+ } // end namespace internal
89
+
90
+ // we require Lhs and Rhs to have the same scalar type. Currently there is no example of a binary functor
91
+ // that would take two operands of different types. If there were such an example, then this check should be
92
+ // moved to the BinaryOp functors, on a per-case basis. This would however require a change in the BinaryOp functors, as
93
+ // currently they take only one typename Scalar template parameter.
94
+ // It is tempting to always allow mixing different types but remember that this is often impossible in the vectorized paths.
95
+ // So allowing mixing different types gives very unexpected errors when enabling vectorization, when the user tries to
96
+ // add together a float matrix and a double matrix.
97
+ #define EIGEN_CHECK_BINARY_COMPATIBILIY(BINOP,LHS,RHS) \
98
+ EIGEN_STATIC_ASSERT((internal::functor_is_product_like<BINOP>::ret \
99
+ ? int(internal::scalar_product_traits<LHS, RHS>::Defined) \
100
+ : int(internal::is_same<LHS, RHS>::value)), \
101
+ YOU_MIXED_DIFFERENT_NUMERIC_TYPES__YOU_NEED_TO_USE_THE_CAST_METHOD_OF_MATRIXBASE_TO_CAST_NUMERIC_TYPES_EXPLICITLY)
102
+
103
+ template<typename BinaryOp, typename Lhs, typename Rhs, typename StorageKind>
104
+ class CwiseBinaryOpImpl;
105
+
106
+ template<typename BinaryOp, typename Lhs, typename Rhs>
107
+ class CwiseBinaryOp : internal::no_assignment_operator,
108
+ public CwiseBinaryOpImpl<
109
+ BinaryOp, Lhs, Rhs,
110
+ typename internal::promote_storage_type<typename internal::traits<Lhs>::StorageKind,
111
+ typename internal::traits<Rhs>::StorageKind>::ret>
112
+ {
113
+ public:
114
+
115
+ typedef typename CwiseBinaryOpImpl<
116
+ BinaryOp, Lhs, Rhs,
117
+ typename internal::promote_storage_type<typename internal::traits<Lhs>::StorageKind,
118
+ typename internal::traits<Rhs>::StorageKind>::ret>::Base Base;
119
+ EIGEN_GENERIC_PUBLIC_INTERFACE(CwiseBinaryOp)
120
+
121
+ typedef typename internal::nested<Lhs>::type LhsNested;
122
+ typedef typename internal::nested<Rhs>::type RhsNested;
123
+ typedef typename internal::remove_reference<LhsNested>::type _LhsNested;
124
+ typedef typename internal::remove_reference<RhsNested>::type _RhsNested;
125
+
126
+ EIGEN_STRONG_INLINE CwiseBinaryOp(const Lhs& aLhs, const Rhs& aRhs, const BinaryOp& func = BinaryOp())
127
+ : m_lhs(aLhs), m_rhs(aRhs), m_functor(func)
128
+ {
129
+ EIGEN_CHECK_BINARY_COMPATIBILIY(BinaryOp,typename Lhs::Scalar,typename Rhs::Scalar);
130
+ // require the sizes to match
131
+ EIGEN_STATIC_ASSERT_SAME_MATRIX_SIZE(Lhs, Rhs)
132
+ eigen_assert(aLhs.rows() == aRhs.rows() && aLhs.cols() == aRhs.cols());
133
+ }
134
+
135
+ EIGEN_STRONG_INLINE Index rows() const {
136
+ // return the fixed size type if available to enable compile time optimizations
137
+ if (internal::traits<typename internal::remove_all<LhsNested>::type>::RowsAtCompileTime==Dynamic)
138
+ return m_rhs.rows();
139
+ else
140
+ return m_lhs.rows();
141
+ }
142
+ EIGEN_STRONG_INLINE Index cols() const {
143
+ // return the fixed size type if available to enable compile time optimizations
144
+ if (internal::traits<typename internal::remove_all<LhsNested>::type>::ColsAtCompileTime==Dynamic)
145
+ return m_rhs.cols();
146
+ else
147
+ return m_lhs.cols();
148
+ }
149
+
150
+ /** \returns the left hand side nested expression */
151
+ const _LhsNested& lhs() const { return m_lhs; }
152
+ /** \returns the right hand side nested expression */
153
+ const _RhsNested& rhs() const { return m_rhs; }
154
+ /** \returns the functor representing the binary operation */
155
+ const BinaryOp& functor() const { return m_functor; }
156
+
157
+ protected:
158
+ LhsNested m_lhs;
159
+ RhsNested m_rhs;
160
+ const BinaryOp m_functor;
161
+ };
162
+
163
+ template<typename BinaryOp, typename Lhs, typename Rhs>
164
+ class CwiseBinaryOpImpl<BinaryOp, Lhs, Rhs, Dense>
165
+ : public internal::dense_xpr_base<CwiseBinaryOp<BinaryOp, Lhs, Rhs> >::type
166
+ {
167
+ typedef CwiseBinaryOp<BinaryOp, Lhs, Rhs> Derived;
168
+ public:
169
+
170
+ typedef typename internal::dense_xpr_base<CwiseBinaryOp<BinaryOp, Lhs, Rhs> >::type Base;
171
+ EIGEN_DENSE_PUBLIC_INTERFACE( Derived )
172
+
173
+ EIGEN_STRONG_INLINE const Scalar coeff(Index rowId, Index colId) const
174
+ {
175
+ return derived().functor()(derived().lhs().coeff(rowId, colId),
176
+ derived().rhs().coeff(rowId, colId));
177
+ }
178
+
179
+ template<int LoadMode>
180
+ EIGEN_STRONG_INLINE PacketScalar packet(Index rowId, Index colId) const
181
+ {
182
+ return derived().functor().packetOp(derived().lhs().template packet<LoadMode>(rowId, colId),
183
+ derived().rhs().template packet<LoadMode>(rowId, colId));
184
+ }
185
+
186
+ EIGEN_STRONG_INLINE const Scalar coeff(Index index) const
187
+ {
188
+ return derived().functor()(derived().lhs().coeff(index),
189
+ derived().rhs().coeff(index));
190
+ }
191
+
192
+ template<int LoadMode>
193
+ EIGEN_STRONG_INLINE PacketScalar packet(Index index) const
194
+ {
195
+ return derived().functor().packetOp(derived().lhs().template packet<LoadMode>(index),
196
+ derived().rhs().template packet<LoadMode>(index));
197
+ }
198
+ };
199
+
200
+ /** replaces \c *this by \c *this - \a other.
201
+ *
202
+ * \returns a reference to \c *this
203
+ */
204
+ template<typename Derived>
205
+ template<typename OtherDerived>
206
+ EIGEN_STRONG_INLINE Derived &
207
+ MatrixBase<Derived>::operator-=(const MatrixBase<OtherDerived> &other)
208
+ {
209
+ SelfCwiseBinaryOp<internal::scalar_difference_op<Scalar>, Derived, OtherDerived> tmp(derived());
210
+ tmp = other.derived();
211
+ return derived();
212
+ }
213
+
214
+ /** replaces \c *this by \c *this + \a other.
215
+ *
216
+ * \returns a reference to \c *this
217
+ */
218
+ template<typename Derived>
219
+ template<typename OtherDerived>
220
+ EIGEN_STRONG_INLINE Derived &
221
+ MatrixBase<Derived>::operator+=(const MatrixBase<OtherDerived>& other)
222
+ {
223
+ SelfCwiseBinaryOp<internal::scalar_sum_op<Scalar>, Derived, OtherDerived> tmp(derived());
224
+ tmp = other.derived();
225
+ return derived();
226
+ }
227
+
228
+ } // end namespace Eigen
229
+
230
+ #endif // EIGEN_CWISE_BINARY_OP_H
@@ -0,0 +1,864 @@
1
+ // This file is part of Eigen, a lightweight C++ template library
2
+ // for linear algebra.
3
+ //
4
+ // Copyright (C) 2008-2010 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_CWISE_NULLARY_OP_H
11
+ #define EIGEN_CWISE_NULLARY_OP_H
12
+
13
+ namespace Eigen {
14
+
15
+ /** \class CwiseNullaryOp
16
+ * \ingroup Core_Module
17
+ *
18
+ * \brief Generic expression of a matrix where all coefficients are defined by a functor
19
+ *
20
+ * \param NullaryOp template functor implementing the operator
21
+ * \param PlainObjectType the underlying plain matrix/array type
22
+ *
23
+ * This class represents an expression of a generic nullary operator.
24
+ * It is the return type of the Ones(), Zero(), Constant(), Identity() and Random() methods,
25
+ * and most of the time this is the only way it is used.
26
+ *
27
+ * However, if you want to write a function returning such an expression, you
28
+ * will need to use this class.
29
+ *
30
+ * \sa class CwiseUnaryOp, class CwiseBinaryOp, DenseBase::NullaryExpr()
31
+ */
32
+
33
+ namespace internal {
34
+ template<typename NullaryOp, typename PlainObjectType>
35
+ struct traits<CwiseNullaryOp<NullaryOp, PlainObjectType> > : traits<PlainObjectType>
36
+ {
37
+ enum {
38
+ Flags = (traits<PlainObjectType>::Flags
39
+ & ( HereditaryBits
40
+ | (functor_has_linear_access<NullaryOp>::ret ? LinearAccessBit : 0)
41
+ | (functor_traits<NullaryOp>::PacketAccess ? PacketAccessBit : 0)))
42
+ | (functor_traits<NullaryOp>::IsRepeatable ? 0 : EvalBeforeNestingBit),
43
+ CoeffReadCost = functor_traits<NullaryOp>::Cost
44
+ };
45
+ };
46
+ }
47
+
48
+ template<typename NullaryOp, typename PlainObjectType>
49
+ class CwiseNullaryOp : internal::no_assignment_operator,
50
+ public internal::dense_xpr_base< CwiseNullaryOp<NullaryOp, PlainObjectType> >::type
51
+ {
52
+ public:
53
+
54
+ typedef typename internal::dense_xpr_base<CwiseNullaryOp>::type Base;
55
+ EIGEN_DENSE_PUBLIC_INTERFACE(CwiseNullaryOp)
56
+
57
+ CwiseNullaryOp(Index nbRows, Index nbCols, const NullaryOp& func = NullaryOp())
58
+ : m_rows(nbRows), m_cols(nbCols), m_functor(func)
59
+ {
60
+ eigen_assert(nbRows >= 0
61
+ && (RowsAtCompileTime == Dynamic || RowsAtCompileTime == nbRows)
62
+ && nbCols >= 0
63
+ && (ColsAtCompileTime == Dynamic || ColsAtCompileTime == nbCols));
64
+ }
65
+
66
+ EIGEN_STRONG_INLINE Index rows() const { return m_rows.value(); }
67
+ EIGEN_STRONG_INLINE Index cols() const { return m_cols.value(); }
68
+
69
+ EIGEN_STRONG_INLINE const Scalar coeff(Index rowId, Index colId) const
70
+ {
71
+ return m_functor(rowId, colId);
72
+ }
73
+
74
+ template<int LoadMode>
75
+ EIGEN_STRONG_INLINE PacketScalar packet(Index rowId, Index colId) const
76
+ {
77
+ return m_functor.packetOp(rowId, colId);
78
+ }
79
+
80
+ EIGEN_STRONG_INLINE const Scalar coeff(Index index) const
81
+ {
82
+ return m_functor(index);
83
+ }
84
+
85
+ template<int LoadMode>
86
+ EIGEN_STRONG_INLINE PacketScalar packet(Index index) const
87
+ {
88
+ return m_functor.packetOp(index);
89
+ }
90
+
91
+ /** \returns the functor representing the nullary operation */
92
+ const NullaryOp& functor() const { return m_functor; }
93
+
94
+ protected:
95
+ const internal::variable_if_dynamic<Index, RowsAtCompileTime> m_rows;
96
+ const internal::variable_if_dynamic<Index, ColsAtCompileTime> m_cols;
97
+ const NullaryOp m_functor;
98
+ };
99
+
100
+
101
+ /** \returns an expression of a matrix defined by a custom functor \a func
102
+ *
103
+ * The parameters \a rows and \a cols are the number of rows and of columns of
104
+ * the returned matrix. Must be compatible with this MatrixBase type.
105
+ *
106
+ * This variant is meant to be used for dynamic-size matrix types. For fixed-size types,
107
+ * it is redundant to pass \a rows and \a cols as arguments, so Zero() should be used
108
+ * instead.
109
+ *
110
+ * The template parameter \a CustomNullaryOp is the type of the functor.
111
+ *
112
+ * \sa class CwiseNullaryOp
113
+ */
114
+ template<typename Derived>
115
+ template<typename CustomNullaryOp>
116
+ EIGEN_STRONG_INLINE const CwiseNullaryOp<CustomNullaryOp, Derived>
117
+ DenseBase<Derived>::NullaryExpr(Index rows, Index cols, const CustomNullaryOp& func)
118
+ {
119
+ return CwiseNullaryOp<CustomNullaryOp, Derived>(rows, cols, func);
120
+ }
121
+
122
+ /** \returns an expression of a matrix defined by a custom functor \a func
123
+ *
124
+ * The parameter \a size is the size of the returned vector.
125
+ * Must be compatible with this MatrixBase type.
126
+ *
127
+ * \only_for_vectors
128
+ *
129
+ * This variant is meant to be used for dynamic-size vector types. For fixed-size types,
130
+ * it is redundant to pass \a size as argument, so Zero() should be used
131
+ * instead.
132
+ *
133
+ * The template parameter \a CustomNullaryOp is the type of the functor.
134
+ *
135
+ * \sa class CwiseNullaryOp
136
+ */
137
+ template<typename Derived>
138
+ template<typename CustomNullaryOp>
139
+ EIGEN_STRONG_INLINE const CwiseNullaryOp<CustomNullaryOp, Derived>
140
+ DenseBase<Derived>::NullaryExpr(Index size, const CustomNullaryOp& func)
141
+ {
142
+ EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived)
143
+ if(RowsAtCompileTime == 1) return CwiseNullaryOp<CustomNullaryOp, Derived>(1, size, func);
144
+ else return CwiseNullaryOp<CustomNullaryOp, Derived>(size, 1, func);
145
+ }
146
+
147
+ /** \returns an expression of a matrix defined by a custom functor \a func
148
+ *
149
+ * This variant is only for fixed-size DenseBase types. For dynamic-size types, you
150
+ * need to use the variants taking size arguments.
151
+ *
152
+ * The template parameter \a CustomNullaryOp is the type of the functor.
153
+ *
154
+ * \sa class CwiseNullaryOp
155
+ */
156
+ template<typename Derived>
157
+ template<typename CustomNullaryOp>
158
+ EIGEN_STRONG_INLINE const CwiseNullaryOp<CustomNullaryOp, Derived>
159
+ DenseBase<Derived>::NullaryExpr(const CustomNullaryOp& func)
160
+ {
161
+ return CwiseNullaryOp<CustomNullaryOp, Derived>(RowsAtCompileTime, ColsAtCompileTime, func);
162
+ }
163
+
164
+ /** \returns an expression of a constant matrix of value \a value
165
+ *
166
+ * The parameters \a nbRows and \a nbCols are the number of rows and of columns of
167
+ * the returned matrix. Must be compatible with this DenseBase type.
168
+ *
169
+ * This variant is meant to be used for dynamic-size matrix types. For fixed-size types,
170
+ * it is redundant to pass \a nbRows and \a nbCols as arguments, so Zero() should be used
171
+ * instead.
172
+ *
173
+ * The template parameter \a CustomNullaryOp is the type of the functor.
174
+ *
175
+ * \sa class CwiseNullaryOp
176
+ */
177
+ template<typename Derived>
178
+ EIGEN_STRONG_INLINE const typename DenseBase<Derived>::ConstantReturnType
179
+ DenseBase<Derived>::Constant(Index nbRows, Index nbCols, const Scalar& value)
180
+ {
181
+ return DenseBase<Derived>::NullaryExpr(nbRows, nbCols, internal::scalar_constant_op<Scalar>(value));
182
+ }
183
+
184
+ /** \returns an expression of a constant matrix of value \a value
185
+ *
186
+ * The parameter \a size is the size of the returned vector.
187
+ * Must be compatible with this DenseBase type.
188
+ *
189
+ * \only_for_vectors
190
+ *
191
+ * This variant is meant to be used for dynamic-size vector types. For fixed-size types,
192
+ * it is redundant to pass \a size as argument, so Zero() should be used
193
+ * instead.
194
+ *
195
+ * The template parameter \a CustomNullaryOp is the type of the functor.
196
+ *
197
+ * \sa class CwiseNullaryOp
198
+ */
199
+ template<typename Derived>
200
+ EIGEN_STRONG_INLINE const typename DenseBase<Derived>::ConstantReturnType
201
+ DenseBase<Derived>::Constant(Index size, const Scalar& value)
202
+ {
203
+ return DenseBase<Derived>::NullaryExpr(size, internal::scalar_constant_op<Scalar>(value));
204
+ }
205
+
206
+ /** \returns an expression of a constant matrix of value \a value
207
+ *
208
+ * This variant is only for fixed-size DenseBase types. For dynamic-size types, you
209
+ * need to use the variants taking size arguments.
210
+ *
211
+ * The template parameter \a CustomNullaryOp is the type of the functor.
212
+ *
213
+ * \sa class CwiseNullaryOp
214
+ */
215
+ template<typename Derived>
216
+ EIGEN_STRONG_INLINE const typename DenseBase<Derived>::ConstantReturnType
217
+ DenseBase<Derived>::Constant(const Scalar& value)
218
+ {
219
+ EIGEN_STATIC_ASSERT_FIXED_SIZE(Derived)
220
+ return DenseBase<Derived>::NullaryExpr(RowsAtCompileTime, ColsAtCompileTime, internal::scalar_constant_op<Scalar>(value));
221
+ }
222
+
223
+ /**
224
+ * \brief Sets a linearly space vector.
225
+ *
226
+ * The function generates 'size' equally spaced values in the closed interval [low,high].
227
+ * This particular version of LinSpaced() uses sequential access, i.e. vector access is
228
+ * assumed to be a(0), a(1), ..., a(size). This assumption allows for better vectorization
229
+ * and yields faster code than the random access version.
230
+ *
231
+ * When size is set to 1, a vector of length 1 containing 'high' is returned.
232
+ *
233
+ * \only_for_vectors
234
+ *
235
+ * Example: \include DenseBase_LinSpaced_seq.cpp
236
+ * Output: \verbinclude DenseBase_LinSpaced_seq.out
237
+ *
238
+ * \sa setLinSpaced(Index,const Scalar&,const Scalar&), LinSpaced(Index,Scalar,Scalar), CwiseNullaryOp
239
+ */
240
+ template<typename Derived>
241
+ EIGEN_STRONG_INLINE const typename DenseBase<Derived>::SequentialLinSpacedReturnType
242
+ DenseBase<Derived>::LinSpaced(Sequential_t, Index size, const Scalar& low, const Scalar& high)
243
+ {
244
+ EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived)
245
+ return DenseBase<Derived>::NullaryExpr(size, internal::linspaced_op<Scalar,false>(low,high,size));
246
+ }
247
+
248
+ /**
249
+ * \copydoc DenseBase::LinSpaced(Sequential_t, Index, const Scalar&, const Scalar&)
250
+ * Special version for fixed size types which does not require the size parameter.
251
+ */
252
+ template<typename Derived>
253
+ EIGEN_STRONG_INLINE const typename DenseBase<Derived>::SequentialLinSpacedReturnType
254
+ DenseBase<Derived>::LinSpaced(Sequential_t, const Scalar& low, const Scalar& high)
255
+ {
256
+ EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived)
257
+ EIGEN_STATIC_ASSERT_FIXED_SIZE(Derived)
258
+ return DenseBase<Derived>::NullaryExpr(Derived::SizeAtCompileTime, internal::linspaced_op<Scalar,false>(low,high,Derived::SizeAtCompileTime));
259
+ }
260
+
261
+ /**
262
+ * \brief Sets a linearly space vector.
263
+ *
264
+ * The function generates 'size' equally spaced values in the closed interval [low,high].
265
+ * When size is set to 1, a vector of length 1 containing 'high' is returned.
266
+ *
267
+ * \only_for_vectors
268
+ *
269
+ * Example: \include DenseBase_LinSpaced.cpp
270
+ * Output: \verbinclude DenseBase_LinSpaced.out
271
+ *
272
+ * \sa setLinSpaced(Index,const Scalar&,const Scalar&), LinSpaced(Sequential_t,Index,const Scalar&,const Scalar&,Index), CwiseNullaryOp
273
+ */
274
+ template<typename Derived>
275
+ EIGEN_STRONG_INLINE const typename DenseBase<Derived>::RandomAccessLinSpacedReturnType
276
+ DenseBase<Derived>::LinSpaced(Index size, const Scalar& low, const Scalar& high)
277
+ {
278
+ EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived)
279
+ return DenseBase<Derived>::NullaryExpr(size, internal::linspaced_op<Scalar,true>(low,high,size));
280
+ }
281
+
282
+ /**
283
+ * \copydoc DenseBase::LinSpaced(Index, const Scalar&, const Scalar&)
284
+ * Special version for fixed size types which does not require the size parameter.
285
+ */
286
+ template<typename Derived>
287
+ EIGEN_STRONG_INLINE const typename DenseBase<Derived>::RandomAccessLinSpacedReturnType
288
+ DenseBase<Derived>::LinSpaced(const Scalar& low, const Scalar& high)
289
+ {
290
+ EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived)
291
+ EIGEN_STATIC_ASSERT_FIXED_SIZE(Derived)
292
+ return DenseBase<Derived>::NullaryExpr(Derived::SizeAtCompileTime, internal::linspaced_op<Scalar,true>(low,high,Derived::SizeAtCompileTime));
293
+ }
294
+
295
+ /** \returns true if all coefficients in this matrix are approximately equal to \a val, to within precision \a prec */
296
+ template<typename Derived>
297
+ bool DenseBase<Derived>::isApproxToConstant
298
+ (const Scalar& val, const RealScalar& prec) const
299
+ {
300
+ for(Index j = 0; j < cols(); ++j)
301
+ for(Index i = 0; i < rows(); ++i)
302
+ if(!internal::isApprox(this->coeff(i, j), val, prec))
303
+ return false;
304
+ return true;
305
+ }
306
+
307
+ /** This is just an alias for isApproxToConstant().
308
+ *
309
+ * \returns true if all coefficients in this matrix are approximately equal to \a value, to within precision \a prec */
310
+ template<typename Derived>
311
+ bool DenseBase<Derived>::isConstant
312
+ (const Scalar& val, const RealScalar& prec) const
313
+ {
314
+ return isApproxToConstant(val, prec);
315
+ }
316
+
317
+ /** Alias for setConstant(): sets all coefficients in this expression to \a val.
318
+ *
319
+ * \sa setConstant(), Constant(), class CwiseNullaryOp
320
+ */
321
+ template<typename Derived>
322
+ EIGEN_STRONG_INLINE void DenseBase<Derived>::fill(const Scalar& val)
323
+ {
324
+ setConstant(val);
325
+ }
326
+
327
+ /** Sets all coefficients in this expression to \a value.
328
+ *
329
+ * \sa fill(), setConstant(Index,const Scalar&), setConstant(Index,Index,const Scalar&), setZero(), setOnes(), Constant(), class CwiseNullaryOp, setZero(), setOnes()
330
+ */
331
+ template<typename Derived>
332
+ EIGEN_STRONG_INLINE Derived& DenseBase<Derived>::setConstant(const Scalar& val)
333
+ {
334
+ return derived() = Constant(rows(), cols(), val);
335
+ }
336
+
337
+ /** Resizes to the given \a size, and sets all coefficients in this expression to the given \a value.
338
+ *
339
+ * \only_for_vectors
340
+ *
341
+ * Example: \include Matrix_setConstant_int.cpp
342
+ * Output: \verbinclude Matrix_setConstant_int.out
343
+ *
344
+ * \sa MatrixBase::setConstant(const Scalar&), setConstant(Index,Index,const Scalar&), class CwiseNullaryOp, MatrixBase::Constant(const Scalar&)
345
+ */
346
+ template<typename Derived>
347
+ EIGEN_STRONG_INLINE Derived&
348
+ PlainObjectBase<Derived>::setConstant(Index size, const Scalar& val)
349
+ {
350
+ resize(size);
351
+ return setConstant(val);
352
+ }
353
+
354
+ /** Resizes to the given size, and sets all coefficients in this expression to the given \a value.
355
+ *
356
+ * \param nbRows the new number of rows
357
+ * \param nbCols the new number of columns
358
+ * \param val the value to which all coefficients are set
359
+ *
360
+ * Example: \include Matrix_setConstant_int_int.cpp
361
+ * Output: \verbinclude Matrix_setConstant_int_int.out
362
+ *
363
+ * \sa MatrixBase::setConstant(const Scalar&), setConstant(Index,const Scalar&), class CwiseNullaryOp, MatrixBase::Constant(const Scalar&)
364
+ */
365
+ template<typename Derived>
366
+ EIGEN_STRONG_INLINE Derived&
367
+ PlainObjectBase<Derived>::setConstant(Index nbRows, Index nbCols, const Scalar& val)
368
+ {
369
+ resize(nbRows, nbCols);
370
+ return setConstant(val);
371
+ }
372
+
373
+ /**
374
+ * \brief Sets a linearly space vector.
375
+ *
376
+ * The function generates 'size' equally spaced values in the closed interval [low,high].
377
+ * When size is set to 1, a vector of length 1 containing 'high' is returned.
378
+ *
379
+ * \only_for_vectors
380
+ *
381
+ * Example: \include DenseBase_setLinSpaced.cpp
382
+ * Output: \verbinclude DenseBase_setLinSpaced.out
383
+ *
384
+ * \sa CwiseNullaryOp
385
+ */
386
+ template<typename Derived>
387
+ EIGEN_STRONG_INLINE Derived& DenseBase<Derived>::setLinSpaced(Index newSize, const Scalar& low, const Scalar& high)
388
+ {
389
+ EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived)
390
+ return derived() = Derived::NullaryExpr(newSize, internal::linspaced_op<Scalar,false>(low,high,newSize));
391
+ }
392
+
393
+ /**
394
+ * \brief Sets a linearly space vector.
395
+ *
396
+ * The function fill *this with equally spaced values in the closed interval [low,high].
397
+ * When size is set to 1, a vector of length 1 containing 'high' is returned.
398
+ *
399
+ * \only_for_vectors
400
+ *
401
+ * \sa setLinSpaced(Index, const Scalar&, const Scalar&), CwiseNullaryOp
402
+ */
403
+ template<typename Derived>
404
+ EIGEN_STRONG_INLINE Derived& DenseBase<Derived>::setLinSpaced(const Scalar& low, const Scalar& high)
405
+ {
406
+ EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived)
407
+ return setLinSpaced(size(), low, high);
408
+ }
409
+
410
+ // zero:
411
+
412
+ /** \returns an expression of a zero matrix.
413
+ *
414
+ * The parameters \a rows and \a cols are the number of rows and of columns of
415
+ * the returned matrix. Must be compatible with this MatrixBase type.
416
+ *
417
+ * This variant is meant to be used for dynamic-size matrix types. For fixed-size types,
418
+ * it is redundant to pass \a rows and \a cols as arguments, so Zero() should be used
419
+ * instead.
420
+ *
421
+ * Example: \include MatrixBase_zero_int_int.cpp
422
+ * Output: \verbinclude MatrixBase_zero_int_int.out
423
+ *
424
+ * \sa Zero(), Zero(Index)
425
+ */
426
+ template<typename Derived>
427
+ EIGEN_STRONG_INLINE const typename DenseBase<Derived>::ConstantReturnType
428
+ DenseBase<Derived>::Zero(Index nbRows, Index nbCols)
429
+ {
430
+ return Constant(nbRows, nbCols, Scalar(0));
431
+ }
432
+
433
+ /** \returns an expression of a zero vector.
434
+ *
435
+ * The parameter \a size is the size of the returned vector.
436
+ * Must be compatible with this MatrixBase type.
437
+ *
438
+ * \only_for_vectors
439
+ *
440
+ * This variant is meant to be used for dynamic-size vector types. For fixed-size types,
441
+ * it is redundant to pass \a size as argument, so Zero() should be used
442
+ * instead.
443
+ *
444
+ * Example: \include MatrixBase_zero_int.cpp
445
+ * Output: \verbinclude MatrixBase_zero_int.out
446
+ *
447
+ * \sa Zero(), Zero(Index,Index)
448
+ */
449
+ template<typename Derived>
450
+ EIGEN_STRONG_INLINE const typename DenseBase<Derived>::ConstantReturnType
451
+ DenseBase<Derived>::Zero(Index size)
452
+ {
453
+ return Constant(size, Scalar(0));
454
+ }
455
+
456
+ /** \returns an expression of a fixed-size zero matrix or vector.
457
+ *
458
+ * This variant is only for fixed-size MatrixBase types. For dynamic-size types, you
459
+ * need to use the variants taking size arguments.
460
+ *
461
+ * Example: \include MatrixBase_zero.cpp
462
+ * Output: \verbinclude MatrixBase_zero.out
463
+ *
464
+ * \sa Zero(Index), Zero(Index,Index)
465
+ */
466
+ template<typename Derived>
467
+ EIGEN_STRONG_INLINE const typename DenseBase<Derived>::ConstantReturnType
468
+ DenseBase<Derived>::Zero()
469
+ {
470
+ return Constant(Scalar(0));
471
+ }
472
+
473
+ /** \returns true if *this is approximately equal to the zero matrix,
474
+ * within the precision given by \a prec.
475
+ *
476
+ * Example: \include MatrixBase_isZero.cpp
477
+ * Output: \verbinclude MatrixBase_isZero.out
478
+ *
479
+ * \sa class CwiseNullaryOp, Zero()
480
+ */
481
+ template<typename Derived>
482
+ bool DenseBase<Derived>::isZero(const RealScalar& prec) const
483
+ {
484
+ for(Index j = 0; j < cols(); ++j)
485
+ for(Index i = 0; i < rows(); ++i)
486
+ if(!internal::isMuchSmallerThan(this->coeff(i, j), static_cast<Scalar>(1), prec))
487
+ return false;
488
+ return true;
489
+ }
490
+
491
+ /** Sets all coefficients in this expression to zero.
492
+ *
493
+ * Example: \include MatrixBase_setZero.cpp
494
+ * Output: \verbinclude MatrixBase_setZero.out
495
+ *
496
+ * \sa class CwiseNullaryOp, Zero()
497
+ */
498
+ template<typename Derived>
499
+ EIGEN_STRONG_INLINE Derived& DenseBase<Derived>::setZero()
500
+ {
501
+ return setConstant(Scalar(0));
502
+ }
503
+
504
+ /** Resizes to the given \a size, and sets all coefficients in this expression to zero.
505
+ *
506
+ * \only_for_vectors
507
+ *
508
+ * Example: \include Matrix_setZero_int.cpp
509
+ * Output: \verbinclude Matrix_setZero_int.out
510
+ *
511
+ * \sa DenseBase::setZero(), setZero(Index,Index), class CwiseNullaryOp, DenseBase::Zero()
512
+ */
513
+ template<typename Derived>
514
+ EIGEN_STRONG_INLINE Derived&
515
+ PlainObjectBase<Derived>::setZero(Index newSize)
516
+ {
517
+ resize(newSize);
518
+ return setConstant(Scalar(0));
519
+ }
520
+
521
+ /** Resizes to the given size, and sets all coefficients in this expression to zero.
522
+ *
523
+ * \param nbRows the new number of rows
524
+ * \param nbCols the new number of columns
525
+ *
526
+ * Example: \include Matrix_setZero_int_int.cpp
527
+ * Output: \verbinclude Matrix_setZero_int_int.out
528
+ *
529
+ * \sa DenseBase::setZero(), setZero(Index), class CwiseNullaryOp, DenseBase::Zero()
530
+ */
531
+ template<typename Derived>
532
+ EIGEN_STRONG_INLINE Derived&
533
+ PlainObjectBase<Derived>::setZero(Index nbRows, Index nbCols)
534
+ {
535
+ resize(nbRows, nbCols);
536
+ return setConstant(Scalar(0));
537
+ }
538
+
539
+ // ones:
540
+
541
+ /** \returns an expression of a matrix where all coefficients equal one.
542
+ *
543
+ * The parameters \a nbRows and \a nbCols are the number of rows and of columns of
544
+ * the returned matrix. Must be compatible with this MatrixBase type.
545
+ *
546
+ * This variant is meant to be used for dynamic-size matrix types. For fixed-size types,
547
+ * it is redundant to pass \a rows and \a cols as arguments, so Ones() should be used
548
+ * instead.
549
+ *
550
+ * Example: \include MatrixBase_ones_int_int.cpp
551
+ * Output: \verbinclude MatrixBase_ones_int_int.out
552
+ *
553
+ * \sa Ones(), Ones(Index), isOnes(), class Ones
554
+ */
555
+ template<typename Derived>
556
+ EIGEN_STRONG_INLINE const typename DenseBase<Derived>::ConstantReturnType
557
+ DenseBase<Derived>::Ones(Index nbRows, Index nbCols)
558
+ {
559
+ return Constant(nbRows, nbCols, Scalar(1));
560
+ }
561
+
562
+ /** \returns an expression of a vector where all coefficients equal one.
563
+ *
564
+ * The parameter \a newSize is the size of the returned vector.
565
+ * Must be compatible with this MatrixBase type.
566
+ *
567
+ * \only_for_vectors
568
+ *
569
+ * This variant is meant to be used for dynamic-size vector types. For fixed-size types,
570
+ * it is redundant to pass \a size as argument, so Ones() should be used
571
+ * instead.
572
+ *
573
+ * Example: \include MatrixBase_ones_int.cpp
574
+ * Output: \verbinclude MatrixBase_ones_int.out
575
+ *
576
+ * \sa Ones(), Ones(Index,Index), isOnes(), class Ones
577
+ */
578
+ template<typename Derived>
579
+ EIGEN_STRONG_INLINE const typename DenseBase<Derived>::ConstantReturnType
580
+ DenseBase<Derived>::Ones(Index newSize)
581
+ {
582
+ return Constant(newSize, Scalar(1));
583
+ }
584
+
585
+ /** \returns an expression of a fixed-size matrix or vector where all coefficients equal one.
586
+ *
587
+ * This variant is only for fixed-size MatrixBase types. For dynamic-size types, you
588
+ * need to use the variants taking size arguments.
589
+ *
590
+ * Example: \include MatrixBase_ones.cpp
591
+ * Output: \verbinclude MatrixBase_ones.out
592
+ *
593
+ * \sa Ones(Index), Ones(Index,Index), isOnes(), class Ones
594
+ */
595
+ template<typename Derived>
596
+ EIGEN_STRONG_INLINE const typename DenseBase<Derived>::ConstantReturnType
597
+ DenseBase<Derived>::Ones()
598
+ {
599
+ return Constant(Scalar(1));
600
+ }
601
+
602
+ /** \returns true if *this is approximately equal to the matrix where all coefficients
603
+ * are equal to 1, within the precision given by \a prec.
604
+ *
605
+ * Example: \include MatrixBase_isOnes.cpp
606
+ * Output: \verbinclude MatrixBase_isOnes.out
607
+ *
608
+ * \sa class CwiseNullaryOp, Ones()
609
+ */
610
+ template<typename Derived>
611
+ bool DenseBase<Derived>::isOnes
612
+ (const RealScalar& prec) const
613
+ {
614
+ return isApproxToConstant(Scalar(1), prec);
615
+ }
616
+
617
+ /** Sets all coefficients in this expression to one.
618
+ *
619
+ * Example: \include MatrixBase_setOnes.cpp
620
+ * Output: \verbinclude MatrixBase_setOnes.out
621
+ *
622
+ * \sa class CwiseNullaryOp, Ones()
623
+ */
624
+ template<typename Derived>
625
+ EIGEN_STRONG_INLINE Derived& DenseBase<Derived>::setOnes()
626
+ {
627
+ return setConstant(Scalar(1));
628
+ }
629
+
630
+ /** Resizes to the given \a newSize, and sets all coefficients in this expression to one.
631
+ *
632
+ * \only_for_vectors
633
+ *
634
+ * Example: \include Matrix_setOnes_int.cpp
635
+ * Output: \verbinclude Matrix_setOnes_int.out
636
+ *
637
+ * \sa MatrixBase::setOnes(), setOnes(Index,Index), class CwiseNullaryOp, MatrixBase::Ones()
638
+ */
639
+ template<typename Derived>
640
+ EIGEN_STRONG_INLINE Derived&
641
+ PlainObjectBase<Derived>::setOnes(Index newSize)
642
+ {
643
+ resize(newSize);
644
+ return setConstant(Scalar(1));
645
+ }
646
+
647
+ /** Resizes to the given size, and sets all coefficients in this expression to one.
648
+ *
649
+ * \param nbRows the new number of rows
650
+ * \param nbCols the new number of columns
651
+ *
652
+ * Example: \include Matrix_setOnes_int_int.cpp
653
+ * Output: \verbinclude Matrix_setOnes_int_int.out
654
+ *
655
+ * \sa MatrixBase::setOnes(), setOnes(Index), class CwiseNullaryOp, MatrixBase::Ones()
656
+ */
657
+ template<typename Derived>
658
+ EIGEN_STRONG_INLINE Derived&
659
+ PlainObjectBase<Derived>::setOnes(Index nbRows, Index nbCols)
660
+ {
661
+ resize(nbRows, nbCols);
662
+ return setConstant(Scalar(1));
663
+ }
664
+
665
+ // Identity:
666
+
667
+ /** \returns an expression of the identity matrix (not necessarily square).
668
+ *
669
+ * The parameters \a nbRows and \a nbCols are the number of rows and of columns of
670
+ * the returned matrix. Must be compatible with this MatrixBase type.
671
+ *
672
+ * This variant is meant to be used for dynamic-size matrix types. For fixed-size types,
673
+ * it is redundant to pass \a rows and \a cols as arguments, so Identity() should be used
674
+ * instead.
675
+ *
676
+ * Example: \include MatrixBase_identity_int_int.cpp
677
+ * Output: \verbinclude MatrixBase_identity_int_int.out
678
+ *
679
+ * \sa Identity(), setIdentity(), isIdentity()
680
+ */
681
+ template<typename Derived>
682
+ EIGEN_STRONG_INLINE const typename MatrixBase<Derived>::IdentityReturnType
683
+ MatrixBase<Derived>::Identity(Index nbRows, Index nbCols)
684
+ {
685
+ return DenseBase<Derived>::NullaryExpr(nbRows, nbCols, internal::scalar_identity_op<Scalar>());
686
+ }
687
+
688
+ /** \returns an expression of the identity matrix (not necessarily square).
689
+ *
690
+ * This variant is only for fixed-size MatrixBase types. For dynamic-size types, you
691
+ * need to use the variant taking size arguments.
692
+ *
693
+ * Example: \include MatrixBase_identity.cpp
694
+ * Output: \verbinclude MatrixBase_identity.out
695
+ *
696
+ * \sa Identity(Index,Index), setIdentity(), isIdentity()
697
+ */
698
+ template<typename Derived>
699
+ EIGEN_STRONG_INLINE const typename MatrixBase<Derived>::IdentityReturnType
700
+ MatrixBase<Derived>::Identity()
701
+ {
702
+ EIGEN_STATIC_ASSERT_FIXED_SIZE(Derived)
703
+ return MatrixBase<Derived>::NullaryExpr(RowsAtCompileTime, ColsAtCompileTime, internal::scalar_identity_op<Scalar>());
704
+ }
705
+
706
+ /** \returns true if *this is approximately equal to the identity matrix
707
+ * (not necessarily square),
708
+ * within the precision given by \a prec.
709
+ *
710
+ * Example: \include MatrixBase_isIdentity.cpp
711
+ * Output: \verbinclude MatrixBase_isIdentity.out
712
+ *
713
+ * \sa class CwiseNullaryOp, Identity(), Identity(Index,Index), setIdentity()
714
+ */
715
+ template<typename Derived>
716
+ bool MatrixBase<Derived>::isIdentity
717
+ (const RealScalar& prec) const
718
+ {
719
+ for(Index j = 0; j < cols(); ++j)
720
+ {
721
+ for(Index i = 0; i < rows(); ++i)
722
+ {
723
+ if(i == j)
724
+ {
725
+ if(!internal::isApprox(this->coeff(i, j), static_cast<Scalar>(1), prec))
726
+ return false;
727
+ }
728
+ else
729
+ {
730
+ if(!internal::isMuchSmallerThan(this->coeff(i, j), static_cast<RealScalar>(1), prec))
731
+ return false;
732
+ }
733
+ }
734
+ }
735
+ return true;
736
+ }
737
+
738
+ namespace internal {
739
+
740
+ template<typename Derived, bool Big = (Derived::SizeAtCompileTime>=16)>
741
+ struct setIdentity_impl
742
+ {
743
+ static EIGEN_STRONG_INLINE Derived& run(Derived& m)
744
+ {
745
+ return m = Derived::Identity(m.rows(), m.cols());
746
+ }
747
+ };
748
+
749
+ template<typename Derived>
750
+ struct setIdentity_impl<Derived, true>
751
+ {
752
+ typedef typename Derived::Index Index;
753
+ static EIGEN_STRONG_INLINE Derived& run(Derived& m)
754
+ {
755
+ m.setZero();
756
+ const Index size = (std::min)(m.rows(), m.cols());
757
+ for(Index i = 0; i < size; ++i) m.coeffRef(i,i) = typename Derived::Scalar(1);
758
+ return m;
759
+ }
760
+ };
761
+
762
+ } // end namespace internal
763
+
764
+ /** Writes the identity expression (not necessarily square) into *this.
765
+ *
766
+ * Example: \include MatrixBase_setIdentity.cpp
767
+ * Output: \verbinclude MatrixBase_setIdentity.out
768
+ *
769
+ * \sa class CwiseNullaryOp, Identity(), Identity(Index,Index), isIdentity()
770
+ */
771
+ template<typename Derived>
772
+ EIGEN_STRONG_INLINE Derived& MatrixBase<Derived>::setIdentity()
773
+ {
774
+ return internal::setIdentity_impl<Derived>::run(derived());
775
+ }
776
+
777
+ /** \brief Resizes to the given size, and writes the identity expression (not necessarily square) into *this.
778
+ *
779
+ * \param nbRows the new number of rows
780
+ * \param nbCols the new number of columns
781
+ *
782
+ * Example: \include Matrix_setIdentity_int_int.cpp
783
+ * Output: \verbinclude Matrix_setIdentity_int_int.out
784
+ *
785
+ * \sa MatrixBase::setIdentity(), class CwiseNullaryOp, MatrixBase::Identity()
786
+ */
787
+ template<typename Derived>
788
+ EIGEN_STRONG_INLINE Derived& MatrixBase<Derived>::setIdentity(Index nbRows, Index nbCols)
789
+ {
790
+ derived().resize(nbRows, nbCols);
791
+ return setIdentity();
792
+ }
793
+
794
+ /** \returns an expression of the i-th unit (basis) vector.
795
+ *
796
+ * \only_for_vectors
797
+ *
798
+ * \sa MatrixBase::Unit(Index), MatrixBase::UnitX(), MatrixBase::UnitY(), MatrixBase::UnitZ(), MatrixBase::UnitW()
799
+ */
800
+ template<typename Derived>
801
+ EIGEN_STRONG_INLINE const typename MatrixBase<Derived>::BasisReturnType MatrixBase<Derived>::Unit(Index newSize, Index i)
802
+ {
803
+ EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived)
804
+ return BasisReturnType(SquareMatrixType::Identity(newSize,newSize), i);
805
+ }
806
+
807
+ /** \returns an expression of the i-th unit (basis) vector.
808
+ *
809
+ * \only_for_vectors
810
+ *
811
+ * This variant is for fixed-size vector only.
812
+ *
813
+ * \sa MatrixBase::Unit(Index,Index), MatrixBase::UnitX(), MatrixBase::UnitY(), MatrixBase::UnitZ(), MatrixBase::UnitW()
814
+ */
815
+ template<typename Derived>
816
+ EIGEN_STRONG_INLINE const typename MatrixBase<Derived>::BasisReturnType MatrixBase<Derived>::Unit(Index i)
817
+ {
818
+ EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived)
819
+ return BasisReturnType(SquareMatrixType::Identity(),i);
820
+ }
821
+
822
+ /** \returns an expression of the X axis unit vector (1{,0}^*)
823
+ *
824
+ * \only_for_vectors
825
+ *
826
+ * \sa MatrixBase::Unit(Index,Index), MatrixBase::Unit(Index), MatrixBase::UnitY(), MatrixBase::UnitZ(), MatrixBase::UnitW()
827
+ */
828
+ template<typename Derived>
829
+ EIGEN_STRONG_INLINE const typename MatrixBase<Derived>::BasisReturnType MatrixBase<Derived>::UnitX()
830
+ { return Derived::Unit(0); }
831
+
832
+ /** \returns an expression of the Y axis unit vector (0,1{,0}^*)
833
+ *
834
+ * \only_for_vectors
835
+ *
836
+ * \sa MatrixBase::Unit(Index,Index), MatrixBase::Unit(Index), MatrixBase::UnitY(), MatrixBase::UnitZ(), MatrixBase::UnitW()
837
+ */
838
+ template<typename Derived>
839
+ EIGEN_STRONG_INLINE const typename MatrixBase<Derived>::BasisReturnType MatrixBase<Derived>::UnitY()
840
+ { return Derived::Unit(1); }
841
+
842
+ /** \returns an expression of the Z axis unit vector (0,0,1{,0}^*)
843
+ *
844
+ * \only_for_vectors
845
+ *
846
+ * \sa MatrixBase::Unit(Index,Index), MatrixBase::Unit(Index), MatrixBase::UnitY(), MatrixBase::UnitZ(), MatrixBase::UnitW()
847
+ */
848
+ template<typename Derived>
849
+ EIGEN_STRONG_INLINE const typename MatrixBase<Derived>::BasisReturnType MatrixBase<Derived>::UnitZ()
850
+ { return Derived::Unit(2); }
851
+
852
+ /** \returns an expression of the W axis unit vector (0,0,0,1)
853
+ *
854
+ * \only_for_vectors
855
+ *
856
+ * \sa MatrixBase::Unit(Index,Index), MatrixBase::Unit(Index), MatrixBase::UnitY(), MatrixBase::UnitZ(), MatrixBase::UnitW()
857
+ */
858
+ template<typename Derived>
859
+ EIGEN_STRONG_INLINE const typename MatrixBase<Derived>::BasisReturnType MatrixBase<Derived>::UnitW()
860
+ { return Derived::Unit(3); }
861
+
862
+ } // end namespace Eigen
863
+
864
+ #endif // EIGEN_CWISE_NULLARY_OP_H