@smake/eigen 1.0.2 → 1.1.1

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 (435) hide show
  1. package/README.md +1 -1
  2. package/eigen/Eigen/AccelerateSupport +52 -0
  3. package/eigen/Eigen/Cholesky +18 -21
  4. package/eigen/Eigen/CholmodSupport +28 -28
  5. package/eigen/Eigen/Core +235 -326
  6. package/eigen/Eigen/Eigenvalues +16 -14
  7. package/eigen/Eigen/Geometry +21 -24
  8. package/eigen/Eigen/Householder +9 -8
  9. package/eigen/Eigen/IterativeLinearSolvers +8 -4
  10. package/eigen/Eigen/Jacobi +14 -14
  11. package/eigen/Eigen/KLUSupport +43 -0
  12. package/eigen/Eigen/LU +16 -20
  13. package/eigen/Eigen/MetisSupport +12 -12
  14. package/eigen/Eigen/OrderingMethods +54 -54
  15. package/eigen/Eigen/PaStiXSupport +23 -20
  16. package/eigen/Eigen/PardisoSupport +17 -14
  17. package/eigen/Eigen/QR +18 -21
  18. package/eigen/Eigen/QtAlignedMalloc +5 -13
  19. package/eigen/Eigen/SPQRSupport +21 -14
  20. package/eigen/Eigen/SVD +23 -18
  21. package/eigen/Eigen/Sparse +1 -4
  22. package/eigen/Eigen/SparseCholesky +18 -23
  23. package/eigen/Eigen/SparseCore +18 -17
  24. package/eigen/Eigen/SparseLU +12 -8
  25. package/eigen/Eigen/SparseQR +16 -14
  26. package/eigen/Eigen/StdDeque +5 -2
  27. package/eigen/Eigen/StdList +5 -2
  28. package/eigen/Eigen/StdVector +5 -2
  29. package/eigen/Eigen/SuperLUSupport +30 -24
  30. package/eigen/Eigen/ThreadPool +80 -0
  31. package/eigen/Eigen/UmfPackSupport +19 -17
  32. package/eigen/Eigen/Version +14 -0
  33. package/eigen/Eigen/src/AccelerateSupport/AccelerateSupport.h +423 -0
  34. package/eigen/Eigen/src/AccelerateSupport/InternalHeaderCheck.h +3 -0
  35. package/eigen/Eigen/src/Cholesky/InternalHeaderCheck.h +3 -0
  36. package/eigen/Eigen/src/Cholesky/LDLT.h +377 -401
  37. package/eigen/Eigen/src/Cholesky/LLT.h +332 -360
  38. package/eigen/Eigen/src/Cholesky/LLT_LAPACKE.h +81 -56
  39. package/eigen/Eigen/src/CholmodSupport/CholmodSupport.h +620 -521
  40. package/eigen/Eigen/src/CholmodSupport/InternalHeaderCheck.h +3 -0
  41. package/eigen/Eigen/src/Core/ArithmeticSequence.h +239 -0
  42. package/eigen/Eigen/src/Core/Array.h +341 -294
  43. package/eigen/Eigen/src/Core/ArrayBase.h +190 -203
  44. package/eigen/Eigen/src/Core/ArrayWrapper.h +127 -171
  45. package/eigen/Eigen/src/Core/Assign.h +30 -40
  46. package/eigen/Eigen/src/Core/AssignEvaluator.h +711 -589
  47. package/eigen/Eigen/src/Core/Assign_MKL.h +130 -125
  48. package/eigen/Eigen/src/Core/BandMatrix.h +268 -283
  49. package/eigen/Eigen/src/Core/Block.h +375 -398
  50. package/eigen/Eigen/src/Core/CommaInitializer.h +86 -97
  51. package/eigen/Eigen/src/Core/ConditionEstimator.h +51 -53
  52. package/eigen/Eigen/src/Core/CoreEvaluators.h +1356 -1026
  53. package/eigen/Eigen/src/Core/CoreIterators.h +73 -59
  54. package/eigen/Eigen/src/Core/CwiseBinaryOp.h +114 -132
  55. package/eigen/Eigen/src/Core/CwiseNullaryOp.h +726 -617
  56. package/eigen/Eigen/src/Core/CwiseTernaryOp.h +77 -103
  57. package/eigen/Eigen/src/Core/CwiseUnaryOp.h +56 -68
  58. package/eigen/Eigen/src/Core/CwiseUnaryView.h +132 -95
  59. package/eigen/Eigen/src/Core/DenseBase.h +632 -571
  60. package/eigen/Eigen/src/Core/DenseCoeffsBase.h +511 -624
  61. package/eigen/Eigen/src/Core/DenseStorage.h +512 -509
  62. package/eigen/Eigen/src/Core/DeviceWrapper.h +153 -0
  63. package/eigen/Eigen/src/Core/Diagonal.h +169 -210
  64. package/eigen/Eigen/src/Core/DiagonalMatrix.h +351 -274
  65. package/eigen/Eigen/src/Core/DiagonalProduct.h +12 -10
  66. package/eigen/Eigen/src/Core/Dot.h +172 -222
  67. package/eigen/Eigen/src/Core/EigenBase.h +75 -85
  68. package/eigen/Eigen/src/Core/Fill.h +138 -0
  69. package/eigen/Eigen/src/Core/FindCoeff.h +464 -0
  70. package/eigen/Eigen/src/Core/ForceAlignedAccess.h +90 -109
  71. package/eigen/Eigen/src/Core/Fuzzy.h +82 -105
  72. package/eigen/Eigen/src/Core/GeneralProduct.h +327 -263
  73. package/eigen/Eigen/src/Core/GenericPacketMath.h +1472 -360
  74. package/eigen/Eigen/src/Core/GlobalFunctions.h +194 -151
  75. package/eigen/Eigen/src/Core/IO.h +147 -139
  76. package/eigen/Eigen/src/Core/IndexedView.h +321 -0
  77. package/eigen/Eigen/src/Core/InnerProduct.h +260 -0
  78. package/eigen/Eigen/src/Core/InternalHeaderCheck.h +3 -0
  79. package/eigen/Eigen/src/Core/Inverse.h +56 -66
  80. package/eigen/Eigen/src/Core/Map.h +124 -142
  81. package/eigen/Eigen/src/Core/MapBase.h +256 -281
  82. package/eigen/Eigen/src/Core/MathFunctions.h +1620 -938
  83. package/eigen/Eigen/src/Core/MathFunctionsImpl.h +233 -71
  84. package/eigen/Eigen/src/Core/Matrix.h +491 -416
  85. package/eigen/Eigen/src/Core/MatrixBase.h +468 -453
  86. package/eigen/Eigen/src/Core/NestByValue.h +66 -85
  87. package/eigen/Eigen/src/Core/NoAlias.h +79 -85
  88. package/eigen/Eigen/src/Core/NumTraits.h +235 -148
  89. package/eigen/Eigen/src/Core/PartialReduxEvaluator.h +253 -0
  90. package/eigen/Eigen/src/Core/PermutationMatrix.h +461 -511
  91. package/eigen/Eigen/src/Core/PlainObjectBase.h +871 -894
  92. package/eigen/Eigen/src/Core/Product.h +260 -139
  93. package/eigen/Eigen/src/Core/ProductEvaluators.h +863 -714
  94. package/eigen/Eigen/src/Core/Random.h +161 -136
  95. package/eigen/Eigen/src/Core/RandomImpl.h +262 -0
  96. package/eigen/Eigen/src/Core/RealView.h +250 -0
  97. package/eigen/Eigen/src/Core/Redux.h +366 -336
  98. package/eigen/Eigen/src/Core/Ref.h +308 -209
  99. package/eigen/Eigen/src/Core/Replicate.h +94 -106
  100. package/eigen/Eigen/src/Core/Reshaped.h +398 -0
  101. package/eigen/Eigen/src/Core/ReturnByValue.h +49 -55
  102. package/eigen/Eigen/src/Core/Reverse.h +136 -145
  103. package/eigen/Eigen/src/Core/Select.h +70 -140
  104. package/eigen/Eigen/src/Core/SelfAdjointView.h +262 -285
  105. package/eigen/Eigen/src/Core/SelfCwiseBinaryOp.h +23 -20
  106. package/eigen/Eigen/src/Core/SkewSymmetricMatrix3.h +382 -0
  107. package/eigen/Eigen/src/Core/Solve.h +97 -111
  108. package/eigen/Eigen/src/Core/SolveTriangular.h +131 -129
  109. package/eigen/Eigen/src/Core/SolverBase.h +138 -101
  110. package/eigen/Eigen/src/Core/StableNorm.h +156 -160
  111. package/eigen/Eigen/src/Core/StlIterators.h +619 -0
  112. package/eigen/Eigen/src/Core/Stride.h +91 -88
  113. package/eigen/Eigen/src/Core/Swap.h +70 -38
  114. package/eigen/Eigen/src/Core/Transpose.h +295 -273
  115. package/eigen/Eigen/src/Core/Transpositions.h +272 -317
  116. package/eigen/Eigen/src/Core/TriangularMatrix.h +670 -755
  117. package/eigen/Eigen/src/Core/VectorBlock.h +59 -72
  118. package/eigen/Eigen/src/Core/VectorwiseOp.h +668 -630
  119. package/eigen/Eigen/src/Core/Visitor.h +480 -216
  120. package/eigen/Eigen/src/Core/arch/AVX/Complex.h +407 -293
  121. package/eigen/Eigen/src/Core/arch/AVX/MathFunctions.h +79 -388
  122. package/eigen/Eigen/src/Core/arch/AVX/PacketMath.h +2935 -491
  123. package/eigen/Eigen/src/Core/arch/AVX/Reductions.h +353 -0
  124. package/eigen/Eigen/src/Core/arch/AVX/TypeCasting.h +279 -22
  125. package/eigen/Eigen/src/Core/arch/AVX512/Complex.h +472 -0
  126. package/eigen/Eigen/src/Core/arch/AVX512/GemmKernel.h +1245 -0
  127. package/eigen/Eigen/src/Core/arch/AVX512/MathFunctions.h +85 -333
  128. package/eigen/Eigen/src/Core/arch/AVX512/MathFunctionsFP16.h +75 -0
  129. package/eigen/Eigen/src/Core/arch/AVX512/PacketMath.h +2490 -649
  130. package/eigen/Eigen/src/Core/arch/AVX512/PacketMathFP16.h +1413 -0
  131. package/eigen/Eigen/src/Core/arch/AVX512/Reductions.h +297 -0
  132. package/eigen/Eigen/src/Core/arch/AVX512/TrsmKernel.h +1167 -0
  133. package/eigen/Eigen/src/Core/arch/AVX512/TrsmUnrolls.inc +1219 -0
  134. package/eigen/Eigen/src/Core/arch/AVX512/TypeCasting.h +277 -0
  135. package/eigen/Eigen/src/Core/arch/AVX512/TypeCastingFP16.h +130 -0
  136. package/eigen/Eigen/src/Core/arch/AltiVec/Complex.h +521 -298
  137. package/eigen/Eigen/src/Core/arch/AltiVec/MathFunctions.h +39 -280
  138. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProduct.h +3686 -0
  139. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h +205 -0
  140. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h +901 -0
  141. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMAbfloat16.h +742 -0
  142. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixVectorProduct.inc +2818 -0
  143. package/eigen/Eigen/src/Core/arch/AltiVec/PacketMath.h +3391 -723
  144. package/eigen/Eigen/src/Core/arch/AltiVec/TypeCasting.h +153 -0
  145. package/eigen/Eigen/src/Core/arch/Default/BFloat16.h +866 -0
  146. package/eigen/Eigen/src/Core/arch/Default/ConjHelper.h +113 -14
  147. package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h +2634 -0
  148. package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h +227 -0
  149. package/eigen/Eigen/src/Core/arch/Default/Half.h +1091 -0
  150. package/eigen/Eigen/src/Core/arch/Default/Settings.h +11 -13
  151. package/eigen/Eigen/src/Core/arch/GPU/Complex.h +244 -0
  152. package/eigen/Eigen/src/Core/arch/GPU/MathFunctions.h +104 -0
  153. package/eigen/Eigen/src/Core/arch/GPU/PacketMath.h +1712 -0
  154. package/eigen/Eigen/src/Core/arch/GPU/Tuple.h +268 -0
  155. package/eigen/Eigen/src/Core/arch/GPU/TypeCasting.h +77 -0
  156. package/eigen/Eigen/src/Core/arch/HIP/hcc/math_constants.h +23 -0
  157. package/eigen/Eigen/src/Core/arch/HVX/PacketMath.h +1088 -0
  158. package/eigen/Eigen/src/Core/arch/LSX/Complex.h +520 -0
  159. package/eigen/Eigen/src/Core/arch/LSX/GeneralBlockPanelKernel.h +23 -0
  160. package/eigen/Eigen/src/Core/arch/LSX/MathFunctions.h +43 -0
  161. package/eigen/Eigen/src/Core/arch/LSX/PacketMath.h +2866 -0
  162. package/eigen/Eigen/src/Core/arch/LSX/TypeCasting.h +526 -0
  163. package/eigen/Eigen/src/Core/arch/MSA/Complex.h +620 -0
  164. package/eigen/Eigen/src/Core/arch/MSA/MathFunctions.h +379 -0
  165. package/eigen/Eigen/src/Core/arch/MSA/PacketMath.h +1237 -0
  166. package/eigen/Eigen/src/Core/arch/NEON/Complex.h +531 -289
  167. package/eigen/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h +243 -0
  168. package/eigen/Eigen/src/Core/arch/NEON/MathFunctions.h +50 -73
  169. package/eigen/Eigen/src/Core/arch/NEON/PacketMath.h +5915 -579
  170. package/eigen/Eigen/src/Core/arch/NEON/TypeCasting.h +1642 -0
  171. package/eigen/Eigen/src/Core/arch/NEON/UnaryFunctors.h +57 -0
  172. package/eigen/Eigen/src/Core/arch/SSE/Complex.h +366 -334
  173. package/eigen/Eigen/src/Core/arch/SSE/MathFunctions.h +40 -514
  174. package/eigen/Eigen/src/Core/arch/SSE/PacketMath.h +2164 -675
  175. package/eigen/Eigen/src/Core/arch/SSE/Reductions.h +324 -0
  176. package/eigen/Eigen/src/Core/arch/SSE/TypeCasting.h +188 -35
  177. package/eigen/Eigen/src/Core/arch/SVE/MathFunctions.h +48 -0
  178. package/eigen/Eigen/src/Core/arch/SVE/PacketMath.h +674 -0
  179. package/eigen/Eigen/src/Core/arch/SVE/TypeCasting.h +52 -0
  180. package/eigen/Eigen/src/Core/arch/SYCL/InteropHeaders.h +227 -0
  181. package/eigen/Eigen/src/Core/arch/SYCL/MathFunctions.h +303 -0
  182. package/eigen/Eigen/src/Core/arch/SYCL/PacketMath.h +576 -0
  183. package/eigen/Eigen/src/Core/arch/SYCL/TypeCasting.h +83 -0
  184. package/eigen/Eigen/src/Core/arch/ZVector/Complex.h +434 -261
  185. package/eigen/Eigen/src/Core/arch/ZVector/MathFunctions.h +160 -53
  186. package/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h +1073 -605
  187. package/eigen/Eigen/src/Core/functors/AssignmentFunctors.h +123 -117
  188. package/eigen/Eigen/src/Core/functors/BinaryFunctors.h +594 -322
  189. package/eigen/Eigen/src/Core/functors/NullaryFunctors.h +204 -118
  190. package/eigen/Eigen/src/Core/functors/StlFunctors.h +110 -97
  191. package/eigen/Eigen/src/Core/functors/TernaryFunctors.h +34 -7
  192. package/eigen/Eigen/src/Core/functors/UnaryFunctors.h +1158 -530
  193. package/eigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h +2329 -1333
  194. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix.h +328 -364
  195. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +191 -178
  196. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h +85 -82
  197. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h +154 -73
  198. package/eigen/Eigen/src/Core/products/GeneralMatrixVector.h +396 -542
  199. package/eigen/Eigen/src/Core/products/GeneralMatrixVector_BLAS.h +80 -77
  200. package/eigen/Eigen/src/Core/products/Parallelizer.h +208 -92
  201. package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +331 -375
  202. package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h +206 -224
  203. package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector.h +139 -146
  204. package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector_BLAS.h +58 -61
  205. package/eigen/Eigen/src/Core/products/SelfadjointProduct.h +71 -71
  206. package/eigen/Eigen/src/Core/products/SelfadjointRank2Update.h +48 -46
  207. package/eigen/Eigen/src/Core/products/TriangularMatrixMatrix.h +294 -369
  208. package/eigen/Eigen/src/Core/products/TriangularMatrixMatrix_BLAS.h +246 -238
  209. package/eigen/Eigen/src/Core/products/TriangularMatrixVector.h +244 -247
  210. package/eigen/Eigen/src/Core/products/TriangularMatrixVector_BLAS.h +212 -192
  211. package/eigen/Eigen/src/Core/products/TriangularSolverMatrix.h +328 -275
  212. package/eigen/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h +108 -109
  213. package/eigen/Eigen/src/Core/products/TriangularSolverVector.h +70 -93
  214. package/eigen/Eigen/src/Core/util/Assert.h +158 -0
  215. package/eigen/Eigen/src/Core/util/BlasUtil.h +413 -290
  216. package/eigen/Eigen/src/Core/util/ConfigureVectorization.h +543 -0
  217. package/eigen/Eigen/src/Core/util/Constants.h +314 -263
  218. package/eigen/Eigen/src/Core/util/DisableStupidWarnings.h +130 -78
  219. package/eigen/Eigen/src/Core/util/EmulateArray.h +270 -0
  220. package/eigen/Eigen/src/Core/util/ForwardDeclarations.h +450 -224
  221. package/eigen/Eigen/src/Core/util/GpuHipCudaDefines.inc +101 -0
  222. package/eigen/Eigen/src/Core/util/GpuHipCudaUndefines.inc +45 -0
  223. package/eigen/Eigen/src/Core/util/IndexedViewHelper.h +487 -0
  224. package/eigen/Eigen/src/Core/util/IntegralConstant.h +279 -0
  225. package/eigen/Eigen/src/Core/util/MKL_support.h +39 -30
  226. package/eigen/Eigen/src/Core/util/Macros.h +939 -646
  227. package/eigen/Eigen/src/Core/util/MaxSizeVector.h +139 -0
  228. package/eigen/Eigen/src/Core/util/Memory.h +1042 -650
  229. package/eigen/Eigen/src/Core/util/Meta.h +618 -426
  230. package/eigen/Eigen/src/Core/util/MoreMeta.h +638 -0
  231. package/eigen/Eigen/src/Core/util/ReenableStupidWarnings.h +32 -19
  232. package/eigen/Eigen/src/Core/util/ReshapedHelper.h +51 -0
  233. package/eigen/Eigen/src/Core/util/Serializer.h +209 -0
  234. package/eigen/Eigen/src/Core/util/StaticAssert.h +51 -164
  235. package/eigen/Eigen/src/Core/util/SymbolicIndex.h +445 -0
  236. package/eigen/Eigen/src/Core/util/XprHelper.h +793 -538
  237. package/eigen/Eigen/src/Eigenvalues/ComplexEigenSolver.h +246 -277
  238. package/eigen/Eigen/src/Eigenvalues/ComplexSchur.h +299 -319
  239. package/eigen/Eigen/src/Eigenvalues/ComplexSchur_LAPACKE.h +52 -48
  240. package/eigen/Eigen/src/Eigenvalues/EigenSolver.h +413 -456
  241. package/eigen/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h +309 -325
  242. package/eigen/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h +157 -171
  243. package/eigen/Eigen/src/Eigenvalues/HessenbergDecomposition.h +292 -310
  244. package/eigen/Eigen/src/Eigenvalues/InternalHeaderCheck.h +3 -0
  245. package/eigen/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h +91 -107
  246. package/eigen/Eigen/src/Eigenvalues/RealQZ.h +539 -606
  247. package/eigen/Eigen/src/Eigenvalues/RealSchur.h +348 -382
  248. package/eigen/Eigen/src/Eigenvalues/RealSchur_LAPACKE.h +41 -35
  249. package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +579 -600
  250. package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h +47 -44
  251. package/eigen/Eigen/src/Eigenvalues/Tridiagonalization.h +434 -461
  252. package/eigen/Eigen/src/Geometry/AlignedBox.h +307 -214
  253. package/eigen/Eigen/src/Geometry/AngleAxis.h +135 -137
  254. package/eigen/Eigen/src/Geometry/EulerAngles.h +163 -74
  255. package/eigen/Eigen/src/Geometry/Homogeneous.h +289 -333
  256. package/eigen/Eigen/src/Geometry/Hyperplane.h +152 -161
  257. package/eigen/Eigen/src/Geometry/InternalHeaderCheck.h +3 -0
  258. package/eigen/Eigen/src/Geometry/OrthoMethods.h +168 -145
  259. package/eigen/Eigen/src/Geometry/ParametrizedLine.h +141 -104
  260. package/eigen/Eigen/src/Geometry/Quaternion.h +595 -497
  261. package/eigen/Eigen/src/Geometry/Rotation2D.h +110 -108
  262. package/eigen/Eigen/src/Geometry/RotationBase.h +148 -145
  263. package/eigen/Eigen/src/Geometry/Scaling.h +115 -90
  264. package/eigen/Eigen/src/Geometry/Transform.h +896 -953
  265. package/eigen/Eigen/src/Geometry/Translation.h +100 -98
  266. package/eigen/Eigen/src/Geometry/Umeyama.h +79 -84
  267. package/eigen/Eigen/src/Geometry/arch/Geometry_SIMD.h +154 -0
  268. package/eigen/Eigen/src/Householder/BlockHouseholder.h +54 -42
  269. package/eigen/Eigen/src/Householder/Householder.h +104 -122
  270. package/eigen/Eigen/src/Householder/HouseholderSequence.h +416 -382
  271. package/eigen/Eigen/src/Householder/InternalHeaderCheck.h +3 -0
  272. package/eigen/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +153 -166
  273. package/eigen/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +127 -138
  274. package/eigen/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +95 -124
  275. package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +269 -267
  276. package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +246 -259
  277. package/eigen/Eigen/src/IterativeLinearSolvers/InternalHeaderCheck.h +3 -0
  278. package/eigen/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +218 -217
  279. package/eigen/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h +80 -103
  280. package/eigen/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h +59 -63
  281. package/eigen/Eigen/src/Jacobi/InternalHeaderCheck.h +3 -0
  282. package/eigen/Eigen/src/Jacobi/Jacobi.h +256 -291
  283. package/eigen/Eigen/src/KLUSupport/InternalHeaderCheck.h +3 -0
  284. package/eigen/Eigen/src/KLUSupport/KLUSupport.h +339 -0
  285. package/eigen/Eigen/src/LU/Determinant.h +60 -63
  286. package/eigen/Eigen/src/LU/FullPivLU.h +561 -626
  287. package/eigen/Eigen/src/LU/InternalHeaderCheck.h +3 -0
  288. package/eigen/Eigen/src/LU/InverseImpl.h +213 -275
  289. package/eigen/Eigen/src/LU/PartialPivLU.h +407 -435
  290. package/eigen/Eigen/src/LU/PartialPivLU_LAPACKE.h +54 -40
  291. package/eigen/Eigen/src/LU/arch/InverseSize4.h +353 -0
  292. package/eigen/Eigen/src/MetisSupport/InternalHeaderCheck.h +3 -0
  293. package/eigen/Eigen/src/MetisSupport/MetisSupport.h +81 -93
  294. package/eigen/Eigen/src/OrderingMethods/Amd.h +250 -282
  295. package/eigen/Eigen/src/OrderingMethods/Eigen_Colamd.h +950 -1103
  296. package/eigen/Eigen/src/OrderingMethods/InternalHeaderCheck.h +3 -0
  297. package/eigen/Eigen/src/OrderingMethods/Ordering.h +111 -122
  298. package/eigen/Eigen/src/PaStiXSupport/InternalHeaderCheck.h +3 -0
  299. package/eigen/Eigen/src/PaStiXSupport/PaStiXSupport.h +524 -570
  300. package/eigen/Eigen/src/PardisoSupport/InternalHeaderCheck.h +3 -0
  301. package/eigen/Eigen/src/PardisoSupport/PardisoSupport.h +385 -429
  302. package/eigen/Eigen/src/QR/ColPivHouseholderQR.h +494 -473
  303. package/eigen/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h +120 -56
  304. package/eigen/Eigen/src/QR/CompleteOrthogonalDecomposition.h +223 -137
  305. package/eigen/Eigen/src/QR/FullPivHouseholderQR.h +517 -460
  306. package/eigen/Eigen/src/QR/HouseholderQR.h +412 -278
  307. package/eigen/Eigen/src/QR/HouseholderQR_LAPACKE.h +32 -23
  308. package/eigen/Eigen/src/QR/InternalHeaderCheck.h +3 -0
  309. package/eigen/Eigen/src/SPQRSupport/InternalHeaderCheck.h +3 -0
  310. package/eigen/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h +263 -261
  311. package/eigen/Eigen/src/SVD/BDCSVD.h +872 -679
  312. package/eigen/Eigen/src/SVD/BDCSVD_LAPACKE.h +174 -0
  313. package/eigen/Eigen/src/SVD/InternalHeaderCheck.h +3 -0
  314. package/eigen/Eigen/src/SVD/JacobiSVD.h +585 -543
  315. package/eigen/Eigen/src/SVD/JacobiSVD_LAPACKE.h +85 -49
  316. package/eigen/Eigen/src/SVD/SVDBase.h +281 -160
  317. package/eigen/Eigen/src/SVD/UpperBidiagonalization.h +202 -237
  318. package/eigen/Eigen/src/SparseCholesky/InternalHeaderCheck.h +3 -0
  319. package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky.h +769 -590
  320. package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +318 -129
  321. package/eigen/Eigen/src/SparseCore/AmbiVector.h +202 -251
  322. package/eigen/Eigen/src/SparseCore/CompressedStorage.h +184 -236
  323. package/eigen/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +140 -184
  324. package/eigen/Eigen/src/SparseCore/InternalHeaderCheck.h +3 -0
  325. package/eigen/Eigen/src/SparseCore/SparseAssign.h +174 -111
  326. package/eigen/Eigen/src/SparseCore/SparseBlock.h +408 -477
  327. package/eigen/Eigen/src/SparseCore/SparseColEtree.h +100 -112
  328. package/eigen/Eigen/src/SparseCore/SparseCompressedBase.h +531 -280
  329. package/eigen/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +559 -347
  330. package/eigen/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +100 -108
  331. package/eigen/Eigen/src/SparseCore/SparseDenseProduct.h +185 -191
  332. package/eigen/Eigen/src/SparseCore/SparseDiagonalProduct.h +71 -71
  333. package/eigen/Eigen/src/SparseCore/SparseDot.h +49 -47
  334. package/eigen/Eigen/src/SparseCore/SparseFuzzy.h +13 -11
  335. package/eigen/Eigen/src/SparseCore/SparseMap.h +243 -253
  336. package/eigen/Eigen/src/SparseCore/SparseMatrix.h +1614 -1142
  337. package/eigen/Eigen/src/SparseCore/SparseMatrixBase.h +403 -357
  338. package/eigen/Eigen/src/SparseCore/SparsePermutation.h +186 -115
  339. package/eigen/Eigen/src/SparseCore/SparseProduct.h +100 -91
  340. package/eigen/Eigen/src/SparseCore/SparseRedux.h +22 -24
  341. package/eigen/Eigen/src/SparseCore/SparseRef.h +268 -295
  342. package/eigen/Eigen/src/SparseCore/SparseSelfAdjointView.h +371 -414
  343. package/eigen/Eigen/src/SparseCore/SparseSolverBase.h +78 -87
  344. package/eigen/Eigen/src/SparseCore/SparseSparseProductWithPruning.h +81 -95
  345. package/eigen/Eigen/src/SparseCore/SparseTranspose.h +62 -71
  346. package/eigen/Eigen/src/SparseCore/SparseTriangularView.h +132 -144
  347. package/eigen/Eigen/src/SparseCore/SparseUtil.h +146 -115
  348. package/eigen/Eigen/src/SparseCore/SparseVector.h +426 -372
  349. package/eigen/Eigen/src/SparseCore/SparseView.h +164 -193
  350. package/eigen/Eigen/src/SparseCore/TriangularSolver.h +129 -170
  351. package/eigen/Eigen/src/SparseLU/InternalHeaderCheck.h +3 -0
  352. package/eigen/Eigen/src/SparseLU/SparseLU.h +814 -618
  353. package/eigen/Eigen/src/SparseLU/SparseLUImpl.h +61 -48
  354. package/eigen/Eigen/src/SparseLU/SparseLU_Memory.h +102 -118
  355. package/eigen/Eigen/src/SparseLU/SparseLU_Structs.h +38 -35
  356. package/eigen/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h +273 -255
  357. package/eigen/Eigen/src/SparseLU/SparseLU_Utils.h +44 -49
  358. package/eigen/Eigen/src/SparseLU/SparseLU_column_bmod.h +104 -108
  359. package/eigen/Eigen/src/SparseLU/SparseLU_column_dfs.h +90 -101
  360. package/eigen/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h +57 -58
  361. package/eigen/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h +43 -55
  362. package/eigen/Eigen/src/SparseLU/SparseLU_kernel_bmod.h +74 -71
  363. package/eigen/Eigen/src/SparseLU/SparseLU_panel_bmod.h +125 -133
  364. package/eigen/Eigen/src/SparseLU/SparseLU_panel_dfs.h +136 -159
  365. package/eigen/Eigen/src/SparseLU/SparseLU_pivotL.h +51 -52
  366. package/eigen/Eigen/src/SparseLU/SparseLU_pruneL.h +67 -73
  367. package/eigen/Eigen/src/SparseLU/SparseLU_relax_snode.h +24 -26
  368. package/eigen/Eigen/src/SparseQR/InternalHeaderCheck.h +3 -0
  369. package/eigen/Eigen/src/SparseQR/SparseQR.h +451 -490
  370. package/eigen/Eigen/src/StlSupport/StdDeque.h +28 -105
  371. package/eigen/Eigen/src/StlSupport/StdList.h +28 -84
  372. package/eigen/Eigen/src/StlSupport/StdVector.h +28 -108
  373. package/eigen/Eigen/src/StlSupport/details.h +48 -50
  374. package/eigen/Eigen/src/SuperLUSupport/InternalHeaderCheck.h +3 -0
  375. package/eigen/Eigen/src/SuperLUSupport/SuperLUSupport.h +634 -732
  376. package/eigen/Eigen/src/ThreadPool/Barrier.h +70 -0
  377. package/eigen/Eigen/src/ThreadPool/CoreThreadPoolDevice.h +336 -0
  378. package/eigen/Eigen/src/ThreadPool/EventCount.h +241 -0
  379. package/eigen/Eigen/src/ThreadPool/ForkJoin.h +140 -0
  380. package/eigen/Eigen/src/ThreadPool/InternalHeaderCheck.h +4 -0
  381. package/eigen/Eigen/src/ThreadPool/NonBlockingThreadPool.h +587 -0
  382. package/eigen/Eigen/src/ThreadPool/RunQueue.h +230 -0
  383. package/eigen/Eigen/src/ThreadPool/ThreadCancel.h +21 -0
  384. package/eigen/Eigen/src/ThreadPool/ThreadEnvironment.h +43 -0
  385. package/eigen/Eigen/src/ThreadPool/ThreadLocal.h +289 -0
  386. package/eigen/Eigen/src/ThreadPool/ThreadPoolInterface.h +50 -0
  387. package/eigen/Eigen/src/ThreadPool/ThreadYield.h +16 -0
  388. package/eigen/Eigen/src/UmfPackSupport/InternalHeaderCheck.h +3 -0
  389. package/eigen/Eigen/src/UmfPackSupport/UmfPackSupport.h +480 -380
  390. package/eigen/Eigen/src/misc/Image.h +41 -43
  391. package/eigen/Eigen/src/misc/InternalHeaderCheck.h +3 -0
  392. package/eigen/Eigen/src/misc/Kernel.h +39 -41
  393. package/eigen/Eigen/src/misc/RealSvd2x2.h +19 -21
  394. package/eigen/Eigen/src/misc/blas.h +83 -426
  395. package/eigen/Eigen/src/misc/lapacke.h +9976 -16182
  396. package/eigen/Eigen/src/misc/lapacke_helpers.h +163 -0
  397. package/eigen/Eigen/src/misc/lapacke_mangling.h +4 -5
  398. package/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.inc +344 -0
  399. package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.inc +544 -0
  400. package/eigen/Eigen/src/plugins/BlockMethods.inc +1370 -0
  401. package/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.inc +116 -0
  402. package/eigen/Eigen/src/plugins/CommonCwiseUnaryOps.inc +167 -0
  403. package/eigen/Eigen/src/plugins/IndexedViewMethods.inc +192 -0
  404. package/eigen/Eigen/src/plugins/InternalHeaderCheck.inc +3 -0
  405. package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.inc +331 -0
  406. package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.inc +118 -0
  407. package/eigen/Eigen/src/plugins/ReshapedMethods.inc +133 -0
  408. package/lib/LibEigen.d.ts +4 -0
  409. package/lib/LibEigen.js +14 -0
  410. package/lib/index.d.ts +1 -1
  411. package/lib/index.js +7 -3
  412. package/package.json +2 -10
  413. package/eigen/Eigen/CMakeLists.txt +0 -19
  414. package/eigen/Eigen/src/Core/BooleanRedux.h +0 -164
  415. package/eigen/Eigen/src/Core/arch/CUDA/Complex.h +0 -103
  416. package/eigen/Eigen/src/Core/arch/CUDA/Half.h +0 -675
  417. package/eigen/Eigen/src/Core/arch/CUDA/MathFunctions.h +0 -91
  418. package/eigen/Eigen/src/Core/arch/CUDA/PacketMath.h +0 -333
  419. package/eigen/Eigen/src/Core/arch/CUDA/PacketMathHalf.h +0 -1124
  420. package/eigen/Eigen/src/Core/arch/CUDA/TypeCasting.h +0 -212
  421. package/eigen/Eigen/src/Core/util/NonMPL2.h +0 -3
  422. package/eigen/Eigen/src/Geometry/arch/Geometry_SSE.h +0 -161
  423. package/eigen/Eigen/src/LU/arch/Inverse_SSE.h +0 -338
  424. package/eigen/Eigen/src/SparseCore/MappedSparseMatrix.h +0 -67
  425. package/eigen/Eigen/src/SparseLU/SparseLU_gemm_kernel.h +0 -280
  426. package/eigen/Eigen/src/misc/lapack.h +0 -152
  427. package/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.h +0 -332
  428. package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.h +0 -552
  429. package/eigen/Eigen/src/plugins/BlockMethods.h +0 -1058
  430. package/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.h +0 -115
  431. package/eigen/Eigen/src/plugins/CommonCwiseUnaryOps.h +0 -163
  432. package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.h +0 -152
  433. package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.h +0 -85
  434. package/lib/eigen.d.ts +0 -2
  435. package/lib/eigen.js +0 -15
@@ -1,7 +1,7 @@
1
1
  // This file is part of Eigen, a lightweight C++ template library
2
2
  // for linear algebra.
3
3
  //
4
- // Copyright (C) 2008-2010 Gael Guennebaud <gael.guennebaud@inria.fr>
4
+ // Copyright (C) 2008-2019 Gael Guennebaud <gael.guennebaud@inria.fr>
5
5
  // Copyright (C) 2006-2008 Benoit Jacob <jacob.benoit.1@gmail.com>
6
6
  //
7
7
  // This Source Code Form is subject to the terms of the Mozilla
@@ -11,685 +11,723 @@
11
11
  #ifndef EIGEN_PARTIAL_REDUX_H
12
12
  #define EIGEN_PARTIAL_REDUX_H
13
13
 
14
+ // IWYU pragma: private
15
+ #include "./InternalHeaderCheck.h"
16
+
14
17
  namespace Eigen {
15
18
 
16
19
  /** \class PartialReduxExpr
17
- * \ingroup Core_Module
18
- *
19
- * \brief Generic expression of a partially reduxed matrix
20
- *
21
- * \tparam MatrixType the type of the matrix we are applying the redux operation
22
- * \tparam MemberOp type of the member functor
23
- * \tparam Direction indicates the direction of the redux (#Vertical or #Horizontal)
24
- *
25
- * This class represents an expression of a partial redux operator of a matrix.
26
- * It is the return type of some VectorwiseOp functions,
27
- * and most of the time this is the only way it is used.
28
- *
29
- * \sa class VectorwiseOp
30
- */
31
-
32
- template< typename MatrixType, typename MemberOp, int Direction>
20
+ * \ingroup Core_Module
21
+ *
22
+ * \brief Generic expression of a partially reduxed matrix
23
+ *
24
+ * \tparam MatrixType the type of the matrix we are applying the redux operation
25
+ * \tparam MemberOp type of the member functor
26
+ * \tparam Direction indicates the direction of the redux (#Vertical or #Horizontal)
27
+ *
28
+ * This class represents an expression of a partial redux operator of a matrix.
29
+ * It is the return type of some VectorwiseOp functions,
30
+ * and most of the time this is the only way it is used.
31
+ *
32
+ * \sa class VectorwiseOp
33
+ */
34
+
35
+ template <typename MatrixType, typename MemberOp, int Direction>
33
36
  class PartialReduxExpr;
34
37
 
35
38
  namespace internal {
36
- template<typename MatrixType, typename MemberOp, int Direction>
37
- struct traits<PartialReduxExpr<MatrixType, MemberOp, Direction> >
38
- : traits<MatrixType>
39
- {
39
+
40
+ template <typename MatrixType, typename MemberOp, int Direction>
41
+ struct traits<PartialReduxExpr<MatrixType, MemberOp, Direction> > : traits<MatrixType> {
40
42
  typedef typename MemberOp::result_type Scalar;
41
43
  typedef typename traits<MatrixType>::StorageKind StorageKind;
42
44
  typedef typename traits<MatrixType>::XprKind XprKind;
43
45
  typedef typename MatrixType::Scalar InputScalar;
44
46
  enum {
45
- RowsAtCompileTime = Direction==Vertical ? 1 : MatrixType::RowsAtCompileTime,
46
- ColsAtCompileTime = Direction==Horizontal ? 1 : MatrixType::ColsAtCompileTime,
47
- MaxRowsAtCompileTime = Direction==Vertical ? 1 : MatrixType::MaxRowsAtCompileTime,
48
- MaxColsAtCompileTime = Direction==Horizontal ? 1 : MatrixType::MaxColsAtCompileTime,
47
+ RowsAtCompileTime = Direction == Vertical ? 1 : MatrixType::RowsAtCompileTime,
48
+ ColsAtCompileTime = Direction == Horizontal ? 1 : MatrixType::ColsAtCompileTime,
49
+ MaxRowsAtCompileTime = Direction == Vertical ? 1 : MatrixType::MaxRowsAtCompileTime,
50
+ MaxColsAtCompileTime = Direction == Horizontal ? 1 : MatrixType::MaxColsAtCompileTime,
49
51
  Flags = RowsAtCompileTime == 1 ? RowMajorBit : 0,
50
- TraversalSize = Direction==Vertical ? MatrixType::RowsAtCompileTime : MatrixType::ColsAtCompileTime
52
+ TraversalSize = Direction == Vertical ? MatrixType::RowsAtCompileTime : MatrixType::ColsAtCompileTime
51
53
  };
52
54
  };
53
- }
55
+ } // namespace internal
54
56
 
55
- template< typename MatrixType, typename MemberOp, int Direction>
56
- class PartialReduxExpr : public internal::dense_xpr_base< PartialReduxExpr<MatrixType, MemberOp, Direction> >::type,
57
- internal::no_assignment_operator
58
- {
59
- public:
57
+ template <typename MatrixType, typename MemberOp, int Direction>
58
+ class PartialReduxExpr : public internal::dense_xpr_base<PartialReduxExpr<MatrixType, MemberOp, Direction> >::type,
59
+ internal::no_assignment_operator {
60
+ public:
61
+ typedef typename internal::dense_xpr_base<PartialReduxExpr>::type Base;
62
+ EIGEN_DENSE_PUBLIC_INTERFACE(PartialReduxExpr)
60
63
 
61
- typedef typename internal::dense_xpr_base<PartialReduxExpr>::type Base;
62
- EIGEN_DENSE_PUBLIC_INTERFACE(PartialReduxExpr)
63
-
64
- EIGEN_DEVICE_FUNC
65
- explicit PartialReduxExpr(const MatrixType& mat, const MemberOp& func = MemberOp())
64
+ EIGEN_DEVICE_FUNC explicit PartialReduxExpr(const MatrixType& mat, const MemberOp& func = MemberOp())
66
65
  : m_matrix(mat), m_functor(func) {}
67
66
 
68
- EIGEN_DEVICE_FUNC
69
- Index rows() const { return (Direction==Vertical ? 1 : m_matrix.rows()); }
70
- EIGEN_DEVICE_FUNC
71
- Index cols() const { return (Direction==Horizontal ? 1 : m_matrix.cols()); }
67
+ EIGEN_DEVICE_FUNC constexpr Index rows() const noexcept { return (Direction == Vertical ? 1 : m_matrix.rows()); }
68
+ EIGEN_DEVICE_FUNC constexpr Index cols() const noexcept { return (Direction == Horizontal ? 1 : m_matrix.cols()); }
72
69
 
73
- EIGEN_DEVICE_FUNC
74
- typename MatrixType::Nested nestedExpression() const { return m_matrix; }
70
+ EIGEN_DEVICE_FUNC typename MatrixType::Nested nestedExpression() const { return m_matrix; }
75
71
 
76
- EIGEN_DEVICE_FUNC
77
- const MemberOp& functor() const { return m_functor; }
72
+ EIGEN_DEVICE_FUNC const MemberOp& functor() const { return m_functor; }
78
73
 
79
- protected:
80
- typename MatrixType::Nested m_matrix;
81
- const MemberOp m_functor;
74
+ protected:
75
+ typename MatrixType::Nested m_matrix;
76
+ const MemberOp m_functor;
82
77
  };
83
78
 
84
- #define EIGEN_MEMBER_FUNCTOR(MEMBER,COST) \
85
- template <typename ResultType> \
86
- struct member_##MEMBER { \
87
- EIGEN_EMPTY_STRUCT_CTOR(member_##MEMBER) \
88
- typedef ResultType result_type; \
89
- template<typename Scalar, int Size> struct Cost \
90
- { enum { value = COST }; }; \
91
- template<typename XprType> \
92
- EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE \
93
- ResultType operator()(const XprType& mat) const \
94
- { return mat.MEMBER(); } \
79
+ template <typename A, typename B>
80
+ struct partial_redux_dummy_func;
81
+
82
+ #define EIGEN_MAKE_PARTIAL_REDUX_FUNCTOR(MEMBER, COST, VECTORIZABLE, BINARYOP) \
83
+ template <typename ResultType, typename Scalar> \
84
+ struct member_##MEMBER { \
85
+ typedef ResultType result_type; \
86
+ typedef BINARYOP<Scalar, Scalar> BinaryOp; \
87
+ template <int Size> \
88
+ struct Cost { \
89
+ enum { value = COST }; \
90
+ }; \
91
+ enum { Vectorizable = VECTORIZABLE }; \
92
+ template <typename XprType> \
93
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE ResultType operator()(const XprType& mat) const { \
94
+ return mat.MEMBER(); \
95
+ } \
96
+ BinaryOp binaryFunc() const { return BinaryOp(); } \
95
97
  }
96
98
 
99
+ #define EIGEN_MEMBER_FUNCTOR(MEMBER, COST) EIGEN_MAKE_PARTIAL_REDUX_FUNCTOR(MEMBER, COST, 0, partial_redux_dummy_func)
100
+
97
101
  namespace internal {
98
102
 
99
- EIGEN_MEMBER_FUNCTOR(squaredNorm, Size * NumTraits<Scalar>::MulCost + (Size-1)*NumTraits<Scalar>::AddCost);
100
- EIGEN_MEMBER_FUNCTOR(norm, (Size+5) * NumTraits<Scalar>::MulCost + (Size-1)*NumTraits<Scalar>::AddCost);
101
- EIGEN_MEMBER_FUNCTOR(stableNorm, (Size+5) * NumTraits<Scalar>::MulCost + (Size-1)*NumTraits<Scalar>::AddCost);
102
- EIGEN_MEMBER_FUNCTOR(blueNorm, (Size+5) * NumTraits<Scalar>::MulCost + (Size-1)*NumTraits<Scalar>::AddCost);
103
- EIGEN_MEMBER_FUNCTOR(hypotNorm, (Size-1) * functor_traits<scalar_hypot_op<Scalar> >::Cost );
104
- EIGEN_MEMBER_FUNCTOR(sum, (Size-1)*NumTraits<Scalar>::AddCost);
105
- EIGEN_MEMBER_FUNCTOR(mean, (Size-1)*NumTraits<Scalar>::AddCost + NumTraits<Scalar>::MulCost);
106
- EIGEN_MEMBER_FUNCTOR(minCoeff, (Size-1)*NumTraits<Scalar>::AddCost);
107
- EIGEN_MEMBER_FUNCTOR(maxCoeff, (Size-1)*NumTraits<Scalar>::AddCost);
108
- EIGEN_MEMBER_FUNCTOR(all, (Size-1)*NumTraits<Scalar>::AddCost);
109
- EIGEN_MEMBER_FUNCTOR(any, (Size-1)*NumTraits<Scalar>::AddCost);
110
- EIGEN_MEMBER_FUNCTOR(count, (Size-1)*NumTraits<Scalar>::AddCost);
111
- EIGEN_MEMBER_FUNCTOR(prod, (Size-1)*NumTraits<Scalar>::MulCost);
112
-
113
- template <int p, typename ResultType>
103
+ EIGEN_MEMBER_FUNCTOR(norm, (Size + 5) * NumTraits<Scalar>::MulCost + (Size - 1) * NumTraits<Scalar>::AddCost);
104
+ EIGEN_MEMBER_FUNCTOR(stableNorm, (Size + 5) * NumTraits<Scalar>::MulCost + (Size - 1) * NumTraits<Scalar>::AddCost);
105
+ EIGEN_MEMBER_FUNCTOR(blueNorm, (Size + 5) * NumTraits<Scalar>::MulCost + (Size - 1) * NumTraits<Scalar>::AddCost);
106
+ EIGEN_MEMBER_FUNCTOR(hypotNorm, (Size - 1) * functor_traits<scalar_hypot_op<Scalar> >::Cost);
107
+ EIGEN_MEMBER_FUNCTOR(all, (Size - 1) * NumTraits<Scalar>::AddCost);
108
+ EIGEN_MEMBER_FUNCTOR(any, (Size - 1) * NumTraits<Scalar>::AddCost);
109
+ EIGEN_MEMBER_FUNCTOR(count, (Size - 1) * NumTraits<Scalar>::AddCost);
110
+
111
+ EIGEN_MAKE_PARTIAL_REDUX_FUNCTOR(sum, (Size - 1) * NumTraits<Scalar>::AddCost, 1, internal::scalar_sum_op);
112
+ EIGEN_MAKE_PARTIAL_REDUX_FUNCTOR(minCoeff, (Size - 1) * NumTraits<Scalar>::AddCost, 1, internal::scalar_min_op);
113
+ EIGEN_MAKE_PARTIAL_REDUX_FUNCTOR(maxCoeff, (Size - 1) * NumTraits<Scalar>::AddCost, 1, internal::scalar_max_op);
114
+ EIGEN_MAKE_PARTIAL_REDUX_FUNCTOR(prod, (Size - 1) * NumTraits<Scalar>::MulCost, 1, internal::scalar_product_op);
115
+
116
+ template <int p, typename ResultType, typename Scalar>
114
117
  struct member_lpnorm {
115
118
  typedef ResultType result_type;
116
- template<typename Scalar, int Size> struct Cost
117
- { enum { value = (Size+5) * NumTraits<Scalar>::MulCost + (Size-1)*NumTraits<Scalar>::AddCost }; };
119
+ enum { Vectorizable = 0 };
120
+ template <int Size>
121
+ struct Cost {
122
+ enum { value = (Size + 5) * NumTraits<Scalar>::MulCost + (Size - 1) * NumTraits<Scalar>::AddCost };
123
+ };
118
124
  EIGEN_DEVICE_FUNC member_lpnorm() {}
119
- template<typename XprType>
120
- EIGEN_DEVICE_FUNC inline ResultType operator()(const XprType& mat) const
121
- { return mat.template lpNorm<p>(); }
125
+ template <typename XprType>
126
+ EIGEN_DEVICE_FUNC inline ResultType operator()(const XprType& mat) const {
127
+ return mat.template lpNorm<p>();
128
+ }
122
129
  };
123
130
 
124
- template <typename BinaryOp, typename Scalar>
131
+ template <typename BinaryOpT, typename Scalar>
125
132
  struct member_redux {
126
- typedef typename result_of<
127
- BinaryOp(const Scalar&,const Scalar&)
128
- >::type result_type;
129
- template<typename _Scalar, int Size> struct Cost
130
- { enum { value = (Size-1) * functor_traits<BinaryOp>::Cost }; };
133
+ typedef BinaryOpT BinaryOp;
134
+ typedef typename result_of<BinaryOp(const Scalar&, const Scalar&)>::type result_type;
135
+
136
+ enum { Vectorizable = functor_traits<BinaryOp>::PacketAccess };
137
+ template <int Size>
138
+ struct Cost {
139
+ enum { value = (Size - 1) * functor_traits<BinaryOp>::Cost };
140
+ };
131
141
  EIGEN_DEVICE_FUNC explicit member_redux(const BinaryOp func) : m_functor(func) {}
132
- template<typename Derived>
133
- EIGEN_DEVICE_FUNC inline result_type operator()(const DenseBase<Derived>& mat) const
134
- { return mat.redux(m_functor); }
142
+ template <typename Derived>
143
+ EIGEN_DEVICE_FUNC inline result_type operator()(const DenseBase<Derived>& mat) const {
144
+ return mat.redux(m_functor);
145
+ }
146
+ const BinaryOp& binaryFunc() const { return m_functor; }
135
147
  const BinaryOp m_functor;
136
148
  };
137
- }
149
+
150
+ template <typename Scalar>
151
+ struct scalar_replace_zero_with_one_op {
152
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar operator()(const Scalar& x) const {
153
+ return numext::is_exactly_zero(x) ? Scalar(1) : x;
154
+ }
155
+ template <typename Packet>
156
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet packetOp(const Packet& x) const {
157
+ return pselect(pcmp_eq(x, pzero(x)), pset1<Packet>(Scalar(1)), x);
158
+ }
159
+ };
160
+ template <typename Scalar>
161
+ struct functor_traits<scalar_replace_zero_with_one_op<Scalar>> {
162
+ enum { Cost = 1, PacketAccess = packet_traits<Scalar>::HasCmp };
163
+ };
164
+
165
+ } // namespace internal
138
166
 
139
167
  /** \class VectorwiseOp
140
- * \ingroup Core_Module
141
- *
142
- * \brief Pseudo expression providing partial reduction operations
143
- *
144
- * \tparam ExpressionType the type of the object on which to do partial reductions
145
- * \tparam Direction indicates the direction of the redux (#Vertical or #Horizontal)
146
- *
147
- * This class represents a pseudo expression with partial reduction features.
148
- * It is the return type of DenseBase::colwise() and DenseBase::rowwise()
149
- * and most of the time this is the only way it is used.
150
- *
151
- * Example: \include MatrixBase_colwise.cpp
152
- * Output: \verbinclude MatrixBase_colwise.out
153
- *
154
- * \sa DenseBase::colwise(), DenseBase::rowwise(), class PartialReduxExpr
155
- */
156
- template<typename ExpressionType, int Direction> class VectorwiseOp
157
- {
158
- public:
159
-
160
- typedef typename ExpressionType::Scalar Scalar;
161
- typedef typename ExpressionType::RealScalar RealScalar;
162
- typedef Eigen::Index Index; ///< \deprecated since Eigen 3.3
163
- typedef typename internal::ref_selector<ExpressionType>::non_const_type ExpressionTypeNested;
164
- typedef typename internal::remove_all<ExpressionTypeNested>::type ExpressionTypeNestedCleaned;
165
-
166
- template<template<typename _Scalar> class Functor,
167
- typename Scalar_=Scalar> struct ReturnType
168
- {
169
- typedef PartialReduxExpr<ExpressionType,
170
- Functor<Scalar_>,
171
- Direction
172
- > Type;
173
- };
174
-
175
- template<typename BinaryOp> struct ReduxReturnType
176
- {
177
- typedef PartialReduxExpr<ExpressionType,
178
- internal::member_redux<BinaryOp,Scalar>,
179
- Direction
180
- > Type;
181
- };
182
-
183
- enum {
184
- isVertical = (Direction==Vertical) ? 1 : 0,
185
- isHorizontal = (Direction==Horizontal) ? 1 : 0
186
- };
187
-
188
- protected:
189
-
190
- typedef typename internal::conditional<isVertical,
191
- typename ExpressionType::ColXpr,
192
- typename ExpressionType::RowXpr>::type SubVector;
193
- /** \internal
194
- * \returns the i-th subvector according to the \c Direction */
195
- EIGEN_DEVICE_FUNC
196
- SubVector subVector(Index i)
197
- {
198
- return SubVector(m_matrix.derived(),i);
199
- }
200
-
201
- /** \internal
202
- * \returns the number of subvectors in the direction \c Direction */
203
- EIGEN_DEVICE_FUNC
204
- Index subVectors() const
205
- { return isVertical?m_matrix.cols():m_matrix.rows(); }
206
-
207
- template<typename OtherDerived> struct ExtendedType {
208
- typedef Replicate<OtherDerived,
209
- isVertical ? 1 : ExpressionType::RowsAtCompileTime,
210
- isHorizontal ? 1 : ExpressionType::ColsAtCompileTime> Type;
211
- };
212
-
213
- /** \internal
214
- * Replicates a vector to match the size of \c *this */
215
- template<typename OtherDerived>
216
- EIGEN_DEVICE_FUNC
217
- typename ExtendedType<OtherDerived>::Type
218
- extendedTo(const DenseBase<OtherDerived>& other) const
219
- {
220
- EIGEN_STATIC_ASSERT(EIGEN_IMPLIES(isVertical, OtherDerived::MaxColsAtCompileTime==1),
221
- YOU_PASSED_A_ROW_VECTOR_BUT_A_COLUMN_VECTOR_WAS_EXPECTED)
222
- EIGEN_STATIC_ASSERT(EIGEN_IMPLIES(isHorizontal, OtherDerived::MaxRowsAtCompileTime==1),
223
- YOU_PASSED_A_COLUMN_VECTOR_BUT_A_ROW_VECTOR_WAS_EXPECTED)
224
- return typename ExtendedType<OtherDerived>::Type
225
- (other.derived(),
226
- isVertical ? 1 : m_matrix.rows(),
227
- isHorizontal ? 1 : m_matrix.cols());
228
- }
229
-
230
- template<typename OtherDerived> struct OppositeExtendedType {
231
- typedef Replicate<OtherDerived,
232
- isHorizontal ? 1 : ExpressionType::RowsAtCompileTime,
233
- isVertical ? 1 : ExpressionType::ColsAtCompileTime> Type;
234
- };
235
-
236
- /** \internal
237
- * Replicates a vector in the opposite direction to match the size of \c *this */
238
- template<typename OtherDerived>
239
- EIGEN_DEVICE_FUNC
240
- typename OppositeExtendedType<OtherDerived>::Type
241
- extendedToOpposite(const DenseBase<OtherDerived>& other) const
242
- {
243
- EIGEN_STATIC_ASSERT(EIGEN_IMPLIES(isHorizontal, OtherDerived::MaxColsAtCompileTime==1),
244
- YOU_PASSED_A_ROW_VECTOR_BUT_A_COLUMN_VECTOR_WAS_EXPECTED)
245
- EIGEN_STATIC_ASSERT(EIGEN_IMPLIES(isVertical, OtherDerived::MaxRowsAtCompileTime==1),
246
- YOU_PASSED_A_COLUMN_VECTOR_BUT_A_ROW_VECTOR_WAS_EXPECTED)
247
- return typename OppositeExtendedType<OtherDerived>::Type
248
- (other.derived(),
249
- isHorizontal ? 1 : m_matrix.rows(),
250
- isVertical ? 1 : m_matrix.cols());
251
- }
252
-
253
- public:
254
- EIGEN_DEVICE_FUNC
255
- explicit inline VectorwiseOp(ExpressionType& matrix) : m_matrix(matrix) {}
256
-
257
- /** \internal */
258
- EIGEN_DEVICE_FUNC
259
- inline const ExpressionType& _expression() const { return m_matrix; }
260
-
261
- /** \returns a row or column vector expression of \c *this reduxed by \a func
262
- *
263
- * The template parameter \a BinaryOp is the type of the functor
264
- * of the custom redux operator. Note that func must be an associative operator.
265
- *
266
- * \sa class VectorwiseOp, DenseBase::colwise(), DenseBase::rowwise()
267
- */
268
- template<typename BinaryOp>
269
- EIGEN_DEVICE_FUNC
270
- const typename ReduxReturnType<BinaryOp>::Type
271
- redux(const BinaryOp& func = BinaryOp()) const
272
- { return typename ReduxReturnType<BinaryOp>::Type(_expression(), internal::member_redux<BinaryOp,Scalar>(func)); }
273
-
274
- typedef typename ReturnType<internal::member_minCoeff>::Type MinCoeffReturnType;
275
- typedef typename ReturnType<internal::member_maxCoeff>::Type MaxCoeffReturnType;
276
- typedef typename ReturnType<internal::member_squaredNorm,RealScalar>::Type SquaredNormReturnType;
277
- typedef typename ReturnType<internal::member_norm,RealScalar>::Type NormReturnType;
278
- typedef typename ReturnType<internal::member_blueNorm,RealScalar>::Type BlueNormReturnType;
279
- typedef typename ReturnType<internal::member_stableNorm,RealScalar>::Type StableNormReturnType;
280
- typedef typename ReturnType<internal::member_hypotNorm,RealScalar>::Type HypotNormReturnType;
281
- typedef typename ReturnType<internal::member_sum>::Type SumReturnType;
282
- typedef typename ReturnType<internal::member_mean>::Type MeanReturnType;
283
- typedef typename ReturnType<internal::member_all>::Type AllReturnType;
284
- typedef typename ReturnType<internal::member_any>::Type AnyReturnType;
285
- typedef PartialReduxExpr<ExpressionType, internal::member_count<Index>, Direction> CountReturnType;
286
- typedef typename ReturnType<internal::member_prod>::Type ProdReturnType;
287
- typedef Reverse<const ExpressionType, Direction> ConstReverseReturnType;
288
- typedef Reverse<ExpressionType, Direction> ReverseReturnType;
289
-
290
- template<int p> struct LpNormReturnType {
291
- typedef PartialReduxExpr<ExpressionType, internal::member_lpnorm<p,RealScalar>,Direction> Type;
292
- };
293
-
294
- /** \returns a row (or column) vector expression of the smallest coefficient
295
- * of each column (or row) of the referenced expression.
296
- *
297
- * \warning the result is undefined if \c *this contains NaN.
298
- *
299
- * Example: \include PartialRedux_minCoeff.cpp
300
- * Output: \verbinclude PartialRedux_minCoeff.out
301
- *
302
- * \sa DenseBase::minCoeff() */
303
- EIGEN_DEVICE_FUNC
304
- const MinCoeffReturnType minCoeff() const
305
- { return MinCoeffReturnType(_expression()); }
306
-
307
- /** \returns a row (or column) vector expression of the largest coefficient
308
- * of each column (or row) of the referenced expression.
309
- *
310
- * \warning the result is undefined if \c *this contains NaN.
311
- *
312
- * Example: \include PartialRedux_maxCoeff.cpp
313
- * Output: \verbinclude PartialRedux_maxCoeff.out
314
- *
315
- * \sa DenseBase::maxCoeff() */
316
- EIGEN_DEVICE_FUNC
317
- const MaxCoeffReturnType maxCoeff() const
318
- { return MaxCoeffReturnType(_expression()); }
319
-
320
- /** \returns a row (or column) vector expression of the squared norm
321
- * of each column (or row) of the referenced expression.
322
- * This is a vector with real entries, even if the original matrix has complex entries.
323
- *
324
- * Example: \include PartialRedux_squaredNorm.cpp
325
- * Output: \verbinclude PartialRedux_squaredNorm.out
326
- *
327
- * \sa DenseBase::squaredNorm() */
328
- EIGEN_DEVICE_FUNC
329
- const SquaredNormReturnType squaredNorm() const
330
- { return SquaredNormReturnType(_expression()); }
331
-
332
- /** \returns a row (or column) vector expression of the norm
333
- * of each column (or row) of the referenced expression.
334
- * This is a vector with real entries, even if the original matrix has complex entries.
335
- *
336
- * Example: \include PartialRedux_norm.cpp
337
- * Output: \verbinclude PartialRedux_norm.out
338
- *
339
- * \sa DenseBase::norm() */
340
- EIGEN_DEVICE_FUNC
341
- const NormReturnType norm() const
342
- { return NormReturnType(_expression()); }
343
-
344
- /** \returns a row (or column) vector expression of the norm
345
- * of each column (or row) of the referenced expression.
346
- * This is a vector with real entries, even if the original matrix has complex entries.
347
- *
348
- * Example: \include PartialRedux_norm.cpp
349
- * Output: \verbinclude PartialRedux_norm.out
350
- *
351
- * \sa DenseBase::norm() */
352
- template<int p>
353
- EIGEN_DEVICE_FUNC
354
- const typename LpNormReturnType<p>::Type lpNorm() const
355
- { return typename LpNormReturnType<p>::Type(_expression()); }
356
-
357
-
358
- /** \returns a row (or column) vector expression of the norm
359
- * of each column (or row) of the referenced expression, using
360
- * Blue's algorithm.
361
- * This is a vector with real entries, even if the original matrix has complex entries.
362
- *
363
- * \sa DenseBase::blueNorm() */
364
- EIGEN_DEVICE_FUNC
365
- const BlueNormReturnType blueNorm() const
366
- { return BlueNormReturnType(_expression()); }
367
-
368
-
369
- /** \returns a row (or column) vector expression of the norm
370
- * of each column (or row) of the referenced expression, avoiding
371
- * underflow and overflow.
372
- * This is a vector with real entries, even if the original matrix has complex entries.
373
- *
374
- * \sa DenseBase::stableNorm() */
375
- EIGEN_DEVICE_FUNC
376
- const StableNormReturnType stableNorm() const
377
- { return StableNormReturnType(_expression()); }
378
-
379
-
380
- /** \returns a row (or column) vector expression of the norm
381
- * of each column (or row) of the referenced expression, avoiding
382
- * underflow and overflow using a concatenation of hypot() calls.
383
- * This is a vector with real entries, even if the original matrix has complex entries.
384
- *
385
- * \sa DenseBase::hypotNorm() */
386
- EIGEN_DEVICE_FUNC
387
- const HypotNormReturnType hypotNorm() const
388
- { return HypotNormReturnType(_expression()); }
389
-
390
- /** \returns a row (or column) vector expression of the sum
391
- * of each column (or row) of the referenced expression.
392
- *
393
- * Example: \include PartialRedux_sum.cpp
394
- * Output: \verbinclude PartialRedux_sum.out
395
- *
396
- * \sa DenseBase::sum() */
397
- EIGEN_DEVICE_FUNC
398
- const SumReturnType sum() const
399
- { return SumReturnType(_expression()); }
400
-
401
- /** \returns a row (or column) vector expression of the mean
402
- * of each column (or row) of the referenced expression.
403
- *
404
- * \sa DenseBase::mean() */
405
- EIGEN_DEVICE_FUNC
406
- const MeanReturnType mean() const
407
- { return MeanReturnType(_expression()); }
408
-
409
- /** \returns a row (or column) vector expression representing
410
- * whether \b all coefficients of each respective column (or row) are \c true.
411
- * This expression can be assigned to a vector with entries of type \c bool.
412
- *
413
- * \sa DenseBase::all() */
414
- EIGEN_DEVICE_FUNC
415
- const AllReturnType all() const
416
- { return AllReturnType(_expression()); }
417
-
418
- /** \returns a row (or column) vector expression representing
419
- * whether \b at \b least one coefficient of each respective column (or row) is \c true.
420
- * This expression can be assigned to a vector with entries of type \c bool.
421
- *
422
- * \sa DenseBase::any() */
423
- EIGEN_DEVICE_FUNC
424
- const AnyReturnType any() const
425
- { return AnyReturnType(_expression()); }
426
-
427
- /** \returns a row (or column) vector expression representing
428
- * the number of \c true coefficients of each respective column (or row).
429
- * This expression can be assigned to a vector whose entries have the same type as is used to
430
- * index entries of the original matrix; for dense matrices, this is \c std::ptrdiff_t .
431
- *
432
- * Example: \include PartialRedux_count.cpp
433
- * Output: \verbinclude PartialRedux_count.out
434
- *
435
- * \sa DenseBase::count() */
436
- EIGEN_DEVICE_FUNC
437
- const CountReturnType count() const
438
- { return CountReturnType(_expression()); }
439
-
440
- /** \returns a row (or column) vector expression of the product
441
- * of each column (or row) of the referenced expression.
442
- *
443
- * Example: \include PartialRedux_prod.cpp
444
- * Output: \verbinclude PartialRedux_prod.out
445
- *
446
- * \sa DenseBase::prod() */
447
- EIGEN_DEVICE_FUNC
448
- const ProdReturnType prod() const
449
- { return ProdReturnType(_expression()); }
450
-
451
-
452
- /** \returns a matrix expression
453
- * where each column (or row) are reversed.
454
- *
455
- * Example: \include Vectorwise_reverse.cpp
456
- * Output: \verbinclude Vectorwise_reverse.out
457
- *
458
- * \sa DenseBase::reverse() */
459
- EIGEN_DEVICE_FUNC
460
- const ConstReverseReturnType reverse() const
461
- { return ConstReverseReturnType( _expression() ); }
462
-
463
- /** \returns a writable matrix expression
464
- * where each column (or row) are reversed.
465
- *
466
- * \sa reverse() const */
467
- EIGEN_DEVICE_FUNC
468
- ReverseReturnType reverse()
469
- { return ReverseReturnType( _expression() ); }
470
-
471
- typedef Replicate<ExpressionType,(isVertical?Dynamic:1),(isHorizontal?Dynamic:1)> ReplicateReturnType;
472
- EIGEN_DEVICE_FUNC
473
- const ReplicateReturnType replicate(Index factor) const;
474
-
475
- /**
476
- * \return an expression of the replication of each column (or row) of \c *this
477
- *
478
- * Example: \include DirectionWise_replicate.cpp
479
- * Output: \verbinclude DirectionWise_replicate.out
480
- *
481
- * \sa VectorwiseOp::replicate(Index), DenseBase::replicate(), class Replicate
482
- */
483
- // NOTE implemented here because of sunstudio's compilation errors
484
- // isVertical*Factor+isHorizontal instead of (isVertical?Factor:1) to handle CUDA bug with ternary operator
485
- template<int Factor> const Replicate<ExpressionType,isVertical*Factor+isHorizontal,isHorizontal*Factor+isVertical>
486
- EIGEN_DEVICE_FUNC
487
- replicate(Index factor = Factor) const
488
- {
489
- return Replicate<ExpressionType,(isVertical?Factor:1),(isHorizontal?Factor:1)>
490
- (_expression(),isVertical?factor:1,isHorizontal?factor:1);
491
- }
492
-
493
- /////////// Artithmetic operators ///////////
494
-
495
- /** Copies the vector \a other to each subvector of \c *this */
496
- template<typename OtherDerived>
497
- EIGEN_DEVICE_FUNC
498
- ExpressionType& operator=(const DenseBase<OtherDerived>& other)
499
- {
500
- EIGEN_STATIC_ASSERT_VECTOR_ONLY(OtherDerived)
501
- EIGEN_STATIC_ASSERT_SAME_XPR_KIND(ExpressionType, OtherDerived)
502
- //eigen_assert((m_matrix.isNull()) == (other.isNull())); FIXME
503
- return const_cast<ExpressionType&>(m_matrix = extendedTo(other.derived()));
504
- }
505
-
506
- /** Adds the vector \a other to each subvector of \c *this */
507
- template<typename OtherDerived>
508
- EIGEN_DEVICE_FUNC
509
- ExpressionType& operator+=(const DenseBase<OtherDerived>& other)
510
- {
511
- EIGEN_STATIC_ASSERT_VECTOR_ONLY(OtherDerived)
512
- EIGEN_STATIC_ASSERT_SAME_XPR_KIND(ExpressionType, OtherDerived)
513
- return const_cast<ExpressionType&>(m_matrix += extendedTo(other.derived()));
514
- }
515
-
516
- /** Substracts the vector \a other to each subvector of \c *this */
517
- template<typename OtherDerived>
518
- EIGEN_DEVICE_FUNC
519
- ExpressionType& operator-=(const DenseBase<OtherDerived>& other)
520
- {
521
- EIGEN_STATIC_ASSERT_VECTOR_ONLY(OtherDerived)
522
- EIGEN_STATIC_ASSERT_SAME_XPR_KIND(ExpressionType, OtherDerived)
523
- return const_cast<ExpressionType&>(m_matrix -= extendedTo(other.derived()));
524
- }
525
-
526
- /** Multiples each subvector of \c *this by the vector \a other */
527
- template<typename OtherDerived>
528
- EIGEN_DEVICE_FUNC
529
- ExpressionType& operator*=(const DenseBase<OtherDerived>& other)
530
- {
531
- EIGEN_STATIC_ASSERT_VECTOR_ONLY(OtherDerived)
532
- EIGEN_STATIC_ASSERT_ARRAYXPR(ExpressionType)
533
- EIGEN_STATIC_ASSERT_SAME_XPR_KIND(ExpressionType, OtherDerived)
534
- m_matrix *= extendedTo(other.derived());
535
- return const_cast<ExpressionType&>(m_matrix);
536
- }
537
-
538
- /** Divides each subvector of \c *this by the vector \a other */
539
- template<typename OtherDerived>
540
- EIGEN_DEVICE_FUNC
541
- ExpressionType& operator/=(const DenseBase<OtherDerived>& other)
542
- {
543
- EIGEN_STATIC_ASSERT_VECTOR_ONLY(OtherDerived)
544
- EIGEN_STATIC_ASSERT_ARRAYXPR(ExpressionType)
545
- EIGEN_STATIC_ASSERT_SAME_XPR_KIND(ExpressionType, OtherDerived)
546
- m_matrix /= extendedTo(other.derived());
547
- return const_cast<ExpressionType&>(m_matrix);
548
- }
549
-
550
- /** Returns the expression of the sum of the vector \a other to each subvector of \c *this */
551
- template<typename OtherDerived> EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC
552
- CwiseBinaryOp<internal::scalar_sum_op<Scalar,typename OtherDerived::Scalar>,
553
- const ExpressionTypeNestedCleaned,
554
- const typename ExtendedType<OtherDerived>::Type>
555
- operator+(const DenseBase<OtherDerived>& other) const
556
- {
557
- EIGEN_STATIC_ASSERT_VECTOR_ONLY(OtherDerived)
558
- EIGEN_STATIC_ASSERT_SAME_XPR_KIND(ExpressionType, OtherDerived)
559
- return m_matrix + extendedTo(other.derived());
560
- }
561
-
562
- /** Returns the expression of the difference between each subvector of \c *this and the vector \a other */
563
- template<typename OtherDerived>
564
- EIGEN_DEVICE_FUNC
565
- CwiseBinaryOp<internal::scalar_difference_op<Scalar,typename OtherDerived::Scalar>,
566
- const ExpressionTypeNestedCleaned,
567
- const typename ExtendedType<OtherDerived>::Type>
568
- operator-(const DenseBase<OtherDerived>& other) const
569
- {
570
- EIGEN_STATIC_ASSERT_VECTOR_ONLY(OtherDerived)
571
- EIGEN_STATIC_ASSERT_SAME_XPR_KIND(ExpressionType, OtherDerived)
572
- return m_matrix - extendedTo(other.derived());
573
- }
574
-
575
- /** Returns the expression where each subvector is the product of the vector \a other
576
- * by the corresponding subvector of \c *this */
577
- template<typename OtherDerived> EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC
578
- CwiseBinaryOp<internal::scalar_product_op<Scalar>,
579
- const ExpressionTypeNestedCleaned,
580
- const typename ExtendedType<OtherDerived>::Type>
581
- EIGEN_DEVICE_FUNC
582
- operator*(const DenseBase<OtherDerived>& other) const
583
- {
584
- EIGEN_STATIC_ASSERT_VECTOR_ONLY(OtherDerived)
585
- EIGEN_STATIC_ASSERT_ARRAYXPR(ExpressionType)
586
- EIGEN_STATIC_ASSERT_SAME_XPR_KIND(ExpressionType, OtherDerived)
587
- return m_matrix * extendedTo(other.derived());
588
- }
589
-
590
- /** Returns the expression where each subvector is the quotient of the corresponding
591
- * subvector of \c *this by the vector \a other */
592
- template<typename OtherDerived>
593
- EIGEN_DEVICE_FUNC
594
- CwiseBinaryOp<internal::scalar_quotient_op<Scalar>,
595
- const ExpressionTypeNestedCleaned,
596
- const typename ExtendedType<OtherDerived>::Type>
597
- operator/(const DenseBase<OtherDerived>& other) const
598
- {
599
- EIGEN_STATIC_ASSERT_VECTOR_ONLY(OtherDerived)
600
- EIGEN_STATIC_ASSERT_ARRAYXPR(ExpressionType)
601
- EIGEN_STATIC_ASSERT_SAME_XPR_KIND(ExpressionType, OtherDerived)
602
- return m_matrix / extendedTo(other.derived());
603
- }
604
-
605
- /** \returns an expression where each column (or row) of the referenced matrix are normalized.
606
- * The referenced matrix is \b not modified.
607
- * \sa MatrixBase::normalized(), normalize()
608
- */
609
- EIGEN_DEVICE_FUNC
610
- CwiseBinaryOp<internal::scalar_quotient_op<Scalar>,
611
- const ExpressionTypeNestedCleaned,
612
- const typename OppositeExtendedType<typename ReturnType<internal::member_norm,RealScalar>::Type>::Type>
613
- normalized() const { return m_matrix.cwiseQuotient(extendedToOpposite(this->norm())); }
614
-
615
-
616
- /** Normalize in-place each row or columns of the referenced matrix.
617
- * \sa MatrixBase::normalize(), normalized()
618
- */
619
- EIGEN_DEVICE_FUNC void normalize() {
620
- m_matrix = this->normalized();
621
- }
622
-
623
- EIGEN_DEVICE_FUNC inline void reverseInPlace();
624
-
625
- /////////// Geometry module ///////////
626
-
627
- typedef Homogeneous<ExpressionType,Direction> HomogeneousReturnType;
628
- EIGEN_DEVICE_FUNC
629
- HomogeneousReturnType homogeneous() const;
630
-
631
- typedef typename ExpressionType::PlainObject CrossReturnType;
632
- template<typename OtherDerived>
633
- EIGEN_DEVICE_FUNC
634
- const CrossReturnType cross(const MatrixBase<OtherDerived>& other) const;
635
-
636
- enum {
637
- HNormalized_Size = Direction==Vertical ? internal::traits<ExpressionType>::RowsAtCompileTime
168
+ * \ingroup Core_Module
169
+ *
170
+ * \brief Pseudo expression providing broadcasting and partial reduction operations
171
+ *
172
+ * \tparam ExpressionType the type of the object on which to do partial reductions
173
+ * \tparam Direction indicates whether to operate on columns (#Vertical) or rows (#Horizontal)
174
+ *
175
+ * This class represents a pseudo expression with broadcasting and partial reduction features.
176
+ * It is the return type of DenseBase::colwise() and DenseBase::rowwise()
177
+ * and most of the time this is the only way it is explicitly used.
178
+ *
179
+ * To understand the logic of rowwise/colwise expression, let's consider a generic case `A.colwise().foo()`
180
+ * where `foo` is any method of `VectorwiseOp`. This expression is equivalent to applying `foo()` to each
181
+ * column of `A` and then re-assemble the outputs in a matrix expression:
182
+ * \code [A.col(0).foo(), A.col(1).foo(), ..., A.col(A.cols()-1).foo()] \endcode
183
+ *
184
+ * Example: \include MatrixBase_colwise.cpp
185
+ * Output: \verbinclude MatrixBase_colwise.out
186
+ *
187
+ * The begin() and end() methods are obviously exceptions to the previous rule as they
188
+ * return STL-compatible begin/end iterators to the rows or columns of the nested expression.
189
+ * Typical use cases include for-range-loop and calls to STL algorithms:
190
+ *
191
+ * Example: \include MatrixBase_colwise_iterator_cxx11.cpp
192
+ * Output: \verbinclude MatrixBase_colwise_iterator_cxx11.out
193
+ *
194
+ * For a partial reduction on an empty input, some rules apply.
195
+ * For the sake of clarity, let's consider a vertical reduction:
196
+ * - If the number of columns is zero, then a 1x0 row-major vector expression is returned.
197
+ * - Otherwise, if the number of rows is zero, then
198
+ * - a row vector of zeros is returned for sum-like reductions (sum, squaredNorm, norm, etc.)
199
+ * - a row vector of ones is returned for a product reduction (e.g., <code>MatrixXd(n,0).colwise().prod()</code>)
200
+ * - an assert is triggered for all other reductions (minCoeff,maxCoeff,redux(bin_op))
201
+ *
202
+ * \sa DenseBase::colwise(), DenseBase::rowwise(), class PartialReduxExpr
203
+ */
204
+ template <typename ExpressionType, int Direction>
205
+ class VectorwiseOp {
206
+ public:
207
+ typedef typename ExpressionType::Scalar Scalar;
208
+ typedef typename ExpressionType::RealScalar RealScalar;
209
+ typedef internal::remove_all_t<ExpressionType> ExpressionTypeCleaned;
210
+
211
+ template <template <typename OutScalar, typename InputScalar> class Functor, typename ReturnScalar = Scalar>
212
+ struct ReturnType {
213
+ typedef PartialReduxExpr<ExpressionType, Functor<ReturnScalar, Scalar>, Direction> Type;
214
+ };
215
+
216
+ template <typename BinaryOp>
217
+ struct ReduxReturnType {
218
+ typedef PartialReduxExpr<ExpressionType, internal::member_redux<BinaryOp, Scalar>, Direction> Type;
219
+ };
220
+
221
+ enum { isVertical = (Direction == Vertical) ? 1 : 0, isHorizontal = (Direction == Horizontal) ? 1 : 0 };
222
+
223
+ protected:
224
+ template <typename OtherDerived>
225
+ struct ExtendedType {
226
+ typedef Replicate<OtherDerived, isVertical ? 1 : ExpressionType::RowsAtCompileTime,
227
+ isHorizontal ? 1 : ExpressionType::ColsAtCompileTime>
228
+ Type;
229
+ };
230
+
231
+ /** \internal
232
+ * Replicates a vector to match the size of \c *this */
233
+ template <typename OtherDerived>
234
+ EIGEN_DEVICE_FUNC typename ExtendedType<OtherDerived>::Type extendedTo(const DenseBase<OtherDerived>& other) const {
235
+ EIGEN_STATIC_ASSERT(internal::check_implication(isVertical, OtherDerived::MaxColsAtCompileTime == 1),
236
+ YOU_PASSED_A_ROW_VECTOR_BUT_A_COLUMN_VECTOR_WAS_EXPECTED)
237
+ EIGEN_STATIC_ASSERT(internal::check_implication(isHorizontal, OtherDerived::MaxRowsAtCompileTime == 1),
238
+ YOU_PASSED_A_COLUMN_VECTOR_BUT_A_ROW_VECTOR_WAS_EXPECTED)
239
+ return typename ExtendedType<OtherDerived>::Type(other.derived(), isVertical ? 1 : m_matrix.rows(),
240
+ isHorizontal ? 1 : m_matrix.cols());
241
+ }
242
+
243
+ template <typename OtherDerived>
244
+ struct OppositeExtendedType {
245
+ typedef Replicate<OtherDerived, isHorizontal ? 1 : ExpressionType::RowsAtCompileTime,
246
+ isVertical ? 1 : ExpressionType::ColsAtCompileTime>
247
+ Type;
248
+ };
249
+
250
+ /** \internal
251
+ * Replicates a vector in the opposite direction to match the size of \c *this */
252
+ template <typename OtherDerived>
253
+ EIGEN_DEVICE_FUNC typename OppositeExtendedType<OtherDerived>::Type extendedToOpposite(
254
+ const DenseBase<OtherDerived>& other) const {
255
+ EIGEN_STATIC_ASSERT(internal::check_implication(isHorizontal, OtherDerived::MaxColsAtCompileTime == 1),
256
+ YOU_PASSED_A_ROW_VECTOR_BUT_A_COLUMN_VECTOR_WAS_EXPECTED)
257
+ EIGEN_STATIC_ASSERT(internal::check_implication(isVertical, OtherDerived::MaxRowsAtCompileTime == 1),
258
+ YOU_PASSED_A_COLUMN_VECTOR_BUT_A_ROW_VECTOR_WAS_EXPECTED)
259
+ return typename OppositeExtendedType<OtherDerived>::Type(other.derived(), isHorizontal ? 1 : m_matrix.rows(),
260
+ isVertical ? 1 : m_matrix.cols());
261
+ }
262
+
263
+ public:
264
+ EIGEN_DEVICE_FUNC explicit inline VectorwiseOp(ExpressionType& matrix) : m_matrix(matrix) {}
265
+
266
+ /** \internal */
267
+ EIGEN_DEVICE_FUNC inline const ExpressionType& _expression() const { return m_matrix; }
268
+
269
+ #ifdef EIGEN_PARSED_BY_DOXYGEN
270
+ /** STL-like <a href="https://en.cppreference.com/w/cpp/named_req/RandomAccessIterator">RandomAccessIterator</a>
271
+ * iterator type over the columns or rows as returned by the begin() and end() methods.
272
+ */
273
+ random_access_iterator_type iterator;
274
+ /** This is the const version of iterator (aka read-only) */
275
+ random_access_iterator_type const_iterator;
276
+ #else
277
+ typedef internal::subvector_stl_iterator<ExpressionType, DirectionType(Direction)> iterator;
278
+ typedef internal::subvector_stl_iterator<const ExpressionType, DirectionType(Direction)> const_iterator;
279
+ typedef internal::subvector_stl_reverse_iterator<ExpressionType, DirectionType(Direction)> reverse_iterator;
280
+ typedef internal::subvector_stl_reverse_iterator<const ExpressionType, DirectionType(Direction)>
281
+ const_reverse_iterator;
282
+ #endif
283
+
284
+ /** returns an iterator to the first row (rowwise) or column (colwise) of the nested expression.
285
+ * \sa end(), cbegin()
286
+ */
287
+ iterator begin() { return iterator(m_matrix, 0); }
288
+ /** const version of begin() */
289
+ const_iterator begin() const { return const_iterator(m_matrix, 0); }
290
+ /** const version of begin() */
291
+ const_iterator cbegin() const { return const_iterator(m_matrix, 0); }
292
+
293
+ /** returns a reverse iterator to the last row (rowwise) or column (colwise) of the nested expression.
294
+ * \sa rend(), crbegin()
295
+ */
296
+ reverse_iterator rbegin() {
297
+ return reverse_iterator(m_matrix, m_matrix.template subVectors<DirectionType(Direction)>() - 1);
298
+ }
299
+ /** const version of rbegin() */
300
+ const_reverse_iterator rbegin() const {
301
+ return const_reverse_iterator(m_matrix, m_matrix.template subVectors<DirectionType(Direction)>() - 1);
302
+ }
303
+ /** const version of rbegin() */
304
+ const_reverse_iterator crbegin() const {
305
+ return const_reverse_iterator(m_matrix, m_matrix.template subVectors<DirectionType(Direction)>() - 1);
306
+ }
307
+
308
+ /** returns an iterator to the row (resp. column) following the last row (resp. column) of the nested expression
309
+ * \sa begin(), cend()
310
+ */
311
+ iterator end() { return iterator(m_matrix, m_matrix.template subVectors<DirectionType(Direction)>()); }
312
+ /** const version of end() */
313
+ const_iterator end() const {
314
+ return const_iterator(m_matrix, m_matrix.template subVectors<DirectionType(Direction)>());
315
+ }
316
+ /** const version of end() */
317
+ const_iterator cend() const {
318
+ return const_iterator(m_matrix, m_matrix.template subVectors<DirectionType(Direction)>());
319
+ }
320
+
321
+ /** returns a reverse iterator to the row (resp. column) before the first row (resp. column) of the nested expression
322
+ * \sa begin(), cend()
323
+ */
324
+ reverse_iterator rend() { return reverse_iterator(m_matrix, -1); }
325
+ /** const version of rend() */
326
+ const_reverse_iterator rend() const { return const_reverse_iterator(m_matrix, -1); }
327
+ /** const version of rend() */
328
+ const_reverse_iterator crend() const { return const_reverse_iterator(m_matrix, -1); }
329
+
330
+ /** \returns a row or column vector expression of \c *this reduxed by \a func
331
+ *
332
+ * The template parameter \a BinaryOp is the type of the functor
333
+ * of the custom redux operator. Note that func must be an associative operator.
334
+ *
335
+ * \warning the size along the reduction direction must be strictly positive,
336
+ * otherwise an assertion is triggered.
337
+ *
338
+ * \sa class VectorwiseOp, DenseBase::colwise(), DenseBase::rowwise()
339
+ */
340
+ template <typename BinaryOp>
341
+ EIGEN_DEVICE_FUNC const typename ReduxReturnType<BinaryOp>::Type redux(const BinaryOp& func = BinaryOp()) const {
342
+ eigen_assert(redux_length() > 0 && "you are using an empty matrix");
343
+ return typename ReduxReturnType<BinaryOp>::Type(_expression(), internal::member_redux<BinaryOp, Scalar>(func));
344
+ }
345
+
346
+ typedef typename ReturnType<internal::member_minCoeff>::Type MinCoeffReturnType;
347
+ typedef typename ReturnType<internal::member_maxCoeff>::Type MaxCoeffReturnType;
348
+ typedef PartialReduxExpr<const CwiseUnaryOp<internal::scalar_abs2_op<Scalar>, const ExpressionTypeCleaned>,
349
+ internal::member_sum<RealScalar, RealScalar>, Direction>
350
+ SquaredNormReturnType;
351
+ typedef CwiseUnaryOp<internal::scalar_sqrt_op<RealScalar>, const SquaredNormReturnType> NormReturnType;
352
+ typedef typename ReturnType<internal::member_blueNorm, RealScalar>::Type BlueNormReturnType;
353
+ typedef typename ReturnType<internal::member_stableNorm, RealScalar>::Type StableNormReturnType;
354
+ typedef typename ReturnType<internal::member_hypotNorm, RealScalar>::Type HypotNormReturnType;
355
+ typedef typename ReturnType<internal::member_sum>::Type SumReturnType;
356
+ typedef EIGEN_EXPR_BINARYOP_SCALAR_RETURN_TYPE(SumReturnType, Scalar, quotient) MeanReturnType;
357
+ typedef typename ReturnType<internal::member_all, bool>::Type AllReturnType;
358
+ typedef typename ReturnType<internal::member_any, bool>::Type AnyReturnType;
359
+ typedef PartialReduxExpr<ExpressionType, internal::member_count<Index, Scalar>, Direction> CountReturnType;
360
+ typedef typename ReturnType<internal::member_prod>::Type ProdReturnType;
361
+ typedef Reverse<const ExpressionType, Direction> ConstReverseReturnType;
362
+ typedef Reverse<ExpressionType, Direction> ReverseReturnType;
363
+
364
+ template <int p>
365
+ struct LpNormReturnType {
366
+ typedef PartialReduxExpr<ExpressionType, internal::member_lpnorm<p, RealScalar, Scalar>, Direction> Type;
367
+ };
368
+
369
+ /** \returns a row (or column) vector expression of the smallest coefficient
370
+ * of each column (or row) of the referenced expression.
371
+ *
372
+ * \warning the size along the reduction direction must be strictly positive,
373
+ * otherwise an assertion is triggered.
374
+ *
375
+ * \warning the result is undefined if \c *this contains NaN.
376
+ *
377
+ * Example: \include PartialRedux_minCoeff.cpp
378
+ * Output: \verbinclude PartialRedux_minCoeff.out
379
+ *
380
+ * \sa DenseBase::minCoeff() */
381
+ EIGEN_DEVICE_FUNC const MinCoeffReturnType minCoeff() const {
382
+ eigen_assert(redux_length() > 0 && "you are using an empty matrix");
383
+ return MinCoeffReturnType(_expression());
384
+ }
385
+
386
+ /** \returns a row (or column) vector expression of the largest coefficient
387
+ * of each column (or row) of the referenced expression.
388
+ *
389
+ * \warning the size along the reduction direction must be strictly positive,
390
+ * otherwise an assertion is triggered.
391
+ *
392
+ * \warning the result is undefined if \c *this contains NaN.
393
+ *
394
+ * Example: \include PartialRedux_maxCoeff.cpp
395
+ * Output: \verbinclude PartialRedux_maxCoeff.out
396
+ *
397
+ * \sa DenseBase::maxCoeff() */
398
+ EIGEN_DEVICE_FUNC const MaxCoeffReturnType maxCoeff() const {
399
+ eigen_assert(redux_length() > 0 && "you are using an empty matrix");
400
+ return MaxCoeffReturnType(_expression());
401
+ }
402
+
403
+ /** \returns a row (or column) vector expression of the squared norm
404
+ * of each column (or row) of the referenced expression.
405
+ * This is a vector with real entries, even if the original matrix has complex entries.
406
+ *
407
+ * Example: \include PartialRedux_squaredNorm.cpp
408
+ * Output: \verbinclude PartialRedux_squaredNorm.out
409
+ *
410
+ * \sa DenseBase::squaredNorm() */
411
+ EIGEN_DEVICE_FUNC const SquaredNormReturnType squaredNorm() const {
412
+ return SquaredNormReturnType(m_matrix.cwiseAbs2());
413
+ }
414
+
415
+ /** \returns a row (or column) vector expression of the norm
416
+ * of each column (or row) of the referenced expression.
417
+ * This is a vector with real entries, even if the original matrix has complex entries.
418
+ *
419
+ * Example: \include PartialRedux_norm.cpp
420
+ * Output: \verbinclude PartialRedux_norm.out
421
+ *
422
+ * \sa DenseBase::norm() */
423
+ EIGEN_DEVICE_FUNC const NormReturnType norm() const { return NormReturnType(squaredNorm()); }
424
+
425
+ /** \returns a row (or column) vector expression of the norm
426
+ * of each column (or row) of the referenced expression.
427
+ * This is a vector with real entries, even if the original matrix has complex entries.
428
+ *
429
+ * Example: \include PartialRedux_norm.cpp
430
+ * Output: \verbinclude PartialRedux_norm.out
431
+ *
432
+ * \sa DenseBase::norm() */
433
+ template <int p>
434
+ EIGEN_DEVICE_FUNC const typename LpNormReturnType<p>::Type lpNorm() const {
435
+ return typename LpNormReturnType<p>::Type(_expression());
436
+ }
437
+
438
+ /** \returns a row (or column) vector expression of the norm
439
+ * of each column (or row) of the referenced expression, using
440
+ * Blue's algorithm.
441
+ * This is a vector with real entries, even if the original matrix has complex entries.
442
+ *
443
+ * \sa DenseBase::blueNorm() */
444
+ EIGEN_DEVICE_FUNC const BlueNormReturnType blueNorm() const { return BlueNormReturnType(_expression()); }
445
+
446
+ /** \returns a row (or column) vector expression of the norm
447
+ * of each column (or row) of the referenced expression, avoiding
448
+ * underflow and overflow.
449
+ * This is a vector with real entries, even if the original matrix has complex entries.
450
+ *
451
+ * \sa DenseBase::stableNorm() */
452
+ EIGEN_DEVICE_FUNC const StableNormReturnType stableNorm() const { return StableNormReturnType(_expression()); }
453
+
454
+ /** \returns a row (or column) vector expression of the norm
455
+ * of each column (or row) of the referenced expression, avoiding
456
+ * underflow and overflow using a concatenation of hypot() calls.
457
+ * This is a vector with real entries, even if the original matrix has complex entries.
458
+ *
459
+ * \sa DenseBase::hypotNorm() */
460
+ EIGEN_DEVICE_FUNC const HypotNormReturnType hypotNorm() const { return HypotNormReturnType(_expression()); }
461
+
462
+ /** \returns a row (or column) vector expression of the sum
463
+ * of each column (or row) of the referenced expression.
464
+ *
465
+ * Example: \include PartialRedux_sum.cpp
466
+ * Output: \verbinclude PartialRedux_sum.out
467
+ *
468
+ * \sa DenseBase::sum() */
469
+ EIGEN_DEVICE_FUNC const SumReturnType sum() const { return SumReturnType(_expression()); }
470
+
471
+ /** \returns a row (or column) vector expression of the mean
472
+ * of each column (or row) of the referenced expression.
473
+ *
474
+ * \sa DenseBase::mean() */
475
+ EIGEN_DEVICE_FUNC const MeanReturnType mean() const {
476
+ return sum() / Scalar(Direction == Vertical ? m_matrix.rows() : m_matrix.cols());
477
+ }
478
+
479
+ /** \returns a row (or column) vector expression representing
480
+ * whether \b all coefficients of each respective column (or row) are \c true.
481
+ * This expression can be assigned to a vector with entries of type \c bool.
482
+ *
483
+ * \sa DenseBase::all() */
484
+ EIGEN_DEVICE_FUNC const AllReturnType all() const { return AllReturnType(_expression()); }
485
+
486
+ /** \returns a row (or column) vector expression representing
487
+ * whether \b at \b least one coefficient of each respective column (or row) is \c true.
488
+ * This expression can be assigned to a vector with entries of type \c bool.
489
+ *
490
+ * \sa DenseBase::any() */
491
+ EIGEN_DEVICE_FUNC const AnyReturnType any() const { return AnyReturnType(_expression()); }
492
+
493
+ /** \returns a row (or column) vector expression representing
494
+ * the number of \c true coefficients of each respective column (or row).
495
+ * This expression can be assigned to a vector whose entries have the same type as is used to
496
+ * index entries of the original matrix; for dense matrices, this is \c std::ptrdiff_t .
497
+ *
498
+ * Example: \include PartialRedux_count.cpp
499
+ * Output: \verbinclude PartialRedux_count.out
500
+ *
501
+ * \sa DenseBase::count() */
502
+ EIGEN_DEVICE_FUNC const CountReturnType count() const { return CountReturnType(_expression()); }
503
+
504
+ /** \returns a row (or column) vector expression of the product
505
+ * of each column (or row) of the referenced expression.
506
+ *
507
+ * Example: \include PartialRedux_prod.cpp
508
+ * Output: \verbinclude PartialRedux_prod.out
509
+ *
510
+ * \sa DenseBase::prod() */
511
+ EIGEN_DEVICE_FUNC const ProdReturnType prod() const { return ProdReturnType(_expression()); }
512
+
513
+ /** \returns a matrix expression
514
+ * where each column (or row) are reversed.
515
+ *
516
+ * Example: \include Vectorwise_reverse.cpp
517
+ * Output: \verbinclude Vectorwise_reverse.out
518
+ *
519
+ * \sa DenseBase::reverse() */
520
+ EIGEN_DEVICE_FUNC const ConstReverseReturnType reverse() const { return ConstReverseReturnType(_expression()); }
521
+
522
+ /** \returns a writable matrix expression
523
+ * where each column (or row) are reversed.
524
+ *
525
+ * \sa reverse() const */
526
+ EIGEN_DEVICE_FUNC ReverseReturnType reverse() { return ReverseReturnType(_expression()); }
527
+
528
+ typedef Replicate<ExpressionType, (isVertical ? Dynamic : 1), (isHorizontal ? Dynamic : 1)> ReplicateReturnType;
529
+ EIGEN_DEVICE_FUNC const ReplicateReturnType replicate(Index factor) const;
530
+
531
+ /**
532
+ * \return an expression of the replication of each column (or row) of \c *this
533
+ *
534
+ * Example: \include DirectionWise_replicate.cpp
535
+ * Output: \verbinclude DirectionWise_replicate.out
536
+ *
537
+ * \sa VectorwiseOp::replicate(Index), DenseBase::replicate(), class Replicate
538
+ */
539
+ // NOTE implemented here because of sunstudio's compilation errors
540
+ // isVertical*Factor+isHorizontal instead of (isVertical?Factor:1) to handle CUDA bug with ternary operator
541
+ template <int Factor>
542
+ const Replicate<ExpressionType, isVertical * Factor + isHorizontal,
543
+ isHorizontal * Factor + isVertical> EIGEN_DEVICE_FUNC
544
+ replicate(Index factor = Factor) const {
545
+ return Replicate<ExpressionType, (isVertical ? Factor : 1), (isHorizontal ? Factor : 1)>(
546
+ _expression(), isVertical ? factor : 1, isHorizontal ? factor : 1);
547
+ }
548
+
549
+ /////////// Artithmetic operators ///////////
550
+
551
+ /** Copies the vector \a other to each subvector of \c *this */
552
+ template <typename OtherDerived>
553
+ EIGEN_DEVICE_FUNC ExpressionType& operator=(const DenseBase<OtherDerived>& other) {
554
+ EIGEN_STATIC_ASSERT_VECTOR_ONLY(OtherDerived)
555
+ EIGEN_STATIC_ASSERT_SAME_XPR_KIND(ExpressionType, OtherDerived)
556
+ // eigen_assert((m_matrix.isNull()) == (other.isNull())); FIXME
557
+ return m_matrix = extendedTo(other.derived());
558
+ }
559
+
560
+ /** Adds the vector \a other to each subvector of \c *this */
561
+ template <typename OtherDerived>
562
+ EIGEN_DEVICE_FUNC ExpressionType& operator+=(const DenseBase<OtherDerived>& other) {
563
+ EIGEN_STATIC_ASSERT_VECTOR_ONLY(OtherDerived)
564
+ EIGEN_STATIC_ASSERT_SAME_XPR_KIND(ExpressionType, OtherDerived)
565
+ return m_matrix += extendedTo(other.derived());
566
+ }
567
+
568
+ /** Subtracts the vector \a other to each subvector of \c *this */
569
+ template <typename OtherDerived>
570
+ EIGEN_DEVICE_FUNC ExpressionType& operator-=(const DenseBase<OtherDerived>& other) {
571
+ EIGEN_STATIC_ASSERT_VECTOR_ONLY(OtherDerived)
572
+ EIGEN_STATIC_ASSERT_SAME_XPR_KIND(ExpressionType, OtherDerived)
573
+ return m_matrix -= extendedTo(other.derived());
574
+ }
575
+
576
+ /** Multiplies each subvector of \c *this by the vector \a other */
577
+ template <typename OtherDerived>
578
+ EIGEN_DEVICE_FUNC ExpressionType& operator*=(const DenseBase<OtherDerived>& other) {
579
+ EIGEN_STATIC_ASSERT_VECTOR_ONLY(OtherDerived)
580
+ EIGEN_STATIC_ASSERT_ARRAYXPR(ExpressionType)
581
+ EIGEN_STATIC_ASSERT_SAME_XPR_KIND(ExpressionType, OtherDerived)
582
+ m_matrix *= extendedTo(other.derived());
583
+ return m_matrix;
584
+ }
585
+
586
+ /** Divides each subvector of \c *this by the vector \a other */
587
+ template <typename OtherDerived>
588
+ EIGEN_DEVICE_FUNC ExpressionType& operator/=(const DenseBase<OtherDerived>& other) {
589
+ EIGEN_STATIC_ASSERT_VECTOR_ONLY(OtherDerived)
590
+ EIGEN_STATIC_ASSERT_ARRAYXPR(ExpressionType)
591
+ EIGEN_STATIC_ASSERT_SAME_XPR_KIND(ExpressionType, OtherDerived)
592
+ m_matrix /= extendedTo(other.derived());
593
+ return m_matrix;
594
+ }
595
+
596
+ /** Returns the expression of the sum of the vector \a other to each subvector of \c *this */
597
+ template <typename OtherDerived>
598
+ EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC
599
+ CwiseBinaryOp<internal::scalar_sum_op<Scalar, typename OtherDerived::Scalar>, const ExpressionTypeCleaned,
600
+ const typename ExtendedType<OtherDerived>::Type>
601
+ operator+(const DenseBase<OtherDerived>& other) const {
602
+ EIGEN_STATIC_ASSERT_VECTOR_ONLY(OtherDerived)
603
+ EIGEN_STATIC_ASSERT_SAME_XPR_KIND(ExpressionType, OtherDerived)
604
+ return m_matrix + extendedTo(other.derived());
605
+ }
606
+
607
+ /** Returns the expression of the difference between each subvector of \c *this and the vector \a other */
608
+ template <typename OtherDerived>
609
+ EIGEN_DEVICE_FUNC CwiseBinaryOp<internal::scalar_difference_op<Scalar, typename OtherDerived::Scalar>,
610
+ const ExpressionTypeCleaned, const typename ExtendedType<OtherDerived>::Type>
611
+ operator-(const DenseBase<OtherDerived>& other) const {
612
+ EIGEN_STATIC_ASSERT_VECTOR_ONLY(OtherDerived)
613
+ EIGEN_STATIC_ASSERT_SAME_XPR_KIND(ExpressionType, OtherDerived)
614
+ return m_matrix - extendedTo(other.derived());
615
+ }
616
+
617
+ /** Returns the expression where each subvector is the product of the vector \a other
618
+ * by the corresponding subvector of \c *this */
619
+ template <typename OtherDerived>
620
+ EIGEN_DEVICE_FUNC CwiseBinaryOp<internal::scalar_product_op<Scalar, typename OtherDerived::Scalar>,
621
+ const ExpressionTypeCleaned, const typename ExtendedType<OtherDerived>::Type>
622
+ operator*(const DenseBase<OtherDerived>& other) const {
623
+ EIGEN_STATIC_ASSERT_VECTOR_ONLY(OtherDerived)
624
+ EIGEN_STATIC_ASSERT_ARRAYXPR(ExpressionType)
625
+ EIGEN_STATIC_ASSERT_SAME_XPR_KIND(ExpressionType, OtherDerived)
626
+ return m_matrix * extendedTo(other.derived());
627
+ }
628
+
629
+ /** Returns the expression where each subvector is the quotient of the corresponding
630
+ * subvector of \c *this by the vector \a other */
631
+ template <typename OtherDerived>
632
+ EIGEN_DEVICE_FUNC CwiseBinaryOp<internal::scalar_quotient_op<Scalar, typename OtherDerived::Scalar>,
633
+ const ExpressionTypeCleaned, const typename ExtendedType<OtherDerived>::Type>
634
+ operator/(const DenseBase<OtherDerived>& other) const {
635
+ EIGEN_STATIC_ASSERT_VECTOR_ONLY(OtherDerived)
636
+ EIGEN_STATIC_ASSERT_ARRAYXPR(ExpressionType)
637
+ EIGEN_STATIC_ASSERT_SAME_XPR_KIND(ExpressionType, OtherDerived)
638
+ return m_matrix / extendedTo(other.derived());
639
+ }
640
+
641
+ using Normalized_NonzeroNormType =
642
+ CwiseUnaryOp<internal::scalar_replace_zero_with_one_op<Scalar>, const NormReturnType>;
643
+ using NormalizedReturnType = CwiseBinaryOp<internal::scalar_quotient_op<Scalar>, const ExpressionTypeCleaned,
644
+ const typename OppositeExtendedType<Normalized_NonzeroNormType>::Type>;
645
+
646
+ /** \returns an expression where each column (or row) of the referenced matrix are normalized.
647
+ * The referenced matrix is \b not modified.
648
+ *
649
+ * \warning If the input columns (or rows) are too small (i.e., their norm equals to 0), they remain unchanged in the
650
+ * resulting expression.
651
+ *
652
+ * \sa MatrixBase::normalized(), normalize()
653
+ */
654
+ EIGEN_DEVICE_FUNC NormalizedReturnType normalized() const {
655
+ return m_matrix.cwiseQuotient(extendedToOpposite(Normalized_NonzeroNormType(this->norm())));
656
+ }
657
+
658
+ /** Normalize in-place each row or columns of the referenced matrix.
659
+ *
660
+ * \warning If the input columns (or rows) are too small (i.e., their norm equals to 0), they are left unchanged.
661
+ *
662
+ * \sa MatrixBase::normalized(), normalize()
663
+ */
664
+ EIGEN_DEVICE_FUNC void normalize() { m_matrix = this->normalized(); }
665
+
666
+ EIGEN_DEVICE_FUNC inline void reverseInPlace();
667
+
668
+ /////////// Geometry module ///////////
669
+
670
+ typedef Homogeneous<ExpressionType, Direction> HomogeneousReturnType;
671
+ EIGEN_DEVICE_FUNC HomogeneousReturnType homogeneous() const;
672
+
673
+ typedef typename ExpressionType::PlainObject CrossReturnType;
674
+ template <typename OtherDerived>
675
+ EIGEN_DEVICE_FUNC const CrossReturnType cross(const MatrixBase<OtherDerived>& other) const;
676
+
677
+ enum {
678
+ HNormalized_Size = Direction == Vertical ? internal::traits<ExpressionType>::RowsAtCompileTime
638
679
  : internal::traits<ExpressionType>::ColsAtCompileTime,
639
- HNormalized_SizeMinusOne = HNormalized_Size==Dynamic ? Dynamic : HNormalized_Size-1
640
- };
641
- typedef Block<const ExpressionType,
642
- Direction==Vertical ? int(HNormalized_SizeMinusOne)
643
- : int(internal::traits<ExpressionType>::RowsAtCompileTime),
644
- Direction==Horizontal ? int(HNormalized_SizeMinusOne)
680
+ HNormalized_SizeMinusOne = HNormalized_Size == Dynamic ? Dynamic : HNormalized_Size - 1
681
+ };
682
+ typedef Block<const ExpressionType,
683
+ Direction == Vertical ? int(HNormalized_SizeMinusOne)
684
+ : int(internal::traits<ExpressionType>::RowsAtCompileTime),
685
+ Direction == Horizontal ? int(HNormalized_SizeMinusOne)
645
686
  : int(internal::traits<ExpressionType>::ColsAtCompileTime)>
646
- HNormalized_Block;
647
- typedef Block<const ExpressionType,
648
- Direction==Vertical ? 1 : int(internal::traits<ExpressionType>::RowsAtCompileTime),
649
- Direction==Horizontal ? 1 : int(internal::traits<ExpressionType>::ColsAtCompileTime)>
650
- HNormalized_Factors;
651
- typedef CwiseBinaryOp<internal::scalar_quotient_op<typename internal::traits<ExpressionType>::Scalar>,
652
- const HNormalized_Block,
653
- const Replicate<HNormalized_Factors,
654
- Direction==Vertical ? HNormalized_SizeMinusOne : 1,
655
- Direction==Horizontal ? HNormalized_SizeMinusOne : 1> >
656
- HNormalizedReturnType;
657
-
658
- EIGEN_DEVICE_FUNC
659
- const HNormalizedReturnType hnormalized() const;
660
-
661
- protected:
662
- ExpressionTypeNested m_matrix;
687
+ HNormalized_Block;
688
+ typedef Block<const ExpressionType,
689
+ Direction == Vertical ? 1 : int(internal::traits<ExpressionType>::RowsAtCompileTime),
690
+ Direction == Horizontal ? 1 : int(internal::traits<ExpressionType>::ColsAtCompileTime)>
691
+ HNormalized_Factors;
692
+ typedef CwiseBinaryOp<internal::scalar_quotient_op<typename internal::traits<ExpressionType>::Scalar>,
693
+ const HNormalized_Block,
694
+ const Replicate<HNormalized_Factors, Direction == Vertical ? HNormalized_SizeMinusOne : 1,
695
+ Direction == Horizontal ? HNormalized_SizeMinusOne : 1> >
696
+ HNormalizedReturnType;
697
+
698
+ EIGEN_DEVICE_FUNC const HNormalizedReturnType hnormalized() const;
699
+
700
+ #ifdef EIGEN_VECTORWISEOP_PLUGIN
701
+ #include EIGEN_VECTORWISEOP_PLUGIN
702
+ #endif
703
+
704
+ protected:
705
+ EIGEN_DEVICE_FUNC Index redux_length() const { return Direction == Vertical ? m_matrix.rows() : m_matrix.cols(); }
706
+ ExpressionType& m_matrix;
663
707
  };
664
708
 
665
- //const colwise moved to DenseBase.h due to CUDA compiler bug
666
-
709
+ // const colwise moved to DenseBase.h due to CUDA compiler bug
667
710
 
668
711
  /** \returns a writable VectorwiseOp wrapper of *this providing additional partial reduction operations
669
- *
670
- * \sa rowwise(), class VectorwiseOp, \ref TutorialReductionsVisitorsBroadcasting
671
- */
672
- template<typename Derived>
673
- inline typename DenseBase<Derived>::ColwiseReturnType
674
- DenseBase<Derived>::colwise()
675
- {
712
+ *
713
+ * \sa rowwise(), class VectorwiseOp, \ref TutorialReductionsVisitorsBroadcasting
714
+ */
715
+ template <typename Derived>
716
+ EIGEN_DEVICE_FUNC inline typename DenseBase<Derived>::ColwiseReturnType DenseBase<Derived>::colwise() {
676
717
  return ColwiseReturnType(derived());
677
718
  }
678
719
 
679
- //const rowwise moved to DenseBase.h due to CUDA compiler bug
680
-
720
+ // const rowwise moved to DenseBase.h due to CUDA compiler bug
681
721
 
682
722
  /** \returns a writable VectorwiseOp wrapper of *this providing additional partial reduction operations
683
- *
684
- * \sa colwise(), class VectorwiseOp, \ref TutorialReductionsVisitorsBroadcasting
685
- */
686
- template<typename Derived>
687
- inline typename DenseBase<Derived>::RowwiseReturnType
688
- DenseBase<Derived>::rowwise()
689
- {
723
+ *
724
+ * \sa colwise(), class VectorwiseOp, \ref TutorialReductionsVisitorsBroadcasting
725
+ */
726
+ template <typename Derived>
727
+ EIGEN_DEVICE_FUNC inline typename DenseBase<Derived>::RowwiseReturnType DenseBase<Derived>::rowwise() {
690
728
  return RowwiseReturnType(derived());
691
729
  }
692
730
 
693
- } // end namespace Eigen
731
+ } // end namespace Eigen
694
732
 
695
- #endif // EIGEN_PARTIAL_REDUX_H
733
+ #endif // EIGEN_PARTIAL_REDUX_H