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
Analysis class reference
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:NoneA list of RB sequences lengths.num_samples (int)
Default value:NoneNumber of samples to generate for each sequence length.seed (None or int or SeedSequence or BitGenerator or Generator)
Default value:NoneA seed used to initializenumpy.random.default_rngwhen generating circuits. Thedefault_rngwill be initialized with this seed value every timecircuits()is called.full_sampling (bool)
Default value:NoneIf 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:NoneThe 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)}")
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 thebackend(BackendTimingis 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. Thedefault_rngwill be initialized with this seed value every timecircuits()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.
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:
- copy()¶
Return a copy of the experiment
- Return type:
- classmethod from_config(config)¶
Initialize an experiment from experiment config
- Return type:
- 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 experimentsanalysis()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:
- 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.