qiskit 1.3.0b1__cp39-abi3-win32.whl → 1.3.0rc2__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 (360) hide show
  1. qiskit/VERSION.txt +1 -1
  2. qiskit/__init__.py +20 -1
  3. qiskit/_accelerate.pyd +0 -0
  4. qiskit/assembler/assemble_schedules.py +2 -0
  5. qiskit/circuit/__init__.py +44 -1
  6. qiskit/circuit/_standard_gates_commutations.py +585 -0
  7. qiskit/circuit/barrier.py +2 -0
  8. qiskit/circuit/controlflow/builder.py +3 -3
  9. qiskit/circuit/controlflow/if_else.py +13 -5
  10. qiskit/circuit/controlflow/while_loop.py +10 -2
  11. qiskit/circuit/delay.py +20 -3
  12. qiskit/circuit/equivalence.py +13 -214
  13. qiskit/circuit/gate.py +3 -1
  14. qiskit/circuit/instruction.py +32 -11
  15. qiskit/circuit/instructionset.py +2 -0
  16. qiskit/circuit/library/__init__.py +110 -14
  17. qiskit/circuit/library/arithmetic/__init__.py +9 -2
  18. qiskit/circuit/library/arithmetic/adders/__init__.py +1 -0
  19. qiskit/circuit/library/arithmetic/adders/adder.py +154 -2
  20. qiskit/circuit/library/arithmetic/adders/cdkm_ripple_carry_adder.py +20 -56
  21. qiskit/circuit/library/arithmetic/adders/draper_qft_adder.py +14 -1
  22. qiskit/circuit/library/arithmetic/adders/vbe_ripple_carry_adder.py +21 -91
  23. qiskit/circuit/library/arithmetic/linear_pauli_rotations.py +1 -1
  24. qiskit/circuit/library/arithmetic/multipliers/__init__.py +1 -0
  25. qiskit/circuit/library/arithmetic/multipliers/hrs_cumulative_multiplier.py +8 -1
  26. qiskit/circuit/library/arithmetic/multipliers/multiplier.py +94 -3
  27. qiskit/circuit/library/arithmetic/multipliers/rg_qft_multiplier.py +8 -1
  28. qiskit/circuit/library/arithmetic/weighted_adder.py +1 -1
  29. qiskit/circuit/library/basis_change/qft.py +20 -38
  30. qiskit/circuit/library/blueprintcircuit.py +64 -0
  31. qiskit/circuit/library/boolean_logic/__init__.py +4 -4
  32. qiskit/circuit/library/boolean_logic/inner_product.py +81 -4
  33. qiskit/circuit/library/boolean_logic/quantum_and.py +107 -4
  34. qiskit/circuit/library/boolean_logic/quantum_or.py +107 -3
  35. qiskit/circuit/library/boolean_logic/quantum_xor.py +97 -3
  36. qiskit/circuit/library/data_preparation/__init__.py +6 -3
  37. qiskit/circuit/library/data_preparation/{z_feature_map.py → _z_feature_map.py} +45 -34
  38. qiskit/circuit/library/data_preparation/_zz_feature_map.py +150 -0
  39. qiskit/circuit/library/data_preparation/pauli_feature_map.py +342 -29
  40. qiskit/circuit/library/fourier_checking.py +72 -11
  41. qiskit/circuit/library/generalized_gates/__init__.py +1 -1
  42. qiskit/circuit/library/generalized_gates/diagonal.py +45 -51
  43. qiskit/circuit/library/generalized_gates/gms.py +67 -14
  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 +12 -6
  47. qiskit/circuit/library/generalized_gates/mcmt.py +167 -107
  48. qiskit/circuit/library/generalized_gates/permutation.py +8 -6
  49. qiskit/circuit/library/generalized_gates/rv.py +8 -9
  50. qiskit/circuit/library/graph_state.py +93 -10
  51. qiskit/circuit/library/grover_operator.py +270 -2
  52. qiskit/circuit/library/hidden_linear_function.py +83 -20
  53. qiskit/circuit/library/iqp.py +99 -20
  54. qiskit/circuit/library/n_local/__init__.py +19 -7
  55. qiskit/circuit/library/n_local/efficient_su2.py +118 -5
  56. qiskit/circuit/library/n_local/evolved_operator_ansatz.py +259 -0
  57. qiskit/circuit/library/n_local/excitation_preserving.py +130 -6
  58. qiskit/circuit/library/n_local/n_local.py +406 -5
  59. qiskit/circuit/library/n_local/pauli_two_design.py +106 -4
  60. qiskit/circuit/library/n_local/qaoa_ansatz.py +80 -1
  61. qiskit/circuit/library/n_local/real_amplitudes.py +127 -7
  62. qiskit/circuit/library/n_local/two_local.py +14 -7
  63. qiskit/circuit/library/overlap.py +91 -26
  64. qiskit/circuit/library/pauli_evolution.py +17 -15
  65. qiskit/circuit/library/phase_estimation.py +80 -4
  66. qiskit/circuit/library/quantum_volume.py +72 -20
  67. qiskit/circuit/library/standard_gates/__init__.py +20 -1
  68. qiskit/circuit/library/standard_gates/dcx.py +2 -1
  69. qiskit/circuit/library/standard_gates/ecr.py +2 -2
  70. qiskit/circuit/library/standard_gates/h.py +4 -3
  71. qiskit/circuit/library/standard_gates/i.py +2 -1
  72. qiskit/circuit/library/standard_gates/iswap.py +2 -2
  73. qiskit/circuit/library/standard_gates/p.py +20 -12
  74. qiskit/circuit/library/standard_gates/r.py +1 -1
  75. qiskit/circuit/library/standard_gates/rx.py +4 -3
  76. qiskit/circuit/library/standard_gates/rxx.py +2 -2
  77. qiskit/circuit/library/standard_gates/ry.py +4 -3
  78. qiskit/circuit/library/standard_gates/ryy.py +2 -2
  79. qiskit/circuit/library/standard_gates/rz.py +13 -12
  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 +4 -3
  85. qiskit/circuit/library/standard_gates/t.py +2 -2
  86. qiskit/circuit/library/standard_gates/u.py +11 -3
  87. qiskit/circuit/library/standard_gates/u1.py +65 -15
  88. qiskit/circuit/library/standard_gates/u2.py +4 -1
  89. qiskit/circuit/library/standard_gates/u3.py +31 -3
  90. qiskit/circuit/library/standard_gates/x.py +7 -5
  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 +4 -3
  94. qiskit/circuit/library/standard_gates/z.py +3 -3
  95. qiskit/circuit/library/templates/clifford/clifford_2_1.py +9 -8
  96. qiskit/circuit/library/templates/clifford/clifford_2_2.py +10 -9
  97. qiskit/circuit/library/templates/clifford/clifford_2_3.py +9 -7
  98. qiskit/circuit/library/templates/clifford/clifford_2_4.py +9 -8
  99. qiskit/circuit/library/templates/clifford/clifford_3_1.py +9 -8
  100. qiskit/circuit/library/templates/clifford/clifford_4_1.py +10 -9
  101. qiskit/circuit/library/templates/clifford/clifford_4_2.py +10 -9
  102. qiskit/circuit/library/templates/clifford/clifford_4_3.py +10 -9
  103. qiskit/circuit/library/templates/clifford/clifford_4_4.py +10 -9
  104. qiskit/circuit/library/templates/clifford/clifford_5_1.py +10 -9
  105. qiskit/circuit/library/templates/clifford/clifford_6_1.py +10 -9
  106. qiskit/circuit/library/templates/clifford/clifford_6_2.py +10 -9
  107. qiskit/circuit/library/templates/clifford/clifford_6_3.py +10 -9
  108. qiskit/circuit/library/templates/clifford/clifford_6_4.py +9 -8
  109. qiskit/circuit/library/templates/clifford/clifford_6_5.py +10 -9
  110. qiskit/circuit/library/templates/clifford/clifford_8_1.py +10 -9
  111. qiskit/circuit/library/templates/clifford/clifford_8_2.py +10 -9
  112. qiskit/circuit/library/templates/clifford/clifford_8_3.py +10 -9
  113. qiskit/circuit/library/templates/nct/template_nct_2a_1.py +9 -7
  114. qiskit/circuit/library/templates/nct/template_nct_2a_2.py +10 -8
  115. qiskit/circuit/library/templates/nct/template_nct_2a_3.py +12 -10
  116. qiskit/circuit/library/templates/nct/template_nct_4a_1.py +16 -14
  117. qiskit/circuit/library/templates/nct/template_nct_4a_2.py +14 -12
  118. qiskit/circuit/library/templates/nct/template_nct_4a_3.py +12 -10
  119. qiskit/circuit/library/templates/nct/template_nct_4b_1.py +14 -12
  120. qiskit/circuit/library/templates/nct/template_nct_4b_2.py +12 -10
  121. qiskit/circuit/library/templates/nct/template_nct_5a_1.py +12 -10
  122. qiskit/circuit/library/templates/nct/template_nct_5a_2.py +12 -10
  123. qiskit/circuit/library/templates/nct/template_nct_5a_3.py +12 -10
  124. qiskit/circuit/library/templates/nct/template_nct_5a_4.py +11 -9
  125. qiskit/circuit/library/templates/nct/template_nct_6a_1.py +11 -9
  126. qiskit/circuit/library/templates/nct/template_nct_6a_2.py +12 -10
  127. qiskit/circuit/library/templates/nct/template_nct_6a_3.py +12 -10
  128. qiskit/circuit/library/templates/nct/template_nct_6a_4.py +12 -10
  129. qiskit/circuit/library/templates/nct/template_nct_6b_1.py +12 -10
  130. qiskit/circuit/library/templates/nct/template_nct_6b_2.py +12 -10
  131. qiskit/circuit/library/templates/nct/template_nct_6c_1.py +12 -10
  132. qiskit/circuit/library/templates/nct/template_nct_7a_1.py +13 -11
  133. qiskit/circuit/library/templates/nct/template_nct_7b_1.py +13 -11
  134. qiskit/circuit/library/templates/nct/template_nct_7c_1.py +13 -11
  135. qiskit/circuit/library/templates/nct/template_nct_7d_1.py +13 -11
  136. qiskit/circuit/library/templates/nct/template_nct_7e_1.py +13 -11
  137. qiskit/circuit/library/templates/nct/template_nct_9a_1.py +13 -11
  138. qiskit/circuit/library/templates/nct/template_nct_9c_1.py +11 -9
  139. qiskit/circuit/library/templates/nct/template_nct_9c_10.py +12 -10
  140. qiskit/circuit/library/templates/nct/template_nct_9c_11.py +12 -10
  141. qiskit/circuit/library/templates/nct/template_nct_9c_12.py +12 -10
  142. qiskit/circuit/library/templates/nct/template_nct_9c_2.py +12 -10
  143. qiskit/circuit/library/templates/nct/template_nct_9c_3.py +12 -10
  144. qiskit/circuit/library/templates/nct/template_nct_9c_4.py +12 -10
  145. qiskit/circuit/library/templates/nct/template_nct_9c_5.py +12 -10
  146. qiskit/circuit/library/templates/nct/template_nct_9c_6.py +12 -10
  147. qiskit/circuit/library/templates/nct/template_nct_9c_7.py +12 -10
  148. qiskit/circuit/library/templates/nct/template_nct_9c_8.py +12 -10
  149. qiskit/circuit/library/templates/nct/template_nct_9c_9.py +12 -10
  150. qiskit/circuit/library/templates/nct/template_nct_9d_1.py +11 -9
  151. qiskit/circuit/library/templates/nct/template_nct_9d_10.py +12 -10
  152. qiskit/circuit/library/templates/nct/template_nct_9d_2.py +12 -10
  153. qiskit/circuit/library/templates/nct/template_nct_9d_3.py +12 -10
  154. qiskit/circuit/library/templates/nct/template_nct_9d_4.py +12 -10
  155. qiskit/circuit/library/templates/nct/template_nct_9d_5.py +12 -10
  156. qiskit/circuit/library/templates/nct/template_nct_9d_6.py +12 -10
  157. qiskit/circuit/library/templates/nct/template_nct_9d_7.py +12 -10
  158. qiskit/circuit/library/templates/nct/template_nct_9d_8.py +12 -10
  159. qiskit/circuit/library/templates/nct/template_nct_9d_9.py +12 -10
  160. qiskit/circuit/library/templates/rzx/rzx_cy.py +11 -10
  161. qiskit/circuit/library/templates/rzx/rzx_xz.py +16 -15
  162. qiskit/circuit/library/templates/rzx/rzx_yz.py +12 -10
  163. qiskit/circuit/library/templates/rzx/rzx_zz1.py +22 -20
  164. qiskit/circuit/library/templates/rzx/rzx_zz2.py +16 -15
  165. qiskit/circuit/library/templates/rzx/rzx_zz3.py +17 -15
  166. qiskit/circuit/parameter.py +4 -0
  167. qiskit/circuit/parameterexpression.py +167 -34
  168. qiskit/circuit/quantumcircuit.py +162 -126
  169. qiskit/circuit/singleton.py +2 -0
  170. qiskit/circuit/store.py +2 -0
  171. qiskit/circuit/twirling.py +145 -0
  172. qiskit/compiler/assembler.py +17 -4
  173. qiskit/compiler/scheduler.py +2 -0
  174. qiskit/compiler/sequencer.py +2 -0
  175. qiskit/compiler/transpiler.py +81 -26
  176. qiskit/converters/circuit_to_dag.py +2 -2
  177. qiskit/converters/circuit_to_dagdependency.py +1 -1
  178. qiskit/converters/circuit_to_dagdependency_v2.py +1 -1
  179. qiskit/converters/circuit_to_instruction.py +1 -1
  180. qiskit/converters/dag_to_circuit.py +7 -5
  181. qiskit/converters/dag_to_dagdependency.py +1 -1
  182. qiskit/converters/dag_to_dagdependency_v2.py +1 -1
  183. qiskit/converters/dagdependency_to_circuit.py +5 -1
  184. qiskit/converters/dagdependency_to_dag.py +6 -1
  185. qiskit/dagcircuit/collect_blocks.py +3 -3
  186. qiskit/dagcircuit/dagdependency.py +18 -5
  187. qiskit/dagcircuit/dagdependency_v2.py +1 -1
  188. qiskit/dagcircuit/dagnode.py +2 -2
  189. qiskit/passmanager/__init__.py +2 -2
  190. qiskit/primitives/backend_estimator.py +5 -2
  191. qiskit/primitives/backend_sampler_v2.py +61 -18
  192. qiskit/primitives/base/base_estimator.py +2 -2
  193. qiskit/primitives/containers/data_bin.py +9 -1
  194. qiskit/primitives/statevector_sampler.py +1 -1
  195. qiskit/primitives/utils.py +1 -1
  196. qiskit/providers/__init__.py +3 -3
  197. qiskit/providers/backend.py +12 -1
  198. qiskit/providers/backend_compat.py +23 -3
  199. qiskit/providers/basic_provider/basic_simulator.py +12 -2
  200. qiskit/providers/fake_provider/fake_pulse_backend.py +6 -1
  201. qiskit/providers/fake_provider/generic_backend_v2.py +46 -30
  202. qiskit/providers/models/pulsedefaults.py +2 -0
  203. qiskit/pulse/builder.py +59 -18
  204. qiskit/pulse/calibration_entries.py +4 -1
  205. qiskit/pulse/channels.py +2 -0
  206. qiskit/pulse/exceptions.py +2 -0
  207. qiskit/pulse/instruction_schedule_map.py +21 -6
  208. qiskit/pulse/instructions/acquire.py +2 -0
  209. qiskit/pulse/instructions/delay.py +2 -0
  210. qiskit/pulse/instructions/directives.py +8 -0
  211. qiskit/pulse/instructions/frequency.py +3 -0
  212. qiskit/pulse/instructions/instruction.py +2 -0
  213. qiskit/pulse/instructions/phase.py +3 -0
  214. qiskit/pulse/instructions/play.py +2 -0
  215. qiskit/pulse/instructions/reference.py +2 -0
  216. qiskit/pulse/instructions/snapshot.py +2 -0
  217. qiskit/pulse/library/pulse.py +2 -0
  218. qiskit/pulse/library/symbolic_pulses.py +28 -0
  219. qiskit/pulse/library/waveform.py +2 -0
  220. qiskit/pulse/macros.py +1 -1
  221. qiskit/pulse/schedule.py +12 -13
  222. qiskit/pulse/transforms/alignments.py +5 -3
  223. qiskit/pulse/transforms/dag.py +7 -0
  224. qiskit/qasm2/export.py +5 -3
  225. qiskit/qasm2/parse.py +46 -2
  226. qiskit/qasm3/__init__.py +1 -0
  227. qiskit/qasm3/ast.py +123 -15
  228. qiskit/qasm3/exporter.py +103 -77
  229. qiskit/qobj/converters/pulse_instruction.py +6 -4
  230. qiskit/qpy/__init__.py +181 -0
  231. qiskit/qpy/binary_io/circuits.py +20 -5
  232. qiskit/qpy/binary_io/schedules.py +3 -4
  233. qiskit/qpy/binary_io/value.py +310 -13
  234. qiskit/qpy/common.py +46 -2
  235. qiskit/qpy/formats.py +7 -0
  236. qiskit/qpy/interface.py +40 -4
  237. qiskit/quantum_info/__init__.py +4 -0
  238. qiskit/quantum_info/operators/channel/transformations.py +28 -21
  239. qiskit/quantum_info/operators/dihedral/dihedral.py +1 -1
  240. qiskit/quantum_info/operators/operator.py +54 -8
  241. qiskit/quantum_info/operators/symplectic/base_pauli.py +11 -19
  242. qiskit/quantum_info/operators/symplectic/clifford.py +1 -1
  243. qiskit/quantum_info/operators/symplectic/clifford_circuits.py +1 -1
  244. qiskit/quantum_info/operators/symplectic/pauli.py +2 -0
  245. qiskit/quantum_info/operators/symplectic/pauli_list.py +4 -4
  246. qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py +23 -2
  247. qiskit/quantum_info/states/densitymatrix.py +5 -5
  248. qiskit/quantum_info/states/stabilizerstate.py +1 -1
  249. qiskit/quantum_info/states/statevector.py +6 -6
  250. qiskit/result/mitigation/base_readout_mitigator.py +1 -1
  251. qiskit/result/mitigation/correlated_readout_mitigator.py +9 -1
  252. qiskit/result/mitigation/local_readout_mitigator.py +9 -1
  253. qiskit/result/mitigation/utils.py +57 -0
  254. qiskit/scheduler/config.py +2 -0
  255. qiskit/scheduler/methods/basic.py +3 -0
  256. qiskit/scheduler/schedule_circuit.py +2 -0
  257. qiskit/scheduler/sequence.py +2 -0
  258. qiskit/synthesis/__init__.py +25 -0
  259. qiskit/synthesis/arithmetic/__init__.py +16 -0
  260. qiskit/synthesis/arithmetic/adders/__init__.py +17 -0
  261. qiskit/synthesis/arithmetic/adders/cdkm_ripple_carry_adder.py +154 -0
  262. qiskit/synthesis/arithmetic/adders/draper_qft_adder.py +103 -0
  263. qiskit/synthesis/arithmetic/adders/vbe_ripple_carry_adder.py +161 -0
  264. qiskit/synthesis/arithmetic/multipliers/__init__.py +16 -0
  265. qiskit/synthesis/arithmetic/multipliers/hrs_cumulative_multiplier.py +102 -0
  266. qiskit/synthesis/arithmetic/multipliers/rg_qft_multiplier.py +99 -0
  267. qiskit/synthesis/clifford/clifford_decompose_bm.py +1 -2
  268. qiskit/synthesis/clifford/clifford_decompose_greedy.py +3 -2
  269. qiskit/synthesis/clifford/clifford_decompose_layers.py +2 -1
  270. qiskit/synthesis/evolution/__init__.py +1 -0
  271. qiskit/synthesis/evolution/lie_trotter.py +16 -42
  272. qiskit/synthesis/evolution/pauli_network.py +80 -0
  273. qiskit/synthesis/evolution/product_formula.py +165 -238
  274. qiskit/synthesis/evolution/qdrift.py +36 -29
  275. qiskit/synthesis/evolution/suzuki_trotter.py +87 -27
  276. qiskit/synthesis/multi_controlled/__init__.py +1 -0
  277. qiskit/synthesis/multi_controlled/mcmt_vchain.py +52 -0
  278. qiskit/synthesis/qft/qft_decompose_full.py +19 -1
  279. qiskit/synthesis/qft/qft_decompose_lnn.py +2 -1
  280. qiskit/synthesis/stabilizer/stabilizer_decompose.py +2 -1
  281. qiskit/synthesis/two_qubit/two_qubit_decompose.py +4 -63
  282. qiskit/synthesis/unitary/qsd.py +5 -5
  283. qiskit/transpiler/__init__.py +21 -14
  284. qiskit/transpiler/basepasses.py +1 -1
  285. qiskit/transpiler/passes/__init__.py +2 -0
  286. qiskit/transpiler/passes/basis/basis_translator.py +9 -565
  287. qiskit/transpiler/passes/basis/decompose.py +45 -12
  288. qiskit/transpiler/passes/basis/unroll_3q_or_more.py +1 -1
  289. qiskit/transpiler/passes/basis/unroll_custom_definitions.py +1 -1
  290. qiskit/transpiler/passes/calibration/pulse_gate.py +4 -2
  291. qiskit/transpiler/passes/calibration/rx_builder.py +11 -7
  292. qiskit/transpiler/passes/calibration/rzx_builder.py +46 -30
  293. qiskit/transpiler/passes/layout/disjoint_utils.py +15 -13
  294. qiskit/transpiler/passes/layout/sabre_layout.py +7 -2
  295. qiskit/transpiler/passes/layout/sabre_pre_layout.py +5 -0
  296. qiskit/transpiler/passes/optimization/__init__.py +1 -0
  297. qiskit/transpiler/passes/optimization/collect_cliffords.py +19 -3
  298. qiskit/transpiler/passes/optimization/collect_linear_functions.py +1 -1
  299. qiskit/transpiler/passes/optimization/collect_multiqubit_blocks.py +2 -2
  300. qiskit/transpiler/passes/optimization/commutative_inverse_cancellation.py +1 -1
  301. qiskit/transpiler/passes/optimization/consolidate_blocks.py +48 -131
  302. qiskit/transpiler/passes/optimization/echo_rzx_weyl_decomposition.py +4 -2
  303. qiskit/transpiler/passes/optimization/elide_permutations.py +9 -32
  304. qiskit/transpiler/passes/optimization/optimize_1q_decomposition.py +5 -11
  305. qiskit/transpiler/passes/optimization/optimize_1q_gates.py +1 -1
  306. qiskit/transpiler/passes/optimization/optimize_swap_before_measure.py +1 -1
  307. qiskit/transpiler/passes/optimization/remove_identity_equiv.py +69 -0
  308. qiskit/transpiler/passes/optimization/template_matching/backward_match.py +5 -5
  309. qiskit/transpiler/passes/optimization/template_matching/forward_match.py +4 -4
  310. qiskit/transpiler/passes/optimization/template_matching/template_substitution.py +2 -2
  311. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/commuting_2q_gate_router.py +1 -1
  312. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/swap_strategy.py +1 -1
  313. qiskit/transpiler/passes/routing/sabre_swap.py +7 -3
  314. qiskit/transpiler/passes/routing/star_prerouting.py +2 -2
  315. qiskit/transpiler/passes/scheduling/alap.py +1 -1
  316. qiskit/transpiler/passes/scheduling/alignments/align_measures.py +2 -2
  317. qiskit/transpiler/passes/scheduling/alignments/check_durations.py +1 -1
  318. qiskit/transpiler/passes/scheduling/alignments/pulse_gate_validation.py +2 -0
  319. qiskit/transpiler/passes/scheduling/alignments/reschedule.py +2 -2
  320. qiskit/transpiler/passes/scheduling/asap.py +1 -1
  321. qiskit/transpiler/passes/scheduling/base_scheduler.py +14 -12
  322. qiskit/transpiler/passes/scheduling/dynamical_decoupling.py +9 -4
  323. qiskit/transpiler/passes/scheduling/padding/base_padding.py +1 -1
  324. qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py +16 -5
  325. qiskit/transpiler/passes/scheduling/padding/pad_delay.py +4 -1
  326. qiskit/transpiler/passes/scheduling/scheduling/base_scheduler.py +6 -2
  327. qiskit/transpiler/passes/scheduling/time_unit_conversion.py +9 -4
  328. qiskit/transpiler/passes/synthesis/high_level_synthesis.py +262 -99
  329. qiskit/transpiler/passes/synthesis/hls_plugins.py +637 -7
  330. qiskit/transpiler/passes/synthesis/solovay_kitaev_synthesis.py +3 -3
  331. qiskit/transpiler/passes/synthesis/unitary_synthesis.py +55 -34
  332. qiskit/transpiler/passes/utils/barrier_before_final_measurements.py +2 -56
  333. qiskit/transpiler/passes/utils/convert_conditions_to_if_ops.py +5 -0
  334. qiskit/transpiler/passes/utils/gate_direction.py +12 -275
  335. qiskit/transpiler/passes/utils/gates_basis.py +7 -30
  336. qiskit/transpiler/passes/utils/merge_adjacent_barriers.py +2 -1
  337. qiskit/transpiler/passmanager_config.py +22 -4
  338. qiskit/transpiler/preset_passmanagers/builtin_plugins.py +40 -14
  339. qiskit/transpiler/preset_passmanagers/common.py +5 -3
  340. qiskit/transpiler/preset_passmanagers/generate_preset_pass_manager.py +125 -42
  341. qiskit/transpiler/preset_passmanagers/plugin.py +1 -1
  342. qiskit/transpiler/target.py +74 -16
  343. qiskit/utils/deprecate_pulse.py +119 -0
  344. qiskit/visualization/circuit/_utils.py +2 -2
  345. qiskit/visualization/circuit/circuit_visualization.py +3 -2
  346. qiskit/visualization/circuit/matplotlib.py +1 -1
  347. qiskit/visualization/dag_visualization.py +1 -1
  348. qiskit/visualization/pass_manager_visualization.py +3 -14
  349. qiskit/visualization/pulse_v2/interface.py +3 -1
  350. qiskit/visualization/timeline/core.py +25 -2
  351. qiskit/visualization/timeline/interface.py +12 -0
  352. {qiskit-1.3.0b1.dist-info → qiskit-1.3.0rc2.dist-info}/METADATA +9 -8
  353. {qiskit-1.3.0b1.dist-info → qiskit-1.3.0rc2.dist-info}/RECORD +357 -346
  354. {qiskit-1.3.0b1.dist-info → qiskit-1.3.0rc2.dist-info}/WHEEL +1 -1
  355. {qiskit-1.3.0b1.dist-info → qiskit-1.3.0rc2.dist-info}/entry_points.txt +19 -0
  356. qiskit/circuit/library/data_preparation/zz_feature_map.py +0 -118
  357. qiskit/synthesis/two_qubit/weyl.py +0 -97
  358. qiskit/transpiler/passes/synthesis/qubit_tracker.py +0 -132
  359. {qiskit-1.3.0b1.dist-info → qiskit-1.3.0rc2.dist-info}/LICENSE.txt +0 -0
  360. {qiskit-1.3.0b1.dist-info → qiskit-1.3.0rc2.dist-info}/top_level.txt +0 -0
@@ -17,12 +17,13 @@ from __future__ import annotations
17
17
  import warnings
18
18
  from collections import defaultdict
19
19
  from dataclasses import dataclass
20
- from typing import Iterable
20
+ from typing import Any, Iterable, Union
21
21
 
22
22
  import numpy as np
23
23
  from numpy.typing import NDArray
24
24
 
25
25
  from qiskit.circuit import QuantumCircuit
26
+ from qiskit.exceptions import QiskitError
26
27
  from qiskit.primitives.backend_estimator import _run_circuits
27
28
  from qiskit.primitives.base import BaseSamplerV2
28
29
  from qiskit.primitives.containers import (
@@ -53,6 +54,11 @@ class Options:
53
54
  Default: None.
54
55
  """
55
56
 
57
+ run_options: dict[str, Any] | None = None
58
+ """A dictionary of options to pass to the backend's ``run()`` method.
59
+ Default: None (no option passed to backend's ``run`` method)
60
+ """
61
+
56
62
 
57
63
  @dataclass
58
64
  class _MeasureInfo:
@@ -62,6 +68,16 @@ class _MeasureInfo:
62
68
  start: int
63
69
 
64
70
 
71
+ ResultMemory = Union[list[str], list[list[float]], list[list[list[float]]]]
72
+ """Type alias for possible level 2 and level 1 result memory formats. For level
73
+ 2, the format is a list of bit strings. For level 1, format can be either a
74
+ list of I/Q pairs (list with two floats) for each memory slot if using
75
+ ``meas_return=avg`` or a list of of lists of I/Q pairs if using
76
+ ``meas_return=single`` with the outer list indexing shot number and the inner
77
+ list indexing memory slot.
78
+ """
79
+
80
+
65
81
  class BackendSamplerV2(BaseSamplerV2):
66
82
  """Evaluates bitstrings for provided quantum circuits
67
83
 
@@ -91,6 +107,9 @@ class BackendSamplerV2(BaseSamplerV2):
91
107
  * ``seed_simulator``: The seed to use in the simulator. If None, a random seed will be used.
92
108
  Default: None.
93
109
 
110
+ * ``run_options``: A dictionary of options to pass through to the ``run()``
111
+ method of the wrapped :class:`~.BackendV2` instance.
112
+
94
113
  .. note::
95
114
 
96
115
  This class requires a backend that supports ``memory`` option.
@@ -165,19 +184,27 @@ class BackendSamplerV2(BaseSamplerV2):
165
184
  for circuits in bound_circuits:
166
185
  flatten_circuits.extend(np.ravel(circuits).tolist())
167
186
 
187
+ run_opts = self._options.run_options or {}
168
188
  # run circuits
169
189
  results, _ = _run_circuits(
170
190
  flatten_circuits,
171
191
  self._backend,
192
+ clear_metadata=False,
172
193
  memory=True,
173
194
  shots=shots,
174
195
  seed_simulator=self._options.seed_simulator,
196
+ **run_opts,
175
197
  )
176
198
  result_memory = _prepare_memory(results)
177
199
 
178
200
  # pack memory to an ndarray of uint8
179
201
  results = []
180
202
  start = 0
203
+ meas_level = (
204
+ None
205
+ if self._options.run_options is None
206
+ else self._options.run_options.get("meas_level")
207
+ )
181
208
  for pub, bound in zip(pubs, bound_circuits):
182
209
  meas_info, max_num_bytes = _analyze_circuit(pub.circuit)
183
210
  end = start + bound.size
@@ -189,6 +216,7 @@ class BackendSamplerV2(BaseSamplerV2):
189
216
  meas_info,
190
217
  max_num_bytes,
191
218
  pub.circuit.metadata,
219
+ meas_level,
192
220
  )
193
221
  )
194
222
  start = end
@@ -197,28 +225,43 @@ class BackendSamplerV2(BaseSamplerV2):
197
225
 
198
226
  def _postprocess_pub(
199
227
  self,
200
- result_memory: list[list[str]],
228
+ result_memory: list[ResultMemory],
201
229
  shots: int,
202
230
  shape: tuple[int, ...],
203
231
  meas_info: list[_MeasureInfo],
204
232
  max_num_bytes: int,
205
233
  circuit_metadata: dict,
234
+ meas_level: int | None,
206
235
  ) -> SamplerPubResult:
207
- """Converts the memory data into an array of bit arrays with the shape of the pub."""
208
- arrays = {
209
- item.creg_name: np.zeros(shape + (shots, item.num_bytes), dtype=np.uint8)
210
- for item in meas_info
211
- }
212
- memory_array = _memory_array(result_memory, max_num_bytes)
213
-
214
- for samples, index in zip(memory_array, np.ndindex(*shape)):
215
- for item in meas_info:
216
- ary = _samples_to_packed_array(samples, item.num_bits, item.start)
217
- arrays[item.creg_name][index] = ary
218
-
219
- meas = {
220
- item.creg_name: BitArray(arrays[item.creg_name], item.num_bits) for item in meas_info
221
- }
236
+ """Converts the memory data into a sampler pub result
237
+
238
+ For level 2 data, the memory data are stored in an array of bit arrays
239
+ with the shape of the pub. For level 1 data, the data are stored in a
240
+ complex numpy array.
241
+ """
242
+ if meas_level == 2 or meas_level is None:
243
+ arrays = {
244
+ item.creg_name: np.zeros(shape + (shots, item.num_bytes), dtype=np.uint8)
245
+ for item in meas_info
246
+ }
247
+ memory_array = _memory_array(result_memory, max_num_bytes)
248
+
249
+ for samples, index in zip(memory_array, np.ndindex(*shape)):
250
+ for item in meas_info:
251
+ ary = _samples_to_packed_array(samples, item.num_bits, item.start)
252
+ arrays[item.creg_name][index] = ary
253
+
254
+ meas = {
255
+ item.creg_name: BitArray(arrays[item.creg_name], item.num_bits)
256
+ for item in meas_info
257
+ }
258
+ elif meas_level == 1:
259
+ raw = np.array(result_memory)
260
+ cplx = raw[..., 0] + 1j * raw[..., 1]
261
+ cplx = np.reshape(cplx, (*shape, *cplx.shape[1:]))
262
+ meas = {item.creg_name: cplx for item in meas_info}
263
+ else:
264
+ raise QiskitError(f"Unsupported meas_level: {meas_level}")
222
265
  return SamplerPubResult(
223
266
  DataBin(**meas, shape=shape),
224
267
  metadata={"shots": shots, "circuit_metadata": circuit_metadata},
@@ -248,7 +291,7 @@ def _analyze_circuit(circuit: QuantumCircuit) -> tuple[list[_MeasureInfo], int]:
248
291
  return meas_info, _min_num_bytes(max_num_bits)
249
292
 
250
293
 
251
- def _prepare_memory(results: list[Result]) -> list[list[str]]:
294
+ def _prepare_memory(results: list[Result]) -> list[ResultMemory]:
252
295
  """Joins splitted results if exceeding max_experiments"""
253
296
  lst = []
254
297
  for res in results:
@@ -92,7 +92,7 @@ class BaseEstimatorV1(BasePrimitive, Generic[T]):
92
92
  # calculate [ <psi1(theta1)|H1|psi1(theta1)> ]
93
93
  job = estimator.run([psi1], [H1], [theta1])
94
94
  job_result = job.result() # It will block until the job finishes.
95
- print(f"The primitive-job finished with result {job_result}"))
95
+ print(f"The primitive-job finished with result {job_result}")
96
96
 
97
97
  # calculate [ <psi1(theta1)|H1|psi1(theta1)>,
98
98
  # <psi2(theta2)|H2|psi2(theta2)>,
@@ -144,7 +144,7 @@ class BaseEstimatorV1(BasePrimitive, Generic[T]):
144
144
 
145
145
  .. code-block:: python
146
146
 
147
- values = parameter_values[i].
147
+ values = parameter_values[i]
148
148
 
149
149
  Args:
150
150
  circuits: one or more circuit objects.
@@ -34,14 +34,22 @@ class DataBin(ShapedMixin):
34
34
 
35
35
  .. code-block:: python
36
36
 
37
+ import numpy as np
38
+ from qiskit.primitives import DataBin, BitArray
39
+
37
40
  data = DataBin(
38
- alpha=BitArray.from_bitstrings(["0010"]),
41
+ alpha=BitArray.from_samples(["0010"]),
39
42
  beta=np.array([1.2])
40
43
  )
41
44
 
42
45
  print("alpha data:", data.alpha)
43
46
  print("beta data:", data.beta)
44
47
 
48
+ .. code-block::
49
+
50
+ alpha data: BitArray(<shape=(), num_shots=1, num_bits=2>)
51
+ beta data: [1.2]
52
+
45
53
  """
46
54
 
47
55
  __slots__ = ("_data", "_shape")
@@ -287,6 +287,6 @@ def _final_measurement_mapping(circuit: QuantumCircuit) -> dict[tuple[ClassicalR
287
287
 
288
288
  def _has_control_flow(circuit: QuantumCircuit) -> bool:
289
289
  return any(
290
- isinstance((op := instruction.operation), ControlFlowOp) or op.condition
290
+ isinstance((op := instruction.operation), ControlFlowOp) or op._condition
291
291
  for instruction in circuit
292
292
  )
@@ -82,7 +82,7 @@ def init_observable(observable: BaseOperator | str) -> SparsePauliOp:
82
82
  since="1.2",
83
83
  additional_msg="Use ``QuantumCircuit.layout`` and ``SparsePauliOp.apply_layout`` "
84
84
  + "to adjust an operator for a layout. Otherwise, use ``mthree.utils.final_measurement_mapping``. "
85
- + "See https://qiskit-extensions.github.io/mthree/apidocs/utils.html for details.",
85
+ + "See <https://qiskit.github.io/qiskit-addon-mthree/apidocs/utils> for details.",
86
86
  )
87
87
  def final_measurement_mapping(circuit: QuantumCircuit) -> dict[int, int]:
88
88
  """Return the final measurement mapping for the circuit.
@@ -160,7 +160,7 @@ steps for writing a provider are:
160
160
  interacting with a running job.
161
161
 
162
162
  For a simple example of a provider, see the
163
- `qiskit-aqt-provider <https://github.com/Qiskit-Partners/qiskit-aqt-provider>`__
163
+ `qiskit-aqt-provider <https://github.com/qiskit-community/qiskit-aqt-provider>`__
164
164
 
165
165
  Provider
166
166
  --------
@@ -307,7 +307,7 @@ Custom Basis Gates
307
307
 
308
308
  def _define(self):
309
309
  qc = QuantumCircuit(1)
310
- q.ry(np.pi / 2, 0)
310
+ qc.ry(np.pi / 2, 0)
311
311
  self.definition = qc
312
312
 
313
313
  The key thing to ensure is that for any custom gates in your Backend's basis set
@@ -664,7 +664,7 @@ that abstract away the mechanics of getting the best result efficiently, to
664
664
  concentrate on higher level applications using these outputs.
665
665
 
666
666
  For example, if your backends were well suited to leverage
667
- `mthree <https://github.com/Qiskit-Partners/mthree/>`__ measurement
667
+ `mthree <https://github.com/Qiskit/qiskit-addon-mthree>`__ measurement
668
668
  mitigation to improve the quality of the results, you could implement a
669
669
  provider-specific :class:`~.Sampler` implementation that leverages the
670
670
  ``M3Mitigation`` class internally to run the circuits and return
@@ -24,6 +24,7 @@ from qiskit.providers.provider import Provider
24
24
  from qiskit.providers.models.backendstatus import BackendStatus
25
25
  from qiskit.circuit.gate import Instruction
26
26
  from qiskit.utils import deprecate_func
27
+ from qiskit.utils.deprecate_pulse import deprecate_pulse_dependency
27
28
 
28
29
 
29
30
  class Backend:
@@ -485,10 +486,16 @@ class BackendV2(Backend, ABC):
485
486
  raise NotImplementedError
486
487
 
487
488
  @property
489
+ @deprecate_pulse_dependency(is_property=True)
488
490
  def instruction_schedule_map(self):
489
491
  """Return the :class:`~qiskit.pulse.InstructionScheduleMap` for the
490
492
  instructions defined in this backend's target."""
491
- return self.target.instruction_schedule_map()
493
+ return self._instruction_schedule_map
494
+
495
+ @property
496
+ def _instruction_schedule_map(self):
497
+ """An alternative private path to be used internally to avoid pulse deprecation warnings."""
498
+ return self.target._get_instruction_schedule_map()
492
499
 
493
500
  def qubit_properties(
494
501
  self, qubit: Union[int, List[int]]
@@ -524,6 +531,7 @@ class BackendV2(Backend, ABC):
524
531
  return self.target.qubit_properties[qubit]
525
532
  return [self.target.qubit_properties[q] for q in qubit]
526
533
 
534
+ @deprecate_pulse_dependency
527
535
  def drive_channel(self, qubit: int):
528
536
  """Return the drive channel for the given qubit.
529
537
 
@@ -539,6 +547,7 @@ class BackendV2(Backend, ABC):
539
547
  """
540
548
  raise NotImplementedError
541
549
 
550
+ @deprecate_pulse_dependency
542
551
  def measure_channel(self, qubit: int):
543
552
  """Return the measure stimulus channel for the given qubit.
544
553
 
@@ -554,6 +563,7 @@ class BackendV2(Backend, ABC):
554
563
  """
555
564
  raise NotImplementedError
556
565
 
566
+ @deprecate_pulse_dependency
557
567
  def acquire_channel(self, qubit: int):
558
568
  """Return the acquisition channel for the given qubit.
559
569
 
@@ -569,6 +579,7 @@ class BackendV2(Backend, ABC):
569
579
  """
570
580
  raise NotImplementedError
571
581
 
582
+ @deprecate_pulse_dependency
572
583
  def control_channel(self, qubits: Iterable[int]):
573
584
  """Return the secondary drive channel for the given qubit
574
585
 
@@ -25,10 +25,13 @@ from qiskit.circuit.controlflow import CONTROL_FLOW_OP_NAMES
25
25
  from qiskit.providers.models.pulsedefaults import PulseDefaults
26
26
  from qiskit.providers.options import Options
27
27
  from qiskit.providers.exceptions import BackendPropertyError
28
+ from qiskit.utils.deprecate_pulse import deprecate_pulse_arg, deprecate_pulse_dependency
29
+
28
30
 
29
31
  logger = logging.getLogger(__name__)
30
32
 
31
33
 
34
+ @deprecate_pulse_arg("defaults")
32
35
  def convert_to_target(
33
36
  configuration: BackendConfiguration,
34
37
  properties: BackendProperties = None,
@@ -46,7 +49,7 @@ def convert_to_target(
46
49
  Args:
47
50
  configuration: Backend configuration as ``BackendConfiguration``
48
51
  properties: Backend property dictionary or ``BackendProperties``
49
- defaults: Backend pulse defaults dictionary or ``PulseDefaults``
52
+ defaults: DEPRECATED. Backend pulse defaults dictionary or ``PulseDefaults``
50
53
  custom_name_mapping: A name mapping must be supplied for the operation
51
54
  not included in Qiskit Standard Gate name mapping, otherwise the operation
52
55
  will be dropped in the resulting ``Target`` object.
@@ -56,7 +59,20 @@ def convert_to_target(
56
59
  Returns:
57
60
  A ``Target`` instance.
58
61
  """
62
+ return _convert_to_target(
63
+ configuration, properties, defaults, custom_name_mapping, add_delay, filter_faulty
64
+ )
65
+
59
66
 
67
+ def _convert_to_target(
68
+ configuration: BackendConfiguration,
69
+ properties: BackendProperties = None,
70
+ defaults: PulseDefaults = None,
71
+ custom_name_mapping: Optional[Dict[str, Any]] = None,
72
+ add_delay: bool = True,
73
+ filter_faulty: bool = True,
74
+ ):
75
+ """An alternative private path to avoid pulse deprecations"""
60
76
  # importing packages where they are needed, to avoid cyclic-import.
61
77
  # pylint: disable=cyclic-import
62
78
  from qiskit.transpiler.target import (
@@ -265,7 +281,7 @@ def convert_to_target(
265
281
 
266
282
  entry = inst_sched_map._get_calibration_entry(name, qubits)
267
283
  try:
268
- prop_name_map[name][qubits].calibration = entry
284
+ prop_name_map[name][qubits]._calibration_prop = entry
269
285
  except AttributeError:
270
286
  # if instruction properties are "None", add entry
271
287
  prop_name_map[name].update({qubits: InstructionProperties(None, None, entry)})
@@ -410,7 +426,7 @@ class BackendV2Converter(BackendV2):
410
426
  :rtype: Target
411
427
  """
412
428
  if self._target is None:
413
- self._target = convert_to_target(
429
+ self._target = _convert_to_target(
414
430
  configuration=self._config,
415
431
  properties=self._properties,
416
432
  defaults=self._defaults,
@@ -436,15 +452,19 @@ class BackendV2Converter(BackendV2):
436
452
  def meas_map(self) -> List[List[int]]:
437
453
  return self._config.meas_map
438
454
 
455
+ @deprecate_pulse_dependency
439
456
  def drive_channel(self, qubit: int):
440
457
  return self._config.drive(qubit)
441
458
 
459
+ @deprecate_pulse_dependency
442
460
  def measure_channel(self, qubit: int):
443
461
  return self._config.measure(qubit)
444
462
 
463
+ @deprecate_pulse_dependency
445
464
  def acquire_channel(self, qubit: int):
446
465
  return self._config.acquire(qubit)
447
466
 
467
+ @deprecate_pulse_dependency
448
468
  def control_channel(self, qubits: Iterable[int]):
449
469
  return self._config.control(qubits)
450
470
 
@@ -48,6 +48,7 @@ from qiskit.providers.options import Options
48
48
  from qiskit.qobj import QasmQobj, QasmQobjConfig, QasmQobjExperiment
49
49
  from qiskit.result import Result
50
50
  from qiskit.transpiler import Target
51
+ from qiskit.utils.deprecation import deprecate_func
51
52
 
52
53
  from .basic_provider_job import BasicProviderJob
53
54
  from .basic_provider_tools import single_gate_matrix
@@ -212,6 +213,14 @@ class BasicSimulator(BackendV2):
212
213
  )
213
214
  return target
214
215
 
216
+ @deprecate_func(
217
+ since="1.3.0",
218
+ removal_timeline="in Qiskit 2.0.0",
219
+ additional_msg="The `BackendConfiguration` class is part of the deprecated `BackendV1` "
220
+ "workflow, and no longer necessary for `BackendV2`. The individual configuration elements "
221
+ "can be retrieved directly from the backend or from the contained `Target` instance "
222
+ "(`backend.target)`).",
223
+ )
215
224
  def configuration(self) -> BackendConfiguration:
216
225
  """Return the simulator backend configuration.
217
226
 
@@ -248,7 +257,7 @@ class BasicSimulator(BackendV2):
248
257
  backend_name=self.name,
249
258
  backend_version=self.backend_version,
250
259
  n_qubits=self.num_qubits,
251
- basis_gates=self.target.operation_names,
260
+ basis_gates=list(self.target.operation_names),
252
261
  gates=gates,
253
262
  local=True,
254
263
  simulator=True,
@@ -532,7 +541,8 @@ class BasicSimulator(BackendV2):
532
541
  "initial_statevector": np.array([1, 0, 0, 1j]) / math.sqrt(2),
533
542
  }
534
543
  """
535
- # TODO: replace assemble with new run flow
544
+ # TODO: replace assemble with new run flow. If this is not achieved before 2.0,
545
+ # see removal note on `def _assemble`, L192 of qiskit/compiler/assembler.py
536
546
  from qiskit.compiler.assembler import _assemble
537
547
 
538
548
  out_options = {}
@@ -14,6 +14,8 @@
14
14
  Fake backend abstract class for mock backends supporting OpenPulse.
15
15
  """
16
16
 
17
+ import warnings
18
+
17
19
  from qiskit.exceptions import QiskitError
18
20
  from qiskit.providers.models.backendconfiguration import PulseBackendConfiguration
19
21
  from qiskit.providers.models.pulsedefaults import PulseDefaults
@@ -30,7 +32,10 @@ class FakePulseBackend(FakeQasmBackend):
30
32
  def defaults(self):
31
33
  """Returns a snapshot of device defaults"""
32
34
  if not self._defaults:
33
- self._set_defaults_from_json()
35
+ with warnings.catch_warnings():
36
+ warnings.simplefilter(action="ignore", category=DeprecationWarning)
37
+ # Filter deprecation warnings emitted from Qiskit Pulse
38
+ self._set_defaults_from_json()
34
39
  return self._defaults
35
40
 
36
41
  def _set_defaults_from_json(self):
@@ -42,6 +42,7 @@ from qiskit.qobj.converters.pulse_instruction import QobjToInstructionConverter
42
42
  from qiskit.pulse.calibration_entries import PulseQobjDef
43
43
  from qiskit.providers.models.pulsedefaults import MeasurementKernel, Discriminator
44
44
  from qiskit.qobj.pulse_qobj import QobjMeasurementOption
45
+ from qiskit.utils.deprecate_pulse import deprecate_pulse_dependency, deprecate_pulse_arg
45
46
 
46
47
  # Noise default values/ranges for duration and error of supported
47
48
  # instructions. There are two possible formats:
@@ -518,6 +519,8 @@ class GenericBackendV2(BackendV2):
518
519
  transpilation.
519
520
  """
520
521
 
522
+ @deprecate_pulse_arg("pulse_channels")
523
+ @deprecate_pulse_arg("calibrate_instructions")
521
524
  def __init__(
522
525
  self,
523
526
  num_qubits: int,
@@ -560,7 +563,7 @@ class GenericBackendV2(BackendV2):
560
563
  control_flow: Flag to enable control flow directives on the target
561
564
  (defaults to False).
562
565
 
563
- calibrate_instructions: Instruction calibration settings, this argument
566
+ calibrate_instructions: DEPRECATED. Instruction calibration settings, this argument
564
567
  supports both boolean and :class:`.InstructionScheduleMap` as
565
568
  input types, and is ``None`` by default:
566
569
 
@@ -578,7 +581,7 @@ class GenericBackendV2(BackendV2):
578
581
 
579
582
  seed: Optional seed for generation of default values.
580
583
 
581
- pulse_channels: If true, sets default pulse channel information on the backend.
584
+ pulse_channels: DEPRECATED. If true, sets default pulse channel information on the backend.
582
585
 
583
586
  noise_info: If true, associates gates and qubits with default noise information.
584
587
  """
@@ -648,14 +651,17 @@ class GenericBackendV2(BackendV2):
648
651
  return self._target.concurrent_measurements
649
652
 
650
653
  def _build_default_channels(self) -> None:
651
- channels_map = {
652
- "acquire": {(i,): [pulse.AcquireChannel(i)] for i in range(self.num_qubits)},
653
- "drive": {(i,): [pulse.DriveChannel(i)] for i in range(self.num_qubits)},
654
- "measure": {(i,): [pulse.MeasureChannel(i)] for i in range(self.num_qubits)},
655
- "control": {
656
- (edge): [pulse.ControlChannel(i)] for i, edge in enumerate(self._coupling_map)
657
- },
658
- }
654
+ with warnings.catch_warnings():
655
+ warnings.simplefilter(action="ignore", category=DeprecationWarning)
656
+ # Prevent pulse deprecation warnings from being emitted
657
+ channels_map = {
658
+ "acquire": {(i,): [pulse.AcquireChannel(i)] for i in range(self.num_qubits)},
659
+ "drive": {(i,): [pulse.DriveChannel(i)] for i in range(self.num_qubits)},
660
+ "measure": {(i,): [pulse.MeasureChannel(i)] for i in range(self.num_qubits)},
661
+ "control": {
662
+ (edge): [pulse.ControlChannel(i)] for i, edge in enumerate(self._coupling_map)
663
+ },
664
+ }
659
665
  setattr(self, "channels_map", channels_map)
660
666
 
661
667
  def _get_noise_defaults(self, name: str, num_qubits: int) -> tuple:
@@ -867,27 +873,33 @@ class GenericBackendV2(BackendV2):
867
873
  duration, error = (
868
874
  noise_params
869
875
  if len(noise_params) == 2
870
- else (self._rng.uniform(*noise_params[:2]), self._rng.uniform(*noise_params[2:]))
871
- )
872
- if (
873
- calibration_inst_map is not None
874
- and instruction.name not in ["reset", "delay"]
875
- and qarg in calibration_inst_map.qubits_with_instruction(instruction.name)
876
- ):
877
- # Do NOT call .get method. This parses Qobj immediately.
878
- # This operation is computationally expensive and should be bypassed.
879
- calibration_entry = calibration_inst_map._get_calibration_entry(
880
- instruction.name, qargs
876
+ else (
877
+ self._rng.uniform(*noise_params[:2]),
878
+ self._rng.uniform(*noise_params[2:]),
881
879
  )
882
- else:
883
- calibration_entry = None
884
- if duration is not None and len(noise_params) > 2:
885
- # Ensure exact conversion of duration from seconds to dt
886
- dt = _QUBIT_PROPERTIES["dt"]
887
- rounded_duration = round(duration / dt) * dt
888
- # Clamp rounded duration to be between min and max values
889
- duration = max(noise_params[0], min(rounded_duration, noise_params[1]))
890
- props.update({qargs: InstructionProperties(duration, error, calibration_entry)})
880
+ )
881
+ with warnings.catch_warnings():
882
+ warnings.simplefilter(action="ignore", category=DeprecationWarning)
883
+ # Prevent pulse deprecations from being emitted
884
+ if (
885
+ calibration_inst_map is not None
886
+ and instruction.name not in ["reset", "delay"]
887
+ and qarg in calibration_inst_map.qubits_with_instruction(instruction.name)
888
+ ):
889
+ # Do NOT call .get method. This parses Qobj immediately.
890
+ # This operation is computationally expensive and should be bypassed.
891
+ calibration_entry = calibration_inst_map._get_calibration_entry(
892
+ instruction.name, qargs
893
+ )
894
+ else:
895
+ calibration_entry = None
896
+ if duration is not None and len(noise_params) > 2:
897
+ # Ensure exact conversion of duration from seconds to dt
898
+ dt = _QUBIT_PROPERTIES["dt"]
899
+ rounded_duration = round(duration / dt) * dt
900
+ # Clamp rounded duration to be between min and max values
901
+ duration = max(noise_params[0], min(rounded_duration, noise_params[1]))
902
+ props.update({qargs: InstructionProperties(duration, error, calibration_entry)})
891
903
  self._target.add_instruction(instruction, props)
892
904
 
893
905
  # The "measure" instruction calibrations need to be added qubit by qubit, once the
@@ -990,6 +1002,7 @@ class GenericBackendV2(BackendV2):
990
1002
  else:
991
1003
  return BasicSimulator._default_options()
992
1004
 
1005
+ @deprecate_pulse_dependency
993
1006
  def drive_channel(self, qubit: int):
994
1007
  drive_channels_map = getattr(self, "channels_map", {}).get("drive", {})
995
1008
  qubits = (qubit,)
@@ -997,6 +1010,7 @@ class GenericBackendV2(BackendV2):
997
1010
  return drive_channels_map[qubits][0]
998
1011
  return None
999
1012
 
1013
+ @deprecate_pulse_dependency
1000
1014
  def measure_channel(self, qubit: int):
1001
1015
  measure_channels_map = getattr(self, "channels_map", {}).get("measure", {})
1002
1016
  qubits = (qubit,)
@@ -1004,6 +1018,7 @@ class GenericBackendV2(BackendV2):
1004
1018
  return measure_channels_map[qubits][0]
1005
1019
  return None
1006
1020
 
1021
+ @deprecate_pulse_dependency
1007
1022
  def acquire_channel(self, qubit: int):
1008
1023
  acquire_channels_map = getattr(self, "channels_map", {}).get("acquire", {})
1009
1024
  qubits = (qubit,)
@@ -1011,6 +1026,7 @@ class GenericBackendV2(BackendV2):
1011
1026
  return acquire_channels_map[qubits][0]
1012
1027
  return None
1013
1028
 
1029
+ @deprecate_pulse_dependency
1014
1030
  def control_channel(self, qubits: Iterable[int]):
1015
1031
  control_channels_map = getattr(self, "channels_map", {}).get("control", {})
1016
1032
  qubits = tuple(qubits)
@@ -18,6 +18,7 @@ from typing import Any, Dict, List
18
18
  from qiskit.pulse.instruction_schedule_map import InstructionScheduleMap, PulseQobjDef
19
19
  from qiskit.qobj import PulseLibraryItem, PulseQobjInstruction
20
20
  from qiskit.qobj.converters import QobjToInstructionConverter
21
+ from qiskit.utils.deprecate_pulse import deprecate_pulse_dependency
21
22
 
22
23
 
23
24
  class MeasurementKernel:
@@ -169,6 +170,7 @@ class PulseDefaults:
169
170
 
170
171
  _data = {}
171
172
 
173
+ @deprecate_pulse_dependency
172
174
  def __init__(
173
175
  self,
174
176
  qubit_freq_est: List[float],