qilisdk 0.1.8__cp312-cp312-macosx_11_0_arm64.whl
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.
- include/eigen3/Eigen/Cholesky +45 -0
- include/eigen3/Eigen/CholmodSupport +48 -0
- include/eigen3/Eigen/Core +384 -0
- include/eigen3/Eigen/Dense +7 -0
- include/eigen3/Eigen/Eigen +2 -0
- include/eigen3/Eigen/Eigenvalues +60 -0
- include/eigen3/Eigen/Geometry +59 -0
- include/eigen3/Eigen/Householder +29 -0
- include/eigen3/Eigen/IterativeLinearSolvers +48 -0
- include/eigen3/Eigen/Jacobi +32 -0
- include/eigen3/Eigen/KLUSupport +41 -0
- include/eigen3/Eigen/LU +47 -0
- include/eigen3/Eigen/MetisSupport +35 -0
- include/eigen3/Eigen/OrderingMethods +70 -0
- include/eigen3/Eigen/PaStiXSupport +49 -0
- include/eigen3/Eigen/PardisoSupport +35 -0
- include/eigen3/Eigen/QR +50 -0
- include/eigen3/Eigen/QtAlignedMalloc +39 -0
- include/eigen3/Eigen/SPQRSupport +34 -0
- include/eigen3/Eigen/SVD +50 -0
- include/eigen3/Eigen/Sparse +34 -0
- include/eigen3/Eigen/SparseCholesky +37 -0
- include/eigen3/Eigen/SparseCore +69 -0
- include/eigen3/Eigen/SparseLU +50 -0
- include/eigen3/Eigen/SparseQR +36 -0
- include/eigen3/Eigen/StdDeque +27 -0
- include/eigen3/Eigen/StdList +26 -0
- include/eigen3/Eigen/StdVector +27 -0
- include/eigen3/Eigen/SuperLUSupport +64 -0
- include/eigen3/Eigen/UmfPackSupport +40 -0
- include/eigen3/Eigen/src/Cholesky/LDLT.h +688 -0
- include/eigen3/Eigen/src/Cholesky/LLT.h +558 -0
- include/eigen3/Eigen/src/Cholesky/LLT_LAPACKE.h +99 -0
- include/eigen3/Eigen/src/CholmodSupport/CholmodSupport.h +682 -0
- include/eigen3/Eigen/src/Core/ArithmeticSequence.h +413 -0
- include/eigen3/Eigen/src/Core/Array.h +417 -0
- include/eigen3/Eigen/src/Core/ArrayBase.h +226 -0
- include/eigen3/Eigen/src/Core/ArrayWrapper.h +209 -0
- include/eigen3/Eigen/src/Core/Assign.h +90 -0
- include/eigen3/Eigen/src/Core/AssignEvaluator.h +1010 -0
- include/eigen3/Eigen/src/Core/Assign_MKL.h +178 -0
- include/eigen3/Eigen/src/Core/BandMatrix.h +353 -0
- include/eigen3/Eigen/src/Core/Block.h +448 -0
- include/eigen3/Eigen/src/Core/BooleanRedux.h +162 -0
- include/eigen3/Eigen/src/Core/CommaInitializer.h +164 -0
- include/eigen3/Eigen/src/Core/ConditionEstimator.h +175 -0
- include/eigen3/Eigen/src/Core/CoreEvaluators.h +1741 -0
- include/eigen3/Eigen/src/Core/CoreIterators.h +132 -0
- include/eigen3/Eigen/src/Core/CwiseBinaryOp.h +183 -0
- include/eigen3/Eigen/src/Core/CwiseNullaryOp.h +1001 -0
- include/eigen3/Eigen/src/Core/CwiseTernaryOp.h +197 -0
- include/eigen3/Eigen/src/Core/CwiseUnaryOp.h +103 -0
- include/eigen3/Eigen/src/Core/CwiseUnaryView.h +132 -0
- include/eigen3/Eigen/src/Core/DenseBase.h +701 -0
- include/eigen3/Eigen/src/Core/DenseCoeffsBase.h +685 -0
- include/eigen3/Eigen/src/Core/DenseStorage.h +652 -0
- include/eigen3/Eigen/src/Core/Diagonal.h +258 -0
- include/eigen3/Eigen/src/Core/DiagonalMatrix.h +391 -0
- include/eigen3/Eigen/src/Core/DiagonalProduct.h +28 -0
- include/eigen3/Eigen/src/Core/Dot.h +318 -0
- include/eigen3/Eigen/src/Core/EigenBase.h +160 -0
- include/eigen3/Eigen/src/Core/ForceAlignedAccess.h +150 -0
- include/eigen3/Eigen/src/Core/Fuzzy.h +155 -0
- include/eigen3/Eigen/src/Core/GeneralProduct.h +465 -0
- include/eigen3/Eigen/src/Core/GenericPacketMath.h +1040 -0
- include/eigen3/Eigen/src/Core/GlobalFunctions.h +194 -0
- include/eigen3/Eigen/src/Core/IO.h +258 -0
- include/eigen3/Eigen/src/Core/IndexedView.h +237 -0
- include/eigen3/Eigen/src/Core/Inverse.h +117 -0
- include/eigen3/Eigen/src/Core/Map.h +171 -0
- include/eigen3/Eigen/src/Core/MapBase.h +310 -0
- include/eigen3/Eigen/src/Core/MathFunctions.h +2057 -0
- include/eigen3/Eigen/src/Core/MathFunctionsImpl.h +200 -0
- include/eigen3/Eigen/src/Core/Matrix.h +565 -0
- include/eigen3/Eigen/src/Core/MatrixBase.h +547 -0
- include/eigen3/Eigen/src/Core/NestByValue.h +85 -0
- include/eigen3/Eigen/src/Core/NoAlias.h +109 -0
- include/eigen3/Eigen/src/Core/NumTraits.h +335 -0
- include/eigen3/Eigen/src/Core/PartialReduxEvaluator.h +232 -0
- include/eigen3/Eigen/src/Core/PermutationMatrix.h +605 -0
- include/eigen3/Eigen/src/Core/PlainObjectBase.h +1128 -0
- include/eigen3/Eigen/src/Core/Product.h +191 -0
- include/eigen3/Eigen/src/Core/ProductEvaluators.h +1179 -0
- include/eigen3/Eigen/src/Core/Random.h +218 -0
- include/eigen3/Eigen/src/Core/Redux.h +515 -0
- include/eigen3/Eigen/src/Core/Ref.h +381 -0
- include/eigen3/Eigen/src/Core/Replicate.h +142 -0
- include/eigen3/Eigen/src/Core/Reshaped.h +454 -0
- include/eigen3/Eigen/src/Core/ReturnByValue.h +119 -0
- include/eigen3/Eigen/src/Core/Reverse.h +217 -0
- include/eigen3/Eigen/src/Core/Select.h +164 -0
- include/eigen3/Eigen/src/Core/SelfAdjointView.h +365 -0
- include/eigen3/Eigen/src/Core/SelfCwiseBinaryOp.h +47 -0
- include/eigen3/Eigen/src/Core/Solve.h +188 -0
- include/eigen3/Eigen/src/Core/SolveTriangular.h +235 -0
- include/eigen3/Eigen/src/Core/SolverBase.h +168 -0
- include/eigen3/Eigen/src/Core/StableNorm.h +251 -0
- include/eigen3/Eigen/src/Core/StlIterators.h +463 -0
- include/eigen3/Eigen/src/Core/Stride.h +116 -0
- include/eigen3/Eigen/src/Core/Swap.h +68 -0
- include/eigen3/Eigen/src/Core/Transpose.h +464 -0
- include/eigen3/Eigen/src/Core/Transpositions.h +386 -0
- include/eigen3/Eigen/src/Core/TriangularMatrix.h +1001 -0
- include/eigen3/Eigen/src/Core/VectorBlock.h +96 -0
- include/eigen3/Eigen/src/Core/VectorwiseOp.h +784 -0
- include/eigen3/Eigen/src/Core/Visitor.h +381 -0
- include/eigen3/Eigen/src/Core/arch/AVX/Complex.h +372 -0
- include/eigen3/Eigen/src/Core/arch/AVX/MathFunctions.h +228 -0
- include/eigen3/Eigen/src/Core/arch/AVX/PacketMath.h +1574 -0
- include/eigen3/Eigen/src/Core/arch/AVX/TypeCasting.h +115 -0
- include/eigen3/Eigen/src/Core/arch/AVX512/Complex.h +422 -0
- include/eigen3/Eigen/src/Core/arch/AVX512/MathFunctions.h +362 -0
- include/eigen3/Eigen/src/Core/arch/AVX512/PacketMath.h +2303 -0
- include/eigen3/Eigen/src/Core/arch/AVX512/TypeCasting.h +89 -0
- include/eigen3/Eigen/src/Core/arch/AltiVec/Complex.h +417 -0
- include/eigen3/Eigen/src/Core/arch/AltiVec/MathFunctions.h +90 -0
- include/eigen3/Eigen/src/Core/arch/AltiVec/MatrixProduct.h +2937 -0
- include/eigen3/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h +221 -0
- include/eigen3/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h +629 -0
- include/eigen3/Eigen/src/Core/arch/AltiVec/PacketMath.h +2711 -0
- include/eigen3/Eigen/src/Core/arch/CUDA/Complex.h +258 -0
- include/eigen3/Eigen/src/Core/arch/Default/BFloat16.h +700 -0
- include/eigen3/Eigen/src/Core/arch/Default/ConjHelper.h +117 -0
- include/eigen3/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h +1649 -0
- include/eigen3/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h +110 -0
- include/eigen3/Eigen/src/Core/arch/Default/Half.h +942 -0
- include/eigen3/Eigen/src/Core/arch/Default/Settings.h +49 -0
- include/eigen3/Eigen/src/Core/arch/Default/TypeCasting.h +120 -0
- include/eigen3/Eigen/src/Core/arch/GPU/MathFunctions.h +103 -0
- include/eigen3/Eigen/src/Core/arch/GPU/PacketMath.h +1685 -0
- include/eigen3/Eigen/src/Core/arch/GPU/TypeCasting.h +80 -0
- include/eigen3/Eigen/src/Core/arch/HIP/hcc/math_constants.h +23 -0
- include/eigen3/Eigen/src/Core/arch/MSA/Complex.h +648 -0
- include/eigen3/Eigen/src/Core/arch/MSA/MathFunctions.h +387 -0
- include/eigen3/Eigen/src/Core/arch/MSA/PacketMath.h +1233 -0
- include/eigen3/Eigen/src/Core/arch/NEON/Complex.h +584 -0
- include/eigen3/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h +183 -0
- include/eigen3/Eigen/src/Core/arch/NEON/MathFunctions.h +75 -0
- include/eigen3/Eigen/src/Core/arch/NEON/PacketMath.h +4587 -0
- include/eigen3/Eigen/src/Core/arch/NEON/TypeCasting.h +1419 -0
- include/eigen3/Eigen/src/Core/arch/SSE/Complex.h +351 -0
- include/eigen3/Eigen/src/Core/arch/SSE/MathFunctions.h +199 -0
- include/eigen3/Eigen/src/Core/arch/SSE/PacketMath.h +1505 -0
- include/eigen3/Eigen/src/Core/arch/SSE/TypeCasting.h +142 -0
- include/eigen3/Eigen/src/Core/arch/SVE/MathFunctions.h +44 -0
- include/eigen3/Eigen/src/Core/arch/SVE/PacketMath.h +752 -0
- include/eigen3/Eigen/src/Core/arch/SVE/TypeCasting.h +49 -0
- include/eigen3/Eigen/src/Core/arch/SYCL/InteropHeaders.h +232 -0
- include/eigen3/Eigen/src/Core/arch/SYCL/MathFunctions.h +301 -0
- include/eigen3/Eigen/src/Core/arch/SYCL/PacketMath.h +670 -0
- include/eigen3/Eigen/src/Core/arch/SYCL/SyclMemoryModel.h +694 -0
- include/eigen3/Eigen/src/Core/arch/SYCL/TypeCasting.h +85 -0
- include/eigen3/Eigen/src/Core/arch/ZVector/Complex.h +426 -0
- include/eigen3/Eigen/src/Core/arch/ZVector/MathFunctions.h +233 -0
- include/eigen3/Eigen/src/Core/arch/ZVector/PacketMath.h +1060 -0
- include/eigen3/Eigen/src/Core/functors/AssignmentFunctors.h +177 -0
- include/eigen3/Eigen/src/Core/functors/BinaryFunctors.h +541 -0
- include/eigen3/Eigen/src/Core/functors/NullaryFunctors.h +189 -0
- include/eigen3/Eigen/src/Core/functors/StlFunctors.h +166 -0
- include/eigen3/Eigen/src/Core/functors/TernaryFunctors.h +25 -0
- include/eigen3/Eigen/src/Core/functors/UnaryFunctors.h +1131 -0
- include/eigen3/Eigen/src/Core/products/GeneralBlockPanelKernel.h +2645 -0
- include/eigen3/Eigen/src/Core/products/GeneralMatrixMatrix.h +517 -0
- include/eigen3/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +317 -0
- include/eigen3/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h +145 -0
- include/eigen3/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h +124 -0
- include/eigen3/Eigen/src/Core/products/GeneralMatrixVector.h +518 -0
- include/eigen3/Eigen/src/Core/products/GeneralMatrixVector_BLAS.h +136 -0
- include/eigen3/Eigen/src/Core/products/Parallelizer.h +180 -0
- include/eigen3/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +544 -0
- include/eigen3/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h +295 -0
- include/eigen3/Eigen/src/Core/products/SelfadjointMatrixVector.h +262 -0
- include/eigen3/Eigen/src/Core/products/SelfadjointMatrixVector_BLAS.h +118 -0
- include/eigen3/Eigen/src/Core/products/SelfadjointProduct.h +133 -0
- include/eigen3/Eigen/src/Core/products/SelfadjointRank2Update.h +94 -0
- include/eigen3/Eigen/src/Core/products/TriangularMatrixMatrix.h +472 -0
- include/eigen3/Eigen/src/Core/products/TriangularMatrixMatrix_BLAS.h +317 -0
- include/eigen3/Eigen/src/Core/products/TriangularMatrixVector.h +350 -0
- include/eigen3/Eigen/src/Core/products/TriangularMatrixVector_BLAS.h +255 -0
- include/eigen3/Eigen/src/Core/products/TriangularSolverMatrix.h +337 -0
- include/eigen3/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h +167 -0
- include/eigen3/Eigen/src/Core/products/TriangularSolverVector.h +148 -0
- include/eigen3/Eigen/src/Core/util/BlasUtil.h +583 -0
- include/eigen3/Eigen/src/Core/util/ConfigureVectorization.h +512 -0
- include/eigen3/Eigen/src/Core/util/Constants.h +563 -0
- include/eigen3/Eigen/src/Core/util/DisableStupidWarnings.h +106 -0
- include/eigen3/Eigen/src/Core/util/ForwardDeclarations.h +322 -0
- include/eigen3/Eigen/src/Core/util/IndexedViewHelper.h +186 -0
- include/eigen3/Eigen/src/Core/util/IntegralConstant.h +272 -0
- include/eigen3/Eigen/src/Core/util/MKL_support.h +137 -0
- include/eigen3/Eigen/src/Core/util/Macros.h +1464 -0
- include/eigen3/Eigen/src/Core/util/Memory.h +1163 -0
- include/eigen3/Eigen/src/Core/util/Meta.h +812 -0
- include/eigen3/Eigen/src/Core/util/NonMPL2.h +3 -0
- include/eigen3/Eigen/src/Core/util/ReenableStupidWarnings.h +31 -0
- include/eigen3/Eigen/src/Core/util/ReshapedHelper.h +51 -0
- include/eigen3/Eigen/src/Core/util/StaticAssert.h +221 -0
- include/eigen3/Eigen/src/Core/util/SymbolicIndex.h +293 -0
- include/eigen3/Eigen/src/Core/util/XprHelper.h +856 -0
- include/eigen3/Eigen/src/Eigenvalues/ComplexEigenSolver.h +346 -0
- include/eigen3/Eigen/src/Eigenvalues/ComplexSchur.h +462 -0
- include/eigen3/Eigen/src/Eigenvalues/ComplexSchur_LAPACKE.h +91 -0
- include/eigen3/Eigen/src/Eigenvalues/EigenSolver.h +622 -0
- include/eigen3/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h +418 -0
- include/eigen3/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h +226 -0
- include/eigen3/Eigen/src/Eigenvalues/HessenbergDecomposition.h +374 -0
- include/eigen3/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h +158 -0
- include/eigen3/Eigen/src/Eigenvalues/RealQZ.h +657 -0
- include/eigen3/Eigen/src/Eigenvalues/RealSchur.h +558 -0
- include/eigen3/Eigen/src/Eigenvalues/RealSchur_LAPACKE.h +77 -0
- include/eigen3/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +904 -0
- include/eigen3/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h +87 -0
- include/eigen3/Eigen/src/Eigenvalues/Tridiagonalization.h +561 -0
- include/eigen3/Eigen/src/Geometry/AlignedBox.h +486 -0
- include/eigen3/Eigen/src/Geometry/AngleAxis.h +247 -0
- include/eigen3/Eigen/src/Geometry/EulerAngles.h +114 -0
- include/eigen3/Eigen/src/Geometry/Homogeneous.h +501 -0
- include/eigen3/Eigen/src/Geometry/Hyperplane.h +282 -0
- include/eigen3/Eigen/src/Geometry/OrthoMethods.h +235 -0
- include/eigen3/Eigen/src/Geometry/ParametrizedLine.h +232 -0
- include/eigen3/Eigen/src/Geometry/Quaternion.h +870 -0
- include/eigen3/Eigen/src/Geometry/Rotation2D.h +199 -0
- include/eigen3/Eigen/src/Geometry/RotationBase.h +206 -0
- include/eigen3/Eigen/src/Geometry/Scaling.h +188 -0
- include/eigen3/Eigen/src/Geometry/Transform.h +1563 -0
- include/eigen3/Eigen/src/Geometry/Translation.h +202 -0
- include/eigen3/Eigen/src/Geometry/Umeyama.h +166 -0
- include/eigen3/Eigen/src/Geometry/arch/Geometry_SIMD.h +168 -0
- include/eigen3/Eigen/src/Householder/BlockHouseholder.h +110 -0
- include/eigen3/Eigen/src/Householder/Householder.h +176 -0
- include/eigen3/Eigen/src/Householder/HouseholderSequence.h +545 -0
- include/eigen3/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +226 -0
- include/eigen3/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +212 -0
- include/eigen3/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +229 -0
- include/eigen3/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +394 -0
- include/eigen3/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +453 -0
- include/eigen3/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +444 -0
- include/eigen3/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h +198 -0
- include/eigen3/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h +117 -0
- include/eigen3/Eigen/src/Jacobi/Jacobi.h +483 -0
- include/eigen3/Eigen/src/KLUSupport/KLUSupport.h +358 -0
- include/eigen3/Eigen/src/LU/Determinant.h +117 -0
- include/eigen3/Eigen/src/LU/FullPivLU.h +877 -0
- include/eigen3/Eigen/src/LU/InverseImpl.h +432 -0
- include/eigen3/Eigen/src/LU/PartialPivLU.h +624 -0
- include/eigen3/Eigen/src/LU/PartialPivLU_LAPACKE.h +83 -0
- include/eigen3/Eigen/src/LU/arch/InverseSize4.h +351 -0
- include/eigen3/Eigen/src/MetisSupport/MetisSupport.h +137 -0
- include/eigen3/Eigen/src/OrderingMethods/Amd.h +435 -0
- include/eigen3/Eigen/src/OrderingMethods/Eigen_Colamd.h +1863 -0
- include/eigen3/Eigen/src/OrderingMethods/Ordering.h +153 -0
- include/eigen3/Eigen/src/PaStiXSupport/PaStiXSupport.h +678 -0
- include/eigen3/Eigen/src/PardisoSupport/PardisoSupport.h +545 -0
- include/eigen3/Eigen/src/QR/ColPivHouseholderQR.h +674 -0
- include/eigen3/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h +97 -0
- include/eigen3/Eigen/src/QR/CompleteOrthogonalDecomposition.h +635 -0
- include/eigen3/Eigen/src/QR/FullPivHouseholderQR.h +713 -0
- include/eigen3/Eigen/src/QR/HouseholderQR.h +434 -0
- include/eigen3/Eigen/src/QR/HouseholderQR_LAPACKE.h +68 -0
- include/eigen3/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h +335 -0
- include/eigen3/Eigen/src/SVD/BDCSVD.h +1366 -0
- include/eigen3/Eigen/src/SVD/JacobiSVD.h +812 -0
- include/eigen3/Eigen/src/SVD/JacobiSVD_LAPACKE.h +91 -0
- include/eigen3/Eigen/src/SVD/SVDBase.h +376 -0
- include/eigen3/Eigen/src/SVD/UpperBidiagonalization.h +414 -0
- include/eigen3/Eigen/src/SparseCholesky/SimplicialCholesky.h +697 -0
- include/eigen3/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +174 -0
- include/eigen3/Eigen/src/SparseCore/AmbiVector.h +378 -0
- include/eigen3/Eigen/src/SparseCore/CompressedStorage.h +274 -0
- include/eigen3/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +352 -0
- include/eigen3/Eigen/src/SparseCore/MappedSparseMatrix.h +67 -0
- include/eigen3/Eigen/src/SparseCore/SparseAssign.h +270 -0
- include/eigen3/Eigen/src/SparseCore/SparseBlock.h +571 -0
- include/eigen3/Eigen/src/SparseCore/SparseColEtree.h +206 -0
- include/eigen3/Eigen/src/SparseCore/SparseCompressedBase.h +370 -0
- include/eigen3/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +722 -0
- include/eigen3/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +150 -0
- include/eigen3/Eigen/src/SparseCore/SparseDenseProduct.h +342 -0
- include/eigen3/Eigen/src/SparseCore/SparseDiagonalProduct.h +138 -0
- include/eigen3/Eigen/src/SparseCore/SparseDot.h +98 -0
- include/eigen3/Eigen/src/SparseCore/SparseFuzzy.h +29 -0
- include/eigen3/Eigen/src/SparseCore/SparseMap.h +305 -0
- include/eigen3/Eigen/src/SparseCore/SparseMatrix.h +1518 -0
- include/eigen3/Eigen/src/SparseCore/SparseMatrixBase.h +398 -0
- include/eigen3/Eigen/src/SparseCore/SparsePermutation.h +178 -0
- include/eigen3/Eigen/src/SparseCore/SparseProduct.h +181 -0
- include/eigen3/Eigen/src/SparseCore/SparseRedux.h +49 -0
- include/eigen3/Eigen/src/SparseCore/SparseRef.h +397 -0
- include/eigen3/Eigen/src/SparseCore/SparseSelfAdjointView.h +659 -0
- include/eigen3/Eigen/src/SparseCore/SparseSolverBase.h +124 -0
- include/eigen3/Eigen/src/SparseCore/SparseSparseProductWithPruning.h +198 -0
- include/eigen3/Eigen/src/SparseCore/SparseTranspose.h +92 -0
- include/eigen3/Eigen/src/SparseCore/SparseTriangularView.h +189 -0
- include/eigen3/Eigen/src/SparseCore/SparseUtil.h +186 -0
- include/eigen3/Eigen/src/SparseCore/SparseVector.h +478 -0
- include/eigen3/Eigen/src/SparseCore/SparseView.h +254 -0
- include/eigen3/Eigen/src/SparseCore/TriangularSolver.h +315 -0
- include/eigen3/Eigen/src/SparseLU/SparseLU.h +923 -0
- include/eigen3/Eigen/src/SparseLU/SparseLUImpl.h +66 -0
- include/eigen3/Eigen/src/SparseLU/SparseLU_Memory.h +226 -0
- include/eigen3/Eigen/src/SparseLU/SparseLU_Structs.h +110 -0
- include/eigen3/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h +375 -0
- include/eigen3/Eigen/src/SparseLU/SparseLU_Utils.h +80 -0
- include/eigen3/Eigen/src/SparseLU/SparseLU_column_bmod.h +181 -0
- include/eigen3/Eigen/src/SparseLU/SparseLU_column_dfs.h +179 -0
- include/eigen3/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h +107 -0
- include/eigen3/Eigen/src/SparseLU/SparseLU_gemm_kernel.h +280 -0
- include/eigen3/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h +126 -0
- include/eigen3/Eigen/src/SparseLU/SparseLU_kernel_bmod.h +130 -0
- include/eigen3/Eigen/src/SparseLU/SparseLU_panel_bmod.h +223 -0
- include/eigen3/Eigen/src/SparseLU/SparseLU_panel_dfs.h +258 -0
- include/eigen3/Eigen/src/SparseLU/SparseLU_pivotL.h +137 -0
- include/eigen3/Eigen/src/SparseLU/SparseLU_pruneL.h +136 -0
- include/eigen3/Eigen/src/SparseLU/SparseLU_relax_snode.h +83 -0
- include/eigen3/Eigen/src/SparseQR/SparseQR.h +758 -0
- include/eigen3/Eigen/src/StlSupport/StdDeque.h +116 -0
- include/eigen3/Eigen/src/StlSupport/StdList.h +106 -0
- include/eigen3/Eigen/src/StlSupport/StdVector.h +131 -0
- include/eigen3/Eigen/src/StlSupport/details.h +84 -0
- include/eigen3/Eigen/src/SuperLUSupport/SuperLUSupport.h +1025 -0
- include/eigen3/Eigen/src/UmfPackSupport/UmfPackSupport.h +642 -0
- include/eigen3/Eigen/src/misc/Image.h +82 -0
- include/eigen3/Eigen/src/misc/Kernel.h +79 -0
- include/eigen3/Eigen/src/misc/RealSvd2x2.h +55 -0
- include/eigen3/Eigen/src/misc/blas.h +440 -0
- include/eigen3/Eigen/src/misc/lapack.h +152 -0
- include/eigen3/Eigen/src/misc/lapacke.h +16292 -0
- include/eigen3/Eigen/src/misc/lapacke_mangling.h +17 -0
- include/eigen3/Eigen/src/plugins/ArrayCwiseBinaryOps.h +358 -0
- include/eigen3/Eigen/src/plugins/ArrayCwiseUnaryOps.h +696 -0
- include/eigen3/Eigen/src/plugins/BlockMethods.h +1442 -0
- include/eigen3/Eigen/src/plugins/CommonCwiseBinaryOps.h +115 -0
- include/eigen3/Eigen/src/plugins/CommonCwiseUnaryOps.h +177 -0
- include/eigen3/Eigen/src/plugins/IndexedViewMethods.h +262 -0
- include/eigen3/Eigen/src/plugins/MatrixCwiseBinaryOps.h +152 -0
- include/eigen3/Eigen/src/plugins/MatrixCwiseUnaryOps.h +95 -0
- include/eigen3/Eigen/src/plugins/ReshapedMethods.h +149 -0
- include/eigen3/signature_of_eigen3_matrix_library +1 -0
- include/eigen3/unsupported/Eigen/AdolcForward +159 -0
- include/eigen3/unsupported/Eigen/AlignedVector3 +234 -0
- include/eigen3/unsupported/Eigen/ArpackSupport +30 -0
- include/eigen3/unsupported/Eigen/AutoDiff +46 -0
- include/eigen3/unsupported/Eigen/BVH +95 -0
- include/eigen3/unsupported/Eigen/CXX11/Tensor +137 -0
- include/eigen3/unsupported/Eigen/CXX11/TensorSymmetry +42 -0
- include/eigen3/unsupported/Eigen/CXX11/ThreadPool +74 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/Tensor.h +554 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorArgMax.h +329 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorAssign.h +247 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorBase.h +1176 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorBlock.h +1559 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorBroadcasting.h +1093 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorChipping.h +518 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorConcatenation.h +377 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContraction.h +1023 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionBlocking.h +73 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionCuda.h +6 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionGpu.h +1413 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionMapper.h +575 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionSycl.h +1650 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionThreadPool.h +1679 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorConversion.h +456 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorConvolution.h +1132 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorConvolutionSycl.h +544 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorCostModel.h +214 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorCustomOp.h +347 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDevice.h +137 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDeviceCuda.h +6 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDeviceDefault.h +104 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDeviceGpu.h +389 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDeviceSycl.h +1048 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDeviceThreadPool.h +409 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDimensionList.h +236 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDimensions.h +490 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorEvalTo.h +236 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorEvaluator.h +983 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorExecutor.h +703 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorExpr.h +388 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorFFT.h +669 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorFixedSize.h +379 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorForcedEval.h +237 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorForwardDeclarations.h +191 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorFunctors.h +488 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorGenerator.h +302 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorGlobalFunctions.h +33 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorGpuHipCudaDefines.h +99 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorGpuHipCudaUndefines.h +44 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorIO.h +79 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorImagePatch.h +603 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorIndexList.h +738 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorInflation.h +247 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorInitializer.h +82 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorIntDiv.h +263 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorLayoutSwap.h +216 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorMacros.h +98 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorMap.h +327 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorMeta.h +311 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorMorphing.h +1102 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorPadding.h +708 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorPatch.h +291 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorRandom.h +322 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorReduction.h +998 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorReductionCuda.h +6 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorReductionGpu.h +966 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorReductionSycl.h +582 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorRef.h +454 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorReverse.h +465 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorScan.h +528 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorScanSycl.h +513 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorShuffling.h +471 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorStorage.h +161 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorStriding.h +346 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorTrace.h +303 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorTraits.h +264 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorUInt128.h +249 -0
- include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorVolumePatch.h +629 -0
- include/eigen3/unsupported/Eigen/CXX11/src/TensorSymmetry/DynamicSymmetry.h +293 -0
- include/eigen3/unsupported/Eigen/CXX11/src/TensorSymmetry/StaticSymmetry.h +236 -0
- include/eigen3/unsupported/Eigen/CXX11/src/TensorSymmetry/Symmetry.h +338 -0
- include/eigen3/unsupported/Eigen/CXX11/src/TensorSymmetry/util/TemplateGroupTheory.h +669 -0
- include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/Barrier.h +67 -0
- include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/EventCount.h +249 -0
- include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/NonBlockingThreadPool.h +486 -0
- include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/RunQueue.h +236 -0
- include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/ThreadCancel.h +23 -0
- include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/ThreadEnvironment.h +40 -0
- include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/ThreadLocal.h +301 -0
- include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/ThreadPoolInterface.h +48 -0
- include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/ThreadYield.h +20 -0
- include/eigen3/unsupported/Eigen/CXX11/src/util/CXX11Meta.h +537 -0
- include/eigen3/unsupported/Eigen/CXX11/src/util/CXX11Workarounds.h +88 -0
- include/eigen3/unsupported/Eigen/CXX11/src/util/EmulateArray.h +261 -0
- include/eigen3/unsupported/Eigen/CXX11/src/util/MaxSizeVector.h +158 -0
- include/eigen3/unsupported/Eigen/EulerAngles +43 -0
- include/eigen3/unsupported/Eigen/FFT +419 -0
- include/eigen3/unsupported/Eigen/IterativeSolvers +51 -0
- include/eigen3/unsupported/Eigen/KroneckerProduct +36 -0
- include/eigen3/unsupported/Eigen/LevenbergMarquardt +49 -0
- include/eigen3/unsupported/Eigen/MPRealSupport +213 -0
- include/eigen3/unsupported/Eigen/MatrixFunctions +504 -0
- include/eigen3/unsupported/Eigen/MoreVectorization +24 -0
- include/eigen3/unsupported/Eigen/NonLinearOptimization +140 -0
- include/eigen3/unsupported/Eigen/NumericalDiff +56 -0
- include/eigen3/unsupported/Eigen/OpenGLSupport +322 -0
- include/eigen3/unsupported/Eigen/Polynomials +137 -0
- include/eigen3/unsupported/Eigen/Skyline +39 -0
- include/eigen3/unsupported/Eigen/SparseExtra +54 -0
- include/eigen3/unsupported/Eigen/SpecialFunctions +103 -0
- include/eigen3/unsupported/Eigen/Splines +35 -0
- include/eigen3/unsupported/Eigen/src/AutoDiff/AutoDiffJacobian.h +108 -0
- include/eigen3/unsupported/Eigen/src/AutoDiff/AutoDiffScalar.h +730 -0
- include/eigen3/unsupported/Eigen/src/AutoDiff/AutoDiffVector.h +220 -0
- include/eigen3/unsupported/Eigen/src/BVH/BVAlgorithms.h +293 -0
- include/eigen3/unsupported/Eigen/src/BVH/KdBVH.h +223 -0
- include/eigen3/unsupported/Eigen/src/Eigenvalues/ArpackSelfAdjointEigenSolver.h +790 -0
- include/eigen3/unsupported/Eigen/src/EulerAngles/EulerAngles.h +355 -0
- include/eigen3/unsupported/Eigen/src/EulerAngles/EulerSystem.h +305 -0
- include/eigen3/unsupported/Eigen/src/FFT/ei_fftw_impl.h +261 -0
- include/eigen3/unsupported/Eigen/src/FFT/ei_kissfft_impl.h +449 -0
- include/eigen3/unsupported/Eigen/src/IterativeSolvers/ConstrainedConjGrad.h +187 -0
- include/eigen3/unsupported/Eigen/src/IterativeSolvers/DGMRES.h +511 -0
- include/eigen3/unsupported/Eigen/src/IterativeSolvers/GMRES.h +335 -0
- include/eigen3/unsupported/Eigen/src/IterativeSolvers/IDRS.h +436 -0
- include/eigen3/unsupported/Eigen/src/IterativeSolvers/IncompleteLU.h +90 -0
- include/eigen3/unsupported/Eigen/src/IterativeSolvers/IterationController.h +154 -0
- include/eigen3/unsupported/Eigen/src/IterativeSolvers/MINRES.h +267 -0
- include/eigen3/unsupported/Eigen/src/IterativeSolvers/Scaling.h +193 -0
- include/eigen3/unsupported/Eigen/src/KroneckerProduct/KroneckerTensorProduct.h +305 -0
- include/eigen3/unsupported/Eigen/src/LevenbergMarquardt/LMcovar.h +84 -0
- include/eigen3/unsupported/Eigen/src/LevenbergMarquardt/LMonestep.h +202 -0
- include/eigen3/unsupported/Eigen/src/LevenbergMarquardt/LMpar.h +160 -0
- include/eigen3/unsupported/Eigen/src/LevenbergMarquardt/LMqrsolv.h +188 -0
- include/eigen3/unsupported/Eigen/src/LevenbergMarquardt/LevenbergMarquardt.h +396 -0
- include/eigen3/unsupported/Eigen/src/MatrixFunctions/MatrixExponential.h +441 -0
- include/eigen3/unsupported/Eigen/src/MatrixFunctions/MatrixFunction.h +569 -0
- include/eigen3/unsupported/Eigen/src/MatrixFunctions/MatrixLogarithm.h +373 -0
- include/eigen3/unsupported/Eigen/src/MatrixFunctions/MatrixPower.h +705 -0
- include/eigen3/unsupported/Eigen/src/MatrixFunctions/MatrixSquareRoot.h +368 -0
- include/eigen3/unsupported/Eigen/src/MatrixFunctions/StemFunction.h +117 -0
- include/eigen3/unsupported/Eigen/src/MoreVectorization/MathFunctions.h +95 -0
- include/eigen3/unsupported/Eigen/src/NonLinearOptimization/HybridNonLinearSolver.h +601 -0
- include/eigen3/unsupported/Eigen/src/NonLinearOptimization/LevenbergMarquardt.h +657 -0
- include/eigen3/unsupported/Eigen/src/NonLinearOptimization/chkder.h +66 -0
- include/eigen3/unsupported/Eigen/src/NonLinearOptimization/covar.h +70 -0
- include/eigen3/unsupported/Eigen/src/NonLinearOptimization/dogleg.h +107 -0
- include/eigen3/unsupported/Eigen/src/NonLinearOptimization/fdjac1.h +79 -0
- include/eigen3/unsupported/Eigen/src/NonLinearOptimization/lmpar.h +298 -0
- include/eigen3/unsupported/Eigen/src/NonLinearOptimization/qrsolv.h +91 -0
- include/eigen3/unsupported/Eigen/src/NonLinearOptimization/r1mpyq.h +30 -0
- include/eigen3/unsupported/Eigen/src/NonLinearOptimization/r1updt.h +99 -0
- include/eigen3/unsupported/Eigen/src/NonLinearOptimization/rwupdt.h +49 -0
- include/eigen3/unsupported/Eigen/src/NumericalDiff/NumericalDiff.h +130 -0
- include/eigen3/unsupported/Eigen/src/Polynomials/Companion.h +280 -0
- include/eigen3/unsupported/Eigen/src/Polynomials/PolynomialSolver.h +428 -0
- include/eigen3/unsupported/Eigen/src/Polynomials/PolynomialUtils.h +143 -0
- include/eigen3/unsupported/Eigen/src/Skyline/SkylineInplaceLU.h +352 -0
- include/eigen3/unsupported/Eigen/src/Skyline/SkylineMatrix.h +862 -0
- include/eigen3/unsupported/Eigen/src/Skyline/SkylineMatrixBase.h +212 -0
- include/eigen3/unsupported/Eigen/src/Skyline/SkylineProduct.h +295 -0
- include/eigen3/unsupported/Eigen/src/Skyline/SkylineStorage.h +259 -0
- include/eigen3/unsupported/Eigen/src/Skyline/SkylineUtil.h +89 -0
- include/eigen3/unsupported/Eigen/src/SparseExtra/BlockOfDynamicSparseMatrix.h +122 -0
- include/eigen3/unsupported/Eigen/src/SparseExtra/BlockSparseMatrix.h +1079 -0
- include/eigen3/unsupported/Eigen/src/SparseExtra/DynamicSparseMatrix.h +404 -0
- include/eigen3/unsupported/Eigen/src/SparseExtra/MarketIO.h +282 -0
- include/eigen3/unsupported/Eigen/src/SparseExtra/MatrixMarketIterator.h +247 -0
- include/eigen3/unsupported/Eigen/src/SparseExtra/RandomSetter.h +349 -0
- include/eigen3/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsArrayAPI.h +286 -0
- include/eigen3/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsBFloat16.h +68 -0
- include/eigen3/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsFunctors.h +357 -0
- include/eigen3/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsHalf.h +66 -0
- include/eigen3/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsImpl.h +1959 -0
- include/eigen3/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsPacketMath.h +118 -0
- include/eigen3/unsupported/Eigen/src/SpecialFunctions/HipVectorCompatibility.h +67 -0
- include/eigen3/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsArrayAPI.h +167 -0
- include/eigen3/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsBFloat16.h +58 -0
- include/eigen3/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsFunctors.h +330 -0
- include/eigen3/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsHalf.h +58 -0
- include/eigen3/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsImpl.h +2045 -0
- include/eigen3/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsPacketMath.h +79 -0
- include/eigen3/unsupported/Eigen/src/SpecialFunctions/arch/AVX/BesselFunctions.h +46 -0
- include/eigen3/unsupported/Eigen/src/SpecialFunctions/arch/AVX/SpecialFunctions.h +16 -0
- include/eigen3/unsupported/Eigen/src/SpecialFunctions/arch/AVX512/BesselFunctions.h +46 -0
- include/eigen3/unsupported/Eigen/src/SpecialFunctions/arch/AVX512/SpecialFunctions.h +16 -0
- include/eigen3/unsupported/Eigen/src/SpecialFunctions/arch/GPU/SpecialFunctions.h +369 -0
- include/eigen3/unsupported/Eigen/src/SpecialFunctions/arch/NEON/BesselFunctions.h +54 -0
- include/eigen3/unsupported/Eigen/src/SpecialFunctions/arch/NEON/SpecialFunctions.h +34 -0
- include/eigen3/unsupported/Eigen/src/Splines/Spline.h +507 -0
- include/eigen3/unsupported/Eigen/src/Splines/SplineFitting.h +431 -0
- include/eigen3/unsupported/Eigen/src/Splines/SplineFwd.h +93 -0
- qilisdk/__init__.py +26 -0
- qilisdk/__init__.pyi +16 -0
- qilisdk/_logging.py +135 -0
- qilisdk/_optionals.py +137 -0
- qilisdk/analog/__init__.py +18 -0
- qilisdk/analog/exceptions.py +17 -0
- qilisdk/analog/hamiltonian.py +1068 -0
- qilisdk/analog/schedule.py +483 -0
- qilisdk/backends/__init__.py +46 -0
- qilisdk/backends/__init__.pyi +18 -0
- qilisdk/backends/backend.py +132 -0
- qilisdk/backends/cuda_backend.py +752 -0
- qilisdk/backends/qilisim.py +148 -0
- qilisdk/backends/qutip_backend.py +504 -0
- qilisdk/core/__init__.py +70 -0
- qilisdk/core/exceptions.py +29 -0
- qilisdk/core/interpolator.py +640 -0
- qilisdk/core/model.py +1012 -0
- qilisdk/core/parameterizable.py +133 -0
- qilisdk/core/qtensor.py +684 -0
- qilisdk/core/result.py +18 -0
- qilisdk/core/types.py +49 -0
- qilisdk/core/variables.py +2035 -0
- qilisdk/cost_functions/__init__.py +18 -0
- qilisdk/cost_functions/cost_function.py +77 -0
- qilisdk/cost_functions/model_cost_function.py +152 -0
- qilisdk/cost_functions/observable_cost_function.py +112 -0
- qilisdk/digital/__init__.py +67 -0
- qilisdk/digital/ansatz.py +382 -0
- qilisdk/digital/circuit.py +371 -0
- qilisdk/digital/circuit_transpiler.py +46 -0
- qilisdk/digital/circuit_transpiler_passes/__init__.py +18 -0
- qilisdk/digital/circuit_transpiler_passes/circuit_transpiler_pass.py +36 -0
- qilisdk/digital/circuit_transpiler_passes/decompose_multi_controlled_gates_pass.py +220 -0
- qilisdk/digital/circuit_transpiler_passes/numeric_helpers.py +82 -0
- qilisdk/digital/exceptions.py +37 -0
- qilisdk/digital/gates.py +1308 -0
- qilisdk/experiments/__init__.py +36 -0
- qilisdk/experiments/experiment_functional.py +212 -0
- qilisdk/experiments/experiment_result.py +247 -0
- qilisdk/functionals/__init__.py +29 -0
- qilisdk/functionals/functional.py +39 -0
- qilisdk/functionals/functional_result.py +18 -0
- qilisdk/functionals/sampling.py +89 -0
- qilisdk/functionals/sampling_result.py +92 -0
- qilisdk/functionals/time_evolution.py +111 -0
- qilisdk/functionals/time_evolution_result.py +91 -0
- qilisdk/functionals/variational_program.py +138 -0
- qilisdk/functionals/variational_program_result.py +69 -0
- qilisdk/logging_config.yaml +16 -0
- qilisdk/noise/__init__.py +56 -0
- qilisdk/noise/amplitude_damping.py +71 -0
- qilisdk/noise/bit_flip.py +45 -0
- qilisdk/noise/dephasing.py +69 -0
- qilisdk/noise/depolarizing.py +44 -0
- qilisdk/noise/gaussian_perturbation.py +69 -0
- qilisdk/noise/noise.py +20 -0
- qilisdk/noise/noise_abc.py +31 -0
- qilisdk/noise/noise_config.py +77 -0
- qilisdk/noise/noise_model.py +259 -0
- qilisdk/noise/offset_perturbation.py +39 -0
- qilisdk/noise/parameter_perturbation.py +45 -0
- qilisdk/noise/pauli_channel.py +115 -0
- qilisdk/noise/phase_flip.py +45 -0
- qilisdk/noise/protocols.py +107 -0
- qilisdk/noise/readout_assignment.py +60 -0
- qilisdk/noise/representations.py +149 -0
- qilisdk/noise/utils.py +90 -0
- qilisdk/optimizers/__init__.py +17 -0
- qilisdk/optimizers/optimizer.py +39 -0
- qilisdk/optimizers/optimizer_result.py +101 -0
- qilisdk/optimizers/scipy_optimizer.py +118 -0
- qilisdk/py.typed +0 -0
- qilisdk/settings.py +103 -0
- qilisdk/speqtrum/__init__.py +41 -0
- qilisdk/speqtrum/__init__.pyi +18 -0
- qilisdk/speqtrum/keyring.py +58 -0
- qilisdk/speqtrum/speqtrum.py +817 -0
- qilisdk/speqtrum/speqtrum_models.py +560 -0
- qilisdk/utils/__init__.py +13 -0
- qilisdk/utils/openfermion/__init__.py +38 -0
- qilisdk/utils/openfermion/__init__.pyi +17 -0
- qilisdk/utils/openfermion/openfermion.py +45 -0
- qilisdk/utils/openqasm2.py +215 -0
- qilisdk/utils/serialization.py +128 -0
- qilisdk/utils/trotterization/__init__.py +18 -0
- qilisdk/utils/trotterization/trotterization.py +127 -0
- qilisdk/utils/visualization/PlusJakartaSans-SemiBold.ttf +0 -0
- qilisdk/utils/visualization/__init__.py +24 -0
- qilisdk/utils/visualization/circuit_renderers.py +781 -0
- qilisdk/utils/visualization/schedule_renderers.py +175 -0
- qilisdk/utils/visualization/style.py +154 -0
- qilisdk/utils/visualization/themes.py +76 -0
- qilisdk/yaml.py +260 -0
- qilisdk-0.1.8.dist-info/METADATA +657 -0
- qilisdk-0.1.8.dist-info/RECORD +634 -0
- qilisdk-0.1.8.dist-info/WHEEL +5 -0
- qilisdk-0.1.8.dist-info/licenses/LICENCE +201 -0
- qilisim_module.cpython-312-darwin.so +0 -0
- share/eigen3/cmake/Eigen3Config.cmake +37 -0
- share/eigen3/cmake/Eigen3ConfigVersion.cmake +65 -0
- share/eigen3/cmake/Eigen3Targets.cmake +106 -0
- share/eigen3/cmake/UseEigen3.cmake +6 -0
- share/pkgconfig/eigen3.pc +9 -0
|
@@ -0,0 +1,752 @@
|
|
|
1
|
+
# Copyright 2025 Qilimanjaro Quantum Tech
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
from __future__ import annotations
|
|
15
|
+
|
|
16
|
+
from enum import Enum
|
|
17
|
+
from typing import TYPE_CHECKING, Callable, Type, TypeVar
|
|
18
|
+
|
|
19
|
+
import cudaq
|
|
20
|
+
import numpy as np
|
|
21
|
+
from cudaq import ElementaryOperator, OperatorSum, ScalarOperator, SpinOperatorTerm, State, evolve, operators, spin
|
|
22
|
+
from cudaq import Schedule as CudaSchedule
|
|
23
|
+
from loguru import logger
|
|
24
|
+
|
|
25
|
+
from qilisdk.analog.hamiltonian import Hamiltonian, PauliI, PauliOperator, PauliX, PauliY, PauliZ
|
|
26
|
+
from qilisdk.backends.backend import Backend
|
|
27
|
+
from qilisdk.core.qtensor import QTensor
|
|
28
|
+
from qilisdk.digital.circuit_transpiler_passes import DecomposeMultiControlledGatesPass
|
|
29
|
+
from qilisdk.digital.exceptions import UnsupportedGateError
|
|
30
|
+
from qilisdk.digital.gates import (
|
|
31
|
+
RX,
|
|
32
|
+
RY,
|
|
33
|
+
RZ,
|
|
34
|
+
SWAP,
|
|
35
|
+
U1,
|
|
36
|
+
U2,
|
|
37
|
+
U3,
|
|
38
|
+
Adjoint,
|
|
39
|
+
BasicGate,
|
|
40
|
+
Controlled,
|
|
41
|
+
Gate,
|
|
42
|
+
H,
|
|
43
|
+
I,
|
|
44
|
+
M,
|
|
45
|
+
S,
|
|
46
|
+
T,
|
|
47
|
+
X,
|
|
48
|
+
Y,
|
|
49
|
+
Z,
|
|
50
|
+
)
|
|
51
|
+
from qilisdk.functionals.sampling_result import SamplingResult
|
|
52
|
+
from qilisdk.functionals.time_evolution_result import TimeEvolutionResult
|
|
53
|
+
from qilisdk.noise import (
|
|
54
|
+
BitFlip,
|
|
55
|
+
Depolarizing,
|
|
56
|
+
LindbladGenerator,
|
|
57
|
+
Noise,
|
|
58
|
+
NoiseConfig,
|
|
59
|
+
PhaseFlip,
|
|
60
|
+
ReadoutAssignment,
|
|
61
|
+
SupportsStaticKraus,
|
|
62
|
+
SupportsStaticLindblad,
|
|
63
|
+
SupportsTimeDerivedKraus,
|
|
64
|
+
SupportsTimeDerivedLindblad,
|
|
65
|
+
)
|
|
66
|
+
from qilisdk.settings import Precision, get_settings
|
|
67
|
+
|
|
68
|
+
if TYPE_CHECKING:
|
|
69
|
+
from qilisdk.analog.schedule import Schedule
|
|
70
|
+
from qilisdk.digital.circuit import Circuit
|
|
71
|
+
from qilisdk.functionals.sampling import Sampling
|
|
72
|
+
from qilisdk.functionals.time_evolution import TimeEvolution
|
|
73
|
+
from qilisdk.noise import NoiseModel
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
def _complex_dtype() -> np.dtype:
|
|
77
|
+
return get_settings().complex_precision.dtype
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
TBasicGate = TypeVar("TBasicGate", bound=BasicGate)
|
|
81
|
+
BasicGateHandlersMapping = dict[Type[TBasicGate], Callable[[cudaq.Kernel, TBasicGate, cudaq.QuakeValue], None]]
|
|
82
|
+
|
|
83
|
+
TPauliOperator = TypeVar("TPauliOperator", bound=PauliOperator)
|
|
84
|
+
PauliOperatorHandlersMapping = dict[Type[TPauliOperator], Callable[[TPauliOperator], ElementaryOperator]]
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
def _to_cuda_noise(noise: Noise, gate_duration: float) -> cudaq.KrausChannel | None:
|
|
88
|
+
if isinstance(noise, BitFlip):
|
|
89
|
+
return cudaq.BitFlipChannel(noise.probability)
|
|
90
|
+
if isinstance(noise, PhaseFlip):
|
|
91
|
+
return cudaq.PhaseFlipChannel(noise.probability)
|
|
92
|
+
if isinstance(noise, Depolarizing):
|
|
93
|
+
return cudaq.DepolarizationChannel(noise.probability)
|
|
94
|
+
if isinstance(noise, SupportsTimeDerivedKraus):
|
|
95
|
+
kraus_channel = noise.as_kraus_from_duration(duration=gate_duration)
|
|
96
|
+
kraus_operators_np = [np.array(operator.dense(), dtype=np.complex128) for operator in kraus_channel.operators]
|
|
97
|
+
return cudaq.KrausChannel(kraus_operators_np)
|
|
98
|
+
if isinstance(noise, SupportsStaticKraus):
|
|
99
|
+
kraus_channel = noise.as_kraus()
|
|
100
|
+
kraus_operators_np = [np.array(operator.dense(), dtype=np.complex128) for operator in kraus_channel.operators]
|
|
101
|
+
return cudaq.KrausChannel(kraus_operators_np)
|
|
102
|
+
return None
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
class CudaSamplingMethod(str, Enum):
|
|
106
|
+
"""
|
|
107
|
+
Enumeration of available simulation methods for the CUDA backend.
|
|
108
|
+
"""
|
|
109
|
+
|
|
110
|
+
STATE_VECTOR = "state_vector"
|
|
111
|
+
TENSOR_NETWORK = "tensor_network"
|
|
112
|
+
MATRIX_PRODUCT_STATE = "matrix_product_state"
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
class CudaBackend(Backend):
|
|
116
|
+
"""
|
|
117
|
+
Backend implementation using CUDA-based simulation.
|
|
118
|
+
|
|
119
|
+
This backend translates a quantum circuit into a CUDA-compatible kernel and executes it
|
|
120
|
+
using the cudaq library. It supports different simulation methods including state vector,
|
|
121
|
+
tensor network, and matrix product state simulations. Gate operations in the circuit are
|
|
122
|
+
mapped to CUDA operations via dedicated handler functions.
|
|
123
|
+
"""
|
|
124
|
+
|
|
125
|
+
def __init__(
|
|
126
|
+
self,
|
|
127
|
+
sampling_method: CudaSamplingMethod = CudaSamplingMethod.STATE_VECTOR,
|
|
128
|
+
noise_model: NoiseModel | None = None,
|
|
129
|
+
) -> None:
|
|
130
|
+
"""
|
|
131
|
+
Initialize the CudaBackend.
|
|
132
|
+
|
|
133
|
+
Args:
|
|
134
|
+
sampling_method (CudaSamplingMethod, optional): The simulation method to use for sampling circuits.
|
|
135
|
+
Options include STATE_VECTOR, TENSOR_NETWORK, or MATRIX_PRODUCT_STATE.
|
|
136
|
+
Defaults to STATE_VECTOR.
|
|
137
|
+
"""
|
|
138
|
+
super().__init__()
|
|
139
|
+
cudaq.register_operation("i", np.array([1, 0, 0, 1], dtype=_complex_dtype()))
|
|
140
|
+
self._basic_gate_handlers: BasicGateHandlersMapping = {
|
|
141
|
+
I: CudaBackend._handle_I,
|
|
142
|
+
X: CudaBackend._handle_X,
|
|
143
|
+
Y: CudaBackend._handle_Y,
|
|
144
|
+
Z: CudaBackend._handle_Z,
|
|
145
|
+
H: CudaBackend._handle_H,
|
|
146
|
+
S: CudaBackend._handle_S,
|
|
147
|
+
T: CudaBackend._handle_T,
|
|
148
|
+
RX: CudaBackend._handle_RX,
|
|
149
|
+
RY: CudaBackend._handle_RY,
|
|
150
|
+
RZ: CudaBackend._handle_RZ,
|
|
151
|
+
U1: CudaBackend._handle_U1,
|
|
152
|
+
U2: CudaBackend._handle_U2,
|
|
153
|
+
U3: CudaBackend._handle_U3,
|
|
154
|
+
SWAP: CudaBackend._handle_SWAP,
|
|
155
|
+
}
|
|
156
|
+
self._pauli_operator_handlers: PauliOperatorHandlersMapping = {
|
|
157
|
+
PauliX: CudaBackend._handle_PauliX,
|
|
158
|
+
PauliY: CudaBackend._handle_PauliY,
|
|
159
|
+
PauliZ: CudaBackend._handle_PauliZ,
|
|
160
|
+
PauliI: CudaBackend._handle_PauliI,
|
|
161
|
+
}
|
|
162
|
+
self._sampling_method = sampling_method
|
|
163
|
+
self._noise_model = noise_model
|
|
164
|
+
logger.success("CudaBackend initialised (sampling_method={})", sampling_method.value)
|
|
165
|
+
|
|
166
|
+
@property
|
|
167
|
+
def sampling_method(self) -> CudaSamplingMethod:
|
|
168
|
+
"""
|
|
169
|
+
Get the simulation method currently configured for the backend.
|
|
170
|
+
|
|
171
|
+
Returns:
|
|
172
|
+
SimulationMethod: The simulation method to be used for circuit execution.
|
|
173
|
+
"""
|
|
174
|
+
return self._sampling_method
|
|
175
|
+
|
|
176
|
+
def _apply_digital_simulation_method(self) -> None:
|
|
177
|
+
"""
|
|
178
|
+
Configure the cudaq simulation target based on the selected simulation method.
|
|
179
|
+
|
|
180
|
+
For the STATE_VECTOR method, it checks for GPU availability and selects an appropriate target.
|
|
181
|
+
For TENSOR_NETWORK and MATRIX_PRODUCT_STATE methods, it explicitly sets the target to use tensor network-based simulations.
|
|
182
|
+
"""
|
|
183
|
+
logger.info("Applying sampling simulation method {}", self.sampling_method.value)
|
|
184
|
+
if self.sampling_method == CudaSamplingMethod.STATE_VECTOR:
|
|
185
|
+
if cudaq.num_available_gpus() == 0:
|
|
186
|
+
cudaq.set_target("qpp-cpu")
|
|
187
|
+
logger.debug("No GPU detected, using cudaq's 'qpp-cpu' backend")
|
|
188
|
+
else:
|
|
189
|
+
float_precision = "fp32" if get_settings().complex_precision == Precision.COMPLEX_64 else "fp64"
|
|
190
|
+
cudaq.set_target("nvidia", option=float_precision)
|
|
191
|
+
logger.debug("GPU detected, using cudaq's 'nvidia' backend")
|
|
192
|
+
elif self.sampling_method == CudaSamplingMethod.TENSOR_NETWORK:
|
|
193
|
+
cudaq.set_target("tensornet")
|
|
194
|
+
logger.debug("Using cudaq's 'tensornet' backend")
|
|
195
|
+
else:
|
|
196
|
+
cudaq.set_target("tensornet-mps")
|
|
197
|
+
logger.debug("Using cudaq's 'tensornet-mps' backend")
|
|
198
|
+
|
|
199
|
+
@staticmethod
|
|
200
|
+
def _handle_readout_errors(cudaq_result: dict[str, int], noise_model: NoiseModel, nqubits: int) -> dict[str, int]:
|
|
201
|
+
# Determine which qubits have readout assignment errors
|
|
202
|
+
readout_error_per_qubits = [(0.0, 0.0) for _ in range(nqubits)]
|
|
203
|
+
has_readout_error = False
|
|
204
|
+
for noise in noise_model.global_noise:
|
|
205
|
+
if isinstance(noise, ReadoutAssignment):
|
|
206
|
+
for qubit in range(nqubits):
|
|
207
|
+
readout_error_per_qubits[qubit] = (noise.p01, noise.p10)
|
|
208
|
+
has_readout_error = True
|
|
209
|
+
for qubit, noises in noise_model.per_qubit_noise.items():
|
|
210
|
+
for noise in noises:
|
|
211
|
+
if isinstance(noise, ReadoutAssignment):
|
|
212
|
+
readout_error_per_qubits[qubit] = (noise.p01, noise.p10)
|
|
213
|
+
has_readout_error = True
|
|
214
|
+
|
|
215
|
+
if not has_readout_error:
|
|
216
|
+
return cudaq_result
|
|
217
|
+
|
|
218
|
+
# numpy generator
|
|
219
|
+
gen = np.random.default_rng(42)
|
|
220
|
+
|
|
221
|
+
# First split into individual shots
|
|
222
|
+
shots = []
|
|
223
|
+
for bitstring, count in cudaq_result.items():
|
|
224
|
+
shots.extend([bitstring] * count)
|
|
225
|
+
|
|
226
|
+
# Convert each shot according to the readout error probabilities
|
|
227
|
+
adjusted_counts: dict[str, int] = {}
|
|
228
|
+
for shot in shots:
|
|
229
|
+
adjusted_shot = list(shot)
|
|
230
|
+
for qubit_index in range(nqubits):
|
|
231
|
+
p01, p10 = readout_error_per_qubits[qubit_index]
|
|
232
|
+
if shot[nqubits - 1 - qubit_index] == "0" and gen.random() < p01:
|
|
233
|
+
adjusted_shot[nqubits - 1 - qubit_index] = "1"
|
|
234
|
+
elif gen.random() < p10:
|
|
235
|
+
adjusted_shot[nqubits - 1 - qubit_index] = "0"
|
|
236
|
+
adjusted_bitstring = "".join(adjusted_shot)
|
|
237
|
+
adjusted_counts[adjusted_bitstring] = adjusted_counts.get(adjusted_bitstring, 0) + 1
|
|
238
|
+
|
|
239
|
+
# Set the new results
|
|
240
|
+
cudaq_result = adjusted_counts
|
|
241
|
+
|
|
242
|
+
return cudaq_result
|
|
243
|
+
|
|
244
|
+
@staticmethod
|
|
245
|
+
def _add_global_noise(
|
|
246
|
+
noise: Noise,
|
|
247
|
+
cuda_noise_model: cudaq.NoiseModel,
|
|
248
|
+
all_cuda_gate_names: dict[Type[BasicGate] | Type[Gate], str],
|
|
249
|
+
nqubits: int,
|
|
250
|
+
noise_config: NoiseConfig,
|
|
251
|
+
) -> None:
|
|
252
|
+
for gate, gate_name in all_cuda_gate_names.items():
|
|
253
|
+
if cuda_noise := _to_cuda_noise(noise, noise_config.get_gate_time(gate)):
|
|
254
|
+
# If it's a full size kraus channel, special treatment
|
|
255
|
+
if isinstance(noise, SupportsStaticKraus) and noise.as_kraus().operators:
|
|
256
|
+
dim = noise.as_kraus().operators[0].dense().shape[0]
|
|
257
|
+
if dim == 2**nqubits:
|
|
258
|
+
cuda_noise_model.add_channel(gate_name, list(range(nqubits)), cuda_noise)
|
|
259
|
+
continue
|
|
260
|
+
|
|
261
|
+
# Otherwise, add normally
|
|
262
|
+
cuda_noise_model.add_all_qubit_channel(gate_name, cuda_noise)
|
|
263
|
+
|
|
264
|
+
@staticmethod
|
|
265
|
+
def _add_per_gate_noise(
|
|
266
|
+
gate_type: Type[BasicGate] | Type[Gate],
|
|
267
|
+
noises: list[Noise],
|
|
268
|
+
cuda_noise_model: cudaq.NoiseModel,
|
|
269
|
+
all_cuda_gate_names: dict[Type[BasicGate] | Type[Gate], str],
|
|
270
|
+
noise_config: NoiseConfig,
|
|
271
|
+
) -> None:
|
|
272
|
+
for gate, gate_name in all_cuda_gate_names.items():
|
|
273
|
+
if gate_name == gate_type.__name__.lower():
|
|
274
|
+
for noise in noises:
|
|
275
|
+
if cuda_noise := _to_cuda_noise(noise, noise_config.get_gate_time(gate)):
|
|
276
|
+
cuda_noise_model.add_all_qubit_channel(gate_name, cuda_noise)
|
|
277
|
+
|
|
278
|
+
@staticmethod
|
|
279
|
+
def _add_per_qubit_noise(
|
|
280
|
+
qubit: int,
|
|
281
|
+
noises: list[Noise],
|
|
282
|
+
cuda_noise_model: cudaq.NoiseModel,
|
|
283
|
+
all_cuda_gate_names: dict[Type[BasicGate] | Type[Gate], str],
|
|
284
|
+
noise_config: NoiseConfig,
|
|
285
|
+
) -> None:
|
|
286
|
+
for noise in noises:
|
|
287
|
+
for gate, gate_name in all_cuda_gate_names.items():
|
|
288
|
+
if cuda_noise := _to_cuda_noise(noise, noise_config.get_gate_time(gate)):
|
|
289
|
+
cuda_noise_model.add_channel(gate_name, [qubit], cuda_noise)
|
|
290
|
+
|
|
291
|
+
@staticmethod
|
|
292
|
+
def _add_per_gate_per_qubit_noise(
|
|
293
|
+
gate_type: Type[BasicGate] | Type[Gate],
|
|
294
|
+
qubit: int,
|
|
295
|
+
noises: list[Noise],
|
|
296
|
+
cuda_noise_model: cudaq.NoiseModel,
|
|
297
|
+
all_cuda_gate_names: dict[Type[BasicGate] | Type[Gate], str],
|
|
298
|
+
noise_config: NoiseConfig,
|
|
299
|
+
) -> None:
|
|
300
|
+
for gate, gate_name in all_cuda_gate_names.items():
|
|
301
|
+
if gate_name == gate_type.__name__.lower():
|
|
302
|
+
for noise in noises:
|
|
303
|
+
if cuda_noise := _to_cuda_noise(noise, noise_config.get_gate_time(gate)):
|
|
304
|
+
cuda_noise_model.add_channel(gate_name, [qubit], cuda_noise)
|
|
305
|
+
|
|
306
|
+
def _noise_model_to_cudaq(self, noise_model: NoiseModel, nqubits: int) -> cudaq.NoiseModel:
|
|
307
|
+
all_cuda_gate_names = {
|
|
308
|
+
gate: gate.__name__.lower()
|
|
309
|
+
for gate in self._basic_gate_handlers
|
|
310
|
+
if gate.__name__.lower() not in {"u1", "u2", "swap"}
|
|
311
|
+
}
|
|
312
|
+
cuda_noise_model = cudaq.NoiseModel()
|
|
313
|
+
|
|
314
|
+
# Global noise
|
|
315
|
+
for noise in noise_model.global_noise:
|
|
316
|
+
self._add_global_noise(noise, cuda_noise_model, all_cuda_gate_names, nqubits, noise_model.noise_config)
|
|
317
|
+
|
|
318
|
+
# Per gate noise
|
|
319
|
+
for gate_type, noises in noise_model.per_gate_noise.items():
|
|
320
|
+
self._add_per_gate_noise(gate_type, noises, cuda_noise_model, all_cuda_gate_names, noise_model.noise_config)
|
|
321
|
+
|
|
322
|
+
# Per qubit noise
|
|
323
|
+
for qubit, noises in noise_model.per_qubit_noise.items():
|
|
324
|
+
self._add_per_qubit_noise(qubit, noises, cuda_noise_model, all_cuda_gate_names, noise_model.noise_config)
|
|
325
|
+
|
|
326
|
+
# Per gate per qubit noise
|
|
327
|
+
for (gate_type, qubit), noises in noise_model.per_gate_per_qubit_noise.items():
|
|
328
|
+
self._add_per_gate_per_qubit_noise(
|
|
329
|
+
gate_type, qubit, noises, cuda_noise_model, all_cuda_gate_names, noise_model.noise_config
|
|
330
|
+
)
|
|
331
|
+
|
|
332
|
+
return cuda_noise_model
|
|
333
|
+
|
|
334
|
+
@staticmethod
|
|
335
|
+
def _handle_gate_parameter_perturbations(circuit: Circuit, noise_model: NoiseModel) -> None:
|
|
336
|
+
circuit_parameters = circuit.get_parameters()
|
|
337
|
+
for parameter, perturbations in noise_model.global_perturbations.items():
|
|
338
|
+
parameter_name = parameter.label if not isinstance(parameter, str) else parameter
|
|
339
|
+
if parameter_name in circuit_parameters:
|
|
340
|
+
for perturbation in perturbations:
|
|
341
|
+
circuit.set_parameters({parameter_name: perturbation.perturb(circuit_parameters[parameter_name])})
|
|
342
|
+
for (gate_type, parameter), perturbations in noise_model.per_gate_perturbations.items():
|
|
343
|
+
for gate in circuit.gates:
|
|
344
|
+
true_name_to_gate_param_name = {param: param_name for param_name, param in gate.parameters.items()}
|
|
345
|
+
if isinstance(gate, gate_type) and parameter in true_name_to_gate_param_name:
|
|
346
|
+
gate_parameters = gate.get_parameters()
|
|
347
|
+
gate_param_name = true_name_to_gate_param_name[parameter]
|
|
348
|
+
for perturbation in perturbations:
|
|
349
|
+
gate.set_parameters({gate_param_name: perturbation.perturb(gate_parameters[gate_param_name])})
|
|
350
|
+
|
|
351
|
+
def _execute_sampling(self, functional: Sampling) -> SamplingResult:
|
|
352
|
+
logger.info("Executing Sampling (shots={})", functional.nshots)
|
|
353
|
+
self._apply_digital_simulation_method()
|
|
354
|
+
kernel = cudaq.make_kernel()
|
|
355
|
+
qubits = kernel.qalloc(functional.circuit.nqubits)
|
|
356
|
+
|
|
357
|
+
# Apply parameter perturbations
|
|
358
|
+
if self._noise_model:
|
|
359
|
+
self._handle_gate_parameter_perturbations(functional.circuit, self._noise_model)
|
|
360
|
+
|
|
361
|
+
# Transpile the circuit into CUDAQ format
|
|
362
|
+
transpiled_circuit = DecomposeMultiControlledGatesPass().run(functional.circuit)
|
|
363
|
+
for gate in transpiled_circuit.gates:
|
|
364
|
+
if isinstance(gate, Controlled):
|
|
365
|
+
self._handle_controlled(kernel, gate, qubits[gate.control_qubits[0]], qubits[gate.target_qubits[0]])
|
|
366
|
+
elif isinstance(gate, Adjoint):
|
|
367
|
+
self._handle_adjoint(kernel, gate, qubits[gate.target_qubits[0]])
|
|
368
|
+
elif isinstance(gate, M):
|
|
369
|
+
self._handle_M(kernel, gate, transpiled_circuit, qubits)
|
|
370
|
+
else:
|
|
371
|
+
handler = self._basic_gate_handlers.get(type(gate), None)
|
|
372
|
+
if handler is None:
|
|
373
|
+
raise UnsupportedGateError(f"Unsupported gate {type(gate).__name__}")
|
|
374
|
+
handler(kernel, gate, *(qubits[gate.target_qubits[i]] for i in range(len(gate.target_qubits))))
|
|
375
|
+
|
|
376
|
+
if self._noise_model:
|
|
377
|
+
cuda_noise_model = self._noise_model_to_cudaq(self._noise_model, functional.circuit.nqubits)
|
|
378
|
+
cudaq_result = cudaq.sample(kernel, shots_count=functional.nshots, noise_model=cuda_noise_model)
|
|
379
|
+
cudaq_result = self._handle_readout_errors(cudaq_result, self._noise_model, functional.circuit.nqubits)
|
|
380
|
+
else:
|
|
381
|
+
cudaq_result = cudaq.sample(kernel, shots_count=functional.nshots)
|
|
382
|
+
|
|
383
|
+
logger.success("Sampling finished; {} distinct bitstrings", len(cudaq_result))
|
|
384
|
+
return SamplingResult(nshots=functional.nshots, samples=dict(cudaq_result.items()))
|
|
385
|
+
|
|
386
|
+
@staticmethod
|
|
387
|
+
def _handle_schedule_parameter_perturbations(schedule: Schedule, noise_model: NoiseModel) -> None:
|
|
388
|
+
if noise_model.global_perturbations:
|
|
389
|
+
schedule_parameters = schedule.get_parameters()
|
|
390
|
+
for parameter, perturbations in noise_model.global_perturbations.items():
|
|
391
|
+
parameter_name = parameter.label if not isinstance(parameter, str) else parameter
|
|
392
|
+
if parameter_name in schedule_parameters:
|
|
393
|
+
for perturbation in perturbations:
|
|
394
|
+
schedule.set_parameters(
|
|
395
|
+
{parameter_name: perturbation.perturb(schedule_parameters[parameter_name])}
|
|
396
|
+
)
|
|
397
|
+
|
|
398
|
+
def _add_global_noise_dynamics(
|
|
399
|
+
self,
|
|
400
|
+
ops_numpy: list,
|
|
401
|
+
jump_operators: list[OperatorSum],
|
|
402
|
+
hamiltonian_deltas: list[OperatorSum],
|
|
403
|
+
lindblad_generator: LindbladGenerator,
|
|
404
|
+
nqubits: int,
|
|
405
|
+
) -> None:
|
|
406
|
+
for i, operator in enumerate(lindblad_generator.jump_operators_with_rates):
|
|
407
|
+
op_id = f"jump_op_{i}"
|
|
408
|
+
ops_numpy.append(np.array(operator.dense(), dtype=np.complex128))
|
|
409
|
+
operators.define(
|
|
410
|
+
id=op_id,
|
|
411
|
+
expected_dimensions=[2 for _ in range(nqubits)],
|
|
412
|
+
create=lambda op_np=ops_numpy[-1]: op_np,
|
|
413
|
+
override=True,
|
|
414
|
+
)
|
|
415
|
+
dim = ops_numpy[-1].shape[0]
|
|
416
|
+
if dim == 2**nqubits:
|
|
417
|
+
jump_operators.append(operators.instantiate(op_id, degrees=list(range(nqubits))))
|
|
418
|
+
else:
|
|
419
|
+
for qubit in range(nqubits):
|
|
420
|
+
jump_operators.append(operators.instantiate(op_id, degrees=qubit))
|
|
421
|
+
if lindblad_generator.hamiltonian is not None:
|
|
422
|
+
hamiltonian_deltas.append(self._hamiltonian_to_cuda(lindblad_generator.hamiltonian))
|
|
423
|
+
|
|
424
|
+
def _add_per_qubit_noise_dynamics(
|
|
425
|
+
self,
|
|
426
|
+
ops_numpy: list,
|
|
427
|
+
jump_operators: list[OperatorSum],
|
|
428
|
+
hamiltonian_deltas: list[OperatorSum],
|
|
429
|
+
lindblad_generator: LindbladGenerator,
|
|
430
|
+
qubit: int,
|
|
431
|
+
) -> None:
|
|
432
|
+
for i, operator in enumerate(lindblad_generator.jump_operators_with_rates):
|
|
433
|
+
op_id = f"jump_op_q{qubit}_{i}"
|
|
434
|
+
ops_numpy.append(np.array(operator.dense(), dtype=np.complex128))
|
|
435
|
+
operators.define(
|
|
436
|
+
id=op_id,
|
|
437
|
+
expected_dimensions=[ops_numpy[-1].shape[0]],
|
|
438
|
+
create=lambda op_np=ops_numpy[-1]: op_np,
|
|
439
|
+
override=True,
|
|
440
|
+
)
|
|
441
|
+
jump_operators.append(operators.instantiate(op_id, degrees=qubit))
|
|
442
|
+
if lindblad_generator.hamiltonian is not None:
|
|
443
|
+
hamiltonian_deltas.append(self._hamiltonian_to_cuda(lindblad_generator.hamiltonian))
|
|
444
|
+
|
|
445
|
+
def _noise_model_to_cudaq_dynamics(
|
|
446
|
+
self, noise_model: NoiseModel, nqubits: int, dt: float
|
|
447
|
+
) -> tuple[list[OperatorSum], list]:
|
|
448
|
+
ops_numpy: list[np.ndarray] = []
|
|
449
|
+
jump_operators: list[OperatorSum] = []
|
|
450
|
+
hamiltonian_deltas: list[OperatorSum] = []
|
|
451
|
+
|
|
452
|
+
# Global noise
|
|
453
|
+
for noise in noise_model.global_noise:
|
|
454
|
+
if isinstance(noise, SupportsStaticLindblad):
|
|
455
|
+
lindblad_generator = noise.as_lindblad()
|
|
456
|
+
self._add_global_noise_dynamics(
|
|
457
|
+
ops_numpy, jump_operators, hamiltonian_deltas, lindblad_generator, nqubits
|
|
458
|
+
)
|
|
459
|
+
elif isinstance(noise, SupportsTimeDerivedLindblad):
|
|
460
|
+
lindblad_generator = noise.as_lindblad_from_duration(duration=dt)
|
|
461
|
+
self._add_global_noise_dynamics(
|
|
462
|
+
ops_numpy, jump_operators, hamiltonian_deltas, lindblad_generator, nqubits
|
|
463
|
+
)
|
|
464
|
+
|
|
465
|
+
# Per qubit noise
|
|
466
|
+
for qubit, noises in noise_model.per_qubit_noise.items():
|
|
467
|
+
for noise in noises:
|
|
468
|
+
if isinstance(noise, SupportsStaticLindblad):
|
|
469
|
+
lindblad_generator = noise.as_lindblad()
|
|
470
|
+
self._add_per_qubit_noise_dynamics(
|
|
471
|
+
ops_numpy, jump_operators, hamiltonian_deltas, lindblad_generator, qubit
|
|
472
|
+
)
|
|
473
|
+
elif isinstance(noise, SupportsTimeDerivedLindblad):
|
|
474
|
+
lindblad_generator = noise.as_lindblad_from_duration(duration=dt)
|
|
475
|
+
self._add_per_qubit_noise_dynamics(
|
|
476
|
+
ops_numpy, jump_operators, hamiltonian_deltas, lindblad_generator, qubit
|
|
477
|
+
)
|
|
478
|
+
|
|
479
|
+
# Remove any constant terms from the deltas
|
|
480
|
+
hamiltonian_deltas = [CudaBackend._remove_constant_terms(delta) for delta in hamiltonian_deltas]
|
|
481
|
+
|
|
482
|
+
return jump_operators, hamiltonian_deltas
|
|
483
|
+
|
|
484
|
+
@staticmethod
|
|
485
|
+
def _remove_constant_terms(operator_sum: OperatorSum) -> OperatorSum:
|
|
486
|
+
new_operator_sum = None
|
|
487
|
+
for term in operator_sum:
|
|
488
|
+
if isinstance(term, SpinOperatorTerm) and not term.is_identity():
|
|
489
|
+
if new_operator_sum is None:
|
|
490
|
+
new_operator_sum = term
|
|
491
|
+
else:
|
|
492
|
+
new_operator_sum += term
|
|
493
|
+
if new_operator_sum is None:
|
|
494
|
+
new_operator_sum = ScalarOperator(0.0)
|
|
495
|
+
return new_operator_sum
|
|
496
|
+
|
|
497
|
+
def _execute_time_evolution(self, functional: TimeEvolution) -> TimeEvolutionResult:
|
|
498
|
+
logger.info("Executing TimeEvolution (T={}, dt={})", functional.schedule.T, functional.schedule.dt)
|
|
499
|
+
cudaq.set_target("dynamics")
|
|
500
|
+
|
|
501
|
+
# Apply parameter perturbations
|
|
502
|
+
if self._noise_model and self._noise_model.global_perturbations:
|
|
503
|
+
self._handle_schedule_parameter_perturbations(functional.schedule, self._noise_model)
|
|
504
|
+
|
|
505
|
+
steps = functional.schedule.tlist
|
|
506
|
+
|
|
507
|
+
cuda_schedule = CudaSchedule(steps, ["t"])
|
|
508
|
+
|
|
509
|
+
def get_schedule(key: str) -> Callable[[complex], float]:
|
|
510
|
+
return lambda t: (functional.schedule.coefficients[key][t.real])
|
|
511
|
+
|
|
512
|
+
cuda_hamiltonian = sum(
|
|
513
|
+
ScalarOperator(get_schedule(key)) * self._hamiltonian_to_cuda(ham)
|
|
514
|
+
for key, ham in functional.schedule.hamiltonians.items()
|
|
515
|
+
)
|
|
516
|
+
|
|
517
|
+
logger.trace("Hamiltonian compiled for evolution")
|
|
518
|
+
|
|
519
|
+
cuda_observables = []
|
|
520
|
+
for observable in functional.observables:
|
|
521
|
+
if isinstance(observable, PauliOperator):
|
|
522
|
+
cuda_observables.append(self._pauli_operator_handlers[type(observable)](observable))
|
|
523
|
+
elif isinstance(observable, Hamiltonian):
|
|
524
|
+
cuda_observables.append(self._hamiltonian_to_cuda(observable))
|
|
525
|
+
else:
|
|
526
|
+
logger.error("Unsupported observable type {}", observable.__class__.__name__)
|
|
527
|
+
raise ValueError(f"unsupported observable type of {observable.__class__}")
|
|
528
|
+
logger.trace("Observables compiled for evolution")
|
|
529
|
+
|
|
530
|
+
# Add noise
|
|
531
|
+
jump_operators: list[OperatorSum] = []
|
|
532
|
+
hamiltonian_deltas: list[OperatorSum] = []
|
|
533
|
+
if self._noise_model:
|
|
534
|
+
jump_operators, hamiltonian_deltas = self._noise_model_to_cudaq_dynamics(
|
|
535
|
+
self._noise_model, functional.schedule.nqubits, functional.schedule.dt
|
|
536
|
+
)
|
|
537
|
+
|
|
538
|
+
# Remove any constant terms from the Hamiltonian, also add the deltas
|
|
539
|
+
cuda_hamiltonian = self._remove_constant_terms(cuda_hamiltonian)
|
|
540
|
+
for delta in hamiltonian_deltas:
|
|
541
|
+
cuda_hamiltonian += delta
|
|
542
|
+
|
|
543
|
+
evolution_result = evolve(
|
|
544
|
+
hamiltonian=cuda_hamiltonian,
|
|
545
|
+
dimensions=dict.fromkeys(range(functional.schedule.nqubits), 2),
|
|
546
|
+
schedule=cuda_schedule,
|
|
547
|
+
initial_state=State.from_data(np.array(functional.initial_state.unit().dense(), dtype=np.complex128)),
|
|
548
|
+
observables=cuda_observables,
|
|
549
|
+
collapse_operators=jump_operators,
|
|
550
|
+
store_intermediate_results=functional.store_intermediate_results,
|
|
551
|
+
)
|
|
552
|
+
|
|
553
|
+
logger.success("TimeEvolution finished")
|
|
554
|
+
|
|
555
|
+
final_expected_values = np.array(
|
|
556
|
+
[exp_val.expectation() for exp_val in evolution_result.final_expectation_values()], # ty:ignore[possibly-missing-attribute]
|
|
557
|
+
dtype=_complex_dtype(),
|
|
558
|
+
)
|
|
559
|
+
expected_values = (
|
|
560
|
+
np.array(
|
|
561
|
+
[[val.expectation() for val in exp_vals] for exp_vals in evolution_result.expectation_values()], # ty:ignore[possibly-missing-attribute]
|
|
562
|
+
dtype=_complex_dtype(),
|
|
563
|
+
)
|
|
564
|
+
if evolution_result.expectation_values() is not None and functional.store_intermediate_results # ty:ignore[possibly-missing-attribute]
|
|
565
|
+
else None
|
|
566
|
+
)
|
|
567
|
+
final_state = (
|
|
568
|
+
QTensor(np.array(evolution_result.final_state(), dtype=_complex_dtype()).reshape(-1, 1)) # ty:ignore[possibly-missing-attribute]
|
|
569
|
+
if evolution_result.final_state() is not None # ty:ignore[possibly-missing-attribute]
|
|
570
|
+
else None
|
|
571
|
+
)
|
|
572
|
+
intermediate_states = (
|
|
573
|
+
[
|
|
574
|
+
QTensor(np.array(state, dtype=_complex_dtype()).reshape(-1, 1))
|
|
575
|
+
for state in evolution_result.intermediate_states() # ty:ignore[possibly-missing-attribute]
|
|
576
|
+
]
|
|
577
|
+
if evolution_result.intermediate_states() is not None and functional.store_intermediate_results # ty:ignore[possibly-missing-attribute]
|
|
578
|
+
else None
|
|
579
|
+
)
|
|
580
|
+
|
|
581
|
+
return TimeEvolutionResult(
|
|
582
|
+
final_expected_values=final_expected_values,
|
|
583
|
+
expected_values=expected_values,
|
|
584
|
+
final_state=final_state,
|
|
585
|
+
intermediate_states=intermediate_states,
|
|
586
|
+
)
|
|
587
|
+
|
|
588
|
+
def _handle_controlled(
|
|
589
|
+
self, kernel: cudaq.Kernel, gate: Controlled, control_qubit: cudaq.QuakeValue, target_qubit: cudaq.QuakeValue
|
|
590
|
+
) -> None:
|
|
591
|
+
"""
|
|
592
|
+
Handle a controlled gate operation.
|
|
593
|
+
|
|
594
|
+
This method processes a controlled gate by creating a temporary kernel for the basic gate,
|
|
595
|
+
applying its handler, and then integrating it into the main kernel as a controlled operation.
|
|
596
|
+
|
|
597
|
+
Args:
|
|
598
|
+
kernel (cudaq.Kernel): The main CUDA kernel being constructed.
|
|
599
|
+
gate (Controlled): The controlled gate to be handled.
|
|
600
|
+
control_qubit (cudaq.QuakeValue): The control qubit for the gate.
|
|
601
|
+
target_qubit (cudaq.QuakeValue): The target qubit for the gate.
|
|
602
|
+
|
|
603
|
+
Raises:
|
|
604
|
+
UnsupportedGateError: If the number of control qubits is not equal to one or if the basic gate is unsupported.
|
|
605
|
+
"""
|
|
606
|
+
if len(gate.control_qubits) != 1:
|
|
607
|
+
logger.error("Controlled gate with {} control qubits not supported", len(gate.control_qubits))
|
|
608
|
+
raise UnsupportedGateError
|
|
609
|
+
target_kernel, qubit = cudaq.make_kernel(cudaq.qubit)
|
|
610
|
+
handler = self._basic_gate_handlers.get(type(gate.basic_gate), None)
|
|
611
|
+
if handler is None:
|
|
612
|
+
logger.error("Unsupported gate inside Controlled: {}", type(gate.basic_gate).__name__)
|
|
613
|
+
raise UnsupportedGateError
|
|
614
|
+
handler(target_kernel, gate.basic_gate, qubit)
|
|
615
|
+
kernel.control(target_kernel, control_qubit, target_qubit)
|
|
616
|
+
|
|
617
|
+
def _handle_adjoint(self, kernel: cudaq.Kernel, gate: Adjoint, target_qubit: cudaq.QuakeValue) -> None:
|
|
618
|
+
"""
|
|
619
|
+
Handle an adjoint (inverse) gate operation.
|
|
620
|
+
|
|
621
|
+
This method creates a temporary kernel for the basic gate wrapped by the adjoint,
|
|
622
|
+
applies the corresponding handler, and then integrates it into the main kernel as an adjoint operation.
|
|
623
|
+
|
|
624
|
+
Args:
|
|
625
|
+
kernel (cudaq.Kernel): The main CUDA kernel being constructed.
|
|
626
|
+
gate (Adjoint): The adjoint gate to be handled.
|
|
627
|
+
target_qubit (cudaq.QuakeValue): The target qubit for the gate.
|
|
628
|
+
|
|
629
|
+
Raises:
|
|
630
|
+
UnsupportedGateError: If the basic gate inside the adjoint is unsupported.
|
|
631
|
+
"""
|
|
632
|
+
target_kernel, qubit = cudaq.make_kernel(cudaq.qubit)
|
|
633
|
+
handler = self._basic_gate_handlers.get(type(gate.basic_gate), None)
|
|
634
|
+
if handler is None:
|
|
635
|
+
logger.error("Unsupported gate inside Adjoint: {}", type(gate.basic_gate).__name__)
|
|
636
|
+
raise UnsupportedGateError
|
|
637
|
+
handler(target_kernel, gate.basic_gate, qubit)
|
|
638
|
+
kernel.adjoint(target_kernel, target_qubit)
|
|
639
|
+
|
|
640
|
+
@staticmethod
|
|
641
|
+
def _handle_M(kernel: cudaq.Kernel, gate: M, circuit: Circuit, qubits: cudaq.QuakeValue) -> None:
|
|
642
|
+
"""
|
|
643
|
+
Handle a measurement gate.
|
|
644
|
+
|
|
645
|
+
Depending on whether the measurement targets all qubits or a subset,
|
|
646
|
+
this method applies measurement operations accordingly.
|
|
647
|
+
|
|
648
|
+
Args:
|
|
649
|
+
kernel (cudaq.Kernel): The CUDA kernel being constructed.
|
|
650
|
+
gate (M): The measurement gate.
|
|
651
|
+
circuit (Circuit): The circuit containing the measurement gate.
|
|
652
|
+
qubits (cudaq.QuakeValue): The allocated qubits for the circuit.
|
|
653
|
+
"""
|
|
654
|
+
if gate.nqubits == circuit.nqubits:
|
|
655
|
+
kernel.mz(qubits)
|
|
656
|
+
else:
|
|
657
|
+
for idx in gate.target_qubits:
|
|
658
|
+
kernel.mz(qubits[idx])
|
|
659
|
+
|
|
660
|
+
@staticmethod
|
|
661
|
+
def _handle_I(kernel: cudaq.Kernel, gate: I, qubit: cudaq.QuakeValue) -> None:
|
|
662
|
+
"""Handle an X gate operation."""
|
|
663
|
+
kernel.i(qubit)
|
|
664
|
+
|
|
665
|
+
@staticmethod
|
|
666
|
+
def _handle_X(kernel: cudaq.Kernel, gate: X, qubit: cudaq.QuakeValue) -> None:
|
|
667
|
+
"""Handle an X gate operation."""
|
|
668
|
+
kernel.x(qubit)
|
|
669
|
+
|
|
670
|
+
@staticmethod
|
|
671
|
+
def _handle_Y(kernel: cudaq.Kernel, gate: Y, qubit: cudaq.QuakeValue) -> None:
|
|
672
|
+
"""Handle an Y gate operation."""
|
|
673
|
+
kernel.y(qubit)
|
|
674
|
+
|
|
675
|
+
@staticmethod
|
|
676
|
+
def _handle_Z(kernel: cudaq.Kernel, gate: Z, qubit: cudaq.QuakeValue) -> None:
|
|
677
|
+
"""Handle an Z gate operation."""
|
|
678
|
+
kernel.z(qubit)
|
|
679
|
+
|
|
680
|
+
@staticmethod
|
|
681
|
+
def _handle_H(kernel: cudaq.Kernel, gate: H, qubit: cudaq.QuakeValue) -> None:
|
|
682
|
+
"""Handle an H gate operation."""
|
|
683
|
+
kernel.h(qubit)
|
|
684
|
+
|
|
685
|
+
@staticmethod
|
|
686
|
+
def _handle_S(kernel: cudaq.Kernel, gate: S, qubit: cudaq.QuakeValue) -> None:
|
|
687
|
+
"""Handle an S gate operation."""
|
|
688
|
+
kernel.s(qubit)
|
|
689
|
+
|
|
690
|
+
@staticmethod
|
|
691
|
+
def _handle_T(kernel: cudaq.Kernel, gate: T, qubit: cudaq.QuakeValue) -> None:
|
|
692
|
+
"""Handle an T gate operation."""
|
|
693
|
+
kernel.t(qubit)
|
|
694
|
+
|
|
695
|
+
@staticmethod
|
|
696
|
+
def _handle_RX(kernel: cudaq.Kernel, gate: RX, qubit: cudaq.QuakeValue) -> None:
|
|
697
|
+
"""Handle an RX gate operation."""
|
|
698
|
+
kernel.rx(*[float(param) for param in gate.get_parameter_values()], qubit)
|
|
699
|
+
|
|
700
|
+
@staticmethod
|
|
701
|
+
def _handle_RY(kernel: cudaq.Kernel, gate: RY, qubit: cudaq.QuakeValue) -> None:
|
|
702
|
+
"""Handle an RY gate operation."""
|
|
703
|
+
kernel.ry(*[float(param) for param in gate.get_parameter_values()], qubit)
|
|
704
|
+
|
|
705
|
+
@staticmethod
|
|
706
|
+
def _handle_RZ(kernel: cudaq.Kernel, gate: RZ, qubit: cudaq.QuakeValue) -> None:
|
|
707
|
+
"""Handle an RZ gate operation."""
|
|
708
|
+
kernel.rz(*[float(param) for param in gate.get_parameter_values()], qubit)
|
|
709
|
+
|
|
710
|
+
@staticmethod
|
|
711
|
+
def _handle_U1(kernel: cudaq.Kernel, gate: U1, qubit: cudaq.QuakeValue) -> None:
|
|
712
|
+
"""Handle an U1 gate operation."""
|
|
713
|
+
kernel.u3(theta=0.0, phi=float(gate.phi), delta=0.0, target=qubit)
|
|
714
|
+
|
|
715
|
+
@staticmethod
|
|
716
|
+
def _handle_U2(kernel: cudaq.Kernel, gate: U2, qubit: cudaq.QuakeValue) -> None:
|
|
717
|
+
"""Handle an U2 gate operation."""
|
|
718
|
+
kernel.u3(theta=np.pi / 2, phi=float(gate.phi), delta=float(gate.gamma), target=qubit)
|
|
719
|
+
|
|
720
|
+
@staticmethod
|
|
721
|
+
def _handle_U3(kernel: cudaq.Kernel, gate: U3, qubit: cudaq.QuakeValue) -> None:
|
|
722
|
+
"""Handle an U3 gate operation."""
|
|
723
|
+
kernel.u3(theta=float(gate.theta), phi=float(gate.phi), delta=float(gate.gamma), target=qubit)
|
|
724
|
+
|
|
725
|
+
@staticmethod
|
|
726
|
+
def _handle_SWAP(kernel: cudaq.Kernel, gate: SWAP, qubit_0: cudaq.QuakeValue, qubit_1: cudaq.QuakeValue) -> None:
|
|
727
|
+
kernel.swap(qubit_0, qubit_1)
|
|
728
|
+
|
|
729
|
+
def _hamiltonian_to_cuda(self, hamiltonian: Hamiltonian) -> OperatorSum:
|
|
730
|
+
out = None
|
|
731
|
+
for offset, terms in hamiltonian:
|
|
732
|
+
if out is None:
|
|
733
|
+
out = offset * np.prod([self._pauli_operator_handlers[type(pauli)](pauli) for pauli in terms])
|
|
734
|
+
else:
|
|
735
|
+
out += offset * np.prod([self._pauli_operator_handlers[type(pauli)](pauli) for pauli in terms])
|
|
736
|
+
return out
|
|
737
|
+
|
|
738
|
+
@staticmethod
|
|
739
|
+
def _handle_PauliX(operator: PauliX) -> ElementaryOperator:
|
|
740
|
+
return spin.x(target=operator.qubit) # ty:ignore[unresolved-attribute]
|
|
741
|
+
|
|
742
|
+
@staticmethod
|
|
743
|
+
def _handle_PauliY(operator: PauliY) -> ElementaryOperator:
|
|
744
|
+
return spin.y(target=operator.qubit) # ty:ignore[unresolved-attribute]
|
|
745
|
+
|
|
746
|
+
@staticmethod
|
|
747
|
+
def _handle_PauliZ(operator: PauliZ) -> ElementaryOperator:
|
|
748
|
+
return spin.z(target=operator.qubit) # ty:ignore[unresolved-attribute]
|
|
749
|
+
|
|
750
|
+
@staticmethod
|
|
751
|
+
def _handle_PauliI(operator: PauliI) -> ElementaryOperator:
|
|
752
|
+
return spin.i(target=operator.qubit) # ty:ignore[unresolved-attribute]
|