mqt-core 3.3.2__cp314-cp314t-win_amd64.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 +89 -0
- mqt/core/__main__.py +55 -0
- mqt/core/_commands.py +52 -0
- mqt/core/_compat/__init__.py +11 -0
- mqt/core/_compat/typing.py +29 -0
- mqt/core/_version.py +34 -0
- mqt/core/_version.pyi +12 -0
- mqt/core/bin/mqt-core-algorithms.dll +0 -0
- mqt/core/bin/mqt-core-circuit-optimizer.dll +0 -0
- mqt/core/bin/mqt-core-dd.dll +0 -0
- mqt/core/bin/mqt-core-ds.dll +0 -0
- mqt/core/bin/mqt-core-fomac.dll +0 -0
- mqt/core/bin/mqt-core-ir.dll +0 -0
- mqt/core/bin/mqt-core-na-fomac.dll +0 -0
- mqt/core/bin/mqt-core-na.dll +0 -0
- mqt/core/bin/mqt-core-qasm.dll +0 -0
- mqt/core/bin/mqt-core-qdmi-driver.dll +0 -0
- mqt/core/bin/mqt-core-qdmi-na-device.dll +0 -0
- mqt/core/bin/mqt-core-zx.dll +0 -0
- mqt/core/dd.cp314t-win_amd64.pyd +0 -0
- mqt/core/dd.pyi +1016 -0
- mqt/core/dd_evaluation.py +368 -0
- mqt/core/fomac.cp314t-win_amd64.pyd +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.cp314t-win_amd64.pyd +0 -0
- mqt/core/lib/mqt-core-algorithms.lib +0 -0
- mqt/core/lib/mqt-core-circuit-optimizer.lib +0 -0
- mqt/core/lib/mqt-core-dd.lib +0 -0
- mqt/core/lib/mqt-core-ds.lib +0 -0
- mqt/core/lib/mqt-core-fomac.lib +0 -0
- mqt/core/lib/mqt-core-ir.lib +0 -0
- mqt/core/lib/mqt-core-na-fomac.lib +0 -0
- mqt/core/lib/mqt-core-na.lib +0 -0
- mqt/core/lib/mqt-core-qasm.lib +0 -0
- mqt/core/lib/mqt-core-qdmi-driver.lib +0 -0
- mqt/core/lib/mqt-core-qdmi-na-device-gen.lib +0 -0
- mqt/core/lib/mqt-core-qdmi-na-device.lib +0 -0
- mqt/core/lib/mqt-core-zx.lib +0 -0
- mqt/core/lib/pkgconfig/spdlog.pc +13 -0
- mqt/core/lib/spdlog.lib +0 -0
- mqt/core/na/__init__.py +12 -0
- mqt/core/na/fomac.cp314t-win_amd64.pyd +0 -0
- mqt/core/na/fomac.pyi +117 -0
- mqt/core/nlohmann_json.natvis +278 -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 +445 -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 +110 -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 +121 -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/DELVEWHEEL +2 -0
- mqt_core-3.3.2.dist-info/METADATA +210 -0
- mqt_core-3.3.2.dist-info/RECORD +537 -0
- mqt_core-3.3.2.dist-info/WHEEL +5 -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
- mqt_core.libs/msvcp140.dll +0 -0
|
@@ -0,0 +1,22 @@
|
|
|
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 "dd/Edge.hpp"
|
|
14
|
+
#include "dd/Node.hpp"
|
|
15
|
+
|
|
16
|
+
namespace dd {
|
|
17
|
+
class Package;
|
|
18
|
+
|
|
19
|
+
using VectorDD = Edge<vNode>;
|
|
20
|
+
using MatrixDD = Edge<mNode>;
|
|
21
|
+
using DensityMatrixDD = Edge<dNode>;
|
|
22
|
+
} // namespace dd
|
|
@@ -0,0 +1,255 @@
|
|
|
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 "dd/DDDefinitions.hpp"
|
|
14
|
+
#include "dd/LinkedListBase.hpp"
|
|
15
|
+
#include "dd/mqt_core_dd_export.h"
|
|
16
|
+
|
|
17
|
+
#include <istream>
|
|
18
|
+
#include <limits>
|
|
19
|
+
#include <ostream>
|
|
20
|
+
|
|
21
|
+
namespace dd {
|
|
22
|
+
/**
|
|
23
|
+
* @brief A struct for representing real numbers as part of the DD package.
|
|
24
|
+
* @details Consists of a floating point number (the value) and a next pointer
|
|
25
|
+
* (used for chaining entries). Numbers are marked for garbage collection via
|
|
26
|
+
* the second least significant bit of pointers referencing them.
|
|
27
|
+
* @note Due to the way the sign of the value is encoded, special care has to
|
|
28
|
+
* be taken when accessing the value. The static functions in this struct
|
|
29
|
+
* provide safe access to the value of a RealNumber* pointer.
|
|
30
|
+
*/
|
|
31
|
+
struct RealNumber final : LLBase {
|
|
32
|
+
/// Getter for the next object.
|
|
33
|
+
[[nodiscard]] RealNumber* next() const noexcept;
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* @brief Check whether the number points to the zero number.
|
|
37
|
+
* @param e The number to check.
|
|
38
|
+
* @returns Whether the number points to zero.
|
|
39
|
+
*/
|
|
40
|
+
[[nodiscard]] static constexpr bool exactlyZero(const RealNumber* e) noexcept;
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* @brief Check whether the number points to the one number.
|
|
44
|
+
* @param e The number to check.
|
|
45
|
+
* @returns Whether the number points to one.
|
|
46
|
+
*/
|
|
47
|
+
[[nodiscard]] static constexpr bool exactlyOne(const RealNumber* e) noexcept;
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* @brief Check whether the number points to the sqrt(2)/2 = 1/sqrt(2) number.
|
|
51
|
+
* @param e The number to check.
|
|
52
|
+
* @returns Whether the number points to negative one.
|
|
53
|
+
*/
|
|
54
|
+
[[nodiscard]] static constexpr bool
|
|
55
|
+
exactlySqrt2over2(const RealNumber* e) noexcept;
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* @brief Get the value of the number.
|
|
59
|
+
* @param e The number to get the value for.
|
|
60
|
+
* @returns The value of the number.
|
|
61
|
+
* @note This function accounts for the sign of the number embedded in the
|
|
62
|
+
* memory address of the number.
|
|
63
|
+
*/
|
|
64
|
+
[[nodiscard]] static fp val(const RealNumber* e) noexcept;
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* @brief Check whether two floating point numbers are approximately equal.
|
|
68
|
+
* @details This function checks whether two floating point numbers are
|
|
69
|
+
* approximately equal. The two numbers are considered approximately equal
|
|
70
|
+
* if the absolute difference between them is smaller than a small value
|
|
71
|
+
* (TOLERANCE). This function is used to compare floating point numbers
|
|
72
|
+
* stored in the table.
|
|
73
|
+
* @param left The first floating point number.
|
|
74
|
+
* @param right The second floating point number.
|
|
75
|
+
* @returns Whether the two floating point numbers are approximately equal.
|
|
76
|
+
*/
|
|
77
|
+
[[nodiscard]] static bool approximatelyEquals(fp left, fp right) noexcept;
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* @brief Check whether two numbers are approximately equal.
|
|
81
|
+
* @details This function checks whether two numbers are approximately
|
|
82
|
+
* equal. Two numbers are considered approximately equal if they point to
|
|
83
|
+
* the same number or if the values of the numbers are approximately equal.
|
|
84
|
+
* @param left The first number.
|
|
85
|
+
* @param right The second number.
|
|
86
|
+
* @returns Whether the two numbers are approximately equal.
|
|
87
|
+
* @see approximatelyEquals(fp, fp)
|
|
88
|
+
*/
|
|
89
|
+
[[nodiscard]] static bool
|
|
90
|
+
approximatelyEquals(const RealNumber* left, const RealNumber* right) noexcept;
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* @brief Check whether a floating point number is approximately zero.
|
|
94
|
+
* @param e The floating point number to check.
|
|
95
|
+
* @returns Whether the floating point number is approximately zero.
|
|
96
|
+
*/
|
|
97
|
+
[[nodiscard]] static bool approximatelyZero(fp e) noexcept;
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* @brief Check whether a number is approximately zero.
|
|
101
|
+
* @param e The number to check.
|
|
102
|
+
* @returns Whether the number is approximately zero.
|
|
103
|
+
* @see approximatelyZero(fp)
|
|
104
|
+
*/
|
|
105
|
+
[[nodiscard]] static bool approximatelyZero(const RealNumber* e) noexcept;
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* @brief Write a binary representation of the number to a stream.
|
|
109
|
+
* @param e The number to write.
|
|
110
|
+
* @param os The stream to write to.
|
|
111
|
+
*/
|
|
112
|
+
static void writeBinary(const RealNumber* e, std::ostream& os);
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* @brief Write a binary representation of a floating point number to a
|
|
116
|
+
* @param num The number to write.
|
|
117
|
+
* @param os The stream to write to.
|
|
118
|
+
*/
|
|
119
|
+
static void writeBinary(fp num, std::ostream& os);
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* @brief Read a binary representation of a number from a stream.
|
|
123
|
+
* @param num The number to read into.
|
|
124
|
+
* @param is The stream to read from.
|
|
125
|
+
*/
|
|
126
|
+
static void readBinary(fp& num, std::istream& is);
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* @brief Get an aligned pointer to the number.
|
|
130
|
+
* @details Since the least significant bit of the memory address of the
|
|
131
|
+
* number is used to encode the sign of the value, the pointer to the number
|
|
132
|
+
* might not be aligned. This function returns an aligned pointer to the
|
|
133
|
+
* number.
|
|
134
|
+
* @param e The number to get the aligned pointer for.
|
|
135
|
+
* @returns An aligned pointer to the number.
|
|
136
|
+
*/
|
|
137
|
+
[[nodiscard]] static RealNumber*
|
|
138
|
+
getAlignedPointer(const RealNumber* e) noexcept;
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* @brief Get a pointer to the number with a negative sign.
|
|
142
|
+
* @details Since the least significant bit of the memory address of the
|
|
143
|
+
* number is used to encode the sign of the value, this function just sets
|
|
144
|
+
* the least significant bit of the memory address of the number to 1.
|
|
145
|
+
* @param e The number to get the negative pointer for.
|
|
146
|
+
* @returns A negative pointer to the number.
|
|
147
|
+
*/
|
|
148
|
+
[[nodiscard]] static RealNumber*
|
|
149
|
+
getNegativePointer(const RealNumber* e) noexcept;
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* @brief Flip the sign of the number pointer.
|
|
153
|
+
* @param e The number to flip the sign of.
|
|
154
|
+
* @returns The number with the sign flipped.
|
|
155
|
+
* @note This function does not change the sign of the value of the number.
|
|
156
|
+
* It rather changes the sign of the pointer to the number.
|
|
157
|
+
* @note We do not consider negative zero here, since it is not used in the
|
|
158
|
+
* DD package. There only exists one zero number, which is positive.
|
|
159
|
+
*/
|
|
160
|
+
[[nodiscard]] static RealNumber*
|
|
161
|
+
flipPointerSign(const RealNumber* e) noexcept;
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* @brief Mark @p e for garbage collection.
|
|
165
|
+
* @details Sets the 2nd least significant bit of the next_ pointer.
|
|
166
|
+
* @param e The number to mark.
|
|
167
|
+
*/
|
|
168
|
+
static void mark(RealNumber* e) noexcept;
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* @brief Unmark @p e after garbage collection.
|
|
172
|
+
* @details Unsets the 2nd least significant bit of the next_ pointer.
|
|
173
|
+
* @param e The number to unmark.
|
|
174
|
+
*/
|
|
175
|
+
static void unmark(RealNumber* e) noexcept;
|
|
176
|
+
|
|
177
|
+
/**
|
|
178
|
+
* @brief Immortalize @p e.
|
|
179
|
+
* @details Sets the 3rd least significant bit of the next_ pointer.
|
|
180
|
+
* @param e The number to immortalize.
|
|
181
|
+
*/
|
|
182
|
+
static void immortalize(RealNumber* e) noexcept;
|
|
183
|
+
|
|
184
|
+
/**
|
|
185
|
+
* @brief Check whether the number is flagged as negative.
|
|
186
|
+
* @param e The number to check.
|
|
187
|
+
* @returns Whether the number is negative.
|
|
188
|
+
*/
|
|
189
|
+
[[nodiscard]] static bool isNegativePointer(const RealNumber* e) noexcept;
|
|
190
|
+
|
|
191
|
+
/**
|
|
192
|
+
* @brief Check whether the number is flagged as marked.
|
|
193
|
+
* @param e The number to check.
|
|
194
|
+
* @returns Whether the number is marked.
|
|
195
|
+
*/
|
|
196
|
+
[[nodiscard]] static bool isMarked(const RealNumber* e) noexcept;
|
|
197
|
+
|
|
198
|
+
/**
|
|
199
|
+
* @brief Check whether the number is flagged as immortal.
|
|
200
|
+
* @param e The number to check.
|
|
201
|
+
* @returns Whether the number is immortal.
|
|
202
|
+
*/
|
|
203
|
+
[[nodiscard]] static bool isImmortal(const RealNumber* e) noexcept;
|
|
204
|
+
|
|
205
|
+
/**
|
|
206
|
+
* @brief The value of the number.
|
|
207
|
+
* @details The value of the number is a floating point number. The sign of
|
|
208
|
+
* the value is encoded in the least significant bit of the memory address
|
|
209
|
+
* of the number. As a consequence, values stored here are always
|
|
210
|
+
* non-negative. The sign of the value as well as the value itself can be
|
|
211
|
+
* accessed using the static functions of this struct.
|
|
212
|
+
*/
|
|
213
|
+
fp value{};
|
|
214
|
+
|
|
215
|
+
/// numerical tolerance to be used for floating point values
|
|
216
|
+
// NOLINTNEXTLINE(cppcoreguidelines-avoid-non-const-global-variables)
|
|
217
|
+
static inline fp eps = std::numeric_limits<dd::fp>::epsilon() * 1024;
|
|
218
|
+
};
|
|
219
|
+
|
|
220
|
+
static_assert(sizeof(RealNumber) == 16);
|
|
221
|
+
static_assert(alignof(RealNumber) == 8);
|
|
222
|
+
|
|
223
|
+
namespace constants {
|
|
224
|
+
// NOLINTBEGIN(cppcoreguidelines-avoid-non-const-global-variables)
|
|
225
|
+
/// The constant zero.
|
|
226
|
+
MQT_CORE_DD_EXPORT extern RealNumber zero;
|
|
227
|
+
/// The constant one.
|
|
228
|
+
MQT_CORE_DD_EXPORT extern RealNumber one;
|
|
229
|
+
/// The constant sqrt(2)/2 = 1/sqrt(2).
|
|
230
|
+
MQT_CORE_DD_EXPORT extern RealNumber sqrt2over2;
|
|
231
|
+
// NOLINTEND(cppcoreguidelines-avoid-non-const-global-variables)
|
|
232
|
+
|
|
233
|
+
/**
|
|
234
|
+
* @brief Check whether a number is one of the static numbers.
|
|
235
|
+
* @param e The number to check.
|
|
236
|
+
* @return Whether the number is one of the static numbers.
|
|
237
|
+
*/
|
|
238
|
+
[[nodiscard]] constexpr bool isStaticNumber(const RealNumber* e) noexcept {
|
|
239
|
+
return RealNumber::exactlyZero(e) || RealNumber::exactlyOne(e) ||
|
|
240
|
+
RealNumber::exactlySqrt2over2(e);
|
|
241
|
+
}
|
|
242
|
+
} // namespace constants
|
|
243
|
+
|
|
244
|
+
constexpr bool RealNumber::exactlyZero(const RealNumber* e) noexcept {
|
|
245
|
+
return e == &constants::zero;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
constexpr bool RealNumber::exactlyOne(const RealNumber* e) noexcept {
|
|
249
|
+
return e == &constants::one;
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
constexpr bool RealNumber::exactlySqrt2over2(const RealNumber* e) noexcept {
|
|
253
|
+
return e == &constants::sqrt2over2;
|
|
254
|
+
}
|
|
255
|
+
} // namespace dd
|
|
@@ -0,0 +1,217 @@
|
|
|
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 "dd/DDDefinitions.hpp"
|
|
14
|
+
#include "dd/MemoryManager.hpp"
|
|
15
|
+
#include "dd/statistics/UniqueTableStatistics.hpp"
|
|
16
|
+
|
|
17
|
+
#include <array>
|
|
18
|
+
#include <cstddef>
|
|
19
|
+
#include <cstdint>
|
|
20
|
+
#include <iostream>
|
|
21
|
+
|
|
22
|
+
namespace dd {
|
|
23
|
+
|
|
24
|
+
struct RealNumber;
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* @brief Immortal numbers that will never be garbage collected.
|
|
28
|
+
*/
|
|
29
|
+
namespace immortals {
|
|
30
|
+
constexpr std::array<fp, 1> get() { return {.5}; }
|
|
31
|
+
constexpr std::size_t size() { return get().size(); }
|
|
32
|
+
} // namespace immortals
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* @brief A unique table for real numbers.
|
|
36
|
+
* @details A hash table that stores real numbers. The hash table is implemented
|
|
37
|
+
* as an array of buckets, each of which is a linked list of entries. The hash
|
|
38
|
+
* table has a fixed number of buckets.
|
|
39
|
+
* @note: The implementation assumes that all values are non-negative and in the
|
|
40
|
+
* range [0, 1]. While numbers outside of this range can be stored, they will
|
|
41
|
+
* always be placed in the same bucket and will therefore cause collisions.
|
|
42
|
+
*/
|
|
43
|
+
class RealNumberUniqueTable {
|
|
44
|
+
/**
|
|
45
|
+
* @brief The number of buckets in the table.
|
|
46
|
+
* @details The number of buckets is fixed and cannot be changed after the
|
|
47
|
+
* table has been created. Increasing the number of buckets reduces the
|
|
48
|
+
* number of collisions, but increases the memory usage.
|
|
49
|
+
* @attention The number of buckets has to be one larger than a power of two.
|
|
50
|
+
* Otherwise, the hash function will not work correctly.
|
|
51
|
+
*/
|
|
52
|
+
static constexpr std::size_t NBUCKET = 65537U;
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* @brief The initial garbage collection limit.
|
|
56
|
+
* @details The initial garbage collection limit is the number of entries that
|
|
57
|
+
* must be present in the table before garbage collection is triggered.
|
|
58
|
+
* Increasing this number reduces the number of garbage collections, but
|
|
59
|
+
* increases the memory usage.
|
|
60
|
+
*/
|
|
61
|
+
static constexpr std::size_t INITIAL_GC_LIMIT = 65536U;
|
|
62
|
+
|
|
63
|
+
public:
|
|
64
|
+
/**
|
|
65
|
+
* @brief The default constructor
|
|
66
|
+
* @param manager The memory manager to use for allocating new numbers.
|
|
67
|
+
* @param initialGCLim The initial garbage collection limit.
|
|
68
|
+
*/
|
|
69
|
+
explicit RealNumberUniqueTable(MemoryManager& manager,
|
|
70
|
+
std::size_t initialGCLim = INITIAL_GC_LIMIT);
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* @brief The hash function for the hash table.
|
|
74
|
+
* @details The hash function for the table is a simple linear (clipped) hash
|
|
75
|
+
* function. The hash function is used to map floating point numbers to the
|
|
76
|
+
* buckets of the table.
|
|
77
|
+
* @param val The floating point number to hash. Must be non-negative.
|
|
78
|
+
* @returns The hash value of the floating point number.
|
|
79
|
+
* @note Typically, you would expect the hash to be an unsigned integer. Here,
|
|
80
|
+
* we use a signed integer because it turns out to result in fewer assembly
|
|
81
|
+
* instructions. See https://godbolt.org/z/9v4TEMfdz for a comparison.
|
|
82
|
+
*/
|
|
83
|
+
static std::int64_t hash(fp val) noexcept;
|
|
84
|
+
|
|
85
|
+
/// Get a reference to the table.
|
|
86
|
+
[[nodiscard]] const auto& getTable() const noexcept { return table; }
|
|
87
|
+
|
|
88
|
+
/// Get a reference to the statistics
|
|
89
|
+
[[nodiscard]] const auto& getStats() const noexcept { return stats; }
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* @brief Lookup a number in the table
|
|
93
|
+
* @details This function is used to lookup and insert them into the table if
|
|
94
|
+
* they are not yet present. Since the table only ever stores non-negative
|
|
95
|
+
* numbers, the lookup is a three-step process. First the sign is stripped off
|
|
96
|
+
* the number and stored, then the non-negative value is looked up in the
|
|
97
|
+
* table and an aligned pointer to the respective entry is returned. Finally,
|
|
98
|
+
* If the sign of the original number was negative, the pointer is adjusted.
|
|
99
|
+
* @param val The floating point number to look up.
|
|
100
|
+
* @return A pointer to an entry corresponding to that number.
|
|
101
|
+
*/
|
|
102
|
+
[[nodiscard]] RealNumber* lookup(fp val);
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* @brief Check whether the table possibly needs garbage collection.
|
|
106
|
+
* @returns Whether the number of entries in the table has reached the garbage
|
|
107
|
+
* collection limit.
|
|
108
|
+
*/
|
|
109
|
+
[[nodiscard]] bool possiblyNeedsCollection() const noexcept;
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* @brief Perform garbage collection.
|
|
113
|
+
* @details This function performs garbage collection. It first checks whether
|
|
114
|
+
* garbage collection is necessary. If not, it does nothing. Otherwise, it
|
|
115
|
+
* iterates over all entries in the table and removes all numbers whose
|
|
116
|
+
* pointers are unmarked. If the force flag is set, garbage collection is
|
|
117
|
+
* performed even if it is not strictly necessary.
|
|
118
|
+
* Based on how many entries are returned to the available list, the garbage
|
|
119
|
+
* collection limit is dynamically adjusted.
|
|
120
|
+
* @param force Whether to force garbage collection.
|
|
121
|
+
* @returns The number of entries returned to the available list.
|
|
122
|
+
*/
|
|
123
|
+
std::size_t garbageCollect(bool force = false) noexcept;
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* @brief Clear the table.
|
|
127
|
+
* @details This function clears the table. It iterates over all entries in
|
|
128
|
+
* the table and sets them to nullptr. It also discards the available list and
|
|
129
|
+
* all but the first chunk of the allocated chunks. Also resets all counters.
|
|
130
|
+
*/
|
|
131
|
+
void clear() noexcept;
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* @brief Print the table.
|
|
135
|
+
*/
|
|
136
|
+
void print() const;
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* @brief Print the bucket distribution of the table.
|
|
140
|
+
* @param os The output stream to print to.
|
|
141
|
+
* @returns The output stream.
|
|
142
|
+
*/
|
|
143
|
+
std::ostream& printBucketDistribution(std::ostream& os = std::cout);
|
|
144
|
+
|
|
145
|
+
/// Count the marked entries in the table
|
|
146
|
+
[[nodiscard]] std::size_t countMarkedEntries() const noexcept;
|
|
147
|
+
|
|
148
|
+
private:
|
|
149
|
+
/// Typedef for a bucket in the table.
|
|
150
|
+
using Bucket = RealNumber*;
|
|
151
|
+
/// Typedef for the table.
|
|
152
|
+
using Table = std::array<Bucket, NBUCKET>;
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* @brief The actual hash table
|
|
156
|
+
* @details The hash table is an array of buckets. Each bucket is a linked
|
|
157
|
+
* list of entries. The linked list is implemented by using the next pointer
|
|
158
|
+
* of the entries.
|
|
159
|
+
*/
|
|
160
|
+
Table table{};
|
|
161
|
+
/**
|
|
162
|
+
* @brief The tail table
|
|
163
|
+
* @details The tail table is an array of pointers to the last entry in each
|
|
164
|
+
* bucket. This is used to speed up the insertion of new entries.
|
|
165
|
+
*/
|
|
166
|
+
std::array<RealNumber*, NBUCKET> tailTable{};
|
|
167
|
+
|
|
168
|
+
/// A pointer to the memory manager for the numbers stored in the table.
|
|
169
|
+
MemoryManager* memoryManager{};
|
|
170
|
+
|
|
171
|
+
/// A collection of statistics
|
|
172
|
+
UniqueTableStatistics stats{};
|
|
173
|
+
|
|
174
|
+
/// The initial garbage collection limit
|
|
175
|
+
std::size_t initialGCLimit;
|
|
176
|
+
/// The current garbage collection limit
|
|
177
|
+
std::size_t gcLimit = initialGCLimit;
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* @brief Finds or inserts a value into the bucket indexed by key.
|
|
181
|
+
* @details This function either finds an entry with a value within TOLERANCE
|
|
182
|
+
* of val in the bucket indexed by key or inserts a new entry with value val
|
|
183
|
+
* into the bucket.
|
|
184
|
+
* @param key The index of the bucket to find or insert the value into.
|
|
185
|
+
* @param val The value to find or insert.
|
|
186
|
+
* @returns A pointer to the found or inserted entry.
|
|
187
|
+
*/
|
|
188
|
+
RealNumber* findOrInsert(std::int64_t key, fp val);
|
|
189
|
+
|
|
190
|
+
/**
|
|
191
|
+
* @brief Inserts a value in the front of the bucket indexed by key.
|
|
192
|
+
* @param key The index of the bucket to insert the value into.
|
|
193
|
+
* @param val The value to insert.
|
|
194
|
+
* @return A pointer to the inserted entry.
|
|
195
|
+
*/
|
|
196
|
+
RealNumber* insertFront(std::int64_t key, fp val);
|
|
197
|
+
|
|
198
|
+
/**
|
|
199
|
+
* @brief Inserts a value in the back of the bucket indexed by key.
|
|
200
|
+
* @param key The index of the bucket to insert the value into.
|
|
201
|
+
* @param val The value to insert.
|
|
202
|
+
* @return A pointer to the inserted entry.
|
|
203
|
+
*/
|
|
204
|
+
RealNumber* insertBack(std::int64_t key, fp val);
|
|
205
|
+
|
|
206
|
+
/**
|
|
207
|
+
* @brief Lookup a non-negative number in the table.
|
|
208
|
+
* @details The table only ever stores non-negative values. Thus, any lookup
|
|
209
|
+
* must be split between actually looking up the number and adjusting for its
|
|
210
|
+
* sign. This function looks up a number in the table. If the number is not
|
|
211
|
+
* found, a new number is created and inserted into the table.
|
|
212
|
+
* @param val The floating point number to look up. Must be non-negative.
|
|
213
|
+
* @returns An aligned pointer to the entry corresponding to the number.
|
|
214
|
+
*/
|
|
215
|
+
[[nodiscard]] RealNumber* lookupNonNegative(fp val);
|
|
216
|
+
};
|
|
217
|
+
} // namespace dd
|
|
@@ -0,0 +1,98 @@
|
|
|
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 functions for classically simulating quantum circuits.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
#pragma once
|
|
16
|
+
|
|
17
|
+
#include "dd/Package_fwd.hpp"
|
|
18
|
+
|
|
19
|
+
#include <cstddef>
|
|
20
|
+
#include <map>
|
|
21
|
+
#include <string>
|
|
22
|
+
|
|
23
|
+
namespace qc {
|
|
24
|
+
class QuantumComputation;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
namespace dd {
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* @brief Simulate a purely-quantum @ref qc::QuantumComputation on a given input
|
|
31
|
+
* state using decision diagrams.
|
|
32
|
+
*
|
|
33
|
+
* @details This method classically simulates the quantum computation @p qc on
|
|
34
|
+
* the input state @p in by sequentially applying the operations in the circuit
|
|
35
|
+
* to the initial state via decision diagram multiplication.
|
|
36
|
+
*
|
|
37
|
+
* This simple simulation method can only handle circuits that do not contain
|
|
38
|
+
* any classical control operations or measurements.
|
|
39
|
+
* Its main purpose is to construct a representation of the statevector after
|
|
40
|
+
* simulating the quantum computation for the given input state.
|
|
41
|
+
* For more elaborate simulation methods that can handle classical control and
|
|
42
|
+
* mid-circuit measurements, see @ref sample(const QuantumComputation&,
|
|
43
|
+
* std::size_t, std::size_t).
|
|
44
|
+
*
|
|
45
|
+
* @param qc The quantum computation to simulate
|
|
46
|
+
* @param in The input state to simulate. Represented as a vector DD.
|
|
47
|
+
* @param dd The DD package to use for the simulation
|
|
48
|
+
* @return A vector DD representing the output state of the simulation
|
|
49
|
+
*/
|
|
50
|
+
VectorDD simulate(const qc::QuantumComputation& qc, const VectorDD& in,
|
|
51
|
+
Package& dd);
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* @brief Sample from the output distribution of a quantum computation
|
|
55
|
+
*
|
|
56
|
+
* @details This method classically simulates the quantum computation @p qc
|
|
57
|
+
* starting from the all-zero state and samples @p shots times from the output
|
|
58
|
+
* distribution.
|
|
59
|
+
* The seed for the random number generator can be set using @p seed.
|
|
60
|
+
*
|
|
61
|
+
* For a circuit without mid-circuit measurements, this function will construct
|
|
62
|
+
* a representation of the final statevector similar to @ref simulate and then
|
|
63
|
+
* repeatedly sample from the resulting decision diagram, without actually
|
|
64
|
+
* collapsing the state. For a fixed number of qubits, each sample can be drawn
|
|
65
|
+
* in constant time, which is a significant of the decision diagram structure.
|
|
66
|
+
*
|
|
67
|
+
* For a circuit with mid-circuit measurements, this function will separately
|
|
68
|
+
* execute the circuit for each sample, probabilistically collapsing the state
|
|
69
|
+
* after each measurement.
|
|
70
|
+
*
|
|
71
|
+
* @param qc The quantum computation to simulate
|
|
72
|
+
* @param shots The number of shots to sample
|
|
73
|
+
* @param seed The seed for the random number generator
|
|
74
|
+
* @return A histogram of the measurement results
|
|
75
|
+
*/
|
|
76
|
+
std::map<std::string, std::size_t> sample(const qc::QuantumComputation& qc,
|
|
77
|
+
std::size_t shots = 1024U,
|
|
78
|
+
std::size_t seed = 0U);
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* @brief Sample from the output distribution of a quantum computation
|
|
82
|
+
*
|
|
83
|
+
* @details This is a more general version of @ref sample that allows for
|
|
84
|
+
* choosing the input state to simulate as well as the DD package to use for the
|
|
85
|
+
* simulation.
|
|
86
|
+
*
|
|
87
|
+
* @param qc The quantum computation to simulate
|
|
88
|
+
* @param in The input state to simulate. Represented as a vector DD.
|
|
89
|
+
* @param dd The DD package to use for the simulation
|
|
90
|
+
* @param shots The number of shots to sample
|
|
91
|
+
* @param seed The seed for the random number generator
|
|
92
|
+
* @return A histogram of the measurement results
|
|
93
|
+
*/
|
|
94
|
+
std::map<std::string, std::size_t> sample(const qc::QuantumComputation& qc,
|
|
95
|
+
const VectorDD& in, Package& dd,
|
|
96
|
+
std::size_t shots,
|
|
97
|
+
std::size_t seed = 0U);
|
|
98
|
+
} // namespace dd
|