diff --git a/CMakeLists.txt b/CMakeLists.txt index f9ac46cc3..dc118756f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -20,6 +20,9 @@ find_package(qdmi REQUIRED) # Find QInfo package find_package(qinfo REQUIRED) +# Find sys-sage package +find_package(sys-sage REQUIRED) + # Find the Threads package find_package(Threads REQUIRED) @@ -141,6 +144,7 @@ foreach(src_file ${ANALYSIS_PASSES_SOURCE_FILES}) qdmi qinfo #fomac + sys-sage utilities) target_include_directories(${target_name} @@ -169,6 +173,7 @@ foreach(src_file ${TRANSFORMATION_PASSES_SOURCE_FILES}) qdmi qinfo #fomac + sys-sage utilities ) diff --git a/cmake/Findqdmi.cmake b/cmake/Findqdmi.cmake index 1e4331904..b05dece61 100644 --- a/cmake/Findqdmi.cmake +++ b/cmake/Findqdmi.cmake @@ -3,7 +3,7 @@ include(FetchContent) FetchContent_Declare( qdmi GIT_REPOSITORY git@github.com:Munich-Quantum-Software-Stack/QDMI.git - GIT_TAG develop + GIT_TAG ibm-backend-testing ) FetchContent_MakeAvailable(qdmi) diff --git a/cmake/Findsys-sage.cmake b/cmake/Findsys-sage.cmake new file mode 100644 index 000000000..ebd742d32 --- /dev/null +++ b/cmake/Findsys-sage.cmake @@ -0,0 +1,9 @@ +include(FetchContent) + +FetchContent_Declare( + sys-sage + GIT_REPOSITORY git@github.com:Durganshu/sys-sage.git + GIT_TAG qc-integration +) + +FetchContent_MakeAvailable(sys-sage) \ No newline at end of file diff --git a/src/ArchitectureFactory.cpp b/src/ArchitectureFactory.cpp index 1c19bc548..dce687131 100644 --- a/src/ArchitectureFactory.cpp +++ b/src/ArchitectureFactory.cpp @@ -1,5 +1,5 @@ #include "ArchitectureFactory.hpp" - +#include #include #include #include @@ -7,34 +7,17 @@ namespace mqt { Architecture createArchitecture(QDMI_Device dev) { - int num_qubits = 0; - - int err = QDMI_query_qubits_num(dev, &num_qubits); - if (err != QDMI_SUCCESS) - throw std::runtime_error("Could not get number of qubits via QDMI"); - if (num_qubits == 0) - throw std::runtime_error("Number of qubits cannot be zero"); - - QDMI_Qubit qubits; - - // create a coupling map - err = QDMI_query_all_qubits(dev, &qubits); + + // QdmiParser: sys-sage's interface to qdmi (for retrieving the static topology) + QdmiParser qdmi; - if (err != QDMI_SUCCESS || qubits == NULL) - throw std::runtime_error("Could not get qubits via QDMI"); + // An instance to QuantumBackend for storing the topology + QuantumBackend qc = createQcTopo(dev); - CouplingMap cm{}; - for (int i = 0; i < num_qubits; i++) - { - if (qubits[i].coupling_mapping != NULL && qubits[i].size_coupling_mapping) - { - for (int j = 0; j < qubits[i].size_coupling_mapping; j++) - cm.emplace(i, qubits[i].coupling_mapping[j]); - } - } + std::uint16_t num_qubits = qc.GetNumberofQubits(); - free(qubits); + CouplingMap cm = qc.GetAllCouplingMaps(); - return {static_cast(num_qubits), cm}; + return {num_qubits, cm}; } } // namespace mqt