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,726 @@
1
+ // This file is part of Eigen, a lightweight C++ template library
2
+ // for linear algebra.
3
+ //
4
+ // Copyright (C) 2008-2014 Gael Guennebaud <gael.guennebaud@inria.fr>
5
+ //
6
+ // This Source Code Form is subject to the terms of the Mozilla
7
+ // Public License v. 2.0. If a copy of the MPL was not distributed
8
+ // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
9
+
10
+ #ifndef EIGEN_SPARSE_CWISE_BINARY_OP_H
11
+ #define EIGEN_SPARSE_CWISE_BINARY_OP_H
12
+
13
+ namespace Eigen {
14
+
15
+ // Here we have to handle 3 cases:
16
+ // 1 - sparse op dense
17
+ // 2 - dense op sparse
18
+ // 3 - sparse op sparse
19
+ // We also need to implement a 4th iterator for:
20
+ // 4 - dense op dense
21
+ // Finally, we also need to distinguish between the product and other operations :
22
+ // configuration returned mode
23
+ // 1 - sparse op dense product sparse
24
+ // generic dense
25
+ // 2 - dense op sparse product sparse
26
+ // generic dense
27
+ // 3 - sparse op sparse product sparse
28
+ // generic sparse
29
+ // 4 - dense op dense product dense
30
+ // generic dense
31
+ //
32
+ // TODO to ease compiler job, we could specialize product/quotient with a scalar
33
+ // and fallback to cwise-unary evaluator using bind1st_op and bind2nd_op.
34
+
35
+ template<typename BinaryOp, typename Lhs, typename Rhs>
36
+ class CwiseBinaryOpImpl<BinaryOp, Lhs, Rhs, Sparse>
37
+ : public SparseMatrixBase<CwiseBinaryOp<BinaryOp, Lhs, Rhs> >
38
+ {
39
+ public:
40
+ typedef CwiseBinaryOp<BinaryOp, Lhs, Rhs> Derived;
41
+ typedef SparseMatrixBase<Derived> Base;
42
+ EIGEN_SPARSE_PUBLIC_INTERFACE(Derived)
43
+ CwiseBinaryOpImpl()
44
+ {
45
+ EIGEN_STATIC_ASSERT((
46
+ (!internal::is_same<typename internal::traits<Lhs>::StorageKind,
47
+ typename internal::traits<Rhs>::StorageKind>::value)
48
+ || ((internal::evaluator<Lhs>::Flags&RowMajorBit) == (internal::evaluator<Rhs>::Flags&RowMajorBit))),
49
+ THE_STORAGE_ORDER_OF_BOTH_SIDES_MUST_MATCH);
50
+ }
51
+ };
52
+
53
+ namespace internal {
54
+
55
+
56
+ // Generic "sparse OP sparse"
57
+ template<typename XprType> struct binary_sparse_evaluator;
58
+
59
+ template<typename BinaryOp, typename Lhs, typename Rhs>
60
+ struct binary_evaluator<CwiseBinaryOp<BinaryOp, Lhs, Rhs>, IteratorBased, IteratorBased>
61
+ : evaluator_base<CwiseBinaryOp<BinaryOp, Lhs, Rhs> >
62
+ {
63
+ protected:
64
+ typedef typename evaluator<Lhs>::InnerIterator LhsIterator;
65
+ typedef typename evaluator<Rhs>::InnerIterator RhsIterator;
66
+ typedef CwiseBinaryOp<BinaryOp, Lhs, Rhs> XprType;
67
+ typedef typename traits<XprType>::Scalar Scalar;
68
+ typedef typename XprType::StorageIndex StorageIndex;
69
+ public:
70
+
71
+ class InnerIterator
72
+ {
73
+ public:
74
+
75
+ EIGEN_STRONG_INLINE InnerIterator(const binary_evaluator& aEval, Index outer)
76
+ : m_lhsIter(aEval.m_lhsImpl,outer), m_rhsIter(aEval.m_rhsImpl,outer), m_functor(aEval.m_functor)
77
+ {
78
+ this->operator++();
79
+ }
80
+
81
+ EIGEN_STRONG_INLINE InnerIterator& operator++()
82
+ {
83
+ if (m_lhsIter && m_rhsIter && (m_lhsIter.index() == m_rhsIter.index()))
84
+ {
85
+ m_id = m_lhsIter.index();
86
+ m_value = m_functor(m_lhsIter.value(), m_rhsIter.value());
87
+ ++m_lhsIter;
88
+ ++m_rhsIter;
89
+ }
90
+ else if (m_lhsIter && (!m_rhsIter || (m_lhsIter.index() < m_rhsIter.index())))
91
+ {
92
+ m_id = m_lhsIter.index();
93
+ m_value = m_functor(m_lhsIter.value(), Scalar(0));
94
+ ++m_lhsIter;
95
+ }
96
+ else if (m_rhsIter && (!m_lhsIter || (m_lhsIter.index() > m_rhsIter.index())))
97
+ {
98
+ m_id = m_rhsIter.index();
99
+ m_value = m_functor(Scalar(0), m_rhsIter.value());
100
+ ++m_rhsIter;
101
+ }
102
+ else
103
+ {
104
+ m_value = 0; // this is to avoid a compilation warning
105
+ m_id = -1;
106
+ }
107
+ return *this;
108
+ }
109
+
110
+ EIGEN_STRONG_INLINE Scalar value() const { return m_value; }
111
+
112
+ EIGEN_STRONG_INLINE StorageIndex index() const { return m_id; }
113
+ EIGEN_STRONG_INLINE Index outer() const { return m_lhsIter.outer(); }
114
+ EIGEN_STRONG_INLINE Index row() const { return Lhs::IsRowMajor ? m_lhsIter.row() : index(); }
115
+ EIGEN_STRONG_INLINE Index col() const { return Lhs::IsRowMajor ? index() : m_lhsIter.col(); }
116
+
117
+ EIGEN_STRONG_INLINE operator bool() const { return m_id>=0; }
118
+
119
+ protected:
120
+ LhsIterator m_lhsIter;
121
+ RhsIterator m_rhsIter;
122
+ const BinaryOp& m_functor;
123
+ Scalar m_value;
124
+ StorageIndex m_id;
125
+ };
126
+
127
+
128
+ enum {
129
+ CoeffReadCost = evaluator<Lhs>::CoeffReadCost + evaluator<Rhs>::CoeffReadCost + functor_traits<BinaryOp>::Cost,
130
+ Flags = XprType::Flags
131
+ };
132
+
133
+ explicit binary_evaluator(const XprType& xpr)
134
+ : m_functor(xpr.functor()),
135
+ m_lhsImpl(xpr.lhs()),
136
+ m_rhsImpl(xpr.rhs())
137
+ {
138
+ EIGEN_INTERNAL_CHECK_COST_VALUE(functor_traits<BinaryOp>::Cost);
139
+ EIGEN_INTERNAL_CHECK_COST_VALUE(CoeffReadCost);
140
+ }
141
+
142
+ inline Index nonZerosEstimate() const {
143
+ return m_lhsImpl.nonZerosEstimate() + m_rhsImpl.nonZerosEstimate();
144
+ }
145
+
146
+ protected:
147
+ const BinaryOp m_functor;
148
+ evaluator<Lhs> m_lhsImpl;
149
+ evaluator<Rhs> m_rhsImpl;
150
+ };
151
+
152
+ // dense op sparse
153
+ template<typename BinaryOp, typename Lhs, typename Rhs>
154
+ struct binary_evaluator<CwiseBinaryOp<BinaryOp, Lhs, Rhs>, IndexBased, IteratorBased>
155
+ : evaluator_base<CwiseBinaryOp<BinaryOp, Lhs, Rhs> >
156
+ {
157
+ protected:
158
+ typedef typename evaluator<Rhs>::InnerIterator RhsIterator;
159
+ typedef CwiseBinaryOp<BinaryOp, Lhs, Rhs> XprType;
160
+ typedef typename traits<XprType>::Scalar Scalar;
161
+ typedef typename XprType::StorageIndex StorageIndex;
162
+ public:
163
+
164
+ class InnerIterator
165
+ {
166
+ enum { IsRowMajor = (int(Rhs::Flags)&RowMajorBit)==RowMajorBit };
167
+ public:
168
+
169
+ EIGEN_STRONG_INLINE InnerIterator(const binary_evaluator& aEval, Index outer)
170
+ : m_lhsEval(aEval.m_lhsImpl), m_rhsIter(aEval.m_rhsImpl,outer), m_functor(aEval.m_functor), m_value(0), m_id(-1), m_innerSize(aEval.m_expr.rhs().innerSize())
171
+ {
172
+ this->operator++();
173
+ }
174
+
175
+ EIGEN_STRONG_INLINE InnerIterator& operator++()
176
+ {
177
+ ++m_id;
178
+ if(m_id<m_innerSize)
179
+ {
180
+ Scalar lhsVal = m_lhsEval.coeff(IsRowMajor?m_rhsIter.outer():m_id,
181
+ IsRowMajor?m_id:m_rhsIter.outer());
182
+ if(m_rhsIter && m_rhsIter.index()==m_id)
183
+ {
184
+ m_value = m_functor(lhsVal, m_rhsIter.value());
185
+ ++m_rhsIter;
186
+ }
187
+ else
188
+ m_value = m_functor(lhsVal, Scalar(0));
189
+ }
190
+
191
+ return *this;
192
+ }
193
+
194
+ EIGEN_STRONG_INLINE Scalar value() const { eigen_internal_assert(m_id<m_innerSize); return m_value; }
195
+
196
+ EIGEN_STRONG_INLINE StorageIndex index() const { return m_id; }
197
+ EIGEN_STRONG_INLINE Index outer() const { return m_rhsIter.outer(); }
198
+ EIGEN_STRONG_INLINE Index row() const { return IsRowMajor ? m_rhsIter.outer() : m_id; }
199
+ EIGEN_STRONG_INLINE Index col() const { return IsRowMajor ? m_id : m_rhsIter.outer(); }
200
+
201
+ EIGEN_STRONG_INLINE operator bool() const { return m_id<m_innerSize; }
202
+
203
+ protected:
204
+ const evaluator<Lhs> &m_lhsEval;
205
+ RhsIterator m_rhsIter;
206
+ const BinaryOp& m_functor;
207
+ Scalar m_value;
208
+ StorageIndex m_id;
209
+ StorageIndex m_innerSize;
210
+ };
211
+
212
+
213
+ enum {
214
+ CoeffReadCost = evaluator<Lhs>::CoeffReadCost + evaluator<Rhs>::CoeffReadCost + functor_traits<BinaryOp>::Cost,
215
+ // Expose storage order of the sparse expression
216
+ Flags = (XprType::Flags & ~RowMajorBit) | (int(Rhs::Flags)&RowMajorBit)
217
+ };
218
+
219
+ explicit binary_evaluator(const XprType& xpr)
220
+ : m_functor(xpr.functor()),
221
+ m_lhsImpl(xpr.lhs()),
222
+ m_rhsImpl(xpr.rhs()),
223
+ m_expr(xpr)
224
+ {
225
+ EIGEN_INTERNAL_CHECK_COST_VALUE(functor_traits<BinaryOp>::Cost);
226
+ EIGEN_INTERNAL_CHECK_COST_VALUE(CoeffReadCost);
227
+ }
228
+
229
+ inline Index nonZerosEstimate() const {
230
+ return m_expr.size();
231
+ }
232
+
233
+ protected:
234
+ const BinaryOp m_functor;
235
+ evaluator<Lhs> m_lhsImpl;
236
+ evaluator<Rhs> m_rhsImpl;
237
+ const XprType &m_expr;
238
+ };
239
+
240
+ // sparse op dense
241
+ template<typename BinaryOp, typename Lhs, typename Rhs>
242
+ struct binary_evaluator<CwiseBinaryOp<BinaryOp, Lhs, Rhs>, IteratorBased, IndexBased>
243
+ : evaluator_base<CwiseBinaryOp<BinaryOp, Lhs, Rhs> >
244
+ {
245
+ protected:
246
+ typedef typename evaluator<Lhs>::InnerIterator LhsIterator;
247
+ typedef CwiseBinaryOp<BinaryOp, Lhs, Rhs> XprType;
248
+ typedef typename traits<XprType>::Scalar Scalar;
249
+ typedef typename XprType::StorageIndex StorageIndex;
250
+ public:
251
+
252
+ class InnerIterator
253
+ {
254
+ enum { IsRowMajor = (int(Lhs::Flags)&RowMajorBit)==RowMajorBit };
255
+ public:
256
+
257
+ EIGEN_STRONG_INLINE InnerIterator(const binary_evaluator& aEval, Index outer)
258
+ : m_lhsIter(aEval.m_lhsImpl,outer), m_rhsEval(aEval.m_rhsImpl), m_functor(aEval.m_functor), m_value(0), m_id(-1), m_innerSize(aEval.m_expr.lhs().innerSize())
259
+ {
260
+ this->operator++();
261
+ }
262
+
263
+ EIGEN_STRONG_INLINE InnerIterator& operator++()
264
+ {
265
+ ++m_id;
266
+ if(m_id<m_innerSize)
267
+ {
268
+ Scalar rhsVal = m_rhsEval.coeff(IsRowMajor?m_lhsIter.outer():m_id,
269
+ IsRowMajor?m_id:m_lhsIter.outer());
270
+ if(m_lhsIter && m_lhsIter.index()==m_id)
271
+ {
272
+ m_value = m_functor(m_lhsIter.value(), rhsVal);
273
+ ++m_lhsIter;
274
+ }
275
+ else
276
+ m_value = m_functor(Scalar(0),rhsVal);
277
+ }
278
+
279
+ return *this;
280
+ }
281
+
282
+ EIGEN_STRONG_INLINE Scalar value() const { eigen_internal_assert(m_id<m_innerSize); return m_value; }
283
+
284
+ EIGEN_STRONG_INLINE StorageIndex index() const { return m_id; }
285
+ EIGEN_STRONG_INLINE Index outer() const { return m_lhsIter.outer(); }
286
+ EIGEN_STRONG_INLINE Index row() const { return IsRowMajor ? m_lhsIter.outer() : m_id; }
287
+ EIGEN_STRONG_INLINE Index col() const { return IsRowMajor ? m_id : m_lhsIter.outer(); }
288
+
289
+ EIGEN_STRONG_INLINE operator bool() const { return m_id<m_innerSize; }
290
+
291
+ protected:
292
+ LhsIterator m_lhsIter;
293
+ const evaluator<Rhs> &m_rhsEval;
294
+ const BinaryOp& m_functor;
295
+ Scalar m_value;
296
+ StorageIndex m_id;
297
+ StorageIndex m_innerSize;
298
+ };
299
+
300
+
301
+ enum {
302
+ CoeffReadCost = evaluator<Lhs>::CoeffReadCost + evaluator<Rhs>::CoeffReadCost + functor_traits<BinaryOp>::Cost,
303
+ // Expose storage order of the sparse expression
304
+ Flags = (XprType::Flags & ~RowMajorBit) | (int(Lhs::Flags)&RowMajorBit)
305
+ };
306
+
307
+ explicit binary_evaluator(const XprType& xpr)
308
+ : m_functor(xpr.functor()),
309
+ m_lhsImpl(xpr.lhs()),
310
+ m_rhsImpl(xpr.rhs()),
311
+ m_expr(xpr)
312
+ {
313
+ EIGEN_INTERNAL_CHECK_COST_VALUE(functor_traits<BinaryOp>::Cost);
314
+ EIGEN_INTERNAL_CHECK_COST_VALUE(CoeffReadCost);
315
+ }
316
+
317
+ inline Index nonZerosEstimate() const {
318
+ return m_expr.size();
319
+ }
320
+
321
+ protected:
322
+ const BinaryOp m_functor;
323
+ evaluator<Lhs> m_lhsImpl;
324
+ evaluator<Rhs> m_rhsImpl;
325
+ const XprType &m_expr;
326
+ };
327
+
328
+ template<typename T,
329
+ typename LhsKind = typename evaluator_traits<typename T::Lhs>::Kind,
330
+ typename RhsKind = typename evaluator_traits<typename T::Rhs>::Kind,
331
+ typename LhsScalar = typename traits<typename T::Lhs>::Scalar,
332
+ typename RhsScalar = typename traits<typename T::Rhs>::Scalar> struct sparse_conjunction_evaluator;
333
+
334
+ // "sparse .* sparse"
335
+ template<typename T1, typename T2, typename Lhs, typename Rhs>
336
+ struct binary_evaluator<CwiseBinaryOp<scalar_product_op<T1,T2>, Lhs, Rhs>, IteratorBased, IteratorBased>
337
+ : sparse_conjunction_evaluator<CwiseBinaryOp<scalar_product_op<T1,T2>, Lhs, Rhs> >
338
+ {
339
+ typedef CwiseBinaryOp<scalar_product_op<T1,T2>, Lhs, Rhs> XprType;
340
+ typedef sparse_conjunction_evaluator<XprType> Base;
341
+ explicit binary_evaluator(const XprType& xpr) : Base(xpr) {}
342
+ };
343
+ // "dense .* sparse"
344
+ template<typename T1, typename T2, typename Lhs, typename Rhs>
345
+ struct binary_evaluator<CwiseBinaryOp<scalar_product_op<T1,T2>, Lhs, Rhs>, IndexBased, IteratorBased>
346
+ : sparse_conjunction_evaluator<CwiseBinaryOp<scalar_product_op<T1,T2>, Lhs, Rhs> >
347
+ {
348
+ typedef CwiseBinaryOp<scalar_product_op<T1,T2>, Lhs, Rhs> XprType;
349
+ typedef sparse_conjunction_evaluator<XprType> Base;
350
+ explicit binary_evaluator(const XprType& xpr) : Base(xpr) {}
351
+ };
352
+ // "sparse .* dense"
353
+ template<typename T1, typename T2, typename Lhs, typename Rhs>
354
+ struct binary_evaluator<CwiseBinaryOp<scalar_product_op<T1,T2>, Lhs, Rhs>, IteratorBased, IndexBased>
355
+ : sparse_conjunction_evaluator<CwiseBinaryOp<scalar_product_op<T1,T2>, Lhs, Rhs> >
356
+ {
357
+ typedef CwiseBinaryOp<scalar_product_op<T1,T2>, Lhs, Rhs> XprType;
358
+ typedef sparse_conjunction_evaluator<XprType> Base;
359
+ explicit binary_evaluator(const XprType& xpr) : Base(xpr) {}
360
+ };
361
+
362
+ // "sparse ./ dense"
363
+ template<typename T1, typename T2, typename Lhs, typename Rhs>
364
+ struct binary_evaluator<CwiseBinaryOp<scalar_quotient_op<T1,T2>, Lhs, Rhs>, IteratorBased, IndexBased>
365
+ : sparse_conjunction_evaluator<CwiseBinaryOp<scalar_quotient_op<T1,T2>, Lhs, Rhs> >
366
+ {
367
+ typedef CwiseBinaryOp<scalar_quotient_op<T1,T2>, Lhs, Rhs> XprType;
368
+ typedef sparse_conjunction_evaluator<XprType> Base;
369
+ explicit binary_evaluator(const XprType& xpr) : Base(xpr) {}
370
+ };
371
+
372
+ // "sparse && sparse"
373
+ template<typename Lhs, typename Rhs>
374
+ struct binary_evaluator<CwiseBinaryOp<scalar_boolean_and_op, Lhs, Rhs>, IteratorBased, IteratorBased>
375
+ : sparse_conjunction_evaluator<CwiseBinaryOp<scalar_boolean_and_op, Lhs, Rhs> >
376
+ {
377
+ typedef CwiseBinaryOp<scalar_boolean_and_op, Lhs, Rhs> XprType;
378
+ typedef sparse_conjunction_evaluator<XprType> Base;
379
+ explicit binary_evaluator(const XprType& xpr) : Base(xpr) {}
380
+ };
381
+ // "dense && sparse"
382
+ template<typename Lhs, typename Rhs>
383
+ struct binary_evaluator<CwiseBinaryOp<scalar_boolean_and_op, Lhs, Rhs>, IndexBased, IteratorBased>
384
+ : sparse_conjunction_evaluator<CwiseBinaryOp<scalar_boolean_and_op, Lhs, Rhs> >
385
+ {
386
+ typedef CwiseBinaryOp<scalar_boolean_and_op, Lhs, Rhs> XprType;
387
+ typedef sparse_conjunction_evaluator<XprType> Base;
388
+ explicit binary_evaluator(const XprType& xpr) : Base(xpr) {}
389
+ };
390
+ // "sparse && dense"
391
+ template<typename Lhs, typename Rhs>
392
+ struct binary_evaluator<CwiseBinaryOp<scalar_boolean_and_op, Lhs, Rhs>, IteratorBased, IndexBased>
393
+ : sparse_conjunction_evaluator<CwiseBinaryOp<scalar_boolean_and_op, Lhs, Rhs> >
394
+ {
395
+ typedef CwiseBinaryOp<scalar_boolean_and_op, Lhs, Rhs> XprType;
396
+ typedef sparse_conjunction_evaluator<XprType> Base;
397
+ explicit binary_evaluator(const XprType& xpr) : Base(xpr) {}
398
+ };
399
+
400
+ // "sparse ^ sparse"
401
+ template<typename XprType>
402
+ struct sparse_conjunction_evaluator<XprType, IteratorBased, IteratorBased>
403
+ : evaluator_base<XprType>
404
+ {
405
+ protected:
406
+ typedef typename XprType::Functor BinaryOp;
407
+ typedef typename XprType::Lhs LhsArg;
408
+ typedef typename XprType::Rhs RhsArg;
409
+ typedef typename evaluator<LhsArg>::InnerIterator LhsIterator;
410
+ typedef typename evaluator<RhsArg>::InnerIterator RhsIterator;
411
+ typedef typename XprType::StorageIndex StorageIndex;
412
+ typedef typename traits<XprType>::Scalar Scalar;
413
+ public:
414
+
415
+ class InnerIterator
416
+ {
417
+ public:
418
+
419
+ EIGEN_STRONG_INLINE InnerIterator(const sparse_conjunction_evaluator& aEval, Index outer)
420
+ : m_lhsIter(aEval.m_lhsImpl,outer), m_rhsIter(aEval.m_rhsImpl,outer), m_functor(aEval.m_functor)
421
+ {
422
+ while (m_lhsIter && m_rhsIter && (m_lhsIter.index() != m_rhsIter.index()))
423
+ {
424
+ if (m_lhsIter.index() < m_rhsIter.index())
425
+ ++m_lhsIter;
426
+ else
427
+ ++m_rhsIter;
428
+ }
429
+ }
430
+
431
+ EIGEN_STRONG_INLINE InnerIterator& operator++()
432
+ {
433
+ ++m_lhsIter;
434
+ ++m_rhsIter;
435
+ while (m_lhsIter && m_rhsIter && (m_lhsIter.index() != m_rhsIter.index()))
436
+ {
437
+ if (m_lhsIter.index() < m_rhsIter.index())
438
+ ++m_lhsIter;
439
+ else
440
+ ++m_rhsIter;
441
+ }
442
+ return *this;
443
+ }
444
+
445
+ EIGEN_STRONG_INLINE Scalar value() const { return m_functor(m_lhsIter.value(), m_rhsIter.value()); }
446
+
447
+ EIGEN_STRONG_INLINE StorageIndex index() const { return m_lhsIter.index(); }
448
+ EIGEN_STRONG_INLINE Index outer() const { return m_lhsIter.outer(); }
449
+ EIGEN_STRONG_INLINE Index row() const { return m_lhsIter.row(); }
450
+ EIGEN_STRONG_INLINE Index col() const { return m_lhsIter.col(); }
451
+
452
+ EIGEN_STRONG_INLINE operator bool() const { return (m_lhsIter && m_rhsIter); }
453
+
454
+ protected:
455
+ LhsIterator m_lhsIter;
456
+ RhsIterator m_rhsIter;
457
+ const BinaryOp& m_functor;
458
+ };
459
+
460
+
461
+ enum {
462
+ CoeffReadCost = evaluator<LhsArg>::CoeffReadCost + evaluator<RhsArg>::CoeffReadCost + functor_traits<BinaryOp>::Cost,
463
+ Flags = XprType::Flags
464
+ };
465
+
466
+ explicit sparse_conjunction_evaluator(const XprType& xpr)
467
+ : m_functor(xpr.functor()),
468
+ m_lhsImpl(xpr.lhs()),
469
+ m_rhsImpl(xpr.rhs())
470
+ {
471
+ EIGEN_INTERNAL_CHECK_COST_VALUE(functor_traits<BinaryOp>::Cost);
472
+ EIGEN_INTERNAL_CHECK_COST_VALUE(CoeffReadCost);
473
+ }
474
+
475
+ inline Index nonZerosEstimate() const {
476
+ return (std::min)(m_lhsImpl.nonZerosEstimate(), m_rhsImpl.nonZerosEstimate());
477
+ }
478
+
479
+ protected:
480
+ const BinaryOp m_functor;
481
+ evaluator<LhsArg> m_lhsImpl;
482
+ evaluator<RhsArg> m_rhsImpl;
483
+ };
484
+
485
+ // "dense ^ sparse"
486
+ template<typename XprType>
487
+ struct sparse_conjunction_evaluator<XprType, IndexBased, IteratorBased>
488
+ : evaluator_base<XprType>
489
+ {
490
+ protected:
491
+ typedef typename XprType::Functor BinaryOp;
492
+ typedef typename XprType::Lhs LhsArg;
493
+ typedef typename XprType::Rhs RhsArg;
494
+ typedef evaluator<LhsArg> LhsEvaluator;
495
+ typedef typename evaluator<RhsArg>::InnerIterator RhsIterator;
496
+ typedef typename XprType::StorageIndex StorageIndex;
497
+ typedef typename traits<XprType>::Scalar Scalar;
498
+ public:
499
+
500
+ class InnerIterator
501
+ {
502
+ enum { IsRowMajor = (int(RhsArg::Flags)&RowMajorBit)==RowMajorBit };
503
+
504
+ public:
505
+
506
+ EIGEN_STRONG_INLINE InnerIterator(const sparse_conjunction_evaluator& aEval, Index outer)
507
+ : m_lhsEval(aEval.m_lhsImpl), m_rhsIter(aEval.m_rhsImpl,outer), m_functor(aEval.m_functor), m_outer(outer)
508
+ {}
509
+
510
+ EIGEN_STRONG_INLINE InnerIterator& operator++()
511
+ {
512
+ ++m_rhsIter;
513
+ return *this;
514
+ }
515
+
516
+ EIGEN_STRONG_INLINE Scalar value() const
517
+ { return m_functor(m_lhsEval.coeff(IsRowMajor?m_outer:m_rhsIter.index(),IsRowMajor?m_rhsIter.index():m_outer), m_rhsIter.value()); }
518
+
519
+ EIGEN_STRONG_INLINE StorageIndex index() const { return m_rhsIter.index(); }
520
+ EIGEN_STRONG_INLINE Index outer() const { return m_rhsIter.outer(); }
521
+ EIGEN_STRONG_INLINE Index row() const { return m_rhsIter.row(); }
522
+ EIGEN_STRONG_INLINE Index col() const { return m_rhsIter.col(); }
523
+
524
+ EIGEN_STRONG_INLINE operator bool() const { return m_rhsIter; }
525
+
526
+ protected:
527
+ const LhsEvaluator &m_lhsEval;
528
+ RhsIterator m_rhsIter;
529
+ const BinaryOp& m_functor;
530
+ const Index m_outer;
531
+ };
532
+
533
+
534
+ enum {
535
+ CoeffReadCost = evaluator<LhsArg>::CoeffReadCost + evaluator<RhsArg>::CoeffReadCost + functor_traits<BinaryOp>::Cost,
536
+ // Expose storage order of the sparse expression
537
+ Flags = (XprType::Flags & ~RowMajorBit) | (int(RhsArg::Flags)&RowMajorBit)
538
+ };
539
+
540
+ explicit sparse_conjunction_evaluator(const XprType& xpr)
541
+ : m_functor(xpr.functor()),
542
+ m_lhsImpl(xpr.lhs()),
543
+ m_rhsImpl(xpr.rhs())
544
+ {
545
+ EIGEN_INTERNAL_CHECK_COST_VALUE(functor_traits<BinaryOp>::Cost);
546
+ EIGEN_INTERNAL_CHECK_COST_VALUE(CoeffReadCost);
547
+ }
548
+
549
+ inline Index nonZerosEstimate() const {
550
+ return m_rhsImpl.nonZerosEstimate();
551
+ }
552
+
553
+ protected:
554
+ const BinaryOp m_functor;
555
+ evaluator<LhsArg> m_lhsImpl;
556
+ evaluator<RhsArg> m_rhsImpl;
557
+ };
558
+
559
+ // "sparse ^ dense"
560
+ template<typename XprType>
561
+ struct sparse_conjunction_evaluator<XprType, IteratorBased, IndexBased>
562
+ : evaluator_base<XprType>
563
+ {
564
+ protected:
565
+ typedef typename XprType::Functor BinaryOp;
566
+ typedef typename XprType::Lhs LhsArg;
567
+ typedef typename XprType::Rhs RhsArg;
568
+ typedef typename evaluator<LhsArg>::InnerIterator LhsIterator;
569
+ typedef evaluator<RhsArg> RhsEvaluator;
570
+ typedef typename XprType::StorageIndex StorageIndex;
571
+ typedef typename traits<XprType>::Scalar Scalar;
572
+ public:
573
+
574
+ class InnerIterator
575
+ {
576
+ enum { IsRowMajor = (int(LhsArg::Flags)&RowMajorBit)==RowMajorBit };
577
+
578
+ public:
579
+
580
+ EIGEN_STRONG_INLINE InnerIterator(const sparse_conjunction_evaluator& aEval, Index outer)
581
+ : m_lhsIter(aEval.m_lhsImpl,outer), m_rhsEval(aEval.m_rhsImpl), m_functor(aEval.m_functor), m_outer(outer)
582
+ {}
583
+
584
+ EIGEN_STRONG_INLINE InnerIterator& operator++()
585
+ {
586
+ ++m_lhsIter;
587
+ return *this;
588
+ }
589
+
590
+ EIGEN_STRONG_INLINE Scalar value() const
591
+ { return m_functor(m_lhsIter.value(),
592
+ m_rhsEval.coeff(IsRowMajor?m_outer:m_lhsIter.index(),IsRowMajor?m_lhsIter.index():m_outer)); }
593
+
594
+ EIGEN_STRONG_INLINE StorageIndex index() const { return m_lhsIter.index(); }
595
+ EIGEN_STRONG_INLINE Index outer() const { return m_lhsIter.outer(); }
596
+ EIGEN_STRONG_INLINE Index row() const { return m_lhsIter.row(); }
597
+ EIGEN_STRONG_INLINE Index col() const { return m_lhsIter.col(); }
598
+
599
+ EIGEN_STRONG_INLINE operator bool() const { return m_lhsIter; }
600
+
601
+ protected:
602
+ LhsIterator m_lhsIter;
603
+ const evaluator<RhsArg> &m_rhsEval;
604
+ const BinaryOp& m_functor;
605
+ const Index m_outer;
606
+ };
607
+
608
+
609
+ enum {
610
+ CoeffReadCost = evaluator<LhsArg>::CoeffReadCost + evaluator<RhsArg>::CoeffReadCost + functor_traits<BinaryOp>::Cost,
611
+ // Expose storage order of the sparse expression
612
+ Flags = (XprType::Flags & ~RowMajorBit) | (int(LhsArg::Flags)&RowMajorBit)
613
+ };
614
+
615
+ explicit sparse_conjunction_evaluator(const XprType& xpr)
616
+ : m_functor(xpr.functor()),
617
+ m_lhsImpl(xpr.lhs()),
618
+ m_rhsImpl(xpr.rhs())
619
+ {
620
+ EIGEN_INTERNAL_CHECK_COST_VALUE(functor_traits<BinaryOp>::Cost);
621
+ EIGEN_INTERNAL_CHECK_COST_VALUE(CoeffReadCost);
622
+ }
623
+
624
+ inline Index nonZerosEstimate() const {
625
+ return m_lhsImpl.nonZerosEstimate();
626
+ }
627
+
628
+ protected:
629
+ const BinaryOp m_functor;
630
+ evaluator<LhsArg> m_lhsImpl;
631
+ evaluator<RhsArg> m_rhsImpl;
632
+ };
633
+
634
+ }
635
+
636
+ /***************************************************************************
637
+ * Implementation of SparseMatrixBase and SparseCwise functions/operators
638
+ ***************************************************************************/
639
+
640
+ template<typename Derived>
641
+ template<typename OtherDerived>
642
+ Derived& SparseMatrixBase<Derived>::operator+=(const EigenBase<OtherDerived> &other)
643
+ {
644
+ call_assignment(derived(), other.derived(), internal::add_assign_op<Scalar,typename OtherDerived::Scalar>());
645
+ return derived();
646
+ }
647
+
648
+ template<typename Derived>
649
+ template<typename OtherDerived>
650
+ Derived& SparseMatrixBase<Derived>::operator-=(const EigenBase<OtherDerived> &other)
651
+ {
652
+ call_assignment(derived(), other.derived(), internal::assign_op<Scalar,typename OtherDerived::Scalar>());
653
+ return derived();
654
+ }
655
+
656
+ template<typename Derived>
657
+ template<typename OtherDerived>
658
+ EIGEN_STRONG_INLINE Derived &
659
+ SparseMatrixBase<Derived>::operator-=(const SparseMatrixBase<OtherDerived> &other)
660
+ {
661
+ return derived() = derived() - other.derived();
662
+ }
663
+
664
+ template<typename Derived>
665
+ template<typename OtherDerived>
666
+ EIGEN_STRONG_INLINE Derived &
667
+ SparseMatrixBase<Derived>::operator+=(const SparseMatrixBase<OtherDerived>& other)
668
+ {
669
+ return derived() = derived() + other.derived();
670
+ }
671
+
672
+ template<typename Derived>
673
+ template<typename OtherDerived>
674
+ Derived& SparseMatrixBase<Derived>::operator+=(const DiagonalBase<OtherDerived>& other)
675
+ {
676
+ call_assignment_no_alias(derived(), other.derived(), internal::add_assign_op<Scalar,typename OtherDerived::Scalar>());
677
+ return derived();
678
+ }
679
+
680
+ template<typename Derived>
681
+ template<typename OtherDerived>
682
+ Derived& SparseMatrixBase<Derived>::operator-=(const DiagonalBase<OtherDerived>& other)
683
+ {
684
+ call_assignment_no_alias(derived(), other.derived(), internal::sub_assign_op<Scalar,typename OtherDerived::Scalar>());
685
+ return derived();
686
+ }
687
+
688
+ template<typename Derived>
689
+ template<typename OtherDerived>
690
+ EIGEN_STRONG_INLINE const typename SparseMatrixBase<Derived>::template CwiseProductDenseReturnType<OtherDerived>::Type
691
+ SparseMatrixBase<Derived>::cwiseProduct(const MatrixBase<OtherDerived> &other) const
692
+ {
693
+ return typename CwiseProductDenseReturnType<OtherDerived>::Type(derived(), other.derived());
694
+ }
695
+
696
+ template<typename DenseDerived, typename SparseDerived>
697
+ EIGEN_STRONG_INLINE const CwiseBinaryOp<internal::scalar_sum_op<typename DenseDerived::Scalar,typename SparseDerived::Scalar>, const DenseDerived, const SparseDerived>
698
+ operator+(const MatrixBase<DenseDerived> &a, const SparseMatrixBase<SparseDerived> &b)
699
+ {
700
+ return CwiseBinaryOp<internal::scalar_sum_op<typename DenseDerived::Scalar,typename SparseDerived::Scalar>, const DenseDerived, const SparseDerived>(a.derived(), b.derived());
701
+ }
702
+
703
+ template<typename SparseDerived, typename DenseDerived>
704
+ EIGEN_STRONG_INLINE const CwiseBinaryOp<internal::scalar_sum_op<typename SparseDerived::Scalar,typename DenseDerived::Scalar>, const SparseDerived, const DenseDerived>
705
+ operator+(const SparseMatrixBase<SparseDerived> &a, const MatrixBase<DenseDerived> &b)
706
+ {
707
+ return CwiseBinaryOp<internal::scalar_sum_op<typename SparseDerived::Scalar,typename DenseDerived::Scalar>, const SparseDerived, const DenseDerived>(a.derived(), b.derived());
708
+ }
709
+
710
+ template<typename DenseDerived, typename SparseDerived>
711
+ EIGEN_STRONG_INLINE const CwiseBinaryOp<internal::scalar_difference_op<typename DenseDerived::Scalar,typename SparseDerived::Scalar>, const DenseDerived, const SparseDerived>
712
+ operator-(const MatrixBase<DenseDerived> &a, const SparseMatrixBase<SparseDerived> &b)
713
+ {
714
+ return CwiseBinaryOp<internal::scalar_difference_op<typename DenseDerived::Scalar,typename SparseDerived::Scalar>, const DenseDerived, const SparseDerived>(a.derived(), b.derived());
715
+ }
716
+
717
+ template<typename SparseDerived, typename DenseDerived>
718
+ EIGEN_STRONG_INLINE const CwiseBinaryOp<internal::scalar_difference_op<typename SparseDerived::Scalar,typename DenseDerived::Scalar>, const SparseDerived, const DenseDerived>
719
+ operator-(const SparseMatrixBase<SparseDerived> &a, const MatrixBase<DenseDerived> &b)
720
+ {
721
+ return CwiseBinaryOp<internal::scalar_difference_op<typename SparseDerived::Scalar,typename DenseDerived::Scalar>, const SparseDerived, const DenseDerived>(a.derived(), b.derived());
722
+ }
723
+
724
+ } // end namespace Eigen
725
+
726
+ #endif // EIGEN_SPARSE_CWISE_BINARY_OP_H