qiskit-documentation/docs/api/qiskit/0.37/aer_noise.mdx

157 lines
12 KiB
Plaintext
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: noise
description: API reference for qiskit.providers.aer.noise
in_page_toc_min_heading_level: 2
python_api_type: module
python_api_name: qiskit.providers.aer.noise
---
<span id="module-qiskit.providers.aer.noise" />
<span id="aer-noise" />
# Noise Models
<span id="module-qiskit.providers.aer.noise" />
`qiskit.providers.aer.noise`
This module contains classes and functions to build a noise model for simulating a Qiskit quantum circuit in the presence of errors.
## Building Noise Models
The [`NoiseModel`](qiskit.providers.aer.noise.NoiseModel "qiskit.providers.aer.noise.NoiseModel") class is used to represent noise model for the [`QasmSimulator`](qiskit.providers.aer.QasmSimulator "qiskit.providers.aer.QasmSimulator"). It can be used to construct custom noise models for simulator, to to automatically generate a basic device noise model for an IBMQ backend.
### Device Noise Models
A simplified approximate [`NoiseModel`](qiskit.providers.aer.noise.NoiseModel "qiskit.providers.aer.noise.NoiseModel") can be generated automatically from the properties of real device backends from the IBMQ provider using the [`NoiseModel.from_backend()`](qiskit.providers.aer.noise.NoiseModel#from_backend "qiskit.providers.aer.noise.NoiseModel.from_backend") method. See the method documentation for details.
**Example: Basic device noise model**
```python
from qiskit import QuantumCircuit, execute
from qiskit import IBMQ, Aer
from qiskit.visualization import plot_histogram
from qiskit.providers.aer.noise import NoiseModel
# Build noise model from backend properties
provider = IBMQ.load_account()
backend = provider.get_backend('ibmq_vigo')
noise_model = NoiseModel.from_backend(backend)
# Get coupling map from backend
coupling_map = backend.configuration().coupling_map
# Get basis gates from noise model
basis_gates = noise_model.basis_gates
# Make a circuit
circ = QuantumCircuit(3, 3)
circ.h(0)
circ.cx(0, 1)
circ.cx(1, 2)
circ.measure([0, 1, 2], [0, 1, 2])
# Perform a noise simulation
result = execute(circ, Aer.get_backend('qasm_simulator'),
coupling_map=coupling_map,
basis_gates=basis_gates,
noise_model=noise_model).result()
counts = result.get_counts(0)
plot_histogram(counts)
```
### Custom Noise Models
Custom noise models can be used by adding [`QuantumError`](qiskit.providers.aer.noise.QuantumError "qiskit.providers.aer.noise.QuantumError") to circuit gate, reset or measure instructions, and [`ReadoutError`](qiskit.providers.aer.noise.ReadoutError "qiskit.providers.aer.noise.ReadoutError") to measure instructions. This module includes several helper functions for generating [`QuantumError`](qiskit.providers.aer.noise.QuantumError "qiskit.providers.aer.noise.QuantumError") instances based on canonical error models used in Quantum Information Theory that can simplify building noise models. See the documentation for the [`NoiseModel`](qiskit.providers.aer.noise.NoiseModel "qiskit.providers.aer.noise.NoiseModel") class for additional details.
**Example: depolarizing noise model**
```python
from qiskit import QuantumCircuit, execute, Aer
from qiskit.visualization import plot_histogram
import qiskit.providers.aer.noise as noise
# Error probabilities
prob_1 = 0.001 # 1-qubit gate
prob_2 = 0.01 # 2-qubit gate
# Depolarizing quantum errors
error_1 = noise.depolarizing_error(prob_1, 1)
error_2 = noise.depolarizing_error(prob_2, 2)
# Add errors to noise model
noise_model = noise.NoiseModel()
noise_model.add_all_qubit_quantum_error(error_1, ['u1', 'u2', 'u3'])
noise_model.add_all_qubit_quantum_error(error_2, ['cx'])
# Get basis gates from noise model
basis_gates = noise_model.basis_gates
# Make a circuit
circ = QuantumCircuit(3, 3)
circ.h(0)
circ.cx(0, 1)
circ.cx(1, 2)
circ.measure([0, 1, 2], [0, 1, 2])
# Perform a noise simulation
result = execute(circ, Aer.get_backend('qasm_simulator'),
basis_gates=basis_gates,
noise_model=noise_model).result()
counts = result.get_counts(0)
plot_histogram(counts)
```
## Classes
The following are the classes used to represented noise and error terms.
| | |
| ------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------- |
| [`NoiseModel`](qiskit.providers.aer.noise.NoiseModel "qiskit.providers.aer.noise.NoiseModel")(\[basis\_gates]) | Noise model class for Qiskit Aer simulators. |
| [`QuantumError`](qiskit.providers.aer.noise.QuantumError "qiskit.providers.aer.noise.QuantumError")(noise\_ops\[, number\_of\_qubits, ...]) | Quantum error class for Qiskit Aer noise model |
| [`ReadoutError`](qiskit.providers.aer.noise.ReadoutError "qiskit.providers.aer.noise.ReadoutError")(probabilities\[, atol]) | Readout error class for Qiskit Aer noise model. |
## Quantum Error Functions
The following functions can be used to generate many common types of [`QuantumError`](qiskit.providers.aer.noise.QuantumError "qiskit.providers.aer.noise.QuantumError") objects for inclusion in a [`NoiseModel`](qiskit.providers.aer.noise.NoiseModel "qiskit.providers.aer.noise.NoiseModel").
| | |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------- |
| [`pauli_error`](qiskit.providers.aer.noise.pauli_error "qiskit.providers.aer.noise.pauli_error")(noise\_ops\[, standard\_gates]) | Return a mixed Pauli quantum error channel. |
| [`depolarizing_error`](qiskit.providers.aer.noise.depolarizing_error "qiskit.providers.aer.noise.depolarizing_error")(param, num\_qubits\[, ...]) | Return a depolarizing quantum error channel. |
| [`pauli_error`](qiskit.providers.aer.noise.pauli_error "qiskit.providers.aer.noise.pauli_error")(noise\_ops\[, standard\_gates]) | Return a mixed Pauli quantum error channel. |
| [`mixed_unitary_error`](qiskit.providers.aer.noise.mixed_unitary_error "qiskit.providers.aer.noise.mixed_unitary_error")(noise\_ops\[, standard\_gates]) | Return a mixed unitary quantum error channel. |
| [`coherent_unitary_error`](qiskit.providers.aer.noise.coherent_unitary_error "qiskit.providers.aer.noise.coherent_unitary_error")(unitary) | Return a coherent unitary quantum error channel. |
| [`reset_error`](qiskit.providers.aer.noise.reset_error "qiskit.providers.aer.noise.reset_error")(prob0\[, prob1]) | Return a single qubit reset quantum error channel. |
| [`amplitude_damping_error`](qiskit.providers.aer.noise.amplitude_damping_error "qiskit.providers.aer.noise.amplitude_damping_error")(param\_amp\[, ...]) | Return a single-qubit generalized amplitude damping quantum error channel. |
| [`phase_damping_error`](qiskit.providers.aer.noise.phase_damping_error "qiskit.providers.aer.noise.phase_damping_error")(param\_phase\[, ...]) | Return a single-qubit generalized phase damping quantum error channel. |
| [`phase_amplitude_damping_error`](qiskit.providers.aer.noise.phase_amplitude_damping_error "qiskit.providers.aer.noise.phase_amplitude_damping_error")(param\_amp, ...) | Return a single-qubit combined phase and amplitude damping quantum error channel. |
| [`thermal_relaxation_error`](qiskit.providers.aer.noise.thermal_relaxation_error "qiskit.providers.aer.noise.thermal_relaxation_error")(t1, t2, time\[, ...]) | Return a single-qubit thermal relaxation quantum error channel. |
| [`kraus_error`](qiskit.providers.aer.noise.kraus_error "qiskit.providers.aer.noise.kraus_error")(noise\_ops\[, standard\_gates, ...]) | Return a Kraus quantum error channel. |
## Noise Transpiler Passes
These transpiler passes can be used to build noise models that can be applied to circuits via transpilation.
| | |
| ---------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------- |
| [`LocalNoisePass`](qiskit.providers.aer.noise.LocalNoisePass "qiskit.providers.aer.noise.LocalNoisePass")(func\[, op\_types, method]) | Transpiler pass to insert noise into a circuit. |
| [`RelaxationNoisePass`](qiskit.providers.aer.noise.RelaxationNoisePass "qiskit.providers.aer.noise.RelaxationNoisePass")(t1s, t2s\[, dt, ...]) | Add duration dependent thermal relaxation noise after instructions. |
## Device Noise Parameters
The following are utility functions which can be used for extracting error parameters and error objects from device BackendProperties.
| | |
| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------- |
| [`device.basic_device_readout_errors`](qiskit.providers.aer.noise.device.basic_device_readout_errors "qiskit.providers.aer.noise.device.basic_device_readout_errors")(properties) | Return readout error parameters from a devices BackendProperties. |
| [`device.basic_device_gate_errors`](qiskit.providers.aer.noise.device.basic_device_gate_errors "qiskit.providers.aer.noise.device.basic_device_gate_errors")(properties) | Return QuantumErrors derived from a devices BackendProperties. |
| [`device.gate_param_values`](qiskit.providers.aer.noise.device.gate_param_values "qiskit.providers.aer.noise.device.gate_param_values")(properties) | Return parameter error values from a devices BackendProperties. |
| [`device.gate_error_values`](qiskit.providers.aer.noise.device.gate_error_values "qiskit.providers.aer.noise.device.gate_error_values")(properties) | Return gate error values from a devices BackendProperties. |
| [`device.gate_length_values`](qiskit.providers.aer.noise.device.gate_length_values "qiskit.providers.aer.noise.device.gate_length_values")(properties) | Return gate length values from a devices BackendProperties. |
| [`device.readout_error_values`](qiskit.providers.aer.noise.device.readout_error_values "qiskit.providers.aer.noise.device.readout_error_values")(properties) | Return readout error values from a devices BackendProperties. |
| [`device.thermal_relaxation_values`](qiskit.providers.aer.noise.device.thermal_relaxation_values "qiskit.providers.aer.noise.device.thermal_relaxation_values")(properties) | Return T1, T2 and frequency values from a devices BackendProperties. |