@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,121 +10,123 @@
|
|
|
10
10
|
#ifndef EIGEN_BINARY_FUNCTORS_H
|
|
11
11
|
#define EIGEN_BINARY_FUNCTORS_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
20
|
//---------- associative binary functors ----------
|
|
18
21
|
|
|
19
|
-
template<typename Arg1, typename Arg2>
|
|
20
|
-
struct binary_op_base
|
|
21
|
-
{
|
|
22
|
+
template <typename Arg1, typename Arg2>
|
|
23
|
+
struct binary_op_base {
|
|
22
24
|
typedef Arg1 first_argument_type;
|
|
23
25
|
typedef Arg2 second_argument_type;
|
|
24
26
|
};
|
|
25
27
|
|
|
26
28
|
/** \internal
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
template<typename LhsScalar,typename RhsScalar>
|
|
32
|
-
struct scalar_sum_op : binary_op_base<LhsScalar,RhsScalar>
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
EIGEN_EMPTY_STRUCT_CTOR(scalar_sum_op)
|
|
37
|
-
#else
|
|
38
|
-
scalar_sum_op() {
|
|
39
|
-
EIGEN_SCALAR_BINARY_OP_PLUGIN
|
|
40
|
-
}
|
|
29
|
+
* \brief Template functor to compute the sum of two scalars
|
|
30
|
+
*
|
|
31
|
+
* \sa class CwiseBinaryOp, MatrixBase::operator+, class VectorwiseOp, DenseBase::sum()
|
|
32
|
+
*/
|
|
33
|
+
template <typename LhsScalar, typename RhsScalar>
|
|
34
|
+
struct scalar_sum_op : binary_op_base<LhsScalar, RhsScalar> {
|
|
35
|
+
typedef typename ScalarBinaryOpTraits<LhsScalar, RhsScalar, scalar_sum_op>::ReturnType result_type;
|
|
36
|
+
#ifdef EIGEN_SCALAR_BINARY_OP_PLUGIN
|
|
37
|
+
scalar_sum_op(){EIGEN_SCALAR_BINARY_OP_PLUGIN}
|
|
41
38
|
#endif
|
|
42
|
-
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
template<typename Packet>
|
|
47
|
-
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const
|
|
48
|
-
|
|
49
|
-
}
|
|
50
|
-
template<typename
|
|
51
|
-
|
|
39
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE result_type
|
|
40
|
+
operator()(const LhsScalar& a, const RhsScalar& b) const {
|
|
41
|
+
return a + b;
|
|
42
|
+
}
|
|
43
|
+
template <typename Packet>
|
|
44
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet packetOp(const Packet& a, const Packet& b) const {
|
|
45
|
+
return internal::padd(a, b);
|
|
46
|
+
}
|
|
47
|
+
template <typename Packet>
|
|
48
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE result_type predux(const Packet& a) const {
|
|
49
|
+
return internal::predux(a);
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
template <typename LhsScalar, typename RhsScalar>
|
|
53
|
+
struct functor_traits<scalar_sum_op<LhsScalar, RhsScalar>> {
|
|
52
54
|
enum {
|
|
53
|
-
Cost = (NumTraits<LhsScalar>::AddCost+NumTraits<RhsScalar>::AddCost)/2,
|
|
54
|
-
PacketAccess =
|
|
55
|
+
Cost = (int(NumTraits<LhsScalar>::AddCost) + int(NumTraits<RhsScalar>::AddCost)) / 2, // rough estimate!
|
|
56
|
+
PacketAccess =
|
|
57
|
+
is_same<LhsScalar, RhsScalar>::value && packet_traits<LhsScalar>::HasAdd && packet_traits<RhsScalar>::HasAdd
|
|
55
58
|
// TODO vectorize mixed sum
|
|
56
59
|
};
|
|
57
60
|
};
|
|
58
61
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
*/
|
|
64
|
-
template<> struct scalar_sum_op<bool,bool> : scalar_sum_op<int,int> {
|
|
65
|
-
EIGEN_DEPRECATED
|
|
66
|
-
scalar_sum_op() {}
|
|
67
|
-
};
|
|
68
|
-
|
|
62
|
+
template <>
|
|
63
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE bool scalar_sum_op<bool, bool>::operator()(const bool& a, const bool& b) const {
|
|
64
|
+
return a || b;
|
|
65
|
+
}
|
|
69
66
|
|
|
70
67
|
/** \internal
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
template<typename LhsScalar,typename RhsScalar>
|
|
76
|
-
struct scalar_product_op
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
EIGEN_EMPTY_STRUCT_CTOR(scalar_product_op)
|
|
81
|
-
#else
|
|
82
|
-
scalar_product_op() {
|
|
83
|
-
EIGEN_SCALAR_BINARY_OP_PLUGIN
|
|
84
|
-
}
|
|
68
|
+
* \brief Template functor to compute the product of two scalars
|
|
69
|
+
*
|
|
70
|
+
* \sa class CwiseBinaryOp, Cwise::operator*(), class VectorwiseOp, MatrixBase::redux()
|
|
71
|
+
*/
|
|
72
|
+
template <typename LhsScalar, typename RhsScalar>
|
|
73
|
+
struct scalar_product_op : binary_op_base<LhsScalar, RhsScalar> {
|
|
74
|
+
typedef typename ScalarBinaryOpTraits<LhsScalar, RhsScalar, scalar_product_op>::ReturnType result_type;
|
|
75
|
+
#ifdef EIGEN_SCALAR_BINARY_OP_PLUGIN
|
|
76
|
+
scalar_product_op(){EIGEN_SCALAR_BINARY_OP_PLUGIN}
|
|
85
77
|
#endif
|
|
86
|
-
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
template<typename Packet>
|
|
91
|
-
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const
|
|
92
|
-
|
|
93
|
-
}
|
|
94
|
-
template<typename
|
|
95
|
-
|
|
78
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE result_type
|
|
79
|
+
operator()(const LhsScalar& a, const RhsScalar& b) const {
|
|
80
|
+
return a * b;
|
|
81
|
+
}
|
|
82
|
+
template <typename Packet>
|
|
83
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet packetOp(const Packet& a, const Packet& b) const {
|
|
84
|
+
return internal::pmul(a, b);
|
|
85
|
+
}
|
|
86
|
+
template <typename Packet>
|
|
87
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE result_type predux(const Packet& a) const {
|
|
88
|
+
return internal::predux_mul(a);
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
template <typename LhsScalar, typename RhsScalar>
|
|
92
|
+
struct functor_traits<scalar_product_op<LhsScalar, RhsScalar>> {
|
|
96
93
|
enum {
|
|
97
|
-
Cost = (NumTraits<LhsScalar>::MulCost + NumTraits<RhsScalar>::MulCost)/2,
|
|
98
|
-
PacketAccess =
|
|
94
|
+
Cost = (int(NumTraits<LhsScalar>::MulCost) + int(NumTraits<RhsScalar>::MulCost)) / 2, // rough estimate!
|
|
95
|
+
PacketAccess =
|
|
96
|
+
is_same<LhsScalar, RhsScalar>::value && packet_traits<LhsScalar>::HasMul && packet_traits<RhsScalar>::HasMul
|
|
99
97
|
// TODO vectorize mixed product
|
|
100
98
|
};
|
|
101
99
|
};
|
|
102
100
|
|
|
101
|
+
template <>
|
|
102
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE bool scalar_product_op<bool, bool>::operator()(const bool& a,
|
|
103
|
+
const bool& b) const {
|
|
104
|
+
return a && b;
|
|
105
|
+
}
|
|
106
|
+
|
|
103
107
|
/** \internal
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
{
|
|
108
|
+
* \brief Template functor to compute the conjugate product of two scalars
|
|
109
|
+
*
|
|
110
|
+
* This is a short cut for conj(x) * y which is needed for optimization purpose; in Eigen2 support mode, this becomes x
|
|
111
|
+
* * conj(y)
|
|
112
|
+
*/
|
|
113
|
+
template <typename LhsScalar, typename RhsScalar>
|
|
114
|
+
struct scalar_conj_product_op : binary_op_base<LhsScalar, RhsScalar> {
|
|
115
|
+
enum { Conj = NumTraits<LhsScalar>::IsComplex };
|
|
111
116
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
};
|
|
126
|
-
template<typename LhsScalar,typename RhsScalar>
|
|
127
|
-
struct functor_traits<scalar_conj_product_op<LhsScalar,RhsScalar> > {
|
|
117
|
+
typedef typename ScalarBinaryOpTraits<LhsScalar, RhsScalar, scalar_conj_product_op>::ReturnType result_type;
|
|
118
|
+
|
|
119
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE result_type operator()(const LhsScalar& a, const RhsScalar& b) const {
|
|
120
|
+
return conj_helper<LhsScalar, RhsScalar, Conj, false>().pmul(a, b);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
template <typename Packet>
|
|
124
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet packetOp(const Packet& a, const Packet& b) const {
|
|
125
|
+
return conj_helper<Packet, Packet, Conj, false>().pmul(a, b);
|
|
126
|
+
}
|
|
127
|
+
};
|
|
128
|
+
template <typename LhsScalar, typename RhsScalar>
|
|
129
|
+
struct functor_traits<scalar_conj_product_op<LhsScalar, RhsScalar>> {
|
|
128
130
|
enum {
|
|
129
131
|
Cost = NumTraits<LhsScalar>::MulCost,
|
|
130
132
|
PacketAccess = internal::is_same<LhsScalar, RhsScalar>::value && packet_traits<LhsScalar>::HasMul
|
|
@@ -132,344 +134,614 @@ struct functor_traits<scalar_conj_product_op<LhsScalar,RhsScalar> > {
|
|
|
132
134
|
};
|
|
133
135
|
|
|
134
136
|
/** \internal
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
template<typename LhsScalar,typename RhsScalar>
|
|
140
|
-
struct scalar_min_op : binary_op_base<LhsScalar,RhsScalar>
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
template<typename Packet>
|
|
146
|
-
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
137
|
+
* \brief Template functor to compute the min of two scalars
|
|
138
|
+
*
|
|
139
|
+
* \sa class CwiseBinaryOp, MatrixBase::cwiseMin, class VectorwiseOp, MatrixBase::minCoeff()
|
|
140
|
+
*/
|
|
141
|
+
template <typename LhsScalar, typename RhsScalar, int NaNPropagation>
|
|
142
|
+
struct scalar_min_op : binary_op_base<LhsScalar, RhsScalar> {
|
|
143
|
+
typedef typename ScalarBinaryOpTraits<LhsScalar, RhsScalar, scalar_min_op>::ReturnType result_type;
|
|
144
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE result_type operator()(const LhsScalar& a, const RhsScalar& b) const {
|
|
145
|
+
return internal::pmin<NaNPropagation>(a, b);
|
|
146
|
+
}
|
|
147
|
+
template <typename Packet>
|
|
148
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet packetOp(const Packet& a, const Packet& b) const {
|
|
149
|
+
return internal::pmin<NaNPropagation>(a, b);
|
|
150
|
+
}
|
|
151
|
+
template <typename Packet>
|
|
152
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE result_type predux(const Packet& a) const {
|
|
153
|
+
return internal::predux_min<NaNPropagation>(a);
|
|
154
|
+
}
|
|
155
|
+
};
|
|
156
|
+
|
|
157
|
+
template <typename LhsScalar, typename RhsScalar, int NaNPropagation>
|
|
158
|
+
struct functor_traits<scalar_min_op<LhsScalar, RhsScalar, NaNPropagation>> {
|
|
154
159
|
enum {
|
|
155
|
-
Cost = (NumTraits<LhsScalar>::AddCost+NumTraits<RhsScalar>::AddCost)/2,
|
|
160
|
+
Cost = (NumTraits<LhsScalar>::AddCost + NumTraits<RhsScalar>::AddCost) / 2,
|
|
156
161
|
PacketAccess = internal::is_same<LhsScalar, RhsScalar>::value && packet_traits<LhsScalar>::HasMin
|
|
157
162
|
};
|
|
158
163
|
};
|
|
159
164
|
|
|
160
165
|
/** \internal
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
template<typename LhsScalar,typename RhsScalar>
|
|
166
|
-
struct scalar_max_op
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
template<typename Packet>
|
|
172
|
-
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
166
|
+
* \brief Template functor to compute the max of two scalars
|
|
167
|
+
*
|
|
168
|
+
* \sa class CwiseBinaryOp, MatrixBase::cwiseMax, class VectorwiseOp, MatrixBase::maxCoeff()
|
|
169
|
+
*/
|
|
170
|
+
template <typename LhsScalar, typename RhsScalar, int NaNPropagation>
|
|
171
|
+
struct scalar_max_op : binary_op_base<LhsScalar, RhsScalar> {
|
|
172
|
+
typedef typename ScalarBinaryOpTraits<LhsScalar, RhsScalar, scalar_max_op>::ReturnType result_type;
|
|
173
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE result_type operator()(const LhsScalar& a, const RhsScalar& b) const {
|
|
174
|
+
return internal::pmax<NaNPropagation>(a, b);
|
|
175
|
+
}
|
|
176
|
+
template <typename Packet>
|
|
177
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet packetOp(const Packet& a, const Packet& b) const {
|
|
178
|
+
return internal::pmax<NaNPropagation>(a, b);
|
|
179
|
+
}
|
|
180
|
+
template <typename Packet>
|
|
181
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE result_type predux(const Packet& a) const {
|
|
182
|
+
return internal::predux_max<NaNPropagation>(a);
|
|
183
|
+
}
|
|
184
|
+
};
|
|
185
|
+
|
|
186
|
+
template <typename LhsScalar, typename RhsScalar, int NaNPropagation>
|
|
187
|
+
struct functor_traits<scalar_max_op<LhsScalar, RhsScalar, NaNPropagation>> {
|
|
180
188
|
enum {
|
|
181
|
-
Cost = (NumTraits<LhsScalar>::AddCost+NumTraits<RhsScalar>::AddCost)/2,
|
|
189
|
+
Cost = (NumTraits<LhsScalar>::AddCost + NumTraits<RhsScalar>::AddCost) / 2,
|
|
182
190
|
PacketAccess = internal::is_same<LhsScalar, RhsScalar>::value && packet_traits<LhsScalar>::HasMax
|
|
183
191
|
};
|
|
184
192
|
};
|
|
185
193
|
|
|
186
194
|
/** \internal
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
template<typename LhsScalar, typename RhsScalar, ComparisonName cmp
|
|
195
|
+
* \brief Template functors for comparison of two scalars
|
|
196
|
+
* \todo Implement packet-comparisons
|
|
197
|
+
*/
|
|
198
|
+
template <typename LhsScalar, typename RhsScalar, ComparisonName cmp, bool UseTypedComparators = false>
|
|
199
|
+
struct scalar_cmp_op;
|
|
191
200
|
|
|
192
|
-
template<typename LhsScalar, typename RhsScalar, ComparisonName cmp>
|
|
193
|
-
struct functor_traits<scalar_cmp_op<LhsScalar,RhsScalar, cmp
|
|
201
|
+
template <typename LhsScalar, typename RhsScalar, ComparisonName cmp, bool UseTypedComparators>
|
|
202
|
+
struct functor_traits<scalar_cmp_op<LhsScalar, RhsScalar, cmp, UseTypedComparators>> {
|
|
194
203
|
enum {
|
|
195
|
-
Cost = (NumTraits<LhsScalar>::AddCost+NumTraits<RhsScalar>::AddCost)/2,
|
|
196
|
-
PacketAccess =
|
|
204
|
+
Cost = (NumTraits<LhsScalar>::AddCost + NumTraits<RhsScalar>::AddCost) / 2,
|
|
205
|
+
PacketAccess = (UseTypedComparators || is_same<LhsScalar, bool>::value) && is_same<LhsScalar, RhsScalar>::value &&
|
|
206
|
+
packet_traits<LhsScalar>::HasCmp
|
|
197
207
|
};
|
|
198
208
|
};
|
|
199
209
|
|
|
200
|
-
template<
|
|
201
|
-
struct
|
|
202
|
-
|
|
210
|
+
template <typename LhsScalar, typename RhsScalar, bool UseTypedComparators>
|
|
211
|
+
struct scalar_cmp_op<LhsScalar, RhsScalar, cmp_EQ, UseTypedComparators> : binary_op_base<LhsScalar, RhsScalar> {
|
|
212
|
+
using result_type = std::conditional_t<UseTypedComparators, LhsScalar, bool>;
|
|
213
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE result_type operator()(const LhsScalar& a, const RhsScalar& b) const {
|
|
214
|
+
return a == b ? result_type(1) : result_type(0);
|
|
215
|
+
}
|
|
216
|
+
template <typename Packet>
|
|
217
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet packetOp(const Packet& a, const Packet& b) const {
|
|
218
|
+
const Packet cst_one = pset1<Packet>(result_type(1));
|
|
219
|
+
return pand(pcmp_eq(a, b), cst_one);
|
|
220
|
+
}
|
|
203
221
|
};
|
|
204
222
|
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
{
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
typedef bool result_type;
|
|
217
|
-
EIGEN_EMPTY_STRUCT_CTOR(scalar_cmp_op)
|
|
218
|
-
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE bool operator()(const LhsScalar& a, const RhsScalar& b) const {return a<b;}
|
|
219
|
-
};
|
|
220
|
-
template<typename LhsScalar, typename RhsScalar>
|
|
221
|
-
struct scalar_cmp_op<LhsScalar,RhsScalar, cmp_LE> : binary_op_base<LhsScalar,RhsScalar>
|
|
222
|
-
{
|
|
223
|
-
typedef bool result_type;
|
|
224
|
-
EIGEN_EMPTY_STRUCT_CTOR(scalar_cmp_op)
|
|
225
|
-
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE bool operator()(const LhsScalar& a, const RhsScalar& b) const {return a<=b;}
|
|
223
|
+
template <typename LhsScalar, typename RhsScalar, bool UseTypedComparators>
|
|
224
|
+
struct scalar_cmp_op<LhsScalar, RhsScalar, cmp_LT, UseTypedComparators> : binary_op_base<LhsScalar, RhsScalar> {
|
|
225
|
+
using result_type = std::conditional_t<UseTypedComparators, LhsScalar, bool>;
|
|
226
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE result_type operator()(const LhsScalar& a, const RhsScalar& b) const {
|
|
227
|
+
return a < b ? result_type(1) : result_type(0);
|
|
228
|
+
}
|
|
229
|
+
template <typename Packet>
|
|
230
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet packetOp(const Packet& a, const Packet& b) const {
|
|
231
|
+
const Packet cst_one = pset1<Packet>(result_type(1));
|
|
232
|
+
return pand(pcmp_lt(a, b), cst_one);
|
|
233
|
+
}
|
|
226
234
|
};
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
{
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
235
|
+
|
|
236
|
+
template <typename LhsScalar, typename RhsScalar, bool UseTypedComparators>
|
|
237
|
+
struct scalar_cmp_op<LhsScalar, RhsScalar, cmp_LE, UseTypedComparators> : binary_op_base<LhsScalar, RhsScalar> {
|
|
238
|
+
using result_type = std::conditional_t<UseTypedComparators, LhsScalar, bool>;
|
|
239
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE result_type operator()(const LhsScalar& a, const RhsScalar& b) const {
|
|
240
|
+
return a <= b ? result_type(1) : result_type(0);
|
|
241
|
+
}
|
|
242
|
+
template <typename Packet>
|
|
243
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet packetOp(const Packet& a, const Packet& b) const {
|
|
244
|
+
const Packet cst_one = pset1<Packet>(result_type(1));
|
|
245
|
+
return pand(cst_one, pcmp_le(a, b));
|
|
246
|
+
}
|
|
233
247
|
};
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
{
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
248
|
+
|
|
249
|
+
template <typename LhsScalar, typename RhsScalar, bool UseTypedComparators>
|
|
250
|
+
struct scalar_cmp_op<LhsScalar, RhsScalar, cmp_GT, UseTypedComparators> : binary_op_base<LhsScalar, RhsScalar> {
|
|
251
|
+
using result_type = std::conditional_t<UseTypedComparators, LhsScalar, bool>;
|
|
252
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE result_type operator()(const LhsScalar& a, const RhsScalar& b) const {
|
|
253
|
+
return a > b ? result_type(1) : result_type(0);
|
|
254
|
+
}
|
|
255
|
+
template <typename Packet>
|
|
256
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet packetOp(const Packet& a, const Packet& b) const {
|
|
257
|
+
const Packet cst_one = pset1<Packet>(result_type(1));
|
|
258
|
+
return pand(cst_one, pcmp_lt(b, a));
|
|
259
|
+
}
|
|
240
260
|
};
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
{
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
261
|
+
|
|
262
|
+
template <typename LhsScalar, typename RhsScalar, bool UseTypedComparators>
|
|
263
|
+
struct scalar_cmp_op<LhsScalar, RhsScalar, cmp_GE, UseTypedComparators> : binary_op_base<LhsScalar, RhsScalar> {
|
|
264
|
+
using result_type = std::conditional_t<UseTypedComparators, LhsScalar, bool>;
|
|
265
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE result_type operator()(const LhsScalar& a, const RhsScalar& b) const {
|
|
266
|
+
return a >= b ? result_type(1) : result_type(0);
|
|
267
|
+
}
|
|
268
|
+
template <typename Packet>
|
|
269
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet packetOp(const Packet& a, const Packet& b) const {
|
|
270
|
+
const Packet cst_one = pset1<Packet>(result_type(1));
|
|
271
|
+
return pand(cst_one, pcmp_le(b, a));
|
|
272
|
+
}
|
|
247
273
|
};
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
{
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
274
|
+
|
|
275
|
+
template <typename LhsScalar, typename RhsScalar, bool UseTypedComparators>
|
|
276
|
+
struct scalar_cmp_op<LhsScalar, RhsScalar, cmp_UNORD, UseTypedComparators> : binary_op_base<LhsScalar, RhsScalar> {
|
|
277
|
+
using result_type = std::conditional_t<UseTypedComparators, LhsScalar, bool>;
|
|
278
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE result_type operator()(const LhsScalar& a, const RhsScalar& b) const {
|
|
279
|
+
return !(a <= b || b <= a) ? result_type(1) : result_type(0);
|
|
280
|
+
}
|
|
281
|
+
template <typename Packet>
|
|
282
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet packetOp(const Packet& a, const Packet& b) const {
|
|
283
|
+
const Packet cst_one = pset1<Packet>(result_type(1));
|
|
284
|
+
return pandnot(cst_one, por(pcmp_le(a, b), pcmp_le(b, a)));
|
|
285
|
+
}
|
|
254
286
|
};
|
|
255
287
|
|
|
288
|
+
template <typename LhsScalar, typename RhsScalar, bool UseTypedComparators>
|
|
289
|
+
struct scalar_cmp_op<LhsScalar, RhsScalar, cmp_NEQ, UseTypedComparators> : binary_op_base<LhsScalar, RhsScalar> {
|
|
290
|
+
using result_type = std::conditional_t<UseTypedComparators, LhsScalar, bool>;
|
|
291
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE result_type operator()(const LhsScalar& a, const RhsScalar& b) const {
|
|
292
|
+
return a != b ? result_type(1) : result_type(0);
|
|
293
|
+
}
|
|
294
|
+
template <typename Packet>
|
|
295
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet packetOp(const Packet& a, const Packet& b) const {
|
|
296
|
+
const Packet cst_one = pset1<Packet>(result_type(1));
|
|
297
|
+
return pandnot(cst_one, pcmp_eq(a, b));
|
|
298
|
+
}
|
|
299
|
+
};
|
|
256
300
|
|
|
257
301
|
/** \internal
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
template<typename Scalar>
|
|
263
|
-
struct scalar_hypot_op<Scalar,Scalar> : binary_op_base<Scalar,Scalar>
|
|
264
|
-
{
|
|
265
|
-
EIGEN_EMPTY_STRUCT_CTOR(scalar_hypot_op)
|
|
266
|
-
|
|
267
|
-
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Scalar operator() (const Scalar &x, const Scalar &y) const
|
|
268
|
-
{
|
|
302
|
+
* \brief Template functor to compute the hypot of two \b positive \b and \b real scalars
|
|
303
|
+
*
|
|
304
|
+
* \sa MatrixBase::stableNorm(), class Redux
|
|
305
|
+
*/
|
|
306
|
+
template <typename Scalar>
|
|
307
|
+
struct scalar_hypot_op<Scalar, Scalar> : binary_op_base<Scalar, Scalar> {
|
|
308
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Scalar operator()(const Scalar& x, const Scalar& y) const {
|
|
269
309
|
// This functor is used by hypotNorm only for which it is faster to first apply abs
|
|
270
310
|
// on all coefficients prior to reduction through hypot.
|
|
271
311
|
// This way we avoid calling abs on positive and real entries, and this also permits
|
|
272
312
|
// to seamlessly handle complexes. Otherwise we would have to handle both real and complexes
|
|
273
313
|
// through the same functor...
|
|
274
|
-
return internal::positive_real_hypot(x,y);
|
|
314
|
+
return internal::positive_real_hypot(x, y);
|
|
275
315
|
}
|
|
276
316
|
};
|
|
277
|
-
template<typename Scalar>
|
|
278
|
-
struct functor_traits<scalar_hypot_op<Scalar,Scalar
|
|
279
|
-
enum
|
|
280
|
-
|
|
281
|
-
Cost = 3 * NumTraits<Scalar>::AddCost +
|
|
282
|
-
2 * NumTraits<Scalar>::MulCost +
|
|
283
|
-
2 * scalar_div_cost<Scalar,false>::value,
|
|
317
|
+
template <typename Scalar>
|
|
318
|
+
struct functor_traits<scalar_hypot_op<Scalar, Scalar>> {
|
|
319
|
+
enum {
|
|
320
|
+
Cost = 3 * NumTraits<Scalar>::AddCost + 2 * NumTraits<Scalar>::MulCost + 2 * scalar_div_cost<Scalar, false>::value,
|
|
284
321
|
PacketAccess = false
|
|
285
322
|
};
|
|
286
323
|
};
|
|
287
324
|
|
|
288
325
|
/** \internal
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
{
|
|
294
|
-
typedef typename ScalarBinaryOpTraits<Scalar,Exponent,scalar_pow_op>::ReturnType result_type;
|
|
295
|
-
#
|
|
296
|
-
EIGEN_EMPTY_STRUCT_CTOR(scalar_pow_op)
|
|
297
|
-
#else
|
|
326
|
+
* \brief Template functor to compute the pow of two scalars
|
|
327
|
+
* See the specification of pow in https://en.cppreference.com/w/cpp/numeric/math/pow
|
|
328
|
+
*/
|
|
329
|
+
template <typename Scalar, typename Exponent>
|
|
330
|
+
struct scalar_pow_op : binary_op_base<Scalar, Exponent> {
|
|
331
|
+
typedef typename ScalarBinaryOpTraits<Scalar, Exponent, scalar_pow_op>::ReturnType result_type;
|
|
332
|
+
#ifdef EIGEN_SCALAR_BINARY_OP_PLUGIN
|
|
298
333
|
scalar_pow_op() {
|
|
299
334
|
typedef Scalar LhsScalar;
|
|
300
335
|
typedef Exponent RhsScalar;
|
|
301
336
|
EIGEN_SCALAR_BINARY_OP_PLUGIN
|
|
302
337
|
}
|
|
303
338
|
#endif
|
|
304
|
-
EIGEN_DEVICE_FUNC
|
|
305
|
-
inline result_type operator() (const Scalar& a, const Exponent& b) const { return numext::pow(a, b); }
|
|
306
|
-
};
|
|
307
|
-
template<typename Scalar, typename Exponent>
|
|
308
|
-
struct functor_traits<scalar_pow_op<Scalar,Exponent> > {
|
|
309
|
-
enum { Cost = 5 * NumTraits<Scalar>::MulCost, PacketAccess = false };
|
|
310
|
-
};
|
|
311
339
|
|
|
340
|
+
EIGEN_DEVICE_FUNC inline result_type operator()(const Scalar& a, const Exponent& b) const {
|
|
341
|
+
return numext::pow(a, b);
|
|
342
|
+
}
|
|
312
343
|
|
|
344
|
+
template <typename Packet>
|
|
345
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Packet packetOp(const Packet& a, const Packet& b) const {
|
|
346
|
+
return generic_pow(a, b);
|
|
347
|
+
}
|
|
348
|
+
};
|
|
349
|
+
|
|
350
|
+
template <typename Scalar, typename Exponent>
|
|
351
|
+
struct functor_traits<scalar_pow_op<Scalar, Exponent>> {
|
|
352
|
+
enum {
|
|
353
|
+
Cost = 5 * NumTraits<Scalar>::MulCost,
|
|
354
|
+
PacketAccess = (!NumTraits<Scalar>::IsComplex && !NumTraits<Scalar>::IsInteger && packet_traits<Scalar>::HasPow)
|
|
355
|
+
};
|
|
356
|
+
};
|
|
313
357
|
|
|
314
358
|
//---------- non associative binary functors ----------
|
|
315
359
|
|
|
316
360
|
/** \internal
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
template<typename LhsScalar,typename RhsScalar>
|
|
322
|
-
struct scalar_difference_op : binary_op_base<LhsScalar,RhsScalar>
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
EIGEN_EMPTY_STRUCT_CTOR(scalar_difference_op)
|
|
327
|
-
#else
|
|
328
|
-
scalar_difference_op() {
|
|
329
|
-
EIGEN_SCALAR_BINARY_OP_PLUGIN
|
|
330
|
-
}
|
|
361
|
+
* \brief Template functor to compute the difference of two scalars
|
|
362
|
+
*
|
|
363
|
+
* \sa class CwiseBinaryOp, MatrixBase::operator-
|
|
364
|
+
*/
|
|
365
|
+
template <typename LhsScalar, typename RhsScalar>
|
|
366
|
+
struct scalar_difference_op : binary_op_base<LhsScalar, RhsScalar> {
|
|
367
|
+
typedef typename ScalarBinaryOpTraits<LhsScalar, RhsScalar, scalar_difference_op>::ReturnType result_type;
|
|
368
|
+
#ifdef EIGEN_SCALAR_BINARY_OP_PLUGIN
|
|
369
|
+
scalar_difference_op(){EIGEN_SCALAR_BINARY_OP_PLUGIN}
|
|
331
370
|
#endif
|
|
332
|
-
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const result_type
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
371
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const result_type
|
|
372
|
+
operator()(const LhsScalar& a, const RhsScalar& b) const {
|
|
373
|
+
return a - b;
|
|
374
|
+
}
|
|
375
|
+
template <typename Packet>
|
|
376
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Packet packetOp(const Packet& a, const Packet& b) const {
|
|
377
|
+
return internal::psub(a, b);
|
|
378
|
+
}
|
|
336
379
|
};
|
|
337
|
-
template<typename LhsScalar,typename RhsScalar>
|
|
338
|
-
struct functor_traits<scalar_difference_op<LhsScalar,RhsScalar
|
|
380
|
+
template <typename LhsScalar, typename RhsScalar>
|
|
381
|
+
struct functor_traits<scalar_difference_op<LhsScalar, RhsScalar>> {
|
|
339
382
|
enum {
|
|
340
|
-
Cost = (NumTraits<LhsScalar>::AddCost+NumTraits<RhsScalar>::AddCost)/2,
|
|
341
|
-
PacketAccess =
|
|
383
|
+
Cost = (int(NumTraits<LhsScalar>::AddCost) + int(NumTraits<RhsScalar>::AddCost)) / 2,
|
|
384
|
+
PacketAccess =
|
|
385
|
+
is_same<LhsScalar, RhsScalar>::value && packet_traits<LhsScalar>::HasSub && packet_traits<RhsScalar>::HasSub
|
|
342
386
|
};
|
|
343
387
|
};
|
|
344
388
|
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
{
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
389
|
+
template <typename Packet, bool IsInteger = NumTraits<typename unpacket_traits<Packet>::type>::IsInteger>
|
|
390
|
+
struct maybe_raise_div_by_zero {
|
|
391
|
+
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void run(Packet x) { EIGEN_UNUSED_VARIABLE(x); }
|
|
392
|
+
};
|
|
393
|
+
|
|
394
|
+
#ifndef EIGEN_GPU_COMPILE_PHASE
|
|
395
|
+
template <typename Packet>
|
|
396
|
+
struct maybe_raise_div_by_zero<Packet, true> {
|
|
397
|
+
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void run(Packet x) {
|
|
398
|
+
if (EIGEN_PREDICT_FALSE(predux_any(pcmp_eq(x, pzero(x))))) {
|
|
399
|
+
// Use volatile variables to force a division by zero, which will
|
|
400
|
+
// result in the default platform behaviour (usually SIGFPE).
|
|
401
|
+
volatile typename unpacket_traits<Packet>::type zero = 0;
|
|
402
|
+
volatile typename unpacket_traits<Packet>::type val = 1;
|
|
403
|
+
val = val / zero;
|
|
404
|
+
}
|
|
359
405
|
}
|
|
406
|
+
};
|
|
407
|
+
#endif
|
|
408
|
+
|
|
409
|
+
/** \internal
|
|
410
|
+
* \brief Template functor to compute the quotient of two scalars
|
|
411
|
+
*
|
|
412
|
+
* \sa class CwiseBinaryOp, Cwise::operator/()
|
|
413
|
+
*/
|
|
414
|
+
template <typename LhsScalar, typename RhsScalar>
|
|
415
|
+
struct scalar_quotient_op : binary_op_base<LhsScalar, RhsScalar> {
|
|
416
|
+
typedef typename ScalarBinaryOpTraits<LhsScalar, RhsScalar, scalar_quotient_op>::ReturnType result_type;
|
|
417
|
+
#ifdef EIGEN_SCALAR_BINARY_OP_PLUGIN
|
|
418
|
+
scalar_quotient_op(){EIGEN_SCALAR_BINARY_OP_PLUGIN}
|
|
360
419
|
#endif
|
|
361
|
-
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const result_type
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
420
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const result_type
|
|
421
|
+
operator()(const LhsScalar& a, const RhsScalar& b) const {
|
|
422
|
+
return a / b;
|
|
423
|
+
}
|
|
424
|
+
template <typename Packet>
|
|
425
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Packet packetOp(const Packet& a, const Packet& b) const {
|
|
426
|
+
return internal::pdiv(a, b);
|
|
427
|
+
}
|
|
428
|
+
};
|
|
429
|
+
template <typename LhsScalar, typename RhsScalar>
|
|
430
|
+
struct functor_traits<scalar_quotient_op<LhsScalar, RhsScalar>> {
|
|
431
|
+
typedef typename scalar_quotient_op<LhsScalar, RhsScalar>::result_type result_type;
|
|
369
432
|
enum {
|
|
370
|
-
PacketAccess =
|
|
371
|
-
|
|
433
|
+
PacketAccess =
|
|
434
|
+
is_same<LhsScalar, RhsScalar>::value && packet_traits<LhsScalar>::HasDiv && packet_traits<RhsScalar>::HasDiv,
|
|
435
|
+
Cost = scalar_div_cost<result_type, PacketAccess>::value
|
|
372
436
|
};
|
|
373
437
|
};
|
|
374
438
|
|
|
375
|
-
|
|
376
|
-
|
|
377
439
|
/** \internal
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
440
|
+
* \brief Template functor to compute the and of two scalars as if they were booleans
|
|
441
|
+
*
|
|
442
|
+
* \sa class CwiseBinaryOp, ArrayBase::operator&&
|
|
443
|
+
*/
|
|
444
|
+
template <typename Scalar>
|
|
382
445
|
struct scalar_boolean_and_op {
|
|
383
|
-
|
|
384
|
-
|
|
446
|
+
using result_type = Scalar;
|
|
447
|
+
// `false` any value `a` that satisfies `a == Scalar(0)`
|
|
448
|
+
// `true` is the complement of `false`
|
|
449
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar operator()(const Scalar& a, const Scalar& b) const {
|
|
450
|
+
return (a != Scalar(0)) && (b != Scalar(0)) ? Scalar(1) : Scalar(0);
|
|
451
|
+
}
|
|
452
|
+
template <typename Packet>
|
|
453
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet packetOp(const Packet& a, const Packet& b) const {
|
|
454
|
+
const Packet cst_one = pset1<Packet>(Scalar(1));
|
|
455
|
+
// and(a,b) == !or(!a,!b)
|
|
456
|
+
Packet not_a = pcmp_eq(a, pzero(a));
|
|
457
|
+
Packet not_b = pcmp_eq(b, pzero(b));
|
|
458
|
+
Packet a_nand_b = por(not_a, not_b);
|
|
459
|
+
return pandnot(cst_one, a_nand_b);
|
|
460
|
+
}
|
|
385
461
|
};
|
|
386
|
-
template
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
PacketAccess = false
|
|
390
|
-
};
|
|
462
|
+
template <typename Scalar>
|
|
463
|
+
struct functor_traits<scalar_boolean_and_op<Scalar>> {
|
|
464
|
+
enum { Cost = NumTraits<Scalar>::AddCost, PacketAccess = packet_traits<Scalar>::HasCmp };
|
|
391
465
|
};
|
|
392
466
|
|
|
393
467
|
/** \internal
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
468
|
+
* \brief Template functor to compute the or of two scalars as if they were booleans
|
|
469
|
+
*
|
|
470
|
+
* \sa class CwiseBinaryOp, ArrayBase::operator||
|
|
471
|
+
*/
|
|
472
|
+
template <typename Scalar>
|
|
398
473
|
struct scalar_boolean_or_op {
|
|
399
|
-
|
|
400
|
-
|
|
474
|
+
using result_type = Scalar;
|
|
475
|
+
// `false` any value `a` that satisfies `a == Scalar(0)`
|
|
476
|
+
// `true` is the complement of `false`
|
|
477
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar operator()(const Scalar& a, const Scalar& b) const {
|
|
478
|
+
return (a != Scalar(0)) || (b != Scalar(0)) ? Scalar(1) : Scalar(0);
|
|
479
|
+
}
|
|
480
|
+
template <typename Packet>
|
|
481
|
+
EIGEN_STRONG_INLINE Packet packetOp(const Packet& a, const Packet& b) const {
|
|
482
|
+
const Packet cst_one = pset1<Packet>(Scalar(1));
|
|
483
|
+
// if or(a,b) == 0, then a == 0 and b == 0
|
|
484
|
+
// or(a,b) == !nor(a,b)
|
|
485
|
+
Packet a_nor_b = pcmp_eq(por(a, b), pzero(a));
|
|
486
|
+
return pandnot(cst_one, a_nor_b);
|
|
487
|
+
}
|
|
401
488
|
};
|
|
402
|
-
template
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
PacketAccess = false
|
|
406
|
-
};
|
|
489
|
+
template <typename Scalar>
|
|
490
|
+
struct functor_traits<scalar_boolean_or_op<Scalar>> {
|
|
491
|
+
enum { Cost = NumTraits<Scalar>::AddCost, PacketAccess = packet_traits<Scalar>::HasCmp };
|
|
407
492
|
};
|
|
408
493
|
|
|
409
494
|
/** \internal
|
|
410
|
-
* \brief Template functor to compute the xor of two booleans
|
|
495
|
+
* \brief Template functor to compute the xor of two scalars as if they were booleans
|
|
411
496
|
*
|
|
412
497
|
* \sa class CwiseBinaryOp, ArrayBase::operator^
|
|
413
498
|
*/
|
|
499
|
+
template <typename Scalar>
|
|
414
500
|
struct scalar_boolean_xor_op {
|
|
415
|
-
|
|
416
|
-
|
|
501
|
+
using result_type = Scalar;
|
|
502
|
+
// `false` any value `a` that satisfies `a == Scalar(0)`
|
|
503
|
+
// `true` is the complement of `false`
|
|
504
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar operator()(const Scalar& a, const Scalar& b) const {
|
|
505
|
+
return (a != Scalar(0)) != (b != Scalar(0)) ? Scalar(1) : Scalar(0);
|
|
506
|
+
}
|
|
507
|
+
template <typename Packet>
|
|
508
|
+
EIGEN_STRONG_INLINE Packet packetOp(const Packet& a, const Packet& b) const {
|
|
509
|
+
const Packet cst_one = pset1<Packet>(Scalar(1));
|
|
510
|
+
// xor(a,b) == xor(!a,!b)
|
|
511
|
+
Packet not_a = pcmp_eq(a, pzero(a));
|
|
512
|
+
Packet not_b = pcmp_eq(b, pzero(b));
|
|
513
|
+
Packet a_xor_b = pxor(not_a, not_b);
|
|
514
|
+
return pand(cst_one, a_xor_b);
|
|
515
|
+
}
|
|
516
|
+
};
|
|
517
|
+
template <typename Scalar>
|
|
518
|
+
struct functor_traits<scalar_boolean_xor_op<Scalar>> {
|
|
519
|
+
enum { Cost = NumTraits<Scalar>::AddCost, PacketAccess = packet_traits<Scalar>::HasCmp };
|
|
520
|
+
};
|
|
521
|
+
|
|
522
|
+
template <typename Scalar, bool IsComplex = NumTraits<Scalar>::IsComplex>
|
|
523
|
+
struct bitwise_binary_impl {
|
|
524
|
+
static constexpr size_t Size = sizeof(Scalar);
|
|
525
|
+
using uint_t = typename numext::get_integer_by_size<Size>::unsigned_type;
|
|
526
|
+
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar run_and(const Scalar& a, const Scalar& b) {
|
|
527
|
+
uint_t a_as_uint = numext::bit_cast<uint_t, Scalar>(a);
|
|
528
|
+
uint_t b_as_uint = numext::bit_cast<uint_t, Scalar>(b);
|
|
529
|
+
uint_t result = a_as_uint & b_as_uint;
|
|
530
|
+
return numext::bit_cast<Scalar, uint_t>(result);
|
|
531
|
+
}
|
|
532
|
+
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar run_or(const Scalar& a, const Scalar& b) {
|
|
533
|
+
uint_t a_as_uint = numext::bit_cast<uint_t, Scalar>(a);
|
|
534
|
+
uint_t b_as_uint = numext::bit_cast<uint_t, Scalar>(b);
|
|
535
|
+
uint_t result = a_as_uint | b_as_uint;
|
|
536
|
+
return numext::bit_cast<Scalar, uint_t>(result);
|
|
537
|
+
}
|
|
538
|
+
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar run_xor(const Scalar& a, const Scalar& b) {
|
|
539
|
+
uint_t a_as_uint = numext::bit_cast<uint_t, Scalar>(a);
|
|
540
|
+
uint_t b_as_uint = numext::bit_cast<uint_t, Scalar>(b);
|
|
541
|
+
uint_t result = a_as_uint ^ b_as_uint;
|
|
542
|
+
return numext::bit_cast<Scalar, uint_t>(result);
|
|
543
|
+
}
|
|
417
544
|
};
|
|
418
|
-
|
|
545
|
+
|
|
546
|
+
template <typename Scalar>
|
|
547
|
+
struct bitwise_binary_impl<Scalar, true> {
|
|
548
|
+
using Real = typename NumTraits<Scalar>::Real;
|
|
549
|
+
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar run_and(const Scalar& a, const Scalar& b) {
|
|
550
|
+
Real real_result = bitwise_binary_impl<Real>::run_and(numext::real(a), numext::real(b));
|
|
551
|
+
Real imag_result = bitwise_binary_impl<Real>::run_and(numext::imag(a), numext::imag(b));
|
|
552
|
+
return Scalar(real_result, imag_result);
|
|
553
|
+
}
|
|
554
|
+
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar run_or(const Scalar& a, const Scalar& b) {
|
|
555
|
+
Real real_result = bitwise_binary_impl<Real>::run_or(numext::real(a), numext::real(b));
|
|
556
|
+
Real imag_result = bitwise_binary_impl<Real>::run_or(numext::imag(a), numext::imag(b));
|
|
557
|
+
return Scalar(real_result, imag_result);
|
|
558
|
+
}
|
|
559
|
+
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar run_xor(const Scalar& a, const Scalar& b) {
|
|
560
|
+
Real real_result = bitwise_binary_impl<Real>::run_xor(numext::real(a), numext::real(b));
|
|
561
|
+
Real imag_result = bitwise_binary_impl<Real>::run_xor(numext::imag(a), numext::imag(b));
|
|
562
|
+
return Scalar(real_result, imag_result);
|
|
563
|
+
}
|
|
564
|
+
};
|
|
565
|
+
|
|
566
|
+
/** \internal
|
|
567
|
+
* \brief Template functor to compute the bitwise and of two scalars
|
|
568
|
+
*
|
|
569
|
+
* \sa class CwiseBinaryOp, ArrayBase::operator&
|
|
570
|
+
*/
|
|
571
|
+
template <typename Scalar>
|
|
572
|
+
struct scalar_bitwise_and_op {
|
|
573
|
+
EIGEN_STATIC_ASSERT(!NumTraits<Scalar>::RequireInitialization,
|
|
574
|
+
BITWISE OPERATIONS MAY ONLY BE PERFORMED ON PLAIN DATA TYPES)
|
|
575
|
+
EIGEN_STATIC_ASSERT((!internal::is_same<Scalar, bool>::value), DONT USE BITWISE OPS ON BOOLEAN TYPES)
|
|
576
|
+
using result_type = Scalar;
|
|
577
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar operator()(const Scalar& a, const Scalar& b) const {
|
|
578
|
+
return bitwise_binary_impl<Scalar>::run_and(a, b);
|
|
579
|
+
}
|
|
580
|
+
template <typename Packet>
|
|
581
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet packetOp(const Packet& a, const Packet& b) const {
|
|
582
|
+
return pand(a, b);
|
|
583
|
+
}
|
|
584
|
+
};
|
|
585
|
+
template <typename Scalar>
|
|
586
|
+
struct functor_traits<scalar_bitwise_and_op<Scalar>> {
|
|
587
|
+
enum { Cost = NumTraits<Scalar>::AddCost, PacketAccess = true };
|
|
588
|
+
};
|
|
589
|
+
|
|
590
|
+
/** \internal
|
|
591
|
+
* \brief Template functor to compute the bitwise or of two scalars
|
|
592
|
+
*
|
|
593
|
+
* \sa class CwiseBinaryOp, ArrayBase::operator|
|
|
594
|
+
*/
|
|
595
|
+
template <typename Scalar>
|
|
596
|
+
struct scalar_bitwise_or_op {
|
|
597
|
+
EIGEN_STATIC_ASSERT(!NumTraits<Scalar>::RequireInitialization,
|
|
598
|
+
BITWISE OPERATIONS MAY ONLY BE PERFORMED ON PLAIN DATA TYPES)
|
|
599
|
+
EIGEN_STATIC_ASSERT((!internal::is_same<Scalar, bool>::value), DONT USE BITWISE OPS ON BOOLEAN TYPES)
|
|
600
|
+
using result_type = Scalar;
|
|
601
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar operator()(const Scalar& a, const Scalar& b) const {
|
|
602
|
+
return bitwise_binary_impl<Scalar>::run_or(a, b);
|
|
603
|
+
}
|
|
604
|
+
template <typename Packet>
|
|
605
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet packetOp(const Packet& a, const Packet& b) const {
|
|
606
|
+
return por(a, b);
|
|
607
|
+
}
|
|
608
|
+
};
|
|
609
|
+
template <typename Scalar>
|
|
610
|
+
struct functor_traits<scalar_bitwise_or_op<Scalar>> {
|
|
611
|
+
enum { Cost = NumTraits<Scalar>::AddCost, PacketAccess = true };
|
|
612
|
+
};
|
|
613
|
+
|
|
614
|
+
/** \internal
|
|
615
|
+
* \brief Template functor to compute the bitwise xor of two scalars
|
|
616
|
+
*
|
|
617
|
+
* \sa class CwiseBinaryOp, ArrayBase::operator^
|
|
618
|
+
*/
|
|
619
|
+
template <typename Scalar>
|
|
620
|
+
struct scalar_bitwise_xor_op {
|
|
621
|
+
EIGEN_STATIC_ASSERT(!NumTraits<Scalar>::RequireInitialization,
|
|
622
|
+
BITWISE OPERATIONS MAY ONLY BE PERFORMED ON PLAIN DATA TYPES)
|
|
623
|
+
EIGEN_STATIC_ASSERT((!internal::is_same<Scalar, bool>::value), DONT USE BITWISE OPS ON BOOLEAN TYPES)
|
|
624
|
+
using result_type = Scalar;
|
|
625
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar operator()(const Scalar& a, const Scalar& b) const {
|
|
626
|
+
return bitwise_binary_impl<Scalar>::run_xor(a, b);
|
|
627
|
+
}
|
|
628
|
+
template <typename Packet>
|
|
629
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet packetOp(const Packet& a, const Packet& b) const {
|
|
630
|
+
return pxor(a, b);
|
|
631
|
+
}
|
|
632
|
+
};
|
|
633
|
+
template <typename Scalar>
|
|
634
|
+
struct functor_traits<scalar_bitwise_xor_op<Scalar>> {
|
|
635
|
+
enum { Cost = NumTraits<Scalar>::AddCost, PacketAccess = true };
|
|
636
|
+
};
|
|
637
|
+
|
|
638
|
+
/** \internal
|
|
639
|
+
* \brief Template functor to compute the absolute difference of two scalars
|
|
640
|
+
*
|
|
641
|
+
* \sa class CwiseBinaryOp, MatrixBase::absolute_difference
|
|
642
|
+
*/
|
|
643
|
+
template <typename LhsScalar, typename RhsScalar>
|
|
644
|
+
struct scalar_absolute_difference_op : binary_op_base<LhsScalar, RhsScalar> {
|
|
645
|
+
typedef typename ScalarBinaryOpTraits<LhsScalar, RhsScalar, scalar_absolute_difference_op>::ReturnType result_type;
|
|
646
|
+
#ifdef EIGEN_SCALAR_BINARY_OP_PLUGIN
|
|
647
|
+
scalar_absolute_difference_op(){EIGEN_SCALAR_BINARY_OP_PLUGIN}
|
|
648
|
+
#endif
|
|
649
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const result_type
|
|
650
|
+
operator()(const LhsScalar& a, const RhsScalar& b) const {
|
|
651
|
+
return numext::absdiff(a, b);
|
|
652
|
+
}
|
|
653
|
+
template <typename Packet>
|
|
654
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Packet packetOp(const Packet& a, const Packet& b) const {
|
|
655
|
+
return internal::pabsdiff(a, b);
|
|
656
|
+
}
|
|
657
|
+
};
|
|
658
|
+
template <typename LhsScalar, typename RhsScalar>
|
|
659
|
+
struct functor_traits<scalar_absolute_difference_op<LhsScalar, RhsScalar>> {
|
|
419
660
|
enum {
|
|
420
|
-
Cost = NumTraits<
|
|
421
|
-
PacketAccess =
|
|
661
|
+
Cost = (NumTraits<LhsScalar>::AddCost + NumTraits<RhsScalar>::AddCost) / 2,
|
|
662
|
+
PacketAccess = is_same<LhsScalar, RhsScalar>::value && packet_traits<LhsScalar>::HasAbsDiff
|
|
422
663
|
};
|
|
423
664
|
};
|
|
424
665
|
|
|
666
|
+
template <typename LhsScalar, typename RhsScalar>
|
|
667
|
+
struct scalar_atan2_op {
|
|
668
|
+
using Scalar = LhsScalar;
|
|
669
|
+
|
|
670
|
+
static constexpr bool Enable =
|
|
671
|
+
is_same<LhsScalar, RhsScalar>::value && !NumTraits<Scalar>::IsInteger && !NumTraits<Scalar>::IsComplex;
|
|
672
|
+
EIGEN_STATIC_ASSERT(Enable, "LhsScalar and RhsScalar must be the same non-integer, non-complex type")
|
|
673
|
+
|
|
674
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar operator()(const Scalar& y, const Scalar& x) const {
|
|
675
|
+
return numext::atan2(y, x);
|
|
676
|
+
}
|
|
677
|
+
template <typename Packet>
|
|
678
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet packetOp(const Packet& y, const Packet& x) const {
|
|
679
|
+
return internal::patan2(y, x);
|
|
680
|
+
}
|
|
681
|
+
};
|
|
425
682
|
|
|
683
|
+
template <typename LhsScalar, typename RhsScalar>
|
|
684
|
+
struct functor_traits<scalar_atan2_op<LhsScalar, RhsScalar>> {
|
|
685
|
+
using Scalar = LhsScalar;
|
|
686
|
+
enum {
|
|
687
|
+
PacketAccess = is_same<LhsScalar, RhsScalar>::value && packet_traits<Scalar>::HasATan &&
|
|
688
|
+
packet_traits<Scalar>::HasDiv && !NumTraits<Scalar>::IsInteger && !NumTraits<Scalar>::IsComplex,
|
|
689
|
+
Cost = int(scalar_div_cost<Scalar, PacketAccess>::value) + int(functor_traits<scalar_atan_op<Scalar>>::Cost)
|
|
690
|
+
};
|
|
691
|
+
};
|
|
426
692
|
|
|
427
693
|
//---------- binary functors bound to a constant, thus appearing as a unary functor ----------
|
|
428
694
|
|
|
429
|
-
// The following two classes permits to turn any binary functor into a unary one with one argument bound to a constant
|
|
430
|
-
// They are analogues to std::binder1st/binder2nd but with the following differences:
|
|
695
|
+
// The following two classes permits to turn any binary functor into a unary one with one argument bound to a constant
|
|
696
|
+
// value. They are analogues to std::binder1st/binder2nd but with the following differences:
|
|
431
697
|
// - they are compatible with packetOp
|
|
432
698
|
// - they are portable across C++ versions (the std::binder* are deprecated in C++11)
|
|
433
|
-
template<typename BinaryOp>
|
|
434
|
-
|
|
435
|
-
typedef typename BinaryOp::first_argument_type
|
|
699
|
+
template <typename BinaryOp>
|
|
700
|
+
struct bind1st_op : BinaryOp {
|
|
701
|
+
typedef typename BinaryOp::first_argument_type first_argument_type;
|
|
436
702
|
typedef typename BinaryOp::second_argument_type second_argument_type;
|
|
437
|
-
typedef typename BinaryOp::result_type
|
|
703
|
+
typedef typename BinaryOp::result_type result_type;
|
|
438
704
|
|
|
439
|
-
bind1st_op(const first_argument_type
|
|
705
|
+
EIGEN_DEVICE_FUNC explicit bind1st_op(const first_argument_type& val) : m_value(val) {}
|
|
440
706
|
|
|
441
|
-
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const result_type operator()
|
|
707
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const result_type operator()(const second_argument_type& b) const {
|
|
708
|
+
return BinaryOp::operator()(m_value, b);
|
|
709
|
+
}
|
|
442
710
|
|
|
443
|
-
template<typename Packet>
|
|
444
|
-
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Packet packetOp(const Packet& b) const
|
|
445
|
-
|
|
711
|
+
template <typename Packet>
|
|
712
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Packet packetOp(const Packet& b) const {
|
|
713
|
+
return BinaryOp::packetOp(internal::pset1<Packet>(m_value), b);
|
|
714
|
+
}
|
|
446
715
|
|
|
447
716
|
first_argument_type m_value;
|
|
448
717
|
};
|
|
449
|
-
template<typename BinaryOp>
|
|
718
|
+
template <typename BinaryOp>
|
|
719
|
+
struct functor_traits<bind1st_op<BinaryOp>> : functor_traits<BinaryOp> {};
|
|
450
720
|
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
typedef typename BinaryOp::first_argument_type first_argument_type;
|
|
721
|
+
template <typename BinaryOp>
|
|
722
|
+
struct bind2nd_op : BinaryOp {
|
|
723
|
+
typedef typename BinaryOp::first_argument_type first_argument_type;
|
|
455
724
|
typedef typename BinaryOp::second_argument_type second_argument_type;
|
|
456
|
-
typedef typename BinaryOp::result_type
|
|
725
|
+
typedef typename BinaryOp::result_type result_type;
|
|
457
726
|
|
|
458
|
-
bind2nd_op(const second_argument_type
|
|
727
|
+
EIGEN_DEVICE_FUNC explicit bind2nd_op(const second_argument_type& val) : m_value(val) {}
|
|
459
728
|
|
|
460
|
-
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const result_type operator()
|
|
729
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const result_type operator()(const first_argument_type& a) const {
|
|
730
|
+
return BinaryOp::operator()(a, m_value);
|
|
731
|
+
}
|
|
461
732
|
|
|
462
|
-
template<typename Packet>
|
|
463
|
-
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Packet packetOp(const Packet& a) const
|
|
464
|
-
|
|
733
|
+
template <typename Packet>
|
|
734
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const Packet packetOp(const Packet& a) const {
|
|
735
|
+
return BinaryOp::packetOp(a, internal::pset1<Packet>(m_value));
|
|
736
|
+
}
|
|
465
737
|
|
|
466
738
|
second_argument_type m_value;
|
|
467
739
|
};
|
|
468
|
-
template<typename BinaryOp>
|
|
469
|
-
|
|
740
|
+
template <typename BinaryOp>
|
|
741
|
+
struct functor_traits<bind2nd_op<BinaryOp>> : functor_traits<BinaryOp> {};
|
|
470
742
|
|
|
471
|
-
}
|
|
743
|
+
} // end namespace internal
|
|
472
744
|
|
|
473
|
-
}
|
|
745
|
+
} // end namespace Eigen
|
|
474
746
|
|
|
475
|
-
#endif
|
|
747
|
+
#endif // EIGEN_BINARY_FUNCTORS_H
|