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,480 @@
|
|
|
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 "Utils.hpp"
|
|
14
|
+
#include "ZXDefinitions.hpp"
|
|
15
|
+
|
|
16
|
+
#include <cassert>
|
|
17
|
+
#include <cstddef>
|
|
18
|
+
#include <optional>
|
|
19
|
+
#include <utility>
|
|
20
|
+
#include <vector>
|
|
21
|
+
|
|
22
|
+
namespace zx {
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* @brief Class representing a ZX-diagram.
|
|
26
|
+
*
|
|
27
|
+
* @details Labelled undirected graph. Every node is either of type
|
|
28
|
+
* VertexType::Z, VertexType::X or VertexType::Boundary. The boundary vertices
|
|
29
|
+
* are the inputs and outputs of the diagram. The graph is stored as an
|
|
30
|
+
* adjacency list. The vertices are stored in a vector of optional VertexData.
|
|
31
|
+
* The optional is empty if the vertex has been deleted.
|
|
32
|
+
* The scalars of the diagram are SymbolicPiExpressions, meaning that all
|
|
33
|
+
* computations can be done symbolically.
|
|
34
|
+
*/
|
|
35
|
+
class ZXDiagram {
|
|
36
|
+
public:
|
|
37
|
+
ZXDiagram() = default;
|
|
38
|
+
/**
|
|
39
|
+
* @brief Create an nqubit identity diagram.
|
|
40
|
+
* @param nqubits number of qubits
|
|
41
|
+
*/
|
|
42
|
+
explicit ZXDiagram(std::size_t nqubits);
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* @brief Add an edge to the diagram.
|
|
46
|
+
* @param from first vertex of the edge
|
|
47
|
+
* @param to second vertex of the edge
|
|
48
|
+
* @param type type of the edge (Simple or Hadamard)
|
|
49
|
+
*/
|
|
50
|
+
void addEdge(Vertex from, Vertex to, EdgeType type = EdgeType::Simple);
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* @brief Add a Hadamard edge to the diagram.
|
|
54
|
+
* @param from first vertex of the edge
|
|
55
|
+
* @param to second vertex of the edge
|
|
56
|
+
*/
|
|
57
|
+
void addHadamardEdge(const Vertex from, const Vertex to) {
|
|
58
|
+
addEdge(from, to, EdgeType::Hadamard);
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* @brief Add edge to diagram, simplifying the diagram if this results in
|
|
63
|
+
* parallel edges.
|
|
64
|
+
* @details In the ZX-calculus, parallel edges and self-loops can usually be
|
|
65
|
+
* simplified. Two parallel Simple edges between two opposite-colored
|
|
66
|
+
* vertices cancel out for example. This function adds an edge to the diagram
|
|
67
|
+
* and then simplifies the diagram if necessary.
|
|
68
|
+
* @param from first vertex of the edge
|
|
69
|
+
* @param to second vertex of the edge
|
|
70
|
+
* @param eType type of the edge (Simple or Hadamard)
|
|
71
|
+
*/
|
|
72
|
+
void addEdgeParallelAware(Vertex from, Vertex to,
|
|
73
|
+
EdgeType eType = EdgeType::Simple);
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* @brief Remove Edge from the diagram.
|
|
77
|
+
* @param from first vertex of the edge
|
|
78
|
+
* @param to second vertex of the edge
|
|
79
|
+
*/
|
|
80
|
+
void removeEdge(Vertex from, Vertex to);
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* @brief Add a vertex to the diagram.
|
|
84
|
+
* @param data data of the vertex
|
|
85
|
+
* @return the vertex that was added
|
|
86
|
+
*/
|
|
87
|
+
Vertex addVertex(const VertexData& data);
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* @brief Add a vertex to the diagram.
|
|
91
|
+
* @param qubit qubit index of the vertex
|
|
92
|
+
* @param col column index of the vertex
|
|
93
|
+
* @param phase phase of the vertex
|
|
94
|
+
* @param type type of the vertex
|
|
95
|
+
* @return the vertex that was added
|
|
96
|
+
*/
|
|
97
|
+
Vertex addVertex(Qubit qubit, Col col = 0,
|
|
98
|
+
const PiExpression& phase = PiExpression(),
|
|
99
|
+
VertexType type = VertexType::Z);
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* @brief Add a bare qubit to the diagram.
|
|
103
|
+
*/
|
|
104
|
+
void addQubit();
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* @brief Add multiple bare qubits to the diagram.
|
|
108
|
+
* @param n number of qubits to add
|
|
109
|
+
*/
|
|
110
|
+
void addQubits(zx::Qubit n);
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* @brief Remove a vertex from the diagram. Also removes all edges incident to
|
|
114
|
+
* the vertex.
|
|
115
|
+
* @param toRemove vertex to remove
|
|
116
|
+
*/
|
|
117
|
+
void removeVertex(Vertex toRemove);
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* @brief Get number of deleted vertices.
|
|
121
|
+
* @details Deleted vertices are not removed from the vertices vector, but
|
|
122
|
+
* are left as optional in the array.
|
|
123
|
+
* @return number of deleted vertices
|
|
124
|
+
*/
|
|
125
|
+
[[nodiscard]] std::size_t getNdeleted() const { return deleted.size(); }
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* @brief Get number of vertices.
|
|
129
|
+
* @return number of vertices
|
|
130
|
+
*/
|
|
131
|
+
[[nodiscard]] std::size_t getNVertices() const { return nvertices; }
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* @brief Get number of edges.
|
|
135
|
+
* @return number of edges
|
|
136
|
+
*/
|
|
137
|
+
[[nodiscard]] std::size_t getNEdges() const { return nedges; }
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* @brief Get number of qubits.
|
|
141
|
+
* @return number of qubits
|
|
142
|
+
*/
|
|
143
|
+
[[nodiscard]] std::size_t getNQubits() const { return inputs.size(); }
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* @brief Check whether there is a path between two vertices.
|
|
147
|
+
* @param from first vertex
|
|
148
|
+
* @param to second vertex
|
|
149
|
+
* @return true if there is a path between the two vertices, false otherwise
|
|
150
|
+
*/
|
|
151
|
+
[[nodiscard]] bool connected(Vertex from, Vertex to) const;
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* @brief Get the edge between two vertices.
|
|
155
|
+
* @param from first vertex
|
|
156
|
+
* @param to second vertex
|
|
157
|
+
* @return the edge between the two vertices, if it exists
|
|
158
|
+
*/
|
|
159
|
+
[[nodiscard]] std::optional<Edge> getEdge(Vertex from, Vertex to) const;
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* @brief Get all edges incident to a vertex.
|
|
163
|
+
* @param v vertex
|
|
164
|
+
* @return vector of edges incident to the vertex
|
|
165
|
+
*/
|
|
166
|
+
[[nodiscard]] const std::vector<Edge>& incidentEdges(const Vertex v) const {
|
|
167
|
+
return edges[v];
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* @brief Get the n-th incident edge of a vertex. Bounds are not checked for
|
|
172
|
+
* performance reasons!
|
|
173
|
+
* @param v vertex
|
|
174
|
+
* @param n index of the incident edge
|
|
175
|
+
* @return the n-th incident edge of the vertex
|
|
176
|
+
*/
|
|
177
|
+
[[nodiscard]] const Edge& incidentEdge(const Vertex v, const std::size_t n) {
|
|
178
|
+
return edges[v][n];
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
/**
|
|
182
|
+
* @brief Get the degree of a vertex.
|
|
183
|
+
* @param v vertex
|
|
184
|
+
* @return degree of the vertex
|
|
185
|
+
*/
|
|
186
|
+
[[nodiscard]] std::size_t degree(const Vertex v) const {
|
|
187
|
+
return edges[v].size();
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
/**
|
|
191
|
+
* @brief Get the phase of a vertex
|
|
192
|
+
* @param v vertex
|
|
193
|
+
* @return phase of the vertex
|
|
194
|
+
*/
|
|
195
|
+
[[nodiscard]] const PiExpression& phase(const Vertex v) const {
|
|
196
|
+
const auto& vertex = vertices[v];
|
|
197
|
+
assert(vertex.has_value());
|
|
198
|
+
return vertex->phase; // NOLINT(bugprone-unchecked-optional-access)
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* @brief Get the qubit of a vertex
|
|
203
|
+
* @param v vertex
|
|
204
|
+
* @return qubit of the vertex
|
|
205
|
+
*/
|
|
206
|
+
[[nodiscard]] Qubit qubit(const Vertex v) const {
|
|
207
|
+
const auto& vertex = vertices[v];
|
|
208
|
+
assert(vertex.has_value());
|
|
209
|
+
return vertex->qubit; // NOLINT(bugprone-unchecked-optional-access)
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
/**
|
|
213
|
+
* @brief Get the type of a vertex
|
|
214
|
+
* @param v vertex
|
|
215
|
+
* @return type of the vertex
|
|
216
|
+
*/
|
|
217
|
+
[[nodiscard]] VertexType type(const Vertex v) const {
|
|
218
|
+
const auto& vertex = vertices[v];
|
|
219
|
+
assert(vertex.has_value());
|
|
220
|
+
return vertex->type; // NOLINT(bugprone-unchecked-optional-access)
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
/**
|
|
224
|
+
* @brief Get vertex data if vertex has not been deleted.
|
|
225
|
+
* @param v vertex
|
|
226
|
+
* @return vertex data if vertex has not been deleted
|
|
227
|
+
*/
|
|
228
|
+
[[nodiscard]] std::optional<VertexData> getVData(const Vertex v) const {
|
|
229
|
+
return vertices[v];
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
/**
|
|
233
|
+
* @brief Get all vertices of the diagram.
|
|
234
|
+
* @return vector of vertices
|
|
235
|
+
*/
|
|
236
|
+
[[nodiscard]] std::vector<std::pair<Vertex, const VertexData&>>
|
|
237
|
+
getVertices() const;
|
|
238
|
+
|
|
239
|
+
/**
|
|
240
|
+
* @brief Get all edges of the diagram.
|
|
241
|
+
* @return vector of edges
|
|
242
|
+
*/
|
|
243
|
+
[[nodiscard]] std::vector<std::pair<Vertex, Vertex>> getEdges() const;
|
|
244
|
+
|
|
245
|
+
/**
|
|
246
|
+
* @brief Get all input vertices of the diagram.
|
|
247
|
+
* @return vector of input vertices
|
|
248
|
+
*/
|
|
249
|
+
[[nodiscard]] const std::vector<Vertex>& getInputs() const { return inputs; }
|
|
250
|
+
|
|
251
|
+
/**
|
|
252
|
+
* @brief Get i-th input vertex of the diagram. Bounds are not checked!
|
|
253
|
+
* @param i index of the input vertex
|
|
254
|
+
* @return i-th input vertex
|
|
255
|
+
*/
|
|
256
|
+
[[nodiscard]] Vertex getInput(const std::size_t i) const { return inputs[i]; }
|
|
257
|
+
|
|
258
|
+
/**
|
|
259
|
+
* @brief Get all output vertices of the diagram.
|
|
260
|
+
* @return vector of output vertices
|
|
261
|
+
*/
|
|
262
|
+
[[nodiscard]] const std::vector<Vertex>& getOutputs() const {
|
|
263
|
+
return outputs;
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
/**
|
|
267
|
+
* @brief Get i-th output vertex of the diagram. Bounds are not checked!
|
|
268
|
+
* @param i index of the output vertex
|
|
269
|
+
* @return i-th output vertex
|
|
270
|
+
*/
|
|
271
|
+
[[nodiscard]] Vertex getOutput(const std::size_t i) const {
|
|
272
|
+
return outputs[i];
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
/**
|
|
276
|
+
* @brief Check whether vertex has been deleted.
|
|
277
|
+
* @param v vertex
|
|
278
|
+
* @return true if vertex has been deleted, false otherwise
|
|
279
|
+
*/
|
|
280
|
+
[[nodiscard]] bool isDeleted(const Vertex v) const {
|
|
281
|
+
return !vertices[v].has_value();
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
/**
|
|
285
|
+
* @brief Check whether vertex is a boundary vertex.
|
|
286
|
+
* @param v vertex
|
|
287
|
+
* @return true if vertex is a boundary vertex, false otherwise
|
|
288
|
+
*/
|
|
289
|
+
[[nodiscard]] bool isBoundaryVertex(const Vertex v) const {
|
|
290
|
+
return type(v) == VertexType::Boundary;
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
/**
|
|
294
|
+
* @brief Check whether vertex is an input vertex.
|
|
295
|
+
* @param v vertex
|
|
296
|
+
* @return true if vertex is an input vertex, false otherwise
|
|
297
|
+
*/
|
|
298
|
+
[[nodiscard]] bool isInput(Vertex v) const;
|
|
299
|
+
|
|
300
|
+
/**
|
|
301
|
+
* @brief Check whether vertex is an output vertex.
|
|
302
|
+
* @param v vertex
|
|
303
|
+
* @return true if vertex is an output vertex, false otherwise
|
|
304
|
+
*/
|
|
305
|
+
[[nodiscard]] bool isOutput(Vertex v) const;
|
|
306
|
+
|
|
307
|
+
/**
|
|
308
|
+
* @brief Add phase to a vertex. The phase is added to the existing phase.
|
|
309
|
+
* @param v vertex
|
|
310
|
+
* @param phase phase to add
|
|
311
|
+
*/
|
|
312
|
+
void addPhase(const Vertex v, const PiExpression& phase) {
|
|
313
|
+
auto& vertex = vertices[v];
|
|
314
|
+
if (vertex.has_value()) {
|
|
315
|
+
vertex->phase += phase;
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
/**
|
|
320
|
+
* @brief Set phase of a vertex. Previous value is overwritten.
|
|
321
|
+
* @param v vertex
|
|
322
|
+
* @param phase phase to set
|
|
323
|
+
*/
|
|
324
|
+
void setPhase(const Vertex v, const PiExpression& phase) {
|
|
325
|
+
auto& vertex = vertices[v];
|
|
326
|
+
if (vertex.has_value()) {
|
|
327
|
+
vertex->phase = phase;
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
/**
|
|
332
|
+
* @brief Set type of a vertex.
|
|
333
|
+
* @param v vertex
|
|
334
|
+
* @param type type to set
|
|
335
|
+
*/
|
|
336
|
+
void setType(const Vertex v, const VertexType type) {
|
|
337
|
+
auto& vertex = vertices[v];
|
|
338
|
+
if (vertex.has_value()) {
|
|
339
|
+
vertex->type = type;
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
/**
|
|
344
|
+
* @brief Transform the diagram to a graph-like diagram. Modifies the diagram
|
|
345
|
+
* in place.
|
|
346
|
+
* @details A graph-like diagram is a diagram where all vertices are of type Z
|
|
347
|
+
* and all edges are hadamard edges. Every ZX-diagram can be rewritten into
|
|
348
|
+
* this form by adding Hadamard edges and changing the type of the vertices.
|
|
349
|
+
*/
|
|
350
|
+
void toGraphlike();
|
|
351
|
+
|
|
352
|
+
/**
|
|
353
|
+
* @brief check whether the diagram is the identity diagram.
|
|
354
|
+
* @details The identity diagram is a diagram where every input is connected
|
|
355
|
+
* to one output without any additional vertices or hadamard edges in between.
|
|
356
|
+
* @return true if the diagram is the identity diagram, false otherwise
|
|
357
|
+
*/
|
|
358
|
+
[[nodiscard]] bool isIdentity() const;
|
|
359
|
+
|
|
360
|
+
/**
|
|
361
|
+
* @brief Get the adjoint of the diagram.
|
|
362
|
+
* @details The adjoint of a ZX-diagram is the diagram with inputs and outputs
|
|
363
|
+
* swapped and all phases negated.
|
|
364
|
+
* @return the adjoint of the diagram
|
|
365
|
+
*/
|
|
366
|
+
[[nodiscard]] ZXDiagram adjoint() const;
|
|
367
|
+
|
|
368
|
+
/**
|
|
369
|
+
* @brief Invert the diagram in place.
|
|
370
|
+
* @details Diagram is replaced by its adjoint.
|
|
371
|
+
* @return reference to the inverted diagram
|
|
372
|
+
*/
|
|
373
|
+
ZXDiagram& invert();
|
|
374
|
+
|
|
375
|
+
/**
|
|
376
|
+
* @brief Concatenate two diagrams. Modifies the first diagram in place.
|
|
377
|
+
* @details The second diagram is added to the first diagram. The inputs of
|
|
378
|
+
* the second diagram are connected to the outputs of the first diagram. The
|
|
379
|
+
* number of qubits of the two diagrams must be the same.
|
|
380
|
+
* @param rhs second diagram
|
|
381
|
+
* @return reference to the concatenated diagram
|
|
382
|
+
*/
|
|
383
|
+
ZXDiagram& concat(const ZXDiagram& rhs);
|
|
384
|
+
|
|
385
|
+
/**
|
|
386
|
+
* @brief Same as concat(const ZXDiagram&)
|
|
387
|
+
* @param rhs second diagram
|
|
388
|
+
* @return reference to the concatenated diagram
|
|
389
|
+
*/
|
|
390
|
+
ZXDiagram& operator+=(const ZXDiagram& rhs) { return this->concat(rhs); }
|
|
391
|
+
|
|
392
|
+
/**
|
|
393
|
+
* @brief Convert a qubit to an ancilla initialized and post-selected on |0>.
|
|
394
|
+
* @param qubit qubit to convert
|
|
395
|
+
*/
|
|
396
|
+
void makeAncilla(Qubit qubit);
|
|
397
|
+
|
|
398
|
+
/**
|
|
399
|
+
* @brief Convert a qubit to an ancilla initialized and post-selected on |0>.
|
|
400
|
+
* @param in qubit initialized in |0>
|
|
401
|
+
* @param out qubit post-selected in |0>
|
|
402
|
+
*/
|
|
403
|
+
void makeAncilla(Qubit in, Qubit out);
|
|
404
|
+
|
|
405
|
+
/**
|
|
406
|
+
* @brief Round phases in the diagram to multiples of pi/2. Modifies the
|
|
407
|
+
* diagram in place.
|
|
408
|
+
* @param tolerance tolerance for rounding
|
|
409
|
+
*/
|
|
410
|
+
void approximateCliffords(fp tolerance);
|
|
411
|
+
|
|
412
|
+
/**
|
|
413
|
+
* @brief Remove disconnected spiders from the diagram. Modifies the diagram
|
|
414
|
+
* in place.
|
|
415
|
+
*/
|
|
416
|
+
void removeDisconnectedSpiders();
|
|
417
|
+
|
|
418
|
+
/**
|
|
419
|
+
* @brief Add a global phase to the diagram. Adds the phase to the current
|
|
420
|
+
* global phase.
|
|
421
|
+
* @param phase phase to add
|
|
422
|
+
*/
|
|
423
|
+
void addGlobalPhase(const PiExpression& phase);
|
|
424
|
+
|
|
425
|
+
/**
|
|
426
|
+
* @brief Get the global phase of the diagram.
|
|
427
|
+
* @return global phase of the diagram
|
|
428
|
+
*/
|
|
429
|
+
[[nodiscard]] PiExpression getGlobalPhase() const { return globalPhase; }
|
|
430
|
+
|
|
431
|
+
/**
|
|
432
|
+
* @brief Check whether the global phase of the diagram is zero.
|
|
433
|
+
* @return true if the global phase is zero, false otherwise
|
|
434
|
+
*/
|
|
435
|
+
[[nodiscard]] bool globalPhaseIsZero() const { return globalPhase.isZero(); }
|
|
436
|
+
|
|
437
|
+
/**
|
|
438
|
+
* @brief Get the adjacency matrix of the diagram.
|
|
439
|
+
* @return adjacency matrix of the diagram
|
|
440
|
+
*/
|
|
441
|
+
[[nodiscard]] gf2Mat getAdjMat() const;
|
|
442
|
+
|
|
443
|
+
/**
|
|
444
|
+
* @brief Get the connected set of a set of vertices.
|
|
445
|
+
* @details The connected set of a set of vertices is the set of all vertices
|
|
446
|
+
* that are connected to the input set.
|
|
447
|
+
* @param s set of vertices
|
|
448
|
+
* @param exclude set of vertices to exclude from the connected set
|
|
449
|
+
* @return connected set of the input set
|
|
450
|
+
*/
|
|
451
|
+
[[nodiscard]] std::vector<Vertex>
|
|
452
|
+
getConnectedSet(const std::vector<Vertex>& s,
|
|
453
|
+
const std::vector<Vertex>& exclude = {}) const;
|
|
454
|
+
|
|
455
|
+
/**
|
|
456
|
+
* @brief Check whether a vertex is in a vector of vertices.
|
|
457
|
+
* @param v vertex
|
|
458
|
+
* @param vertices vector of vertices
|
|
459
|
+
* @return true if the vertex is in the vector, false otherwise
|
|
460
|
+
*/
|
|
461
|
+
static bool isIn(const Vertex& v, const std::vector<Vertex>& vertices);
|
|
462
|
+
|
|
463
|
+
private:
|
|
464
|
+
std::vector<std::vector<Edge>> edges;
|
|
465
|
+
std::vector<std::optional<VertexData>> vertices;
|
|
466
|
+
std::vector<Vertex> deleted;
|
|
467
|
+
std::vector<Vertex> inputs;
|
|
468
|
+
std::vector<Vertex> outputs;
|
|
469
|
+
std::size_t nvertices = 0;
|
|
470
|
+
std::size_t nedges = 0;
|
|
471
|
+
PiExpression globalPhase;
|
|
472
|
+
|
|
473
|
+
std::vector<Vertex> initGraph(std::size_t nqubits);
|
|
474
|
+
void closeGraph(const std::vector<Vertex>& qubitVertices);
|
|
475
|
+
|
|
476
|
+
void removeHalfEdge(Vertex from, Vertex to);
|
|
477
|
+
|
|
478
|
+
std::vector<Edge>::iterator getEdgePtr(Vertex from, Vertex to);
|
|
479
|
+
};
|
|
480
|
+
} // namespace zx
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
|
|
2
|
+
#ifndef MQT_CORE_ZX_EXPORT_H
|
|
3
|
+
#define MQT_CORE_ZX_EXPORT_H
|
|
4
|
+
|
|
5
|
+
#ifdef MQT_CORE_ZX_STATIC_DEFINE
|
|
6
|
+
# define MQT_CORE_ZX_EXPORT
|
|
7
|
+
# define MQT_CORE_ZX_NO_EXPORT
|
|
8
|
+
#else
|
|
9
|
+
# ifndef MQT_CORE_ZX_EXPORT
|
|
10
|
+
# ifdef mqt_core_zx_EXPORTS
|
|
11
|
+
/* We are building this library */
|
|
12
|
+
# define MQT_CORE_ZX_EXPORT __attribute__((visibility("default")))
|
|
13
|
+
# else
|
|
14
|
+
/* We are using this library */
|
|
15
|
+
# define MQT_CORE_ZX_EXPORT __attribute__((visibility("default")))
|
|
16
|
+
# endif
|
|
17
|
+
# endif
|
|
18
|
+
|
|
19
|
+
# ifndef MQT_CORE_ZX_NO_EXPORT
|
|
20
|
+
# define MQT_CORE_ZX_NO_EXPORT __attribute__((visibility("hidden")))
|
|
21
|
+
# endif
|
|
22
|
+
#endif
|
|
23
|
+
|
|
24
|
+
#ifndef MQT_CORE_ZX_DEPRECATED
|
|
25
|
+
# define MQT_CORE_ZX_DEPRECATED __attribute__ ((__deprecated__))
|
|
26
|
+
#endif
|
|
27
|
+
|
|
28
|
+
#ifndef MQT_CORE_ZX_DEPRECATED_EXPORT
|
|
29
|
+
# define MQT_CORE_ZX_DEPRECATED_EXPORT MQT_CORE_ZX_EXPORT MQT_CORE_ZX_DEPRECATED
|
|
30
|
+
#endif
|
|
31
|
+
|
|
32
|
+
#ifndef MQT_CORE_ZX_DEPRECATED_NO_EXPORT
|
|
33
|
+
# define MQT_CORE_ZX_DEPRECATED_NO_EXPORT MQT_CORE_ZX_NO_EXPORT MQT_CORE_ZX_DEPRECATED
|
|
34
|
+
#endif
|
|
35
|
+
|
|
36
|
+
/* NOLINTNEXTLINE(readability-avoid-unconditional-preprocessor-if) */
|
|
37
|
+
#if 0 /* DEFINE_NO_DEPRECATED */
|
|
38
|
+
# ifndef MQT_CORE_ZX_NO_DEPRECATED
|
|
39
|
+
# define MQT_CORE_ZX_NO_DEPRECATED
|
|
40
|
+
# endif
|
|
41
|
+
#endif
|
|
42
|
+
|
|
43
|
+
#endif /* MQT_CORE_ZX_EXPORT_H */
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
// __ _____ _____ _____
|
|
2
|
+
// __| | __| | | | JSON for Modern C++
|
|
3
|
+
// | | |__ | | | | | | version 3.12.0
|
|
4
|
+
// |_____|_____|_____|_|___| https://github.com/nlohmann/json
|
|
5
|
+
//
|
|
6
|
+
// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann <https://nlohmann.me>
|
|
7
|
+
// SPDX-License-Identifier: MIT
|
|
8
|
+
|
|
9
|
+
#pragma once
|
|
10
|
+
|
|
11
|
+
#include <utility>
|
|
12
|
+
|
|
13
|
+
#include <nlohmann/detail/abi_macros.hpp>
|
|
14
|
+
#include <nlohmann/detail/conversions/from_json.hpp>
|
|
15
|
+
#include <nlohmann/detail/conversions/to_json.hpp>
|
|
16
|
+
#include <nlohmann/detail/meta/identity_tag.hpp>
|
|
17
|
+
|
|
18
|
+
NLOHMANN_JSON_NAMESPACE_BEGIN
|
|
19
|
+
|
|
20
|
+
/// @sa https://json.nlohmann.me/api/adl_serializer/
|
|
21
|
+
template<typename ValueType, typename>
|
|
22
|
+
struct adl_serializer
|
|
23
|
+
{
|
|
24
|
+
/// @brief convert a JSON value to any value type
|
|
25
|
+
/// @sa https://json.nlohmann.me/api/adl_serializer/from_json/
|
|
26
|
+
template<typename BasicJsonType, typename TargetType = ValueType>
|
|
27
|
+
static auto from_json(BasicJsonType && j, TargetType& val) noexcept(
|
|
28
|
+
noexcept(::nlohmann::from_json(std::forward<BasicJsonType>(j), val)))
|
|
29
|
+
-> decltype(::nlohmann::from_json(std::forward<BasicJsonType>(j), val), void())
|
|
30
|
+
{
|
|
31
|
+
::nlohmann::from_json(std::forward<BasicJsonType>(j), val);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/// @brief convert a JSON value to any value type
|
|
35
|
+
/// @sa https://json.nlohmann.me/api/adl_serializer/from_json/
|
|
36
|
+
template<typename BasicJsonType, typename TargetType = ValueType>
|
|
37
|
+
static auto from_json(BasicJsonType && j) noexcept(
|
|
38
|
+
noexcept(::nlohmann::from_json(std::forward<BasicJsonType>(j), detail::identity_tag<TargetType> {})))
|
|
39
|
+
-> decltype(::nlohmann::from_json(std::forward<BasicJsonType>(j), detail::identity_tag<TargetType> {}))
|
|
40
|
+
{
|
|
41
|
+
return ::nlohmann::from_json(std::forward<BasicJsonType>(j), detail::identity_tag<TargetType> {});
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/// @brief convert any value type to a JSON value
|
|
45
|
+
/// @sa https://json.nlohmann.me/api/adl_serializer/to_json/
|
|
46
|
+
template<typename BasicJsonType, typename TargetType = ValueType>
|
|
47
|
+
static auto to_json(BasicJsonType& j, TargetType && val) noexcept(
|
|
48
|
+
noexcept(::nlohmann::to_json(j, std::forward<TargetType>(val))))
|
|
49
|
+
-> decltype(::nlohmann::to_json(j, std::forward<TargetType>(val)), void())
|
|
50
|
+
{
|
|
51
|
+
::nlohmann::to_json(j, std::forward<TargetType>(val));
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
NLOHMANN_JSON_NAMESPACE_END
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
// __ _____ _____ _____
|
|
2
|
+
// __| | __| | | | JSON for Modern C++
|
|
3
|
+
// | | |__ | | | | | | version 3.12.0
|
|
4
|
+
// |_____|_____|_____|_|___| https://github.com/nlohmann/json
|
|
5
|
+
//
|
|
6
|
+
// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann <https://nlohmann.me>
|
|
7
|
+
// SPDX-License-Identifier: MIT
|
|
8
|
+
|
|
9
|
+
#pragma once
|
|
10
|
+
|
|
11
|
+
#include <cstdint> // uint8_t, uint64_t
|
|
12
|
+
#include <tuple> // tie
|
|
13
|
+
#include <utility> // move
|
|
14
|
+
|
|
15
|
+
#include <nlohmann/detail/abi_macros.hpp>
|
|
16
|
+
|
|
17
|
+
NLOHMANN_JSON_NAMESPACE_BEGIN
|
|
18
|
+
|
|
19
|
+
/// @brief an internal type for a backed binary type
|
|
20
|
+
/// @sa https://json.nlohmann.me/api/byte_container_with_subtype/
|
|
21
|
+
template<typename BinaryType>
|
|
22
|
+
class byte_container_with_subtype : public BinaryType
|
|
23
|
+
{
|
|
24
|
+
public:
|
|
25
|
+
using container_type = BinaryType;
|
|
26
|
+
using subtype_type = std::uint64_t;
|
|
27
|
+
|
|
28
|
+
/// @sa https://json.nlohmann.me/api/byte_container_with_subtype/byte_container_with_subtype/
|
|
29
|
+
byte_container_with_subtype() noexcept(noexcept(container_type()))
|
|
30
|
+
: container_type()
|
|
31
|
+
{}
|
|
32
|
+
|
|
33
|
+
/// @sa https://json.nlohmann.me/api/byte_container_with_subtype/byte_container_with_subtype/
|
|
34
|
+
byte_container_with_subtype(const container_type& b) noexcept(noexcept(container_type(b)))
|
|
35
|
+
: container_type(b)
|
|
36
|
+
{}
|
|
37
|
+
|
|
38
|
+
/// @sa https://json.nlohmann.me/api/byte_container_with_subtype/byte_container_with_subtype/
|
|
39
|
+
byte_container_with_subtype(container_type&& b) noexcept(noexcept(container_type(std::move(b))))
|
|
40
|
+
: container_type(std::move(b))
|
|
41
|
+
{}
|
|
42
|
+
|
|
43
|
+
/// @sa https://json.nlohmann.me/api/byte_container_with_subtype/byte_container_with_subtype/
|
|
44
|
+
byte_container_with_subtype(const container_type& b, subtype_type subtype_) noexcept(noexcept(container_type(b)))
|
|
45
|
+
: container_type(b)
|
|
46
|
+
, m_subtype(subtype_)
|
|
47
|
+
, m_has_subtype(true)
|
|
48
|
+
{}
|
|
49
|
+
|
|
50
|
+
/// @sa https://json.nlohmann.me/api/byte_container_with_subtype/byte_container_with_subtype/
|
|
51
|
+
byte_container_with_subtype(container_type&& b, subtype_type subtype_) noexcept(noexcept(container_type(std::move(b))))
|
|
52
|
+
: container_type(std::move(b))
|
|
53
|
+
, m_subtype(subtype_)
|
|
54
|
+
, m_has_subtype(true)
|
|
55
|
+
{}
|
|
56
|
+
|
|
57
|
+
bool operator==(const byte_container_with_subtype& rhs) const
|
|
58
|
+
{
|
|
59
|
+
return std::tie(static_cast<const BinaryType&>(*this), m_subtype, m_has_subtype) ==
|
|
60
|
+
std::tie(static_cast<const BinaryType&>(rhs), rhs.m_subtype, rhs.m_has_subtype);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
bool operator!=(const byte_container_with_subtype& rhs) const
|
|
64
|
+
{
|
|
65
|
+
return !(rhs == *this);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/// @brief sets the binary subtype
|
|
69
|
+
/// @sa https://json.nlohmann.me/api/byte_container_with_subtype/set_subtype/
|
|
70
|
+
void set_subtype(subtype_type subtype_) noexcept
|
|
71
|
+
{
|
|
72
|
+
m_subtype = subtype_;
|
|
73
|
+
m_has_subtype = true;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/// @brief return the binary subtype
|
|
77
|
+
/// @sa https://json.nlohmann.me/api/byte_container_with_subtype/subtype/
|
|
78
|
+
constexpr subtype_type subtype() const noexcept
|
|
79
|
+
{
|
|
80
|
+
return m_has_subtype ? m_subtype : static_cast<subtype_type>(-1);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/// @brief return whether the value has a subtype
|
|
84
|
+
/// @sa https://json.nlohmann.me/api/byte_container_with_subtype/has_subtype/
|
|
85
|
+
constexpr bool has_subtype() const noexcept
|
|
86
|
+
{
|
|
87
|
+
return m_has_subtype;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/// @brief clears the binary subtype
|
|
91
|
+
/// @sa https://json.nlohmann.me/api/byte_container_with_subtype/clear_subtype/
|
|
92
|
+
void clear_subtype() noexcept
|
|
93
|
+
{
|
|
94
|
+
m_subtype = 0;
|
|
95
|
+
m_has_subtype = false;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
private:
|
|
99
|
+
subtype_type m_subtype = 0;
|
|
100
|
+
bool m_has_subtype = false;
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
NLOHMANN_JSON_NAMESPACE_END
|