FineAmplitude

class FineAmplitude(physical_qubits, gate, backend=None, measurement_qubits=None)[source]

An experiment to determine the optimal pulse amplitude by amplifying gate errors.

Overview

The FineAmplitude experiment repeats N times a gate with a pulse to amplify the under-/over-rotations in the gate to determine the optimal amplitude. The circuits are therefore of the form:

           ┌──────┐       ┌──────┐ ░ ┌─┐
      q_0: ┤ Gate ├─ ... ─┤ Gate ├─░─┤M├
           └──────┘       └──────┘ ░ └╥┘
measure: 1/═════════ ... ═════════════╩═
                                      0

Here, Gate is the name of the gate which will be repeated. The user can optionally add a square-root of X pulse before the gates are repeated. This square-root of X pulse allows the analysis to differentiate between over rotations and under rotations in the case of \(\pi\)-pulses. Importantly, the resulting data is analyzed by a fit to a cosine function in which we try to determine the over/under rotation given an intended rotation angle per gate which must also be specified by the user.

Error amplifying experiments are most sensitive to angle errors when we measure points along the equator of the Bloch sphere. This is why users should insert a square-root of X pulse before running calibrations for \(\pm\pi\) rotations. When all data points are close to the equator, it is difficult for a fitter to infer the overall scale of the error. When calibrating a \(\pi\) rotation, one can use add_xp_circuit = True to insert one circuit that puts the qubit in the excited state to set the scale for the other circuits. Furthermore, when running calibrations for \(\pm\pi/2\) rotations users are advised to use an odd number of repetitions, e.g. [1, 2, 3, 5, 7, …] to ensure that the ideal points are on the equator of the Bloch sphere. Note the presence of two repetitions which allows us to prepare the excited state. Therefore, add_xp_circuit = True is not needed in this case.

References

[1] Sarah Sheldon, Lev S. Bishop, Easwar Magesan, Stefan Filipp, Jerry M. Chow, Jay M. Gambetta, Characterizing errors on qubit operations via iterative randomized benchmarking, Phys. Rev. A 93, 012301 (2016), doi: 10.1103/PhysRevA.93.012301 (open)

User manual

Fine calibrations of a pulse amplitude

Analysis class reference

FineAmplitudeAnalysis

Experiment options

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

Options
  • Defined in the class FineAmplitude:

    • repetitions (List[int])

      Default value: [1, 2, 3, 4, 5, …]
      A list of the number of times that the gate is repeated.
    • gate (Gate)

      Default value: None
      This is a gate class such as XGate, so that one can obtain a gate by doing options.gate().
    • normalization (bool)

      Default value: True
      If set to True the DataProcessor will normalized the measured signal to the interval [0, 1]. Defaults to True.
    • add_cal_circuits (bool)

      Default value: True
      If set to True then two circuits to calibrate 0 and 1 points will be added. These circuits are often needed to properly calibrate the amplitude of the ping-pong oscillation that encodes the errors. This helps account for state preparation and measurement errors.
  • 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

The steps to run a fine amplitude experiment are

qubit = 3
amp_cal = FineAmplitude([qubit], SXGate())
amp_cal.set_experiment_options(
    angle_per_gate=np.pi/2,
    phase_offset=np.pi
)
amp_cal.run(backend)

Note that there are subclasses of FineAmplitude such as FineSXAmplitude that set the appropriate options for specific gates by default.

Initialization

Setup a fine amplitude experiment on the given qubit.

Parameters:
  • physical_qubits (Sequence[int]) – Sequence containing qubit(s) on which to run the fine amplitude calibration experiment.

  • gate (Gate) – The gate that will be repeated.

  • backend (Optional[Backend]) – Optional, the backend to run the experiment on.

  • measurement_qubits (Optional[Sequence[int]]) – The qubits in the given physical qubits that need to be measured.

Attributes

FineAmplitude.analysis

Return the analysis instance for the experiment

FineAmplitude.backend

Return the backend for the experiment

FineAmplitude.experiment_options

Return the options for the experiment.

FineAmplitude.experiment_type

Return experiment type.

FineAmplitude.num_qubits

Return the number of qubits for the experiment.

FineAmplitude.physical_qubits

Return the device qubits for the experiment.

FineAmplitude.run_options

Return options values for the experiment run() method.

FineAmplitude.transpile_options

Return the transpiler options for the run() method.

Methods

FineAmplitude.circuits()

Create the circuits for the fine amplitude calibration experiment.

FineAmplitude.config()

Return the config dataclass for this experiment

FineAmplitude.copy()

Return a copy of the experiment

FineAmplitude.enable_restless([rep_delay, ...])

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

FineAmplitude.from_config(config)

Initialize an experiment from experiment config

FineAmplitude.run([backend, analysis, timeout])

Run an experiment and perform analysis.

FineAmplitude.set_experiment_options(**fields)

Set the experiment options.

FineAmplitude.set_run_options(**fields)

Set options values for the experiment run() method.

FineAmplitude.set_transpile_options(**fields)

Set the transpiler options for run() method.