Source code for qiskit_cold_atom.spins.base_spin_backend

# This code is part of Qiskit.
#
# (C) Copyright IBM 2021.
#
# This code is licensed under the Apache License, Version 2.0. You may
# obtain a copy of this license in the LICENSE.txt file in the root directory
# of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
#
# Any modifications or derivative works of this code must retain this
# copyright notice, and modified files need to carry a notice indicating
# that they have been altered from the originals.

"""Module for cold-atom spin backends."""

from abc import ABC

from qiskit.providers import BackendV1 as Backend
from qiskit import QuantumCircuit, QuantumRegister, ClassicalRegister
from qiskit_cold_atom import QiskitColdAtomError


[docs]class BaseSpinBackend(Backend, ABC): """Abstract base class for atomic mixture backends."""
[docs] def get_empty_circuit(self) -> QuantumCircuit: """ Convenience function to set up an empty circuit with the right QuantumRegisters. For each atomic species specified in the config file, a quantum register is added to the circuit. Returns: qc: An empty quantum circuit ready to use in spin-based cold-atom setups. Raises: QiskitColdAtomError: - If backend has no config file. - If number of wires of the backend config is not a multiple of the atomic species. """ config = self.configuration().to_dict() try: num_wires = config["n_qubits"] num_species = len(config["atomic_species"]) except NameError as name_error: raise QiskitColdAtomError( "backend needs to be initialized with config file first" ) from name_error if not (isinstance(num_wires, int) and num_wires % num_species == 0): raise QiskitColdAtomError( "num_wires {num_wires} must be multiple of num_species {num_species}" ) qregs = [ QuantumRegister(num_wires / num_species, species) for species in config["atomic_species"] ] class_reg = ClassicalRegister(num_wires, "c{}".format(num_wires)) empty_circuit = QuantumCircuit(*qregs, class_reg) return empty_circuit
[docs] def draw(self, qc: QuantumCircuit, **draw_options): """Modified circuit drawer to better display atomic mixture quantum circuits. For now this method is just an alias to `QuantumCircuit.draw()` but in the future this method may be modified and tailored to spin quantum circuits. Args: qc: The quantum circuit to draw. draw_options: Key word arguments for the drawing of circuits. """ qc.draw(**draw_options)