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,416 @@
|
|
|
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/Complex.hpp"
|
|
14
|
+
#include "dd/DDDefinitions.hpp"
|
|
15
|
+
|
|
16
|
+
#include <array>
|
|
17
|
+
#include <complex>
|
|
18
|
+
#include <cstddef>
|
|
19
|
+
#include <functional>
|
|
20
|
+
#include <string>
|
|
21
|
+
#include <type_traits>
|
|
22
|
+
#include <unordered_set>
|
|
23
|
+
|
|
24
|
+
namespace dd {
|
|
25
|
+
|
|
26
|
+
struct vNode;
|
|
27
|
+
struct mNode;
|
|
28
|
+
struct dNode;
|
|
29
|
+
class ComplexNumbers;
|
|
30
|
+
class MemoryManager;
|
|
31
|
+
|
|
32
|
+
template <typename T>
|
|
33
|
+
using isVector = std::enable_if_t<std::is_same_v<T, vNode>, bool>;
|
|
34
|
+
template <typename T>
|
|
35
|
+
using isMatrix = std::enable_if_t<std::is_same_v<T, mNode>, bool>;
|
|
36
|
+
template <typename T>
|
|
37
|
+
using isDensityMatrix = std::enable_if_t<std::is_same_v<T, dNode>, bool>;
|
|
38
|
+
template <typename T>
|
|
39
|
+
using isMatrixVariant =
|
|
40
|
+
std::enable_if_t<std::is_same_v<T, mNode> || std::is_same_v<T, dNode>,
|
|
41
|
+
bool>;
|
|
42
|
+
|
|
43
|
+
using AmplitudeFunc = std::function<void(std::size_t, const std::complex<fp>&)>;
|
|
44
|
+
using ProbabilityFunc = std::function<void(std::size_t, const fp&)>;
|
|
45
|
+
using MatrixEntryFunc =
|
|
46
|
+
std::function<void(std::size_t, std::size_t, const std::complex<fp>&)>;
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* @brief A weighted edge pointing to a DD node
|
|
50
|
+
* @details This struct is used to represent the core data structure of the DD
|
|
51
|
+
* package. It is a wrapper around a pointer to a DD node and a complex edge
|
|
52
|
+
* weight.
|
|
53
|
+
* @tparam Node Type of the DD node
|
|
54
|
+
*/
|
|
55
|
+
template <class Node> struct Edge {
|
|
56
|
+
Node* p;
|
|
57
|
+
Complex w;
|
|
58
|
+
|
|
59
|
+
/// Comparing two DD edges with another involves comparing the respective
|
|
60
|
+
/// pointers and checking whether the corresponding weights are "close enough"
|
|
61
|
+
/// according to a given tolerance this notion of equivalence is chosen to
|
|
62
|
+
/// counter floating point inaccuracies
|
|
63
|
+
constexpr bool operator==(const Edge& other) const {
|
|
64
|
+
return p == other.p && w.approximatelyEquals(other.w);
|
|
65
|
+
}
|
|
66
|
+
constexpr bool operator!=(const Edge& other) const {
|
|
67
|
+
return !operator==(other);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* @brief Get the static zero terminal
|
|
72
|
+
* @return the zero terminal
|
|
73
|
+
*/
|
|
74
|
+
static constexpr Edge zero() { return terminal(Complex::zero()); }
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* @brief Get the static one terminal
|
|
78
|
+
* @return the one terminal
|
|
79
|
+
*/
|
|
80
|
+
static constexpr Edge one() { return terminal(Complex::one()); }
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* @brief Get a terminal DD with a given edge weight
|
|
84
|
+
* @param w the edge weight
|
|
85
|
+
* @return the terminal DD representing (w)
|
|
86
|
+
*/
|
|
87
|
+
[[nodiscard]] static constexpr Edge terminal(const Complex& w) {
|
|
88
|
+
return Edge{Node::getTerminal(), w};
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* @brief Check whether an edge requires tracking.
|
|
93
|
+
* @param e The edge to check.
|
|
94
|
+
* @return Whether the edge requires tracking.
|
|
95
|
+
*/
|
|
96
|
+
[[nodiscard]] static constexpr bool trackingRequired(const Edge& e) {
|
|
97
|
+
return !e.isTerminal() || !constants::isStaticNumber(e.w.r) ||
|
|
98
|
+
!constants::isStaticNumber(e.w.i);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* @brief Check whether this is a terminal
|
|
103
|
+
* @return whether this is a terminal
|
|
104
|
+
*/
|
|
105
|
+
[[nodiscard]] constexpr bool isTerminal() const {
|
|
106
|
+
return Node::isTerminal(p);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* @brief Check whether this is a zero terminal
|
|
111
|
+
* @return whether this is a zero terminal
|
|
112
|
+
*/
|
|
113
|
+
[[nodiscard]] constexpr bool isZeroTerminal() const {
|
|
114
|
+
return isTerminal() && w.exactlyZero();
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* @brief Check whether this is a one terminal
|
|
119
|
+
* @return whether this is a one terminal
|
|
120
|
+
*/
|
|
121
|
+
[[nodiscard]] constexpr bool isOneTerminal() const {
|
|
122
|
+
return isTerminal() && w.exactlyOne();
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* @brief Get a single element of the vector or matrix represented by the DD
|
|
127
|
+
* @param numQubits number of qubits in the considered DD
|
|
128
|
+
* @param decisions string {0, 1, 2, 3}^n describing which outgoing edge
|
|
129
|
+
* should be followed (for vectors entries are limited to 0 and 1) If string
|
|
130
|
+
* is longer than required, the additional characters are ignored.
|
|
131
|
+
* @return the complex amplitude of the specified element
|
|
132
|
+
*/
|
|
133
|
+
[[nodiscard]] std::complex<fp>
|
|
134
|
+
getValueByPath(std::size_t numQubits, const std::string& decisions) const;
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* @brief Get the size of the DD
|
|
138
|
+
* @details The size of a DD is defined as the number of nodes (including the
|
|
139
|
+
* terminal node) in the DD.
|
|
140
|
+
* @return the size of the DD
|
|
141
|
+
*/
|
|
142
|
+
[[nodiscard]] std::size_t size() const;
|
|
143
|
+
|
|
144
|
+
/// @brief Mark the edge as used.
|
|
145
|
+
void mark() const noexcept;
|
|
146
|
+
|
|
147
|
+
/// @brief Unmark the edge.
|
|
148
|
+
void unmark() const noexcept;
|
|
149
|
+
|
|
150
|
+
private:
|
|
151
|
+
/**
|
|
152
|
+
* @brief Recursively traverse the DD and count the number of nodes
|
|
153
|
+
* @param visited set of visited nodes
|
|
154
|
+
* @return the size of the DD
|
|
155
|
+
*/
|
|
156
|
+
[[nodiscard]] std::size_t
|
|
157
|
+
size(std::unordered_set<const Node*>& visited) const;
|
|
158
|
+
|
|
159
|
+
public:
|
|
160
|
+
/**
|
|
161
|
+
* @brief Get a normalized vector DD from a fresh node and a list of edges
|
|
162
|
+
* @tparam T template parameter to enable this function only for vNode
|
|
163
|
+
* @param p the fresh node
|
|
164
|
+
* @param e the list of edges that form the successor nodes
|
|
165
|
+
* @param mm a reference to the memory manager (for returning unused nodes)
|
|
166
|
+
* @param cn a reference to the complex number manager (for adding new
|
|
167
|
+
* complex numbers)
|
|
168
|
+
* @return the normalized vector DD
|
|
169
|
+
*/
|
|
170
|
+
template <typename T = Node, isVector<T> = true>
|
|
171
|
+
static auto normalize(Node* p, const std::array<Edge, RADIX>& e,
|
|
172
|
+
MemoryManager& mm, ComplexNumbers& cn) -> Edge;
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* @brief Get a single element of the vector represented by the DD
|
|
176
|
+
* @tparam T template parameter to enable this function only for vNode
|
|
177
|
+
* @param i index of the element
|
|
178
|
+
* @return the complex value of the amplitude
|
|
179
|
+
*/
|
|
180
|
+
template <typename T = Node, isVector<T> = true>
|
|
181
|
+
[[nodiscard]] std::complex<fp> getValueByIndex(std::size_t i) const;
|
|
182
|
+
|
|
183
|
+
/**
|
|
184
|
+
* @brief Get the vector represented by the DD
|
|
185
|
+
* @tparam T template parameter to enable this function only for vNode
|
|
186
|
+
* @param threshold amplitudes with a magnitude below this threshold will be
|
|
187
|
+
* ignored
|
|
188
|
+
* @return the vector
|
|
189
|
+
*/
|
|
190
|
+
template <typename T = Node, isVector<T> = true>
|
|
191
|
+
[[nodiscard]] CVec getVector(fp threshold = 0.) const;
|
|
192
|
+
|
|
193
|
+
/**
|
|
194
|
+
* @brief Get the sparse vector represented by the DD
|
|
195
|
+
* @tparam T template parameter to enable this function only for vNode
|
|
196
|
+
* @param threshold amplitudes with a magnitude below this threshold will be
|
|
197
|
+
* ignored
|
|
198
|
+
* @return the sparse vector
|
|
199
|
+
*/
|
|
200
|
+
template <typename T = Node, isVector<T> = true>
|
|
201
|
+
[[nodiscard]] SparseCVec getSparseVector(fp threshold = 0.) const;
|
|
202
|
+
|
|
203
|
+
/**
|
|
204
|
+
* @brief Print the vector represented by the DD
|
|
205
|
+
* @tparam T template parameter to enable this function only for vNode
|
|
206
|
+
* @note This function scales exponentially with the number of qubits.
|
|
207
|
+
*/
|
|
208
|
+
template <typename T = Node, isVector<T> = true> void printVector() const;
|
|
209
|
+
|
|
210
|
+
/**
|
|
211
|
+
* @brief Add the amplitudes of a vector DD to a vector
|
|
212
|
+
* @tparam T template parameter to enable this function only for vNode
|
|
213
|
+
* @param amplitudes the vector to add to
|
|
214
|
+
*/
|
|
215
|
+
template <typename T = Node, isVector<T> = true>
|
|
216
|
+
void addToVector(CVec& amplitudes) const;
|
|
217
|
+
|
|
218
|
+
private:
|
|
219
|
+
/**
|
|
220
|
+
* @brief Recursively traverse the DD and call a function for each non-zero
|
|
221
|
+
* amplitude.
|
|
222
|
+
* @details Scales with the number of non-zero amplitudes.
|
|
223
|
+
* @tparam T template parameter to enable this function only for vNode
|
|
224
|
+
* @param amp the accumulated amplitude from previous traversals
|
|
225
|
+
* @param i the current index in the vector
|
|
226
|
+
* @param f This function is called for each non-zero amplitude with the
|
|
227
|
+
* index and the amplitude as arguments.
|
|
228
|
+
* @param threshold amplitude with a magnitude below this threshold will be
|
|
229
|
+
* ignored
|
|
230
|
+
*/
|
|
231
|
+
template <typename T = Node, isVector<T> = true>
|
|
232
|
+
void traverseVector(const std::complex<fp>& amp, std::size_t i,
|
|
233
|
+
AmplitudeFunc f, fp threshold = 0.) const;
|
|
234
|
+
|
|
235
|
+
public:
|
|
236
|
+
/**
|
|
237
|
+
* @brief Get a normalized (density) matrix DD from a fresh node and a list
|
|
238
|
+
* of edges
|
|
239
|
+
* @tparam T template parameter to enable this function only for matrix nodes
|
|
240
|
+
* @param p the fresh node
|
|
241
|
+
* @param e the list of edges that form the successor nodes
|
|
242
|
+
* @param mm a reference to the memory manager (for returning unused nodes)
|
|
243
|
+
* @param cn a reference to the complex number manager (for adding new
|
|
244
|
+
* complex numbers)
|
|
245
|
+
* @return the normalized (density) matrix DD
|
|
246
|
+
*/
|
|
247
|
+
template <typename T = Node, isMatrixVariant<T> = true>
|
|
248
|
+
static auto normalize(Node* p, const std::array<Edge, NEDGE>& e,
|
|
249
|
+
MemoryManager& mm, ComplexNumbers& cn) -> Edge;
|
|
250
|
+
|
|
251
|
+
/**
|
|
252
|
+
* @brief Check whether the matrix represented by the DD is the identity
|
|
253
|
+
* @tparam T template parameter to enable this function only for matrix nodes
|
|
254
|
+
* @return whether the matrix is the identity
|
|
255
|
+
*/
|
|
256
|
+
template <typename T = Node, isMatrixVariant<T> = true>
|
|
257
|
+
[[nodiscard]] bool isIdentity(const bool upToGlobalPhase = true) const {
|
|
258
|
+
if (!isTerminal()) {
|
|
259
|
+
return false;
|
|
260
|
+
}
|
|
261
|
+
if (upToGlobalPhase) {
|
|
262
|
+
return !w.exactlyZero();
|
|
263
|
+
}
|
|
264
|
+
return w.exactlyOne();
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
/**
|
|
268
|
+
* @brief Get a single element of the matrix represented by the DD
|
|
269
|
+
* @tparam T template parameter to enable this function only for matrix nodes
|
|
270
|
+
* @param numQubits number of qubits in the considered DD
|
|
271
|
+
* @param i row index of the element
|
|
272
|
+
* @param j column index of the element
|
|
273
|
+
* @return the complex value of the entry
|
|
274
|
+
*/
|
|
275
|
+
template <typename T = Node, isMatrixVariant<T> = true>
|
|
276
|
+
[[nodiscard]] std::complex<fp>
|
|
277
|
+
getValueByIndex(std::size_t numQubits, std::size_t i, std::size_t j) const;
|
|
278
|
+
|
|
279
|
+
/**
|
|
280
|
+
* @brief Get the matrix represented by the DD
|
|
281
|
+
* @tparam T template parameter to enable this function only for matrix nodes
|
|
282
|
+
* @param numQubits number of qubits in the considered DD
|
|
283
|
+
* @param threshold entries with a magnitude below this threshold will be
|
|
284
|
+
* ignored
|
|
285
|
+
* @return the matrix
|
|
286
|
+
*/
|
|
287
|
+
template <typename T = Node, isMatrixVariant<T> = true>
|
|
288
|
+
[[nodiscard]] CMat getMatrix(std::size_t numQubits, fp threshold = 0.) const;
|
|
289
|
+
|
|
290
|
+
/**
|
|
291
|
+
* @brief Get the sparse matrix represented by the DD
|
|
292
|
+
* @tparam T template parameter to enable this function only for matrix nodes
|
|
293
|
+
* @param numQubits number of qubits in the considered DD
|
|
294
|
+
* @param threshold entries with a magnitude below this threshold will be
|
|
295
|
+
* ignored
|
|
296
|
+
* @return the sparse matrix
|
|
297
|
+
*/
|
|
298
|
+
template <typename T = Node, isMatrixVariant<T> = true>
|
|
299
|
+
[[nodiscard]] SparseCMat getSparseMatrix(std::size_t numQubits,
|
|
300
|
+
fp threshold = 0.) const;
|
|
301
|
+
|
|
302
|
+
/**
|
|
303
|
+
* @brief Print the matrix represented by the DD
|
|
304
|
+
* @tparam T template parameter to enable this function only for matrix nodes
|
|
305
|
+
* @param numQubits number of qubits in the considered DD
|
|
306
|
+
* @note This function scales exponentially with the number of qubits.
|
|
307
|
+
*/
|
|
308
|
+
template <typename T = Node, isMatrixVariant<T> = true>
|
|
309
|
+
void printMatrix(std::size_t numQubits) const;
|
|
310
|
+
|
|
311
|
+
/**
|
|
312
|
+
* @brief Recursively traverse the DD and call a function for each non-zero
|
|
313
|
+
* matrix entry.
|
|
314
|
+
* @tparam T template parameter to enable this function only for matrix nodes
|
|
315
|
+
* @param amp the accumulated amplitude from previous traversals
|
|
316
|
+
* @param i the current row index in the matrix
|
|
317
|
+
* @param j the current column index in the matrix
|
|
318
|
+
* @param f This function is called for each non-zero matrix entry with the
|
|
319
|
+
* row index, the column index and the amplitude as arguments.
|
|
320
|
+
* @param level the current level in the DD (ranges from 1 to n for regular
|
|
321
|
+
* nodes and is 0 for the terminal node)
|
|
322
|
+
* @param threshold entries with a magnitude below this threshold will be
|
|
323
|
+
* ignored
|
|
324
|
+
*/
|
|
325
|
+
template <typename T = Node, isMatrixVariant<T> = true>
|
|
326
|
+
void traverseMatrix(const std::complex<fp>& amp, std::size_t i, std::size_t j,
|
|
327
|
+
MatrixEntryFunc f, std::size_t level,
|
|
328
|
+
fp threshold = 0.) const;
|
|
329
|
+
|
|
330
|
+
template <typename T = Node, isDensityMatrix<T> = true>
|
|
331
|
+
[[maybe_unused]] static void setDensityConjugateTrue(Edge& e) {
|
|
332
|
+
Node::setConjugateTempFlagTrue(e.p);
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
template <typename T = Node, isDensityMatrix<T> = true>
|
|
336
|
+
[[maybe_unused]] static void setFirstEdgeDensityPathTrue(Edge& e) {
|
|
337
|
+
Node::setNonReduceTempFlagTrue(e.p);
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
template <typename T = Node, isDensityMatrix<T> = true>
|
|
341
|
+
static void setDensityMatrixTrue(Edge& e) {
|
|
342
|
+
Node::setDensityMatTempFlagTrue(e.p);
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
template <typename T = Node, isDensityMatrix<T> = true>
|
|
346
|
+
static void alignDensityEdge(Edge& e) {
|
|
347
|
+
Node::alignDensityNode(e.p);
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
template <typename T = Node, isDensityMatrix<T> = true>
|
|
351
|
+
static void revertDmChangesToEdges(Edge& x, Edge& y) {
|
|
352
|
+
revertDmChangesToEdge(x);
|
|
353
|
+
revertDmChangesToEdge(y);
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
template <typename T = Node, isDensityMatrix<T> = true>
|
|
357
|
+
static void revertDmChangesToEdge(Edge& x) {
|
|
358
|
+
Node::revertDmChangesToNode(x.p);
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
template <typename T = Node, isDensityMatrix<T> = true>
|
|
362
|
+
static void applyDmChangesToEdges(Edge& x, Edge& y) {
|
|
363
|
+
applyDmChangesToEdge(x);
|
|
364
|
+
applyDmChangesToEdge(y);
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
template <typename T = Node, isDensityMatrix<T> = true>
|
|
368
|
+
static void applyDmChangesToEdge(Edge& x) {
|
|
369
|
+
Node::applyDmChangesToNode(x.p);
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
/**
|
|
373
|
+
* @brief Get the sparse probability vector for the underlying density matrix
|
|
374
|
+
* @tparam T template parameter to enable this function only for dNode
|
|
375
|
+
* @param numQubits number of qubits in the considered DD
|
|
376
|
+
* @param threshold probabilities below this threshold will be ignored
|
|
377
|
+
* @return the sparse probability vector
|
|
378
|
+
*/
|
|
379
|
+
template <typename T = Node, isDensityMatrix<T> = true>
|
|
380
|
+
[[nodiscard]] SparsePVec getSparseProbabilityVector(std::size_t numQubits,
|
|
381
|
+
fp threshold = 0.) const;
|
|
382
|
+
|
|
383
|
+
/**
|
|
384
|
+
* @brief Get the sparse probability vector for the underlying density matrix
|
|
385
|
+
* @tparam T template parameter to enable this function only for dNode
|
|
386
|
+
* @param numQubits number of qubits in the considered DD
|
|
387
|
+
* @param threshold probabilities below this threshold will be ignored
|
|
388
|
+
* @return the sparse probability vector (using strings as keys)
|
|
389
|
+
*/
|
|
390
|
+
template <typename T = Node, isDensityMatrix<T> = true>
|
|
391
|
+
[[nodiscard]] SparsePVecStrKeys
|
|
392
|
+
getSparseProbabilityVectorStrKeys(std::size_t numQubits,
|
|
393
|
+
fp threshold = 0.) const;
|
|
394
|
+
|
|
395
|
+
private:
|
|
396
|
+
/**
|
|
397
|
+
* @brief Recursively traverse diagonal of the DD and call a function for each
|
|
398
|
+
* non-zero entry.
|
|
399
|
+
* @tparam T template parameter to enable this function only for dNode
|
|
400
|
+
* @param prob the accumulated probability from previous traversals
|
|
401
|
+
* @param i the current diagonal index in the matrix
|
|
402
|
+
* @param f This function is called for each non-zero entry with the
|
|
403
|
+
* diagonal index and the probability as arguments.
|
|
404
|
+
* @param level the current level in the DD (ranges from 1 to n for regular
|
|
405
|
+
* nodes and is 0 for the terminal node)
|
|
406
|
+
* @param threshold probabilities below this threshold will be ignored
|
|
407
|
+
*/
|
|
408
|
+
template <typename T = Node, isDensityMatrix<T> = true>
|
|
409
|
+
void traverseDiagonal(const fp& prob, std::size_t i, ProbabilityFunc f,
|
|
410
|
+
std::size_t level, fp threshold = 0.) const;
|
|
411
|
+
};
|
|
412
|
+
} // namespace dd
|
|
413
|
+
|
|
414
|
+
template <class Node> struct std::hash<dd::Edge<Node>> {
|
|
415
|
+
std::size_t operator()(dd::Edge<Node> const& e) const noexcept;
|
|
416
|
+
};
|