tomoto 0.2.3 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (347) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +6 -0
  3. data/README.md +8 -10
  4. data/ext/tomoto/extconf.rb +6 -2
  5. data/ext/tomoto/{ext.cpp → tomoto.cpp} +1 -1
  6. data/lib/tomoto/version.rb +1 -1
  7. data/lib/tomoto.rb +5 -1
  8. data/vendor/EigenRand/EigenRand/Core.h +10 -10
  9. data/vendor/EigenRand/EigenRand/Dists/Basic.h +208 -9
  10. data/vendor/EigenRand/EigenRand/Dists/Discrete.h +52 -31
  11. data/vendor/EigenRand/EigenRand/Dists/GammaPoisson.h +9 -8
  12. data/vendor/EigenRand/EigenRand/Dists/NormalExp.h +28 -21
  13. data/vendor/EigenRand/EigenRand/EigenRand +11 -6
  14. data/vendor/EigenRand/EigenRand/Macro.h +13 -7
  15. data/vendor/EigenRand/EigenRand/MorePacketMath.h +348 -740
  16. data/vendor/EigenRand/EigenRand/MvDists/Multinomial.h +5 -3
  17. data/vendor/EigenRand/EigenRand/MvDists/MvNormal.h +9 -3
  18. data/vendor/EigenRand/EigenRand/PacketFilter.h +11 -253
  19. data/vendor/EigenRand/EigenRand/PacketRandomEngine.h +21 -47
  20. data/vendor/EigenRand/EigenRand/RandUtils.h +50 -344
  21. data/vendor/EigenRand/EigenRand/arch/AVX/MorePacketMath.h +619 -0
  22. data/vendor/EigenRand/EigenRand/arch/AVX/PacketFilter.h +149 -0
  23. data/vendor/EigenRand/EigenRand/arch/AVX/RandUtils.h +228 -0
  24. data/vendor/EigenRand/EigenRand/arch/NEON/MorePacketMath.h +473 -0
  25. data/vendor/EigenRand/EigenRand/arch/NEON/PacketFilter.h +142 -0
  26. data/vendor/EigenRand/EigenRand/arch/NEON/RandUtils.h +126 -0
  27. data/vendor/EigenRand/EigenRand/arch/SSE/MorePacketMath.h +501 -0
  28. data/vendor/EigenRand/EigenRand/arch/SSE/PacketFilter.h +133 -0
  29. data/vendor/EigenRand/EigenRand/arch/SSE/RandUtils.h +120 -0
  30. data/vendor/EigenRand/EigenRand/doc.h +24 -12
  31. data/vendor/EigenRand/README.md +57 -4
  32. data/vendor/eigen/COPYING.APACHE +203 -0
  33. data/vendor/eigen/COPYING.BSD +1 -1
  34. data/vendor/eigen/COPYING.MINPACK +51 -52
  35. data/vendor/eigen/Eigen/Cholesky +0 -1
  36. data/vendor/eigen/Eigen/Core +112 -265
  37. data/vendor/eigen/Eigen/Eigenvalues +2 -3
  38. data/vendor/eigen/Eigen/Geometry +5 -8
  39. data/vendor/eigen/Eigen/Householder +0 -1
  40. data/vendor/eigen/Eigen/Jacobi +0 -1
  41. data/vendor/eigen/Eigen/KLUSupport +41 -0
  42. data/vendor/eigen/Eigen/LU +2 -5
  43. data/vendor/eigen/Eigen/OrderingMethods +0 -3
  44. data/vendor/eigen/Eigen/PaStiXSupport +1 -0
  45. data/vendor/eigen/Eigen/PardisoSupport +0 -0
  46. data/vendor/eigen/Eigen/QR +2 -3
  47. data/vendor/eigen/Eigen/QtAlignedMalloc +0 -1
  48. data/vendor/eigen/Eigen/SVD +0 -1
  49. data/vendor/eigen/Eigen/Sparse +0 -2
  50. data/vendor/eigen/Eigen/SparseCholesky +0 -8
  51. data/vendor/eigen/Eigen/SparseLU +4 -0
  52. data/vendor/eigen/Eigen/SparseQR +0 -1
  53. data/vendor/eigen/Eigen/src/Cholesky/LDLT.h +42 -27
  54. data/vendor/eigen/Eigen/src/Cholesky/LLT.h +39 -23
  55. data/vendor/eigen/Eigen/src/CholmodSupport/CholmodSupport.h +90 -47
  56. data/vendor/eigen/Eigen/src/Core/ArithmeticSequence.h +413 -0
  57. data/vendor/eigen/Eigen/src/Core/Array.h +99 -11
  58. data/vendor/eigen/Eigen/src/Core/ArrayBase.h +3 -3
  59. data/vendor/eigen/Eigen/src/Core/ArrayWrapper.h +21 -21
  60. data/vendor/eigen/Eigen/src/Core/Assign.h +1 -1
  61. data/vendor/eigen/Eigen/src/Core/AssignEvaluator.h +125 -50
  62. data/vendor/eigen/Eigen/src/Core/Assign_MKL.h +10 -10
  63. data/vendor/eigen/Eigen/src/Core/BandMatrix.h +16 -16
  64. data/vendor/eigen/Eigen/src/Core/Block.h +56 -60
  65. data/vendor/eigen/Eigen/src/Core/BooleanRedux.h +29 -31
  66. data/vendor/eigen/Eigen/src/Core/CommaInitializer.h +7 -3
  67. data/vendor/eigen/Eigen/src/Core/CoreEvaluators.h +325 -272
  68. data/vendor/eigen/Eigen/src/Core/CoreIterators.h +5 -0
  69. data/vendor/eigen/Eigen/src/Core/CwiseBinaryOp.h +21 -22
  70. data/vendor/eigen/Eigen/src/Core/CwiseNullaryOp.h +153 -18
  71. data/vendor/eigen/Eigen/src/Core/CwiseUnaryOp.h +6 -6
  72. data/vendor/eigen/Eigen/src/Core/CwiseUnaryView.h +14 -10
  73. data/vendor/eigen/Eigen/src/Core/DenseBase.h +132 -42
  74. data/vendor/eigen/Eigen/src/Core/DenseCoeffsBase.h +25 -21
  75. data/vendor/eigen/Eigen/src/Core/DenseStorage.h +153 -71
  76. data/vendor/eigen/Eigen/src/Core/Diagonal.h +21 -23
  77. data/vendor/eigen/Eigen/src/Core/DiagonalMatrix.h +50 -2
  78. data/vendor/eigen/Eigen/src/Core/DiagonalProduct.h +1 -1
  79. data/vendor/eigen/Eigen/src/Core/Dot.h +10 -10
  80. data/vendor/eigen/Eigen/src/Core/EigenBase.h +10 -9
  81. data/vendor/eigen/Eigen/src/Core/ForceAlignedAccess.h +8 -4
  82. data/vendor/eigen/Eigen/src/Core/Fuzzy.h +3 -3
  83. data/vendor/eigen/Eigen/src/Core/GeneralProduct.h +20 -10
  84. data/vendor/eigen/Eigen/src/Core/GenericPacketMath.h +599 -152
  85. data/vendor/eigen/Eigen/src/Core/GlobalFunctions.h +40 -33
  86. data/vendor/eigen/Eigen/src/Core/IO.h +40 -7
  87. data/vendor/eigen/Eigen/src/Core/IndexedView.h +237 -0
  88. data/vendor/eigen/Eigen/src/Core/Inverse.h +9 -10
  89. data/vendor/eigen/Eigen/src/Core/Map.h +7 -7
  90. data/vendor/eigen/Eigen/src/Core/MapBase.h +10 -3
  91. data/vendor/eigen/Eigen/src/Core/MathFunctions.h +767 -125
  92. data/vendor/eigen/Eigen/src/Core/MathFunctionsImpl.h +118 -19
  93. data/vendor/eigen/Eigen/src/Core/Matrix.h +131 -25
  94. data/vendor/eigen/Eigen/src/Core/MatrixBase.h +21 -3
  95. data/vendor/eigen/Eigen/src/Core/NestByValue.h +25 -50
  96. data/vendor/eigen/Eigen/src/Core/NoAlias.h +4 -3
  97. data/vendor/eigen/Eigen/src/Core/NumTraits.h +107 -20
  98. data/vendor/eigen/Eigen/src/Core/PartialReduxEvaluator.h +232 -0
  99. data/vendor/eigen/Eigen/src/Core/PermutationMatrix.h +3 -31
  100. data/vendor/eigen/Eigen/src/Core/PlainObjectBase.h +152 -59
  101. data/vendor/eigen/Eigen/src/Core/Product.h +30 -25
  102. data/vendor/eigen/Eigen/src/Core/ProductEvaluators.h +192 -125
  103. data/vendor/eigen/Eigen/src/Core/Random.h +37 -1
  104. data/vendor/eigen/Eigen/src/Core/Redux.h +180 -170
  105. data/vendor/eigen/Eigen/src/Core/Ref.h +121 -23
  106. data/vendor/eigen/Eigen/src/Core/Replicate.h +8 -8
  107. data/vendor/eigen/Eigen/src/Core/Reshaped.h +454 -0
  108. data/vendor/eigen/Eigen/src/Core/ReturnByValue.h +7 -5
  109. data/vendor/eigen/Eigen/src/Core/Reverse.h +18 -12
  110. data/vendor/eigen/Eigen/src/Core/Select.h +8 -6
  111. data/vendor/eigen/Eigen/src/Core/SelfAdjointView.h +33 -20
  112. data/vendor/eigen/Eigen/src/Core/Solve.h +14 -14
  113. data/vendor/eigen/Eigen/src/Core/SolveTriangular.h +16 -16
  114. data/vendor/eigen/Eigen/src/Core/SolverBase.h +41 -3
  115. data/vendor/eigen/Eigen/src/Core/StableNorm.h +100 -70
  116. data/vendor/eigen/Eigen/src/Core/StlIterators.h +463 -0
  117. data/vendor/eigen/Eigen/src/Core/Stride.h +9 -4
  118. data/vendor/eigen/Eigen/src/Core/Swap.h +5 -4
  119. data/vendor/eigen/Eigen/src/Core/Transpose.h +88 -27
  120. data/vendor/eigen/Eigen/src/Core/Transpositions.h +26 -47
  121. data/vendor/eigen/Eigen/src/Core/TriangularMatrix.h +93 -75
  122. data/vendor/eigen/Eigen/src/Core/VectorBlock.h +5 -5
  123. data/vendor/eigen/Eigen/src/Core/VectorwiseOp.h +159 -70
  124. data/vendor/eigen/Eigen/src/Core/Visitor.h +137 -29
  125. data/vendor/eigen/Eigen/src/Core/arch/AVX/Complex.h +50 -129
  126. data/vendor/eigen/Eigen/src/Core/arch/AVX/MathFunctions.h +126 -337
  127. data/vendor/eigen/Eigen/src/Core/arch/AVX/PacketMath.h +1092 -155
  128. data/vendor/eigen/Eigen/src/Core/arch/AVX/TypeCasting.h +65 -1
  129. data/vendor/eigen/Eigen/src/Core/arch/AVX512/Complex.h +422 -0
  130. data/vendor/eigen/Eigen/src/Core/arch/AVX512/MathFunctions.h +207 -236
  131. data/vendor/eigen/Eigen/src/Core/arch/AVX512/PacketMath.h +1482 -495
  132. data/vendor/eigen/Eigen/src/Core/arch/AVX512/TypeCasting.h +89 -0
  133. data/vendor/eigen/Eigen/src/Core/arch/AltiVec/Complex.h +152 -165
  134. data/vendor/eigen/Eigen/src/Core/arch/AltiVec/MathFunctions.h +19 -251
  135. data/vendor/eigen/Eigen/src/Core/arch/AltiVec/MatrixProduct.h +2937 -0
  136. data/vendor/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h +221 -0
  137. data/vendor/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h +629 -0
  138. data/vendor/eigen/Eigen/src/Core/arch/AltiVec/PacketMath.h +2042 -392
  139. data/vendor/eigen/Eigen/src/Core/arch/CUDA/Complex.h +235 -80
  140. data/vendor/eigen/Eigen/src/Core/arch/Default/BFloat16.h +700 -0
  141. data/vendor/eigen/Eigen/src/Core/arch/Default/ConjHelper.h +102 -14
  142. data/vendor/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h +1649 -0
  143. data/vendor/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h +110 -0
  144. data/vendor/eigen/Eigen/src/Core/arch/Default/Half.h +942 -0
  145. data/vendor/eigen/Eigen/src/Core/arch/Default/Settings.h +1 -1
  146. data/vendor/eigen/Eigen/src/Core/arch/Default/TypeCasting.h +120 -0
  147. data/vendor/eigen/Eigen/src/Core/arch/{CUDA → GPU}/MathFunctions.h +16 -4
  148. data/vendor/eigen/Eigen/src/Core/arch/GPU/PacketMath.h +1685 -0
  149. data/vendor/eigen/Eigen/src/Core/arch/GPU/TypeCasting.h +80 -0
  150. data/vendor/eigen/Eigen/src/Core/arch/HIP/hcc/math_constants.h +23 -0
  151. data/vendor/eigen/Eigen/src/Core/arch/MSA/Complex.h +648 -0
  152. data/vendor/eigen/Eigen/src/Core/arch/MSA/MathFunctions.h +387 -0
  153. data/vendor/eigen/Eigen/src/Core/arch/MSA/PacketMath.h +1233 -0
  154. data/vendor/eigen/Eigen/src/Core/arch/NEON/Complex.h +313 -219
  155. data/vendor/eigen/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h +183 -0
  156. data/vendor/eigen/Eigen/src/Core/arch/NEON/MathFunctions.h +54 -70
  157. data/vendor/eigen/Eigen/src/Core/arch/NEON/PacketMath.h +4376 -549
  158. data/vendor/eigen/Eigen/src/Core/arch/NEON/TypeCasting.h +1419 -0
  159. data/vendor/eigen/Eigen/src/Core/arch/SSE/Complex.h +59 -179
  160. data/vendor/eigen/Eigen/src/Core/arch/SSE/MathFunctions.h +65 -428
  161. data/vendor/eigen/Eigen/src/Core/arch/SSE/PacketMath.h +893 -283
  162. data/vendor/eigen/Eigen/src/Core/arch/SSE/TypeCasting.h +65 -0
  163. data/vendor/eigen/Eigen/src/Core/arch/SVE/MathFunctions.h +44 -0
  164. data/vendor/eigen/Eigen/src/Core/arch/SVE/PacketMath.h +752 -0
  165. data/vendor/eigen/Eigen/src/Core/arch/SVE/TypeCasting.h +49 -0
  166. data/vendor/eigen/Eigen/src/Core/arch/SYCL/InteropHeaders.h +232 -0
  167. data/vendor/eigen/Eigen/src/Core/arch/SYCL/MathFunctions.h +301 -0
  168. data/vendor/eigen/Eigen/src/Core/arch/SYCL/PacketMath.h +670 -0
  169. data/vendor/eigen/Eigen/src/Core/arch/SYCL/SyclMemoryModel.h +694 -0
  170. data/vendor/eigen/Eigen/src/Core/arch/SYCL/TypeCasting.h +85 -0
  171. data/vendor/eigen/Eigen/src/Core/arch/ZVector/Complex.h +212 -183
  172. data/vendor/eigen/Eigen/src/Core/arch/ZVector/MathFunctions.h +101 -5
  173. data/vendor/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h +510 -395
  174. data/vendor/eigen/Eigen/src/Core/functors/AssignmentFunctors.h +11 -2
  175. data/vendor/eigen/Eigen/src/Core/functors/BinaryFunctors.h +112 -46
  176. data/vendor/eigen/Eigen/src/Core/functors/NullaryFunctors.h +31 -30
  177. data/vendor/eigen/Eigen/src/Core/functors/StlFunctors.h +32 -2
  178. data/vendor/eigen/Eigen/src/Core/functors/UnaryFunctors.h +355 -16
  179. data/vendor/eigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h +1075 -586
  180. data/vendor/eigen/Eigen/src/Core/products/GeneralMatrixMatrix.h +49 -24
  181. data/vendor/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +41 -35
  182. data/vendor/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h +6 -6
  183. data/vendor/eigen/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h +4 -2
  184. data/vendor/eigen/Eigen/src/Core/products/GeneralMatrixVector.h +382 -483
  185. data/vendor/eigen/Eigen/src/Core/products/Parallelizer.h +22 -5
  186. data/vendor/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +53 -30
  187. data/vendor/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h +16 -8
  188. data/vendor/eigen/Eigen/src/Core/products/SelfadjointMatrixVector.h +8 -6
  189. data/vendor/eigen/Eigen/src/Core/products/SelfadjointProduct.h +4 -4
  190. data/vendor/eigen/Eigen/src/Core/products/SelfadjointRank2Update.h +5 -4
  191. data/vendor/eigen/Eigen/src/Core/products/TriangularMatrixMatrix.h +33 -27
  192. data/vendor/eigen/Eigen/src/Core/products/TriangularMatrixMatrix_BLAS.h +14 -12
  193. data/vendor/eigen/Eigen/src/Core/products/TriangularSolverMatrix.h +36 -34
  194. data/vendor/eigen/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h +8 -4
  195. data/vendor/eigen/Eigen/src/Core/products/TriangularSolverVector.h +13 -10
  196. data/vendor/eigen/Eigen/src/Core/util/BlasUtil.h +304 -119
  197. data/vendor/eigen/Eigen/src/Core/util/ConfigureVectorization.h +512 -0
  198. data/vendor/eigen/Eigen/src/Core/util/Constants.h +25 -9
  199. data/vendor/eigen/Eigen/src/Core/util/DisableStupidWarnings.h +26 -3
  200. data/vendor/eigen/Eigen/src/Core/util/ForwardDeclarations.h +29 -9
  201. data/vendor/eigen/Eigen/src/Core/util/IndexedViewHelper.h +186 -0
  202. data/vendor/eigen/Eigen/src/Core/util/IntegralConstant.h +272 -0
  203. data/vendor/eigen/Eigen/src/Core/util/MKL_support.h +8 -1
  204. data/vendor/eigen/Eigen/src/Core/util/Macros.h +709 -246
  205. data/vendor/eigen/Eigen/src/Core/util/Memory.h +222 -52
  206. data/vendor/eigen/Eigen/src/Core/util/Meta.h +355 -77
  207. data/vendor/eigen/Eigen/src/Core/util/ReenableStupidWarnings.h +5 -1
  208. data/vendor/eigen/Eigen/src/Core/util/ReshapedHelper.h +51 -0
  209. data/vendor/eigen/Eigen/src/Core/util/StaticAssert.h +8 -5
  210. data/vendor/eigen/Eigen/src/Core/util/SymbolicIndex.h +293 -0
  211. data/vendor/eigen/Eigen/src/Core/util/XprHelper.h +65 -30
  212. data/vendor/eigen/Eigen/src/Eigenvalues/ComplexEigenSolver.h +1 -1
  213. data/vendor/eigen/Eigen/src/Eigenvalues/ComplexSchur.h +7 -4
  214. data/vendor/eigen/Eigen/src/Eigenvalues/EigenSolver.h +2 -2
  215. data/vendor/eigen/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h +1 -1
  216. data/vendor/eigen/Eigen/src/Eigenvalues/HessenbergDecomposition.h +2 -2
  217. data/vendor/eigen/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h +2 -2
  218. data/vendor/eigen/Eigen/src/Eigenvalues/RealQZ.h +9 -6
  219. data/vendor/eigen/Eigen/src/Eigenvalues/RealSchur.h +21 -9
  220. data/vendor/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +77 -43
  221. data/vendor/eigen/Eigen/src/Eigenvalues/Tridiagonalization.h +20 -15
  222. data/vendor/eigen/Eigen/src/Geometry/AlignedBox.h +99 -5
  223. data/vendor/eigen/Eigen/src/Geometry/AngleAxis.h +4 -4
  224. data/vendor/eigen/Eigen/src/Geometry/EulerAngles.h +3 -3
  225. data/vendor/eigen/Eigen/src/Geometry/Homogeneous.h +15 -11
  226. data/vendor/eigen/Eigen/src/Geometry/Hyperplane.h +1 -1
  227. data/vendor/eigen/Eigen/src/Geometry/OrthoMethods.h +3 -2
  228. data/vendor/eigen/Eigen/src/Geometry/ParametrizedLine.h +39 -2
  229. data/vendor/eigen/Eigen/src/Geometry/Quaternion.h +70 -14
  230. data/vendor/eigen/Eigen/src/Geometry/Rotation2D.h +3 -3
  231. data/vendor/eigen/Eigen/src/Geometry/Scaling.h +23 -5
  232. data/vendor/eigen/Eigen/src/Geometry/Transform.h +88 -67
  233. data/vendor/eigen/Eigen/src/Geometry/Translation.h +6 -12
  234. data/vendor/eigen/Eigen/src/Geometry/Umeyama.h +1 -1
  235. data/vendor/eigen/Eigen/src/Geometry/arch/Geometry_SIMD.h +168 -0
  236. data/vendor/eigen/Eigen/src/Householder/BlockHouseholder.h +9 -2
  237. data/vendor/eigen/Eigen/src/Householder/Householder.h +8 -4
  238. data/vendor/eigen/Eigen/src/Householder/HouseholderSequence.h +123 -48
  239. data/vendor/eigen/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +15 -15
  240. data/vendor/eigen/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +7 -23
  241. data/vendor/eigen/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +5 -22
  242. data/vendor/eigen/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +41 -47
  243. data/vendor/eigen/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +51 -60
  244. data/vendor/eigen/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +70 -20
  245. data/vendor/eigen/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h +2 -20
  246. data/vendor/eigen/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h +11 -9
  247. data/vendor/eigen/Eigen/src/Jacobi/Jacobi.h +31 -10
  248. data/vendor/eigen/Eigen/src/KLUSupport/KLUSupport.h +358 -0
  249. data/vendor/eigen/Eigen/src/LU/Determinant.h +35 -19
  250. data/vendor/eigen/Eigen/src/LU/FullPivLU.h +29 -43
  251. data/vendor/eigen/Eigen/src/LU/InverseImpl.h +25 -8
  252. data/vendor/eigen/Eigen/src/LU/PartialPivLU.h +71 -58
  253. data/vendor/eigen/Eigen/src/LU/arch/InverseSize4.h +351 -0
  254. data/vendor/eigen/Eigen/src/OrderingMethods/Amd.h +7 -17
  255. data/vendor/eigen/Eigen/src/OrderingMethods/Eigen_Colamd.h +297 -277
  256. data/vendor/eigen/Eigen/src/OrderingMethods/Ordering.h +6 -10
  257. data/vendor/eigen/Eigen/src/PaStiXSupport/PaStiXSupport.h +1 -1
  258. data/vendor/eigen/Eigen/src/PardisoSupport/PardisoSupport.h +9 -7
  259. data/vendor/eigen/Eigen/src/QR/ColPivHouseholderQR.h +41 -20
  260. data/vendor/eigen/Eigen/src/QR/CompleteOrthogonalDecomposition.h +100 -27
  261. data/vendor/eigen/Eigen/src/QR/FullPivHouseholderQR.h +59 -22
  262. data/vendor/eigen/Eigen/src/QR/HouseholderQR.h +48 -23
  263. data/vendor/eigen/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h +25 -3
  264. data/vendor/eigen/Eigen/src/SVD/BDCSVD.h +183 -63
  265. data/vendor/eigen/Eigen/src/SVD/JacobiSVD.h +22 -14
  266. data/vendor/eigen/Eigen/src/SVD/SVDBase.h +83 -22
  267. data/vendor/eigen/Eigen/src/SVD/UpperBidiagonalization.h +3 -3
  268. data/vendor/eigen/Eigen/src/SparseCholesky/SimplicialCholesky.h +17 -9
  269. data/vendor/eigen/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +12 -37
  270. data/vendor/eigen/Eigen/src/SparseCore/AmbiVector.h +3 -2
  271. data/vendor/eigen/Eigen/src/SparseCore/CompressedStorage.h +16 -0
  272. data/vendor/eigen/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +6 -6
  273. data/vendor/eigen/Eigen/src/SparseCore/SparseAssign.h +81 -27
  274. data/vendor/eigen/Eigen/src/SparseCore/SparseBlock.h +25 -57
  275. data/vendor/eigen/Eigen/src/SparseCore/SparseCompressedBase.h +40 -11
  276. data/vendor/eigen/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +11 -15
  277. data/vendor/eigen/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +4 -2
  278. data/vendor/eigen/Eigen/src/SparseCore/SparseDenseProduct.h +30 -8
  279. data/vendor/eigen/Eigen/src/SparseCore/SparseMatrix.h +126 -11
  280. data/vendor/eigen/Eigen/src/SparseCore/SparseMatrixBase.h +5 -12
  281. data/vendor/eigen/Eigen/src/SparseCore/SparseProduct.h +13 -1
  282. data/vendor/eigen/Eigen/src/SparseCore/SparseRef.h +7 -7
  283. data/vendor/eigen/Eigen/src/SparseCore/SparseSelfAdjointView.h +5 -2
  284. data/vendor/eigen/Eigen/src/SparseCore/SparseUtil.h +8 -0
  285. data/vendor/eigen/Eigen/src/SparseCore/SparseVector.h +1 -1
  286. data/vendor/eigen/Eigen/src/SparseCore/SparseView.h +1 -0
  287. data/vendor/eigen/Eigen/src/SparseLU/SparseLU.h +162 -12
  288. data/vendor/eigen/Eigen/src/SparseLU/SparseLU_Memory.h +1 -1
  289. data/vendor/eigen/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h +76 -2
  290. data/vendor/eigen/Eigen/src/SparseLU/SparseLU_column_dfs.h +2 -2
  291. data/vendor/eigen/Eigen/src/SparseLU/SparseLU_gemm_kernel.h +1 -1
  292. data/vendor/eigen/Eigen/src/SparseLU/SparseLU_panel_bmod.h +1 -1
  293. data/vendor/eigen/Eigen/src/SparseQR/SparseQR.h +19 -6
  294. data/vendor/eigen/Eigen/src/StlSupport/StdDeque.h +2 -12
  295. data/vendor/eigen/Eigen/src/StlSupport/StdList.h +2 -2
  296. data/vendor/eigen/Eigen/src/StlSupport/StdVector.h +2 -2
  297. data/vendor/eigen/Eigen/src/SuperLUSupport/SuperLUSupport.h +6 -8
  298. data/vendor/eigen/Eigen/src/UmfPackSupport/UmfPackSupport.h +175 -39
  299. data/vendor/eigen/Eigen/src/misc/lapacke.h +5 -4
  300. data/vendor/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.h +28 -2
  301. data/vendor/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.h +155 -11
  302. data/vendor/eigen/Eigen/src/plugins/BlockMethods.h +626 -242
  303. data/vendor/eigen/Eigen/src/plugins/CommonCwiseUnaryOps.h +14 -0
  304. data/vendor/eigen/Eigen/src/plugins/IndexedViewMethods.h +262 -0
  305. data/vendor/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.h +4 -4
  306. data/vendor/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.h +10 -0
  307. data/vendor/eigen/Eigen/src/plugins/ReshapedMethods.h +149 -0
  308. data/vendor/eigen/README.md +2 -0
  309. data/vendor/eigen/bench/btl/README +1 -1
  310. data/vendor/eigen/bench/tensors/README +6 -7
  311. data/vendor/eigen/ci/README.md +56 -0
  312. data/vendor/eigen/demos/mix_eigen_and_c/README +1 -1
  313. data/vendor/eigen/unsupported/Eigen/CXX11/src/Tensor/README.md +213 -158
  314. data/vendor/eigen/unsupported/README.txt +1 -1
  315. data/vendor/tomotopy/README.kr.rst +21 -0
  316. data/vendor/tomotopy/README.rst +20 -0
  317. data/vendor/tomotopy/src/Labeling/FoRelevance.cpp +2 -2
  318. data/vendor/tomotopy/src/Labeling/Phraser.hpp +1 -1
  319. data/vendor/tomotopy/src/TopicModel/CTModel.hpp +2 -1
  320. data/vendor/tomotopy/src/TopicModel/DMRModel.hpp +2 -1
  321. data/vendor/tomotopy/src/TopicModel/DTModel.hpp +1 -1
  322. data/vendor/tomotopy/src/TopicModel/GDMRModel.hpp +2 -2
  323. data/vendor/tomotopy/src/TopicModel/HDP.h +1 -0
  324. data/vendor/tomotopy/src/TopicModel/HDPModel.hpp +53 -2
  325. data/vendor/tomotopy/src/TopicModel/HLDAModel.hpp +1 -1
  326. data/vendor/tomotopy/src/TopicModel/HPAModel.hpp +1 -0
  327. data/vendor/tomotopy/src/TopicModel/LDACVB0Model.hpp +2 -2
  328. data/vendor/tomotopy/src/TopicModel/LDAModel.hpp +16 -5
  329. data/vendor/tomotopy/src/TopicModel/LLDAModel.hpp +1 -0
  330. data/vendor/tomotopy/src/TopicModel/MGLDAModel.hpp +1 -0
  331. data/vendor/tomotopy/src/TopicModel/PLDAModel.hpp +1 -0
  332. data/vendor/tomotopy/src/TopicModel/PT.h +3 -1
  333. data/vendor/tomotopy/src/TopicModel/PTModel.hpp +31 -1
  334. data/vendor/tomotopy/src/TopicModel/SLDAModel.hpp +2 -2
  335. data/vendor/tomotopy/src/TopicModel/TopicModel.hpp +7 -5
  336. data/vendor/tomotopy/src/Utils/EigenAddonOps.hpp +36 -1
  337. data/vendor/tomotopy/src/Utils/exception.h +6 -0
  338. data/vendor/tomotopy/src/Utils/sample.hpp +14 -12
  339. data/vendor/tomotopy/src/Utils/sse_gamma.h +0 -3
  340. metadata +60 -14
  341. data/vendor/eigen/Eigen/CMakeLists.txt +0 -19
  342. data/vendor/eigen/Eigen/src/Core/arch/CUDA/Half.h +0 -674
  343. data/vendor/eigen/Eigen/src/Core/arch/CUDA/PacketMath.h +0 -333
  344. data/vendor/eigen/Eigen/src/Core/arch/CUDA/PacketMathHalf.h +0 -1124
  345. data/vendor/eigen/Eigen/src/Core/arch/CUDA/TypeCasting.h +0 -212
  346. data/vendor/eigen/Eigen/src/Geometry/arch/Geometry_SSE.h +0 -161
  347. data/vendor/eigen/Eigen/src/LU/arch/Inverse_SSE.h +0 -338
@@ -0,0 +1,463 @@
1
+ // This file is part of Eigen, a lightweight C++ template library
2
+ // for linear algebra.
3
+ //
4
+ // Copyright (C) 2018 Gael Guennebaud <gael.guennebaud@inria.fr>
5
+ //
6
+ // This Source Code Form is subject to the terms of the Mozilla
7
+ // Public License v. 2.0. If a copy of the MPL was not distributed
8
+ // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
9
+
10
+ #ifndef EIGEN_STLITERATORS_H
11
+ #define EIGEN_STLITERATORS_H
12
+
13
+ namespace Eigen {
14
+
15
+ namespace internal {
16
+
17
+ template<typename IteratorType>
18
+ struct indexed_based_stl_iterator_traits;
19
+
20
+ template<typename Derived>
21
+ class indexed_based_stl_iterator_base
22
+ {
23
+ protected:
24
+ typedef indexed_based_stl_iterator_traits<Derived> traits;
25
+ typedef typename traits::XprType XprType;
26
+ typedef indexed_based_stl_iterator_base<typename traits::non_const_iterator> non_const_iterator;
27
+ typedef indexed_based_stl_iterator_base<typename traits::const_iterator> const_iterator;
28
+ typedef typename internal::conditional<internal::is_const<XprType>::value,non_const_iterator,const_iterator>::type other_iterator;
29
+ // NOTE: in C++03 we cannot declare friend classes through typedefs because we need to write friend class:
30
+ friend class indexed_based_stl_iterator_base<typename traits::const_iterator>;
31
+ friend class indexed_based_stl_iterator_base<typename traits::non_const_iterator>;
32
+ public:
33
+ typedef Index difference_type;
34
+ typedef std::random_access_iterator_tag iterator_category;
35
+
36
+ indexed_based_stl_iterator_base() EIGEN_NO_THROW : mp_xpr(0), m_index(0) {}
37
+ indexed_based_stl_iterator_base(XprType& xpr, Index index) EIGEN_NO_THROW : mp_xpr(&xpr), m_index(index) {}
38
+
39
+ indexed_based_stl_iterator_base(const non_const_iterator& other) EIGEN_NO_THROW
40
+ : mp_xpr(other.mp_xpr), m_index(other.m_index)
41
+ {}
42
+
43
+ indexed_based_stl_iterator_base& operator=(const non_const_iterator& other)
44
+ {
45
+ mp_xpr = other.mp_xpr;
46
+ m_index = other.m_index;
47
+ return *this;
48
+ }
49
+
50
+ Derived& operator++() { ++m_index; return derived(); }
51
+ Derived& operator--() { --m_index; return derived(); }
52
+
53
+ Derived operator++(int) { Derived prev(derived()); operator++(); return prev;}
54
+ Derived operator--(int) { Derived prev(derived()); operator--(); return prev;}
55
+
56
+ friend Derived operator+(const indexed_based_stl_iterator_base& a, Index b) { Derived ret(a.derived()); ret += b; return ret; }
57
+ friend Derived operator-(const indexed_based_stl_iterator_base& a, Index b) { Derived ret(a.derived()); ret -= b; return ret; }
58
+ friend Derived operator+(Index a, const indexed_based_stl_iterator_base& b) { Derived ret(b.derived()); ret += a; return ret; }
59
+ friend Derived operator-(Index a, const indexed_based_stl_iterator_base& b) { Derived ret(b.derived()); ret -= a; return ret; }
60
+
61
+ Derived& operator+=(Index b) { m_index += b; return derived(); }
62
+ Derived& operator-=(Index b) { m_index -= b; return derived(); }
63
+
64
+ difference_type operator-(const indexed_based_stl_iterator_base& other) const
65
+ {
66
+ eigen_assert(mp_xpr == other.mp_xpr);
67
+ return m_index - other.m_index;
68
+ }
69
+
70
+ difference_type operator-(const other_iterator& other) const
71
+ {
72
+ eigen_assert(mp_xpr == other.mp_xpr);
73
+ return m_index - other.m_index;
74
+ }
75
+
76
+ bool operator==(const indexed_based_stl_iterator_base& other) const { eigen_assert(mp_xpr == other.mp_xpr); return m_index == other.m_index; }
77
+ bool operator!=(const indexed_based_stl_iterator_base& other) const { eigen_assert(mp_xpr == other.mp_xpr); return m_index != other.m_index; }
78
+ bool operator< (const indexed_based_stl_iterator_base& other) const { eigen_assert(mp_xpr == other.mp_xpr); return m_index < other.m_index; }
79
+ bool operator<=(const indexed_based_stl_iterator_base& other) const { eigen_assert(mp_xpr == other.mp_xpr); return m_index <= other.m_index; }
80
+ bool operator> (const indexed_based_stl_iterator_base& other) const { eigen_assert(mp_xpr == other.mp_xpr); return m_index > other.m_index; }
81
+ bool operator>=(const indexed_based_stl_iterator_base& other) const { eigen_assert(mp_xpr == other.mp_xpr); return m_index >= other.m_index; }
82
+
83
+ bool operator==(const other_iterator& other) const { eigen_assert(mp_xpr == other.mp_xpr); return m_index == other.m_index; }
84
+ bool operator!=(const other_iterator& other) const { eigen_assert(mp_xpr == other.mp_xpr); return m_index != other.m_index; }
85
+ bool operator< (const other_iterator& other) const { eigen_assert(mp_xpr == other.mp_xpr); return m_index < other.m_index; }
86
+ bool operator<=(const other_iterator& other) const { eigen_assert(mp_xpr == other.mp_xpr); return m_index <= other.m_index; }
87
+ bool operator> (const other_iterator& other) const { eigen_assert(mp_xpr == other.mp_xpr); return m_index > other.m_index; }
88
+ bool operator>=(const other_iterator& other) const { eigen_assert(mp_xpr == other.mp_xpr); return m_index >= other.m_index; }
89
+
90
+ protected:
91
+
92
+ Derived& derived() { return static_cast<Derived&>(*this); }
93
+ const Derived& derived() const { return static_cast<const Derived&>(*this); }
94
+
95
+ XprType *mp_xpr;
96
+ Index m_index;
97
+ };
98
+
99
+ template<typename Derived>
100
+ class indexed_based_stl_reverse_iterator_base
101
+ {
102
+ protected:
103
+ typedef indexed_based_stl_iterator_traits<Derived> traits;
104
+ typedef typename traits::XprType XprType;
105
+ typedef indexed_based_stl_reverse_iterator_base<typename traits::non_const_iterator> non_const_iterator;
106
+ typedef indexed_based_stl_reverse_iterator_base<typename traits::const_iterator> const_iterator;
107
+ typedef typename internal::conditional<internal::is_const<XprType>::value,non_const_iterator,const_iterator>::type other_iterator;
108
+ // NOTE: in C++03 we cannot declare friend classes through typedefs because we need to write friend class:
109
+ friend class indexed_based_stl_reverse_iterator_base<typename traits::const_iterator>;
110
+ friend class indexed_based_stl_reverse_iterator_base<typename traits::non_const_iterator>;
111
+ public:
112
+ typedef Index difference_type;
113
+ typedef std::random_access_iterator_tag iterator_category;
114
+
115
+ indexed_based_stl_reverse_iterator_base() : mp_xpr(0), m_index(0) {}
116
+ indexed_based_stl_reverse_iterator_base(XprType& xpr, Index index) : mp_xpr(&xpr), m_index(index) {}
117
+
118
+ indexed_based_stl_reverse_iterator_base(const non_const_iterator& other)
119
+ : mp_xpr(other.mp_xpr), m_index(other.m_index)
120
+ {}
121
+
122
+ indexed_based_stl_reverse_iterator_base& operator=(const non_const_iterator& other)
123
+ {
124
+ mp_xpr = other.mp_xpr;
125
+ m_index = other.m_index;
126
+ return *this;
127
+ }
128
+
129
+ Derived& operator++() { --m_index; return derived(); }
130
+ Derived& operator--() { ++m_index; return derived(); }
131
+
132
+ Derived operator++(int) { Derived prev(derived()); operator++(); return prev;}
133
+ Derived operator--(int) { Derived prev(derived()); operator--(); return prev;}
134
+
135
+ friend Derived operator+(const indexed_based_stl_reverse_iterator_base& a, Index b) { Derived ret(a.derived()); ret += b; return ret; }
136
+ friend Derived operator-(const indexed_based_stl_reverse_iterator_base& a, Index b) { Derived ret(a.derived()); ret -= b; return ret; }
137
+ friend Derived operator+(Index a, const indexed_based_stl_reverse_iterator_base& b) { Derived ret(b.derived()); ret += a; return ret; }
138
+ friend Derived operator-(Index a, const indexed_based_stl_reverse_iterator_base& b) { Derived ret(b.derived()); ret -= a; return ret; }
139
+
140
+ Derived& operator+=(Index b) { m_index -= b; return derived(); }
141
+ Derived& operator-=(Index b) { m_index += b; return derived(); }
142
+
143
+ difference_type operator-(const indexed_based_stl_reverse_iterator_base& other) const
144
+ {
145
+ eigen_assert(mp_xpr == other.mp_xpr);
146
+ return other.m_index - m_index;
147
+ }
148
+
149
+ difference_type operator-(const other_iterator& other) const
150
+ {
151
+ eigen_assert(mp_xpr == other.mp_xpr);
152
+ return other.m_index - m_index;
153
+ }
154
+
155
+ bool operator==(const indexed_based_stl_reverse_iterator_base& other) const { eigen_assert(mp_xpr == other.mp_xpr); return m_index == other.m_index; }
156
+ bool operator!=(const indexed_based_stl_reverse_iterator_base& other) const { eigen_assert(mp_xpr == other.mp_xpr); return m_index != other.m_index; }
157
+ bool operator< (const indexed_based_stl_reverse_iterator_base& other) const { eigen_assert(mp_xpr == other.mp_xpr); return m_index > other.m_index; }
158
+ bool operator<=(const indexed_based_stl_reverse_iterator_base& other) const { eigen_assert(mp_xpr == other.mp_xpr); return m_index >= other.m_index; }
159
+ bool operator> (const indexed_based_stl_reverse_iterator_base& other) const { eigen_assert(mp_xpr == other.mp_xpr); return m_index < other.m_index; }
160
+ bool operator>=(const indexed_based_stl_reverse_iterator_base& other) const { eigen_assert(mp_xpr == other.mp_xpr); return m_index <= other.m_index; }
161
+
162
+ bool operator==(const other_iterator& other) const { eigen_assert(mp_xpr == other.mp_xpr); return m_index == other.m_index; }
163
+ bool operator!=(const other_iterator& other) const { eigen_assert(mp_xpr == other.mp_xpr); return m_index != other.m_index; }
164
+ bool operator< (const other_iterator& other) const { eigen_assert(mp_xpr == other.mp_xpr); return m_index > other.m_index; }
165
+ bool operator<=(const other_iterator& other) const { eigen_assert(mp_xpr == other.mp_xpr); return m_index >= other.m_index; }
166
+ bool operator> (const other_iterator& other) const { eigen_assert(mp_xpr == other.mp_xpr); return m_index < other.m_index; }
167
+ bool operator>=(const other_iterator& other) const { eigen_assert(mp_xpr == other.mp_xpr); return m_index <= other.m_index; }
168
+
169
+ protected:
170
+
171
+ Derived& derived() { return static_cast<Derived&>(*this); }
172
+ const Derived& derived() const { return static_cast<const Derived&>(*this); }
173
+
174
+ XprType *mp_xpr;
175
+ Index m_index;
176
+ };
177
+
178
+ template<typename XprType>
179
+ class pointer_based_stl_iterator
180
+ {
181
+ enum { is_lvalue = internal::is_lvalue<XprType>::value };
182
+ typedef pointer_based_stl_iterator<typename internal::remove_const<XprType>::type> non_const_iterator;
183
+ typedef pointer_based_stl_iterator<typename internal::add_const<XprType>::type> const_iterator;
184
+ typedef typename internal::conditional<internal::is_const<XprType>::value,non_const_iterator,const_iterator>::type other_iterator;
185
+ // NOTE: in C++03 we cannot declare friend classes through typedefs because we need to write friend class:
186
+ friend class pointer_based_stl_iterator<typename internal::add_const<XprType>::type>;
187
+ friend class pointer_based_stl_iterator<typename internal::remove_const<XprType>::type>;
188
+ public:
189
+ typedef Index difference_type;
190
+ typedef typename XprType::Scalar value_type;
191
+ typedef std::random_access_iterator_tag iterator_category;
192
+ typedef typename internal::conditional<bool(is_lvalue), value_type*, const value_type*>::type pointer;
193
+ typedef typename internal::conditional<bool(is_lvalue), value_type&, const value_type&>::type reference;
194
+
195
+
196
+ pointer_based_stl_iterator() EIGEN_NO_THROW : m_ptr(0) {}
197
+ pointer_based_stl_iterator(XprType& xpr, Index index) EIGEN_NO_THROW : m_incr(xpr.innerStride())
198
+ {
199
+ m_ptr = xpr.data() + index * m_incr.value();
200
+ }
201
+
202
+ pointer_based_stl_iterator(const non_const_iterator& other) EIGEN_NO_THROW
203
+ : m_ptr(other.m_ptr), m_incr(other.m_incr)
204
+ {}
205
+
206
+ pointer_based_stl_iterator& operator=(const non_const_iterator& other) EIGEN_NO_THROW
207
+ {
208
+ m_ptr = other.m_ptr;
209
+ m_incr.setValue(other.m_incr);
210
+ return *this;
211
+ }
212
+
213
+ reference operator*() const { return *m_ptr; }
214
+ reference operator[](Index i) const { return *(m_ptr+i*m_incr.value()); }
215
+ pointer operator->() const { return m_ptr; }
216
+
217
+ pointer_based_stl_iterator& operator++() { m_ptr += m_incr.value(); return *this; }
218
+ pointer_based_stl_iterator& operator--() { m_ptr -= m_incr.value(); return *this; }
219
+
220
+ pointer_based_stl_iterator operator++(int) { pointer_based_stl_iterator prev(*this); operator++(); return prev;}
221
+ pointer_based_stl_iterator operator--(int) { pointer_based_stl_iterator prev(*this); operator--(); return prev;}
222
+
223
+ friend pointer_based_stl_iterator operator+(const pointer_based_stl_iterator& a, Index b) { pointer_based_stl_iterator ret(a); ret += b; return ret; }
224
+ friend pointer_based_stl_iterator operator-(const pointer_based_stl_iterator& a, Index b) { pointer_based_stl_iterator ret(a); ret -= b; return ret; }
225
+ friend pointer_based_stl_iterator operator+(Index a, const pointer_based_stl_iterator& b) { pointer_based_stl_iterator ret(b); ret += a; return ret; }
226
+ friend pointer_based_stl_iterator operator-(Index a, const pointer_based_stl_iterator& b) { pointer_based_stl_iterator ret(b); ret -= a; return ret; }
227
+
228
+ pointer_based_stl_iterator& operator+=(Index b) { m_ptr += b*m_incr.value(); return *this; }
229
+ pointer_based_stl_iterator& operator-=(Index b) { m_ptr -= b*m_incr.value(); return *this; }
230
+
231
+ difference_type operator-(const pointer_based_stl_iterator& other) const {
232
+ return (m_ptr - other.m_ptr)/m_incr.value();
233
+ }
234
+
235
+ difference_type operator-(const other_iterator& other) const {
236
+ return (m_ptr - other.m_ptr)/m_incr.value();
237
+ }
238
+
239
+ bool operator==(const pointer_based_stl_iterator& other) const { return m_ptr == other.m_ptr; }
240
+ bool operator!=(const pointer_based_stl_iterator& other) const { return m_ptr != other.m_ptr; }
241
+ bool operator< (const pointer_based_stl_iterator& other) const { return m_ptr < other.m_ptr; }
242
+ bool operator<=(const pointer_based_stl_iterator& other) const { return m_ptr <= other.m_ptr; }
243
+ bool operator> (const pointer_based_stl_iterator& other) const { return m_ptr > other.m_ptr; }
244
+ bool operator>=(const pointer_based_stl_iterator& other) const { return m_ptr >= other.m_ptr; }
245
+
246
+ bool operator==(const other_iterator& other) const { return m_ptr == other.m_ptr; }
247
+ bool operator!=(const other_iterator& other) const { return m_ptr != other.m_ptr; }
248
+ bool operator< (const other_iterator& other) const { return m_ptr < other.m_ptr; }
249
+ bool operator<=(const other_iterator& other) const { return m_ptr <= other.m_ptr; }
250
+ bool operator> (const other_iterator& other) const { return m_ptr > other.m_ptr; }
251
+ bool operator>=(const other_iterator& other) const { return m_ptr >= other.m_ptr; }
252
+
253
+ protected:
254
+
255
+ pointer m_ptr;
256
+ internal::variable_if_dynamic<Index, XprType::InnerStrideAtCompileTime> m_incr;
257
+ };
258
+
259
+ template<typename _XprType>
260
+ struct indexed_based_stl_iterator_traits<generic_randaccess_stl_iterator<_XprType> >
261
+ {
262
+ typedef _XprType XprType;
263
+ typedef generic_randaccess_stl_iterator<typename internal::remove_const<XprType>::type> non_const_iterator;
264
+ typedef generic_randaccess_stl_iterator<typename internal::add_const<XprType>::type> const_iterator;
265
+ };
266
+
267
+ template<typename XprType>
268
+ class generic_randaccess_stl_iterator : public indexed_based_stl_iterator_base<generic_randaccess_stl_iterator<XprType> >
269
+ {
270
+ public:
271
+ typedef typename XprType::Scalar value_type;
272
+
273
+ protected:
274
+
275
+ enum {
276
+ has_direct_access = (internal::traits<XprType>::Flags & DirectAccessBit) ? 1 : 0,
277
+ is_lvalue = internal::is_lvalue<XprType>::value
278
+ };
279
+
280
+ typedef indexed_based_stl_iterator_base<generic_randaccess_stl_iterator> Base;
281
+ using Base::m_index;
282
+ using Base::mp_xpr;
283
+
284
+ // TODO currently const Transpose/Reshape expressions never returns const references,
285
+ // so lets return by value too.
286
+ //typedef typename internal::conditional<bool(has_direct_access), const value_type&, const value_type>::type read_only_ref_t;
287
+ typedef const value_type read_only_ref_t;
288
+
289
+ public:
290
+
291
+ typedef typename internal::conditional<bool(is_lvalue), value_type *, const value_type *>::type pointer;
292
+ typedef typename internal::conditional<bool(is_lvalue), value_type&, read_only_ref_t>::type reference;
293
+
294
+ generic_randaccess_stl_iterator() : Base() {}
295
+ generic_randaccess_stl_iterator(XprType& xpr, Index index) : Base(xpr,index) {}
296
+ generic_randaccess_stl_iterator(const typename Base::non_const_iterator& other) : Base(other) {}
297
+ using Base::operator=;
298
+
299
+ reference operator*() const { return (*mp_xpr)(m_index); }
300
+ reference operator[](Index i) const { return (*mp_xpr)(m_index+i); }
301
+ pointer operator->() const { return &((*mp_xpr)(m_index)); }
302
+ };
303
+
304
+ template<typename _XprType, DirectionType Direction>
305
+ struct indexed_based_stl_iterator_traits<subvector_stl_iterator<_XprType,Direction> >
306
+ {
307
+ typedef _XprType XprType;
308
+ typedef subvector_stl_iterator<typename internal::remove_const<XprType>::type, Direction> non_const_iterator;
309
+ typedef subvector_stl_iterator<typename internal::add_const<XprType>::type, Direction> const_iterator;
310
+ };
311
+
312
+ template<typename XprType, DirectionType Direction>
313
+ class subvector_stl_iterator : public indexed_based_stl_iterator_base<subvector_stl_iterator<XprType,Direction> >
314
+ {
315
+ protected:
316
+
317
+ enum { is_lvalue = internal::is_lvalue<XprType>::value };
318
+
319
+ typedef indexed_based_stl_iterator_base<subvector_stl_iterator> Base;
320
+ using Base::m_index;
321
+ using Base::mp_xpr;
322
+
323
+ typedef typename internal::conditional<Direction==Vertical,typename XprType::ColXpr,typename XprType::RowXpr>::type SubVectorType;
324
+ typedef typename internal::conditional<Direction==Vertical,typename XprType::ConstColXpr,typename XprType::ConstRowXpr>::type ConstSubVectorType;
325
+
326
+
327
+ public:
328
+ typedef typename internal::conditional<bool(is_lvalue), SubVectorType, ConstSubVectorType>::type reference;
329
+ typedef typename reference::PlainObject value_type;
330
+
331
+ private:
332
+ class subvector_stl_iterator_ptr
333
+ {
334
+ public:
335
+ subvector_stl_iterator_ptr(const reference &subvector) : m_subvector(subvector) {}
336
+ reference* operator->() { return &m_subvector; }
337
+ private:
338
+ reference m_subvector;
339
+ };
340
+ public:
341
+
342
+ typedef subvector_stl_iterator_ptr pointer;
343
+
344
+ subvector_stl_iterator() : Base() {}
345
+ subvector_stl_iterator(XprType& xpr, Index index) : Base(xpr,index) {}
346
+
347
+ reference operator*() const { return (*mp_xpr).template subVector<Direction>(m_index); }
348
+ reference operator[](Index i) const { return (*mp_xpr).template subVector<Direction>(m_index+i); }
349
+ pointer operator->() const { return (*mp_xpr).template subVector<Direction>(m_index); }
350
+ };
351
+
352
+ template<typename _XprType, DirectionType Direction>
353
+ struct indexed_based_stl_iterator_traits<subvector_stl_reverse_iterator<_XprType,Direction> >
354
+ {
355
+ typedef _XprType XprType;
356
+ typedef subvector_stl_reverse_iterator<typename internal::remove_const<XprType>::type, Direction> non_const_iterator;
357
+ typedef subvector_stl_reverse_iterator<typename internal::add_const<XprType>::type, Direction> const_iterator;
358
+ };
359
+
360
+ template<typename XprType, DirectionType Direction>
361
+ class subvector_stl_reverse_iterator : public indexed_based_stl_reverse_iterator_base<subvector_stl_reverse_iterator<XprType,Direction> >
362
+ {
363
+ protected:
364
+
365
+ enum { is_lvalue = internal::is_lvalue<XprType>::value };
366
+
367
+ typedef indexed_based_stl_reverse_iterator_base<subvector_stl_reverse_iterator> Base;
368
+ using Base::m_index;
369
+ using Base::mp_xpr;
370
+
371
+ typedef typename internal::conditional<Direction==Vertical,typename XprType::ColXpr,typename XprType::RowXpr>::type SubVectorType;
372
+ typedef typename internal::conditional<Direction==Vertical,typename XprType::ConstColXpr,typename XprType::ConstRowXpr>::type ConstSubVectorType;
373
+
374
+
375
+ public:
376
+ typedef typename internal::conditional<bool(is_lvalue), SubVectorType, ConstSubVectorType>::type reference;
377
+ typedef typename reference::PlainObject value_type;
378
+
379
+ private:
380
+ class subvector_stl_reverse_iterator_ptr
381
+ {
382
+ public:
383
+ subvector_stl_reverse_iterator_ptr(const reference &subvector) : m_subvector(subvector) {}
384
+ reference* operator->() { return &m_subvector; }
385
+ private:
386
+ reference m_subvector;
387
+ };
388
+ public:
389
+
390
+ typedef subvector_stl_reverse_iterator_ptr pointer;
391
+
392
+ subvector_stl_reverse_iterator() : Base() {}
393
+ subvector_stl_reverse_iterator(XprType& xpr, Index index) : Base(xpr,index) {}
394
+
395
+ reference operator*() const { return (*mp_xpr).template subVector<Direction>(m_index); }
396
+ reference operator[](Index i) const { return (*mp_xpr).template subVector<Direction>(m_index+i); }
397
+ pointer operator->() const { return (*mp_xpr).template subVector<Direction>(m_index); }
398
+ };
399
+
400
+ } // namespace internal
401
+
402
+
403
+ /** returns an iterator to the first element of the 1D vector or array
404
+ * \only_for_vectors
405
+ * \sa end(), cbegin()
406
+ */
407
+ template<typename Derived>
408
+ inline typename DenseBase<Derived>::iterator DenseBase<Derived>::begin()
409
+ {
410
+ EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived);
411
+ return iterator(derived(), 0);
412
+ }
413
+
414
+ /** const version of begin() */
415
+ template<typename Derived>
416
+ inline typename DenseBase<Derived>::const_iterator DenseBase<Derived>::begin() const
417
+ {
418
+ return cbegin();
419
+ }
420
+
421
+ /** returns a read-only const_iterator to the first element of the 1D vector or array
422
+ * \only_for_vectors
423
+ * \sa cend(), begin()
424
+ */
425
+ template<typename Derived>
426
+ inline typename DenseBase<Derived>::const_iterator DenseBase<Derived>::cbegin() const
427
+ {
428
+ EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived);
429
+ return const_iterator(derived(), 0);
430
+ }
431
+
432
+ /** returns an iterator to the element following the last element of the 1D vector or array
433
+ * \only_for_vectors
434
+ * \sa begin(), cend()
435
+ */
436
+ template<typename Derived>
437
+ inline typename DenseBase<Derived>::iterator DenseBase<Derived>::end()
438
+ {
439
+ EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived);
440
+ return iterator(derived(), size());
441
+ }
442
+
443
+ /** const version of end() */
444
+ template<typename Derived>
445
+ inline typename DenseBase<Derived>::const_iterator DenseBase<Derived>::end() const
446
+ {
447
+ return cend();
448
+ }
449
+
450
+ /** returns a read-only const_iterator to the element following the last element of the 1D vector or array
451
+ * \only_for_vectors
452
+ * \sa begin(), cend()
453
+ */
454
+ template<typename Derived>
455
+ inline typename DenseBase<Derived>::const_iterator DenseBase<Derived>::cend() const
456
+ {
457
+ EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived);
458
+ return const_iterator(derived(), size());
459
+ }
460
+
461
+ } // namespace Eigen
462
+
463
+ #endif // EIGEN_STLITERATORS_H
@@ -10,7 +10,7 @@
10
10
  #ifndef EIGEN_STRIDE_H
11
11
  #define EIGEN_STRIDE_H
12
12
 
13
- namespace Eigen {
13
+ namespace Eigen {
14
14
 
15
15
  /** \class Stride
16
16
  * \ingroup Core_Module
@@ -38,6 +38,10 @@ namespace Eigen {
38
38
  * \include Map_general_stride.cpp
39
39
  * Output: \verbinclude Map_general_stride.out
40
40
  *
41
+ * Both strides can be negative, however, a negative stride of -1 cannot be specified at compiletime
42
+ * because of the ambiguity with Dynamic which is defined to -1 (historically, negative strides were
43
+ * not allowed).
44
+ *
41
45
  * \sa class InnerStride, class OuterStride, \ref TopicStorageOrders
42
46
  */
43
47
  template<int _OuterStrideAtCompileTime, int _InnerStrideAtCompileTime>
@@ -55,6 +59,8 @@ class Stride
55
59
  Stride()
56
60
  : m_outer(OuterStrideAtCompileTime), m_inner(InnerStrideAtCompileTime)
57
61
  {
62
+ // FIXME: for Eigen 4 we should use DynamicIndex instead of Dynamic.
63
+ // FIXME: for Eigen 4 we should also unify this API with fix<>
58
64
  eigen_assert(InnerStrideAtCompileTime != Dynamic && OuterStrideAtCompileTime != Dynamic);
59
65
  }
60
66
 
@@ -63,7 +69,6 @@ class Stride
63
69
  Stride(Index outerStride, Index innerStride)
64
70
  : m_outer(outerStride), m_inner(innerStride)
65
71
  {
66
- eigen_assert(innerStride>=0 && outerStride>=0);
67
72
  }
68
73
 
69
74
  /** Copy constructor */
@@ -73,10 +78,10 @@ class Stride
73
78
  {}
74
79
 
75
80
  /** \returns the outer stride */
76
- EIGEN_DEVICE_FUNC
81
+ EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
77
82
  inline Index outer() const { return m_outer.value(); }
78
83
  /** \returns the inner stride */
79
- EIGEN_DEVICE_FUNC
84
+ EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
80
85
  inline Index inner() const { return m_inner.value(); }
81
86
 
82
87
  protected:
@@ -30,12 +30,13 @@ public:
30
30
  typedef typename Base::DstXprType DstXprType;
31
31
  typedef swap_assign_op<Scalar> Functor;
32
32
 
33
- EIGEN_DEVICE_FUNC generic_dense_assignment_kernel(DstEvaluatorTypeT &dst, const SrcEvaluatorTypeT &src, const Functor &func, DstXprType& dstExpr)
33
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
34
+ generic_dense_assignment_kernel(DstEvaluatorTypeT &dst, const SrcEvaluatorTypeT &src, const Functor &func, DstXprType& dstExpr)
34
35
  : Base(dst, src, func, dstExpr)
35
36
  {}
36
37
 
37
38
  template<int StoreMode, int LoadMode, typename PacketType>
38
- void assignPacket(Index row, Index col)
39
+ EIGEN_STRONG_INLINE void assignPacket(Index row, Index col)
39
40
  {
40
41
  PacketType tmp = m_src.template packet<LoadMode,PacketType>(row,col);
41
42
  const_cast<SrcEvaluatorTypeT&>(m_src).template writePacket<LoadMode>(row,col, m_dst.template packet<StoreMode,PacketType>(row,col));
@@ -43,7 +44,7 @@ public:
43
44
  }
44
45
 
45
46
  template<int StoreMode, int LoadMode, typename PacketType>
46
- void assignPacket(Index index)
47
+ EIGEN_STRONG_INLINE void assignPacket(Index index)
47
48
  {
48
49
  PacketType tmp = m_src.template packet<LoadMode,PacketType>(index);
49
50
  const_cast<SrcEvaluatorTypeT&>(m_src).template writePacket<LoadMode>(index, m_dst.template packet<StoreMode,PacketType>(index));
@@ -52,7 +53,7 @@ public:
52
53
 
53
54
  // TODO find a simple way not to have to copy/paste this function from generic_dense_assignment_kernel, by simple I mean no CRTP (Gael)
54
55
  template<int StoreMode, int LoadMode, typename PacketType>
55
- void assignPacketByOuterInner(Index outer, Index inner)
56
+ EIGEN_STRONG_INLINE void assignPacketByOuterInner(Index outer, Index inner)
56
57
  {
57
58
  Index row = Base::rowIndexByOuterInner(outer, inner);
58
59
  Index col = Base::colIndexByOuterInner(outer, inner);