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,57 @@
|
|
|
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 <cstddef>
|
|
14
|
+
#include <vector>
|
|
15
|
+
|
|
16
|
+
namespace qc {
|
|
17
|
+
/**
|
|
18
|
+
* @brief Symmetric matrix class with same number of rows and columns that
|
|
19
|
+
* allows access by row and column but uses less memory than a full matrix
|
|
20
|
+
*/
|
|
21
|
+
template <typename T> class SymmetricMatrix {
|
|
22
|
+
std::vector<std::vector<T>> data;
|
|
23
|
+
|
|
24
|
+
public:
|
|
25
|
+
// Constructors
|
|
26
|
+
SymmetricMatrix() = default;
|
|
27
|
+
explicit SymmetricMatrix(const size_t size) {
|
|
28
|
+
data.resize(size);
|
|
29
|
+
for (size_t i = 0; i < size; ++i) {
|
|
30
|
+
data[i].resize(i + 1);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
SymmetricMatrix(const size_t size, const T& value) {
|
|
35
|
+
data.resize(size);
|
|
36
|
+
for (size_t i = 0; i < size; ++i) {
|
|
37
|
+
data[i].resize(i + 1, value);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
[[nodiscard]] const T& operator()(const size_t row, const size_t col) const {
|
|
42
|
+
if (row < col) {
|
|
43
|
+
return data[col][row];
|
|
44
|
+
}
|
|
45
|
+
return data[row][col];
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
[[nodiscard]] T& operator()(const size_t row, const size_t col) {
|
|
49
|
+
if (row < col) {
|
|
50
|
+
return data[col][row];
|
|
51
|
+
}
|
|
52
|
+
return data[row][col];
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
[[nodiscard]] size_t size() const { return data.size(); }
|
|
56
|
+
};
|
|
57
|
+
} // namespace qc
|
|
@@ -0,0 +1,227 @@
|
|
|
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 "ir/Definitions.hpp"
|
|
14
|
+
|
|
15
|
+
#include <cstddef>
|
|
16
|
+
#include <functional>
|
|
17
|
+
#include <numeric>
|
|
18
|
+
#include <optional>
|
|
19
|
+
#include <ostream>
|
|
20
|
+
#include <sstream>
|
|
21
|
+
#include <stdexcept>
|
|
22
|
+
#include <string>
|
|
23
|
+
#include <unordered_map>
|
|
24
|
+
#include <unordered_set>
|
|
25
|
+
#include <utility>
|
|
26
|
+
#include <vector>
|
|
27
|
+
|
|
28
|
+
namespace qc {
|
|
29
|
+
|
|
30
|
+
/// Pairs do not provide a hash function by default, this is the replacement
|
|
31
|
+
template <class T, class U> struct PairHash {
|
|
32
|
+
size_t operator()(const std::pair<T, U>& x) const {
|
|
33
|
+
return combineHash(std::hash<T>{}(x.first), std::hash<U>{}(x.second));
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Class representing generic undirected directed graphs.
|
|
39
|
+
*
|
|
40
|
+
* @tparam V the type of the vertices in the graph. Must implement `operator<<`.
|
|
41
|
+
*/
|
|
42
|
+
template <class V, class E> class UndirectedGraph final {
|
|
43
|
+
static_assert(std::is_same_v<decltype(std::declval<std::ostream&>()
|
|
44
|
+
<< std::declval<V>()),
|
|
45
|
+
std::ostream&>,
|
|
46
|
+
"V must support `operator<<`.");
|
|
47
|
+
|
|
48
|
+
protected:
|
|
49
|
+
// the adjecency matrix works with indices
|
|
50
|
+
std::vector<std::vector<std::optional<E>>> adjacencyMatrix{};
|
|
51
|
+
// the mapping of vertices to indices in the graph are stored in a map
|
|
52
|
+
std::unordered_map<V, std::size_t> mapping;
|
|
53
|
+
// the inverse mapping is used to get the vertex from the index
|
|
54
|
+
std::vector<V> invMapping;
|
|
55
|
+
// the number of vertices in the graph
|
|
56
|
+
std::size_t nVertices = 0;
|
|
57
|
+
// the number of edges in the graph
|
|
58
|
+
std::size_t nEdges = 0;
|
|
59
|
+
// the degrees of the vertices in the graph
|
|
60
|
+
std::vector<std::size_t> degrees;
|
|
61
|
+
|
|
62
|
+
public:
|
|
63
|
+
auto addVertex(const V& v) -> void {
|
|
64
|
+
// check whether the vertex is already in the graph, if so do nothing
|
|
65
|
+
if (!mapping.contains(v)) {
|
|
66
|
+
mapping[v] = nVertices;
|
|
67
|
+
invMapping.emplace_back(v);
|
|
68
|
+
++nVertices;
|
|
69
|
+
for (auto& row : adjacencyMatrix) {
|
|
70
|
+
row.emplace_back(std::nullopt);
|
|
71
|
+
}
|
|
72
|
+
// the first param must be a 1 not nVertices since we are using an upper
|
|
73
|
+
// triangular matrix as adjacency matrix instead of a square matrix
|
|
74
|
+
adjacencyMatrix.emplace_back(1, std::nullopt);
|
|
75
|
+
degrees.emplace_back(0);
|
|
76
|
+
} else {
|
|
77
|
+
std::stringstream ss;
|
|
78
|
+
ss << "The vertex " << v << " is already in the graph.";
|
|
79
|
+
throw std::invalid_argument(ss.str());
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
auto addEdge(const V& u, const V& v, const E& e) -> void {
|
|
83
|
+
if (!mapping.contains(u)) {
|
|
84
|
+
addVertex(u);
|
|
85
|
+
}
|
|
86
|
+
if (!mapping.contains(v)) {
|
|
87
|
+
addVertex(v);
|
|
88
|
+
}
|
|
89
|
+
const auto i = mapping.at(u);
|
|
90
|
+
const auto j = mapping.at(v);
|
|
91
|
+
if (i < j) {
|
|
92
|
+
if (adjacencyMatrix[i][j - i] == std::nullopt) {
|
|
93
|
+
++degrees[i];
|
|
94
|
+
if (i != j) {
|
|
95
|
+
++degrees[j];
|
|
96
|
+
}
|
|
97
|
+
++nEdges;
|
|
98
|
+
adjacencyMatrix[i][j - i] = e;
|
|
99
|
+
} else {
|
|
100
|
+
std::stringstream ss;
|
|
101
|
+
ss << "The edge (" << i << ", " << j << ") is already in the graph.";
|
|
102
|
+
throw std::invalid_argument(ss.str());
|
|
103
|
+
}
|
|
104
|
+
} else {
|
|
105
|
+
if (adjacencyMatrix[j][i - j] == std::nullopt) {
|
|
106
|
+
++degrees[i];
|
|
107
|
+
if (i != j) {
|
|
108
|
+
++degrees[j];
|
|
109
|
+
}
|
|
110
|
+
++nEdges;
|
|
111
|
+
adjacencyMatrix[j][i - j] = e;
|
|
112
|
+
} else {
|
|
113
|
+
std::stringstream ss;
|
|
114
|
+
ss << "The edge (" << j << ", " << i << ") is already in the graph.";
|
|
115
|
+
throw std::invalid_argument(ss.str());
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
[[nodiscard]] auto getNVertices() const -> std::size_t { return nVertices; }
|
|
120
|
+
[[nodiscard]] auto getNEdges() const -> std::size_t { return nEdges; }
|
|
121
|
+
[[nodiscard]] auto getEdge(const V& v, const V& u) const -> E {
|
|
122
|
+
const auto i = mapping.at(v);
|
|
123
|
+
const auto j = mapping.at(u);
|
|
124
|
+
if (i < j ? adjacencyMatrix[i][j - i] != std::nullopt
|
|
125
|
+
: adjacencyMatrix[j][i - j] != std::nullopt) {
|
|
126
|
+
return i < j ? adjacencyMatrix[i][j - i].value()
|
|
127
|
+
: adjacencyMatrix[j][i - j].value();
|
|
128
|
+
}
|
|
129
|
+
std::stringstream ss;
|
|
130
|
+
ss << "The edge (" << v << ", " << u << ") does not exist.";
|
|
131
|
+
throw std::invalid_argument(ss.str());
|
|
132
|
+
}
|
|
133
|
+
[[nodiscard]] auto getAdjacentEdges(const V& v) const
|
|
134
|
+
-> std::unordered_set<std::pair<V, V>, PairHash<V, V>> {
|
|
135
|
+
if (!mapping.contains(v)) {
|
|
136
|
+
std::stringstream ss;
|
|
137
|
+
ss << "The vertex " << v << " is not in the graph.";
|
|
138
|
+
throw std::invalid_argument(ss.str());
|
|
139
|
+
}
|
|
140
|
+
const auto i = mapping.at(v);
|
|
141
|
+
std::unordered_set<std::pair<V, V>, PairHash<V, V>> result;
|
|
142
|
+
for (std::size_t j = 0; j < nVertices; ++j) {
|
|
143
|
+
if (i < j ? adjacencyMatrix[i][j - i] != std::nullopt
|
|
144
|
+
: adjacencyMatrix[j][i - j] != std::nullopt) {
|
|
145
|
+
const auto u = invMapping.at(j);
|
|
146
|
+
result.emplace(std::make_pair(v, u));
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
return result;
|
|
150
|
+
}
|
|
151
|
+
[[nodiscard]] auto getNeighbours(const V& v) const -> std::unordered_set<V> {
|
|
152
|
+
if (!mapping.contains(v)) {
|
|
153
|
+
std::stringstream ss;
|
|
154
|
+
ss << "The vertex " << v << " is not in the graph.";
|
|
155
|
+
throw std::invalid_argument(ss.str());
|
|
156
|
+
}
|
|
157
|
+
const auto i = mapping.at(v);
|
|
158
|
+
std::unordered_set<V> result;
|
|
159
|
+
for (std::size_t j = 0; j < nVertices; ++j) {
|
|
160
|
+
if (i < j ? adjacencyMatrix[i][j - i] != std::nullopt
|
|
161
|
+
: adjacencyMatrix[j][i - j] != std::nullopt) {
|
|
162
|
+
result.emplace(invMapping.at(j));
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
return result;
|
|
166
|
+
}
|
|
167
|
+
[[nodiscard]] auto getDegree(const V& v) const -> std::size_t {
|
|
168
|
+
if (!mapping.contains(v)) {
|
|
169
|
+
std::stringstream ss;
|
|
170
|
+
ss << "The vertex " << v << " is not in the graph.";
|
|
171
|
+
throw std::invalid_argument(ss.str());
|
|
172
|
+
}
|
|
173
|
+
const auto i = mapping.at(v);
|
|
174
|
+
return degrees[i];
|
|
175
|
+
}
|
|
176
|
+
[[nodiscard]] auto getVertices() const -> std::unordered_set<V> {
|
|
177
|
+
return std::accumulate(mapping.cbegin(), mapping.cend(),
|
|
178
|
+
std::unordered_set<V>(),
|
|
179
|
+
[](auto acc, const auto& v) {
|
|
180
|
+
acc.emplace(v.first);
|
|
181
|
+
return acc;
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
[[nodiscard]] auto isAdjacent(const V& u, const V& v) const -> bool {
|
|
185
|
+
if (!mapping.contains(u)) {
|
|
186
|
+
std::stringstream ss;
|
|
187
|
+
ss << "The vertex " << u << " is not in the graph.";
|
|
188
|
+
throw std::invalid_argument(ss.str());
|
|
189
|
+
}
|
|
190
|
+
if (!mapping.contains(v)) {
|
|
191
|
+
std::stringstream ss;
|
|
192
|
+
ss << "The vertex " << v << " is not in the graph.";
|
|
193
|
+
throw std::invalid_argument(ss.str());
|
|
194
|
+
}
|
|
195
|
+
const auto i = mapping.at(u);
|
|
196
|
+
const auto j = mapping.at(v);
|
|
197
|
+
return (i < j && adjacencyMatrix[i][j - i] != std::nullopt) or
|
|
198
|
+
(j < i && adjacencyMatrix[j][i - j] != std::nullopt);
|
|
199
|
+
}
|
|
200
|
+
[[nodiscard]] static auto isAdjacentEdge(const std::pair<V, V>& e,
|
|
201
|
+
const std::pair<V, V>& f) -> bool {
|
|
202
|
+
return e.first == f.first || e.first == f.second || e.second == f.first ||
|
|
203
|
+
e.second == f.second;
|
|
204
|
+
}
|
|
205
|
+
/// Outputs a string representation of the graph in the DOT format
|
|
206
|
+
[[nodiscard]] auto toString() const -> std::string {
|
|
207
|
+
std::stringstream ss;
|
|
208
|
+
ss << "graph {\n";
|
|
209
|
+
for (const auto& [v, i] : mapping) {
|
|
210
|
+
ss << " " << i << " [label=\"" << v << "\"];\n";
|
|
211
|
+
}
|
|
212
|
+
for (std::size_t i = 0; i < nVertices; ++i) {
|
|
213
|
+
for (std::size_t j = i + 1; j < nVertices; ++j) {
|
|
214
|
+
if (adjacencyMatrix[i][j - i] != std::nullopt) {
|
|
215
|
+
ss << " " << i << " -- " << j << ";\n";
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
ss << "}\n";
|
|
220
|
+
return ss.str();
|
|
221
|
+
}
|
|
222
|
+
friend auto operator<<(std::ostream& os, const UndirectedGraph& g)
|
|
223
|
+
-> std::ostream& {
|
|
224
|
+
return os << g.toString(); // Using toString() method
|
|
225
|
+
}
|
|
226
|
+
};
|
|
227
|
+
} // namespace qc
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
|
|
2
|
+
#ifndef MQT_CORE_DS_EXPORT_H
|
|
3
|
+
#define MQT_CORE_DS_EXPORT_H
|
|
4
|
+
|
|
5
|
+
#ifdef MQT_CORE_DS_STATIC_DEFINE
|
|
6
|
+
# define MQT_CORE_DS_EXPORT
|
|
7
|
+
# define MQT_CORE_DS_NO_EXPORT
|
|
8
|
+
#else
|
|
9
|
+
# ifndef MQT_CORE_DS_EXPORT
|
|
10
|
+
# ifdef mqt_core_ds_EXPORTS
|
|
11
|
+
/* We are building this library */
|
|
12
|
+
# define MQT_CORE_DS_EXPORT __attribute__((visibility("default")))
|
|
13
|
+
# else
|
|
14
|
+
/* We are using this library */
|
|
15
|
+
# define MQT_CORE_DS_EXPORT __attribute__((visibility("default")))
|
|
16
|
+
# endif
|
|
17
|
+
# endif
|
|
18
|
+
|
|
19
|
+
# ifndef MQT_CORE_DS_NO_EXPORT
|
|
20
|
+
# define MQT_CORE_DS_NO_EXPORT __attribute__((visibility("hidden")))
|
|
21
|
+
# endif
|
|
22
|
+
#endif
|
|
23
|
+
|
|
24
|
+
#ifndef MQT_CORE_DS_DEPRECATED
|
|
25
|
+
# define MQT_CORE_DS_DEPRECATED __attribute__ ((__deprecated__))
|
|
26
|
+
#endif
|
|
27
|
+
|
|
28
|
+
#ifndef MQT_CORE_DS_DEPRECATED_EXPORT
|
|
29
|
+
# define MQT_CORE_DS_DEPRECATED_EXPORT MQT_CORE_DS_EXPORT MQT_CORE_DS_DEPRECATED
|
|
30
|
+
#endif
|
|
31
|
+
|
|
32
|
+
#ifndef MQT_CORE_DS_DEPRECATED_NO_EXPORT
|
|
33
|
+
# define MQT_CORE_DS_DEPRECATED_NO_EXPORT MQT_CORE_DS_NO_EXPORT MQT_CORE_DS_DEPRECATED
|
|
34
|
+
#endif
|
|
35
|
+
|
|
36
|
+
/* NOLINTNEXTLINE(readability-avoid-unconditional-preprocessor-if) */
|
|
37
|
+
#if 0 /* DEFINE_NO_DEPRECATED */
|
|
38
|
+
# ifndef MQT_CORE_DS_NO_DEPRECATED
|
|
39
|
+
# define MQT_CORE_DS_NO_DEPRECATED
|
|
40
|
+
# endif
|
|
41
|
+
#endif
|
|
42
|
+
|
|
43
|
+
#endif /* MQT_CORE_DS_EXPORT_H */
|
|
@@ -0,0 +1,45 @@
|
|
|
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
|
+
namespace dd {
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* @brief Useful metadata of an approximation run.
|
|
20
|
+
*/
|
|
21
|
+
struct ApproximationMetadata {
|
|
22
|
+
/// @brief The fidelity between the source and the approximated state.
|
|
23
|
+
double fidelity;
|
|
24
|
+
/// @brief The number of nodes visited during the mark stage.
|
|
25
|
+
std::size_t nodesVisited;
|
|
26
|
+
/// @brief The lowest qubit number that requires rebuilding.
|
|
27
|
+
Qubit min;
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* @brief Approximate the @p state based on fidelity. The fidelity of the
|
|
32
|
+
* approximated state will be at least @p fidelity.
|
|
33
|
+
* @details Traverses the decision diagram layer by layer in a breadth-first
|
|
34
|
+
* manner (iterative deepening algorithm) and eliminates edges greedily until
|
|
35
|
+
* the budget (1 - @p fidelity) is exhausted.
|
|
36
|
+
*
|
|
37
|
+
* @param state The DD to approximate.
|
|
38
|
+
* @param fidelity The desired minimum fidelity after approximation.
|
|
39
|
+
* @param dd The DD package to use for the approximation.
|
|
40
|
+
* @return Metadata about the approximation.
|
|
41
|
+
*/
|
|
42
|
+
ApproximationMetadata approximate(VectorDD& state, double fidelity,
|
|
43
|
+
Package& dd);
|
|
44
|
+
|
|
45
|
+
} // namespace dd
|
|
@@ -0,0 +1,174 @@
|
|
|
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/ComplexValue.hpp"
|
|
15
|
+
#include "dd/DDDefinitions.hpp"
|
|
16
|
+
|
|
17
|
+
#include <array>
|
|
18
|
+
#include <complex>
|
|
19
|
+
#include <cstddef>
|
|
20
|
+
#include <functional>
|
|
21
|
+
#include <type_traits>
|
|
22
|
+
|
|
23
|
+
namespace dd {
|
|
24
|
+
|
|
25
|
+
struct vNode; // NOLINT(readability-identifier-naming)
|
|
26
|
+
struct mNode; // NOLINT(readability-identifier-naming)
|
|
27
|
+
struct dNode; // NOLINT(readability-identifier-naming)
|
|
28
|
+
class ComplexNumbers;
|
|
29
|
+
class MemoryManager;
|
|
30
|
+
|
|
31
|
+
template <typename T>
|
|
32
|
+
using isVector = std::enable_if_t<std::is_same_v<T, vNode>, bool>;
|
|
33
|
+
template <typename T>
|
|
34
|
+
using isMatrix = std::enable_if_t<std::is_same_v<T, mNode>, bool>;
|
|
35
|
+
template <typename T>
|
|
36
|
+
using isMatrixVariant =
|
|
37
|
+
std::enable_if_t<std::is_same_v<T, mNode> || std::is_same_v<T, dNode>,
|
|
38
|
+
bool>;
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* @brief A DD node with a cached edge weight
|
|
42
|
+
* @details Some DD operations create intermediate results that are not part of
|
|
43
|
+
* the final result. To avoid storing these intermediate results in the unique
|
|
44
|
+
* table, they are represented via cached numbers.
|
|
45
|
+
* @tparam Node Type of the DD node
|
|
46
|
+
*/
|
|
47
|
+
template <typename Node> struct CachedEdge {
|
|
48
|
+
Node* p{};
|
|
49
|
+
ComplexValue w;
|
|
50
|
+
|
|
51
|
+
CachedEdge() = default;
|
|
52
|
+
CachedEdge(Node* n, const ComplexValue& v) : p(n), w(v) {}
|
|
53
|
+
CachedEdge(Node* n, const Complex& c)
|
|
54
|
+
: p(n), w(static_cast<ComplexValue>(c)) {}
|
|
55
|
+
|
|
56
|
+
/// Comparing two DD edges with another involves comparing the respective
|
|
57
|
+
/// pointers and checking whether the corresponding weights are "close enough"
|
|
58
|
+
/// according to a given tolerance this notion of equivalence is chosen to
|
|
59
|
+
/// counter floating point inaccuracies
|
|
60
|
+
bool operator==(const CachedEdge& other) const {
|
|
61
|
+
return p == other.p && w.approximatelyEquals(other.w);
|
|
62
|
+
}
|
|
63
|
+
bool operator!=(const CachedEdge& other) const { return !operator==(other); }
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* @brief Create a terminal edge with the given weight.
|
|
67
|
+
* @param w The weight of the terminal edge.
|
|
68
|
+
* @return A terminal edge with the given weight.
|
|
69
|
+
*/
|
|
70
|
+
[[nodiscard]] static constexpr CachedEdge terminal(const ComplexValue& w) {
|
|
71
|
+
return CachedEdge{Node::getTerminal(), w};
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* @brief Create a terminal edge with the given weight.
|
|
76
|
+
* @param w The weight of the terminal edge.
|
|
77
|
+
* @return A terminal edge with the given weight.
|
|
78
|
+
*/
|
|
79
|
+
[[nodiscard]] static constexpr CachedEdge
|
|
80
|
+
terminal(const std::complex<fp>& w) {
|
|
81
|
+
return CachedEdge{Node::getTerminal(), static_cast<ComplexValue>(w)};
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* @brief Create a terminal edge with the given weight.
|
|
86
|
+
* @param w The weight of the terminal edge.
|
|
87
|
+
* @return A terminal edge with the given weight.
|
|
88
|
+
*/
|
|
89
|
+
[[nodiscard]] static constexpr CachedEdge terminal(const Complex& w) {
|
|
90
|
+
return terminal(static_cast<ComplexValue>(w));
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* @brief Create a zero terminal edge.
|
|
95
|
+
* @return A zero terminal edge.
|
|
96
|
+
*/
|
|
97
|
+
[[nodiscard]] static constexpr CachedEdge zero() {
|
|
98
|
+
return terminal(ComplexValue(0.));
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* @brief Create a one terminal edge.
|
|
103
|
+
* @return A one terminal edge.
|
|
104
|
+
*/
|
|
105
|
+
[[nodiscard]] static constexpr CachedEdge one() {
|
|
106
|
+
return terminal(ComplexValue(1.));
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* @brief Check whether this is a terminal.
|
|
111
|
+
* @return whether this is a terminal
|
|
112
|
+
*/
|
|
113
|
+
[[nodiscard]] constexpr bool isTerminal() const {
|
|
114
|
+
return Node::isTerminal(p);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* @brief Get a normalized vector DD from a fresh node and a list of edges.
|
|
119
|
+
* @tparam T template parameter to enable this method only for vNode
|
|
120
|
+
* @param p the fresh node
|
|
121
|
+
* @param e the list of edges that form the successor nodes
|
|
122
|
+
* @param mm a reference to the memory manager (for returning unused nodes)
|
|
123
|
+
* @param cn a reference to the complex number manager (for adding new
|
|
124
|
+
* complex numbers)
|
|
125
|
+
* @return the normalized vector DD
|
|
126
|
+
*/
|
|
127
|
+
template <typename T = Node, isVector<T> = true>
|
|
128
|
+
static auto normalize(Node* p, const std::array<CachedEdge, RADIX>& e,
|
|
129
|
+
MemoryManager& mm, ComplexNumbers& cn) -> CachedEdge;
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* @brief Get a normalized (density) matrix) DD from a fresh node and a list
|
|
133
|
+
* of edges.
|
|
134
|
+
* @tparam T template parameter to enable this method only for matrix nodes
|
|
135
|
+
* @param p the fresh node
|
|
136
|
+
* @param e the list of edges that form the successor nodes
|
|
137
|
+
* @param mm a reference to the memory manager (for returning unused nodes)
|
|
138
|
+
* @param cn a reference to the complex number manager (for adding new
|
|
139
|
+
* complex numbers)
|
|
140
|
+
* @return the normalized (density) matrix DD
|
|
141
|
+
*/
|
|
142
|
+
template <typename T = Node, isMatrixVariant<T> = true>
|
|
143
|
+
static auto normalize(Node* p, const std::array<CachedEdge, NEDGE>& e,
|
|
144
|
+
MemoryManager& mm, ComplexNumbers& cn) -> CachedEdge;
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* @brief Check whether the matrix represented by the DD is the identity.
|
|
148
|
+
* @tparam T template parameter to enable this function only for matrix nodes
|
|
149
|
+
* @return whether the matrix is the identity
|
|
150
|
+
*/
|
|
151
|
+
template <typename T = Node, isMatrixVariant<T> = true>
|
|
152
|
+
[[nodiscard]] bool isIdentity(const bool upToGlobalPhase = true) const {
|
|
153
|
+
if (!isTerminal()) {
|
|
154
|
+
return false;
|
|
155
|
+
}
|
|
156
|
+
if (upToGlobalPhase) {
|
|
157
|
+
return !w.exactlyZero();
|
|
158
|
+
}
|
|
159
|
+
return w.exactlyOne();
|
|
160
|
+
}
|
|
161
|
+
};
|
|
162
|
+
|
|
163
|
+
// Deduction guide for constructor: CachedEdge(Node*, const ComplexValue&)
|
|
164
|
+
template <class Node>
|
|
165
|
+
CachedEdge(Node*, const ComplexValue&) -> CachedEdge<Node>;
|
|
166
|
+
|
|
167
|
+
// Deduction guide for constructor: CachedEdge(Node*, const Complex&)
|
|
168
|
+
template <class Node> CachedEdge(Node*, const Complex&) -> CachedEdge<Node>;
|
|
169
|
+
|
|
170
|
+
} // namespace dd
|
|
171
|
+
|
|
172
|
+
template <class Node> struct std::hash<dd::CachedEdge<Node>> {
|
|
173
|
+
auto operator()(dd::CachedEdge<Node> const& e) const noexcept -> std::size_t;
|
|
174
|
+
};
|