InterleavedRB

class InterleavedRB(interleaved_element, physical_qubits, lengths, backend=None, num_samples=3, seed=None, full_sampling=False, circuit_order='RIRIRI')[source]

An experiment to characterize the error rate of a specific gate on a device.

Overview

Interleaved Randomized Benchmarking (RB) is a method to estimate the average error-rate of a certain quantum gate.

An interleaved RB experiment generates a standard RB sequences of random Cliffords and another sequence with the interleaved given gate. After running the two sequences on a backend, it calculates the probabilities to get back to the ground state, fits the two exponentially decaying curves, and estimates the interleaved gate error. See Ref. [1] for details.

References

User manual

Randomized Benchmarking

Analysis class reference

InterleavedRBAnalysis

Experiment options

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

Options
  • Defined in the class InterleavedRB:

    • circuit_order (str)

      Default value: "RIRIRI"
      How to order the reference and the interleaved circuits. "RIRIRI" (alternate a reference and an interleaved circuit) or "RRRIII" (push all reference circuits first, then all interleaved ones).
  • Defined in the class StandardRB:

    • lengths (List[int])

      Default value: None
      A list of RB sequences lengths.
    • num_samples (int)

      Default value: None
      Number of samples to generate for each sequence length.
    • seed (None or int or SeedSequence or BitGenerator or Generator)

      Default value: None
      A seed used to initialize numpy.random.default_rng when generating circuits. The default_rng will be initialized with this seed value every time circuits() is called.
    • full_sampling (bool)

      Default value: None
      If True all Cliffords are independently sampled for all lengths. If False for sample of lengths longer sequences are constructed by appending additional Clifford samples to shorter sequences.
    • clifford_synthesis_method (str)

      Default value: "rb_default"
      The name of the Clifford synthesis plugin to use for building circuits of RB sequences. See Synthesis Methods.
  • 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_experiments.library import StandardRB, InterleavedRB
from qiskit_experiments.framework import ParallelExperiment, BatchExperiment
import qiskit.circuit.library as circuits

lengths = [1, 2, 4, 8] + np.arange(10, 80, 10).tolist()
num_samples = 3
seed = 1010
qubits = (1, 2)

int_exp2 = InterleavedRB(
    circuits.CXGate(), qubits, lengths, num_samples=num_samples, seed=seed)

int_expdata2 = int_exp2.run(backend=backend).block_for_results()
int_results2 = int_expdata2.analysis_results(dataframe=True)
display(int_expdata2.figure(0))

print(f"Available results: {set(int_results2.name)}")
../_images/qiskit_experiments.library.randomized_benchmarking.InterleavedRB_1_0.png
Available results: {'alpha_c', 'EPC', 'alpha'}

See also

Initialization

Initialize an interleaved randomized benchmarking experiment.

Parameters:
  • interleaved_element – The element to interleave, given either as a Clifford element, gate, delay or circuit. All instructions in the element must be supported in the backend``(``target). If it is/contains a delay, its duration and unit must comply with the timing constraints of the backend (BackendTiming is useful to obtain valid delays). Parameterized circuits/instructions are not allowed.

  • physical_qubits – list of physical qubits for the experiment.

  • lengths – A list of RB sequences lengths.

  • backend – The backend to run the experiment on.

  • num_samples – Number of samples to generate for each sequence length.

  • seed – Optional, seed used to initialize numpy.random.default_rng. when generating circuits. The default_rng will be initialized with this seed value every time circuits() is called.

  • full_sampling – If True all Cliffords are independently sampled for all lengths. If False for sample of lengths longer sequences are constructed by appending additional Clifford samples to shorter sequences.

  • circuit_order – How to order the reference and the interleaved circuits. "RIRIRI" (default) - Alternate a reference and an interleaved circuit. Or "RRRIII" - Push all reference circuits first, then all interleaved ones.

Raises:
  • QiskitError – When interleaved_element has different number of qubits from the physical_qubits argument.

  • QiskitError – When interleaved_element is not convertible to Clifford object.

  • QiskitError – When interleaved_element has an invalid delay (e.g. violating the timing constraints of the backend).

Attributes

analysis

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]

Return a list of RB circuits.

Returns:

A list of QuantumCircuit.

Raises:

QiskitError – If interleaved_element has non-supported instruction in the backend.

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

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.