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.
Files changed (247) hide show
  1. qiskit/VERSION.txt +1 -1
  2. qiskit/__init__.py +27 -16
  3. qiskit/_accelerate.pyd +0 -0
  4. qiskit/_numpy_compat.py +73 -0
  5. qiskit/assembler/disassemble.py +5 -6
  6. qiskit/circuit/__init__.py +1131 -169
  7. qiskit/circuit/_classical_resource_map.py +7 -6
  8. qiskit/circuit/_utils.py +18 -8
  9. qiskit/circuit/annotated_operation.py +21 -0
  10. qiskit/circuit/barrier.py +10 -13
  11. qiskit/circuit/bit.py +0 -1
  12. qiskit/circuit/classical/__init__.py +2 -2
  13. qiskit/circuit/classical/expr/__init__.py +39 -5
  14. qiskit/circuit/classical/expr/constructors.py +84 -1
  15. qiskit/circuit/classical/expr/expr.py +83 -13
  16. qiskit/circuit/classical/expr/visitors.py +83 -0
  17. qiskit/circuit/commutation_checker.py +86 -51
  18. qiskit/circuit/controlflow/_builder_utils.py +9 -1
  19. qiskit/circuit/controlflow/break_loop.py +8 -22
  20. qiskit/circuit/controlflow/builder.py +116 -1
  21. qiskit/circuit/controlflow/continue_loop.py +8 -22
  22. qiskit/circuit/controlflow/control_flow.py +47 -8
  23. qiskit/circuit/controlflow/for_loop.py +8 -23
  24. qiskit/circuit/controlflow/if_else.py +13 -27
  25. qiskit/circuit/controlflow/switch_case.py +14 -21
  26. qiskit/circuit/controlflow/while_loop.py +9 -23
  27. qiskit/circuit/controlledgate.py +2 -2
  28. qiskit/circuit/delay.py +7 -5
  29. qiskit/circuit/gate.py +20 -7
  30. qiskit/circuit/instruction.py +31 -30
  31. qiskit/circuit/instructionset.py +9 -22
  32. qiskit/circuit/library/__init__.py +8 -2
  33. qiskit/circuit/library/arithmetic/integer_comparator.py +2 -2
  34. qiskit/circuit/library/arithmetic/quadratic_form.py +3 -2
  35. qiskit/circuit/library/blueprintcircuit.py +29 -7
  36. qiskit/circuit/library/data_preparation/state_preparation.py +6 -5
  37. qiskit/circuit/library/generalized_gates/diagonal.py +5 -4
  38. qiskit/circuit/library/generalized_gates/isometry.py +51 -254
  39. qiskit/circuit/library/generalized_gates/pauli.py +2 -2
  40. qiskit/circuit/library/generalized_gates/permutation.py +4 -1
  41. qiskit/circuit/library/generalized_gates/rv.py +15 -11
  42. qiskit/circuit/library/generalized_gates/uc.py +2 -98
  43. qiskit/circuit/library/generalized_gates/unitary.py +9 -4
  44. qiskit/circuit/library/hamiltonian_gate.py +11 -5
  45. qiskit/circuit/library/n_local/efficient_su2.py +5 -5
  46. qiskit/circuit/library/n_local/n_local.py +100 -49
  47. qiskit/circuit/library/n_local/two_local.py +3 -59
  48. qiskit/circuit/library/overlap.py +3 -3
  49. qiskit/circuit/library/phase_oracle.py +1 -1
  50. qiskit/circuit/library/quantum_volume.py +39 -38
  51. qiskit/circuit/library/standard_gates/equivalence_library.py +50 -0
  52. qiskit/circuit/library/standard_gates/global_phase.py +4 -2
  53. qiskit/circuit/library/standard_gates/i.py +1 -2
  54. qiskit/circuit/library/standard_gates/iswap.py +1 -2
  55. qiskit/circuit/library/standard_gates/multi_control_rotation_gates.py +11 -5
  56. qiskit/circuit/library/standard_gates/p.py +31 -15
  57. qiskit/circuit/library/standard_gates/r.py +4 -3
  58. qiskit/circuit/library/standard_gates/rx.py +7 -4
  59. qiskit/circuit/library/standard_gates/rxx.py +4 -3
  60. qiskit/circuit/library/standard_gates/ry.py +7 -4
  61. qiskit/circuit/library/standard_gates/ryy.py +4 -3
  62. qiskit/circuit/library/standard_gates/rz.py +7 -4
  63. qiskit/circuit/library/standard_gates/rzx.py +4 -3
  64. qiskit/circuit/library/standard_gates/rzz.py +4 -3
  65. qiskit/circuit/library/standard_gates/s.py +4 -8
  66. qiskit/circuit/library/standard_gates/t.py +2 -4
  67. qiskit/circuit/library/standard_gates/u.py +16 -11
  68. qiskit/circuit/library/standard_gates/u1.py +6 -2
  69. qiskit/circuit/library/standard_gates/u2.py +4 -2
  70. qiskit/circuit/library/standard_gates/u3.py +9 -5
  71. qiskit/circuit/library/standard_gates/x.py +22 -11
  72. qiskit/circuit/library/standard_gates/xx_minus_yy.py +4 -3
  73. qiskit/circuit/library/standard_gates/xx_plus_yy.py +7 -5
  74. qiskit/circuit/library/standard_gates/z.py +1 -2
  75. qiskit/circuit/measure.py +4 -1
  76. qiskit/circuit/operation.py +13 -8
  77. qiskit/circuit/parameter.py +11 -6
  78. qiskit/circuit/quantumcircuit.py +864 -128
  79. qiskit/circuit/quantumcircuitdata.py +2 -2
  80. qiskit/circuit/reset.py +5 -2
  81. qiskit/circuit/store.py +95 -0
  82. qiskit/compiler/assembler.py +22 -22
  83. qiskit/compiler/transpiler.py +63 -112
  84. qiskit/converters/circuit_to_dag.py +7 -0
  85. qiskit/converters/circuit_to_dagdependency_v2.py +47 -0
  86. qiskit/converters/circuit_to_gate.py +2 -0
  87. qiskit/converters/circuit_to_instruction.py +22 -0
  88. qiskit/converters/dag_to_circuit.py +4 -0
  89. qiskit/converters/dag_to_dagdependency_v2.py +44 -0
  90. qiskit/dagcircuit/collect_blocks.py +15 -10
  91. qiskit/dagcircuit/dagcircuit.py +434 -124
  92. qiskit/dagcircuit/dagdependency.py +19 -12
  93. qiskit/dagcircuit/dagdependency_v2.py +641 -0
  94. qiskit/dagcircuit/dagdepnode.py +19 -16
  95. qiskit/dagcircuit/dagnode.py +14 -4
  96. qiskit/primitives/__init__.py +12 -8
  97. qiskit/primitives/backend_estimator.py +3 -5
  98. qiskit/primitives/backend_estimator_v2.py +410 -0
  99. qiskit/primitives/backend_sampler_v2.py +287 -0
  100. qiskit/primitives/base/base_estimator.py +4 -9
  101. qiskit/primitives/base/base_sampler.py +2 -2
  102. qiskit/primitives/containers/__init__.py +5 -4
  103. qiskit/primitives/containers/bit_array.py +292 -2
  104. qiskit/primitives/containers/data_bin.py +123 -50
  105. qiskit/primitives/containers/estimator_pub.py +10 -3
  106. qiskit/primitives/containers/observables_array.py +2 -2
  107. qiskit/primitives/containers/pub_result.py +1 -1
  108. qiskit/primitives/containers/sampler_pub.py +19 -3
  109. qiskit/primitives/containers/sampler_pub_result.py +74 -0
  110. qiskit/primitives/containers/shape.py +1 -1
  111. qiskit/primitives/statevector_estimator.py +4 -4
  112. qiskit/primitives/statevector_sampler.py +7 -12
  113. qiskit/providers/__init__.py +17 -18
  114. qiskit/providers/backend.py +2 -2
  115. qiskit/providers/backend_compat.py +8 -10
  116. qiskit/providers/basic_provider/basic_provider_tools.py +67 -31
  117. qiskit/providers/basic_provider/basic_simulator.py +81 -21
  118. qiskit/providers/fake_provider/fake_1q.py +1 -1
  119. qiskit/providers/fake_provider/fake_backend.py +3 -408
  120. qiskit/providers/fake_provider/generic_backend_v2.py +26 -14
  121. qiskit/providers/provider.py +16 -0
  122. qiskit/pulse/builder.py +4 -1
  123. qiskit/pulse/parameter_manager.py +60 -4
  124. qiskit/pulse/schedule.py +29 -13
  125. qiskit/pulse/utils.py +61 -20
  126. qiskit/qasm2/__init__.py +1 -5
  127. qiskit/qasm2/parse.py +1 -4
  128. qiskit/qasm3/__init__.py +42 -5
  129. qiskit/qasm3/ast.py +19 -0
  130. qiskit/qasm3/exporter.py +178 -106
  131. qiskit/qasm3/printer.py +27 -5
  132. qiskit/qpy/__init__.py +247 -13
  133. qiskit/qpy/binary_io/circuits.py +216 -47
  134. qiskit/qpy/binary_io/schedules.py +42 -36
  135. qiskit/qpy/binary_io/value.py +201 -22
  136. qiskit/qpy/common.py +1 -1
  137. qiskit/qpy/exceptions.py +20 -0
  138. qiskit/qpy/formats.py +29 -0
  139. qiskit/qpy/type_keys.py +21 -0
  140. qiskit/quantum_info/analysis/distance.py +3 -3
  141. qiskit/quantum_info/analysis/make_observable.py +2 -1
  142. qiskit/quantum_info/analysis/z2_symmetries.py +2 -1
  143. qiskit/quantum_info/operators/channel/chi.py +9 -8
  144. qiskit/quantum_info/operators/channel/choi.py +10 -9
  145. qiskit/quantum_info/operators/channel/kraus.py +2 -1
  146. qiskit/quantum_info/operators/channel/ptm.py +10 -9
  147. qiskit/quantum_info/operators/channel/quantum_channel.py +2 -1
  148. qiskit/quantum_info/operators/channel/stinespring.py +2 -1
  149. qiskit/quantum_info/operators/channel/superop.py +12 -11
  150. qiskit/quantum_info/operators/channel/transformations.py +12 -11
  151. qiskit/quantum_info/operators/dihedral/dihedral.py +5 -4
  152. qiskit/quantum_info/operators/operator.py +43 -30
  153. qiskit/quantum_info/operators/scalar_op.py +10 -9
  154. qiskit/quantum_info/operators/symplectic/base_pauli.py +70 -59
  155. qiskit/quantum_info/operators/symplectic/clifford.py +36 -9
  156. qiskit/quantum_info/operators/symplectic/pauli.py +48 -4
  157. qiskit/quantum_info/operators/symplectic/pauli_list.py +36 -14
  158. qiskit/quantum_info/operators/symplectic/random.py +3 -2
  159. qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py +54 -33
  160. qiskit/quantum_info/states/densitymatrix.py +13 -13
  161. qiskit/quantum_info/states/stabilizerstate.py +3 -3
  162. qiskit/quantum_info/states/statevector.py +14 -13
  163. qiskit/quantum_info/states/utils.py +5 -3
  164. qiskit/result/mitigation/correlated_readout_mitigator.py +3 -2
  165. qiskit/result/mitigation/local_readout_mitigator.py +2 -1
  166. qiskit/result/mitigation/utils.py +3 -2
  167. qiskit/synthesis/__init__.py +2 -0
  168. qiskit/synthesis/discrete_basis/commutator_decompose.py +2 -2
  169. qiskit/synthesis/evolution/lie_trotter.py +7 -14
  170. qiskit/synthesis/evolution/qdrift.py +3 -4
  171. qiskit/synthesis/linear/cnot_synth.py +1 -3
  172. qiskit/synthesis/linear/linear_circuits_utils.py +1 -1
  173. qiskit/synthesis/linear_phase/cz_depth_lnn.py +4 -18
  174. qiskit/synthesis/permutation/__init__.py +1 -0
  175. qiskit/synthesis/permutation/permutation_reverse_lnn.py +90 -0
  176. qiskit/synthesis/qft/qft_decompose_lnn.py +2 -6
  177. qiskit/synthesis/two_qubit/two_qubit_decompose.py +165 -954
  178. qiskit/synthesis/two_qubit/xx_decompose/circuits.py +13 -12
  179. qiskit/synthesis/two_qubit/xx_decompose/decomposer.py +7 -1
  180. qiskit/synthesis/unitary/aqc/__init__.py +1 -1
  181. qiskit/synthesis/unitary/aqc/cnot_structures.py +2 -1
  182. qiskit/synthesis/unitary/aqc/fast_gradient/fast_gradient.py +2 -1
  183. qiskit/synthesis/unitary/qsd.py +3 -2
  184. qiskit/transpiler/__init__.py +7 -3
  185. qiskit/transpiler/layout.py +140 -61
  186. qiskit/transpiler/passes/__init__.py +6 -0
  187. qiskit/transpiler/passes/basis/basis_translator.py +7 -2
  188. qiskit/transpiler/passes/basis/unroll_3q_or_more.py +1 -1
  189. qiskit/transpiler/passes/basis/unroll_custom_definitions.py +1 -1
  190. qiskit/transpiler/passes/calibration/rzx_builder.py +2 -1
  191. qiskit/transpiler/passes/layout/apply_layout.py +8 -3
  192. qiskit/transpiler/passes/layout/sabre_layout.py +15 -3
  193. qiskit/transpiler/passes/layout/set_layout.py +1 -1
  194. qiskit/transpiler/passes/optimization/__init__.py +2 -0
  195. qiskit/transpiler/passes/optimization/commutation_analysis.py +2 -2
  196. qiskit/transpiler/passes/optimization/commutative_cancellation.py +1 -1
  197. qiskit/transpiler/passes/optimization/consolidate_blocks.py +1 -1
  198. qiskit/transpiler/passes/optimization/cx_cancellation.py +10 -0
  199. qiskit/transpiler/passes/optimization/elide_permutations.py +114 -0
  200. qiskit/transpiler/passes/optimization/optimize_1q_decomposition.py +9 -3
  201. qiskit/transpiler/passes/optimization/optimize_annotated.py +248 -12
  202. qiskit/transpiler/passes/optimization/remove_final_reset.py +37 -0
  203. qiskit/transpiler/passes/optimization/template_matching/forward_match.py +1 -3
  204. qiskit/transpiler/passes/routing/__init__.py +1 -0
  205. qiskit/transpiler/passes/routing/basic_swap.py +13 -2
  206. qiskit/transpiler/passes/routing/lookahead_swap.py +7 -1
  207. qiskit/transpiler/passes/routing/sabre_swap.py +10 -6
  208. qiskit/transpiler/passes/routing/star_prerouting.py +417 -0
  209. qiskit/transpiler/passes/routing/stochastic_swap.py +24 -8
  210. qiskit/transpiler/passes/scheduling/__init__.py +1 -1
  211. qiskit/transpiler/passes/scheduling/alap.py +1 -2
  212. qiskit/transpiler/passes/scheduling/alignments/align_measures.py +1 -2
  213. qiskit/transpiler/passes/scheduling/alignments/check_durations.py +9 -6
  214. qiskit/transpiler/passes/scheduling/alignments/pulse_gate_validation.py +8 -0
  215. qiskit/transpiler/passes/scheduling/alignments/reschedule.py +13 -4
  216. qiskit/transpiler/passes/scheduling/asap.py +1 -2
  217. qiskit/transpiler/passes/scheduling/base_scheduler.py +21 -2
  218. qiskit/transpiler/passes/scheduling/dynamical_decoupling.py +26 -4
  219. qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py +24 -2
  220. qiskit/transpiler/passes/scheduling/time_unit_conversion.py +28 -4
  221. qiskit/transpiler/passes/synthesis/aqc_plugin.py +2 -2
  222. qiskit/transpiler/passes/synthesis/high_level_synthesis.py +120 -13
  223. qiskit/transpiler/passes/synthesis/unitary_synthesis.py +162 -55
  224. qiskit/transpiler/passes/utils/gates_basis.py +3 -3
  225. qiskit/transpiler/passmanager.py +44 -1
  226. qiskit/transpiler/preset_passmanagers/__init__.py +3 -3
  227. qiskit/transpiler/preset_passmanagers/builtin_plugins.py +34 -16
  228. qiskit/transpiler/preset_passmanagers/common.py +4 -6
  229. qiskit/transpiler/preset_passmanagers/plugin.py +9 -1
  230. qiskit/utils/optionals.py +6 -2
  231. qiskit/visualization/array.py +1 -1
  232. qiskit/visualization/bloch.py +2 -3
  233. qiskit/visualization/circuit/matplotlib.py +44 -14
  234. qiskit/visualization/circuit/text.py +38 -18
  235. qiskit/visualization/counts_visualization.py +3 -6
  236. qiskit/visualization/dag_visualization.py +6 -7
  237. qiskit/visualization/pulse_v2/interface.py +8 -3
  238. qiskit/visualization/state_visualization.py +3 -2
  239. qiskit/visualization/timeline/interface.py +18 -8
  240. {qiskit-1.0.2.dist-info → qiskit-1.1.0rc1.dist-info}/METADATA +12 -8
  241. {qiskit-1.0.2.dist-info → qiskit-1.1.0rc1.dist-info}/RECORD +245 -235
  242. {qiskit-1.0.2.dist-info → qiskit-1.1.0rc1.dist-info}/WHEEL +1 -1
  243. qiskit/_qasm2.pyd +0 -0
  244. qiskit/_qasm3.pyd +0 -0
  245. {qiskit-1.0.2.dist-info → qiskit-1.1.0rc1.dist-info}/LICENSE.txt +0 -0
  246. {qiskit-1.0.2.dist-info → qiskit-1.1.0rc1.dist-info}/entry_points.txt +0 -0
  247. {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 symengine-native serialization for objects of type
212
- :class:`~.ParameterExpression` as well as symbolic expressions in Pulse schedule blocks. Version
213
- 10 also adds support for new fields in the :class:`~.TranspileLayout` class added in the Qiskit
214
- 0.45.0 release.
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.