qiskit 1.0.2__cp38-abi3-win32.whl → 1.1.0rc1__cp38-abi3-win32.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/VERSION.txt +1 -1
- qiskit/__init__.py +27 -16
- qiskit/_accelerate.pyd +0 -0
- qiskit/_numpy_compat.py +73 -0
- qiskit/assembler/disassemble.py +5 -6
- qiskit/circuit/__init__.py +1131 -169
- qiskit/circuit/_classical_resource_map.py +7 -6
- qiskit/circuit/_utils.py +18 -8
- qiskit/circuit/annotated_operation.py +21 -0
- qiskit/circuit/barrier.py +10 -13
- qiskit/circuit/bit.py +0 -1
- qiskit/circuit/classical/__init__.py +2 -2
- qiskit/circuit/classical/expr/__init__.py +39 -5
- qiskit/circuit/classical/expr/constructors.py +84 -1
- qiskit/circuit/classical/expr/expr.py +83 -13
- qiskit/circuit/classical/expr/visitors.py +83 -0
- qiskit/circuit/commutation_checker.py +86 -51
- qiskit/circuit/controlflow/_builder_utils.py +9 -1
- qiskit/circuit/controlflow/break_loop.py +8 -22
- qiskit/circuit/controlflow/builder.py +116 -1
- qiskit/circuit/controlflow/continue_loop.py +8 -22
- qiskit/circuit/controlflow/control_flow.py +47 -8
- qiskit/circuit/controlflow/for_loop.py +8 -23
- qiskit/circuit/controlflow/if_else.py +13 -27
- qiskit/circuit/controlflow/switch_case.py +14 -21
- qiskit/circuit/controlflow/while_loop.py +9 -23
- qiskit/circuit/controlledgate.py +2 -2
- qiskit/circuit/delay.py +7 -5
- qiskit/circuit/gate.py +20 -7
- qiskit/circuit/instruction.py +31 -30
- qiskit/circuit/instructionset.py +9 -22
- qiskit/circuit/library/__init__.py +8 -2
- qiskit/circuit/library/arithmetic/integer_comparator.py +2 -2
- qiskit/circuit/library/arithmetic/quadratic_form.py +3 -2
- qiskit/circuit/library/blueprintcircuit.py +29 -7
- qiskit/circuit/library/data_preparation/state_preparation.py +6 -5
- qiskit/circuit/library/generalized_gates/diagonal.py +5 -4
- qiskit/circuit/library/generalized_gates/isometry.py +51 -254
- qiskit/circuit/library/generalized_gates/pauli.py +2 -2
- qiskit/circuit/library/generalized_gates/permutation.py +4 -1
- qiskit/circuit/library/generalized_gates/rv.py +15 -11
- qiskit/circuit/library/generalized_gates/uc.py +2 -98
- qiskit/circuit/library/generalized_gates/unitary.py +9 -4
- qiskit/circuit/library/hamiltonian_gate.py +11 -5
- qiskit/circuit/library/n_local/efficient_su2.py +5 -5
- qiskit/circuit/library/n_local/n_local.py +100 -49
- qiskit/circuit/library/n_local/two_local.py +3 -59
- qiskit/circuit/library/overlap.py +3 -3
- qiskit/circuit/library/phase_oracle.py +1 -1
- qiskit/circuit/library/quantum_volume.py +39 -38
- qiskit/circuit/library/standard_gates/equivalence_library.py +50 -0
- qiskit/circuit/library/standard_gates/global_phase.py +4 -2
- qiskit/circuit/library/standard_gates/i.py +1 -2
- qiskit/circuit/library/standard_gates/iswap.py +1 -2
- qiskit/circuit/library/standard_gates/multi_control_rotation_gates.py +11 -5
- qiskit/circuit/library/standard_gates/p.py +31 -15
- qiskit/circuit/library/standard_gates/r.py +4 -3
- qiskit/circuit/library/standard_gates/rx.py +7 -4
- qiskit/circuit/library/standard_gates/rxx.py +4 -3
- qiskit/circuit/library/standard_gates/ry.py +7 -4
- qiskit/circuit/library/standard_gates/ryy.py +4 -3
- qiskit/circuit/library/standard_gates/rz.py +7 -4
- qiskit/circuit/library/standard_gates/rzx.py +4 -3
- qiskit/circuit/library/standard_gates/rzz.py +4 -3
- qiskit/circuit/library/standard_gates/s.py +4 -8
- qiskit/circuit/library/standard_gates/t.py +2 -4
- qiskit/circuit/library/standard_gates/u.py +16 -11
- qiskit/circuit/library/standard_gates/u1.py +6 -2
- qiskit/circuit/library/standard_gates/u2.py +4 -2
- qiskit/circuit/library/standard_gates/u3.py +9 -5
- qiskit/circuit/library/standard_gates/x.py +22 -11
- qiskit/circuit/library/standard_gates/xx_minus_yy.py +4 -3
- qiskit/circuit/library/standard_gates/xx_plus_yy.py +7 -5
- qiskit/circuit/library/standard_gates/z.py +1 -2
- qiskit/circuit/measure.py +4 -1
- qiskit/circuit/operation.py +13 -8
- qiskit/circuit/parameter.py +11 -6
- qiskit/circuit/quantumcircuit.py +864 -128
- qiskit/circuit/quantumcircuitdata.py +2 -2
- qiskit/circuit/reset.py +5 -2
- qiskit/circuit/store.py +95 -0
- qiskit/compiler/assembler.py +22 -22
- qiskit/compiler/transpiler.py +63 -112
- qiskit/converters/circuit_to_dag.py +7 -0
- qiskit/converters/circuit_to_dagdependency_v2.py +47 -0
- qiskit/converters/circuit_to_gate.py +2 -0
- qiskit/converters/circuit_to_instruction.py +22 -0
- qiskit/converters/dag_to_circuit.py +4 -0
- qiskit/converters/dag_to_dagdependency_v2.py +44 -0
- qiskit/dagcircuit/collect_blocks.py +15 -10
- qiskit/dagcircuit/dagcircuit.py +434 -124
- qiskit/dagcircuit/dagdependency.py +19 -12
- qiskit/dagcircuit/dagdependency_v2.py +641 -0
- qiskit/dagcircuit/dagdepnode.py +19 -16
- qiskit/dagcircuit/dagnode.py +14 -4
- qiskit/primitives/__init__.py +12 -8
- qiskit/primitives/backend_estimator.py +3 -5
- qiskit/primitives/backend_estimator_v2.py +410 -0
- qiskit/primitives/backend_sampler_v2.py +287 -0
- qiskit/primitives/base/base_estimator.py +4 -9
- qiskit/primitives/base/base_sampler.py +2 -2
- qiskit/primitives/containers/__init__.py +5 -4
- qiskit/primitives/containers/bit_array.py +292 -2
- qiskit/primitives/containers/data_bin.py +123 -50
- qiskit/primitives/containers/estimator_pub.py +10 -3
- qiskit/primitives/containers/observables_array.py +2 -2
- qiskit/primitives/containers/pub_result.py +1 -1
- qiskit/primitives/containers/sampler_pub.py +19 -3
- qiskit/primitives/containers/sampler_pub_result.py +74 -0
- qiskit/primitives/containers/shape.py +1 -1
- qiskit/primitives/statevector_estimator.py +4 -4
- qiskit/primitives/statevector_sampler.py +7 -12
- qiskit/providers/__init__.py +17 -18
- qiskit/providers/backend.py +2 -2
- qiskit/providers/backend_compat.py +8 -10
- qiskit/providers/basic_provider/basic_provider_tools.py +67 -31
- qiskit/providers/basic_provider/basic_simulator.py +81 -21
- qiskit/providers/fake_provider/fake_1q.py +1 -1
- qiskit/providers/fake_provider/fake_backend.py +3 -408
- qiskit/providers/fake_provider/generic_backend_v2.py +26 -14
- qiskit/providers/provider.py +16 -0
- qiskit/pulse/builder.py +4 -1
- qiskit/pulse/parameter_manager.py +60 -4
- qiskit/pulse/schedule.py +29 -13
- qiskit/pulse/utils.py +61 -20
- qiskit/qasm2/__init__.py +1 -5
- qiskit/qasm2/parse.py +1 -4
- qiskit/qasm3/__init__.py +42 -5
- qiskit/qasm3/ast.py +19 -0
- qiskit/qasm3/exporter.py +178 -106
- qiskit/qasm3/printer.py +27 -5
- qiskit/qpy/__init__.py +247 -13
- qiskit/qpy/binary_io/circuits.py +216 -47
- qiskit/qpy/binary_io/schedules.py +42 -36
- qiskit/qpy/binary_io/value.py +201 -22
- qiskit/qpy/common.py +1 -1
- qiskit/qpy/exceptions.py +20 -0
- qiskit/qpy/formats.py +29 -0
- qiskit/qpy/type_keys.py +21 -0
- qiskit/quantum_info/analysis/distance.py +3 -3
- qiskit/quantum_info/analysis/make_observable.py +2 -1
- qiskit/quantum_info/analysis/z2_symmetries.py +2 -1
- qiskit/quantum_info/operators/channel/chi.py +9 -8
- qiskit/quantum_info/operators/channel/choi.py +10 -9
- qiskit/quantum_info/operators/channel/kraus.py +2 -1
- qiskit/quantum_info/operators/channel/ptm.py +10 -9
- qiskit/quantum_info/operators/channel/quantum_channel.py +2 -1
- qiskit/quantum_info/operators/channel/stinespring.py +2 -1
- qiskit/quantum_info/operators/channel/superop.py +12 -11
- qiskit/quantum_info/operators/channel/transformations.py +12 -11
- qiskit/quantum_info/operators/dihedral/dihedral.py +5 -4
- qiskit/quantum_info/operators/operator.py +43 -30
- qiskit/quantum_info/operators/scalar_op.py +10 -9
- qiskit/quantum_info/operators/symplectic/base_pauli.py +70 -59
- qiskit/quantum_info/operators/symplectic/clifford.py +36 -9
- qiskit/quantum_info/operators/symplectic/pauli.py +48 -4
- qiskit/quantum_info/operators/symplectic/pauli_list.py +36 -14
- qiskit/quantum_info/operators/symplectic/random.py +3 -2
- qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py +54 -33
- qiskit/quantum_info/states/densitymatrix.py +13 -13
- qiskit/quantum_info/states/stabilizerstate.py +3 -3
- qiskit/quantum_info/states/statevector.py +14 -13
- qiskit/quantum_info/states/utils.py +5 -3
- qiskit/result/mitigation/correlated_readout_mitigator.py +3 -2
- qiskit/result/mitigation/local_readout_mitigator.py +2 -1
- qiskit/result/mitigation/utils.py +3 -2
- qiskit/synthesis/__init__.py +2 -0
- qiskit/synthesis/discrete_basis/commutator_decompose.py +2 -2
- qiskit/synthesis/evolution/lie_trotter.py +7 -14
- qiskit/synthesis/evolution/qdrift.py +3 -4
- qiskit/synthesis/linear/cnot_synth.py +1 -3
- qiskit/synthesis/linear/linear_circuits_utils.py +1 -1
- qiskit/synthesis/linear_phase/cz_depth_lnn.py +4 -18
- qiskit/synthesis/permutation/__init__.py +1 -0
- qiskit/synthesis/permutation/permutation_reverse_lnn.py +90 -0
- qiskit/synthesis/qft/qft_decompose_lnn.py +2 -6
- qiskit/synthesis/two_qubit/two_qubit_decompose.py +165 -954
- qiskit/synthesis/two_qubit/xx_decompose/circuits.py +13 -12
- qiskit/synthesis/two_qubit/xx_decompose/decomposer.py +7 -1
- qiskit/synthesis/unitary/aqc/__init__.py +1 -1
- qiskit/synthesis/unitary/aqc/cnot_structures.py +2 -1
- qiskit/synthesis/unitary/aqc/fast_gradient/fast_gradient.py +2 -1
- qiskit/synthesis/unitary/qsd.py +3 -2
- qiskit/transpiler/__init__.py +7 -3
- qiskit/transpiler/layout.py +140 -61
- qiskit/transpiler/passes/__init__.py +6 -0
- qiskit/transpiler/passes/basis/basis_translator.py +7 -2
- qiskit/transpiler/passes/basis/unroll_3q_or_more.py +1 -1
- qiskit/transpiler/passes/basis/unroll_custom_definitions.py +1 -1
- qiskit/transpiler/passes/calibration/rzx_builder.py +2 -1
- qiskit/transpiler/passes/layout/apply_layout.py +8 -3
- qiskit/transpiler/passes/layout/sabre_layout.py +15 -3
- qiskit/transpiler/passes/layout/set_layout.py +1 -1
- qiskit/transpiler/passes/optimization/__init__.py +2 -0
- qiskit/transpiler/passes/optimization/commutation_analysis.py +2 -2
- qiskit/transpiler/passes/optimization/commutative_cancellation.py +1 -1
- qiskit/transpiler/passes/optimization/consolidate_blocks.py +1 -1
- qiskit/transpiler/passes/optimization/cx_cancellation.py +10 -0
- qiskit/transpiler/passes/optimization/elide_permutations.py +114 -0
- qiskit/transpiler/passes/optimization/optimize_1q_decomposition.py +9 -3
- qiskit/transpiler/passes/optimization/optimize_annotated.py +248 -12
- qiskit/transpiler/passes/optimization/remove_final_reset.py +37 -0
- qiskit/transpiler/passes/optimization/template_matching/forward_match.py +1 -3
- qiskit/transpiler/passes/routing/__init__.py +1 -0
- qiskit/transpiler/passes/routing/basic_swap.py +13 -2
- qiskit/transpiler/passes/routing/lookahead_swap.py +7 -1
- qiskit/transpiler/passes/routing/sabre_swap.py +10 -6
- qiskit/transpiler/passes/routing/star_prerouting.py +417 -0
- qiskit/transpiler/passes/routing/stochastic_swap.py +24 -8
- qiskit/transpiler/passes/scheduling/__init__.py +1 -1
- qiskit/transpiler/passes/scheduling/alap.py +1 -2
- qiskit/transpiler/passes/scheduling/alignments/align_measures.py +1 -2
- qiskit/transpiler/passes/scheduling/alignments/check_durations.py +9 -6
- qiskit/transpiler/passes/scheduling/alignments/pulse_gate_validation.py +8 -0
- qiskit/transpiler/passes/scheduling/alignments/reschedule.py +13 -4
- qiskit/transpiler/passes/scheduling/asap.py +1 -2
- qiskit/transpiler/passes/scheduling/base_scheduler.py +21 -2
- qiskit/transpiler/passes/scheduling/dynamical_decoupling.py +26 -4
- qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py +24 -2
- qiskit/transpiler/passes/scheduling/time_unit_conversion.py +28 -4
- qiskit/transpiler/passes/synthesis/aqc_plugin.py +2 -2
- qiskit/transpiler/passes/synthesis/high_level_synthesis.py +120 -13
- qiskit/transpiler/passes/synthesis/unitary_synthesis.py +162 -55
- qiskit/transpiler/passes/utils/gates_basis.py +3 -3
- qiskit/transpiler/passmanager.py +44 -1
- qiskit/transpiler/preset_passmanagers/__init__.py +3 -3
- qiskit/transpiler/preset_passmanagers/builtin_plugins.py +34 -16
- qiskit/transpiler/preset_passmanagers/common.py +4 -6
- qiskit/transpiler/preset_passmanagers/plugin.py +9 -1
- qiskit/utils/optionals.py +6 -2
- qiskit/visualization/array.py +1 -1
- qiskit/visualization/bloch.py +2 -3
- qiskit/visualization/circuit/matplotlib.py +44 -14
- qiskit/visualization/circuit/text.py +38 -18
- qiskit/visualization/counts_visualization.py +3 -6
- qiskit/visualization/dag_visualization.py +6 -7
- qiskit/visualization/pulse_v2/interface.py +8 -3
- qiskit/visualization/state_visualization.py +3 -2
- qiskit/visualization/timeline/interface.py +18 -8
- {qiskit-1.0.2.dist-info → qiskit-1.1.0rc1.dist-info}/METADATA +12 -8
- {qiskit-1.0.2.dist-info → qiskit-1.1.0rc1.dist-info}/RECORD +245 -235
- {qiskit-1.0.2.dist-info → qiskit-1.1.0rc1.dist-info}/WHEEL +1 -1
- qiskit/_qasm2.pyd +0 -0
- qiskit/_qasm3.pyd +0 -0
- {qiskit-1.0.2.dist-info → qiskit-1.1.0rc1.dist-info}/LICENSE.txt +0 -0
- {qiskit-1.0.2.dist-info → qiskit-1.1.0rc1.dist-info}/entry_points.txt +0 -0
- {qiskit-1.0.2.dist-info → qiskit-1.1.0rc1.dist-info}/top_level.txt +0 -0
qiskit/qpy/__init__.py
CHANGED
@@ -79,6 +79,12 @@ during serialization or deserialization.
|
|
79
79
|
|
80
80
|
.. autoexception:: QpyError
|
81
81
|
|
82
|
+
When a lower-than-maximum target QPY version is set for serialization, but the object to be
|
83
|
+
serialized contains features that cannot be represented in that format, a subclass of
|
84
|
+
:exc:`QpyError` is raised:
|
85
|
+
|
86
|
+
.. autoexception:: UnsupportedFeatureForVersion
|
87
|
+
|
82
88
|
Attributes:
|
83
89
|
QPY_VERSION (int): The current QPY format version as of this release. This
|
84
90
|
is the default value of the ``version`` keyword argument on
|
@@ -111,6 +117,135 @@ and how the feature will be internally handled.
|
|
111
117
|
|
112
118
|
.. autoexception:: QPYLoadingDeprecatedFeatureWarning
|
113
119
|
|
120
|
+
QPY format version history
|
121
|
+
--------------------------
|
122
|
+
|
123
|
+
If you're planning to load a QPY file between different Qiskit versions knowing
|
124
|
+
which versions were available in a given release are useful. As the QPY is
|
125
|
+
backwards compatible but not forwards compatible you need to ensure a given
|
126
|
+
QPY format version was released in the release you're calling :func:`.load`
|
127
|
+
with. The following table lists the QPY versions that were supported in every
|
128
|
+
Qiskit (and qiskit-terra prior to Qiskit 1.0.0) release going back to the introduction
|
129
|
+
of QPY in qiskit-terra 0.18.0.
|
130
|
+
|
131
|
+
.. list-table: QPY Format Version History
|
132
|
+
:header-rows: 1
|
133
|
+
|
134
|
+
* - Qiskit (qiskit-terra for < 1.0.0) version
|
135
|
+
- :func:`.dump` format(s) output versions
|
136
|
+
- :func:`.load` maximum supported version (older format versions can always be read)
|
137
|
+
* - 1.1.0
|
138
|
+
- 10, 11, 12
|
139
|
+
- 12
|
140
|
+
* - 1.0.2
|
141
|
+
- 10, 11
|
142
|
+
- 12
|
143
|
+
* - 1.0.1
|
144
|
+
- 10, 11
|
145
|
+
- 11
|
146
|
+
* - 1.0.0
|
147
|
+
- 10, 11
|
148
|
+
- 11
|
149
|
+
* - 0.46.1
|
150
|
+
- 10
|
151
|
+
- 10
|
152
|
+
* - 0.45.3
|
153
|
+
- 10
|
154
|
+
- 10
|
155
|
+
* - 0.45.2
|
156
|
+
- 10
|
157
|
+
- 10
|
158
|
+
* - 0.45.1
|
159
|
+
- 10
|
160
|
+
- 10
|
161
|
+
* - 0.45.0
|
162
|
+
- 10
|
163
|
+
- 10
|
164
|
+
* - 0.25.3
|
165
|
+
- 9
|
166
|
+
- 9
|
167
|
+
* - 0.25.2
|
168
|
+
- 9
|
169
|
+
- 9
|
170
|
+
* - 0.25.1
|
171
|
+
- 9
|
172
|
+
- 9
|
173
|
+
* - 0.24.2
|
174
|
+
- 8
|
175
|
+
- 8
|
176
|
+
* - 0.24.1
|
177
|
+
- 7
|
178
|
+
- 7
|
179
|
+
* - 0.24.0
|
180
|
+
- 7
|
181
|
+
- 7
|
182
|
+
* - 0.23.3
|
183
|
+
- 6
|
184
|
+
- 6
|
185
|
+
* - 0.23.2
|
186
|
+
- 6
|
187
|
+
- 6
|
188
|
+
* - 0.23.1
|
189
|
+
- 6
|
190
|
+
- 6
|
191
|
+
* - 0.23.0
|
192
|
+
- 6
|
193
|
+
- 6
|
194
|
+
* - 0.22.4
|
195
|
+
- 5
|
196
|
+
- 5
|
197
|
+
* - 0.22.3
|
198
|
+
- 5
|
199
|
+
- 5
|
200
|
+
* - 0.22.2
|
201
|
+
- 5
|
202
|
+
- 5
|
203
|
+
* - 0.22.1
|
204
|
+
- 5
|
205
|
+
- 5
|
206
|
+
* - 0.22.0
|
207
|
+
- 5
|
208
|
+
- 5
|
209
|
+
* - 0.21.2
|
210
|
+
- 5
|
211
|
+
- 5
|
212
|
+
* - 0.21.1
|
213
|
+
- 5
|
214
|
+
- 5
|
215
|
+
* - 0.21.0
|
216
|
+
- 5
|
217
|
+
- 5
|
218
|
+
* - 0.20.2
|
219
|
+
- 4
|
220
|
+
- 4
|
221
|
+
* - 0.20.1
|
222
|
+
- 4
|
223
|
+
- 4
|
224
|
+
* - 0.20.0
|
225
|
+
- 4
|
226
|
+
- 4
|
227
|
+
* - 0.19.2
|
228
|
+
- 4
|
229
|
+
- 4
|
230
|
+
* - 0.19.1
|
231
|
+
- 3
|
232
|
+
- 3
|
233
|
+
* - 0.19.0
|
234
|
+
- 2
|
235
|
+
- 2
|
236
|
+
* - 0.18.3
|
237
|
+
- 1
|
238
|
+
- 1
|
239
|
+
* - 0.18.2
|
240
|
+
- 1
|
241
|
+
- 1
|
242
|
+
* - 0.18.1
|
243
|
+
- 1
|
244
|
+
- 1
|
245
|
+
* - 0.18.0
|
246
|
+
- 1
|
247
|
+
- 1
|
248
|
+
|
114
249
|
.. _qpy_format:
|
115
250
|
|
116
251
|
**********
|
@@ -156,12 +291,112 @@ compatibility.
|
|
156
291
|
The file header is immediately followed by the circuit payloads.
|
157
292
|
Each individual circuit is composed of the following parts:
|
158
293
|
|
159
|
-
``HEADER | METADATA | REGISTERS | CUSTOM_DEFINITIONS | INSTRUCTIONS``
|
294
|
+
``HEADER | METADATA | REGISTERS | STANDALONE_VARS | CUSTOM_DEFINITIONS | INSTRUCTIONS``
|
295
|
+
|
296
|
+
The ``STANDALONE_VARS`` are new in QPY version 12; before that, there was no data between
|
297
|
+
``REGISTERS`` and ``CUSTOM_DEFINITIONS``.
|
160
298
|
|
161
299
|
There is a circuit payload for each circuit (where the total number is dictated
|
162
300
|
by ``num_circuits`` in the file header). There is no padding between the
|
163
301
|
circuits in the data.
|
164
302
|
|
303
|
+
.. _qpy_version_12:
|
304
|
+
|
305
|
+
Version 12
|
306
|
+
==========
|
307
|
+
|
308
|
+
Version 12 adds support for:
|
309
|
+
|
310
|
+
* circuits containing memory-owning :class:`.expr.Var` variables.
|
311
|
+
|
312
|
+
Changes to HEADER
|
313
|
+
-----------------
|
314
|
+
|
315
|
+
The HEADER struct for an individual circuit has added three ``uint32_t`` counts of the input,
|
316
|
+
captured and locally declared variables in the circuit. The new form looks like:
|
317
|
+
|
318
|
+
.. code-block:: c
|
319
|
+
|
320
|
+
struct {
|
321
|
+
uint16_t name_size;
|
322
|
+
char global_phase_type;
|
323
|
+
uint16_t global_phase_size;
|
324
|
+
uint32_t num_qubits;
|
325
|
+
uint32_t num_clbits;
|
326
|
+
uint64_t metadata_size;
|
327
|
+
uint32_t num_registers;
|
328
|
+
uint64_t num_instructions;
|
329
|
+
uint32_t num_vars;
|
330
|
+
} HEADER_V12;
|
331
|
+
|
332
|
+
The ``HEADER_V12`` struct is followed immediately by the same name, global-phase, metadata
|
333
|
+
and register information as the V2 version of the header. Immediately following the registers is
|
334
|
+
``num_vars`` instances of ``EXPR_VAR_STANDALONE`` that define the variables in this circuit. After
|
335
|
+
that, the data continues with custom definitions and instructions as in prior versions of QPY.
|
336
|
+
|
337
|
+
|
338
|
+
EXPR_VAR_DECLARATION
|
339
|
+
--------------------
|
340
|
+
|
341
|
+
An ``EXPR_VAR_DECLARATION`` defines an :class:`.expr.Var` instance that is standalone; that is, it
|
342
|
+
represents a self-owned memory location rather than wrapping a :class:`.Clbit` or
|
343
|
+
:class:`.ClassicalRegister`. The payload is a C struct:
|
344
|
+
|
345
|
+
.. code-block:: c
|
346
|
+
|
347
|
+
struct {
|
348
|
+
char uuid_bytes[16];
|
349
|
+
char usage;
|
350
|
+
uint16_t name_size;
|
351
|
+
}
|
352
|
+
|
353
|
+
which is immediately followed by an ``EXPR_TYPE`` payload and then ``name_size`` bytes of UTF-8
|
354
|
+
encoding string data containing the name of the variable.
|
355
|
+
|
356
|
+
The ``char`` usage type code takes the following values:
|
357
|
+
|
358
|
+
========= =========================================================================================
|
359
|
+
Type code Meaning
|
360
|
+
========= =========================================================================================
|
361
|
+
``I`` An ``input`` variable to the circuit.
|
362
|
+
|
363
|
+
``C`` A ``capture`` variable to the circuit.
|
364
|
+
|
365
|
+
``L`` A locally declared variable to the circuit.
|
366
|
+
========= =========================================================================================
|
367
|
+
|
368
|
+
|
369
|
+
Changes to EXPR_VAR
|
370
|
+
-------------------
|
371
|
+
|
372
|
+
The EXPR_VAR variable has gained a new type code and payload, in addition to the pre-existing ones:
|
373
|
+
|
374
|
+
=========================== ========= ============================================================
|
375
|
+
Python class Type code Payload
|
376
|
+
=========================== ========= ============================================================
|
377
|
+
:class:`.UUID` ``U`` One ``uint32_t`` index of the variable into the series of
|
378
|
+
``EXPR_VAR_STANDALONE`` variables that were written
|
379
|
+
immediately after the circuit header.
|
380
|
+
=========================== ========= ============================================================
|
381
|
+
|
382
|
+
Notably, this new type-code indexes into pre-defined variables from the circuit header, rather than
|
383
|
+
redefining the variable again in each location it is used.
|
384
|
+
|
385
|
+
|
386
|
+
Changes to EXPRESSION
|
387
|
+
---------------------
|
388
|
+
|
389
|
+
The EXPRESSION type code has a new possible entry, ``i``, corresponding to :class:`.expr.Index`
|
390
|
+
nodes.
|
391
|
+
|
392
|
+
====================== ========= ======================================================= ========
|
393
|
+
Qiskit class Type code Payload Children
|
394
|
+
====================== ========= ======================================================= ========
|
395
|
+
:class:`~.expr.Index` ``i`` No additional payload. The children are the target 2
|
396
|
+
and the index, in that order.
|
397
|
+
====================== ========= ======================================================= ========
|
398
|
+
|
399
|
+
|
165
400
|
.. _qpy_version_11:
|
166
401
|
|
167
402
|
Version 11
|
@@ -208,17 +443,18 @@ operation, and in the third case the field ``power`` represents the power of the
|
|
208
443
|
Version 10
|
209
444
|
==========
|
210
445
|
|
211
|
-
Version 10 adds support for
|
212
|
-
|
213
|
-
|
214
|
-
|
446
|
+
Version 10 adds support for:
|
447
|
+
|
448
|
+
* symengine-native serialization for objects of type :class:`~.ParameterExpression` as well as
|
449
|
+
symbolic expressions in Pulse schedule blocks.
|
450
|
+
* new fields in the :class:`~.TranspileLayout` class added in the Qiskit 0.45.0 release.
|
215
451
|
|
216
452
|
The symbolic_encoding field is added to the file header, and a new encoding type char
|
217
453
|
is introduced, mapped to each symbolic library as follows: ``p`` refers to sympy
|
218
454
|
encoding and ``e`` refers to symengine encoding.
|
219
455
|
|
220
|
-
FILE_HEADER
|
221
|
-
|
456
|
+
Changes to FILE_HEADER
|
457
|
+
----------------------
|
222
458
|
|
223
459
|
The contents of FILE_HEADER after V10 are defined as a C struct as:
|
224
460
|
|
@@ -231,10 +467,10 @@ The contents of FILE_HEADER after V10 are defined as a C struct as:
|
|
231
467
|
uint8_t qiskit_patch_version;
|
232
468
|
uint64_t num_circuits;
|
233
469
|
char symbolic_encoding;
|
234
|
-
}
|
470
|
+
} FILE_HEADER_V10;
|
235
471
|
|
236
|
-
LAYOUT
|
237
|
-
|
472
|
+
Changes to LAYOUT
|
473
|
+
-----------------
|
238
474
|
|
239
475
|
The ``LAYOUT`` struct is updated to have an additional ``input_qubit_count`` field.
|
240
476
|
With version 10 the ``LAYOUT`` struct is now:
|
@@ -1101,7 +1337,6 @@ The contents of HEADER are defined as a C struct are:
|
|
1101
1337
|
uint64_t metadata_size;
|
1102
1338
|
uint32_t num_registers;
|
1103
1339
|
uint64_t num_instructions;
|
1104
|
-
uint64_t num_custom_gates;
|
1105
1340
|
}
|
1106
1341
|
|
1107
1342
|
This is immediately followed by ``name_size`` bytes of utf8 data for the name
|
@@ -1134,7 +1369,6 @@ The contents of HEADER as defined as a C struct are:
|
|
1134
1369
|
uint64_t metadata_size;
|
1135
1370
|
uint32_t num_registers;
|
1136
1371
|
uint64_t num_instructions;
|
1137
|
-
uint64_t num_custom_gates;
|
1138
1372
|
}
|
1139
1373
|
|
1140
1374
|
This is immediately followed by ``name_size`` bytes of utf8 data for the name
|
@@ -1395,7 +1629,7 @@ this matches the internal C representation of Python's complex type. [#f3]_
|
|
1395
1629
|
.. [#f3] https://docs.python.org/3/c-api/complex.html#c.Py_complex
|
1396
1630
|
"""
|
1397
1631
|
|
1398
|
-
from .exceptions import QpyError, QPYLoadingDeprecatedFeatureWarning
|
1632
|
+
from .exceptions import QpyError, UnsupportedFeatureForVersion, QPYLoadingDeprecatedFeatureWarning
|
1399
1633
|
from .interface import dump, load
|
1400
1634
|
|
1401
1635
|
# For backward compatibility. Provide, Runtime, Experiment call these private functions.
|