Rabi

class Rabi(physical_qubits, schedule, amplitudes=None, backend=None)[source]

An experiment that scans a pulse amplitude to calibrate rotations on the \(|0\rangle\) <-> \(|1\rangle\) transition.

Overview

The circuits have a custom rabi gate with the pulse schedule attached to it through the calibrations. The circuits are of the form:

           ┌───────────┐ ░ ┌─┐
      q_0: ┤ Rabi(amp) ├─░─┤M├
           └───────────┘ ░ └╥┘
measure: 1/═════════════════╩═
                            0

The user provides his own schedule for the Rabi at initialization which must have one free parameter, i.e. the amplitude to scan and a drive channel which matches the qubit.

User manual

Calibrating the pulse amplitudes with a Rabi experiment

See also the Qiskit Textbook for the pulse level programming of a Rabi experiment.

Analysis class reference

OscillationAnalysis

Experiment options

These options can be set by the set_experiment_options() method.

Options
  • Defined in the class Rabi:

    • amplitudes (iterable)

      Default value: array(-0.95, -0.9119999999999999, -0.874, -0.836, -0.7979999999999999, ..., size=51)
      The list of amplitude values to scan.
    • schedule (ScheduleBlock)

      Default value: None
      The schedule for the Rabi pulse. This schedule must have exactly one free parameter. The drive channel should match the qubit.
  • Defined in the class BaseExperiment:

    • max_circuits (Optional[int])

      Default value: None
      The maximum number of circuits per job when running an experiment on a backend.

Example

import numpy as np
from qiskit import pulse
from qiskit.circuit import Parameter
from qiskit_experiments.library import Rabi

with pulse.build() as build_sched:
    pulse.play(pulse.Gaussian(160, Parameter("amp"), 40), pulse.DriveChannel(0))

exp = Rabi(physical_qubits=(0,),
           schedule=build_sched,
           amplitudes=np.linspace(-0.1, 0.1, 21),
           backend=backend,)

exp_data = exp.run().block_for_results()
display(exp_data.figure(0))
exp_data.analysis_results(dataframe=True)
../_images/qiskit_experiments.library.characterization.Rabi_1_0.png
name experiment components value quality backend run_time chisq
11b499e7 @Parameters_OscillationAnalysis Rabi [Q0] CurveFitResult:\n - fitting method: least_squa... good PulseBackendV2 None None
9f190247 rabi_rate Rabi [Q0] 8.590+/-0.016 good PulseBackendV2 None 1.398559

Initialization

Initialize a Rabi experiment on the given qubit.

Deprecated since version 0.8: The class qiskit_experiments.library.characterization.rabi.Rabi is deprecated as of qiskit-experiments 0.8. It will be removed no earlier than 3 months after the release date. Due to the deprecation of Qiskit Pulse, experiments involving pulse gate calibrations like this one have been deprecated.

Parameters:
  • physical_qubits (Sequence[int]) – List with the qubit on which to run the Rabi experiment.

  • schedule (ScheduleBlock) – The schedule that will be used in the Rabi experiment. This schedule should have one free parameter namely the amplitude.

  • amplitudes (Iterable[float] | None) – The pulse amplitudes that one wishes to scan. If this variable is not specified it will default to np.linspace(-0.95, 0.95, 51).

  • backend (Backend | None) – Optional, the backend to run the experiment on.

Attributes

analysis: BaseAnalysis

Return the analysis instance for the experiment

backend

Return the backend for the experiment

experiment_options

Return the options for the experiment.

experiment_type

Return experiment type.

num_qubits

Return the number of qubits for the experiment.

physical_qubits

Return the device qubits for the experiment.

run_options

Return options values for the experiment run() method.

transpile_options

Return the transpiler options for the run() method.

Methods

circuits()[source]

Create the circuits for the Rabi experiment.

Returns:

A list of circuits with a rabi gate with an attached schedule. Each schedule will have a different value of the scanned amplitude.

Return type:

List[QuantumCircuit]

config()

Return the config dataclass for this experiment

Return type:

ExperimentConfig

copy()

Return a copy of the experiment

Return type:

BaseExperiment

enable_restless(rep_delay=None, override_processor_by_restless=True, suppress_t1_error=False)

Enables a restless experiment by setting the restless run options and the restless data processor.

Deprecated since version 0.8: The method qiskit_experiments.framework.restless_mixin.RestlessMixin.enable_restless() is deprecated as of qiskit-experiments 0.8. It will be removed no earlier than 3 months after the release date. Support for restless experiments has been deprecated.

Parameters:
  • rep_delay (float | None) – The repetition delay. This is the delay between a measurement and the subsequent quantum circuit. Since the backends have dynamic repetition rates, the repetition delay can be set to a small value which is required for restless experiments. Typical values are 1 us or less.

  • override_processor_by_restless (bool) – If False, a data processor that is specified in the analysis options of the experiment is not overridden by the restless data processor. The default is True.

  • suppress_t1_error (bool) – If True, the default is False, then no error will be raised when rep_delay is larger than the T1 times of the qubits. Instead, a warning will be logged as restless measurements may have a large amount of noise.

Raises:
  • DataProcessorError – If the attribute rep_delay_range is not defined for the backend.

  • DataProcessorError – If a data processor has already been set but override_processor_by_restless is True.

  • DataProcessorError – If the experiment analysis does not have the data_processor option.

  • DataProcessorError – If the rep_delay is equal to or greater than the T1 time of one of the physical qubits in the experiment and the flag ignore_t1_check is False.

classmethod from_config(config)

Initialize an experiment from experiment config

Return type:

BaseExperiment

job_info(backend=None)

Get information about job distribution for the experiment on a specific backend.

Parameters:

backend (Backend) – Optional, the backend for which to get job distribution information. If not specified, the experiment must already have a set backend.

Returns:

A dictionary containing information about job distribution.

  • ”Total number of circuits in the experiment”: Total number of circuits in the experiment.

  • ”Maximum number of circuits per job”: Maximum number of circuits in one job based on backend and experiment settings.

  • ”Total number of jobs”: Number of jobs needed to run this experiment on the currently set backend.

Return type:

dict

Raises:

QiskitError – if backend is not specified.

run(backend=None, sampler=None, analysis='default', timeout=None, backend_run=None, **run_options)

Run an experiment and perform analysis.

Parameters:
  • backend (Backend | None) – Optional, the backend to run on. Will override existing backend settings.

  • sampler (BaseSamplerV2 | None) – Optional, the sampler to run the experiment on. If None then a sampler will be invoked from previously set backend

  • analysis (BaseAnalysis | None) – Optional, a custom analysis instance to use for performing analysis. If None analysis will not be run. If "default" the experiments analysis() instance will be used if it contains one.

  • timeout (float | None) – Time to wait for experiment jobs to finish running before cancelling.

  • backend_run (bool | None) – Use backend run (temp option for testing)

  • run_options – backend runtime options used for circuit execution.

Returns:

The experiment data object.

Raises:

QiskitError – If experiment is run with an incompatible existing ExperimentData container.

Return type:

ExperimentData

set_experiment_options(**fields)

Set the experiment options.

Parameters:

fields – The fields to update the options

Raises:

AttributeError – If the field passed in is not a supported options

set_run_options(**fields)

Set options values for the experiment run() method.

Parameters:

fields – The fields to update the options

See also

The Setting options for your experiment guide for code example.

set_transpile_options(**fields)

Set the transpiler options for run() method.

Parameters:

fields – The fields to update the options

Raises:

QiskitError – If initial_layout is one of the fields.

See also

The Setting options for your experiment guide for code example.