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,193 @@
|
|
|
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/statistics/MemoryManagerStatistics.hpp"
|
|
14
|
+
|
|
15
|
+
#include <cassert>
|
|
16
|
+
#include <cstddef>
|
|
17
|
+
#include <type_traits>
|
|
18
|
+
#include <vector>
|
|
19
|
+
|
|
20
|
+
namespace dd {
|
|
21
|
+
|
|
22
|
+
// forward declarations
|
|
23
|
+
struct LLBase;
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* @brief A memory manager for objects of the same type that inherit from
|
|
27
|
+
* `LLBase`.
|
|
28
|
+
* @details The class manages a collection of objects. The objects are
|
|
29
|
+
* stored in contiguous chunks of memory. The manager supports reclaiming
|
|
30
|
+
* objects that are no longer in use. This is done by maintaining a linked list
|
|
31
|
+
* of available objects. When an object is no longer in use, it is added to the
|
|
32
|
+
* list. When a new object is requested, the first object from the list is
|
|
33
|
+
* returned. If the list is empty, an object from the current chunk is returned.
|
|
34
|
+
* If the current chunk is full, a new chunk is allocated. The size of chunks
|
|
35
|
+
* grows exponentially according to a growth factor.
|
|
36
|
+
* @note The main purpose of this class is to reduce the number of memory
|
|
37
|
+
* allocations and deallocations. This is achieved by allocating a large number
|
|
38
|
+
* of objects at once and reusing them. This is especially useful for objects
|
|
39
|
+
* that are frequently created and destroyed, such as decision diagram nodes,
|
|
40
|
+
* edge weights, etc.
|
|
41
|
+
*/
|
|
42
|
+
class MemoryManager {
|
|
43
|
+
MemoryManager(size_t entrySize, std::size_t initialAllocationSize);
|
|
44
|
+
|
|
45
|
+
public:
|
|
46
|
+
// delete copy construction and assignment
|
|
47
|
+
MemoryManager(const MemoryManager&) = delete;
|
|
48
|
+
MemoryManager& operator=(const MemoryManager&) = delete;
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* @brief The number of initially allocated entries.
|
|
52
|
+
* @details The number of initially allocated entries is the number of entries
|
|
53
|
+
* that are allocated as a chunk when the manager is created. Increasing this
|
|
54
|
+
* number reduces the number of allocations, but increases the memory usage.
|
|
55
|
+
*/
|
|
56
|
+
static constexpr std::size_t INITIAL_ALLOCATION_SIZE = 2048U;
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* @brief The growth factor for table entry allocation.
|
|
60
|
+
* @details The growth factor is used to determine the number of entries that
|
|
61
|
+
* are allocated when the manager runs out of entries. Per default, the number
|
|
62
|
+
* of entries is doubled. Increasing this number reduces the number of memory
|
|
63
|
+
* allocations, but increases the memory usage.
|
|
64
|
+
*/
|
|
65
|
+
static constexpr double GROWTH_FACTOR = 2U;
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* @brief Construct a new MemoryManager object for objects of type T.
|
|
69
|
+
* @param initialAllocationSize The initial number of entries to allocate
|
|
70
|
+
* @tparam T The type of the entries
|
|
71
|
+
*/
|
|
72
|
+
template <class T>
|
|
73
|
+
static MemoryManager
|
|
74
|
+
create(const std::size_t initialAllocationSize = INITIAL_ALLOCATION_SIZE) {
|
|
75
|
+
return {sizeof(T), initialAllocationSize};
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/// default destructor
|
|
79
|
+
~MemoryManager() = default;
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* @brief Get an entry from the manager.
|
|
83
|
+
* @details If an entry is available for reuse, it is returned. Otherwise, an
|
|
84
|
+
* entry from the pre-allocated chunks is returned. If no entry is available,
|
|
85
|
+
* a new chunk is allocated.
|
|
86
|
+
* @tparam T The type of the entry.
|
|
87
|
+
* @return A pointer to an entry.
|
|
88
|
+
*/
|
|
89
|
+
template <class T> [[nodiscard]] T* get() {
|
|
90
|
+
static_assert(std::is_base_of_v<LLBase, T>,
|
|
91
|
+
"T must be derived from LLBase");
|
|
92
|
+
assert(sizeof(T) == entrySize_ && "Cannot get entry of different size");
|
|
93
|
+
|
|
94
|
+
return static_cast<T*>(get());
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* @brief Return an entry to the manager.
|
|
99
|
+
* @details The entry is added to the list of available entries. The entry
|
|
100
|
+
* must not be used after it has been returned to the manager.
|
|
101
|
+
* @param entry A reference to an entry that is no longer in use.
|
|
102
|
+
*/
|
|
103
|
+
void returnEntry(LLBase& entry) noexcept;
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* @brief Reset the manager.
|
|
107
|
+
* @details Drops all but the first chunk. If `resizeToTotal` is set to true,
|
|
108
|
+
* the first chunk is resized to the total number of entries. This increases
|
|
109
|
+
* memory locality and reduces the number of allocations when the manager is
|
|
110
|
+
* used again. However, it might also require a huge contiguous block of
|
|
111
|
+
* memory to be allocated.
|
|
112
|
+
* @param resizeToTotal If set to true, the first chunk is resized to the
|
|
113
|
+
* total number of entries.
|
|
114
|
+
*/
|
|
115
|
+
void reset(bool resizeToTotal = false) noexcept;
|
|
116
|
+
|
|
117
|
+
/// Get a reference to the statistics
|
|
118
|
+
[[nodiscard]] const auto& getStats() const noexcept { return stats; }
|
|
119
|
+
|
|
120
|
+
private:
|
|
121
|
+
/// Get an entry from the manager
|
|
122
|
+
[[nodiscard]] LLBase* get();
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* @brief Check whether an entry is available for reuse
|
|
126
|
+
* @return true if an entry is available for reuse, false otherwise
|
|
127
|
+
*/
|
|
128
|
+
[[nodiscard]] bool entryAvailableForReuse() const noexcept;
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* @brief Get an entry from the list of available entries
|
|
132
|
+
* @return A pointer to an entry ready for reuse
|
|
133
|
+
*/
|
|
134
|
+
[[nodiscard]] LLBase* getEntryFromAvailableList() noexcept;
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* @brief Check whether an entry is available in the current chunk
|
|
138
|
+
* @return true if an entry is available in the current chunk, false
|
|
139
|
+
* otherwise
|
|
140
|
+
*/
|
|
141
|
+
[[nodiscard]] bool entryAvailableInChunk() const noexcept;
|
|
142
|
+
|
|
143
|
+
/// Allocate a new chunk of memory
|
|
144
|
+
void allocateNewChunk();
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* @brief Get an entry from the current chunk
|
|
148
|
+
* @return A pointer to an entry from the current chunk
|
|
149
|
+
*/
|
|
150
|
+
[[nodiscard]] LLBase* getEntryFromChunk() noexcept;
|
|
151
|
+
|
|
152
|
+
/// The size of an entry in bytes (as reported by `sizeof`)
|
|
153
|
+
size_t entrySize_;
|
|
154
|
+
|
|
155
|
+
/// A chunk of memory as a vector of bytes
|
|
156
|
+
using Chunk = std::vector<std::byte>;
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* @brief A linked list of entries that are available for (re-)use
|
|
160
|
+
* @details The MemoryManager maintains a linked list of entries that are
|
|
161
|
+
* available for (re-)use. This list is implemented as a singly linked list
|
|
162
|
+
* using the `next()` method of the entries. The `available` member points to
|
|
163
|
+
* the first entry in the list. If the list is empty, `available` is
|
|
164
|
+
* `nullptr`.
|
|
165
|
+
*/
|
|
166
|
+
LLBase* available;
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* @brief The storage for the entries
|
|
170
|
+
* @details The MemoryManager maintains a vector of chunks. Each chunk is a
|
|
171
|
+
* vector of entries. Entries in a chunk are allocated contiguously.
|
|
172
|
+
*/
|
|
173
|
+
std::vector<Chunk> chunks;
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* @brief Iterator to the next available entry in the current chunk
|
|
177
|
+
* @details This iterator points to the next available entry in the current
|
|
178
|
+
* chunk. If the current chunk is full, it points to the end of the chunk.
|
|
179
|
+
*/
|
|
180
|
+
Chunk::iterator chunkIt;
|
|
181
|
+
|
|
182
|
+
/**
|
|
183
|
+
* @brief Iterator to the end of the current chunk
|
|
184
|
+
* @details This iterator points to the end of the current chunk. It is used
|
|
185
|
+
* to determine whether the current chunk is full.
|
|
186
|
+
*/
|
|
187
|
+
Chunk::iterator chunkEndIt;
|
|
188
|
+
|
|
189
|
+
/// Memory manager statistics
|
|
190
|
+
MemoryManagerStatistics stats;
|
|
191
|
+
};
|
|
192
|
+
|
|
193
|
+
} // namespace dd
|
|
@@ -0,0 +1,223 @@
|
|
|
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/CachedEdge.hpp"
|
|
14
|
+
#include "dd/DDDefinitions.hpp"
|
|
15
|
+
#include "dd/Edge.hpp"
|
|
16
|
+
#include "dd/LinkedListBase.hpp"
|
|
17
|
+
|
|
18
|
+
#include <array>
|
|
19
|
+
#include <cassert>
|
|
20
|
+
#include <cstdint>
|
|
21
|
+
|
|
22
|
+
namespace dd {
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* @brief Base class for all DD nodes.
|
|
26
|
+
* @details This class is used to store common information for all DD nodes.
|
|
27
|
+
* The `flags` makes the implicit padding explicit and can be used for storing
|
|
28
|
+
* node properties.
|
|
29
|
+
* Data Layout (8)|(2|2|4) = 16B.
|
|
30
|
+
*/
|
|
31
|
+
struct NodeBase : LLBase {
|
|
32
|
+
/// Variable index
|
|
33
|
+
Qubit v{};
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* @brief Flags for node properties
|
|
37
|
+
* @details Not required for all node types, but padding is required either
|
|
38
|
+
* way.
|
|
39
|
+
*
|
|
40
|
+
* 0b10000 = mark flag used for mark-and-sweep garbage collection,
|
|
41
|
+
* 0b1000 = marks a reduced dm node,
|
|
42
|
+
* 0b100 = marks a dm (tmp flag),
|
|
43
|
+
* 0b10 = mark first path edge (tmp flag),
|
|
44
|
+
* 0b1 = mark path is conjugated (tmp flag)
|
|
45
|
+
*/
|
|
46
|
+
std::uint16_t flags = 0;
|
|
47
|
+
|
|
48
|
+
/// Mark flag used for mark-and-sweep garbage collection
|
|
49
|
+
static constexpr std::uint16_t MARK_FLAG = 0b10000U;
|
|
50
|
+
|
|
51
|
+
/// @brief Whether a node is marked as used.
|
|
52
|
+
[[nodiscard]] bool isMarked() const noexcept {
|
|
53
|
+
return (flags & MARK_FLAG) != 0U;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/// @brief Mark the node as used.
|
|
57
|
+
void mark() noexcept { flags |= MARK_FLAG; }
|
|
58
|
+
|
|
59
|
+
/// @brief Unmark the node.
|
|
60
|
+
void unmark() noexcept { flags &= static_cast<uint16_t>(~MARK_FLAG); }
|
|
61
|
+
|
|
62
|
+
/// Getter for the next object.
|
|
63
|
+
[[nodiscard]] NodeBase* next() const noexcept {
|
|
64
|
+
// NOLINTNEXTLINE(cppcoreguidelines-pro-type-static-cast-downcast)
|
|
65
|
+
return static_cast<NodeBase*>(next_);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* @brief Check if a node is terminal
|
|
70
|
+
* @details Generally, a node is terminal if it is nullptr.
|
|
71
|
+
* Some nodes (dNode) encode additional information in the least significant
|
|
72
|
+
* bits of the pointer. These bits are masked out before checking for
|
|
73
|
+
* terminal nodes.
|
|
74
|
+
* @param p The node to check
|
|
75
|
+
* @return true if the node is terminal, false otherwise.
|
|
76
|
+
*/
|
|
77
|
+
[[nodiscard]] static bool isTerminal(const NodeBase* p) noexcept {
|
|
78
|
+
return (reinterpret_cast<std::uintptr_t>(p) & (~7ULL)) == 0ULL;
|
|
79
|
+
}
|
|
80
|
+
static constexpr NodeBase* getTerminal() noexcept { return nullptr; }
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
static_assert(sizeof(NodeBase) == 16);
|
|
84
|
+
static_assert(alignof(NodeBase) == 8);
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* @brief A vector DD node
|
|
88
|
+
* @details Data Layout (8)|(2|2|4)|(24|24) = 64B
|
|
89
|
+
*/
|
|
90
|
+
struct vNode final : NodeBase { // NOLINT(readability-identifier-naming)
|
|
91
|
+
std::array<Edge<vNode>, RADIX> e{}; // edges out of this node
|
|
92
|
+
|
|
93
|
+
/// Getter for the next object
|
|
94
|
+
[[nodiscard]] vNode* next() const noexcept {
|
|
95
|
+
// NOLINTNEXTLINE(cppcoreguidelines-pro-type-static-cast-downcast)
|
|
96
|
+
return static_cast<vNode*>(next_);
|
|
97
|
+
}
|
|
98
|
+
/// Getter for the terminal object
|
|
99
|
+
static constexpr vNode* getTerminal() noexcept { return nullptr; }
|
|
100
|
+
};
|
|
101
|
+
using vEdge = Edge<vNode>;
|
|
102
|
+
using vCachedEdge = CachedEdge<vNode>;
|
|
103
|
+
using VectorDD = vEdge;
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* @brief A matrix DD node
|
|
107
|
+
* @details Data Layout (8)|(2|2|4)|(24|24|24|24) = 112B
|
|
108
|
+
*/
|
|
109
|
+
struct mNode final : NodeBase { // NOLINT(readability-identifier-naming)
|
|
110
|
+
std::array<Edge<mNode>, NEDGE> e{}; // edges out of this node
|
|
111
|
+
|
|
112
|
+
/// Getter for the next object
|
|
113
|
+
[[nodiscard]] mNode* next() const noexcept {
|
|
114
|
+
// NOLINTNEXTLINE(cppcoreguidelines-pro-type-static-cast-downcast)
|
|
115
|
+
return static_cast<mNode*>(next_);
|
|
116
|
+
}
|
|
117
|
+
/// Getter for the terminal object
|
|
118
|
+
static constexpr mNode* getTerminal() noexcept { return nullptr; }
|
|
119
|
+
};
|
|
120
|
+
using mEdge = Edge<mNode>;
|
|
121
|
+
using mCachedEdge = CachedEdge<mNode>;
|
|
122
|
+
using MatrixDD = mEdge;
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* @brief A density matrix DD node
|
|
126
|
+
* @details Data Layout (8)|(2|2|4)|(24|24|24|24) = 112B
|
|
127
|
+
*/
|
|
128
|
+
struct dNode final : NodeBase { // NOLINT(readability-identifier-naming)
|
|
129
|
+
std::array<Edge<dNode>, NEDGE> e{}; // edges out of this node
|
|
130
|
+
|
|
131
|
+
/// Getter for the next object
|
|
132
|
+
[[nodiscard]] dNode* next() const noexcept {
|
|
133
|
+
// NOLINTNEXTLINE(cppcoreguidelines-pro-type-static-cast-downcast)
|
|
134
|
+
return static_cast<dNode*>(next_);
|
|
135
|
+
}
|
|
136
|
+
/// Getter for the terminal object
|
|
137
|
+
static constexpr dNode* getTerminal() noexcept { return nullptr; }
|
|
138
|
+
|
|
139
|
+
[[nodiscard]] [[maybe_unused]] static constexpr bool
|
|
140
|
+
tempDensityMatrixFlagsEqual(const std::uint8_t a,
|
|
141
|
+
const std::uint8_t b) noexcept {
|
|
142
|
+
return getDensityMatrixTempFlags(a) == getDensityMatrixTempFlags(b);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
[[nodiscard]] static constexpr bool
|
|
146
|
+
isConjugateTempFlagSet(const std::uintptr_t p) noexcept {
|
|
147
|
+
return (p & (1ULL << 0)) != 0U;
|
|
148
|
+
}
|
|
149
|
+
[[nodiscard]] static constexpr bool
|
|
150
|
+
isNonReduceTempFlagSet(const std::uintptr_t p) noexcept {
|
|
151
|
+
return (p & (1ULL << 1)) != 0U;
|
|
152
|
+
}
|
|
153
|
+
[[nodiscard]] static constexpr bool
|
|
154
|
+
isDensityMatrixTempFlagSet(const std::uintptr_t p) noexcept {
|
|
155
|
+
return (p & (1ULL << 2)) != 0U;
|
|
156
|
+
}
|
|
157
|
+
[[nodiscard]] static bool
|
|
158
|
+
isDensityMatrixNode(const std::uintptr_t p) noexcept {
|
|
159
|
+
return (p & (1ULL << 3)) != 0U;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
[[nodiscard]] static bool isConjugateTempFlagSet(const dNode* p) noexcept {
|
|
163
|
+
return isConjugateTempFlagSet(reinterpret_cast<std::uintptr_t>(p));
|
|
164
|
+
}
|
|
165
|
+
[[nodiscard]] static bool isNonReduceTempFlagSet(const dNode* p) noexcept {
|
|
166
|
+
return isNonReduceTempFlagSet(reinterpret_cast<std::uintptr_t>(p));
|
|
167
|
+
}
|
|
168
|
+
[[nodiscard]] static bool
|
|
169
|
+
isDensityMatrixTempFlagSet(const dNode* p) noexcept {
|
|
170
|
+
return isDensityMatrixTempFlagSet(reinterpret_cast<std::uintptr_t>(p));
|
|
171
|
+
}
|
|
172
|
+
[[nodiscard]] static bool isDensityMatrixNode(const dNode* p) noexcept {
|
|
173
|
+
return isDensityMatrixNode(reinterpret_cast<std::uintptr_t>(p));
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
static void setConjugateTempFlagTrue(dNode*& p) noexcept {
|
|
177
|
+
p = reinterpret_cast<dNode*>(reinterpret_cast<std::uintptr_t>(p) |
|
|
178
|
+
(1ULL << 0));
|
|
179
|
+
}
|
|
180
|
+
static void setNonReduceTempFlagTrue(dNode*& p) noexcept {
|
|
181
|
+
p = reinterpret_cast<dNode*>(reinterpret_cast<std::uintptr_t>(p) |
|
|
182
|
+
(1ULL << 1));
|
|
183
|
+
}
|
|
184
|
+
static void setDensityMatTempFlagTrue(dNode*& p) noexcept {
|
|
185
|
+
p = reinterpret_cast<dNode*>(reinterpret_cast<std::uintptr_t>(p) |
|
|
186
|
+
(1ULL << 2));
|
|
187
|
+
}
|
|
188
|
+
static void alignDensityNode(dNode*& p) noexcept {
|
|
189
|
+
p = reinterpret_cast<dNode*>(reinterpret_cast<std::uintptr_t>(p) & (~7ULL));
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
[[nodiscard]] static std::uintptr_t
|
|
193
|
+
getDensityMatrixTempFlags(dNode*& p) noexcept {
|
|
194
|
+
return getDensityMatrixTempFlags(reinterpret_cast<std::uintptr_t>(p));
|
|
195
|
+
}
|
|
196
|
+
[[nodiscard]] static constexpr std::uintptr_t
|
|
197
|
+
getDensityMatrixTempFlags(const std::uintptr_t a) noexcept {
|
|
198
|
+
return a & (7ULL);
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
constexpr void unsetTempDensityMatrixFlags() noexcept {
|
|
202
|
+
flags = flags & static_cast<std::uint8_t>(~7U);
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
void setDensityMatrixNodeFlag(bool densityMatrix) noexcept;
|
|
206
|
+
|
|
207
|
+
static std::uint8_t alignDensityNodeNode(dNode*& p) noexcept;
|
|
208
|
+
|
|
209
|
+
static void getAlignedNodeRevertModificationsOnSubEdges(dNode* p) noexcept;
|
|
210
|
+
|
|
211
|
+
static void applyDmChangesToNode(dNode*& p) noexcept;
|
|
212
|
+
|
|
213
|
+
static void revertDmChangesToNode(dNode*& p) noexcept;
|
|
214
|
+
};
|
|
215
|
+
using dEdge = Edge<dNode>;
|
|
216
|
+
using dCachedEdge = CachedEdge<dNode>;
|
|
217
|
+
using DensityMatrixDD = dEdge;
|
|
218
|
+
|
|
219
|
+
static inline dEdge densityFromMatrixEdge(const mEdge& e) {
|
|
220
|
+
return dEdge{reinterpret_cast<dNode*>(e.p), e.w};
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
} // namespace dd
|
|
@@ -0,0 +1,144 @@
|
|
|
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/Node.hpp"
|
|
15
|
+
#include "dd/Package.hpp"
|
|
16
|
+
#include "ir/Definitions.hpp"
|
|
17
|
+
#include "ir/operations/OpType.hpp"
|
|
18
|
+
#include "ir/operations/Operation.hpp"
|
|
19
|
+
|
|
20
|
+
#include <array>
|
|
21
|
+
#include <cassert>
|
|
22
|
+
#include <cstddef>
|
|
23
|
+
#include <cstdint>
|
|
24
|
+
#include <memory>
|
|
25
|
+
#include <random>
|
|
26
|
+
#include <set>
|
|
27
|
+
#include <string>
|
|
28
|
+
#include <utility>
|
|
29
|
+
#include <vector>
|
|
30
|
+
|
|
31
|
+
namespace dd {
|
|
32
|
+
|
|
33
|
+
using NrEdges = std::tuple_size<decltype(dNode::e)>;
|
|
34
|
+
using ArrayOfEdges = std::array<dCachedEdge, NrEdges::value>;
|
|
35
|
+
|
|
36
|
+
// noise operations available for deterministic noise aware quantum circuit
|
|
37
|
+
// simulation
|
|
38
|
+
enum NoiseOperations : std::uint8_t {
|
|
39
|
+
AmplitudeDamping,
|
|
40
|
+
PhaseFlip,
|
|
41
|
+
Depolarization,
|
|
42
|
+
Identity
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
void sanityCheckOfNoiseProbabilities(double noiseProbability,
|
|
46
|
+
double amplitudeDampingProb,
|
|
47
|
+
double multiQubitGateFactor);
|
|
48
|
+
|
|
49
|
+
class StochasticNoiseFunctionality {
|
|
50
|
+
public:
|
|
51
|
+
StochasticNoiseFunctionality(Package& dd, std::size_t nq,
|
|
52
|
+
double gateNoiseProbability,
|
|
53
|
+
double amplitudeDampingProb,
|
|
54
|
+
double multiQubitGateFactor,
|
|
55
|
+
const std::string& cNoiseEffects);
|
|
56
|
+
|
|
57
|
+
~StochasticNoiseFunctionality() { package->decRef(identityDD); }
|
|
58
|
+
|
|
59
|
+
protected:
|
|
60
|
+
Package* package;
|
|
61
|
+
std::size_t nQubits;
|
|
62
|
+
std::uniform_real_distribution<fp> dist;
|
|
63
|
+
|
|
64
|
+
double noiseProbability;
|
|
65
|
+
double noiseProbabilityMulti;
|
|
66
|
+
fp sqrtAmplitudeDampingProbability;
|
|
67
|
+
fp oneMinusSqrtAmplitudeDampingProbability;
|
|
68
|
+
fp sqrtAmplitudeDampingProbabilityMulti;
|
|
69
|
+
fp oneMinusSqrtAmplitudeDampingProbabilityMulti;
|
|
70
|
+
GateMatrix ampDampingTrue{};
|
|
71
|
+
GateMatrix ampDampingTrueMulti{};
|
|
72
|
+
GateMatrix ampDampingFalse{};
|
|
73
|
+
GateMatrix ampDampingFalseMulti{};
|
|
74
|
+
std::vector<NoiseOperations> noiseEffects;
|
|
75
|
+
mEdge identityDD;
|
|
76
|
+
|
|
77
|
+
[[nodiscard]] std::size_t getNumberOfQubits() const { return nQubits; }
|
|
78
|
+
[[nodiscard]] double getNoiseProbability(bool multiQubitNoiseFlag) const;
|
|
79
|
+
|
|
80
|
+
[[nodiscard]] static qc::OpType
|
|
81
|
+
getAmplitudeDampingOperationType(bool multiQubitNoiseFlag,
|
|
82
|
+
bool amplitudeDampingFlag);
|
|
83
|
+
|
|
84
|
+
[[nodiscard]] GateMatrix
|
|
85
|
+
getAmplitudeDampingOperationMatrix(bool multiQubitNoiseFlag,
|
|
86
|
+
bool amplitudeDampingFlag) const;
|
|
87
|
+
|
|
88
|
+
public:
|
|
89
|
+
void applyNoiseOperation(const std::set<qc::Qubit>& targets, mEdge operation,
|
|
90
|
+
vEdge& state, std::mt19937_64& generator);
|
|
91
|
+
|
|
92
|
+
protected:
|
|
93
|
+
[[nodiscard]] mEdge stackOperation(const mEdge& operation, qc::Qubit target,
|
|
94
|
+
qc::OpType noiseOperation,
|
|
95
|
+
const GateMatrix& matrix) const;
|
|
96
|
+
|
|
97
|
+
mEdge generateNoiseOperation(mEdge operation, qc::Qubit target,
|
|
98
|
+
std::mt19937_64& generator,
|
|
99
|
+
bool amplitudeDamping, bool multiQubitOperation);
|
|
100
|
+
|
|
101
|
+
[[nodiscard]] qc::OpType returnNoiseOperation(NoiseOperations noiseOperation,
|
|
102
|
+
double prob,
|
|
103
|
+
bool multiQubitNoiseFlag) const;
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
class DeterministicNoiseFunctionality {
|
|
107
|
+
public:
|
|
108
|
+
DeterministicNoiseFunctionality(Package& dd, std::size_t nq,
|
|
109
|
+
double noiseProbabilitySingleQubit,
|
|
110
|
+
double noiseProbabilityMultiQubit,
|
|
111
|
+
double ampDampProbSingleQubit,
|
|
112
|
+
double ampDampProbMultiQubit,
|
|
113
|
+
const std::string& cNoiseEffects);
|
|
114
|
+
|
|
115
|
+
protected:
|
|
116
|
+
Package* package;
|
|
117
|
+
std::size_t nQubits;
|
|
118
|
+
|
|
119
|
+
double noiseProbSingleQubit;
|
|
120
|
+
double noiseProbMultiQubit;
|
|
121
|
+
double ampDampingProbSingleQubit;
|
|
122
|
+
double ampDampingProbMultiQubit;
|
|
123
|
+
|
|
124
|
+
std::vector<NoiseOperations> noiseEffects;
|
|
125
|
+
|
|
126
|
+
[[nodiscard]] std::size_t getNumberOfQubits() const { return nQubits; }
|
|
127
|
+
|
|
128
|
+
public:
|
|
129
|
+
void applyNoiseEffects(dEdge& originalEdge,
|
|
130
|
+
const std::unique_ptr<qc::Operation>& qcOperation);
|
|
131
|
+
|
|
132
|
+
private:
|
|
133
|
+
dCachedEdge applyNoiseEffects(dEdge& originalEdge,
|
|
134
|
+
const std::set<qc::Qubit>& usedQubits,
|
|
135
|
+
bool firstPathEdge, Qubit level);
|
|
136
|
+
|
|
137
|
+
static void applyPhaseFlipToEdges(ArrayOfEdges& e, double probability);
|
|
138
|
+
|
|
139
|
+
void applyAmplitudeDampingToEdges(ArrayOfEdges& e, double probability) const;
|
|
140
|
+
|
|
141
|
+
void applyDepolarisationToEdges(ArrayOfEdges& e, double probability) const;
|
|
142
|
+
};
|
|
143
|
+
|
|
144
|
+
} // namespace dd
|