tomoto 0.2.2 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (369) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +10 -0
  3. data/README.md +8 -10
  4. data/ext/tomoto/ct.cpp +11 -11
  5. data/ext/tomoto/dmr.cpp +14 -13
  6. data/ext/tomoto/dt.cpp +14 -14
  7. data/ext/tomoto/extconf.rb +7 -5
  8. data/ext/tomoto/gdmr.cpp +7 -7
  9. data/ext/tomoto/hdp.cpp +9 -9
  10. data/ext/tomoto/hlda.cpp +13 -13
  11. data/ext/tomoto/hpa.cpp +5 -5
  12. data/ext/tomoto/lda.cpp +42 -39
  13. data/ext/tomoto/llda.cpp +6 -6
  14. data/ext/tomoto/mglda.cpp +15 -15
  15. data/ext/tomoto/pa.cpp +6 -6
  16. data/ext/tomoto/plda.cpp +6 -6
  17. data/ext/tomoto/slda.cpp +8 -8
  18. data/ext/tomoto/{ext.cpp → tomoto.cpp} +8 -8
  19. data/ext/tomoto/utils.h +16 -70
  20. data/lib/tomoto/version.rb +1 -1
  21. data/lib/tomoto.rb +5 -1
  22. data/vendor/EigenRand/EigenRand/Core.h +10 -10
  23. data/vendor/EigenRand/EigenRand/Dists/Basic.h +208 -9
  24. data/vendor/EigenRand/EigenRand/Dists/Discrete.h +52 -31
  25. data/vendor/EigenRand/EigenRand/Dists/GammaPoisson.h +9 -8
  26. data/vendor/EigenRand/EigenRand/Dists/NormalExp.h +28 -21
  27. data/vendor/EigenRand/EigenRand/EigenRand +11 -6
  28. data/vendor/EigenRand/EigenRand/Macro.h +13 -7
  29. data/vendor/EigenRand/EigenRand/MorePacketMath.h +348 -740
  30. data/vendor/EigenRand/EigenRand/MvDists/Multinomial.h +5 -3
  31. data/vendor/EigenRand/EigenRand/MvDists/MvNormal.h +9 -3
  32. data/vendor/EigenRand/EigenRand/PacketFilter.h +11 -253
  33. data/vendor/EigenRand/EigenRand/PacketRandomEngine.h +21 -47
  34. data/vendor/EigenRand/EigenRand/RandUtils.h +50 -344
  35. data/vendor/EigenRand/EigenRand/arch/AVX/MorePacketMath.h +619 -0
  36. data/vendor/EigenRand/EigenRand/arch/AVX/PacketFilter.h +149 -0
  37. data/vendor/EigenRand/EigenRand/arch/AVX/RandUtils.h +228 -0
  38. data/vendor/EigenRand/EigenRand/arch/NEON/MorePacketMath.h +473 -0
  39. data/vendor/EigenRand/EigenRand/arch/NEON/PacketFilter.h +142 -0
  40. data/vendor/EigenRand/EigenRand/arch/NEON/RandUtils.h +126 -0
  41. data/vendor/EigenRand/EigenRand/arch/SSE/MorePacketMath.h +501 -0
  42. data/vendor/EigenRand/EigenRand/arch/SSE/PacketFilter.h +133 -0
  43. data/vendor/EigenRand/EigenRand/arch/SSE/RandUtils.h +120 -0
  44. data/vendor/EigenRand/EigenRand/doc.h +24 -12
  45. data/vendor/EigenRand/README.md +57 -4
  46. data/vendor/eigen/COPYING.APACHE +203 -0
  47. data/vendor/eigen/COPYING.BSD +1 -1
  48. data/vendor/eigen/COPYING.MINPACK +51 -52
  49. data/vendor/eigen/Eigen/Cholesky +0 -1
  50. data/vendor/eigen/Eigen/Core +112 -265
  51. data/vendor/eigen/Eigen/Eigenvalues +2 -3
  52. data/vendor/eigen/Eigen/Geometry +5 -8
  53. data/vendor/eigen/Eigen/Householder +0 -1
  54. data/vendor/eigen/Eigen/Jacobi +0 -1
  55. data/vendor/eigen/Eigen/KLUSupport +41 -0
  56. data/vendor/eigen/Eigen/LU +2 -5
  57. data/vendor/eigen/Eigen/OrderingMethods +0 -3
  58. data/vendor/eigen/Eigen/PaStiXSupport +1 -0
  59. data/vendor/eigen/Eigen/PardisoSupport +0 -0
  60. data/vendor/eigen/Eigen/QR +2 -3
  61. data/vendor/eigen/Eigen/QtAlignedMalloc +0 -1
  62. data/vendor/eigen/Eigen/SVD +0 -1
  63. data/vendor/eigen/Eigen/Sparse +0 -2
  64. data/vendor/eigen/Eigen/SparseCholesky +0 -8
  65. data/vendor/eigen/Eigen/SparseLU +4 -0
  66. data/vendor/eigen/Eigen/SparseQR +0 -1
  67. data/vendor/eigen/Eigen/src/Cholesky/LDLT.h +42 -27
  68. data/vendor/eigen/Eigen/src/Cholesky/LLT.h +39 -23
  69. data/vendor/eigen/Eigen/src/CholmodSupport/CholmodSupport.h +90 -47
  70. data/vendor/eigen/Eigen/src/Core/ArithmeticSequence.h +413 -0
  71. data/vendor/eigen/Eigen/src/Core/Array.h +99 -11
  72. data/vendor/eigen/Eigen/src/Core/ArrayBase.h +3 -3
  73. data/vendor/eigen/Eigen/src/Core/ArrayWrapper.h +21 -21
  74. data/vendor/eigen/Eigen/src/Core/Assign.h +1 -1
  75. data/vendor/eigen/Eigen/src/Core/AssignEvaluator.h +125 -50
  76. data/vendor/eigen/Eigen/src/Core/Assign_MKL.h +10 -10
  77. data/vendor/eigen/Eigen/src/Core/BandMatrix.h +16 -16
  78. data/vendor/eigen/Eigen/src/Core/Block.h +56 -60
  79. data/vendor/eigen/Eigen/src/Core/BooleanRedux.h +29 -31
  80. data/vendor/eigen/Eigen/src/Core/CommaInitializer.h +7 -3
  81. data/vendor/eigen/Eigen/src/Core/CoreEvaluators.h +325 -272
  82. data/vendor/eigen/Eigen/src/Core/CoreIterators.h +5 -0
  83. data/vendor/eigen/Eigen/src/Core/CwiseBinaryOp.h +21 -22
  84. data/vendor/eigen/Eigen/src/Core/CwiseNullaryOp.h +153 -18
  85. data/vendor/eigen/Eigen/src/Core/CwiseUnaryOp.h +6 -6
  86. data/vendor/eigen/Eigen/src/Core/CwiseUnaryView.h +14 -10
  87. data/vendor/eigen/Eigen/src/Core/DenseBase.h +132 -42
  88. data/vendor/eigen/Eigen/src/Core/DenseCoeffsBase.h +25 -21
  89. data/vendor/eigen/Eigen/src/Core/DenseStorage.h +153 -71
  90. data/vendor/eigen/Eigen/src/Core/Diagonal.h +21 -23
  91. data/vendor/eigen/Eigen/src/Core/DiagonalMatrix.h +50 -2
  92. data/vendor/eigen/Eigen/src/Core/DiagonalProduct.h +1 -1
  93. data/vendor/eigen/Eigen/src/Core/Dot.h +10 -10
  94. data/vendor/eigen/Eigen/src/Core/EigenBase.h +10 -9
  95. data/vendor/eigen/Eigen/src/Core/ForceAlignedAccess.h +8 -4
  96. data/vendor/eigen/Eigen/src/Core/Fuzzy.h +3 -3
  97. data/vendor/eigen/Eigen/src/Core/GeneralProduct.h +20 -10
  98. data/vendor/eigen/Eigen/src/Core/GenericPacketMath.h +599 -152
  99. data/vendor/eigen/Eigen/src/Core/GlobalFunctions.h +40 -33
  100. data/vendor/eigen/Eigen/src/Core/IO.h +40 -7
  101. data/vendor/eigen/Eigen/src/Core/IndexedView.h +237 -0
  102. data/vendor/eigen/Eigen/src/Core/Inverse.h +9 -10
  103. data/vendor/eigen/Eigen/src/Core/Map.h +7 -7
  104. data/vendor/eigen/Eigen/src/Core/MapBase.h +10 -3
  105. data/vendor/eigen/Eigen/src/Core/MathFunctions.h +767 -125
  106. data/vendor/eigen/Eigen/src/Core/MathFunctionsImpl.h +118 -19
  107. data/vendor/eigen/Eigen/src/Core/Matrix.h +131 -25
  108. data/vendor/eigen/Eigen/src/Core/MatrixBase.h +21 -3
  109. data/vendor/eigen/Eigen/src/Core/NestByValue.h +25 -50
  110. data/vendor/eigen/Eigen/src/Core/NoAlias.h +4 -3
  111. data/vendor/eigen/Eigen/src/Core/NumTraits.h +107 -20
  112. data/vendor/eigen/Eigen/src/Core/PartialReduxEvaluator.h +232 -0
  113. data/vendor/eigen/Eigen/src/Core/PermutationMatrix.h +3 -31
  114. data/vendor/eigen/Eigen/src/Core/PlainObjectBase.h +152 -59
  115. data/vendor/eigen/Eigen/src/Core/Product.h +30 -25
  116. data/vendor/eigen/Eigen/src/Core/ProductEvaluators.h +192 -125
  117. data/vendor/eigen/Eigen/src/Core/Random.h +37 -1
  118. data/vendor/eigen/Eigen/src/Core/Redux.h +180 -170
  119. data/vendor/eigen/Eigen/src/Core/Ref.h +121 -23
  120. data/vendor/eigen/Eigen/src/Core/Replicate.h +8 -8
  121. data/vendor/eigen/Eigen/src/Core/Reshaped.h +454 -0
  122. data/vendor/eigen/Eigen/src/Core/ReturnByValue.h +7 -5
  123. data/vendor/eigen/Eigen/src/Core/Reverse.h +18 -12
  124. data/vendor/eigen/Eigen/src/Core/Select.h +8 -6
  125. data/vendor/eigen/Eigen/src/Core/SelfAdjointView.h +33 -20
  126. data/vendor/eigen/Eigen/src/Core/Solve.h +14 -14
  127. data/vendor/eigen/Eigen/src/Core/SolveTriangular.h +16 -16
  128. data/vendor/eigen/Eigen/src/Core/SolverBase.h +41 -3
  129. data/vendor/eigen/Eigen/src/Core/StableNorm.h +100 -70
  130. data/vendor/eigen/Eigen/src/Core/StlIterators.h +463 -0
  131. data/vendor/eigen/Eigen/src/Core/Stride.h +9 -4
  132. data/vendor/eigen/Eigen/src/Core/Swap.h +5 -4
  133. data/vendor/eigen/Eigen/src/Core/Transpose.h +88 -27
  134. data/vendor/eigen/Eigen/src/Core/Transpositions.h +26 -47
  135. data/vendor/eigen/Eigen/src/Core/TriangularMatrix.h +93 -75
  136. data/vendor/eigen/Eigen/src/Core/VectorBlock.h +5 -5
  137. data/vendor/eigen/Eigen/src/Core/VectorwiseOp.h +159 -70
  138. data/vendor/eigen/Eigen/src/Core/Visitor.h +137 -29
  139. data/vendor/eigen/Eigen/src/Core/arch/AVX/Complex.h +50 -129
  140. data/vendor/eigen/Eigen/src/Core/arch/AVX/MathFunctions.h +126 -337
  141. data/vendor/eigen/Eigen/src/Core/arch/AVX/PacketMath.h +1092 -155
  142. data/vendor/eigen/Eigen/src/Core/arch/AVX/TypeCasting.h +65 -1
  143. data/vendor/eigen/Eigen/src/Core/arch/AVX512/Complex.h +422 -0
  144. data/vendor/eigen/Eigen/src/Core/arch/AVX512/MathFunctions.h +207 -236
  145. data/vendor/eigen/Eigen/src/Core/arch/AVX512/PacketMath.h +1482 -495
  146. data/vendor/eigen/Eigen/src/Core/arch/AVX512/TypeCasting.h +89 -0
  147. data/vendor/eigen/Eigen/src/Core/arch/AltiVec/Complex.h +152 -165
  148. data/vendor/eigen/Eigen/src/Core/arch/AltiVec/MathFunctions.h +19 -251
  149. data/vendor/eigen/Eigen/src/Core/arch/AltiVec/MatrixProduct.h +2937 -0
  150. data/vendor/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h +221 -0
  151. data/vendor/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h +629 -0
  152. data/vendor/eigen/Eigen/src/Core/arch/AltiVec/PacketMath.h +2042 -392
  153. data/vendor/eigen/Eigen/src/Core/arch/CUDA/Complex.h +235 -80
  154. data/vendor/eigen/Eigen/src/Core/arch/Default/BFloat16.h +700 -0
  155. data/vendor/eigen/Eigen/src/Core/arch/Default/ConjHelper.h +102 -14
  156. data/vendor/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h +1649 -0
  157. data/vendor/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h +110 -0
  158. data/vendor/eigen/Eigen/src/Core/arch/Default/Half.h +942 -0
  159. data/vendor/eigen/Eigen/src/Core/arch/Default/Settings.h +1 -1
  160. data/vendor/eigen/Eigen/src/Core/arch/Default/TypeCasting.h +120 -0
  161. data/vendor/eigen/Eigen/src/Core/arch/{CUDA → GPU}/MathFunctions.h +16 -4
  162. data/vendor/eigen/Eigen/src/Core/arch/GPU/PacketMath.h +1685 -0
  163. data/vendor/eigen/Eigen/src/Core/arch/GPU/TypeCasting.h +80 -0
  164. data/vendor/eigen/Eigen/src/Core/arch/HIP/hcc/math_constants.h +23 -0
  165. data/vendor/eigen/Eigen/src/Core/arch/MSA/Complex.h +648 -0
  166. data/vendor/eigen/Eigen/src/Core/arch/MSA/MathFunctions.h +387 -0
  167. data/vendor/eigen/Eigen/src/Core/arch/MSA/PacketMath.h +1233 -0
  168. data/vendor/eigen/Eigen/src/Core/arch/NEON/Complex.h +313 -219
  169. data/vendor/eigen/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h +183 -0
  170. data/vendor/eigen/Eigen/src/Core/arch/NEON/MathFunctions.h +54 -70
  171. data/vendor/eigen/Eigen/src/Core/arch/NEON/PacketMath.h +4376 -549
  172. data/vendor/eigen/Eigen/src/Core/arch/NEON/TypeCasting.h +1419 -0
  173. data/vendor/eigen/Eigen/src/Core/arch/SSE/Complex.h +59 -179
  174. data/vendor/eigen/Eigen/src/Core/arch/SSE/MathFunctions.h +65 -428
  175. data/vendor/eigen/Eigen/src/Core/arch/SSE/PacketMath.h +893 -283
  176. data/vendor/eigen/Eigen/src/Core/arch/SSE/TypeCasting.h +65 -0
  177. data/vendor/eigen/Eigen/src/Core/arch/SVE/MathFunctions.h +44 -0
  178. data/vendor/eigen/Eigen/src/Core/arch/SVE/PacketMath.h +752 -0
  179. data/vendor/eigen/Eigen/src/Core/arch/SVE/TypeCasting.h +49 -0
  180. data/vendor/eigen/Eigen/src/Core/arch/SYCL/InteropHeaders.h +232 -0
  181. data/vendor/eigen/Eigen/src/Core/arch/SYCL/MathFunctions.h +301 -0
  182. data/vendor/eigen/Eigen/src/Core/arch/SYCL/PacketMath.h +670 -0
  183. data/vendor/eigen/Eigen/src/Core/arch/SYCL/SyclMemoryModel.h +694 -0
  184. data/vendor/eigen/Eigen/src/Core/arch/SYCL/TypeCasting.h +85 -0
  185. data/vendor/eigen/Eigen/src/Core/arch/ZVector/Complex.h +212 -183
  186. data/vendor/eigen/Eigen/src/Core/arch/ZVector/MathFunctions.h +101 -5
  187. data/vendor/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h +510 -395
  188. data/vendor/eigen/Eigen/src/Core/functors/AssignmentFunctors.h +11 -2
  189. data/vendor/eigen/Eigen/src/Core/functors/BinaryFunctors.h +112 -46
  190. data/vendor/eigen/Eigen/src/Core/functors/NullaryFunctors.h +31 -30
  191. data/vendor/eigen/Eigen/src/Core/functors/StlFunctors.h +32 -2
  192. data/vendor/eigen/Eigen/src/Core/functors/UnaryFunctors.h +355 -16
  193. data/vendor/eigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h +1075 -586
  194. data/vendor/eigen/Eigen/src/Core/products/GeneralMatrixMatrix.h +49 -24
  195. data/vendor/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +41 -35
  196. data/vendor/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h +6 -6
  197. data/vendor/eigen/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h +4 -2
  198. data/vendor/eigen/Eigen/src/Core/products/GeneralMatrixVector.h +382 -483
  199. data/vendor/eigen/Eigen/src/Core/products/Parallelizer.h +22 -5
  200. data/vendor/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +53 -30
  201. data/vendor/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h +16 -8
  202. data/vendor/eigen/Eigen/src/Core/products/SelfadjointMatrixVector.h +8 -6
  203. data/vendor/eigen/Eigen/src/Core/products/SelfadjointProduct.h +4 -4
  204. data/vendor/eigen/Eigen/src/Core/products/SelfadjointRank2Update.h +5 -4
  205. data/vendor/eigen/Eigen/src/Core/products/TriangularMatrixMatrix.h +33 -27
  206. data/vendor/eigen/Eigen/src/Core/products/TriangularMatrixMatrix_BLAS.h +14 -12
  207. data/vendor/eigen/Eigen/src/Core/products/TriangularSolverMatrix.h +36 -34
  208. data/vendor/eigen/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h +8 -4
  209. data/vendor/eigen/Eigen/src/Core/products/TriangularSolverVector.h +13 -10
  210. data/vendor/eigen/Eigen/src/Core/util/BlasUtil.h +304 -119
  211. data/vendor/eigen/Eigen/src/Core/util/ConfigureVectorization.h +512 -0
  212. data/vendor/eigen/Eigen/src/Core/util/Constants.h +25 -9
  213. data/vendor/eigen/Eigen/src/Core/util/DisableStupidWarnings.h +26 -3
  214. data/vendor/eigen/Eigen/src/Core/util/ForwardDeclarations.h +29 -9
  215. data/vendor/eigen/Eigen/src/Core/util/IndexedViewHelper.h +186 -0
  216. data/vendor/eigen/Eigen/src/Core/util/IntegralConstant.h +272 -0
  217. data/vendor/eigen/Eigen/src/Core/util/MKL_support.h +8 -1
  218. data/vendor/eigen/Eigen/src/Core/util/Macros.h +709 -246
  219. data/vendor/eigen/Eigen/src/Core/util/Memory.h +222 -52
  220. data/vendor/eigen/Eigen/src/Core/util/Meta.h +355 -77
  221. data/vendor/eigen/Eigen/src/Core/util/ReenableStupidWarnings.h +5 -1
  222. data/vendor/eigen/Eigen/src/Core/util/ReshapedHelper.h +51 -0
  223. data/vendor/eigen/Eigen/src/Core/util/StaticAssert.h +8 -5
  224. data/vendor/eigen/Eigen/src/Core/util/SymbolicIndex.h +293 -0
  225. data/vendor/eigen/Eigen/src/Core/util/XprHelper.h +65 -30
  226. data/vendor/eigen/Eigen/src/Eigenvalues/ComplexEigenSolver.h +1 -1
  227. data/vendor/eigen/Eigen/src/Eigenvalues/ComplexSchur.h +7 -4
  228. data/vendor/eigen/Eigen/src/Eigenvalues/EigenSolver.h +2 -2
  229. data/vendor/eigen/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h +1 -1
  230. data/vendor/eigen/Eigen/src/Eigenvalues/HessenbergDecomposition.h +2 -2
  231. data/vendor/eigen/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h +2 -2
  232. data/vendor/eigen/Eigen/src/Eigenvalues/RealQZ.h +9 -6
  233. data/vendor/eigen/Eigen/src/Eigenvalues/RealSchur.h +21 -9
  234. data/vendor/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +77 -43
  235. data/vendor/eigen/Eigen/src/Eigenvalues/Tridiagonalization.h +20 -15
  236. data/vendor/eigen/Eigen/src/Geometry/AlignedBox.h +99 -5
  237. data/vendor/eigen/Eigen/src/Geometry/AngleAxis.h +4 -4
  238. data/vendor/eigen/Eigen/src/Geometry/EulerAngles.h +3 -3
  239. data/vendor/eigen/Eigen/src/Geometry/Homogeneous.h +15 -11
  240. data/vendor/eigen/Eigen/src/Geometry/Hyperplane.h +1 -1
  241. data/vendor/eigen/Eigen/src/Geometry/OrthoMethods.h +3 -2
  242. data/vendor/eigen/Eigen/src/Geometry/ParametrizedLine.h +39 -2
  243. data/vendor/eigen/Eigen/src/Geometry/Quaternion.h +70 -14
  244. data/vendor/eigen/Eigen/src/Geometry/Rotation2D.h +3 -3
  245. data/vendor/eigen/Eigen/src/Geometry/Scaling.h +23 -5
  246. data/vendor/eigen/Eigen/src/Geometry/Transform.h +88 -67
  247. data/vendor/eigen/Eigen/src/Geometry/Translation.h +6 -12
  248. data/vendor/eigen/Eigen/src/Geometry/Umeyama.h +1 -1
  249. data/vendor/eigen/Eigen/src/Geometry/arch/Geometry_SIMD.h +168 -0
  250. data/vendor/eigen/Eigen/src/Householder/BlockHouseholder.h +9 -2
  251. data/vendor/eigen/Eigen/src/Householder/Householder.h +8 -4
  252. data/vendor/eigen/Eigen/src/Householder/HouseholderSequence.h +123 -48
  253. data/vendor/eigen/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +15 -15
  254. data/vendor/eigen/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +7 -23
  255. data/vendor/eigen/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +5 -22
  256. data/vendor/eigen/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +41 -47
  257. data/vendor/eigen/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +51 -60
  258. data/vendor/eigen/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +70 -20
  259. data/vendor/eigen/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h +2 -20
  260. data/vendor/eigen/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h +11 -9
  261. data/vendor/eigen/Eigen/src/Jacobi/Jacobi.h +31 -10
  262. data/vendor/eigen/Eigen/src/KLUSupport/KLUSupport.h +358 -0
  263. data/vendor/eigen/Eigen/src/LU/Determinant.h +35 -19
  264. data/vendor/eigen/Eigen/src/LU/FullPivLU.h +29 -43
  265. data/vendor/eigen/Eigen/src/LU/InverseImpl.h +25 -8
  266. data/vendor/eigen/Eigen/src/LU/PartialPivLU.h +71 -58
  267. data/vendor/eigen/Eigen/src/LU/arch/InverseSize4.h +351 -0
  268. data/vendor/eigen/Eigen/src/OrderingMethods/Amd.h +7 -17
  269. data/vendor/eigen/Eigen/src/OrderingMethods/Eigen_Colamd.h +297 -277
  270. data/vendor/eigen/Eigen/src/OrderingMethods/Ordering.h +6 -10
  271. data/vendor/eigen/Eigen/src/PaStiXSupport/PaStiXSupport.h +1 -1
  272. data/vendor/eigen/Eigen/src/PardisoSupport/PardisoSupport.h +9 -7
  273. data/vendor/eigen/Eigen/src/QR/ColPivHouseholderQR.h +41 -20
  274. data/vendor/eigen/Eigen/src/QR/CompleteOrthogonalDecomposition.h +100 -27
  275. data/vendor/eigen/Eigen/src/QR/FullPivHouseholderQR.h +59 -22
  276. data/vendor/eigen/Eigen/src/QR/HouseholderQR.h +48 -23
  277. data/vendor/eigen/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h +25 -3
  278. data/vendor/eigen/Eigen/src/SVD/BDCSVD.h +183 -63
  279. data/vendor/eigen/Eigen/src/SVD/JacobiSVD.h +22 -14
  280. data/vendor/eigen/Eigen/src/SVD/SVDBase.h +83 -22
  281. data/vendor/eigen/Eigen/src/SVD/UpperBidiagonalization.h +3 -3
  282. data/vendor/eigen/Eigen/src/SparseCholesky/SimplicialCholesky.h +17 -9
  283. data/vendor/eigen/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +12 -37
  284. data/vendor/eigen/Eigen/src/SparseCore/AmbiVector.h +3 -2
  285. data/vendor/eigen/Eigen/src/SparseCore/CompressedStorage.h +16 -0
  286. data/vendor/eigen/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +6 -6
  287. data/vendor/eigen/Eigen/src/SparseCore/SparseAssign.h +81 -27
  288. data/vendor/eigen/Eigen/src/SparseCore/SparseBlock.h +25 -57
  289. data/vendor/eigen/Eigen/src/SparseCore/SparseCompressedBase.h +40 -11
  290. data/vendor/eigen/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +11 -15
  291. data/vendor/eigen/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +4 -2
  292. data/vendor/eigen/Eigen/src/SparseCore/SparseDenseProduct.h +30 -8
  293. data/vendor/eigen/Eigen/src/SparseCore/SparseMatrix.h +126 -11
  294. data/vendor/eigen/Eigen/src/SparseCore/SparseMatrixBase.h +5 -12
  295. data/vendor/eigen/Eigen/src/SparseCore/SparseProduct.h +13 -1
  296. data/vendor/eigen/Eigen/src/SparseCore/SparseRef.h +7 -7
  297. data/vendor/eigen/Eigen/src/SparseCore/SparseSelfAdjointView.h +5 -2
  298. data/vendor/eigen/Eigen/src/SparseCore/SparseUtil.h +8 -0
  299. data/vendor/eigen/Eigen/src/SparseCore/SparseVector.h +1 -1
  300. data/vendor/eigen/Eigen/src/SparseCore/SparseView.h +1 -0
  301. data/vendor/eigen/Eigen/src/SparseLU/SparseLU.h +162 -12
  302. data/vendor/eigen/Eigen/src/SparseLU/SparseLU_Memory.h +1 -1
  303. data/vendor/eigen/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h +76 -2
  304. data/vendor/eigen/Eigen/src/SparseLU/SparseLU_column_dfs.h +2 -2
  305. data/vendor/eigen/Eigen/src/SparseLU/SparseLU_gemm_kernel.h +1 -1
  306. data/vendor/eigen/Eigen/src/SparseLU/SparseLU_panel_bmod.h +1 -1
  307. data/vendor/eigen/Eigen/src/SparseQR/SparseQR.h +19 -6
  308. data/vendor/eigen/Eigen/src/StlSupport/StdDeque.h +2 -12
  309. data/vendor/eigen/Eigen/src/StlSupport/StdList.h +2 -2
  310. data/vendor/eigen/Eigen/src/StlSupport/StdVector.h +2 -2
  311. data/vendor/eigen/Eigen/src/SuperLUSupport/SuperLUSupport.h +6 -8
  312. data/vendor/eigen/Eigen/src/UmfPackSupport/UmfPackSupport.h +175 -39
  313. data/vendor/eigen/Eigen/src/misc/lapacke.h +5 -4
  314. data/vendor/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.h +28 -2
  315. data/vendor/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.h +155 -11
  316. data/vendor/eigen/Eigen/src/plugins/BlockMethods.h +626 -242
  317. data/vendor/eigen/Eigen/src/plugins/CommonCwiseUnaryOps.h +14 -0
  318. data/vendor/eigen/Eigen/src/plugins/IndexedViewMethods.h +262 -0
  319. data/vendor/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.h +4 -4
  320. data/vendor/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.h +10 -0
  321. data/vendor/eigen/Eigen/src/plugins/ReshapedMethods.h +149 -0
  322. data/vendor/eigen/README.md +2 -0
  323. data/vendor/eigen/bench/btl/README +1 -1
  324. data/vendor/eigen/bench/tensors/README +6 -7
  325. data/vendor/eigen/ci/README.md +56 -0
  326. data/vendor/eigen/demos/mix_eigen_and_c/README +1 -1
  327. data/vendor/eigen/unsupported/Eigen/CXX11/src/Tensor/README.md +213 -158
  328. data/vendor/eigen/unsupported/README.txt +1 -1
  329. data/vendor/tomotopy/README.kr.rst +78 -0
  330. data/vendor/tomotopy/README.rst +75 -0
  331. data/vendor/tomotopy/src/Labeling/FoRelevance.cpp +2 -2
  332. data/vendor/tomotopy/src/Labeling/Phraser.hpp +4 -4
  333. data/vendor/tomotopy/src/TopicModel/CTModel.hpp +7 -3
  334. data/vendor/tomotopy/src/TopicModel/DMRModel.hpp +7 -3
  335. data/vendor/tomotopy/src/TopicModel/DTModel.hpp +6 -3
  336. data/vendor/tomotopy/src/TopicModel/GDMRModel.hpp +2 -2
  337. data/vendor/tomotopy/src/TopicModel/HDP.h +1 -0
  338. data/vendor/tomotopy/src/TopicModel/HDPModel.hpp +57 -6
  339. data/vendor/tomotopy/src/TopicModel/HLDAModel.hpp +6 -3
  340. data/vendor/tomotopy/src/TopicModel/HPAModel.hpp +3 -2
  341. data/vendor/tomotopy/src/TopicModel/LDA.h +3 -3
  342. data/vendor/tomotopy/src/TopicModel/LDACVB0Model.hpp +5 -5
  343. data/vendor/tomotopy/src/TopicModel/LDAModel.hpp +50 -19
  344. data/vendor/tomotopy/src/TopicModel/LLDAModel.hpp +6 -2
  345. data/vendor/tomotopy/src/TopicModel/MGLDAModel.hpp +3 -2
  346. data/vendor/tomotopy/src/TopicModel/PAModel.hpp +1 -1
  347. data/vendor/tomotopy/src/TopicModel/PLDAModel.hpp +6 -2
  348. data/vendor/tomotopy/src/TopicModel/PT.h +3 -1
  349. data/vendor/tomotopy/src/TopicModel/PTModel.hpp +36 -3
  350. data/vendor/tomotopy/src/TopicModel/SLDAModel.hpp +6 -3
  351. data/vendor/tomotopy/src/TopicModel/TopicModel.hpp +55 -26
  352. data/vendor/tomotopy/src/Utils/AliasMethod.hpp +5 -4
  353. data/vendor/tomotopy/src/Utils/Dictionary.h +2 -2
  354. data/vendor/tomotopy/src/Utils/EigenAddonOps.hpp +36 -1
  355. data/vendor/tomotopy/src/Utils/MultiNormalDistribution.hpp +1 -1
  356. data/vendor/tomotopy/src/Utils/TruncMultiNormal.hpp +1 -1
  357. data/vendor/tomotopy/src/Utils/exception.h +6 -0
  358. data/vendor/tomotopy/src/Utils/math.h +2 -2
  359. data/vendor/tomotopy/src/Utils/sample.hpp +14 -12
  360. data/vendor/tomotopy/src/Utils/serializer.hpp +30 -5
  361. data/vendor/tomotopy/src/Utils/sse_gamma.h +0 -3
  362. metadata +64 -18
  363. data/vendor/eigen/Eigen/CMakeLists.txt +0 -19
  364. data/vendor/eigen/Eigen/src/Core/arch/CUDA/Half.h +0 -674
  365. data/vendor/eigen/Eigen/src/Core/arch/CUDA/PacketMath.h +0 -333
  366. data/vendor/eigen/Eigen/src/Core/arch/CUDA/PacketMathHalf.h +0 -1124
  367. data/vendor/eigen/Eigen/src/Core/arch/CUDA/TypeCasting.h +0 -212
  368. data/vendor/eigen/Eigen/src/Geometry/arch/Geometry_SSE.h +0 -161
  369. data/vendor/eigen/Eigen/src/LU/arch/Inverse_SSE.h +0 -338
@@ -1,7 +1,7 @@
1
1
  // This file is part of Eigen, a lightweight C++ template library
2
2
  // for linear algebra.
3
3
  //
4
- // Copyright (C) 2008-2010 Gael Guennebaud <gael.guennebaud@inria.fr>
4
+ // Copyright (C) 2008-2019 Gael Guennebaud <gael.guennebaud@inria.fr>
5
5
  // Copyright (C) 2006-2008 Benoit Jacob <jacob.benoit.1@gmail.com>
6
6
  //
7
7
  // This Source Code Form is subject to the terms of the Mozilla
@@ -65,10 +65,10 @@ class PartialReduxExpr : public internal::dense_xpr_base< PartialReduxExpr<Matri
65
65
  explicit PartialReduxExpr(const MatrixType& mat, const MemberOp& func = MemberOp())
66
66
  : m_matrix(mat), m_functor(func) {}
67
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()); }
68
+ EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
69
+ Index rows() const EIGEN_NOEXCEPT { return (Direction==Vertical ? 1 : m_matrix.rows()); }
70
+ EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
71
+ Index cols() const EIGEN_NOEXCEPT { return (Direction==Horizontal ? 1 : m_matrix.cols()); }
72
72
 
73
73
  EIGEN_DEVICE_FUNC
74
74
  typename MatrixType::Nested nestedExpression() const { return m_matrix; }
@@ -81,39 +81,46 @@ class PartialReduxExpr : public internal::dense_xpr_base< PartialReduxExpr<Matri
81
81
  const MemberOp m_functor;
82
82
  };
83
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(); } \
84
+ template<typename A,typename B> struct partial_redux_dummy_func;
85
+
86
+ #define EIGEN_MAKE_PARTIAL_REDUX_FUNCTOR(MEMBER,COST,VECTORIZABLE,BINARYOP) \
87
+ template <typename ResultType,typename Scalar> \
88
+ struct member_##MEMBER { \
89
+ EIGEN_EMPTY_STRUCT_CTOR(member_##MEMBER) \
90
+ typedef ResultType result_type; \
91
+ typedef BINARYOP<Scalar,Scalar> BinaryOp; \
92
+ template<int Size> struct Cost { enum { value = COST }; }; \
93
+ enum { Vectorizable = VECTORIZABLE }; \
94
+ template<typename XprType> \
95
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE \
96
+ ResultType operator()(const XprType& mat) const \
97
+ { return mat.MEMBER(); } \
98
+ BinaryOp binaryFunc() const { return BinaryOp(); } \
95
99
  }
96
100
 
101
+ #define EIGEN_MEMBER_FUNCTOR(MEMBER,COST) \
102
+ EIGEN_MAKE_PARTIAL_REDUX_FUNCTOR(MEMBER,COST,0,partial_redux_dummy_func)
103
+
97
104
  namespace internal {
98
105
 
99
- EIGEN_MEMBER_FUNCTOR(squaredNorm, Size * NumTraits<Scalar>::MulCost + (Size-1)*NumTraits<Scalar>::AddCost);
100
106
  EIGEN_MEMBER_FUNCTOR(norm, (Size+5) * NumTraits<Scalar>::MulCost + (Size-1)*NumTraits<Scalar>::AddCost);
101
107
  EIGEN_MEMBER_FUNCTOR(stableNorm, (Size+5) * NumTraits<Scalar>::MulCost + (Size-1)*NumTraits<Scalar>::AddCost);
102
108
  EIGEN_MEMBER_FUNCTOR(blueNorm, (Size+5) * NumTraits<Scalar>::MulCost + (Size-1)*NumTraits<Scalar>::AddCost);
103
109
  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
110
  EIGEN_MEMBER_FUNCTOR(all, (Size-1)*NumTraits<Scalar>::AddCost);
109
111
  EIGEN_MEMBER_FUNCTOR(any, (Size-1)*NumTraits<Scalar>::AddCost);
110
112
  EIGEN_MEMBER_FUNCTOR(count, (Size-1)*NumTraits<Scalar>::AddCost);
111
- EIGEN_MEMBER_FUNCTOR(prod, (Size-1)*NumTraits<Scalar>::MulCost);
112
113
 
113
- template <int p, typename ResultType>
114
+ EIGEN_MAKE_PARTIAL_REDUX_FUNCTOR(sum, (Size-1)*NumTraits<Scalar>::AddCost, 1, internal::scalar_sum_op);
115
+ EIGEN_MAKE_PARTIAL_REDUX_FUNCTOR(minCoeff, (Size-1)*NumTraits<Scalar>::AddCost, 1, internal::scalar_min_op);
116
+ EIGEN_MAKE_PARTIAL_REDUX_FUNCTOR(maxCoeff, (Size-1)*NumTraits<Scalar>::AddCost, 1, internal::scalar_max_op);
117
+ EIGEN_MAKE_PARTIAL_REDUX_FUNCTOR(prod, (Size-1)*NumTraits<Scalar>::MulCost, 1, internal::scalar_product_op);
118
+
119
+ template <int p, typename ResultType,typename Scalar>
114
120
  struct member_lpnorm {
115
121
  typedef ResultType result_type;
116
- template<typename Scalar, int Size> struct Cost
122
+ enum { Vectorizable = 0 };
123
+ template<int Size> struct Cost
117
124
  { enum { value = (Size+5) * NumTraits<Scalar>::MulCost + (Size-1)*NumTraits<Scalar>::AddCost }; };
118
125
  EIGEN_DEVICE_FUNC member_lpnorm() {}
119
126
  template<typename XprType>
@@ -121,17 +128,20 @@ struct member_lpnorm {
121
128
  { return mat.template lpNorm<p>(); }
122
129
  };
123
130
 
124
- template <typename BinaryOp, typename Scalar>
131
+ template <typename BinaryOpT, typename Scalar>
125
132
  struct member_redux {
133
+ typedef BinaryOpT BinaryOp;
126
134
  typedef typename result_of<
127
135
  BinaryOp(const Scalar&,const Scalar&)
128
136
  >::type result_type;
129
- template<typename _Scalar, int Size> struct Cost
130
- { enum { value = (Size-1) * functor_traits<BinaryOp>::Cost }; };
137
+
138
+ enum { Vectorizable = functor_traits<BinaryOp>::PacketAccess };
139
+ template<int Size> struct Cost { enum { value = (Size-1) * functor_traits<BinaryOp>::Cost }; };
131
140
  EIGEN_DEVICE_FUNC explicit member_redux(const BinaryOp func) : m_functor(func) {}
132
141
  template<typename Derived>
133
142
  EIGEN_DEVICE_FUNC inline result_type operator()(const DenseBase<Derived>& mat) const
134
143
  { return mat.redux(m_functor); }
144
+ const BinaryOp& binaryFunc() const { return m_functor; }
135
145
  const BinaryOp m_functor;
136
146
  };
137
147
  }
@@ -139,18 +149,38 @@ struct member_redux {
139
149
  /** \class VectorwiseOp
140
150
  * \ingroup Core_Module
141
151
  *
142
- * \brief Pseudo expression providing partial reduction operations
152
+ * \brief Pseudo expression providing broadcasting and partial reduction operations
143
153
  *
144
154
  * \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)
155
+ * \tparam Direction indicates whether to operate on columns (#Vertical) or rows (#Horizontal)
146
156
  *
147
- * This class represents a pseudo expression with partial reduction features.
157
+ * This class represents a pseudo expression with broadcasting and partial reduction features.
148
158
  * 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.
159
+ * and most of the time this is the only way it is explicitly used.
160
+ *
161
+ * To understand the logic of rowwise/colwise expression, let's consider a generic case `A.colwise().foo()`
162
+ * where `foo` is any method of `VectorwiseOp`. This expression is equivalent to applying `foo()` to each
163
+ * column of `A` and then re-assemble the outputs in a matrix expression:
164
+ * \code [A.col(0).foo(), A.col(1).foo(), ..., A.col(A.cols()-1).foo()] \endcode
150
165
  *
151
166
  * Example: \include MatrixBase_colwise.cpp
152
167
  * Output: \verbinclude MatrixBase_colwise.out
153
168
  *
169
+ * The begin() and end() methods are obviously exceptions to the previous rule as they
170
+ * return STL-compatible begin/end iterators to the rows or columns of the nested expression.
171
+ * Typical use cases include for-range-loop and calls to STL algorithms:
172
+ *
173
+ * Example: \include MatrixBase_colwise_iterator_cxx11.cpp
174
+ * Output: \verbinclude MatrixBase_colwise_iterator_cxx11.out
175
+ *
176
+ * For a partial reduction on an empty input, some rules apply.
177
+ * For the sake of clarity, let's consider a vertical reduction:
178
+ * - If the number of columns is zero, then a 1x0 row-major vector expression is returned.
179
+ * - Otherwise, if the number of rows is zero, then
180
+ * - a row vector of zeros is returned for sum-like reductions (sum, squaredNorm, norm, etc.)
181
+ * - a row vector of ones is returned for a product reduction (e.g., <code>MatrixXd(n,0).colwise().prod()</code>)
182
+ * - an assert is triggered for all other reductions (minCoeff,maxCoeff,redux(bin_op))
183
+ *
154
184
  * \sa DenseBase::colwise(), DenseBase::rowwise(), class PartialReduxExpr
155
185
  */
156
186
  template<typename ExpressionType, int Direction> class VectorwiseOp
@@ -163,11 +193,11 @@ template<typename ExpressionType, int Direction> class VectorwiseOp
163
193
  typedef typename internal::ref_selector<ExpressionType>::non_const_type ExpressionTypeNested;
164
194
  typedef typename internal::remove_all<ExpressionTypeNested>::type ExpressionTypeNestedCleaned;
165
195
 
166
- template<template<typename _Scalar> class Functor,
167
- typename Scalar_=Scalar> struct ReturnType
196
+ template<template<typename OutScalar,typename InputScalar> class Functor,
197
+ typename ReturnScalar=Scalar> struct ReturnType
168
198
  {
169
199
  typedef PartialReduxExpr<ExpressionType,
170
- Functor<Scalar_>,
200
+ Functor<ReturnScalar,Scalar>,
171
201
  Direction
172
202
  > Type;
173
203
  };
@@ -187,23 +217,6 @@ template<typename ExpressionType, int Direction> class VectorwiseOp
187
217
 
188
218
  protected:
189
219
 
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
220
  template<typename OtherDerived> struct ExtendedType {
208
221
  typedef Replicate<OtherDerived,
209
222
  isVertical ? 1 : ExpressionType::RowsAtCompileTime,
@@ -258,42 +271,101 @@ template<typename ExpressionType, int Direction> class VectorwiseOp
258
271
  EIGEN_DEVICE_FUNC
259
272
  inline const ExpressionType& _expression() const { return m_matrix; }
260
273
 
274
+ #ifdef EIGEN_PARSED_BY_DOXYGEN
275
+ /** STL-like <a href="https://en.cppreference.com/w/cpp/named_req/RandomAccessIterator">RandomAccessIterator</a>
276
+ * iterator type over the columns or rows as returned by the begin() and end() methods.
277
+ */
278
+ random_access_iterator_type iterator;
279
+ /** This is the const version of iterator (aka read-only) */
280
+ random_access_iterator_type const_iterator;
281
+ #else
282
+ typedef internal::subvector_stl_iterator<ExpressionType, DirectionType(Direction)> iterator;
283
+ typedef internal::subvector_stl_iterator<const ExpressionType, DirectionType(Direction)> const_iterator;
284
+ typedef internal::subvector_stl_reverse_iterator<ExpressionType, DirectionType(Direction)> reverse_iterator;
285
+ typedef internal::subvector_stl_reverse_iterator<const ExpressionType, DirectionType(Direction)> const_reverse_iterator;
286
+ #endif
287
+
288
+ /** returns an iterator to the first row (rowwise) or column (colwise) of the nested expression.
289
+ * \sa end(), cbegin()
290
+ */
291
+ iterator begin() { return iterator (m_matrix, 0); }
292
+ /** const version of begin() */
293
+ const_iterator begin() const { return const_iterator(m_matrix, 0); }
294
+ /** const version of begin() */
295
+ const_iterator cbegin() const { return const_iterator(m_matrix, 0); }
296
+
297
+ /** returns a reverse iterator to the last row (rowwise) or column (colwise) of the nested expression.
298
+ * \sa rend(), crbegin()
299
+ */
300
+ reverse_iterator rbegin() { return reverse_iterator (m_matrix, m_matrix.template subVectors<DirectionType(Direction)>()-1); }
301
+ /** const version of rbegin() */
302
+ const_reverse_iterator rbegin() const { return const_reverse_iterator (m_matrix, m_matrix.template subVectors<DirectionType(Direction)>()-1); }
303
+ /** const version of rbegin() */
304
+ const_reverse_iterator crbegin() const { return const_reverse_iterator (m_matrix, m_matrix.template subVectors<DirectionType(Direction)>()-1); }
305
+
306
+ /** returns an iterator to the row (resp. column) following the last row (resp. column) of the nested expression
307
+ * \sa begin(), cend()
308
+ */
309
+ iterator end() { return iterator (m_matrix, m_matrix.template subVectors<DirectionType(Direction)>()); }
310
+ /** const version of end() */
311
+ const_iterator end() const { return const_iterator(m_matrix, m_matrix.template subVectors<DirectionType(Direction)>()); }
312
+ /** const version of end() */
313
+ const_iterator cend() const { return const_iterator(m_matrix, m_matrix.template subVectors<DirectionType(Direction)>()); }
314
+
315
+ /** returns a reverse iterator to the row (resp. column) before the first row (resp. column) of the nested expression
316
+ * \sa begin(), cend()
317
+ */
318
+ reverse_iterator rend() { return reverse_iterator (m_matrix, -1); }
319
+ /** const version of rend() */
320
+ const_reverse_iterator rend() const { return const_reverse_iterator (m_matrix, -1); }
321
+ /** const version of rend() */
322
+ const_reverse_iterator crend() const { return const_reverse_iterator (m_matrix, -1); }
323
+
261
324
  /** \returns a row or column vector expression of \c *this reduxed by \a func
262
325
  *
263
326
  * The template parameter \a BinaryOp is the type of the functor
264
327
  * of the custom redux operator. Note that func must be an associative operator.
265
328
  *
329
+ * \warning the size along the reduction direction must be strictly positive,
330
+ * otherwise an assertion is triggered.
331
+ *
266
332
  * \sa class VectorwiseOp, DenseBase::colwise(), DenseBase::rowwise()
267
333
  */
268
334
  template<typename BinaryOp>
269
335
  EIGEN_DEVICE_FUNC
270
336
  const typename ReduxReturnType<BinaryOp>::Type
271
337
  redux(const BinaryOp& func = BinaryOp()) const
272
- { return typename ReduxReturnType<BinaryOp>::Type(_expression(), internal::member_redux<BinaryOp,Scalar>(func)); }
338
+ {
339
+ eigen_assert(redux_length()>0 && "you are using an empty matrix");
340
+ return typename ReduxReturnType<BinaryOp>::Type(_expression(), internal::member_redux<BinaryOp,Scalar>(func));
341
+ }
273
342
 
274
343
  typedef typename ReturnType<internal::member_minCoeff>::Type MinCoeffReturnType;
275
344
  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;
345
+ typedef PartialReduxExpr<const CwiseUnaryOp<internal::scalar_abs2_op<Scalar>, const ExpressionTypeNestedCleaned>,internal::member_sum<RealScalar,RealScalar>,Direction> SquaredNormReturnType;
346
+ typedef CwiseUnaryOp<internal::scalar_sqrt_op<RealScalar>, const SquaredNormReturnType> NormReturnType;
278
347
  typedef typename ReturnType<internal::member_blueNorm,RealScalar>::Type BlueNormReturnType;
279
348
  typedef typename ReturnType<internal::member_stableNorm,RealScalar>::Type StableNormReturnType;
280
349
  typedef typename ReturnType<internal::member_hypotNorm,RealScalar>::Type HypotNormReturnType;
281
350
  typedef typename ReturnType<internal::member_sum>::Type SumReturnType;
282
- typedef typename ReturnType<internal::member_mean>::Type MeanReturnType;
351
+ typedef EIGEN_EXPR_BINARYOP_SCALAR_RETURN_TYPE(SumReturnType,Scalar,quotient) MeanReturnType;
283
352
  typedef typename ReturnType<internal::member_all>::Type AllReturnType;
284
353
  typedef typename ReturnType<internal::member_any>::Type AnyReturnType;
285
- typedef PartialReduxExpr<ExpressionType, internal::member_count<Index>, Direction> CountReturnType;
354
+ typedef PartialReduxExpr<ExpressionType, internal::member_count<Index,Scalar>, Direction> CountReturnType;
286
355
  typedef typename ReturnType<internal::member_prod>::Type ProdReturnType;
287
356
  typedef Reverse<const ExpressionType, Direction> ConstReverseReturnType;
288
357
  typedef Reverse<ExpressionType, Direction> ReverseReturnType;
289
358
 
290
359
  template<int p> struct LpNormReturnType {
291
- typedef PartialReduxExpr<ExpressionType, internal::member_lpnorm<p,RealScalar>,Direction> Type;
360
+ typedef PartialReduxExpr<ExpressionType, internal::member_lpnorm<p,RealScalar,Scalar>,Direction> Type;
292
361
  };
293
362
 
294
363
  /** \returns a row (or column) vector expression of the smallest coefficient
295
364
  * of each column (or row) of the referenced expression.
296
365
  *
366
+ * \warning the size along the reduction direction must be strictly positive,
367
+ * otherwise an assertion is triggered.
368
+ *
297
369
  * \warning the result is undefined if \c *this contains NaN.
298
370
  *
299
371
  * Example: \include PartialRedux_minCoeff.cpp
@@ -302,11 +374,17 @@ template<typename ExpressionType, int Direction> class VectorwiseOp
302
374
  * \sa DenseBase::minCoeff() */
303
375
  EIGEN_DEVICE_FUNC
304
376
  const MinCoeffReturnType minCoeff() const
305
- { return MinCoeffReturnType(_expression()); }
377
+ {
378
+ eigen_assert(redux_length()>0 && "you are using an empty matrix");
379
+ return MinCoeffReturnType(_expression());
380
+ }
306
381
 
307
382
  /** \returns a row (or column) vector expression of the largest coefficient
308
383
  * of each column (or row) of the referenced expression.
309
384
  *
385
+ * \warning the size along the reduction direction must be strictly positive,
386
+ * otherwise an assertion is triggered.
387
+ *
310
388
  * \warning the result is undefined if \c *this contains NaN.
311
389
  *
312
390
  * Example: \include PartialRedux_maxCoeff.cpp
@@ -315,7 +393,10 @@ template<typename ExpressionType, int Direction> class VectorwiseOp
315
393
  * \sa DenseBase::maxCoeff() */
316
394
  EIGEN_DEVICE_FUNC
317
395
  const MaxCoeffReturnType maxCoeff() const
318
- { return MaxCoeffReturnType(_expression()); }
396
+ {
397
+ eigen_assert(redux_length()>0 && "you are using an empty matrix");
398
+ return MaxCoeffReturnType(_expression());
399
+ }
319
400
 
320
401
  /** \returns a row (or column) vector expression of the squared norm
321
402
  * of each column (or row) of the referenced expression.
@@ -327,7 +408,7 @@ template<typename ExpressionType, int Direction> class VectorwiseOp
327
408
  * \sa DenseBase::squaredNorm() */
328
409
  EIGEN_DEVICE_FUNC
329
410
  const SquaredNormReturnType squaredNorm() const
330
- { return SquaredNormReturnType(_expression()); }
411
+ { return SquaredNormReturnType(m_matrix.cwiseAbs2()); }
331
412
 
332
413
  /** \returns a row (or column) vector expression of the norm
333
414
  * of each column (or row) of the referenced expression.
@@ -339,7 +420,7 @@ template<typename ExpressionType, int Direction> class VectorwiseOp
339
420
  * \sa DenseBase::norm() */
340
421
  EIGEN_DEVICE_FUNC
341
422
  const NormReturnType norm() const
342
- { return NormReturnType(_expression()); }
423
+ { return NormReturnType(squaredNorm()); }
343
424
 
344
425
  /** \returns a row (or column) vector expression of the norm
345
426
  * of each column (or row) of the referenced expression.
@@ -404,7 +485,7 @@ template<typename ExpressionType, int Direction> class VectorwiseOp
404
485
  * \sa DenseBase::mean() */
405
486
  EIGEN_DEVICE_FUNC
406
487
  const MeanReturnType mean() const
407
- { return MeanReturnType(_expression()); }
488
+ { return sum() / Scalar(Direction==Vertical?m_matrix.rows():m_matrix.cols()); }
408
489
 
409
490
  /** \returns a row (or column) vector expression representing
410
491
  * whether \b all coefficients of each respective column (or row) are \c true.
@@ -500,7 +581,7 @@ template<typename ExpressionType, int Direction> class VectorwiseOp
500
581
  EIGEN_STATIC_ASSERT_VECTOR_ONLY(OtherDerived)
501
582
  EIGEN_STATIC_ASSERT_SAME_XPR_KIND(ExpressionType, OtherDerived)
502
583
  //eigen_assert((m_matrix.isNull()) == (other.isNull())); FIXME
503
- return const_cast<ExpressionType&>(m_matrix = extendedTo(other.derived()));
584
+ return m_matrix = extendedTo(other.derived());
504
585
  }
505
586
 
506
587
  /** Adds the vector \a other to each subvector of \c *this */
@@ -510,7 +591,7 @@ template<typename ExpressionType, int Direction> class VectorwiseOp
510
591
  {
511
592
  EIGEN_STATIC_ASSERT_VECTOR_ONLY(OtherDerived)
512
593
  EIGEN_STATIC_ASSERT_SAME_XPR_KIND(ExpressionType, OtherDerived)
513
- return const_cast<ExpressionType&>(m_matrix += extendedTo(other.derived()));
594
+ return m_matrix += extendedTo(other.derived());
514
595
  }
515
596
 
516
597
  /** Substracts the vector \a other to each subvector of \c *this */
@@ -520,7 +601,7 @@ template<typename ExpressionType, int Direction> class VectorwiseOp
520
601
  {
521
602
  EIGEN_STATIC_ASSERT_VECTOR_ONLY(OtherDerived)
522
603
  EIGEN_STATIC_ASSERT_SAME_XPR_KIND(ExpressionType, OtherDerived)
523
- return const_cast<ExpressionType&>(m_matrix -= extendedTo(other.derived()));
604
+ return m_matrix -= extendedTo(other.derived());
524
605
  }
525
606
 
526
607
  /** Multiples each subvector of \c *this by the vector \a other */
@@ -532,7 +613,7 @@ template<typename ExpressionType, int Direction> class VectorwiseOp
532
613
  EIGEN_STATIC_ASSERT_ARRAYXPR(ExpressionType)
533
614
  EIGEN_STATIC_ASSERT_SAME_XPR_KIND(ExpressionType, OtherDerived)
534
615
  m_matrix *= extendedTo(other.derived());
535
- return const_cast<ExpressionType&>(m_matrix);
616
+ return m_matrix;
536
617
  }
537
618
 
538
619
  /** Divides each subvector of \c *this by the vector \a other */
@@ -544,7 +625,7 @@ template<typename ExpressionType, int Direction> class VectorwiseOp
544
625
  EIGEN_STATIC_ASSERT_ARRAYXPR(ExpressionType)
545
626
  EIGEN_STATIC_ASSERT_SAME_XPR_KIND(ExpressionType, OtherDerived)
546
627
  m_matrix /= extendedTo(other.derived());
547
- return const_cast<ExpressionType&>(m_matrix);
628
+ return m_matrix;
548
629
  }
549
630
 
550
631
  /** Returns the expression of the sum of the vector \a other to each subvector of \c *this */
@@ -609,7 +690,7 @@ template<typename ExpressionType, int Direction> class VectorwiseOp
609
690
  EIGEN_DEVICE_FUNC
610
691
  CwiseBinaryOp<internal::scalar_quotient_op<Scalar>,
611
692
  const ExpressionTypeNestedCleaned,
612
- const typename OppositeExtendedType<typename ReturnType<internal::member_norm,RealScalar>::Type>::Type>
693
+ const typename OppositeExtendedType<NormReturnType>::Type>
613
694
  normalized() const { return m_matrix.cwiseQuotient(extendedToOpposite(this->norm())); }
614
695
 
615
696
 
@@ -658,7 +739,15 @@ template<typename ExpressionType, int Direction> class VectorwiseOp
658
739
  EIGEN_DEVICE_FUNC
659
740
  const HNormalizedReturnType hnormalized() const;
660
741
 
742
+ # ifdef EIGEN_VECTORWISEOP_PLUGIN
743
+ # include EIGEN_VECTORWISEOP_PLUGIN
744
+ # endif
745
+
661
746
  protected:
747
+ Index redux_length() const
748
+ {
749
+ return Direction==Vertical ? m_matrix.rows() : m_matrix.cols();
750
+ }
662
751
  ExpressionTypeNested m_matrix;
663
752
  };
664
753
 
@@ -670,7 +759,7 @@ template<typename ExpressionType, int Direction> class VectorwiseOp
670
759
  * \sa rowwise(), class VectorwiseOp, \ref TutorialReductionsVisitorsBroadcasting
671
760
  */
672
761
  template<typename Derived>
673
- inline typename DenseBase<Derived>::ColwiseReturnType
762
+ EIGEN_DEVICE_FUNC inline typename DenseBase<Derived>::ColwiseReturnType
674
763
  DenseBase<Derived>::colwise()
675
764
  {
676
765
  return ColwiseReturnType(derived());
@@ -684,7 +773,7 @@ DenseBase<Derived>::colwise()
684
773
  * \sa colwise(), class VectorwiseOp, \ref TutorialReductionsVisitorsBroadcasting
685
774
  */
686
775
  template<typename Derived>
687
- inline typename DenseBase<Derived>::RowwiseReturnType
776
+ EIGEN_DEVICE_FUNC inline typename DenseBase<Derived>::RowwiseReturnType
688
777
  DenseBase<Derived>::rowwise()
689
778
  {
690
779
  return RowwiseReturnType(derived());