diff --git a/src/qibolab/backends.py b/src/qibolab/backends.py index f17ce97f8..fc6aa4d9e 100644 --- a/src/qibolab/backends.py +++ b/src/qibolab/backends.py @@ -50,6 +50,25 @@ def __init__(self, platform): } self.compiler = Compiler.default() + @property + def qubits(self) -> list[str | int]: + return list(self.platform.qubits.keys()) + + @property + def connectivity(self) -> list[tuple[str | int, str | int]]: + return list(self.platform.pairs) + + @property + def natives(self) -> list[str]: + native_gates = set() + for _, q in self.platform.qubits.items(): + native_gates |= {k for k, v in q.native_gates.__dict__.items() if v is not None} + + for _, p in self.platform.pairs.items(): + native_gates |= {k for k, v in p.native_gates.__dict__.items() if v is not None} + + return list(native_gates) + def apply_gate(self, gate, state, nqubits): # pragma: no cover raise_error(NotImplementedError, "Qibolab cannot apply gates directly.") diff --git a/tests/test_backends.py b/tests/test_backends.py index 886d1a5bd..4c05a5560 100644 --- a/tests/test_backends.py +++ b/tests/test_backends.py @@ -22,6 +22,20 @@ def generate_circuit_with_gate(nqubits, gate, **kwargs): def connected_backend(connected_platform): yield QibolabBackend(connected_platform) +def test_qubits(): + backend = QibolabBackend("dummy") + assert isinstance(backend.qubits, list) + assert set(backend.qubits) == set([0, 1, 2, 3, 4]) + +def test_connectivity(): + backend = QibolabBackend("dummy") + assert isinstance(backend.connectivity, list) + assert set(backend.connectivity) == set([(0, 2), (2, 0), (1, 2), (2, 1), (2, 3), (3, 2), (2, 4), (4, 2)]) + +def test_natives(): + backend = QibolabBackend("dummy") + assert isinstance(backend.natives, list) + assert set(backend.natives) == set(['RX12', 'RX', 'CZ', 'iSWAP', 'MZ', 'CNOT']) def test_execute_circuit_initial_state(): backend = QibolabBackend("dummy")