mqt-core 3.3.2__cp314-cp314t-macosx_11_0_arm64.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,247 @@
|
|
|
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
|
+
#include "ir/Permutation.hpp"
|
|
15
|
+
#include "ir/Register.hpp"
|
|
16
|
+
#include "ir/operations/Control.hpp"
|
|
17
|
+
#include "ir/operations/OpType.hpp"
|
|
18
|
+
|
|
19
|
+
#include <cstring>
|
|
20
|
+
#include <functional>
|
|
21
|
+
#include <iostream>
|
|
22
|
+
#include <memory>
|
|
23
|
+
#include <set>
|
|
24
|
+
#include <string>
|
|
25
|
+
#include <vector>
|
|
26
|
+
|
|
27
|
+
namespace qc {
|
|
28
|
+
class Operation {
|
|
29
|
+
protected:
|
|
30
|
+
Controls controls;
|
|
31
|
+
Targets targets;
|
|
32
|
+
std::vector<fp> parameter;
|
|
33
|
+
|
|
34
|
+
OpType type = None;
|
|
35
|
+
std::string name;
|
|
36
|
+
|
|
37
|
+
static constexpr size_t OUTPUT_INDENT_SIZE = 2;
|
|
38
|
+
|
|
39
|
+
static bool isWholeQubitRegister(const QubitIndexToRegisterMap& regMap,
|
|
40
|
+
const Qubit start, const Qubit end) {
|
|
41
|
+
const auto& startReg = regMap.at(start).first;
|
|
42
|
+
const auto& endReg = regMap.at(end).first;
|
|
43
|
+
return startReg == endReg && startReg.getStartIndex() == start &&
|
|
44
|
+
endReg.getEndIndex() == end;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
public:
|
|
48
|
+
Operation() = default;
|
|
49
|
+
Operation(const Operation& op) = default;
|
|
50
|
+
Operation(Operation&& op) noexcept = default;
|
|
51
|
+
Operation& operator=(const Operation& op) = default;
|
|
52
|
+
Operation& operator=(Operation&& op) noexcept = default;
|
|
53
|
+
|
|
54
|
+
// Virtual Destructor
|
|
55
|
+
virtual ~Operation() = default;
|
|
56
|
+
|
|
57
|
+
[[nodiscard]] virtual std::unique_ptr<Operation> clone() const = 0;
|
|
58
|
+
|
|
59
|
+
// Getters
|
|
60
|
+
[[nodiscard]] virtual const Targets& getTargets() const { return targets; }
|
|
61
|
+
virtual Targets& getTargets() { return targets; }
|
|
62
|
+
[[nodiscard]] virtual std::size_t getNtargets() const {
|
|
63
|
+
return targets.size();
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
[[nodiscard]] virtual const Controls& getControls() const { return controls; }
|
|
67
|
+
virtual Controls& getControls() { return controls; }
|
|
68
|
+
[[nodiscard]] virtual std::size_t getNcontrols() const {
|
|
69
|
+
return controls.size();
|
|
70
|
+
}
|
|
71
|
+
[[nodiscard]] virtual std::size_t getNqubits() const {
|
|
72
|
+
return getNcontrols() + getNtargets();
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
[[nodiscard]] const std::vector<fp>& getParameter() const {
|
|
76
|
+
return parameter;
|
|
77
|
+
}
|
|
78
|
+
std::vector<fp>& getParameter() { return parameter; }
|
|
79
|
+
|
|
80
|
+
[[nodiscard]] const std::string& getName() const { return name; }
|
|
81
|
+
[[nodiscard]] virtual OpType getType() const { return type; }
|
|
82
|
+
|
|
83
|
+
[[nodiscard]] virtual auto
|
|
84
|
+
getUsedQubitsPermuted(const Permutation& perm) const -> std::set<Qubit>;
|
|
85
|
+
|
|
86
|
+
[[nodiscard]] auto getUsedQubits() const -> std::set<Qubit>;
|
|
87
|
+
|
|
88
|
+
[[nodiscard]] std::unique_ptr<Operation> getInverted() const {
|
|
89
|
+
auto op = clone();
|
|
90
|
+
op->invert();
|
|
91
|
+
return op;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// Setter
|
|
95
|
+
virtual void setTargets(const Targets& t) { targets = t; }
|
|
96
|
+
|
|
97
|
+
virtual void setControls(const Controls& c) {
|
|
98
|
+
clearControls();
|
|
99
|
+
addControls(c);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
virtual void addControl(Control c) = 0;
|
|
103
|
+
|
|
104
|
+
void addControls(const Controls& c) {
|
|
105
|
+
for (const auto& control : c) {
|
|
106
|
+
addControl(control);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
virtual void clearControls() = 0;
|
|
111
|
+
|
|
112
|
+
virtual void removeControl(Control c) = 0;
|
|
113
|
+
|
|
114
|
+
virtual Controls::iterator removeControl(Controls::iterator it) = 0;
|
|
115
|
+
|
|
116
|
+
void removeControls(const Controls& c) {
|
|
117
|
+
for (auto it = c.begin(); it != c.end();) {
|
|
118
|
+
it = removeControl(it);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
virtual void setGate(const OpType g) {
|
|
123
|
+
type = g;
|
|
124
|
+
name = toString(g);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
virtual void setParameter(const std::vector<fp>& p) { parameter = p; }
|
|
128
|
+
|
|
129
|
+
virtual void apply(const Permutation& permutation);
|
|
130
|
+
|
|
131
|
+
[[nodiscard]] virtual bool isUnitary() const { return true; }
|
|
132
|
+
|
|
133
|
+
[[nodiscard]] virtual bool isStandardOperation() const { return false; }
|
|
134
|
+
|
|
135
|
+
[[nodiscard]] virtual bool isCompoundOperation() const noexcept {
|
|
136
|
+
return false;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
[[nodiscard]] virtual bool isNonUnitaryOperation() const { return false; }
|
|
140
|
+
|
|
141
|
+
[[nodiscard]] virtual bool isIfElseOperation() const noexcept {
|
|
142
|
+
return false;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
[[nodiscard]] virtual bool isSymbolicOperation() const { return false; }
|
|
146
|
+
|
|
147
|
+
[[nodiscard]] virtual auto isDiagonalGate() const -> bool {
|
|
148
|
+
// the second bit in the type is a flag that is set for diagonal gates
|
|
149
|
+
return (+type & OpTypeDiag) != 0;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
[[nodiscard]] virtual auto isSingleQubitGate() const -> bool {
|
|
153
|
+
return !isControlled() && qc::isSingleQubitGate(type);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
[[nodiscard]] virtual bool isControlled() const { return !controls.empty(); }
|
|
157
|
+
|
|
158
|
+
[[nodiscard]] virtual bool isClifford() const { return false; }
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* @brief Checks whether a gate is global.
|
|
162
|
+
* @details A StandardOperation is global if it acts on all qubits.
|
|
163
|
+
* A CompoundOperation is global if all its sub-operations are
|
|
164
|
+
* StandardOperations of the same type with the same parameters acting on all
|
|
165
|
+
* qubits. The latter is what a QASM line like `ry(π) q;` is translated to in
|
|
166
|
+
* MQT Core. All other operations are not global.
|
|
167
|
+
* @return True if the operation is global, false otherwise.
|
|
168
|
+
*/
|
|
169
|
+
[[nodiscard]] virtual bool isGlobal(size_t /* unused */) const {
|
|
170
|
+
return false;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
[[nodiscard]] virtual bool actsOn(const Qubit i) const {
|
|
174
|
+
for (const auto& t : targets) {
|
|
175
|
+
if (t == i) {
|
|
176
|
+
return true;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
return controls.count(i) > 0;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
virtual void addDepthContribution(std::vector<std::size_t>& depths) const;
|
|
183
|
+
|
|
184
|
+
[[nodiscard]] virtual bool equals(const Operation& op,
|
|
185
|
+
const Permutation& perm1,
|
|
186
|
+
const Permutation& perm2) const;
|
|
187
|
+
[[nodiscard]] virtual bool equals(const Operation& op) const {
|
|
188
|
+
return equals(op, {}, {});
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
virtual std::ostream& printParameters(std::ostream& os) const;
|
|
192
|
+
std::ostream& print(std::ostream& os, const std::size_t nqubits) const {
|
|
193
|
+
return print(os, {}, 0, nqubits);
|
|
194
|
+
}
|
|
195
|
+
virtual std::ostream& print(std::ostream& os, const Permutation& permutation,
|
|
196
|
+
std::size_t prefixWidth,
|
|
197
|
+
std::size_t nqubits) const;
|
|
198
|
+
|
|
199
|
+
void dumpOpenQASM2(std::ostream& of, const QubitIndexToRegisterMap& qubitMap,
|
|
200
|
+
const BitIndexToRegisterMap& bitMap) const {
|
|
201
|
+
dumpOpenQASM(of, qubitMap, bitMap, 0, false);
|
|
202
|
+
}
|
|
203
|
+
void dumpOpenQASM3(std::ostream& of, const QubitIndexToRegisterMap& qubitMap,
|
|
204
|
+
const BitIndexToRegisterMap& bitMap) const {
|
|
205
|
+
dumpOpenQASM(of, qubitMap, bitMap, 0, true);
|
|
206
|
+
}
|
|
207
|
+
virtual void dumpOpenQASM(std::ostream& of,
|
|
208
|
+
const QubitIndexToRegisterMap& qubitMap,
|
|
209
|
+
const BitIndexToRegisterMap& bitMap, size_t indent,
|
|
210
|
+
bool openQASM3) const = 0;
|
|
211
|
+
|
|
212
|
+
/// Checks whether operation commutes with other operation on a given qubit.
|
|
213
|
+
[[nodiscard]] virtual auto commutesAtQubit(const Operation& /*other*/,
|
|
214
|
+
const Qubit& /*qubit*/) const
|
|
215
|
+
-> bool {
|
|
216
|
+
return false;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
[[nodiscard]] virtual auto isInverseOf(const Operation& /*other*/) const
|
|
220
|
+
-> bool;
|
|
221
|
+
|
|
222
|
+
virtual void invert() = 0;
|
|
223
|
+
|
|
224
|
+
virtual bool operator==(const Operation& rhs) const { return equals(rhs); }
|
|
225
|
+
bool operator!=(const Operation& rhs) const { return !(*this == rhs); }
|
|
226
|
+
};
|
|
227
|
+
} // namespace qc
|
|
228
|
+
|
|
229
|
+
template <> struct std::hash<qc::Operation> {
|
|
230
|
+
std::size_t operator()(const qc::Operation& op) const noexcept {
|
|
231
|
+
std::size_t seed = 0U;
|
|
232
|
+
qc::hashCombine(seed, hash<qc::OpType>{}(op.getType()));
|
|
233
|
+
for (const auto& control : op.getControls()) {
|
|
234
|
+
qc::hashCombine(seed, hash<qc::Qubit>{}(control.qubit));
|
|
235
|
+
if (control.type == qc::Control::Type::Neg) {
|
|
236
|
+
seed ^= 1ULL;
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
for (const auto& target : op.getTargets()) {
|
|
240
|
+
qc::hashCombine(seed, hash<qc::Qubit>{}(target));
|
|
241
|
+
}
|
|
242
|
+
for (const auto& param : op.getParameter()) {
|
|
243
|
+
qc::hashCombine(seed, hash<qc::fp>{}(param));
|
|
244
|
+
}
|
|
245
|
+
return seed;
|
|
246
|
+
}
|
|
247
|
+
};
|
|
@@ -0,0 +1,140 @@
|
|
|
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
|
+
#include "ir/Permutation.hpp"
|
|
15
|
+
#include "ir/Register.hpp"
|
|
16
|
+
#include "ir/operations/Control.hpp"
|
|
17
|
+
#include "ir/operations/OpType.hpp"
|
|
18
|
+
#include "ir/operations/Operation.hpp"
|
|
19
|
+
|
|
20
|
+
#include <cmath>
|
|
21
|
+
#include <cstddef>
|
|
22
|
+
#include <memory>
|
|
23
|
+
#include <ostream>
|
|
24
|
+
#include <sstream>
|
|
25
|
+
#include <stdexcept>
|
|
26
|
+
#include <string>
|
|
27
|
+
#include <vector>
|
|
28
|
+
|
|
29
|
+
namespace qc {
|
|
30
|
+
class StandardOperation : public Operation {
|
|
31
|
+
protected:
|
|
32
|
+
constexpr static fp PARAMETER_TOLERANCE = 1e-13;
|
|
33
|
+
|
|
34
|
+
static void checkInteger(fp& ld) {
|
|
35
|
+
const fp nearest = std::nearbyint(ld);
|
|
36
|
+
if (std::abs(ld - nearest) < PARAMETER_TOLERANCE) {
|
|
37
|
+
ld = nearest;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
static void checkFractionPi(fp& ld) {
|
|
42
|
+
const fp div = PI / ld;
|
|
43
|
+
const fp nearest = std::nearbyint(div);
|
|
44
|
+
if (std::abs(div - nearest) < PARAMETER_TOLERANCE) {
|
|
45
|
+
ld = PI / nearest;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
OpType parseU3(fp& theta, fp& phi, fp& lambda);
|
|
50
|
+
OpType parseU2(fp& phi, fp& lambda);
|
|
51
|
+
OpType parseU1(fp& lambda);
|
|
52
|
+
|
|
53
|
+
void checkUgate();
|
|
54
|
+
void setup();
|
|
55
|
+
|
|
56
|
+
public:
|
|
57
|
+
StandardOperation() = default;
|
|
58
|
+
|
|
59
|
+
// Standard Constructors
|
|
60
|
+
StandardOperation(Qubit target, OpType g, std::vector<fp> params = {});
|
|
61
|
+
StandardOperation(const Targets& targ, OpType g, std::vector<fp> params = {});
|
|
62
|
+
|
|
63
|
+
StandardOperation(Control control, Qubit target, OpType g,
|
|
64
|
+
const std::vector<fp>& params = {});
|
|
65
|
+
StandardOperation(Control control, const Targets& targ, OpType g,
|
|
66
|
+
const std::vector<fp>& params = {});
|
|
67
|
+
|
|
68
|
+
StandardOperation(const Controls& c, Qubit target, OpType g,
|
|
69
|
+
const std::vector<fp>& params = {});
|
|
70
|
+
StandardOperation(const Controls& c, const Targets& targ, OpType g,
|
|
71
|
+
const std::vector<fp>& params = {});
|
|
72
|
+
|
|
73
|
+
// MCF (cSWAP), Peres, parameterized two target Constructor
|
|
74
|
+
StandardOperation(const Controls& c, Qubit target0, Qubit target1, OpType g,
|
|
75
|
+
const std::vector<fp>& params = {});
|
|
76
|
+
|
|
77
|
+
[[nodiscard]] std::unique_ptr<Operation> clone() const override {
|
|
78
|
+
return std::make_unique<StandardOperation>(*this);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
[[nodiscard]] bool isStandardOperation() const override { return true; }
|
|
82
|
+
|
|
83
|
+
[[nodiscard]] bool isGlobal(size_t nQubits) const override;
|
|
84
|
+
|
|
85
|
+
[[nodiscard]] bool isClifford() const override;
|
|
86
|
+
|
|
87
|
+
void addControl(const Control c) override {
|
|
88
|
+
if (actsOn(c.qubit)) {
|
|
89
|
+
throw std::runtime_error("Cannot add control on qubit " +
|
|
90
|
+
std::to_string(c.qubit) +
|
|
91
|
+
" to operation it already acts on the qubit.");
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
controls.emplace(c);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
void clearControls() override { controls.clear(); }
|
|
98
|
+
|
|
99
|
+
void removeControl(const Control c) override {
|
|
100
|
+
if (controls.erase(c) == 0) {
|
|
101
|
+
throw std::runtime_error("Cannot remove control on qubit " +
|
|
102
|
+
std::to_string(c.qubit) +
|
|
103
|
+
" from operation as it is not a control.");
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
Controls::iterator removeControl(const Controls::iterator it) override {
|
|
108
|
+
return controls.erase(it);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
[[nodiscard]] bool equals(const Operation& op, const Permutation& perm1,
|
|
112
|
+
const Permutation& perm2) const override {
|
|
113
|
+
return Operation::equals(op, perm1, perm2);
|
|
114
|
+
}
|
|
115
|
+
[[nodiscard]] bool equals(const Operation& operation) const override {
|
|
116
|
+
return equals(operation, {}, {});
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
void dumpOpenQASM(std::ostream& of, const QubitIndexToRegisterMap& qubitMap,
|
|
120
|
+
const BitIndexToRegisterMap& bitMap, size_t indent,
|
|
121
|
+
bool openQASM3) const override;
|
|
122
|
+
|
|
123
|
+
[[nodiscard]] auto commutesAtQubit(const Operation& other,
|
|
124
|
+
const Qubit& qubit) const -> bool override;
|
|
125
|
+
|
|
126
|
+
void invert() override;
|
|
127
|
+
|
|
128
|
+
protected:
|
|
129
|
+
void dumpOpenQASM2(std::ostream& of, std::ostringstream& op,
|
|
130
|
+
const QubitIndexToRegisterMap& qubitMap) const;
|
|
131
|
+
void dumpOpenQASM3(std::ostream& of, std::ostringstream& op,
|
|
132
|
+
const QubitIndexToRegisterMap& qubitMap) const;
|
|
133
|
+
|
|
134
|
+
void dumpGateType(std::ostream& of, std::ostringstream& op,
|
|
135
|
+
const QubitIndexToRegisterMap& qubitMap) const;
|
|
136
|
+
|
|
137
|
+
void dumpControls(std::ostringstream& op) const;
|
|
138
|
+
};
|
|
139
|
+
|
|
140
|
+
} // namespace qc
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2023 - 2025 Chair for Design Automation, TUM
|
|
3
|
+
* Copyright (c) 2025 Munich Quantum Software Company GmbH
|
|
4
|
+
* All rights reserved.
|
|
5
|
+
*
|
|
6
|
+
* SPDX-License-Identifier: MIT
|
|
7
|
+
*
|
|
8
|
+
* Licensed under the MIT License
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
#pragma once
|
|
12
|
+
|
|
13
|
+
#include "ir/Definitions.hpp"
|
|
14
|
+
#include "ir/Permutation.hpp"
|
|
15
|
+
#include "ir/Register.hpp"
|
|
16
|
+
#include "ir/operations/Control.hpp"
|
|
17
|
+
#include "ir/operations/Expression.hpp"
|
|
18
|
+
#include "ir/operations/OpType.hpp"
|
|
19
|
+
#include "ir/operations/Operation.hpp"
|
|
20
|
+
#include "ir/operations/StandardOperation.hpp"
|
|
21
|
+
|
|
22
|
+
#include <cstddef>
|
|
23
|
+
#include <functional>
|
|
24
|
+
#include <memory>
|
|
25
|
+
#include <optional>
|
|
26
|
+
#include <ostream>
|
|
27
|
+
#include <variant>
|
|
28
|
+
#include <vector>
|
|
29
|
+
|
|
30
|
+
namespace qc {
|
|
31
|
+
|
|
32
|
+
class SymbolicOperation final : public StandardOperation {
|
|
33
|
+
public:
|
|
34
|
+
SymbolicOperation() = default;
|
|
35
|
+
|
|
36
|
+
[[nodiscard]] SymbolOrNumber getParameter(std::size_t i) const;
|
|
37
|
+
|
|
38
|
+
[[nodiscard]] std::vector<SymbolOrNumber> getParameters() const;
|
|
39
|
+
|
|
40
|
+
void setSymbolicParameter(const Symbolic& par, const std::size_t i) {
|
|
41
|
+
symbolicParameter.at(i) = par;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// Standard Constructors
|
|
45
|
+
SymbolicOperation(Qubit target, OpType g,
|
|
46
|
+
const std::vector<SymbolOrNumber>& params = {});
|
|
47
|
+
SymbolicOperation(const Targets& targ, OpType g,
|
|
48
|
+
const std::vector<SymbolOrNumber>& params = {});
|
|
49
|
+
|
|
50
|
+
SymbolicOperation(Control control, Qubit target, OpType g,
|
|
51
|
+
const std::vector<SymbolOrNumber>& params = {});
|
|
52
|
+
SymbolicOperation(Control control, const Targets& targ, OpType g,
|
|
53
|
+
const std::vector<SymbolOrNumber>& params = {});
|
|
54
|
+
|
|
55
|
+
SymbolicOperation(const Controls& c, Qubit target, OpType g,
|
|
56
|
+
const std::vector<SymbolOrNumber>& params = {});
|
|
57
|
+
SymbolicOperation(const Controls& c, const Targets& targ, OpType g,
|
|
58
|
+
const std::vector<SymbolOrNumber>& params = {});
|
|
59
|
+
|
|
60
|
+
// MCF (cSWAP), Peres, parameterized two target Constructor
|
|
61
|
+
SymbolicOperation(const Controls& c, Qubit target0, Qubit target1, OpType g,
|
|
62
|
+
const std::vector<SymbolOrNumber>& params = {});
|
|
63
|
+
|
|
64
|
+
[[nodiscard]] std::unique_ptr<Operation> clone() const override;
|
|
65
|
+
|
|
66
|
+
[[nodiscard]] bool isSymbolicOperation() const override;
|
|
67
|
+
|
|
68
|
+
[[nodiscard]] bool isStandardOperation() const override;
|
|
69
|
+
|
|
70
|
+
[[nodiscard]] bool equals(const Operation& op, const Permutation& perm1,
|
|
71
|
+
const Permutation& perm2) const override;
|
|
72
|
+
[[nodiscard]] bool equals(const Operation& op) const override {
|
|
73
|
+
return equals(op, {}, {});
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
[[noreturn]] void dumpOpenQASM(std::ostream& of,
|
|
77
|
+
const QubitIndexToRegisterMap& qubitMap,
|
|
78
|
+
const BitIndexToRegisterMap& bitMap,
|
|
79
|
+
std::size_t indent,
|
|
80
|
+
bool openQASM3) const override;
|
|
81
|
+
|
|
82
|
+
[[nodiscard]] StandardOperation
|
|
83
|
+
getInstantiatedOperation(const VariableAssignment& assignment) const;
|
|
84
|
+
|
|
85
|
+
// Instantiates this Operation
|
|
86
|
+
// Afterwards casting to StandardOperation can be done if assignment is total
|
|
87
|
+
void instantiate(const VariableAssignment& assignment);
|
|
88
|
+
|
|
89
|
+
void invert() override;
|
|
90
|
+
|
|
91
|
+
protected:
|
|
92
|
+
std::vector<std::optional<Symbolic>> symbolicParameter;
|
|
93
|
+
|
|
94
|
+
static OpType parseU3(const Symbolic& theta, fp& phi, fp& lambda);
|
|
95
|
+
static OpType parseU3(fp& theta, const Symbolic& phi, fp& lambda);
|
|
96
|
+
static OpType parseU3(fp& theta, fp& phi, const Symbolic& lambda);
|
|
97
|
+
static OpType parseU3(const Symbolic& theta, const Symbolic& phi, fp& lambda);
|
|
98
|
+
static OpType parseU3(const Symbolic& theta, fp& phi, const Symbolic& lambda);
|
|
99
|
+
static OpType parseU3(fp& theta, const Symbolic& phi, const Symbolic& lambda);
|
|
100
|
+
|
|
101
|
+
static OpType parseU2(const Symbolic& phi, const Symbolic& lambda);
|
|
102
|
+
static OpType parseU2(const Symbolic& phi, fp& lambda);
|
|
103
|
+
static OpType parseU2(fp& phi, const Symbolic& lambda);
|
|
104
|
+
|
|
105
|
+
static OpType parseU1(const Symbolic& lambda);
|
|
106
|
+
|
|
107
|
+
void checkSymbolicUgate();
|
|
108
|
+
|
|
109
|
+
void storeSymbolOrNumber(const SymbolOrNumber& param, std::size_t i);
|
|
110
|
+
|
|
111
|
+
[[nodiscard]] bool isSymbolicParameter(std::size_t i) const;
|
|
112
|
+
|
|
113
|
+
static bool isSymbol(const SymbolOrNumber& param);
|
|
114
|
+
|
|
115
|
+
static Symbolic& getSymbol(SymbolOrNumber& param);
|
|
116
|
+
|
|
117
|
+
static fp& getNumber(SymbolOrNumber& param);
|
|
118
|
+
|
|
119
|
+
void setup(const std::vector<SymbolOrNumber>& params);
|
|
120
|
+
|
|
121
|
+
[[nodiscard]] static fp
|
|
122
|
+
getInstantiation(const SymbolOrNumber& symOrNum,
|
|
123
|
+
const VariableAssignment& assignment);
|
|
124
|
+
|
|
125
|
+
void negateSymbolicParameter(std::size_t index);
|
|
126
|
+
|
|
127
|
+
void addToSymbolicParameter(std::size_t index, fp value);
|
|
128
|
+
};
|
|
129
|
+
} // namespace qc
|
|
130
|
+
|
|
131
|
+
template <> struct std::hash<qc::SymbolicOperation> {
|
|
132
|
+
std::size_t operator()(qc::SymbolicOperation const& op) const noexcept {
|
|
133
|
+
std::size_t seed = 0U;
|
|
134
|
+
qc::hashCombine(seed, std::hash<qc::Operation>{}(op));
|
|
135
|
+
for (const auto& param : op.getParameters()) {
|
|
136
|
+
if (std::holds_alternative<qc::fp>(param)) {
|
|
137
|
+
qc::hashCombine(seed, hash<qc::fp>{}(get<qc::fp>(param)));
|
|
138
|
+
} else {
|
|
139
|
+
qc::hashCombine(seed, hash<qc::Symbolic>{}(get<qc::Symbolic>(param)));
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
return seed;
|
|
143
|
+
}
|
|
144
|
+
};
|