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,593 @@
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_GENERIC_PACKET_MATH_H
12
+ #define EIGEN_GENERIC_PACKET_MATH_H
13
+
14
+ namespace Eigen {
15
+
16
+ namespace internal {
17
+
18
+ /** \internal
19
+ * \file GenericPacketMath.h
20
+ *
21
+ * Default implementation for types not supported by the vectorization.
22
+ * In practice these functions are provided to make easier the writing
23
+ * of generic vectorized code.
24
+ */
25
+
26
+ #ifndef EIGEN_DEBUG_ALIGNED_LOAD
27
+ #define EIGEN_DEBUG_ALIGNED_LOAD
28
+ #endif
29
+
30
+ #ifndef EIGEN_DEBUG_UNALIGNED_LOAD
31
+ #define EIGEN_DEBUG_UNALIGNED_LOAD
32
+ #endif
33
+
34
+ #ifndef EIGEN_DEBUG_ALIGNED_STORE
35
+ #define EIGEN_DEBUG_ALIGNED_STORE
36
+ #endif
37
+
38
+ #ifndef EIGEN_DEBUG_UNALIGNED_STORE
39
+ #define EIGEN_DEBUG_UNALIGNED_STORE
40
+ #endif
41
+
42
+ struct default_packet_traits
43
+ {
44
+ enum {
45
+ HasHalfPacket = 0,
46
+
47
+ HasAdd = 1,
48
+ HasSub = 1,
49
+ HasMul = 1,
50
+ HasNegate = 1,
51
+ HasAbs = 1,
52
+ HasArg = 0,
53
+ HasAbs2 = 1,
54
+ HasMin = 1,
55
+ HasMax = 1,
56
+ HasConj = 1,
57
+ HasSetLinear = 1,
58
+ HasBlend = 0,
59
+
60
+ HasDiv = 0,
61
+ HasSqrt = 0,
62
+ HasRsqrt = 0,
63
+ HasExp = 0,
64
+ HasLog = 0,
65
+ HasLog1p = 0,
66
+ HasLog10 = 0,
67
+ HasPow = 0,
68
+
69
+ HasSin = 0,
70
+ HasCos = 0,
71
+ HasTan = 0,
72
+ HasASin = 0,
73
+ HasACos = 0,
74
+ HasATan = 0,
75
+ HasSinh = 0,
76
+ HasCosh = 0,
77
+ HasTanh = 0,
78
+ HasLGamma = 0,
79
+ HasDiGamma = 0,
80
+ HasZeta = 0,
81
+ HasPolygamma = 0,
82
+ HasErf = 0,
83
+ HasErfc = 0,
84
+ HasIGamma = 0,
85
+ HasIGammac = 0,
86
+ HasBetaInc = 0,
87
+
88
+ HasRound = 0,
89
+ HasFloor = 0,
90
+ HasCeil = 0,
91
+
92
+ HasSign = 0
93
+ };
94
+ };
95
+
96
+ template<typename T> struct packet_traits : default_packet_traits
97
+ {
98
+ typedef T type;
99
+ typedef T half;
100
+ enum {
101
+ Vectorizable = 0,
102
+ size = 1,
103
+ AlignedOnScalar = 0,
104
+ HasHalfPacket = 0
105
+ };
106
+ enum {
107
+ HasAdd = 0,
108
+ HasSub = 0,
109
+ HasMul = 0,
110
+ HasNegate = 0,
111
+ HasAbs = 0,
112
+ HasAbs2 = 0,
113
+ HasMin = 0,
114
+ HasMax = 0,
115
+ HasConj = 0,
116
+ HasSetLinear = 0
117
+ };
118
+ };
119
+
120
+ template<typename T> struct packet_traits<const T> : packet_traits<T> { };
121
+
122
+ template <typename Src, typename Tgt> struct type_casting_traits {
123
+ enum {
124
+ VectorizedCast = 0,
125
+ SrcCoeffRatio = 1,
126
+ TgtCoeffRatio = 1
127
+ };
128
+ };
129
+
130
+
131
+ /** \internal \returns static_cast<TgtType>(a) (coeff-wise) */
132
+ template <typename SrcPacket, typename TgtPacket>
133
+ EIGEN_DEVICE_FUNC inline TgtPacket
134
+ pcast(const SrcPacket& a) {
135
+ return static_cast<TgtPacket>(a);
136
+ }
137
+ template <typename SrcPacket, typename TgtPacket>
138
+ EIGEN_DEVICE_FUNC inline TgtPacket
139
+ pcast(const SrcPacket& a, const SrcPacket& /*b*/) {
140
+ return static_cast<TgtPacket>(a);
141
+ }
142
+
143
+ template <typename SrcPacket, typename TgtPacket>
144
+ EIGEN_DEVICE_FUNC inline TgtPacket
145
+ pcast(const SrcPacket& a, const SrcPacket& /*b*/, const SrcPacket& /*c*/, const SrcPacket& /*d*/) {
146
+ return static_cast<TgtPacket>(a);
147
+ }
148
+
149
+ /** \internal \returns a + b (coeff-wise) */
150
+ template<typename Packet> EIGEN_DEVICE_FUNC inline Packet
151
+ padd(const Packet& a,
152
+ const Packet& b) { return a+b; }
153
+
154
+ /** \internal \returns a - b (coeff-wise) */
155
+ template<typename Packet> EIGEN_DEVICE_FUNC inline Packet
156
+ psub(const Packet& a,
157
+ const Packet& b) { return a-b; }
158
+
159
+ /** \internal \returns -a (coeff-wise) */
160
+ template<typename Packet> EIGEN_DEVICE_FUNC inline Packet
161
+ pnegate(const Packet& a) { return -a; }
162
+
163
+ /** \internal \returns conj(a) (coeff-wise) */
164
+
165
+ template<typename Packet> EIGEN_DEVICE_FUNC inline Packet
166
+ pconj(const Packet& a) { return numext::conj(a); }
167
+
168
+ /** \internal \returns a * b (coeff-wise) */
169
+ template<typename Packet> EIGEN_DEVICE_FUNC inline Packet
170
+ pmul(const Packet& a,
171
+ const Packet& b) { return a*b; }
172
+
173
+ /** \internal \returns a / b (coeff-wise) */
174
+ template<typename Packet> EIGEN_DEVICE_FUNC inline Packet
175
+ pdiv(const Packet& a,
176
+ const Packet& b) { return a/b; }
177
+
178
+ /** \internal \returns the min of \a a and \a b (coeff-wise) */
179
+ template<typename Packet> EIGEN_DEVICE_FUNC inline Packet
180
+ pmin(const Packet& a,
181
+ const Packet& b) { return numext::mini(a, b); }
182
+
183
+ /** \internal \returns the max of \a a and \a b (coeff-wise) */
184
+ template<typename Packet> EIGEN_DEVICE_FUNC inline Packet
185
+ pmax(const Packet& a,
186
+ const Packet& b) { return numext::maxi(a, b); }
187
+
188
+ /** \internal \returns the absolute value of \a a */
189
+ template<typename Packet> EIGEN_DEVICE_FUNC inline Packet
190
+ pabs(const Packet& a) { using std::abs; return abs(a); }
191
+
192
+ /** \internal \returns the phase angle of \a a */
193
+ template<typename Packet> EIGEN_DEVICE_FUNC inline Packet
194
+ parg(const Packet& a) { using numext::arg; return arg(a); }
195
+
196
+ /** \internal \returns the bitwise and of \a a and \a b */
197
+ template<typename Packet> EIGEN_DEVICE_FUNC inline Packet
198
+ pand(const Packet& a, const Packet& b) { return a & b; }
199
+
200
+ /** \internal \returns the bitwise or of \a a and \a b */
201
+ template<typename Packet> EIGEN_DEVICE_FUNC inline Packet
202
+ por(const Packet& a, const Packet& b) { return a | b; }
203
+
204
+ /** \internal \returns the bitwise xor of \a a and \a b */
205
+ template<typename Packet> EIGEN_DEVICE_FUNC inline Packet
206
+ pxor(const Packet& a, const Packet& b) { return a ^ b; }
207
+
208
+ /** \internal \returns the bitwise andnot of \a a and \a b */
209
+ template<typename Packet> EIGEN_DEVICE_FUNC inline Packet
210
+ pandnot(const Packet& a, const Packet& b) { return a & (!b); }
211
+
212
+ /** \internal \returns a packet version of \a *from, from must be 16 bytes aligned */
213
+ template<typename Packet> EIGEN_DEVICE_FUNC inline Packet
214
+ pload(const typename unpacket_traits<Packet>::type* from) { return *from; }
215
+
216
+ /** \internal \returns a packet version of \a *from, (un-aligned load) */
217
+ template<typename Packet> EIGEN_DEVICE_FUNC inline Packet
218
+ ploadu(const typename unpacket_traits<Packet>::type* from) { return *from; }
219
+
220
+ /** \internal \returns a packet with constant coefficients \a a, e.g.: (a,a,a,a) */
221
+ template<typename Packet> EIGEN_DEVICE_FUNC inline Packet
222
+ pset1(const typename unpacket_traits<Packet>::type& a) { return a; }
223
+
224
+ /** \internal \returns a packet with constant coefficients \a a[0], e.g.: (a[0],a[0],a[0],a[0]) */
225
+ template<typename Packet> EIGEN_DEVICE_FUNC inline Packet
226
+ pload1(const typename unpacket_traits<Packet>::type *a) { return pset1<Packet>(*a); }
227
+
228
+ /** \internal \returns a packet with elements of \a *from duplicated.
229
+ * For instance, for a packet of 8 elements, 4 scalars will be read from \a *from and
230
+ * duplicated to form: {from[0],from[0],from[1],from[1],from[2],from[2],from[3],from[3]}
231
+ * Currently, this function is only used for scalar * complex products.
232
+ */
233
+ template<typename Packet> EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet
234
+ ploaddup(const typename unpacket_traits<Packet>::type* from) { return *from; }
235
+
236
+ /** \internal \returns a packet with elements of \a *from quadrupled.
237
+ * For instance, for a packet of 8 elements, 2 scalars will be read from \a *from and
238
+ * replicated to form: {from[0],from[0],from[0],from[0],from[1],from[1],from[1],from[1]}
239
+ * Currently, this function is only used in matrix products.
240
+ * For packet-size smaller or equal to 4, this function is equivalent to pload1
241
+ */
242
+ template<typename Packet> EIGEN_DEVICE_FUNC inline Packet
243
+ ploadquad(const typename unpacket_traits<Packet>::type* from)
244
+ { return pload1<Packet>(from); }
245
+
246
+ /** \internal equivalent to
247
+ * \code
248
+ * a0 = pload1(a+0);
249
+ * a1 = pload1(a+1);
250
+ * a2 = pload1(a+2);
251
+ * a3 = pload1(a+3);
252
+ * \endcode
253
+ * \sa pset1, pload1, ploaddup, pbroadcast2
254
+ */
255
+ template<typename Packet> EIGEN_DEVICE_FUNC
256
+ inline void pbroadcast4(const typename unpacket_traits<Packet>::type *a,
257
+ Packet& a0, Packet& a1, Packet& a2, Packet& a3)
258
+ {
259
+ a0 = pload1<Packet>(a+0);
260
+ a1 = pload1<Packet>(a+1);
261
+ a2 = pload1<Packet>(a+2);
262
+ a3 = pload1<Packet>(a+3);
263
+ }
264
+
265
+ /** \internal equivalent to
266
+ * \code
267
+ * a0 = pload1(a+0);
268
+ * a1 = pload1(a+1);
269
+ * \endcode
270
+ * \sa pset1, pload1, ploaddup, pbroadcast4
271
+ */
272
+ template<typename Packet> EIGEN_DEVICE_FUNC
273
+ inline void pbroadcast2(const typename unpacket_traits<Packet>::type *a,
274
+ Packet& a0, Packet& a1)
275
+ {
276
+ a0 = pload1<Packet>(a+0);
277
+ a1 = pload1<Packet>(a+1);
278
+ }
279
+
280
+ /** \internal \brief Returns a packet with coefficients (a,a+1,...,a+packet_size-1). */
281
+ template<typename Packet> EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet
282
+ plset(const typename unpacket_traits<Packet>::type& a) { return a; }
283
+
284
+ /** \internal copy the packet \a from to \a *to, \a to must be 16 bytes aligned */
285
+ template<typename Scalar, typename Packet> EIGEN_DEVICE_FUNC inline void pstore(Scalar* to, const Packet& from)
286
+ { (*to) = from; }
287
+
288
+ /** \internal copy the packet \a from to \a *to, (un-aligned store) */
289
+ template<typename Scalar, typename Packet> EIGEN_DEVICE_FUNC inline void pstoreu(Scalar* to, const Packet& from)
290
+ { (*to) = from; }
291
+
292
+ template<typename Scalar, typename Packet> EIGEN_DEVICE_FUNC inline Packet pgather(const Scalar* from, Index /*stride*/)
293
+ { return ploadu<Packet>(from); }
294
+
295
+ template<typename Scalar, typename Packet> EIGEN_DEVICE_FUNC inline void pscatter(Scalar* to, const Packet& from, Index /*stride*/)
296
+ { pstore(to, from); }
297
+
298
+ /** \internal tries to do cache prefetching of \a addr */
299
+ template<typename Scalar> EIGEN_DEVICE_FUNC inline void prefetch(const Scalar* addr)
300
+ {
301
+ #ifdef __CUDA_ARCH__
302
+ #if defined(__LP64__)
303
+ // 64-bit pointer operand constraint for inlined asm
304
+ asm(" prefetch.L1 [ %1 ];" : "=l"(addr) : "l"(addr));
305
+ #else
306
+ // 32-bit pointer operand constraint for inlined asm
307
+ asm(" prefetch.L1 [ %1 ];" : "=r"(addr) : "r"(addr));
308
+ #endif
309
+ #elif (!EIGEN_COMP_MSVC) && (EIGEN_COMP_GNUC || EIGEN_COMP_CLANG || EIGEN_COMP_ICC)
310
+ __builtin_prefetch(addr);
311
+ #endif
312
+ }
313
+
314
+ /** \internal \returns the first element of a packet */
315
+ template<typename Packet> EIGEN_DEVICE_FUNC inline typename unpacket_traits<Packet>::type pfirst(const Packet& a)
316
+ { return a; }
317
+
318
+ /** \internal \returns a packet where the element i contains the sum of the packet of \a vec[i] */
319
+ template<typename Packet> EIGEN_DEVICE_FUNC inline Packet
320
+ preduxp(const Packet* vecs) { return vecs[0]; }
321
+
322
+ /** \internal \returns the sum of the elements of \a a*/
323
+ template<typename Packet> EIGEN_DEVICE_FUNC inline typename unpacket_traits<Packet>::type predux(const Packet& a)
324
+ { return a; }
325
+
326
+ /** \internal \returns the sum of the elements of \a a by block of 4 elements.
327
+ * For a packet {a0, a1, a2, a3, a4, a5, a6, a7}, it returns a half packet {a0+a4, a1+a5, a2+a6, a3+a7}
328
+ * For packet-size smaller or equal to 4, this boils down to a noop.
329
+ */
330
+ template<typename Packet> EIGEN_DEVICE_FUNC inline
331
+ typename conditional<(unpacket_traits<Packet>::size%8)==0,typename unpacket_traits<Packet>::half,Packet>::type
332
+ predux_downto4(const Packet& a)
333
+ { return a; }
334
+
335
+ /** \internal \returns the product of the elements of \a a*/
336
+ template<typename Packet> EIGEN_DEVICE_FUNC inline typename unpacket_traits<Packet>::type predux_mul(const Packet& a)
337
+ { return a; }
338
+
339
+ /** \internal \returns the min of the elements of \a a*/
340
+ template<typename Packet> EIGEN_DEVICE_FUNC inline typename unpacket_traits<Packet>::type predux_min(const Packet& a)
341
+ { return a; }
342
+
343
+ /** \internal \returns the max of the elements of \a a*/
344
+ template<typename Packet> EIGEN_DEVICE_FUNC inline typename unpacket_traits<Packet>::type predux_max(const Packet& a)
345
+ { return a; }
346
+
347
+ /** \internal \returns the reversed elements of \a a*/
348
+ template<typename Packet> EIGEN_DEVICE_FUNC inline Packet preverse(const Packet& a)
349
+ { return a; }
350
+
351
+ /** \internal \returns \a a with real and imaginary part flipped (for complex type only) */
352
+ template<typename Packet> EIGEN_DEVICE_FUNC inline Packet pcplxflip(const Packet& a)
353
+ {
354
+ // FIXME: uncomment the following in case we drop the internal imag and real functions.
355
+ // using std::imag;
356
+ // using std::real;
357
+ return Packet(imag(a),real(a));
358
+ }
359
+
360
+ /**************************
361
+ * Special math functions
362
+ ***************************/
363
+
364
+ /** \internal \returns the sine of \a a (coeff-wise) */
365
+ template<typename Packet> EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS
366
+ Packet psin(const Packet& a) { using std::sin; return sin(a); }
367
+
368
+ /** \internal \returns the cosine of \a a (coeff-wise) */
369
+ template<typename Packet> EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS
370
+ Packet pcos(const Packet& a) { using std::cos; return cos(a); }
371
+
372
+ /** \internal \returns the tan of \a a (coeff-wise) */
373
+ template<typename Packet> EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS
374
+ Packet ptan(const Packet& a) { using std::tan; return tan(a); }
375
+
376
+ /** \internal \returns the arc sine of \a a (coeff-wise) */
377
+ template<typename Packet> EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS
378
+ Packet pasin(const Packet& a) { using std::asin; return asin(a); }
379
+
380
+ /** \internal \returns the arc cosine of \a a (coeff-wise) */
381
+ template<typename Packet> EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS
382
+ Packet pacos(const Packet& a) { using std::acos; return acos(a); }
383
+
384
+ /** \internal \returns the arc tangent of \a a (coeff-wise) */
385
+ template<typename Packet> EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS
386
+ Packet patan(const Packet& a) { using std::atan; return atan(a); }
387
+
388
+ /** \internal \returns the hyperbolic sine of \a a (coeff-wise) */
389
+ template<typename Packet> EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS
390
+ Packet psinh(const Packet& a) { using std::sinh; return sinh(a); }
391
+
392
+ /** \internal \returns the hyperbolic cosine of \a a (coeff-wise) */
393
+ template<typename Packet> EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS
394
+ Packet pcosh(const Packet& a) { using std::cosh; return cosh(a); }
395
+
396
+ /** \internal \returns the hyperbolic tan of \a a (coeff-wise) */
397
+ template<typename Packet> EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS
398
+ Packet ptanh(const Packet& a) { using std::tanh; return tanh(a); }
399
+
400
+ /** \internal \returns the exp of \a a (coeff-wise) */
401
+ template<typename Packet> EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS
402
+ Packet pexp(const Packet& a) { using std::exp; return exp(a); }
403
+
404
+ /** \internal \returns the log of \a a (coeff-wise) */
405
+ template<typename Packet> EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS
406
+ Packet plog(const Packet& a) { using std::log; return log(a); }
407
+
408
+ /** \internal \returns the log1p of \a a (coeff-wise) */
409
+ template<typename Packet> EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS
410
+ Packet plog1p(const Packet& a) { return numext::log1p(a); }
411
+
412
+ /** \internal \returns the log10 of \a a (coeff-wise) */
413
+ template<typename Packet> EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS
414
+ Packet plog10(const Packet& a) { using std::log10; return log10(a); }
415
+
416
+ /** \internal \returns the square-root of \a a (coeff-wise) */
417
+ template<typename Packet> EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS
418
+ Packet psqrt(const Packet& a) { using std::sqrt; return sqrt(a); }
419
+
420
+ /** \internal \returns the reciprocal square-root of \a a (coeff-wise) */
421
+ template<typename Packet> EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS
422
+ Packet prsqrt(const Packet& a) {
423
+ return pdiv(pset1<Packet>(1), psqrt(a));
424
+ }
425
+
426
+ /** \internal \returns the rounded value of \a a (coeff-wise) */
427
+ template<typename Packet> EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS
428
+ Packet pround(const Packet& a) { using numext::round; return round(a); }
429
+
430
+ /** \internal \returns the floor of \a a (coeff-wise) */
431
+ template<typename Packet> EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS
432
+ Packet pfloor(const Packet& a) { using numext::floor; return floor(a); }
433
+
434
+ /** \internal \returns the ceil of \a a (coeff-wise) */
435
+ template<typename Packet> EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS
436
+ Packet pceil(const Packet& a) { using numext::ceil; return ceil(a); }
437
+
438
+ /***************************************************************************
439
+ * The following functions might not have to be overwritten for vectorized types
440
+ ***************************************************************************/
441
+
442
+ /** \internal copy a packet with constant coeficient \a a (e.g., [a,a,a,a]) to \a *to. \a to must be 16 bytes aligned */
443
+ // NOTE: this function must really be templated on the packet type (think about different packet types for the same scalar type)
444
+ template<typename Packet>
445
+ inline void pstore1(typename unpacket_traits<Packet>::type* to, const typename unpacket_traits<Packet>::type& a)
446
+ {
447
+ pstore(to, pset1<Packet>(a));
448
+ }
449
+
450
+ /** \internal \returns a * b + c (coeff-wise) */
451
+ template<typename Packet> EIGEN_DEVICE_FUNC inline Packet
452
+ pmadd(const Packet& a,
453
+ const Packet& b,
454
+ const Packet& c)
455
+ { return padd(pmul(a, b),c); }
456
+
457
+ /** \internal \returns a packet version of \a *from.
458
+ * The pointer \a from must be aligned on a \a Alignment bytes boundary. */
459
+ template<typename Packet, int Alignment>
460
+ EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE Packet ploadt(const typename unpacket_traits<Packet>::type* from)
461
+ {
462
+ if(Alignment >= unpacket_traits<Packet>::alignment)
463
+ return pload<Packet>(from);
464
+ else
465
+ return ploadu<Packet>(from);
466
+ }
467
+
468
+ /** \internal copy the packet \a from to \a *to.
469
+ * The pointer \a from must be aligned on a \a Alignment bytes boundary. */
470
+ template<typename Scalar, typename Packet, int Alignment>
471
+ EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE void pstoret(Scalar* to, const Packet& from)
472
+ {
473
+ if(Alignment >= unpacket_traits<Packet>::alignment)
474
+ pstore(to, from);
475
+ else
476
+ pstoreu(to, from);
477
+ }
478
+
479
+ /** \internal \returns a packet version of \a *from.
480
+ * Unlike ploadt, ploadt_ro takes advantage of the read-only memory path on the
481
+ * hardware if available to speedup the loading of data that won't be modified
482
+ * by the current computation.
483
+ */
484
+ template<typename Packet, int LoadMode>
485
+ EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE Packet ploadt_ro(const typename unpacket_traits<Packet>::type* from)
486
+ {
487
+ return ploadt<Packet, LoadMode>(from);
488
+ }
489
+
490
+ /** \internal default implementation of palign() allowing partial specialization */
491
+ template<int Offset,typename PacketType>
492
+ struct palign_impl
493
+ {
494
+ // by default data are aligned, so there is nothing to be done :)
495
+ static inline void run(PacketType&, const PacketType&) {}
496
+ };
497
+
498
+ /** \internal update \a first using the concatenation of the packet_size minus \a Offset last elements
499
+ * of \a first and \a Offset first elements of \a second.
500
+ *
501
+ * This function is currently only used to optimize matrix-vector products on unligned matrices.
502
+ * It takes 2 packets that represent a contiguous memory array, and returns a packet starting
503
+ * at the position \a Offset. For instance, for packets of 4 elements, we have:
504
+ * Input:
505
+ * - first = {f0,f1,f2,f3}
506
+ * - second = {s0,s1,s2,s3}
507
+ * Output:
508
+ * - if Offset==0 then {f0,f1,f2,f3}
509
+ * - if Offset==1 then {f1,f2,f3,s0}
510
+ * - if Offset==2 then {f2,f3,s0,s1}
511
+ * - if Offset==3 then {f3,s0,s1,s3}
512
+ */
513
+ template<int Offset,typename PacketType>
514
+ inline void palign(PacketType& first, const PacketType& second)
515
+ {
516
+ palign_impl<Offset,PacketType>::run(first,second);
517
+ }
518
+
519
+ /***************************************************************************
520
+ * Fast complex products (GCC generates a function call which is very slow)
521
+ ***************************************************************************/
522
+
523
+ // Eigen+CUDA does not support complexes.
524
+ #ifndef __CUDACC__
525
+
526
+ template<> inline std::complex<float> pmul(const std::complex<float>& a, const std::complex<float>& b)
527
+ { return std::complex<float>(real(a)*real(b) - imag(a)*imag(b), imag(a)*real(b) + real(a)*imag(b)); }
528
+
529
+ template<> inline std::complex<double> pmul(const std::complex<double>& a, const std::complex<double>& b)
530
+ { return std::complex<double>(real(a)*real(b) - imag(a)*imag(b), imag(a)*real(b) + real(a)*imag(b)); }
531
+
532
+ #endif
533
+
534
+
535
+ /***************************************************************************
536
+ * PacketBlock, that is a collection of N packets where the number of words
537
+ * in the packet is a multiple of N.
538
+ ***************************************************************************/
539
+ template <typename Packet,int N=unpacket_traits<Packet>::size> struct PacketBlock {
540
+ Packet packet[N];
541
+ };
542
+
543
+ template<typename Packet> EIGEN_DEVICE_FUNC inline void
544
+ ptranspose(PacketBlock<Packet,1>& /*kernel*/) {
545
+ // Nothing to do in the scalar case, i.e. a 1x1 matrix.
546
+ }
547
+
548
+ /***************************************************************************
549
+ * Selector, i.e. vector of N boolean values used to select (i.e. blend)
550
+ * words from 2 packets.
551
+ ***************************************************************************/
552
+ template <size_t N> struct Selector {
553
+ bool select[N];
554
+ };
555
+
556
+ template<typename Packet> EIGEN_DEVICE_FUNC inline Packet
557
+ pblend(const Selector<unpacket_traits<Packet>::size>& ifPacket, const Packet& thenPacket, const Packet& elsePacket) {
558
+ return ifPacket.select[0] ? thenPacket : elsePacket;
559
+ }
560
+
561
+ /** \internal \returns \a a with the first coefficient replaced by the scalar b */
562
+ template<typename Packet> EIGEN_DEVICE_FUNC inline Packet
563
+ pinsertfirst(const Packet& a, typename unpacket_traits<Packet>::type b)
564
+ {
565
+ // Default implementation based on pblend.
566
+ // It must be specialized for higher performance.
567
+ Selector<unpacket_traits<Packet>::size> mask;
568
+ mask.select[0] = true;
569
+ // This for loop should be optimized away by the compiler.
570
+ for(Index i=1; i<unpacket_traits<Packet>::size; ++i)
571
+ mask.select[i] = false;
572
+ return pblend(mask, pset1<Packet>(b), a);
573
+ }
574
+
575
+ /** \internal \returns \a a with the last coefficient replaced by the scalar b */
576
+ template<typename Packet> EIGEN_DEVICE_FUNC inline Packet
577
+ pinsertlast(const Packet& a, typename unpacket_traits<Packet>::type b)
578
+ {
579
+ // Default implementation based on pblend.
580
+ // It must be specialized for higher performance.
581
+ Selector<unpacket_traits<Packet>::size> mask;
582
+ // This for loop should be optimized away by the compiler.
583
+ for(Index i=0; i<unpacket_traits<Packet>::size-1; ++i)
584
+ mask.select[i] = false;
585
+ mask.select[unpacket_traits<Packet>::size-1] = true;
586
+ return pblend(mask, pset1<Packet>(b), a);
587
+ }
588
+
589
+ } // end namespace internal
590
+
591
+ } // end namespace Eigen
592
+
593
+ #endif // EIGEN_GENERIC_PACKET_MATH_H