@smake/eigen 1.0.2 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/eigen/Eigen/AccelerateSupport +52 -0
- package/eigen/Eigen/Cholesky +18 -21
- package/eigen/Eigen/CholmodSupport +28 -28
- package/eigen/Eigen/Core +235 -326
- package/eigen/Eigen/Eigenvalues +16 -14
- package/eigen/Eigen/Geometry +21 -24
- package/eigen/Eigen/Householder +9 -8
- package/eigen/Eigen/IterativeLinearSolvers +8 -4
- package/eigen/Eigen/Jacobi +14 -14
- package/eigen/Eigen/KLUSupport +43 -0
- package/eigen/Eigen/LU +16 -20
- package/eigen/Eigen/MetisSupport +12 -12
- package/eigen/Eigen/OrderingMethods +54 -54
- package/eigen/Eigen/PaStiXSupport +23 -20
- package/eigen/Eigen/PardisoSupport +17 -14
- package/eigen/Eigen/QR +18 -21
- package/eigen/Eigen/QtAlignedMalloc +5 -13
- package/eigen/Eigen/SPQRSupport +21 -14
- package/eigen/Eigen/SVD +23 -18
- package/eigen/Eigen/Sparse +1 -4
- package/eigen/Eigen/SparseCholesky +18 -23
- package/eigen/Eigen/SparseCore +18 -17
- package/eigen/Eigen/SparseLU +12 -8
- 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 +377 -401
- package/eigen/Eigen/src/Cholesky/LLT.h +332 -360
- package/eigen/Eigen/src/Cholesky/LLT_LAPACKE.h +81 -56
- package/eigen/Eigen/src/CholmodSupport/CholmodSupport.h +620 -521
- package/eigen/Eigen/src/CholmodSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Core/ArithmeticSequence.h +239 -0
- package/eigen/Eigen/src/Core/Array.h +341 -294
- package/eigen/Eigen/src/Core/ArrayBase.h +190 -203
- package/eigen/Eigen/src/Core/ArrayWrapper.h +127 -171
- package/eigen/Eigen/src/Core/Assign.h +30 -40
- package/eigen/Eigen/src/Core/AssignEvaluator.h +711 -589
- package/eigen/Eigen/src/Core/Assign_MKL.h +130 -125
- package/eigen/Eigen/src/Core/BandMatrix.h +268 -283
- package/eigen/Eigen/src/Core/Block.h +375 -398
- package/eigen/Eigen/src/Core/CommaInitializer.h +86 -97
- package/eigen/Eigen/src/Core/ConditionEstimator.h +51 -53
- package/eigen/Eigen/src/Core/CoreEvaluators.h +1356 -1026
- package/eigen/Eigen/src/Core/CoreIterators.h +73 -59
- package/eigen/Eigen/src/Core/CwiseBinaryOp.h +114 -132
- package/eigen/Eigen/src/Core/CwiseNullaryOp.h +726 -617
- package/eigen/Eigen/src/Core/CwiseTernaryOp.h +77 -103
- package/eigen/Eigen/src/Core/CwiseUnaryOp.h +56 -68
- package/eigen/Eigen/src/Core/CwiseUnaryView.h +132 -95
- package/eigen/Eigen/src/Core/DenseBase.h +632 -571
- package/eigen/Eigen/src/Core/DenseCoeffsBase.h +511 -624
- package/eigen/Eigen/src/Core/DenseStorage.h +512 -509
- package/eigen/Eigen/src/Core/DeviceWrapper.h +153 -0
- package/eigen/Eigen/src/Core/Diagonal.h +169 -210
- package/eigen/Eigen/src/Core/DiagonalMatrix.h +351 -274
- package/eigen/Eigen/src/Core/DiagonalProduct.h +12 -10
- package/eigen/Eigen/src/Core/Dot.h +172 -222
- package/eigen/Eigen/src/Core/EigenBase.h +75 -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 -109
- package/eigen/Eigen/src/Core/Fuzzy.h +82 -105
- package/eigen/Eigen/src/Core/GeneralProduct.h +327 -263
- package/eigen/Eigen/src/Core/GenericPacketMath.h +1472 -360
- package/eigen/Eigen/src/Core/GlobalFunctions.h +194 -151
- package/eigen/Eigen/src/Core/IO.h +147 -139
- package/eigen/Eigen/src/Core/IndexedView.h +321 -0
- 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 +56 -66
- package/eigen/Eigen/src/Core/Map.h +124 -142
- package/eigen/Eigen/src/Core/MapBase.h +256 -281
- package/eigen/Eigen/src/Core/MathFunctions.h +1620 -938
- package/eigen/Eigen/src/Core/MathFunctionsImpl.h +233 -71
- package/eigen/Eigen/src/Core/Matrix.h +491 -416
- package/eigen/Eigen/src/Core/MatrixBase.h +468 -453
- package/eigen/Eigen/src/Core/NestByValue.h +66 -85
- package/eigen/Eigen/src/Core/NoAlias.h +79 -85
- package/eigen/Eigen/src/Core/NumTraits.h +235 -148
- package/eigen/Eigen/src/Core/PartialReduxEvaluator.h +253 -0
- package/eigen/Eigen/src/Core/PermutationMatrix.h +461 -511
- package/eigen/Eigen/src/Core/PlainObjectBase.h +871 -894
- package/eigen/Eigen/src/Core/Product.h +260 -139
- package/eigen/Eigen/src/Core/ProductEvaluators.h +863 -714
- package/eigen/Eigen/src/Core/Random.h +161 -136
- 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 +366 -336
- package/eigen/Eigen/src/Core/Ref.h +308 -209
- package/eigen/Eigen/src/Core/Replicate.h +94 -106
- package/eigen/Eigen/src/Core/Reshaped.h +398 -0
- package/eigen/Eigen/src/Core/ReturnByValue.h +49 -55
- package/eigen/Eigen/src/Core/Reverse.h +136 -145
- package/eigen/Eigen/src/Core/Select.h +70 -140
- package/eigen/Eigen/src/Core/SelfAdjointView.h +262 -285
- 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 +97 -111
- package/eigen/Eigen/src/Core/SolveTriangular.h +131 -129
- package/eigen/Eigen/src/Core/SolverBase.h +138 -101
- package/eigen/Eigen/src/Core/StableNorm.h +156 -160
- package/eigen/Eigen/src/Core/StlIterators.h +619 -0
- package/eigen/Eigen/src/Core/Stride.h +91 -88
- package/eigen/Eigen/src/Core/Swap.h +70 -38
- package/eigen/Eigen/src/Core/Transpose.h +295 -273
- package/eigen/Eigen/src/Core/Transpositions.h +272 -317
- package/eigen/Eigen/src/Core/TriangularMatrix.h +670 -755
- package/eigen/Eigen/src/Core/VectorBlock.h +59 -72
- package/eigen/Eigen/src/Core/VectorwiseOp.h +668 -630
- package/eigen/Eigen/src/Core/Visitor.h +480 -216
- package/eigen/Eigen/src/Core/arch/AVX/Complex.h +407 -293
- package/eigen/Eigen/src/Core/arch/AVX/MathFunctions.h +79 -388
- package/eigen/Eigen/src/Core/arch/AVX/PacketMath.h +2935 -491
- package/eigen/Eigen/src/Core/arch/AVX/Reductions.h +353 -0
- package/eigen/Eigen/src/Core/arch/AVX/TypeCasting.h +279 -22
- package/eigen/Eigen/src/Core/arch/AVX512/Complex.h +472 -0
- package/eigen/Eigen/src/Core/arch/AVX512/GemmKernel.h +1245 -0
- package/eigen/Eigen/src/Core/arch/AVX512/MathFunctions.h +85 -333
- package/eigen/Eigen/src/Core/arch/AVX512/MathFunctionsFP16.h +75 -0
- package/eigen/Eigen/src/Core/arch/AVX512/PacketMath.h +2490 -649
- 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 +277 -0
- package/eigen/Eigen/src/Core/arch/AVX512/TypeCastingFP16.h +130 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/Complex.h +521 -298
- package/eigen/Eigen/src/Core/arch/AltiVec/MathFunctions.h +39 -280
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProduct.h +3686 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h +205 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h +901 -0
- 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 +3391 -723
- package/eigen/Eigen/src/Core/arch/AltiVec/TypeCasting.h +153 -0
- package/eigen/Eigen/src/Core/arch/Default/BFloat16.h +866 -0
- package/eigen/Eigen/src/Core/arch/Default/ConjHelper.h +113 -14
- package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h +2634 -0
- package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h +227 -0
- package/eigen/Eigen/src/Core/arch/Default/Half.h +1091 -0
- package/eigen/Eigen/src/Core/arch/Default/Settings.h +11 -13
- package/eigen/Eigen/src/Core/arch/GPU/Complex.h +244 -0
- package/eigen/Eigen/src/Core/arch/GPU/MathFunctions.h +104 -0
- package/eigen/Eigen/src/Core/arch/GPU/PacketMath.h +1712 -0
- package/eigen/Eigen/src/Core/arch/GPU/Tuple.h +268 -0
- package/eigen/Eigen/src/Core/arch/GPU/TypeCasting.h +77 -0
- package/eigen/Eigen/src/Core/arch/HIP/hcc/math_constants.h +23 -0
- 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 +620 -0
- package/eigen/Eigen/src/Core/arch/MSA/MathFunctions.h +379 -0
- package/eigen/Eigen/src/Core/arch/MSA/PacketMath.h +1237 -0
- package/eigen/Eigen/src/Core/arch/NEON/Complex.h +531 -289
- package/eigen/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h +243 -0
- package/eigen/Eigen/src/Core/arch/NEON/MathFunctions.h +50 -73
- package/eigen/Eigen/src/Core/arch/NEON/PacketMath.h +5915 -579
- package/eigen/Eigen/src/Core/arch/NEON/TypeCasting.h +1642 -0
- package/eigen/Eigen/src/Core/arch/NEON/UnaryFunctors.h +57 -0
- package/eigen/Eigen/src/Core/arch/SSE/Complex.h +366 -334
- package/eigen/Eigen/src/Core/arch/SSE/MathFunctions.h +40 -514
- package/eigen/Eigen/src/Core/arch/SSE/PacketMath.h +2164 -675
- package/eigen/Eigen/src/Core/arch/SSE/Reductions.h +324 -0
- package/eigen/Eigen/src/Core/arch/SSE/TypeCasting.h +188 -35
- package/eigen/Eigen/src/Core/arch/SVE/MathFunctions.h +48 -0
- package/eigen/Eigen/src/Core/arch/SVE/PacketMath.h +674 -0
- package/eigen/Eigen/src/Core/arch/SVE/TypeCasting.h +52 -0
- package/eigen/Eigen/src/Core/arch/SYCL/InteropHeaders.h +227 -0
- package/eigen/Eigen/src/Core/arch/SYCL/MathFunctions.h +303 -0
- package/eigen/Eigen/src/Core/arch/SYCL/PacketMath.h +576 -0
- package/eigen/Eigen/src/Core/arch/SYCL/TypeCasting.h +83 -0
- package/eigen/Eigen/src/Core/arch/ZVector/Complex.h +434 -261
- package/eigen/Eigen/src/Core/arch/ZVector/MathFunctions.h +160 -53
- package/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h +1073 -605
- package/eigen/Eigen/src/Core/functors/AssignmentFunctors.h +123 -117
- package/eigen/Eigen/src/Core/functors/BinaryFunctors.h +594 -322
- package/eigen/Eigen/src/Core/functors/NullaryFunctors.h +204 -118
- package/eigen/Eigen/src/Core/functors/StlFunctors.h +110 -97
- package/eigen/Eigen/src/Core/functors/TernaryFunctors.h +34 -7
- package/eigen/Eigen/src/Core/functors/UnaryFunctors.h +1158 -530
- package/eigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h +2329 -1333
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix.h +328 -364
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +191 -178
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h +85 -82
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h +154 -73
- package/eigen/Eigen/src/Core/products/GeneralMatrixVector.h +396 -542
- package/eigen/Eigen/src/Core/products/GeneralMatrixVector_BLAS.h +80 -77
- package/eigen/Eigen/src/Core/products/Parallelizer.h +208 -92
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +331 -375
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h +206 -224
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector.h +139 -146
- 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 -46
- 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 -275
- package/eigen/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h +108 -109
- package/eigen/Eigen/src/Core/products/TriangularSolverVector.h +70 -93
- package/eigen/Eigen/src/Core/util/Assert.h +158 -0
- package/eigen/Eigen/src/Core/util/BlasUtil.h +413 -290
- package/eigen/Eigen/src/Core/util/ConfigureVectorization.h +543 -0
- package/eigen/Eigen/src/Core/util/Constants.h +314 -263
- package/eigen/Eigen/src/Core/util/DisableStupidWarnings.h +130 -78
- package/eigen/Eigen/src/Core/util/EmulateArray.h +270 -0
- package/eigen/Eigen/src/Core/util/ForwardDeclarations.h +450 -224
- 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 +487 -0
- package/eigen/Eigen/src/Core/util/IntegralConstant.h +279 -0
- package/eigen/Eigen/src/Core/util/MKL_support.h +39 -30
- package/eigen/Eigen/src/Core/util/Macros.h +939 -646
- package/eigen/Eigen/src/Core/util/MaxSizeVector.h +139 -0
- package/eigen/Eigen/src/Core/util/Memory.h +1042 -650
- package/eigen/Eigen/src/Core/util/Meta.h +618 -426
- 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 +51 -0
- package/eigen/Eigen/src/Core/util/Serializer.h +209 -0
- package/eigen/Eigen/src/Core/util/StaticAssert.h +51 -164
- package/eigen/Eigen/src/Core/util/SymbolicIndex.h +445 -0
- package/eigen/Eigen/src/Core/util/XprHelper.h +793 -538
- 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 +91 -107
- package/eigen/Eigen/src/Eigenvalues/RealQZ.h +539 -606
- package/eigen/Eigen/src/Eigenvalues/RealSchur.h +348 -382
- package/eigen/Eigen/src/Eigenvalues/RealSchur_LAPACKE.h +41 -35
- package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +579 -600
- package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h +47 -44
- package/eigen/Eigen/src/Eigenvalues/Tridiagonalization.h +434 -461
- package/eigen/Eigen/src/Geometry/AlignedBox.h +307 -214
- package/eigen/Eigen/src/Geometry/AngleAxis.h +135 -137
- package/eigen/Eigen/src/Geometry/EulerAngles.h +163 -74
- package/eigen/Eigen/src/Geometry/Homogeneous.h +289 -333
- package/eigen/Eigen/src/Geometry/Hyperplane.h +152 -161
- package/eigen/Eigen/src/Geometry/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Geometry/OrthoMethods.h +168 -145
- package/eigen/Eigen/src/Geometry/ParametrizedLine.h +141 -104
- package/eigen/Eigen/src/Geometry/Quaternion.h +595 -497
- package/eigen/Eigen/src/Geometry/Rotation2D.h +110 -108
- package/eigen/Eigen/src/Geometry/RotationBase.h +148 -145
- package/eigen/Eigen/src/Geometry/Scaling.h +115 -90
- package/eigen/Eigen/src/Geometry/Transform.h +896 -953
- package/eigen/Eigen/src/Geometry/Translation.h +100 -98
- package/eigen/Eigen/src/Geometry/Umeyama.h +79 -84
- package/eigen/Eigen/src/Geometry/arch/Geometry_SIMD.h +154 -0
- package/eigen/Eigen/src/Householder/BlockHouseholder.h +54 -42
- package/eigen/Eigen/src/Householder/Householder.h +104 -122
- package/eigen/Eigen/src/Householder/HouseholderSequence.h +416 -382
- package/eigen/Eigen/src/Householder/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +153 -166
- package/eigen/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +127 -138
- package/eigen/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +95 -124
- package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +269 -267
- package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +246 -259
- package/eigen/Eigen/src/IterativeLinearSolvers/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +218 -217
- package/eigen/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h +80 -103
- package/eigen/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h +59 -63
- package/eigen/Eigen/src/Jacobi/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Jacobi/Jacobi.h +256 -291
- package/eigen/Eigen/src/KLUSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/KLUSupport/KLUSupport.h +339 -0
- package/eigen/Eigen/src/LU/Determinant.h +60 -63
- package/eigen/Eigen/src/LU/FullPivLU.h +561 -626
- package/eigen/Eigen/src/LU/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/LU/InverseImpl.h +213 -275
- package/eigen/Eigen/src/LU/PartialPivLU.h +407 -435
- package/eigen/Eigen/src/LU/PartialPivLU_LAPACKE.h +54 -40
- package/eigen/Eigen/src/LU/arch/InverseSize4.h +353 -0
- 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 +250 -282
- package/eigen/Eigen/src/OrderingMethods/Eigen_Colamd.h +950 -1103
- package/eigen/Eigen/src/OrderingMethods/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/OrderingMethods/Ordering.h +111 -122
- 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 -429
- package/eigen/Eigen/src/QR/ColPivHouseholderQR.h +494 -473
- package/eigen/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h +120 -56
- package/eigen/Eigen/src/QR/CompleteOrthogonalDecomposition.h +223 -137
- package/eigen/Eigen/src/QR/FullPivHouseholderQR.h +517 -460
- package/eigen/Eigen/src/QR/HouseholderQR.h +412 -278
- 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 +263 -261
- package/eigen/Eigen/src/SVD/BDCSVD.h +872 -679
- 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 +585 -543
- package/eigen/Eigen/src/SVD/JacobiSVD_LAPACKE.h +85 -49
- package/eigen/Eigen/src/SVD/SVDBase.h +281 -160
- package/eigen/Eigen/src/SVD/UpperBidiagonalization.h +202 -237
- package/eigen/Eigen/src/SparseCholesky/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky.h +769 -590
- package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +318 -129
- package/eigen/Eigen/src/SparseCore/AmbiVector.h +202 -251
- package/eigen/Eigen/src/SparseCore/CompressedStorage.h +184 -236
- package/eigen/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +140 -184
- package/eigen/Eigen/src/SparseCore/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SparseCore/SparseAssign.h +174 -111
- package/eigen/Eigen/src/SparseCore/SparseBlock.h +408 -477
- package/eigen/Eigen/src/SparseCore/SparseColEtree.h +100 -112
- package/eigen/Eigen/src/SparseCore/SparseCompressedBase.h +531 -280
- package/eigen/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +559 -347
- package/eigen/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +100 -108
- package/eigen/Eigen/src/SparseCore/SparseDenseProduct.h +185 -191
- 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 +1614 -1142
- package/eigen/Eigen/src/SparseCore/SparseMatrixBase.h +403 -357
- package/eigen/Eigen/src/SparseCore/SparsePermutation.h +186 -115
- package/eigen/Eigen/src/SparseCore/SparseProduct.h +100 -91
- 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 +371 -414
- 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 +146 -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 +814 -618
- 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 +273 -255
- 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 +90 -101
- 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 +125 -133
- 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 +451 -490
- package/eigen/Eigen/src/StlSupport/StdDeque.h +28 -105
- 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 -732
- 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 +480 -380
- 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 +9976 -16182
- 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.inc +1370 -0
- package/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.inc +116 -0
- package/eigen/Eigen/src/plugins/CommonCwiseUnaryOps.inc +167 -0
- 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/lib/LibEigen.d.ts +4 -0
- package/lib/LibEigen.js +14 -0
- package/lib/index.d.ts +1 -1
- package/lib/index.js +7 -3
- package/package.json +2 -10
- package/eigen/Eigen/CMakeLists.txt +0 -19
- package/eigen/Eigen/src/Core/BooleanRedux.h +0 -164
- package/eigen/Eigen/src/Core/arch/CUDA/Complex.h +0 -103
- package/eigen/Eigen/src/Core/arch/CUDA/Half.h +0 -675
- package/eigen/Eigen/src/Core/arch/CUDA/MathFunctions.h +0 -91
- package/eigen/Eigen/src/Core/arch/CUDA/PacketMath.h +0 -333
- package/eigen/Eigen/src/Core/arch/CUDA/PacketMathHalf.h +0 -1124
- package/eigen/Eigen/src/Core/arch/CUDA/TypeCasting.h +0 -212
- package/eigen/Eigen/src/Core/util/NonMPL2.h +0 -3
- package/eigen/Eigen/src/Geometry/arch/Geometry_SSE.h +0 -161
- package/eigen/Eigen/src/LU/arch/Inverse_SSE.h +0 -338
- 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 -332
- package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.h +0 -552
- package/eigen/Eigen/src/plugins/BlockMethods.h +0 -1058
- package/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.h +0 -115
- package/eigen/Eigen/src/plugins/CommonCwiseUnaryOps.h +0 -163
- package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.h +0 -152
- package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.h +0 -85
- package/lib/eigen.d.ts +0 -2
- package/lib/eigen.js +0 -15
|
@@ -10,264 +10,528 @@
|
|
|
10
10
|
#ifndef EIGEN_VISITOR_H
|
|
11
11
|
#define EIGEN_VISITOR_H
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
// IWYU pragma: private
|
|
14
|
+
#include "./InternalHeaderCheck.h"
|
|
15
|
+
|
|
16
|
+
namespace Eigen {
|
|
14
17
|
|
|
15
18
|
namespace internal {
|
|
16
19
|
|
|
17
|
-
template<typename Visitor, typename Derived, int UnrollCount
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
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;
|
|
24
|
+
|
|
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; }
|
|
29
|
+
};
|
|
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(); }
|
|
34
|
+
};
|
|
35
|
+
|
|
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);
|
|
51
|
+
}
|
|
52
|
+
|
|
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&) {}
|
|
55
|
+
|
|
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
|
+
}
|
|
24
62
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
{
|
|
28
|
-
|
|
29
|
-
|
|
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
|
+
}
|
|
71
|
+
|
|
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
|
+
}
|
|
79
|
+
|
|
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);
|
|
30
88
|
}
|
|
31
89
|
};
|
|
32
90
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
{
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
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
|
+
}
|
|
112
|
+
|
|
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
|
+
}
|
|
120
|
+
|
|
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
|
+
}
|
|
129
|
+
|
|
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);
|
|
137
|
+
}
|
|
138
|
+
};
|
|
139
|
+
|
|
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;
|
|
150
|
+
{
|
|
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
|
+
}
|
|
167
|
+
}
|
|
40
168
|
}
|
|
41
169
|
};
|
|
42
170
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
{
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
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
|
+
{
|
|
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
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
};
|
|
227
|
+
|
|
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;
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
};
|
|
244
|
+
|
|
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
|
+
}
|
|
55
275
|
}
|
|
56
276
|
};
|
|
57
277
|
|
|
58
278
|
// evaluator adaptor
|
|
59
|
-
template<typename XprType>
|
|
60
|
-
class visitor_evaluator
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
EIGEN_DEVICE_FUNC
|
|
64
|
-
explicit visitor_evaluator(const XprType &xpr) : m_evaluator(xpr), m_xpr(xpr) {}
|
|
65
|
-
|
|
279
|
+
template <typename XprType>
|
|
280
|
+
class visitor_evaluator {
|
|
281
|
+
public:
|
|
282
|
+
typedef evaluator<XprType> Evaluator;
|
|
66
283
|
typedef typename XprType::Scalar Scalar;
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
EIGEN_DEVICE_FUNC
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
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);
|
|
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;
|
|
318
|
+
};
|
|
319
|
+
|
|
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);
|
|
354
|
+
}
|
|
84
355
|
};
|
|
85
|
-
|
|
356
|
+
|
|
357
|
+
} // end namespace internal
|
|
86
358
|
|
|
87
359
|
/** Applies the visitor \a visitor to the whole coefficients of the matrix or vector.
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
{
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
enum {
|
|
113
|
-
unroll = SizeAtCompileTime != Dynamic
|
|
114
|
-
&& SizeAtCompileTime * ThisEvaluator::CoeffReadCost + (SizeAtCompileTime-1) * internal::functor_traits<Visitor>::Cost <= EIGEN_UNROLLING_LIMIT
|
|
115
|
-
};
|
|
116
|
-
return internal::visitor_impl<Visitor, ThisEvaluator, unroll ? int(SizeAtCompileTime) : Dynamic>::run(thisEval, visitor);
|
|
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
|
+
*/
|
|
378
|
+
template <typename Derived>
|
|
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);
|
|
117
383
|
}
|
|
118
384
|
|
|
119
385
|
namespace internal {
|
|
120
386
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
{
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
EIGEN_DEVICE_FUNC
|
|
131
|
-
inline void
|
|
132
|
-
{
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
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))));
|
|
136
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 };
|
|
137
429
|
};
|
|
138
430
|
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
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);
|
|
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++;
|
|
157
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;
|
|
158
454
|
};
|
|
159
455
|
|
|
160
|
-
template<typename Scalar>
|
|
161
|
-
struct functor_traits<
|
|
456
|
+
template <typename Scalar>
|
|
457
|
+
struct functor_traits<count_visitor<Scalar>> {
|
|
162
458
|
enum {
|
|
163
|
-
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
|
|
164
463
|
};
|
|
165
464
|
};
|
|
166
465
|
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
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__)
|
|
172
471
|
template <typename Derived>
|
|
173
|
-
struct
|
|
174
|
-
{
|
|
175
|
-
typedef typename Derived::Scalar Scalar;
|
|
176
|
-
EIGEN_DEVICE_FUNC
|
|
177
|
-
void operator() (const Scalar& value, Index i, Index j)
|
|
178
|
-
{
|
|
179
|
-
if(value > this->res)
|
|
180
|
-
{
|
|
181
|
-
this->res = value;
|
|
182
|
-
this->row = i;
|
|
183
|
-
this->col = j;
|
|
184
|
-
}
|
|
185
|
-
}
|
|
472
|
+
struct all_finite_impl<Derived, false> {
|
|
473
|
+
static EIGEN_DEVICE_FUNC inline bool run(const Derived& derived) { return derived.array().isFiniteTyped().all(); }
|
|
186
474
|
};
|
|
475
|
+
#endif
|
|
187
476
|
|
|
188
|
-
|
|
189
|
-
struct functor_traits<max_coeff_visitor<Scalar> > {
|
|
190
|
-
enum {
|
|
191
|
-
Cost = NumTraits<Scalar>::AddCost
|
|
192
|
-
};
|
|
193
|
-
};
|
|
477
|
+
} // end namespace internal
|
|
194
478
|
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
internal::min_coeff_visitor<Derived> minVisitor;
|
|
210
|
-
this->visit(minVisitor);
|
|
211
|
-
*rowId = minVisitor.row;
|
|
212
|
-
if (colId) *colId = minVisitor.col;
|
|
213
|
-
return minVisitor.res;
|
|
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;
|
|
214
493
|
}
|
|
215
494
|
|
|
216
|
-
/** \returns
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
EIGEN_STATIC_ASSERT_VECTOR_ONLY(Derived)
|
|
228
|
-
internal::min_coeff_visitor<Derived> minVisitor;
|
|
229
|
-
this->visit(minVisitor);
|
|
230
|
-
*index = IndexType((RowsAtCompileTime==1) ? minVisitor.col : minVisitor.row);
|
|
231
|
-
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;
|
|
232
506
|
}
|
|
233
507
|
|
|
234
|
-
/** \
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
{
|
|
246
|
-
internal::max_coeff_visitor<Derived> maxVisitor;
|
|
247
|
-
this->visit(maxVisitor);
|
|
248
|
-
*rowPtr = maxVisitor.row;
|
|
249
|
-
if (colPtr) *colPtr = maxVisitor.col;
|
|
250
|
-
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;
|
|
251
519
|
}
|
|
252
520
|
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
{
|
|
264
|
-
|
|
265
|
-
internal::max_coeff_visitor<Derived> maxVisitor;
|
|
266
|
-
this->visit(maxVisitor);
|
|
267
|
-
*index = (RowsAtCompileTime==1) ? maxVisitor.col : maxVisitor.row;
|
|
268
|
-
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());
|
|
269
533
|
}
|
|
270
534
|
|
|
271
|
-
}
|
|
535
|
+
} // end namespace Eigen
|
|
272
536
|
|
|
273
|
-
#endif
|
|
537
|
+
#endif // EIGEN_VISITOR_H
|