tomoto 0.2.2 → 0.3.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 (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
@@ -2,10 +2,10 @@
2
2
  * @file Core.h
3
3
  * @author bab2min (bab2min@gmail.com)
4
4
  * @brief
5
- * @version 0.3.0
6
- * @date 2020-10-07
5
+ * @version 0.3.3
6
+ * @date 2021-03-31
7
7
  *
8
- * @copyright Copyright (c) 2020
8
+ * @copyright Copyright (c) 2020-2021
9
9
  *
10
10
  */
11
11
 
@@ -13,15 +13,15 @@
13
13
  #ifndef EIGENRAND_CORE_H
14
14
  #define EIGENRAND_CORE_H
15
15
 
16
- #include <EigenRand/RandUtils.h>
16
+ #include "RandUtils.h"
17
17
 
18
- #include <EigenRand/Dists/Basic.h>
19
- #include <EigenRand/Dists/Discrete.h>
20
- #include <EigenRand/Dists/NormalExp.h>
21
- #include <EigenRand/Dists/GammaPoisson.h>
18
+ #include "Dists/Basic.h"
19
+ #include "Dists/Discrete.h"
20
+ #include "Dists/NormalExp.h"
21
+ #include "Dists/GammaPoisson.h"
22
22
 
23
- #include <EigenRand/MvDists/MvNormal.h>
24
- #include <EigenRand/MvDists/Multinomial.h>
23
+ #include "MvDists/MvNormal.h"
24
+ #include "MvDists/Multinomial.h"
25
25
 
26
26
  namespace Eigen
27
27
  {
@@ -2,10 +2,10 @@
2
2
  * @file Basic.h
3
3
  * @author bab2min (bab2min@gmail.com)
4
4
  * @brief
5
- * @version 0.3.0
6
- * @date 2020-10-07
5
+ * @version 0.3.3
6
+ * @date 2021-03-31
7
7
  *
8
- * @copyright Copyright (c) 2020
8
+ * @copyright Copyright (c) 2020-2021
9
9
  *
10
10
  */
11
11
 
@@ -238,6 +238,31 @@ namespace Eigen
238
238
 
239
239
  using OptCacheStore = CacheStore<EIGEN_MAX_ALIGN_BYTES>;
240
240
 
241
+ template<typename _Scalar>
242
+ struct ExtractFirstUint;
243
+
244
+ template<>
245
+ struct ExtractFirstUint<float>
246
+ {
247
+ template<typename Packet>
248
+ auto operator()(Packet v) -> decltype(Eigen::internal::pfirst(v))
249
+ {
250
+ return Eigen::internal::pfirst(v);
251
+ }
252
+ };
253
+
254
+ template<>
255
+ struct ExtractFirstUint<double>
256
+ {
257
+ template<typename Packet>
258
+ auto operator()(Packet v) -> uint64_t
259
+ {
260
+ uint64_t arr[sizeof(Packet) / 8];
261
+ Eigen::internal::pstoreu((Packet*)arr, v);
262
+ return arr[0];
263
+ }
264
+ };
265
+
241
266
  /**
242
267
  * @brief Generator of random bits for integral scalars
243
268
  *
@@ -296,13 +321,52 @@ namespace Eigen
296
321
  }
297
322
  };
298
323
 
324
+ /**
325
+ * @brief Generator of reals in a range `[a, b]`
326
+ *
327
+ * @tparam _Scalar any real type
328
+ */
329
+ template<typename _Scalar>
330
+ class Balanced2Gen : public GenBase<Balanced2Gen<_Scalar>, _Scalar>
331
+ {
332
+ static_assert(std::is_floating_point<_Scalar>::value, "balanced needs floating point types.");
333
+ _Scalar slope = 2, bias = -1;
334
+ public:
335
+ using Scalar = _Scalar;
336
+
337
+ /**
338
+ * @brief Construct a new balanced generator
339
+ *
340
+ * @param _a,_b left and right boundary
341
+ */
342
+ Balanced2Gen(_Scalar _a = -1, _Scalar _b = 1)
343
+ : slope{ _b - _a }, bias{ _a }
344
+ {
345
+ }
346
+
347
+ template<typename Rng>
348
+ EIGEN_STRONG_INLINE const _Scalar operator() (Rng&& rng)
349
+ {
350
+ using namespace Eigen::internal;
351
+ return ((_Scalar)((int32_t)pfirst(std::forward<Rng>(rng)()) & 0x7FFFFFFF) / 0x7FFFFFFF) * slope + bias;
352
+ }
353
+
354
+ template<typename Packet, typename Rng>
355
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Packet packetOp(Rng&& rng)
356
+ {
357
+ using namespace Eigen::internal;
358
+ using RUtils = RandUtils<Packet, Rng>;
359
+ return RUtils{}.balanced(std::forward<Rng>(rng), slope, bias);
360
+ }
361
+ };
362
+
299
363
  /**
300
364
  * @brief Generator of reals in a range `[0, 1)`
301
365
  *
302
366
  * @tparam _Scalar any real type
303
367
  */
304
368
  template<typename _Scalar>
305
- class UniformRealGen : public GenBase<UniformRealGen<_Scalar>, _Scalar>
369
+ class StdUniformRealGen : public GenBase<StdUniformRealGen<_Scalar>, _Scalar>
306
370
  {
307
371
  static_assert(std::is_floating_point<_Scalar>::value, "uniformReal needs floating point types.");
308
372
 
@@ -313,14 +377,14 @@ namespace Eigen
313
377
  EIGEN_STRONG_INLINE const _Scalar operator() (Rng&& rng)
314
378
  {
315
379
  using namespace Eigen::internal;
316
- return bit_scalar<_Scalar>{}.to_ur(pfirst(std::forward<Rng>(rng)()));
380
+ return BitScalar<_Scalar>{}.to_ur(ExtractFirstUint<_Scalar>{}(std::forward<Rng>(rng)()));
317
381
  }
318
382
 
319
383
  template<typename Rng>
320
384
  EIGEN_STRONG_INLINE const _Scalar nzur_scalar(Rng&& rng)
321
385
  {
322
386
  using namespace Eigen::internal;
323
- return bit_scalar<_Scalar>{}.to_nzur(pfirst(std::forward<Rng>(rng)()));
387
+ return BitScalar<_Scalar>{}.to_nzur(ExtractFirstUint<_Scalar>{}(std::forward<Rng>(rng)()));
324
388
  }
325
389
 
326
390
  template<typename Packet, typename Rng>
@@ -332,6 +396,49 @@ namespace Eigen
332
396
  }
333
397
  };
334
398
 
399
+ /**
400
+ * @brief Generator of reals in a range `[a, b)`
401
+ *
402
+ * @tparam _Scalar any real type
403
+ */
404
+ template<typename _Scalar>
405
+ class UniformRealGen : public GenBase<UniformRealGen<_Scalar>, _Scalar>
406
+ {
407
+ static_assert(std::is_floating_point<_Scalar>::value, "uniformReal needs floating point types.");
408
+ _Scalar bias, slope;
409
+
410
+ public:
411
+ using Scalar = _Scalar;
412
+
413
+ UniformRealGen(_Scalar _min = 0, _Scalar _max = 1)
414
+ : bias{ _min }, slope{ _max - _min }
415
+ {
416
+ }
417
+
418
+ UniformRealGen(const UniformRealGen&) = default;
419
+ UniformRealGen(UniformRealGen&&) = default;
420
+
421
+ UniformRealGen& operator=(const UniformRealGen&) = default;
422
+ UniformRealGen& operator=(UniformRealGen&&) = default;
423
+
424
+ template<typename Rng>
425
+ EIGEN_STRONG_INLINE const _Scalar operator() (Rng&& rng)
426
+ {
427
+ using namespace Eigen::internal;
428
+ return bias + BitScalar<_Scalar>{}.to_ur(pfirst(std::forward<Rng>(rng)())) * slope;
429
+ }
430
+
431
+ template<typename Packet, typename Rng>
432
+ EIGEN_STRONG_INLINE const Packet packetOp(Rng&& rng)
433
+ {
434
+ using namespace Eigen::internal;
435
+ using RUtils = RandUtils<Packet, Rng>;
436
+ return padd(pmul(
437
+ RUtils{}.uniform_real(std::forward<Rng>(rng)), pset1<Packet>(slope)
438
+ ), pset1<Packet>(bias));
439
+ }
440
+ };
441
+
335
442
 
336
443
  /**
337
444
  * @brief Generator of Bernoulli distribution
@@ -468,7 +575,53 @@ namespace Eigen
468
575
  }
469
576
 
470
577
  template<typename Derived, typename Urng>
471
- using UniformRealType = CwiseNullaryOp<internal::scalar_rng_adaptor<UniformRealGen<typename Derived::Scalar>, typename Derived::Scalar, Urng, true>, const Derived>;
578
+ using Balanced2Type = CwiseNullaryOp<internal::scalar_rng_adaptor<Balanced2Gen<typename Derived::Scalar>, typename Derived::Scalar, Urng, true>, const Derived>;
579
+
580
+ /**
581
+ * @brief generates reals in a range `[a, b]`
582
+ *
583
+ * @tparam Derived a type of Eigen::DenseBase
584
+ * @tparam Urng
585
+ * @param rows the number of rows being generated
586
+ * @param cols the number of columns being generated
587
+ * @param urng c++11-style random number generator
588
+ * @param a,b left and right boundary
589
+ * @return a random matrix expression with a shape (`rows`, `cols`)
590
+ *
591
+ * @see Eigen::Rand::BalancedGen
592
+ */
593
+ template<typename Derived, typename Urng>
594
+ inline const Balanced2Type<Derived, Urng>
595
+ balanced(Index rows, Index cols, Urng&& urng, typename Derived::Scalar a, typename Derived::Scalar b)
596
+ {
597
+ return {
598
+ rows, cols, { std::forward<Urng>(urng), Balanced2Gen<typename Derived::Scalar>{a, b} }
599
+ };
600
+ }
601
+
602
+ /**
603
+ * @brief generates reals in a range `[a, b]`
604
+ *
605
+ * @tparam Derived
606
+ * @tparam Urng
607
+ * @param o an instance of any type of Eigen::DenseBase
608
+ * @param urng c++11-style random number generator
609
+ * @param a,b left and right boundary
610
+ * @return a random matrix expression of the same shape as `o`
611
+ *
612
+ * @see Eigen::Rand::BalancedGen
613
+ */
614
+ template<typename Derived, typename Urng>
615
+ inline const Balanced2Type<Derived, Urng>
616
+ balancedLike(const Derived& o, Urng&& urng, typename Derived::Scalar a, typename Derived::Scalar b)
617
+ {
618
+ return {
619
+ o.rows(), o.cols(), { std::forward<Urng>(urng), Balanced2Gen<typename Derived::Scalar>{a, b} }
620
+ };
621
+ }
622
+
623
+ template<typename Derived, typename Urng>
624
+ using StdUniformRealType = CwiseNullaryOp<internal::scalar_rng_adaptor<StdUniformRealGen<typename Derived::Scalar>, typename Derived::Scalar, Urng, true>, const Derived>;
472
625
 
473
626
  /**
474
627
  * @brief generates reals in a range `[0, 1)`
@@ -483,7 +636,7 @@ namespace Eigen
483
636
  * @see Eigen::Rand::UniformRealGen
484
637
  */
485
638
  template<typename Derived, typename Urng>
486
- inline const UniformRealType<Derived, Urng>
639
+ inline const StdUniformRealType<Derived, Urng>
487
640
  uniformReal(Index rows, Index cols, Urng&& urng)
488
641
  {
489
642
  return {
@@ -503,7 +656,7 @@ namespace Eigen
503
656
  * @see Eigen::Rand::UniformRealGen
504
657
  */
505
658
  template<typename Derived, typename Urng>
506
- inline const UniformRealType<Derived, Urng>
659
+ inline const StdUniformRealType<Derived, Urng>
507
660
  uniformRealLike(Derived& o, Urng&& urng)
508
661
  {
509
662
  return {
@@ -511,6 +664,52 @@ namespace Eigen
511
664
  };
512
665
  }
513
666
 
667
+ template<typename Derived, typename Urng>
668
+ using UniformRealType = CwiseNullaryOp<internal::scalar_rng_adaptor<UniformRealGen<typename Derived::Scalar>, typename Derived::Scalar, Urng, true>, const Derived>;
669
+
670
+ /**
671
+ * @brief generates reals in a range `[min, max)`
672
+ *
673
+ * @tparam Derived a type of Eigen::DenseBase
674
+ * @tparam Urng
675
+ * @param rows the number of rows being generated
676
+ * @param cols the number of columns being generated
677
+ * @param urng c++11-style random number generator
678
+ * @param min, max the range of reals being generated
679
+ * @return a random matrix expression with a shape (`rows`, `cols`)
680
+ *
681
+ * @see Eigen::Rand::UniformRealGen
682
+ */
683
+ template<typename Derived, typename Urng>
684
+ inline const UniformRealType<Derived, Urng>
685
+ uniformReal(Index rows, Index cols, Urng&& urng, typename Derived::Scalar min, typename Derived::Scalar max)
686
+ {
687
+ return {
688
+ rows, cols, { std::forward<Urng>(urng), UniformRealGen<typename Derived::Scalar>{ min, max } }
689
+ };
690
+ }
691
+
692
+ /**
693
+ * @brief generates reals in a range `[min, max)`
694
+ *
695
+ * @tparam Derived
696
+ * @tparam Urng
697
+ * @param o an instance of any type of Eigen::DenseBase
698
+ * @param urng c++11-style random number generator
699
+ * @param min, max the range of reals being generated
700
+ * @return a random matrix expression of the same shape as `o`
701
+ *
702
+ * @see Eigen::Rand::UniformRealGen
703
+ */
704
+ template<typename Derived, typename Urng>
705
+ inline const UniformRealType<Derived, Urng>
706
+ uniformRealLike(Derived& o, Urng&& urng, typename Derived::Scalar min, typename Derived::Scalar max)
707
+ {
708
+ return {
709
+ o.rows(), o.cols(), { std::forward<Urng>(urng), UniformRealGen<typename Derived::Scalar>{ min, max } }
710
+ };
711
+ }
712
+
514
713
  template<typename Derived, typename Urng>
515
714
  using BernoulliType = CwiseNullaryOp<internal::scalar_rng_adaptor<BernoulliGen<typename Derived::Scalar>, typename Derived::Scalar, Urng, true>, const Derived>;
516
715
 
@@ -2,10 +2,10 @@
2
2
  * @file Discrete.h
3
3
  * @author bab2min (bab2min@gmail.com)
4
4
  * @brief
5
- * @version 0.3.0
6
- * @date 2020-10-07
5
+ * @version 0.3.3
6
+ * @date 2021-03-31
7
7
  *
8
- * @copyright Copyright (c) 2020
8
+ * @copyright Copyright (c) 2020-2021
9
9
  *
10
10
  */
11
11
 
@@ -49,11 +49,11 @@ namespace Eigen
49
49
  bitmask = o.bitmask;
50
50
  if (msize)
51
51
  {
52
- arr = std::unique_ptr<_Precision[]>(new _Precision[1 << bitsize]);
53
- alias = std::unique_ptr<_Size[]>(new _Size[1 << bitsize]);
52
+ arr = std::unique_ptr<_Precision[]>(new _Precision[(size_t)1 << bitsize]);
53
+ alias = std::unique_ptr<_Size[]>(new _Size[(size_t)1 << bitsize]);
54
54
 
55
- std::copy(o.arr.get(), o.arr.get() + (1 << bitsize), arr.get());
56
- std::copy(o.alias.get(), o.alias.get() + (1 << bitsize), alias.get());
55
+ std::copy(o.arr.get(), o.arr.get() + ((size_t)1 << bitsize), arr.get());
56
+ std::copy(o.alias.get(), o.alias.get() + ((size_t)1 << bitsize), alias.get());
57
57
  }
58
58
  return *this;
59
59
  }
@@ -125,7 +125,7 @@ namespace Eigen
125
125
  {
126
126
  arr[under] = (_Precision)f[under];
127
127
  }
128
- alias[under] = over;
128
+ alias[under] = (_Size)over;
129
129
  f[over] += f[under] - 1;
130
130
  if (f[over] >= 1 || mm <= over)
131
131
  {
@@ -152,7 +152,7 @@ namespace Eigen
152
152
  {
153
153
  arr[over] = 1;
154
154
  }
155
- alias[over] = over;
155
+ alias[over] = (_Size)over;
156
156
  }
157
157
  }
158
158
 
@@ -166,7 +166,7 @@ namespace Eigen
166
166
  {
167
167
  arr[under] = 1;
168
168
  }
169
- alias[under] = under;
169
+ alias[under] = (_Size)under;
170
170
  for (under = mm; under < msize; ++under)
171
171
  {
172
172
  if (f[under] < 1)
@@ -179,7 +179,7 @@ namespace Eigen
179
179
  {
180
180
  arr[under] = 1;
181
181
  }
182
- alias[under] = under;
182
+ alias[under] = (_Size)under;
183
183
  }
184
184
  }
185
185
  }
@@ -260,8 +260,9 @@ namespace Eigen
260
260
  else
261
261
  {
262
262
  size_t bitcnt = bitsize;
263
- while (1)
263
+ for (int _i = 0; ; ++_i)
264
264
  {
265
+ EIGENRAND_CHECK_INFINITY_LOOP();
265
266
  _Scalar cands = (_Scalar)(rx & bitmask);
266
267
  if (cands <= pdiff) return cands;
267
268
  if (bitcnt + bitsize < 32)
@@ -293,8 +294,9 @@ namespace Eigen
293
294
  auto& cm = Rand::detail::CompressMask<sizeof(Packet)>::get_inst();
294
295
  auto plen = pset1<Packet>(pdiff + 1);
295
296
  size_t bitcnt = bitsize;
296
- while (1)
297
+ for (int _i = 0; ; ++_i)
297
298
  {
299
+ EIGENRAND_CHECK_INFINITY_LOOP();
298
300
  // accept cands that only < plen
299
301
  auto cands = pand(rx, pbitmask);
300
302
  bool full = false;
@@ -304,7 +306,7 @@ namespace Eigen
304
306
 
305
307
  if (bitcnt + bitsize < 32)
306
308
  {
307
- rx = psrl(rx, bitsize);
309
+ rx = psrl<-1>(rx, bitsize);
308
310
  bitcnt += bitsize;
309
311
  }
310
312
  else
@@ -417,7 +419,7 @@ namespace Eigen
417
419
  auto rx = randbits(std::forward<Rng>(rng));
418
420
  auto albit = rx & alias_table.get_bitmask();
419
421
  uint32_t alx = (uint32_t)(rx >> (sizeof(rx) * 8 - 31));
420
- if (alx < alias_table.get_prob()[albit]) return albit;
422
+ if (alx < alias_table.get_prob()[albit]) return (_Scalar)albit;
421
423
  return alias_table.get_alias()[albit];
422
424
  }
423
425
  }
@@ -451,7 +453,7 @@ namespace Eigen
451
453
  {
452
454
  auto rx = randbits.template packetOp<PacketType>(std::forward<Rng>(rng));
453
455
  auto albit = pand(rx, pset1<PacketType>(alias_table.get_bitmask()));
454
- auto c = pcmplt(psrl(rx, 1), pgather(alias_table.get_prob(), albit));
456
+ auto c = pcmplt(psrl<1>(rx), pgather(alias_table.get_prob(), albit));
455
457
  ret = pblendv(c, albit, pgather(alias_table.get_alias(), albit));
456
458
  }
457
459
 
@@ -673,6 +675,8 @@ namespace Eigen
673
675
  }
674
676
  }
675
677
 
678
+ #ifdef EIGEN_VECTORIZE_NEON
679
+ #else
676
680
  template<typename Packet, typename Rng>
677
681
  EIGEN_STRONG_INLINE const Packet packetOp(Rng&& rng)
678
682
  {
@@ -681,7 +685,7 @@ namespace Eigen
681
685
  if (!cdf.empty())
682
686
  {
683
687
  auto ret = pset1<Packet>(cdf.size());
684
- #ifdef EIGEN_VECTORIZE_AVX
688
+ #ifdef EIGEN_VECTORIZE_AVX
685
689
  auto rx = ur.template packetOp<Packet4d>(std::forward<Rng>(rng));
686
690
  for (auto& p : cdf)
687
691
  {
@@ -689,7 +693,7 @@ namespace Eigen
689
693
  auto r = combine_low32(c);
690
694
  ret = padd(ret, r);
691
695
  }
692
- #else
696
+ #else
693
697
  auto rx1 = ur.template packetOp<DPacket>(rng),
694
698
  rx2 = ur.template packetOp<DPacket>(rng);
695
699
  for (auto& p : cdf)
@@ -697,25 +701,26 @@ namespace Eigen
697
701
  auto pp = pset1<decltype(rx1)>(p);
698
702
  ret = padd(ret, combine_low32(reinterpret_to_int(pcmplt(rx1, pp)), reinterpret_to_int(pcmplt(rx2, pp))));
699
703
  }
700
- #endif
704
+ #endif
701
705
  return ret;
702
706
  }
703
707
  else
704
708
  {
705
- #ifdef EIGEN_VECTORIZE_AVX
709
+ #ifdef EIGEN_VECTORIZE_AVX
706
710
  using RUtils = RawbitsMaker<Packet, Rng>;
707
711
  auto albit = pand(RUtils{}.rawbits(rng), pset1<Packet>(alias_table.get_bitmask()));
708
712
  auto c = reinterpret_to_int(pcmplt(ur.template packetOp<Packet4d>(rng), pgather(alias_table.get_prob(), _mm256_castsi128_si256(albit))));
709
713
  return pblendv(combine_low32(c), albit, pgather(alias_table.get_alias(), albit));
710
- #else
714
+ #else
711
715
  using RUtils = RawbitsMaker<Packet, Rng>;
712
716
  auto albit = pand(RUtils{}.rawbits(rng), pset1<Packet>(alias_table.get_bitmask()));
713
717
  auto c1 = reinterpret_to_int(pcmplt(ur.template packetOp<DPacket>(rng), pgather(alias_table.get_prob(), albit)));
714
718
  auto c2 = reinterpret_to_int(pcmplt(ur.template packetOp<DPacket>(rng), pgather(alias_table.get_prob(), albit, true)));
715
719
  return pblendv(combine_low32(c1, c2), albit, pgather(alias_table.get_alias(), albit));
716
- #endif
720
+ #endif
717
721
  }
718
722
  }
723
+ #endif
719
724
  };
720
725
 
721
726
  template<typename> class BinomialGen;
@@ -777,8 +782,9 @@ namespace Eigen
777
782
  {
778
783
  _Scalar res;
779
784
  double yx;
780
- while (1)
785
+ for (int _i = 0; ; ++_i)
781
786
  {
787
+ EIGENRAND_CHECK_INFINITY_LOOP();
782
788
  yx = std::tan(constant::pi * ur(rng));
783
789
  res = (_Scalar)(sqrt_tmean * yx + mean);
784
790
  if (res >= 0 && ur(rng) <= 0.9 * (1.0 + yx * yx)
@@ -800,8 +806,9 @@ namespace Eigen
800
806
  {
801
807
  Packet res = pset1<Packet>(0);
802
808
  PacketType val = pset1<PacketType>(1), pne_mean = pset1<PacketType>(ne_mean);
803
- while (1)
809
+ for (int _i = 0; ; ++_i)
804
810
  {
811
+ EIGENRAND_CHECK_INFINITY_LOOP();
805
812
  val = pmul(val, ur.template packetOp<PacketType>(rng));
806
813
  auto c = reinterpret_to_int(pcmplt(pne_mean, val));
807
814
  if (pmovemask(c) == 0) break;
@@ -817,15 +824,16 @@ namespace Eigen
817
824
  pmean = pset1<PacketType>(mean),
818
825
  plog_mean = pset1<PacketType>(log_mean),
819
826
  pg1 = pset1<PacketType>(g1);
820
- while (1)
827
+ for (int _i = 0; ; ++_i)
821
828
  {
829
+ EIGENRAND_CHECK_INFINITY_LOOP();
822
830
  PacketType fres, yx, psin, pcos;
823
831
  psincos(pmul(ppi, ur.template packetOp<PacketType>(rng)), psin, pcos);
824
832
  yx = pdiv(psin, pcos);
825
833
  fres = ptruncate(padd(pmul(psqrt_tmean, yx), pmean));
826
834
 
827
835
  auto p1 = pmul(padd(pmul(yx, yx), pset1<PacketType>(1)), pset1<PacketType>(0.9));
828
- auto p2 = pexp(psub(psub(pmul(fres, plog_mean), plgamma(padd(fres, pset1<PacketType>(1)))), pg1));
836
+ auto p2 = pexp(psub(psub(pmul(fres, plog_mean), plgamma_approx(padd(fres, pset1<PacketType>(1)))), pg1));
829
837
 
830
838
  auto c1 = pcmple(pset1<PacketType>(0), fres);
831
839
  auto c2 = pcmple(ur.template packetOp<PacketType>(rng), pmul(p1, p2));
@@ -852,7 +860,7 @@ namespace Eigen
852
860
 
853
861
  PoissonGen<_Scalar> poisson;
854
862
  _Scalar trials;
855
- double p, small_p, g1, sqrt_v, log_small_p, log_small_q;
863
+ double p = 0, small_p = 0, g1 = 0, sqrt_v = 0, log_small_p = 0, log_small_q = 0;
856
864
 
857
865
  public:
858
866
  using Scalar = _Scalar;
@@ -903,8 +911,9 @@ namespace Eigen
903
911
  }
904
912
  else
905
913
  {
906
- while (1)
914
+ for (int _i = 0; ; ++_i)
907
915
  {
916
+ EIGENRAND_CHECK_INFINITY_LOOP();
908
917
  double ys;
909
918
  ys = std::tan(constant::pi * poisson.ur(rng));
910
919
  res = (_Scalar)(sqrt_v * ys + poisson.mean);
@@ -954,8 +963,9 @@ namespace Eigen
954
963
  plog_small_p = pset1<PacketType>(log_small_p),
955
964
  plog_small_q = pset1<PacketType>(log_small_q),
956
965
  pg1 = pset1<PacketType>(g1);
957
- while (1)
966
+ for (int _i = 0; ; ++_i)
958
967
  {
968
+ EIGENRAND_CHECK_INFINITY_LOOP();
959
969
  PacketType fres, ys, psin, pcos;
960
970
  psincos(pmul(ppi, poisson.ur.template packetOp<PacketType>(rng)), psin, pcos);
961
971
  ys = pdiv(psin, pcos);
@@ -964,8 +974,8 @@ namespace Eigen
964
974
  auto p1 = pmul(pmul(pset1<PacketType>(1.2), psqrt_v), padd(pset1<PacketType>(1), pmul(ys, ys)));
965
975
  auto p2 = pexp(
966
976
  padd(padd(psub(
967
- psub(pg1, plgamma(padd(fres, pset1<PacketType>(1)))),
968
- plgamma(psub(padd(ptrials, pset1<PacketType>(1)), fres))
977
+ psub(pg1, plgamma_approx(padd(fres, pset1<PacketType>(1)))),
978
+ plgamma_approx(psub(padd(ptrials, pset1<PacketType>(1)), fres))
969
979
  ), pmul(fres, plog_small_p)), pmul(psub(ptrials, fres), plog_small_q))
970
980
  );
971
981
 
@@ -1503,6 +1513,17 @@ namespace Eigen
1503
1513
  };
1504
1514
  }
1505
1515
  }
1516
+
1517
+ #ifdef EIGEN_VECTORIZE_NEON
1518
+ namespace internal
1519
+ {
1520
+ template<typename _Scalar, typename Urng, bool _mutable>
1521
+ struct functor_traits<scalar_rng_adaptor<Rand::DiscreteGen<_Scalar, double>, _Scalar, Urng, _mutable> >
1522
+ {
1523
+ enum { Cost = HugeCost, PacketAccess = 0, IsRepeatable = false };
1524
+ };
1525
+ }
1526
+ #endif
1506
1527
  }
1507
1528
 
1508
1529
  #endif
@@ -2,10 +2,10 @@
2
2
  * @file GammaPoisson.h
3
3
  * @author bab2min (bab2min@gmail.com)
4
4
  * @brief
5
- * @version 0.3.0
6
- * @date 2020-10-07
5
+ * @version 0.3.3
6
+ * @date 2021-03-31
7
7
  *
8
- * @copyright Copyright (c) 2020
8
+ * @copyright Copyright (c) 2020-2021
9
9
  *
10
10
  */
11
11
 
@@ -58,7 +58,6 @@ namespace Eigen
58
58
  EIGEN_STRONG_INLINE const Packet packetOp(Rng&& rng)
59
59
  {
60
60
  using namespace Eigen::internal;
61
- using ur_base = UniformRealGen<float>;
62
61
  using PacketType = decltype(reinterpret_to_float(std::declval<Packet>()));
63
62
 
64
63
  auto mean = gamma.template packetOp<PacketType>(rng);
@@ -66,8 +65,9 @@ namespace Eigen
66
65
  PacketType val = pset1<PacketType>(1), pne_mean = pexp(pnegate(mean));
67
66
  if (pmovemask(pcmplt(pset1<PacketType>(12), mean)) == 0)
68
67
  {
69
- while (1)
68
+ for (int _i = 0; ; ++_i)
70
69
  {
70
+ EIGENRAND_CHECK_INFINITY_LOOP();
71
71
  val = pmul(val, ur.template packetOp<PacketType>(rng));
72
72
  auto c = reinterpret_to_int(pcmplt(pne_mean, val));
73
73
  if (pmovemask(c) == 0) break;
@@ -81,16 +81,17 @@ namespace Eigen
81
81
  const PacketType ppi = pset1<PacketType>(constant::pi),
82
82
  psqrt_tmean = psqrt(pmul(pset1<PacketType>(2), mean)),
83
83
  plog_mean = plog(mean),
84
- pg1 = psub(pmul(mean, plog_mean), plgamma(padd(mean, pset1<PacketType>(1))));
85
- while (1)
84
+ pg1 = psub(pmul(mean, plog_mean), plgamma_approx(padd(mean, pset1<PacketType>(1))));
85
+ for (int _i = 0; ; ++_i)
86
86
  {
87
+ EIGENRAND_CHECK_INFINITY_LOOP();
87
88
  PacketType fres, yx, psin, pcos;
88
89
  psincos(pmul(ppi, ur.template packetOp<PacketType>(rng)), psin, pcos);
89
90
  yx = pdiv(psin, pcos);
90
91
  fres = ptruncate(padd(pmul(psqrt_tmean, yx), mean));
91
92
 
92
93
  auto p1 = pmul(padd(pmul(yx, yx), pset1<PacketType>(1)), pset1<PacketType>(0.9));
93
- auto p2 = pexp(psub(psub(pmul(fres, plog_mean), plgamma(padd(fres, pset1<PacketType>(1)))), pg1));
94
+ auto p2 = pexp(psub(psub(pmul(fres, plog_mean), plgamma_approx(padd(fres, pset1<PacketType>(1)))), pg1));
94
95
 
95
96
  auto c1 = pcmple(pset1<PacketType>(0), fres);
96
97
  auto c2 = pcmple(ur.template packetOp<PacketType>(rng), pmul(p1, p2));