mqt-core 3.3.2__cp314-cp314t-macosx_11_0_x86_64.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,568 @@
|
|
|
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 <algorithm>
|
|
14
|
+
#include <concepts>
|
|
15
|
+
#include <cstddef>
|
|
16
|
+
#include <cstdint>
|
|
17
|
+
#include <iostream>
|
|
18
|
+
#include <iterator>
|
|
19
|
+
#include <optional>
|
|
20
|
+
#include <qdmi/client.h>
|
|
21
|
+
#include <ranges>
|
|
22
|
+
#include <string>
|
|
23
|
+
#include <type_traits>
|
|
24
|
+
#include <utility>
|
|
25
|
+
#include <vector>
|
|
26
|
+
|
|
27
|
+
namespace fomac {
|
|
28
|
+
/**
|
|
29
|
+
* @brief Concept for ranges that are contiguous in memory and can be
|
|
30
|
+
* constructed with a size.
|
|
31
|
+
* @details This concept is used to constrain the template parameter of the
|
|
32
|
+
* `queryProperty` method.
|
|
33
|
+
* @tparam T The type to check.
|
|
34
|
+
*/
|
|
35
|
+
template <typename T>
|
|
36
|
+
concept size_constructible_contiguous_range =
|
|
37
|
+
std::ranges::contiguous_range<T> &&
|
|
38
|
+
std::constructible_from<T, std::size_t> &&
|
|
39
|
+
requires { typename T::value_type; } && requires(T t) {
|
|
40
|
+
{ t.data() } -> std::same_as<typename T::value_type*>;
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* @brief Concept for types that are either integral, floating point, bool,
|
|
44
|
+
* std::string, or QDMI_Device_Status.
|
|
45
|
+
* @details This concept is used to constrain the template parameter of the
|
|
46
|
+
* `queryProperty` method.
|
|
47
|
+
* @tparam T The type to check.
|
|
48
|
+
*/
|
|
49
|
+
template <typename T>
|
|
50
|
+
concept value_or_string =
|
|
51
|
+
std::integral<T> || std::floating_point<T> || std::is_same_v<T, bool> ||
|
|
52
|
+
std::is_same_v<T, std::string> || std::is_same_v<T, QDMI_Device_Status>;
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* @brief Concept for types that are either value_or_string or
|
|
56
|
+
* size_constructible_contiguous_range.
|
|
57
|
+
* @details This concept is used to constrain the template parameter of the
|
|
58
|
+
* `queryProperty` method.
|
|
59
|
+
* @tparam T The type to check.
|
|
60
|
+
*/
|
|
61
|
+
template <typename T>
|
|
62
|
+
concept value_or_string_or_vector =
|
|
63
|
+
value_or_string<T> || size_constructible_contiguous_range<T>;
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* @brief Concept for types that are std::optional of value_or_string.
|
|
67
|
+
* @details This concept is used to constrain the template parameter of the
|
|
68
|
+
* `queryProperty` method.
|
|
69
|
+
* @tparam T The type to check.
|
|
70
|
+
*/
|
|
71
|
+
template <typename T>
|
|
72
|
+
concept is_optional = requires { typename T::value_type; } &&
|
|
73
|
+
std::is_same_v<T, std::optional<typename T::value_type>>;
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* @brief Concept for types that are either std::string or std::optional of
|
|
77
|
+
* std::string.
|
|
78
|
+
* @details This concept is used to constrain the template parameter of the
|
|
79
|
+
* `queryProperty` method.
|
|
80
|
+
* @tparam T The type to check.
|
|
81
|
+
*/
|
|
82
|
+
template <typename T>
|
|
83
|
+
concept string_or_optional_string =
|
|
84
|
+
std::is_same_v<T, std::string> ||
|
|
85
|
+
(is_optional<T> && std::is_same_v<typename T::value_type, std::string>);
|
|
86
|
+
|
|
87
|
+
/// @see remove_optional_t
|
|
88
|
+
template <typename T> struct remove_optional {
|
|
89
|
+
using type = T;
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
/// @see remove_optional_t
|
|
93
|
+
template <typename U> struct remove_optional<std::optional<U>> {
|
|
94
|
+
using type = U;
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* @brief Helper type to strip std::optional from a type if it is present.
|
|
99
|
+
* @details This is useful for template metaprogramming when you want to work
|
|
100
|
+
* with the underlying type of optional without caring about its optionality.
|
|
101
|
+
* @tparam T The type to strip optional from.
|
|
102
|
+
*/
|
|
103
|
+
template <typename T>
|
|
104
|
+
using remove_optional_t = typename remove_optional<T>::type;
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* @brief Concept for types that are either size_constructible_contiguous_range
|
|
108
|
+
* or std::optional of size_constructible_contiguous_range.
|
|
109
|
+
* @details This concept is used to constrain the template parameter of the
|
|
110
|
+
* `queryProperty` method.
|
|
111
|
+
* @tparam T The type to check.
|
|
112
|
+
* @see Operation::queryProperty
|
|
113
|
+
*/
|
|
114
|
+
template <typename T>
|
|
115
|
+
concept maybe_optional_size_constructible_contiguous_range =
|
|
116
|
+
size_constructible_contiguous_range<remove_optional_t<T>>;
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* @brief Concept for types that are either value_or_string or std::optional of
|
|
120
|
+
* value_or_string.
|
|
121
|
+
* @details This concept is used to constrain the template parameter of the
|
|
122
|
+
* `queryProperty` method.
|
|
123
|
+
* @tparam T The type to check.
|
|
124
|
+
* @see Site::queryProperty
|
|
125
|
+
*/
|
|
126
|
+
template <typename T>
|
|
127
|
+
concept maybe_optional_value_or_string = value_or_string<remove_optional_t<T>>;
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* @brief Concept for types that are either value_or_string_or_vector or
|
|
131
|
+
* std::optional of value_or_string_or_vector.
|
|
132
|
+
* @details This concept is used to constrain the template parameter of the
|
|
133
|
+
* `queryProperty` method.
|
|
134
|
+
* @tparam T The type to check.
|
|
135
|
+
* @see Operation::queryProperty
|
|
136
|
+
*/
|
|
137
|
+
template <typename T>
|
|
138
|
+
concept maybe_optional_value_or_string_or_vector =
|
|
139
|
+
value_or_string_or_vector<remove_optional_t<T>>;
|
|
140
|
+
|
|
141
|
+
/// @returns the string representation of the given QDMI_STATUS.
|
|
142
|
+
auto toString(QDMI_STATUS result) -> std::string;
|
|
143
|
+
|
|
144
|
+
/// @returns the string representation of the given QDMI_Site_Property.
|
|
145
|
+
auto toString(QDMI_Site_Property prop) -> std::string;
|
|
146
|
+
|
|
147
|
+
/// @returns the string representation of the given QDMI_Operation_Property.
|
|
148
|
+
auto toString(QDMI_Operation_Property prop) -> std::string;
|
|
149
|
+
|
|
150
|
+
/// @returns the string representation of the given QDMI_Device_Property.
|
|
151
|
+
auto toString(QDMI_Device_Property prop) -> std::string;
|
|
152
|
+
|
|
153
|
+
/// @returns the string representation of the given QDMI_Session_Property.
|
|
154
|
+
constexpr auto toString(QDMI_Session_Property prop) -> std::string {
|
|
155
|
+
if (prop == QDMI_SESSION_PROPERTY_DEVICES) {
|
|
156
|
+
return "QDMI_SESSION_PROPERTY_DEVICES";
|
|
157
|
+
}
|
|
158
|
+
return "QDMI_SESSION_PROPERTY_UNKNOWN";
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/// Throws an exception corresponding to the given QDMI_STATUS code.
|
|
162
|
+
[[noreturn]] auto throwError(int result, const std::string& msg) -> void;
|
|
163
|
+
|
|
164
|
+
/// Throws an exception if the result indicates an error.
|
|
165
|
+
inline auto throwIfError(int result, const std::string& msg) -> void {
|
|
166
|
+
switch (result) {
|
|
167
|
+
case QDMI_SUCCESS:
|
|
168
|
+
break;
|
|
169
|
+
case QDMI_WARN_GENERAL:
|
|
170
|
+
std::cerr << "Warning: " << msg << "\n";
|
|
171
|
+
break;
|
|
172
|
+
default:
|
|
173
|
+
throwError(result, msg);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
/**
|
|
178
|
+
* @brief Class representing the FoMaC library.
|
|
179
|
+
* @details This class provides methods to query available devices and
|
|
180
|
+
* manage the QDMI session.
|
|
181
|
+
* @note This class is a singleton.
|
|
182
|
+
* @see QDMI_Session
|
|
183
|
+
*/
|
|
184
|
+
class FoMaC {
|
|
185
|
+
/**
|
|
186
|
+
* @brief Private token class.
|
|
187
|
+
* @details Only the FoMaC class can create instances of this class.
|
|
188
|
+
*/
|
|
189
|
+
class Token {
|
|
190
|
+
public:
|
|
191
|
+
Token() = default;
|
|
192
|
+
};
|
|
193
|
+
|
|
194
|
+
public:
|
|
195
|
+
/**
|
|
196
|
+
* @brief Class representing a quantum device.
|
|
197
|
+
* @details This class provides methods to query properties of the device,
|
|
198
|
+
* its sites, and its operations.
|
|
199
|
+
* @see QDMI_Device
|
|
200
|
+
*/
|
|
201
|
+
class Device {
|
|
202
|
+
/**
|
|
203
|
+
* @brief Private token class.
|
|
204
|
+
* @details Only the Device class can create instances of this class.
|
|
205
|
+
*/
|
|
206
|
+
class Token {
|
|
207
|
+
public:
|
|
208
|
+
Token() = default;
|
|
209
|
+
};
|
|
210
|
+
|
|
211
|
+
public:
|
|
212
|
+
/**
|
|
213
|
+
* @brief Class representing a site (qubit) on the device.
|
|
214
|
+
* @details This class provides methods to query properties of the site.
|
|
215
|
+
* @see QDMI_Site
|
|
216
|
+
*/
|
|
217
|
+
class Site {
|
|
218
|
+
/// @brief The associated QDMI_Device object.
|
|
219
|
+
QDMI_Device device_;
|
|
220
|
+
/// @brief The underlying QDMI_Site object.
|
|
221
|
+
QDMI_Site site_;
|
|
222
|
+
|
|
223
|
+
template <maybe_optional_value_or_string T>
|
|
224
|
+
[[nodiscard]] auto queryProperty(QDMI_Site_Property prop) const -> T {
|
|
225
|
+
if constexpr (string_or_optional_string<T>) {
|
|
226
|
+
size_t size = 0;
|
|
227
|
+
const auto result = QDMI_device_query_site_property(
|
|
228
|
+
device_, site_, prop, 0, nullptr, &size);
|
|
229
|
+
if constexpr (is_optional<T>) {
|
|
230
|
+
if (result == QDMI_ERROR_NOTSUPPORTED) {
|
|
231
|
+
return std::nullopt;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
throwIfError(result, "Querying " + toString(prop));
|
|
235
|
+
std::string value(size - 1, '\0');
|
|
236
|
+
throwIfError(QDMI_device_query_site_property(
|
|
237
|
+
device_, site_, prop, size, value.data(), nullptr),
|
|
238
|
+
"Querying " + toString(prop));
|
|
239
|
+
return value;
|
|
240
|
+
} else {
|
|
241
|
+
remove_optional_t<T> value{};
|
|
242
|
+
const auto result = QDMI_device_query_site_property(
|
|
243
|
+
device_, site_, prop, sizeof(remove_optional_t<T>), &value,
|
|
244
|
+
nullptr);
|
|
245
|
+
if constexpr (is_optional<T>) {
|
|
246
|
+
if (result == QDMI_ERROR_NOTSUPPORTED) {
|
|
247
|
+
return std::nullopt;
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
throwIfError(result, "Querying " + toString(prop));
|
|
251
|
+
return value;
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
public:
|
|
256
|
+
/**
|
|
257
|
+
* @brief Constructs a Site object from a QDMI_Site handle.
|
|
258
|
+
* @param device The associated QDMI_Device handle.
|
|
259
|
+
* @param site The QDMI_Site handle to wrap.
|
|
260
|
+
*/
|
|
261
|
+
Site(Token /* unused */, QDMI_Device device, QDMI_Site site)
|
|
262
|
+
: device_(device), site_(site) {}
|
|
263
|
+
/// @returns the underlying QDMI_Site object.
|
|
264
|
+
[[nodiscard]] auto getQDMISite() const -> QDMI_Site { return site_; }
|
|
265
|
+
// NOLINTNEXTLINE(google-explicit-constructor)
|
|
266
|
+
operator QDMI_Site() const { return site_; }
|
|
267
|
+
auto operator<=>(const Site&) const = default;
|
|
268
|
+
/// @see QDMI_SITE_PROPERTY_INDEX
|
|
269
|
+
[[nodiscard]] auto getIndex() const -> size_t;
|
|
270
|
+
/// @see QDMI_SITE_PROPERTY_T1
|
|
271
|
+
[[nodiscard]] auto getT1() const -> std::optional<uint64_t>;
|
|
272
|
+
/// @see QDMI_SITE_PROPERTY_T2
|
|
273
|
+
[[nodiscard]] auto getT2() const -> std::optional<uint64_t>;
|
|
274
|
+
/// @see QDMI_SITE_PROPERTY_NAME
|
|
275
|
+
[[nodiscard]] auto getName() const -> std::optional<std::string>;
|
|
276
|
+
/// @see QDMI_SITE_PROPERTY_XCOORDINATE
|
|
277
|
+
[[nodiscard]] auto getXCoordinate() const -> std::optional<int64_t>;
|
|
278
|
+
/// @see QDMI_SITE_PROPERTY_YCOORDINATE
|
|
279
|
+
[[nodiscard]] auto getYCoordinate() const -> std::optional<int64_t>;
|
|
280
|
+
/// @see QDMI_SITE_PROPERTY_ZCOORDINATE
|
|
281
|
+
[[nodiscard]] auto getZCoordinate() const -> std::optional<int64_t>;
|
|
282
|
+
/// @see QDMI_SITE_PROPERTY_ISZONE
|
|
283
|
+
[[nodiscard]] auto isZone() const -> std::optional<bool>;
|
|
284
|
+
/// @see QDMI_SITE_PROPERTY_XEXTENT
|
|
285
|
+
[[nodiscard]] auto getXExtent() const -> std::optional<uint64_t>;
|
|
286
|
+
/// @see QDMI_SITE_PROPERTY_YEXTENT
|
|
287
|
+
[[nodiscard]] auto getYExtent() const -> std::optional<uint64_t>;
|
|
288
|
+
/// @see QDMI_SITE_PROPERTY_ZEXTENT
|
|
289
|
+
[[nodiscard]] auto getZExtent() const -> std::optional<uint64_t>;
|
|
290
|
+
/// @see QDMI_SITE_PROPERTY_MODULEINDEX
|
|
291
|
+
[[nodiscard]] auto getModuleIndex() const -> std::optional<uint64_t>;
|
|
292
|
+
/// @see QDMI_SITE_PROPERTY_SUBMODULEINDEX
|
|
293
|
+
[[nodiscard]] auto getSubmoduleIndex() const -> std::optional<uint64_t>;
|
|
294
|
+
};
|
|
295
|
+
/**
|
|
296
|
+
* @brief Class representing an operation (gate) supported by the device.
|
|
297
|
+
* @details This class provides methods to query properties of the
|
|
298
|
+
* operation.
|
|
299
|
+
* @see QDMI_Operation
|
|
300
|
+
*/
|
|
301
|
+
class Operation {
|
|
302
|
+
/// @brief The associated QDMI_Device object.
|
|
303
|
+
QDMI_Device device_;
|
|
304
|
+
/// @brief The underlying QDMI_Operation object.
|
|
305
|
+
QDMI_Operation operation_;
|
|
306
|
+
|
|
307
|
+
template <maybe_optional_value_or_string_or_vector T>
|
|
308
|
+
[[nodiscard]] auto queryProperty(QDMI_Operation_Property prop,
|
|
309
|
+
const std::vector<Site>& sites,
|
|
310
|
+
const std::vector<double>& params) const
|
|
311
|
+
-> T {
|
|
312
|
+
std::vector<QDMI_Site> qdmiSites;
|
|
313
|
+
qdmiSites.reserve(sites.size());
|
|
314
|
+
std::ranges::transform(
|
|
315
|
+
sites, std::back_inserter(qdmiSites),
|
|
316
|
+
[](const Site& site) -> QDMI_Site { return site; });
|
|
317
|
+
if constexpr (string_or_optional_string<T>) {
|
|
318
|
+
size_t size = 0;
|
|
319
|
+
const auto result = QDMI_device_query_operation_property(
|
|
320
|
+
device_, operation_, sites.size(), qdmiSites.data(),
|
|
321
|
+
params.size(), params.data(), prop, 0, nullptr, &size);
|
|
322
|
+
if constexpr (is_optional<T>) {
|
|
323
|
+
if (result == QDMI_ERROR_NOTSUPPORTED) {
|
|
324
|
+
return std::nullopt;
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
throwIfError(result, "Querying " + toString(prop));
|
|
328
|
+
std::string value(size - 1, '\0');
|
|
329
|
+
throwIfError(QDMI_device_query_operation_property(
|
|
330
|
+
device_, operation_, sites.size(), qdmiSites.data(),
|
|
331
|
+
params.size(), params.data(), prop, size,
|
|
332
|
+
value.data(), nullptr),
|
|
333
|
+
"Querying " + toString(prop));
|
|
334
|
+
return value;
|
|
335
|
+
} else if constexpr (maybe_optional_size_constructible_contiguous_range<
|
|
336
|
+
T>) {
|
|
337
|
+
size_t size = 0;
|
|
338
|
+
const auto result = QDMI_device_query_operation_property(
|
|
339
|
+
device_, operation_, sites.size(), qdmiSites.data(),
|
|
340
|
+
params.size(), params.data(), prop, 0, nullptr, &size);
|
|
341
|
+
if constexpr (is_optional<T>) {
|
|
342
|
+
if (result == QDMI_ERROR_NOTSUPPORTED) {
|
|
343
|
+
return std::nullopt;
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
throwIfError(result, "Querying " + toString(prop));
|
|
347
|
+
remove_optional_t<T> value(
|
|
348
|
+
size / sizeof(typename remove_optional_t<T>::value_type));
|
|
349
|
+
throwIfError(QDMI_device_query_operation_property(
|
|
350
|
+
device_, operation_, sites.size(), qdmiSites.data(),
|
|
351
|
+
params.size(), params.data(), prop, size,
|
|
352
|
+
value.data(), nullptr),
|
|
353
|
+
"Querying " + toString(prop));
|
|
354
|
+
return value;
|
|
355
|
+
} else {
|
|
356
|
+
remove_optional_t<T> value{};
|
|
357
|
+
const auto result = QDMI_device_query_operation_property(
|
|
358
|
+
device_, operation_, sites.size(), qdmiSites.data(),
|
|
359
|
+
params.size(), params.data(), prop, sizeof(remove_optional_t<T>),
|
|
360
|
+
&value, nullptr);
|
|
361
|
+
if constexpr (is_optional<T>) {
|
|
362
|
+
if (result == QDMI_ERROR_NOTSUPPORTED) {
|
|
363
|
+
return std::nullopt;
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
throwIfError(result, "Querying " + toString(prop));
|
|
367
|
+
return value;
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
public:
|
|
372
|
+
/**
|
|
373
|
+
* @brief Constructs an Operation object from a QDMI_Operation handle.
|
|
374
|
+
* @param device The associated QDMI_Device handle.
|
|
375
|
+
* @param operation The QDMI_Operation handle to wrap.
|
|
376
|
+
*/
|
|
377
|
+
Operation(Token /* unused */, QDMI_Device device,
|
|
378
|
+
QDMI_Operation operation)
|
|
379
|
+
: device_(device), operation_(operation) {}
|
|
380
|
+
/// @returns the underlying QDMI_Operation object.
|
|
381
|
+
[[nodiscard]] auto getQDMIOperation() const -> QDMI_Operation {
|
|
382
|
+
return operation_;
|
|
383
|
+
}
|
|
384
|
+
// NOLINTNEXTLINE(google-explicit-constructor)
|
|
385
|
+
operator QDMI_Operation() const { return operation_; }
|
|
386
|
+
auto operator<=>(const Operation&) const = default;
|
|
387
|
+
/// @see QDMI_OPERATION_PROPERTY_NAME
|
|
388
|
+
[[nodiscard]] auto getName(const std::vector<Site>& sites = {},
|
|
389
|
+
const std::vector<double>& params = {}) const
|
|
390
|
+
-> std::string;
|
|
391
|
+
/// @see QDMI_OPERATION_PROPERTY_QUBITSNUM
|
|
392
|
+
[[nodiscard]] auto
|
|
393
|
+
getQubitsNum(const std::vector<Site>& sites = {},
|
|
394
|
+
const std::vector<double>& params = {}) const
|
|
395
|
+
-> std::optional<size_t>;
|
|
396
|
+
/// @see QDMI_OPERATION_PROPERTY_PARAMETERSNUM
|
|
397
|
+
[[nodiscard]] auto
|
|
398
|
+
getParametersNum(const std::vector<Site>& sites = {},
|
|
399
|
+
const std::vector<double>& params = {}) const -> size_t;
|
|
400
|
+
/// @see QDMI_OPERATION_PROPERTY_DURATION
|
|
401
|
+
[[nodiscard]] auto
|
|
402
|
+
getDuration(const std::vector<Site>& sites = {},
|
|
403
|
+
const std::vector<double>& params = {}) const
|
|
404
|
+
-> std::optional<uint64_t>;
|
|
405
|
+
/// @see QDMI_OPERATION_PROPERTY_FIDELITY
|
|
406
|
+
[[nodiscard]] auto
|
|
407
|
+
getFidelity(const std::vector<Site>& sites = {},
|
|
408
|
+
const std::vector<double>& params = {}) const
|
|
409
|
+
-> std::optional<double>;
|
|
410
|
+
/// @see QDMI_OPERATION_PROPERTY_INTERACTIONRADIUS
|
|
411
|
+
[[nodiscard]] auto
|
|
412
|
+
getInteractionRadius(const std::vector<Site>& sites = {},
|
|
413
|
+
const std::vector<double>& params = {}) const
|
|
414
|
+
-> std::optional<uint64_t>;
|
|
415
|
+
/// @see QDMI_OPERATION_PROPERTY_BLOCKINGRADIUS
|
|
416
|
+
[[nodiscard]] auto
|
|
417
|
+
getBlockingRadius(const std::vector<Site>& sites = {},
|
|
418
|
+
const std::vector<double>& params = {}) const
|
|
419
|
+
-> std::optional<uint64_t>;
|
|
420
|
+
/// @see QDMI_OPERATION_PROPERTY_IDLINGFIDELITY
|
|
421
|
+
[[nodiscard]] auto
|
|
422
|
+
getIdlingFidelity(const std::vector<Site>& sites = {},
|
|
423
|
+
const std::vector<double>& params = {}) const
|
|
424
|
+
-> std::optional<double>;
|
|
425
|
+
/// @see QDMI_OPERATION_PROPERTY_ISZONED
|
|
426
|
+
[[nodiscard]] auto isZoned(const std::vector<Site>& sites = {},
|
|
427
|
+
const std::vector<double>& params = {}) const
|
|
428
|
+
-> std::optional<bool>;
|
|
429
|
+
/// @see QDMI_OPERATION_PROPERTY_SITES
|
|
430
|
+
[[nodiscard]] auto getSites(const std::vector<Site>& sites = {},
|
|
431
|
+
const std::vector<double>& params = {}) const
|
|
432
|
+
-> std::optional<std::vector<Site>>;
|
|
433
|
+
/// @see QDMI_OPERATION_PROPERTY_MEANSHUTTLINGSPEED
|
|
434
|
+
[[nodiscard]] auto
|
|
435
|
+
getMeanShuttlingSpeed(const std::vector<Site>& sites = {},
|
|
436
|
+
const std::vector<double>& params = {}) const
|
|
437
|
+
-> std::optional<uint64_t>;
|
|
438
|
+
};
|
|
439
|
+
|
|
440
|
+
private:
|
|
441
|
+
/// @brief The underlying QDMI_Device object.
|
|
442
|
+
QDMI_Device device_;
|
|
443
|
+
|
|
444
|
+
template <maybe_optional_value_or_string_or_vector T>
|
|
445
|
+
[[nodiscard]] auto queryProperty(QDMI_Device_Property prop) const -> T {
|
|
446
|
+
if constexpr (string_or_optional_string<T>) {
|
|
447
|
+
size_t size = 0;
|
|
448
|
+
const auto result =
|
|
449
|
+
QDMI_device_query_device_property(device_, prop, 0, nullptr, &size);
|
|
450
|
+
if constexpr (is_optional<T>) {
|
|
451
|
+
if (result == QDMI_ERROR_NOTSUPPORTED) {
|
|
452
|
+
return std::nullopt;
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
throwIfError(result, "Querying " + toString(prop));
|
|
456
|
+
std::string value(size - 1, '\0');
|
|
457
|
+
throwIfError(QDMI_device_query_device_property(device_, prop, size,
|
|
458
|
+
value.data(), nullptr),
|
|
459
|
+
"Querying " + toString(prop));
|
|
460
|
+
return value;
|
|
461
|
+
} else if constexpr (maybe_optional_size_constructible_contiguous_range<
|
|
462
|
+
T>) {
|
|
463
|
+
size_t size = 0;
|
|
464
|
+
const auto result =
|
|
465
|
+
QDMI_device_query_device_property(device_, prop, 0, nullptr, &size);
|
|
466
|
+
if constexpr (is_optional<T>) {
|
|
467
|
+
if (result == QDMI_ERROR_NOTSUPPORTED) {
|
|
468
|
+
return std::nullopt;
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
throwIfError(result, "Querying " + toString(prop));
|
|
472
|
+
remove_optional_t<T> value(
|
|
473
|
+
size / sizeof(typename remove_optional_t<T>::value_type));
|
|
474
|
+
throwIfError(QDMI_device_query_device_property(device_, prop, size,
|
|
475
|
+
value.data(), nullptr),
|
|
476
|
+
"Querying " + toString(prop));
|
|
477
|
+
return value;
|
|
478
|
+
} else {
|
|
479
|
+
remove_optional_t<T> value{};
|
|
480
|
+
const auto result = QDMI_device_query_device_property(
|
|
481
|
+
device_, prop, sizeof(remove_optional_t<T>), &value, nullptr);
|
|
482
|
+
if constexpr (is_optional<T>) {
|
|
483
|
+
if (result == QDMI_ERROR_NOTSUPPORTED) {
|
|
484
|
+
return std::nullopt;
|
|
485
|
+
}
|
|
486
|
+
}
|
|
487
|
+
throwIfError(result, "Querying " + toString(prop));
|
|
488
|
+
return value;
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
|
|
492
|
+
public:
|
|
493
|
+
/**
|
|
494
|
+
* @brief Constructs a Device object from a QDMI_Device handle.
|
|
495
|
+
* @param device The QDMI_Device handle to wrap.
|
|
496
|
+
*/
|
|
497
|
+
Device(FoMaC::Token /* unused */, QDMI_Device device) : device_(device) {}
|
|
498
|
+
/// @returns the underlying QDMI_Device object.
|
|
499
|
+
[[nodiscard]] auto getQDMIDevice() const -> QDMI_Device { return device_; }
|
|
500
|
+
// NOLINTNEXTLINE(google-explicit-constructor)
|
|
501
|
+
operator QDMI_Device() const { return device_; }
|
|
502
|
+
auto operator<=>(const Device&) const = default;
|
|
503
|
+
/// @see QDMI_DEVICE_PROPERTY_NAME
|
|
504
|
+
[[nodiscard]] auto getName() const -> std::string;
|
|
505
|
+
/// @see QDMI_DEVICE_PROPERTY_VERSION
|
|
506
|
+
[[nodiscard]] auto getVersion() const -> std::string;
|
|
507
|
+
/// @see QDMI_DEVICE_PROPERTY_STATUS
|
|
508
|
+
[[nodiscard]] auto getStatus() const -> QDMI_Device_Status;
|
|
509
|
+
/// @see QDMI_DEVICE_PROPERTY_LIBRARYVERSION
|
|
510
|
+
[[nodiscard]] auto getLibraryVersion() const -> std::string;
|
|
511
|
+
/// @see QDMI_DEVICE_PROPERTY_QUBITSNUM
|
|
512
|
+
[[nodiscard]] auto getQubitsNum() const -> size_t;
|
|
513
|
+
/// @see QDMI_DEVICE_PROPERTY_SITES
|
|
514
|
+
[[nodiscard]] auto getSites() const -> std::vector<Site>;
|
|
515
|
+
/// @see QDMI_DEVICE_PROPERTY_OPERATIONS
|
|
516
|
+
[[nodiscard]] auto getOperations() const -> std::vector<Operation>;
|
|
517
|
+
/// @see QDMI_DEVICE_PROPERTY_COUPLINGMAP
|
|
518
|
+
[[nodiscard]] auto getCouplingMap() const
|
|
519
|
+
-> std::optional<std::vector<std::pair<Site, Site>>>;
|
|
520
|
+
/// @see QDMI_DEVICE_PROPERTY_NEEDSCALIBRATION
|
|
521
|
+
[[nodiscard]] auto getNeedsCalibration() const -> std::optional<size_t>;
|
|
522
|
+
/// @see QDMI_DEVICE_PROPERTY_LENGTHUNIT
|
|
523
|
+
[[nodiscard]] auto getLengthUnit() const -> std::optional<std::string>;
|
|
524
|
+
/// @see QDMI_DEVICE_PROPERTY_LENGTHSCALEFACTOR
|
|
525
|
+
[[nodiscard]] auto getLengthScaleFactor() const -> std::optional<double>;
|
|
526
|
+
/// @see QDMI_DEVICE_PROPERTY_DURATIONUNIT
|
|
527
|
+
[[nodiscard]] auto getDurationUnit() const -> std::optional<std::string>;
|
|
528
|
+
/// @see QDMI_DEVICE_PROPERTY_DURATIONSCALEFACTOR
|
|
529
|
+
[[nodiscard]] auto getDurationScaleFactor() const -> std::optional<double>;
|
|
530
|
+
/// @see QDMI_DEVICE_PROPERTY_MINATOMDISTANCE
|
|
531
|
+
[[nodiscard]] auto getMinAtomDistance() const -> std::optional<uint64_t>;
|
|
532
|
+
};
|
|
533
|
+
|
|
534
|
+
private:
|
|
535
|
+
QDMI_Session session_ = nullptr;
|
|
536
|
+
|
|
537
|
+
FoMaC();
|
|
538
|
+
static auto get() -> FoMaC& {
|
|
539
|
+
static FoMaC instance;
|
|
540
|
+
return instance;
|
|
541
|
+
}
|
|
542
|
+
template <size_constructible_contiguous_range T>
|
|
543
|
+
[[nodiscard]] auto queryProperty(const QDMI_Session_Property prop) const
|
|
544
|
+
-> T {
|
|
545
|
+
size_t size = 0;
|
|
546
|
+
throwIfError(
|
|
547
|
+
QDMI_session_query_session_property(session_, prop, 0, nullptr, &size),
|
|
548
|
+
"Querying " + toString(prop));
|
|
549
|
+
remove_optional_t<T> value(
|
|
550
|
+
size / sizeof(typename remove_optional_t<T>::value_type));
|
|
551
|
+
throwIfError(QDMI_session_query_session_property(session_, prop, size,
|
|
552
|
+
value.data(), nullptr),
|
|
553
|
+
"Querying " + toString(prop));
|
|
554
|
+
return value;
|
|
555
|
+
}
|
|
556
|
+
|
|
557
|
+
public:
|
|
558
|
+
virtual ~FoMaC();
|
|
559
|
+
// Delete copy constructors and assignment operators to prevent copying the
|
|
560
|
+
// singleton instance.
|
|
561
|
+
FoMaC(const FoMaC&) = delete;
|
|
562
|
+
FoMaC& operator=(const FoMaC&) = delete;
|
|
563
|
+
FoMaC(FoMaC&&) = default;
|
|
564
|
+
FoMaC& operator=(FoMaC&&) = default;
|
|
565
|
+
/// @see QDMI_SESSION_PROPERTY_DEVICES
|
|
566
|
+
[[nodiscard]] static auto getDevices() -> std::vector<Device>;
|
|
567
|
+
};
|
|
568
|
+
} // namespace fomac
|
|
@@ -0,0 +1,108 @@
|
|
|
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 Common definitions used throughout the library.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
#pragma once
|
|
16
|
+
|
|
17
|
+
#include <cstddef>
|
|
18
|
+
#include <cstdint>
|
|
19
|
+
#include <vector>
|
|
20
|
+
|
|
21
|
+
namespace qc {
|
|
22
|
+
/**
|
|
23
|
+
* @brief Type alias for qubit indices.
|
|
24
|
+
* @details This type (alias) is used to represent qubit indices in the library.
|
|
25
|
+
* It has been chosen to be an unsigned 32-bit integer to allow for up to
|
|
26
|
+
* 4,294,967,295 qubits, which should be enough for most use cases.
|
|
27
|
+
*/
|
|
28
|
+
using Qubit = std::uint32_t;
|
|
29
|
+
/**
|
|
30
|
+
* @brief Type alias for classical bit indices.
|
|
31
|
+
* @details This type (alias) is used to represent classical bit indices in the
|
|
32
|
+
* library. The choice of 64-bits is arbitrary and can be changed if necessary.
|
|
33
|
+
*/
|
|
34
|
+
using Bit = std::uint64_t;
|
|
35
|
+
|
|
36
|
+
/// A type alias for a vector of qubits which are supposed to act as targets.
|
|
37
|
+
using Targets = std::vector<Qubit>;
|
|
38
|
+
|
|
39
|
+
/// Floating-point type used throughout the library
|
|
40
|
+
using fp = double;
|
|
41
|
+
|
|
42
|
+
/// A constant for the value of \f$\pi\f$.
|
|
43
|
+
static constexpr auto PI = static_cast<fp>(
|
|
44
|
+
3.141592653589793238462643383279502884197169399375105820974L);
|
|
45
|
+
/// A constant for the value of \f$\frac{\pi}{2}\f$.
|
|
46
|
+
static constexpr auto PI_2 = static_cast<fp>(
|
|
47
|
+
1.570796326794896619231321691639751442098584699687552910487L);
|
|
48
|
+
/// A constant for the value of \f$\frac{\pi}{4}\f$.
|
|
49
|
+
static constexpr auto PI_4 = static_cast<fp>(
|
|
50
|
+
0.785398163397448309615660845819875721049292349843776455243L);
|
|
51
|
+
/// A constant for the value of \f$\tau\f$.
|
|
52
|
+
static constexpr auto TAU = static_cast<fp>(
|
|
53
|
+
6.283185307179586476925286766559005768394338798750211641950L);
|
|
54
|
+
/// A constant for the value of \f$e\f$.
|
|
55
|
+
static constexpr auto E = static_cast<fp>(
|
|
56
|
+
2.718281828459045235360287471352662497757247093699959574967L);
|
|
57
|
+
|
|
58
|
+
/// Supported file formats
|
|
59
|
+
enum class Format : uint8_t {
|
|
60
|
+
/**
|
|
61
|
+
* @brief OpenQASM 2.0 format
|
|
62
|
+
* @see https://arxiv.org/abs/1707.03429
|
|
63
|
+
*/
|
|
64
|
+
OpenQASM2,
|
|
65
|
+
/**
|
|
66
|
+
* @brief OpenQASM 3 format
|
|
67
|
+
* @see https://openqasm.com/index.html
|
|
68
|
+
*/
|
|
69
|
+
OpenQASM3
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* @brief Combine two 64bit hashes into one 64bit hash
|
|
74
|
+
* @details Combines two 64bit hashes into one 64bit hash based on
|
|
75
|
+
* boost::hash_combine (https://www.boost.org/LICENSE_1_0.txt)
|
|
76
|
+
* @param lhs The first hash
|
|
77
|
+
* @param rhs The second hash
|
|
78
|
+
* @returns The combined hash
|
|
79
|
+
*/
|
|
80
|
+
[[nodiscard]] constexpr std::size_t
|
|
81
|
+
combineHash(const std::size_t lhs, const std::size_t rhs) noexcept {
|
|
82
|
+
return lhs ^ (rhs + 0x9e3779b97f4a7c15ULL + (lhs << 6) + (lhs >> 2));
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* @brief Extend a 64bit hash with a 64bit integer
|
|
87
|
+
* @param hash The hash to extend
|
|
88
|
+
* @param with The integer to extend the hash with
|
|
89
|
+
* @return The combined hash
|
|
90
|
+
*/
|
|
91
|
+
constexpr void hashCombine(std::size_t& hash, const std::size_t with) noexcept {
|
|
92
|
+
hash = combineHash(hash, with);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* @brief Function used to mark unreachable code
|
|
97
|
+
* @details Uses compiler specific extensions if possible. Even if no extension
|
|
98
|
+
* is used, undefined behavior is still raised by an empty function body and the
|
|
99
|
+
* noreturn attribute.
|
|
100
|
+
*/
|
|
101
|
+
[[noreturn]] inline void unreachable() {
|
|
102
|
+
#ifdef __GNUC__ // GCC, Clang, ICC
|
|
103
|
+
__builtin_unreachable();
|
|
104
|
+
#elif defined(_MSC_VER) // MSVC
|
|
105
|
+
__assume(false);
|
|
106
|
+
#endif
|
|
107
|
+
}
|
|
108
|
+
} // namespace qc
|