mqt-core 3.3.2__cp314-cp314t-macosx_11_0_arm64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- mqt/core/__init__.py +77 -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 +34 -0
- mqt/core/_version.pyi +12 -0
- mqt/core/dd.cpython-314t-darwin.so +0 -0
- mqt/core/dd.pyi +1016 -0
- mqt/core/dd_evaluation.py +368 -0
- mqt/core/fomac.cpython-314t-darwin.so +0 -0
- mqt/core/fomac.pyi +125 -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 +119 -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 +174 -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 +306 -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/fomac/FoMaC.hpp +568 -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 +596 -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/CompoundOperation.hpp +212 -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/IfElseOperation.hpp +169 -0
- mqt/core/include/mqt-core/ir/operations/NonUnitaryOperation.hpp +118 -0
- mqt/core/include/mqt-core/ir/operations/OpType.hpp +120 -0
- mqt/core/include/mqt-core/ir/operations/OpType.inc +76 -0
- mqt/core/include/mqt-core/ir/operations/Operation.hpp +247 -0
- mqt/core/include/mqt-core/ir/operations/StandardOperation.hpp +140 -0
- mqt/core/include/mqt-core/ir/operations/SymbolicOperation.hpp +144 -0
- mqt/core/include/mqt-core/mqt_na_qdmi/device.h +602 -0
- mqt/core/include/mqt-core/mqt_na_qdmi/types.h +78 -0
- mqt/core/include/mqt-core/na/NAComputation.hpp +185 -0
- mqt/core/include/mqt-core/na/device/Device.hpp +410 -0
- mqt/core/include/mqt-core/na/device/DeviceMemberInitializers.hpp +724 -0
- mqt/core/include/mqt-core/na/device/Generator.hpp +447 -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/fomac/Device.hpp +169 -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 +232 -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/qdmi/Driver.hpp +431 -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/include/nlohmann/adl_serializer.hpp +55 -0
- mqt/core/include/nlohmann/byte_container_with_subtype.hpp +103 -0
- mqt/core/include/nlohmann/detail/abi_macros.hpp +111 -0
- mqt/core/include/nlohmann/detail/conversions/from_json.hpp +577 -0
- mqt/core/include/nlohmann/detail/conversions/to_chars.hpp +1118 -0
- mqt/core/include/nlohmann/detail/conversions/to_json.hpp +479 -0
- mqt/core/include/nlohmann/detail/exceptions.hpp +291 -0
- mqt/core/include/nlohmann/detail/hash.hpp +129 -0
- mqt/core/include/nlohmann/detail/input/binary_reader.hpp +3068 -0
- mqt/core/include/nlohmann/detail/input/input_adapters.hpp +549 -0
- mqt/core/include/nlohmann/detail/input/json_sax.hpp +986 -0
- mqt/core/include/nlohmann/detail/input/lexer.hpp +1643 -0
- mqt/core/include/nlohmann/detail/input/parser.hpp +519 -0
- mqt/core/include/nlohmann/detail/input/position_t.hpp +37 -0
- mqt/core/include/nlohmann/detail/iterators/internal_iterator.hpp +35 -0
- mqt/core/include/nlohmann/detail/iterators/iter_impl.hpp +760 -0
- mqt/core/include/nlohmann/detail/iterators/iteration_proxy.hpp +235 -0
- mqt/core/include/nlohmann/detail/iterators/iterator_traits.hpp +61 -0
- mqt/core/include/nlohmann/detail/iterators/json_reverse_iterator.hpp +130 -0
- mqt/core/include/nlohmann/detail/iterators/primitive_iterator.hpp +132 -0
- mqt/core/include/nlohmann/detail/json_custom_base_class.hpp +39 -0
- mqt/core/include/nlohmann/detail/json_pointer.hpp +988 -0
- mqt/core/include/nlohmann/detail/json_ref.hpp +78 -0
- mqt/core/include/nlohmann/detail/macro_scope.hpp +595 -0
- mqt/core/include/nlohmann/detail/macro_unscope.hpp +46 -0
- mqt/core/include/nlohmann/detail/meta/call_std/begin.hpp +17 -0
- mqt/core/include/nlohmann/detail/meta/call_std/end.hpp +17 -0
- mqt/core/include/nlohmann/detail/meta/cpp_future.hpp +171 -0
- mqt/core/include/nlohmann/detail/meta/detected.hpp +70 -0
- mqt/core/include/nlohmann/detail/meta/identity_tag.hpp +21 -0
- mqt/core/include/nlohmann/detail/meta/is_sax.hpp +159 -0
- mqt/core/include/nlohmann/detail/meta/std_fs.hpp +29 -0
- mqt/core/include/nlohmann/detail/meta/type_traits.hpp +795 -0
- mqt/core/include/nlohmann/detail/meta/void_t.hpp +24 -0
- mqt/core/include/nlohmann/detail/output/binary_writer.hpp +1850 -0
- mqt/core/include/nlohmann/detail/output/output_adapters.hpp +147 -0
- mqt/core/include/nlohmann/detail/output/serializer.hpp +988 -0
- mqt/core/include/nlohmann/detail/string_concat.hpp +146 -0
- mqt/core/include/nlohmann/detail/string_escape.hpp +72 -0
- mqt/core/include/nlohmann/detail/string_utils.hpp +37 -0
- mqt/core/include/nlohmann/detail/value_t.hpp +118 -0
- mqt/core/include/nlohmann/json.hpp +5306 -0
- mqt/core/include/nlohmann/json_fwd.hpp +75 -0
- mqt/core/include/nlohmann/ordered_map.hpp +359 -0
- mqt/core/include/nlohmann/thirdparty/hedley/hedley.hpp +2045 -0
- mqt/core/include/nlohmann/thirdparty/hedley/hedley_undef.hpp +158 -0
- mqt/core/include/qdmi/qdmi/client.h +990 -0
- mqt/core/include/qdmi/qdmi/constants.h +1139 -0
- mqt/core/include/qdmi/qdmi/device.h +602 -0
- mqt/core/include/qdmi/qdmi/types.h +78 -0
- mqt/core/include/spdlog/async.h +99 -0
- mqt/core/include/spdlog/async_logger-inl.h +84 -0
- mqt/core/include/spdlog/async_logger.h +74 -0
- mqt/core/include/spdlog/cfg/argv.h +40 -0
- mqt/core/include/spdlog/cfg/env.h +36 -0
- mqt/core/include/spdlog/cfg/helpers-inl.h +107 -0
- mqt/core/include/spdlog/cfg/helpers.h +29 -0
- mqt/core/include/spdlog/common-inl.h +68 -0
- mqt/core/include/spdlog/common.h +406 -0
- mqt/core/include/spdlog/details/backtracer-inl.h +63 -0
- mqt/core/include/spdlog/details/backtracer.h +45 -0
- mqt/core/include/spdlog/details/circular_q.h +115 -0
- mqt/core/include/spdlog/details/console_globals.h +28 -0
- mqt/core/include/spdlog/details/file_helper-inl.h +153 -0
- mqt/core/include/spdlog/details/file_helper.h +61 -0
- mqt/core/include/spdlog/details/fmt_helper.h +141 -0
- mqt/core/include/spdlog/details/log_msg-inl.h +44 -0
- mqt/core/include/spdlog/details/log_msg.h +40 -0
- mqt/core/include/spdlog/details/log_msg_buffer-inl.h +54 -0
- mqt/core/include/spdlog/details/log_msg_buffer.h +32 -0
- mqt/core/include/spdlog/details/mpmc_blocking_q.h +177 -0
- mqt/core/include/spdlog/details/null_mutex.h +35 -0
- mqt/core/include/spdlog/details/os-inl.h +606 -0
- mqt/core/include/spdlog/details/os.h +127 -0
- mqt/core/include/spdlog/details/periodic_worker-inl.h +26 -0
- mqt/core/include/spdlog/details/periodic_worker.h +58 -0
- mqt/core/include/spdlog/details/registry-inl.h +270 -0
- mqt/core/include/spdlog/details/registry.h +131 -0
- mqt/core/include/spdlog/details/synchronous_factory.h +22 -0
- mqt/core/include/spdlog/details/tcp_client-windows.h +135 -0
- mqt/core/include/spdlog/details/tcp_client.h +127 -0
- mqt/core/include/spdlog/details/thread_pool-inl.h +126 -0
- mqt/core/include/spdlog/details/thread_pool.h +117 -0
- mqt/core/include/spdlog/details/udp_client-windows.h +98 -0
- mqt/core/include/spdlog/details/udp_client.h +81 -0
- mqt/core/include/spdlog/details/windows_include.h +11 -0
- mqt/core/include/spdlog/fmt/bin_to_hex.h +224 -0
- mqt/core/include/spdlog/fmt/bundled/args.h +220 -0
- mqt/core/include/spdlog/fmt/bundled/base.h +2989 -0
- mqt/core/include/spdlog/fmt/bundled/chrono.h +2330 -0
- mqt/core/include/spdlog/fmt/bundled/color.h +637 -0
- mqt/core/include/spdlog/fmt/bundled/compile.h +539 -0
- mqt/core/include/spdlog/fmt/bundled/core.h +5 -0
- mqt/core/include/spdlog/fmt/bundled/fmt.license.rst +27 -0
- mqt/core/include/spdlog/fmt/bundled/format-inl.h +1948 -0
- mqt/core/include/spdlog/fmt/bundled/format.h +4244 -0
- mqt/core/include/spdlog/fmt/bundled/os.h +427 -0
- mqt/core/include/spdlog/fmt/bundled/ostream.h +167 -0
- mqt/core/include/spdlog/fmt/bundled/printf.h +633 -0
- mqt/core/include/spdlog/fmt/bundled/ranges.h +850 -0
- mqt/core/include/spdlog/fmt/bundled/std.h +728 -0
- mqt/core/include/spdlog/fmt/bundled/xchar.h +369 -0
- mqt/core/include/spdlog/fmt/chrono.h +23 -0
- mqt/core/include/spdlog/fmt/compile.h +23 -0
- mqt/core/include/spdlog/fmt/fmt.h +30 -0
- mqt/core/include/spdlog/fmt/ostr.h +23 -0
- mqt/core/include/spdlog/fmt/ranges.h +23 -0
- mqt/core/include/spdlog/fmt/std.h +24 -0
- mqt/core/include/spdlog/fmt/xchar.h +23 -0
- mqt/core/include/spdlog/formatter.h +17 -0
- mqt/core/include/spdlog/fwd.h +18 -0
- mqt/core/include/spdlog/logger-inl.h +198 -0
- mqt/core/include/spdlog/logger.h +379 -0
- mqt/core/include/spdlog/mdc.h +52 -0
- mqt/core/include/spdlog/pattern_formatter-inl.h +1340 -0
- mqt/core/include/spdlog/pattern_formatter.h +118 -0
- mqt/core/include/spdlog/sinks/android_sink.h +137 -0
- mqt/core/include/spdlog/sinks/ansicolor_sink-inl.h +142 -0
- mqt/core/include/spdlog/sinks/ansicolor_sink.h +116 -0
- mqt/core/include/spdlog/sinks/base_sink-inl.h +59 -0
- mqt/core/include/spdlog/sinks/base_sink.h +51 -0
- mqt/core/include/spdlog/sinks/basic_file_sink-inl.h +48 -0
- mqt/core/include/spdlog/sinks/basic_file_sink.h +66 -0
- mqt/core/include/spdlog/sinks/callback_sink.h +56 -0
- mqt/core/include/spdlog/sinks/daily_file_sink.h +254 -0
- mqt/core/include/spdlog/sinks/dist_sink.h +81 -0
- mqt/core/include/spdlog/sinks/dup_filter_sink.h +91 -0
- mqt/core/include/spdlog/sinks/hourly_file_sink.h +193 -0
- mqt/core/include/spdlog/sinks/kafka_sink.h +119 -0
- mqt/core/include/spdlog/sinks/mongo_sink.h +108 -0
- mqt/core/include/spdlog/sinks/msvc_sink.h +68 -0
- mqt/core/include/spdlog/sinks/null_sink.h +41 -0
- mqt/core/include/spdlog/sinks/ostream_sink.h +43 -0
- mqt/core/include/spdlog/sinks/qt_sinks.h +304 -0
- mqt/core/include/spdlog/sinks/ringbuffer_sink.h +67 -0
- mqt/core/include/spdlog/sinks/rotating_file_sink-inl.h +179 -0
- mqt/core/include/spdlog/sinks/rotating_file_sink.h +93 -0
- mqt/core/include/spdlog/sinks/sink-inl.h +22 -0
- mqt/core/include/spdlog/sinks/sink.h +34 -0
- mqt/core/include/spdlog/sinks/stdout_color_sinks-inl.h +38 -0
- mqt/core/include/spdlog/sinks/stdout_color_sinks.h +49 -0
- mqt/core/include/spdlog/sinks/stdout_sinks-inl.h +127 -0
- mqt/core/include/spdlog/sinks/stdout_sinks.h +84 -0
- mqt/core/include/spdlog/sinks/syslog_sink.h +104 -0
- mqt/core/include/spdlog/sinks/systemd_sink.h +121 -0
- mqt/core/include/spdlog/sinks/tcp_sink.h +75 -0
- mqt/core/include/spdlog/sinks/udp_sink.h +69 -0
- mqt/core/include/spdlog/sinks/win_eventlog_sink.h +260 -0
- mqt/core/include/spdlog/sinks/wincolor_sink-inl.h +172 -0
- mqt/core/include/spdlog/sinks/wincolor_sink.h +82 -0
- mqt/core/include/spdlog/spdlog-inl.h +96 -0
- mqt/core/include/spdlog/spdlog.h +357 -0
- mqt/core/include/spdlog/stopwatch.h +66 -0
- mqt/core/include/spdlog/tweakme.h +148 -0
- mqt/core/include/spdlog/version.h +11 -0
- mqt/core/ir/__init__.pyi +2078 -0
- mqt/core/ir/operations.pyi +1011 -0
- mqt/core/ir/registers.pyi +91 -0
- mqt/core/ir/symbolic.pyi +177 -0
- mqt/core/ir.cpython-314t-darwin.so +0 -0
- mqt/core/lib/libmqt-core-algorithms.3.3.2.dylib +0 -0
- mqt/core/lib/libmqt-core-algorithms.3.3.dylib +0 -0
- mqt/core/lib/libmqt-core-algorithms.dylib +0 -0
- mqt/core/lib/libmqt-core-circuit-optimizer.3.3.2.dylib +0 -0
- mqt/core/lib/libmqt-core-circuit-optimizer.3.3.dylib +0 -0
- mqt/core/lib/libmqt-core-circuit-optimizer.dylib +0 -0
- mqt/core/lib/libmqt-core-dd.3.3.2.dylib +0 -0
- mqt/core/lib/libmqt-core-dd.3.3.dylib +0 -0
- mqt/core/lib/libmqt-core-dd.dylib +0 -0
- mqt/core/lib/libmqt-core-ds.3.3.2.dylib +0 -0
- mqt/core/lib/libmqt-core-ds.3.3.dylib +0 -0
- mqt/core/lib/libmqt-core-ds.dylib +0 -0
- mqt/core/lib/libmqt-core-fomac.3.3.2.dylib +0 -0
- mqt/core/lib/libmqt-core-fomac.3.3.dylib +0 -0
- mqt/core/lib/libmqt-core-fomac.dylib +0 -0
- mqt/core/lib/libmqt-core-ir.3.3.2.dylib +0 -0
- mqt/core/lib/libmqt-core-ir.3.3.dylib +0 -0
- mqt/core/lib/libmqt-core-ir.dylib +0 -0
- mqt/core/lib/libmqt-core-na-fomac.3.3.2.dylib +0 -0
- mqt/core/lib/libmqt-core-na-fomac.3.3.dylib +0 -0
- mqt/core/lib/libmqt-core-na-fomac.dylib +0 -0
- mqt/core/lib/libmqt-core-na.3.3.2.dylib +0 -0
- mqt/core/lib/libmqt-core-na.3.3.dylib +0 -0
- mqt/core/lib/libmqt-core-na.dylib +0 -0
- mqt/core/lib/libmqt-core-qasm.3.3.2.dylib +0 -0
- mqt/core/lib/libmqt-core-qasm.3.3.dylib +0 -0
- mqt/core/lib/libmqt-core-qasm.dylib +0 -0
- mqt/core/lib/libmqt-core-qdmi-driver.3.3.2.dylib +0 -0
- mqt/core/lib/libmqt-core-qdmi-driver.3.3.dylib +0 -0
- mqt/core/lib/libmqt-core-qdmi-driver.dylib +0 -0
- mqt/core/lib/libmqt-core-qdmi-na-device-gen.a +0 -0
- mqt/core/lib/libmqt-core-qdmi-na-device.3.3.2.dylib +0 -0
- mqt/core/lib/libmqt-core-qdmi-na-device.3.3.dylib +0 -0
- mqt/core/lib/libmqt-core-qdmi-na-device.dylib +0 -0
- mqt/core/lib/libmqt-core-zx.3.3.2.dylib +0 -0
- mqt/core/lib/libmqt-core-zx.3.3.dylib +0 -0
- mqt/core/lib/libmqt-core-zx.dylib +0 -0
- mqt/core/lib/libspdlog.a +0 -0
- mqt/core/lib/pkgconfig/spdlog.pc +13 -0
- mqt/core/na/__init__.py +12 -0
- mqt/core/na/fomac.cpython-314t-darwin.so +0 -0
- mqt/core/na/fomac.pyi +117 -0
- mqt/core/plugins/__init__.py +9 -0
- mqt/core/plugins/qiskit/__init__.py +19 -0
- mqt/core/plugins/qiskit/mqt_to_qiskit.py +420 -0
- mqt/core/plugins/qiskit/qiskit_to_mqt.py +562 -0
- mqt/core/py.typed +2 -0
- mqt/core/share/cmake/mqt-core/AddMQTPythonBinding.cmake +55 -0
- mqt/core/share/cmake/mqt-core/Cache.cmake +33 -0
- mqt/core/share/cmake/mqt-core/FindGMP.cmake +103 -0
- mqt/core/share/cmake/mqt-core/PackageAddTest.cmake +46 -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 +52 -0
- mqt/core/share/cmake/mqt-core/mqt-core-targets-release.cmake +141 -0
- mqt/core/share/cmake/mqt-core/mqt-core-targets.cmake +446 -0
- mqt/core/share/cmake/nlohmann_json/nlohmann_jsonConfig.cmake +15 -0
- mqt/core/share/cmake/nlohmann_json/nlohmann_jsonConfigVersion.cmake +20 -0
- mqt/core/share/cmake/nlohmann_json/nlohmann_jsonTargets.cmake +109 -0
- mqt/core/share/cmake/qdmi/Cache.cmake +44 -0
- mqt/core/share/cmake/qdmi/PrefixHandling.cmake +78 -0
- mqt/core/share/cmake/qdmi/prefix_defs.txt +26 -0
- mqt/core/share/cmake/qdmi/qdmi-config-version.cmake +85 -0
- mqt/core/share/cmake/qdmi/qdmi-config.cmake +42 -0
- mqt/core/share/cmake/qdmi/qdmi-targets.cmake +129 -0
- mqt/core/share/cmake/spdlog/spdlogConfig.cmake +44 -0
- mqt/core/share/cmake/spdlog/spdlogConfigTargets-release.cmake +19 -0
- mqt/core/share/cmake/spdlog/spdlogConfigTargets.cmake +118 -0
- mqt/core/share/cmake/spdlog/spdlogConfigVersion.cmake +65 -0
- mqt/core/share/pkgconfig/nlohmann_json.pc +7 -0
- mqt_core-3.3.2.dist-info/METADATA +210 -0
- mqt_core-3.3.2.dist-info/RECORD +546 -0
- mqt_core-3.3.2.dist-info/WHEEL +6 -0
- mqt_core-3.3.2.dist-info/entry_points.txt +4 -0
- mqt_core-3.3.2.dist-info/licenses/LICENSE.md +22 -0
|
@@ -0,0 +1,185 @@
|
|
|
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
|
+
/** @file
|
|
12
|
+
* @brief Defines a class for representing neutral atom computations.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
#pragma once
|
|
16
|
+
|
|
17
|
+
#include "na/entities/Atom.hpp"
|
|
18
|
+
#include "na/entities/Location.hpp"
|
|
19
|
+
#include "na/entities/Zone.hpp"
|
|
20
|
+
#include "na/operations/Op.hpp"
|
|
21
|
+
|
|
22
|
+
#include <cstddef>
|
|
23
|
+
#include <memory>
|
|
24
|
+
#include <ostream>
|
|
25
|
+
#include <string>
|
|
26
|
+
#include <unordered_map>
|
|
27
|
+
#include <utility>
|
|
28
|
+
#include <vector>
|
|
29
|
+
|
|
30
|
+
namespace na {
|
|
31
|
+
/// Represents a neutral atom computation.
|
|
32
|
+
class NAComputation final {
|
|
33
|
+
protected:
|
|
34
|
+
/// The operations in the NA computation.
|
|
35
|
+
std::vector<std::unique_ptr<Op>> operations_;
|
|
36
|
+
/// The atoms used in the NA computation.
|
|
37
|
+
std::vector<std::unique_ptr<Atom>> atoms_;
|
|
38
|
+
/// The zones used in the NA computation.
|
|
39
|
+
std::vector<std::unique_ptr<Zone>> zones_;
|
|
40
|
+
/// The initial locations of the atoms.
|
|
41
|
+
std::unordered_map<const Atom*, Location> initialLocations_;
|
|
42
|
+
|
|
43
|
+
public:
|
|
44
|
+
/// Returns an iterator to the beginning of the operations.
|
|
45
|
+
[[nodiscard]] auto begin() -> auto { return operations_.begin(); }
|
|
46
|
+
|
|
47
|
+
/// Returns an iterator to the beginning of the operations.
|
|
48
|
+
[[nodiscard]] auto begin() const -> auto { return operations_.begin(); }
|
|
49
|
+
|
|
50
|
+
/// Returns an iterator to the end of the operations.
|
|
51
|
+
[[nodiscard]] auto end() -> auto { return operations_.end(); }
|
|
52
|
+
|
|
53
|
+
/// Returns an iterator to the end of the operations.
|
|
54
|
+
[[nodiscard]] auto end() const -> auto { return operations_.end(); }
|
|
55
|
+
|
|
56
|
+
/// Returns the number of operations in the NAComputation.
|
|
57
|
+
[[nodiscard]] auto size() const -> std::size_t { return operations_.size(); }
|
|
58
|
+
|
|
59
|
+
/// Returns a reference to the operation at the given index.
|
|
60
|
+
/// @param i The index of the operation.
|
|
61
|
+
/// @return A reference to the operation at the given index.
|
|
62
|
+
[[nodiscard]] auto operator[](const std::size_t i) -> Op& {
|
|
63
|
+
return *operations_[i];
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/// Returns a const reference to the operation at the given index.
|
|
67
|
+
/// @param i The index of the operation.
|
|
68
|
+
/// @return A const reference to the operation at the given index.
|
|
69
|
+
[[nodiscard]] auto operator[](const std::size_t i) const -> const Op& {
|
|
70
|
+
return *operations_[i];
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/// Clears the operations in the NAComputation.
|
|
74
|
+
auto clear() -> void { operations_.clear(); }
|
|
75
|
+
|
|
76
|
+
/// Returns the number of atoms used in the NAComputation.
|
|
77
|
+
[[nodiscard]] auto getAtomsSize() const -> std::size_t {
|
|
78
|
+
return atoms_.size();
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/// Returns the atoms used in the NAComputation.
|
|
82
|
+
[[nodiscard]] auto getAtoms() const -> auto& { return atoms_; }
|
|
83
|
+
|
|
84
|
+
/// Returns the zones used in global operations within the NAComputation.
|
|
85
|
+
[[nodiscard]] auto getZones() const -> auto& { return zones_; }
|
|
86
|
+
|
|
87
|
+
/// Returns the initial locations of the atoms.
|
|
88
|
+
[[nodiscard]] auto getInitialLocations() const -> auto& {
|
|
89
|
+
return initialLocations_;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/// Returns the location of the given atom after the given operation.
|
|
93
|
+
/// @param atom The atom to get the location for.
|
|
94
|
+
/// @param op The operation to get the location after.
|
|
95
|
+
/// @return The location of the atom after the operation.
|
|
96
|
+
[[nodiscard]] auto getLocationOfAtomAfterOperation(const Atom& atom,
|
|
97
|
+
const Op& op) const
|
|
98
|
+
-> Location;
|
|
99
|
+
|
|
100
|
+
/// Emplaces a new atom with the given name and returns a reference to the
|
|
101
|
+
/// newly created atom.
|
|
102
|
+
/// @param name The name of the atom.
|
|
103
|
+
/// @return A reference to the newly created atom.
|
|
104
|
+
auto emplaceBackAtom(std::string name) -> const Atom& {
|
|
105
|
+
return *atoms_.emplace_back(std::make_unique<Atom>(std::move(name)));
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/// Emplaces a new zone with the given name and returns a reference to the
|
|
109
|
+
/// newly created zone.
|
|
110
|
+
/// @param args The name of the zone and, optionally, the extent of the zone.
|
|
111
|
+
/// @return A reference to the newly created zone.
|
|
112
|
+
template <typename... Args>
|
|
113
|
+
auto emplaceBackZone(Args&&... args) -> const Zone& {
|
|
114
|
+
return *zones_.emplace_back(
|
|
115
|
+
std::make_unique<Zone>(std::forward<Args>(args)...));
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/// Emplaces a new initial location for the given atom with the given location
|
|
119
|
+
/// and returns a reference to the newly created location.
|
|
120
|
+
/// @param atom The atom to set the initial location for.
|
|
121
|
+
/// @param loc The location of the atom.
|
|
122
|
+
/// @return A reference to the newly created location.
|
|
123
|
+
auto emplaceInitialLocation(const Atom& atom, const Location& loc)
|
|
124
|
+
-> const Location& {
|
|
125
|
+
return initialLocations_.emplace(&atom, loc).first->second;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/// Emplaces a new initial location for the given atom with the given
|
|
129
|
+
/// arguments and returns a reference to the newly created location.
|
|
130
|
+
/// @param atom The atom to set the initial location for.
|
|
131
|
+
/// @param loc The parameters for the location of the atom.
|
|
132
|
+
/// @return A reference to the newly created location.
|
|
133
|
+
template <typename... Args>
|
|
134
|
+
auto emplaceInitialLocation(const Atom& atom, Args&&... loc)
|
|
135
|
+
-> const Location& {
|
|
136
|
+
return initialLocations_
|
|
137
|
+
.emplace(&atom,
|
|
138
|
+
Location{static_cast<double>(std::forward<Args>(loc))...})
|
|
139
|
+
.first->second;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/// Emplaces a new operation of type T with the given operation and returns a
|
|
143
|
+
/// reference to the newly created operation.
|
|
144
|
+
/// @tparam T The concrete type of the operation.
|
|
145
|
+
/// @param op The operation to emplace.
|
|
146
|
+
/// @return A reference to the newly created operation.
|
|
147
|
+
template <class T> auto emplaceBack(T&& op) -> const Op& {
|
|
148
|
+
return *operations_.emplace_back(std::make_unique<T>(std::forward<T>(op)));
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/// Emplaces a new operation of type T with the given arguments and returns a
|
|
152
|
+
/// reference to the newly created operation.
|
|
153
|
+
/// @tparam T The concrete type of the operation.
|
|
154
|
+
/// @param args The arguments for the operation.
|
|
155
|
+
/// @return A reference to the newly created operation.
|
|
156
|
+
template <class T, typename... Args>
|
|
157
|
+
auto emplaceBack(Args&&... args) -> const Op& {
|
|
158
|
+
return *operations_.emplace_back(
|
|
159
|
+
std::make_unique<T>(std::forward<Args>(args)...));
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/// Returns a string representation of the NAComputation.
|
|
163
|
+
[[nodiscard]] auto toString() const -> std::string;
|
|
164
|
+
/// Outputs the NAComputation to the given output stream, i.e., the string
|
|
165
|
+
/// returned by toString().
|
|
166
|
+
/// @param os The output stream to print the NAComputation to.
|
|
167
|
+
/// @param qc The NAComputation to print.
|
|
168
|
+
/// @return The output stream after printing the NAComputation.
|
|
169
|
+
friend auto operator<<(std::ostream& os, const NAComputation& qc)
|
|
170
|
+
-> std::ostream& {
|
|
171
|
+
return os << qc.toString();
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
/// Validates the NAComputation and checks whether all AOD constraints are
|
|
175
|
+
/// fulfilled.
|
|
176
|
+
/// Specifically,
|
|
177
|
+
/// - each atom is loaded before it is moved
|
|
178
|
+
/// - the relative order of loaded atoms is preserved
|
|
179
|
+
/// - each atom is loaded before it is stored
|
|
180
|
+
/// - each atom is stored before it is loaded (again)
|
|
181
|
+
/// @returns a pair of a Boolean indicating whether the NAComputation is valid
|
|
182
|
+
/// and a string containing the error message if the NAComputation is invalid.
|
|
183
|
+
[[nodiscard]] auto validate() const -> std::pair<bool, std::string>;
|
|
184
|
+
};
|
|
185
|
+
} // namespace na
|
|
@@ -0,0 +1,410 @@
|
|
|
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
|
+
/** @file
|
|
14
|
+
* @brief The MQT QDMI device implementation for neutral atom devices.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
#include "mqt_na_qdmi/device.h"
|
|
18
|
+
|
|
19
|
+
#include <algorithm>
|
|
20
|
+
#include <cstddef>
|
|
21
|
+
#include <cstdint>
|
|
22
|
+
#include <memory>
|
|
23
|
+
#include <optional>
|
|
24
|
+
#include <string>
|
|
25
|
+
#include <unordered_map>
|
|
26
|
+
#include <utility>
|
|
27
|
+
#include <vector>
|
|
28
|
+
|
|
29
|
+
namespace qdmi {
|
|
30
|
+
class Device final {
|
|
31
|
+
/// @brief Provides access to the device name.
|
|
32
|
+
std::string name_;
|
|
33
|
+
|
|
34
|
+
/// @brief The number of qubits in the device.
|
|
35
|
+
size_t qubitsNum_ = 0;
|
|
36
|
+
|
|
37
|
+
/// @brief A struct representing a unit.
|
|
38
|
+
struct Unit {
|
|
39
|
+
/// @brief The unit used to interpret values.
|
|
40
|
+
std::string unit;
|
|
41
|
+
/**
|
|
42
|
+
* @brief The scale factor of the unit.
|
|
43
|
+
* @details This factor must be multiplied with all values before
|
|
44
|
+
* interpreting them in the unit specified by @ref Unit::unit.
|
|
45
|
+
*/
|
|
46
|
+
double scaleFactor = 1.0;
|
|
47
|
+
};
|
|
48
|
+
/// @brief The unit used to interpret length values.
|
|
49
|
+
Unit lengthUnit_;
|
|
50
|
+
|
|
51
|
+
/// @brief The unit used to interpret duration values.
|
|
52
|
+
Unit durationUnit_;
|
|
53
|
+
|
|
54
|
+
/// @brief The minimum atom distance that must be maintained.
|
|
55
|
+
uint64_t minAtomDistance_;
|
|
56
|
+
|
|
57
|
+
/// @brief The list of sites.
|
|
58
|
+
std::vector<std::unique_ptr<MQT_NA_QDMI_Site_impl_d>> sites_;
|
|
59
|
+
|
|
60
|
+
/// @brief The list of operations.
|
|
61
|
+
std::vector<std::unique_ptr<MQT_NA_QDMI_Operation_impl_d>> operations_;
|
|
62
|
+
|
|
63
|
+
/// @brief The list of device sessions.
|
|
64
|
+
std::unordered_map<MQT_NA_QDMI_Device_Session,
|
|
65
|
+
std::unique_ptr<MQT_NA_QDMI_Device_Session_impl_d>>
|
|
66
|
+
sessions_;
|
|
67
|
+
|
|
68
|
+
/// @brief Private constructor to enforce the singleton pattern.
|
|
69
|
+
Device();
|
|
70
|
+
|
|
71
|
+
public:
|
|
72
|
+
// Default move constructor and move assignment operator.
|
|
73
|
+
Device(Device&&) = default;
|
|
74
|
+
Device& operator=(Device&&) = default;
|
|
75
|
+
// Delete copy constructor and assignment operator to enforce singleton.
|
|
76
|
+
Device(const Device&) = delete;
|
|
77
|
+
Device& operator=(const Device&) = delete;
|
|
78
|
+
|
|
79
|
+
/// @returns the singleton instance of the Device class.
|
|
80
|
+
[[nodiscard]] static Device& get() {
|
|
81
|
+
static Device instance;
|
|
82
|
+
return instance;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/// @brief Destructor for the Device class.
|
|
86
|
+
~Device() = default;
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* @brief Allocates a new device session.
|
|
90
|
+
* @see MQT_NA_QDMI_device_session_alloc
|
|
91
|
+
*/
|
|
92
|
+
auto sessionAlloc(MQT_NA_QDMI_Device_Session* session) -> int;
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* @brief Frees a device session.
|
|
96
|
+
* @see MQT_NA_QDMI_device_session_free
|
|
97
|
+
*/
|
|
98
|
+
auto sessionFree(MQT_NA_QDMI_Device_Session session) -> void;
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* @brief Query a device property.
|
|
102
|
+
* @see MQT_NA_QDMI_device_session_query_device_property
|
|
103
|
+
*/
|
|
104
|
+
auto queryProperty(QDMI_Device_Property prop, size_t size, void* value,
|
|
105
|
+
size_t* sizeRet) -> int;
|
|
106
|
+
};
|
|
107
|
+
} // namespace qdmi
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* @brief Implementation of the MQT_NA_QDMI_Device_Session structure.
|
|
111
|
+
*/
|
|
112
|
+
struct MQT_NA_QDMI_Device_Session_impl_d {
|
|
113
|
+
private:
|
|
114
|
+
/// The status of the session.
|
|
115
|
+
enum class Status : uint8_t {
|
|
116
|
+
ALLOCATED, ///< The session has been allocated but not initialized
|
|
117
|
+
INITIALIZED, ///< The session has been initialized and is ready for use
|
|
118
|
+
};
|
|
119
|
+
/// @brief The current status of the session.
|
|
120
|
+
Status status_ = Status::ALLOCATED;
|
|
121
|
+
/// @brief The device jobs associated with this session.
|
|
122
|
+
std::unordered_map<MQT_NA_QDMI_Device_Job,
|
|
123
|
+
std::unique_ptr<MQT_NA_QDMI_Device_Job_impl_d>>
|
|
124
|
+
jobs_;
|
|
125
|
+
|
|
126
|
+
public:
|
|
127
|
+
/**
|
|
128
|
+
* @brief Initializes the device session.
|
|
129
|
+
* @see MQT_NA_QDMI_device_session_init
|
|
130
|
+
*/
|
|
131
|
+
auto init() -> int;
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* @brief Sets a parameter for the device session.
|
|
135
|
+
* @see MQT_NA_QDMI_device_session_set_parameter
|
|
136
|
+
*/
|
|
137
|
+
auto setParameter(QDMI_Device_Session_Parameter param, size_t size,
|
|
138
|
+
const void* value) const -> int;
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* @brief Create a new device job.
|
|
142
|
+
* @see MQT_NA_QDMI_device_session_create_device_job
|
|
143
|
+
*/
|
|
144
|
+
auto createDeviceJob(MQT_NA_QDMI_Device_Job* job) -> int;
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* @brief Frees the device job.
|
|
148
|
+
* @see MQT_NA_QDMI_device_job_free
|
|
149
|
+
*/
|
|
150
|
+
auto freeDeviceJob(MQT_NA_QDMI_Device_Job job) -> void;
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* @brief Forwards a query of a device property to the device.
|
|
154
|
+
* @see MQT_NA_QDMI_device_session_query_device_property
|
|
155
|
+
*/
|
|
156
|
+
auto queryDeviceProperty(QDMI_Device_Property prop, size_t size, void* value,
|
|
157
|
+
size_t* sizeRet) const -> int;
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* @brief Forwards a query of a site property to the site.
|
|
161
|
+
* @see MQT_NA_QDMI_device_session_query_site_property
|
|
162
|
+
*/
|
|
163
|
+
auto querySiteProperty(MQT_NA_QDMI_Site site, QDMI_Site_Property prop,
|
|
164
|
+
size_t size, void* value, size_t* sizeRet) const
|
|
165
|
+
-> int;
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* @brief Forwards a query of an operation property to the operation.
|
|
169
|
+
* @see MQT_NA_QDMI_device_session_query_operation_property
|
|
170
|
+
*/
|
|
171
|
+
auto queryOperationProperty(MQT_NA_QDMI_Operation operation, size_t numSites,
|
|
172
|
+
const MQT_NA_QDMI_Site* sites, size_t numParams,
|
|
173
|
+
const double* params,
|
|
174
|
+
QDMI_Operation_Property prop, size_t size,
|
|
175
|
+
void* value, size_t* sizeRet) const -> int;
|
|
176
|
+
};
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* @brief Implementation of the MQT_NA_QDMI_Device_Job structure.
|
|
180
|
+
*/
|
|
181
|
+
struct MQT_NA_QDMI_Device_Job_impl_d {
|
|
182
|
+
private:
|
|
183
|
+
/// @brief The device session associated with the job.
|
|
184
|
+
MQT_NA_QDMI_Device_Session_impl_d* session_;
|
|
185
|
+
|
|
186
|
+
public:
|
|
187
|
+
/// @brief Constructor for the MQT_NA_QDMI_Device_Job_impl_d.
|
|
188
|
+
explicit MQT_NA_QDMI_Device_Job_impl_d(
|
|
189
|
+
MQT_NA_QDMI_Device_Session_impl_d* session)
|
|
190
|
+
: session_(session) {}
|
|
191
|
+
/**
|
|
192
|
+
* @brief Frees the device job.
|
|
193
|
+
* @note This function just forwards to the session's @ref freeDeviceJob
|
|
194
|
+
* function. This function is needed because the interface only provides the
|
|
195
|
+
* job handle to the @ref QDMI_job_free function and the job's session handle
|
|
196
|
+
* is private.
|
|
197
|
+
* @see QDMI_job_free
|
|
198
|
+
*/
|
|
199
|
+
auto free() -> void;
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* @brief Sets a parameter for the job.
|
|
203
|
+
* @see MQT_NA_QDMI_device_job_set_parameter
|
|
204
|
+
*/
|
|
205
|
+
static auto setParameter(QDMI_Device_Job_Parameter param, size_t size,
|
|
206
|
+
const void* value) -> int;
|
|
207
|
+
|
|
208
|
+
/**
|
|
209
|
+
* @brief Queries a property of the job.
|
|
210
|
+
* @see MQT_NA_QDMI_device_job_query_property
|
|
211
|
+
*/
|
|
212
|
+
static auto queryProperty(QDMI_Device_Job_Property prop, size_t size,
|
|
213
|
+
void* value, size_t* sizeRet) -> int;
|
|
214
|
+
|
|
215
|
+
/**
|
|
216
|
+
* @brief Submits the job to the device.
|
|
217
|
+
* @see MQT_NA_QDMI_device_job_submit
|
|
218
|
+
*/
|
|
219
|
+
static auto submit() -> int;
|
|
220
|
+
|
|
221
|
+
/**
|
|
222
|
+
* @brief Cancels the job.
|
|
223
|
+
* @see MQT_NA_QDMI_device_job_cancel
|
|
224
|
+
*/
|
|
225
|
+
static auto cancel() -> int;
|
|
226
|
+
|
|
227
|
+
/**
|
|
228
|
+
* @brief Checks the status of the job.
|
|
229
|
+
* @see MQT_NA_QDMI_device_job_check
|
|
230
|
+
*/
|
|
231
|
+
static auto check(QDMI_Job_Status* status) -> int;
|
|
232
|
+
|
|
233
|
+
/**
|
|
234
|
+
* @brief Waits for the job to complete but at most for the specified timeout.
|
|
235
|
+
* @see MQT_NA_QDMI_device_job_wait
|
|
236
|
+
*/
|
|
237
|
+
static auto wait(size_t timeout) -> int;
|
|
238
|
+
|
|
239
|
+
/**
|
|
240
|
+
* @brief Gets the results of the job.
|
|
241
|
+
* @see MQT_NA_QDMI_device_job_get_results
|
|
242
|
+
*/
|
|
243
|
+
static auto getResults(QDMI_Job_Result result, size_t size, void* data,
|
|
244
|
+
[[maybe_unused]] size_t* sizeRet) -> int;
|
|
245
|
+
};
|
|
246
|
+
|
|
247
|
+
/**
|
|
248
|
+
* @brief Implementation of the MQT_NA_QDMI_Device_Site structure.
|
|
249
|
+
*/
|
|
250
|
+
struct MQT_NA_QDMI_Site_impl_d {
|
|
251
|
+
friend MQT_NA_QDMI_Operation_impl_d;
|
|
252
|
+
|
|
253
|
+
private:
|
|
254
|
+
uint64_t id_ = 0; ///< Unique identifier of the site
|
|
255
|
+
uint64_t moduleId_ = 0; ///< Identifier of the module the site belongs to
|
|
256
|
+
/// Identifier of the submodule the site belongs to
|
|
257
|
+
uint64_t subModuleId_ = 0;
|
|
258
|
+
int64_t x_ = 0; ///< X coordinate of the site in the lattice
|
|
259
|
+
int64_t y_ = 0; ///< Y coordinate of the site in the lattice
|
|
260
|
+
uint64_t xExtent_ = 0; ///< Width of the site in the lattice (for zone sites)
|
|
261
|
+
uint64_t yExtent_ = 0; ///< Height of the site in the lattice (for zone sites)
|
|
262
|
+
/// @brief Collects decoherence times for the device.
|
|
263
|
+
struct DecoherenceTimes {
|
|
264
|
+
uint64_t t1_ = 0; ///< T1 time
|
|
265
|
+
uint64_t t2_ = 0; ///< T2 time
|
|
266
|
+
};
|
|
267
|
+
/// @brief The decoherence times of the device.
|
|
268
|
+
DecoherenceTimes decoherenceTimes_{};
|
|
269
|
+
bool isZone = false; ///< Indicates if the site is a zone site
|
|
270
|
+
|
|
271
|
+
/// @brief Constructor for regular sites.
|
|
272
|
+
MQT_NA_QDMI_Site_impl_d(uint64_t id, uint64_t moduleId, uint64_t subModuleId,
|
|
273
|
+
int64_t x, int64_t y);
|
|
274
|
+
/// @brief Constructor for zone sites.
|
|
275
|
+
MQT_NA_QDMI_Site_impl_d(uint64_t id, int64_t x, int64_t y, uint64_t width,
|
|
276
|
+
uint64_t height);
|
|
277
|
+
|
|
278
|
+
public:
|
|
279
|
+
/// @brief Factory function for regular sites.
|
|
280
|
+
[[nodiscard]] static auto makeUniqueSite(uint64_t id, uint64_t moduleId,
|
|
281
|
+
uint64_t subModuleId, int64_t x,
|
|
282
|
+
int64_t y)
|
|
283
|
+
-> std::unique_ptr<MQT_NA_QDMI_Site_impl_d>;
|
|
284
|
+
/// @brief Factory function for zone sites.
|
|
285
|
+
[[nodiscard]] static auto makeUniqueZone(uint64_t id, int64_t x, int64_t y,
|
|
286
|
+
uint64_t width, uint64_t height)
|
|
287
|
+
-> std::unique_ptr<MQT_NA_QDMI_Site_impl_d>;
|
|
288
|
+
/**
|
|
289
|
+
* @brief Queries a property of the site.
|
|
290
|
+
* @see MQT_NA_QDMI_device_session_query_site_property
|
|
291
|
+
*/
|
|
292
|
+
auto queryProperty(QDMI_Site_Property prop, size_t size, void* value,
|
|
293
|
+
size_t* sizeRet) const -> int;
|
|
294
|
+
};
|
|
295
|
+
|
|
296
|
+
/**
|
|
297
|
+
* @brief Implementation of the MQT_NA_QDMI_Device_Operation structure.
|
|
298
|
+
*/
|
|
299
|
+
struct MQT_NA_QDMI_Operation_impl_d {
|
|
300
|
+
private:
|
|
301
|
+
std::string name_; ///< Name of the operation
|
|
302
|
+
size_t numParameters_; ///< Number of parameters for the operation
|
|
303
|
+
/**
|
|
304
|
+
* @brief Number of qubits involved in the operation
|
|
305
|
+
* @note This number is only valid if the operation is a multi-qubit
|
|
306
|
+
* operation.
|
|
307
|
+
*/
|
|
308
|
+
std::optional<size_t> numQubits_ = std::nullopt;
|
|
309
|
+
/// Duration of the operation
|
|
310
|
+
std::optional<uint64_t> duration_ = std::nullopt;
|
|
311
|
+
std::optional<double> fidelity_ = std::nullopt; ///< Fidelity of the operation
|
|
312
|
+
/// Interaction radius for multi-qubit operations
|
|
313
|
+
std::optional<uint64_t> interactionRadius_ = std::nullopt;
|
|
314
|
+
/// Blocking radius for multi-qubit operations
|
|
315
|
+
std::optional<uint64_t> blockingRadius_ = std::nullopt;
|
|
316
|
+
/// Mean shuttling speed
|
|
317
|
+
std::optional<uint64_t> meanShuttlingSpeed_ = std::nullopt;
|
|
318
|
+
/// Idling fidelity
|
|
319
|
+
std::optional<double> idlingFidelity_ = std::nullopt;
|
|
320
|
+
/// The operation's supported sites
|
|
321
|
+
std::vector<MQT_NA_QDMI_Site> supportedSites_;
|
|
322
|
+
/// Indicates if this operation is zoned (global)
|
|
323
|
+
bool isZoned_ = false;
|
|
324
|
+
|
|
325
|
+
/// @brief Constructor for the global single-qubit.
|
|
326
|
+
MQT_NA_QDMI_Operation_impl_d(std::string name, size_t numParameters,
|
|
327
|
+
size_t numQubits, uint64_t duration,
|
|
328
|
+
double fidelity, MQT_NA_QDMI_Site zone);
|
|
329
|
+
/// @brief Constructor for the global multi-qubit operations.
|
|
330
|
+
MQT_NA_QDMI_Operation_impl_d(std::string name, size_t numParameters,
|
|
331
|
+
size_t numQubits, uint64_t duration,
|
|
332
|
+
double fidelity, uint64_t interactionRadius,
|
|
333
|
+
uint64_t blockingRadius, double idlingFidelity,
|
|
334
|
+
MQT_NA_QDMI_Site zone);
|
|
335
|
+
/// @brief Constructor for the single-qubit operations.
|
|
336
|
+
MQT_NA_QDMI_Operation_impl_d(std::string name, size_t numParameters,
|
|
337
|
+
uint64_t duration, double fidelity,
|
|
338
|
+
const std::vector<MQT_NA_QDMI_Site>& sites);
|
|
339
|
+
/// @brief Constructor for the multi-qubit operations.
|
|
340
|
+
MQT_NA_QDMI_Operation_impl_d(std::string name, size_t numParameters,
|
|
341
|
+
size_t numQubits, uint64_t duration,
|
|
342
|
+
double fidelity, uint64_t interactionRadius,
|
|
343
|
+
uint64_t blockingRadius,
|
|
344
|
+
const std::vector<MQT_NA_QDMI_Site>& sites);
|
|
345
|
+
/// @brief Constructor for load and store operations.
|
|
346
|
+
MQT_NA_QDMI_Operation_impl_d(std::string name, size_t numParameters,
|
|
347
|
+
uint64_t duration, double fidelity,
|
|
348
|
+
MQT_NA_QDMI_Site zone);
|
|
349
|
+
/// @brief Constructor for the shuttling operations.
|
|
350
|
+
MQT_NA_QDMI_Operation_impl_d(std::string name, size_t numParameters,
|
|
351
|
+
MQT_NA_QDMI_Site zone,
|
|
352
|
+
uint64_t meanShuttlingSpeed);
|
|
353
|
+
|
|
354
|
+
/// @brief Sort the sites such that the occurrence of a given site can be
|
|
355
|
+
/// determined in O(log n) time.
|
|
356
|
+
auto sortSites() -> void;
|
|
357
|
+
|
|
358
|
+
public:
|
|
359
|
+
/// @brief Factory function for the global single-qubit operations.
|
|
360
|
+
[[nodiscard]] static auto
|
|
361
|
+
makeUniqueGlobalSingleQubit(const std::string& name, size_t numParameters,
|
|
362
|
+
uint64_t duration, double fidelity,
|
|
363
|
+
MQT_NA_QDMI_Site zone)
|
|
364
|
+
-> std::unique_ptr<MQT_NA_QDMI_Operation_impl_d>;
|
|
365
|
+
/// @brief Factory function for the global multi-qubit operations.
|
|
366
|
+
[[nodiscard]] static auto makeUniqueGlobalMultiQubit(
|
|
367
|
+
const std::string& name, size_t numParameters, size_t numQubits,
|
|
368
|
+
uint64_t duration, double fidelity, uint64_t interactionRadius,
|
|
369
|
+
uint64_t blockingRadius, double idlingFidelity, MQT_NA_QDMI_Site zone)
|
|
370
|
+
-> std::unique_ptr<MQT_NA_QDMI_Operation_impl_d>;
|
|
371
|
+
/// @brief Factory function for the local single-qubit operations.
|
|
372
|
+
[[nodiscard]] static auto
|
|
373
|
+
makeUniqueLocalSingleQubit(const std::string& name, size_t numParameters,
|
|
374
|
+
uint64_t duration, double fidelity,
|
|
375
|
+
const std::vector<MQT_NA_QDMI_Site>& sites)
|
|
376
|
+
-> std::unique_ptr<MQT_NA_QDMI_Operation_impl_d>;
|
|
377
|
+
/// @brief Factory function for the local multi-qubit operations.
|
|
378
|
+
[[nodiscard]] static auto makeUniqueLocalTwoQubit(
|
|
379
|
+
const std::string& name, size_t numParameters, size_t numQubits,
|
|
380
|
+
uint64_t duration, double fidelity, uint64_t interactionRadius,
|
|
381
|
+
uint64_t blockingRadius,
|
|
382
|
+
const std::vector<std::pair<MQT_NA_QDMI_Site, MQT_NA_QDMI_Site>>& sites)
|
|
383
|
+
-> std::unique_ptr<MQT_NA_QDMI_Operation_impl_d>;
|
|
384
|
+
/// @brief Factory function for the shuttling load operations.
|
|
385
|
+
[[nodiscard]] static auto
|
|
386
|
+
makeUniqueShuttlingLoad(const std::string& name, size_t numParameters,
|
|
387
|
+
uint64_t duration, double fidelity,
|
|
388
|
+
MQT_NA_QDMI_Site zone)
|
|
389
|
+
-> std::unique_ptr<MQT_NA_QDMI_Operation_impl_d>;
|
|
390
|
+
/// @brief Factory function for the shuttling move operations.
|
|
391
|
+
[[nodiscard]] static auto
|
|
392
|
+
makeUniqueShuttlingMove(const std::string& name, size_t numParameters,
|
|
393
|
+
MQT_NA_QDMI_Site zone, uint64_t meanShuttlingSpeed)
|
|
394
|
+
-> std::unique_ptr<MQT_NA_QDMI_Operation_impl_d>;
|
|
395
|
+
/// @brief Factory function for the shuttling store operations.
|
|
396
|
+
[[nodiscard]] static auto
|
|
397
|
+
makeUniqueShuttlingStore(const std::string& name, size_t numParameters,
|
|
398
|
+
uint64_t duration, double fidelity,
|
|
399
|
+
MQT_NA_QDMI_Site zone)
|
|
400
|
+
-> std::unique_ptr<MQT_NA_QDMI_Operation_impl_d>;
|
|
401
|
+
|
|
402
|
+
/**
|
|
403
|
+
* @brief Queries a property of the operation.
|
|
404
|
+
* @see MQT_NA_QDMI_device_session_query_operation_property
|
|
405
|
+
*/
|
|
406
|
+
auto queryProperty(size_t numSites, const MQT_NA_QDMI_Site* sites,
|
|
407
|
+
size_t numParams, const double* params,
|
|
408
|
+
QDMI_Operation_Property prop, size_t size, void* value,
|
|
409
|
+
size_t* sizeRet) const -> int;
|
|
410
|
+
};
|