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,143 @@
|
|
|
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/Node.hpp"
|
|
14
|
+
#include "dd/Package.hpp"
|
|
15
|
+
|
|
16
|
+
#include <cstddef>
|
|
17
|
+
#include <cstdint>
|
|
18
|
+
#include <vector>
|
|
19
|
+
|
|
20
|
+
namespace dd {
|
|
21
|
+
/**
|
|
22
|
+
* @brief Construct the all-zero state \f$|0...0\rangle\f$
|
|
23
|
+
* @param n The number of qubits.
|
|
24
|
+
* @param dd The DD package to use for making the vector DD.
|
|
25
|
+
* @param start The starting qubit index. Default is 0.
|
|
26
|
+
* @throws `std::invalid_argument`, if `dd.qubits() < n`.
|
|
27
|
+
* @return A vector DD for the all-zero state.
|
|
28
|
+
*/
|
|
29
|
+
VectorDD makeZeroState(std::size_t n, Package& dd, std::size_t start = 0);
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* @brief Construct a computational basis state \f$|b_{n-1}...b_0\rangle\f$
|
|
33
|
+
* @param n The number of qubits.
|
|
34
|
+
* @param state The state to construct.
|
|
35
|
+
* @param dd The DD package to use for making the vector DD.
|
|
36
|
+
* @param start The starting qubit index. Default is 0.
|
|
37
|
+
* @throws `std::invalid_argument`, if `dd.qubits() < n` or `size(state) < n`.
|
|
38
|
+
* @return A vector DD for the computational basis state.
|
|
39
|
+
*/
|
|
40
|
+
VectorDD makeBasisState(std::size_t n, const std::vector<bool>& state,
|
|
41
|
+
Package& dd, std::size_t start = 0);
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* @brief Construct a product state out of
|
|
45
|
+
* \f$\{0, 1, +, -, R, L\}^{\otimes n}\f$.
|
|
46
|
+
* @param n The number of qubits
|
|
47
|
+
* @param state The state to construct.
|
|
48
|
+
* @param dd The DD package to use for making the vector DD.
|
|
49
|
+
* @param start The starting qubit index. Default is 0.
|
|
50
|
+
* @throws `std::invalid_argument`, if `dd.qubits() < n` or `size(state) < n`.
|
|
51
|
+
* @return A vector DD for the product state.
|
|
52
|
+
*/
|
|
53
|
+
VectorDD makeBasisState(std::size_t n, const std::vector<BasisStates>& state,
|
|
54
|
+
Package& dd, std::size_t start = 0);
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* @brief Construct a GHZ state \f$|0...0\rangle + |1...1\rangle\f$.
|
|
58
|
+
* @param n The number of qubits.
|
|
59
|
+
* @param dd The DD package to use for making the vector DD.
|
|
60
|
+
* @throws `std::invalid_argument`, if `dd.qubits() < n`.
|
|
61
|
+
* @return A vector DD for the GHZ state.
|
|
62
|
+
*/
|
|
63
|
+
VectorDD makeGHZState(std::size_t n, Package& dd);
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* @brief Construct a W state.
|
|
67
|
+
* @details The W state is defined as
|
|
68
|
+
* \f[
|
|
69
|
+
* |0...01\rangle + |0...10\rangle + |10...0\rangle
|
|
70
|
+
* \f]
|
|
71
|
+
* @param n The number of qubits.
|
|
72
|
+
* @param dd The DD package to use for making the vector DD.
|
|
73
|
+
* @throws `std::invalid_argument`, if `dd.qubits() < n` or the number of qubits
|
|
74
|
+
* and currently set tolerance would lead to an underflow.
|
|
75
|
+
* @return A vector DD for the W state.
|
|
76
|
+
*/
|
|
77
|
+
VectorDD makeWState(std::size_t n, Package& dd);
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* @brief Construct a decision diagram from an arbitrary state vector.
|
|
81
|
+
* @param vec The state vector to convert to a DD.
|
|
82
|
+
* @param dd The DD package to use for making the vector DD.
|
|
83
|
+
* @throws `std::invalid_argument`, if `vec.size()` is not a power of two or
|
|
84
|
+
* `dd.qubits() < log2(vec.size()) - 1`.
|
|
85
|
+
* @return A vector DD representing the state.
|
|
86
|
+
*/
|
|
87
|
+
VectorDD makeStateFromVector(const CVec& vec, Package& dd);
|
|
88
|
+
|
|
89
|
+
/// @brief The strategy to wire two layers.
|
|
90
|
+
enum GenerationWireStrategy : std::uint8_t {
|
|
91
|
+
ROUNDROBIN, // Choose nodes in the next layer in a round-robin fashion.
|
|
92
|
+
RANDOM // Randomly choose nodes in the next layer.
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* @brief Generate exponentially large vector DD.
|
|
97
|
+
* @param levels The number of levels in the vector DD.
|
|
98
|
+
* @param dd The DD package to use for generating the vector DD.
|
|
99
|
+
* @throws `std::invalid_argument`, if `dd.qubits() < levels`.
|
|
100
|
+
* @return The exponentially large vector DD.
|
|
101
|
+
*/
|
|
102
|
+
VectorDD generateExponentialState(std::size_t levels, Package& dd);
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* @brief Generate exponentially large vector DD. Use @p seed for randomization.
|
|
106
|
+
* @param levels The number of levels in the vector DD.
|
|
107
|
+
* @param dd The DD package to use for generating the vector DD.
|
|
108
|
+
* @param seed The seed used for randomization.
|
|
109
|
+
* @throws `std::invalid_argument`, if `dd.qubits() < levels`.
|
|
110
|
+
* @return The exponentially large vector DD.
|
|
111
|
+
*/
|
|
112
|
+
VectorDD generateExponentialState(std::size_t levels, Package& dd,
|
|
113
|
+
std::size_t seed);
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* @brief Generate random vector DD.
|
|
117
|
+
* @param levels The number of levels in the vector DD.
|
|
118
|
+
* @param nodesPerLevel The number of nodes per level.
|
|
119
|
+
* @param strategy The strategy to wire two layers.
|
|
120
|
+
* @param dd The DD package to use for generating the vector DD.
|
|
121
|
+
* @throws `std::invalid_argument`, if `dd.qubits() < levels`.
|
|
122
|
+
* @return The random vector DD.
|
|
123
|
+
*/
|
|
124
|
+
VectorDD generateRandomState(std::size_t levels,
|
|
125
|
+
const std::vector<std::size_t>& nodesPerLevel,
|
|
126
|
+
GenerationWireStrategy strategy, Package& dd);
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* @brief Generate random vector DD. Use @p seed for randomization.
|
|
130
|
+
* @param levels The number of levels in the vector DD.
|
|
131
|
+
* @param nodesPerLevel The number of nodes per level.
|
|
132
|
+
* @param strategy The strategy to wire two layers.
|
|
133
|
+
* @param dd The DD package to use for generating the vector DD.
|
|
134
|
+
* @param seed The seed used for randomization.
|
|
135
|
+
* @throws `std::invalid_argument`, if `dd.qubits() < levels`, `levels <= 0`, or
|
|
136
|
+
* `nodesPerLevel.size() != levels`.
|
|
137
|
+
* @return The random vector DD.
|
|
138
|
+
*/
|
|
139
|
+
VectorDD generateRandomState(std::size_t levels,
|
|
140
|
+
const std::vector<std::size_t>& nodesPerLevel,
|
|
141
|
+
GenerationWireStrategy strategy, Package& dd,
|
|
142
|
+
std::size_t seed);
|
|
143
|
+
}; // namespace dd
|
|
@@ -0,0 +1,88 @@
|
|
|
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
|
+
/**
|
|
12
|
+
* @file StochasticNoiseOperationTable.hpp
|
|
13
|
+
* @brief Data structure for caching computed results of stochastic operations
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
#pragma once
|
|
17
|
+
|
|
18
|
+
#include "dd/statistics/TableStatistics.hpp"
|
|
19
|
+
#include "ir/Definitions.hpp"
|
|
20
|
+
#include "ir/operations/OpType.hpp"
|
|
21
|
+
|
|
22
|
+
#include <cassert>
|
|
23
|
+
#include <cstddef>
|
|
24
|
+
#include <cstdint>
|
|
25
|
+
#include <vector>
|
|
26
|
+
|
|
27
|
+
namespace dd {
|
|
28
|
+
template <class Edge> class StochasticNoiseOperationTable {
|
|
29
|
+
public:
|
|
30
|
+
explicit StochasticNoiseOperationTable(
|
|
31
|
+
const std::size_t nv,
|
|
32
|
+
const size_t numberOfStochasticOperations = qc::OpType::OpTypeEnd)
|
|
33
|
+
: nvars(nv), numberOfStochasticOperations_(numberOfStochasticOperations),
|
|
34
|
+
table(nv, std::vector<Edge>(numberOfStochasticOperations)) {
|
|
35
|
+
stats.entrySize = sizeof(Edge);
|
|
36
|
+
stats.numBuckets = nv * numberOfStochasticOperations;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/// Get a reference to the table
|
|
40
|
+
[[nodiscard]] const auto& getTable() const { return table; }
|
|
41
|
+
|
|
42
|
+
/// Get a reference to the statistics
|
|
43
|
+
[[nodiscard]] const auto& getStats() const noexcept { return stats; }
|
|
44
|
+
|
|
45
|
+
void resize(const std::size_t nq) {
|
|
46
|
+
nvars = nq;
|
|
47
|
+
table.resize(nvars, std::vector<Edge>(numberOfStochasticOperations_));
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
void insert(std::uint8_t kind, qc::Qubit target, const Edge& r) {
|
|
51
|
+
assert(kind <
|
|
52
|
+
numberOfStochasticOperations_); // There are new operations in
|
|
53
|
+
// OpType. Increase the value of
|
|
54
|
+
// numberOfOperations accordingly
|
|
55
|
+
table.at(target).at(kind) = r;
|
|
56
|
+
stats.trackInsert();
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
Edge* lookup(std::uint8_t kind, qc::Qubit target) {
|
|
60
|
+
assert(kind <
|
|
61
|
+
numberOfStochasticOperations_); // There are new operations in
|
|
62
|
+
// OpType. Increase the value of
|
|
63
|
+
// numberOfOperations accordingly
|
|
64
|
+
++stats.lookups;
|
|
65
|
+
auto& entry = table.at(target).at(kind);
|
|
66
|
+
if (entry.w.r == nullptr) {
|
|
67
|
+
return nullptr;
|
|
68
|
+
}
|
|
69
|
+
++stats.hits;
|
|
70
|
+
return &entry;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
void clear() {
|
|
74
|
+
if (stats.numEntries > 0) {
|
|
75
|
+
for (auto& t : table) {
|
|
76
|
+
std::fill(t.begin(), t.end(), Edge{});
|
|
77
|
+
}
|
|
78
|
+
stats.numEntries = 0;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
private:
|
|
83
|
+
std::size_t nvars;
|
|
84
|
+
size_t numberOfStochasticOperations_;
|
|
85
|
+
std::vector<std::vector<Edge>> table;
|
|
86
|
+
TableStatistics stats{};
|
|
87
|
+
};
|
|
88
|
+
} // namespace dd
|
|
@@ -0,0 +1,121 @@
|
|
|
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
|
+
/**
|
|
12
|
+
* @file UnaryComputeTable.hpp
|
|
13
|
+
* @brief Data structure for caching computed results of unary operations
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
#pragma once
|
|
17
|
+
|
|
18
|
+
#include "dd/statistics/TableStatistics.hpp"
|
|
19
|
+
|
|
20
|
+
#include <cstddef>
|
|
21
|
+
#include <functional>
|
|
22
|
+
#include <stdexcept>
|
|
23
|
+
#include <vector>
|
|
24
|
+
|
|
25
|
+
namespace dd {
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* @brief Data structure for caching computed results of unary operations
|
|
29
|
+
* @tparam OperandType type of the operation's operand
|
|
30
|
+
* @tparam ResultType type of the operation's result
|
|
31
|
+
*/
|
|
32
|
+
template <class OperandType, class ResultType> class UnaryComputeTable {
|
|
33
|
+
public:
|
|
34
|
+
/// Default number of buckets for the compute table
|
|
35
|
+
static constexpr std::size_t DEFAULT_NUM_BUCKETS = 32768U;
|
|
36
|
+
|
|
37
|
+
/// Default constructor
|
|
38
|
+
explicit UnaryComputeTable(const size_t numBuckets = DEFAULT_NUM_BUCKETS) {
|
|
39
|
+
// numBuckets must be a power of two
|
|
40
|
+
if ((numBuckets & (numBuckets - 1)) != 0) {
|
|
41
|
+
throw std::invalid_argument("Number of buckets must be a power of two.");
|
|
42
|
+
}
|
|
43
|
+
stats.entrySize = sizeof(Entry);
|
|
44
|
+
stats.numBuckets = numBuckets;
|
|
45
|
+
valid = std::vector(numBuckets, false);
|
|
46
|
+
table = std::vector<Entry>(numBuckets);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/// An entry in the compute table
|
|
50
|
+
struct Entry {
|
|
51
|
+
OperandType operand;
|
|
52
|
+
ResultType result;
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
/// Get a reference to the underlying table
|
|
56
|
+
[[nodiscard]] const auto& getTable() const { return table; }
|
|
57
|
+
|
|
58
|
+
/// Get a reference to the statistics
|
|
59
|
+
[[nodiscard]] const auto& getStats() const noexcept { return stats; }
|
|
60
|
+
|
|
61
|
+
/// Compute the hash value for a given operand
|
|
62
|
+
[[nodiscard]] std::size_t hash(const OperandType& a) const {
|
|
63
|
+
const auto mask = stats.numBuckets - 1;
|
|
64
|
+
return std::hash<OperandType>{}(a)&mask;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* @brief Insert a new entry into the compute table
|
|
69
|
+
* @details Any existing entry for the resulting hash value will be replaced.
|
|
70
|
+
* @param operand The operand
|
|
71
|
+
* @param result The result of the operation
|
|
72
|
+
*/
|
|
73
|
+
void insert(const OperandType& operand, const ResultType& result) {
|
|
74
|
+
const auto key = hash(operand);
|
|
75
|
+
if (valid[key]) {
|
|
76
|
+
++stats.collisions;
|
|
77
|
+
} else {
|
|
78
|
+
stats.trackInsert();
|
|
79
|
+
valid[key] = true;
|
|
80
|
+
}
|
|
81
|
+
table[key] = {operand, result};
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* @brief Look up a result in the compute table
|
|
86
|
+
* @param operand The operand
|
|
87
|
+
* @return A pointer to the result if it is found, otherwise nullptr.
|
|
88
|
+
*/
|
|
89
|
+
ResultType* lookup(const OperandType& operand) {
|
|
90
|
+
ResultType* result = nullptr;
|
|
91
|
+
++stats.lookups;
|
|
92
|
+
const auto key = hash(operand);
|
|
93
|
+
|
|
94
|
+
if (!valid[key]) {
|
|
95
|
+
return result;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
auto& entry = table[key];
|
|
99
|
+
if (entry.operand != operand) {
|
|
100
|
+
return result;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
++stats.hits;
|
|
104
|
+
return &entry.result;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* @brief Clear the compute table
|
|
109
|
+
* @details Sets all entries to invalid.
|
|
110
|
+
*/
|
|
111
|
+
void clear() { valid = std::vector(stats.numBuckets, false); }
|
|
112
|
+
|
|
113
|
+
private:
|
|
114
|
+
/// The actual table storing the entries
|
|
115
|
+
std::vector<Entry> table;
|
|
116
|
+
/// Dynamic bitset to mark valid entries
|
|
117
|
+
std::vector<bool> valid;
|
|
118
|
+
/// Statistics of the compute table
|
|
119
|
+
TableStatistics stats{};
|
|
120
|
+
};
|
|
121
|
+
} // namespace dd
|
|
@@ -0,0 +1,243 @@
|
|
|
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
|
+
/**
|
|
12
|
+
* @file UniqueTable.hpp
|
|
13
|
+
* @brief Data structure for uniquely storing DD nodes
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
#pragma once
|
|
17
|
+
|
|
18
|
+
#include "dd/Edge.hpp"
|
|
19
|
+
#include "dd/MemoryManager.hpp"
|
|
20
|
+
#include "dd/Node.hpp"
|
|
21
|
+
#include "dd/statistics/UniqueTableStatistics.hpp"
|
|
22
|
+
#include "ir/Definitions.hpp"
|
|
23
|
+
|
|
24
|
+
#include <cstddef>
|
|
25
|
+
#include <cstdint>
|
|
26
|
+
#include <functional>
|
|
27
|
+
#include <iostream>
|
|
28
|
+
#include <nlohmann/json.hpp>
|
|
29
|
+
#include <type_traits>
|
|
30
|
+
#include <vector>
|
|
31
|
+
|
|
32
|
+
namespace dd {
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* @brief Data structure for uniquely storing DD nodes
|
|
36
|
+
*/
|
|
37
|
+
class UniqueTable {
|
|
38
|
+
public:
|
|
39
|
+
/**
|
|
40
|
+
* @brief The initial garbage collection limit.
|
|
41
|
+
* @details The initial garbage collection limit is the number of entries that
|
|
42
|
+
* must be present in the table before garbage collection is triggered.
|
|
43
|
+
* Increasing this number reduces the number of garbage collections, but
|
|
44
|
+
* increases the memory usage.
|
|
45
|
+
*/
|
|
46
|
+
static constexpr std::size_t INITIAL_GC_LIMIT = 131072U;
|
|
47
|
+
|
|
48
|
+
struct UniqueTableConfig {
|
|
49
|
+
/// The number of variables
|
|
50
|
+
std::size_t nVars = 0U;
|
|
51
|
+
|
|
52
|
+
/// The number of hash buckets to use (has to be a power of two)
|
|
53
|
+
std::size_t nBuckets = 32768;
|
|
54
|
+
|
|
55
|
+
/// The initial garbage collection limit
|
|
56
|
+
std::size_t initialGCLimit = INITIAL_GC_LIMIT;
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* @brief The default constructor
|
|
61
|
+
* @param manager The memory manager to use
|
|
62
|
+
* @param config The configuration for the unique table
|
|
63
|
+
* @details The MemoryManager shall be constructed from the same type that the
|
|
64
|
+
* unique table is then used for in the lookup method.
|
|
65
|
+
*/
|
|
66
|
+
UniqueTable(MemoryManager& manager, const UniqueTableConfig& config);
|
|
67
|
+
|
|
68
|
+
void resize(std::size_t nVars);
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* @brief The hash function for the hash table.
|
|
72
|
+
* @details The hash function just combines the hashes of the edges of the
|
|
73
|
+
* node. The hash value is masked to ensure that it is in the range
|
|
74
|
+
* [0, nBuckets - 1].
|
|
75
|
+
* @param p The node to hash.
|
|
76
|
+
* @returns The hash value of the node.
|
|
77
|
+
*/
|
|
78
|
+
template <class Node> [[nodiscard]] std::size_t hash(const Node& p) const {
|
|
79
|
+
static_assert(std::is_base_of_v<NodeBase, Node>,
|
|
80
|
+
"Node must be derived from NodeBase");
|
|
81
|
+
const std::size_t mask = cfg.nBuckets - 1;
|
|
82
|
+
std::size_t key = 0U;
|
|
83
|
+
for (const auto& succ : p.e) {
|
|
84
|
+
qc::hashCombine(key, std::hash<Edge<Node>>{}(succ));
|
|
85
|
+
}
|
|
86
|
+
key &= mask;
|
|
87
|
+
return key;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
template <class Node>
|
|
91
|
+
[[nodiscard]] static bool nodesAreEqual(const Node& p, const Node& q) {
|
|
92
|
+
if constexpr (std::is_same_v<Node, dNode>) {
|
|
93
|
+
return (p.e == q.e && (p.flags == q.flags));
|
|
94
|
+
} else {
|
|
95
|
+
return p.e == q.e;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// Lookup a node in the unique table for the appropriate variable and insert
|
|
100
|
+
// it if it has not been found. Only normalized nodes shall be stored.
|
|
101
|
+
template <class Node> [[nodiscard]] Node* lookup(Node* p) {
|
|
102
|
+
static_assert(std::is_base_of_v<NodeBase, Node>,
|
|
103
|
+
"Node must be derived from NodeBase");
|
|
104
|
+
// there are unique terminal nodes
|
|
105
|
+
if (NodeBase::isTerminal(p)) {
|
|
106
|
+
return p;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
const auto key = hash(*p);
|
|
110
|
+
const auto v = p->v;
|
|
111
|
+
++stats[v].lookups;
|
|
112
|
+
|
|
113
|
+
// search bucket in table corresponding to hashed value for the given node
|
|
114
|
+
// and return it if found.
|
|
115
|
+
if (auto* hashedNode = searchTable(*p, key);
|
|
116
|
+
!Node::isTerminal(hashedNode)) {
|
|
117
|
+
return hashedNode;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
// if node not found -> add it to front of unique table bucket
|
|
121
|
+
p->setNext(tables[v][key]);
|
|
122
|
+
tables[v][key] = p;
|
|
123
|
+
stats[v].trackInsert();
|
|
124
|
+
|
|
125
|
+
return p;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/// Get a reference to the table
|
|
129
|
+
[[nodiscard]] const auto& getTables() const { return tables; }
|
|
130
|
+
|
|
131
|
+
/// Get a reference to the statistics
|
|
132
|
+
[[nodiscard]] const auto& getStats() const noexcept { return stats; }
|
|
133
|
+
|
|
134
|
+
/// Get a reference to individual statistics
|
|
135
|
+
[[nodiscard]] const UniqueTableStatistics&
|
|
136
|
+
getStats(std::size_t idx) const noexcept;
|
|
137
|
+
|
|
138
|
+
/// Get a JSON object with the statistics
|
|
139
|
+
[[nodiscard]] nlohmann::basic_json<>
|
|
140
|
+
getStatsJson(bool includeIndividualTables = false) const;
|
|
141
|
+
|
|
142
|
+
/// Get the total number of entries
|
|
143
|
+
[[nodiscard]] std::size_t getNumEntries() const noexcept;
|
|
144
|
+
|
|
145
|
+
/// Count the number of marked entries
|
|
146
|
+
[[nodiscard]] std::size_t countMarkedEntries() const noexcept;
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* @brief Determine whether the table possibly requires garbage collection.
|
|
150
|
+
*/
|
|
151
|
+
[[nodiscard]] bool possiblyNeedsCollection() const;
|
|
152
|
+
|
|
153
|
+
std::size_t garbageCollect(bool force = false);
|
|
154
|
+
|
|
155
|
+
void clear();
|
|
156
|
+
|
|
157
|
+
template <class Node> void print() const {
|
|
158
|
+
static_assert(std::is_base_of_v<NodeBase, Node>,
|
|
159
|
+
"Node must be derived from NodeBase");
|
|
160
|
+
auto q = cfg.nVars - 1U;
|
|
161
|
+
for (auto it = tables.rbegin(); it != tables.rend(); ++it) {
|
|
162
|
+
auto& table = *it;
|
|
163
|
+
std::cout << "\tq" << q << ":"
|
|
164
|
+
<< "\n";
|
|
165
|
+
for (std::size_t key = 0; key < table.size(); ++key) {
|
|
166
|
+
auto* p = static_cast<Node*>(table[key]);
|
|
167
|
+
if (p != nullptr) {
|
|
168
|
+
std::cout << "\tkey=" << key << ": ";
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
while (p != nullptr) {
|
|
172
|
+
std::cout << "\t\t" << std::hex
|
|
173
|
+
<< reinterpret_cast<std::uintptr_t>(p);
|
|
174
|
+
for (const auto& e : p->e) {
|
|
175
|
+
std::cout << " p" << reinterpret_cast<std::uintptr_t>(e.p) << "(r"
|
|
176
|
+
<< reinterpret_cast<std::uintptr_t>(e.w.r) << " i"
|
|
177
|
+
<< reinterpret_cast<std::uintptr_t>(e.w.i) << ")";
|
|
178
|
+
}
|
|
179
|
+
std::cout << std::dec << "\n";
|
|
180
|
+
p = p->next();
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
--q;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
private:
|
|
188
|
+
/// Typedef for a bucket in the table
|
|
189
|
+
using Bucket = NodeBase*;
|
|
190
|
+
/// Typedef for the table
|
|
191
|
+
using Table = std::vector<Bucket>;
|
|
192
|
+
|
|
193
|
+
UniqueTableConfig cfg;
|
|
194
|
+
|
|
195
|
+
/// The current garbage collection limit
|
|
196
|
+
std::size_t gcLimit;
|
|
197
|
+
|
|
198
|
+
/// A pointer to the memory manager for the nodes stored in the table.
|
|
199
|
+
MemoryManager* memoryManager;
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* @brief The actual tables (one for each variable)
|
|
203
|
+
* @details Each hash table is an array of buckets. Each bucket is a linked
|
|
204
|
+
* list of entries. The linked list is implemented by using the next pointer
|
|
205
|
+
* of the entries.
|
|
206
|
+
*/
|
|
207
|
+
std::vector<Table> tables;
|
|
208
|
+
|
|
209
|
+
/// A collection of statistics
|
|
210
|
+
std::vector<UniqueTableStatistics> stats;
|
|
211
|
+
|
|
212
|
+
/**
|
|
213
|
+
* @brief Search for a node in the hash table with the given key.
|
|
214
|
+
* @param p The node to search for.
|
|
215
|
+
* @param key The hashed value used to search the table.
|
|
216
|
+
* @returns A pointer to the node if found or Node::getTerminal() otherwise.
|
|
217
|
+
*/
|
|
218
|
+
template <class Node>
|
|
219
|
+
[[nodiscard]] Node* searchTable(Node& p, const std::size_t& key) {
|
|
220
|
+
static_assert(std::is_base_of_v<NodeBase, Node>,
|
|
221
|
+
"Node must be derived from NodeBase");
|
|
222
|
+
const auto v = p.v;
|
|
223
|
+
Node* bucket = static_cast<Node*>(tables[v][key]);
|
|
224
|
+
while (bucket != nullptr) {
|
|
225
|
+
if (nodesAreEqual(p, *bucket)) {
|
|
226
|
+
// Match found
|
|
227
|
+
if (&p != bucket) {
|
|
228
|
+
// put node pointed to by p on available chain
|
|
229
|
+
memoryManager->returnEntry(p);
|
|
230
|
+
}
|
|
231
|
+
++stats[v].hits;
|
|
232
|
+
return bucket;
|
|
233
|
+
}
|
|
234
|
+
++stats[v].collisions;
|
|
235
|
+
bucket = bucket->next();
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
// Node not found in bucket
|
|
239
|
+
return Node::getTerminal();
|
|
240
|
+
}
|
|
241
|
+
};
|
|
242
|
+
|
|
243
|
+
} // namespace dd
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
|
|
2
|
+
#ifndef MQT_CORE_DD_EXPORT_H
|
|
3
|
+
#define MQT_CORE_DD_EXPORT_H
|
|
4
|
+
|
|
5
|
+
#ifdef MQT_CORE_DD_STATIC_DEFINE
|
|
6
|
+
# define MQT_CORE_DD_EXPORT
|
|
7
|
+
# define MQT_CORE_DD_NO_EXPORT
|
|
8
|
+
#else
|
|
9
|
+
# ifndef MQT_CORE_DD_EXPORT
|
|
10
|
+
# ifdef mqt_core_dd_EXPORTS
|
|
11
|
+
/* We are building this library */
|
|
12
|
+
# define MQT_CORE_DD_EXPORT __attribute__((visibility("default")))
|
|
13
|
+
# else
|
|
14
|
+
/* We are using this library */
|
|
15
|
+
# define MQT_CORE_DD_EXPORT __attribute__((visibility("default")))
|
|
16
|
+
# endif
|
|
17
|
+
# endif
|
|
18
|
+
|
|
19
|
+
# ifndef MQT_CORE_DD_NO_EXPORT
|
|
20
|
+
# define MQT_CORE_DD_NO_EXPORT __attribute__((visibility("hidden")))
|
|
21
|
+
# endif
|
|
22
|
+
#endif
|
|
23
|
+
|
|
24
|
+
#ifndef MQT_CORE_DD_DEPRECATED
|
|
25
|
+
# define MQT_CORE_DD_DEPRECATED __attribute__ ((__deprecated__))
|
|
26
|
+
#endif
|
|
27
|
+
|
|
28
|
+
#ifndef MQT_CORE_DD_DEPRECATED_EXPORT
|
|
29
|
+
# define MQT_CORE_DD_DEPRECATED_EXPORT MQT_CORE_DD_EXPORT MQT_CORE_DD_DEPRECATED
|
|
30
|
+
#endif
|
|
31
|
+
|
|
32
|
+
#ifndef MQT_CORE_DD_DEPRECATED_NO_EXPORT
|
|
33
|
+
# define MQT_CORE_DD_DEPRECATED_NO_EXPORT MQT_CORE_DD_NO_EXPORT MQT_CORE_DD_DEPRECATED
|
|
34
|
+
#endif
|
|
35
|
+
|
|
36
|
+
/* NOLINTNEXTLINE(readability-avoid-unconditional-preprocessor-if) */
|
|
37
|
+
#if 0 /* DEFINE_NO_DEPRECATED */
|
|
38
|
+
# ifndef MQT_CORE_DD_NO_DEPRECATED
|
|
39
|
+
# define MQT_CORE_DD_NO_DEPRECATED
|
|
40
|
+
# endif
|
|
41
|
+
#endif
|
|
42
|
+
|
|
43
|
+
#endif /* MQT_CORE_DD_EXPORT_H */
|