mqt-core 3.1.0__cp313-cp313-win_arm64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of mqt-core might be problematic. Click here for more details.
- mqt/core/__init__.py +89 -0
- mqt/core/__main__.py +55 -0
- mqt/core/_commands.py +52 -0
- mqt/core/_compat/__init__.py +11 -0
- mqt/core/_compat/typing.py +29 -0
- mqt/core/_version.py +21 -0
- mqt/core/_version.pyi +12 -0
- mqt/core/bin/mqt-core-algorithms.dll +0 -0
- mqt/core/bin/mqt-core-circuit-optimizer.dll +0 -0
- mqt/core/bin/mqt-core-dd.dll +0 -0
- mqt/core/bin/mqt-core-ds.dll +0 -0
- mqt/core/bin/mqt-core-ir.dll +0 -0
- mqt/core/bin/mqt-core-na.dll +0 -0
- mqt/core/bin/mqt-core-qasm.dll +0 -0
- mqt/core/bin/mqt-core-zx.dll +0 -0
- mqt/core/dd.cp313-win_arm64.pyd +0 -0
- mqt/core/dd.pyi +1031 -0
- mqt/core/dd_evaluation.py +368 -0
- mqt/core/include/mqt-core/algorithms/BernsteinVazirani.hpp +39 -0
- mqt/core/include/mqt-core/algorithms/GHZState.hpp +18 -0
- mqt/core/include/mqt-core/algorithms/Grover.hpp +33 -0
- mqt/core/include/mqt-core/algorithms/QFT.hpp +21 -0
- mqt/core/include/mqt-core/algorithms/QPE.hpp +30 -0
- mqt/core/include/mqt-core/algorithms/RandomCliffordCircuit.hpp +22 -0
- mqt/core/include/mqt-core/algorithms/StatePreparation.hpp +43 -0
- mqt/core/include/mqt-core/algorithms/WState.hpp +18 -0
- mqt/core/include/mqt-core/algorithms/mqt_core_algorithms_export.h +43 -0
- mqt/core/include/mqt-core/boost/config/abi/borland_prefix.hpp +27 -0
- mqt/core/include/mqt-core/boost/config/abi/borland_suffix.hpp +12 -0
- mqt/core/include/mqt-core/boost/config/abi/msvc_prefix.hpp +22 -0
- mqt/core/include/mqt-core/boost/config/abi/msvc_suffix.hpp +8 -0
- mqt/core/include/mqt-core/boost/config/abi_prefix.hpp +25 -0
- mqt/core/include/mqt-core/boost/config/abi_suffix.hpp +25 -0
- mqt/core/include/mqt-core/boost/config/assert_cxx03.hpp +211 -0
- mqt/core/include/mqt-core/boost/config/assert_cxx11.hpp +212 -0
- mqt/core/include/mqt-core/boost/config/assert_cxx14.hpp +47 -0
- mqt/core/include/mqt-core/boost/config/assert_cxx17.hpp +65 -0
- mqt/core/include/mqt-core/boost/config/assert_cxx20.hpp +59 -0
- mqt/core/include/mqt-core/boost/config/assert_cxx23.hpp +41 -0
- mqt/core/include/mqt-core/boost/config/assert_cxx98.hpp +23 -0
- mqt/core/include/mqt-core/boost/config/auto_link.hpp +525 -0
- mqt/core/include/mqt-core/boost/config/compiler/borland.hpp +342 -0
- mqt/core/include/mqt-core/boost/config/compiler/clang.hpp +370 -0
- mqt/core/include/mqt-core/boost/config/compiler/clang_version.hpp +89 -0
- mqt/core/include/mqt-core/boost/config/compiler/codegear.hpp +389 -0
- mqt/core/include/mqt-core/boost/config/compiler/comeau.hpp +59 -0
- mqt/core/include/mqt-core/boost/config/compiler/common_edg.hpp +185 -0
- mqt/core/include/mqt-core/boost/config/compiler/compaq_cxx.hpp +19 -0
- mqt/core/include/mqt-core/boost/config/compiler/cray.hpp +446 -0
- mqt/core/include/mqt-core/boost/config/compiler/diab.hpp +26 -0
- mqt/core/include/mqt-core/boost/config/compiler/digitalmars.hpp +146 -0
- mqt/core/include/mqt-core/boost/config/compiler/gcc.hpp +386 -0
- mqt/core/include/mqt-core/boost/config/compiler/gcc_xml.hpp +115 -0
- mqt/core/include/mqt-core/boost/config/compiler/greenhills.hpp +28 -0
- mqt/core/include/mqt-core/boost/config/compiler/hp_acc.hpp +153 -0
- mqt/core/include/mqt-core/boost/config/compiler/intel.hpp +577 -0
- mqt/core/include/mqt-core/boost/config/compiler/kai.hpp +33 -0
- mqt/core/include/mqt-core/boost/config/compiler/metrowerks.hpp +201 -0
- mqt/core/include/mqt-core/boost/config/compiler/mpw.hpp +143 -0
- mqt/core/include/mqt-core/boost/config/compiler/nvcc.hpp +64 -0
- mqt/core/include/mqt-core/boost/config/compiler/pathscale.hpp +141 -0
- mqt/core/include/mqt-core/boost/config/compiler/pgi.hpp +23 -0
- mqt/core/include/mqt-core/boost/config/compiler/sgi_mipspro.hpp +29 -0
- mqt/core/include/mqt-core/boost/config/compiler/sunpro_cc.hpp +225 -0
- mqt/core/include/mqt-core/boost/config/compiler/vacpp.hpp +189 -0
- mqt/core/include/mqt-core/boost/config/compiler/visualc.hpp +398 -0
- mqt/core/include/mqt-core/boost/config/compiler/xlcpp.hpp +303 -0
- mqt/core/include/mqt-core/boost/config/compiler/xlcpp_zos.hpp +174 -0
- mqt/core/include/mqt-core/boost/config/detail/cxx_composite.hpp +218 -0
- mqt/core/include/mqt-core/boost/config/detail/posix_features.hpp +95 -0
- mqt/core/include/mqt-core/boost/config/detail/select_compiler_config.hpp +157 -0
- mqt/core/include/mqt-core/boost/config/detail/select_platform_config.hpp +147 -0
- mqt/core/include/mqt-core/boost/config/detail/select_stdlib_config.hpp +121 -0
- mqt/core/include/mqt-core/boost/config/detail/suffix.hpp +1334 -0
- mqt/core/include/mqt-core/boost/config/header_deprecated.hpp +26 -0
- mqt/core/include/mqt-core/boost/config/helper_macros.hpp +37 -0
- mqt/core/include/mqt-core/boost/config/no_tr1/cmath.hpp +28 -0
- mqt/core/include/mqt-core/boost/config/no_tr1/complex.hpp +28 -0
- mqt/core/include/mqt-core/boost/config/no_tr1/functional.hpp +28 -0
- mqt/core/include/mqt-core/boost/config/no_tr1/memory.hpp +28 -0
- mqt/core/include/mqt-core/boost/config/no_tr1/utility.hpp +28 -0
- mqt/core/include/mqt-core/boost/config/platform/aix.hpp +33 -0
- mqt/core/include/mqt-core/boost/config/platform/amigaos.hpp +15 -0
- mqt/core/include/mqt-core/boost/config/platform/beos.hpp +26 -0
- mqt/core/include/mqt-core/boost/config/platform/bsd.hpp +83 -0
- mqt/core/include/mqt-core/boost/config/platform/cloudabi.hpp +18 -0
- mqt/core/include/mqt-core/boost/config/platform/cray.hpp +18 -0
- mqt/core/include/mqt-core/boost/config/platform/cygwin.hpp +71 -0
- mqt/core/include/mqt-core/boost/config/platform/haiku.hpp +31 -0
- mqt/core/include/mqt-core/boost/config/platform/hpux.hpp +87 -0
- mqt/core/include/mqt-core/boost/config/platform/irix.hpp +31 -0
- mqt/core/include/mqt-core/boost/config/platform/linux.hpp +106 -0
- mqt/core/include/mqt-core/boost/config/platform/macos.hpp +87 -0
- mqt/core/include/mqt-core/boost/config/platform/qnxnto.hpp +31 -0
- mqt/core/include/mqt-core/boost/config/platform/solaris.hpp +31 -0
- mqt/core/include/mqt-core/boost/config/platform/symbian.hpp +97 -0
- mqt/core/include/mqt-core/boost/config/platform/vms.hpp +25 -0
- mqt/core/include/mqt-core/boost/config/platform/vxworks.hpp +422 -0
- mqt/core/include/mqt-core/boost/config/platform/wasm.hpp +23 -0
- mqt/core/include/mqt-core/boost/config/platform/win32.hpp +90 -0
- mqt/core/include/mqt-core/boost/config/platform/zos.hpp +32 -0
- mqt/core/include/mqt-core/boost/config/pragma_message.hpp +31 -0
- mqt/core/include/mqt-core/boost/config/requires_threads.hpp +92 -0
- mqt/core/include/mqt-core/boost/config/stdlib/dinkumware.hpp +324 -0
- mqt/core/include/mqt-core/boost/config/stdlib/libcomo.hpp +93 -0
- mqt/core/include/mqt-core/boost/config/stdlib/libcpp.hpp +180 -0
- mqt/core/include/mqt-core/boost/config/stdlib/libstdcpp3.hpp +482 -0
- mqt/core/include/mqt-core/boost/config/stdlib/modena.hpp +79 -0
- mqt/core/include/mqt-core/boost/config/stdlib/msl.hpp +98 -0
- mqt/core/include/mqt-core/boost/config/stdlib/roguewave.hpp +208 -0
- mqt/core/include/mqt-core/boost/config/stdlib/sgi.hpp +168 -0
- mqt/core/include/mqt-core/boost/config/stdlib/stlport.hpp +258 -0
- mqt/core/include/mqt-core/boost/config/stdlib/vacpp.hpp +74 -0
- mqt/core/include/mqt-core/boost/config/stdlib/xlcpp_zos.hpp +61 -0
- mqt/core/include/mqt-core/boost/config/user.hpp +133 -0
- mqt/core/include/mqt-core/boost/config/warning_disable.hpp +47 -0
- mqt/core/include/mqt-core/boost/config/workaround.hpp +305 -0
- mqt/core/include/mqt-core/boost/config.hpp +67 -0
- mqt/core/include/mqt-core/boost/cstdint.hpp +556 -0
- mqt/core/include/mqt-core/boost/cxx11_char_types.hpp +70 -0
- mqt/core/include/mqt-core/boost/detail/workaround.hpp +10 -0
- mqt/core/include/mqt-core/boost/limits.hpp +146 -0
- mqt/core/include/mqt-core/boost/multiprecision/complex128.hpp +24 -0
- mqt/core/include/mqt-core/boost/multiprecision/complex_adaptor.hpp +1046 -0
- mqt/core/include/mqt-core/boost/multiprecision/concepts/mp_number_archetypes.hpp +257 -0
- mqt/core/include/mqt-core/boost/multiprecision/cpp_bin_float/io.hpp +698 -0
- mqt/core/include/mqt-core/boost/multiprecision/cpp_bin_float/transcendental.hpp +157 -0
- mqt/core/include/mqt-core/boost/multiprecision/cpp_bin_float.hpp +2297 -0
- mqt/core/include/mqt-core/boost/multiprecision/cpp_complex.hpp +12 -0
- mqt/core/include/mqt-core/boost/multiprecision/cpp_dec_float.hpp +3690 -0
- mqt/core/include/mqt-core/boost/multiprecision/cpp_int/add.hpp +368 -0
- mqt/core/include/mqt-core/boost/multiprecision/cpp_int/add_unsigned.hpp +387 -0
- mqt/core/include/mqt-core/boost/multiprecision/cpp_int/bitwise.hpp +889 -0
- mqt/core/include/mqt-core/boost/multiprecision/cpp_int/checked.hpp +178 -0
- mqt/core/include/mqt-core/boost/multiprecision/cpp_int/comparison.hpp +374 -0
- mqt/core/include/mqt-core/boost/multiprecision/cpp_int/cpp_int_config.hpp +161 -0
- mqt/core/include/mqt-core/boost/multiprecision/cpp_int/divide.hpp +703 -0
- mqt/core/include/mqt-core/boost/multiprecision/cpp_int/import_export.hpp +248 -0
- mqt/core/include/mqt-core/boost/multiprecision/cpp_int/intel_intrinsics.hpp +138 -0
- mqt/core/include/mqt-core/boost/multiprecision/cpp_int/limits.hpp +282 -0
- mqt/core/include/mqt-core/boost/multiprecision/cpp_int/literals.hpp +295 -0
- mqt/core/include/mqt-core/boost/multiprecision/cpp_int/misc.hpp +1457 -0
- mqt/core/include/mqt-core/boost/multiprecision/cpp_int/multiply.hpp +848 -0
- mqt/core/include/mqt-core/boost/multiprecision/cpp_int/serialize.hpp +211 -0
- mqt/core/include/mqt-core/boost/multiprecision/cpp_int/value_pack.hpp +42 -0
- mqt/core/include/mqt-core/boost/multiprecision/cpp_int.hpp +2360 -0
- mqt/core/include/mqt-core/boost/multiprecision/debug_adaptor.hpp +760 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/assert.hpp +29 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/atomic.hpp +62 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/bitscan.hpp +317 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/check_cpp11_config.hpp +64 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/constexpr.hpp +88 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/default_ops.hpp +4052 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/digits.hpp +49 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/dynamic_array.hpp +44 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/empty_value.hpp +87 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/endian.hpp +35 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/et_ops.hpp +1831 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/float128_functions.hpp +95 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/float_string_cvt.hpp +333 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/fpclassify.hpp +101 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/functions/constants.hpp +288 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/functions/pow.hpp +905 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/functions/trig.hpp +1058 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/functions/trunc.hpp +82 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/generic_interconvert.hpp +687 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/hash.hpp +56 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/integer_ops.hpp +474 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/itos.hpp +39 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/min_max.hpp +106 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/no_et_ops.hpp +661 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/no_exceptions_support.hpp +55 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/number_base.hpp +1656 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/number_compare.hpp +848 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/precision.hpp +313 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/rebind.hpp +19 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/standalone_config.hpp +148 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/static_array.hpp +42 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/string_helpers.hpp +48 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/tables.hpp +80 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/ublas_interop.hpp +75 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/uniform_int_distribution.hpp +212 -0
- mqt/core/include/mqt-core/boost/multiprecision/detail/utype_helper.hpp +374 -0
- mqt/core/include/mqt-core/boost/multiprecision/eigen.hpp +248 -0
- mqt/core/include/mqt-core/boost/multiprecision/float128.hpp +920 -0
- mqt/core/include/mqt-core/boost/multiprecision/fwd.hpp +268 -0
- mqt/core/include/mqt-core/boost/multiprecision/gmp.hpp +4060 -0
- mqt/core/include/mqt-core/boost/multiprecision/integer.hpp +363 -0
- mqt/core/include/mqt-core/boost/multiprecision/logged_adaptor.hpp +834 -0
- mqt/core/include/mqt-core/boost/multiprecision/miller_rabin.hpp +221 -0
- mqt/core/include/mqt-core/boost/multiprecision/mpc.hpp +1721 -0
- mqt/core/include/mqt-core/boost/multiprecision/mpfi.hpp +2559 -0
- mqt/core/include/mqt-core/boost/multiprecision/mpfr.hpp +3644 -0
- mqt/core/include/mqt-core/boost/multiprecision/number.hpp +2500 -0
- mqt/core/include/mqt-core/boost/multiprecision/random.hpp +23 -0
- mqt/core/include/mqt-core/boost/multiprecision/rational_adaptor.hpp +1289 -0
- mqt/core/include/mqt-core/boost/multiprecision/tommath.hpp +1034 -0
- mqt/core/include/mqt-core/boost/multiprecision/traits/explicit_conversion.hpp +67 -0
- mqt/core/include/mqt-core/boost/multiprecision/traits/extract_exponent_type.hpp +28 -0
- mqt/core/include/mqt-core/boost/multiprecision/traits/is_backend.hpp +91 -0
- mqt/core/include/mqt-core/boost/multiprecision/traits/is_byte_container.hpp +51 -0
- mqt/core/include/mqt-core/boost/multiprecision/traits/is_complex.hpp +22 -0
- mqt/core/include/mqt-core/boost/multiprecision/traits/is_convertible_arithmetic.hpp +51 -0
- mqt/core/include/mqt-core/boost/multiprecision/traits/is_restricted_conversion.hpp +47 -0
- mqt/core/include/mqt-core/boost/multiprecision/traits/is_variable_precision.hpp +25 -0
- mqt/core/include/mqt-core/boost/multiprecision/traits/max_digits10.hpp +79 -0
- mqt/core/include/mqt-core/boost/multiprecision/traits/std_integer_traits.hpp +90 -0
- mqt/core/include/mqt-core/boost/multiprecision/traits/transcendental_reduction_type.hpp +21 -0
- mqt/core/include/mqt-core/boost/version.hpp +32 -0
- mqt/core/include/mqt-core/circuit_optimizer/CircuitOptimizer.hpp +106 -0
- mqt/core/include/mqt-core/circuit_optimizer/mqt_core_circuit_optimizer_export.h +43 -0
- mqt/core/include/mqt-core/datastructures/DirectedAcyclicGraph.hpp +117 -0
- mqt/core/include/mqt-core/datastructures/DirectedGraph.hpp +158 -0
- mqt/core/include/mqt-core/datastructures/DisjointSet.hpp +50 -0
- mqt/core/include/mqt-core/datastructures/Layer.hpp +172 -0
- mqt/core/include/mqt-core/datastructures/SymmetricMatrix.hpp +57 -0
- mqt/core/include/mqt-core/datastructures/UndirectedGraph.hpp +227 -0
- mqt/core/include/mqt-core/datastructures/mqt_core_ds_export.h +43 -0
- mqt/core/include/mqt-core/dd/Approximation.hpp +45 -0
- mqt/core/include/mqt-core/dd/CachedEdge.hpp +167 -0
- mqt/core/include/mqt-core/dd/Complex.hpp +165 -0
- mqt/core/include/mqt-core/dd/ComplexNumbers.hpp +150 -0
- mqt/core/include/mqt-core/dd/ComplexValue.hpp +184 -0
- mqt/core/include/mqt-core/dd/ComputeTable.hpp +183 -0
- mqt/core/include/mqt-core/dd/DDDefinitions.hpp +139 -0
- mqt/core/include/mqt-core/dd/DDpackageConfig.hpp +104 -0
- mqt/core/include/mqt-core/dd/DensityNoiseTable.hpp +114 -0
- mqt/core/include/mqt-core/dd/Edge.hpp +416 -0
- mqt/core/include/mqt-core/dd/Export.hpp +438 -0
- mqt/core/include/mqt-core/dd/FunctionalityConstruction.hpp +75 -0
- mqt/core/include/mqt-core/dd/GateMatrixDefinitions.hpp +43 -0
- mqt/core/include/mqt-core/dd/LinkedListBase.hpp +45 -0
- mqt/core/include/mqt-core/dd/MemoryManager.hpp +193 -0
- mqt/core/include/mqt-core/dd/Node.hpp +223 -0
- mqt/core/include/mqt-core/dd/NoiseFunctionality.hpp +144 -0
- mqt/core/include/mqt-core/dd/Operations.hpp +308 -0
- mqt/core/include/mqt-core/dd/Package.hpp +2036 -0
- mqt/core/include/mqt-core/dd/Package_fwd.hpp +22 -0
- mqt/core/include/mqt-core/dd/RealNumber.hpp +255 -0
- mqt/core/include/mqt-core/dd/RealNumberUniqueTable.hpp +217 -0
- mqt/core/include/mqt-core/dd/Simulation.hpp +98 -0
- mqt/core/include/mqt-core/dd/StateGeneration.hpp +143 -0
- mqt/core/include/mqt-core/dd/StochasticNoiseOperationTable.hpp +88 -0
- mqt/core/include/mqt-core/dd/UnaryComputeTable.hpp +121 -0
- mqt/core/include/mqt-core/dd/UniqueTable.hpp +243 -0
- mqt/core/include/mqt-core/dd/mqt_core_dd_export.h +43 -0
- mqt/core/include/mqt-core/dd/statistics/MemoryManagerStatistics.hpp +84 -0
- mqt/core/include/mqt-core/dd/statistics/PackageStatistics.hpp +55 -0
- mqt/core/include/mqt-core/dd/statistics/Statistics.hpp +48 -0
- mqt/core/include/mqt-core/dd/statistics/TableStatistics.hpp +79 -0
- mqt/core/include/mqt-core/dd/statistics/UniqueTableStatistics.hpp +31 -0
- mqt/core/include/mqt-core/ir/Definitions.hpp +108 -0
- mqt/core/include/mqt-core/ir/Permutation.hpp +213 -0
- mqt/core/include/mqt-core/ir/QuantumComputation.hpp +594 -0
- mqt/core/include/mqt-core/ir/Register.hpp +125 -0
- mqt/core/include/mqt-core/ir/mqt_core_ir_export.h +43 -0
- mqt/core/include/mqt-core/ir/operations/AodOperation.hpp +92 -0
- mqt/core/include/mqt-core/ir/operations/ClassicControlledOperation.hpp +156 -0
- mqt/core/include/mqt-core/ir/operations/CompoundOperation.hpp +210 -0
- mqt/core/include/mqt-core/ir/operations/Control.hpp +142 -0
- mqt/core/include/mqt-core/ir/operations/Expression.hpp +847 -0
- mqt/core/include/mqt-core/ir/operations/NonUnitaryOperation.hpp +118 -0
- mqt/core/include/mqt-core/ir/operations/OpType.hpp +115 -0
- mqt/core/include/mqt-core/ir/operations/OpType.inc +75 -0
- mqt/core/include/mqt-core/ir/operations/Operation.hpp +245 -0
- mqt/core/include/mqt-core/ir/operations/StandardOperation.hpp +138 -0
- mqt/core/include/mqt-core/ir/operations/SymbolicOperation.hpp +144 -0
- mqt/core/include/mqt-core/na/NAComputation.hpp +185 -0
- mqt/core/include/mqt-core/na/entities/Atom.hpp +62 -0
- mqt/core/include/mqt-core/na/entities/Location.hpp +154 -0
- mqt/core/include/mqt-core/na/entities/Zone.hpp +95 -0
- mqt/core/include/mqt-core/na/mqt_core_na_export.h +43 -0
- mqt/core/include/mqt-core/na/operations/GlobalCZOp.hpp +38 -0
- mqt/core/include/mqt-core/na/operations/GlobalOp.hpp +58 -0
- mqt/core/include/mqt-core/na/operations/GlobalRYOp.hpp +42 -0
- mqt/core/include/mqt-core/na/operations/LoadOp.hpp +89 -0
- mqt/core/include/mqt-core/na/operations/LocalOp.hpp +56 -0
- mqt/core/include/mqt-core/na/operations/LocalRZOp.hpp +42 -0
- mqt/core/include/mqt-core/na/operations/LocalUOp.hpp +49 -0
- mqt/core/include/mqt-core/na/operations/MoveOp.hpp +66 -0
- mqt/core/include/mqt-core/na/operations/Op.hpp +62 -0
- mqt/core/include/mqt-core/na/operations/ShuttlingOp.hpp +51 -0
- mqt/core/include/mqt-core/na/operations/StoreOp.hpp +87 -0
- mqt/core/include/mqt-core/qasm3/Exception.hpp +85 -0
- mqt/core/include/mqt-core/qasm3/Gate.hpp +65 -0
- mqt/core/include/mqt-core/qasm3/Importer.hpp +192 -0
- mqt/core/include/mqt-core/qasm3/InstVisitor.hpp +145 -0
- mqt/core/include/mqt-core/qasm3/NestedEnvironment.hpp +41 -0
- mqt/core/include/mqt-core/qasm3/Parser.hpp +170 -0
- mqt/core/include/mqt-core/qasm3/Scanner.hpp +73 -0
- mqt/core/include/mqt-core/qasm3/Statement.hpp +486 -0
- mqt/core/include/mqt-core/qasm3/Statement_fwd.hpp +39 -0
- mqt/core/include/mqt-core/qasm3/StdGates.hpp +123 -0
- mqt/core/include/mqt-core/qasm3/Token.hpp +198 -0
- mqt/core/include/mqt-core/qasm3/Types.hpp +238 -0
- mqt/core/include/mqt-core/qasm3/Types_fwd.hpp +22 -0
- mqt/core/include/mqt-core/qasm3/mqt_core_qasm_export.h +43 -0
- mqt/core/include/mqt-core/qasm3/passes/CompilerPass.hpp +22 -0
- mqt/core/include/mqt-core/qasm3/passes/ConstEvalPass.hpp +102 -0
- mqt/core/include/mqt-core/qasm3/passes/TypeCheckPass.hpp +124 -0
- mqt/core/include/mqt-core/zx/FunctionalityConstruction.hpp +125 -0
- mqt/core/include/mqt-core/zx/Rational.hpp +318 -0
- mqt/core/include/mqt-core/zx/Rules.hpp +132 -0
- mqt/core/include/mqt-core/zx/Simplify.hpp +182 -0
- mqt/core/include/mqt-core/zx/Utils.hpp +212 -0
- mqt/core/include/mqt-core/zx/ZXDefinitions.hpp +93 -0
- mqt/core/include/mqt-core/zx/ZXDiagram.hpp +480 -0
- mqt/core/include/mqt-core/zx/mqt_core_zx_export.h +43 -0
- mqt/core/ir/__init__.pyi +1998 -0
- mqt/core/ir/operations.pyi +1019 -0
- mqt/core/ir/registers.pyi +91 -0
- mqt/core/ir/symbolic.pyi +177 -0
- mqt/core/ir.cp313-win_arm64.pyd +0 -0
- mqt/core/lib/mqt-core-algorithms.lib +0 -0
- mqt/core/lib/mqt-core-circuit-optimizer.lib +0 -0
- mqt/core/lib/mqt-core-dd.lib +0 -0
- mqt/core/lib/mqt-core-ds.lib +0 -0
- mqt/core/lib/mqt-core-ir.lib +0 -0
- mqt/core/lib/mqt-core-na.lib +0 -0
- mqt/core/lib/mqt-core-qasm.lib +0 -0
- mqt/core/lib/mqt-core-zx.lib +0 -0
- mqt/core/plugins/__init__.py +9 -0
- mqt/core/plugins/qiskit/__init__.py +19 -0
- mqt/core/plugins/qiskit/mqt_to_qiskit.py +354 -0
- mqt/core/plugins/qiskit/qiskit_to_mqt.py +455 -0
- mqt/core/py.typed +2 -0
- mqt/core/share/cmake/mqt-core/AddMQTPythonBinding.cmake +52 -0
- mqt/core/share/cmake/mqt-core/Cache.cmake +32 -0
- mqt/core/share/cmake/mqt-core/FindGMP.cmake +103 -0
- mqt/core/share/cmake/mqt-core/PackageAddTest.cmake +40 -0
- mqt/core/share/cmake/mqt-core/PreventInSourceBuilds.cmake +25 -0
- mqt/core/share/cmake/mqt-core/StandardProjectSettings.cmake +87 -0
- mqt/core/share/cmake/mqt-core/mqt-core-config-version.cmake +85 -0
- mqt/core/share/cmake/mqt-core/mqt-core-config.cmake +49 -0
- mqt/core/share/cmake/mqt-core/mqt-core-targets-release.cmake +90 -0
- mqt/core/share/cmake/mqt-core/mqt-core-targets.cmake +324 -0
- mqt_core-3.1.0.dist-info/DELVEWHEEL +2 -0
- mqt_core-3.1.0.dist-info/METADATA +168 -0
- mqt_core-3.1.0.dist-info/RECORD +343 -0
- mqt_core-3.1.0.dist-info/WHEEL +5 -0
- mqt_core-3.1.0.dist-info/entry_points.txt +4 -0
- mqt_core-3.1.0.dist-info/licenses/LICENSE.md +22 -0
- mqt_core.libs/msvcp140.dll +0 -0
|
@@ -0,0 +1,455 @@
|
|
|
1
|
+
# Copyright (c) 2023 - 2025 Chair for Design Automation, TUM
|
|
2
|
+
# Copyright (c) 2025 Munich Quantum Software Company GmbH
|
|
3
|
+
# All rights reserved.
|
|
4
|
+
#
|
|
5
|
+
# SPDX-License-Identifier: MIT
|
|
6
|
+
#
|
|
7
|
+
# Licensed under the MIT License
|
|
8
|
+
|
|
9
|
+
"""Functionality for translating from Qiskit to the MQT."""
|
|
10
|
+
|
|
11
|
+
from __future__ import annotations
|
|
12
|
+
|
|
13
|
+
import re
|
|
14
|
+
import warnings
|
|
15
|
+
from typing import TYPE_CHECKING, cast
|
|
16
|
+
|
|
17
|
+
from qiskit.circuit import AncillaRegister, Clbit, Qubit
|
|
18
|
+
|
|
19
|
+
from ...ir import QuantumComputation
|
|
20
|
+
from ...ir.operations import (
|
|
21
|
+
CompoundOperation,
|
|
22
|
+
Control,
|
|
23
|
+
NonUnitaryOperation,
|
|
24
|
+
OpType,
|
|
25
|
+
StandardOperation,
|
|
26
|
+
SymbolicOperation,
|
|
27
|
+
)
|
|
28
|
+
from ...ir.symbolic import Expression, Term, Variable
|
|
29
|
+
|
|
30
|
+
if TYPE_CHECKING:
|
|
31
|
+
from collections.abc import Mapping, Sequence
|
|
32
|
+
|
|
33
|
+
from qiskit.circuit import Instruction, ParameterExpression, QuantumCircuit
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
__all__ = ["qiskit_to_mqt"]
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def __dir__() -> list[str]:
|
|
40
|
+
return __all__
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
def qiskit_to_mqt(circ: QuantumCircuit) -> QuantumComputation:
|
|
44
|
+
"""Convert a Qiskit :class:`~qiskit.circuit.QuantumCircuit` to a :class:`~mqt.core.ir.QuantumComputation` object.
|
|
45
|
+
|
|
46
|
+
Args:
|
|
47
|
+
circ: The Qiskit circuit to convert.
|
|
48
|
+
|
|
49
|
+
Returns:
|
|
50
|
+
The converted circuit.
|
|
51
|
+
"""
|
|
52
|
+
qc = QuantumComputation()
|
|
53
|
+
|
|
54
|
+
if circ.name is not None:
|
|
55
|
+
qc.name = circ.name
|
|
56
|
+
|
|
57
|
+
qubit_index = 0
|
|
58
|
+
qubit_map: dict[Qubit, int] = {}
|
|
59
|
+
for reg in circ.qregs:
|
|
60
|
+
size = reg.size
|
|
61
|
+
if size == 0:
|
|
62
|
+
continue
|
|
63
|
+
if isinstance(reg, AncillaRegister):
|
|
64
|
+
qc.add_ancillary_register(size, reg.name)
|
|
65
|
+
else:
|
|
66
|
+
qc.add_qubit_register(size, reg.name)
|
|
67
|
+
for qubit in reg:
|
|
68
|
+
qubit_map[qubit] = qubit_index
|
|
69
|
+
qubit_index += 1
|
|
70
|
+
|
|
71
|
+
clbit_index = 0
|
|
72
|
+
clbit_map: dict[Clbit, int] = {}
|
|
73
|
+
for reg in circ.cregs:
|
|
74
|
+
size = reg.size
|
|
75
|
+
if size == 0:
|
|
76
|
+
continue
|
|
77
|
+
qc.add_classical_register(size, reg.name)
|
|
78
|
+
for bit in reg:
|
|
79
|
+
clbit_map[bit] = clbit_index
|
|
80
|
+
clbit_index += 1
|
|
81
|
+
|
|
82
|
+
try:
|
|
83
|
+
qc.global_phase = circ.global_phase
|
|
84
|
+
except TypeError:
|
|
85
|
+
warnings.warn(
|
|
86
|
+
"Symbolic global phase values are not supported yet. Setting global phase to 0.",
|
|
87
|
+
RuntimeWarning,
|
|
88
|
+
stacklevel=2,
|
|
89
|
+
)
|
|
90
|
+
qc.global_phase = 0
|
|
91
|
+
|
|
92
|
+
for instruction in circ.data:
|
|
93
|
+
symb_params = _emplace_operation(
|
|
94
|
+
qc,
|
|
95
|
+
instruction.operation,
|
|
96
|
+
instruction.qubits,
|
|
97
|
+
instruction.clbits,
|
|
98
|
+
instruction.operation.params,
|
|
99
|
+
qubit_map,
|
|
100
|
+
clbit_map,
|
|
101
|
+
)
|
|
102
|
+
for symb_param in symb_params:
|
|
103
|
+
qc.add_variable(symb_param)
|
|
104
|
+
|
|
105
|
+
# import initial layout and output permutation if available
|
|
106
|
+
if circ.layout is not None:
|
|
107
|
+
_import_layouts(qc, circ)
|
|
108
|
+
|
|
109
|
+
qc.initialize_io_mapping()
|
|
110
|
+
return qc
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
_NATIVELY_SUPPORTED_GATES = frozenset({
|
|
114
|
+
"i",
|
|
115
|
+
"id",
|
|
116
|
+
"iden",
|
|
117
|
+
"x",
|
|
118
|
+
"y",
|
|
119
|
+
"z",
|
|
120
|
+
"h",
|
|
121
|
+
"s",
|
|
122
|
+
"sdg",
|
|
123
|
+
"t",
|
|
124
|
+
"tdg",
|
|
125
|
+
"p",
|
|
126
|
+
"u1",
|
|
127
|
+
"rx",
|
|
128
|
+
"ry",
|
|
129
|
+
"rz",
|
|
130
|
+
"u2",
|
|
131
|
+
"u",
|
|
132
|
+
"u3",
|
|
133
|
+
"cx",
|
|
134
|
+
"cy",
|
|
135
|
+
"cz",
|
|
136
|
+
"cs",
|
|
137
|
+
"csdg",
|
|
138
|
+
"cp",
|
|
139
|
+
"cu1",
|
|
140
|
+
"ch",
|
|
141
|
+
"crx",
|
|
142
|
+
"cry",
|
|
143
|
+
"crz",
|
|
144
|
+
"cu3",
|
|
145
|
+
"ccx",
|
|
146
|
+
"swap",
|
|
147
|
+
"cswap",
|
|
148
|
+
"iswap",
|
|
149
|
+
"sx",
|
|
150
|
+
"sxdg",
|
|
151
|
+
"csx",
|
|
152
|
+
"mcx",
|
|
153
|
+
# we keep the "mcx_*" variants here for compatibility with Qiskit 1.x
|
|
154
|
+
"mcx_gray",
|
|
155
|
+
"mcx_recursive",
|
|
156
|
+
"mcx_vchain",
|
|
157
|
+
"mcphase",
|
|
158
|
+
"mcrx",
|
|
159
|
+
"mcry",
|
|
160
|
+
"mcrz",
|
|
161
|
+
"dcx",
|
|
162
|
+
"ecr",
|
|
163
|
+
"rxx",
|
|
164
|
+
"ryy",
|
|
165
|
+
"rzx",
|
|
166
|
+
"rzz",
|
|
167
|
+
"xx_minus_yy",
|
|
168
|
+
"xx_plus_yy",
|
|
169
|
+
"reset",
|
|
170
|
+
"barrier",
|
|
171
|
+
"measure",
|
|
172
|
+
})
|
|
173
|
+
|
|
174
|
+
|
|
175
|
+
def _emplace_operation(
|
|
176
|
+
qc: QuantumComputation | CompoundOperation,
|
|
177
|
+
instr: Instruction,
|
|
178
|
+
qargs: Sequence[Qubit],
|
|
179
|
+
cargs: Sequence[Clbit],
|
|
180
|
+
params: Sequence[float | ParameterExpression],
|
|
181
|
+
qubit_map: Mapping[Qubit, int],
|
|
182
|
+
clbit_map: Mapping[Clbit, int],
|
|
183
|
+
) -> list[float | ParameterExpression]:
|
|
184
|
+
name = instr.name
|
|
185
|
+
|
|
186
|
+
if name not in _NATIVELY_SUPPORTED_GATES:
|
|
187
|
+
try:
|
|
188
|
+
return _import_definition(qc, instr.definition, qargs, cargs, qubit_map, clbit_map)
|
|
189
|
+
except Exception as ex: # PRAGMA: NO COVER
|
|
190
|
+
msg = f"Unsupported gate {name} with definition {instr.definition}"
|
|
191
|
+
raise NotImplementedError(msg) from ex
|
|
192
|
+
|
|
193
|
+
qubits = [qubit_map[qubit] for qubit in qargs]
|
|
194
|
+
|
|
195
|
+
if name == "measure":
|
|
196
|
+
clbits = [clbit_map[clbit] for clbit in cargs]
|
|
197
|
+
qc.append(NonUnitaryOperation(qubits, clbits))
|
|
198
|
+
return []
|
|
199
|
+
|
|
200
|
+
if name == "reset":
|
|
201
|
+
qc.append(NonUnitaryOperation(qubits))
|
|
202
|
+
return []
|
|
203
|
+
|
|
204
|
+
if name == "barrier":
|
|
205
|
+
qc.append(StandardOperation(qubits, OpType.barrier))
|
|
206
|
+
return []
|
|
207
|
+
|
|
208
|
+
if name in {"i", "id", "iden"}:
|
|
209
|
+
return _add_operation(qc, OpType.i, qargs, params, qubit_map)
|
|
210
|
+
|
|
211
|
+
# we keep "mcx_gray" here for compatibility reasons with older Qiskit versions, e.g., 1.0.0 where "noancilla"
|
|
212
|
+
# is the default for the argument "mode" which leads to the gate name "gray_code"
|
|
213
|
+
if name in {"x", "cx", "ccx", "mcx", "mcx_gray"}:
|
|
214
|
+
return _add_operation(qc, OpType.x, qargs, params, qubit_map)
|
|
215
|
+
|
|
216
|
+
if name in {"y", "cy"}:
|
|
217
|
+
return _add_operation(qc, OpType.y, qargs, params, qubit_map)
|
|
218
|
+
|
|
219
|
+
if name in {"z", "cz"}:
|
|
220
|
+
return _add_operation(qc, OpType.z, qargs, params, qubit_map)
|
|
221
|
+
|
|
222
|
+
if name in {"h", "ch"}:
|
|
223
|
+
return _add_operation(qc, OpType.h, qargs, params, qubit_map)
|
|
224
|
+
|
|
225
|
+
if name in {"s", "cs"}:
|
|
226
|
+
return _add_operation(qc, OpType.s, qargs, params, qubit_map)
|
|
227
|
+
|
|
228
|
+
if name in {"sdg", "csdg"}:
|
|
229
|
+
return _add_operation(qc, OpType.sdg, qargs, params, qubit_map)
|
|
230
|
+
|
|
231
|
+
if name == "t":
|
|
232
|
+
return _add_operation(qc, OpType.t, qargs, params, qubit_map)
|
|
233
|
+
|
|
234
|
+
if name == "tdg":
|
|
235
|
+
return _add_operation(qc, OpType.tdg, qargs, params, qubit_map)
|
|
236
|
+
|
|
237
|
+
if name in {"sx", "csx"}:
|
|
238
|
+
return _add_operation(qc, OpType.sx, qargs, params, qubit_map)
|
|
239
|
+
|
|
240
|
+
if name == "sxdg":
|
|
241
|
+
return _add_operation(qc, OpType.sxdg, qargs, params, qubit_map)
|
|
242
|
+
|
|
243
|
+
if name == "mcx_recursive":
|
|
244
|
+
if len(qargs) <= 5:
|
|
245
|
+
return _add_operation(qc, OpType.x, qargs, params, qubit_map)
|
|
246
|
+
# reconfigure controls and targets (drops the last qubit as ancilla)
|
|
247
|
+
qargs = qargs[:-1]
|
|
248
|
+
return _add_operation(qc, OpType.x, qargs, params, qubit_map)
|
|
249
|
+
|
|
250
|
+
if name == "mcx_vchain":
|
|
251
|
+
size = len(qargs)
|
|
252
|
+
num_controls = (size + 1) // 2
|
|
253
|
+
# reconfigure controls and targets (drops the last num_controls - 2 qubits as ancilla)
|
|
254
|
+
if num_controls > 2:
|
|
255
|
+
qargs = qargs[: -num_controls + 2]
|
|
256
|
+
return _add_operation(qc, OpType.x, qargs, params, qubit_map)
|
|
257
|
+
|
|
258
|
+
if name in {"rx", "crx", "mcrx"}:
|
|
259
|
+
return _add_operation(qc, OpType.rx, qargs, params, qubit_map)
|
|
260
|
+
|
|
261
|
+
if name in {"ry", "cry", "mcry"}:
|
|
262
|
+
return _add_operation(qc, OpType.ry, qargs, params, qubit_map)
|
|
263
|
+
|
|
264
|
+
if name in {"rz", "crz", "mcrz"}:
|
|
265
|
+
return _add_operation(qc, OpType.rz, qargs, params, qubit_map)
|
|
266
|
+
|
|
267
|
+
if name in {"p", "u1", "cp", "cu1", "mcphase"}:
|
|
268
|
+
return _add_operation(qc, OpType.p, qargs, params, qubit_map)
|
|
269
|
+
|
|
270
|
+
if name == "u2":
|
|
271
|
+
return _add_operation(qc, OpType.u2, qargs, params, qubit_map)
|
|
272
|
+
|
|
273
|
+
if name in {"u", "u3", "cu3"}:
|
|
274
|
+
return _add_operation(qc, OpType.u, qargs, params, qubit_map)
|
|
275
|
+
|
|
276
|
+
if name in {"swap", "cswap"}:
|
|
277
|
+
return _add_two_target_operation(qc, OpType.swap, qargs, params, qubit_map)
|
|
278
|
+
|
|
279
|
+
if name == "iswap":
|
|
280
|
+
return _add_two_target_operation(qc, OpType.iswap, qargs, params, qubit_map)
|
|
281
|
+
|
|
282
|
+
if name == "dcx":
|
|
283
|
+
return _add_two_target_operation(qc, OpType.dcx, qargs, params, qubit_map)
|
|
284
|
+
|
|
285
|
+
if name == "ecr":
|
|
286
|
+
return _add_two_target_operation(qc, OpType.ecr, qargs, params, qubit_map)
|
|
287
|
+
|
|
288
|
+
if name == "rxx":
|
|
289
|
+
return _add_two_target_operation(qc, OpType.rxx, qargs, params, qubit_map)
|
|
290
|
+
|
|
291
|
+
if name == "ryy":
|
|
292
|
+
return _add_two_target_operation(qc, OpType.ryy, qargs, params, qubit_map)
|
|
293
|
+
|
|
294
|
+
if name == "rzz":
|
|
295
|
+
return _add_two_target_operation(qc, OpType.rzz, qargs, params, qubit_map)
|
|
296
|
+
|
|
297
|
+
if name == "rzx":
|
|
298
|
+
return _add_two_target_operation(qc, OpType.rzx, qargs, params, qubit_map)
|
|
299
|
+
|
|
300
|
+
if name == "xx_minus_yy":
|
|
301
|
+
return _add_two_target_operation(qc, OpType.xx_minus_yy, qargs, params, qubit_map)
|
|
302
|
+
|
|
303
|
+
if name == "xx_plus_yy":
|
|
304
|
+
return _add_two_target_operation(qc, OpType.xx_plus_yy, qargs, params, qubit_map)
|
|
305
|
+
|
|
306
|
+
msg = f"Unsupported gate {name}" # pragma: no cover
|
|
307
|
+
raise NotImplementedError(msg)
|
|
308
|
+
|
|
309
|
+
|
|
310
|
+
_SUM_REGEX = re.compile(r"[+|-]?[^+-]+")
|
|
311
|
+
_PROD_REGEX = re.compile(r"[*/]?[^*/]+")
|
|
312
|
+
|
|
313
|
+
|
|
314
|
+
def _parse_symbolic_expression(qiskit_expr: ParameterExpression | float) -> float | Expression:
|
|
315
|
+
if isinstance(qiskit_expr, float):
|
|
316
|
+
return qiskit_expr
|
|
317
|
+
|
|
318
|
+
expr_str = str(qiskit_expr).strip()
|
|
319
|
+
expr = Expression()
|
|
320
|
+
is_const = True
|
|
321
|
+
for summand in _SUM_REGEX.findall(expr_str):
|
|
322
|
+
sign = 1
|
|
323
|
+
summand_no_operator = summand
|
|
324
|
+
if summand[0] == "+":
|
|
325
|
+
summand_no_operator = summand[1:]
|
|
326
|
+
elif summand[0] == "-":
|
|
327
|
+
summand_no_operator = summand[1:]
|
|
328
|
+
sign = -1
|
|
329
|
+
|
|
330
|
+
coeff = 1.0
|
|
331
|
+
var = ""
|
|
332
|
+
for factor in _PROD_REGEX.findall(summand_no_operator):
|
|
333
|
+
is_div = False
|
|
334
|
+
factor_no_operator = factor
|
|
335
|
+
if factor[0] == "*":
|
|
336
|
+
factor_no_operator = factor[1:]
|
|
337
|
+
elif factor[0] == "/":
|
|
338
|
+
factor_no_operator = factor[1:]
|
|
339
|
+
is_div = True
|
|
340
|
+
|
|
341
|
+
factor_no_operator = factor_no_operator.strip()
|
|
342
|
+
if factor_no_operator.replace(".", "").isnumeric():
|
|
343
|
+
f = float(factor_no_operator)
|
|
344
|
+
coeff *= 1.0 / f if is_div else f
|
|
345
|
+
else:
|
|
346
|
+
var = factor_no_operator
|
|
347
|
+
|
|
348
|
+
if not var:
|
|
349
|
+
expr += coeff
|
|
350
|
+
else:
|
|
351
|
+
is_const = False
|
|
352
|
+
expr += Term(Variable(var), sign * coeff)
|
|
353
|
+
|
|
354
|
+
if is_const:
|
|
355
|
+
return expr.constant
|
|
356
|
+
return expr
|
|
357
|
+
|
|
358
|
+
|
|
359
|
+
def _add_operation(
|
|
360
|
+
qc: QuantumComputation | CompoundOperation,
|
|
361
|
+
type_: OpType,
|
|
362
|
+
qargs: Sequence[Qubit],
|
|
363
|
+
params: Sequence[float | ParameterExpression],
|
|
364
|
+
qubit_map: Mapping[Qubit, int],
|
|
365
|
+
) -> list[float | ParameterExpression]:
|
|
366
|
+
qubits = [qubit_map[qubit] for qubit in qargs]
|
|
367
|
+
target = qubits.pop()
|
|
368
|
+
controls = {Control(qubit) for qubit in qubits}
|
|
369
|
+
parameters = [_parse_symbolic_expression(param) for param in params]
|
|
370
|
+
if any(isinstance(parameter, Expression) for parameter in parameters):
|
|
371
|
+
qc.append(SymbolicOperation(controls, target, type_, parameters))
|
|
372
|
+
else:
|
|
373
|
+
qc.append(StandardOperation(controls, target, type_, cast("list[float]", parameters)))
|
|
374
|
+
return parameters
|
|
375
|
+
|
|
376
|
+
|
|
377
|
+
def _add_two_target_operation(
|
|
378
|
+
qc: QuantumComputation | CompoundOperation,
|
|
379
|
+
type_: OpType,
|
|
380
|
+
qargs: Sequence[Qubit],
|
|
381
|
+
params: Sequence[float | ParameterExpression],
|
|
382
|
+
qubit_map: Mapping[Qubit, int],
|
|
383
|
+
) -> list[float | ParameterExpression]:
|
|
384
|
+
qubits = [qubit_map[qubit] for qubit in qargs]
|
|
385
|
+
target2 = qubits.pop()
|
|
386
|
+
target1 = qubits.pop()
|
|
387
|
+
controls = {Control(qubit) for qubit in qubits}
|
|
388
|
+
parameters = [_parse_symbolic_expression(param) for param in params]
|
|
389
|
+
if any(isinstance(parameter, Expression) for parameter in parameters):
|
|
390
|
+
qc.append(SymbolicOperation(controls, target1, target2, type_, parameters))
|
|
391
|
+
else:
|
|
392
|
+
qc.append(StandardOperation(controls, target1, target2, type_, cast("list[float]", parameters)))
|
|
393
|
+
return parameters
|
|
394
|
+
|
|
395
|
+
|
|
396
|
+
def _import_layouts(qc: QuantumComputation, circ: QuantumCircuit) -> None:
|
|
397
|
+
qc.initial_layout.clear()
|
|
398
|
+
initial_index_layout = circ.layout.initial_index_layout()
|
|
399
|
+
for virtual, physical in enumerate(initial_index_layout):
|
|
400
|
+
qc.initial_layout[physical] = virtual
|
|
401
|
+
|
|
402
|
+
# Properly mark ancillary qubits
|
|
403
|
+
for register in circ.layout.initial_layout.get_registers():
|
|
404
|
+
if register.name != "ancilla" and not isinstance(register, AncillaRegister):
|
|
405
|
+
continue
|
|
406
|
+
for qubit in reversed(register):
|
|
407
|
+
physical_qubit = circ.layout.initial_layout[qubit]
|
|
408
|
+
virtual_qubit = qc.initial_layout[physical_qubit]
|
|
409
|
+
qc.set_circuit_qubit_ancillary(virtual_qubit)
|
|
410
|
+
|
|
411
|
+
if circ.layout.final_layout is None:
|
|
412
|
+
qc.output_permutation = qc.initial_layout
|
|
413
|
+
return
|
|
414
|
+
|
|
415
|
+
qc.output_permutation.clear()
|
|
416
|
+
final_index_layout = circ.layout.final_index_layout()
|
|
417
|
+
for virtual, physical in enumerate(final_index_layout):
|
|
418
|
+
qc.output_permutation[physical] = virtual
|
|
419
|
+
|
|
420
|
+
# Properly mark garbage qubits
|
|
421
|
+
# Any qubit in the initial layout that is not in the final layout is garbage
|
|
422
|
+
for virtual_qubit in range(len(final_index_layout), len(initial_index_layout)):
|
|
423
|
+
qc.set_circuit_qubit_garbage(virtual_qubit)
|
|
424
|
+
|
|
425
|
+
|
|
426
|
+
def _import_definition(
|
|
427
|
+
qc: QuantumComputation | CompoundOperation,
|
|
428
|
+
circ: QuantumCircuit,
|
|
429
|
+
qargs: Sequence[Qubit],
|
|
430
|
+
cargs: Sequence[Clbit],
|
|
431
|
+
qubit_map: Mapping[Qubit, int],
|
|
432
|
+
clbit_map: Mapping[Clbit, int],
|
|
433
|
+
) -> list[float | ParameterExpression]:
|
|
434
|
+
qarg_map = dict(zip(circ.qubits, qargs))
|
|
435
|
+
carg_map = dict(zip(circ.clbits, cargs))
|
|
436
|
+
|
|
437
|
+
qc.append(CompoundOperation())
|
|
438
|
+
comp_op = cast("CompoundOperation", qc[-1])
|
|
439
|
+
|
|
440
|
+
params = []
|
|
441
|
+
for instruction in circ.data:
|
|
442
|
+
mapped_qargs = [qarg_map[qarg] for qarg in instruction.qubits]
|
|
443
|
+
mapped_cargs = [carg_map[carg] for carg in instruction.clbits]
|
|
444
|
+
operation = instruction.operation
|
|
445
|
+
new_params = _emplace_operation(
|
|
446
|
+
comp_op,
|
|
447
|
+
operation,
|
|
448
|
+
mapped_qargs,
|
|
449
|
+
mapped_cargs,
|
|
450
|
+
operation.params,
|
|
451
|
+
qubit_map,
|
|
452
|
+
clbit_map,
|
|
453
|
+
)
|
|
454
|
+
params.extend(new_params)
|
|
455
|
+
return params
|
mqt/core/py.typed
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# Copyright (c) 2023 - 2025 Chair for Design Automation, TUM
|
|
2
|
+
# Copyright (c) 2025 Munich Quantum Software Company GmbH
|
|
3
|
+
# All rights reserved.
|
|
4
|
+
#
|
|
5
|
+
# SPDX-License-Identifier: MIT
|
|
6
|
+
#
|
|
7
|
+
# Licensed under the MIT License
|
|
8
|
+
|
|
9
|
+
function(add_mqt_python_binding package_name target_name)
|
|
10
|
+
# parse the arguments
|
|
11
|
+
cmake_parse_arguments(ARG "" "MODULE_NAME;INSTALL_DIR" "LINK_LIBS" ${ARGN})
|
|
12
|
+
set(SOURCES ${ARG_UNPARSED_ARGUMENTS})
|
|
13
|
+
|
|
14
|
+
# declare the Python module
|
|
15
|
+
pybind11_add_module(
|
|
16
|
+
# name of the extension
|
|
17
|
+
${target_name}
|
|
18
|
+
# Pprefer thin LTO if available
|
|
19
|
+
THIN_LTO
|
|
20
|
+
# optimize the bindings for size
|
|
21
|
+
OPT_SIZE
|
|
22
|
+
# source code goes here
|
|
23
|
+
${SOURCES})
|
|
24
|
+
|
|
25
|
+
# set default "." for INSTALL_DIR
|
|
26
|
+
if(NOT ARG_INSTALL_DIR)
|
|
27
|
+
set(ARG_INSTALL_DIR ".")
|
|
28
|
+
endif()
|
|
29
|
+
|
|
30
|
+
if(ARG_MODULE_NAME)
|
|
31
|
+
# the library name must be the same as the module name
|
|
32
|
+
set_target_properties(${target_name} PROPERTIES OUTPUT_NAME ${ARG_MODULE_NAME})
|
|
33
|
+
target_compile_definitions(${target_name}
|
|
34
|
+
PRIVATE MQT_${package_name}_MODULE_NAME=${ARG_MODULE_NAME})
|
|
35
|
+
else()
|
|
36
|
+
# use the target name as the module name
|
|
37
|
+
target_compile_definitions(${target_name}
|
|
38
|
+
PRIVATE MQT_${package_name}_MODULE_NAME=${target_name})
|
|
39
|
+
endif()
|
|
40
|
+
|
|
41
|
+
# add project libraries to the link libraries
|
|
42
|
+
list(APPEND ARG_LINK_LIBS MQT::ProjectOptions MQT::ProjectWarnings)
|
|
43
|
+
|
|
44
|
+
# link the required libraries
|
|
45
|
+
target_link_libraries(${target_name} PRIVATE ${ARG_LINK_LIBS})
|
|
46
|
+
|
|
47
|
+
# install directive for scikit-build-core
|
|
48
|
+
install(
|
|
49
|
+
TARGETS ${target_name}
|
|
50
|
+
DESTINATION ${ARG_INSTALL_DIR}
|
|
51
|
+
COMPONENT ${MQT_${package_name}_TARGET_NAME}_Python)
|
|
52
|
+
endfunction()
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# Copyright (c) 2023 - 2025 Chair for Design Automation, TUM
|
|
2
|
+
# Copyright (c) 2025 Munich Quantum Software Company GmbH
|
|
3
|
+
# All rights reserved.
|
|
4
|
+
#
|
|
5
|
+
# SPDX-License-Identifier: MIT
|
|
6
|
+
#
|
|
7
|
+
# Licensed under the MIT License
|
|
8
|
+
|
|
9
|
+
option(ENABLE_CACHE "Enable compiler cache if available" ON)
|
|
10
|
+
if(NOT ENABLE_CACHE)
|
|
11
|
+
return()
|
|
12
|
+
endif()
|
|
13
|
+
|
|
14
|
+
set(CACHE_OPTION_VALUES "ccache" "sccache")
|
|
15
|
+
set(CACHE_OPTION
|
|
16
|
+
"ccache"
|
|
17
|
+
CACHE STRING "Compiler cache to use")
|
|
18
|
+
set_property(CACHE CACHE_OPTION PROPERTY STRINGS ${CACHE_OPTION_VALUES})
|
|
19
|
+
list(FIND CACHE_OPTION_VALUES ${CACHE_OPTION} CACHE_OPTION_INDEX)
|
|
20
|
+
if(CACHE_OPTION_INDEX EQUAL -1)
|
|
21
|
+
message(NOTICE
|
|
22
|
+
"Unknown compiler cache '${CACHE_OPTION}'. Available options are: ${CACHE_OPTION_VALUES}")
|
|
23
|
+
endif()
|
|
24
|
+
|
|
25
|
+
find_program(CACHE_BINARY ${CACHE_OPTION})
|
|
26
|
+
if(CACHE_BINARY)
|
|
27
|
+
message(STATUS "Compiler cache '${CACHE_OPTION}' found and enabled")
|
|
28
|
+
set(CMAKE_C_COMPILER_LAUNCHER ${CACHE_BINARY})
|
|
29
|
+
set(CMAKE_CXX_COMPILER_LAUNCHER ${CACHE_BINARY})
|
|
30
|
+
else()
|
|
31
|
+
message(NOTICE "${CACHE_OPTION} is enabled but was not found. Not using it")
|
|
32
|
+
endif()
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
# Copyright (c) 2023 - 2025 Chair for Design Automation, TUM
|
|
2
|
+
# Copyright (c) 2025 Munich Quantum Software Company GmbH
|
|
3
|
+
# All rights reserved.
|
|
4
|
+
#
|
|
5
|
+
# SPDX-License-Identifier: MIT
|
|
6
|
+
#
|
|
7
|
+
# Licensed under the MIT License
|
|
8
|
+
|
|
9
|
+
# File adapted from
|
|
10
|
+
# https://github.com/dune-project/dune-common/blob/master/cmake/modules/FindGMP.cmake
|
|
11
|
+
|
|
12
|
+
#[=======================================================================[.rst:
|
|
13
|
+
FindGMP
|
|
14
|
+
-------
|
|
15
|
+
|
|
16
|
+
Find the GNU MULTI-Precision Bignum (GMP) library
|
|
17
|
+
and the corresponding C++ bindings GMPxx.
|
|
18
|
+
|
|
19
|
+
This module searches for both libraries and only considers the package
|
|
20
|
+
found if both can be located. It then defines separate targets for the C
|
|
21
|
+
and the C++ library.
|
|
22
|
+
|
|
23
|
+
Imported Targets
|
|
24
|
+
^^^^^^^^^^^^^^^^
|
|
25
|
+
|
|
26
|
+
This module provides the following imported targets, if found:
|
|
27
|
+
|
|
28
|
+
``GMP::gmp``
|
|
29
|
+
Library target of the C library.
|
|
30
|
+
``GMP::gmpxx``
|
|
31
|
+
Library target of the C++ library, which also links to the C library.
|
|
32
|
+
|
|
33
|
+
Result Variables
|
|
34
|
+
^^^^^^^^^^^^^^^^
|
|
35
|
+
|
|
36
|
+
This will define the following variables:
|
|
37
|
+
|
|
38
|
+
``GMP_FOUND``
|
|
39
|
+
True if the GMP library, the GMPxx headers and
|
|
40
|
+
the GMPxx library were found.
|
|
41
|
+
|
|
42
|
+
Cache Variables
|
|
43
|
+
^^^^^^^^^^^^^^^
|
|
44
|
+
|
|
45
|
+
You may set the following variables to modify the behaviour of
|
|
46
|
+
this module:
|
|
47
|
+
|
|
48
|
+
``GMP_INCLUDE_DIR``
|
|
49
|
+
The directory containing ``gmp.h``.
|
|
50
|
+
``GMP_LIB``
|
|
51
|
+
The path to the gmp library.
|
|
52
|
+
``GMPXX_INCLUDE_DIR``
|
|
53
|
+
The directory containing ``gmpxx.h``.
|
|
54
|
+
``GMPXX_LIB``
|
|
55
|
+
The path to the gmpxx library.
|
|
56
|
+
|
|
57
|
+
#]=======================================================================]
|
|
58
|
+
|
|
59
|
+
# Add a feature summary for this package
|
|
60
|
+
include(FeatureSummary)
|
|
61
|
+
set_package_properties(
|
|
62
|
+
GMP PROPERTIES
|
|
63
|
+
DESCRIPTION "GNU multi-precision library"
|
|
64
|
+
URL "https://gmplib.org")
|
|
65
|
+
|
|
66
|
+
# Try finding the package with pkg-config
|
|
67
|
+
find_package(PkgConfig QUIET)
|
|
68
|
+
pkg_check_modules(PKG QUIET gmp gmpxx)
|
|
69
|
+
|
|
70
|
+
# Try to locate the libraries and their headers, using pkg-config hints
|
|
71
|
+
find_path(GMP_INCLUDE_DIR gmp.h HINTS ${PKG_gmp_INCLUDEDIR})
|
|
72
|
+
find_library(GMP_LIB gmp HINTS ${PKG_gmp_LIBDIR})
|
|
73
|
+
|
|
74
|
+
find_path(GMPXX_INCLUDE_DIR gmpxx.h HINTS ${PKG_gmpxx_INCLUDEDIR})
|
|
75
|
+
find_library(GMPXX_LIB gmpxx HINTS ${PKG_gmpxx_LIBDIR})
|
|
76
|
+
|
|
77
|
+
# Remove these variables from cache inspector
|
|
78
|
+
mark_as_advanced(GMP_INCLUDE_DIR GMP_LIB GMPXX_INCLUDE_DIR GMPXX_LIB)
|
|
79
|
+
|
|
80
|
+
# Report if package was found
|
|
81
|
+
include(FindPackageHandleStandardArgs)
|
|
82
|
+
find_package_handle_standard_args(GMP DEFAULT_MSG GMPXX_LIB GMPXX_INCLUDE_DIR GMP_INCLUDE_DIR
|
|
83
|
+
GMP_LIB)
|
|
84
|
+
|
|
85
|
+
# Set targets
|
|
86
|
+
if(GMP_FOUND)
|
|
87
|
+
# C library
|
|
88
|
+
if(NOT TARGET GMP::gmp)
|
|
89
|
+
add_library(GMP::gmp UNKNOWN IMPORTED)
|
|
90
|
+
set_target_properties(GMP::gmp PROPERTIES IMPORTED_LOCATION ${GMP_LIB}
|
|
91
|
+
INTERFACE_INCLUDE_DIRECTORIES ${GMP_INCLUDE_DIR})
|
|
92
|
+
endif()
|
|
93
|
+
|
|
94
|
+
# C++ library, which requires a link to the C library
|
|
95
|
+
if(NOT TARGET GMP::gmpxx)
|
|
96
|
+
add_library(GMP::gmpxx UNKNOWN IMPORTED)
|
|
97
|
+
set_target_properties(
|
|
98
|
+
GMP::gmpxx
|
|
99
|
+
PROPERTIES IMPORTED_LOCATION ${GMPXX_LIB}
|
|
100
|
+
INTERFACE_INCLUDE_DIRECTORIES ${GMPXX_INCLUDE_DIR}
|
|
101
|
+
INTERFACE_LINK_LIBRARIES GMP::gmp)
|
|
102
|
+
endif()
|
|
103
|
+
endif()
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Copyright (c) 2023 - 2025 Chair for Design Automation, TUM
|
|
2
|
+
# Copyright (c) 2025 Munich Quantum Software Company GmbH
|
|
3
|
+
# All rights reserved.
|
|
4
|
+
#
|
|
5
|
+
# SPDX-License-Identifier: MIT
|
|
6
|
+
#
|
|
7
|
+
# Licensed under the MIT License
|
|
8
|
+
|
|
9
|
+
# macro to add a test executable for one of the project libraries
|
|
10
|
+
macro(PACKAGE_ADD_TEST testname linklibs)
|
|
11
|
+
if(NOT TARGET ${testname})
|
|
12
|
+
# create an executable in which the tests will be stored
|
|
13
|
+
add_executable(${testname} ${ARGN})
|
|
14
|
+
# link the Google test infrastructure and a default main function to the test executable.
|
|
15
|
+
target_link_libraries(${testname} PRIVATE ${linklibs} GTest::gmock GTest::gtest_main
|
|
16
|
+
MQT::ProjectOptions MQT::ProjectWarnings)
|
|
17
|
+
# discover tests
|
|
18
|
+
gtest_discover_tests(
|
|
19
|
+
${testname}
|
|
20
|
+
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
|
21
|
+
PROPERTIES VS_DEBUGGER_WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}" DISCOVERY_TIMEOUT 60)
|
|
22
|
+
set_target_properties(${testname} PROPERTIES FOLDER tests)
|
|
23
|
+
endif()
|
|
24
|
+
endmacro()
|
|
25
|
+
|
|
26
|
+
macro(PACKAGE_ADD_TEST_WITH_WORKING_DIR testname linklibs test_working_directory)
|
|
27
|
+
if(NOT TARGET ${testname})
|
|
28
|
+
# create an executable in which the tests will be stored
|
|
29
|
+
add_executable(${testname} ${ARGN})
|
|
30
|
+
# link the Google test infrastructure and a default main function to the test executable.
|
|
31
|
+
target_link_libraries(${testname} PRIVATE ${linklibs} GTest::gmock GTest::gtest_main
|
|
32
|
+
MQT::ProjectOptions MQT::ProjectWarnings)
|
|
33
|
+
# discover tests
|
|
34
|
+
gtest_discover_tests(
|
|
35
|
+
${testname}
|
|
36
|
+
WORKING_DIRECTORY ${test_working_directory}
|
|
37
|
+
PROPERTIES VS_DEBUGGER_WORKING_DIRECTORY "${test_working_directory}" DISCOVERY_TIMEOUT 60)
|
|
38
|
+
set_target_properties(${testname} PROPERTIES FOLDER tests)
|
|
39
|
+
endif()
|
|
40
|
+
endmacro()
|