qiskit-aer 0.17.2__cp314-cp314-win_amd64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- qiskit_aer/VERSION.txt +1 -0
- qiskit_aer/__init__.py +89 -0
- qiskit_aer/aererror.py +30 -0
- qiskit_aer/aerprovider.py +119 -0
- qiskit_aer/backends/__init__.py +20 -0
- qiskit_aer/backends/aer_compiler.py +1085 -0
- qiskit_aer/backends/aer_simulator.py +1025 -0
- qiskit_aer/backends/aerbackend.py +679 -0
- qiskit_aer/backends/backend_utils.py +567 -0
- qiskit_aer/backends/backendconfiguration.py +395 -0
- qiskit_aer/backends/backendproperties.py +590 -0
- qiskit_aer/backends/compatibility.py +287 -0
- qiskit_aer/backends/controller_wrappers.cp314-win_amd64.pyd +0 -0
- qiskit_aer/backends/libopenblas.dll +0 -0
- qiskit_aer/backends/name_mapping.py +306 -0
- qiskit_aer/backends/qasm_simulator.py +925 -0
- qiskit_aer/backends/statevector_simulator.py +330 -0
- qiskit_aer/backends/unitary_simulator.py +316 -0
- qiskit_aer/jobs/__init__.py +35 -0
- qiskit_aer/jobs/aerjob.py +143 -0
- qiskit_aer/jobs/utils.py +66 -0
- qiskit_aer/library/__init__.py +204 -0
- qiskit_aer/library/control_flow_instructions/__init__.py +16 -0
- qiskit_aer/library/control_flow_instructions/jump.py +47 -0
- qiskit_aer/library/control_flow_instructions/mark.py +30 -0
- qiskit_aer/library/control_flow_instructions/store.py +29 -0
- qiskit_aer/library/default_qubits.py +44 -0
- qiskit_aer/library/instructions_table.csv +21 -0
- qiskit_aer/library/save_instructions/__init__.py +44 -0
- qiskit_aer/library/save_instructions/save_amplitudes.py +168 -0
- qiskit_aer/library/save_instructions/save_clifford.py +63 -0
- qiskit_aer/library/save_instructions/save_data.py +129 -0
- qiskit_aer/library/save_instructions/save_density_matrix.py +91 -0
- qiskit_aer/library/save_instructions/save_expectation_value.py +257 -0
- qiskit_aer/library/save_instructions/save_matrix_product_state.py +71 -0
- qiskit_aer/library/save_instructions/save_probabilities.py +156 -0
- qiskit_aer/library/save_instructions/save_stabilizer.py +70 -0
- qiskit_aer/library/save_instructions/save_state.py +79 -0
- qiskit_aer/library/save_instructions/save_statevector.py +120 -0
- qiskit_aer/library/save_instructions/save_superop.py +62 -0
- qiskit_aer/library/save_instructions/save_unitary.py +63 -0
- qiskit_aer/library/set_instructions/__init__.py +19 -0
- qiskit_aer/library/set_instructions/set_density_matrix.py +78 -0
- qiskit_aer/library/set_instructions/set_matrix_product_state.py +83 -0
- qiskit_aer/library/set_instructions/set_stabilizer.py +77 -0
- qiskit_aer/library/set_instructions/set_statevector.py +78 -0
- qiskit_aer/library/set_instructions/set_superop.py +78 -0
- qiskit_aer/library/set_instructions/set_unitary.py +78 -0
- qiskit_aer/noise/__init__.py +265 -0
- qiskit_aer/noise/device/__init__.py +25 -0
- qiskit_aer/noise/device/models.py +397 -0
- qiskit_aer/noise/device/parameters.py +202 -0
- qiskit_aer/noise/errors/__init__.py +30 -0
- qiskit_aer/noise/errors/base_quantum_error.py +119 -0
- qiskit_aer/noise/errors/pauli_error.py +283 -0
- qiskit_aer/noise/errors/pauli_lindblad_error.py +363 -0
- qiskit_aer/noise/errors/quantum_error.py +451 -0
- qiskit_aer/noise/errors/readout_error.py +355 -0
- qiskit_aer/noise/errors/standard_errors.py +498 -0
- qiskit_aer/noise/noise_model.py +1231 -0
- qiskit_aer/noise/noiseerror.py +30 -0
- qiskit_aer/noise/passes/__init__.py +18 -0
- qiskit_aer/noise/passes/local_noise_pass.py +160 -0
- qiskit_aer/noise/passes/relaxation_noise_pass.py +137 -0
- qiskit_aer/primitives/__init__.py +44 -0
- qiskit_aer/primitives/estimator.py +751 -0
- qiskit_aer/primitives/estimator_v2.py +159 -0
- qiskit_aer/primitives/sampler.py +361 -0
- qiskit_aer/primitives/sampler_v2.py +256 -0
- qiskit_aer/quantum_info/__init__.py +32 -0
- qiskit_aer/quantum_info/states/__init__.py +16 -0
- qiskit_aer/quantum_info/states/aer_densitymatrix.py +313 -0
- qiskit_aer/quantum_info/states/aer_state.py +525 -0
- qiskit_aer/quantum_info/states/aer_statevector.py +302 -0
- qiskit_aer/utils/__init__.py +44 -0
- qiskit_aer/utils/noise_model_inserter.py +66 -0
- qiskit_aer/utils/noise_transformation.py +431 -0
- qiskit_aer/version.py +86 -0
- qiskit_aer-0.17.2.dist-info/METADATA +209 -0
- qiskit_aer-0.17.2.dist-info/RECORD +83 -0
- qiskit_aer-0.17.2.dist-info/WHEEL +5 -0
- qiskit_aer-0.17.2.dist-info/licenses/LICENSE.txt +203 -0
- qiskit_aer-0.17.2.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# This code is part of Qiskit.
|
|
2
|
+
#
|
|
3
|
+
# (C) Copyright IBM 2018, 2021.
|
|
4
|
+
#
|
|
5
|
+
# This code is licensed under the Apache License, Version 2.0. You may
|
|
6
|
+
# obtain a copy of this license in the LICENSE.txt file in the root directory
|
|
7
|
+
# of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
|
|
8
|
+
#
|
|
9
|
+
# Any modifications or derivative works of this code must retain this
|
|
10
|
+
# copyright notice, and modified files need to carry a notice indicating
|
|
11
|
+
# that they have been altered from the originals.
|
|
12
|
+
"""
|
|
13
|
+
Instruction to set the state simulator state to a matrix.
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
from qiskit.circuit import QuantumCircuit, Instruction
|
|
17
|
+
from qiskit.quantum_info import Operator
|
|
18
|
+
from ..default_qubits import default_qubits
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class SetUnitary(Instruction):
|
|
22
|
+
"""Set unitary state of the simulator"""
|
|
23
|
+
|
|
24
|
+
_directive = True
|
|
25
|
+
|
|
26
|
+
def __init__(self, state):
|
|
27
|
+
"""Create new instruction to set the unitary simulator state.
|
|
28
|
+
|
|
29
|
+
Args:
|
|
30
|
+
state (Operator): A unitary matrix.
|
|
31
|
+
|
|
32
|
+
Raises:
|
|
33
|
+
ValueError: if the input matrix is not state.
|
|
34
|
+
|
|
35
|
+
.. note::
|
|
36
|
+
|
|
37
|
+
This set instruction must always be performed on the full width of
|
|
38
|
+
qubits in a circuit, otherwise an exception will be raised during
|
|
39
|
+
simulation.
|
|
40
|
+
"""
|
|
41
|
+
if not isinstance(state, Operator):
|
|
42
|
+
state = Operator(state)
|
|
43
|
+
if not state.num_qubits or not state.is_unitary():
|
|
44
|
+
raise ValueError("The input matrix is not unitary")
|
|
45
|
+
super().__init__("set_unitary", state.num_qubits, 0, [state.data])
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def set_unitary(self, state):
|
|
49
|
+
"""Set the state of the simulator.
|
|
50
|
+
|
|
51
|
+
Args:
|
|
52
|
+
state (Operator): A state matrix.
|
|
53
|
+
|
|
54
|
+
Returns:
|
|
55
|
+
QuantumCircuit: with attached instruction.
|
|
56
|
+
|
|
57
|
+
Raises:
|
|
58
|
+
ValueError: If the state is the incorrect size for the current circuit.
|
|
59
|
+
ValueError: if the input matrix is not unitary.
|
|
60
|
+
|
|
61
|
+
.. note:
|
|
62
|
+
|
|
63
|
+
This instruction is always defined across all qubits in a circuit.
|
|
64
|
+
"""
|
|
65
|
+
qubits = default_qubits(self)
|
|
66
|
+
if not isinstance(state, Operator):
|
|
67
|
+
state = Operator(state)
|
|
68
|
+
if not state.num_qubits or state.num_qubits != len(qubits):
|
|
69
|
+
raise ValueError(
|
|
70
|
+
"The size of the unitary matrix for the set_unitary"
|
|
71
|
+
" instruction must be equal to the number of qubits"
|
|
72
|
+
f" in the circuit (state.num_qubits ({state.num_qubits})"
|
|
73
|
+
f" != QuantumCircuit.num_qubits ({self.num_qubits}))."
|
|
74
|
+
)
|
|
75
|
+
return self.append(SetUnitary(state), qubits)
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
QuantumCircuit.set_unitary = set_unitary
|
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
# This code is part of Qiskit.
|
|
2
|
+
#
|
|
3
|
+
# (C) Copyright IBM 2018, 2019.
|
|
4
|
+
#
|
|
5
|
+
# This code is licensed under the Apache License, Version 2.0. You may
|
|
6
|
+
# obtain a copy of this license in the LICENSE.txt file in the root directory
|
|
7
|
+
# of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
|
|
8
|
+
#
|
|
9
|
+
# Any modifications or derivative works of this code must retain this
|
|
10
|
+
# copyright notice, and modified files need to carry a notice indicating
|
|
11
|
+
# that they have been altered from the originals.
|
|
12
|
+
|
|
13
|
+
r"""
|
|
14
|
+
================================================
|
|
15
|
+
Noise Models (:mod:`qiskit_aer.noise`)
|
|
16
|
+
================================================
|
|
17
|
+
|
|
18
|
+
.. currentmodule:: qiskit_aer.noise
|
|
19
|
+
|
|
20
|
+
This module contains classes and functions to build a noise model for
|
|
21
|
+
simulating a Qiskit quantum circuit in the presence of errors.
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
Building Noise Models
|
|
25
|
+
=====================
|
|
26
|
+
|
|
27
|
+
The :class:`NoiseModel` class is used to represent noise model for the
|
|
28
|
+
:class:`~qiskit_aer.QasmSimulator`. It can be used to construct
|
|
29
|
+
custom noise models for simulator, to automatically generate a basic
|
|
30
|
+
device noise model for an IBMQ or fake backend.
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
Device Noise Models
|
|
34
|
+
-------------------
|
|
35
|
+
|
|
36
|
+
A simplified approximate :class:`NoiseModel` can be generated automatically
|
|
37
|
+
from the properties of real device backends from the IBMQ provider or
|
|
38
|
+
fake backends of the `fake_provider` using the :meth:`NoiseModel.from_backend`
|
|
39
|
+
method. See the method documentation for details.
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
**Example: Basic device noise model**
|
|
43
|
+
|
|
44
|
+
.. code-block:: python
|
|
45
|
+
|
|
46
|
+
from qiskit import IBMQ
|
|
47
|
+
from qiskit.providers.aer.noise import NoiseModel
|
|
48
|
+
from qiskit import QuantumCircuit, transpile
|
|
49
|
+
from qiskit_aer import AerSimulator
|
|
50
|
+
from qiskit.visualization import plot_histogram
|
|
51
|
+
from qiskit_aer.noise import NoiseModel
|
|
52
|
+
|
|
53
|
+
# Make a circuit
|
|
54
|
+
circ = QuantumCircuit(3, 3)
|
|
55
|
+
circ.h(0)
|
|
56
|
+
circ.cx(0, 1)
|
|
57
|
+
circ.cx(1, 2)
|
|
58
|
+
circ.measure([0, 1, 2], [0, 1, 2])
|
|
59
|
+
|
|
60
|
+
# Get the noise model of ibmq_lima
|
|
61
|
+
provider = IBMQ.load_account()
|
|
62
|
+
provider = IBMQ.get_provider(hub='ibm-q', group='open', project='main')
|
|
63
|
+
backend_lima = provider.get_backend('ibmq_lima')
|
|
64
|
+
noise_model = NoiseModel.from_backend(backend_lima)
|
|
65
|
+
|
|
66
|
+
# Get coupling map from backend
|
|
67
|
+
coupling_map = backend_lima.configuration().coupling_map
|
|
68
|
+
|
|
69
|
+
# Get basis gates from noise model
|
|
70
|
+
basis_gates = noise_model.basis_gates
|
|
71
|
+
|
|
72
|
+
# Perform a noise simulation
|
|
73
|
+
backend = AerSimulator(noise_model=noise_model,
|
|
74
|
+
coupling_map=coupling_map,
|
|
75
|
+
basis_gates=basis_gates)
|
|
76
|
+
transpiled_circuit = transpile(circ, backend)
|
|
77
|
+
result = backend.run(transpiled_circuit).result()
|
|
78
|
+
|
|
79
|
+
counts = result.get_counts(0)
|
|
80
|
+
plot_histogram(counts)
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
**Example: Basic device noise model using a `fake_provider` backend**
|
|
84
|
+
|
|
85
|
+
.. code-block:: python
|
|
86
|
+
|
|
87
|
+
from qiskit import QuantumCircuit, transpile
|
|
88
|
+
from qiskit_aer import AerSimulator
|
|
89
|
+
from qiskit.visualization import plot_histogram
|
|
90
|
+
from qiskit_aer.noise import NoiseModel
|
|
91
|
+
from qiskit.providers.fake_provider import FakeVigo
|
|
92
|
+
|
|
93
|
+
# Build noise model from backend properties
|
|
94
|
+
backend = FakeVigo()
|
|
95
|
+
noise_model = NoiseModel.from_backend(backend)
|
|
96
|
+
|
|
97
|
+
# Get coupling map from backend
|
|
98
|
+
coupling_map = backend.configuration().coupling_map
|
|
99
|
+
|
|
100
|
+
# Get basis gates from noise model
|
|
101
|
+
basis_gates = noise_model.basis_gates
|
|
102
|
+
|
|
103
|
+
# Make a circuit
|
|
104
|
+
circ = QuantumCircuit(3, 3)
|
|
105
|
+
circ.h(0)
|
|
106
|
+
circ.cx(0, 1)
|
|
107
|
+
circ.cx(1, 2)
|
|
108
|
+
circ.measure([0, 1, 2], [0, 1, 2])
|
|
109
|
+
|
|
110
|
+
# Perform a noise simulation
|
|
111
|
+
backend = AerSimulator(noise_model=noise_model,
|
|
112
|
+
coupling_map=coupling_map,
|
|
113
|
+
basis_gates=basis_gates)
|
|
114
|
+
transpiled_circuit = transpile(circ, backend)
|
|
115
|
+
result = backend.run(transpiled_circuit).result()
|
|
116
|
+
|
|
117
|
+
counts = result.get_counts(0)
|
|
118
|
+
plot_histogram(counts)
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
Custom Noise Models
|
|
122
|
+
-------------------
|
|
123
|
+
|
|
124
|
+
Custom noise models can be used by adding :class:`QuantumError` to circuit
|
|
125
|
+
gate, reset or measure instructions, and :class:`ReadoutError` to measure
|
|
126
|
+
instructions. This module includes several helper functions for generating
|
|
127
|
+
:class:`QuantumError` instances based on canonical error models used in
|
|
128
|
+
Quantum Information Theory that can simplify building noise models. See the
|
|
129
|
+
documentation for the :class:`NoiseModel` class for additional details.
|
|
130
|
+
|
|
131
|
+
**Example: depolarizing noise model**
|
|
132
|
+
|
|
133
|
+
.. code-block:: python
|
|
134
|
+
|
|
135
|
+
from qiskit import QuantumCircuit, transpile, Aer
|
|
136
|
+
from qiskit.visualization import plot_histogram
|
|
137
|
+
from qiskit_aer import AerSimulator
|
|
138
|
+
import qiskit_aer.noise as noise
|
|
139
|
+
|
|
140
|
+
# Error probabilities
|
|
141
|
+
prob_1 = 0.001 # 1-qubit gate
|
|
142
|
+
prob_2 = 0.01 # 2-qubit gate
|
|
143
|
+
|
|
144
|
+
# Depolarizing quantum errors
|
|
145
|
+
error_1 = noise.depolarizing_error(prob_1, 1)
|
|
146
|
+
error_2 = noise.depolarizing_error(prob_2, 2)
|
|
147
|
+
|
|
148
|
+
# Add errors to noise model
|
|
149
|
+
noise_model = noise.NoiseModel()
|
|
150
|
+
noise_model.add_all_qubit_quantum_error(error_1, ['u1', 'u2', 'u3'])
|
|
151
|
+
noise_model.add_all_qubit_quantum_error(error_2, ['cx'])
|
|
152
|
+
|
|
153
|
+
# Get basis gates from noise model
|
|
154
|
+
basis_gates = noise_model.basis_gates
|
|
155
|
+
|
|
156
|
+
# Make a circuit
|
|
157
|
+
circ = QuantumCircuit(3, 3)
|
|
158
|
+
circ.h(0)
|
|
159
|
+
circ.cx(0, 1)
|
|
160
|
+
circ.cx(1, 2)
|
|
161
|
+
circ.measure([0, 1, 2], [0, 1, 2])
|
|
162
|
+
|
|
163
|
+
# Perform a noise simulation
|
|
164
|
+
backend = AerSimulator(noise_model=noise_model,
|
|
165
|
+
coupling_map=coupling_map,
|
|
166
|
+
basis_gates=basis_gates)
|
|
167
|
+
transpiled_circuit = transpile(circ, backend)
|
|
168
|
+
result = backend.run(transpiled_circuit).result()
|
|
169
|
+
|
|
170
|
+
counts = result.get_counts(0)
|
|
171
|
+
plot_histogram(counts)
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
Classes
|
|
175
|
+
=======
|
|
176
|
+
|
|
177
|
+
The following are the classes used to represented noise and error terms.
|
|
178
|
+
|
|
179
|
+
.. autosummary::
|
|
180
|
+
:toctree: ../stubs/
|
|
181
|
+
|
|
182
|
+
NoiseModel
|
|
183
|
+
QuantumError
|
|
184
|
+
PauliLindbladError
|
|
185
|
+
ReadoutError
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
Quantum Error Functions
|
|
189
|
+
=======================
|
|
190
|
+
|
|
191
|
+
The following functions can be used to generate many common types of
|
|
192
|
+
:class:`QuantumError` objects for inclusion in a :class:`NoiseModel`.
|
|
193
|
+
|
|
194
|
+
.. autosummary::
|
|
195
|
+
:toctree: ../stubs/
|
|
196
|
+
|
|
197
|
+
pauli_error
|
|
198
|
+
depolarizing_error
|
|
199
|
+
mixed_unitary_error
|
|
200
|
+
coherent_unitary_error
|
|
201
|
+
reset_error
|
|
202
|
+
amplitude_damping_error
|
|
203
|
+
phase_damping_error
|
|
204
|
+
phase_amplitude_damping_error
|
|
205
|
+
thermal_relaxation_error
|
|
206
|
+
kraus_error
|
|
207
|
+
|
|
208
|
+
|
|
209
|
+
Noise Transpiler Passes
|
|
210
|
+
=======================
|
|
211
|
+
|
|
212
|
+
These transpiler passes can be used to build noise models that can be applied
|
|
213
|
+
to circuits via transpilation.
|
|
214
|
+
|
|
215
|
+
.. autosummary::
|
|
216
|
+
:toctree: ../stubs/
|
|
217
|
+
|
|
218
|
+
LocalNoisePass
|
|
219
|
+
RelaxationNoisePass
|
|
220
|
+
|
|
221
|
+
|
|
222
|
+
Device Noise Parameters
|
|
223
|
+
=======================
|
|
224
|
+
|
|
225
|
+
The following are utility functions which can be used for extracting error
|
|
226
|
+
parameters and error objects from device `BackendProperties`.
|
|
227
|
+
|
|
228
|
+
.. autosummary::
|
|
229
|
+
:toctree: ../stubs/
|
|
230
|
+
|
|
231
|
+
device.basic_device_readout_errors
|
|
232
|
+
device.basic_device_gate_errors
|
|
233
|
+
device.gate_param_values
|
|
234
|
+
device.gate_error_values
|
|
235
|
+
device.gate_length_values
|
|
236
|
+
device.readout_error_values
|
|
237
|
+
device.thermal_relaxation_values
|
|
238
|
+
"""
|
|
239
|
+
|
|
240
|
+
# Noise and Error classes
|
|
241
|
+
from .noise_model import NoiseModel
|
|
242
|
+
from .errors import QuantumError
|
|
243
|
+
from .errors import PauliError
|
|
244
|
+
from .errors import PauliLindbladError
|
|
245
|
+
from .errors import ReadoutError
|
|
246
|
+
|
|
247
|
+
# Error generating functions
|
|
248
|
+
from .errors import kraus_error
|
|
249
|
+
from .errors import mixed_unitary_error
|
|
250
|
+
from .errors import coherent_unitary_error
|
|
251
|
+
from .errors import pauli_error
|
|
252
|
+
from .errors import depolarizing_error
|
|
253
|
+
from .errors import reset_error
|
|
254
|
+
from .errors import thermal_relaxation_error
|
|
255
|
+
from .errors import phase_amplitude_damping_error
|
|
256
|
+
from .errors import amplitude_damping_error
|
|
257
|
+
from .errors import phase_damping_error
|
|
258
|
+
|
|
259
|
+
# Transpiler Passes
|
|
260
|
+
from .passes import LocalNoisePass
|
|
261
|
+
from .passes import RelaxationNoisePass
|
|
262
|
+
|
|
263
|
+
# Submodules
|
|
264
|
+
from . import errors
|
|
265
|
+
from . import device
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# This code is part of Qiskit.
|
|
2
|
+
#
|
|
3
|
+
# (C) Copyright IBM 2018, 2019.
|
|
4
|
+
#
|
|
5
|
+
# This code is licensed under the Apache License, Version 2.0. You may
|
|
6
|
+
# obtain a copy of this license in the LICENSE.txt file in the root directory
|
|
7
|
+
# of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
|
|
8
|
+
#
|
|
9
|
+
# Any modifications or derivative works of this code must retain this
|
|
10
|
+
# copyright notice, and modified files need to carry a notice indicating
|
|
11
|
+
# that they have been altered from the originals.
|
|
12
|
+
|
|
13
|
+
"""
|
|
14
|
+
Functions for building noise models from backend properties.
|
|
15
|
+
"""
|
|
16
|
+
|
|
17
|
+
from .models import basic_device_readout_errors
|
|
18
|
+
from .models import basic_device_gate_errors
|
|
19
|
+
from .parameters import gate_param_values
|
|
20
|
+
from .parameters import gate_error_values
|
|
21
|
+
from .parameters import gate_length_values
|
|
22
|
+
from .parameters import readout_error_values
|
|
23
|
+
from .parameters import thermal_relaxation_values
|
|
24
|
+
|
|
25
|
+
from . import parameters
|