@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.
- package/README.md +1 -1
- package/eigen/Eigen/AccelerateSupport +52 -0
- package/eigen/Eigen/Cholesky +18 -20
- package/eigen/Eigen/CholmodSupport +28 -28
- package/eigen/Eigen/Core +187 -120
- package/eigen/Eigen/Eigenvalues +16 -13
- package/eigen/Eigen/Geometry +18 -18
- package/eigen/Eigen/Householder +9 -7
- package/eigen/Eigen/IterativeLinearSolvers +8 -4
- package/eigen/Eigen/Jacobi +14 -13
- package/eigen/Eigen/KLUSupport +23 -21
- package/eigen/Eigen/LU +15 -16
- package/eigen/Eigen/MetisSupport +12 -12
- package/eigen/Eigen/OrderingMethods +54 -51
- package/eigen/Eigen/PaStiXSupport +23 -21
- package/eigen/Eigen/PardisoSupport +17 -14
- package/eigen/Eigen/QR +18 -20
- package/eigen/Eigen/QtAlignedMalloc +5 -12
- package/eigen/Eigen/SPQRSupport +21 -14
- package/eigen/Eigen/SVD +23 -17
- package/eigen/Eigen/Sparse +1 -2
- package/eigen/Eigen/SparseCholesky +18 -15
- package/eigen/Eigen/SparseCore +18 -17
- package/eigen/Eigen/SparseLU +9 -9
- package/eigen/Eigen/SparseQR +16 -14
- package/eigen/Eigen/StdDeque +5 -2
- package/eigen/Eigen/StdList +5 -2
- package/eigen/Eigen/StdVector +5 -2
- package/eigen/Eigen/SuperLUSupport +30 -24
- package/eigen/Eigen/ThreadPool +80 -0
- package/eigen/Eigen/UmfPackSupport +19 -17
- package/eigen/Eigen/Version +14 -0
- package/eigen/Eigen/src/AccelerateSupport/AccelerateSupport.h +423 -0
- package/eigen/Eigen/src/AccelerateSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Cholesky/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Cholesky/LDLT.h +366 -405
- package/eigen/Eigen/src/Cholesky/LLT.h +323 -367
- package/eigen/Eigen/src/Cholesky/LLT_LAPACKE.h +81 -56
- package/eigen/Eigen/src/CholmodSupport/CholmodSupport.h +585 -529
- package/eigen/Eigen/src/CholmodSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Core/ArithmeticSequence.h +143 -317
- package/eigen/Eigen/src/Core/Array.h +329 -370
- package/eigen/Eigen/src/Core/ArrayBase.h +190 -203
- package/eigen/Eigen/src/Core/ArrayWrapper.h +126 -170
- package/eigen/Eigen/src/Core/Assign.h +30 -40
- package/eigen/Eigen/src/Core/AssignEvaluator.h +651 -604
- package/eigen/Eigen/src/Core/Assign_MKL.h +125 -120
- package/eigen/Eigen/src/Core/BandMatrix.h +267 -282
- package/eigen/Eigen/src/Core/Block.h +371 -390
- package/eigen/Eigen/src/Core/CommaInitializer.h +85 -100
- package/eigen/Eigen/src/Core/ConditionEstimator.h +51 -53
- package/eigen/Eigen/src/Core/CoreEvaluators.h +1214 -937
- package/eigen/Eigen/src/Core/CoreIterators.h +72 -63
- package/eigen/Eigen/src/Core/CwiseBinaryOp.h +112 -129
- package/eigen/Eigen/src/Core/CwiseNullaryOp.h +676 -702
- package/eigen/Eigen/src/Core/CwiseTernaryOp.h +77 -103
- package/eigen/Eigen/src/Core/CwiseUnaryOp.h +55 -67
- package/eigen/Eigen/src/Core/CwiseUnaryView.h +127 -92
- package/eigen/Eigen/src/Core/DenseBase.h +630 -658
- package/eigen/Eigen/src/Core/DenseCoeffsBase.h +511 -628
- package/eigen/Eigen/src/Core/DenseStorage.h +511 -590
- package/eigen/Eigen/src/Core/DeviceWrapper.h +153 -0
- package/eigen/Eigen/src/Core/Diagonal.h +168 -207
- package/eigen/Eigen/src/Core/DiagonalMatrix.h +346 -317
- package/eigen/Eigen/src/Core/DiagonalProduct.h +12 -10
- package/eigen/Eigen/src/Core/Dot.h +167 -217
- package/eigen/Eigen/src/Core/EigenBase.h +74 -85
- package/eigen/Eigen/src/Core/Fill.h +138 -0
- package/eigen/Eigen/src/Core/FindCoeff.h +464 -0
- package/eigen/Eigen/src/Core/ForceAlignedAccess.h +90 -113
- package/eigen/Eigen/src/Core/Fuzzy.h +82 -105
- package/eigen/Eigen/src/Core/GeneralProduct.h +315 -261
- package/eigen/Eigen/src/Core/GenericPacketMath.h +1182 -520
- package/eigen/Eigen/src/Core/GlobalFunctions.h +193 -157
- package/eigen/Eigen/src/Core/IO.h +131 -156
- package/eigen/Eigen/src/Core/IndexedView.h +209 -125
- package/eigen/Eigen/src/Core/InnerProduct.h +260 -0
- package/eigen/Eigen/src/Core/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Core/Inverse.h +50 -59
- package/eigen/Eigen/src/Core/Map.h +123 -141
- package/eigen/Eigen/src/Core/MapBase.h +255 -282
- package/eigen/Eigen/src/Core/MathFunctions.h +1247 -1201
- package/eigen/Eigen/src/Core/MathFunctionsImpl.h +162 -99
- package/eigen/Eigen/src/Core/Matrix.h +463 -494
- package/eigen/Eigen/src/Core/MatrixBase.h +468 -470
- package/eigen/Eigen/src/Core/NestByValue.h +58 -52
- package/eigen/Eigen/src/Core/NoAlias.h +79 -86
- package/eigen/Eigen/src/Core/NumTraits.h +206 -206
- package/eigen/Eigen/src/Core/PartialReduxEvaluator.h +163 -142
- package/eigen/Eigen/src/Core/PermutationMatrix.h +461 -511
- package/eigen/Eigen/src/Core/PlainObjectBase.h +858 -972
- package/eigen/Eigen/src/Core/Product.h +246 -130
- package/eigen/Eigen/src/Core/ProductEvaluators.h +779 -671
- package/eigen/Eigen/src/Core/Random.h +153 -164
- package/eigen/Eigen/src/Core/RandomImpl.h +262 -0
- package/eigen/Eigen/src/Core/RealView.h +250 -0
- package/eigen/Eigen/src/Core/Redux.h +334 -314
- package/eigen/Eigen/src/Core/Ref.h +259 -257
- package/eigen/Eigen/src/Core/Replicate.h +92 -104
- package/eigen/Eigen/src/Core/Reshaped.h +215 -271
- package/eigen/Eigen/src/Core/ReturnByValue.h +47 -55
- package/eigen/Eigen/src/Core/Reverse.h +133 -148
- package/eigen/Eigen/src/Core/Select.h +68 -140
- package/eigen/Eigen/src/Core/SelfAdjointView.h +254 -290
- package/eigen/Eigen/src/Core/SelfCwiseBinaryOp.h +23 -20
- package/eigen/Eigen/src/Core/SkewSymmetricMatrix3.h +382 -0
- package/eigen/Eigen/src/Core/Solve.h +88 -102
- package/eigen/Eigen/src/Core/SolveTriangular.h +126 -124
- package/eigen/Eigen/src/Core/SolverBase.h +132 -133
- package/eigen/Eigen/src/Core/StableNorm.h +113 -147
- package/eigen/Eigen/src/Core/StlIterators.h +404 -248
- package/eigen/Eigen/src/Core/Stride.h +90 -92
- package/eigen/Eigen/src/Core/Swap.h +70 -39
- package/eigen/Eigen/src/Core/Transpose.h +258 -295
- package/eigen/Eigen/src/Core/Transpositions.h +270 -333
- package/eigen/Eigen/src/Core/TriangularMatrix.h +642 -743
- package/eigen/Eigen/src/Core/VectorBlock.h +59 -72
- package/eigen/Eigen/src/Core/VectorwiseOp.h +653 -704
- package/eigen/Eigen/src/Core/Visitor.h +464 -308
- package/eigen/Eigen/src/Core/arch/AVX/Complex.h +380 -187
- package/eigen/Eigen/src/Core/arch/AVX/MathFunctions.h +65 -163
- package/eigen/Eigen/src/Core/arch/AVX/PacketMath.h +2145 -638
- package/eigen/Eigen/src/Core/arch/AVX/Reductions.h +353 -0
- package/eigen/Eigen/src/Core/arch/AVX/TypeCasting.h +253 -60
- package/eigen/Eigen/src/Core/arch/AVX512/Complex.h +278 -228
- package/eigen/Eigen/src/Core/arch/AVX512/GemmKernel.h +1245 -0
- package/eigen/Eigen/src/Core/arch/AVX512/MathFunctions.h +48 -269
- package/eigen/Eigen/src/Core/arch/AVX512/MathFunctionsFP16.h +75 -0
- package/eigen/Eigen/src/Core/arch/AVX512/PacketMath.h +1597 -754
- package/eigen/Eigen/src/Core/arch/AVX512/PacketMathFP16.h +1413 -0
- package/eigen/Eigen/src/Core/arch/AVX512/Reductions.h +297 -0
- package/eigen/Eigen/src/Core/arch/AVX512/TrsmKernel.h +1167 -0
- package/eigen/Eigen/src/Core/arch/AVX512/TrsmUnrolls.inc +1219 -0
- package/eigen/Eigen/src/Core/arch/AVX512/TypeCasting.h +229 -41
- package/eigen/Eigen/src/Core/arch/AVX512/TypeCastingFP16.h +130 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/Complex.h +420 -184
- package/eigen/Eigen/src/Core/arch/AltiVec/MathFunctions.h +40 -49
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProduct.h +2962 -2213
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h +196 -212
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h +713 -441
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMAbfloat16.h +742 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixVectorProduct.inc +2818 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/PacketMath.h +2380 -1362
- package/eigen/Eigen/src/Core/arch/AltiVec/TypeCasting.h +153 -0
- package/eigen/Eigen/src/Core/arch/Default/BFloat16.h +390 -224
- package/eigen/Eigen/src/Core/arch/Default/ConjHelper.h +78 -67
- package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h +1784 -799
- package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h +167 -50
- package/eigen/Eigen/src/Core/arch/Default/Half.h +528 -379
- package/eigen/Eigen/src/Core/arch/Default/Settings.h +10 -12
- package/eigen/Eigen/src/Core/arch/GPU/Complex.h +244 -0
- package/eigen/Eigen/src/Core/arch/GPU/MathFunctions.h +41 -40
- package/eigen/Eigen/src/Core/arch/GPU/PacketMath.h +550 -523
- package/eigen/Eigen/src/Core/arch/GPU/Tuple.h +268 -0
- package/eigen/Eigen/src/Core/arch/GPU/TypeCasting.h +27 -30
- package/eigen/Eigen/src/Core/arch/HIP/hcc/math_constants.h +8 -8
- package/eigen/Eigen/src/Core/arch/HVX/PacketMath.h +1088 -0
- package/eigen/Eigen/src/Core/arch/LSX/Complex.h +520 -0
- package/eigen/Eigen/src/Core/arch/LSX/GeneralBlockPanelKernel.h +23 -0
- package/eigen/Eigen/src/Core/arch/LSX/MathFunctions.h +43 -0
- package/eigen/Eigen/src/Core/arch/LSX/PacketMath.h +2866 -0
- package/eigen/Eigen/src/Core/arch/LSX/TypeCasting.h +526 -0
- package/eigen/Eigen/src/Core/arch/MSA/Complex.h +54 -82
- package/eigen/Eigen/src/Core/arch/MSA/MathFunctions.h +84 -92
- package/eigen/Eigen/src/Core/arch/MSA/PacketMath.h +51 -47
- package/eigen/Eigen/src/Core/arch/NEON/Complex.h +454 -306
- package/eigen/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h +175 -115
- package/eigen/Eigen/src/Core/arch/NEON/MathFunctions.h +23 -30
- package/eigen/Eigen/src/Core/arch/NEON/PacketMath.h +4366 -2857
- package/eigen/Eigen/src/Core/arch/NEON/TypeCasting.h +616 -393
- package/eigen/Eigen/src/Core/arch/NEON/UnaryFunctors.h +57 -0
- package/eigen/Eigen/src/Core/arch/SSE/Complex.h +350 -198
- package/eigen/Eigen/src/Core/arch/SSE/MathFunctions.h +38 -149
- package/eigen/Eigen/src/Core/arch/SSE/PacketMath.h +1791 -912
- package/eigen/Eigen/src/Core/arch/SSE/Reductions.h +324 -0
- package/eigen/Eigen/src/Core/arch/SSE/TypeCasting.h +128 -40
- package/eigen/Eigen/src/Core/arch/SVE/MathFunctions.h +10 -6
- package/eigen/Eigen/src/Core/arch/SVE/PacketMath.h +156 -234
- package/eigen/Eigen/src/Core/arch/SVE/TypeCasting.h +6 -3
- package/eigen/Eigen/src/Core/arch/SYCL/InteropHeaders.h +27 -32
- package/eigen/Eigen/src/Core/arch/SYCL/MathFunctions.h +119 -117
- package/eigen/Eigen/src/Core/arch/SYCL/PacketMath.h +325 -419
- package/eigen/Eigen/src/Core/arch/SYCL/TypeCasting.h +15 -17
- package/eigen/Eigen/src/Core/arch/ZVector/Complex.h +325 -181
- package/eigen/Eigen/src/Core/arch/ZVector/MathFunctions.h +94 -83
- package/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h +811 -458
- package/eigen/Eigen/src/Core/functors/AssignmentFunctors.h +121 -124
- package/eigen/Eigen/src/Core/functors/BinaryFunctors.h +576 -370
- package/eigen/Eigen/src/Core/functors/NullaryFunctors.h +194 -109
- package/eigen/Eigen/src/Core/functors/StlFunctors.h +95 -112
- package/eigen/Eigen/src/Core/functors/TernaryFunctors.h +34 -7
- package/eigen/Eigen/src/Core/functors/UnaryFunctors.h +1038 -749
- package/eigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h +1883 -1375
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix.h +312 -370
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +189 -176
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h +84 -81
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h +154 -73
- package/eigen/Eigen/src/Core/products/GeneralMatrixVector.h +292 -337
- package/eigen/Eigen/src/Core/products/GeneralMatrixVector_BLAS.h +80 -77
- package/eigen/Eigen/src/Core/products/Parallelizer.h +207 -105
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +327 -388
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h +206 -224
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector.h +138 -147
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector_BLAS.h +58 -61
- package/eigen/Eigen/src/Core/products/SelfadjointProduct.h +71 -71
- package/eigen/Eigen/src/Core/products/SelfadjointRank2Update.h +48 -47
- package/eigen/Eigen/src/Core/products/TriangularMatrixMatrix.h +294 -369
- package/eigen/Eigen/src/Core/products/TriangularMatrixMatrix_BLAS.h +246 -238
- package/eigen/Eigen/src/Core/products/TriangularMatrixVector.h +244 -247
- package/eigen/Eigen/src/Core/products/TriangularMatrixVector_BLAS.h +212 -192
- package/eigen/Eigen/src/Core/products/TriangularSolverMatrix.h +328 -277
- package/eigen/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h +108 -109
- package/eigen/Eigen/src/Core/products/TriangularSolverVector.h +68 -94
- package/eigen/Eigen/src/Core/util/Assert.h +158 -0
- package/eigen/Eigen/src/Core/util/BlasUtil.h +342 -303
- package/eigen/Eigen/src/Core/util/ConfigureVectorization.h +348 -317
- package/eigen/Eigen/src/Core/util/Constants.h +297 -262
- package/eigen/Eigen/src/Core/util/DisableStupidWarnings.h +130 -90
- package/eigen/Eigen/src/Core/util/EmulateArray.h +270 -0
- package/eigen/Eigen/src/Core/util/ForwardDeclarations.h +449 -247
- package/eigen/Eigen/src/Core/util/GpuHipCudaDefines.inc +101 -0
- package/eigen/Eigen/src/Core/util/GpuHipCudaUndefines.inc +45 -0
- package/eigen/Eigen/src/Core/util/IndexedViewHelper.h +417 -116
- package/eigen/Eigen/src/Core/util/IntegralConstant.h +211 -204
- package/eigen/Eigen/src/Core/util/MKL_support.h +39 -37
- package/eigen/Eigen/src/Core/util/Macros.h +655 -773
- package/eigen/Eigen/src/Core/util/MaxSizeVector.h +139 -0
- package/eigen/Eigen/src/Core/util/Memory.h +970 -748
- package/eigen/Eigen/src/Core/util/Meta.h +581 -633
- package/eigen/Eigen/src/Core/util/MoreMeta.h +638 -0
- package/eigen/Eigen/src/Core/util/ReenableStupidWarnings.h +32 -19
- package/eigen/Eigen/src/Core/util/ReshapedHelper.h +17 -17
- package/eigen/Eigen/src/Core/util/Serializer.h +209 -0
- package/eigen/Eigen/src/Core/util/StaticAssert.h +50 -166
- package/eigen/Eigen/src/Core/util/SymbolicIndex.h +377 -225
- package/eigen/Eigen/src/Core/util/XprHelper.h +784 -547
- package/eigen/Eigen/src/Eigenvalues/ComplexEigenSolver.h +246 -277
- package/eigen/Eigen/src/Eigenvalues/ComplexSchur.h +299 -319
- package/eigen/Eigen/src/Eigenvalues/ComplexSchur_LAPACKE.h +52 -48
- package/eigen/Eigen/src/Eigenvalues/EigenSolver.h +413 -456
- package/eigen/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h +309 -325
- package/eigen/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h +157 -171
- package/eigen/Eigen/src/Eigenvalues/HessenbergDecomposition.h +292 -310
- package/eigen/Eigen/src/Eigenvalues/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h +89 -105
- package/eigen/Eigen/src/Eigenvalues/RealQZ.h +537 -607
- package/eigen/Eigen/src/Eigenvalues/RealSchur.h +342 -381
- package/eigen/Eigen/src/Eigenvalues/RealSchur_LAPACKE.h +41 -35
- package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +541 -595
- package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h +47 -44
- package/eigen/Eigen/src/Eigenvalues/Tridiagonalization.h +430 -462
- package/eigen/Eigen/src/Geometry/AlignedBox.h +226 -227
- package/eigen/Eigen/src/Geometry/AngleAxis.h +131 -133
- package/eigen/Eigen/src/Geometry/EulerAngles.h +163 -74
- package/eigen/Eigen/src/Geometry/Homogeneous.h +285 -333
- package/eigen/Eigen/src/Geometry/Hyperplane.h +151 -160
- package/eigen/Eigen/src/Geometry/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Geometry/OrthoMethods.h +168 -146
- package/eigen/Eigen/src/Geometry/ParametrizedLine.h +127 -127
- package/eigen/Eigen/src/Geometry/Quaternion.h +566 -506
- package/eigen/Eigen/src/Geometry/Rotation2D.h +107 -105
- package/eigen/Eigen/src/Geometry/RotationBase.h +148 -145
- package/eigen/Eigen/src/Geometry/Scaling.h +113 -106
- package/eigen/Eigen/src/Geometry/Transform.h +858 -936
- package/eigen/Eigen/src/Geometry/Translation.h +94 -92
- package/eigen/Eigen/src/Geometry/Umeyama.h +79 -84
- package/eigen/Eigen/src/Geometry/arch/Geometry_SIMD.h +90 -104
- package/eigen/Eigen/src/Householder/BlockHouseholder.h +51 -46
- package/eigen/Eigen/src/Householder/Householder.h +102 -124
- package/eigen/Eigen/src/Householder/HouseholderSequence.h +412 -453
- package/eigen/Eigen/src/Householder/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +149 -162
- package/eigen/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +124 -119
- package/eigen/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +92 -104
- package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +251 -243
- package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +224 -228
- package/eigen/Eigen/src/IterativeLinearSolvers/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +178 -227
- package/eigen/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h +79 -84
- package/eigen/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h +54 -60
- package/eigen/Eigen/src/Jacobi/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Jacobi/Jacobi.h +252 -308
- package/eigen/Eigen/src/KLUSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/KLUSupport/KLUSupport.h +208 -227
- package/eigen/Eigen/src/LU/Determinant.h +50 -69
- package/eigen/Eigen/src/LU/FullPivLU.h +545 -596
- package/eigen/Eigen/src/LU/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/LU/InverseImpl.h +206 -285
- package/eigen/Eigen/src/LU/PartialPivLU.h +390 -428
- package/eigen/Eigen/src/LU/PartialPivLU_LAPACKE.h +54 -40
- package/eigen/Eigen/src/LU/arch/InverseSize4.h +72 -70
- package/eigen/Eigen/src/MetisSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/MetisSupport/MetisSupport.h +81 -93
- package/eigen/Eigen/src/OrderingMethods/Amd.h +243 -265
- package/eigen/Eigen/src/OrderingMethods/Eigen_Colamd.h +831 -1004
- package/eigen/Eigen/src/OrderingMethods/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/OrderingMethods/Ordering.h +112 -119
- package/eigen/Eigen/src/PaStiXSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/PaStiXSupport/PaStiXSupport.h +524 -570
- package/eigen/Eigen/src/PardisoSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/PardisoSupport/PardisoSupport.h +385 -430
- package/eigen/Eigen/src/QR/ColPivHouseholderQR.h +479 -479
- package/eigen/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h +120 -56
- package/eigen/Eigen/src/QR/CompleteOrthogonalDecomposition.h +166 -153
- package/eigen/Eigen/src/QR/FullPivHouseholderQR.h +495 -475
- package/eigen/Eigen/src/QR/HouseholderQR.h +394 -285
- package/eigen/Eigen/src/QR/HouseholderQR_LAPACKE.h +32 -23
- package/eigen/Eigen/src/QR/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SPQRSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h +244 -264
- package/eigen/Eigen/src/SVD/BDCSVD.h +817 -713
- package/eigen/Eigen/src/SVD/BDCSVD_LAPACKE.h +174 -0
- package/eigen/Eigen/src/SVD/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SVD/JacobiSVD.h +577 -543
- package/eigen/Eigen/src/SVD/JacobiSVD_LAPACKE.h +85 -49
- package/eigen/Eigen/src/SVD/SVDBase.h +242 -182
- package/eigen/Eigen/src/SVD/UpperBidiagonalization.h +200 -235
- package/eigen/Eigen/src/SparseCholesky/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky.h +765 -594
- package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +308 -94
- package/eigen/Eigen/src/SparseCore/AmbiVector.h +202 -251
- package/eigen/Eigen/src/SparseCore/CompressedStorage.h +184 -252
- package/eigen/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +134 -178
- package/eigen/Eigen/src/SparseCore/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SparseCore/SparseAssign.h +149 -140
- package/eigen/Eigen/src/SparseCore/SparseBlock.h +403 -440
- package/eigen/Eigen/src/SparseCore/SparseColEtree.h +100 -112
- package/eigen/Eigen/src/SparseCore/SparseCompressedBase.h +525 -303
- package/eigen/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +555 -339
- package/eigen/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +100 -108
- package/eigen/Eigen/src/SparseCore/SparseDenseProduct.h +169 -197
- package/eigen/Eigen/src/SparseCore/SparseDiagonalProduct.h +71 -71
- package/eigen/Eigen/src/SparseCore/SparseDot.h +49 -47
- package/eigen/Eigen/src/SparseCore/SparseFuzzy.h +13 -11
- package/eigen/Eigen/src/SparseCore/SparseMap.h +243 -253
- package/eigen/Eigen/src/SparseCore/SparseMatrix.h +1603 -1245
- package/eigen/Eigen/src/SparseCore/SparseMatrixBase.h +403 -350
- package/eigen/Eigen/src/SparseCore/SparsePermutation.h +186 -115
- package/eigen/Eigen/src/SparseCore/SparseProduct.h +94 -97
- package/eigen/Eigen/src/SparseCore/SparseRedux.h +22 -24
- package/eigen/Eigen/src/SparseCore/SparseRef.h +268 -295
- package/eigen/Eigen/src/SparseCore/SparseSelfAdjointView.h +370 -416
- package/eigen/Eigen/src/SparseCore/SparseSolverBase.h +78 -87
- package/eigen/Eigen/src/SparseCore/SparseSparseProductWithPruning.h +81 -95
- package/eigen/Eigen/src/SparseCore/SparseTranspose.h +62 -71
- package/eigen/Eigen/src/SparseCore/SparseTriangularView.h +132 -144
- package/eigen/Eigen/src/SparseCore/SparseUtil.h +138 -115
- package/eigen/Eigen/src/SparseCore/SparseVector.h +426 -372
- package/eigen/Eigen/src/SparseCore/SparseView.h +164 -193
- package/eigen/Eigen/src/SparseCore/TriangularSolver.h +129 -170
- package/eigen/Eigen/src/SparseLU/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SparseLU/SparseLU.h +756 -710
- package/eigen/Eigen/src/SparseLU/SparseLUImpl.h +61 -48
- package/eigen/Eigen/src/SparseLU/SparseLU_Memory.h +102 -118
- package/eigen/Eigen/src/SparseLU/SparseLU_Structs.h +38 -35
- package/eigen/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h +245 -301
- package/eigen/Eigen/src/SparseLU/SparseLU_Utils.h +44 -49
- package/eigen/Eigen/src/SparseLU/SparseLU_column_bmod.h +104 -108
- package/eigen/Eigen/src/SparseLU/SparseLU_column_dfs.h +89 -100
- package/eigen/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h +57 -58
- package/eigen/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h +43 -55
- package/eigen/Eigen/src/SparseLU/SparseLU_kernel_bmod.h +74 -71
- package/eigen/Eigen/src/SparseLU/SparseLU_panel_bmod.h +124 -132
- package/eigen/Eigen/src/SparseLU/SparseLU_panel_dfs.h +136 -159
- package/eigen/Eigen/src/SparseLU/SparseLU_pivotL.h +51 -52
- package/eigen/Eigen/src/SparseLU/SparseLU_pruneL.h +67 -73
- package/eigen/Eigen/src/SparseLU/SparseLU_relax_snode.h +24 -26
- package/eigen/Eigen/src/SparseQR/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SparseQR/SparseQR.h +450 -502
- package/eigen/Eigen/src/StlSupport/StdDeque.h +28 -93
- package/eigen/Eigen/src/StlSupport/StdList.h +28 -84
- package/eigen/Eigen/src/StlSupport/StdVector.h +28 -108
- package/eigen/Eigen/src/StlSupport/details.h +48 -50
- package/eigen/Eigen/src/SuperLUSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SuperLUSupport/SuperLUSupport.h +634 -730
- package/eigen/Eigen/src/ThreadPool/Barrier.h +70 -0
- package/eigen/Eigen/src/ThreadPool/CoreThreadPoolDevice.h +336 -0
- package/eigen/Eigen/src/ThreadPool/EventCount.h +241 -0
- package/eigen/Eigen/src/ThreadPool/ForkJoin.h +140 -0
- package/eigen/Eigen/src/ThreadPool/InternalHeaderCheck.h +4 -0
- package/eigen/Eigen/src/ThreadPool/NonBlockingThreadPool.h +587 -0
- package/eigen/Eigen/src/ThreadPool/RunQueue.h +230 -0
- package/eigen/Eigen/src/ThreadPool/ThreadCancel.h +21 -0
- package/eigen/Eigen/src/ThreadPool/ThreadEnvironment.h +43 -0
- package/eigen/Eigen/src/ThreadPool/ThreadLocal.h +289 -0
- package/eigen/Eigen/src/ThreadPool/ThreadPoolInterface.h +50 -0
- package/eigen/Eigen/src/ThreadPool/ThreadYield.h +16 -0
- package/eigen/Eigen/src/UmfPackSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/UmfPackSupport/UmfPackSupport.h +428 -464
- package/eigen/Eigen/src/misc/Image.h +41 -43
- package/eigen/Eigen/src/misc/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/misc/Kernel.h +39 -41
- package/eigen/Eigen/src/misc/RealSvd2x2.h +19 -21
- package/eigen/Eigen/src/misc/blas.h +83 -426
- package/eigen/Eigen/src/misc/lapacke.h +9972 -16179
- package/eigen/Eigen/src/misc/lapacke_helpers.h +163 -0
- package/eigen/Eigen/src/misc/lapacke_mangling.h +4 -5
- package/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.inc +344 -0
- package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.inc +544 -0
- package/eigen/Eigen/src/plugins/{BlockMethods.h → BlockMethods.inc} +434 -506
- package/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.inc +116 -0
- package/eigen/Eigen/src/plugins/{CommonCwiseUnaryOps.h → CommonCwiseUnaryOps.inc} +58 -68
- package/eigen/Eigen/src/plugins/IndexedViewMethods.inc +192 -0
- package/eigen/Eigen/src/plugins/InternalHeaderCheck.inc +3 -0
- package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.inc +331 -0
- package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.inc +118 -0
- package/eigen/Eigen/src/plugins/ReshapedMethods.inc +133 -0
- package/package.json +1 -1
- package/eigen/COPYING.APACHE +0 -203
- package/eigen/COPYING.BSD +0 -26
- package/eigen/COPYING.GPL +0 -674
- package/eigen/COPYING.LGPL +0 -502
- package/eigen/COPYING.MINPACK +0 -51
- package/eigen/COPYING.MPL2 +0 -373
- package/eigen/COPYING.README +0 -18
- package/eigen/Eigen/src/Core/BooleanRedux.h +0 -162
- package/eigen/Eigen/src/Core/arch/CUDA/Complex.h +0 -258
- package/eigen/Eigen/src/Core/arch/Default/TypeCasting.h +0 -120
- package/eigen/Eigen/src/Core/arch/SYCL/SyclMemoryModel.h +0 -694
- package/eigen/Eigen/src/Core/util/NonMPL2.h +0 -3
- package/eigen/Eigen/src/SparseCore/MappedSparseMatrix.h +0 -67
- package/eigen/Eigen/src/SparseLU/SparseLU_gemm_kernel.h +0 -280
- package/eigen/Eigen/src/misc/lapack.h +0 -152
- package/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.h +0 -358
- package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.h +0 -696
- package/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.h +0 -115
- package/eigen/Eigen/src/plugins/IndexedViewMethods.h +0 -262
- package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.h +0 -152
- package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.h +0 -95
- package/eigen/Eigen/src/plugins/ReshapedMethods.h +0 -149
- package/eigen/README.md +0 -5
|
@@ -10,372 +10,528 @@
|
|
|
10
10
|
#ifndef EIGEN_VISITOR_H
|
|
11
11
|
#define EIGEN_VISITOR_H
|
|
12
12
|
|
|
13
|
+
// IWYU pragma: private
|
|
14
|
+
#include "./InternalHeaderCheck.h"
|
|
15
|
+
|
|
13
16
|
namespace Eigen {
|
|
14
17
|
|
|
15
18
|
namespace internal {
|
|
16
19
|
|
|
17
|
-
template<typename Visitor, typename Derived, int UnrollCount
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
col = (UnrollCount-1) / Derived::RowsAtCompileTime,
|
|
22
|
-
row = (UnrollCount-1) % Derived::RowsAtCompileTime
|
|
23
|
-
};
|
|
24
|
-
|
|
25
|
-
EIGEN_DEVICE_FUNC
|
|
26
|
-
static inline void run(const Derived &mat, Visitor& visitor)
|
|
27
|
-
{
|
|
28
|
-
visitor_impl<Visitor, Derived, UnrollCount-1>::run(mat, visitor);
|
|
29
|
-
visitor(mat.coeff(row, col), row, col);
|
|
30
|
-
}
|
|
31
|
-
};
|
|
20
|
+
template <typename Visitor, typename Derived, int UnrollCount,
|
|
21
|
+
bool Vectorize = (Derived::PacketAccess && functor_traits<Visitor>::PacketAccess), bool LinearAccess = false,
|
|
22
|
+
bool ShortCircuitEvaluation = false>
|
|
23
|
+
struct visitor_impl;
|
|
32
24
|
|
|
33
|
-
template<typename Visitor,
|
|
34
|
-
struct
|
|
35
|
-
|
|
36
|
-
EIGEN_DEVICE_FUNC
|
|
37
|
-
static inline void run(const Derived &mat, Visitor& visitor)
|
|
38
|
-
{
|
|
39
|
-
return visitor.init(mat.coeff(0, 0), 0, 0);
|
|
40
|
-
}
|
|
25
|
+
template <typename Visitor, bool ShortCircuitEvaluation = false>
|
|
26
|
+
struct short_circuit_eval_impl {
|
|
27
|
+
// if short circuit evaluation is not used, do nothing
|
|
28
|
+
static constexpr EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE bool run(const Visitor&) { return false; }
|
|
41
29
|
};
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
EIGEN_DEVICE_FUNC
|
|
47
|
-
static inline void run(const Derived &/*mat*/, Visitor& /*visitor*/)
|
|
48
|
-
{}
|
|
30
|
+
template <typename Visitor>
|
|
31
|
+
struct short_circuit_eval_impl<Visitor, true> {
|
|
32
|
+
// if short circuit evaluation is used, check the visitor
|
|
33
|
+
static constexpr EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE bool run(const Visitor& visitor) { return visitor.done(); }
|
|
49
34
|
};
|
|
50
35
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
{
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
36
|
+
// unrolled inner-outer traversal
|
|
37
|
+
template <typename Visitor, typename Derived, int UnrollCount, bool Vectorize, bool ShortCircuitEvaluation>
|
|
38
|
+
struct visitor_impl<Visitor, Derived, UnrollCount, Vectorize, false, ShortCircuitEvaluation> {
|
|
39
|
+
// don't use short circuit evaluation for unrolled version
|
|
40
|
+
using Scalar = typename Derived::Scalar;
|
|
41
|
+
using Packet = typename packet_traits<Scalar>::type;
|
|
42
|
+
static constexpr bool RowMajor = Derived::IsRowMajor;
|
|
43
|
+
static constexpr int RowsAtCompileTime = Derived::RowsAtCompileTime;
|
|
44
|
+
static constexpr int ColsAtCompileTime = Derived::ColsAtCompileTime;
|
|
45
|
+
static constexpr int PacketSize = packet_traits<Scalar>::size;
|
|
46
|
+
|
|
47
|
+
static constexpr bool CanVectorize(int K) {
|
|
48
|
+
constexpr int InnerSizeAtCompileTime = RowMajor ? ColsAtCompileTime : RowsAtCompileTime;
|
|
49
|
+
if (InnerSizeAtCompileTime < PacketSize) return false;
|
|
50
|
+
return Vectorize && (InnerSizeAtCompileTime - (K % InnerSizeAtCompileTime) >= PacketSize);
|
|
63
51
|
}
|
|
64
|
-
};
|
|
65
|
-
|
|
66
|
-
// evaluator adaptor
|
|
67
|
-
template<typename XprType>
|
|
68
|
-
class visitor_evaluator
|
|
69
|
-
{
|
|
70
|
-
public:
|
|
71
|
-
EIGEN_DEVICE_FUNC
|
|
72
|
-
explicit visitor_evaluator(const XprType &xpr) : m_evaluator(xpr), m_xpr(xpr) {}
|
|
73
52
|
|
|
74
|
-
|
|
75
|
-
|
|
53
|
+
template <int K = 0, bool Empty = (K == UnrollCount), std::enable_if_t<Empty, bool> = true>
|
|
54
|
+
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void run(const Derived&, Visitor&) {}
|
|
76
55
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
56
|
+
template <int K = 0, bool Empty = (K == UnrollCount), bool Initialize = (K == 0), bool DoVectorOp = CanVectorize(K),
|
|
57
|
+
std::enable_if_t<!Empty && Initialize && !DoVectorOp, bool> = true>
|
|
58
|
+
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void run(const Derived& mat, Visitor& visitor) {
|
|
59
|
+
visitor.init(mat.coeff(0, 0), 0, 0);
|
|
60
|
+
run<1>(mat, visitor);
|
|
61
|
+
}
|
|
81
62
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
EIGEN_DEVICE_FUNC
|
|
63
|
+
template <int K = 0, bool Empty = (K == UnrollCount), bool Initialize = (K == 0), bool DoVectorOp = CanVectorize(K),
|
|
64
|
+
std::enable_if_t<!Empty && !Initialize && !DoVectorOp, bool> = true>
|
|
65
|
+
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void run(const Derived& mat, Visitor& visitor) {
|
|
66
|
+
static constexpr int R = RowMajor ? (K / ColsAtCompileTime) : (K % RowsAtCompileTime);
|
|
67
|
+
static constexpr int C = RowMajor ? (K % ColsAtCompileTime) : (K / RowsAtCompileTime);
|
|
68
|
+
visitor(mat.coeff(R, C), R, C);
|
|
69
|
+
run<K + 1>(mat, visitor);
|
|
70
|
+
}
|
|
85
71
|
|
|
86
|
-
|
|
87
|
-
|
|
72
|
+
template <int K = 0, bool Empty = (K == UnrollCount), bool Initialize = (K == 0), bool DoVectorOp = CanVectorize(K),
|
|
73
|
+
std::enable_if_t<!Empty && Initialize && DoVectorOp, bool> = true>
|
|
74
|
+
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void run(const Derived& mat, Visitor& visitor) {
|
|
75
|
+
Packet P = mat.template packet<Packet>(0, 0);
|
|
76
|
+
visitor.initpacket(P, 0, 0);
|
|
77
|
+
run<PacketSize>(mat, visitor);
|
|
78
|
+
}
|
|
88
79
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
const
|
|
80
|
+
template <int K = 0, bool Empty = (K == UnrollCount), bool Initialize = (K == 0), bool DoVectorOp = CanVectorize(K),
|
|
81
|
+
std::enable_if_t<!Empty && !Initialize && DoVectorOp, bool> = true>
|
|
82
|
+
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void run(const Derived& mat, Visitor& visitor) {
|
|
83
|
+
static constexpr int R = RowMajor ? (K / ColsAtCompileTime) : (K % RowsAtCompileTime);
|
|
84
|
+
static constexpr int C = RowMajor ? (K % ColsAtCompileTime) : (K / RowsAtCompileTime);
|
|
85
|
+
Packet P = mat.template packet<Packet>(R, C);
|
|
86
|
+
visitor.packet(P, R, C);
|
|
87
|
+
run<K + PacketSize>(mat, visitor);
|
|
88
|
+
}
|
|
92
89
|
};
|
|
93
|
-
} // end namespace internal
|
|
94
90
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
EIGEN_DEVICE_FUNC
|
|
117
|
-
void DenseBase<Derived>::visit(Visitor& visitor) const
|
|
118
|
-
{
|
|
119
|
-
if(size()==0)
|
|
120
|
-
return;
|
|
121
|
-
|
|
122
|
-
typedef typename internal::visitor_evaluator<Derived> ThisEvaluator;
|
|
123
|
-
ThisEvaluator thisEval(derived());
|
|
91
|
+
// unrolled linear traversal
|
|
92
|
+
template <typename Visitor, typename Derived, int UnrollCount, bool Vectorize, bool ShortCircuitEvaluation>
|
|
93
|
+
struct visitor_impl<Visitor, Derived, UnrollCount, Vectorize, true, ShortCircuitEvaluation> {
|
|
94
|
+
// don't use short circuit evaluation for unrolled version
|
|
95
|
+
using Scalar = typename Derived::Scalar;
|
|
96
|
+
using Packet = typename packet_traits<Scalar>::type;
|
|
97
|
+
static constexpr int PacketSize = packet_traits<Scalar>::size;
|
|
98
|
+
|
|
99
|
+
static constexpr bool CanVectorize(int K) { return Vectorize && ((UnrollCount - K) >= PacketSize); }
|
|
100
|
+
|
|
101
|
+
// empty
|
|
102
|
+
template <int K = 0, bool Empty = (K == UnrollCount), std::enable_if_t<Empty, bool> = true>
|
|
103
|
+
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void run(const Derived&, Visitor&) {}
|
|
104
|
+
|
|
105
|
+
// scalar initialization
|
|
106
|
+
template <int K = 0, bool Empty = (K == UnrollCount), bool Initialize = (K == 0), bool DoVectorOp = CanVectorize(K),
|
|
107
|
+
std::enable_if_t<!Empty && Initialize && !DoVectorOp, bool> = true>
|
|
108
|
+
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void run(const Derived& mat, Visitor& visitor) {
|
|
109
|
+
visitor.init(mat.coeff(0), 0);
|
|
110
|
+
run<1>(mat, visitor);
|
|
111
|
+
}
|
|
124
112
|
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
113
|
+
// scalar iteration
|
|
114
|
+
template <int K = 0, bool Empty = (K == UnrollCount), bool Initialize = (K == 0), bool DoVectorOp = CanVectorize(K),
|
|
115
|
+
std::enable_if_t<!Empty && !Initialize && !DoVectorOp, bool> = true>
|
|
116
|
+
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void run(const Derived& mat, Visitor& visitor) {
|
|
117
|
+
visitor(mat.coeff(K), K);
|
|
118
|
+
run<K + 1>(mat, visitor);
|
|
119
|
+
}
|
|
131
120
|
|
|
132
|
-
|
|
121
|
+
// vector initialization
|
|
122
|
+
template <int K = 0, bool Empty = (K == UnrollCount), bool Initialize = (K == 0), bool DoVectorOp = CanVectorize(K),
|
|
123
|
+
std::enable_if_t<!Empty && Initialize && DoVectorOp, bool> = true>
|
|
124
|
+
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void run(const Derived& mat, Visitor& visitor) {
|
|
125
|
+
Packet P = mat.template packet<Packet>(0);
|
|
126
|
+
visitor.initpacket(P, 0);
|
|
127
|
+
run<PacketSize>(mat, visitor);
|
|
128
|
+
}
|
|
133
129
|
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
EIGEN_DEVICE_FUNC
|
|
142
|
-
coeff_visitor() : row(-1), col(-1), res(0) {}
|
|
143
|
-
typedef typename Derived::Scalar Scalar;
|
|
144
|
-
Index row, col;
|
|
145
|
-
Scalar res;
|
|
146
|
-
EIGEN_DEVICE_FUNC
|
|
147
|
-
inline void init(const Scalar& value, Index i, Index j)
|
|
148
|
-
{
|
|
149
|
-
res = value;
|
|
150
|
-
row = i;
|
|
151
|
-
col = j;
|
|
130
|
+
// vector iteration
|
|
131
|
+
template <int K = 0, bool Empty = (K == UnrollCount), bool Initialize = (K == 0), bool DoVectorOp = CanVectorize(K),
|
|
132
|
+
std::enable_if_t<!Empty && !Initialize && DoVectorOp, bool> = true>
|
|
133
|
+
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void run(const Derived& mat, Visitor& visitor) {
|
|
134
|
+
Packet P = mat.template packet<Packet>(K);
|
|
135
|
+
visitor.packet(P, K);
|
|
136
|
+
run<K + PacketSize>(mat, visitor);
|
|
152
137
|
}
|
|
153
138
|
};
|
|
154
139
|
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
void operator() (const Scalar& value, Index i, Index j)
|
|
166
|
-
{
|
|
167
|
-
if(value < this->res)
|
|
140
|
+
// dynamic scalar outer-inner traversal
|
|
141
|
+
template <typename Visitor, typename Derived, bool ShortCircuitEvaluation>
|
|
142
|
+
struct visitor_impl<Visitor, Derived, Dynamic, /*Vectorize=*/false, /*LinearAccess=*/false, ShortCircuitEvaluation> {
|
|
143
|
+
using short_circuit = short_circuit_eval_impl<Visitor, ShortCircuitEvaluation>;
|
|
144
|
+
static constexpr bool RowMajor = Derived::IsRowMajor;
|
|
145
|
+
|
|
146
|
+
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void run(const Derived& mat, Visitor& visitor) {
|
|
147
|
+
const Index innerSize = RowMajor ? mat.cols() : mat.rows();
|
|
148
|
+
const Index outerSize = RowMajor ? mat.rows() : mat.cols();
|
|
149
|
+
if (innerSize == 0 || outerSize == 0) return;
|
|
168
150
|
{
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
151
|
+
visitor.init(mat.coeff(0, 0), 0, 0);
|
|
152
|
+
if (short_circuit::run(visitor)) return;
|
|
153
|
+
for (Index i = 1; i < innerSize; ++i) {
|
|
154
|
+
Index r = RowMajor ? 0 : i;
|
|
155
|
+
Index c = RowMajor ? i : 0;
|
|
156
|
+
visitor(mat.coeff(r, c), r, c);
|
|
157
|
+
if EIGEN_PREDICT_FALSE (short_circuit::run(visitor)) return;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
for (Index j = 1; j < outerSize; j++) {
|
|
161
|
+
for (Index i = 0; i < innerSize; ++i) {
|
|
162
|
+
Index r = RowMajor ? j : i;
|
|
163
|
+
Index c = RowMajor ? i : j;
|
|
164
|
+
visitor(mat.coeff(r, c), r, c);
|
|
165
|
+
if EIGEN_PREDICT_FALSE (short_circuit::run(visitor)) return;
|
|
166
|
+
}
|
|
172
167
|
}
|
|
173
168
|
}
|
|
174
169
|
};
|
|
175
170
|
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
{
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
171
|
+
// dynamic vectorized outer-inner traversal
|
|
172
|
+
template <typename Visitor, typename Derived, bool ShortCircuitEvaluation>
|
|
173
|
+
struct visitor_impl<Visitor, Derived, Dynamic, /*Vectorize=*/true, /*LinearAccess=*/false, ShortCircuitEvaluation> {
|
|
174
|
+
using Scalar = typename Derived::Scalar;
|
|
175
|
+
using Packet = typename packet_traits<Scalar>::type;
|
|
176
|
+
static constexpr int PacketSize = packet_traits<Scalar>::size;
|
|
177
|
+
using short_circuit = short_circuit_eval_impl<Visitor, ShortCircuitEvaluation>;
|
|
178
|
+
static constexpr bool RowMajor = Derived::IsRowMajor;
|
|
179
|
+
|
|
180
|
+
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void run(const Derived& mat, Visitor& visitor) {
|
|
181
|
+
const Index innerSize = RowMajor ? mat.cols() : mat.rows();
|
|
182
|
+
const Index outerSize = RowMajor ? mat.rows() : mat.cols();
|
|
183
|
+
if (innerSize == 0 || outerSize == 0) return;
|
|
184
184
|
{
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
185
|
+
Index i = 0;
|
|
186
|
+
if (innerSize < PacketSize) {
|
|
187
|
+
visitor.init(mat.coeff(0, 0), 0, 0);
|
|
188
|
+
i = 1;
|
|
189
|
+
} else {
|
|
190
|
+
Packet p = mat.template packet<Packet>(0, 0);
|
|
191
|
+
visitor.initpacket(p, 0, 0);
|
|
192
|
+
i = PacketSize;
|
|
193
|
+
}
|
|
194
|
+
if EIGEN_PREDICT_FALSE (short_circuit::run(visitor)) return;
|
|
195
|
+
for (; i + PacketSize - 1 < innerSize; i += PacketSize) {
|
|
196
|
+
Index r = RowMajor ? 0 : i;
|
|
197
|
+
Index c = RowMajor ? i : 0;
|
|
198
|
+
Packet p = mat.template packet<Packet>(r, c);
|
|
199
|
+
visitor.packet(p, r, c);
|
|
200
|
+
if EIGEN_PREDICT_FALSE (short_circuit::run(visitor)) return;
|
|
201
|
+
}
|
|
202
|
+
for (; i < innerSize; ++i) {
|
|
203
|
+
Index r = RowMajor ? 0 : i;
|
|
204
|
+
Index c = RowMajor ? i : 0;
|
|
205
|
+
visitor(mat.coeff(r, c), r, c);
|
|
206
|
+
if EIGEN_PREDICT_FALSE (short_circuit::run(visitor)) return;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
for (Index j = 1; j < outerSize; j++) {
|
|
210
|
+
Index i = 0;
|
|
211
|
+
for (; i + PacketSize - 1 < innerSize; i += PacketSize) {
|
|
212
|
+
Index r = RowMajor ? j : i;
|
|
213
|
+
Index c = RowMajor ? i : j;
|
|
214
|
+
Packet p = mat.template packet<Packet>(r, c);
|
|
215
|
+
visitor.packet(p, r, c);
|
|
216
|
+
if EIGEN_PREDICT_FALSE (short_circuit::run(visitor)) return;
|
|
217
|
+
}
|
|
218
|
+
for (; i < innerSize; ++i) {
|
|
219
|
+
Index r = RowMajor ? j : i;
|
|
220
|
+
Index c = RowMajor ? i : j;
|
|
221
|
+
visitor(mat.coeff(r, c), r, c);
|
|
222
|
+
if EIGEN_PREDICT_FALSE (short_circuit::run(visitor)) return;
|
|
223
|
+
}
|
|
188
224
|
}
|
|
189
225
|
}
|
|
190
226
|
};
|
|
191
227
|
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
{
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
void
|
|
198
|
-
|
|
199
|
-
if(
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
228
|
+
// dynamic scalar linear traversal
|
|
229
|
+
template <typename Visitor, typename Derived, bool ShortCircuitEvaluation>
|
|
230
|
+
struct visitor_impl<Visitor, Derived, Dynamic, /*Vectorize=*/false, /*LinearAccess=*/true, ShortCircuitEvaluation> {
|
|
231
|
+
using short_circuit = short_circuit_eval_impl<Visitor, ShortCircuitEvaluation>;
|
|
232
|
+
|
|
233
|
+
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void run(const Derived& mat, Visitor& visitor) {
|
|
234
|
+
const Index size = mat.size();
|
|
235
|
+
if (size == 0) return;
|
|
236
|
+
visitor.init(mat.coeff(0), 0);
|
|
237
|
+
if EIGEN_PREDICT_FALSE (short_circuit::run(visitor)) return;
|
|
238
|
+
for (Index k = 1; k < size; k++) {
|
|
239
|
+
visitor(mat.coeff(k), k);
|
|
240
|
+
if EIGEN_PREDICT_FALSE (short_circuit::run(visitor)) return;
|
|
204
241
|
}
|
|
205
242
|
}
|
|
206
243
|
};
|
|
207
244
|
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
245
|
+
// dynamic vectorized linear traversal
|
|
246
|
+
template <typename Visitor, typename Derived, bool ShortCircuitEvaluation>
|
|
247
|
+
struct visitor_impl<Visitor, Derived, Dynamic, /*Vectorize=*/true, /*LinearAccess=*/true, ShortCircuitEvaluation> {
|
|
248
|
+
using Scalar = typename Derived::Scalar;
|
|
249
|
+
using Packet = typename packet_traits<Scalar>::type;
|
|
250
|
+
static constexpr int PacketSize = packet_traits<Scalar>::size;
|
|
251
|
+
using short_circuit = short_circuit_eval_impl<Visitor, ShortCircuitEvaluation>;
|
|
252
|
+
|
|
253
|
+
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void run(const Derived& mat, Visitor& visitor) {
|
|
254
|
+
const Index size = mat.size();
|
|
255
|
+
if (size == 0) return;
|
|
256
|
+
Index k = 0;
|
|
257
|
+
if (size < PacketSize) {
|
|
258
|
+
visitor.init(mat.coeff(0), 0);
|
|
259
|
+
k = 1;
|
|
260
|
+
} else {
|
|
261
|
+
Packet p = mat.template packet<Packet>(k);
|
|
262
|
+
visitor.initpacket(p, k);
|
|
263
|
+
k = PacketSize;
|
|
264
|
+
}
|
|
265
|
+
if EIGEN_PREDICT_FALSE (short_circuit::run(visitor)) return;
|
|
266
|
+
for (; k + PacketSize - 1 < size; k += PacketSize) {
|
|
267
|
+
Packet p = mat.template packet<Packet>(k);
|
|
268
|
+
visitor.packet(p, k);
|
|
269
|
+
if EIGEN_PREDICT_FALSE (short_circuit::run(visitor)) return;
|
|
270
|
+
}
|
|
271
|
+
for (; k < size; k++) {
|
|
272
|
+
visitor(mat.coeff(k), k);
|
|
273
|
+
if EIGEN_PREDICT_FALSE (short_circuit::run(visitor)) return;
|
|
274
|
+
}
|
|
275
|
+
}
|
|
213
276
|
};
|
|
214
277
|
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
278
|
+
// evaluator adaptor
|
|
279
|
+
template <typename XprType>
|
|
280
|
+
class visitor_evaluator {
|
|
281
|
+
public:
|
|
282
|
+
typedef evaluator<XprType> Evaluator;
|
|
283
|
+
typedef typename XprType::Scalar Scalar;
|
|
284
|
+
using Packet = typename packet_traits<Scalar>::type;
|
|
285
|
+
typedef std::remove_const_t<typename XprType::CoeffReturnType> CoeffReturnType;
|
|
286
|
+
|
|
287
|
+
static constexpr bool PacketAccess = static_cast<bool>(Evaluator::Flags & PacketAccessBit);
|
|
288
|
+
static constexpr bool LinearAccess = static_cast<bool>(Evaluator::Flags & LinearAccessBit);
|
|
289
|
+
static constexpr bool IsRowMajor = static_cast<bool>(XprType::IsRowMajor);
|
|
290
|
+
static constexpr int RowsAtCompileTime = XprType::RowsAtCompileTime;
|
|
291
|
+
static constexpr int ColsAtCompileTime = XprType::ColsAtCompileTime;
|
|
292
|
+
static constexpr int XprAlignment = Evaluator::Alignment;
|
|
293
|
+
static constexpr int CoeffReadCost = Evaluator::CoeffReadCost;
|
|
294
|
+
|
|
295
|
+
EIGEN_DEVICE_FUNC explicit visitor_evaluator(const XprType& xpr) : m_evaluator(xpr), m_xpr(xpr) {}
|
|
296
|
+
|
|
297
|
+
EIGEN_DEVICE_FUNC constexpr Index rows() const noexcept { return m_xpr.rows(); }
|
|
298
|
+
EIGEN_DEVICE_FUNC constexpr Index cols() const noexcept { return m_xpr.cols(); }
|
|
299
|
+
EIGEN_DEVICE_FUNC constexpr Index size() const noexcept { return m_xpr.size(); }
|
|
300
|
+
// outer-inner access
|
|
301
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE CoeffReturnType coeff(Index row, Index col) const {
|
|
302
|
+
return m_evaluator.coeff(row, col);
|
|
303
|
+
}
|
|
304
|
+
template <typename Packet, int Alignment = Unaligned>
|
|
305
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet packet(Index row, Index col) const {
|
|
306
|
+
return m_evaluator.template packet<Alignment, Packet>(row, col);
|
|
233
307
|
}
|
|
308
|
+
// linear access
|
|
309
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE CoeffReturnType coeff(Index index) const { return m_evaluator.coeff(index); }
|
|
310
|
+
template <typename Packet, int Alignment = XprAlignment>
|
|
311
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet packet(Index index) const {
|
|
312
|
+
return m_evaluator.template packet<Alignment, Packet>(index);
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
protected:
|
|
316
|
+
Evaluator m_evaluator;
|
|
317
|
+
const XprType& m_xpr;
|
|
234
318
|
};
|
|
235
319
|
|
|
236
|
-
template <typename Derived>
|
|
237
|
-
struct
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
320
|
+
template <typename Derived, typename Visitor, bool ShortCircuitEvaulation>
|
|
321
|
+
struct visit_impl {
|
|
322
|
+
using Evaluator = visitor_evaluator<Derived>;
|
|
323
|
+
using Scalar = typename DenseBase<Derived>::Scalar;
|
|
324
|
+
|
|
325
|
+
static constexpr bool IsRowMajor = DenseBase<Derived>::IsRowMajor;
|
|
326
|
+
static constexpr int SizeAtCompileTime = DenseBase<Derived>::SizeAtCompileTime;
|
|
327
|
+
static constexpr int RowsAtCompileTime = DenseBase<Derived>::RowsAtCompileTime;
|
|
328
|
+
static constexpr int ColsAtCompileTime = DenseBase<Derived>::ColsAtCompileTime;
|
|
329
|
+
static constexpr int InnerSizeAtCompileTime = IsRowMajor ? ColsAtCompileTime : RowsAtCompileTime;
|
|
330
|
+
static constexpr int OuterSizeAtCompileTime = IsRowMajor ? RowsAtCompileTime : ColsAtCompileTime;
|
|
331
|
+
|
|
332
|
+
static constexpr bool LinearAccess =
|
|
333
|
+
Evaluator::LinearAccess && static_cast<bool>(functor_traits<Visitor>::LinearAccess);
|
|
334
|
+
static constexpr bool Vectorize = Evaluator::PacketAccess && static_cast<bool>(functor_traits<Visitor>::PacketAccess);
|
|
335
|
+
|
|
336
|
+
static constexpr int PacketSize = packet_traits<Scalar>::size;
|
|
337
|
+
static constexpr int VectorOps =
|
|
338
|
+
Vectorize ? (LinearAccess ? (SizeAtCompileTime / PacketSize)
|
|
339
|
+
: (OuterSizeAtCompileTime * (InnerSizeAtCompileTime / PacketSize)))
|
|
340
|
+
: 0;
|
|
341
|
+
static constexpr int ScalarOps = SizeAtCompileTime - (VectorOps * PacketSize);
|
|
342
|
+
// treat vector op and scalar op as same cost for unroll logic
|
|
343
|
+
static constexpr int TotalOps = VectorOps + ScalarOps;
|
|
344
|
+
|
|
345
|
+
static constexpr int UnrollCost = int(Evaluator::CoeffReadCost) + int(functor_traits<Visitor>::Cost);
|
|
346
|
+
static constexpr bool Unroll = (SizeAtCompileTime != Dynamic) && ((TotalOps * UnrollCost) <= EIGEN_UNROLLING_LIMIT);
|
|
347
|
+
static constexpr int UnrollCount = Unroll ? int(SizeAtCompileTime) : Dynamic;
|
|
348
|
+
|
|
349
|
+
using impl = visitor_impl<Visitor, Evaluator, UnrollCount, Vectorize, LinearAccess, ShortCircuitEvaulation>;
|
|
350
|
+
|
|
351
|
+
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void run(const DenseBase<Derived>& mat, Visitor& visitor) {
|
|
352
|
+
Evaluator evaluator(mat.derived());
|
|
353
|
+
impl::run(evaluator, visitor);
|
|
249
354
|
}
|
|
250
355
|
};
|
|
251
356
|
|
|
357
|
+
} // end namespace internal
|
|
358
|
+
|
|
359
|
+
/** Applies the visitor \a visitor to the whole coefficients of the matrix or vector.
|
|
360
|
+
*
|
|
361
|
+
* The template parameter \a Visitor is the type of the visitor and provides the following interface:
|
|
362
|
+
* \code
|
|
363
|
+
* struct MyVisitor {
|
|
364
|
+
* // called for the first coefficient
|
|
365
|
+
* void init(const Scalar& value, Index i, Index j);
|
|
366
|
+
* // called for all other coefficients
|
|
367
|
+
* void operator() (const Scalar& value, Index i, Index j);
|
|
368
|
+
* };
|
|
369
|
+
* \endcode
|
|
370
|
+
*
|
|
371
|
+
* \note compared to one or two \em for \em loops, visitors offer automatic
|
|
372
|
+
* unrolling for small fixed size matrix.
|
|
373
|
+
*
|
|
374
|
+
* \note if the matrix is empty, then the visitor is left unchanged.
|
|
375
|
+
*
|
|
376
|
+
* \sa minCoeff(Index*,Index*), maxCoeff(Index*,Index*), DenseBase::redux()
|
|
377
|
+
*/
|
|
252
378
|
template <typename Derived>
|
|
253
|
-
|
|
254
|
-
{
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
379
|
+
template <typename Visitor>
|
|
380
|
+
EIGEN_DEVICE_FUNC void DenseBase<Derived>::visit(Visitor& visitor) const {
|
|
381
|
+
using impl = internal::visit_impl<Derived, Visitor, /*ShortCircuitEvaulation*/ false>;
|
|
382
|
+
impl::run(derived(), visitor);
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
namespace internal {
|
|
386
|
+
|
|
387
|
+
template <typename Scalar>
|
|
388
|
+
struct all_visitor {
|
|
389
|
+
using result_type = bool;
|
|
390
|
+
using Packet = typename packet_traits<Scalar>::type;
|
|
391
|
+
EIGEN_DEVICE_FUNC inline void init(const Scalar& value, Index, Index) { res = (value != Scalar(0)); }
|
|
392
|
+
EIGEN_DEVICE_FUNC inline void init(const Scalar& value, Index) { res = (value != Scalar(0)); }
|
|
393
|
+
EIGEN_DEVICE_FUNC inline bool all_predux(const Packet& p) const { return !predux_any(pcmp_eq(p, pzero(p))); }
|
|
394
|
+
EIGEN_DEVICE_FUNC inline void initpacket(const Packet& p, Index, Index) { res = all_predux(p); }
|
|
395
|
+
EIGEN_DEVICE_FUNC inline void initpacket(const Packet& p, Index) { res = all_predux(p); }
|
|
396
|
+
EIGEN_DEVICE_FUNC inline void operator()(const Scalar& value, Index, Index) { res = res && (value != Scalar(0)); }
|
|
397
|
+
EIGEN_DEVICE_FUNC inline void operator()(const Scalar& value, Index) { res = res && (value != Scalar(0)); }
|
|
398
|
+
EIGEN_DEVICE_FUNC inline void packet(const Packet& p, Index, Index) { res = res && all_predux(p); }
|
|
399
|
+
EIGEN_DEVICE_FUNC inline void packet(const Packet& p, Index) { res = res && all_predux(p); }
|
|
400
|
+
EIGEN_DEVICE_FUNC inline bool done() const { return !res; }
|
|
401
|
+
bool res = true;
|
|
402
|
+
};
|
|
403
|
+
template <typename Scalar>
|
|
404
|
+
struct functor_traits<all_visitor<Scalar>> {
|
|
405
|
+
enum { Cost = NumTraits<Scalar>::ReadCost, LinearAccess = true, PacketAccess = packet_traits<Scalar>::HasCmp };
|
|
406
|
+
};
|
|
407
|
+
|
|
408
|
+
template <typename Scalar>
|
|
409
|
+
struct any_visitor {
|
|
410
|
+
using result_type = bool;
|
|
411
|
+
using Packet = typename packet_traits<Scalar>::type;
|
|
412
|
+
EIGEN_DEVICE_FUNC inline void init(const Scalar& value, Index, Index) { res = (value != Scalar(0)); }
|
|
413
|
+
EIGEN_DEVICE_FUNC inline void init(const Scalar& value, Index) { res = (value != Scalar(0)); }
|
|
414
|
+
EIGEN_DEVICE_FUNC inline bool any_predux(const Packet& p) const {
|
|
415
|
+
return predux_any(pandnot(ptrue(p), pcmp_eq(p, pzero(p))));
|
|
416
|
+
}
|
|
417
|
+
EIGEN_DEVICE_FUNC inline void initpacket(const Packet& p, Index, Index) { res = any_predux(p); }
|
|
418
|
+
EIGEN_DEVICE_FUNC inline void initpacket(const Packet& p, Index) { res = any_predux(p); }
|
|
419
|
+
EIGEN_DEVICE_FUNC inline void operator()(const Scalar& value, Index, Index) { res = res || (value != Scalar(0)); }
|
|
420
|
+
EIGEN_DEVICE_FUNC inline void operator()(const Scalar& value, Index) { res = res || (value != Scalar(0)); }
|
|
421
|
+
EIGEN_DEVICE_FUNC inline void packet(const Packet& p, Index, Index) { res = res || any_predux(p); }
|
|
422
|
+
EIGEN_DEVICE_FUNC inline void packet(const Packet& p, Index) { res = res || any_predux(p); }
|
|
423
|
+
EIGEN_DEVICE_FUNC inline bool done() const { return res; }
|
|
424
|
+
bool res = false;
|
|
425
|
+
};
|
|
426
|
+
template <typename Scalar>
|
|
427
|
+
struct functor_traits<any_visitor<Scalar>> {
|
|
428
|
+
enum { Cost = NumTraits<Scalar>::ReadCost, LinearAccess = true, PacketAccess = packet_traits<Scalar>::HasCmp };
|
|
429
|
+
};
|
|
430
|
+
|
|
431
|
+
template <typename Scalar>
|
|
432
|
+
struct count_visitor {
|
|
433
|
+
using result_type = Index;
|
|
434
|
+
using Packet = typename packet_traits<Scalar>::type;
|
|
435
|
+
EIGEN_DEVICE_FUNC inline void init(const Scalar& value, Index, Index) { res = value != Scalar(0) ? 1 : 0; }
|
|
436
|
+
EIGEN_DEVICE_FUNC inline void init(const Scalar& value, Index) { res = value != Scalar(0) ? 1 : 0; }
|
|
437
|
+
EIGEN_DEVICE_FUNC inline Index count_redux(const Packet& p) const {
|
|
438
|
+
const Packet cst_one = pset1<Packet>(Scalar(1));
|
|
439
|
+
Packet true_vals = pandnot(cst_one, pcmp_eq(p, pzero(p)));
|
|
440
|
+
Scalar num_true = predux(true_vals);
|
|
441
|
+
return static_cast<Index>(num_true);
|
|
265
442
|
}
|
|
443
|
+
EIGEN_DEVICE_FUNC inline void initpacket(const Packet& p, Index, Index) { res = count_redux(p); }
|
|
444
|
+
EIGEN_DEVICE_FUNC inline void initpacket(const Packet& p, Index) { res = count_redux(p); }
|
|
445
|
+
EIGEN_DEVICE_FUNC inline void operator()(const Scalar& value, Index, Index) {
|
|
446
|
+
if (value != Scalar(0)) res++;
|
|
447
|
+
}
|
|
448
|
+
EIGEN_DEVICE_FUNC inline void operator()(const Scalar& value, Index) {
|
|
449
|
+
if (value != Scalar(0)) res++;
|
|
450
|
+
}
|
|
451
|
+
EIGEN_DEVICE_FUNC inline void packet(const Packet& p, Index, Index) { res += count_redux(p); }
|
|
452
|
+
EIGEN_DEVICE_FUNC inline void packet(const Packet& p, Index) { res += count_redux(p); }
|
|
453
|
+
Index res = 0;
|
|
266
454
|
};
|
|
267
455
|
|
|
268
|
-
template<typename Scalar
|
|
269
|
-
struct functor_traits<
|
|
456
|
+
template <typename Scalar>
|
|
457
|
+
struct functor_traits<count_visitor<Scalar>> {
|
|
270
458
|
enum {
|
|
271
|
-
Cost = NumTraits<Scalar>::AddCost
|
|
459
|
+
Cost = NumTraits<Scalar>::AddCost,
|
|
460
|
+
LinearAccess = true,
|
|
461
|
+
// predux is problematic for bool
|
|
462
|
+
PacketAccess = packet_traits<Scalar>::HasCmp && packet_traits<Scalar>::HasAdd && !is_same<Scalar, bool>::value
|
|
272
463
|
};
|
|
273
464
|
};
|
|
274
465
|
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
466
|
+
template <typename Derived, bool AlwaysTrue = NumTraits<typename traits<Derived>::Scalar>::IsInteger>
|
|
467
|
+
struct all_finite_impl {
|
|
468
|
+
static EIGEN_DEVICE_FUNC inline bool run(const Derived& /*derived*/) { return true; }
|
|
469
|
+
};
|
|
470
|
+
#if !defined(__FINITE_MATH_ONLY__) || !(__FINITE_MATH_ONLY__)
|
|
471
|
+
template <typename Derived>
|
|
472
|
+
struct all_finite_impl<Derived, false> {
|
|
473
|
+
static EIGEN_DEVICE_FUNC inline bool run(const Derived& derived) { return derived.array().isFiniteTyped().all(); }
|
|
474
|
+
};
|
|
475
|
+
#endif
|
|
476
|
+
|
|
477
|
+
} // end namespace internal
|
|
478
|
+
|
|
479
|
+
/** \returns true if all coefficients are true
|
|
480
|
+
*
|
|
481
|
+
* Example: \include MatrixBase_all.cpp
|
|
482
|
+
* Output: \verbinclude MatrixBase_all.out
|
|
483
|
+
*
|
|
484
|
+
* \sa any(), Cwise::operator<()
|
|
485
|
+
*/
|
|
486
|
+
template <typename Derived>
|
|
487
|
+
EIGEN_DEVICE_FUNC inline bool DenseBase<Derived>::all() const {
|
|
488
|
+
using Visitor = internal::all_visitor<Scalar>;
|
|
489
|
+
using impl = internal::visit_impl<Derived, Visitor, /*ShortCircuitEvaulation*/ true>;
|
|
490
|
+
Visitor visitor;
|
|
491
|
+
impl::run(derived(), visitor);
|
|
492
|
+
return visitor.res;
|
|
301
493
|
}
|
|
302
494
|
|
|
303
|
-
/** \returns
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
template<int NaNPropagation, typename IndexType>
|
|
315
|
-
EIGEN_DEVICE_FUNC
|
|
316
|
-
typename internal::traits<Derived>::Scalar
|
|
317
|
-
DenseBase<Derived>::minCoeff(IndexType* index) const
|
|
318
|
-
{
|
|
319
|
-
eigen_assert(this->rows()>0 && this->cols()>0 && "you are using an empty matrix");
|
|
320
|
-
|
|
321
|
-
EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived)
|
|
322
|
-
internal::min_coeff_visitor<Derived, NaNPropagation> minVisitor;
|
|
323
|
-
this->visit(minVisitor);
|
|
324
|
-
*index = IndexType((RowsAtCompileTime==1) ? minVisitor.col : minVisitor.row);
|
|
325
|
-
return minVisitor.res;
|
|
495
|
+
/** \returns true if at least one coefficient is true
|
|
496
|
+
*
|
|
497
|
+
* \sa all()
|
|
498
|
+
*/
|
|
499
|
+
template <typename Derived>
|
|
500
|
+
EIGEN_DEVICE_FUNC inline bool DenseBase<Derived>::any() const {
|
|
501
|
+
using Visitor = internal::any_visitor<Scalar>;
|
|
502
|
+
using impl = internal::visit_impl<Derived, Visitor, /*ShortCircuitEvaulation*/ true>;
|
|
503
|
+
Visitor visitor;
|
|
504
|
+
impl::run(derived(), visitor);
|
|
505
|
+
return visitor.res;
|
|
326
506
|
}
|
|
327
507
|
|
|
328
|
-
/** \
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
template<typename Derived>
|
|
340
|
-
template<int NaNPropagation, typename IndexType>
|
|
341
|
-
EIGEN_DEVICE_FUNC
|
|
342
|
-
typename internal::traits<Derived>::Scalar
|
|
343
|
-
DenseBase<Derived>::maxCoeff(IndexType* rowPtr, IndexType* colPtr) const
|
|
344
|
-
{
|
|
345
|
-
eigen_assert(this->rows()>0 && this->cols()>0 && "you are using an empty matrix");
|
|
346
|
-
|
|
347
|
-
internal::max_coeff_visitor<Derived, NaNPropagation> maxVisitor;
|
|
348
|
-
this->visit(maxVisitor);
|
|
349
|
-
*rowPtr = maxVisitor.row;
|
|
350
|
-
if (colPtr) *colPtr = maxVisitor.col;
|
|
351
|
-
return maxVisitor.res;
|
|
508
|
+
/** \returns the number of coefficients which evaluate to true
|
|
509
|
+
*
|
|
510
|
+
* \sa all(), any()
|
|
511
|
+
*/
|
|
512
|
+
template <typename Derived>
|
|
513
|
+
EIGEN_DEVICE_FUNC Index DenseBase<Derived>::count() const {
|
|
514
|
+
using Visitor = internal::count_visitor<Scalar>;
|
|
515
|
+
using impl = internal::visit_impl<Derived, Visitor, /*ShortCircuitEvaulation*/ false>;
|
|
516
|
+
Visitor visitor;
|
|
517
|
+
impl::run(derived(), visitor);
|
|
518
|
+
return visitor.res;
|
|
352
519
|
}
|
|
353
520
|
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
EIGEN_DEVICE_FUNC
|
|
367
|
-
typename internal::traits<Derived>::Scalar
|
|
368
|
-
DenseBase<Derived>::maxCoeff(IndexType* index) const
|
|
369
|
-
{
|
|
370
|
-
eigen_assert(this->rows()>0 && this->cols()>0 && "you are using an empty matrix");
|
|
371
|
-
|
|
372
|
-
EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived)
|
|
373
|
-
internal::max_coeff_visitor<Derived, NaNPropagation> maxVisitor;
|
|
374
|
-
this->visit(maxVisitor);
|
|
375
|
-
*index = (RowsAtCompileTime==1) ? maxVisitor.col : maxVisitor.row;
|
|
376
|
-
return maxVisitor.res;
|
|
521
|
+
template <typename Derived>
|
|
522
|
+
EIGEN_DEVICE_FUNC inline bool DenseBase<Derived>::hasNaN() const {
|
|
523
|
+
return derived().cwiseTypedNotEqual(derived()).any();
|
|
524
|
+
}
|
|
525
|
+
|
|
526
|
+
/** \returns true if \c *this contains only finite numbers, i.e., no NaN and no +/-INF values.
|
|
527
|
+
*
|
|
528
|
+
* \sa hasNaN()
|
|
529
|
+
*/
|
|
530
|
+
template <typename Derived>
|
|
531
|
+
EIGEN_DEVICE_FUNC inline bool DenseBase<Derived>::allFinite() const {
|
|
532
|
+
return internal::all_finite_impl<Derived>::run(derived());
|
|
377
533
|
}
|
|
378
534
|
|
|
379
|
-
}
|
|
535
|
+
} // end namespace Eigen
|
|
380
536
|
|
|
381
|
-
#endif
|
|
537
|
+
#endif // EIGEN_VISITOR_H
|