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,96 @@
1
+ // This file is part of Eigen, a lightweight C++ template library
2
+ // for linear algebra.
3
+ //
4
+ // Copyright (C) 2008-2010 Gael Guennebaud <gael.guennebaud@inria.fr>
5
+ // 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_VECTORBLOCK_H
12
+ #define EIGEN_VECTORBLOCK_H
13
+
14
+ namespace Eigen {
15
+
16
+ namespace internal {
17
+ template<typename VectorType, int Size>
18
+ struct traits<VectorBlock<VectorType, Size> >
19
+ : public traits<Block<VectorType,
20
+ traits<VectorType>::Flags & RowMajorBit ? 1 : Size,
21
+ traits<VectorType>::Flags & RowMajorBit ? Size : 1> >
22
+ {
23
+ };
24
+ }
25
+
26
+ /** \class VectorBlock
27
+ * \ingroup Core_Module
28
+ *
29
+ * \brief Expression of a fixed-size or dynamic-size sub-vector
30
+ *
31
+ * \tparam VectorType the type of the object in which we are taking a sub-vector
32
+ * \tparam Size size of the sub-vector we are taking at compile time (optional)
33
+ *
34
+ * This class represents an expression of either a fixed-size or dynamic-size sub-vector.
35
+ * It is the return type of DenseBase::segment(Index,Index) and DenseBase::segment<int>(Index) and
36
+ * most of the time this is the only way it is used.
37
+ *
38
+ * However, if you want to directly maniputate sub-vector expressions,
39
+ * for instance if you want to write a function returning such an expression, you
40
+ * will need to use this class.
41
+ *
42
+ * Here is an example illustrating the dynamic case:
43
+ * \include class_VectorBlock.cpp
44
+ * Output: \verbinclude class_VectorBlock.out
45
+ *
46
+ * \note Even though this expression has dynamic size, in the case where \a VectorType
47
+ * has fixed size, this expression inherits a fixed maximal size which means that evaluating
48
+ * it does not cause a dynamic memory allocation.
49
+ *
50
+ * Here is an example illustrating the fixed-size case:
51
+ * \include class_FixedVectorBlock.cpp
52
+ * Output: \verbinclude class_FixedVectorBlock.out
53
+ *
54
+ * \sa class Block, DenseBase::segment(Index,Index,Index,Index), DenseBase::segment(Index,Index)
55
+ */
56
+ template<typename VectorType, int Size> class VectorBlock
57
+ : public Block<VectorType,
58
+ internal::traits<VectorType>::Flags & RowMajorBit ? 1 : Size,
59
+ internal::traits<VectorType>::Flags & RowMajorBit ? Size : 1>
60
+ {
61
+ typedef Block<VectorType,
62
+ internal::traits<VectorType>::Flags & RowMajorBit ? 1 : Size,
63
+ internal::traits<VectorType>::Flags & RowMajorBit ? Size : 1> Base;
64
+ enum {
65
+ IsColVector = !(internal::traits<VectorType>::Flags & RowMajorBit)
66
+ };
67
+ public:
68
+ EIGEN_DENSE_PUBLIC_INTERFACE(VectorBlock)
69
+
70
+ using Base::operator=;
71
+
72
+ /** Dynamic-size constructor
73
+ */
74
+ EIGEN_DEVICE_FUNC
75
+ inline VectorBlock(VectorType& vector, Index start, Index size)
76
+ : Base(vector,
77
+ IsColVector ? start : 0, IsColVector ? 0 : start,
78
+ IsColVector ? size : 1, IsColVector ? 1 : size)
79
+ {
80
+ EIGEN_STATIC_ASSERT_VECTOR_ONLY(VectorBlock);
81
+ }
82
+
83
+ /** Fixed-size constructor
84
+ */
85
+ EIGEN_DEVICE_FUNC
86
+ inline VectorBlock(VectorType& vector, Index start)
87
+ : Base(vector, IsColVector ? start : 0, IsColVector ? 0 : start)
88
+ {
89
+ EIGEN_STATIC_ASSERT_VECTOR_ONLY(VectorBlock);
90
+ }
91
+ };
92
+
93
+
94
+ } // end namespace Eigen
95
+
96
+ #endif // EIGEN_VECTORBLOCK_H
@@ -0,0 +1,695 @@
1
+ // This file is part of Eigen, a lightweight C++ template library
2
+ // for linear algebra.
3
+ //
4
+ // Copyright (C) 2008-2010 Gael Guennebaud <gael.guennebaud@inria.fr>
5
+ // 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_PARTIAL_REDUX_H
12
+ #define EIGEN_PARTIAL_REDUX_H
13
+
14
+ namespace Eigen {
15
+
16
+ /** \class PartialReduxExpr
17
+ * \ingroup Core_Module
18
+ *
19
+ * \brief Generic expression of a partially reduxed matrix
20
+ *
21
+ * \tparam MatrixType the type of the matrix we are applying the redux operation
22
+ * \tparam MemberOp type of the member functor
23
+ * \tparam Direction indicates the direction of the redux (#Vertical or #Horizontal)
24
+ *
25
+ * This class represents an expression of a partial redux operator of a matrix.
26
+ * It is the return type of some VectorwiseOp functions,
27
+ * and most of the time this is the only way it is used.
28
+ *
29
+ * \sa class VectorwiseOp
30
+ */
31
+
32
+ template< typename MatrixType, typename MemberOp, int Direction>
33
+ class PartialReduxExpr;
34
+
35
+ namespace internal {
36
+ template<typename MatrixType, typename MemberOp, int Direction>
37
+ struct traits<PartialReduxExpr<MatrixType, MemberOp, Direction> >
38
+ : traits<MatrixType>
39
+ {
40
+ typedef typename MemberOp::result_type Scalar;
41
+ typedef typename traits<MatrixType>::StorageKind StorageKind;
42
+ typedef typename traits<MatrixType>::XprKind XprKind;
43
+ typedef typename MatrixType::Scalar InputScalar;
44
+ enum {
45
+ RowsAtCompileTime = Direction==Vertical ? 1 : MatrixType::RowsAtCompileTime,
46
+ ColsAtCompileTime = Direction==Horizontal ? 1 : MatrixType::ColsAtCompileTime,
47
+ MaxRowsAtCompileTime = Direction==Vertical ? 1 : MatrixType::MaxRowsAtCompileTime,
48
+ MaxColsAtCompileTime = Direction==Horizontal ? 1 : MatrixType::MaxColsAtCompileTime,
49
+ Flags = RowsAtCompileTime == 1 ? RowMajorBit : 0,
50
+ TraversalSize = Direction==Vertical ? MatrixType::RowsAtCompileTime : MatrixType::ColsAtCompileTime
51
+ };
52
+ };
53
+ }
54
+
55
+ template< typename MatrixType, typename MemberOp, int Direction>
56
+ class PartialReduxExpr : public internal::dense_xpr_base< PartialReduxExpr<MatrixType, MemberOp, Direction> >::type,
57
+ internal::no_assignment_operator
58
+ {
59
+ public:
60
+
61
+ typedef typename internal::dense_xpr_base<PartialReduxExpr>::type Base;
62
+ EIGEN_DENSE_PUBLIC_INTERFACE(PartialReduxExpr)
63
+
64
+ EIGEN_DEVICE_FUNC
65
+ explicit PartialReduxExpr(const MatrixType& mat, const MemberOp& func = MemberOp())
66
+ : m_matrix(mat), m_functor(func) {}
67
+
68
+ EIGEN_DEVICE_FUNC
69
+ Index rows() const { return (Direction==Vertical ? 1 : m_matrix.rows()); }
70
+ EIGEN_DEVICE_FUNC
71
+ Index cols() const { return (Direction==Horizontal ? 1 : m_matrix.cols()); }
72
+
73
+ EIGEN_DEVICE_FUNC
74
+ typename MatrixType::Nested nestedExpression() const { return m_matrix; }
75
+
76
+ EIGEN_DEVICE_FUNC
77
+ const MemberOp& functor() const { return m_functor; }
78
+
79
+ protected:
80
+ typename MatrixType::Nested m_matrix;
81
+ const MemberOp m_functor;
82
+ };
83
+
84
+ #define EIGEN_MEMBER_FUNCTOR(MEMBER,COST) \
85
+ template <typename ResultType> \
86
+ struct member_##MEMBER { \
87
+ EIGEN_EMPTY_STRUCT_CTOR(member_##MEMBER) \
88
+ typedef ResultType result_type; \
89
+ template<typename Scalar, int Size> struct Cost \
90
+ { enum { value = COST }; }; \
91
+ template<typename XprType> \
92
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE \
93
+ ResultType operator()(const XprType& mat) const \
94
+ { return mat.MEMBER(); } \
95
+ }
96
+
97
+ namespace internal {
98
+
99
+ EIGEN_MEMBER_FUNCTOR(squaredNorm, Size * NumTraits<Scalar>::MulCost + (Size-1)*NumTraits<Scalar>::AddCost);
100
+ EIGEN_MEMBER_FUNCTOR(norm, (Size+5) * NumTraits<Scalar>::MulCost + (Size-1)*NumTraits<Scalar>::AddCost);
101
+ EIGEN_MEMBER_FUNCTOR(stableNorm, (Size+5) * NumTraits<Scalar>::MulCost + (Size-1)*NumTraits<Scalar>::AddCost);
102
+ EIGEN_MEMBER_FUNCTOR(blueNorm, (Size+5) * NumTraits<Scalar>::MulCost + (Size-1)*NumTraits<Scalar>::AddCost);
103
+ EIGEN_MEMBER_FUNCTOR(hypotNorm, (Size-1) * functor_traits<scalar_hypot_op<Scalar> >::Cost );
104
+ EIGEN_MEMBER_FUNCTOR(sum, (Size-1)*NumTraits<Scalar>::AddCost);
105
+ EIGEN_MEMBER_FUNCTOR(mean, (Size-1)*NumTraits<Scalar>::AddCost + NumTraits<Scalar>::MulCost);
106
+ EIGEN_MEMBER_FUNCTOR(minCoeff, (Size-1)*NumTraits<Scalar>::AddCost);
107
+ EIGEN_MEMBER_FUNCTOR(maxCoeff, (Size-1)*NumTraits<Scalar>::AddCost);
108
+ EIGEN_MEMBER_FUNCTOR(all, (Size-1)*NumTraits<Scalar>::AddCost);
109
+ EIGEN_MEMBER_FUNCTOR(any, (Size-1)*NumTraits<Scalar>::AddCost);
110
+ EIGEN_MEMBER_FUNCTOR(count, (Size-1)*NumTraits<Scalar>::AddCost);
111
+ EIGEN_MEMBER_FUNCTOR(prod, (Size-1)*NumTraits<Scalar>::MulCost);
112
+
113
+ template <int p, typename ResultType>
114
+ struct member_lpnorm {
115
+ typedef ResultType result_type;
116
+ template<typename Scalar, int Size> struct Cost
117
+ { enum { value = (Size+5) * NumTraits<Scalar>::MulCost + (Size-1)*NumTraits<Scalar>::AddCost }; };
118
+ EIGEN_DEVICE_FUNC member_lpnorm() {}
119
+ template<typename XprType>
120
+ EIGEN_DEVICE_FUNC inline ResultType operator()(const XprType& mat) const
121
+ { return mat.template lpNorm<p>(); }
122
+ };
123
+
124
+ template <typename BinaryOp, typename Scalar>
125
+ struct member_redux {
126
+ typedef typename result_of<
127
+ BinaryOp(const Scalar&,const Scalar&)
128
+ >::type result_type;
129
+ template<typename _Scalar, int Size> struct Cost
130
+ { enum { value = (Size-1) * functor_traits<BinaryOp>::Cost }; };
131
+ EIGEN_DEVICE_FUNC explicit member_redux(const BinaryOp func) : m_functor(func) {}
132
+ template<typename Derived>
133
+ EIGEN_DEVICE_FUNC inline result_type operator()(const DenseBase<Derived>& mat) const
134
+ { return mat.redux(m_functor); }
135
+ const BinaryOp m_functor;
136
+ };
137
+ }
138
+
139
+ /** \class VectorwiseOp
140
+ * \ingroup Core_Module
141
+ *
142
+ * \brief Pseudo expression providing partial reduction operations
143
+ *
144
+ * \tparam ExpressionType the type of the object on which to do partial reductions
145
+ * \tparam Direction indicates the direction of the redux (#Vertical or #Horizontal)
146
+ *
147
+ * This class represents a pseudo expression with partial reduction features.
148
+ * It is the return type of DenseBase::colwise() and DenseBase::rowwise()
149
+ * and most of the time this is the only way it is used.
150
+ *
151
+ * Example: \include MatrixBase_colwise.cpp
152
+ * Output: \verbinclude MatrixBase_colwise.out
153
+ *
154
+ * \sa DenseBase::colwise(), DenseBase::rowwise(), class PartialReduxExpr
155
+ */
156
+ template<typename ExpressionType, int Direction> class VectorwiseOp
157
+ {
158
+ public:
159
+
160
+ typedef typename ExpressionType::Scalar Scalar;
161
+ typedef typename ExpressionType::RealScalar RealScalar;
162
+ typedef Eigen::Index Index; ///< \deprecated since Eigen 3.3
163
+ typedef typename internal::ref_selector<ExpressionType>::non_const_type ExpressionTypeNested;
164
+ typedef typename internal::remove_all<ExpressionTypeNested>::type ExpressionTypeNestedCleaned;
165
+
166
+ template<template<typename _Scalar> class Functor,
167
+ typename Scalar_=Scalar> struct ReturnType
168
+ {
169
+ typedef PartialReduxExpr<ExpressionType,
170
+ Functor<Scalar_>,
171
+ Direction
172
+ > Type;
173
+ };
174
+
175
+ template<typename BinaryOp> struct ReduxReturnType
176
+ {
177
+ typedef PartialReduxExpr<ExpressionType,
178
+ internal::member_redux<BinaryOp,Scalar>,
179
+ Direction
180
+ > Type;
181
+ };
182
+
183
+ enum {
184
+ isVertical = (Direction==Vertical) ? 1 : 0,
185
+ isHorizontal = (Direction==Horizontal) ? 1 : 0
186
+ };
187
+
188
+ protected:
189
+
190
+ typedef typename internal::conditional<isVertical,
191
+ typename ExpressionType::ColXpr,
192
+ typename ExpressionType::RowXpr>::type SubVector;
193
+ /** \internal
194
+ * \returns the i-th subvector according to the \c Direction */
195
+ EIGEN_DEVICE_FUNC
196
+ SubVector subVector(Index i)
197
+ {
198
+ return SubVector(m_matrix.derived(),i);
199
+ }
200
+
201
+ /** \internal
202
+ * \returns the number of subvectors in the direction \c Direction */
203
+ EIGEN_DEVICE_FUNC
204
+ Index subVectors() const
205
+ { return isVertical?m_matrix.cols():m_matrix.rows(); }
206
+
207
+ template<typename OtherDerived> struct ExtendedType {
208
+ typedef Replicate<OtherDerived,
209
+ isVertical ? 1 : ExpressionType::RowsAtCompileTime,
210
+ isHorizontal ? 1 : ExpressionType::ColsAtCompileTime> Type;
211
+ };
212
+
213
+ /** \internal
214
+ * Replicates a vector to match the size of \c *this */
215
+ template<typename OtherDerived>
216
+ EIGEN_DEVICE_FUNC
217
+ typename ExtendedType<OtherDerived>::Type
218
+ extendedTo(const DenseBase<OtherDerived>& other) const
219
+ {
220
+ EIGEN_STATIC_ASSERT(EIGEN_IMPLIES(isVertical, OtherDerived::MaxColsAtCompileTime==1),
221
+ YOU_PASSED_A_ROW_VECTOR_BUT_A_COLUMN_VECTOR_WAS_EXPECTED)
222
+ EIGEN_STATIC_ASSERT(EIGEN_IMPLIES(isHorizontal, OtherDerived::MaxRowsAtCompileTime==1),
223
+ YOU_PASSED_A_COLUMN_VECTOR_BUT_A_ROW_VECTOR_WAS_EXPECTED)
224
+ return typename ExtendedType<OtherDerived>::Type
225
+ (other.derived(),
226
+ isVertical ? 1 : m_matrix.rows(),
227
+ isHorizontal ? 1 : m_matrix.cols());
228
+ }
229
+
230
+ template<typename OtherDerived> struct OppositeExtendedType {
231
+ typedef Replicate<OtherDerived,
232
+ isHorizontal ? 1 : ExpressionType::RowsAtCompileTime,
233
+ isVertical ? 1 : ExpressionType::ColsAtCompileTime> Type;
234
+ };
235
+
236
+ /** \internal
237
+ * Replicates a vector in the opposite direction to match the size of \c *this */
238
+ template<typename OtherDerived>
239
+ EIGEN_DEVICE_FUNC
240
+ typename OppositeExtendedType<OtherDerived>::Type
241
+ extendedToOpposite(const DenseBase<OtherDerived>& other) const
242
+ {
243
+ EIGEN_STATIC_ASSERT(EIGEN_IMPLIES(isHorizontal, OtherDerived::MaxColsAtCompileTime==1),
244
+ YOU_PASSED_A_ROW_VECTOR_BUT_A_COLUMN_VECTOR_WAS_EXPECTED)
245
+ EIGEN_STATIC_ASSERT(EIGEN_IMPLIES(isVertical, OtherDerived::MaxRowsAtCompileTime==1),
246
+ YOU_PASSED_A_COLUMN_VECTOR_BUT_A_ROW_VECTOR_WAS_EXPECTED)
247
+ return typename OppositeExtendedType<OtherDerived>::Type
248
+ (other.derived(),
249
+ isHorizontal ? 1 : m_matrix.rows(),
250
+ isVertical ? 1 : m_matrix.cols());
251
+ }
252
+
253
+ public:
254
+ EIGEN_DEVICE_FUNC
255
+ explicit inline VectorwiseOp(ExpressionType& matrix) : m_matrix(matrix) {}
256
+
257
+ /** \internal */
258
+ EIGEN_DEVICE_FUNC
259
+ inline const ExpressionType& _expression() const { return m_matrix; }
260
+
261
+ /** \returns a row or column vector expression of \c *this reduxed by \a func
262
+ *
263
+ * The template parameter \a BinaryOp is the type of the functor
264
+ * of the custom redux operator. Note that func must be an associative operator.
265
+ *
266
+ * \sa class VectorwiseOp, DenseBase::colwise(), DenseBase::rowwise()
267
+ */
268
+ template<typename BinaryOp>
269
+ EIGEN_DEVICE_FUNC
270
+ const typename ReduxReturnType<BinaryOp>::Type
271
+ redux(const BinaryOp& func = BinaryOp()) const
272
+ { return typename ReduxReturnType<BinaryOp>::Type(_expression(), internal::member_redux<BinaryOp,Scalar>(func)); }
273
+
274
+ typedef typename ReturnType<internal::member_minCoeff>::Type MinCoeffReturnType;
275
+ typedef typename ReturnType<internal::member_maxCoeff>::Type MaxCoeffReturnType;
276
+ typedef typename ReturnType<internal::member_squaredNorm,RealScalar>::Type SquaredNormReturnType;
277
+ typedef typename ReturnType<internal::member_norm,RealScalar>::Type NormReturnType;
278
+ typedef typename ReturnType<internal::member_blueNorm,RealScalar>::Type BlueNormReturnType;
279
+ typedef typename ReturnType<internal::member_stableNorm,RealScalar>::Type StableNormReturnType;
280
+ typedef typename ReturnType<internal::member_hypotNorm,RealScalar>::Type HypotNormReturnType;
281
+ typedef typename ReturnType<internal::member_sum>::Type SumReturnType;
282
+ typedef typename ReturnType<internal::member_mean>::Type MeanReturnType;
283
+ typedef typename ReturnType<internal::member_all>::Type AllReturnType;
284
+ typedef typename ReturnType<internal::member_any>::Type AnyReturnType;
285
+ typedef PartialReduxExpr<ExpressionType, internal::member_count<Index>, Direction> CountReturnType;
286
+ typedef typename ReturnType<internal::member_prod>::Type ProdReturnType;
287
+ typedef Reverse<const ExpressionType, Direction> ConstReverseReturnType;
288
+ typedef Reverse<ExpressionType, Direction> ReverseReturnType;
289
+
290
+ template<int p> struct LpNormReturnType {
291
+ typedef PartialReduxExpr<ExpressionType, internal::member_lpnorm<p,RealScalar>,Direction> Type;
292
+ };
293
+
294
+ /** \returns a row (or column) vector expression of the smallest coefficient
295
+ * of each column (or row) of the referenced expression.
296
+ *
297
+ * \warning the result is undefined if \c *this contains NaN.
298
+ *
299
+ * Example: \include PartialRedux_minCoeff.cpp
300
+ * Output: \verbinclude PartialRedux_minCoeff.out
301
+ *
302
+ * \sa DenseBase::minCoeff() */
303
+ EIGEN_DEVICE_FUNC
304
+ const MinCoeffReturnType minCoeff() const
305
+ { return MinCoeffReturnType(_expression()); }
306
+
307
+ /** \returns a row (or column) vector expression of the largest coefficient
308
+ * of each column (or row) of the referenced expression.
309
+ *
310
+ * \warning the result is undefined if \c *this contains NaN.
311
+ *
312
+ * Example: \include PartialRedux_maxCoeff.cpp
313
+ * Output: \verbinclude PartialRedux_maxCoeff.out
314
+ *
315
+ * \sa DenseBase::maxCoeff() */
316
+ EIGEN_DEVICE_FUNC
317
+ const MaxCoeffReturnType maxCoeff() const
318
+ { return MaxCoeffReturnType(_expression()); }
319
+
320
+ /** \returns a row (or column) vector expression of the squared norm
321
+ * of each column (or row) of the referenced expression.
322
+ * This is a vector with real entries, even if the original matrix has complex entries.
323
+ *
324
+ * Example: \include PartialRedux_squaredNorm.cpp
325
+ * Output: \verbinclude PartialRedux_squaredNorm.out
326
+ *
327
+ * \sa DenseBase::squaredNorm() */
328
+ EIGEN_DEVICE_FUNC
329
+ const SquaredNormReturnType squaredNorm() const
330
+ { return SquaredNormReturnType(_expression()); }
331
+
332
+ /** \returns a row (or column) vector expression of the norm
333
+ * of each column (or row) of the referenced expression.
334
+ * This is a vector with real entries, even if the original matrix has complex entries.
335
+ *
336
+ * Example: \include PartialRedux_norm.cpp
337
+ * Output: \verbinclude PartialRedux_norm.out
338
+ *
339
+ * \sa DenseBase::norm() */
340
+ EIGEN_DEVICE_FUNC
341
+ const NormReturnType norm() const
342
+ { return NormReturnType(_expression()); }
343
+
344
+ /** \returns a row (or column) vector expression of the norm
345
+ * of each column (or row) of the referenced expression.
346
+ * This is a vector with real entries, even if the original matrix has complex entries.
347
+ *
348
+ * Example: \include PartialRedux_norm.cpp
349
+ * Output: \verbinclude PartialRedux_norm.out
350
+ *
351
+ * \sa DenseBase::norm() */
352
+ template<int p>
353
+ EIGEN_DEVICE_FUNC
354
+ const typename LpNormReturnType<p>::Type lpNorm() const
355
+ { return typename LpNormReturnType<p>::Type(_expression()); }
356
+
357
+
358
+ /** \returns a row (or column) vector expression of the norm
359
+ * of each column (or row) of the referenced expression, using
360
+ * Blue's algorithm.
361
+ * This is a vector with real entries, even if the original matrix has complex entries.
362
+ *
363
+ * \sa DenseBase::blueNorm() */
364
+ EIGEN_DEVICE_FUNC
365
+ const BlueNormReturnType blueNorm() const
366
+ { return BlueNormReturnType(_expression()); }
367
+
368
+
369
+ /** \returns a row (or column) vector expression of the norm
370
+ * of each column (or row) of the referenced expression, avoiding
371
+ * underflow and overflow.
372
+ * This is a vector with real entries, even if the original matrix has complex entries.
373
+ *
374
+ * \sa DenseBase::stableNorm() */
375
+ EIGEN_DEVICE_FUNC
376
+ const StableNormReturnType stableNorm() const
377
+ { return StableNormReturnType(_expression()); }
378
+
379
+
380
+ /** \returns a row (or column) vector expression of the norm
381
+ * of each column (or row) of the referenced expression, avoiding
382
+ * underflow and overflow using a concatenation of hypot() calls.
383
+ * This is a vector with real entries, even if the original matrix has complex entries.
384
+ *
385
+ * \sa DenseBase::hypotNorm() */
386
+ EIGEN_DEVICE_FUNC
387
+ const HypotNormReturnType hypotNorm() const
388
+ { return HypotNormReturnType(_expression()); }
389
+
390
+ /** \returns a row (or column) vector expression of the sum
391
+ * of each column (or row) of the referenced expression.
392
+ *
393
+ * Example: \include PartialRedux_sum.cpp
394
+ * Output: \verbinclude PartialRedux_sum.out
395
+ *
396
+ * \sa DenseBase::sum() */
397
+ EIGEN_DEVICE_FUNC
398
+ const SumReturnType sum() const
399
+ { return SumReturnType(_expression()); }
400
+
401
+ /** \returns a row (or column) vector expression of the mean
402
+ * of each column (or row) of the referenced expression.
403
+ *
404
+ * \sa DenseBase::mean() */
405
+ EIGEN_DEVICE_FUNC
406
+ const MeanReturnType mean() const
407
+ { return MeanReturnType(_expression()); }
408
+
409
+ /** \returns a row (or column) vector expression representing
410
+ * whether \b all coefficients of each respective column (or row) are \c true.
411
+ * This expression can be assigned to a vector with entries of type \c bool.
412
+ *
413
+ * \sa DenseBase::all() */
414
+ EIGEN_DEVICE_FUNC
415
+ const AllReturnType all() const
416
+ { return AllReturnType(_expression()); }
417
+
418
+ /** \returns a row (or column) vector expression representing
419
+ * whether \b at \b least one coefficient of each respective column (or row) is \c true.
420
+ * This expression can be assigned to a vector with entries of type \c bool.
421
+ *
422
+ * \sa DenseBase::any() */
423
+ EIGEN_DEVICE_FUNC
424
+ const AnyReturnType any() const
425
+ { return AnyReturnType(_expression()); }
426
+
427
+ /** \returns a row (or column) vector expression representing
428
+ * the number of \c true coefficients of each respective column (or row).
429
+ * This expression can be assigned to a vector whose entries have the same type as is used to
430
+ * index entries of the original matrix; for dense matrices, this is \c std::ptrdiff_t .
431
+ *
432
+ * Example: \include PartialRedux_count.cpp
433
+ * Output: \verbinclude PartialRedux_count.out
434
+ *
435
+ * \sa DenseBase::count() */
436
+ EIGEN_DEVICE_FUNC
437
+ const CountReturnType count() const
438
+ { return CountReturnType(_expression()); }
439
+
440
+ /** \returns a row (or column) vector expression of the product
441
+ * of each column (or row) of the referenced expression.
442
+ *
443
+ * Example: \include PartialRedux_prod.cpp
444
+ * Output: \verbinclude PartialRedux_prod.out
445
+ *
446
+ * \sa DenseBase::prod() */
447
+ EIGEN_DEVICE_FUNC
448
+ const ProdReturnType prod() const
449
+ { return ProdReturnType(_expression()); }
450
+
451
+
452
+ /** \returns a matrix expression
453
+ * where each column (or row) are reversed.
454
+ *
455
+ * Example: \include Vectorwise_reverse.cpp
456
+ * Output: \verbinclude Vectorwise_reverse.out
457
+ *
458
+ * \sa DenseBase::reverse() */
459
+ EIGEN_DEVICE_FUNC
460
+ const ConstReverseReturnType reverse() const
461
+ { return ConstReverseReturnType( _expression() ); }
462
+
463
+ /** \returns a writable matrix expression
464
+ * where each column (or row) are reversed.
465
+ *
466
+ * \sa reverse() const */
467
+ EIGEN_DEVICE_FUNC
468
+ ReverseReturnType reverse()
469
+ { return ReverseReturnType( _expression() ); }
470
+
471
+ typedef Replicate<ExpressionType,(isVertical?Dynamic:1),(isHorizontal?Dynamic:1)> ReplicateReturnType;
472
+ EIGEN_DEVICE_FUNC
473
+ const ReplicateReturnType replicate(Index factor) const;
474
+
475
+ /**
476
+ * \return an expression of the replication of each column (or row) of \c *this
477
+ *
478
+ * Example: \include DirectionWise_replicate.cpp
479
+ * Output: \verbinclude DirectionWise_replicate.out
480
+ *
481
+ * \sa VectorwiseOp::replicate(Index), DenseBase::replicate(), class Replicate
482
+ */
483
+ // NOTE implemented here because of sunstudio's compilation errors
484
+ // isVertical*Factor+isHorizontal instead of (isVertical?Factor:1) to handle CUDA bug with ternary operator
485
+ template<int Factor> const Replicate<ExpressionType,isVertical*Factor+isHorizontal,isHorizontal*Factor+isVertical>
486
+ EIGEN_DEVICE_FUNC
487
+ replicate(Index factor = Factor) const
488
+ {
489
+ return Replicate<ExpressionType,(isVertical?Factor:1),(isHorizontal?Factor:1)>
490
+ (_expression(),isVertical?factor:1,isHorizontal?factor:1);
491
+ }
492
+
493
+ /////////// Artithmetic operators ///////////
494
+
495
+ /** Copies the vector \a other to each subvector of \c *this */
496
+ template<typename OtherDerived>
497
+ EIGEN_DEVICE_FUNC
498
+ ExpressionType& operator=(const DenseBase<OtherDerived>& other)
499
+ {
500
+ EIGEN_STATIC_ASSERT_VECTOR_ONLY(OtherDerived)
501
+ EIGEN_STATIC_ASSERT_SAME_XPR_KIND(ExpressionType, OtherDerived)
502
+ //eigen_assert((m_matrix.isNull()) == (other.isNull())); FIXME
503
+ return const_cast<ExpressionType&>(m_matrix = extendedTo(other.derived()));
504
+ }
505
+
506
+ /** Adds the vector \a other to each subvector of \c *this */
507
+ template<typename OtherDerived>
508
+ EIGEN_DEVICE_FUNC
509
+ ExpressionType& operator+=(const DenseBase<OtherDerived>& other)
510
+ {
511
+ EIGEN_STATIC_ASSERT_VECTOR_ONLY(OtherDerived)
512
+ EIGEN_STATIC_ASSERT_SAME_XPR_KIND(ExpressionType, OtherDerived)
513
+ return const_cast<ExpressionType&>(m_matrix += extendedTo(other.derived()));
514
+ }
515
+
516
+ /** Substracts the vector \a other to each subvector of \c *this */
517
+ template<typename OtherDerived>
518
+ EIGEN_DEVICE_FUNC
519
+ ExpressionType& operator-=(const DenseBase<OtherDerived>& other)
520
+ {
521
+ EIGEN_STATIC_ASSERT_VECTOR_ONLY(OtherDerived)
522
+ EIGEN_STATIC_ASSERT_SAME_XPR_KIND(ExpressionType, OtherDerived)
523
+ return const_cast<ExpressionType&>(m_matrix -= extendedTo(other.derived()));
524
+ }
525
+
526
+ /** Multiples each subvector of \c *this by the vector \a other */
527
+ template<typename OtherDerived>
528
+ EIGEN_DEVICE_FUNC
529
+ ExpressionType& operator*=(const DenseBase<OtherDerived>& other)
530
+ {
531
+ EIGEN_STATIC_ASSERT_VECTOR_ONLY(OtherDerived)
532
+ EIGEN_STATIC_ASSERT_ARRAYXPR(ExpressionType)
533
+ EIGEN_STATIC_ASSERT_SAME_XPR_KIND(ExpressionType, OtherDerived)
534
+ m_matrix *= extendedTo(other.derived());
535
+ return const_cast<ExpressionType&>(m_matrix);
536
+ }
537
+
538
+ /** Divides each subvector of \c *this by the vector \a other */
539
+ template<typename OtherDerived>
540
+ EIGEN_DEVICE_FUNC
541
+ ExpressionType& operator/=(const DenseBase<OtherDerived>& other)
542
+ {
543
+ EIGEN_STATIC_ASSERT_VECTOR_ONLY(OtherDerived)
544
+ EIGEN_STATIC_ASSERT_ARRAYXPR(ExpressionType)
545
+ EIGEN_STATIC_ASSERT_SAME_XPR_KIND(ExpressionType, OtherDerived)
546
+ m_matrix /= extendedTo(other.derived());
547
+ return const_cast<ExpressionType&>(m_matrix);
548
+ }
549
+
550
+ /** Returns the expression of the sum of the vector \a other to each subvector of \c *this */
551
+ template<typename OtherDerived> EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC
552
+ CwiseBinaryOp<internal::scalar_sum_op<Scalar,typename OtherDerived::Scalar>,
553
+ const ExpressionTypeNestedCleaned,
554
+ const typename ExtendedType<OtherDerived>::Type>
555
+ operator+(const DenseBase<OtherDerived>& other) const
556
+ {
557
+ EIGEN_STATIC_ASSERT_VECTOR_ONLY(OtherDerived)
558
+ EIGEN_STATIC_ASSERT_SAME_XPR_KIND(ExpressionType, OtherDerived)
559
+ return m_matrix + extendedTo(other.derived());
560
+ }
561
+
562
+ /** Returns the expression of the difference between each subvector of \c *this and the vector \a other */
563
+ template<typename OtherDerived>
564
+ EIGEN_DEVICE_FUNC
565
+ CwiseBinaryOp<internal::scalar_difference_op<Scalar,typename OtherDerived::Scalar>,
566
+ const ExpressionTypeNestedCleaned,
567
+ const typename ExtendedType<OtherDerived>::Type>
568
+ operator-(const DenseBase<OtherDerived>& other) const
569
+ {
570
+ EIGEN_STATIC_ASSERT_VECTOR_ONLY(OtherDerived)
571
+ EIGEN_STATIC_ASSERT_SAME_XPR_KIND(ExpressionType, OtherDerived)
572
+ return m_matrix - extendedTo(other.derived());
573
+ }
574
+
575
+ /** Returns the expression where each subvector is the product of the vector \a other
576
+ * by the corresponding subvector of \c *this */
577
+ template<typename OtherDerived> EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC
578
+ CwiseBinaryOp<internal::scalar_product_op<Scalar>,
579
+ const ExpressionTypeNestedCleaned,
580
+ const typename ExtendedType<OtherDerived>::Type>
581
+ EIGEN_DEVICE_FUNC
582
+ operator*(const DenseBase<OtherDerived>& other) const
583
+ {
584
+ EIGEN_STATIC_ASSERT_VECTOR_ONLY(OtherDerived)
585
+ EIGEN_STATIC_ASSERT_ARRAYXPR(ExpressionType)
586
+ EIGEN_STATIC_ASSERT_SAME_XPR_KIND(ExpressionType, OtherDerived)
587
+ return m_matrix * extendedTo(other.derived());
588
+ }
589
+
590
+ /** Returns the expression where each subvector is the quotient of the corresponding
591
+ * subvector of \c *this by the vector \a other */
592
+ template<typename OtherDerived>
593
+ EIGEN_DEVICE_FUNC
594
+ CwiseBinaryOp<internal::scalar_quotient_op<Scalar>,
595
+ const ExpressionTypeNestedCleaned,
596
+ const typename ExtendedType<OtherDerived>::Type>
597
+ operator/(const DenseBase<OtherDerived>& other) const
598
+ {
599
+ EIGEN_STATIC_ASSERT_VECTOR_ONLY(OtherDerived)
600
+ EIGEN_STATIC_ASSERT_ARRAYXPR(ExpressionType)
601
+ EIGEN_STATIC_ASSERT_SAME_XPR_KIND(ExpressionType, OtherDerived)
602
+ return m_matrix / extendedTo(other.derived());
603
+ }
604
+
605
+ /** \returns an expression where each column (or row) of the referenced matrix are normalized.
606
+ * The referenced matrix is \b not modified.
607
+ * \sa MatrixBase::normalized(), normalize()
608
+ */
609
+ EIGEN_DEVICE_FUNC
610
+ CwiseBinaryOp<internal::scalar_quotient_op<Scalar>,
611
+ const ExpressionTypeNestedCleaned,
612
+ const typename OppositeExtendedType<typename ReturnType<internal::member_norm,RealScalar>::Type>::Type>
613
+ normalized() const { return m_matrix.cwiseQuotient(extendedToOpposite(this->norm())); }
614
+
615
+
616
+ /** Normalize in-place each row or columns of the referenced matrix.
617
+ * \sa MatrixBase::normalize(), normalized()
618
+ */
619
+ EIGEN_DEVICE_FUNC void normalize() {
620
+ m_matrix = this->normalized();
621
+ }
622
+
623
+ EIGEN_DEVICE_FUNC inline void reverseInPlace();
624
+
625
+ /////////// Geometry module ///////////
626
+
627
+ typedef Homogeneous<ExpressionType,Direction> HomogeneousReturnType;
628
+ EIGEN_DEVICE_FUNC
629
+ HomogeneousReturnType homogeneous() const;
630
+
631
+ typedef typename ExpressionType::PlainObject CrossReturnType;
632
+ template<typename OtherDerived>
633
+ EIGEN_DEVICE_FUNC
634
+ const CrossReturnType cross(const MatrixBase<OtherDerived>& other) const;
635
+
636
+ enum {
637
+ HNormalized_Size = Direction==Vertical ? internal::traits<ExpressionType>::RowsAtCompileTime
638
+ : internal::traits<ExpressionType>::ColsAtCompileTime,
639
+ HNormalized_SizeMinusOne = HNormalized_Size==Dynamic ? Dynamic : HNormalized_Size-1
640
+ };
641
+ typedef Block<const ExpressionType,
642
+ Direction==Vertical ? int(HNormalized_SizeMinusOne)
643
+ : int(internal::traits<ExpressionType>::RowsAtCompileTime),
644
+ Direction==Horizontal ? int(HNormalized_SizeMinusOne)
645
+ : int(internal::traits<ExpressionType>::ColsAtCompileTime)>
646
+ HNormalized_Block;
647
+ typedef Block<const ExpressionType,
648
+ Direction==Vertical ? 1 : int(internal::traits<ExpressionType>::RowsAtCompileTime),
649
+ Direction==Horizontal ? 1 : int(internal::traits<ExpressionType>::ColsAtCompileTime)>
650
+ HNormalized_Factors;
651
+ typedef CwiseBinaryOp<internal::scalar_quotient_op<typename internal::traits<ExpressionType>::Scalar>,
652
+ const HNormalized_Block,
653
+ const Replicate<HNormalized_Factors,
654
+ Direction==Vertical ? HNormalized_SizeMinusOne : 1,
655
+ Direction==Horizontal ? HNormalized_SizeMinusOne : 1> >
656
+ HNormalizedReturnType;
657
+
658
+ EIGEN_DEVICE_FUNC
659
+ const HNormalizedReturnType hnormalized() const;
660
+
661
+ protected:
662
+ ExpressionTypeNested m_matrix;
663
+ };
664
+
665
+ //const colwise moved to DenseBase.h due to CUDA compiler bug
666
+
667
+
668
+ /** \returns a writable VectorwiseOp wrapper of *this providing additional partial reduction operations
669
+ *
670
+ * \sa rowwise(), class VectorwiseOp, \ref TutorialReductionsVisitorsBroadcasting
671
+ */
672
+ template<typename Derived>
673
+ inline typename DenseBase<Derived>::ColwiseReturnType
674
+ DenseBase<Derived>::colwise()
675
+ {
676
+ return ColwiseReturnType(derived());
677
+ }
678
+
679
+ //const rowwise moved to DenseBase.h due to CUDA compiler bug
680
+
681
+
682
+ /** \returns a writable VectorwiseOp wrapper of *this providing additional partial reduction operations
683
+ *
684
+ * \sa colwise(), class VectorwiseOp, \ref TutorialReductionsVisitorsBroadcasting
685
+ */
686
+ template<typename Derived>
687
+ inline typename DenseBase<Derived>::RowwiseReturnType
688
+ DenseBase<Derived>::rowwise()
689
+ {
690
+ return RowwiseReturnType(derived());
691
+ }
692
+
693
+ } // end namespace Eigen
694
+
695
+ #endif // EIGEN_PARTIAL_REDUX_H