IBMBackend#

class IBMBackend(configuration, provider, api_client, instance=None)[source]#

Backend class interfacing with an IBM Quantum device.

You can run experiments on a backend using the run() method. The run() method takes one or more QuantumCircuit and returns an IBMJob instance that represents the submitted job. Each job has a unique job ID, which can later be used to retrieve the job. An example of this flow:

from qiskit import transpile
from qiskit_ibm_provider import IBMProvider
from qiskit.circuit.random import random_circuit

provider = IBMProvider()
backend = provider.backend.ibmq_vigo
qx = random_circuit(n_qubits=5, depth=4)
transpiled = transpile(qx, backend=backend)
job = backend.run(transpiled)
retrieved_job = provider.backend.retrieve_job(job.job_id())

Note

  • Unlike qiskit.execute(), the run() method does not transpile the circuits for you, so be sure to do so before submitting them.

  • You should not instantiate the IBMBackend class directly. Instead, use the methods provided by an IBMProvider instance to retrieve and handle backends.

Other methods return information about the backend. For example, the status() method returns a BackendStatus instance. The instance contains the operational and pending_jobs attributes, which state whether the backend is operational and also the number of jobs in the server queue for the backend, respectively:

status = backend.status()
is_operational = status.operational
jobs_in_queue = status.pending_jobs
Here is list of attributes available on the IBMBackend class:
  • name: backend name.

  • backend_version: backend version in the form X.Y.Z.

  • num_qubits: number of qubits.

  • target: A qiskit.transpiler.Target object for the backend.

  • basis_gates: list of basis gates names on the backend.

  • gates: list of basis gates on the backend.

  • local: backend is local or remote.

  • simulator: backend is a simulator.

  • conditional: backend supports conditional operations.

  • open_pulse: backend supports open pulse.

  • memory: backend supports memory.

  • max_shots: maximum number of shots supported.

  • coupling_map (list): The coupling map for the device

  • supported_instructions (List[str]): Instructions supported by the backend.

  • dynamic_reprate_enabled (bool): whether delay between programs can be set dynamically (ie via rep_delay). Defaults to False.

  • rep_delay_range (List[float]): 2d list defining supported range of repetition delays for backend in μs. First entry is lower end of the range, second entry is higher end of the range. Optional, but will be specified when dynamic_reprate_enabled=True.

  • default_rep_delay (float): Value of rep_delay if not specified by user and dynamic_reprate_enabled=True.

  • n_uchannels: Number of u-channels.

  • u_channel_lo: U-channel relationship on device los.

  • meas_levels: Supported measurement levels.

  • qubit_lo_range: Qubit lo ranges for each qubit with form (min, max) in GHz.

  • meas_lo_range: Measurement lo ranges for each qubit with form (min, max) in GHz.

  • dt: Qubit drive channel timestep in nanoseconds.

  • dtm: Measurement drive channel timestep in nanoseconds.

  • rep_times: Supported repetition times (program execution time) for backend in μs.

  • meas_kernels: Supported measurement kernels.

  • discriminators: Supported discriminators.

  • hamiltonian: An optional dictionary with fields characterizing the system hamiltonian.

  • channel_bandwidth (list): Bandwidth of all channels (qubit, measurement, and U)

  • acquisition_latency (list): Array of dimension n_qubits x n_registers. Latency (in units of dt) to write a measurement result from qubit n into register slot m.

  • conditional_latency (list): Array of dimension n_channels [d->u->m] x n_registers. Latency (in units of dt) to do a conditional operation on channel n from register slot m

  • meas_map (list): Grouping of measurement which are multiplexed

  • max_circuits (int): The maximum number of experiments per job

  • sample_name (str): Sample name for the backend

  • n_registers (int): Number of register slots available for feedback (if conditional is True)

  • register_map (list): An array of dimension n_qubits X n_registers that specifies whether a qubit can store a measurement in a certain register slot.

  • configurable (bool): True if the backend is configurable, if the backend is a simulator

  • credits_required (bool): True if backend requires credits to run a job.

  • online_date (datetime): The date that the device went online

  • display_name (str): Alternate name field for the backend

  • description (str): A description for the backend

  • tags (list): A list of string tags to describe the backend

  • version: version of Backend class (Ex: 1, 2)

  • channels: An optional dictionary containing information of each channel – their purpose, type, and qubits operated on.

  • parametric_pulses (list): A list of pulse shapes which are supported on the backend. For example: ['gaussian', 'constant']

  • processor_type (dict): Processor type for this backend. A dictionary of the form {"family": <str>, "revision": <str>, segment: <str>} such as {"family": "Canary", "revision": "1.0", segment: "A"}.

    • family: Processor family of this backend.

    • revision: Revision version of this processor.

    • segment: Segment this processor belongs to within a larger chip.

IBMBackend constructor.

Parameters:

Attributes

IBMBackend.coupling_map

Return the CouplingMap object

IBMBackend.dt

Return the system time resolution of input signals

IBMBackend.dtm

Return the system time resolution of output signals :returns: The output signal timestep in seconds.

IBMBackend.id_warning_issued

IBMBackend.instruction_durations

Return the InstructionDurations object.

IBMBackend.instruction_schedule_map

Return the InstructionScheduleMap for the instructions defined in this backend's target.

IBMBackend.instructions

A list of Instruction tuples on the backend of the form (instruction, (qubits)

IBMBackend.max_circuits

The maximum number of circuits The maximum number of circuits that can be run in a single job.

IBMBackend.meas_map

Return the grouping of measurements which are multiplexed This is required to be implemented if the backend supports Pulse scheduling.

IBMBackend.num_qubits

Return the number of qubits the backend has.

IBMBackend.operation_names

A list of instruction names that the backend supports.

IBMBackend.operations

A list of Instruction instances that the backend supports.

IBMBackend.options

Return the options for the backend

IBMBackend.provider

Return the backend Provider.

IBMBackend.session

Return session

IBMBackend.target

A qiskit.transpiler.Target object for the backend.

IBMBackend.version

Methods

IBMBackend.acquire_channel(qubit)

Return the acquisition channel for the given qubit.

IBMBackend.cancel_session()

Cancel session.

IBMBackend.configuration()

Return the backend configuration.

IBMBackend.control_channel(qubits)

Return the secondary drive channel for the given qubit.

IBMBackend.defaults([refresh])

Return the pulse defaults for the backend.

IBMBackend.drive_channel(qubit)

Return the drive channel for the given qubit.

IBMBackend.get_translation_stage_plugin()

Return the default translation stage plugin name for IBM backends.

IBMBackend.measure_channel(qubit)

Return the measure stimulus channel for the given qubit.

IBMBackend.open_session([max_time])

Open session

IBMBackend.properties([refresh, datetime])

Return the backend properties, subject to optional filtering.

IBMBackend.qubit_properties(qubit)

Return QubitProperties for a given qubit.

IBMBackend.run(circuits[, dynamic, ...])

Run on the backend.

IBMBackend.set_options(**fields)

Set the options fields for the backend

IBMBackend.status()

Return the backend status.

IBMBackend.target_history([datetime])

A qiskit.transpiler.Target object for the backend.