qiskit 1.3.0__cp39-abi3-win32.whl → 1.3.0b1__cp39-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 (361) hide show
  1. qiskit/VERSION.txt +1 -1
  2. qiskit/__init__.py +1 -20
  3. qiskit/_accelerate.pyd +0 -0
  4. qiskit/assembler/assemble_schedules.py +0 -2
  5. qiskit/circuit/__init__.py +1 -44
  6. qiskit/circuit/_standard_gates_commutations.py +0 -585
  7. qiskit/circuit/barrier.py +0 -2
  8. qiskit/circuit/controlflow/builder.py +3 -3
  9. qiskit/circuit/controlflow/if_else.py +5 -13
  10. qiskit/circuit/controlflow/while_loop.py +2 -10
  11. qiskit/circuit/delay.py +3 -20
  12. qiskit/circuit/equivalence.py +214 -13
  13. qiskit/circuit/gate.py +1 -3
  14. qiskit/circuit/instruction.py +11 -32
  15. qiskit/circuit/instructionset.py +0 -2
  16. qiskit/circuit/library/__init__.py +14 -110
  17. qiskit/circuit/library/arithmetic/__init__.py +2 -9
  18. qiskit/circuit/library/arithmetic/adders/__init__.py +0 -1
  19. qiskit/circuit/library/arithmetic/adders/adder.py +2 -154
  20. qiskit/circuit/library/arithmetic/adders/cdkm_ripple_carry_adder.py +56 -20
  21. qiskit/circuit/library/arithmetic/adders/draper_qft_adder.py +1 -14
  22. qiskit/circuit/library/arithmetic/adders/vbe_ripple_carry_adder.py +91 -21
  23. qiskit/circuit/library/arithmetic/linear_pauli_rotations.py +1 -1
  24. qiskit/circuit/library/arithmetic/multipliers/__init__.py +0 -1
  25. qiskit/circuit/library/arithmetic/multipliers/hrs_cumulative_multiplier.py +1 -8
  26. qiskit/circuit/library/arithmetic/multipliers/multiplier.py +3 -94
  27. qiskit/circuit/library/arithmetic/multipliers/rg_qft_multiplier.py +1 -8
  28. qiskit/circuit/library/arithmetic/weighted_adder.py +1 -1
  29. qiskit/circuit/library/basis_change/qft.py +38 -20
  30. qiskit/circuit/library/blueprintcircuit.py +0 -64
  31. qiskit/circuit/library/boolean_logic/__init__.py +4 -4
  32. qiskit/circuit/library/boolean_logic/inner_product.py +4 -81
  33. qiskit/circuit/library/boolean_logic/quantum_and.py +4 -107
  34. qiskit/circuit/library/boolean_logic/quantum_or.py +3 -107
  35. qiskit/circuit/library/boolean_logic/quantum_xor.py +3 -97
  36. qiskit/circuit/library/data_preparation/__init__.py +3 -6
  37. qiskit/circuit/library/data_preparation/pauli_feature_map.py +29 -342
  38. qiskit/circuit/library/data_preparation/{_z_feature_map.py → z_feature_map.py} +34 -45
  39. qiskit/circuit/library/data_preparation/zz_feature_map.py +118 -0
  40. qiskit/circuit/library/fourier_checking.py +11 -72
  41. qiskit/circuit/library/generalized_gates/__init__.py +1 -1
  42. qiskit/circuit/library/generalized_gates/diagonal.py +51 -45
  43. qiskit/circuit/library/generalized_gates/gms.py +14 -67
  44. qiskit/circuit/library/generalized_gates/gr.py +4 -4
  45. qiskit/circuit/library/generalized_gates/isometry.py +2 -2
  46. qiskit/circuit/library/generalized_gates/linear_function.py +6 -12
  47. qiskit/circuit/library/generalized_gates/mcmt.py +107 -167
  48. qiskit/circuit/library/generalized_gates/permutation.py +6 -8
  49. qiskit/circuit/library/generalized_gates/rv.py +9 -8
  50. qiskit/circuit/library/graph_state.py +10 -93
  51. qiskit/circuit/library/grover_operator.py +2 -270
  52. qiskit/circuit/library/hidden_linear_function.py +20 -83
  53. qiskit/circuit/library/iqp.py +20 -99
  54. qiskit/circuit/library/n_local/__init__.py +7 -19
  55. qiskit/circuit/library/n_local/efficient_su2.py +5 -118
  56. qiskit/circuit/library/n_local/evolved_operator_ansatz.py +0 -259
  57. qiskit/circuit/library/n_local/excitation_preserving.py +6 -130
  58. qiskit/circuit/library/n_local/n_local.py +5 -406
  59. qiskit/circuit/library/n_local/pauli_two_design.py +4 -106
  60. qiskit/circuit/library/n_local/qaoa_ansatz.py +1 -80
  61. qiskit/circuit/library/n_local/real_amplitudes.py +7 -127
  62. qiskit/circuit/library/n_local/two_local.py +7 -14
  63. qiskit/circuit/library/overlap.py +26 -91
  64. qiskit/circuit/library/pauli_evolution.py +15 -17
  65. qiskit/circuit/library/phase_estimation.py +4 -80
  66. qiskit/circuit/library/quantum_volume.py +20 -72
  67. qiskit/circuit/library/standard_gates/__init__.py +1 -20
  68. qiskit/circuit/library/standard_gates/dcx.py +1 -2
  69. qiskit/circuit/library/standard_gates/ecr.py +2 -2
  70. qiskit/circuit/library/standard_gates/h.py +3 -4
  71. qiskit/circuit/library/standard_gates/i.py +1 -2
  72. qiskit/circuit/library/standard_gates/iswap.py +2 -2
  73. qiskit/circuit/library/standard_gates/p.py +12 -20
  74. qiskit/circuit/library/standard_gates/r.py +1 -1
  75. qiskit/circuit/library/standard_gates/rx.py +3 -4
  76. qiskit/circuit/library/standard_gates/rxx.py +2 -2
  77. qiskit/circuit/library/standard_gates/ry.py +3 -4
  78. qiskit/circuit/library/standard_gates/ryy.py +2 -2
  79. qiskit/circuit/library/standard_gates/rz.py +12 -13
  80. qiskit/circuit/library/standard_gates/rzx.py +6 -6
  81. qiskit/circuit/library/standard_gates/rzz.py +1 -1
  82. qiskit/circuit/library/standard_gates/s.py +4 -4
  83. qiskit/circuit/library/standard_gates/swap.py +3 -3
  84. qiskit/circuit/library/standard_gates/sx.py +3 -4
  85. qiskit/circuit/library/standard_gates/t.py +2 -2
  86. qiskit/circuit/library/standard_gates/u.py +3 -11
  87. qiskit/circuit/library/standard_gates/u1.py +15 -65
  88. qiskit/circuit/library/standard_gates/u2.py +1 -4
  89. qiskit/circuit/library/standard_gates/u3.py +3 -31
  90. qiskit/circuit/library/standard_gates/x.py +5 -7
  91. qiskit/circuit/library/standard_gates/xx_minus_yy.py +2 -2
  92. qiskit/circuit/library/standard_gates/xx_plus_yy.py +2 -2
  93. qiskit/circuit/library/standard_gates/y.py +3 -4
  94. qiskit/circuit/library/standard_gates/z.py +3 -3
  95. qiskit/circuit/library/templates/clifford/clifford_2_1.py +8 -9
  96. qiskit/circuit/library/templates/clifford/clifford_2_2.py +9 -10
  97. qiskit/circuit/library/templates/clifford/clifford_2_3.py +7 -9
  98. qiskit/circuit/library/templates/clifford/clifford_2_4.py +8 -9
  99. qiskit/circuit/library/templates/clifford/clifford_3_1.py +8 -9
  100. qiskit/circuit/library/templates/clifford/clifford_4_1.py +9 -10
  101. qiskit/circuit/library/templates/clifford/clifford_4_2.py +9 -10
  102. qiskit/circuit/library/templates/clifford/clifford_4_3.py +9 -10
  103. qiskit/circuit/library/templates/clifford/clifford_4_4.py +9 -10
  104. qiskit/circuit/library/templates/clifford/clifford_5_1.py +9 -10
  105. qiskit/circuit/library/templates/clifford/clifford_6_1.py +9 -10
  106. qiskit/circuit/library/templates/clifford/clifford_6_2.py +9 -10
  107. qiskit/circuit/library/templates/clifford/clifford_6_3.py +9 -10
  108. qiskit/circuit/library/templates/clifford/clifford_6_4.py +8 -9
  109. qiskit/circuit/library/templates/clifford/clifford_6_5.py +9 -10
  110. qiskit/circuit/library/templates/clifford/clifford_8_1.py +9 -10
  111. qiskit/circuit/library/templates/clifford/clifford_8_2.py +9 -10
  112. qiskit/circuit/library/templates/clifford/clifford_8_3.py +9 -10
  113. qiskit/circuit/library/templates/nct/template_nct_2a_1.py +7 -9
  114. qiskit/circuit/library/templates/nct/template_nct_2a_2.py +8 -10
  115. qiskit/circuit/library/templates/nct/template_nct_2a_3.py +10 -12
  116. qiskit/circuit/library/templates/nct/template_nct_4a_1.py +14 -16
  117. qiskit/circuit/library/templates/nct/template_nct_4a_2.py +12 -14
  118. qiskit/circuit/library/templates/nct/template_nct_4a_3.py +10 -12
  119. qiskit/circuit/library/templates/nct/template_nct_4b_1.py +12 -14
  120. qiskit/circuit/library/templates/nct/template_nct_4b_2.py +10 -12
  121. qiskit/circuit/library/templates/nct/template_nct_5a_1.py +10 -12
  122. qiskit/circuit/library/templates/nct/template_nct_5a_2.py +10 -12
  123. qiskit/circuit/library/templates/nct/template_nct_5a_3.py +10 -12
  124. qiskit/circuit/library/templates/nct/template_nct_5a_4.py +9 -11
  125. qiskit/circuit/library/templates/nct/template_nct_6a_1.py +9 -11
  126. qiskit/circuit/library/templates/nct/template_nct_6a_2.py +10 -12
  127. qiskit/circuit/library/templates/nct/template_nct_6a_3.py +10 -12
  128. qiskit/circuit/library/templates/nct/template_nct_6a_4.py +10 -12
  129. qiskit/circuit/library/templates/nct/template_nct_6b_1.py +10 -12
  130. qiskit/circuit/library/templates/nct/template_nct_6b_2.py +10 -12
  131. qiskit/circuit/library/templates/nct/template_nct_6c_1.py +10 -12
  132. qiskit/circuit/library/templates/nct/template_nct_7a_1.py +11 -13
  133. qiskit/circuit/library/templates/nct/template_nct_7b_1.py +11 -13
  134. qiskit/circuit/library/templates/nct/template_nct_7c_1.py +11 -13
  135. qiskit/circuit/library/templates/nct/template_nct_7d_1.py +11 -13
  136. qiskit/circuit/library/templates/nct/template_nct_7e_1.py +11 -13
  137. qiskit/circuit/library/templates/nct/template_nct_9a_1.py +11 -13
  138. qiskit/circuit/library/templates/nct/template_nct_9c_1.py +9 -11
  139. qiskit/circuit/library/templates/nct/template_nct_9c_10.py +10 -12
  140. qiskit/circuit/library/templates/nct/template_nct_9c_11.py +10 -12
  141. qiskit/circuit/library/templates/nct/template_nct_9c_12.py +10 -12
  142. qiskit/circuit/library/templates/nct/template_nct_9c_2.py +10 -12
  143. qiskit/circuit/library/templates/nct/template_nct_9c_3.py +10 -12
  144. qiskit/circuit/library/templates/nct/template_nct_9c_4.py +10 -12
  145. qiskit/circuit/library/templates/nct/template_nct_9c_5.py +10 -12
  146. qiskit/circuit/library/templates/nct/template_nct_9c_6.py +10 -12
  147. qiskit/circuit/library/templates/nct/template_nct_9c_7.py +10 -12
  148. qiskit/circuit/library/templates/nct/template_nct_9c_8.py +10 -12
  149. qiskit/circuit/library/templates/nct/template_nct_9c_9.py +10 -12
  150. qiskit/circuit/library/templates/nct/template_nct_9d_1.py +9 -11
  151. qiskit/circuit/library/templates/nct/template_nct_9d_10.py +10 -12
  152. qiskit/circuit/library/templates/nct/template_nct_9d_2.py +10 -12
  153. qiskit/circuit/library/templates/nct/template_nct_9d_3.py +10 -12
  154. qiskit/circuit/library/templates/nct/template_nct_9d_4.py +10 -12
  155. qiskit/circuit/library/templates/nct/template_nct_9d_5.py +10 -12
  156. qiskit/circuit/library/templates/nct/template_nct_9d_6.py +10 -12
  157. qiskit/circuit/library/templates/nct/template_nct_9d_7.py +10 -12
  158. qiskit/circuit/library/templates/nct/template_nct_9d_8.py +10 -12
  159. qiskit/circuit/library/templates/nct/template_nct_9d_9.py +10 -12
  160. qiskit/circuit/library/templates/rzx/rzx_cy.py +10 -11
  161. qiskit/circuit/library/templates/rzx/rzx_xz.py +15 -16
  162. qiskit/circuit/library/templates/rzx/rzx_yz.py +10 -12
  163. qiskit/circuit/library/templates/rzx/rzx_zz1.py +20 -22
  164. qiskit/circuit/library/templates/rzx/rzx_zz2.py +15 -16
  165. qiskit/circuit/library/templates/rzx/rzx_zz3.py +15 -17
  166. qiskit/circuit/parameter.py +0 -4
  167. qiskit/circuit/parameterexpression.py +34 -167
  168. qiskit/circuit/quantumcircuit.py +126 -162
  169. qiskit/circuit/singleton.py +0 -2
  170. qiskit/circuit/store.py +0 -2
  171. qiskit/compiler/assembler.py +4 -17
  172. qiskit/compiler/scheduler.py +0 -2
  173. qiskit/compiler/sequencer.py +0 -2
  174. qiskit/compiler/transpiler.py +26 -81
  175. qiskit/converters/circuit_to_dag.py +2 -2
  176. qiskit/converters/circuit_to_dagdependency.py +1 -1
  177. qiskit/converters/circuit_to_dagdependency_v2.py +1 -1
  178. qiskit/converters/circuit_to_instruction.py +1 -1
  179. qiskit/converters/dag_to_circuit.py +5 -7
  180. qiskit/converters/dag_to_dagdependency.py +1 -1
  181. qiskit/converters/dag_to_dagdependency_v2.py +1 -1
  182. qiskit/converters/dagdependency_to_circuit.py +1 -5
  183. qiskit/converters/dagdependency_to_dag.py +1 -6
  184. qiskit/dagcircuit/collect_blocks.py +3 -3
  185. qiskit/dagcircuit/dagdependency.py +5 -18
  186. qiskit/dagcircuit/dagdependency_v2.py +1 -1
  187. qiskit/dagcircuit/dagnode.py +2 -2
  188. qiskit/passmanager/__init__.py +2 -2
  189. qiskit/primitives/backend_estimator.py +2 -5
  190. qiskit/primitives/backend_sampler_v2.py +18 -61
  191. qiskit/primitives/base/base_estimator.py +2 -2
  192. qiskit/primitives/containers/data_bin.py +1 -9
  193. qiskit/primitives/statevector_sampler.py +1 -1
  194. qiskit/primitives/utils.py +1 -1
  195. qiskit/providers/__init__.py +3 -3
  196. qiskit/providers/backend.py +1 -12
  197. qiskit/providers/backend_compat.py +3 -23
  198. qiskit/providers/basic_provider/basic_simulator.py +2 -12
  199. qiskit/providers/fake_provider/fake_pulse_backend.py +1 -6
  200. qiskit/providers/fake_provider/generic_backend_v2.py +30 -46
  201. qiskit/providers/models/pulsedefaults.py +0 -2
  202. qiskit/pulse/builder.py +18 -59
  203. qiskit/pulse/calibration_entries.py +1 -4
  204. qiskit/pulse/channels.py +0 -2
  205. qiskit/pulse/exceptions.py +0 -2
  206. qiskit/pulse/instruction_schedule_map.py +6 -21
  207. qiskit/pulse/instructions/acquire.py +0 -2
  208. qiskit/pulse/instructions/delay.py +0 -2
  209. qiskit/pulse/instructions/directives.py +0 -8
  210. qiskit/pulse/instructions/frequency.py +0 -3
  211. qiskit/pulse/instructions/instruction.py +0 -2
  212. qiskit/pulse/instructions/phase.py +0 -3
  213. qiskit/pulse/instructions/play.py +0 -2
  214. qiskit/pulse/instructions/reference.py +0 -2
  215. qiskit/pulse/instructions/snapshot.py +0 -2
  216. qiskit/pulse/library/pulse.py +0 -2
  217. qiskit/pulse/library/symbolic_pulses.py +0 -28
  218. qiskit/pulse/library/waveform.py +0 -2
  219. qiskit/pulse/macros.py +1 -1
  220. qiskit/pulse/schedule.py +13 -12
  221. qiskit/pulse/transforms/alignments.py +3 -5
  222. qiskit/pulse/transforms/dag.py +0 -7
  223. qiskit/qasm2/export.py +3 -5
  224. qiskit/qasm2/parse.py +2 -46
  225. qiskit/qasm3/__init__.py +0 -1
  226. qiskit/qasm3/ast.py +15 -123
  227. qiskit/qasm3/exporter.py +77 -103
  228. qiskit/qobj/converters/pulse_instruction.py +4 -6
  229. qiskit/qpy/__init__.py +0 -181
  230. qiskit/qpy/binary_io/circuits.py +5 -20
  231. qiskit/qpy/binary_io/schedules.py +4 -3
  232. qiskit/qpy/binary_io/value.py +13 -310
  233. qiskit/qpy/common.py +2 -46
  234. qiskit/qpy/formats.py +0 -7
  235. qiskit/qpy/interface.py +4 -40
  236. qiskit/quantum_info/__init__.py +0 -4
  237. qiskit/quantum_info/operators/channel/transformations.py +21 -28
  238. qiskit/quantum_info/operators/dihedral/dihedral.py +1 -1
  239. qiskit/quantum_info/operators/operator.py +8 -54
  240. qiskit/quantum_info/operators/symplectic/base_pauli.py +19 -11
  241. qiskit/quantum_info/operators/symplectic/clifford.py +1 -1
  242. qiskit/quantum_info/operators/symplectic/clifford_circuits.py +1 -1
  243. qiskit/quantum_info/operators/symplectic/pauli.py +0 -2
  244. qiskit/quantum_info/operators/symplectic/pauli_list.py +4 -4
  245. qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py +2 -23
  246. qiskit/quantum_info/states/densitymatrix.py +5 -5
  247. qiskit/quantum_info/states/stabilizerstate.py +1 -1
  248. qiskit/quantum_info/states/statevector.py +6 -6
  249. qiskit/result/mitigation/base_readout_mitigator.py +1 -1
  250. qiskit/result/mitigation/correlated_readout_mitigator.py +1 -9
  251. qiskit/result/mitigation/local_readout_mitigator.py +1 -9
  252. qiskit/result/mitigation/utils.py +0 -57
  253. qiskit/scheduler/config.py +0 -2
  254. qiskit/scheduler/methods/basic.py +0 -3
  255. qiskit/scheduler/schedule_circuit.py +0 -2
  256. qiskit/scheduler/sequence.py +0 -2
  257. qiskit/synthesis/__init__.py +0 -25
  258. qiskit/synthesis/clifford/clifford_decompose_bm.py +2 -1
  259. qiskit/synthesis/clifford/clifford_decompose_greedy.py +2 -3
  260. qiskit/synthesis/clifford/clifford_decompose_layers.py +1 -2
  261. qiskit/synthesis/evolution/__init__.py +0 -1
  262. qiskit/synthesis/evolution/lie_trotter.py +42 -16
  263. qiskit/synthesis/evolution/product_formula.py +238 -165
  264. qiskit/synthesis/evolution/qdrift.py +29 -36
  265. qiskit/synthesis/evolution/suzuki_trotter.py +27 -87
  266. qiskit/synthesis/multi_controlled/__init__.py +0 -1
  267. qiskit/synthesis/qft/qft_decompose_full.py +1 -19
  268. qiskit/synthesis/qft/qft_decompose_lnn.py +1 -2
  269. qiskit/synthesis/stabilizer/stabilizer_decompose.py +1 -2
  270. qiskit/synthesis/two_qubit/two_qubit_decompose.py +63 -4
  271. qiskit/synthesis/two_qubit/weyl.py +97 -0
  272. qiskit/synthesis/unitary/qsd.py +5 -5
  273. qiskit/transpiler/__init__.py +14 -21
  274. qiskit/transpiler/basepasses.py +1 -1
  275. qiskit/transpiler/passes/__init__.py +0 -2
  276. qiskit/transpiler/passes/basis/basis_translator.py +565 -9
  277. qiskit/transpiler/passes/basis/decompose.py +12 -45
  278. qiskit/transpiler/passes/basis/unroll_3q_or_more.py +1 -1
  279. qiskit/transpiler/passes/basis/unroll_custom_definitions.py +1 -1
  280. qiskit/transpiler/passes/calibration/pulse_gate.py +2 -4
  281. qiskit/transpiler/passes/calibration/rx_builder.py +7 -11
  282. qiskit/transpiler/passes/calibration/rzx_builder.py +30 -46
  283. qiskit/transpiler/passes/layout/disjoint_utils.py +13 -15
  284. qiskit/transpiler/passes/layout/sabre_layout.py +2 -7
  285. qiskit/transpiler/passes/layout/sabre_pre_layout.py +0 -5
  286. qiskit/transpiler/passes/optimization/__init__.py +0 -1
  287. qiskit/transpiler/passes/optimization/collect_cliffords.py +3 -19
  288. qiskit/transpiler/passes/optimization/collect_linear_functions.py +1 -1
  289. qiskit/transpiler/passes/optimization/collect_multiqubit_blocks.py +2 -2
  290. qiskit/transpiler/passes/optimization/commutative_inverse_cancellation.py +1 -1
  291. qiskit/transpiler/passes/optimization/consolidate_blocks.py +131 -48
  292. qiskit/transpiler/passes/optimization/echo_rzx_weyl_decomposition.py +2 -4
  293. qiskit/transpiler/passes/optimization/elide_permutations.py +32 -9
  294. qiskit/transpiler/passes/optimization/inverse_cancellation.py +0 -2
  295. qiskit/transpiler/passes/optimization/optimize_1q_decomposition.py +11 -5
  296. qiskit/transpiler/passes/optimization/optimize_1q_gates.py +1 -1
  297. qiskit/transpiler/passes/optimization/optimize_swap_before_measure.py +1 -1
  298. qiskit/transpiler/passes/optimization/template_matching/backward_match.py +5 -5
  299. qiskit/transpiler/passes/optimization/template_matching/forward_match.py +4 -4
  300. qiskit/transpiler/passes/optimization/template_matching/template_substitution.py +2 -2
  301. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/commuting_2q_gate_router.py +1 -1
  302. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/swap_strategy.py +1 -1
  303. qiskit/transpiler/passes/routing/sabre_swap.py +3 -7
  304. qiskit/transpiler/passes/routing/star_prerouting.py +2 -2
  305. qiskit/transpiler/passes/scheduling/alap.py +1 -1
  306. qiskit/transpiler/passes/scheduling/alignments/align_measures.py +2 -2
  307. qiskit/transpiler/passes/scheduling/alignments/check_durations.py +1 -1
  308. qiskit/transpiler/passes/scheduling/alignments/pulse_gate_validation.py +0 -2
  309. qiskit/transpiler/passes/scheduling/alignments/reschedule.py +2 -2
  310. qiskit/transpiler/passes/scheduling/asap.py +1 -1
  311. qiskit/transpiler/passes/scheduling/base_scheduler.py +12 -14
  312. qiskit/transpiler/passes/scheduling/dynamical_decoupling.py +4 -9
  313. qiskit/transpiler/passes/scheduling/padding/base_padding.py +1 -1
  314. qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py +5 -16
  315. qiskit/transpiler/passes/scheduling/padding/pad_delay.py +1 -4
  316. qiskit/transpiler/passes/scheduling/scheduling/base_scheduler.py +2 -6
  317. qiskit/transpiler/passes/scheduling/time_unit_conversion.py +4 -9
  318. qiskit/transpiler/passes/synthesis/high_level_synthesis.py +99 -262
  319. qiskit/transpiler/passes/synthesis/hls_plugins.py +7 -638
  320. qiskit/transpiler/passes/synthesis/qubit_tracker.py +132 -0
  321. qiskit/transpiler/passes/synthesis/solovay_kitaev_synthesis.py +3 -3
  322. qiskit/transpiler/passes/synthesis/unitary_synthesis.py +34 -55
  323. qiskit/transpiler/passes/utils/barrier_before_final_measurements.py +56 -2
  324. qiskit/transpiler/passes/utils/convert_conditions_to_if_ops.py +0 -5
  325. qiskit/transpiler/passes/utils/gate_direction.py +275 -12
  326. qiskit/transpiler/passes/utils/gates_basis.py +30 -7
  327. qiskit/transpiler/passes/utils/merge_adjacent_barriers.py +1 -2
  328. qiskit/transpiler/passmanager_config.py +4 -22
  329. qiskit/transpiler/preset_passmanagers/builtin_plugins.py +14 -40
  330. qiskit/transpiler/preset_passmanagers/common.py +3 -5
  331. qiskit/transpiler/preset_passmanagers/generate_preset_pass_manager.py +42 -125
  332. qiskit/transpiler/preset_passmanagers/plugin.py +1 -1
  333. qiskit/transpiler/target.py +16 -74
  334. qiskit/visualization/circuit/_utils.py +2 -2
  335. qiskit/visualization/circuit/circuit_visualization.py +2 -3
  336. qiskit/visualization/circuit/matplotlib.py +1 -1
  337. qiskit/visualization/dag_visualization.py +1 -1
  338. qiskit/visualization/pass_manager_visualization.py +14 -3
  339. qiskit/visualization/pulse_v2/interface.py +1 -3
  340. qiskit/visualization/timeline/core.py +2 -25
  341. qiskit/visualization/timeline/interface.py +0 -12
  342. {qiskit-1.3.0.dist-info → qiskit-1.3.0b1.dist-info}/METADATA +19 -20
  343. {qiskit-1.3.0.dist-info → qiskit-1.3.0b1.dist-info}/RECORD +347 -358
  344. {qiskit-1.3.0.dist-info → qiskit-1.3.0b1.dist-info}/WHEEL +1 -1
  345. {qiskit-1.3.0.dist-info → qiskit-1.3.0b1.dist-info}/entry_points.txt +0 -19
  346. qiskit/circuit/library/data_preparation/_zz_feature_map.py +0 -150
  347. qiskit/circuit/twirling.py +0 -145
  348. qiskit/synthesis/arithmetic/__init__.py +0 -16
  349. qiskit/synthesis/arithmetic/adders/__init__.py +0 -17
  350. qiskit/synthesis/arithmetic/adders/cdkm_ripple_carry_adder.py +0 -154
  351. qiskit/synthesis/arithmetic/adders/draper_qft_adder.py +0 -103
  352. qiskit/synthesis/arithmetic/adders/vbe_ripple_carry_adder.py +0 -161
  353. qiskit/synthesis/arithmetic/multipliers/__init__.py +0 -16
  354. qiskit/synthesis/arithmetic/multipliers/hrs_cumulative_multiplier.py +0 -102
  355. qiskit/synthesis/arithmetic/multipliers/rg_qft_multiplier.py +0 -99
  356. qiskit/synthesis/evolution/pauli_network.py +0 -80
  357. qiskit/synthesis/multi_controlled/mcmt_vchain.py +0 -52
  358. qiskit/transpiler/passes/optimization/remove_identity_equiv.py +0 -69
  359. qiskit/utils/deprecate_pulse.py +0 -119
  360. {qiskit-1.3.0.dist-info → qiskit-1.3.0b1.dist-info}/LICENSE.txt +0 -0
  361. {qiskit-1.3.0.dist-info → qiskit-1.3.0b1.dist-info}/top_level.txt +0 -0
@@ -47,7 +47,6 @@ from qiskit.circuit.gate import Gate
47
47
  from qiskit.circuit.parameter import Parameter
48
48
  from qiskit.circuit.exceptions import CircuitError
49
49
  from qiskit.utils import deprecate_func
50
- from qiskit.utils.deprecate_pulse import deprecate_pulse_dependency
51
50
  from . import _classical_resource_map
52
51
  from .controlflow import ControlFlowOp, _builder_utils
53
52
  from .controlflow.builder import CircuitScopeInterface, ControlFlowBuilderBlock
@@ -71,7 +70,6 @@ from .quantumcircuitdata import QuantumCircuitData, CircuitInstruction
71
70
  from .delay import Delay
72
71
  from .store import Store
73
72
 
74
-
75
73
  if typing.TYPE_CHECKING:
76
74
  import qiskit # pylint: disable=cyclic-import
77
75
  from qiskit.transpiler.layout import TranspileLayout # pylint: disable=cyclic-import
@@ -878,7 +876,7 @@ class QuantumCircuit:
878
876
 
879
877
  qc.count_ops()
880
878
 
881
- .. code-block:: text
879
+ .. parsed-literal::
882
880
 
883
881
  OrderedDict([('cx', 8), ('h', 5), ('x', 3), ('swap', 3)])
884
882
 
@@ -1147,41 +1145,21 @@ class QuantumCircuit:
1147
1145
  for var, initial in declarations:
1148
1146
  self.add_var(var, initial)
1149
1147
 
1150
- self._duration = None
1151
- self._unit = "dt"
1148
+ self.duration: int | float | None = None
1149
+ """The total duration of the circuit, set by a scheduling transpiler pass. Its unit is
1150
+ specified by :attr:`unit`."""
1151
+ self.unit = "dt"
1152
+ """The unit that :attr:`duration` is specified in."""
1152
1153
  self.metadata = {} if metadata is None else metadata
1153
1154
  """Arbitrary user-defined metadata for the circuit.
1154
-
1155
+
1155
1156
  Qiskit will not examine the content of this mapping, but it will pass it through the
1156
1157
  transpiler and reattach it to the output, so you can track your own metadata."""
1157
1158
 
1158
- @property
1159
- @deprecate_func(since="1.3.0", removal_timeline="in Qiskit 2.0.0", is_property=True)
1160
- def duration(self):
1161
- """The total duration of the circuit, set by a scheduling transpiler pass. Its unit is
1162
- specified by :attr:`unit`."""
1163
- return self._duration
1164
-
1165
- @duration.setter
1166
- def duration(self, value: int | float | None):
1167
- self._duration = value
1168
-
1169
- @property
1170
- @deprecate_func(since="1.3.0", removal_timeline="in Qiskit 2.0.0", is_property=True)
1171
- def unit(self):
1172
- """The unit that :attr:`duration` is specified in."""
1173
- return self._unit
1174
-
1175
- @unit.setter
1176
- def unit(self, value):
1177
- self._unit = value
1178
-
1179
1159
  @classmethod
1180
- def _from_circuit_data(
1181
- cls, data: CircuitData, add_regs: bool = False, name: str | None = None
1182
- ) -> typing.Self:
1160
+ def _from_circuit_data(cls, data: CircuitData, add_regs: bool = False) -> typing.Self:
1183
1161
  """A private constructor from rust space circuit data."""
1184
- out = QuantumCircuit(name=name)
1162
+ out = QuantumCircuit()
1185
1163
 
1186
1164
  if data.num_qubits > 0:
1187
1165
  if add_regs:
@@ -1343,17 +1321,15 @@ class QuantumCircuit:
1343
1321
  return self._op_start_times
1344
1322
 
1345
1323
  @property
1346
- @deprecate_pulse_dependency(is_property=True)
1347
1324
  def calibrations(self) -> dict:
1348
1325
  """Return calibration dictionary.
1349
1326
 
1350
1327
  The custom pulse definition of a given gate is of the form
1351
1328
  ``{'gate_name': {(qubits, params): schedule}}``
1352
1329
  """
1353
- return self._calibrations_prop
1330
+ return dict(self._calibrations)
1354
1331
 
1355
1332
  @calibrations.setter
1356
- @deprecate_pulse_dependency(is_property=True)
1357
1333
  def calibrations(self, calibrations: dict):
1358
1334
  """Set the circuit calibration data from a dictionary of calibration definition.
1359
1335
 
@@ -1361,37 +1337,18 @@ class QuantumCircuit:
1361
1337
  calibrations (dict): A dictionary of input in the format
1362
1338
  ``{'gate_name': {(qubits, gate_params): schedule}}``
1363
1339
  """
1364
- self._calibrations_prop = calibrations
1365
-
1366
- @property
1367
- def _calibrations_prop(self) -> dict:
1368
- """An alternative private path to the `calibrations` property for
1369
- avoiding deprecation warnings."""
1370
- return dict(self._calibrations)
1371
-
1372
- @_calibrations_prop.setter
1373
- def _calibrations_prop(self, calibrations: dict):
1374
- """An alternative private path to the `calibrations` property for
1375
- avoiding deprecation warnings."""
1376
1340
  self._calibrations = defaultdict(dict, calibrations)
1377
1341
 
1378
- @deprecate_pulse_dependency
1379
1342
  def has_calibration_for(self, instruction: CircuitInstruction | tuple):
1380
1343
  """Return True if the circuit has a calibration defined for the instruction context. In this
1381
1344
  case, the operation does not need to be translated to the device basis.
1382
1345
  """
1383
-
1384
- return self._has_calibration_for(instruction)
1385
-
1386
- def _has_calibration_for(self, instruction: CircuitInstruction | tuple):
1387
- """An alternative private path to the `has_calibration_for` method for
1388
- avoiding deprecation warnings."""
1389
1346
  if isinstance(instruction, CircuitInstruction):
1390
1347
  operation = instruction.operation
1391
1348
  qubits = instruction.qubits
1392
1349
  else:
1393
1350
  operation, qubits, _ = instruction
1394
- if not self._calibrations_prop or operation.name not in self._calibrations_prop:
1351
+ if not self.calibrations or operation.name not in self.calibrations:
1395
1352
  return False
1396
1353
  qubits = tuple(self.qubits.index(qubit) for qubit in qubits)
1397
1354
  params = []
@@ -1401,7 +1358,7 @@ class QuantumCircuit:
1401
1358
  else:
1402
1359
  params.append(p)
1403
1360
  params = tuple(params)
1404
- return (qubits, params) in self._calibrations_prop[operation.name]
1361
+ return (qubits, params) in self.calibrations[operation.name]
1405
1362
 
1406
1363
  @property
1407
1364
  def metadata(self) -> dict:
@@ -1537,7 +1494,7 @@ class QuantumCircuit:
1537
1494
 
1538
1495
  input:
1539
1496
 
1540
- .. code-block:: text
1497
+ .. parsed-literal::
1541
1498
 
1542
1499
  ┌───┐
1543
1500
  q_0: ┤ H ├─────■──────
@@ -1547,7 +1504,7 @@ class QuantumCircuit:
1547
1504
 
1548
1505
  output:
1549
1506
 
1550
- .. code-block:: text
1507
+ .. parsed-literal::
1551
1508
 
1552
1509
  ┌───┐
1553
1510
  q_0: ─────■──────┤ H ├
@@ -1581,7 +1538,7 @@ class QuantumCircuit:
1581
1538
 
1582
1539
  input:
1583
1540
 
1584
- .. code-block:: text
1541
+ .. parsed-literal::
1585
1542
 
1586
1543
  ┌───┐
1587
1544
  a_0: ┤ H ├──■─────────────────
@@ -1597,7 +1554,7 @@ class QuantumCircuit:
1597
1554
 
1598
1555
  output:
1599
1556
 
1600
- .. code-block:: text
1557
+ .. parsed-literal::
1601
1558
 
1602
1559
  ┌───┐
1603
1560
  b_0: ────────────────────┤ X ├
@@ -1651,7 +1608,7 @@ class QuantumCircuit:
1651
1608
 
1652
1609
  input:
1653
1610
 
1654
- .. code-block:: text
1611
+ .. parsed-literal::
1655
1612
 
1656
1613
  ┌───┐
1657
1614
  q_0: ┤ H ├─────■──────
@@ -1661,7 +1618,7 @@ class QuantumCircuit:
1661
1618
 
1662
1619
  output:
1663
1620
 
1664
- .. code-block:: text
1621
+ .. parsed-literal::
1665
1622
 
1666
1623
  ┌───┐
1667
1624
  q_0: ──────■──────┤ H ├
@@ -1903,7 +1860,7 @@ class QuantumCircuit:
1903
1860
 
1904
1861
  >>> lhs.compose(rhs, qubits=[3, 2], inplace=True)
1905
1862
 
1906
- .. code-block:: text
1863
+ .. parsed-literal::
1907
1864
 
1908
1865
  ┌───┐ ┌─────┐ ┌───┐
1909
1866
  lqr_1_0: ───┤ H ├─── rqr_0: ──■──┤ Tdg ├ lqr_1_0: ───┤ H ├───────────────
@@ -2042,7 +1999,7 @@ class QuantumCircuit:
2042
1999
  )
2043
2000
  edge_map.update(zip(other.clbits, dest._cbit_argument_conversion(clbits)))
2044
2001
 
2045
- for gate, cals in other._calibrations_prop.items():
2002
+ for gate, cals in other.calibrations.items():
2046
2003
  dest._calibrations[gate].update(cals)
2047
2004
 
2048
2005
  dest.duration = None
@@ -2104,14 +2061,14 @@ class QuantumCircuit:
2104
2061
  is_control_flow = isinstance(n_op, ControlFlowOp)
2105
2062
  if (
2106
2063
  not is_control_flow
2107
- and (condition := getattr(n_op, "_condition", None)) is not None
2064
+ and (condition := getattr(n_op, "condition", None)) is not None
2108
2065
  ):
2109
2066
  n_op = n_op.copy() if n_op is op and copy else n_op
2110
2067
  n_op.condition = variable_mapper.map_condition(condition)
2111
2068
  elif is_control_flow:
2112
2069
  n_op = n_op.replace_blocks(recurse_block(block) for block in n_op.blocks)
2113
2070
  if isinstance(n_op, (IfElseOp, WhileLoopOp)):
2114
- n_op.condition = variable_mapper.map_condition(n_op._condition)
2071
+ n_op.condition = variable_mapper.map_condition(n_op.condition)
2115
2072
  elif isinstance(n_op, SwitchCaseOp):
2116
2073
  n_op.target = variable_mapper.map_target(n_op.target)
2117
2074
  elif isinstance(n_op, Store):
@@ -2151,10 +2108,10 @@ class QuantumCircuit:
2151
2108
 
2152
2109
  Remember that in the little-endian convention the leftmost operation will be at the bottom
2153
2110
  of the circuit. See also
2154
- `the docs <https://docs.quantum.ibm.com/guides/construct-circuits>`__
2111
+ `the docs <https://docs.quantum.ibm.com/build/circuit-construction>`__
2155
2112
  for more information.
2156
2113
 
2157
- .. code-block:: text
2114
+ .. parsed-literal::
2158
2115
 
2159
2116
  ┌────────┐ ┌─────┐ ┌─────┐
2160
2117
  q_0: ┤ bottom ├ ⊗ q_0: ┤ top ├ = q_0: ─┤ top ├──
@@ -2735,10 +2692,7 @@ class QuantumCircuit:
2735
2692
  """
2736
2693
  if isinstance(name_or_param, str):
2737
2694
  return self.get_parameter(name_or_param, None) is not None
2738
- return (
2739
- isinstance(name_or_param, Parameter)
2740
- and self.get_parameter(name_or_param.name, None) == name_or_param
2741
- )
2695
+ return self.get_parameter(name_or_param.name) == name_or_param
2742
2696
 
2743
2697
  @typing.overload
2744
2698
  def get_var(self, name: str, default: T) -> Union[expr.Var, T]: ...
@@ -3257,33 +3211,40 @@ class QuantumCircuit:
3257
3211
 
3258
3212
  def decompose(
3259
3213
  self,
3260
- gates_to_decompose: (
3261
- str | Type[Instruction] | Sequence[str | Type[Instruction]] | None
3262
- ) = None,
3214
+ gates_to_decompose: Type[Gate] | Sequence[Type[Gate]] | Sequence[str] | str | None = None,
3263
3215
  reps: int = 1,
3264
- ) -> typing.Self:
3265
- """Call a decomposition pass on this circuit, to decompose one level (shallow decompose).
3216
+ ) -> "QuantumCircuit":
3217
+ """Call a decomposition pass on this circuit,
3218
+ to decompose one level (shallow decompose).
3266
3219
 
3267
3220
  Args:
3268
- gates_to_decompose: Optional subset of gates to decompose. Can be a gate type, such as
3269
- ``HGate``, or a gate name, such as "h", or a gate label, such as "My H Gate", or a
3270
- list of any combination of these. If a gate name is entered, it will decompose all
3271
- gates with that name, whether the gates have labels or not. Defaults to all gates in
3272
- the circuit.
3273
- reps: Optional number of times the circuit should be decomposed.
3221
+ gates_to_decompose (type or str or list(type, str)): Optional subset of gates
3222
+ to decompose. Can be a gate type, such as ``HGate``, or a gate name, such
3223
+ as 'h', or a gate label, such as 'My H Gate', or a list of any combination
3224
+ of these. If a gate name is entered, it will decompose all gates with that
3225
+ name, whether the gates have labels or not. Defaults to all gates in circuit.
3226
+ reps (int): Optional number of times the circuit should be decomposed.
3274
3227
  For instance, ``reps=2`` equals calling ``circuit.decompose().decompose()``.
3228
+ can decompose specific gates specific time
3275
3229
 
3276
3230
  Returns:
3277
3231
  QuantumCircuit: a circuit one level decomposed
3278
3232
  """
3279
3233
  # pylint: disable=cyclic-import
3280
3234
  from qiskit.transpiler.passes.basis.decompose import Decompose
3235
+ from qiskit.transpiler.passes.synthesis import HighLevelSynthesis
3281
3236
  from qiskit.converters.circuit_to_dag import circuit_to_dag
3282
3237
  from qiskit.converters.dag_to_circuit import dag_to_circuit
3283
3238
 
3284
3239
  dag = circuit_to_dag(self, copy_operations=True)
3285
3240
 
3286
- pass_ = Decompose(gates_to_decompose, apply_synthesis=True)
3241
+ if gates_to_decompose is None:
3242
+ # We should not rewrite the circuit using HLS when we have gates_to_decompose,
3243
+ # or else HLS will rewrite all objects with available plugins (e.g., Cliffords,
3244
+ # PermutationGates, and now also MCXGates)
3245
+ dag = HighLevelSynthesis().run(dag)
3246
+
3247
+ pass_ = Decompose(gates_to_decompose)
3287
3248
  for _ in range(reps):
3288
3249
  dag = pass_.run(dag)
3289
3250
 
@@ -3525,7 +3486,7 @@ class QuantumCircuit:
3525
3486
 
3526
3487
  for instruction in self._data:
3527
3488
  objects = set(itertools.chain(instruction.qubits, instruction.clbits))
3528
- if (condition := getattr(instruction.operation, "_condition", None)) is not None:
3489
+ if (condition := getattr(instruction.operation, "condition", None)) is not None:
3529
3490
  objects.update(_builder_utils.condition_resources(condition).clbits)
3530
3491
  if isinstance(condition, expr.Expr):
3531
3492
  update_from_expr(objects, condition)
@@ -3628,7 +3589,7 @@ class QuantumCircuit:
3628
3589
  else:
3629
3590
  args = instruction.qubits + instruction.clbits
3630
3591
  num_qargs = len(args) + (
3631
- 1 if getattr(instruction.operation, "_condition", None) else 0
3592
+ 1 if getattr(instruction.operation, "condition", None) else 0
3632
3593
  )
3633
3594
 
3634
3595
  if num_qargs >= 2 and not getattr(instruction.operation, "_directive", False):
@@ -3754,13 +3715,39 @@ class QuantumCircuit:
3754
3715
  f"invalid name for a circuit: '{name}'. The name must be a string or 'None'."
3755
3716
  )
3756
3717
  cpy = _copy.copy(self)
3757
-
3758
- _copy_metadata(self, cpy, vars_mode)
3718
+ # copy registers correctly, in copy.copy they are only copied via reference
3719
+ cpy.qregs = self.qregs.copy()
3720
+ cpy.cregs = self.cregs.copy()
3721
+ cpy._builder_api = _OuterCircuitScopeInterface(cpy)
3722
+ cpy._ancillas = self._ancillas.copy()
3723
+ cpy._qubit_indices = self._qubit_indices.copy()
3724
+ cpy._clbit_indices = self._clbit_indices.copy()
3725
+
3726
+ if vars_mode == "alike":
3727
+ # Note that this causes the local variables to be uninitialised, because the stores are
3728
+ # not copied. This can leave the circuit in a potentially dangerous state for users if
3729
+ # they don't re-add initializer stores.
3730
+ cpy._vars_local = self._vars_local.copy()
3731
+ cpy._vars_input = self._vars_input.copy()
3732
+ cpy._vars_capture = self._vars_capture.copy()
3733
+ elif vars_mode == "captures":
3734
+ cpy._vars_local = {}
3735
+ cpy._vars_input = {}
3736
+ cpy._vars_capture = {var.name: var for var in self.iter_vars()}
3737
+ elif vars_mode == "drop":
3738
+ cpy._vars_local = {}
3739
+ cpy._vars_input = {}
3740
+ cpy._vars_capture = {}
3741
+ else: # pragma: no cover
3742
+ raise ValueError(f"unknown vars_mode: '{vars_mode}'")
3759
3743
 
3760
3744
  cpy._data = CircuitData(
3761
3745
  self._data.qubits, self._data.clbits, global_phase=self._data.global_phase
3762
3746
  )
3763
3747
 
3748
+ cpy._calibrations = _copy.deepcopy(self._calibrations)
3749
+ cpy._metadata = _copy.deepcopy(self._metadata)
3750
+
3764
3751
  if name:
3765
3752
  cpy.name = name
3766
3753
  return cpy
@@ -3876,7 +3863,7 @@ class QuantumCircuit:
3876
3863
  circuit.draw()
3877
3864
 
3878
3865
 
3879
- .. code-block:: text
3866
+ .. parsed-literal::
3880
3867
 
3881
3868
  ┌───┐┌─┐
3882
3869
  q: ┤ H ├┤M├
@@ -4350,57 +4337,30 @@ class QuantumCircuit:
4350
4337
 
4351
4338
  if isinstance(parameters, collections.abc.Mapping):
4352
4339
  raw_mapping = parameters if flat_input else self._unroll_param_dict(parameters)
4353
- if strict and (
4354
- extras := [
4355
- parameter for parameter in raw_mapping if not self.has_parameter(parameter)
4356
- ]
4357
- ):
4340
+ our_parameters = self._data.unsorted_parameters()
4341
+ if strict and (extras := raw_mapping.keys() - our_parameters):
4358
4342
  raise CircuitError(
4359
4343
  f"Cannot bind parameters ({', '.join(str(x) for x in extras)}) not present in"
4360
4344
  " the circuit."
4361
4345
  )
4362
-
4363
- def create_mapping_view():
4364
- return raw_mapping
4365
-
4366
- target._data.assign_parameters_mapping(raw_mapping)
4346
+ parameter_binds = _ParameterBindsDict(raw_mapping, our_parameters)
4347
+ target._data.assign_parameters_mapping(parameter_binds)
4367
4348
  else:
4368
- # This should be a cache retrieval, since we warmed the cache. We need to keep hold of
4369
- # what the parameters were before anything is assigned, because we assign parameters in
4370
- # the calibrations (which aren't tracked in the internal parameter table) after, which
4371
- # would change what we create. We don't make the full Python-space mapping object of
4372
- # parameters to values eagerly because 99.9% of the time we don't need it, and it's
4373
- # relatively expensive to do for large numbers of parameters.
4374
- initial_parameters = target._data.parameters
4375
-
4376
- def create_mapping_view():
4377
- return dict(zip(initial_parameters, parameters))
4378
-
4349
+ parameter_binds = _ParameterBindsSequence(target._data.parameters, parameters)
4379
4350
  target._data.assign_parameters_iterable(parameters)
4380
4351
 
4381
4352
  # Finally, assign the parameters inside any of the calibrations. We don't track these in
4382
- # the `ParameterTable`, so we manually reconstruct things. We lazily construct the mapping
4383
- # `{parameter: bound_value}` the first time we encounter a binding (we have to scan for
4384
- # this, because calibrations don't use a parameter-table lookup), rather than always paying
4385
- # the cost - most circuits don't have parametric calibrations, and it's expensive.
4386
- mapping_view = None
4387
-
4353
+ # the `ParameterTable`, so we manually reconstruct things.
4388
4354
  def map_calibration(qubits, parameters, schedule):
4389
- # All calls to this function should share the same `{Parameter: bound_value}` mapping,
4390
- # which we only want to lazily construct a single time.
4391
- nonlocal mapping_view
4392
- if mapping_view is None:
4393
- mapping_view = create_mapping_view()
4394
-
4395
4355
  modified = False
4396
4356
  new_parameters = list(parameters)
4397
4357
  for i, parameter in enumerate(new_parameters):
4398
4358
  if not isinstance(parameter, ParameterExpression):
4399
4359
  continue
4400
- if not (contained := parameter.parameters & mapping_view.keys()):
4360
+ if not (contained := parameter.parameters & parameter_binds.mapping.keys()):
4401
4361
  continue
4402
4362
  for to_bind in contained:
4403
- parameter = parameter.assign(to_bind, mapping_view[to_bind])
4363
+ parameter = parameter.assign(to_bind, parameter_binds.mapping[to_bind])
4404
4364
  if not parameter.parameters:
4405
4365
  parameter = parameter.numeric()
4406
4366
  if isinstance(parameter, complex):
@@ -4408,7 +4368,7 @@ class QuantumCircuit:
4408
4368
  new_parameters[i] = parameter
4409
4369
  modified = True
4410
4370
  if modified:
4411
- schedule.assign_parameters(mapping_view)
4371
+ schedule.assign_parameters(parameter_binds.mapping)
4412
4372
  return (qubits, tuple(new_parameters)), schedule
4413
4373
 
4414
4374
  target._calibrations = defaultdict(
@@ -5731,7 +5691,7 @@ class QuantumCircuit:
5731
5691
 
5732
5692
  output:
5733
5693
 
5734
- .. code-block:: text
5694
+ .. parsed-literal::
5735
5695
 
5736
5696
  ┌─────────────────────────────────────┐
5737
5697
  q_0: ┤ State Preparation(0.70711,-0.70711) ├
@@ -5754,7 +5714,7 @@ class QuantumCircuit:
5754
5714
 
5755
5715
  output:
5756
5716
 
5757
- .. code-block:: text
5717
+ .. parsed-literal::
5758
5718
 
5759
5719
  ┌─────────────────────────┐
5760
5720
  q_0: ┤0 ├
@@ -5775,7 +5735,7 @@ class QuantumCircuit:
5775
5735
 
5776
5736
  output:
5777
5737
 
5778
- .. code-block:: text
5738
+ .. parsed-literal::
5779
5739
 
5780
5740
  ┌───────────────────────────────────────────┐
5781
5741
  q_0: ┤0 ├
@@ -5846,7 +5806,7 @@ class QuantumCircuit:
5846
5806
 
5847
5807
  output:
5848
5808
 
5849
- .. code-block:: text
5809
+ .. parsed-literal::
5850
5810
 
5851
5811
  ┌──────────────────────────────┐
5852
5812
  q_0: ┤ Initialize(0.70711,-0.70711) ├
@@ -5869,7 +5829,7 @@ class QuantumCircuit:
5869
5829
 
5870
5830
  output:
5871
5831
 
5872
- .. code-block:: text
5832
+ .. parsed-literal::
5873
5833
 
5874
5834
  ┌──────────────────┐
5875
5835
  q_0: ┤0 ├
@@ -5890,7 +5850,7 @@ class QuantumCircuit:
5890
5850
 
5891
5851
  output:
5892
5852
 
5893
- .. code-block:: text
5853
+ .. parsed-literal::
5894
5854
 
5895
5855
  ┌────────────────────────────────────┐
5896
5856
  q_0: ┤0 ├
@@ -6506,7 +6466,6 @@ class QuantumCircuit:
6506
6466
  ContinueLoopOp(self.num_qubits, self.num_clbits), self.qubits, self.clbits, copy=False
6507
6467
  )
6508
6468
 
6509
- @deprecate_pulse_dependency
6510
6469
  def add_calibration(
6511
6470
  self,
6512
6471
  gate: Union[Gate, str],
@@ -6732,6 +6691,42 @@ def _validate_expr(circuit_scope: CircuitScopeInterface, node: expr.Expr) -> exp
6732
6691
  return node
6733
6692
 
6734
6693
 
6694
+ class _ParameterBindsDict:
6695
+ __slots__ = ("mapping", "allowed_keys")
6696
+
6697
+ def __init__(self, mapping, allowed_keys):
6698
+ self.mapping = mapping
6699
+ self.allowed_keys = allowed_keys
6700
+
6701
+ def items(self):
6702
+ """Iterator through all the keys in the mapping that we care about. Wrapping the main
6703
+ mapping allows us to avoid reconstructing a new 'dict', but just use the given 'mapping'
6704
+ without any copy / reconstruction."""
6705
+ for parameter, value in self.mapping.items():
6706
+ if parameter in self.allowed_keys:
6707
+ yield parameter, value
6708
+
6709
+
6710
+ class _ParameterBindsSequence:
6711
+ __slots__ = ("parameters", "values", "mapping_cache")
6712
+
6713
+ def __init__(self, parameters, values):
6714
+ self.parameters = parameters
6715
+ self.values = values
6716
+ self.mapping_cache = None
6717
+
6718
+ def items(self):
6719
+ """Iterator through all the keys in the mapping that we care about."""
6720
+ return zip(self.parameters, self.values)
6721
+
6722
+ @property
6723
+ def mapping(self):
6724
+ """Cached version of a mapping. This is only generated on demand."""
6725
+ if self.mapping_cache is None:
6726
+ self.mapping_cache = dict(zip(self.parameters, self.values))
6727
+ return self.mapping_cache
6728
+
6729
+
6735
6730
  def _bit_argument_conversion(specifier, bit_sequence, bit_set, type_) -> list[Bit]:
6736
6731
  """Get the list of bits referred to by the specifier ``specifier``.
6737
6732
 
@@ -6796,34 +6791,3 @@ def _bit_argument_conversion_scalar(specifier, bit_sequence, bit_set, type_):
6796
6791
  else f"Invalid bit index: '{specifier}' of type '{type(specifier)}'"
6797
6792
  )
6798
6793
  raise CircuitError(message)
6799
-
6800
-
6801
- def _copy_metadata(original, cpy, vars_mode):
6802
- # copy registers correctly, in copy.copy they are only copied via reference
6803
- cpy.qregs = original.qregs.copy()
6804
- cpy.cregs = original.cregs.copy()
6805
- cpy._builder_api = _OuterCircuitScopeInterface(cpy)
6806
- cpy._ancillas = original._ancillas.copy()
6807
- cpy._qubit_indices = original._qubit_indices.copy()
6808
- cpy._clbit_indices = original._clbit_indices.copy()
6809
-
6810
- if vars_mode == "alike":
6811
- # Note that this causes the local variables to be uninitialised, because the stores are
6812
- # not copied. This can leave the circuit in a potentially dangerous state for users if
6813
- # they don't re-add initializer stores.
6814
- cpy._vars_local = original._vars_local.copy()
6815
- cpy._vars_input = original._vars_input.copy()
6816
- cpy._vars_capture = original._vars_capture.copy()
6817
- elif vars_mode == "captures":
6818
- cpy._vars_local = {}
6819
- cpy._vars_input = {}
6820
- cpy._vars_capture = {var.name: var for var in original.iter_vars()}
6821
- elif vars_mode == "drop":
6822
- cpy._vars_local = {}
6823
- cpy._vars_input = {}
6824
- cpy._vars_capture = {}
6825
- else: # pragma: no cover
6826
- raise ValueError(f"unknown vars_mode: '{vars_mode}'")
6827
-
6828
- cpy._calibrations = _copy.deepcopy(original._calibrations)
6829
- cpy._metadata = _copy.deepcopy(original._metadata)
@@ -251,7 +251,6 @@ from __future__ import annotations
251
251
 
252
252
  import functools
253
253
 
254
- from qiskit.utils import deprecate_func
255
254
  from .instruction import Instruction
256
255
  from .gate import Gate
257
256
  from .controlledgate import ControlledGate, _ctrl_state_to_int
@@ -490,7 +489,6 @@ class _SingletonInstructionOverrides(Instruction):
490
489
  instruction._params = _frozenlist(instruction._params)
491
490
  return instruction
492
491
 
493
- @deprecate_func(since="1.3.0", removal_timeline="in 2.0.0")
494
492
  def c_if(self, classical, val):
495
493
  return self.to_mutable().c_if(classical, val)
496
494
 
qiskit/circuit/store.py CHANGED
@@ -16,7 +16,6 @@ from __future__ import annotations
16
16
 
17
17
  import typing
18
18
 
19
- from qiskit.utils import deprecate_func
20
19
  from .exceptions import CircuitError
21
20
  from .classical import expr, types
22
21
  from .instruction import Instruction
@@ -89,7 +88,6 @@ class Store(Instruction):
89
88
  """Get the r-value :class:`~.expr.Expr` node that is being written into the l-value."""
90
89
  return self.params[1]
91
90
 
92
- @deprecate_func(since="1.3.0", removal_timeline="in 2.0.0")
93
91
  def c_if(self, classical, val):
94
92
  """:meta hidden:"""
95
93
  raise NotImplementedError(
@@ -189,16 +189,6 @@ def assemble(
189
189
  )
190
190
 
191
191
 
192
- # Note for future: this method is used in `BasicSimulator` and may need to be kept past the
193
- # `assemble` removal deadline (2.0). If it is kept (potentially in a different location),
194
- # we will need an alternative for the backend.configuration() access that currently takes
195
- # place in L566 (`parse_circuit_args`) and L351 (`parse_common_args`)
196
- # because backend.configuration() is also set for removal in 2.0.
197
- # The ultimate goal will be to move away from relying on any kind of `assemble` implementation
198
- # because of how tightly coupled it is to these legacy data structures. But as a transition step,
199
- # given that we would only have to support the subcase of `BasicSimulator`, we could probably just
200
- # inline the relevant config values that are already hardcoded in the basic simulator configuration
201
- # generator.
202
192
  def _assemble(
203
193
  experiments: Union[
204
194
  QuantumCircuit,
@@ -239,7 +229,7 @@ def _assemble(
239
229
  experiments = experiments if isinstance(experiments, list) else [experiments]
240
230
  pulse_qobj = any(isinstance(exp, (ScheduleBlock, Schedule, Instruction)) for exp in experiments)
241
231
  with warnings.catch_warnings():
242
- # The Qobj class is deprecated, the backend.configuration() method is too
232
+ # The Qobj is deprecated
243
233
  warnings.filterwarnings("ignore", category=DeprecationWarning, module="qiskit")
244
234
  qobj_id, qobj_header, run_config_common_dict = _parse_common_args(
245
235
  backend,
@@ -564,12 +554,9 @@ def _parse_circuit_args(
564
554
  run_config_dict = {"parameter_binds": parameter_binds, **run_config}
565
555
  if parametric_pulses is None:
566
556
  if backend:
567
- with warnings.catch_warnings():
568
- # TODO (2.0): See comment on L192 regarding backend.configuration removal
569
- warnings.filterwarnings("ignore", category=DeprecationWarning, module="qiskit")
570
- run_config_dict["parametric_pulses"] = getattr(
571
- backend.configuration(), "parametric_pulses", []
572
- )
557
+ run_config_dict["parametric_pulses"] = getattr(
558
+ backend.configuration(), "parametric_pulses", []
559
+ )
573
560
  else:
574
561
  run_config_dict["parametric_pulses"] = []
575
562
  else:
@@ -26,7 +26,6 @@ from qiskit.providers.backend import Backend
26
26
  from qiskit.scheduler.config import ScheduleConfig
27
27
  from qiskit.scheduler.schedule_circuit import schedule_circuit
28
28
  from qiskit.utils.parallel import parallel_map
29
- from qiskit.utils.deprecate_pulse import deprecate_pulse_dependency
30
29
 
31
30
  logger = logging.getLogger(__name__)
32
31
 
@@ -36,7 +35,6 @@ def _log_schedule_time(start_time, end_time):
36
35
  logger.info(log_msg)
37
36
 
38
37
 
39
- @deprecate_pulse_dependency(moving_to_dynamics=True)
40
38
  def schedule(
41
39
  circuits: Union[QuantumCircuit, List[QuantumCircuit]],
42
40
  backend: Optional[Backend] = None,