tomoto 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (420) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +3 -0
  3. data/LICENSE.txt +22 -0
  4. data/README.md +123 -0
  5. data/ext/tomoto/ext.cpp +245 -0
  6. data/ext/tomoto/extconf.rb +28 -0
  7. data/lib/tomoto.rb +12 -0
  8. data/lib/tomoto/ct.rb +11 -0
  9. data/lib/tomoto/hdp.rb +11 -0
  10. data/lib/tomoto/lda.rb +67 -0
  11. data/lib/tomoto/version.rb +3 -0
  12. data/vendor/EigenRand/EigenRand/Core.h +1139 -0
  13. data/vendor/EigenRand/EigenRand/Dists/Basic.h +111 -0
  14. data/vendor/EigenRand/EigenRand/Dists/Discrete.h +877 -0
  15. data/vendor/EigenRand/EigenRand/Dists/GammaPoisson.h +108 -0
  16. data/vendor/EigenRand/EigenRand/Dists/NormalExp.h +626 -0
  17. data/vendor/EigenRand/EigenRand/EigenRand +19 -0
  18. data/vendor/EigenRand/EigenRand/Macro.h +24 -0
  19. data/vendor/EigenRand/EigenRand/MorePacketMath.h +978 -0
  20. data/vendor/EigenRand/EigenRand/PacketFilter.h +286 -0
  21. data/vendor/EigenRand/EigenRand/PacketRandomEngine.h +624 -0
  22. data/vendor/EigenRand/EigenRand/RandUtils.h +413 -0
  23. data/vendor/EigenRand/EigenRand/doc.h +220 -0
  24. data/vendor/EigenRand/LICENSE +21 -0
  25. data/vendor/EigenRand/README.md +288 -0
  26. data/vendor/eigen/COPYING.BSD +26 -0
  27. data/vendor/eigen/COPYING.GPL +674 -0
  28. data/vendor/eigen/COPYING.LGPL +502 -0
  29. data/vendor/eigen/COPYING.MINPACK +52 -0
  30. data/vendor/eigen/COPYING.MPL2 +373 -0
  31. data/vendor/eigen/COPYING.README +18 -0
  32. data/vendor/eigen/Eigen/CMakeLists.txt +19 -0
  33. data/vendor/eigen/Eigen/Cholesky +46 -0
  34. data/vendor/eigen/Eigen/CholmodSupport +48 -0
  35. data/vendor/eigen/Eigen/Core +537 -0
  36. data/vendor/eigen/Eigen/Dense +7 -0
  37. data/vendor/eigen/Eigen/Eigen +2 -0
  38. data/vendor/eigen/Eigen/Eigenvalues +61 -0
  39. data/vendor/eigen/Eigen/Geometry +62 -0
  40. data/vendor/eigen/Eigen/Householder +30 -0
  41. data/vendor/eigen/Eigen/IterativeLinearSolvers +48 -0
  42. data/vendor/eigen/Eigen/Jacobi +33 -0
  43. data/vendor/eigen/Eigen/LU +50 -0
  44. data/vendor/eigen/Eigen/MetisSupport +35 -0
  45. data/vendor/eigen/Eigen/OrderingMethods +73 -0
  46. data/vendor/eigen/Eigen/PaStiXSupport +48 -0
  47. data/vendor/eigen/Eigen/PardisoSupport +35 -0
  48. data/vendor/eigen/Eigen/QR +51 -0
  49. data/vendor/eigen/Eigen/QtAlignedMalloc +40 -0
  50. data/vendor/eigen/Eigen/SPQRSupport +34 -0
  51. data/vendor/eigen/Eigen/SVD +51 -0
  52. data/vendor/eigen/Eigen/Sparse +36 -0
  53. data/vendor/eigen/Eigen/SparseCholesky +45 -0
  54. data/vendor/eigen/Eigen/SparseCore +69 -0
  55. data/vendor/eigen/Eigen/SparseLU +46 -0
  56. data/vendor/eigen/Eigen/SparseQR +37 -0
  57. data/vendor/eigen/Eigen/StdDeque +27 -0
  58. data/vendor/eigen/Eigen/StdList +26 -0
  59. data/vendor/eigen/Eigen/StdVector +27 -0
  60. data/vendor/eigen/Eigen/SuperLUSupport +64 -0
  61. data/vendor/eigen/Eigen/UmfPackSupport +40 -0
  62. data/vendor/eigen/Eigen/src/Cholesky/LDLT.h +673 -0
  63. data/vendor/eigen/Eigen/src/Cholesky/LLT.h +542 -0
  64. data/vendor/eigen/Eigen/src/Cholesky/LLT_LAPACKE.h +99 -0
  65. data/vendor/eigen/Eigen/src/CholmodSupport/CholmodSupport.h +639 -0
  66. data/vendor/eigen/Eigen/src/Core/Array.h +329 -0
  67. data/vendor/eigen/Eigen/src/Core/ArrayBase.h +226 -0
  68. data/vendor/eigen/Eigen/src/Core/ArrayWrapper.h +209 -0
  69. data/vendor/eigen/Eigen/src/Core/Assign.h +90 -0
  70. data/vendor/eigen/Eigen/src/Core/AssignEvaluator.h +935 -0
  71. data/vendor/eigen/Eigen/src/Core/Assign_MKL.h +178 -0
  72. data/vendor/eigen/Eigen/src/Core/BandMatrix.h +353 -0
  73. data/vendor/eigen/Eigen/src/Core/Block.h +452 -0
  74. data/vendor/eigen/Eigen/src/Core/BooleanRedux.h +164 -0
  75. data/vendor/eigen/Eigen/src/Core/CommaInitializer.h +160 -0
  76. data/vendor/eigen/Eigen/src/Core/ConditionEstimator.h +175 -0
  77. data/vendor/eigen/Eigen/src/Core/CoreEvaluators.h +1688 -0
  78. data/vendor/eigen/Eigen/src/Core/CoreIterators.h +127 -0
  79. data/vendor/eigen/Eigen/src/Core/CwiseBinaryOp.h +184 -0
  80. data/vendor/eigen/Eigen/src/Core/CwiseNullaryOp.h +866 -0
  81. data/vendor/eigen/Eigen/src/Core/CwiseTernaryOp.h +197 -0
  82. data/vendor/eigen/Eigen/src/Core/CwiseUnaryOp.h +103 -0
  83. data/vendor/eigen/Eigen/src/Core/CwiseUnaryView.h +128 -0
  84. data/vendor/eigen/Eigen/src/Core/DenseBase.h +611 -0
  85. data/vendor/eigen/Eigen/src/Core/DenseCoeffsBase.h +681 -0
  86. data/vendor/eigen/Eigen/src/Core/DenseStorage.h +570 -0
  87. data/vendor/eigen/Eigen/src/Core/Diagonal.h +260 -0
  88. data/vendor/eigen/Eigen/src/Core/DiagonalMatrix.h +343 -0
  89. data/vendor/eigen/Eigen/src/Core/DiagonalProduct.h +28 -0
  90. data/vendor/eigen/Eigen/src/Core/Dot.h +318 -0
  91. data/vendor/eigen/Eigen/src/Core/EigenBase.h +159 -0
  92. data/vendor/eigen/Eigen/src/Core/ForceAlignedAccess.h +146 -0
  93. data/vendor/eigen/Eigen/src/Core/Fuzzy.h +155 -0
  94. data/vendor/eigen/Eigen/src/Core/GeneralProduct.h +455 -0
  95. data/vendor/eigen/Eigen/src/Core/GenericPacketMath.h +593 -0
  96. data/vendor/eigen/Eigen/src/Core/GlobalFunctions.h +187 -0
  97. data/vendor/eigen/Eigen/src/Core/IO.h +225 -0
  98. data/vendor/eigen/Eigen/src/Core/Inverse.h +118 -0
  99. data/vendor/eigen/Eigen/src/Core/Map.h +171 -0
  100. data/vendor/eigen/Eigen/src/Core/MapBase.h +303 -0
  101. data/vendor/eigen/Eigen/src/Core/MathFunctions.h +1415 -0
  102. data/vendor/eigen/Eigen/src/Core/MathFunctionsImpl.h +101 -0
  103. data/vendor/eigen/Eigen/src/Core/Matrix.h +459 -0
  104. data/vendor/eigen/Eigen/src/Core/MatrixBase.h +529 -0
  105. data/vendor/eigen/Eigen/src/Core/NestByValue.h +110 -0
  106. data/vendor/eigen/Eigen/src/Core/NoAlias.h +108 -0
  107. data/vendor/eigen/Eigen/src/Core/NumTraits.h +248 -0
  108. data/vendor/eigen/Eigen/src/Core/PermutationMatrix.h +633 -0
  109. data/vendor/eigen/Eigen/src/Core/PlainObjectBase.h +1035 -0
  110. data/vendor/eigen/Eigen/src/Core/Product.h +186 -0
  111. data/vendor/eigen/Eigen/src/Core/ProductEvaluators.h +1112 -0
  112. data/vendor/eigen/Eigen/src/Core/Random.h +182 -0
  113. data/vendor/eigen/Eigen/src/Core/Redux.h +505 -0
  114. data/vendor/eigen/Eigen/src/Core/Ref.h +283 -0
  115. data/vendor/eigen/Eigen/src/Core/Replicate.h +142 -0
  116. data/vendor/eigen/Eigen/src/Core/ReturnByValue.h +117 -0
  117. data/vendor/eigen/Eigen/src/Core/Reverse.h +211 -0
  118. data/vendor/eigen/Eigen/src/Core/Select.h +162 -0
  119. data/vendor/eigen/Eigen/src/Core/SelfAdjointView.h +352 -0
  120. data/vendor/eigen/Eigen/src/Core/SelfCwiseBinaryOp.h +47 -0
  121. data/vendor/eigen/Eigen/src/Core/Solve.h +188 -0
  122. data/vendor/eigen/Eigen/src/Core/SolveTriangular.h +235 -0
  123. data/vendor/eigen/Eigen/src/Core/SolverBase.h +130 -0
  124. data/vendor/eigen/Eigen/src/Core/StableNorm.h +221 -0
  125. data/vendor/eigen/Eigen/src/Core/Stride.h +111 -0
  126. data/vendor/eigen/Eigen/src/Core/Swap.h +67 -0
  127. data/vendor/eigen/Eigen/src/Core/Transpose.h +403 -0
  128. data/vendor/eigen/Eigen/src/Core/Transpositions.h +407 -0
  129. data/vendor/eigen/Eigen/src/Core/TriangularMatrix.h +983 -0
  130. data/vendor/eigen/Eigen/src/Core/VectorBlock.h +96 -0
  131. data/vendor/eigen/Eigen/src/Core/VectorwiseOp.h +695 -0
  132. data/vendor/eigen/Eigen/src/Core/Visitor.h +273 -0
  133. data/vendor/eigen/Eigen/src/Core/arch/AVX/Complex.h +451 -0
  134. data/vendor/eigen/Eigen/src/Core/arch/AVX/MathFunctions.h +439 -0
  135. data/vendor/eigen/Eigen/src/Core/arch/AVX/PacketMath.h +637 -0
  136. data/vendor/eigen/Eigen/src/Core/arch/AVX/TypeCasting.h +51 -0
  137. data/vendor/eigen/Eigen/src/Core/arch/AVX512/MathFunctions.h +391 -0
  138. data/vendor/eigen/Eigen/src/Core/arch/AVX512/PacketMath.h +1316 -0
  139. data/vendor/eigen/Eigen/src/Core/arch/AltiVec/Complex.h +430 -0
  140. data/vendor/eigen/Eigen/src/Core/arch/AltiVec/MathFunctions.h +322 -0
  141. data/vendor/eigen/Eigen/src/Core/arch/AltiVec/PacketMath.h +1061 -0
  142. data/vendor/eigen/Eigen/src/Core/arch/CUDA/Complex.h +103 -0
  143. data/vendor/eigen/Eigen/src/Core/arch/CUDA/Half.h +674 -0
  144. data/vendor/eigen/Eigen/src/Core/arch/CUDA/MathFunctions.h +91 -0
  145. data/vendor/eigen/Eigen/src/Core/arch/CUDA/PacketMath.h +333 -0
  146. data/vendor/eigen/Eigen/src/Core/arch/CUDA/PacketMathHalf.h +1124 -0
  147. data/vendor/eigen/Eigen/src/Core/arch/CUDA/TypeCasting.h +212 -0
  148. data/vendor/eigen/Eigen/src/Core/arch/Default/ConjHelper.h +29 -0
  149. data/vendor/eigen/Eigen/src/Core/arch/Default/Settings.h +49 -0
  150. data/vendor/eigen/Eigen/src/Core/arch/NEON/Complex.h +490 -0
  151. data/vendor/eigen/Eigen/src/Core/arch/NEON/MathFunctions.h +91 -0
  152. data/vendor/eigen/Eigen/src/Core/arch/NEON/PacketMath.h +760 -0
  153. data/vendor/eigen/Eigen/src/Core/arch/SSE/Complex.h +471 -0
  154. data/vendor/eigen/Eigen/src/Core/arch/SSE/MathFunctions.h +562 -0
  155. data/vendor/eigen/Eigen/src/Core/arch/SSE/PacketMath.h +895 -0
  156. data/vendor/eigen/Eigen/src/Core/arch/SSE/TypeCasting.h +77 -0
  157. data/vendor/eigen/Eigen/src/Core/arch/ZVector/Complex.h +397 -0
  158. data/vendor/eigen/Eigen/src/Core/arch/ZVector/MathFunctions.h +137 -0
  159. data/vendor/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h +945 -0
  160. data/vendor/eigen/Eigen/src/Core/functors/AssignmentFunctors.h +168 -0
  161. data/vendor/eigen/Eigen/src/Core/functors/BinaryFunctors.h +475 -0
  162. data/vendor/eigen/Eigen/src/Core/functors/NullaryFunctors.h +188 -0
  163. data/vendor/eigen/Eigen/src/Core/functors/StlFunctors.h +136 -0
  164. data/vendor/eigen/Eigen/src/Core/functors/TernaryFunctors.h +25 -0
  165. data/vendor/eigen/Eigen/src/Core/functors/UnaryFunctors.h +792 -0
  166. data/vendor/eigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h +2156 -0
  167. data/vendor/eigen/Eigen/src/Core/products/GeneralMatrixMatrix.h +492 -0
  168. data/vendor/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +311 -0
  169. data/vendor/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h +145 -0
  170. data/vendor/eigen/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h +122 -0
  171. data/vendor/eigen/Eigen/src/Core/products/GeneralMatrixVector.h +619 -0
  172. data/vendor/eigen/Eigen/src/Core/products/GeneralMatrixVector_BLAS.h +136 -0
  173. data/vendor/eigen/Eigen/src/Core/products/Parallelizer.h +163 -0
  174. data/vendor/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +521 -0
  175. data/vendor/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h +287 -0
  176. data/vendor/eigen/Eigen/src/Core/products/SelfadjointMatrixVector.h +260 -0
  177. data/vendor/eigen/Eigen/src/Core/products/SelfadjointMatrixVector_BLAS.h +118 -0
  178. data/vendor/eigen/Eigen/src/Core/products/SelfadjointProduct.h +133 -0
  179. data/vendor/eigen/Eigen/src/Core/products/SelfadjointRank2Update.h +93 -0
  180. data/vendor/eigen/Eigen/src/Core/products/TriangularMatrixMatrix.h +466 -0
  181. data/vendor/eigen/Eigen/src/Core/products/TriangularMatrixMatrix_BLAS.h +315 -0
  182. data/vendor/eigen/Eigen/src/Core/products/TriangularMatrixVector.h +350 -0
  183. data/vendor/eigen/Eigen/src/Core/products/TriangularMatrixVector_BLAS.h +255 -0
  184. data/vendor/eigen/Eigen/src/Core/products/TriangularSolverMatrix.h +335 -0
  185. data/vendor/eigen/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h +163 -0
  186. data/vendor/eigen/Eigen/src/Core/products/TriangularSolverVector.h +145 -0
  187. data/vendor/eigen/Eigen/src/Core/util/BlasUtil.h +398 -0
  188. data/vendor/eigen/Eigen/src/Core/util/Constants.h +547 -0
  189. data/vendor/eigen/Eigen/src/Core/util/DisableStupidWarnings.h +83 -0
  190. data/vendor/eigen/Eigen/src/Core/util/ForwardDeclarations.h +302 -0
  191. data/vendor/eigen/Eigen/src/Core/util/MKL_support.h +130 -0
  192. data/vendor/eigen/Eigen/src/Core/util/Macros.h +1001 -0
  193. data/vendor/eigen/Eigen/src/Core/util/Memory.h +993 -0
  194. data/vendor/eigen/Eigen/src/Core/util/Meta.h +534 -0
  195. data/vendor/eigen/Eigen/src/Core/util/NonMPL2.h +3 -0
  196. data/vendor/eigen/Eigen/src/Core/util/ReenableStupidWarnings.h +27 -0
  197. data/vendor/eigen/Eigen/src/Core/util/StaticAssert.h +218 -0
  198. data/vendor/eigen/Eigen/src/Core/util/XprHelper.h +821 -0
  199. data/vendor/eigen/Eigen/src/Eigenvalues/ComplexEigenSolver.h +346 -0
  200. data/vendor/eigen/Eigen/src/Eigenvalues/ComplexSchur.h +459 -0
  201. data/vendor/eigen/Eigen/src/Eigenvalues/ComplexSchur_LAPACKE.h +91 -0
  202. data/vendor/eigen/Eigen/src/Eigenvalues/EigenSolver.h +622 -0
  203. data/vendor/eigen/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h +418 -0
  204. data/vendor/eigen/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h +226 -0
  205. data/vendor/eigen/Eigen/src/Eigenvalues/HessenbergDecomposition.h +374 -0
  206. data/vendor/eigen/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h +158 -0
  207. data/vendor/eigen/Eigen/src/Eigenvalues/RealQZ.h +654 -0
  208. data/vendor/eigen/Eigen/src/Eigenvalues/RealSchur.h +546 -0
  209. data/vendor/eigen/Eigen/src/Eigenvalues/RealSchur_LAPACKE.h +77 -0
  210. data/vendor/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +870 -0
  211. data/vendor/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h +87 -0
  212. data/vendor/eigen/Eigen/src/Eigenvalues/Tridiagonalization.h +556 -0
  213. data/vendor/eigen/Eigen/src/Geometry/AlignedBox.h +392 -0
  214. data/vendor/eigen/Eigen/src/Geometry/AngleAxis.h +247 -0
  215. data/vendor/eigen/Eigen/src/Geometry/EulerAngles.h +114 -0
  216. data/vendor/eigen/Eigen/src/Geometry/Homogeneous.h +497 -0
  217. data/vendor/eigen/Eigen/src/Geometry/Hyperplane.h +282 -0
  218. data/vendor/eigen/Eigen/src/Geometry/OrthoMethods.h +234 -0
  219. data/vendor/eigen/Eigen/src/Geometry/ParametrizedLine.h +195 -0
  220. data/vendor/eigen/Eigen/src/Geometry/Quaternion.h +814 -0
  221. data/vendor/eigen/Eigen/src/Geometry/Rotation2D.h +199 -0
  222. data/vendor/eigen/Eigen/src/Geometry/RotationBase.h +206 -0
  223. data/vendor/eigen/Eigen/src/Geometry/Scaling.h +170 -0
  224. data/vendor/eigen/Eigen/src/Geometry/Transform.h +1542 -0
  225. data/vendor/eigen/Eigen/src/Geometry/Translation.h +208 -0
  226. data/vendor/eigen/Eigen/src/Geometry/Umeyama.h +166 -0
  227. data/vendor/eigen/Eigen/src/Geometry/arch/Geometry_SSE.h +161 -0
  228. data/vendor/eigen/Eigen/src/Householder/BlockHouseholder.h +103 -0
  229. data/vendor/eigen/Eigen/src/Householder/Householder.h +172 -0
  230. data/vendor/eigen/Eigen/src/Householder/HouseholderSequence.h +470 -0
  231. data/vendor/eigen/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +226 -0
  232. data/vendor/eigen/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +228 -0
  233. data/vendor/eigen/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +246 -0
  234. data/vendor/eigen/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +400 -0
  235. data/vendor/eigen/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +462 -0
  236. data/vendor/eigen/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +394 -0
  237. data/vendor/eigen/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h +216 -0
  238. data/vendor/eigen/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h +115 -0
  239. data/vendor/eigen/Eigen/src/Jacobi/Jacobi.h +462 -0
  240. data/vendor/eigen/Eigen/src/LU/Determinant.h +101 -0
  241. data/vendor/eigen/Eigen/src/LU/FullPivLU.h +891 -0
  242. data/vendor/eigen/Eigen/src/LU/InverseImpl.h +415 -0
  243. data/vendor/eigen/Eigen/src/LU/PartialPivLU.h +611 -0
  244. data/vendor/eigen/Eigen/src/LU/PartialPivLU_LAPACKE.h +83 -0
  245. data/vendor/eigen/Eigen/src/LU/arch/Inverse_SSE.h +338 -0
  246. data/vendor/eigen/Eigen/src/MetisSupport/MetisSupport.h +137 -0
  247. data/vendor/eigen/Eigen/src/OrderingMethods/Amd.h +445 -0
  248. data/vendor/eigen/Eigen/src/OrderingMethods/Eigen_Colamd.h +1843 -0
  249. data/vendor/eigen/Eigen/src/OrderingMethods/Ordering.h +157 -0
  250. data/vendor/eigen/Eigen/src/PaStiXSupport/PaStiXSupport.h +678 -0
  251. data/vendor/eigen/Eigen/src/PardisoSupport/PardisoSupport.h +543 -0
  252. data/vendor/eigen/Eigen/src/QR/ColPivHouseholderQR.h +653 -0
  253. data/vendor/eigen/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h +97 -0
  254. data/vendor/eigen/Eigen/src/QR/CompleteOrthogonalDecomposition.h +562 -0
  255. data/vendor/eigen/Eigen/src/QR/FullPivHouseholderQR.h +676 -0
  256. data/vendor/eigen/Eigen/src/QR/HouseholderQR.h +409 -0
  257. data/vendor/eigen/Eigen/src/QR/HouseholderQR_LAPACKE.h +68 -0
  258. data/vendor/eigen/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h +313 -0
  259. data/vendor/eigen/Eigen/src/SVD/BDCSVD.h +1246 -0
  260. data/vendor/eigen/Eigen/src/SVD/JacobiSVD.h +804 -0
  261. data/vendor/eigen/Eigen/src/SVD/JacobiSVD_LAPACKE.h +91 -0
  262. data/vendor/eigen/Eigen/src/SVD/SVDBase.h +315 -0
  263. data/vendor/eigen/Eigen/src/SVD/UpperBidiagonalization.h +414 -0
  264. data/vendor/eigen/Eigen/src/SparseCholesky/SimplicialCholesky.h +689 -0
  265. data/vendor/eigen/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +199 -0
  266. data/vendor/eigen/Eigen/src/SparseCore/AmbiVector.h +377 -0
  267. data/vendor/eigen/Eigen/src/SparseCore/CompressedStorage.h +258 -0
  268. data/vendor/eigen/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +352 -0
  269. data/vendor/eigen/Eigen/src/SparseCore/MappedSparseMatrix.h +67 -0
  270. data/vendor/eigen/Eigen/src/SparseCore/SparseAssign.h +216 -0
  271. data/vendor/eigen/Eigen/src/SparseCore/SparseBlock.h +603 -0
  272. data/vendor/eigen/Eigen/src/SparseCore/SparseColEtree.h +206 -0
  273. data/vendor/eigen/Eigen/src/SparseCore/SparseCompressedBase.h +341 -0
  274. data/vendor/eigen/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +726 -0
  275. data/vendor/eigen/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +148 -0
  276. data/vendor/eigen/Eigen/src/SparseCore/SparseDenseProduct.h +320 -0
  277. data/vendor/eigen/Eigen/src/SparseCore/SparseDiagonalProduct.h +138 -0
  278. data/vendor/eigen/Eigen/src/SparseCore/SparseDot.h +98 -0
  279. data/vendor/eigen/Eigen/src/SparseCore/SparseFuzzy.h +29 -0
  280. data/vendor/eigen/Eigen/src/SparseCore/SparseMap.h +305 -0
  281. data/vendor/eigen/Eigen/src/SparseCore/SparseMatrix.h +1403 -0
  282. data/vendor/eigen/Eigen/src/SparseCore/SparseMatrixBase.h +405 -0
  283. data/vendor/eigen/Eigen/src/SparseCore/SparsePermutation.h +178 -0
  284. data/vendor/eigen/Eigen/src/SparseCore/SparseProduct.h +169 -0
  285. data/vendor/eigen/Eigen/src/SparseCore/SparseRedux.h +49 -0
  286. data/vendor/eigen/Eigen/src/SparseCore/SparseRef.h +397 -0
  287. data/vendor/eigen/Eigen/src/SparseCore/SparseSelfAdjointView.h +656 -0
  288. data/vendor/eigen/Eigen/src/SparseCore/SparseSolverBase.h +124 -0
  289. data/vendor/eigen/Eigen/src/SparseCore/SparseSparseProductWithPruning.h +198 -0
  290. data/vendor/eigen/Eigen/src/SparseCore/SparseTranspose.h +92 -0
  291. data/vendor/eigen/Eigen/src/SparseCore/SparseTriangularView.h +189 -0
  292. data/vendor/eigen/Eigen/src/SparseCore/SparseUtil.h +178 -0
  293. data/vendor/eigen/Eigen/src/SparseCore/SparseVector.h +478 -0
  294. data/vendor/eigen/Eigen/src/SparseCore/SparseView.h +253 -0
  295. data/vendor/eigen/Eigen/src/SparseCore/TriangularSolver.h +315 -0
  296. data/vendor/eigen/Eigen/src/SparseLU/SparseLU.h +773 -0
  297. data/vendor/eigen/Eigen/src/SparseLU/SparseLUImpl.h +66 -0
  298. data/vendor/eigen/Eigen/src/SparseLU/SparseLU_Memory.h +226 -0
  299. data/vendor/eigen/Eigen/src/SparseLU/SparseLU_Structs.h +110 -0
  300. data/vendor/eigen/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h +301 -0
  301. data/vendor/eigen/Eigen/src/SparseLU/SparseLU_Utils.h +80 -0
  302. data/vendor/eigen/Eigen/src/SparseLU/SparseLU_column_bmod.h +181 -0
  303. data/vendor/eigen/Eigen/src/SparseLU/SparseLU_column_dfs.h +179 -0
  304. data/vendor/eigen/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h +107 -0
  305. data/vendor/eigen/Eigen/src/SparseLU/SparseLU_gemm_kernel.h +280 -0
  306. data/vendor/eigen/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h +126 -0
  307. data/vendor/eigen/Eigen/src/SparseLU/SparseLU_kernel_bmod.h +130 -0
  308. data/vendor/eigen/Eigen/src/SparseLU/SparseLU_panel_bmod.h +223 -0
  309. data/vendor/eigen/Eigen/src/SparseLU/SparseLU_panel_dfs.h +258 -0
  310. data/vendor/eigen/Eigen/src/SparseLU/SparseLU_pivotL.h +137 -0
  311. data/vendor/eigen/Eigen/src/SparseLU/SparseLU_pruneL.h +136 -0
  312. data/vendor/eigen/Eigen/src/SparseLU/SparseLU_relax_snode.h +83 -0
  313. data/vendor/eigen/Eigen/src/SparseQR/SparseQR.h +745 -0
  314. data/vendor/eigen/Eigen/src/StlSupport/StdDeque.h +126 -0
  315. data/vendor/eigen/Eigen/src/StlSupport/StdList.h +106 -0
  316. data/vendor/eigen/Eigen/src/StlSupport/StdVector.h +131 -0
  317. data/vendor/eigen/Eigen/src/StlSupport/details.h +84 -0
  318. data/vendor/eigen/Eigen/src/SuperLUSupport/SuperLUSupport.h +1027 -0
  319. data/vendor/eigen/Eigen/src/UmfPackSupport/UmfPackSupport.h +506 -0
  320. data/vendor/eigen/Eigen/src/misc/Image.h +82 -0
  321. data/vendor/eigen/Eigen/src/misc/Kernel.h +79 -0
  322. data/vendor/eigen/Eigen/src/misc/RealSvd2x2.h +55 -0
  323. data/vendor/eigen/Eigen/src/misc/blas.h +440 -0
  324. data/vendor/eigen/Eigen/src/misc/lapack.h +152 -0
  325. data/vendor/eigen/Eigen/src/misc/lapacke.h +16291 -0
  326. data/vendor/eigen/Eigen/src/misc/lapacke_mangling.h +17 -0
  327. data/vendor/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.h +332 -0
  328. data/vendor/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.h +552 -0
  329. data/vendor/eigen/Eigen/src/plugins/BlockMethods.h +1058 -0
  330. data/vendor/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.h +115 -0
  331. data/vendor/eigen/Eigen/src/plugins/CommonCwiseUnaryOps.h +163 -0
  332. data/vendor/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.h +152 -0
  333. data/vendor/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.h +85 -0
  334. data/vendor/eigen/README.md +3 -0
  335. data/vendor/eigen/bench/README.txt +55 -0
  336. data/vendor/eigen/bench/btl/COPYING +340 -0
  337. data/vendor/eigen/bench/btl/README +154 -0
  338. data/vendor/eigen/bench/tensors/README +21 -0
  339. data/vendor/eigen/blas/README.txt +6 -0
  340. data/vendor/eigen/demos/mandelbrot/README +10 -0
  341. data/vendor/eigen/demos/mix_eigen_and_c/README +9 -0
  342. data/vendor/eigen/demos/opengl/README +13 -0
  343. data/vendor/eigen/unsupported/Eigen/CXX11/src/Tensor/README.md +1760 -0
  344. data/vendor/eigen/unsupported/README.txt +50 -0
  345. data/vendor/tomotopy/LICENSE +21 -0
  346. data/vendor/tomotopy/README.kr.rst +375 -0
  347. data/vendor/tomotopy/README.rst +382 -0
  348. data/vendor/tomotopy/src/Labeling/FoRelevance.cpp +362 -0
  349. data/vendor/tomotopy/src/Labeling/FoRelevance.h +88 -0
  350. data/vendor/tomotopy/src/Labeling/Labeler.h +50 -0
  351. data/vendor/tomotopy/src/TopicModel/CT.h +37 -0
  352. data/vendor/tomotopy/src/TopicModel/CTModel.cpp +13 -0
  353. data/vendor/tomotopy/src/TopicModel/CTModel.hpp +293 -0
  354. data/vendor/tomotopy/src/TopicModel/DMR.h +51 -0
  355. data/vendor/tomotopy/src/TopicModel/DMRModel.cpp +13 -0
  356. data/vendor/tomotopy/src/TopicModel/DMRModel.hpp +374 -0
  357. data/vendor/tomotopy/src/TopicModel/DT.h +65 -0
  358. data/vendor/tomotopy/src/TopicModel/DTM.h +22 -0
  359. data/vendor/tomotopy/src/TopicModel/DTModel.cpp +15 -0
  360. data/vendor/tomotopy/src/TopicModel/DTModel.hpp +572 -0
  361. data/vendor/tomotopy/src/TopicModel/GDMR.h +37 -0
  362. data/vendor/tomotopy/src/TopicModel/GDMRModel.cpp +14 -0
  363. data/vendor/tomotopy/src/TopicModel/GDMRModel.hpp +485 -0
  364. data/vendor/tomotopy/src/TopicModel/HDP.h +74 -0
  365. data/vendor/tomotopy/src/TopicModel/HDPModel.cpp +13 -0
  366. data/vendor/tomotopy/src/TopicModel/HDPModel.hpp +592 -0
  367. data/vendor/tomotopy/src/TopicModel/HLDA.h +40 -0
  368. data/vendor/tomotopy/src/TopicModel/HLDAModel.cpp +13 -0
  369. data/vendor/tomotopy/src/TopicModel/HLDAModel.hpp +681 -0
  370. data/vendor/tomotopy/src/TopicModel/HPA.h +27 -0
  371. data/vendor/tomotopy/src/TopicModel/HPAModel.cpp +21 -0
  372. data/vendor/tomotopy/src/TopicModel/HPAModel.hpp +588 -0
  373. data/vendor/tomotopy/src/TopicModel/LDA.h +144 -0
  374. data/vendor/tomotopy/src/TopicModel/LDACVB0Model.hpp +442 -0
  375. data/vendor/tomotopy/src/TopicModel/LDAModel.cpp +13 -0
  376. data/vendor/tomotopy/src/TopicModel/LDAModel.hpp +1058 -0
  377. data/vendor/tomotopy/src/TopicModel/LLDA.h +45 -0
  378. data/vendor/tomotopy/src/TopicModel/LLDAModel.cpp +13 -0
  379. data/vendor/tomotopy/src/TopicModel/LLDAModel.hpp +203 -0
  380. data/vendor/tomotopy/src/TopicModel/MGLDA.h +63 -0
  381. data/vendor/tomotopy/src/TopicModel/MGLDAModel.cpp +17 -0
  382. data/vendor/tomotopy/src/TopicModel/MGLDAModel.hpp +558 -0
  383. data/vendor/tomotopy/src/TopicModel/PA.h +43 -0
  384. data/vendor/tomotopy/src/TopicModel/PAModel.cpp +13 -0
  385. data/vendor/tomotopy/src/TopicModel/PAModel.hpp +467 -0
  386. data/vendor/tomotopy/src/TopicModel/PLDA.h +17 -0
  387. data/vendor/tomotopy/src/TopicModel/PLDAModel.cpp +13 -0
  388. data/vendor/tomotopy/src/TopicModel/PLDAModel.hpp +214 -0
  389. data/vendor/tomotopy/src/TopicModel/SLDA.h +54 -0
  390. data/vendor/tomotopy/src/TopicModel/SLDAModel.cpp +17 -0
  391. data/vendor/tomotopy/src/TopicModel/SLDAModel.hpp +456 -0
  392. data/vendor/tomotopy/src/TopicModel/TopicModel.hpp +692 -0
  393. data/vendor/tomotopy/src/Utils/AliasMethod.hpp +169 -0
  394. data/vendor/tomotopy/src/Utils/Dictionary.h +80 -0
  395. data/vendor/tomotopy/src/Utils/EigenAddonOps.hpp +181 -0
  396. data/vendor/tomotopy/src/Utils/LBFGS.h +202 -0
  397. data/vendor/tomotopy/src/Utils/LBFGS/LineSearchBacktracking.h +120 -0
  398. data/vendor/tomotopy/src/Utils/LBFGS/LineSearchBracketing.h +122 -0
  399. data/vendor/tomotopy/src/Utils/LBFGS/Param.h +213 -0
  400. data/vendor/tomotopy/src/Utils/LUT.hpp +82 -0
  401. data/vendor/tomotopy/src/Utils/MultiNormalDistribution.hpp +69 -0
  402. data/vendor/tomotopy/src/Utils/PolyaGamma.hpp +200 -0
  403. data/vendor/tomotopy/src/Utils/PolyaGammaHybrid.hpp +672 -0
  404. data/vendor/tomotopy/src/Utils/ThreadPool.hpp +150 -0
  405. data/vendor/tomotopy/src/Utils/Trie.hpp +220 -0
  406. data/vendor/tomotopy/src/Utils/TruncMultiNormal.hpp +94 -0
  407. data/vendor/tomotopy/src/Utils/Utils.hpp +337 -0
  408. data/vendor/tomotopy/src/Utils/avx_gamma.h +46 -0
  409. data/vendor/tomotopy/src/Utils/avx_mathfun.h +736 -0
  410. data/vendor/tomotopy/src/Utils/exception.h +28 -0
  411. data/vendor/tomotopy/src/Utils/math.h +281 -0
  412. data/vendor/tomotopy/src/Utils/rtnorm.hpp +2690 -0
  413. data/vendor/tomotopy/src/Utils/sample.hpp +192 -0
  414. data/vendor/tomotopy/src/Utils/serializer.hpp +695 -0
  415. data/vendor/tomotopy/src/Utils/slp.hpp +131 -0
  416. data/vendor/tomotopy/src/Utils/sse_gamma.h +48 -0
  417. data/vendor/tomotopy/src/Utils/sse_mathfun.h +710 -0
  418. data/vendor/tomotopy/src/Utils/text.hpp +49 -0
  419. data/vendor/tomotopy/src/Utils/tvector.hpp +543 -0
  420. metadata +531 -0
@@ -0,0 +1,260 @@
1
+ // This file is part of Eigen, a lightweight C++ template library
2
+ // for linear algebra.
3
+ //
4
+ // Copyright (C) 2007-2009 Benoit Jacob <jacob.benoit.1@gmail.com>
5
+ // Copyright (C) 2009-2010 Gael Guennebaud <gael.guennebaud@inria.fr>
6
+ //
7
+ // This Source Code Form is subject to the terms of the Mozilla
8
+ // Public License v. 2.0. If a copy of the MPL was not distributed
9
+ // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
10
+
11
+ #ifndef EIGEN_DIAGONAL_H
12
+ #define EIGEN_DIAGONAL_H
13
+
14
+ namespace Eigen {
15
+
16
+ /** \class Diagonal
17
+ * \ingroup Core_Module
18
+ *
19
+ * \brief Expression of a diagonal/subdiagonal/superdiagonal in a matrix
20
+ *
21
+ * \param MatrixType the type of the object in which we are taking a sub/main/super diagonal
22
+ * \param DiagIndex the index of the sub/super diagonal. The default is 0 and it means the main diagonal.
23
+ * A positive value means a superdiagonal, a negative value means a subdiagonal.
24
+ * You can also use DynamicIndex so the index can be set at runtime.
25
+ *
26
+ * The matrix is not required to be square.
27
+ *
28
+ * This class represents an expression of the main diagonal, or any sub/super diagonal
29
+ * of a square matrix. It is the return type of MatrixBase::diagonal() and MatrixBase::diagonal(Index) and most of the
30
+ * time this is the only way it is used.
31
+ *
32
+ * \sa MatrixBase::diagonal(), MatrixBase::diagonal(Index)
33
+ */
34
+
35
+ namespace internal {
36
+ template<typename MatrixType, int DiagIndex>
37
+ struct traits<Diagonal<MatrixType,DiagIndex> >
38
+ : traits<MatrixType>
39
+ {
40
+ typedef typename ref_selector<MatrixType>::type MatrixTypeNested;
41
+ typedef typename remove_reference<MatrixTypeNested>::type _MatrixTypeNested;
42
+ typedef typename MatrixType::StorageKind StorageKind;
43
+ enum {
44
+ RowsAtCompileTime = (int(DiagIndex) == DynamicIndex || int(MatrixType::SizeAtCompileTime) == Dynamic) ? Dynamic
45
+ : (EIGEN_PLAIN_ENUM_MIN(MatrixType::RowsAtCompileTime - EIGEN_PLAIN_ENUM_MAX(-DiagIndex, 0),
46
+ MatrixType::ColsAtCompileTime - EIGEN_PLAIN_ENUM_MAX( DiagIndex, 0))),
47
+ ColsAtCompileTime = 1,
48
+ MaxRowsAtCompileTime = int(MatrixType::MaxSizeAtCompileTime) == Dynamic ? Dynamic
49
+ : DiagIndex == DynamicIndex ? EIGEN_SIZE_MIN_PREFER_FIXED(MatrixType::MaxRowsAtCompileTime,
50
+ MatrixType::MaxColsAtCompileTime)
51
+ : (EIGEN_PLAIN_ENUM_MIN(MatrixType::MaxRowsAtCompileTime - EIGEN_PLAIN_ENUM_MAX(-DiagIndex, 0),
52
+ MatrixType::MaxColsAtCompileTime - EIGEN_PLAIN_ENUM_MAX( DiagIndex, 0))),
53
+ MaxColsAtCompileTime = 1,
54
+ MaskLvalueBit = is_lvalue<MatrixType>::value ? LvalueBit : 0,
55
+ Flags = (unsigned int)_MatrixTypeNested::Flags & (RowMajorBit | MaskLvalueBit | DirectAccessBit) & ~RowMajorBit, // FIXME DirectAccessBit should not be handled by expressions
56
+ MatrixTypeOuterStride = outer_stride_at_compile_time<MatrixType>::ret,
57
+ InnerStrideAtCompileTime = MatrixTypeOuterStride == Dynamic ? Dynamic : MatrixTypeOuterStride+1,
58
+ OuterStrideAtCompileTime = 0
59
+ };
60
+ };
61
+ }
62
+
63
+ template<typename MatrixType, int _DiagIndex> class Diagonal
64
+ : public internal::dense_xpr_base< Diagonal<MatrixType,_DiagIndex> >::type
65
+ {
66
+ public:
67
+
68
+ enum { DiagIndex = _DiagIndex };
69
+ typedef typename internal::dense_xpr_base<Diagonal>::type Base;
70
+ EIGEN_DENSE_PUBLIC_INTERFACE(Diagonal)
71
+
72
+ EIGEN_DEVICE_FUNC
73
+ explicit inline Diagonal(MatrixType& matrix, Index a_index = DiagIndex) : m_matrix(matrix), m_index(a_index)
74
+ {
75
+ eigen_assert( a_index <= m_matrix.cols() && -a_index <= m_matrix.rows() );
76
+ }
77
+
78
+ EIGEN_INHERIT_ASSIGNMENT_OPERATORS(Diagonal)
79
+
80
+ EIGEN_DEVICE_FUNC
81
+ inline Index rows() const
82
+ {
83
+ return m_index.value()<0 ? numext::mini<Index>(m_matrix.cols(),m_matrix.rows()+m_index.value())
84
+ : numext::mini<Index>(m_matrix.rows(),m_matrix.cols()-m_index.value());
85
+ }
86
+
87
+ EIGEN_DEVICE_FUNC
88
+ inline Index cols() const { return 1; }
89
+
90
+ EIGEN_DEVICE_FUNC
91
+ inline Index innerStride() const
92
+ {
93
+ return m_matrix.outerStride() + 1;
94
+ }
95
+
96
+ EIGEN_DEVICE_FUNC
97
+ inline Index outerStride() const
98
+ {
99
+ return 0;
100
+ }
101
+
102
+ typedef typename internal::conditional<
103
+ internal::is_lvalue<MatrixType>::value,
104
+ Scalar,
105
+ const Scalar
106
+ >::type ScalarWithConstIfNotLvalue;
107
+
108
+ EIGEN_DEVICE_FUNC
109
+ inline ScalarWithConstIfNotLvalue* data() { return &(m_matrix.coeffRef(rowOffset(), colOffset())); }
110
+ EIGEN_DEVICE_FUNC
111
+ inline const Scalar* data() const { return &(m_matrix.coeffRef(rowOffset(), colOffset())); }
112
+
113
+ EIGEN_DEVICE_FUNC
114
+ inline Scalar& coeffRef(Index row, Index)
115
+ {
116
+ EIGEN_STATIC_ASSERT_LVALUE(MatrixType)
117
+ return m_matrix.coeffRef(row+rowOffset(), row+colOffset());
118
+ }
119
+
120
+ EIGEN_DEVICE_FUNC
121
+ inline const Scalar& coeffRef(Index row, Index) const
122
+ {
123
+ return m_matrix.coeffRef(row+rowOffset(), row+colOffset());
124
+ }
125
+
126
+ EIGEN_DEVICE_FUNC
127
+ inline CoeffReturnType coeff(Index row, Index) const
128
+ {
129
+ return m_matrix.coeff(row+rowOffset(), row+colOffset());
130
+ }
131
+
132
+ EIGEN_DEVICE_FUNC
133
+ inline Scalar& coeffRef(Index idx)
134
+ {
135
+ EIGEN_STATIC_ASSERT_LVALUE(MatrixType)
136
+ return m_matrix.coeffRef(idx+rowOffset(), idx+colOffset());
137
+ }
138
+
139
+ EIGEN_DEVICE_FUNC
140
+ inline const Scalar& coeffRef(Index idx) const
141
+ {
142
+ return m_matrix.coeffRef(idx+rowOffset(), idx+colOffset());
143
+ }
144
+
145
+ EIGEN_DEVICE_FUNC
146
+ inline CoeffReturnType coeff(Index idx) const
147
+ {
148
+ return m_matrix.coeff(idx+rowOffset(), idx+colOffset());
149
+ }
150
+
151
+ EIGEN_DEVICE_FUNC
152
+ inline const typename internal::remove_all<typename MatrixType::Nested>::type&
153
+ nestedExpression() const
154
+ {
155
+ return m_matrix;
156
+ }
157
+
158
+ EIGEN_DEVICE_FUNC
159
+ inline Index index() const
160
+ {
161
+ return m_index.value();
162
+ }
163
+
164
+ protected:
165
+ typename internal::ref_selector<MatrixType>::non_const_type m_matrix;
166
+ const internal::variable_if_dynamicindex<Index, DiagIndex> m_index;
167
+
168
+ private:
169
+ // some compilers may fail to optimize std::max etc in case of compile-time constants...
170
+ EIGEN_DEVICE_FUNC
171
+ EIGEN_STRONG_INLINE Index absDiagIndex() const { return m_index.value()>0 ? m_index.value() : -m_index.value(); }
172
+ EIGEN_DEVICE_FUNC
173
+ EIGEN_STRONG_INLINE Index rowOffset() const { return m_index.value()>0 ? 0 : -m_index.value(); }
174
+ EIGEN_DEVICE_FUNC
175
+ EIGEN_STRONG_INLINE Index colOffset() const { return m_index.value()>0 ? m_index.value() : 0; }
176
+ // trigger a compile-time error if someone try to call packet
177
+ template<int LoadMode> typename MatrixType::PacketReturnType packet(Index) const;
178
+ template<int LoadMode> typename MatrixType::PacketReturnType packet(Index,Index) const;
179
+ };
180
+
181
+ /** \returns an expression of the main diagonal of the matrix \c *this
182
+ *
183
+ * \c *this is not required to be square.
184
+ *
185
+ * Example: \include MatrixBase_diagonal.cpp
186
+ * Output: \verbinclude MatrixBase_diagonal.out
187
+ *
188
+ * \sa class Diagonal */
189
+ template<typename Derived>
190
+ inline typename MatrixBase<Derived>::DiagonalReturnType
191
+ MatrixBase<Derived>::diagonal()
192
+ {
193
+ return DiagonalReturnType(derived());
194
+ }
195
+
196
+ /** This is the const version of diagonal(). */
197
+ template<typename Derived>
198
+ inline typename MatrixBase<Derived>::ConstDiagonalReturnType
199
+ MatrixBase<Derived>::diagonal() const
200
+ {
201
+ return ConstDiagonalReturnType(derived());
202
+ }
203
+
204
+ /** \returns an expression of the \a DiagIndex-th sub or super diagonal of the matrix \c *this
205
+ *
206
+ * \c *this is not required to be square.
207
+ *
208
+ * The template parameter \a DiagIndex represent a super diagonal if \a DiagIndex > 0
209
+ * and a sub diagonal otherwise. \a DiagIndex == 0 is equivalent to the main diagonal.
210
+ *
211
+ * Example: \include MatrixBase_diagonal_int.cpp
212
+ * Output: \verbinclude MatrixBase_diagonal_int.out
213
+ *
214
+ * \sa MatrixBase::diagonal(), class Diagonal */
215
+ template<typename Derived>
216
+ inline typename MatrixBase<Derived>::DiagonalDynamicIndexReturnType
217
+ MatrixBase<Derived>::diagonal(Index index)
218
+ {
219
+ return DiagonalDynamicIndexReturnType(derived(), index);
220
+ }
221
+
222
+ /** This is the const version of diagonal(Index). */
223
+ template<typename Derived>
224
+ inline typename MatrixBase<Derived>::ConstDiagonalDynamicIndexReturnType
225
+ MatrixBase<Derived>::diagonal(Index index) const
226
+ {
227
+ return ConstDiagonalDynamicIndexReturnType(derived(), index);
228
+ }
229
+
230
+ /** \returns an expression of the \a DiagIndex-th sub or super diagonal of the matrix \c *this
231
+ *
232
+ * \c *this is not required to be square.
233
+ *
234
+ * The template parameter \a DiagIndex represent a super diagonal if \a DiagIndex > 0
235
+ * and a sub diagonal otherwise. \a DiagIndex == 0 is equivalent to the main diagonal.
236
+ *
237
+ * Example: \include MatrixBase_diagonal_template_int.cpp
238
+ * Output: \verbinclude MatrixBase_diagonal_template_int.out
239
+ *
240
+ * \sa MatrixBase::diagonal(), class Diagonal */
241
+ template<typename Derived>
242
+ template<int Index_>
243
+ inline typename MatrixBase<Derived>::template DiagonalIndexReturnType<Index_>::Type
244
+ MatrixBase<Derived>::diagonal()
245
+ {
246
+ return typename DiagonalIndexReturnType<Index_>::Type(derived());
247
+ }
248
+
249
+ /** This is the const version of diagonal<int>(). */
250
+ template<typename Derived>
251
+ template<int Index_>
252
+ inline typename MatrixBase<Derived>::template ConstDiagonalIndexReturnType<Index_>::Type
253
+ MatrixBase<Derived>::diagonal() const
254
+ {
255
+ return typename ConstDiagonalIndexReturnType<Index_>::Type(derived());
256
+ }
257
+
258
+ } // end namespace Eigen
259
+
260
+ #endif // EIGEN_DIAGONAL_H
@@ -0,0 +1,343 @@
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
+ // Copyright (C) 2007-2009 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_DIAGONALMATRIX_H
12
+ #define EIGEN_DIAGONALMATRIX_H
13
+
14
+ namespace Eigen {
15
+
16
+ #ifndef EIGEN_PARSED_BY_DOXYGEN
17
+ template<typename Derived>
18
+ class DiagonalBase : public EigenBase<Derived>
19
+ {
20
+ public:
21
+ typedef typename internal::traits<Derived>::DiagonalVectorType DiagonalVectorType;
22
+ typedef typename DiagonalVectorType::Scalar Scalar;
23
+ typedef typename DiagonalVectorType::RealScalar RealScalar;
24
+ typedef typename internal::traits<Derived>::StorageKind StorageKind;
25
+ typedef typename internal::traits<Derived>::StorageIndex StorageIndex;
26
+
27
+ enum {
28
+ RowsAtCompileTime = DiagonalVectorType::SizeAtCompileTime,
29
+ ColsAtCompileTime = DiagonalVectorType::SizeAtCompileTime,
30
+ MaxRowsAtCompileTime = DiagonalVectorType::MaxSizeAtCompileTime,
31
+ MaxColsAtCompileTime = DiagonalVectorType::MaxSizeAtCompileTime,
32
+ IsVectorAtCompileTime = 0,
33
+ Flags = NoPreferredStorageOrderBit
34
+ };
35
+
36
+ typedef Matrix<Scalar, RowsAtCompileTime, ColsAtCompileTime, 0, MaxRowsAtCompileTime, MaxColsAtCompileTime> DenseMatrixType;
37
+ typedef DenseMatrixType DenseType;
38
+ typedef DiagonalMatrix<Scalar,DiagonalVectorType::SizeAtCompileTime,DiagonalVectorType::MaxSizeAtCompileTime> PlainObject;
39
+
40
+ EIGEN_DEVICE_FUNC
41
+ inline const Derived& derived() const { return *static_cast<const Derived*>(this); }
42
+ EIGEN_DEVICE_FUNC
43
+ inline Derived& derived() { return *static_cast<Derived*>(this); }
44
+
45
+ EIGEN_DEVICE_FUNC
46
+ DenseMatrixType toDenseMatrix() const { return derived(); }
47
+
48
+ EIGEN_DEVICE_FUNC
49
+ inline const DiagonalVectorType& diagonal() const { return derived().diagonal(); }
50
+ EIGEN_DEVICE_FUNC
51
+ inline DiagonalVectorType& diagonal() { return derived().diagonal(); }
52
+
53
+ EIGEN_DEVICE_FUNC
54
+ inline Index rows() const { return diagonal().size(); }
55
+ EIGEN_DEVICE_FUNC
56
+ inline Index cols() const { return diagonal().size(); }
57
+
58
+ template<typename MatrixDerived>
59
+ EIGEN_DEVICE_FUNC
60
+ const Product<Derived,MatrixDerived,LazyProduct>
61
+ operator*(const MatrixBase<MatrixDerived> &matrix) const
62
+ {
63
+ return Product<Derived, MatrixDerived, LazyProduct>(derived(),matrix.derived());
64
+ }
65
+
66
+ typedef DiagonalWrapper<const CwiseUnaryOp<internal::scalar_inverse_op<Scalar>, const DiagonalVectorType> > InverseReturnType;
67
+ EIGEN_DEVICE_FUNC
68
+ inline const InverseReturnType
69
+ inverse() const
70
+ {
71
+ return InverseReturnType(diagonal().cwiseInverse());
72
+ }
73
+
74
+ EIGEN_DEVICE_FUNC
75
+ inline const DiagonalWrapper<const EIGEN_EXPR_BINARYOP_SCALAR_RETURN_TYPE(DiagonalVectorType,Scalar,product) >
76
+ operator*(const Scalar& scalar) const
77
+ {
78
+ return DiagonalWrapper<const EIGEN_EXPR_BINARYOP_SCALAR_RETURN_TYPE(DiagonalVectorType,Scalar,product) >(diagonal() * scalar);
79
+ }
80
+ EIGEN_DEVICE_FUNC
81
+ friend inline const DiagonalWrapper<const EIGEN_SCALAR_BINARYOP_EXPR_RETURN_TYPE(Scalar,DiagonalVectorType,product) >
82
+ operator*(const Scalar& scalar, const DiagonalBase& other)
83
+ {
84
+ return DiagonalWrapper<const EIGEN_SCALAR_BINARYOP_EXPR_RETURN_TYPE(Scalar,DiagonalVectorType,product) >(scalar * other.diagonal());
85
+ }
86
+ };
87
+
88
+ #endif
89
+
90
+ /** \class DiagonalMatrix
91
+ * \ingroup Core_Module
92
+ *
93
+ * \brief Represents a diagonal matrix with its storage
94
+ *
95
+ * \param _Scalar the type of coefficients
96
+ * \param SizeAtCompileTime the dimension of the matrix, or Dynamic
97
+ * \param MaxSizeAtCompileTime the dimension of the matrix, or Dynamic. This parameter is optional and defaults
98
+ * to SizeAtCompileTime. Most of the time, you do not need to specify it.
99
+ *
100
+ * \sa class DiagonalWrapper
101
+ */
102
+
103
+ namespace internal {
104
+ template<typename _Scalar, int SizeAtCompileTime, int MaxSizeAtCompileTime>
105
+ struct traits<DiagonalMatrix<_Scalar,SizeAtCompileTime,MaxSizeAtCompileTime> >
106
+ : traits<Matrix<_Scalar,SizeAtCompileTime,SizeAtCompileTime,0,MaxSizeAtCompileTime,MaxSizeAtCompileTime> >
107
+ {
108
+ typedef Matrix<_Scalar,SizeAtCompileTime,1,0,MaxSizeAtCompileTime,1> DiagonalVectorType;
109
+ typedef DiagonalShape StorageKind;
110
+ enum {
111
+ Flags = LvalueBit | NoPreferredStorageOrderBit
112
+ };
113
+ };
114
+ }
115
+ template<typename _Scalar, int SizeAtCompileTime, int MaxSizeAtCompileTime>
116
+ class DiagonalMatrix
117
+ : public DiagonalBase<DiagonalMatrix<_Scalar,SizeAtCompileTime,MaxSizeAtCompileTime> >
118
+ {
119
+ public:
120
+ #ifndef EIGEN_PARSED_BY_DOXYGEN
121
+ typedef typename internal::traits<DiagonalMatrix>::DiagonalVectorType DiagonalVectorType;
122
+ typedef const DiagonalMatrix& Nested;
123
+ typedef _Scalar Scalar;
124
+ typedef typename internal::traits<DiagonalMatrix>::StorageKind StorageKind;
125
+ typedef typename internal::traits<DiagonalMatrix>::StorageIndex StorageIndex;
126
+ #endif
127
+
128
+ protected:
129
+
130
+ DiagonalVectorType m_diagonal;
131
+
132
+ public:
133
+
134
+ /** const version of diagonal(). */
135
+ EIGEN_DEVICE_FUNC
136
+ inline const DiagonalVectorType& diagonal() const { return m_diagonal; }
137
+ /** \returns a reference to the stored vector of diagonal coefficients. */
138
+ EIGEN_DEVICE_FUNC
139
+ inline DiagonalVectorType& diagonal() { return m_diagonal; }
140
+
141
+ /** Default constructor without initialization */
142
+ EIGEN_DEVICE_FUNC
143
+ inline DiagonalMatrix() {}
144
+
145
+ /** Constructs a diagonal matrix with given dimension */
146
+ EIGEN_DEVICE_FUNC
147
+ explicit inline DiagonalMatrix(Index dim) : m_diagonal(dim) {}
148
+
149
+ /** 2D constructor. */
150
+ EIGEN_DEVICE_FUNC
151
+ inline DiagonalMatrix(const Scalar& x, const Scalar& y) : m_diagonal(x,y) {}
152
+
153
+ /** 3D constructor. */
154
+ EIGEN_DEVICE_FUNC
155
+ inline DiagonalMatrix(const Scalar& x, const Scalar& y, const Scalar& z) : m_diagonal(x,y,z) {}
156
+
157
+ /** Copy constructor. */
158
+ template<typename OtherDerived>
159
+ EIGEN_DEVICE_FUNC
160
+ inline DiagonalMatrix(const DiagonalBase<OtherDerived>& other) : m_diagonal(other.diagonal()) {}
161
+
162
+ #ifndef EIGEN_PARSED_BY_DOXYGEN
163
+ /** copy constructor. prevent a default copy constructor from hiding the other templated constructor */
164
+ inline DiagonalMatrix(const DiagonalMatrix& other) : m_diagonal(other.diagonal()) {}
165
+ #endif
166
+
167
+ /** generic constructor from expression of the diagonal coefficients */
168
+ template<typename OtherDerived>
169
+ EIGEN_DEVICE_FUNC
170
+ explicit inline DiagonalMatrix(const MatrixBase<OtherDerived>& other) : m_diagonal(other)
171
+ {}
172
+
173
+ /** Copy operator. */
174
+ template<typename OtherDerived>
175
+ EIGEN_DEVICE_FUNC
176
+ DiagonalMatrix& operator=(const DiagonalBase<OtherDerived>& other)
177
+ {
178
+ m_diagonal = other.diagonal();
179
+ return *this;
180
+ }
181
+
182
+ #ifndef EIGEN_PARSED_BY_DOXYGEN
183
+ /** This is a special case of the templated operator=. Its purpose is to
184
+ * prevent a default operator= from hiding the templated operator=.
185
+ */
186
+ EIGEN_DEVICE_FUNC
187
+ DiagonalMatrix& operator=(const DiagonalMatrix& other)
188
+ {
189
+ m_diagonal = other.diagonal();
190
+ return *this;
191
+ }
192
+ #endif
193
+
194
+ /** Resizes to given size. */
195
+ EIGEN_DEVICE_FUNC
196
+ inline void resize(Index size) { m_diagonal.resize(size); }
197
+ /** Sets all coefficients to zero. */
198
+ EIGEN_DEVICE_FUNC
199
+ inline void setZero() { m_diagonal.setZero(); }
200
+ /** Resizes and sets all coefficients to zero. */
201
+ EIGEN_DEVICE_FUNC
202
+ inline void setZero(Index size) { m_diagonal.setZero(size); }
203
+ /** Sets this matrix to be the identity matrix of the current size. */
204
+ EIGEN_DEVICE_FUNC
205
+ inline void setIdentity() { m_diagonal.setOnes(); }
206
+ /** Sets this matrix to be the identity matrix of the given size. */
207
+ EIGEN_DEVICE_FUNC
208
+ inline void setIdentity(Index size) { m_diagonal.setOnes(size); }
209
+ };
210
+
211
+ /** \class DiagonalWrapper
212
+ * \ingroup Core_Module
213
+ *
214
+ * \brief Expression of a diagonal matrix
215
+ *
216
+ * \param _DiagonalVectorType the type of the vector of diagonal coefficients
217
+ *
218
+ * This class is an expression of a diagonal matrix, but not storing its own vector of diagonal coefficients,
219
+ * instead wrapping an existing vector expression. It is the return type of MatrixBase::asDiagonal()
220
+ * and most of the time this is the only way that it is used.
221
+ *
222
+ * \sa class DiagonalMatrix, class DiagonalBase, MatrixBase::asDiagonal()
223
+ */
224
+
225
+ namespace internal {
226
+ template<typename _DiagonalVectorType>
227
+ struct traits<DiagonalWrapper<_DiagonalVectorType> >
228
+ {
229
+ typedef _DiagonalVectorType DiagonalVectorType;
230
+ typedef typename DiagonalVectorType::Scalar Scalar;
231
+ typedef typename DiagonalVectorType::StorageIndex StorageIndex;
232
+ typedef DiagonalShape StorageKind;
233
+ typedef typename traits<DiagonalVectorType>::XprKind XprKind;
234
+ enum {
235
+ RowsAtCompileTime = DiagonalVectorType::SizeAtCompileTime,
236
+ ColsAtCompileTime = DiagonalVectorType::SizeAtCompileTime,
237
+ MaxRowsAtCompileTime = DiagonalVectorType::MaxSizeAtCompileTime,
238
+ MaxColsAtCompileTime = DiagonalVectorType::MaxSizeAtCompileTime,
239
+ Flags = (traits<DiagonalVectorType>::Flags & LvalueBit) | NoPreferredStorageOrderBit
240
+ };
241
+ };
242
+ }
243
+
244
+ template<typename _DiagonalVectorType>
245
+ class DiagonalWrapper
246
+ : public DiagonalBase<DiagonalWrapper<_DiagonalVectorType> >, internal::no_assignment_operator
247
+ {
248
+ public:
249
+ #ifndef EIGEN_PARSED_BY_DOXYGEN
250
+ typedef _DiagonalVectorType DiagonalVectorType;
251
+ typedef DiagonalWrapper Nested;
252
+ #endif
253
+
254
+ /** Constructor from expression of diagonal coefficients to wrap. */
255
+ EIGEN_DEVICE_FUNC
256
+ explicit inline DiagonalWrapper(DiagonalVectorType& a_diagonal) : m_diagonal(a_diagonal) {}
257
+
258
+ /** \returns a const reference to the wrapped expression of diagonal coefficients. */
259
+ EIGEN_DEVICE_FUNC
260
+ const DiagonalVectorType& diagonal() const { return m_diagonal; }
261
+
262
+ protected:
263
+ typename DiagonalVectorType::Nested m_diagonal;
264
+ };
265
+
266
+ /** \returns a pseudo-expression of a diagonal matrix with *this as vector of diagonal coefficients
267
+ *
268
+ * \only_for_vectors
269
+ *
270
+ * Example: \include MatrixBase_asDiagonal.cpp
271
+ * Output: \verbinclude MatrixBase_asDiagonal.out
272
+ *
273
+ * \sa class DiagonalWrapper, class DiagonalMatrix, diagonal(), isDiagonal()
274
+ **/
275
+ template<typename Derived>
276
+ inline const DiagonalWrapper<const Derived>
277
+ MatrixBase<Derived>::asDiagonal() const
278
+ {
279
+ return DiagonalWrapper<const Derived>(derived());
280
+ }
281
+
282
+ /** \returns true if *this is approximately equal to a diagonal matrix,
283
+ * within the precision given by \a prec.
284
+ *
285
+ * Example: \include MatrixBase_isDiagonal.cpp
286
+ * Output: \verbinclude MatrixBase_isDiagonal.out
287
+ *
288
+ * \sa asDiagonal()
289
+ */
290
+ template<typename Derived>
291
+ bool MatrixBase<Derived>::isDiagonal(const RealScalar& prec) const
292
+ {
293
+ if(cols() != rows()) return false;
294
+ RealScalar maxAbsOnDiagonal = static_cast<RealScalar>(-1);
295
+ for(Index j = 0; j < cols(); ++j)
296
+ {
297
+ RealScalar absOnDiagonal = numext::abs(coeff(j,j));
298
+ if(absOnDiagonal > maxAbsOnDiagonal) maxAbsOnDiagonal = absOnDiagonal;
299
+ }
300
+ for(Index j = 0; j < cols(); ++j)
301
+ for(Index i = 0; i < j; ++i)
302
+ {
303
+ if(!internal::isMuchSmallerThan(coeff(i, j), maxAbsOnDiagonal, prec)) return false;
304
+ if(!internal::isMuchSmallerThan(coeff(j, i), maxAbsOnDiagonal, prec)) return false;
305
+ }
306
+ return true;
307
+ }
308
+
309
+ namespace internal {
310
+
311
+ template<> struct storage_kind_to_shape<DiagonalShape> { typedef DiagonalShape Shape; };
312
+
313
+ struct Diagonal2Dense {};
314
+
315
+ template<> struct AssignmentKind<DenseShape,DiagonalShape> { typedef Diagonal2Dense Kind; };
316
+
317
+ // Diagonal matrix to Dense assignment
318
+ template< typename DstXprType, typename SrcXprType, typename Functor>
319
+ struct Assignment<DstXprType, SrcXprType, Functor, Diagonal2Dense>
320
+ {
321
+ static void run(DstXprType &dst, const SrcXprType &src, const internal::assign_op<typename DstXprType::Scalar,typename SrcXprType::Scalar> &/*func*/)
322
+ {
323
+ Index dstRows = src.rows();
324
+ Index dstCols = src.cols();
325
+ if((dst.rows()!=dstRows) || (dst.cols()!=dstCols))
326
+ dst.resize(dstRows, dstCols);
327
+
328
+ dst.setZero();
329
+ dst.diagonal() = src.diagonal();
330
+ }
331
+
332
+ static void run(DstXprType &dst, const SrcXprType &src, const internal::add_assign_op<typename DstXprType::Scalar,typename SrcXprType::Scalar> &/*func*/)
333
+ { dst.diagonal() += src.diagonal(); }
334
+
335
+ static void run(DstXprType &dst, const SrcXprType &src, const internal::sub_assign_op<typename DstXprType::Scalar,typename SrcXprType::Scalar> &/*func*/)
336
+ { dst.diagonal() -= src.diagonal(); }
337
+ };
338
+
339
+ } // namespace internal
340
+
341
+ } // end namespace Eigen
342
+
343
+ #endif // EIGEN_DIAGONALMATRIX_H