qilisdk 0.1.8__cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.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 +635 -0
- qilisdk-0.1.8.dist-info/WHEEL +6 -0
- qilisdk-0.1.8.dist-info/licenses/LICENCE +201 -0
- qilisdk.libs/libgomp-65f46eca.so.1.0.0 +0 -0
- qilisim_module.cpython-312-i386-linux-gnu.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
qilisdk/digital/gates.py
ADDED
|
@@ -0,0 +1,1308 @@
|
|
|
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 abc import ABC, abstractmethod
|
|
17
|
+
from typing import ClassVar, Generic, TypeVar
|
|
18
|
+
|
|
19
|
+
import numpy as np
|
|
20
|
+
from scipy.linalg import expm
|
|
21
|
+
from typing_extensions import Self
|
|
22
|
+
|
|
23
|
+
from qilisdk.core.parameterizable import Parameterizable
|
|
24
|
+
from qilisdk.core.variables import Parameter, Term
|
|
25
|
+
from qilisdk.settings import get_settings
|
|
26
|
+
from qilisdk.yaml import yaml
|
|
27
|
+
|
|
28
|
+
from .exceptions import (
|
|
29
|
+
GateHasNoMatrixError,
|
|
30
|
+
GateNotParameterizedError,
|
|
31
|
+
InvalidParameterNameError,
|
|
32
|
+
ParametersNotEqualError,
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
TBasicGate = TypeVar("TBasicGate", bound="BasicGate")
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def _complex_dtype() -> np.dtype:
|
|
39
|
+
return get_settings().complex_precision.dtype
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
class Gate(Parameterizable, ABC):
|
|
43
|
+
"""
|
|
44
|
+
Represents a quantum gate that can be used in quantum circuits.
|
|
45
|
+
"""
|
|
46
|
+
|
|
47
|
+
PARAMETER_NAMES: ClassVar[list[str]] = []
|
|
48
|
+
|
|
49
|
+
@property
|
|
50
|
+
@abstractmethod
|
|
51
|
+
def name(self) -> str:
|
|
52
|
+
"""
|
|
53
|
+
Retrieve the name of the gate.
|
|
54
|
+
|
|
55
|
+
Returns:
|
|
56
|
+
str: The name of the gate.
|
|
57
|
+
"""
|
|
58
|
+
|
|
59
|
+
@property
|
|
60
|
+
@abstractmethod
|
|
61
|
+
def matrix(self) -> np.ndarray:
|
|
62
|
+
"""
|
|
63
|
+
Retrieve the matrix of the gate.
|
|
64
|
+
|
|
65
|
+
Raises:
|
|
66
|
+
GateHasNoMatrixError: If gate has no matrix.
|
|
67
|
+
|
|
68
|
+
Returns:
|
|
69
|
+
np.ndarray: The matrix of the gate.
|
|
70
|
+
"""
|
|
71
|
+
|
|
72
|
+
@property
|
|
73
|
+
def control_qubits(self) -> tuple[int, ...]:
|
|
74
|
+
"""
|
|
75
|
+
Retrieve the indices of the control qubits.
|
|
76
|
+
|
|
77
|
+
Returns:
|
|
78
|
+
tuple[int, ...]: A tuple containing the indices of the control qubits.
|
|
79
|
+
"""
|
|
80
|
+
return ()
|
|
81
|
+
|
|
82
|
+
@property
|
|
83
|
+
def target_qubits(self) -> tuple[int, ...]:
|
|
84
|
+
"""
|
|
85
|
+
Retrieve the indices of the target qubits.
|
|
86
|
+
|
|
87
|
+
Returns:
|
|
88
|
+
tuple[int, ...]: A tuple containing the indices of the target qubits.
|
|
89
|
+
"""
|
|
90
|
+
return ()
|
|
91
|
+
|
|
92
|
+
@property
|
|
93
|
+
def qubits(self) -> tuple[int, ...]:
|
|
94
|
+
"""
|
|
95
|
+
Retrieve all qubits associated with the gate, including both control and target qubits.
|
|
96
|
+
|
|
97
|
+
Returns:
|
|
98
|
+
tuple[int, ...]: A tuple of all qubit indices on which the gate operates.
|
|
99
|
+
"""
|
|
100
|
+
return self.control_qubits + self.target_qubits
|
|
101
|
+
|
|
102
|
+
@property
|
|
103
|
+
def nqubits(self) -> int:
|
|
104
|
+
"""
|
|
105
|
+
Retrieve the number of qubits the gate acts upon.
|
|
106
|
+
|
|
107
|
+
Returns:
|
|
108
|
+
int: The number of qubits for this gate.
|
|
109
|
+
"""
|
|
110
|
+
return len(self.qubits)
|
|
111
|
+
|
|
112
|
+
@property
|
|
113
|
+
def nparameters(self) -> int:
|
|
114
|
+
"""
|
|
115
|
+
Retrieve the number of parameters for the gate.
|
|
116
|
+
|
|
117
|
+
Returns:
|
|
118
|
+
int: The count of parameters needed by the gate.
|
|
119
|
+
"""
|
|
120
|
+
return len(self.get_parameters())
|
|
121
|
+
|
|
122
|
+
@property
|
|
123
|
+
def is_parameterized(self) -> bool:
|
|
124
|
+
"""
|
|
125
|
+
Determine whether the gate requires parameters.
|
|
126
|
+
|
|
127
|
+
Returns:
|
|
128
|
+
bool: True if the gate is parameterized; otherwise, False.
|
|
129
|
+
"""
|
|
130
|
+
return self.nparameters != 0
|
|
131
|
+
|
|
132
|
+
@property
|
|
133
|
+
def parameters(self) -> dict[str, Parameter]:
|
|
134
|
+
"""Returns the raw parameter objects stored in the gate.
|
|
135
|
+
|
|
136
|
+
Returns:
|
|
137
|
+
dict[str, Parameter]: A dictionary mapping each Parameter object to its label.
|
|
138
|
+
"""
|
|
139
|
+
return {}
|
|
140
|
+
|
|
141
|
+
def get_parameters(self) -> dict[str, float]: # noqa: PLR6301
|
|
142
|
+
"""
|
|
143
|
+
Retrieve a mapping of parameter names to their corresponding values.
|
|
144
|
+
|
|
145
|
+
Returns:
|
|
146
|
+
dict[str, float]: A dictionary mapping each parameter name to its numeric value.
|
|
147
|
+
"""
|
|
148
|
+
return {}
|
|
149
|
+
|
|
150
|
+
def get_parameter_names(self) -> list[str]:
|
|
151
|
+
"""
|
|
152
|
+
Retrieve the symbolic names of the gate's parameters.
|
|
153
|
+
|
|
154
|
+
Returns:
|
|
155
|
+
list[str]: A list containing the names of the parameters.
|
|
156
|
+
"""
|
|
157
|
+
return list(self.get_parameters())
|
|
158
|
+
|
|
159
|
+
def get_parameter_values(self) -> list[float]:
|
|
160
|
+
"""
|
|
161
|
+
Retrieve the numerical values assigned to the gate's parameters.
|
|
162
|
+
|
|
163
|
+
Returns:
|
|
164
|
+
list[float]: A list containing the parameter values.
|
|
165
|
+
"""
|
|
166
|
+
return list(self.get_parameters().values())
|
|
167
|
+
|
|
168
|
+
def set_parameters(self, parameters: dict[str, float]) -> None:
|
|
169
|
+
"""
|
|
170
|
+
Set the parameters for the gate using a dictionary mapping names to values.
|
|
171
|
+
|
|
172
|
+
Args:
|
|
173
|
+
parameters (dict[str, float]): A dictionary where keys are parameter names and values are the new parameter values.
|
|
174
|
+
|
|
175
|
+
Raises:
|
|
176
|
+
GateNotParameterizedError: If gate is not parameterized.
|
|
177
|
+
InvalidParameterNameError: If any provided parameter name is not valid for this gate.
|
|
178
|
+
"""
|
|
179
|
+
if not self.is_parameterized:
|
|
180
|
+
raise GateNotParameterizedError
|
|
181
|
+
|
|
182
|
+
if any(name not in self.get_parameters() for name in parameters):
|
|
183
|
+
raise InvalidParameterNameError
|
|
184
|
+
|
|
185
|
+
def set_parameter_values(self, values: list[float]) -> None:
|
|
186
|
+
"""
|
|
187
|
+
Set the numerical values for the gate's parameters.
|
|
188
|
+
|
|
189
|
+
Args:
|
|
190
|
+
values (list[float]): A list containing new parameter values.
|
|
191
|
+
|
|
192
|
+
Raises:
|
|
193
|
+
GateNotParameterizedError: If gate is not parameterized.
|
|
194
|
+
ParametersNotEqualError: If the number of provided values does not match the expected parameter count.
|
|
195
|
+
"""
|
|
196
|
+
if not self.is_parameterized:
|
|
197
|
+
raise GateNotParameterizedError
|
|
198
|
+
|
|
199
|
+
if len(values) != len(self.get_parameters()):
|
|
200
|
+
raise ParametersNotEqualError
|
|
201
|
+
|
|
202
|
+
def get_parameter_bounds(self) -> dict[str, tuple[float, float]]: # noqa: PLR6301
|
|
203
|
+
return {}
|
|
204
|
+
|
|
205
|
+
def set_parameter_bounds(self, ranges: dict[str, tuple[float, float]]) -> None:
|
|
206
|
+
if not self.is_parameterized:
|
|
207
|
+
raise GateNotParameterizedError
|
|
208
|
+
|
|
209
|
+
def __repr__(self) -> str:
|
|
210
|
+
qubits_str = f"({self.qubits[0]})" if self.nqubits == 1 else str(self.qubits)
|
|
211
|
+
return f"{self.name}{qubits_str}"
|
|
212
|
+
|
|
213
|
+
|
|
214
|
+
@yaml.register_class
|
|
215
|
+
class BasicGate(Gate):
|
|
216
|
+
"""
|
|
217
|
+
Represents a quantum gate that can be used in quantum circuits.
|
|
218
|
+
"""
|
|
219
|
+
|
|
220
|
+
def __init__(
|
|
221
|
+
self,
|
|
222
|
+
target_qubits: tuple[int, ...],
|
|
223
|
+
parameters: dict[str, Parameter] | None = None,
|
|
224
|
+
parameter_transforms: dict[str, Term] | None = None,
|
|
225
|
+
) -> None:
|
|
226
|
+
"""Build a basic gate.
|
|
227
|
+
|
|
228
|
+
Args:
|
|
229
|
+
target_qubits (tuple[int, ...]): Qubit indices the gate acts on. Duplicate indices are rejected.
|
|
230
|
+
parameters (dict[str, Parameter] | None): Optional parameter objects keyed by label for parameterized gates.
|
|
231
|
+
|
|
232
|
+
Raises:
|
|
233
|
+
ValueError: if duplicate target qubits are found.
|
|
234
|
+
ValueError: if any parameter transform is not a parameterized term.
|
|
235
|
+
InvalidParameterNameError: if any parameter mentioned in parameter_transforms is not in parameters.
|
|
236
|
+
"""
|
|
237
|
+
# Check for duplicate integers in target_qubits.
|
|
238
|
+
super(BasicGate, self).__init__()
|
|
239
|
+
if len(target_qubits) != len(set(target_qubits)):
|
|
240
|
+
raise ValueError("Duplicate target qubits found.")
|
|
241
|
+
|
|
242
|
+
self._target_qubits: tuple[int, ...] = target_qubits
|
|
243
|
+
self._parameters: dict[str, Parameter] = parameters or {}
|
|
244
|
+
self._parameter_transforms: dict[str, Term] = parameter_transforms or {}
|
|
245
|
+
self._matrix: np.ndarray = self._generate_matrix()
|
|
246
|
+
|
|
247
|
+
# Check the transforms
|
|
248
|
+
for term in self._parameter_transforms:
|
|
249
|
+
# Ensure it's a parameterized term (i.e. no variables)
|
|
250
|
+
if not self._parameter_transforms[term].is_parameterized_term():
|
|
251
|
+
raise ValueError(
|
|
252
|
+
f"Parameter transform '{term}' must be a parameterized term containing only Parameters."
|
|
253
|
+
)
|
|
254
|
+
|
|
255
|
+
# Check that anything mentioned in parameter_transforms is also in parameters
|
|
256
|
+
for param in self._parameter_transforms[term].variables():
|
|
257
|
+
if param.label not in self._parameters:
|
|
258
|
+
raise InvalidParameterNameError
|
|
259
|
+
|
|
260
|
+
@property
|
|
261
|
+
def matrix(self) -> np.ndarray:
|
|
262
|
+
return self._matrix
|
|
263
|
+
|
|
264
|
+
@property
|
|
265
|
+
def target_qubits(self) -> tuple[int, ...]:
|
|
266
|
+
return self._target_qubits
|
|
267
|
+
|
|
268
|
+
@property
|
|
269
|
+
def parameters(self) -> dict[str, Parameter]:
|
|
270
|
+
return self._parameters
|
|
271
|
+
|
|
272
|
+
def get_parameters(self) -> dict[str, float]:
|
|
273
|
+
return {k: v.value for k, v in self._parameters.items()}
|
|
274
|
+
|
|
275
|
+
def set_parameters(self, parameters: dict[str, float]) -> None:
|
|
276
|
+
super().set_parameters(parameters=parameters)
|
|
277
|
+
for k, v in parameters.items():
|
|
278
|
+
self._parameters[k].set_value(v)
|
|
279
|
+
self._matrix = self._generate_matrix()
|
|
280
|
+
|
|
281
|
+
def set_parameter_values(self, values: list[float]) -> None:
|
|
282
|
+
super().set_parameter_values(values=values)
|
|
283
|
+
|
|
284
|
+
for key, value in zip(self.get_parameters(), values):
|
|
285
|
+
self._parameters[key].set_value(value)
|
|
286
|
+
|
|
287
|
+
self._matrix = self._generate_matrix()
|
|
288
|
+
|
|
289
|
+
def get_parameter_bounds(self) -> dict[str, tuple[float, float]]:
|
|
290
|
+
return {k: v.bounds for k, v in self._parameters.items()}
|
|
291
|
+
|
|
292
|
+
def set_parameter_bounds(self, ranges: dict[str, tuple[float, float]]) -> None:
|
|
293
|
+
super().set_parameter_bounds(ranges=ranges)
|
|
294
|
+
for label, bound in ranges.items():
|
|
295
|
+
if label not in self._parameters:
|
|
296
|
+
raise InvalidParameterNameError
|
|
297
|
+
self._parameters[label].set_bounds(bound[0], bound[1])
|
|
298
|
+
|
|
299
|
+
def controlled(self: Self, *control_qubits: int) -> Controlled[Self]:
|
|
300
|
+
"""
|
|
301
|
+
Creates a controlled version of this unitary gate.
|
|
302
|
+
|
|
303
|
+
This method returns a new instance of a Controlled gate where the provided qubits serve as the
|
|
304
|
+
control qubits and the current unitary gate is used as the target. The resulting gate operates
|
|
305
|
+
on both the control and target qubits.
|
|
306
|
+
|
|
307
|
+
Args:
|
|
308
|
+
*control_qubits (int): One or more integer indices specifying the control qubits.
|
|
309
|
+
|
|
310
|
+
Returns:
|
|
311
|
+
Controlled: A new Controlled gate instance that wraps this unitary gate with the specified control qubits.
|
|
312
|
+
"""
|
|
313
|
+
return Controlled(*control_qubits, basic_gate=self)
|
|
314
|
+
|
|
315
|
+
def adjoint(self: Self) -> Adjoint[Self]:
|
|
316
|
+
"""
|
|
317
|
+
Returns the adjoint (conjugate transpose) of this unitary gate.
|
|
318
|
+
|
|
319
|
+
This method constructs and returns a new gate whose matrix is the conjugate transpose of the current
|
|
320
|
+
gate's matrix. The adjoint (or Hermitian conjugate) is commonly used to reverse the effect of a unitary operation.
|
|
321
|
+
|
|
322
|
+
Returns:
|
|
323
|
+
Adjoint: A new Adjoint gate instance representing the adjoint of this gate.
|
|
324
|
+
"""
|
|
325
|
+
return Adjoint(basic_gate=self)
|
|
326
|
+
|
|
327
|
+
def exponential(self: Self) -> Exponential[Self]:
|
|
328
|
+
"""
|
|
329
|
+
Returns the exponential of this unitary gate.
|
|
330
|
+
|
|
331
|
+
This method computes the matrix exponential of the current gate's matrix, resulting in a new gate.
|
|
332
|
+
The matrix exponential is useful for representing continuous time evolution in quantum systems and
|
|
333
|
+
appears in various quantum mechanics and quantum computing applications.
|
|
334
|
+
|
|
335
|
+
Returns:
|
|
336
|
+
Exponential: A new Exponential gate instance whose matrix is the matrix exponential of the current gate's matrix.
|
|
337
|
+
"""
|
|
338
|
+
return Exponential(basic_gate=self)
|
|
339
|
+
|
|
340
|
+
@abstractmethod
|
|
341
|
+
def _generate_matrix(self) -> np.ndarray: ...
|
|
342
|
+
|
|
343
|
+
|
|
344
|
+
@yaml.register_class
|
|
345
|
+
class Modified(Gate, Generic[TBasicGate]):
|
|
346
|
+
def __init__(self, basic_gate: TBasicGate) -> None:
|
|
347
|
+
self._basic_gate: TBasicGate = basic_gate
|
|
348
|
+
self._matrix: np.ndarray
|
|
349
|
+
|
|
350
|
+
@property
|
|
351
|
+
def basic_gate(self) -> TBasicGate:
|
|
352
|
+
return self._basic_gate
|
|
353
|
+
|
|
354
|
+
@property
|
|
355
|
+
def matrix(self) -> np.ndarray:
|
|
356
|
+
return self._matrix
|
|
357
|
+
|
|
358
|
+
@property
|
|
359
|
+
def target_qubits(self) -> tuple[int, ...]:
|
|
360
|
+
return self._basic_gate.target_qubits
|
|
361
|
+
|
|
362
|
+
@property
|
|
363
|
+
def nparameters(self) -> int:
|
|
364
|
+
return self._basic_gate.nparameters
|
|
365
|
+
|
|
366
|
+
@property
|
|
367
|
+
def is_parameterized(self) -> bool:
|
|
368
|
+
return self._basic_gate.is_parameterized
|
|
369
|
+
|
|
370
|
+
@property
|
|
371
|
+
def parameters(self) -> dict[str, Parameter]:
|
|
372
|
+
return self._basic_gate.parameters
|
|
373
|
+
|
|
374
|
+
def get_parameters(self) -> dict[str, float]:
|
|
375
|
+
return self._basic_gate.get_parameters()
|
|
376
|
+
|
|
377
|
+
def get_parameter_names(self) -> list[str]:
|
|
378
|
+
return self._basic_gate.get_parameter_names()
|
|
379
|
+
|
|
380
|
+
def get_parameter_values(self) -> list[float]:
|
|
381
|
+
return self._basic_gate.get_parameter_values()
|
|
382
|
+
|
|
383
|
+
def set_parameters(self, parameters: dict[str, float]) -> None:
|
|
384
|
+
self._basic_gate.set_parameters(parameters=parameters)
|
|
385
|
+
self._matrix = self._generate_matrix()
|
|
386
|
+
|
|
387
|
+
def set_parameter_values(self, values: list[float]) -> None:
|
|
388
|
+
self._basic_gate.set_parameter_values(values=values)
|
|
389
|
+
self._matrix = self._generate_matrix()
|
|
390
|
+
|
|
391
|
+
def get_parameter_bounds(self) -> dict[str, tuple[float, float]]:
|
|
392
|
+
return self._basic_gate.get_parameter_bounds()
|
|
393
|
+
|
|
394
|
+
def set_parameter_bounds(self, ranges: dict[str, tuple[float, float]]) -> None:
|
|
395
|
+
self._basic_gate.set_parameter_bounds(ranges)
|
|
396
|
+
|
|
397
|
+
@abstractmethod
|
|
398
|
+
def _generate_matrix(self) -> np.ndarray: ...
|
|
399
|
+
|
|
400
|
+
def is_modified_from(self, gate_type: type[TBasicGate]) -> bool:
|
|
401
|
+
return isinstance(self.basic_gate, gate_type)
|
|
402
|
+
|
|
403
|
+
|
|
404
|
+
@yaml.register_class
|
|
405
|
+
class Controlled(Modified[TBasicGate]):
|
|
406
|
+
def __init__(self, *control_qubits: int, basic_gate: TBasicGate) -> None:
|
|
407
|
+
super().__init__(basic_gate=basic_gate)
|
|
408
|
+
|
|
409
|
+
# Check for duplicate integers in control_qubits.
|
|
410
|
+
if len(control_qubits) != len(set(control_qubits)):
|
|
411
|
+
raise ValueError("Duplicate control qubits found.")
|
|
412
|
+
|
|
413
|
+
# Check if any integer in control_qubits is also in unitary_gate.target_qubits.
|
|
414
|
+
if set(control_qubits) & set(basic_gate.target_qubits):
|
|
415
|
+
raise ValueError("Some control qubits are the same as unitary gate's target qubits.")
|
|
416
|
+
|
|
417
|
+
# Make sure we have some control qubits
|
|
418
|
+
if len(control_qubits) == 0:
|
|
419
|
+
raise ValueError("At least one control qubit must be specified.")
|
|
420
|
+
|
|
421
|
+
self._control_qubits = control_qubits + basic_gate.control_qubits
|
|
422
|
+
self._matrix = self._generate_matrix()
|
|
423
|
+
|
|
424
|
+
def _generate_matrix(self) -> np.ndarray:
|
|
425
|
+
i_full = np.eye(1 << self.nqubits, dtype=_complex_dtype())
|
|
426
|
+
# Construct projector P_control = |1...1><1...1| on the n control qubits.
|
|
427
|
+
P = np.array([[0, 0], [0, 1]], dtype=_complex_dtype())
|
|
428
|
+
for _ in range(len(self.control_qubits) - len(self.basic_gate.control_qubits) - 1):
|
|
429
|
+
P = np.kron(P, np.array([[0, 0], [0, 1]], dtype=_complex_dtype()))
|
|
430
|
+
# Extend the projector to the full space (control qubits ⊗ target qubit). It acts as P_control ⊗ I_target.
|
|
431
|
+
i_target = np.eye(1 << self.basic_gate.nqubits, dtype=_complex_dtype())
|
|
432
|
+
# The controlled gate is then:
|
|
433
|
+
controlled = i_full + np.kron(P, self.basic_gate.matrix - i_target)
|
|
434
|
+
return controlled
|
|
435
|
+
|
|
436
|
+
@property
|
|
437
|
+
def control_qubits(self) -> tuple[int, ...]:
|
|
438
|
+
return self._control_qubits
|
|
439
|
+
|
|
440
|
+
@property
|
|
441
|
+
def name(self) -> str:
|
|
442
|
+
return "C" * len(self.control_qubits) + self.basic_gate.name
|
|
443
|
+
|
|
444
|
+
|
|
445
|
+
@yaml.register_class
|
|
446
|
+
class Adjoint(Modified[TBasicGate]):
|
|
447
|
+
"""
|
|
448
|
+
Represents the adjoint (conjugate transpose) of a unitary gate.
|
|
449
|
+
"""
|
|
450
|
+
|
|
451
|
+
def __init__(self, basic_gate: TBasicGate) -> None:
|
|
452
|
+
super().__init__(basic_gate=basic_gate)
|
|
453
|
+
self._matrix = self._generate_matrix()
|
|
454
|
+
|
|
455
|
+
def _generate_matrix(self) -> np.ndarray:
|
|
456
|
+
return self.basic_gate.matrix.conj().T
|
|
457
|
+
|
|
458
|
+
@property
|
|
459
|
+
def name(self) -> str:
|
|
460
|
+
"""
|
|
461
|
+
Get the name of the adjoint gate.
|
|
462
|
+
|
|
463
|
+
The name is constructed by appending an adjoint symbol (†) to the name of the underlying gate.
|
|
464
|
+
For example, if the underlying gate's name is "X", this property returns "X†".
|
|
465
|
+
|
|
466
|
+
Returns:
|
|
467
|
+
str: The name of the adjoint gate.
|
|
468
|
+
"""
|
|
469
|
+
return self.basic_gate.name + "†"
|
|
470
|
+
|
|
471
|
+
|
|
472
|
+
@yaml.register_class
|
|
473
|
+
class Exponential(Modified[TBasicGate]):
|
|
474
|
+
"""
|
|
475
|
+
Represents the exponential of a unitary gate.
|
|
476
|
+
The matrix of this gate is computed as the matrix exponential (e^(gate.matrix))
|
|
477
|
+
of the underlying gate's matrix.
|
|
478
|
+
"""
|
|
479
|
+
|
|
480
|
+
def __init__(self, basic_gate: TBasicGate) -> None:
|
|
481
|
+
super().__init__(basic_gate=basic_gate)
|
|
482
|
+
self._matrix = self._generate_matrix()
|
|
483
|
+
|
|
484
|
+
def _generate_matrix(self) -> np.ndarray:
|
|
485
|
+
return expm(self.basic_gate.matrix)
|
|
486
|
+
|
|
487
|
+
@property
|
|
488
|
+
def name(self) -> str:
|
|
489
|
+
"""
|
|
490
|
+
Get the name of the exponential gate.
|
|
491
|
+
|
|
492
|
+
The name is constructed by prepending the underlying gate's name within "e^".
|
|
493
|
+
For example, if the underlying gate's name is "X", the exponential gate's name is "e^X".
|
|
494
|
+
|
|
495
|
+
Returns:
|
|
496
|
+
str: The generated name of the exponential gate.
|
|
497
|
+
"""
|
|
498
|
+
return f"e^{self.basic_gate.name}"
|
|
499
|
+
|
|
500
|
+
|
|
501
|
+
@yaml.register_class
|
|
502
|
+
class M(Gate):
|
|
503
|
+
"""
|
|
504
|
+
Measurement operation on a qubit. The measurement is performed in the computational basis and the
|
|
505
|
+
result is stored in a classical bit with the same label as the measured qubit.
|
|
506
|
+
"""
|
|
507
|
+
|
|
508
|
+
def __init__(self, *qubits: int) -> None:
|
|
509
|
+
"""
|
|
510
|
+
Initialize a measurement operation.
|
|
511
|
+
|
|
512
|
+
Args:
|
|
513
|
+
qubit (int): The qubit index to be measured.
|
|
514
|
+
"""
|
|
515
|
+
self._target_qubits = qubits
|
|
516
|
+
|
|
517
|
+
@property
|
|
518
|
+
def name(self) -> str:
|
|
519
|
+
return "M"
|
|
520
|
+
|
|
521
|
+
@property
|
|
522
|
+
def matrix(self) -> np.ndarray:
|
|
523
|
+
raise GateHasNoMatrixError
|
|
524
|
+
|
|
525
|
+
@property
|
|
526
|
+
def target_qubits(self) -> tuple[int, ...]:
|
|
527
|
+
return self._target_qubits
|
|
528
|
+
|
|
529
|
+
|
|
530
|
+
@yaml.register_class
|
|
531
|
+
class I(BasicGate):
|
|
532
|
+
"""
|
|
533
|
+
The Identity gate.
|
|
534
|
+
|
|
535
|
+
The associated matrix is:
|
|
536
|
+
|
|
537
|
+
.. code-block:: text
|
|
538
|
+
|
|
539
|
+
[[1, 0],
|
|
540
|
+
[0, 1]]
|
|
541
|
+
|
|
542
|
+
"""
|
|
543
|
+
|
|
544
|
+
def __init__(self, qubit: int) -> None:
|
|
545
|
+
"""
|
|
546
|
+
Initialize a Pauli-X gate.
|
|
547
|
+
|
|
548
|
+
Args:
|
|
549
|
+
qubit (int): The target qubit index for the X gate.
|
|
550
|
+
"""
|
|
551
|
+
super().__init__(target_qubits=(qubit,))
|
|
552
|
+
|
|
553
|
+
@property
|
|
554
|
+
def name(self) -> str:
|
|
555
|
+
return "I"
|
|
556
|
+
|
|
557
|
+
def _generate_matrix(self) -> np.ndarray: # noqa: PLR6301
|
|
558
|
+
return np.array([[1, 0], [0, 1]], dtype=_complex_dtype())
|
|
559
|
+
|
|
560
|
+
|
|
561
|
+
@yaml.register_class
|
|
562
|
+
class X(BasicGate):
|
|
563
|
+
"""
|
|
564
|
+
The Pauli-X gate.
|
|
565
|
+
|
|
566
|
+
The associated matrix is:
|
|
567
|
+
|
|
568
|
+
.. code-block:: text
|
|
569
|
+
|
|
570
|
+
[[0, 1],
|
|
571
|
+
[1, 0]]
|
|
572
|
+
|
|
573
|
+
This is a pi radians rotation around the X-axis in the Bloch sphere.
|
|
574
|
+
"""
|
|
575
|
+
|
|
576
|
+
def __init__(self, qubit: int) -> None:
|
|
577
|
+
"""
|
|
578
|
+
Initialize a Pauli-X gate.
|
|
579
|
+
|
|
580
|
+
Args:
|
|
581
|
+
qubit (int): The target qubit index for the X gate.
|
|
582
|
+
"""
|
|
583
|
+
super().__init__(target_qubits=(qubit,))
|
|
584
|
+
|
|
585
|
+
@property
|
|
586
|
+
def name(self) -> str:
|
|
587
|
+
return "X"
|
|
588
|
+
|
|
589
|
+
def _generate_matrix(self) -> np.ndarray: # noqa: PLR6301
|
|
590
|
+
return np.array([[0, 1], [1, 0]], dtype=_complex_dtype())
|
|
591
|
+
|
|
592
|
+
|
|
593
|
+
@yaml.register_class
|
|
594
|
+
class Y(BasicGate):
|
|
595
|
+
"""
|
|
596
|
+
The Pauli-Y gate.
|
|
597
|
+
|
|
598
|
+
The associated matrix is:
|
|
599
|
+
|
|
600
|
+
.. code-block:: text
|
|
601
|
+
|
|
602
|
+
[[ 0, -i ],
|
|
603
|
+
[ i, 0 ]]
|
|
604
|
+
|
|
605
|
+
This is a pi radians rotation around the Y-axis in the Bloch sphere.
|
|
606
|
+
"""
|
|
607
|
+
|
|
608
|
+
def __init__(self, qubit: int) -> None:
|
|
609
|
+
"""
|
|
610
|
+
Initialize a Pauli-Y gate.
|
|
611
|
+
|
|
612
|
+
Args:
|
|
613
|
+
qubit (int): The target qubit index for the Y gate.
|
|
614
|
+
"""
|
|
615
|
+
super().__init__(target_qubits=(qubit,))
|
|
616
|
+
|
|
617
|
+
@property
|
|
618
|
+
def name(self) -> str:
|
|
619
|
+
return "Y"
|
|
620
|
+
|
|
621
|
+
def _generate_matrix(self) -> np.ndarray: # noqa: PLR6301
|
|
622
|
+
return np.array([[0, -1j], [1j, 0]], dtype=_complex_dtype())
|
|
623
|
+
|
|
624
|
+
|
|
625
|
+
@yaml.register_class
|
|
626
|
+
class Z(BasicGate):
|
|
627
|
+
"""
|
|
628
|
+
The Pauli-Z gate.
|
|
629
|
+
|
|
630
|
+
The associated matrix is:
|
|
631
|
+
|
|
632
|
+
.. code-block:: text
|
|
633
|
+
|
|
634
|
+
[[1, 0],
|
|
635
|
+
[0, -1]]
|
|
636
|
+
|
|
637
|
+
This is a pi radians rotation around the Z-axis in the Bloch sphere.
|
|
638
|
+
"""
|
|
639
|
+
|
|
640
|
+
def __init__(self, qubit: int) -> None:
|
|
641
|
+
"""
|
|
642
|
+
Initialize a Pauli-Z gate.
|
|
643
|
+
|
|
644
|
+
Args:
|
|
645
|
+
qubit (int): The target qubit index for the Z gate.
|
|
646
|
+
"""
|
|
647
|
+
super().__init__(target_qubits=(qubit,))
|
|
648
|
+
|
|
649
|
+
@property
|
|
650
|
+
def name(self) -> str:
|
|
651
|
+
return "Z"
|
|
652
|
+
|
|
653
|
+
def _generate_matrix(self) -> np.ndarray: # noqa: PLR6301
|
|
654
|
+
return np.array([[1, 0], [0, -1]], dtype=_complex_dtype())
|
|
655
|
+
|
|
656
|
+
|
|
657
|
+
@yaml.register_class
|
|
658
|
+
class H(BasicGate):
|
|
659
|
+
"""
|
|
660
|
+
The Hadamard gate.
|
|
661
|
+
|
|
662
|
+
The associated matrix is:
|
|
663
|
+
|
|
664
|
+
.. code-block:: text
|
|
665
|
+
|
|
666
|
+
[[1/sqrt(2), 1/sqrt(2)],
|
|
667
|
+
[1/sqrt(2), -1/sqrt(2)]]
|
|
668
|
+
|
|
669
|
+
This is a pi radians rotation around the (X+Z)-axis in the Bloch sphere.
|
|
670
|
+
"""
|
|
671
|
+
|
|
672
|
+
def __init__(self, qubit: int) -> None:
|
|
673
|
+
"""
|
|
674
|
+
Initialize a Hadamard gate.
|
|
675
|
+
|
|
676
|
+
Args:
|
|
677
|
+
qubit (int): The target qubit index for the Hadamard gate.
|
|
678
|
+
"""
|
|
679
|
+
super().__init__(target_qubits=(qubit,))
|
|
680
|
+
|
|
681
|
+
@property
|
|
682
|
+
def name(self) -> str:
|
|
683
|
+
return "H"
|
|
684
|
+
|
|
685
|
+
def _generate_matrix(self) -> np.ndarray: # noqa: PLR6301
|
|
686
|
+
return (1 / np.sqrt(2)) * np.array([[1, 1], [1, -1]], dtype=_complex_dtype())
|
|
687
|
+
|
|
688
|
+
|
|
689
|
+
@yaml.register_class
|
|
690
|
+
class S(BasicGate):
|
|
691
|
+
"""
|
|
692
|
+
Represents the S gate, which induces a pi/2 phase.
|
|
693
|
+
|
|
694
|
+
The associated matrix is:
|
|
695
|
+
|
|
696
|
+
.. code-block:: text
|
|
697
|
+
|
|
698
|
+
[[1, 0],
|
|
699
|
+
[0, i]]
|
|
700
|
+
|
|
701
|
+
This gate is also known as the square root of Z gate: ``S**2=Z``, or equivalently it is a pi/2 radians rotation around the Z-axis in the Bloch sphere.
|
|
702
|
+
"""
|
|
703
|
+
|
|
704
|
+
def __init__(self, qubit: int) -> None:
|
|
705
|
+
"""
|
|
706
|
+
Initialize an S gate.
|
|
707
|
+
|
|
708
|
+
Args:
|
|
709
|
+
qubit (int): The target qubit index for the S gate.
|
|
710
|
+
"""
|
|
711
|
+
super().__init__(target_qubits=(qubit,))
|
|
712
|
+
|
|
713
|
+
@property
|
|
714
|
+
def name(self) -> str:
|
|
715
|
+
return "S"
|
|
716
|
+
|
|
717
|
+
def _generate_matrix(self) -> np.ndarray: # noqa: PLR6301
|
|
718
|
+
return np.array([[1, 0], [0, 1j]], dtype=_complex_dtype())
|
|
719
|
+
|
|
720
|
+
|
|
721
|
+
@yaml.register_class
|
|
722
|
+
class T(BasicGate):
|
|
723
|
+
"""
|
|
724
|
+
Represents the T gate, which induces a pi/4 phase.
|
|
725
|
+
|
|
726
|
+
The associated matrix is:
|
|
727
|
+
|
|
728
|
+
.. code-block:: text
|
|
729
|
+
|
|
730
|
+
[[1, 0],
|
|
731
|
+
[0, exp(i*pi/4)]]
|
|
732
|
+
|
|
733
|
+
This gate is also known as the fourth-root of Z gate: ``T**4=Z``, or equivalently it is a pi/4 radians rotation around the Z-axis in the Bloch sphere.
|
|
734
|
+
"""
|
|
735
|
+
|
|
736
|
+
def __init__(self, qubit: int) -> None:
|
|
737
|
+
"""
|
|
738
|
+
Initialize a T gate.
|
|
739
|
+
|
|
740
|
+
Args:
|
|
741
|
+
qubit (int): The target qubit index for the T gate.
|
|
742
|
+
"""
|
|
743
|
+
super().__init__(target_qubits=(qubit,))
|
|
744
|
+
|
|
745
|
+
@property
|
|
746
|
+
def name(self) -> str:
|
|
747
|
+
return "T"
|
|
748
|
+
|
|
749
|
+
def _generate_matrix(self) -> np.ndarray: # noqa: PLR6301
|
|
750
|
+
return np.array([[1, 0], [0, np.exp(1j * np.pi / 4)]], dtype=_complex_dtype())
|
|
751
|
+
|
|
752
|
+
|
|
753
|
+
def _process_param(
|
|
754
|
+
name: str,
|
|
755
|
+
value: float | Parameter | Term,
|
|
756
|
+
params_to_init: dict[str, Parameter],
|
|
757
|
+
terms_to_init: dict[str, Term],
|
|
758
|
+
) -> None:
|
|
759
|
+
"""
|
|
760
|
+
Process a parameter value and update the params_to_init and terms_to_init dictionaries.
|
|
761
|
+
Args:
|
|
762
|
+
name (str): The name of the parameter.
|
|
763
|
+
value (float | Parameter | Term): The value of the parameter.
|
|
764
|
+
params_to_init (dict[str, Parameter]): The dictionary to initialize parameters.
|
|
765
|
+
terms_to_init (dict[str, Term]): The dictionary to initialize terms.
|
|
766
|
+
Raises:
|
|
767
|
+
ValueError: If a Term is provided that contains Variables instead of Parameters.
|
|
768
|
+
"""
|
|
769
|
+
if isinstance(value, Parameter):
|
|
770
|
+
params_to_init[name] = value
|
|
771
|
+
elif isinstance(value, Term):
|
|
772
|
+
if not value.is_parameterized_term() and len(value.variables()) > 0:
|
|
773
|
+
raise ValueError(f"RX gate Term '{name}' must contain a Parameter and not Variables.")
|
|
774
|
+
for param in value.variables():
|
|
775
|
+
if isinstance(param, Parameter):
|
|
776
|
+
params_to_init[param.label] = param
|
|
777
|
+
terms_to_init[name] = value
|
|
778
|
+
else:
|
|
779
|
+
params_to_init[name] = Parameter(name, value)
|
|
780
|
+
|
|
781
|
+
|
|
782
|
+
@yaml.register_class
|
|
783
|
+
class RX(BasicGate):
|
|
784
|
+
"""
|
|
785
|
+
Represents a `theta` angle rotation around the X-axis (polar) in the Bloch sphere.
|
|
786
|
+
|
|
787
|
+
The associated matrix is:
|
|
788
|
+
|
|
789
|
+
.. code-block:: text
|
|
790
|
+
|
|
791
|
+
[[cos(theta/2), -i*sin(theta/2)],
|
|
792
|
+
[-i*sin(theta/2), cos(theta/2)]]
|
|
793
|
+
|
|
794
|
+
This is an exponential of the Pauli-X operator:
|
|
795
|
+
``RX(theta) = exp(-i*theta*X/2)``
|
|
796
|
+
"""
|
|
797
|
+
|
|
798
|
+
PARAMETER_NAMES: ClassVar[list[str]] = ["theta"]
|
|
799
|
+
|
|
800
|
+
def __init__(self, qubit: int, *, theta: float | Parameter | Term) -> None:
|
|
801
|
+
"""
|
|
802
|
+
Initialize an RX gate.
|
|
803
|
+
|
|
804
|
+
Args:
|
|
805
|
+
qubit (int): The target qubit index for the rotation.
|
|
806
|
+
theta (float | Parameter | Term): The rotation angle (polar) in radians.
|
|
807
|
+
|
|
808
|
+
"""
|
|
809
|
+
|
|
810
|
+
# Initialize parameter terms dictionary
|
|
811
|
+
params_to_init: dict[str, Parameter] = {}
|
|
812
|
+
terms_to_init: dict[str, Term] = {}
|
|
813
|
+
|
|
814
|
+
# Process the parameters
|
|
815
|
+
_process_param("theta", theta, params_to_init, terms_to_init)
|
|
816
|
+
|
|
817
|
+
# Initialize the base class
|
|
818
|
+
super().__init__(
|
|
819
|
+
target_qubits=(qubit,),
|
|
820
|
+
parameters=params_to_init,
|
|
821
|
+
parameter_transforms=terms_to_init,
|
|
822
|
+
)
|
|
823
|
+
|
|
824
|
+
@property
|
|
825
|
+
def name(self) -> str:
|
|
826
|
+
return "RX"
|
|
827
|
+
|
|
828
|
+
@property
|
|
829
|
+
def theta(self) -> float:
|
|
830
|
+
if "theta" in self._parameter_transforms:
|
|
831
|
+
val = self._parameter_transforms["theta"].evaluate({})
|
|
832
|
+
if isinstance(val, complex):
|
|
833
|
+
return val.real
|
|
834
|
+
return val
|
|
835
|
+
return self.get_parameters()["theta"]
|
|
836
|
+
|
|
837
|
+
def _generate_matrix(self) -> np.ndarray:
|
|
838
|
+
theta = self.theta
|
|
839
|
+
cos_half = np.cos(theta / 2)
|
|
840
|
+
sin_half = np.sin(theta / 2)
|
|
841
|
+
return np.array([[cos_half, -1j * sin_half], [-1j * sin_half, cos_half]], dtype=_complex_dtype())
|
|
842
|
+
|
|
843
|
+
|
|
844
|
+
@yaml.register_class
|
|
845
|
+
class RY(BasicGate):
|
|
846
|
+
"""
|
|
847
|
+
Represents a `theta` angle rotation around the Y-axis (polar) in the Bloch sphere.
|
|
848
|
+
|
|
849
|
+
The associated matrix is:
|
|
850
|
+
|
|
851
|
+
.. code-block:: text
|
|
852
|
+
|
|
853
|
+
[[cos(theta/2), -sin(theta/2)],
|
|
854
|
+
[sin(theta/2), cos(theta/2)]]
|
|
855
|
+
|
|
856
|
+
This is an exponential of the Pauli-Y operator:
|
|
857
|
+
``RY(theta) = exp(-i*theta*Y/2)``
|
|
858
|
+
"""
|
|
859
|
+
|
|
860
|
+
PARAMETER_NAMES: ClassVar[list[str]] = ["theta"]
|
|
861
|
+
|
|
862
|
+
def __init__(self, qubit: int, *, theta: float | Parameter | Term) -> None:
|
|
863
|
+
"""
|
|
864
|
+
Initialize an RY gate.
|
|
865
|
+
|
|
866
|
+
Args:
|
|
867
|
+
qubit (int): The target qubit index for the rotation.
|
|
868
|
+
theta (float | Parameter | Term): The rotation angle (polar) in radians.
|
|
869
|
+
|
|
870
|
+
"""
|
|
871
|
+
|
|
872
|
+
# Initialize parameter terms dictionary
|
|
873
|
+
params_to_init: dict[str, Parameter] = {}
|
|
874
|
+
terms_to_init: dict[str, Term] = {}
|
|
875
|
+
|
|
876
|
+
# Process the parameters
|
|
877
|
+
_process_param("theta", theta, params_to_init, terms_to_init)
|
|
878
|
+
|
|
879
|
+
# Initialize the base class
|
|
880
|
+
super().__init__(
|
|
881
|
+
target_qubits=(qubit,),
|
|
882
|
+
parameters=params_to_init,
|
|
883
|
+
parameter_transforms=terms_to_init,
|
|
884
|
+
)
|
|
885
|
+
|
|
886
|
+
@property
|
|
887
|
+
def name(self) -> str:
|
|
888
|
+
return "RY"
|
|
889
|
+
|
|
890
|
+
@property
|
|
891
|
+
def theta(self) -> float:
|
|
892
|
+
if "theta" in self._parameter_transforms:
|
|
893
|
+
val = self._parameter_transforms["theta"].evaluate({})
|
|
894
|
+
if isinstance(val, complex):
|
|
895
|
+
return val.real
|
|
896
|
+
return val
|
|
897
|
+
return self.get_parameters()["theta"]
|
|
898
|
+
|
|
899
|
+
def _generate_matrix(self) -> np.ndarray:
|
|
900
|
+
theta = self.theta
|
|
901
|
+
cos_half = np.cos(theta / 2)
|
|
902
|
+
sin_half = np.sin(theta / 2)
|
|
903
|
+
return np.array([[cos_half, -sin_half], [sin_half, cos_half]], dtype=_complex_dtype())
|
|
904
|
+
|
|
905
|
+
|
|
906
|
+
@yaml.register_class
|
|
907
|
+
class RZ(BasicGate):
|
|
908
|
+
"""
|
|
909
|
+
Represents a `phi` angle rotation around the Z-axis (azimuthal) in the Bloch sphere.
|
|
910
|
+
|
|
911
|
+
The associated matrix is:
|
|
912
|
+
|
|
913
|
+
.. code-block:: text
|
|
914
|
+
|
|
915
|
+
[[exp(-i*phi/2), 0],
|
|
916
|
+
[0, exp(i*phi/2)]]
|
|
917
|
+
|
|
918
|
+
This is an exponential of the Pauli-Z operator:
|
|
919
|
+
``RZ(phi) = exp(-i*phi*Z/2)``
|
|
920
|
+
|
|
921
|
+
Which is equivalent to the U1 gate plus a global phase:
|
|
922
|
+
``RZ(phi) = exp(-i*phi/2)U1(phi)``
|
|
923
|
+
|
|
924
|
+
Other unitaries you can get from this one are:
|
|
925
|
+
- ``RZ(phi=pi) = exp(-i*pi/2) Z = -i Z``
|
|
926
|
+
- ``RZ(phi=pi/2) = exp(-i*pi/4) S``
|
|
927
|
+
- ``RZ(phi=pi/4) = exp(-i*pi/8) T``
|
|
928
|
+
"""
|
|
929
|
+
|
|
930
|
+
PARAMETER_NAMES: ClassVar[list[str]] = ["phi"]
|
|
931
|
+
|
|
932
|
+
def __init__(self, qubit: int, *, phi: float | Parameter | Term) -> None:
|
|
933
|
+
"""
|
|
934
|
+
Initialize an RZ gate.
|
|
935
|
+
|
|
936
|
+
Args:
|
|
937
|
+
qubit (int): The target qubit index for the rotation.
|
|
938
|
+
phi (float | Parameter | Term): The rotation angle (azimuthal) in radians.
|
|
939
|
+
|
|
940
|
+
"""
|
|
941
|
+
|
|
942
|
+
# Initialize parameter terms dictionary
|
|
943
|
+
params_to_init: dict[str, Parameter] = {}
|
|
944
|
+
terms_to_init: dict[str, Term] = {}
|
|
945
|
+
|
|
946
|
+
# Process the parameters
|
|
947
|
+
_process_param("phi", phi, params_to_init, terms_to_init)
|
|
948
|
+
|
|
949
|
+
# Initialize the base class
|
|
950
|
+
super().__init__(
|
|
951
|
+
target_qubits=(qubit,),
|
|
952
|
+
parameters=params_to_init,
|
|
953
|
+
parameter_transforms=terms_to_init,
|
|
954
|
+
)
|
|
955
|
+
|
|
956
|
+
@property
|
|
957
|
+
def name(self) -> str:
|
|
958
|
+
return "RZ"
|
|
959
|
+
|
|
960
|
+
@property
|
|
961
|
+
def phi(self) -> float:
|
|
962
|
+
if "phi" in self._parameter_transforms:
|
|
963
|
+
val = self._parameter_transforms["phi"].evaluate({})
|
|
964
|
+
if isinstance(val, complex):
|
|
965
|
+
return val.real
|
|
966
|
+
return val
|
|
967
|
+
return self.get_parameters()["phi"]
|
|
968
|
+
|
|
969
|
+
def _generate_matrix(self) -> np.ndarray:
|
|
970
|
+
phi = self.phi
|
|
971
|
+
return np.array([[np.exp(-0.5j * phi), 0.0], [0.0, np.exp(0.5j * phi)]], dtype=_complex_dtype())
|
|
972
|
+
|
|
973
|
+
|
|
974
|
+
@yaml.register_class
|
|
975
|
+
class U1(BasicGate):
|
|
976
|
+
"""
|
|
977
|
+
Represents the U1 gate defined by an azimuthal angle `phi`.
|
|
978
|
+
|
|
979
|
+
The associated matrix is:
|
|
980
|
+
|
|
981
|
+
.. code-block:: text
|
|
982
|
+
|
|
983
|
+
[[1, 0],
|
|
984
|
+
[0, exp(i*phi)]]
|
|
985
|
+
|
|
986
|
+
Which is equivalent to the RZ gate plus a global phase:
|
|
987
|
+
``U1(phi) = exp(i*phi/2)RZ(phi)``
|
|
988
|
+
|
|
989
|
+
Other unitaries you can get from this one are:
|
|
990
|
+
- ``U1(phi=np.pi) = Z``
|
|
991
|
+
- ``U1(phi=np.pi/2) = S``
|
|
992
|
+
- ``U1(phi=np.pi/4) = T``
|
|
993
|
+
"""
|
|
994
|
+
|
|
995
|
+
PARAMETER_NAMES: ClassVar[list[str]] = ["phi"]
|
|
996
|
+
|
|
997
|
+
def __init__(self, qubit: int, *, phi: float | Parameter | Term) -> None:
|
|
998
|
+
"""
|
|
999
|
+
Initialize a U1 gate.
|
|
1000
|
+
|
|
1001
|
+
Args:
|
|
1002
|
+
qubit (int): The target qubit index for the U1 gate.
|
|
1003
|
+
phi (float | Parameter | Term): The phase to add, or equivalently the rotation angle (azimuthal) in radians.
|
|
1004
|
+
"""
|
|
1005
|
+
# Initialize parameter terms dictionary
|
|
1006
|
+
params_to_init: dict[str, Parameter] = {}
|
|
1007
|
+
terms_to_init: dict[str, Term] = {}
|
|
1008
|
+
|
|
1009
|
+
# Process the parameters
|
|
1010
|
+
_process_param("phi", phi, params_to_init, terms_to_init)
|
|
1011
|
+
|
|
1012
|
+
# Initialize the base class
|
|
1013
|
+
super().__init__(
|
|
1014
|
+
target_qubits=(qubit,),
|
|
1015
|
+
parameters=params_to_init,
|
|
1016
|
+
parameter_transforms=terms_to_init,
|
|
1017
|
+
)
|
|
1018
|
+
|
|
1019
|
+
@property
|
|
1020
|
+
def name(self) -> str:
|
|
1021
|
+
return "U1"
|
|
1022
|
+
|
|
1023
|
+
@property
|
|
1024
|
+
def phi(self) -> float:
|
|
1025
|
+
if "phi" in self._parameter_transforms:
|
|
1026
|
+
val = self._parameter_transforms["phi"].evaluate({})
|
|
1027
|
+
if isinstance(val, complex):
|
|
1028
|
+
return val.real
|
|
1029
|
+
return val
|
|
1030
|
+
return self.get_parameters()["phi"]
|
|
1031
|
+
|
|
1032
|
+
def _generate_matrix(self) -> np.ndarray:
|
|
1033
|
+
phi = self.phi
|
|
1034
|
+
return np.array([[1, 0], [0, np.exp(1j * phi)]], dtype=_complex_dtype())
|
|
1035
|
+
|
|
1036
|
+
|
|
1037
|
+
@yaml.register_class
|
|
1038
|
+
class U2(BasicGate):
|
|
1039
|
+
"""
|
|
1040
|
+
Represents the U2 gate defined by the angles `phi` and `gamma`.
|
|
1041
|
+
|
|
1042
|
+
The associated matrix is:
|
|
1043
|
+
|
|
1044
|
+
.. code-block:: text
|
|
1045
|
+
|
|
1046
|
+
1/sqrt(2)*[[1, -exp(i*gamma)],
|
|
1047
|
+
[exp(i*phi), exp(i*(phi+gamma))]]
|
|
1048
|
+
|
|
1049
|
+
Which is equivalent to two azimuthal rotations of `phi` and `gamma`, with a pi/2 polar rotation in between:
|
|
1050
|
+
``U2(phi, gamma) = exp(i*(phi+gamma)/2) RZ(phi) RY(pi/2) RZ(gamma)``
|
|
1051
|
+
|
|
1052
|
+
This is the same matrix of `qiskit` and `pennylane`, differing from `qibo` implementation on a global phase:
|
|
1053
|
+
``U2(phi, gamma) = U2_qiskit/pennylane(phi, gamma) = exp(i*(phi+gamma)/2) U2_qibo(phi, gamma)``
|
|
1054
|
+
|
|
1055
|
+
Other unitaries you can get from this one are:
|
|
1056
|
+
- ``U2(phi=0, gamma=pi) = H``
|
|
1057
|
+
- ``U2(phi=0, gamma=0) = RY(theta=pi/2)``
|
|
1058
|
+
- ``U2(phi=-pi/2, gamma=pi/2) = RX(theta=pi/2)``
|
|
1059
|
+
"""
|
|
1060
|
+
|
|
1061
|
+
PARAMETER_NAMES: ClassVar[list[str]] = ["phi", "gamma"]
|
|
1062
|
+
|
|
1063
|
+
def __init__(self, qubit: int, *, phi: float | Parameter | Term, gamma: float | Parameter | Term) -> None:
|
|
1064
|
+
"""
|
|
1065
|
+
Initialize a U2 gate.
|
|
1066
|
+
|
|
1067
|
+
Args:
|
|
1068
|
+
qubit (int): The target qubit index for the U2 gate.
|
|
1069
|
+
phi (float | Parameter | Term): The first phase parameter, or equivalently the first rotation angle (azimuthal) in radians.
|
|
1070
|
+
gamma (float | Parameter | Term): The second phase parameter, or equivalently the second rotation angle (azimuthal) in radians.
|
|
1071
|
+
|
|
1072
|
+
"""
|
|
1073
|
+
# Initialize parameter terms dictionary
|
|
1074
|
+
params_to_init: dict[str, Parameter] = {}
|
|
1075
|
+
terms_to_init: dict[str, Term] = {}
|
|
1076
|
+
|
|
1077
|
+
# Process the parameters
|
|
1078
|
+
_process_param("phi", phi, params_to_init, terms_to_init)
|
|
1079
|
+
_process_param("gamma", gamma, params_to_init, terms_to_init)
|
|
1080
|
+
|
|
1081
|
+
# Initialize the base class
|
|
1082
|
+
super().__init__(
|
|
1083
|
+
target_qubits=(qubit,),
|
|
1084
|
+
parameters=params_to_init,
|
|
1085
|
+
parameter_transforms=terms_to_init,
|
|
1086
|
+
)
|
|
1087
|
+
|
|
1088
|
+
@property
|
|
1089
|
+
def name(self) -> str:
|
|
1090
|
+
return "U2"
|
|
1091
|
+
|
|
1092
|
+
@property
|
|
1093
|
+
def phi(self) -> float:
|
|
1094
|
+
if "phi" in self._parameter_transforms:
|
|
1095
|
+
val = self._parameter_transforms["phi"].evaluate({})
|
|
1096
|
+
if isinstance(val, complex):
|
|
1097
|
+
return val.real
|
|
1098
|
+
return val
|
|
1099
|
+
return self.get_parameters()["phi"]
|
|
1100
|
+
|
|
1101
|
+
@property
|
|
1102
|
+
def gamma(self) -> float:
|
|
1103
|
+
if "gamma" in self._parameter_transforms:
|
|
1104
|
+
val = self._parameter_transforms["gamma"].evaluate({})
|
|
1105
|
+
if isinstance(val, complex):
|
|
1106
|
+
return val.real
|
|
1107
|
+
return val
|
|
1108
|
+
return self.get_parameters()["gamma"]
|
|
1109
|
+
|
|
1110
|
+
def _generate_matrix(self) -> np.ndarray:
|
|
1111
|
+
phi = self.phi
|
|
1112
|
+
gamma = self.gamma
|
|
1113
|
+
return (1 / np.sqrt(2)) * np.array(
|
|
1114
|
+
[
|
|
1115
|
+
[1, -np.exp(1j * gamma)],
|
|
1116
|
+
[np.exp(1j * phi), np.exp(1j * (phi + gamma))],
|
|
1117
|
+
],
|
|
1118
|
+
dtype=_complex_dtype(),
|
|
1119
|
+
)
|
|
1120
|
+
|
|
1121
|
+
|
|
1122
|
+
@yaml.register_class
|
|
1123
|
+
class U3(BasicGate):
|
|
1124
|
+
"""
|
|
1125
|
+
Represents the U3 gate defined by the angles `theta`, `phi` and `gamma`.
|
|
1126
|
+
|
|
1127
|
+
The associated matrix is:
|
|
1128
|
+
|
|
1129
|
+
.. code-block:: text
|
|
1130
|
+
|
|
1131
|
+
[[cos(theta/2), -exp(i*gamma/2*sin(theta/2))],
|
|
1132
|
+
[exp(i*phi/2)*sin(theta/2), exp(i*(phi+gamma))*cos(theta/2)]]
|
|
1133
|
+
|
|
1134
|
+
Which is equivalent to two azimuthal rotations of `phi` and `gamma`, with a 'theta' polar rotation in between:
|
|
1135
|
+
``U3(theta, phi, gamma) = exp(i*(phi+gamma)/2) RZ(phi) RY(theta) RZ(gamma)``
|
|
1136
|
+
|
|
1137
|
+
This is the same matrix of `qiskit` and `pennylane`, differing from `QASM` and `qibo` implementation on a global phase:
|
|
1138
|
+
``U3(theta, phi, gamma) = U3_qiskit/pennylane(theta, phi, gamma) = exp(-i*(phi+gamma)/2) U3_QASM/qibo(theta, phi, gamma)``
|
|
1139
|
+
|
|
1140
|
+
Other unitaries you can get from this one are:
|
|
1141
|
+
- ``U3(theta=pi/2, phi, gamma) = U2(phi, gamma)``
|
|
1142
|
+
- ``U3(theta=0, phi=0, gamma) = U1(gamma)`` and ``U3(theta=0, phi, gamma=0) = U1(phi)``
|
|
1143
|
+
- ``U3(theta, phi=0, gamma=0) = RY(theta)``
|
|
1144
|
+
- ``U3(theta, phi=-pi/2, gamma=pi/2) = RX(theta)``
|
|
1145
|
+
"""
|
|
1146
|
+
|
|
1147
|
+
PARAMETER_NAMES: ClassVar[list[str]] = ["theta", "phi", "gamma"]
|
|
1148
|
+
|
|
1149
|
+
def __init__(
|
|
1150
|
+
self,
|
|
1151
|
+
qubit: int,
|
|
1152
|
+
*,
|
|
1153
|
+
theta: float | Parameter | Term,
|
|
1154
|
+
phi: float | Parameter | Term,
|
|
1155
|
+
gamma: float | Parameter | Term,
|
|
1156
|
+
) -> None:
|
|
1157
|
+
"""
|
|
1158
|
+
Initialize a U3 gate.
|
|
1159
|
+
|
|
1160
|
+
Args:
|
|
1161
|
+
qubit (int): The target qubit index for the U3 gate.
|
|
1162
|
+
theta (float | Parameter | Term): The rotation angle (polar), in between both phase rotations (azimuthal).
|
|
1163
|
+
phi (float | Parameter | Term): The first phase parameter, or equivalently the first rotation angle (azimuthal) in radians.
|
|
1164
|
+
gamma (float | Parameter | Term): The second phase parameter, or equivalently the second rotation angle (azimuthal) in radians.
|
|
1165
|
+
|
|
1166
|
+
"""
|
|
1167
|
+
|
|
1168
|
+
# Initialize parameter terms dictionary
|
|
1169
|
+
params_to_init: dict[str, Parameter] = {}
|
|
1170
|
+
terms_to_init: dict[str, Term] = {}
|
|
1171
|
+
|
|
1172
|
+
# Process the parameters
|
|
1173
|
+
_process_param("theta", theta, params_to_init, terms_to_init)
|
|
1174
|
+
_process_param("phi", phi, params_to_init, terms_to_init)
|
|
1175
|
+
_process_param("gamma", gamma, params_to_init, terms_to_init)
|
|
1176
|
+
|
|
1177
|
+
# Initialize the base class
|
|
1178
|
+
super().__init__(
|
|
1179
|
+
target_qubits=(qubit,),
|
|
1180
|
+
parameters=params_to_init,
|
|
1181
|
+
parameter_transforms=terms_to_init,
|
|
1182
|
+
)
|
|
1183
|
+
|
|
1184
|
+
@property
|
|
1185
|
+
def name(self) -> str:
|
|
1186
|
+
return "U3"
|
|
1187
|
+
|
|
1188
|
+
@property
|
|
1189
|
+
def theta(self) -> float:
|
|
1190
|
+
if "theta" in self._parameter_transforms:
|
|
1191
|
+
val = self._parameter_transforms["theta"].evaluate({})
|
|
1192
|
+
if isinstance(val, complex):
|
|
1193
|
+
return val.real
|
|
1194
|
+
return val
|
|
1195
|
+
return self.get_parameters()["theta"]
|
|
1196
|
+
|
|
1197
|
+
@property
|
|
1198
|
+
def phi(self) -> float:
|
|
1199
|
+
if "phi" in self._parameter_transforms:
|
|
1200
|
+
val = self._parameter_transforms["phi"].evaluate({})
|
|
1201
|
+
if isinstance(val, complex):
|
|
1202
|
+
return val.real
|
|
1203
|
+
return val
|
|
1204
|
+
return self.get_parameters()["phi"]
|
|
1205
|
+
|
|
1206
|
+
@property
|
|
1207
|
+
def gamma(self) -> float:
|
|
1208
|
+
if "gamma" in self._parameter_transforms:
|
|
1209
|
+
val = self._parameter_transforms["gamma"].evaluate({})
|
|
1210
|
+
if isinstance(val, complex):
|
|
1211
|
+
return val.real
|
|
1212
|
+
return val
|
|
1213
|
+
return self.get_parameters()["gamma"]
|
|
1214
|
+
|
|
1215
|
+
def _generate_matrix(self) -> np.ndarray:
|
|
1216
|
+
theta = self.theta
|
|
1217
|
+
phi = self.phi
|
|
1218
|
+
gamma = self.gamma
|
|
1219
|
+
return np.array(
|
|
1220
|
+
[
|
|
1221
|
+
[np.cos(theta / 2), -np.exp(1j * gamma) * np.sin(theta / 2)],
|
|
1222
|
+
[np.exp(1j * phi) * np.sin(theta / 2), np.exp(1j * (phi + gamma)) * np.cos(theta / 2)],
|
|
1223
|
+
],
|
|
1224
|
+
dtype=_complex_dtype(),
|
|
1225
|
+
)
|
|
1226
|
+
|
|
1227
|
+
|
|
1228
|
+
@yaml.register_class
|
|
1229
|
+
class CNOT(Controlled[X]):
|
|
1230
|
+
"""
|
|
1231
|
+
Represents the CNOT gate.
|
|
1232
|
+
|
|
1233
|
+
The associated matrix is:
|
|
1234
|
+
|
|
1235
|
+
.. code-block:: text
|
|
1236
|
+
|
|
1237
|
+
[[1, 0, 0, 0],
|
|
1238
|
+
[0, 1, 0, 0],
|
|
1239
|
+
[0, 0, 0, 1],
|
|
1240
|
+
[0, 0, 1, 0]]
|
|
1241
|
+
|
|
1242
|
+
Which is equivalent to the CZ gate surrounded by two H's gates on the target qubit:
|
|
1243
|
+
``CNOT(control, target) = H(target) CZ(control, target) H(target)``
|
|
1244
|
+
"""
|
|
1245
|
+
|
|
1246
|
+
def __init__(self, control: int, target: int) -> None:
|
|
1247
|
+
super().__init__(control, basic_gate=X(target))
|
|
1248
|
+
|
|
1249
|
+
@property
|
|
1250
|
+
def name(self) -> str:
|
|
1251
|
+
return "CNOT"
|
|
1252
|
+
|
|
1253
|
+
|
|
1254
|
+
@yaml.register_class
|
|
1255
|
+
class CZ(Controlled[Z]):
|
|
1256
|
+
"""
|
|
1257
|
+
Represents the CZ gate.
|
|
1258
|
+
|
|
1259
|
+
The associated matrix is:
|
|
1260
|
+
|
|
1261
|
+
.. code-block:: text
|
|
1262
|
+
|
|
1263
|
+
[[1, 0, 0, 0],
|
|
1264
|
+
[0, 1, 0, 0],
|
|
1265
|
+
[0, 0, 1, 0],
|
|
1266
|
+
[0, 0, 0, -1]]
|
|
1267
|
+
|
|
1268
|
+
This gate is totally symmetric respect control and target, meaning that both are control and target in reality:
|
|
1269
|
+
``CZ(control, target) = CZ(target, control)``
|
|
1270
|
+
|
|
1271
|
+
It is also equivalent to the CNOT gate surrounded by two H's gates on the target qubit:
|
|
1272
|
+
``CZ(control, target) = H(target) CNOT(control, target) H(target)``
|
|
1273
|
+
"""
|
|
1274
|
+
|
|
1275
|
+
def __init__(self, control: int, target: int) -> None:
|
|
1276
|
+
super().__init__(control, basic_gate=Z(target))
|
|
1277
|
+
|
|
1278
|
+
|
|
1279
|
+
@yaml.register_class
|
|
1280
|
+
class SWAP(BasicGate):
|
|
1281
|
+
"""
|
|
1282
|
+
The SWAP gate.
|
|
1283
|
+
|
|
1284
|
+
The associated matrix is:
|
|
1285
|
+
|
|
1286
|
+
.. code-block:: text
|
|
1287
|
+
|
|
1288
|
+
[[1, 0, 0, 0],
|
|
1289
|
+
[0, 0, 1, 0],
|
|
1290
|
+
[0, 1, 0, 0],
|
|
1291
|
+
[0, 0, 0, 1]]
|
|
1292
|
+
|
|
1293
|
+
"""
|
|
1294
|
+
|
|
1295
|
+
def __init__(self, qubit_a: int, qubit_b: int) -> None:
|
|
1296
|
+
"""
|
|
1297
|
+
Args:
|
|
1298
|
+
qubit_a (int): First qubit to swap with.
|
|
1299
|
+
qubit_b (int): Second qubit to swap with.
|
|
1300
|
+
"""
|
|
1301
|
+
super().__init__(target_qubits=(qubit_a, qubit_b))
|
|
1302
|
+
|
|
1303
|
+
@property
|
|
1304
|
+
def name(self) -> str:
|
|
1305
|
+
return "SWAP"
|
|
1306
|
+
|
|
1307
|
+
def _generate_matrix(self) -> np.ndarray: # noqa: PLR6301
|
|
1308
|
+
return np.array([[1, 0, 0, 0], [0, 0, 1, 0], [0, 1, 0, 0], [0, 0, 0, 1]], dtype=_complex_dtype())
|