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,85 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2023 - 2025 Chair for Design Automation, TUM
|
|
3
|
+
* Copyright (c) 2025 Munich Quantum Software Company GmbH
|
|
4
|
+
* All rights reserved.
|
|
5
|
+
*
|
|
6
|
+
* SPDX-License-Identifier: MIT
|
|
7
|
+
*
|
|
8
|
+
* Licensed under the MIT License
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
#pragma once
|
|
12
|
+
|
|
13
|
+
#include "Statement.hpp"
|
|
14
|
+
|
|
15
|
+
#include <exception>
|
|
16
|
+
#include <memory>
|
|
17
|
+
#include <sstream>
|
|
18
|
+
#include <string>
|
|
19
|
+
#include <utility>
|
|
20
|
+
|
|
21
|
+
namespace qasm3 {
|
|
22
|
+
class CompilerError final : public std::exception {
|
|
23
|
+
public:
|
|
24
|
+
std::string message;
|
|
25
|
+
std::shared_ptr<DebugInfo> debugInfo;
|
|
26
|
+
mutable std::string cachedMessage;
|
|
27
|
+
|
|
28
|
+
CompilerError(std::string msg, std::shared_ptr<DebugInfo> debug)
|
|
29
|
+
: message(std::move(msg)), debugInfo(std::move(debug)) {}
|
|
30
|
+
|
|
31
|
+
[[nodiscard]] std::string toString() const {
|
|
32
|
+
std::stringstream ss{};
|
|
33
|
+
ss << debugInfo->toString();
|
|
34
|
+
|
|
35
|
+
auto parentDebugInfo = debugInfo->parent;
|
|
36
|
+
while (parentDebugInfo != nullptr) {
|
|
37
|
+
ss << "\n (included from " << parentDebugInfo->toString() << ")";
|
|
38
|
+
parentDebugInfo = parentDebugInfo->parent;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
ss << ":\n" << message;
|
|
42
|
+
|
|
43
|
+
return ss.str();
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
[[nodiscard]] const char* what() const noexcept override {
|
|
47
|
+
cachedMessage = toString();
|
|
48
|
+
return cachedMessage.c_str();
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
class ConstEvalError final : public std::exception {
|
|
53
|
+
public:
|
|
54
|
+
std::string message;
|
|
55
|
+
mutable std::string cachedMessage;
|
|
56
|
+
|
|
57
|
+
explicit ConstEvalError(std::string msg) : message(std::move(msg)) {}
|
|
58
|
+
|
|
59
|
+
[[nodiscard]] std::string toString() const {
|
|
60
|
+
return "Constant Evaluation: " + message;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
[[nodiscard]] const char* what() const noexcept override {
|
|
64
|
+
cachedMessage = toString();
|
|
65
|
+
return cachedMessage.c_str();
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
class TypeCheckError final : public std::exception {
|
|
70
|
+
public:
|
|
71
|
+
std::string message;
|
|
72
|
+
mutable std::string cachedMessage;
|
|
73
|
+
|
|
74
|
+
explicit TypeCheckError(std::string msg) : message(std::move(msg)) {}
|
|
75
|
+
|
|
76
|
+
[[nodiscard]] std::string toString() const {
|
|
77
|
+
return "Type Check Error: " + message;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
[[nodiscard]] const char* what() const noexcept override {
|
|
81
|
+
cachedMessage = toString();
|
|
82
|
+
return cachedMessage.c_str();
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
} // namespace qasm3
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2023 - 2025 Chair for Design Automation, TUM
|
|
3
|
+
* Copyright (c) 2025 Munich Quantum Software Company GmbH
|
|
4
|
+
* All rights reserved.
|
|
5
|
+
*
|
|
6
|
+
* SPDX-License-Identifier: MIT
|
|
7
|
+
*
|
|
8
|
+
* Licensed under the MIT License
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
#pragma once
|
|
12
|
+
|
|
13
|
+
#include "Statement_fwd.hpp"
|
|
14
|
+
#include "ir/operations/OpType.hpp"
|
|
15
|
+
|
|
16
|
+
#include <cstddef>
|
|
17
|
+
#include <memory>
|
|
18
|
+
#include <string>
|
|
19
|
+
#include <utility>
|
|
20
|
+
#include <vector>
|
|
21
|
+
|
|
22
|
+
namespace qasm3 {
|
|
23
|
+
struct GateInfo {
|
|
24
|
+
size_t nControls;
|
|
25
|
+
size_t nTargets;
|
|
26
|
+
size_t nParameters;
|
|
27
|
+
qc::OpType type;
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
struct Gate {
|
|
31
|
+
virtual ~Gate() = default;
|
|
32
|
+
|
|
33
|
+
virtual size_t getNControls() = 0;
|
|
34
|
+
virtual size_t getNTargets() = 0;
|
|
35
|
+
virtual size_t getNParameters() = 0;
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
struct StandardGate final : Gate {
|
|
39
|
+
GateInfo info;
|
|
40
|
+
|
|
41
|
+
explicit StandardGate(const GateInfo& gateInfo) : info(gateInfo) {}
|
|
42
|
+
|
|
43
|
+
size_t getNControls() override { return info.nControls; }
|
|
44
|
+
|
|
45
|
+
size_t getNTargets() override { return info.nTargets; }
|
|
46
|
+
size_t getNParameters() override { return info.nParameters; }
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
struct CompoundGate final : Gate {
|
|
50
|
+
std::vector<std::string> parameterNames;
|
|
51
|
+
std::vector<std::string> targetNames;
|
|
52
|
+
std::vector<std::shared_ptr<QuantumStatement>> body;
|
|
53
|
+
|
|
54
|
+
explicit CompoundGate(
|
|
55
|
+
std::vector<std::string> parameters, std::vector<std::string> targets,
|
|
56
|
+
std::vector<std::shared_ptr<QuantumStatement>> bodyStatements)
|
|
57
|
+
: parameterNames(std::move(parameters)), targetNames(std::move(targets)),
|
|
58
|
+
body(std::move(bodyStatements)) {}
|
|
59
|
+
|
|
60
|
+
size_t getNControls() override { return 0; }
|
|
61
|
+
|
|
62
|
+
size_t getNTargets() override { return targetNames.size(); }
|
|
63
|
+
size_t getNParameters() override { return parameterNames.size(); }
|
|
64
|
+
};
|
|
65
|
+
} // namespace qasm3
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2023 - 2025 Chair for Design Automation, TUM
|
|
3
|
+
* Copyright (c) 2025 Munich Quantum Software Company GmbH
|
|
4
|
+
* All rights reserved.
|
|
5
|
+
*
|
|
6
|
+
* SPDX-License-Identifier: MIT
|
|
7
|
+
*
|
|
8
|
+
* Licensed under the MIT License
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
#pragma once
|
|
12
|
+
|
|
13
|
+
#include "ir/Definitions.hpp"
|
|
14
|
+
#include "ir/Permutation.hpp"
|
|
15
|
+
#include "qasm3/InstVisitor.hpp"
|
|
16
|
+
#include "qasm3/NestedEnvironment.hpp"
|
|
17
|
+
#include "qasm3/Statement_fwd.hpp"
|
|
18
|
+
#include "qasm3/passes/ConstEvalPass.hpp"
|
|
19
|
+
#include "qasm3/passes/TypeCheckPass.hpp"
|
|
20
|
+
|
|
21
|
+
#include <cstddef>
|
|
22
|
+
#include <cstdint>
|
|
23
|
+
#include <iosfwd>
|
|
24
|
+
#include <map>
|
|
25
|
+
#include <memory>
|
|
26
|
+
#include <string>
|
|
27
|
+
#include <tuple>
|
|
28
|
+
#include <unordered_map>
|
|
29
|
+
#include <utility>
|
|
30
|
+
#include <variant>
|
|
31
|
+
#include <vector>
|
|
32
|
+
|
|
33
|
+
// forward declarations
|
|
34
|
+
namespace qc {
|
|
35
|
+
enum ComparisonKind : std::uint8_t;
|
|
36
|
+
class ClassicalRegister;
|
|
37
|
+
struct Control;
|
|
38
|
+
class QuantumRegister;
|
|
39
|
+
class Operation;
|
|
40
|
+
class QuantumComputation;
|
|
41
|
+
using QuantumRegisterMap = std::unordered_map<std::string, QuantumRegister>;
|
|
42
|
+
} // namespace qc
|
|
43
|
+
namespace qasm3 {
|
|
44
|
+
class Statement;
|
|
45
|
+
struct Gate;
|
|
46
|
+
|
|
47
|
+
class Importer final : public InstVisitor {
|
|
48
|
+
public:
|
|
49
|
+
/**
|
|
50
|
+
* Imports a QASM3 file into a @ref qc::QuantumComputation instance
|
|
51
|
+
* @param filename The path to the QASM3 file to import
|
|
52
|
+
* @return The imported @ref qc::QuantumComputation instance
|
|
53
|
+
*/
|
|
54
|
+
[[nodiscard]] static auto importf(const std::string& filename)
|
|
55
|
+
-> qc::QuantumComputation;
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Imports a QASM3 program from a string into a @ref qc::QuantumComputation
|
|
59
|
+
* @param qasm The QASM3 program to import
|
|
60
|
+
* @return The imported @ref qc::QuantumComputation instance
|
|
61
|
+
*/
|
|
62
|
+
[[nodiscard]] static auto imports(const std::string& qasm)
|
|
63
|
+
-> qc::QuantumComputation;
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Imports a QASM3 program from a stream into a @ref qc::QuantumComputation
|
|
67
|
+
* @param is The input stream to read the QASM3 program from
|
|
68
|
+
* @return The imported @ref qc::QuantumComputation instance
|
|
69
|
+
*/
|
|
70
|
+
[[nodiscard]] static auto import(std::istream& is) -> qc::QuantumComputation;
|
|
71
|
+
|
|
72
|
+
private:
|
|
73
|
+
/**
|
|
74
|
+
* @brief Construct a new instance for importing QASM3 code
|
|
75
|
+
* @param quantumComputation The @ref qc::QuantumComputation to import the
|
|
76
|
+
* QASM3 code into.
|
|
77
|
+
*/
|
|
78
|
+
explicit Importer(qc::QuantumComputation& quantumComputation);
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* @brief Import the given QASM3 program into the @ref qc::QuantumComputation
|
|
82
|
+
* @param program The parsed QASM3 program AST
|
|
83
|
+
*/
|
|
84
|
+
void visitProgram(const std::vector<std::shared_ptr<Statement>>& program);
|
|
85
|
+
|
|
86
|
+
const_eval::ConstEvalPass constEvalPass;
|
|
87
|
+
type_checking::TypeCheckPass typeCheckPass;
|
|
88
|
+
|
|
89
|
+
NestedEnvironment<std::shared_ptr<DeclarationStatement>> declarations;
|
|
90
|
+
qc::QuantumComputation* qc{};
|
|
91
|
+
|
|
92
|
+
std::map<std::string, std::shared_ptr<Gate>> gates;
|
|
93
|
+
|
|
94
|
+
bool openQASM2CompatMode{false};
|
|
95
|
+
|
|
96
|
+
qc::Permutation initialLayout;
|
|
97
|
+
qc::Permutation outputPermutation;
|
|
98
|
+
|
|
99
|
+
static std::map<std::string, std::pair<const_eval::ConstEvalValue,
|
|
100
|
+
type_checking::InferredType>>
|
|
101
|
+
initializeBuiltins();
|
|
102
|
+
|
|
103
|
+
void translateGateOperand(const std::shared_ptr<GateOperand>& gateOperand,
|
|
104
|
+
std::vector<qc::Qubit>& qubits,
|
|
105
|
+
const qc::QuantumRegisterMap& qregs,
|
|
106
|
+
const std::shared_ptr<DebugInfo>& debugInfo) const;
|
|
107
|
+
|
|
108
|
+
void translateBitOperand(
|
|
109
|
+
const std::shared_ptr<IndexedIdentifier>& indexedIdentifier,
|
|
110
|
+
std::vector<qc::Bit>& bits,
|
|
111
|
+
const std::shared_ptr<DebugInfo>& debugInfo) const;
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* @brief Translates a condition expression
|
|
115
|
+
* @param condition The condition expression to translate.
|
|
116
|
+
* @param debugInfo The debug information of the condition expression.
|
|
117
|
+
* @return Either a pair of a bit and a boolean value, or a triple of a
|
|
118
|
+
* classical register, a comparison kind, and an integer value.
|
|
119
|
+
* @throws CompilerError If the condition is neither of the expected types.
|
|
120
|
+
*/
|
|
121
|
+
[[nodiscard]] std::variant<
|
|
122
|
+
std::pair<qc::Bit, bool>,
|
|
123
|
+
std::tuple<qc::ClassicalRegister, qc::ComparisonKind, uint64_t>>
|
|
124
|
+
translateCondition(const std::shared_ptr<Expression>& condition,
|
|
125
|
+
const std::shared_ptr<DebugInfo>& debugInfo) const;
|
|
126
|
+
|
|
127
|
+
static uint64_t
|
|
128
|
+
evaluatePositiveConstant(const std::shared_ptr<Expression>& expr,
|
|
129
|
+
const std::shared_ptr<DebugInfo>& debugInfo,
|
|
130
|
+
uint64_t defaultValue = 0);
|
|
131
|
+
|
|
132
|
+
void visitVersionDeclaration(
|
|
133
|
+
std::shared_ptr<VersionDeclaration> versionDeclaration) override;
|
|
134
|
+
|
|
135
|
+
void visitDeclarationStatement(
|
|
136
|
+
std::shared_ptr<DeclarationStatement> declarationStatement) override;
|
|
137
|
+
|
|
138
|
+
void visitAssignmentStatement(
|
|
139
|
+
std::shared_ptr<AssignmentStatement> assignmentStatement) override;
|
|
140
|
+
|
|
141
|
+
void visitInitialLayout(std::shared_ptr<InitialLayout> layout) override;
|
|
142
|
+
|
|
143
|
+
void visitOutputPermutation(
|
|
144
|
+
std::shared_ptr<OutputPermutation> permutation) override;
|
|
145
|
+
|
|
146
|
+
void
|
|
147
|
+
visitGateStatement(std::shared_ptr<GateDeclaration> gateStatement) override;
|
|
148
|
+
|
|
149
|
+
void visitGateCallStatement(
|
|
150
|
+
std::shared_ptr<GateCallStatement> gateCallStatement) override;
|
|
151
|
+
|
|
152
|
+
auto
|
|
153
|
+
evaluateGateCall(const std::shared_ptr<GateCallStatement>& gateCallStatement,
|
|
154
|
+
const std::string& identifier,
|
|
155
|
+
const std::vector<std::shared_ptr<Expression>>& parameters,
|
|
156
|
+
std::vector<std::shared_ptr<GateOperand>> targets,
|
|
157
|
+
const qc::QuantumRegisterMap& qregs)
|
|
158
|
+
-> std::unique_ptr<qc::Operation>;
|
|
159
|
+
|
|
160
|
+
static std::shared_ptr<Gate>
|
|
161
|
+
getMcGateDefinition(const std::string& identifier, size_t operandSize,
|
|
162
|
+
const std::shared_ptr<DebugInfo>& debugInfo);
|
|
163
|
+
|
|
164
|
+
auto applyQuantumOperation(const std::shared_ptr<Gate>& gate,
|
|
165
|
+
const qc::Targets& targetBits,
|
|
166
|
+
const std::vector<qc::Control>& controlBits,
|
|
167
|
+
const std::vector<qc::fp>& evaluatedParameters,
|
|
168
|
+
bool invertOperation,
|
|
169
|
+
const std::shared_ptr<DebugInfo>& debugInfo)
|
|
170
|
+
-> std::unique_ptr<qc::Operation>;
|
|
171
|
+
|
|
172
|
+
void visitMeasureAssignment(
|
|
173
|
+
const std::shared_ptr<IndexedIdentifier>& indexedIdentifier,
|
|
174
|
+
const std::shared_ptr<MeasureExpression>& measureExpression,
|
|
175
|
+
const std::shared_ptr<DebugInfo>& debugInfo);
|
|
176
|
+
|
|
177
|
+
void visitBarrierStatement(
|
|
178
|
+
std::shared_ptr<BarrierStatement> barrierStatement) override;
|
|
179
|
+
|
|
180
|
+
void
|
|
181
|
+
visitResetStatement(std::shared_ptr<ResetStatement> resetStatement) override;
|
|
182
|
+
|
|
183
|
+
void visitIfStatement(std::shared_ptr<IfStatement> ifStatement) override;
|
|
184
|
+
|
|
185
|
+
[[nodiscard]] auto translateBlockOperations(
|
|
186
|
+
const std::vector<std::shared_ptr<Statement>>& statements)
|
|
187
|
+
-> std::unique_ptr<qc::Operation>;
|
|
188
|
+
|
|
189
|
+
std::pair<std::string, size_t>
|
|
190
|
+
parseGateIdentifierCompatMode(const std::string& identifier);
|
|
191
|
+
};
|
|
192
|
+
} // namespace qasm3
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2023 - 2025 Chair for Design Automation, TUM
|
|
3
|
+
* Copyright (c) 2025 Munich Quantum Software Company GmbH
|
|
4
|
+
* All rights reserved.
|
|
5
|
+
*
|
|
6
|
+
* SPDX-License-Identifier: MIT
|
|
7
|
+
*
|
|
8
|
+
* Licensed under the MIT License
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
#pragma once
|
|
12
|
+
|
|
13
|
+
#include "Statement_fwd.hpp"
|
|
14
|
+
|
|
15
|
+
#include <cstdint>
|
|
16
|
+
#include <memory>
|
|
17
|
+
#include <stdexcept>
|
|
18
|
+
|
|
19
|
+
namespace qasm3 {
|
|
20
|
+
|
|
21
|
+
class InstVisitor {
|
|
22
|
+
public:
|
|
23
|
+
virtual void
|
|
24
|
+
visitGateStatement(std::shared_ptr<GateDeclaration> gateStatement) = 0;
|
|
25
|
+
virtual void visitVersionDeclaration(
|
|
26
|
+
std::shared_ptr<VersionDeclaration> versionDeclaration) = 0;
|
|
27
|
+
virtual void visitDeclarationStatement(
|
|
28
|
+
std::shared_ptr<DeclarationStatement> declarationStatement) = 0;
|
|
29
|
+
virtual void
|
|
30
|
+
visitInitialLayout(std::shared_ptr<InitialLayout> initialLayout) = 0;
|
|
31
|
+
virtual void visitOutputPermutation(
|
|
32
|
+
std::shared_ptr<OutputPermutation> outputPermutation) = 0;
|
|
33
|
+
virtual void visitGateCallStatement(
|
|
34
|
+
std::shared_ptr<GateCallStatement> gateCallStatement) = 0;
|
|
35
|
+
virtual void visitAssignmentStatement(
|
|
36
|
+
std::shared_ptr<AssignmentStatement> assignmentStatement) = 0;
|
|
37
|
+
virtual void
|
|
38
|
+
visitBarrierStatement(std::shared_ptr<BarrierStatement> barrierStatement) = 0;
|
|
39
|
+
virtual void
|
|
40
|
+
visitResetStatement(std::shared_ptr<ResetStatement> resetStatement) = 0;
|
|
41
|
+
virtual void visitIfStatement(std::shared_ptr<IfStatement> ifStatement) = 0;
|
|
42
|
+
|
|
43
|
+
virtual ~InstVisitor() = default;
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
class DefaultInstVisitor : public InstVisitor {
|
|
47
|
+
public:
|
|
48
|
+
void visitGateStatement(
|
|
49
|
+
std::shared_ptr<GateDeclaration> /*gateStatement*/) override {}
|
|
50
|
+
void visitVersionDeclaration(
|
|
51
|
+
std::shared_ptr<VersionDeclaration> /*versionDeclaration*/) override {}
|
|
52
|
+
void visitDeclarationStatement(
|
|
53
|
+
std::shared_ptr<DeclarationStatement> /*declarationStatement*/) override {
|
|
54
|
+
}
|
|
55
|
+
void visitInitialLayout(
|
|
56
|
+
std::shared_ptr<InitialLayout> /*initialLayout*/) override {}
|
|
57
|
+
void visitOutputPermutation(
|
|
58
|
+
std::shared_ptr<OutputPermutation> /*outputPermutation*/) override {}
|
|
59
|
+
void visitGateCallStatement(
|
|
60
|
+
std::shared_ptr<GateCallStatement> /*gateCallStatement*/) override {}
|
|
61
|
+
void visitAssignmentStatement(
|
|
62
|
+
std::shared_ptr<AssignmentStatement> /*assignmentStatement*/) override {}
|
|
63
|
+
void visitBarrierStatement(
|
|
64
|
+
std::shared_ptr<BarrierStatement> /*barrierStatement*/) override {}
|
|
65
|
+
void visitResetStatement(
|
|
66
|
+
std::shared_ptr<ResetStatement> /*resetStatement*/) override {}
|
|
67
|
+
void visitIfStatement(std::shared_ptr<IfStatement> /*ifStatement*/) override {
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
template <typename T> class ExpressionVisitor {
|
|
72
|
+
public:
|
|
73
|
+
virtual T
|
|
74
|
+
visitBinaryExpression(std::shared_ptr<BinaryExpression> binaryExpression) = 0;
|
|
75
|
+
virtual T
|
|
76
|
+
visitUnaryExpression(std::shared_ptr<UnaryExpression> unaryExpression) = 0;
|
|
77
|
+
virtual T visitConstantExpression(std::shared_ptr<Constant> constant) = 0;
|
|
78
|
+
virtual T visitIdentifierExpression(
|
|
79
|
+
std::shared_ptr<IdentifierExpression> identifierExpression) = 0;
|
|
80
|
+
virtual T
|
|
81
|
+
visitIdentifierList(std::shared_ptr<IdentifierList> identifierList) = 0;
|
|
82
|
+
virtual T visitIndexedIdentifier(
|
|
83
|
+
std::shared_ptr<IndexedIdentifier> indexedIdentifier) = 0;
|
|
84
|
+
virtual T visitMeasureExpression(
|
|
85
|
+
std::shared_ptr<MeasureExpression> measureExpression) = 0;
|
|
86
|
+
|
|
87
|
+
// A manually implemented visitor function with a templated return type.
|
|
88
|
+
// This is impossible as a virtual function in expression, which is why
|
|
89
|
+
// we define it manually.
|
|
90
|
+
T visit(const std::shared_ptr<Expression>& expression) {
|
|
91
|
+
if (expression == nullptr) {
|
|
92
|
+
throw std::runtime_error("Expression is null");
|
|
93
|
+
}
|
|
94
|
+
if (const auto binaryExpression =
|
|
95
|
+
std::dynamic_pointer_cast<BinaryExpression>(expression)) {
|
|
96
|
+
return visitBinaryExpression(binaryExpression);
|
|
97
|
+
}
|
|
98
|
+
if (const auto unaryExpression =
|
|
99
|
+
std::dynamic_pointer_cast<UnaryExpression>(expression)) {
|
|
100
|
+
return visitUnaryExpression(unaryExpression);
|
|
101
|
+
}
|
|
102
|
+
if (const auto constantInt =
|
|
103
|
+
std::dynamic_pointer_cast<Constant>(expression)) {
|
|
104
|
+
return visitConstantExpression(constantInt);
|
|
105
|
+
}
|
|
106
|
+
if (const auto identifierExpression =
|
|
107
|
+
std::dynamic_pointer_cast<IdentifierExpression>(expression)) {
|
|
108
|
+
return visitIdentifierExpression(identifierExpression);
|
|
109
|
+
}
|
|
110
|
+
if (const auto identifierList =
|
|
111
|
+
std::dynamic_pointer_cast<IdentifierList>(expression)) {
|
|
112
|
+
return visitIdentifierList(identifierList);
|
|
113
|
+
}
|
|
114
|
+
if (const auto indexedIdentifier =
|
|
115
|
+
std::dynamic_pointer_cast<IndexedIdentifier>(expression)) {
|
|
116
|
+
return visitIndexedIdentifier(indexedIdentifier);
|
|
117
|
+
}
|
|
118
|
+
if (const auto measureExpression =
|
|
119
|
+
std::dynamic_pointer_cast<MeasureExpression>(expression)) {
|
|
120
|
+
return visitMeasureExpression(measureExpression);
|
|
121
|
+
}
|
|
122
|
+
throw std::runtime_error("Unhandled expression type.");
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
virtual ~ExpressionVisitor() = default;
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
template <typename T> class Type;
|
|
129
|
+
using ResolvedType = Type<uint64_t>;
|
|
130
|
+
template <typename T> class DesignatedType;
|
|
131
|
+
template <typename T> class UnsizedType;
|
|
132
|
+
template <typename T> class ArrayType;
|
|
133
|
+
|
|
134
|
+
template <typename T> class TypeVisitor {
|
|
135
|
+
public:
|
|
136
|
+
virtual ~TypeVisitor() = default;
|
|
137
|
+
|
|
138
|
+
virtual std::shared_ptr<ResolvedType>
|
|
139
|
+
visitDesignatedType(DesignatedType<T>* designatedType) = 0;
|
|
140
|
+
virtual std::shared_ptr<ResolvedType>
|
|
141
|
+
visitUnsizedType(UnsizedType<T>* unsizedType) = 0;
|
|
142
|
+
virtual std::shared_ptr<ResolvedType>
|
|
143
|
+
visitArrayType(ArrayType<T>* arrayType) = 0;
|
|
144
|
+
};
|
|
145
|
+
} // namespace qasm3
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2023 - 2025 Chair for Design Automation, TUM
|
|
3
|
+
* Copyright (c) 2025 Munich Quantum Software Company GmbH
|
|
4
|
+
* All rights reserved.
|
|
5
|
+
*
|
|
6
|
+
* SPDX-License-Identifier: MIT
|
|
7
|
+
*
|
|
8
|
+
* Licensed under the MIT License
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
#pragma once
|
|
12
|
+
|
|
13
|
+
#include <map>
|
|
14
|
+
#include <optional>
|
|
15
|
+
#include <string>
|
|
16
|
+
#include <vector>
|
|
17
|
+
|
|
18
|
+
namespace qasm3 {
|
|
19
|
+
template <typename T> class NestedEnvironment {
|
|
20
|
+
std::vector<std::map<std::string, T>> env{};
|
|
21
|
+
|
|
22
|
+
public:
|
|
23
|
+
NestedEnvironment() { env.emplace_back(); };
|
|
24
|
+
|
|
25
|
+
void push() { env.emplace_back(); }
|
|
26
|
+
|
|
27
|
+
void pop() { env.pop_back(); }
|
|
28
|
+
|
|
29
|
+
std::optional<T> find(std::string key) {
|
|
30
|
+
for (auto it = env.rbegin(); it != env.rend(); ++it) {
|
|
31
|
+
auto found = it->find(key);
|
|
32
|
+
if (found != it->end()) {
|
|
33
|
+
return found->second;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return std::nullopt;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
void emplace(std::string key, T value) { env.back().emplace(key, value); }
|
|
40
|
+
};
|
|
41
|
+
} // namespace qasm3
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2023 - 2025 Chair for Design Automation, TUM
|
|
3
|
+
* Copyright (c) 2025 Munich Quantum Software Company GmbH
|
|
4
|
+
* All rights reserved.
|
|
5
|
+
*
|
|
6
|
+
* SPDX-License-Identifier: MIT
|
|
7
|
+
*
|
|
8
|
+
* Licensed under the MIT License
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
/*
|
|
12
|
+
* This file is part of MQT QFR library which is released under the MIT license.
|
|
13
|
+
* See file README.md or go to https://www.cda.cit.tum.de/research/quantum/ for
|
|
14
|
+
* more information.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
#pragma once
|
|
18
|
+
|
|
19
|
+
#include "Scanner.hpp"
|
|
20
|
+
#include "Statement_fwd.hpp"
|
|
21
|
+
#include "Token.hpp"
|
|
22
|
+
#include "Types_fwd.hpp"
|
|
23
|
+
|
|
24
|
+
#include <istream>
|
|
25
|
+
#include <memory>
|
|
26
|
+
#include <optional>
|
|
27
|
+
#include <stack>
|
|
28
|
+
#include <string>
|
|
29
|
+
#include <utility>
|
|
30
|
+
#include <vector>
|
|
31
|
+
|
|
32
|
+
namespace qc {
|
|
33
|
+
// forward declarations
|
|
34
|
+
class Permutation;
|
|
35
|
+
} // namespace qc
|
|
36
|
+
|
|
37
|
+
namespace qasm3 {
|
|
38
|
+
class Parser final {
|
|
39
|
+
struct ScannerState {
|
|
40
|
+
private:
|
|
41
|
+
std::unique_ptr<std::istream> is;
|
|
42
|
+
|
|
43
|
+
public:
|
|
44
|
+
Token last{0, 0};
|
|
45
|
+
Token t{0, 0};
|
|
46
|
+
Token next{0, 0};
|
|
47
|
+
std::unique_ptr<Scanner> scanner;
|
|
48
|
+
std::optional<std::string> filename;
|
|
49
|
+
bool isImplicitInclude;
|
|
50
|
+
|
|
51
|
+
bool scan() {
|
|
52
|
+
last = t;
|
|
53
|
+
t = next;
|
|
54
|
+
next = scanner->next();
|
|
55
|
+
|
|
56
|
+
return t.kind != Token::Kind::Eof;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
explicit ScannerState(
|
|
60
|
+
std::istream* in,
|
|
61
|
+
std::optional<std::string> debugFilename = std::nullopt,
|
|
62
|
+
const bool implicitInclude = false)
|
|
63
|
+
: scanner(std::make_unique<Scanner>(in)),
|
|
64
|
+
filename(std::move(debugFilename)),
|
|
65
|
+
isImplicitInclude(implicitInclude) {
|
|
66
|
+
scan();
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
explicit ScannerState(
|
|
70
|
+
std::unique_ptr<std::istream> in,
|
|
71
|
+
std::optional<std::string> debugFilename = std::nullopt,
|
|
72
|
+
const bool implicitInclude = false)
|
|
73
|
+
: is(std::move(in)), scanner(std::make_unique<Scanner>(is.get())),
|
|
74
|
+
filename(std::move(debugFilename)),
|
|
75
|
+
isImplicitInclude(implicitInclude) {
|
|
76
|
+
scan();
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
std::stack<ScannerState> scanner;
|
|
81
|
+
std::shared_ptr<DebugInfo> includeDebugInfo{nullptr};
|
|
82
|
+
|
|
83
|
+
[[noreturn]] void error(const Token& token, const std::string& msg);
|
|
84
|
+
|
|
85
|
+
[[nodiscard]] Token last() const;
|
|
86
|
+
|
|
87
|
+
[[nodiscard]] Token current() const;
|
|
88
|
+
|
|
89
|
+
[[nodiscard]] Token peek() const;
|
|
90
|
+
|
|
91
|
+
Token expect(const Token::Kind& expected,
|
|
92
|
+
const std::optional<std::string>& context = std::nullopt);
|
|
93
|
+
|
|
94
|
+
public:
|
|
95
|
+
explicit Parser(std::istream& is, bool implicitlyIncludeStdgates = true);
|
|
96
|
+
|
|
97
|
+
~Parser() = default;
|
|
98
|
+
|
|
99
|
+
std::shared_ptr<VersionDeclaration> parseVersionDeclaration();
|
|
100
|
+
|
|
101
|
+
std::vector<std::shared_ptr<Statement>> parseProgram();
|
|
102
|
+
|
|
103
|
+
std::shared_ptr<Statement> parseStatement();
|
|
104
|
+
|
|
105
|
+
std::shared_ptr<QuantumStatement> parseQuantumStatement();
|
|
106
|
+
|
|
107
|
+
void parseInclude();
|
|
108
|
+
|
|
109
|
+
std::shared_ptr<AssignmentStatement> parseAssignmentStatement();
|
|
110
|
+
|
|
111
|
+
std::shared_ptr<AssignmentStatement> parseMeasureStatement();
|
|
112
|
+
|
|
113
|
+
std::shared_ptr<ResetStatement> parseResetStatement();
|
|
114
|
+
|
|
115
|
+
std::shared_ptr<BarrierStatement> parseBarrierStatement();
|
|
116
|
+
|
|
117
|
+
std::shared_ptr<Statement> parseDeclaration(bool isConst);
|
|
118
|
+
|
|
119
|
+
std::shared_ptr<GateDeclaration> parseGateDefinition();
|
|
120
|
+
|
|
121
|
+
std::shared_ptr<GateDeclaration> parseOpaqueGateDefinition();
|
|
122
|
+
|
|
123
|
+
std::shared_ptr<GateCallStatement> parseGateCallStatement();
|
|
124
|
+
|
|
125
|
+
std::shared_ptr<GateModifier> parseGateModifier();
|
|
126
|
+
|
|
127
|
+
std::shared_ptr<IndexOperator> parseIndexOperator();
|
|
128
|
+
|
|
129
|
+
std::shared_ptr<IndexedIdentifier> parseIndexedIdentifier();
|
|
130
|
+
|
|
131
|
+
std::shared_ptr<GateOperand> parseGateOperand();
|
|
132
|
+
|
|
133
|
+
std::shared_ptr<DeclarationExpression> parseDeclarationExpression();
|
|
134
|
+
|
|
135
|
+
std::shared_ptr<MeasureExpression> parseMeasureExpression();
|
|
136
|
+
|
|
137
|
+
std::shared_ptr<Expression> exponentiation();
|
|
138
|
+
|
|
139
|
+
std::shared_ptr<Expression> factor();
|
|
140
|
+
|
|
141
|
+
std::shared_ptr<Expression> term();
|
|
142
|
+
|
|
143
|
+
std::shared_ptr<Expression> comparison();
|
|
144
|
+
|
|
145
|
+
std::shared_ptr<Expression> parseExpression();
|
|
146
|
+
|
|
147
|
+
std::shared_ptr<IdentifierList> parseIdentifierList();
|
|
148
|
+
|
|
149
|
+
std::pair<std::shared_ptr<Type<std::shared_ptr<Expression>>>, bool>
|
|
150
|
+
parseType();
|
|
151
|
+
|
|
152
|
+
std::shared_ptr<Expression> parseTypeDesignator();
|
|
153
|
+
|
|
154
|
+
static qc::Permutation parsePermutation(std::string s);
|
|
155
|
+
|
|
156
|
+
void scan();
|
|
157
|
+
|
|
158
|
+
std::shared_ptr<DebugInfo> makeDebugInfo(Token const& begin,
|
|
159
|
+
Token const& /*end*/);
|
|
160
|
+
|
|
161
|
+
std::shared_ptr<DebugInfo> makeDebugInfo(Token const& token);
|
|
162
|
+
|
|
163
|
+
[[nodiscard]] bool isAtEnd() const {
|
|
164
|
+
return current().kind == Token::Kind::Eof;
|
|
165
|
+
}
|
|
166
|
+
std::shared_ptr<IfStatement> parseIfStatement();
|
|
167
|
+
std::vector<std::shared_ptr<Statement>> parseBlockOrStatement();
|
|
168
|
+
};
|
|
169
|
+
|
|
170
|
+
} // namespace qasm3
|