Note
This is the documentation for the current state of the development branch of Qiskit Experiments. The documentation or APIs here can change prior to being released.
MitigatedProcessTomography¶
- class MitigatedProcessTomography(circuit, backend=None, physical_qubits=None, measurement_indices=None, preparation_indices=None, basis_indices=None, conditional_circuit_clbits=False, analysis='default')[source]¶
A batched experiment to characterize readout error then perform process tomography for doing readout error mitigated process tomography.
Overview
Readout error mitigated Quantum process tomography is a batch experiment consisting of a
LocalReadoutError
characterization experiments, followed by aProcessTomography
experiment.During analysis the assignment matrix local readout error model is used to automatically construct a noisy Pauli measurement basis for performing readout error mitigated process tomography fitting.
Analysis class reference
Experiment options
These options can be set by the
set_experiment_options()
method.- Options
Defined in the class
BatchExperiment
:separate_jobs (Boolean)
Default value:False
Whether to route different sub-experiments to different jobs.
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 QuantumCircuit from qiskit_experiments.library import MitigatedProcessTomography num_qubits = 2 qc_ghz = QuantumCircuit(num_qubits) qc_ghz.h(0) qc_ghz.s(0) for i in range(1, num_qubits): qc_ghz.cx(0, i) mitqptexp = MitigatedProcessTomography(qc_ghz) mitqptexp.set_run_options(shots=1000) mitqptdata = mitqptexp.run(backend=backend, seed_simulator=100,).block_for_results() mitigated_choi_out = mitqptdata.analysis_results("state").value # extracting a densitymatrix from mitigated_choi_out from qiskit.visualization import plot_state_city import qiskit.quantum_info as qinfo _rho_exp_00 = np.array([[None, None, None, None], [None, None, None, None], [None, None, None, None], [None, None, None, None]]) for i in range(4): for j in range(4): _rho_exp_00[i][j] = mitigated_choi_out.data[i][j] mitigated_rho_exp_00 = qinfo.DensityMatrix(_rho_exp_00) display(plot_state_city(mitigated_rho_exp_00, title="mitigated Density Matrix"))
Note
Performing readout error mitigation full process tomography on an N-qubit circuit requires running 2 readout error characterization circuits and \(4^N 3^N\) measurement circuits using the Pauli preparation and measurement bases.
See also
Initialization
Initialize a quantum process tomography experiment.
- Parameters:
circuit (QuantumCircuit | Instruction | BaseOperator) – the quantum process circuit. If not a quantum circuit it must be a class that can be appended to a quantum circuit.
backend (Backend | None) – The backend to run the experiment on.
physical_qubits (Sequence[int] | None) – Optional, the physical qubits for the initial state circuit. If None this will be qubits [0, N) for an N-qubit circuit.
measurement_indices (Sequence[int] | None) – Optional, the physical_qubits indices to be measured. If None all circuit physical qubits will be measured.
preparation_indices (Sequence[int] | None) – Optional, the physical_qubits indices to be prepared. If None all circuit physical qubits will be prepared.
basis_indices (Iterable[Tuple[List[int], List[int]]] | None) – Optional, a list of basis indices for generating partial tomography measurement data. Each item should be given as a pair of lists of preparation and measurement basis configurations
([p[0], p[1], ...], [m[0], m[1], ...])
, wherep[i]
is the preparation basis index, andm[i]
is the measurement basis index for qubit-i. If not specified full tomography for all indices of the preparation and measurement bases will be performed.conditional_circuit_clbits (bool | Sequence[int] | Sequence[Clbit]) – Optional, the clbits in the source circuit to be conditioned on when reconstructing the state. If True all circuit clbits will be conditioned on. Enabling this will return a list of reconstructed state components conditional on the values of these clbit values.
analysis (BaseAnalysis | None | str) – Optional, a custom tomography analysis instance to use. If
"default"
ProcessTomographyAnalysis
will be used. If None no analysis instance will be set.
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_experiments¶
Return the number of sub experiments
- num_qubits¶
Return the number of qubits for the experiment.
- physical_qubits¶
Return the device qubits for the experiment.
Methods
- circuits()¶
Return a list of experiment circuits.
- Returns:
A list of
QuantumCircuit
.
Note
These circuits should be on qubits
[0, .., N-1]
for an N-qubit experiment. The circuits mapped to physical qubits are obtained via the internal_transpiled_circuits()
method.
- component_experiment(index=None)¶
Return the component Experiment object.
- Parameters:
index (int) – Experiment index, or
None
if all experiments are to be returned.- Returns:
The component experiment(s).
- Return type:
- 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.