qilisdk 0.1.8__cp312-cp312-win_amd64.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.
Files changed (633) hide show
  1. include/eigen3/Eigen/Cholesky +45 -0
  2. include/eigen3/Eigen/CholmodSupport +48 -0
  3. include/eigen3/Eigen/Core +384 -0
  4. include/eigen3/Eigen/Dense +7 -0
  5. include/eigen3/Eigen/Eigen +2 -0
  6. include/eigen3/Eigen/Eigenvalues +60 -0
  7. include/eigen3/Eigen/Geometry +59 -0
  8. include/eigen3/Eigen/Householder +29 -0
  9. include/eigen3/Eigen/IterativeLinearSolvers +48 -0
  10. include/eigen3/Eigen/Jacobi +32 -0
  11. include/eigen3/Eigen/KLUSupport +41 -0
  12. include/eigen3/Eigen/LU +47 -0
  13. include/eigen3/Eigen/MetisSupport +35 -0
  14. include/eigen3/Eigen/OrderingMethods +70 -0
  15. include/eigen3/Eigen/PaStiXSupport +49 -0
  16. include/eigen3/Eigen/PardisoSupport +35 -0
  17. include/eigen3/Eigen/QR +50 -0
  18. include/eigen3/Eigen/QtAlignedMalloc +39 -0
  19. include/eigen3/Eigen/SPQRSupport +34 -0
  20. include/eigen3/Eigen/SVD +50 -0
  21. include/eigen3/Eigen/Sparse +34 -0
  22. include/eigen3/Eigen/SparseCholesky +37 -0
  23. include/eigen3/Eigen/SparseCore +69 -0
  24. include/eigen3/Eigen/SparseLU +50 -0
  25. include/eigen3/Eigen/SparseQR +36 -0
  26. include/eigen3/Eigen/StdDeque +27 -0
  27. include/eigen3/Eigen/StdList +26 -0
  28. include/eigen3/Eigen/StdVector +27 -0
  29. include/eigen3/Eigen/SuperLUSupport +64 -0
  30. include/eigen3/Eigen/UmfPackSupport +40 -0
  31. include/eigen3/Eigen/src/Cholesky/LDLT.h +688 -0
  32. include/eigen3/Eigen/src/Cholesky/LLT.h +558 -0
  33. include/eigen3/Eigen/src/Cholesky/LLT_LAPACKE.h +99 -0
  34. include/eigen3/Eigen/src/CholmodSupport/CholmodSupport.h +682 -0
  35. include/eigen3/Eigen/src/Core/ArithmeticSequence.h +413 -0
  36. include/eigen3/Eigen/src/Core/Array.h +417 -0
  37. include/eigen3/Eigen/src/Core/ArrayBase.h +226 -0
  38. include/eigen3/Eigen/src/Core/ArrayWrapper.h +209 -0
  39. include/eigen3/Eigen/src/Core/Assign.h +90 -0
  40. include/eigen3/Eigen/src/Core/AssignEvaluator.h +1010 -0
  41. include/eigen3/Eigen/src/Core/Assign_MKL.h +178 -0
  42. include/eigen3/Eigen/src/Core/BandMatrix.h +353 -0
  43. include/eigen3/Eigen/src/Core/Block.h +448 -0
  44. include/eigen3/Eigen/src/Core/BooleanRedux.h +162 -0
  45. include/eigen3/Eigen/src/Core/CommaInitializer.h +164 -0
  46. include/eigen3/Eigen/src/Core/ConditionEstimator.h +175 -0
  47. include/eigen3/Eigen/src/Core/CoreEvaluators.h +1741 -0
  48. include/eigen3/Eigen/src/Core/CoreIterators.h +132 -0
  49. include/eigen3/Eigen/src/Core/CwiseBinaryOp.h +183 -0
  50. include/eigen3/Eigen/src/Core/CwiseNullaryOp.h +1001 -0
  51. include/eigen3/Eigen/src/Core/CwiseTernaryOp.h +197 -0
  52. include/eigen3/Eigen/src/Core/CwiseUnaryOp.h +103 -0
  53. include/eigen3/Eigen/src/Core/CwiseUnaryView.h +132 -0
  54. include/eigen3/Eigen/src/Core/DenseBase.h +701 -0
  55. include/eigen3/Eigen/src/Core/DenseCoeffsBase.h +685 -0
  56. include/eigen3/Eigen/src/Core/DenseStorage.h +652 -0
  57. include/eigen3/Eigen/src/Core/Diagonal.h +258 -0
  58. include/eigen3/Eigen/src/Core/DiagonalMatrix.h +391 -0
  59. include/eigen3/Eigen/src/Core/DiagonalProduct.h +28 -0
  60. include/eigen3/Eigen/src/Core/Dot.h +318 -0
  61. include/eigen3/Eigen/src/Core/EigenBase.h +160 -0
  62. include/eigen3/Eigen/src/Core/ForceAlignedAccess.h +150 -0
  63. include/eigen3/Eigen/src/Core/Fuzzy.h +155 -0
  64. include/eigen3/Eigen/src/Core/GeneralProduct.h +465 -0
  65. include/eigen3/Eigen/src/Core/GenericPacketMath.h +1040 -0
  66. include/eigen3/Eigen/src/Core/GlobalFunctions.h +194 -0
  67. include/eigen3/Eigen/src/Core/IO.h +258 -0
  68. include/eigen3/Eigen/src/Core/IndexedView.h +237 -0
  69. include/eigen3/Eigen/src/Core/Inverse.h +117 -0
  70. include/eigen3/Eigen/src/Core/Map.h +171 -0
  71. include/eigen3/Eigen/src/Core/MapBase.h +310 -0
  72. include/eigen3/Eigen/src/Core/MathFunctions.h +2057 -0
  73. include/eigen3/Eigen/src/Core/MathFunctionsImpl.h +200 -0
  74. include/eigen3/Eigen/src/Core/Matrix.h +565 -0
  75. include/eigen3/Eigen/src/Core/MatrixBase.h +547 -0
  76. include/eigen3/Eigen/src/Core/NestByValue.h +85 -0
  77. include/eigen3/Eigen/src/Core/NoAlias.h +109 -0
  78. include/eigen3/Eigen/src/Core/NumTraits.h +335 -0
  79. include/eigen3/Eigen/src/Core/PartialReduxEvaluator.h +232 -0
  80. include/eigen3/Eigen/src/Core/PermutationMatrix.h +605 -0
  81. include/eigen3/Eigen/src/Core/PlainObjectBase.h +1128 -0
  82. include/eigen3/Eigen/src/Core/Product.h +191 -0
  83. include/eigen3/Eigen/src/Core/ProductEvaluators.h +1179 -0
  84. include/eigen3/Eigen/src/Core/Random.h +218 -0
  85. include/eigen3/Eigen/src/Core/Redux.h +515 -0
  86. include/eigen3/Eigen/src/Core/Ref.h +381 -0
  87. include/eigen3/Eigen/src/Core/Replicate.h +142 -0
  88. include/eigen3/Eigen/src/Core/Reshaped.h +454 -0
  89. include/eigen3/Eigen/src/Core/ReturnByValue.h +119 -0
  90. include/eigen3/Eigen/src/Core/Reverse.h +217 -0
  91. include/eigen3/Eigen/src/Core/Select.h +164 -0
  92. include/eigen3/Eigen/src/Core/SelfAdjointView.h +365 -0
  93. include/eigen3/Eigen/src/Core/SelfCwiseBinaryOp.h +47 -0
  94. include/eigen3/Eigen/src/Core/Solve.h +188 -0
  95. include/eigen3/Eigen/src/Core/SolveTriangular.h +235 -0
  96. include/eigen3/Eigen/src/Core/SolverBase.h +168 -0
  97. include/eigen3/Eigen/src/Core/StableNorm.h +251 -0
  98. include/eigen3/Eigen/src/Core/StlIterators.h +463 -0
  99. include/eigen3/Eigen/src/Core/Stride.h +116 -0
  100. include/eigen3/Eigen/src/Core/Swap.h +68 -0
  101. include/eigen3/Eigen/src/Core/Transpose.h +464 -0
  102. include/eigen3/Eigen/src/Core/Transpositions.h +386 -0
  103. include/eigen3/Eigen/src/Core/TriangularMatrix.h +1001 -0
  104. include/eigen3/Eigen/src/Core/VectorBlock.h +96 -0
  105. include/eigen3/Eigen/src/Core/VectorwiseOp.h +784 -0
  106. include/eigen3/Eigen/src/Core/Visitor.h +381 -0
  107. include/eigen3/Eigen/src/Core/arch/AVX/Complex.h +372 -0
  108. include/eigen3/Eigen/src/Core/arch/AVX/MathFunctions.h +228 -0
  109. include/eigen3/Eigen/src/Core/arch/AVX/PacketMath.h +1574 -0
  110. include/eigen3/Eigen/src/Core/arch/AVX/TypeCasting.h +115 -0
  111. include/eigen3/Eigen/src/Core/arch/AVX512/Complex.h +422 -0
  112. include/eigen3/Eigen/src/Core/arch/AVX512/MathFunctions.h +362 -0
  113. include/eigen3/Eigen/src/Core/arch/AVX512/PacketMath.h +2303 -0
  114. include/eigen3/Eigen/src/Core/arch/AVX512/TypeCasting.h +89 -0
  115. include/eigen3/Eigen/src/Core/arch/AltiVec/Complex.h +417 -0
  116. include/eigen3/Eigen/src/Core/arch/AltiVec/MathFunctions.h +90 -0
  117. include/eigen3/Eigen/src/Core/arch/AltiVec/MatrixProduct.h +2937 -0
  118. include/eigen3/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h +221 -0
  119. include/eigen3/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h +629 -0
  120. include/eigen3/Eigen/src/Core/arch/AltiVec/PacketMath.h +2711 -0
  121. include/eigen3/Eigen/src/Core/arch/CUDA/Complex.h +258 -0
  122. include/eigen3/Eigen/src/Core/arch/Default/BFloat16.h +700 -0
  123. include/eigen3/Eigen/src/Core/arch/Default/ConjHelper.h +117 -0
  124. include/eigen3/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h +1649 -0
  125. include/eigen3/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h +110 -0
  126. include/eigen3/Eigen/src/Core/arch/Default/Half.h +942 -0
  127. include/eigen3/Eigen/src/Core/arch/Default/Settings.h +49 -0
  128. include/eigen3/Eigen/src/Core/arch/Default/TypeCasting.h +120 -0
  129. include/eigen3/Eigen/src/Core/arch/GPU/MathFunctions.h +103 -0
  130. include/eigen3/Eigen/src/Core/arch/GPU/PacketMath.h +1685 -0
  131. include/eigen3/Eigen/src/Core/arch/GPU/TypeCasting.h +80 -0
  132. include/eigen3/Eigen/src/Core/arch/HIP/hcc/math_constants.h +23 -0
  133. include/eigen3/Eigen/src/Core/arch/MSA/Complex.h +648 -0
  134. include/eigen3/Eigen/src/Core/arch/MSA/MathFunctions.h +387 -0
  135. include/eigen3/Eigen/src/Core/arch/MSA/PacketMath.h +1233 -0
  136. include/eigen3/Eigen/src/Core/arch/NEON/Complex.h +584 -0
  137. include/eigen3/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h +183 -0
  138. include/eigen3/Eigen/src/Core/arch/NEON/MathFunctions.h +75 -0
  139. include/eigen3/Eigen/src/Core/arch/NEON/PacketMath.h +4587 -0
  140. include/eigen3/Eigen/src/Core/arch/NEON/TypeCasting.h +1419 -0
  141. include/eigen3/Eigen/src/Core/arch/SSE/Complex.h +351 -0
  142. include/eigen3/Eigen/src/Core/arch/SSE/MathFunctions.h +199 -0
  143. include/eigen3/Eigen/src/Core/arch/SSE/PacketMath.h +1505 -0
  144. include/eigen3/Eigen/src/Core/arch/SSE/TypeCasting.h +142 -0
  145. include/eigen3/Eigen/src/Core/arch/SVE/MathFunctions.h +44 -0
  146. include/eigen3/Eigen/src/Core/arch/SVE/PacketMath.h +752 -0
  147. include/eigen3/Eigen/src/Core/arch/SVE/TypeCasting.h +49 -0
  148. include/eigen3/Eigen/src/Core/arch/SYCL/InteropHeaders.h +232 -0
  149. include/eigen3/Eigen/src/Core/arch/SYCL/MathFunctions.h +301 -0
  150. include/eigen3/Eigen/src/Core/arch/SYCL/PacketMath.h +670 -0
  151. include/eigen3/Eigen/src/Core/arch/SYCL/SyclMemoryModel.h +694 -0
  152. include/eigen3/Eigen/src/Core/arch/SYCL/TypeCasting.h +85 -0
  153. include/eigen3/Eigen/src/Core/arch/ZVector/Complex.h +426 -0
  154. include/eigen3/Eigen/src/Core/arch/ZVector/MathFunctions.h +233 -0
  155. include/eigen3/Eigen/src/Core/arch/ZVector/PacketMath.h +1060 -0
  156. include/eigen3/Eigen/src/Core/functors/AssignmentFunctors.h +177 -0
  157. include/eigen3/Eigen/src/Core/functors/BinaryFunctors.h +541 -0
  158. include/eigen3/Eigen/src/Core/functors/NullaryFunctors.h +189 -0
  159. include/eigen3/Eigen/src/Core/functors/StlFunctors.h +166 -0
  160. include/eigen3/Eigen/src/Core/functors/TernaryFunctors.h +25 -0
  161. include/eigen3/Eigen/src/Core/functors/UnaryFunctors.h +1131 -0
  162. include/eigen3/Eigen/src/Core/products/GeneralBlockPanelKernel.h +2645 -0
  163. include/eigen3/Eigen/src/Core/products/GeneralMatrixMatrix.h +517 -0
  164. include/eigen3/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +317 -0
  165. include/eigen3/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h +145 -0
  166. include/eigen3/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h +124 -0
  167. include/eigen3/Eigen/src/Core/products/GeneralMatrixVector.h +518 -0
  168. include/eigen3/Eigen/src/Core/products/GeneralMatrixVector_BLAS.h +136 -0
  169. include/eigen3/Eigen/src/Core/products/Parallelizer.h +180 -0
  170. include/eigen3/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +544 -0
  171. include/eigen3/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h +295 -0
  172. include/eigen3/Eigen/src/Core/products/SelfadjointMatrixVector.h +262 -0
  173. include/eigen3/Eigen/src/Core/products/SelfadjointMatrixVector_BLAS.h +118 -0
  174. include/eigen3/Eigen/src/Core/products/SelfadjointProduct.h +133 -0
  175. include/eigen3/Eigen/src/Core/products/SelfadjointRank2Update.h +94 -0
  176. include/eigen3/Eigen/src/Core/products/TriangularMatrixMatrix.h +472 -0
  177. include/eigen3/Eigen/src/Core/products/TriangularMatrixMatrix_BLAS.h +317 -0
  178. include/eigen3/Eigen/src/Core/products/TriangularMatrixVector.h +350 -0
  179. include/eigen3/Eigen/src/Core/products/TriangularMatrixVector_BLAS.h +255 -0
  180. include/eigen3/Eigen/src/Core/products/TriangularSolverMatrix.h +337 -0
  181. include/eigen3/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h +167 -0
  182. include/eigen3/Eigen/src/Core/products/TriangularSolverVector.h +148 -0
  183. include/eigen3/Eigen/src/Core/util/BlasUtil.h +583 -0
  184. include/eigen3/Eigen/src/Core/util/ConfigureVectorization.h +512 -0
  185. include/eigen3/Eigen/src/Core/util/Constants.h +563 -0
  186. include/eigen3/Eigen/src/Core/util/DisableStupidWarnings.h +106 -0
  187. include/eigen3/Eigen/src/Core/util/ForwardDeclarations.h +322 -0
  188. include/eigen3/Eigen/src/Core/util/IndexedViewHelper.h +186 -0
  189. include/eigen3/Eigen/src/Core/util/IntegralConstant.h +272 -0
  190. include/eigen3/Eigen/src/Core/util/MKL_support.h +137 -0
  191. include/eigen3/Eigen/src/Core/util/Macros.h +1464 -0
  192. include/eigen3/Eigen/src/Core/util/Memory.h +1163 -0
  193. include/eigen3/Eigen/src/Core/util/Meta.h +812 -0
  194. include/eigen3/Eigen/src/Core/util/NonMPL2.h +3 -0
  195. include/eigen3/Eigen/src/Core/util/ReenableStupidWarnings.h +31 -0
  196. include/eigen3/Eigen/src/Core/util/ReshapedHelper.h +51 -0
  197. include/eigen3/Eigen/src/Core/util/StaticAssert.h +221 -0
  198. include/eigen3/Eigen/src/Core/util/SymbolicIndex.h +293 -0
  199. include/eigen3/Eigen/src/Core/util/XprHelper.h +856 -0
  200. include/eigen3/Eigen/src/Eigenvalues/ComplexEigenSolver.h +346 -0
  201. include/eigen3/Eigen/src/Eigenvalues/ComplexSchur.h +462 -0
  202. include/eigen3/Eigen/src/Eigenvalues/ComplexSchur_LAPACKE.h +91 -0
  203. include/eigen3/Eigen/src/Eigenvalues/EigenSolver.h +622 -0
  204. include/eigen3/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h +418 -0
  205. include/eigen3/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h +226 -0
  206. include/eigen3/Eigen/src/Eigenvalues/HessenbergDecomposition.h +374 -0
  207. include/eigen3/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h +158 -0
  208. include/eigen3/Eigen/src/Eigenvalues/RealQZ.h +657 -0
  209. include/eigen3/Eigen/src/Eigenvalues/RealSchur.h +558 -0
  210. include/eigen3/Eigen/src/Eigenvalues/RealSchur_LAPACKE.h +77 -0
  211. include/eigen3/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +904 -0
  212. include/eigen3/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h +87 -0
  213. include/eigen3/Eigen/src/Eigenvalues/Tridiagonalization.h +561 -0
  214. include/eigen3/Eigen/src/Geometry/AlignedBox.h +486 -0
  215. include/eigen3/Eigen/src/Geometry/AngleAxis.h +247 -0
  216. include/eigen3/Eigen/src/Geometry/EulerAngles.h +114 -0
  217. include/eigen3/Eigen/src/Geometry/Homogeneous.h +501 -0
  218. include/eigen3/Eigen/src/Geometry/Hyperplane.h +282 -0
  219. include/eigen3/Eigen/src/Geometry/OrthoMethods.h +235 -0
  220. include/eigen3/Eigen/src/Geometry/ParametrizedLine.h +232 -0
  221. include/eigen3/Eigen/src/Geometry/Quaternion.h +870 -0
  222. include/eigen3/Eigen/src/Geometry/Rotation2D.h +199 -0
  223. include/eigen3/Eigen/src/Geometry/RotationBase.h +206 -0
  224. include/eigen3/Eigen/src/Geometry/Scaling.h +188 -0
  225. include/eigen3/Eigen/src/Geometry/Transform.h +1563 -0
  226. include/eigen3/Eigen/src/Geometry/Translation.h +202 -0
  227. include/eigen3/Eigen/src/Geometry/Umeyama.h +166 -0
  228. include/eigen3/Eigen/src/Geometry/arch/Geometry_SIMD.h +168 -0
  229. include/eigen3/Eigen/src/Householder/BlockHouseholder.h +110 -0
  230. include/eigen3/Eigen/src/Householder/Householder.h +176 -0
  231. include/eigen3/Eigen/src/Householder/HouseholderSequence.h +545 -0
  232. include/eigen3/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +226 -0
  233. include/eigen3/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +212 -0
  234. include/eigen3/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +229 -0
  235. include/eigen3/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +394 -0
  236. include/eigen3/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +453 -0
  237. include/eigen3/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +444 -0
  238. include/eigen3/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h +198 -0
  239. include/eigen3/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h +117 -0
  240. include/eigen3/Eigen/src/Jacobi/Jacobi.h +483 -0
  241. include/eigen3/Eigen/src/KLUSupport/KLUSupport.h +358 -0
  242. include/eigen3/Eigen/src/LU/Determinant.h +117 -0
  243. include/eigen3/Eigen/src/LU/FullPivLU.h +877 -0
  244. include/eigen3/Eigen/src/LU/InverseImpl.h +432 -0
  245. include/eigen3/Eigen/src/LU/PartialPivLU.h +624 -0
  246. include/eigen3/Eigen/src/LU/PartialPivLU_LAPACKE.h +83 -0
  247. include/eigen3/Eigen/src/LU/arch/InverseSize4.h +351 -0
  248. include/eigen3/Eigen/src/MetisSupport/MetisSupport.h +137 -0
  249. include/eigen3/Eigen/src/OrderingMethods/Amd.h +435 -0
  250. include/eigen3/Eigen/src/OrderingMethods/Eigen_Colamd.h +1863 -0
  251. include/eigen3/Eigen/src/OrderingMethods/Ordering.h +153 -0
  252. include/eigen3/Eigen/src/PaStiXSupport/PaStiXSupport.h +678 -0
  253. include/eigen3/Eigen/src/PardisoSupport/PardisoSupport.h +545 -0
  254. include/eigen3/Eigen/src/QR/ColPivHouseholderQR.h +674 -0
  255. include/eigen3/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h +97 -0
  256. include/eigen3/Eigen/src/QR/CompleteOrthogonalDecomposition.h +635 -0
  257. include/eigen3/Eigen/src/QR/FullPivHouseholderQR.h +713 -0
  258. include/eigen3/Eigen/src/QR/HouseholderQR.h +434 -0
  259. include/eigen3/Eigen/src/QR/HouseholderQR_LAPACKE.h +68 -0
  260. include/eigen3/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h +335 -0
  261. include/eigen3/Eigen/src/SVD/BDCSVD.h +1366 -0
  262. include/eigen3/Eigen/src/SVD/JacobiSVD.h +812 -0
  263. include/eigen3/Eigen/src/SVD/JacobiSVD_LAPACKE.h +91 -0
  264. include/eigen3/Eigen/src/SVD/SVDBase.h +376 -0
  265. include/eigen3/Eigen/src/SVD/UpperBidiagonalization.h +414 -0
  266. include/eigen3/Eigen/src/SparseCholesky/SimplicialCholesky.h +697 -0
  267. include/eigen3/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +174 -0
  268. include/eigen3/Eigen/src/SparseCore/AmbiVector.h +378 -0
  269. include/eigen3/Eigen/src/SparseCore/CompressedStorage.h +274 -0
  270. include/eigen3/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +352 -0
  271. include/eigen3/Eigen/src/SparseCore/MappedSparseMatrix.h +67 -0
  272. include/eigen3/Eigen/src/SparseCore/SparseAssign.h +270 -0
  273. include/eigen3/Eigen/src/SparseCore/SparseBlock.h +571 -0
  274. include/eigen3/Eigen/src/SparseCore/SparseColEtree.h +206 -0
  275. include/eigen3/Eigen/src/SparseCore/SparseCompressedBase.h +370 -0
  276. include/eigen3/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +722 -0
  277. include/eigen3/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +150 -0
  278. include/eigen3/Eigen/src/SparseCore/SparseDenseProduct.h +342 -0
  279. include/eigen3/Eigen/src/SparseCore/SparseDiagonalProduct.h +138 -0
  280. include/eigen3/Eigen/src/SparseCore/SparseDot.h +98 -0
  281. include/eigen3/Eigen/src/SparseCore/SparseFuzzy.h +29 -0
  282. include/eigen3/Eigen/src/SparseCore/SparseMap.h +305 -0
  283. include/eigen3/Eigen/src/SparseCore/SparseMatrix.h +1518 -0
  284. include/eigen3/Eigen/src/SparseCore/SparseMatrixBase.h +398 -0
  285. include/eigen3/Eigen/src/SparseCore/SparsePermutation.h +178 -0
  286. include/eigen3/Eigen/src/SparseCore/SparseProduct.h +181 -0
  287. include/eigen3/Eigen/src/SparseCore/SparseRedux.h +49 -0
  288. include/eigen3/Eigen/src/SparseCore/SparseRef.h +397 -0
  289. include/eigen3/Eigen/src/SparseCore/SparseSelfAdjointView.h +659 -0
  290. include/eigen3/Eigen/src/SparseCore/SparseSolverBase.h +124 -0
  291. include/eigen3/Eigen/src/SparseCore/SparseSparseProductWithPruning.h +198 -0
  292. include/eigen3/Eigen/src/SparseCore/SparseTranspose.h +92 -0
  293. include/eigen3/Eigen/src/SparseCore/SparseTriangularView.h +189 -0
  294. include/eigen3/Eigen/src/SparseCore/SparseUtil.h +186 -0
  295. include/eigen3/Eigen/src/SparseCore/SparseVector.h +478 -0
  296. include/eigen3/Eigen/src/SparseCore/SparseView.h +254 -0
  297. include/eigen3/Eigen/src/SparseCore/TriangularSolver.h +315 -0
  298. include/eigen3/Eigen/src/SparseLU/SparseLU.h +923 -0
  299. include/eigen3/Eigen/src/SparseLU/SparseLUImpl.h +66 -0
  300. include/eigen3/Eigen/src/SparseLU/SparseLU_Memory.h +226 -0
  301. include/eigen3/Eigen/src/SparseLU/SparseLU_Structs.h +110 -0
  302. include/eigen3/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h +375 -0
  303. include/eigen3/Eigen/src/SparseLU/SparseLU_Utils.h +80 -0
  304. include/eigen3/Eigen/src/SparseLU/SparseLU_column_bmod.h +181 -0
  305. include/eigen3/Eigen/src/SparseLU/SparseLU_column_dfs.h +179 -0
  306. include/eigen3/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h +107 -0
  307. include/eigen3/Eigen/src/SparseLU/SparseLU_gemm_kernel.h +280 -0
  308. include/eigen3/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h +126 -0
  309. include/eigen3/Eigen/src/SparseLU/SparseLU_kernel_bmod.h +130 -0
  310. include/eigen3/Eigen/src/SparseLU/SparseLU_panel_bmod.h +223 -0
  311. include/eigen3/Eigen/src/SparseLU/SparseLU_panel_dfs.h +258 -0
  312. include/eigen3/Eigen/src/SparseLU/SparseLU_pivotL.h +137 -0
  313. include/eigen3/Eigen/src/SparseLU/SparseLU_pruneL.h +136 -0
  314. include/eigen3/Eigen/src/SparseLU/SparseLU_relax_snode.h +83 -0
  315. include/eigen3/Eigen/src/SparseQR/SparseQR.h +758 -0
  316. include/eigen3/Eigen/src/StlSupport/StdDeque.h +116 -0
  317. include/eigen3/Eigen/src/StlSupport/StdList.h +106 -0
  318. include/eigen3/Eigen/src/StlSupport/StdVector.h +131 -0
  319. include/eigen3/Eigen/src/StlSupport/details.h +84 -0
  320. include/eigen3/Eigen/src/SuperLUSupport/SuperLUSupport.h +1025 -0
  321. include/eigen3/Eigen/src/UmfPackSupport/UmfPackSupport.h +642 -0
  322. include/eigen3/Eigen/src/misc/Image.h +82 -0
  323. include/eigen3/Eigen/src/misc/Kernel.h +79 -0
  324. include/eigen3/Eigen/src/misc/RealSvd2x2.h +55 -0
  325. include/eigen3/Eigen/src/misc/blas.h +440 -0
  326. include/eigen3/Eigen/src/misc/lapack.h +152 -0
  327. include/eigen3/Eigen/src/misc/lapacke.h +16292 -0
  328. include/eigen3/Eigen/src/misc/lapacke_mangling.h +17 -0
  329. include/eigen3/Eigen/src/plugins/ArrayCwiseBinaryOps.h +358 -0
  330. include/eigen3/Eigen/src/plugins/ArrayCwiseUnaryOps.h +696 -0
  331. include/eigen3/Eigen/src/plugins/BlockMethods.h +1442 -0
  332. include/eigen3/Eigen/src/plugins/CommonCwiseBinaryOps.h +115 -0
  333. include/eigen3/Eigen/src/plugins/CommonCwiseUnaryOps.h +177 -0
  334. include/eigen3/Eigen/src/plugins/IndexedViewMethods.h +262 -0
  335. include/eigen3/Eigen/src/plugins/MatrixCwiseBinaryOps.h +152 -0
  336. include/eigen3/Eigen/src/plugins/MatrixCwiseUnaryOps.h +95 -0
  337. include/eigen3/Eigen/src/plugins/ReshapedMethods.h +149 -0
  338. include/eigen3/signature_of_eigen3_matrix_library +1 -0
  339. include/eigen3/unsupported/Eigen/AdolcForward +159 -0
  340. include/eigen3/unsupported/Eigen/AlignedVector3 +234 -0
  341. include/eigen3/unsupported/Eigen/ArpackSupport +30 -0
  342. include/eigen3/unsupported/Eigen/AutoDiff +46 -0
  343. include/eigen3/unsupported/Eigen/BVH +95 -0
  344. include/eigen3/unsupported/Eigen/CXX11/Tensor +137 -0
  345. include/eigen3/unsupported/Eigen/CXX11/TensorSymmetry +42 -0
  346. include/eigen3/unsupported/Eigen/CXX11/ThreadPool +74 -0
  347. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/Tensor.h +554 -0
  348. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorArgMax.h +329 -0
  349. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorAssign.h +247 -0
  350. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorBase.h +1176 -0
  351. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorBlock.h +1559 -0
  352. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorBroadcasting.h +1093 -0
  353. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorChipping.h +518 -0
  354. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorConcatenation.h +377 -0
  355. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContraction.h +1023 -0
  356. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionBlocking.h +73 -0
  357. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionCuda.h +6 -0
  358. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionGpu.h +1413 -0
  359. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionMapper.h +575 -0
  360. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionSycl.h +1650 -0
  361. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorContractionThreadPool.h +1679 -0
  362. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorConversion.h +456 -0
  363. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorConvolution.h +1132 -0
  364. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorConvolutionSycl.h +544 -0
  365. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorCostModel.h +214 -0
  366. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorCustomOp.h +347 -0
  367. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDevice.h +137 -0
  368. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDeviceCuda.h +6 -0
  369. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDeviceDefault.h +104 -0
  370. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDeviceGpu.h +389 -0
  371. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDeviceSycl.h +1048 -0
  372. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDeviceThreadPool.h +409 -0
  373. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDimensionList.h +236 -0
  374. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorDimensions.h +490 -0
  375. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorEvalTo.h +236 -0
  376. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorEvaluator.h +983 -0
  377. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorExecutor.h +703 -0
  378. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorExpr.h +388 -0
  379. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorFFT.h +669 -0
  380. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorFixedSize.h +379 -0
  381. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorForcedEval.h +237 -0
  382. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorForwardDeclarations.h +191 -0
  383. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorFunctors.h +488 -0
  384. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorGenerator.h +302 -0
  385. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorGlobalFunctions.h +33 -0
  386. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorGpuHipCudaDefines.h +99 -0
  387. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorGpuHipCudaUndefines.h +44 -0
  388. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorIO.h +79 -0
  389. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorImagePatch.h +603 -0
  390. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorIndexList.h +738 -0
  391. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorInflation.h +247 -0
  392. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorInitializer.h +82 -0
  393. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorIntDiv.h +263 -0
  394. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorLayoutSwap.h +216 -0
  395. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorMacros.h +98 -0
  396. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorMap.h +327 -0
  397. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorMeta.h +311 -0
  398. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorMorphing.h +1102 -0
  399. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorPadding.h +708 -0
  400. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorPatch.h +291 -0
  401. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorRandom.h +322 -0
  402. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorReduction.h +998 -0
  403. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorReductionCuda.h +6 -0
  404. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorReductionGpu.h +966 -0
  405. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorReductionSycl.h +582 -0
  406. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorRef.h +454 -0
  407. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorReverse.h +465 -0
  408. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorScan.h +528 -0
  409. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorScanSycl.h +513 -0
  410. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorShuffling.h +471 -0
  411. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorStorage.h +161 -0
  412. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorStriding.h +346 -0
  413. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorTrace.h +303 -0
  414. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorTraits.h +264 -0
  415. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorUInt128.h +249 -0
  416. include/eigen3/unsupported/Eigen/CXX11/src/Tensor/TensorVolumePatch.h +629 -0
  417. include/eigen3/unsupported/Eigen/CXX11/src/TensorSymmetry/DynamicSymmetry.h +293 -0
  418. include/eigen3/unsupported/Eigen/CXX11/src/TensorSymmetry/StaticSymmetry.h +236 -0
  419. include/eigen3/unsupported/Eigen/CXX11/src/TensorSymmetry/Symmetry.h +338 -0
  420. include/eigen3/unsupported/Eigen/CXX11/src/TensorSymmetry/util/TemplateGroupTheory.h +669 -0
  421. include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/Barrier.h +67 -0
  422. include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/EventCount.h +249 -0
  423. include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/NonBlockingThreadPool.h +486 -0
  424. include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/RunQueue.h +236 -0
  425. include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/ThreadCancel.h +23 -0
  426. include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/ThreadEnvironment.h +40 -0
  427. include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/ThreadLocal.h +301 -0
  428. include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/ThreadPoolInterface.h +48 -0
  429. include/eigen3/unsupported/Eigen/CXX11/src/ThreadPool/ThreadYield.h +20 -0
  430. include/eigen3/unsupported/Eigen/CXX11/src/util/CXX11Meta.h +537 -0
  431. include/eigen3/unsupported/Eigen/CXX11/src/util/CXX11Workarounds.h +88 -0
  432. include/eigen3/unsupported/Eigen/CXX11/src/util/EmulateArray.h +261 -0
  433. include/eigen3/unsupported/Eigen/CXX11/src/util/MaxSizeVector.h +158 -0
  434. include/eigen3/unsupported/Eigen/EulerAngles +43 -0
  435. include/eigen3/unsupported/Eigen/FFT +419 -0
  436. include/eigen3/unsupported/Eigen/IterativeSolvers +51 -0
  437. include/eigen3/unsupported/Eigen/KroneckerProduct +36 -0
  438. include/eigen3/unsupported/Eigen/LevenbergMarquardt +49 -0
  439. include/eigen3/unsupported/Eigen/MPRealSupport +213 -0
  440. include/eigen3/unsupported/Eigen/MatrixFunctions +504 -0
  441. include/eigen3/unsupported/Eigen/MoreVectorization +24 -0
  442. include/eigen3/unsupported/Eigen/NonLinearOptimization +140 -0
  443. include/eigen3/unsupported/Eigen/NumericalDiff +56 -0
  444. include/eigen3/unsupported/Eigen/OpenGLSupport +322 -0
  445. include/eigen3/unsupported/Eigen/Polynomials +137 -0
  446. include/eigen3/unsupported/Eigen/Skyline +39 -0
  447. include/eigen3/unsupported/Eigen/SparseExtra +54 -0
  448. include/eigen3/unsupported/Eigen/SpecialFunctions +103 -0
  449. include/eigen3/unsupported/Eigen/Splines +35 -0
  450. include/eigen3/unsupported/Eigen/src/AutoDiff/AutoDiffJacobian.h +108 -0
  451. include/eigen3/unsupported/Eigen/src/AutoDiff/AutoDiffScalar.h +730 -0
  452. include/eigen3/unsupported/Eigen/src/AutoDiff/AutoDiffVector.h +220 -0
  453. include/eigen3/unsupported/Eigen/src/BVH/BVAlgorithms.h +293 -0
  454. include/eigen3/unsupported/Eigen/src/BVH/KdBVH.h +223 -0
  455. include/eigen3/unsupported/Eigen/src/Eigenvalues/ArpackSelfAdjointEigenSolver.h +790 -0
  456. include/eigen3/unsupported/Eigen/src/EulerAngles/EulerAngles.h +355 -0
  457. include/eigen3/unsupported/Eigen/src/EulerAngles/EulerSystem.h +305 -0
  458. include/eigen3/unsupported/Eigen/src/FFT/ei_fftw_impl.h +261 -0
  459. include/eigen3/unsupported/Eigen/src/FFT/ei_kissfft_impl.h +449 -0
  460. include/eigen3/unsupported/Eigen/src/IterativeSolvers/ConstrainedConjGrad.h +187 -0
  461. include/eigen3/unsupported/Eigen/src/IterativeSolvers/DGMRES.h +511 -0
  462. include/eigen3/unsupported/Eigen/src/IterativeSolvers/GMRES.h +335 -0
  463. include/eigen3/unsupported/Eigen/src/IterativeSolvers/IDRS.h +436 -0
  464. include/eigen3/unsupported/Eigen/src/IterativeSolvers/IncompleteLU.h +90 -0
  465. include/eigen3/unsupported/Eigen/src/IterativeSolvers/IterationController.h +154 -0
  466. include/eigen3/unsupported/Eigen/src/IterativeSolvers/MINRES.h +267 -0
  467. include/eigen3/unsupported/Eigen/src/IterativeSolvers/Scaling.h +193 -0
  468. include/eigen3/unsupported/Eigen/src/KroneckerProduct/KroneckerTensorProduct.h +305 -0
  469. include/eigen3/unsupported/Eigen/src/LevenbergMarquardt/LMcovar.h +84 -0
  470. include/eigen3/unsupported/Eigen/src/LevenbergMarquardt/LMonestep.h +202 -0
  471. include/eigen3/unsupported/Eigen/src/LevenbergMarquardt/LMpar.h +160 -0
  472. include/eigen3/unsupported/Eigen/src/LevenbergMarquardt/LMqrsolv.h +188 -0
  473. include/eigen3/unsupported/Eigen/src/LevenbergMarquardt/LevenbergMarquardt.h +396 -0
  474. include/eigen3/unsupported/Eigen/src/MatrixFunctions/MatrixExponential.h +441 -0
  475. include/eigen3/unsupported/Eigen/src/MatrixFunctions/MatrixFunction.h +569 -0
  476. include/eigen3/unsupported/Eigen/src/MatrixFunctions/MatrixLogarithm.h +373 -0
  477. include/eigen3/unsupported/Eigen/src/MatrixFunctions/MatrixPower.h +705 -0
  478. include/eigen3/unsupported/Eigen/src/MatrixFunctions/MatrixSquareRoot.h +368 -0
  479. include/eigen3/unsupported/Eigen/src/MatrixFunctions/StemFunction.h +117 -0
  480. include/eigen3/unsupported/Eigen/src/MoreVectorization/MathFunctions.h +95 -0
  481. include/eigen3/unsupported/Eigen/src/NonLinearOptimization/HybridNonLinearSolver.h +601 -0
  482. include/eigen3/unsupported/Eigen/src/NonLinearOptimization/LevenbergMarquardt.h +657 -0
  483. include/eigen3/unsupported/Eigen/src/NonLinearOptimization/chkder.h +66 -0
  484. include/eigen3/unsupported/Eigen/src/NonLinearOptimization/covar.h +70 -0
  485. include/eigen3/unsupported/Eigen/src/NonLinearOptimization/dogleg.h +107 -0
  486. include/eigen3/unsupported/Eigen/src/NonLinearOptimization/fdjac1.h +79 -0
  487. include/eigen3/unsupported/Eigen/src/NonLinearOptimization/lmpar.h +298 -0
  488. include/eigen3/unsupported/Eigen/src/NonLinearOptimization/qrsolv.h +91 -0
  489. include/eigen3/unsupported/Eigen/src/NonLinearOptimization/r1mpyq.h +30 -0
  490. include/eigen3/unsupported/Eigen/src/NonLinearOptimization/r1updt.h +99 -0
  491. include/eigen3/unsupported/Eigen/src/NonLinearOptimization/rwupdt.h +49 -0
  492. include/eigen3/unsupported/Eigen/src/NumericalDiff/NumericalDiff.h +130 -0
  493. include/eigen3/unsupported/Eigen/src/Polynomials/Companion.h +280 -0
  494. include/eigen3/unsupported/Eigen/src/Polynomials/PolynomialSolver.h +428 -0
  495. include/eigen3/unsupported/Eigen/src/Polynomials/PolynomialUtils.h +143 -0
  496. include/eigen3/unsupported/Eigen/src/Skyline/SkylineInplaceLU.h +352 -0
  497. include/eigen3/unsupported/Eigen/src/Skyline/SkylineMatrix.h +862 -0
  498. include/eigen3/unsupported/Eigen/src/Skyline/SkylineMatrixBase.h +212 -0
  499. include/eigen3/unsupported/Eigen/src/Skyline/SkylineProduct.h +295 -0
  500. include/eigen3/unsupported/Eigen/src/Skyline/SkylineStorage.h +259 -0
  501. include/eigen3/unsupported/Eigen/src/Skyline/SkylineUtil.h +89 -0
  502. include/eigen3/unsupported/Eigen/src/SparseExtra/BlockOfDynamicSparseMatrix.h +122 -0
  503. include/eigen3/unsupported/Eigen/src/SparseExtra/BlockSparseMatrix.h +1079 -0
  504. include/eigen3/unsupported/Eigen/src/SparseExtra/DynamicSparseMatrix.h +404 -0
  505. include/eigen3/unsupported/Eigen/src/SparseExtra/MarketIO.h +282 -0
  506. include/eigen3/unsupported/Eigen/src/SparseExtra/MatrixMarketIterator.h +247 -0
  507. include/eigen3/unsupported/Eigen/src/SparseExtra/RandomSetter.h +349 -0
  508. include/eigen3/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsArrayAPI.h +286 -0
  509. include/eigen3/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsBFloat16.h +68 -0
  510. include/eigen3/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsFunctors.h +357 -0
  511. include/eigen3/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsHalf.h +66 -0
  512. include/eigen3/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsImpl.h +1959 -0
  513. include/eigen3/unsupported/Eigen/src/SpecialFunctions/BesselFunctionsPacketMath.h +118 -0
  514. include/eigen3/unsupported/Eigen/src/SpecialFunctions/HipVectorCompatibility.h +67 -0
  515. include/eigen3/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsArrayAPI.h +167 -0
  516. include/eigen3/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsBFloat16.h +58 -0
  517. include/eigen3/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsFunctors.h +330 -0
  518. include/eigen3/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsHalf.h +58 -0
  519. include/eigen3/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsImpl.h +2045 -0
  520. include/eigen3/unsupported/Eigen/src/SpecialFunctions/SpecialFunctionsPacketMath.h +79 -0
  521. include/eigen3/unsupported/Eigen/src/SpecialFunctions/arch/AVX/BesselFunctions.h +46 -0
  522. include/eigen3/unsupported/Eigen/src/SpecialFunctions/arch/AVX/SpecialFunctions.h +16 -0
  523. include/eigen3/unsupported/Eigen/src/SpecialFunctions/arch/AVX512/BesselFunctions.h +46 -0
  524. include/eigen3/unsupported/Eigen/src/SpecialFunctions/arch/AVX512/SpecialFunctions.h +16 -0
  525. include/eigen3/unsupported/Eigen/src/SpecialFunctions/arch/GPU/SpecialFunctions.h +369 -0
  526. include/eigen3/unsupported/Eigen/src/SpecialFunctions/arch/NEON/BesselFunctions.h +54 -0
  527. include/eigen3/unsupported/Eigen/src/SpecialFunctions/arch/NEON/SpecialFunctions.h +34 -0
  528. include/eigen3/unsupported/Eigen/src/Splines/Spline.h +507 -0
  529. include/eigen3/unsupported/Eigen/src/Splines/SplineFitting.h +431 -0
  530. include/eigen3/unsupported/Eigen/src/Splines/SplineFwd.h +93 -0
  531. qilisdk/__init__.py +26 -0
  532. qilisdk/__init__.pyi +16 -0
  533. qilisdk/_logging.py +135 -0
  534. qilisdk/_optionals.py +137 -0
  535. qilisdk/analog/__init__.py +18 -0
  536. qilisdk/analog/exceptions.py +17 -0
  537. qilisdk/analog/hamiltonian.py +1068 -0
  538. qilisdk/analog/schedule.py +483 -0
  539. qilisdk/backends/__init__.py +46 -0
  540. qilisdk/backends/__init__.pyi +18 -0
  541. qilisdk/backends/backend.py +132 -0
  542. qilisdk/backends/cuda_backend.py +752 -0
  543. qilisdk/backends/qilisim.py +148 -0
  544. qilisdk/backends/qutip_backend.py +504 -0
  545. qilisdk/core/__init__.py +70 -0
  546. qilisdk/core/exceptions.py +29 -0
  547. qilisdk/core/interpolator.py +640 -0
  548. qilisdk/core/model.py +1012 -0
  549. qilisdk/core/parameterizable.py +133 -0
  550. qilisdk/core/qtensor.py +684 -0
  551. qilisdk/core/result.py +18 -0
  552. qilisdk/core/types.py +49 -0
  553. qilisdk/core/variables.py +2035 -0
  554. qilisdk/cost_functions/__init__.py +18 -0
  555. qilisdk/cost_functions/cost_function.py +77 -0
  556. qilisdk/cost_functions/model_cost_function.py +152 -0
  557. qilisdk/cost_functions/observable_cost_function.py +112 -0
  558. qilisdk/digital/__init__.py +67 -0
  559. qilisdk/digital/ansatz.py +382 -0
  560. qilisdk/digital/circuit.py +371 -0
  561. qilisdk/digital/circuit_transpiler.py +46 -0
  562. qilisdk/digital/circuit_transpiler_passes/__init__.py +18 -0
  563. qilisdk/digital/circuit_transpiler_passes/circuit_transpiler_pass.py +36 -0
  564. qilisdk/digital/circuit_transpiler_passes/decompose_multi_controlled_gates_pass.py +220 -0
  565. qilisdk/digital/circuit_transpiler_passes/numeric_helpers.py +82 -0
  566. qilisdk/digital/exceptions.py +37 -0
  567. qilisdk/digital/gates.py +1308 -0
  568. qilisdk/experiments/__init__.py +36 -0
  569. qilisdk/experiments/experiment_functional.py +212 -0
  570. qilisdk/experiments/experiment_result.py +247 -0
  571. qilisdk/functionals/__init__.py +29 -0
  572. qilisdk/functionals/functional.py +39 -0
  573. qilisdk/functionals/functional_result.py +18 -0
  574. qilisdk/functionals/sampling.py +89 -0
  575. qilisdk/functionals/sampling_result.py +92 -0
  576. qilisdk/functionals/time_evolution.py +111 -0
  577. qilisdk/functionals/time_evolution_result.py +91 -0
  578. qilisdk/functionals/variational_program.py +138 -0
  579. qilisdk/functionals/variational_program_result.py +69 -0
  580. qilisdk/logging_config.yaml +16 -0
  581. qilisdk/noise/__init__.py +56 -0
  582. qilisdk/noise/amplitude_damping.py +71 -0
  583. qilisdk/noise/bit_flip.py +45 -0
  584. qilisdk/noise/dephasing.py +69 -0
  585. qilisdk/noise/depolarizing.py +44 -0
  586. qilisdk/noise/gaussian_perturbation.py +69 -0
  587. qilisdk/noise/noise.py +20 -0
  588. qilisdk/noise/noise_abc.py +31 -0
  589. qilisdk/noise/noise_config.py +77 -0
  590. qilisdk/noise/noise_model.py +259 -0
  591. qilisdk/noise/offset_perturbation.py +39 -0
  592. qilisdk/noise/parameter_perturbation.py +45 -0
  593. qilisdk/noise/pauli_channel.py +115 -0
  594. qilisdk/noise/phase_flip.py +45 -0
  595. qilisdk/noise/protocols.py +107 -0
  596. qilisdk/noise/readout_assignment.py +60 -0
  597. qilisdk/noise/representations.py +149 -0
  598. qilisdk/noise/utils.py +90 -0
  599. qilisdk/optimizers/__init__.py +17 -0
  600. qilisdk/optimizers/optimizer.py +39 -0
  601. qilisdk/optimizers/optimizer_result.py +101 -0
  602. qilisdk/optimizers/scipy_optimizer.py +118 -0
  603. qilisdk/py.typed +0 -0
  604. qilisdk/settings.py +103 -0
  605. qilisdk/speqtrum/__init__.py +41 -0
  606. qilisdk/speqtrum/__init__.pyi +18 -0
  607. qilisdk/speqtrum/keyring.py +58 -0
  608. qilisdk/speqtrum/speqtrum.py +817 -0
  609. qilisdk/speqtrum/speqtrum_models.py +560 -0
  610. qilisdk/utils/__init__.py +13 -0
  611. qilisdk/utils/openfermion/__init__.py +38 -0
  612. qilisdk/utils/openfermion/__init__.pyi +17 -0
  613. qilisdk/utils/openfermion/openfermion.py +45 -0
  614. qilisdk/utils/openqasm2.py +215 -0
  615. qilisdk/utils/serialization.py +128 -0
  616. qilisdk/utils/trotterization/__init__.py +18 -0
  617. qilisdk/utils/trotterization/trotterization.py +127 -0
  618. qilisdk/utils/visualization/PlusJakartaSans-SemiBold.ttf +0 -0
  619. qilisdk/utils/visualization/__init__.py +24 -0
  620. qilisdk/utils/visualization/circuit_renderers.py +781 -0
  621. qilisdk/utils/visualization/schedule_renderers.py +175 -0
  622. qilisdk/utils/visualization/style.py +154 -0
  623. qilisdk/utils/visualization/themes.py +76 -0
  624. qilisdk/yaml.py +260 -0
  625. qilisdk-0.1.8.dist-info/METADATA +657 -0
  626. qilisdk-0.1.8.dist-info/RECORD +633 -0
  627. qilisdk-0.1.8.dist-info/WHEEL +5 -0
  628. qilisdk-0.1.8.dist-info/licenses/LICENCE +201 -0
  629. qilisim_module.cp312-win_amd64.pyd +0 -0
  630. share/eigen3/cmake/Eigen3Config.cmake +37 -0
  631. share/eigen3/cmake/Eigen3ConfigVersion.cmake +65 -0
  632. share/eigen3/cmake/Eigen3Targets.cmake +106 -0
  633. share/eigen3/cmake/UseEigen3.cmake +6 -0
@@ -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())