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,447 @@
|
|
|
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 <array>
|
|
15
|
+
#include <cstddef>
|
|
16
|
+
#include <cstdint>
|
|
17
|
+
#include <functional>
|
|
18
|
+
#include <istream>
|
|
19
|
+
// NOLINTNEXTLINE(misc-include-cleaner)
|
|
20
|
+
#include <nlohmann/json.hpp>
|
|
21
|
+
#include <ostream>
|
|
22
|
+
#include <sstream>
|
|
23
|
+
#include <stdexcept>
|
|
24
|
+
#include <string>
|
|
25
|
+
#include <vector>
|
|
26
|
+
|
|
27
|
+
namespace na {
|
|
28
|
+
/**
|
|
29
|
+
* @brief Represents a neutral atom device configuration.
|
|
30
|
+
* @details This struct defines the schema for the JSON representation of a
|
|
31
|
+
* neutral atom device configuration. This struct, including all its
|
|
32
|
+
* sub-structs, implements functions to serialize and deserialize to and from
|
|
33
|
+
* JSON using the nlohmann::json library.
|
|
34
|
+
* @note All duration and length values are in multiples of the time unit and
|
|
35
|
+
* the length unit, respectively.
|
|
36
|
+
*/
|
|
37
|
+
struct Device {
|
|
38
|
+
/// @brief The name of the device.
|
|
39
|
+
std::string name;
|
|
40
|
+
/// @brief The number of qubits in the device.
|
|
41
|
+
uint64_t numQubits = 0;
|
|
42
|
+
|
|
43
|
+
/// @brief Represents a 2D-vector.
|
|
44
|
+
struct Vector {
|
|
45
|
+
/// @brief The x-coordinate of the vector.
|
|
46
|
+
int64_t x = 0;
|
|
47
|
+
/// @brief The y-coordinate of the vector.
|
|
48
|
+
int64_t y = 0;
|
|
49
|
+
|
|
50
|
+
// NOLINTNEXTLINE(misc-include-cleaner)
|
|
51
|
+
NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT(Vector, x, y)
|
|
52
|
+
|
|
53
|
+
auto operator<=>(const Vector&) const = default;
|
|
54
|
+
};
|
|
55
|
+
/// @brief Represents a region in the device.
|
|
56
|
+
struct Region {
|
|
57
|
+
/// @brief The origin of the region.
|
|
58
|
+
Vector origin;
|
|
59
|
+
|
|
60
|
+
/// @brief The size of the region.
|
|
61
|
+
struct Size {
|
|
62
|
+
/// @brief The width of the region.
|
|
63
|
+
uint64_t width = 0;
|
|
64
|
+
/// @brief The height of the region.
|
|
65
|
+
uint64_t height = 0;
|
|
66
|
+
|
|
67
|
+
// NOLINTNEXTLINE(misc-include-cleaner)
|
|
68
|
+
NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT(Size, width, height)
|
|
69
|
+
|
|
70
|
+
auto operator<=>(const Size&) const = default;
|
|
71
|
+
};
|
|
72
|
+
/// @brief The size of the region.
|
|
73
|
+
Size size;
|
|
74
|
+
|
|
75
|
+
// NOLINTNEXTLINE(misc-include-cleaner)
|
|
76
|
+
NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT(Region, origin, size)
|
|
77
|
+
|
|
78
|
+
auto operator<=>(const Region&) const = default;
|
|
79
|
+
};
|
|
80
|
+
/// @brief Represents a lattice of traps in the device.
|
|
81
|
+
struct Lattice {
|
|
82
|
+
/// @brief The origin of the lattice.
|
|
83
|
+
Vector latticeOrigin;
|
|
84
|
+
/**
|
|
85
|
+
* @brief The first lattice vector.
|
|
86
|
+
* @details Multiples of this vector are added to the lattice origin to
|
|
87
|
+
* create the lattice structure.
|
|
88
|
+
*/
|
|
89
|
+
Vector latticeVector1;
|
|
90
|
+
/**
|
|
91
|
+
* @brief The second lattice vector.
|
|
92
|
+
* @details Multiples of this vector are added to the lattice origin and
|
|
93
|
+
* multiples of the first lattice vector to create the lattice structure.
|
|
94
|
+
*/
|
|
95
|
+
Vector latticeVector2;
|
|
96
|
+
/**
|
|
97
|
+
* @brief The offsets for each sublattice.
|
|
98
|
+
* @details The actual locations of traps are calculated by adding the
|
|
99
|
+
* each offset to the points in the lattice defined by the lattice
|
|
100
|
+
* vectors, i.e., for each sublattice offset `offset` and indices `i` and
|
|
101
|
+
* `j`, the trap location is `latticeOrigin + i * latticeVector1 + j *
|
|
102
|
+
* latticeVector2 + offset`.
|
|
103
|
+
*/
|
|
104
|
+
std::vector<Vector> sublatticeOffsets;
|
|
105
|
+
/**
|
|
106
|
+
* @brief The extent of the lattice.
|
|
107
|
+
* @details The extent defines the boundary of the lattice in which traps
|
|
108
|
+
* are placed. Only traps of the lattice that are within this extent
|
|
109
|
+
* are considered valid.
|
|
110
|
+
*/
|
|
111
|
+
Region extent;
|
|
112
|
+
|
|
113
|
+
// NOLINTNEXTLINE(misc-include-cleaner)
|
|
114
|
+
NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT(Lattice, latticeOrigin,
|
|
115
|
+
latticeVector1, latticeVector2,
|
|
116
|
+
sublatticeOffsets, extent)
|
|
117
|
+
|
|
118
|
+
auto operator<=>(const Lattice&) const = default;
|
|
119
|
+
};
|
|
120
|
+
/// @brief The list of lattices (trap areas) in the device.
|
|
121
|
+
std::vector<Lattice> traps;
|
|
122
|
+
/**
|
|
123
|
+
* @brief The minimum distance between atoms in the device that must be
|
|
124
|
+
* respected.
|
|
125
|
+
*/
|
|
126
|
+
uint64_t minAtomDistance = 0;
|
|
127
|
+
|
|
128
|
+
private:
|
|
129
|
+
struct Operation {
|
|
130
|
+
/// @brief The name of the operation.
|
|
131
|
+
std::string name;
|
|
132
|
+
/// @brief The region in which the operation can be performed.
|
|
133
|
+
Region region;
|
|
134
|
+
/// @brief The duration of the operation.
|
|
135
|
+
uint64_t duration = 0;
|
|
136
|
+
/// @brief The fidelity of the operation.
|
|
137
|
+
double fidelity = 0.0;
|
|
138
|
+
/// @brief The number of parameters the operation takes.
|
|
139
|
+
uint64_t numParameters = 0;
|
|
140
|
+
|
|
141
|
+
// NOLINTNEXTLINE(misc-include-cleaner)
|
|
142
|
+
NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT(Operation, name, region,
|
|
143
|
+
duration, fidelity,
|
|
144
|
+
numParameters)
|
|
145
|
+
};
|
|
146
|
+
|
|
147
|
+
public:
|
|
148
|
+
/// @brief Represents a global single-qubit operation.
|
|
149
|
+
struct GlobalSingleQubitOperation : Operation {};
|
|
150
|
+
/// @brief The list of global single-qubit operations supported by the device.
|
|
151
|
+
std::vector<GlobalSingleQubitOperation> globalSingleQubitOperations;
|
|
152
|
+
|
|
153
|
+
/// @brief Represents a global multi-qubit operation.
|
|
154
|
+
struct GlobalMultiQubitOperation : Operation {
|
|
155
|
+
/**
|
|
156
|
+
* @brief The interaction radius of the operation within which two qubits
|
|
157
|
+
* can interact.
|
|
158
|
+
*/
|
|
159
|
+
uint64_t interactionRadius = 0;
|
|
160
|
+
/**
|
|
161
|
+
* @brief The blocking radius of the operation within which no other
|
|
162
|
+
* operation can be performed to avoid interference.
|
|
163
|
+
*/
|
|
164
|
+
uint64_t blockingRadius = 0;
|
|
165
|
+
/// @brief The fidelity of the operation when no qubits are interacting.
|
|
166
|
+
double idlingFidelity = 0.0;
|
|
167
|
+
/// @brief The number of qubits involved in the operation.
|
|
168
|
+
uint64_t numQubits = 0;
|
|
169
|
+
|
|
170
|
+
// NOLINTNEXTLINE(misc-include-cleaner)
|
|
171
|
+
NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT(
|
|
172
|
+
GlobalMultiQubitOperation, Operation, interactionRadius, blockingRadius,
|
|
173
|
+
idlingFidelity, numQubits)
|
|
174
|
+
};
|
|
175
|
+
/// @brief The list of global multi-qubit operations supported by the device.
|
|
176
|
+
std::vector<GlobalMultiQubitOperation> globalMultiQubitOperations;
|
|
177
|
+
|
|
178
|
+
/// @brief Represents a local single-qubit operation.
|
|
179
|
+
struct LocalSingleQubitOperation : Operation {};
|
|
180
|
+
/// @brief The list of local single-qubit operations supported by the device.
|
|
181
|
+
std::vector<LocalSingleQubitOperation> localSingleQubitOperations;
|
|
182
|
+
|
|
183
|
+
/// @brief Represents a local multi-qubit operation.
|
|
184
|
+
struct LocalMultiQubitOperation : Operation {
|
|
185
|
+
/**
|
|
186
|
+
* @brief The interaction radius of the operation within which two qubits
|
|
187
|
+
* can interact.
|
|
188
|
+
*/
|
|
189
|
+
uint64_t interactionRadius = 0.0;
|
|
190
|
+
/**
|
|
191
|
+
* @brief The blocking radius of the operation within which no other
|
|
192
|
+
* operation can be performed to avoid interference.
|
|
193
|
+
*/
|
|
194
|
+
uint64_t blockingRadius = 0.0;
|
|
195
|
+
/// @brief The number of qubits involved in the operation.
|
|
196
|
+
uint64_t numQubits = 0;
|
|
197
|
+
|
|
198
|
+
// NOLINTNEXTLINE(misc-include-cleaner)
|
|
199
|
+
NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT(
|
|
200
|
+
LocalMultiQubitOperation, Operation, interactionRadius, blockingRadius,
|
|
201
|
+
numQubits)
|
|
202
|
+
};
|
|
203
|
+
/// @brief The list of local multi-qubit operations supported by the device.
|
|
204
|
+
std::vector<LocalMultiQubitOperation> localMultiQubitOperations;
|
|
205
|
+
|
|
206
|
+
/// @brief Represents a shuttling unit in the device.
|
|
207
|
+
struct ShuttlingUnit {
|
|
208
|
+
size_t id = 0; ///< @brief Unique identifier for the shuttling unit.
|
|
209
|
+
/// @brief The region in which the shuttling unit operates.
|
|
210
|
+
Region region;
|
|
211
|
+
/// @brief The duration of the load operation in the shuttling unit.
|
|
212
|
+
uint64_t loadDuration = 0;
|
|
213
|
+
/// @brief The duration of the store operation in the shuttling unit.
|
|
214
|
+
uint64_t storeDuration = 0;
|
|
215
|
+
/// @brief The fidelity of the load operation in the shuttling unit.
|
|
216
|
+
double loadFidelity = 0.0;
|
|
217
|
+
/// @brief The fidelity of the store operation in the shuttling unit.
|
|
218
|
+
double storeFidelity = 0.0;
|
|
219
|
+
/// @brief The number of parameters the shuttling unit takes.
|
|
220
|
+
uint64_t numParameters = 0;
|
|
221
|
+
/**
|
|
222
|
+
* @brief The mean shuttling speed.
|
|
223
|
+
* @note Only for shuttling operations.
|
|
224
|
+
*/
|
|
225
|
+
uint64_t meanShuttlingSpeed = 0;
|
|
226
|
+
|
|
227
|
+
// NOLINTNEXTLINE(misc-include-cleaner)
|
|
228
|
+
NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT(ShuttlingUnit, region,
|
|
229
|
+
loadDuration, storeDuration,
|
|
230
|
+
loadFidelity, storeFidelity,
|
|
231
|
+
numParameters,
|
|
232
|
+
meanShuttlingSpeed)
|
|
233
|
+
};
|
|
234
|
+
/// @brief The list of shuttling units supported by the device.
|
|
235
|
+
std::vector<ShuttlingUnit> shuttlingUnits;
|
|
236
|
+
|
|
237
|
+
/// @brief Represents the decoherence times of the device.
|
|
238
|
+
struct DecoherenceTimes {
|
|
239
|
+
/// @brief The T1 time.
|
|
240
|
+
uint64_t t1 = 0;
|
|
241
|
+
/// @brief The T2 time.
|
|
242
|
+
uint64_t t2 = 0;
|
|
243
|
+
|
|
244
|
+
// NOLINTNEXTLINE(misc-include-cleaner)
|
|
245
|
+
NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT(DecoherenceTimes, t1, t2)
|
|
246
|
+
};
|
|
247
|
+
/// @brief The decoherence times of the device.
|
|
248
|
+
DecoherenceTimes decoherenceTimes;
|
|
249
|
+
|
|
250
|
+
/// @brief Represents a unit of measurement for length and time.
|
|
251
|
+
struct Unit {
|
|
252
|
+
/// @brief The unit of measurement (e.g., "µm" for micrometers, "ns" for
|
|
253
|
+
/// nanoseconds).
|
|
254
|
+
std::string unit;
|
|
255
|
+
/// @brief The factor of the unit.
|
|
256
|
+
double scaleFactor = 0;
|
|
257
|
+
|
|
258
|
+
// NOLINTNEXTLINE(misc-include-cleaner)
|
|
259
|
+
NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT(Unit, scaleFactor, unit)
|
|
260
|
+
};
|
|
261
|
+
|
|
262
|
+
/// @brief The unit of measurement for lengths in the device.
|
|
263
|
+
Unit lengthUnit = {.unit = "um", ///< Default is micrometers (um).
|
|
264
|
+
.scaleFactor = 1.0};
|
|
265
|
+
|
|
266
|
+
/// @brief The unit of measurement for time in the device.
|
|
267
|
+
Unit durationUnit = {.unit = "us", ///< Default is microseconds (us).
|
|
268
|
+
.scaleFactor = 1.0};
|
|
269
|
+
|
|
270
|
+
// Before we used the macro NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT here,
|
|
271
|
+
// too. Now, we added an id to shuttling units that must be initialized
|
|
272
|
+
// in a custom routine, so we can only use the serialize macro. Additionally,
|
|
273
|
+
// we check here whether the units are valid SI units.
|
|
274
|
+
// NOLINTNEXTLINE(misc-include-cleaner)
|
|
275
|
+
NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE(
|
|
276
|
+
Device, name, numQubits, traps, minAtomDistance,
|
|
277
|
+
globalSingleQubitOperations, globalMultiQubitOperations,
|
|
278
|
+
localSingleQubitOperations, localMultiQubitOperations, shuttlingUnits,
|
|
279
|
+
decoherenceTimes, lengthUnit, durationUnit)
|
|
280
|
+
|
|
281
|
+
// the name of the following function is given by the nlohmann::json library
|
|
282
|
+
// and must not be changed
|
|
283
|
+
template <typename BasicJsonType>
|
|
284
|
+
// NOLINTNEXTLINE(readability-identifier-naming)
|
|
285
|
+
friend auto from_json(const BasicJsonType& json, Device& device) -> void {
|
|
286
|
+
const Device defaultDevice{};
|
|
287
|
+
device.name = !json.is_null() ? json.value("name", defaultDevice.name)
|
|
288
|
+
: defaultDevice.name;
|
|
289
|
+
device.numQubits = !json.is_null()
|
|
290
|
+
? json.value("numQubits", defaultDevice.numQubits)
|
|
291
|
+
: defaultDevice.numQubits;
|
|
292
|
+
device.traps = !json.is_null() ? json.value("traps", defaultDevice.traps)
|
|
293
|
+
: defaultDevice.traps;
|
|
294
|
+
device.minAtomDistance =
|
|
295
|
+
!json.is_null()
|
|
296
|
+
? json.value("minAtomDistance", defaultDevice.minAtomDistance)
|
|
297
|
+
: defaultDevice.minAtomDistance;
|
|
298
|
+
device.globalSingleQubitOperations =
|
|
299
|
+
!json.is_null() ? json.value("globalSingleQubitOperations",
|
|
300
|
+
defaultDevice.globalSingleQubitOperations)
|
|
301
|
+
: defaultDevice.globalSingleQubitOperations;
|
|
302
|
+
device.globalMultiQubitOperations =
|
|
303
|
+
!json.is_null() ? json.value("globalMultiQubitOperations",
|
|
304
|
+
defaultDevice.globalMultiQubitOperations)
|
|
305
|
+
: defaultDevice.globalMultiQubitOperations;
|
|
306
|
+
device.localSingleQubitOperations =
|
|
307
|
+
!json.is_null() ? json.value("localSingleQubitOperations",
|
|
308
|
+
defaultDevice.localSingleQubitOperations)
|
|
309
|
+
: defaultDevice.localSingleQubitOperations;
|
|
310
|
+
device.localMultiQubitOperations =
|
|
311
|
+
!json.is_null() ? json.value("localMultiQubitOperations",
|
|
312
|
+
defaultDevice.localMultiQubitOperations)
|
|
313
|
+
: defaultDevice.localMultiQubitOperations;
|
|
314
|
+
device.shuttlingUnits =
|
|
315
|
+
!json.is_null()
|
|
316
|
+
? json.value("shuttlingUnits", defaultDevice.shuttlingUnits)
|
|
317
|
+
: defaultDevice.shuttlingUnits;
|
|
318
|
+
std::ranges::for_each(device.shuttlingUnits,
|
|
319
|
+
[i = 0UL](auto& unit) mutable { unit.id = i++; });
|
|
320
|
+
device.decoherenceTimes =
|
|
321
|
+
!json.is_null()
|
|
322
|
+
? json.value("decoherenceTimes", defaultDevice.decoherenceTimes)
|
|
323
|
+
: defaultDevice.decoherenceTimes;
|
|
324
|
+
device.lengthUnit = !json.is_null()
|
|
325
|
+
? json.value("lengthUnit", defaultDevice.lengthUnit)
|
|
326
|
+
: defaultDevice.lengthUnit;
|
|
327
|
+
constexpr std::array allowedLengthUnits = {"mm", "um", "nm"};
|
|
328
|
+
if (std::ranges::find(allowedLengthUnits, device.lengthUnit.unit) ==
|
|
329
|
+
allowedLengthUnits.end()) {
|
|
330
|
+
std::ostringstream ss;
|
|
331
|
+
ss << "Invalid length unit: " << device.lengthUnit.unit
|
|
332
|
+
<< ". Supported units are: ";
|
|
333
|
+
std::ranges::for_each(allowedLengthUnits,
|
|
334
|
+
[&ss](const char* unit) { ss << unit << ", "; });
|
|
335
|
+
ss.seekp(-2, std::ostringstream::cur); // Remove the last comma and space
|
|
336
|
+
ss << ".";
|
|
337
|
+
throw std::runtime_error(ss.str());
|
|
338
|
+
}
|
|
339
|
+
device.durationUnit =
|
|
340
|
+
!json.is_null() ? json.value("durationUnit", defaultDevice.durationUnit)
|
|
341
|
+
: defaultDevice.durationUnit;
|
|
342
|
+
constexpr std::array allowedDurationUnits = {"ms", "us", "ns"};
|
|
343
|
+
if (std::ranges::find(allowedDurationUnits, device.durationUnit.unit) ==
|
|
344
|
+
allowedDurationUnits.end()) {
|
|
345
|
+
std::ostringstream ss;
|
|
346
|
+
ss << "Invalid duration unit: " << device.durationUnit.unit
|
|
347
|
+
<< ". Supported units are: ";
|
|
348
|
+
std::ranges::for_each(allowedDurationUnits,
|
|
349
|
+
[&ss](const char* unit) { ss << unit << ", "; });
|
|
350
|
+
ss.seekp(-2, std::ostringstream::cur); // Remove the last comma and space
|
|
351
|
+
ss << ".";
|
|
352
|
+
throw std::runtime_error(ss.str());
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
};
|
|
356
|
+
|
|
357
|
+
/**
|
|
358
|
+
* @brief Writes a JSON schema with default values for the device configuration
|
|
359
|
+
* to the specified output stream.
|
|
360
|
+
* @param os is the output stream to write the JSON schema to.
|
|
361
|
+
* @throws std::runtime_error if the JSON conversion fails.
|
|
362
|
+
*/
|
|
363
|
+
auto writeJSONSchema(std::ostream& os) -> void;
|
|
364
|
+
|
|
365
|
+
/**
|
|
366
|
+
* @brief Writes a JSON schema with default values for the device configuration
|
|
367
|
+
* to the specified path.
|
|
368
|
+
* @param path The path to write the JSON schema to.
|
|
369
|
+
* @throws std::runtime_error if the JSON conversion fails or the file cannot be
|
|
370
|
+
* opened.
|
|
371
|
+
*/
|
|
372
|
+
auto writeJSONSchema(const std::string& path) -> void;
|
|
373
|
+
|
|
374
|
+
/**
|
|
375
|
+
* @brief Parses the device configuration from an input stream.
|
|
376
|
+
* @param is is the input stream containing the JSON representation of the
|
|
377
|
+
* device configuration.
|
|
378
|
+
* @returns The parsed device configuration as a Protobuf message.
|
|
379
|
+
* @throws std::runtime_error if the JSON cannot be parsed.
|
|
380
|
+
*/
|
|
381
|
+
[[nodiscard]] auto readJSON(std::istream& is) -> Device;
|
|
382
|
+
|
|
383
|
+
/**
|
|
384
|
+
* @brief Parses the device configuration from a JSON file.
|
|
385
|
+
* @param path is the path to the JSON file containing the device configuration.
|
|
386
|
+
* @returns The parsed device configuration as a Protobuf message.
|
|
387
|
+
* @throws std::runtime_error if the JSON file does not exist, or the JSON file
|
|
388
|
+
* cannot be parsed.
|
|
389
|
+
*/
|
|
390
|
+
[[nodiscard]] auto readJSON(const std::string& path) -> Device;
|
|
391
|
+
|
|
392
|
+
/**
|
|
393
|
+
* @brief Writes a header file with the device configuration to the specified
|
|
394
|
+
* output stream.
|
|
395
|
+
* @param device is the protobuf representation of the device.
|
|
396
|
+
* @param os is the output stream to write the header file to.
|
|
397
|
+
* @throws std::runtime_error if the file cannot be opened or written to.
|
|
398
|
+
* @note This implementation only supports multi-qubit gates up to two
|
|
399
|
+
* qubits.
|
|
400
|
+
*/
|
|
401
|
+
auto writeHeader(const Device& device, std::ostream& os) -> void;
|
|
402
|
+
|
|
403
|
+
/**
|
|
404
|
+
* @brief Writes a header file with the device configuration to the specified
|
|
405
|
+
* path.
|
|
406
|
+
* @param device is the protobuf representation of the device.
|
|
407
|
+
* @param path is the path to write the header file to.
|
|
408
|
+
* @throws std::runtime_error if the file cannot be opened or written to.
|
|
409
|
+
* @note This implementation only supports multi-qubit gates up to two
|
|
410
|
+
* qubits.
|
|
411
|
+
*/
|
|
412
|
+
auto writeHeader(const Device& device, const std::string& path) -> void;
|
|
413
|
+
|
|
414
|
+
/**
|
|
415
|
+
* @brief Information about a regular site in a lattice.
|
|
416
|
+
* @details This struct encapsulates all relevant information about a site
|
|
417
|
+
* for use in the forEachRegularSites callback.
|
|
418
|
+
*/
|
|
419
|
+
struct SiteInfo {
|
|
420
|
+
/// @brief The unique identifier of the site.
|
|
421
|
+
uint64_t id;
|
|
422
|
+
/// @brief The x-coordinate of the site.
|
|
423
|
+
int64_t x;
|
|
424
|
+
/// @brief The y-coordinate of the site.
|
|
425
|
+
int64_t y;
|
|
426
|
+
/// @brief The identifier of the lattice (module) the site belongs to.
|
|
427
|
+
uint64_t moduleId;
|
|
428
|
+
/// @brief The identifier of the sublattice (submodule) the site belongs to.
|
|
429
|
+
uint64_t subModuleId;
|
|
430
|
+
};
|
|
431
|
+
|
|
432
|
+
/**
|
|
433
|
+
* @brief Iterates over all regular sites created by the given lattices and
|
|
434
|
+
* calls the given function for each site.
|
|
435
|
+
* @param lattices is the list of lattices to iterate over.
|
|
436
|
+
* @param f is the function to call for each regular site, receiving a SiteInfo
|
|
437
|
+
* struct containing all site information.
|
|
438
|
+
* @param startId is the starting identifier for the sites. Default is 0.
|
|
439
|
+
* @throws std::runtime_error if lattice vectors are degenerate (i.e., the
|
|
440
|
+
* determinant of the lattice vector matrix is near zero, causing the system
|
|
441
|
+
* of equations to have no unique solution).
|
|
442
|
+
*/
|
|
443
|
+
auto forEachRegularSites(const std::vector<Device::Lattice>& lattices,
|
|
444
|
+
const std::function<void(const SiteInfo&)>& f,
|
|
445
|
+
size_t startId = 0) -> void;
|
|
446
|
+
|
|
447
|
+
} // namespace na
|
|
@@ -0,0 +1,62 @@
|
|
|
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 type for representing individual atoms.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
#pragma once
|
|
16
|
+
|
|
17
|
+
#include <ostream>
|
|
18
|
+
#include <string>
|
|
19
|
+
#include <utility>
|
|
20
|
+
|
|
21
|
+
namespace na {
|
|
22
|
+
/// Represents an atom in the NAComputation.
|
|
23
|
+
/// @details The name of the atom is used for printing the NAComputation.
|
|
24
|
+
/// To maintain the uniqueness of atoms, the name of the atom should be unique.
|
|
25
|
+
class Atom final {
|
|
26
|
+
/// The identifier of the atom.
|
|
27
|
+
std::string name_;
|
|
28
|
+
|
|
29
|
+
public:
|
|
30
|
+
/// Creates a new atom with the given name.
|
|
31
|
+
/// @param name The name of the atom.
|
|
32
|
+
explicit Atom(std::string name) : name_(std::move(name)) {}
|
|
33
|
+
|
|
34
|
+
/// Returns the name of the atom.
|
|
35
|
+
[[nodiscard]] auto getName() const -> std::string { return name_; }
|
|
36
|
+
|
|
37
|
+
/// Prints the atom to the given output stream.
|
|
38
|
+
/// @param os The output stream to print the atom to.
|
|
39
|
+
/// @param obj The atom to print.
|
|
40
|
+
/// @return The output stream after printing the atom.
|
|
41
|
+
friend auto operator<<(std::ostream& os, const Atom& obj) -> std::ostream& {
|
|
42
|
+
return os << obj.getName();
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/// Compares two atoms for equality.
|
|
46
|
+
/// @param other The atom to compare with.
|
|
47
|
+
/// @return True if the atoms are equal, false otherwise.
|
|
48
|
+
[[nodiscard]] auto operator==(const Atom& other) const -> bool {
|
|
49
|
+
if (this == &other) {
|
|
50
|
+
return true;
|
|
51
|
+
}
|
|
52
|
+
return name_ == other.name_;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/// Compares two atoms for inequality.
|
|
56
|
+
/// @param other The atom to compare with.
|
|
57
|
+
/// @return True if the atoms are not equal, false otherwise.
|
|
58
|
+
[[nodiscard]] auto operator!=(const Atom& other) const -> bool {
|
|
59
|
+
return !(*this == other);
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
} // namespace na
|
|
@@ -0,0 +1,154 @@
|
|
|
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 type for representing two-dimensional locations.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
#pragma once
|
|
16
|
+
|
|
17
|
+
#include "ir/Definitions.hpp"
|
|
18
|
+
|
|
19
|
+
#include <cmath>
|
|
20
|
+
#include <cstddef>
|
|
21
|
+
#include <functional>
|
|
22
|
+
#include <iomanip>
|
|
23
|
+
#include <ios>
|
|
24
|
+
#include <ostream>
|
|
25
|
+
#include <sstream>
|
|
26
|
+
#include <string>
|
|
27
|
+
|
|
28
|
+
namespace na {
|
|
29
|
+
/// Class to store two-dimensional coordinates of type double.
|
|
30
|
+
struct Location final {
|
|
31
|
+
/// The x-coordinate of the location.
|
|
32
|
+
double x = 0;
|
|
33
|
+
/// The y-coordinate of the location.
|
|
34
|
+
double y = 0;
|
|
35
|
+
|
|
36
|
+
/// Subtracts the coordinates of the given location from this location.
|
|
37
|
+
/// @param loc The location to subtract.
|
|
38
|
+
/// @return The location resulting from the subtraction.
|
|
39
|
+
Location operator-(const Location& loc) const {
|
|
40
|
+
return {x - loc.x, y - loc.y};
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/// Adds the coordinates of the given location to this location.
|
|
44
|
+
/// @param loc The location to add.
|
|
45
|
+
/// @return The location resulting from the addition.
|
|
46
|
+
Location operator+(const Location& loc) const {
|
|
47
|
+
return {x + loc.x, y + loc.y};
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/// Returns the length of the vector from the origin to this location.
|
|
51
|
+
[[nodiscard]] auto length() const -> double { return std::hypot(x, y); }
|
|
52
|
+
|
|
53
|
+
/// Returns the distance between two locations.
|
|
54
|
+
[[nodiscard]] static auto distance(const Location& loc1, const Location& loc2)
|
|
55
|
+
-> double {
|
|
56
|
+
return (loc1 - loc2).length();
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/// Returns a string representation of the location in the format "(x, y)".
|
|
60
|
+
[[nodiscard]] auto toString() const -> std::string {
|
|
61
|
+
std::stringstream ss;
|
|
62
|
+
ss << std::setprecision(3) << std::fixed;
|
|
63
|
+
ss << "(" << x << ", " << y << ")";
|
|
64
|
+
return ss.str();
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/// Prints the location to the given output stream.
|
|
68
|
+
/// @param os The output stream to print the location to.
|
|
69
|
+
/// @param obj The location to print.
|
|
70
|
+
/// @return The output stream after printing the location.
|
|
71
|
+
friend auto operator<<(std::ostream& os, const Location& obj)
|
|
72
|
+
-> std::ostream& {
|
|
73
|
+
return os << obj.toString();
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/// Compares two locations for equality.
|
|
77
|
+
/// @param other The location to compare with.
|
|
78
|
+
/// @return True if the locations are equal, false otherwise.
|
|
79
|
+
[[nodiscard]] auto operator==(const Location& other) const -> bool {
|
|
80
|
+
return x == other.x && y == other.y;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/// Compares two locations for inequality.
|
|
84
|
+
/// @param other The location to compare with.
|
|
85
|
+
/// @return True if the locations are not equal, false otherwise.
|
|
86
|
+
[[nodiscard]] auto operator!=(const Location& other) const -> bool {
|
|
87
|
+
return !(*this == other);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/// Compares two locations for less than.
|
|
91
|
+
/// @param other The location to compare with.
|
|
92
|
+
/// @return True if this location is less than the other location, false
|
|
93
|
+
[[nodiscard]] auto operator<(const Location& other) const -> bool {
|
|
94
|
+
return x < other.x || (x == other.x && y < other.y);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/// Compares two locations for greater than.
|
|
98
|
+
/// @param other The location to compare with.
|
|
99
|
+
/// @return True if this location is greater than the other location, false
|
|
100
|
+
[[nodiscard]] auto operator>(const Location& other) const -> bool {
|
|
101
|
+
return other < *this;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/// Compares two locations for greater than or equal.
|
|
105
|
+
/// @param other The location to compare with.
|
|
106
|
+
/// @return True if this location is greater than or equal to the other
|
|
107
|
+
[[nodiscard]] auto operator>=(const Location& other) const -> bool {
|
|
108
|
+
return !(other < *this);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/// Compares two locations for less than or equal.
|
|
112
|
+
/// @param other The location to compare with.
|
|
113
|
+
/// @return True if this location is less than or equal to the other location,
|
|
114
|
+
[[nodiscard]] auto operator<=(const Location& other) const -> bool {
|
|
115
|
+
return *this >= other;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/// Computes the Euclidean distance between this location and the given
|
|
119
|
+
/// location.
|
|
120
|
+
/// @param loc The location to compute the distance to.
|
|
121
|
+
/// @return The Euclidean distance between the two locations.
|
|
122
|
+
[[nodiscard]] auto getEuclideanDistance(const Location& loc) const -> double {
|
|
123
|
+
return (*this - loc).length();
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/// Computes the horizontal distance between this location and the given
|
|
127
|
+
/// location.
|
|
128
|
+
/// @param loc The location to compute the distance to.
|
|
129
|
+
/// @return The horizontal distance between the two locations.
|
|
130
|
+
[[nodiscard]] auto getManhattanDistanceX(const Location& loc) const
|
|
131
|
+
-> double {
|
|
132
|
+
return std::abs(x - loc.x);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/// Computes the vertical distance between this location and the given
|
|
136
|
+
/// location.
|
|
137
|
+
/// @param loc The location to compute the distance to.
|
|
138
|
+
/// @return The vertical distance between the two locations.
|
|
139
|
+
[[nodiscard]] auto getManhattanDistanceY(const Location& loc) const
|
|
140
|
+
-> double {
|
|
141
|
+
return std::abs(y - loc.y);
|
|
142
|
+
}
|
|
143
|
+
};
|
|
144
|
+
} // namespace na
|
|
145
|
+
|
|
146
|
+
/// @brief Specialization of std::hash for na::Location.
|
|
147
|
+
template <> struct std::hash<na::Location> {
|
|
148
|
+
/// @brief Hashes a pair of qc::OpType and size_t values.
|
|
149
|
+
auto operator()(const na::Location& loc) const noexcept -> size_t {
|
|
150
|
+
const size_t h1 = std::hash<double>{}(loc.x);
|
|
151
|
+
const size_t h2 = std::hash<double>{}(loc.y);
|
|
152
|
+
return qc::combineHash(h1, h2);
|
|
153
|
+
}
|
|
154
|
+
};
|