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