Source code for mqt.qmap.plugins.qiskit.sc.import_backend
# Copyright (c) 2023 - 2026 Chair for Design Automation, TUM
# Copyright (c) 2025 - 2026 Munich Quantum Software Company GmbH
# All rights reserved.
#
# SPDX-License-Identifier: MIT
#
# Licensed under the MIT License
"""Import a Qiskit backend."""
from __future__ import annotations
from typing import TYPE_CHECKING
from ....sc import Architecture
if TYPE_CHECKING:
from qiskit.providers import BackendV2
from qiskit.transpiler import Target
[docs]
def import_target(target: Target) -> Architecture.Properties:
"""Import a target from qiskit.transpiler.Target.
Args:
target: The target to import.
Returns:
The imported target as an Architecture.Properties object.
"""
props = Architecture.Properties()
props.num_qubits = len(target.qubit_properties)
for i in range(props.num_qubits):
qubit_props = target.qubit_properties[i]
props.set_t1(i, qubit_props.t1)
props.set_t2(i, qubit_props.t2)
props.set_frequency(i, qubit_props.frequency)
for instruction, qargs in target.instructions:
if instruction.name in {"reset", "delay"}:
continue
instruction_props = target[instruction.name][qargs]
if instruction.name == "measure":
props.set_readout_error(qargs[0], instruction_props.error)
elif len(qargs) == 1:
props.set_single_qubit_error(qargs[0], instruction.name, instruction_props.error)
elif len(qargs) == 2:
props.set_two_qubit_error(qargs[0], qargs[1], instruction_props.error, instruction.name)
return props
[docs]
def import_backend(backend: BackendV2) -> Architecture:
"""Import a backend from qiskit.providers.BackendV2."""
arch = Architecture()
arch.name = str(backend.name)
arch.num_qubits = backend.num_qubits
arch.coupling_map = set(backend.coupling_map.get_edges())
arch.properties = import_target(backend.target)
arch.properties.name = str(backend.name)
return arch