mqt-core 3.1.0__tar.gz → 3.2.1__tar.gz
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.
Potentially problematic release.
This version of mqt-core might be problematic. Click here for more details.
- {mqt_core-3.1.0 → mqt_core-3.2.1}/.clang-format +1 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/.clang-tidy +1 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/.pre-commit-config.yaml +4 -4
- {mqt_core-3.1.0 → mqt_core-3.2.1}/CHANGELOG.md +40 -7
- {mqt_core-3.1.0 → mqt_core-3.2.1}/PKG-INFO +5 -4
- {mqt_core-3.1.0 → mqt_core-3.2.1}/README.md +3 -3
- {mqt_core-3.1.0 → mqt_core-3.2.1}/UPGRADING.md +16 -2
- {mqt_core-3.1.0 → mqt_core-3.2.1}/bindings/dd/register_dd.cpp +0 -1
- {mqt_core-3.1.0 → mqt_core-3.2.1}/bindings/dd/register_dd_package.cpp +5 -2
- {mqt_core-3.1.0 → mqt_core-3.2.1}/bindings/dd/register_matrix_dds.cpp +3 -3
- {mqt_core-3.1.0 → mqt_core-3.2.1}/bindings/dd/register_vector_dds.cpp +1 -1
- {mqt_core-3.1.0 → mqt_core-3.2.1}/bindings/ir/operations/register_classic_controlled_operation.cpp +5 -5
- {mqt_core-3.1.0 → mqt_core-3.2.1}/bindings/ir/operations/register_compound_operation.cpp +1 -1
- {mqt_core-3.1.0 → mqt_core-3.2.1}/bindings/ir/operations/register_control.cpp +7 -20
- {mqt_core-3.1.0 → mqt_core-3.2.1}/bindings/ir/operations/register_optype.cpp +4 -10
- {mqt_core-3.1.0 → mqt_core-3.2.1}/bindings/ir/register_quantum_computation.cpp +2 -1
- {mqt_core-3.1.0 → mqt_core-3.2.1}/cmake/CompilerOptions.cmake +1 -1
- {mqt_core-3.1.0 → mqt_core-3.2.1}/cmake/ExternalDependencies.cmake +1 -1
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/datastructures/DirectedAcyclicGraph.hpp +4 -4
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/datastructures/DirectedGraph.hpp +8 -8
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/datastructures/UndirectedGraph.hpp +9 -9
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/dd/Node.hpp +1 -1
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/dd/Package.hpp +3 -3
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/ir/operations/Expression.hpp +1 -1
- {mqt_core-3.1.0 → mqt_core-3.2.1}/mlir/CMakeLists.txt +6 -1
- {mqt_core-3.1.0 → mqt_core-3.2.1}/mlir/include/mlir/CMakeLists.txt +1 -0
- mqt_core-3.2.1/mlir/include/mlir/Conversion/CMakeLists.txt +10 -0
- mqt_core-3.2.1/mlir/include/mlir/Conversion/MQTDynToMQTOpt/CMakeLists.txt +13 -0
- mqt_core-3.2.1/mlir/include/mlir/Conversion/MQTDynToMQTOpt/MQTDynToMQTOpt.h +23 -0
- mqt_core-3.2.1/mlir/include/mlir/Conversion/MQTDynToMQTOpt/MQTDynToMQTOpt.td +28 -0
- mqt_core-3.2.1/mlir/include/mlir/Conversion/MQTOptToMQTDyn/CMakeLists.txt +13 -0
- mqt_core-3.2.1/mlir/include/mlir/Conversion/MQTOptToMQTDyn/MQTOptToMQTDyn.h +23 -0
- mqt_core-3.2.1/mlir/include/mlir/Conversion/MQTOptToMQTDyn/MQTOptToMQTDyn.td +28 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/mlir/include/mlir/Dialect/MQTOpt/IR/MQTOptDialect.h +13 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/mlir/include/mlir/Dialect/MQTOpt/IR/MQTOptOps.td +2 -2
- {mqt_core-3.1.0 → mqt_core-3.2.1}/mlir/tools/quantum-opt/CMakeLists.txt +3 -1
- {mqt_core-3.1.0 → mqt_core-3.2.1}/mlir/tools/quantum-opt/quantum-opt.cpp +8 -4
- {mqt_core-3.1.0 → mqt_core-3.2.1}/noxfile.py +2 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/pyproject.toml +6 -2
- {mqt_core-3.1.0 → mqt_core-3.2.1}/python/mqt/core/_version.py +2 -2
- {mqt_core-3.1.0 → mqt_core-3.2.1}/python/mqt/core/dd.pyi +9 -22
- {mqt_core-3.1.0 → mqt_core-3.2.1}/python/mqt/core/ir/operations.pyi +58 -86
- {mqt_core-3.1.0 → mqt_core-3.2.1}/src/algorithms/BernsteinVazirani.cpp +2 -2
- {mqt_core-3.1.0 → mqt_core-3.2.1}/src/algorithms/Grover.cpp +4 -3
- {mqt_core-3.1.0 → mqt_core-3.2.1}/src/circuit_optimizer/CircuitOptimizer.cpp +15 -18
- {mqt_core-3.1.0 → mqt_core-3.2.1}/src/dd/Approximation.cpp +5 -3
- {mqt_core-3.1.0 → mqt_core-3.2.1}/src/dd/ComplexNumbers.cpp +5 -4
- {mqt_core-3.1.0 → mqt_core-3.2.1}/src/dd/ComplexValue.cpp +2 -3
- {mqt_core-3.1.0 → mqt_core-3.2.1}/src/dd/Edge.cpp +1 -1
- {mqt_core-3.1.0 → mqt_core-3.2.1}/src/dd/Export.cpp +4 -4
- {mqt_core-3.1.0 → mqt_core-3.2.1}/src/dd/NoiseFunctionality.cpp +3 -3
- {mqt_core-3.1.0 → mqt_core-3.2.1}/src/dd/Package.cpp +20 -20
- {mqt_core-3.1.0 → mqt_core-3.2.1}/src/dd/Simulation.cpp +1 -2
- {mqt_core-3.1.0 → mqt_core-3.2.1}/src/dd/StateGeneration.cpp +13 -12
- {mqt_core-3.1.0 → mqt_core-3.2.1}/src/dd/UniqueTable.cpp +3 -4
- {mqt_core-3.1.0 → mqt_core-3.2.1}/src/ir/CMakeLists.txt +1 -1
- {mqt_core-3.1.0 → mqt_core-3.2.1}/src/ir/Permutation.cpp +2 -2
- {mqt_core-3.1.0 → mqt_core-3.2.1}/src/ir/QuantumComputation.cpp +37 -37
- {mqt_core-3.1.0 → mqt_core-3.2.1}/src/ir/operations/AodOperation.cpp +1 -1
- {mqt_core-3.1.0 → mqt_core-3.2.1}/src/ir/operations/CompoundOperation.cpp +23 -25
- {mqt_core-3.1.0 → mqt_core-3.2.1}/src/ir/operations/NonUnitaryOperation.cpp +2 -3
- {mqt_core-3.1.0 → mqt_core-3.2.1}/src/ir/operations/Operation.cpp +2 -4
- {mqt_core-3.1.0 → mqt_core-3.2.1}/src/ir/operations/StandardOperation.cpp +5 -6
- {mqt_core-3.1.0 → mqt_core-3.2.1}/src/ir/operations/SymbolicOperation.cpp +4 -5
- {mqt_core-3.1.0 → mqt_core-3.2.1}/src/na/NAComputation.cpp +8 -11
- {mqt_core-3.1.0 → mqt_core-3.2.1}/src/qasm3/Importer.cpp +10 -11
- {mqt_core-3.1.0 → mqt_core-3.2.1}/src/qasm3/Scanner.cpp +4 -6
- {mqt_core-3.1.0 → mqt_core-3.2.1}/src/zx/FunctionalityConstruction.cpp +8 -9
- {mqt_core-3.1.0 → mqt_core-3.2.1}/src/zx/Rules.cpp +12 -12
- {mqt_core-3.1.0 → mqt_core-3.2.1}/src/zx/ZXDiagram.cpp +21 -19
- {mqt_core-3.1.0 → mqt_core-3.2.1}/uv.lock +506 -346
- {mqt_core-3.1.0 → mqt_core-3.2.1}/.cmake-format.yaml +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/.editorconfig +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/.git_archival.txt +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/.gitattributes +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/.gitignore +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/.license-tools-config.json +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/.python_version +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/.readthedocs.yaml +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/CITATION.cff +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/CMakeLists.txt +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/LICENSE.md +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/bindings/CMakeLists.txt +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/bindings/dd/CMakeLists.txt +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/bindings/ir/CMakeLists.txt +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/bindings/ir/operations/register_non_unitary_operation.cpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/bindings/ir/operations/register_operation.cpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/bindings/ir/operations/register_standard_operation.cpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/bindings/ir/operations/register_symbolic_operation.cpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/bindings/ir/register_ir.cpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/bindings/ir/register_operations.cpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/bindings/ir/register_permutation.cpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/bindings/ir/register_registers.cpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/bindings/ir/register_symbolic.cpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/bindings/ir/symbolic/register_expression.cpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/bindings/ir/symbolic/register_term.cpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/bindings/ir/symbolic/register_variable.cpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/cmake/AddMQTCoreLibrary.cmake +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/cmake/AddMQTPythonBinding.cmake +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/cmake/Cache.cmake +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/cmake/CompilerWarnings.cmake +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/cmake/FindGMP.cmake +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/cmake/GetVersion.cmake +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/cmake/PackageAddTest.cmake +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/cmake/PreventInSourceBuilds.cmake +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/cmake/Sanitizers.cmake +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/cmake/SetupMLIR.cmake +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/cmake/StandardProjectSettings.cmake +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/cmake/cmake_uninstall.cmake.in +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/cmake/mqt-core-config.cmake.in +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/algorithms/BernsteinVazirani.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/algorithms/GHZState.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/algorithms/Grover.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/algorithms/QFT.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/algorithms/QPE.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/algorithms/RandomCliffordCircuit.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/algorithms/StatePreparation.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/algorithms/WState.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/circuit_optimizer/CircuitOptimizer.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/datastructures/DisjointSet.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/datastructures/Layer.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/datastructures/SymmetricMatrix.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/dd/Approximation.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/dd/CachedEdge.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/dd/Complex.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/dd/ComplexNumbers.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/dd/ComplexValue.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/dd/ComputeTable.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/dd/DDDefinitions.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/dd/DDpackageConfig.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/dd/DensityNoiseTable.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/dd/Edge.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/dd/Export.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/dd/FunctionalityConstruction.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/dd/GateMatrixDefinitions.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/dd/LinkedListBase.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/dd/MemoryManager.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/dd/NoiseFunctionality.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/dd/Operations.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/dd/Package_fwd.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/dd/RealNumber.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/dd/RealNumberUniqueTable.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/dd/Simulation.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/dd/StateGeneration.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/dd/StochasticNoiseOperationTable.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/dd/UnaryComputeTable.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/dd/UniqueTable.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/dd/statistics/MemoryManagerStatistics.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/dd/statistics/PackageStatistics.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/dd/statistics/Statistics.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/dd/statistics/TableStatistics.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/dd/statistics/UniqueTableStatistics.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/ir/Definitions.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/ir/Permutation.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/ir/QuantumComputation.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/ir/Register.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/ir/operations/AodOperation.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/ir/operations/ClassicControlledOperation.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/ir/operations/CompoundOperation.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/ir/operations/Control.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/ir/operations/NonUnitaryOperation.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/ir/operations/OpType.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/ir/operations/OpType.inc +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/ir/operations/Operation.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/ir/operations/StandardOperation.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/ir/operations/SymbolicOperation.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/na/NAComputation.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/na/entities/Atom.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/na/entities/Location.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/na/entities/Zone.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/na/operations/GlobalCZOp.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/na/operations/GlobalOp.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/na/operations/GlobalRYOp.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/na/operations/LoadOp.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/na/operations/LocalOp.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/na/operations/LocalRZOp.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/na/operations/LocalUOp.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/na/operations/MoveOp.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/na/operations/Op.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/na/operations/ShuttlingOp.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/na/operations/StoreOp.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/qasm3/Exception.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/qasm3/Gate.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/qasm3/Importer.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/qasm3/InstVisitor.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/qasm3/NestedEnvironment.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/qasm3/Parser.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/qasm3/Scanner.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/qasm3/Statement.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/qasm3/Statement_fwd.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/qasm3/StdGates.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/qasm3/Token.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/qasm3/Types.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/qasm3/Types_fwd.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/qasm3/passes/CompilerPass.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/qasm3/passes/ConstEvalPass.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/qasm3/passes/TypeCheckPass.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/zx/FunctionalityConstruction.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/zx/Rational.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/zx/Rules.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/zx/Simplify.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/zx/Utils.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/zx/ZXDefinitions.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/include/mqt-core/zx/ZXDiagram.hpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/mlir/.gitignore +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/mlir/include/CMakeLists.txt +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/mlir/include/mlir/Dialect/CMakeLists.txt +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/mlir/include/mlir/Dialect/Common/Compat.h +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/mlir/include/mlir/Dialect/Common/IR/CommonTraits.h +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/mlir/include/mlir/Dialect/Common/IR/CommonTraits.td +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/mlir/include/mlir/Dialect/Common/IR/StdOps.td.inc +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/mlir/include/mlir/Dialect/MQTDyn/CMakeLists.txt +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/mlir/include/mlir/Dialect/MQTDyn/IR/CMakeLists.txt +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/mlir/include/mlir/Dialect/MQTDyn/IR/MQTDynDialect.h +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/mlir/include/mlir/Dialect/MQTDyn/IR/MQTDynInterfaces.td +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/mlir/include/mlir/Dialect/MQTDyn/IR/MQTDynOps.td +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/mlir/include/mlir/Dialect/MQTDyn/Transforms/CMakeLists.txt +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/mlir/include/mlir/Dialect/MQTDyn/Transforms/Passes.h +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/mlir/include/mlir/Dialect/MQTDyn/Transforms/Passes.td +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/mlir/include/mlir/Dialect/MQTOpt/CMakeLists.txt +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/mlir/include/mlir/Dialect/MQTOpt/IR/CMakeLists.txt +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/mlir/include/mlir/Dialect/MQTOpt/IR/MQTOptInterfaces.td +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/mlir/include/mlir/Dialect/MQTOpt/Transforms/CMakeLists.txt +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/mlir/include/mlir/Dialect/MQTOpt/Transforms/Passes.h +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/mlir/include/mlir/Dialect/MQTOpt/Transforms/Passes.td +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/mlir/tools/CMakeLists.txt +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/python/mqt/core/__init__.py +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/python/mqt/core/__main__.py +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/python/mqt/core/_commands.py +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/python/mqt/core/_compat/__init__.py +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/python/mqt/core/_compat/typing.py +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/python/mqt/core/_version.pyi +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/python/mqt/core/dd_evaluation.py +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/python/mqt/core/ir/__init__.pyi +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/python/mqt/core/ir/registers.pyi +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/python/mqt/core/ir/symbolic.pyi +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/python/mqt/core/plugins/__init__.py +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/python/mqt/core/plugins/qiskit/__init__.py +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/python/mqt/core/plugins/qiskit/mqt_to_qiskit.py +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/python/mqt/core/plugins/qiskit/qiskit_to_mqt.py +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/python/mqt/core/py.typed +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/sitecustomize.py +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/src/CMakeLists.txt +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/src/algorithms/CMakeLists.txt +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/src/algorithms/GHZState.cpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/src/algorithms/QFT.cpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/src/algorithms/QPE.cpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/src/algorithms/RandomCliffordCircuit.cpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/src/algorithms/StatePreparation.cpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/src/algorithms/WState.cpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/src/circuit_optimizer/CMakeLists.txt +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/src/datastructures/CMakeLists.txt +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/src/datastructures/Layer.cpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/src/dd/CMakeLists.txt +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/src/dd/CachedEdge.cpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/src/dd/Complex.cpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/src/dd/FunctionalityConstruction.cpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/src/dd/GateMatrixDefinitions.cpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/src/dd/MemoryManager.cpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/src/dd/Node.cpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/src/dd/Operations.cpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/src/dd/RealNumber.cpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/src/dd/RealNumberUniqueTable.cpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/src/dd/statistics/MemoryManagerStatistics.cpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/src/dd/statistics/PackageStatistics.cpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/src/dd/statistics/Statistics.cpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/src/dd/statistics/TableStatistics.cpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/src/dd/statistics/UniqueTableStatistics.cpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/src/ir/operations/ClassicControlledOperation.cpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/src/ir/operations/Expression.cpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/src/ir/operations/OpType.cpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/src/na/CMakeLists.txt +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/src/na/entities/Zone.cpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/src/na/operations/GlobalOp.cpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/src/na/operations/LoadOp.cpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/src/na/operations/LocalOp.cpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/src/na/operations/MoveOp.cpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/src/na/operations/StoreOp.cpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/src/qasm3/CMakeLists.txt +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/src/qasm3/Parser.cpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/src/qasm3/Statement.cpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/src/qasm3/Token.cpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/src/qasm3/Types.cpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/src/qasm3/passes/ConstEvalPass.cpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/src/qasm3/passes/TypeCheckPass.cpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/src/zx/CMakeLists.txt +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/src/zx/Rational.cpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/src/zx/Simplify.cpp +0 -0
- {mqt_core-3.1.0 → mqt_core-3.2.1}/src/zx/Utils.cpp +0 -0
|
@@ -51,7 +51,7 @@ repos:
|
|
|
51
51
|
|
|
52
52
|
# Handling unwanted unicode characters
|
|
53
53
|
- repo: https://github.com/sirosen/texthooks
|
|
54
|
-
rev: 0.
|
|
54
|
+
rev: 0.7.1
|
|
55
55
|
hooks:
|
|
56
56
|
- id: fix-ligatures
|
|
57
57
|
- id: fix-smartquotes
|
|
@@ -66,7 +66,7 @@ repos:
|
|
|
66
66
|
|
|
67
67
|
# Python linting using ruff
|
|
68
68
|
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
69
|
-
rev: v0.12.
|
|
69
|
+
rev: v0.12.5
|
|
70
70
|
hooks:
|
|
71
71
|
- id: ruff
|
|
72
72
|
args: ["--fix", "--show-fixes"]
|
|
@@ -74,7 +74,7 @@ repos:
|
|
|
74
74
|
|
|
75
75
|
# Static type checking using mypy
|
|
76
76
|
- repo: https://github.com/pre-commit/mirrors-mypy
|
|
77
|
-
rev: v1.
|
|
77
|
+
rev: v1.17.0
|
|
78
78
|
hooks:
|
|
79
79
|
- id: mypy
|
|
80
80
|
files: ^(python/mqt|test/python|noxfile.py)
|
|
@@ -99,7 +99,7 @@ repos:
|
|
|
99
99
|
|
|
100
100
|
# Clang-format the C++ part of the code base automatically
|
|
101
101
|
- repo: https://github.com/pre-commit/mirrors-clang-format
|
|
102
|
-
rev: v20.1.
|
|
102
|
+
rev: v20.1.8
|
|
103
103
|
hooks:
|
|
104
104
|
- id: clang-format
|
|
105
105
|
types_or: [c++, c, cuda]
|
|
@@ -9,7 +9,28 @@ This project adheres to [Semantic Versioning], with the exception that minor rel
|
|
|
9
9
|
|
|
10
10
|
## [Unreleased]
|
|
11
11
|
|
|
12
|
-
## [3.1
|
|
12
|
+
## [3.2.1] - 2025-08-01
|
|
13
|
+
|
|
14
|
+
### Fixed
|
|
15
|
+
|
|
16
|
+
- 🐛 Fix bug where lambda passed to `std::accumulate` incorrectly took the accumulator by reference instead of by value ([#1089]) ([**@denialhaag**])
|
|
17
|
+
- 🐛 Fix bug in DD package ([#1088]) ([**@denialhaag**])
|
|
18
|
+
|
|
19
|
+
you need to .
|
|
20
|
+
|
|
21
|
+
## [3.2.0] - 2025-07-31
|
|
22
|
+
|
|
23
|
+
### Added
|
|
24
|
+
|
|
25
|
+
- 🐍 Build Python 3.14 wheels ([#1076]) ([**@denialhaag**])
|
|
26
|
+
- ✨ Add MQT-internal MLIR dialect conversions ([#1001]) ([**@li-mingbao**])
|
|
27
|
+
|
|
28
|
+
### Changed
|
|
29
|
+
|
|
30
|
+
- ✨ Expose enums to Python via `pybind11`'s new (`enum.Enum`-compatible) `py::native_enum` ([#1075]) ([**@denialhaag**])
|
|
31
|
+
- ⬆️ Require C++20 ([#897]) ([**@burgholzer**], [**@denialhaag**])
|
|
32
|
+
|
|
33
|
+
## [3.1.0] - 2025-07-11
|
|
13
34
|
|
|
14
35
|
_If you are upgrading: please see [`UPGRADING.md`](UPGRADING.md#310)._
|
|
15
36
|
|
|
@@ -28,10 +49,11 @@ _If you are upgrading: please see [`UPGRADING.md`](UPGRADING.md#310)._
|
|
|
28
49
|
- 🐛 Add missing support for `sxdg` gates in Qiskit circuit import ([#930]) ([**@burgholzer**])
|
|
29
50
|
- 🐛 Fix bug related to initialization of operations with duplicate operands ([#964]) ([**@ystade**])
|
|
30
51
|
- 🐛 Open issue for Qiskit upstream test only when the test is actually failing not when it was cancelled ([#973]) ([**@ystade**])
|
|
52
|
+
- 🐛 Fix parsing of `GPhase` in the `MQTOpt` MLIR dialect ([#1042]) ([**@ystade**], [**@DRovara**])
|
|
31
53
|
|
|
32
54
|
### Changed
|
|
33
55
|
|
|
34
|
-
- ⬆️ Bump shared library ABI version from `3.0` to `3.1
|
|
56
|
+
- ⬆️ Bump shared library ABI version from `3.0` to `3.1` ([#1047]) ([**@denialhaag**])
|
|
35
57
|
- ♻️ Switch from reference counting to mark-and-sweep garbage collection in decision diagram package ([#1020]) ([**@MatthiasReumann**], [**burgholzer**], [**q-inho**])
|
|
36
58
|
- ♻️ Move the C++ code for the Python bindings to the top-level `bindings` directory ([#982]) ([**@denialhaag**])
|
|
37
59
|
- ♻️ Move all Python code (no tests) to the top-level `python` directory ([#982]) ([**@denialhaag**])
|
|
@@ -116,17 +138,26 @@ _📚 Refer to the [GitHub Release Notes](https://github.com/munich-quantum-tool
|
|
|
116
138
|
|
|
117
139
|
<!-- Version links -->
|
|
118
140
|
|
|
119
|
-
[unreleased]: https://github.com/munich-quantum-toolkit/core/compare/v3.1
|
|
120
|
-
[3.1
|
|
121
|
-
[3.0
|
|
122
|
-
[3.0
|
|
123
|
-
[3.0.
|
|
141
|
+
[unreleased]: https://github.com/munich-quantum-toolkit/core/compare/v3.2.1...HEAD
|
|
142
|
+
[3.2.1]: https://github.com/munich-quantum-toolkit/core/releases/tag/v3.2.1
|
|
143
|
+
[3.2.0]: https://github.com/munich-quantum-toolkit/core/releases/tag/v3.2.0
|
|
144
|
+
[3.1.0]: https://github.com/munich-quantum-toolkit/core/releases/tag/v3.1.0
|
|
145
|
+
[3.0.2]: https://github.com/munich-quantum-toolkit/core/releases/tag/v3.0.2
|
|
146
|
+
[3.0.1]: https://github.com/munich-quantum-toolkit/core/releases/tag/v3.0.1
|
|
147
|
+
[3.0.0]: https://github.com/munich-quantum-toolkit/core/releases/tag/v3.0.0
|
|
124
148
|
[2.7.0]: https://github.com/munich-quantum-toolkit/core/releases/tag/v2.7.0
|
|
125
149
|
|
|
126
150
|
<!-- PR links -->
|
|
127
151
|
|
|
152
|
+
[#1089]: https://github.com/munich-quantum-toolkit/core/pull/1089
|
|
153
|
+
[#1088]: https://github.com/munich-quantum-toolkit/core/pull/1088
|
|
154
|
+
[#1076]: https://github.com/munich-quantum-toolkit/core/pull/1076
|
|
155
|
+
[#1075]: https://github.com/munich-quantum-toolkit/core/pull/1075
|
|
156
|
+
[#1047]: https://github.com/munich-quantum-toolkit/core/pull/1047
|
|
157
|
+
[#1042]: https://github.com/munich-quantum-toolkit/core/pull/1042
|
|
128
158
|
[#1020]: https://github.com/munich-quantum-toolkit/core/pull/1020
|
|
129
159
|
[#1019]: https://github.com/munich-quantum-toolkit/core/pull/1019
|
|
160
|
+
[#1001]: https://github.com/munich-quantum-toolkit/core/pull/1001
|
|
130
161
|
[#984]: https://github.com/munich-quantum-toolkit/core/pull/984
|
|
131
162
|
[#982]: https://github.com/munich-quantum-toolkit/core/pull/982
|
|
132
163
|
[#975]: https://github.com/munich-quantum-toolkit/core/pull/975
|
|
@@ -145,6 +176,7 @@ _📚 Refer to the [GitHub Release Notes](https://github.com/munich-quantum-tool
|
|
|
145
176
|
[#911]: https://github.com/munich-quantum-toolkit/core/pull/911
|
|
146
177
|
[#908]: https://github.com/munich-quantum-toolkit/core/pull/908
|
|
147
178
|
[#900]: https://github.com/munich-quantum-toolkit/core/pull/900
|
|
179
|
+
[#897]: https://github.com/munich-quantum-toolkit/core/pull/897
|
|
148
180
|
[#895]: https://github.com/munich-quantum-toolkit/core/pull/895
|
|
149
181
|
[#893]: https://github.com/munich-quantum-toolkit/core/pull/893
|
|
150
182
|
[#892]: https://github.com/munich-quantum-toolkit/core/pull/892
|
|
@@ -195,6 +227,7 @@ _📚 Refer to the [GitHub Release Notes](https://github.com/munich-quantum-tool
|
|
|
195
227
|
[**@MatthiasReumann**]: https://github.com/MatthiasReumann
|
|
196
228
|
[**@denialhaag**]: https://github.com/denialhaag
|
|
197
229
|
[**q-inho**]: https://github.com/q-inho
|
|
230
|
+
[**@li-mingbao**]: https://github.com/li-mingbao
|
|
198
231
|
|
|
199
232
|
<!-- General links -->
|
|
200
233
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mqt-core
|
|
3
|
-
Version: 3.1
|
|
3
|
+
Version: 3.2.1
|
|
4
4
|
Summary: The Backbone of the Munich Quantum Toolkit
|
|
5
5
|
Keywords: MQT,quantum-computing,design-automation,decision-diagrams,zx-calculus
|
|
6
6
|
Author-Email: Lukas Burgholzer <burgholzer@me.com>
|
|
@@ -20,6 +20,7 @@ Classifier: Programming Language :: Python :: 3.10
|
|
|
20
20
|
Classifier: Programming Language :: Python :: 3.11
|
|
21
21
|
Classifier: Programming Language :: Python :: 3.12
|
|
22
22
|
Classifier: Programming Language :: Python :: 3.13
|
|
23
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
23
24
|
Classifier: Topic :: Scientific/Engineering :: Electronic Design Automation (EDA)
|
|
24
25
|
Classifier: Typing :: Typed
|
|
25
26
|
Project-URL: Homepage, https://github.com/munich-quantum-toolkit/core
|
|
@@ -55,7 +56,7 @@ Description-Content-Type: text/markdown
|
|
|
55
56
|
|
|
56
57
|
# MQT Core - The Backbone of the Munich Quantum Toolkit (MQT)
|
|
57
58
|
|
|
58
|
-
MQT Core is an open-source C++
|
|
59
|
+
MQT Core is an open-source C++20 and Python library for quantum computing that forms the backbone of the quantum software tools developed as part of the [_Munich Quantum Toolkit (MQT)_](https://mqt.readthedocs.io).
|
|
59
60
|
|
|
60
61
|
<p align="center">
|
|
61
62
|
<a href="https://mqt.readthedocs.io/projects/core">
|
|
@@ -93,7 +94,7 @@ Thank you to all the contributors who have helped make MQT Core a reality!
|
|
|
93
94
|
|
|
94
95
|
## Getting Started
|
|
95
96
|
|
|
96
|
-
`mqt.core` is available via [PyPI](https://pypi.org/project/mqt.core/) for all major operating systems and supports Python 3.9 to 3.
|
|
97
|
+
`mqt.core` is available via [PyPI](https://pypi.org/project/mqt.core/) for all major operating systems and supports Python 3.9 to 3.14.
|
|
97
98
|
|
|
98
99
|
```console
|
|
99
100
|
(.venv) $ pip install mqt.core
|
|
@@ -117,7 +118,7 @@ print(qc)
|
|
|
117
118
|
## System Requirements
|
|
118
119
|
|
|
119
120
|
Building (and running) is continuously tested under Linux, MacOS, and Windows using the [latest available system versions for GitHub Actions](https://github.com/actions/runner-images).
|
|
120
|
-
However, the implementation should be compatible with any current C++ compiler supporting C++
|
|
121
|
+
However, the implementation should be compatible with any current C++ compiler supporting C++20 and a minimum CMake version of 3.24.
|
|
121
122
|
|
|
122
123
|
MQT Core relies on some external dependencies:
|
|
123
124
|
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
|
|
19
19
|
# MQT Core - The Backbone of the Munich Quantum Toolkit (MQT)
|
|
20
20
|
|
|
21
|
-
MQT Core is an open-source C++
|
|
21
|
+
MQT Core is an open-source C++20 and Python library for quantum computing that forms the backbone of the quantum software tools developed as part of the [_Munich Quantum Toolkit (MQT)_](https://mqt.readthedocs.io).
|
|
22
22
|
|
|
23
23
|
<p align="center">
|
|
24
24
|
<a href="https://mqt.readthedocs.io/projects/core">
|
|
@@ -56,7 +56,7 @@ Thank you to all the contributors who have helped make MQT Core a reality!
|
|
|
56
56
|
|
|
57
57
|
## Getting Started
|
|
58
58
|
|
|
59
|
-
`mqt.core` is available via [PyPI](https://pypi.org/project/mqt.core/) for all major operating systems and supports Python 3.9 to 3.
|
|
59
|
+
`mqt.core` is available via [PyPI](https://pypi.org/project/mqt.core/) for all major operating systems and supports Python 3.9 to 3.14.
|
|
60
60
|
|
|
61
61
|
```console
|
|
62
62
|
(.venv) $ pip install mqt.core
|
|
@@ -80,7 +80,7 @@ print(qc)
|
|
|
80
80
|
## System Requirements
|
|
81
81
|
|
|
82
82
|
Building (and running) is continuously tested under Linux, MacOS, and Windows using the [latest available system versions for GitHub Actions](https://github.com/actions/runner-images).
|
|
83
|
-
However, the implementation should be compatible with any current C++ compiler supporting C++
|
|
83
|
+
However, the implementation should be compatible with any current C++ compiler supporting C++20 and a minimum CMake version of 3.24.
|
|
84
84
|
|
|
85
85
|
MQT Core relies on some external dependencies:
|
|
86
86
|
|
|
@@ -4,10 +4,23 @@ This document describes breaking changes and how to upgrade. For a complete list
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
+
## [3.2.0]
|
|
8
|
+
|
|
9
|
+
The shared library ABI version (`SOVERSION`) is increased from `3.1` to `3.2`.
|
|
10
|
+
Thus, consuming libraries need to update their wheel repair configuration for `cibuildwheel` to ensure the `mqt-core` libraries are properly skipped in the wheel repair step.
|
|
11
|
+
|
|
12
|
+
With this release, the minimum required C++ version has been raised from C++17 to C++20.
|
|
13
|
+
The default compilers of our test systems support all relevant features of the standard.
|
|
14
|
+
Some frameworks we plan to integrate with even require C++20 by now.
|
|
15
|
+
|
|
16
|
+
The `dd.BasisStates`, `ir.operations.ComparisonKind`, `ir.operations.Control.Type`, and `ir.operations.OpType` enums are now exposed via `pybind11`'s new `py::native_enum`, which makes them compatible with Python's `enum.Enum` class (PEP 435).
|
|
17
|
+
As a result, the enums can no longer be initialized using a string.
|
|
18
|
+
Instead of `OpType("x")`, use `OpType.x`.
|
|
19
|
+
|
|
7
20
|
## [3.1.0]
|
|
8
21
|
|
|
9
22
|
The shared library ABI version (`SOVERSION`) is increased from `3.0` to `3.1`.
|
|
10
|
-
Thus, consuming libraries need to update their wheel repair configuration for cibuildwheel to ensure the mqt-core libraries are properly skipped in the wheel repair step.
|
|
23
|
+
Thus, consuming libraries need to update their wheel repair configuration for `cibuildwheel` to ensure the `mqt-core` libraries are properly skipped in the wheel repair step.
|
|
11
24
|
|
|
12
25
|
Even tough this is not a breaking change, it is worth mentioning to developers of MQT Core that all Python code (except tests) has been moved to the top-level `python` directory.
|
|
13
26
|
Furthermore, the C++ code for the Python bindings has been moved to the top-level `bindings` directory.
|
|
@@ -70,7 +83,8 @@ It also requires the `uv` library version 0.5.20 or higher.
|
|
|
70
83
|
|
|
71
84
|
<!-- Version links -->
|
|
72
85
|
|
|
73
|
-
[unreleased]: https://github.com/munich-quantum-toolkit/core/compare/v3.
|
|
86
|
+
[unreleased]: https://github.com/munich-quantum-toolkit/core/compare/v3.2.0...HEAD
|
|
87
|
+
[3.2.0]: https://github.com/munich-quantum-toolkit/core/compare/v3.1.0...v3.2.0
|
|
74
88
|
[3.1.0]: https://github.com/munich-quantum-toolkit/core/compare/v3.0.0...v3.1.0
|
|
75
89
|
[3.0.0]: https://github.com/munich-quantum-toolkit/core/compare/v2.7.0...v3.0.0
|
|
76
90
|
|
|
@@ -27,6 +27,7 @@
|
|
|
27
27
|
|
|
28
28
|
#include <pybind11/attr.h>
|
|
29
29
|
#include <pybind11/cast.h>
|
|
30
|
+
#include <pybind11/native_enum.h>
|
|
30
31
|
#include <pybind11/numpy.h>
|
|
31
32
|
// clang-format on
|
|
32
33
|
|
|
@@ -131,13 +132,15 @@ void registerDDPackage(const py::module& mod) {
|
|
|
131
132
|
// keep the DD package alive while the returned vector DD is alive.
|
|
132
133
|
py::keep_alive<0, 1>());
|
|
133
134
|
|
|
134
|
-
py::
|
|
135
|
+
py::native_enum<dd::BasisStates>(mod, "BasisStates", "enum.Enum",
|
|
136
|
+
"Enumeration of basis states.")
|
|
135
137
|
.value("zero", dd::BasisStates::zero)
|
|
136
138
|
.value("one", dd::BasisStates::one)
|
|
137
139
|
.value("plus", dd::BasisStates::plus)
|
|
138
140
|
.value("minus", dd::BasisStates::minus)
|
|
139
141
|
.value("right", dd::BasisStates::right)
|
|
140
|
-
.value("left", dd::BasisStates::left)
|
|
142
|
+
.value("left", dd::BasisStates::left)
|
|
143
|
+
.finalize();
|
|
141
144
|
|
|
142
145
|
dd.def(
|
|
143
146
|
"basis_state",
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
|
|
21
21
|
#include <pybind11/buffer_info.h>
|
|
22
22
|
#include <pybind11/cast.h>
|
|
23
|
-
#include <pybind11/numpy.h>
|
|
23
|
+
#include <pybind11/numpy.h> // NOLINT(misc-include-cleaner)
|
|
24
24
|
// clang-format on
|
|
25
25
|
|
|
26
26
|
#include <cmath>
|
|
@@ -44,7 +44,7 @@ struct Matrix {
|
|
|
44
44
|
Matrix getMatrix(const dd::mEdge& m, const size_t numQubits,
|
|
45
45
|
const dd::fp threshold = 0.) {
|
|
46
46
|
if (numQubits == 0U) {
|
|
47
|
-
return Matrix{{static_cast<std::complex<dd::fp>>(m.w)}, 1};
|
|
47
|
+
return Matrix{.data = {static_cast<std::complex<dd::fp>>(m.w)}, .n = 1};
|
|
48
48
|
}
|
|
49
49
|
const size_t dim = 1ULL << numQubits;
|
|
50
50
|
auto data = std::vector<std::complex<dd::fp>>(dim * dim);
|
|
@@ -53,7 +53,7 @@ Matrix getMatrix(const dd::mEdge& m, const size_t numQubits,
|
|
|
53
53
|
[&data, dim](const std::size_t i, const std::size_t j,
|
|
54
54
|
const std::complex<dd::fp>& c) { data[(i * dim) + j] = c; },
|
|
55
55
|
numQubits, threshold);
|
|
56
|
-
return Matrix{data, dim};
|
|
56
|
+
return Matrix{.data = data, .n = dim};
|
|
57
57
|
}
|
|
58
58
|
|
|
59
59
|
// NOLINTNEXTLINE(misc-use-internal-linkage)
|
{mqt_core-3.1.0 → mqt_core-3.2.1}/bindings/ir/operations/register_classic_controlled_operation.cpp
RENAMED
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
#include <pybind11/stl.h> // NOLINT(misc-include-cleaner)
|
|
20
20
|
|
|
21
21
|
#include <pybind11/cast.h>
|
|
22
|
+
#include <pybind11/native_enum.h>
|
|
22
23
|
// clang-format on
|
|
23
24
|
|
|
24
25
|
#include <cstdint>
|
|
@@ -32,7 +33,9 @@ using namespace pybind11::literals;
|
|
|
32
33
|
|
|
33
34
|
// NOLINTNEXTLINE(misc-use-internal-linkage)
|
|
34
35
|
void registerClassicControlledOperation(const py::module& m) {
|
|
35
|
-
py::
|
|
36
|
+
py::native_enum<qc::ComparisonKind>(
|
|
37
|
+
m, "ComparisonKind", "enum.Enum",
|
|
38
|
+
"Enumeration of comparison types for classic-controlled operations.")
|
|
36
39
|
.value("eq", qc::ComparisonKind::Eq)
|
|
37
40
|
.value("neq", qc::ComparisonKind::Neq)
|
|
38
41
|
.value("lt", qc::ComparisonKind::Lt)
|
|
@@ -40,10 +43,7 @@ void registerClassicControlledOperation(const py::module& m) {
|
|
|
40
43
|
.value("gt", qc::ComparisonKind::Gt)
|
|
41
44
|
.value("geq", qc::ComparisonKind::Geq)
|
|
42
45
|
.export_values()
|
|
43
|
-
.
|
|
44
|
-
[](const qc::ComparisonKind& cmp) { return qc::toString(cmp); })
|
|
45
|
-
.def("__repr__",
|
|
46
|
-
[](const qc::ComparisonKind& cmp) { return qc::toString(cmp); });
|
|
46
|
+
.finalize();
|
|
47
47
|
|
|
48
48
|
auto ccop = py::class_<qc::ClassicControlledOperation, qc::Operation>(
|
|
49
49
|
m, "ClassicControlledOperation");
|
|
@@ -42,7 +42,7 @@ void registerCompoundOperation(const py::module& m) {
|
|
|
42
42
|
if (i < 0) {
|
|
43
43
|
i += static_cast<DiffType>(size);
|
|
44
44
|
}
|
|
45
|
-
if (i < 0 ||
|
|
45
|
+
if (i < 0 || std::cmp_greater_equal(i, size)) {
|
|
46
46
|
throw py::index_error();
|
|
47
47
|
}
|
|
48
48
|
return i;
|
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
#include <pybind11/stl.h> // NOLINT(misc-include-cleaner)
|
|
18
18
|
|
|
19
19
|
#include <pybind11/cast.h>
|
|
20
|
+
#include <pybind11/native_enum.h>
|
|
20
21
|
#include <pybind11/operators.h>
|
|
21
22
|
#include <pybind11/pytypes.h>
|
|
22
23
|
// clang-format on
|
|
@@ -30,26 +31,12 @@ using namespace pybind11::literals;
|
|
|
30
31
|
void registerControl(const py::module& m) {
|
|
31
32
|
|
|
32
33
|
auto control = py::class_<qc::Control>(m, "Control");
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
"
|
|
38
|
-
|
|
39
|
-
return type == qc::Control::Type::Pos ? "Pos" : "Neg";
|
|
40
|
-
},
|
|
41
|
-
py::prepend());
|
|
42
|
-
controlType.def(
|
|
43
|
-
"__repr__",
|
|
44
|
-
[](const qc::Control::Type& type) {
|
|
45
|
-
return type == qc::Control::Type::Pos ? "Pos" : "Neg";
|
|
46
|
-
},
|
|
47
|
-
py::prepend());
|
|
48
|
-
controlType.def("__bool__", [](const qc::Control::Type& type) {
|
|
49
|
-
return type == qc::Control::Type::Pos;
|
|
50
|
-
});
|
|
51
|
-
py::implicitly_convertible<py::bool_, qc::Control::Type>();
|
|
52
|
-
py::implicitly_convertible<py::str, qc::Control::Type>();
|
|
34
|
+
|
|
35
|
+
py::native_enum<qc::Control::Type>(control, "Type", "enum.Enum",
|
|
36
|
+
"Enumeration of control types.")
|
|
37
|
+
.value("Pos", qc::Control::Type::Pos)
|
|
38
|
+
.value("Neg", qc::Control::Type::Neg)
|
|
39
|
+
.finalize();
|
|
53
40
|
|
|
54
41
|
control.def(py::init<qc::Qubit, qc::Control::Type>(), "qubit"_a,
|
|
55
42
|
"type_"_a = qc::Control::Type::Pos);
|
|
@@ -15,11 +15,9 @@
|
|
|
15
15
|
#include <pybind11/pybind11.h>
|
|
16
16
|
#include <pybind11/stl.h> // NOLINT(misc-include-cleaner)
|
|
17
17
|
|
|
18
|
-
#include <pybind11/
|
|
18
|
+
#include <pybind11/native_enum.h>
|
|
19
19
|
// clang-format on
|
|
20
20
|
|
|
21
|
-
#include <string>
|
|
22
|
-
|
|
23
21
|
namespace mqt {
|
|
24
22
|
|
|
25
23
|
namespace py = pybind11;
|
|
@@ -27,7 +25,8 @@ using namespace pybind11::literals;
|
|
|
27
25
|
|
|
28
26
|
// NOLINTNEXTLINE(misc-use-internal-linkage)
|
|
29
27
|
void registerOptype(const py::module& m) {
|
|
30
|
-
py::
|
|
28
|
+
py::native_enum<qc::OpType>(m, "OpType", "enum.Enum",
|
|
29
|
+
"Enumeration of operation types.")
|
|
31
30
|
.value("none", qc::OpType::None)
|
|
32
31
|
.value("gphase", qc::OpType::GPhase)
|
|
33
32
|
.value("i", qc::OpType::I)
|
|
@@ -68,12 +67,7 @@ void registerOptype(const py::module& m) {
|
|
|
68
67
|
.value("barrier", qc::OpType::Barrier)
|
|
69
68
|
.value("classic_controlled", qc::OpType::ClassicControlled)
|
|
70
69
|
.export_values()
|
|
71
|
-
.
|
|
72
|
-
.def("__repr__", [](const qc::OpType& op) { return qc::toString(op); })
|
|
73
|
-
.def(py::init([](const std::string& str) -> qc::OpType {
|
|
74
|
-
return qc::opTypeFromString(str);
|
|
75
|
-
}));
|
|
76
|
-
py::implicitly_convertible<py::str, qc::OpType>();
|
|
70
|
+
.finalize();
|
|
77
71
|
}
|
|
78
72
|
|
|
79
73
|
} // namespace mqt
|
|
@@ -31,6 +31,7 @@
|
|
|
31
31
|
#include <memory>
|
|
32
32
|
#include <stdexcept>
|
|
33
33
|
#include <string>
|
|
34
|
+
#include <utility>
|
|
34
35
|
#include <vector>
|
|
35
36
|
|
|
36
37
|
namespace mqt {
|
|
@@ -47,7 +48,7 @@ void registerQuantumComputation(py::module& m) {
|
|
|
47
48
|
if (i < 0) {
|
|
48
49
|
i += static_cast<DiffType>(size);
|
|
49
50
|
}
|
|
50
|
-
if (i < 0 ||
|
|
51
|
+
if (i < 0 || std::cmp_greater_equal(i, size)) {
|
|
51
52
|
throw py::index_error();
|
|
52
53
|
}
|
|
53
54
|
return i;
|
|
@@ -29,7 +29,7 @@ function(enable_project_options target_name)
|
|
|
29
29
|
option(ENABLE_COVERAGE "Enable coverage reporting for gcc/clang" FALSE)
|
|
30
30
|
if(ENABLE_COVERAGE)
|
|
31
31
|
target_compile_options(${target_name} INTERFACE --coverage -fprofile-arcs -ftest-coverage -O0)
|
|
32
|
-
target_link_libraries(${target_name} INTERFACE
|
|
32
|
+
target_link_libraries(${target_name} INTERFACE --coverage)
|
|
33
33
|
endif()
|
|
34
34
|
|
|
35
35
|
if(NOT DEPLOY)
|
|
@@ -38,10 +38,10 @@ public:
|
|
|
38
38
|
closureMatrix[i][i] = true;
|
|
39
39
|
}
|
|
40
40
|
auto addEdge(const V& u, const V& v) -> void override {
|
|
41
|
-
if (this->mapping.
|
|
41
|
+
if (!this->mapping.contains(u)) {
|
|
42
42
|
addVertex(u);
|
|
43
43
|
}
|
|
44
|
-
if (this->mapping.
|
|
44
|
+
if (!this->mapping.contains(v)) {
|
|
45
45
|
addVertex(v);
|
|
46
46
|
}
|
|
47
47
|
std::size_t const i = this->mapping.at(u);
|
|
@@ -62,10 +62,10 @@ public:
|
|
|
62
62
|
}
|
|
63
63
|
}
|
|
64
64
|
[[nodiscard]] auto isReachable(const V& u, const V& v) const -> bool {
|
|
65
|
-
if (this->mapping.
|
|
65
|
+
if (!this->mapping.contains(u)) {
|
|
66
66
|
throw std::invalid_argument("Vertex u not in graph.");
|
|
67
67
|
}
|
|
68
|
-
if (this->mapping.
|
|
68
|
+
if (!this->mapping.contains(v)) {
|
|
69
69
|
throw std::invalid_argument("Vertex v not in graph.");
|
|
70
70
|
}
|
|
71
71
|
return closureMatrix[this->mapping.at(u)][this->mapping.at(v)];
|
|
@@ -59,7 +59,7 @@ public:
|
|
|
59
59
|
virtual ~DirectedGraph() = default;
|
|
60
60
|
virtual auto addVertex(const V& v) -> void {
|
|
61
61
|
// check whether the vertex is already in the graph, if so do nothing
|
|
62
|
-
if (mapping.
|
|
62
|
+
if (mapping.contains(v)) {
|
|
63
63
|
std::stringstream ss;
|
|
64
64
|
ss << "The vertex " << v << " is already in the graph.";
|
|
65
65
|
throw std::invalid_argument(ss.str());
|
|
@@ -75,10 +75,10 @@ public:
|
|
|
75
75
|
outDegrees.emplace_back(0);
|
|
76
76
|
}
|
|
77
77
|
virtual auto addEdge(const V& u, const V& v) -> void {
|
|
78
|
-
if (mapping.
|
|
78
|
+
if (!mapping.contains(u)) {
|
|
79
79
|
addVertex(u);
|
|
80
80
|
}
|
|
81
|
-
if (mapping.
|
|
81
|
+
if (!mapping.contains(v)) {
|
|
82
82
|
addVertex(v);
|
|
83
83
|
}
|
|
84
84
|
const auto i = mapping.at(u);
|
|
@@ -93,7 +93,7 @@ public:
|
|
|
93
93
|
[[nodiscard]] auto getNVertices() const -> std::size_t { return nVertices; }
|
|
94
94
|
[[nodiscard]] auto getNEdges() const -> std::size_t { return nEdges; }
|
|
95
95
|
[[nodiscard]] auto getInDegree(const V& v) const -> std::size_t {
|
|
96
|
-
if (mapping.
|
|
96
|
+
if (!mapping.contains(v)) {
|
|
97
97
|
std::stringstream ss;
|
|
98
98
|
ss << "The vertex " << v << " is not in the graph.";
|
|
99
99
|
throw std::invalid_argument(ss.str());
|
|
@@ -102,7 +102,7 @@ public:
|
|
|
102
102
|
return inDegrees[i];
|
|
103
103
|
}
|
|
104
104
|
[[nodiscard]] auto getOutDegree(const V& v) const -> std::size_t {
|
|
105
|
-
if (mapping.
|
|
105
|
+
if (!mapping.contains(v)) {
|
|
106
106
|
std::stringstream ss;
|
|
107
107
|
ss << "The vertex " << v << " is not in the graph.";
|
|
108
108
|
throw std::invalid_argument(ss.str());
|
|
@@ -113,18 +113,18 @@ public:
|
|
|
113
113
|
[[nodiscard]] auto getVertices() const -> std::unordered_set<V> {
|
|
114
114
|
return std::accumulate(mapping.cbegin(), mapping.cend(),
|
|
115
115
|
std::unordered_set<V>(),
|
|
116
|
-
[](auto
|
|
116
|
+
[](auto acc, const auto& v) {
|
|
117
117
|
acc.emplace(v.first);
|
|
118
118
|
return acc;
|
|
119
119
|
});
|
|
120
120
|
}
|
|
121
121
|
[[nodiscard]] auto isEdge(const V& u, const V& v) const -> bool {
|
|
122
|
-
if (mapping.
|
|
122
|
+
if (!mapping.contains(u)) {
|
|
123
123
|
std::stringstream ss;
|
|
124
124
|
ss << "The vertex " << u << " is not in the graph.";
|
|
125
125
|
throw std::invalid_argument(ss.str());
|
|
126
126
|
}
|
|
127
|
-
if (mapping.
|
|
127
|
+
if (!mapping.contains(v)) {
|
|
128
128
|
std::stringstream ss;
|
|
129
129
|
ss << "The vertex " << v << " is not in the graph.";
|
|
130
130
|
throw std::invalid_argument(ss.str());
|
|
@@ -62,7 +62,7 @@ protected:
|
|
|
62
62
|
public:
|
|
63
63
|
auto addVertex(const V& v) -> void {
|
|
64
64
|
// check whether the vertex is already in the graph, if so do nothing
|
|
65
|
-
if (mapping.
|
|
65
|
+
if (!mapping.contains(v)) {
|
|
66
66
|
mapping[v] = nVertices;
|
|
67
67
|
invMapping.emplace_back(v);
|
|
68
68
|
++nVertices;
|
|
@@ -80,10 +80,10 @@ public:
|
|
|
80
80
|
}
|
|
81
81
|
}
|
|
82
82
|
auto addEdge(const V& u, const V& v, const E& e) -> void {
|
|
83
|
-
if (mapping.
|
|
83
|
+
if (!mapping.contains(u)) {
|
|
84
84
|
addVertex(u);
|
|
85
85
|
}
|
|
86
|
-
if (mapping.
|
|
86
|
+
if (!mapping.contains(v)) {
|
|
87
87
|
addVertex(v);
|
|
88
88
|
}
|
|
89
89
|
const auto i = mapping.at(u);
|
|
@@ -132,7 +132,7 @@ public:
|
|
|
132
132
|
}
|
|
133
133
|
[[nodiscard]] auto getAdjacentEdges(const V& v) const
|
|
134
134
|
-> std::unordered_set<std::pair<V, V>, PairHash<V, V>> {
|
|
135
|
-
if (mapping.
|
|
135
|
+
if (!mapping.contains(v)) {
|
|
136
136
|
std::stringstream ss;
|
|
137
137
|
ss << "The vertex " << v << " is not in the graph.";
|
|
138
138
|
throw std::invalid_argument(ss.str());
|
|
@@ -149,7 +149,7 @@ public:
|
|
|
149
149
|
return result;
|
|
150
150
|
}
|
|
151
151
|
[[nodiscard]] auto getNeighbours(const V& v) const -> std::unordered_set<V> {
|
|
152
|
-
if (mapping.
|
|
152
|
+
if (!mapping.contains(v)) {
|
|
153
153
|
std::stringstream ss;
|
|
154
154
|
ss << "The vertex " << v << " is not in the graph.";
|
|
155
155
|
throw std::invalid_argument(ss.str());
|
|
@@ -165,7 +165,7 @@ public:
|
|
|
165
165
|
return result;
|
|
166
166
|
}
|
|
167
167
|
[[nodiscard]] auto getDegree(const V& v) const -> std::size_t {
|
|
168
|
-
if (mapping.
|
|
168
|
+
if (!mapping.contains(v)) {
|
|
169
169
|
std::stringstream ss;
|
|
170
170
|
ss << "The vertex " << v << " is not in the graph.";
|
|
171
171
|
throw std::invalid_argument(ss.str());
|
|
@@ -176,18 +176,18 @@ public:
|
|
|
176
176
|
[[nodiscard]] auto getVertices() const -> std::unordered_set<V> {
|
|
177
177
|
return std::accumulate(mapping.cbegin(), mapping.cend(),
|
|
178
178
|
std::unordered_set<V>(),
|
|
179
|
-
[](auto
|
|
179
|
+
[](auto acc, const auto& v) {
|
|
180
180
|
acc.emplace(v.first);
|
|
181
181
|
return acc;
|
|
182
182
|
});
|
|
183
183
|
}
|
|
184
184
|
[[nodiscard]] auto isAdjacent(const V& u, const V& v) const -> bool {
|
|
185
|
-
if (mapping.
|
|
185
|
+
if (!mapping.contains(u)) {
|
|
186
186
|
std::stringstream ss;
|
|
187
187
|
ss << "The vertex " << u << " is not in the graph.";
|
|
188
188
|
throw std::invalid_argument(ss.str());
|
|
189
189
|
}
|
|
190
|
-
if (mapping.
|
|
190
|
+
if (!mapping.contains(v)) {
|
|
191
191
|
std::stringstream ss;
|
|
192
192
|
ss << "The vertex " << v << " is not in the graph.";
|
|
193
193
|
throw std::invalid_argument(ss.str());
|
|
@@ -57,7 +57,7 @@ struct NodeBase : LLBase {
|
|
|
57
57
|
void mark() noexcept { flags |= MARK_FLAG; }
|
|
58
58
|
|
|
59
59
|
/// @brief Unmark the node.
|
|
60
|
-
void unmark() noexcept { flags &= ~MARK_FLAG; }
|
|
60
|
+
void unmark() noexcept { flags &= static_cast<uint16_t>(~MARK_FLAG); }
|
|
61
61
|
|
|
62
62
|
/// Getter for the next object.
|
|
63
63
|
[[nodiscard]] NodeBase* next() const noexcept {
|