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
qiskit/circuit/barrier.py CHANGED
@@ -19,6 +19,7 @@ with the :meth:`~qiskit.circuit.QuantumCircuit.barrier` method.
19
19
  from __future__ import annotations
20
20
 
21
21
  from qiskit.exceptions import QiskitError
22
+ from qiskit.utils import deprecate_func
22
23
  from .instruction import Instruction
23
24
 
24
25
 
@@ -44,5 +45,6 @@ class Barrier(Instruction):
44
45
  """Special case. Return self."""
45
46
  return Barrier(self.num_qubits)
46
47
 
48
+ @deprecate_func(since="1.3.0", removal_timeline="in 2.0.0")
47
49
  def c_if(self, classical, val):
48
50
  raise QiskitError("Barriers are compiler directives and cannot be conditional.")
@@ -284,7 +284,7 @@ class InstructionPlaceholder(Instruction, abc.ABC):
284
284
  The same instruction instance that was passed, but mutated to propagate the tracked
285
285
  changes to this class.
286
286
  """
287
- instruction.condition = self.condition
287
+ instruction._condition = self._condition
288
288
  return instruction
289
289
 
290
290
  # Provide some better error messages, just in case something goes wrong during development and
@@ -639,8 +639,8 @@ class ControlFlowBuilderBlock(CircuitScopeInterface):
639
639
  # a register is already present, so we use our own tracking.
640
640
  self.add_register(register)
641
641
  out.add_register(register)
642
- if getattr(op, "condition", None) is not None:
643
- for register in condition_resources(op.condition).cregs:
642
+ if getattr(op, "_condition", None) is not None:
643
+ for register in condition_resources(op._condition).cregs:
644
644
  if register not in self.registers:
645
645
  self.add_register(register)
646
646
  out.add_register(register)
@@ -87,12 +87,20 @@ class IfElseOp(ControlFlowOp):
87
87
 
88
88
  super().__init__("if_else", num_qubits, num_clbits, [true_body, false_body], label=label)
89
89
 
90
- self.condition = validate_condition(condition)
90
+ self._condition = validate_condition(condition)
91
91
 
92
92
  @property
93
93
  def params(self):
94
94
  return self._params
95
95
 
96
+ @property
97
+ def condition(self):
98
+ return self._condition
99
+
100
+ @condition.setter
101
+ def condition(self, value):
102
+ self._condition = value
103
+
96
104
  @params.setter
97
105
  def params(self, parameters):
98
106
  # pylint: disable=cyclic-import
@@ -152,7 +160,7 @@ class IfElseOp(ControlFlowOp):
152
160
  true_body, false_body = (
153
161
  ablock for ablock, _ in itertools.zip_longest(blocks, range(2), fillvalue=None)
154
162
  )
155
- return IfElseOp(self.condition, true_body, false_body=false_body, label=self.label)
163
+ return IfElseOp(self._condition, true_body, false_body=false_body, label=self.label)
156
164
 
157
165
  def c_if(self, classical, val):
158
166
  raise NotImplementedError(
@@ -200,7 +208,7 @@ class IfElsePlaceholder(InstructionPlaceholder):
200
208
  "if_else", len(self.__resources.qubits), len(self.__resources.clbits), [], label=label
201
209
  )
202
210
  # Set the condition after super().__init__() has initialized it to None.
203
- self.condition = validate_condition(condition)
211
+ self._condition = validate_condition(condition)
204
212
 
205
213
  def with_false_block(self, false_block: ControlFlowBuilderBlock) -> "IfElsePlaceholder":
206
214
  """Return a new placeholder instruction, with the false block set to the given value,
@@ -225,7 +233,7 @@ class IfElsePlaceholder(InstructionPlaceholder):
225
233
  false_bits = false_block.qubits() | false_block.clbits()
226
234
  true_block.add_bits(false_bits - true_bits)
227
235
  false_block.add_bits(true_bits - false_bits)
228
- return type(self)(self.condition, true_block, false_block, label=self.label)
236
+ return type(self)(self._condition, true_block, false_block, label=self.label)
229
237
 
230
238
  def registers(self):
231
239
  """Get the registers used by the interior blocks."""
@@ -288,7 +296,7 @@ class IfElsePlaceholder(InstructionPlaceholder):
288
296
  )
289
297
  return (
290
298
  self._copy_mutable_properties(
291
- IfElseOp(self.condition, true_body, false_body, label=self.label)
299
+ IfElseOp(self._condition, true_body, false_body, label=self.label)
292
300
  ),
293
301
  InstructionResources(
294
302
  qubits=tuple(true_body.qubits),
@@ -53,12 +53,20 @@ class WhileLoopOp(ControlFlowOp):
53
53
  num_clbits = body.num_clbits
54
54
 
55
55
  super().__init__("while_loop", num_qubits, num_clbits, [body], label=label)
56
- self.condition = validate_condition(condition)
56
+ self._condition = validate_condition(condition)
57
57
 
58
58
  @property
59
59
  def params(self):
60
60
  return self._params
61
61
 
62
+ @property
63
+ def condition(self):
64
+ return self._condition
65
+
66
+ @condition.setter
67
+ def condition(self, value):
68
+ self._condition = value
69
+
62
70
  @params.setter
63
71
  def params(self, parameters):
64
72
  # pylint: disable=cyclic-import
@@ -88,7 +96,7 @@ class WhileLoopOp(ControlFlowOp):
88
96
 
89
97
  def replace_blocks(self, blocks):
90
98
  (body,) = blocks
91
- return WhileLoopOp(self.condition, body, label=self.label)
99
+ return WhileLoopOp(self._condition, body, label=self.label)
92
100
 
93
101
  def c_if(self, classical, val):
94
102
  raise NotImplementedError(
qiskit/circuit/delay.py CHANGED
@@ -19,6 +19,7 @@ from qiskit.circuit.instruction import Instruction
19
19
  from qiskit.circuit.gate import Gate
20
20
  from qiskit.circuit import _utils
21
21
  from qiskit.circuit.parameterexpression import ParameterExpression
22
+ from qiskit.utils import deprecate_func
22
23
 
23
24
 
24
25
  @_utils.with_gate_array(np.eye(2, dtype=complex))
@@ -33,8 +34,12 @@ class Delay(Instruction):
33
34
  """
34
35
  if unit not in {"s", "ms", "us", "ns", "ps", "dt"}:
35
36
  raise CircuitError(f"Unknown unit {unit} is specified.")
36
-
37
- super().__init__("delay", 1, 0, params=[duration], unit=unit)
37
+ # Double underscore to differentiate from the private attribute in
38
+ # `Instruction`. This can be changed to `_unit` in 2.0 after we
39
+ # remove `unit` and `duration` from the standard instruction model
40
+ # as it only will exist in `Delay` after that point.
41
+ self.__unit = unit
42
+ super().__init__("delay", 1, 0, params=[duration])
38
43
 
39
44
  broadcast_arguments = Gate.broadcast_arguments
40
45
 
@@ -42,9 +47,21 @@ class Delay(Instruction):
42
47
  """Special case. Return self."""
43
48
  return self
44
49
 
50
+ @deprecate_func(since="1.3.0", removal_timeline="in 2.0.0")
45
51
  def c_if(self, classical, val):
46
52
  raise CircuitError("Conditional Delay is not yet implemented.")
47
53
 
54
+ @property
55
+ def unit(self):
56
+
57
+ return self.__unit
58
+
59
+ @unit.setter
60
+ def unit(self, value):
61
+ if value not in {"s", "ms", "us", "ns", "ps", "dt"}:
62
+ raise CircuitError(f"Unknown unit {value} is specified.")
63
+ self.__unit = value
64
+
48
65
  @property
49
66
  def duration(self):
50
67
  """Get the duration of this delay."""
@@ -81,7 +98,7 @@ class Delay(Instruction):
81
98
  raise CircuitError(
82
99
  f"Duration for Delay instruction must be positive. Found {parameter}"
83
100
  )
84
- if self.unit == "dt":
101
+ if self.__unit == "dt":
85
102
  parameter_int = int(parameter)
86
103
  if parameter != parameter_int:
87
104
  raise CircuitError("Integer duration is expected for 'dt' unit.")
@@ -12,190 +12,24 @@
12
12
 
13
13
  """Gate equivalence library."""
14
14
 
15
- import copy
16
- from collections import namedtuple
17
-
18
15
  from rustworkx.visualization import graphviz_draw
19
16
  import rustworkx as rx
20
17
 
21
- from qiskit.exceptions import InvalidFileError
22
- from .exceptions import CircuitError
23
- from .parameter import Parameter
24
- from .parameterexpression import ParameterExpression
25
18
 
26
- Key = namedtuple("Key", ["name", "num_qubits"])
27
- Equivalence = namedtuple("Equivalence", ["params", "circuit"]) # Ordered to match Gate.params
28
- NodeData = namedtuple("NodeData", ["key", "equivs"])
29
- EdgeData = namedtuple("EdgeData", ["index", "num_gates", "rule", "source"])
19
+ from qiskit.exceptions import InvalidFileError
20
+ from qiskit._accelerate.equivalence import ( # pylint: disable=unused-import
21
+ BaseEquivalenceLibrary,
22
+ Key,
23
+ Equivalence,
24
+ NodeData,
25
+ EdgeData,
26
+ )
30
27
 
31
28
 
32
- class EquivalenceLibrary:
29
+ class EquivalenceLibrary(BaseEquivalenceLibrary):
33
30
  """A library providing a one-way mapping of Gates to their equivalent
34
31
  implementations as QuantumCircuits."""
35
32
 
36
- def __init__(self, *, base=None):
37
- """Create a new equivalence library.
38
-
39
- Args:
40
- base (Optional[EquivalenceLibrary]): Base equivalence library to
41
- be referenced if an entry is not found in this library.
42
- """
43
- self._base = base
44
-
45
- if base is None:
46
- self._graph = rx.PyDiGraph()
47
- self._key_to_node_index = {}
48
- # Some unique identifier for rules.
49
- self._rule_id = 0
50
- else:
51
- self._graph = base._graph.copy()
52
- self._key_to_node_index = copy.deepcopy(base._key_to_node_index)
53
- self._rule_id = base._rule_id
54
-
55
- @property
56
- def graph(self) -> rx.PyDiGraph:
57
- """Return graph representing the equivalence library data.
58
-
59
- This property should be treated as read-only as it provides
60
- a reference to the internal state of the :class:`~.EquivalenceLibrary` object.
61
- If the graph returned by this property is mutated it could corrupt the
62
- the contents of the object. If you need to modify the output ``PyDiGraph``
63
- be sure to make a copy prior to any modification.
64
-
65
- Returns:
66
- PyDiGraph: A graph object with equivalence data in each node.
67
- """
68
- return self._graph
69
-
70
- def _set_default_node(self, key):
71
- """Create a new node if key not found"""
72
- if key not in self._key_to_node_index:
73
- self._key_to_node_index[key] = self._graph.add_node(NodeData(key=key, equivs=[]))
74
- return self._key_to_node_index[key]
75
-
76
- def add_equivalence(self, gate, equivalent_circuit):
77
- """Add a new equivalence to the library. Future queries for the Gate
78
- will include the given circuit, in addition to all existing equivalences
79
- (including those from base).
80
-
81
- Parameterized Gates (those including `qiskit.circuit.Parameters` in their
82
- `Gate.params`) can be marked equivalent to parameterized circuits,
83
- provided the parameters match.
84
-
85
- Args:
86
- gate (Gate): A Gate instance.
87
- equivalent_circuit (QuantumCircuit): A circuit equivalently
88
- implementing the given Gate.
89
- """
90
-
91
- _raise_if_shape_mismatch(gate, equivalent_circuit)
92
- _raise_if_param_mismatch(gate.params, equivalent_circuit.parameters)
93
-
94
- key = Key(name=gate.name, num_qubits=gate.num_qubits)
95
- equiv = Equivalence(params=gate.params.copy(), circuit=equivalent_circuit.copy())
96
-
97
- target = self._set_default_node(key)
98
- self._graph[target].equivs.append(equiv)
99
-
100
- sources = {
101
- Key(name=instruction.operation.name, num_qubits=len(instruction.qubits))
102
- for instruction in equivalent_circuit
103
- }
104
- edges = [
105
- (
106
- self._set_default_node(source),
107
- target,
108
- EdgeData(index=self._rule_id, num_gates=len(sources), rule=equiv, source=source),
109
- )
110
- for source in sources
111
- ]
112
- self._graph.add_edges_from(edges)
113
- self._rule_id += 1
114
-
115
- def has_entry(self, gate):
116
- """Check if a library contains any decompositions for gate.
117
-
118
- Args:
119
- gate (Gate): A Gate instance.
120
-
121
- Returns:
122
- Bool: True if gate has a known decomposition in the library.
123
- False otherwise.
124
- """
125
- key = Key(name=gate.name, num_qubits=gate.num_qubits)
126
-
127
- return key in self._key_to_node_index
128
-
129
- def set_entry(self, gate, entry):
130
- """Set the equivalence record for a Gate. Future queries for the Gate
131
- will return only the circuits provided.
132
-
133
- Parameterized Gates (those including `qiskit.circuit.Parameters` in their
134
- `Gate.params`) can be marked equivalent to parameterized circuits,
135
- provided the parameters match.
136
-
137
- Args:
138
- gate (Gate): A Gate instance.
139
- entry (List['QuantumCircuit']) : A list of QuantumCircuits, each
140
- equivalently implementing the given Gate.
141
- """
142
- for equiv in entry:
143
- _raise_if_shape_mismatch(gate, equiv)
144
- _raise_if_param_mismatch(gate.params, equiv.parameters)
145
-
146
- node_index = self._set_default_node(Key(name=gate.name, num_qubits=gate.num_qubits))
147
- # Remove previous equivalences of this node, leaving in place any later equivalences that
148
- # were added that use `gate`.
149
- self._graph[node_index].equivs.clear()
150
- for parent, child, _ in self._graph.in_edges(node_index):
151
- # `child` should always be ourselves, but there might be parallel edges.
152
- self._graph.remove_edge(parent, child)
153
- for equivalence in entry:
154
- self.add_equivalence(gate, equivalence)
155
-
156
- def get_entry(self, gate):
157
- """Gets the set of QuantumCircuits circuits from the library which
158
- equivalently implement the given Gate.
159
-
160
- Parameterized circuits will have their parameters replaced with the
161
- corresponding entries from Gate.params.
162
-
163
- Args:
164
- gate (Gate) - Gate: A Gate instance.
165
-
166
- Returns:
167
- List[QuantumCircuit]: A list of equivalent QuantumCircuits. If empty,
168
- library contains no known decompositions of Gate.
169
-
170
- Returned circuits will be ordered according to their insertion in
171
- the library, from earliest to latest, from top to base. The
172
- ordering of the StandardEquivalenceLibrary will not generally be
173
- consistent across Qiskit versions.
174
- """
175
- key = Key(name=gate.name, num_qubits=gate.num_qubits)
176
- query_params = gate.params
177
-
178
- return [_rebind_equiv(equiv, query_params) for equiv in self._get_equivalences(key)]
179
-
180
- def keys(self):
181
- """Return list of keys to key to node index map.
182
-
183
- Returns:
184
- List: Keys to the key to node index map.
185
- """
186
- return self._key_to_node_index.keys()
187
-
188
- def node_index(self, key):
189
- """Return node index for a given key.
190
-
191
- Args:
192
- key (Key): Key to an equivalence.
193
-
194
- Returns:
195
- Int: Index to the node in the graph for the given key.
196
- """
197
- return self._key_to_node_index[key]
198
-
199
33
  def draw(self, filename=None):
200
34
  """Draws the equivalence relations available in the library.
201
35
 
@@ -227,12 +61,13 @@ class EquivalenceLibrary:
227
61
  graph = rx.PyDiGraph()
228
62
 
229
63
  node_map = {}
230
- for key in self._key_to_node_index:
231
- name, num_qubits = key
64
+ for key in super().keys():
65
+ name, num_qubits = key.name, key.num_qubits
232
66
  equivalences = self._get_equivalences(key)
233
67
 
234
68
  basis = frozenset([f"{name}/{num_qubits}"])
235
- for params, decomp in equivalences:
69
+ for equivalence in equivalences:
70
+ params, decomp = equivalence.params, equivalence.circuit
236
71
  decomp_basis = frozenset(
237
72
  f"{name}/{num_qubits}"
238
73
  for name, num_qubits in {
@@ -257,39 +92,3 @@ class EquivalenceLibrary:
257
92
  )
258
93
 
259
94
  return graph
260
-
261
- def _get_equivalences(self, key):
262
- """Get all the equivalences for the given key"""
263
- return (
264
- self._graph[self._key_to_node_index[key]].equivs
265
- if key in self._key_to_node_index
266
- else []
267
- )
268
-
269
-
270
- def _raise_if_param_mismatch(gate_params, circuit_parameters):
271
- gate_parameters = [p for p in gate_params if isinstance(p, ParameterExpression)]
272
-
273
- if set(gate_parameters) != circuit_parameters:
274
- raise CircuitError(
275
- "Cannot add equivalence between circuit and gate "
276
- f"of different parameters. Gate params: {gate_parameters}. "
277
- f"Circuit params: {circuit_parameters}."
278
- )
279
-
280
-
281
- def _raise_if_shape_mismatch(gate, circuit):
282
- if gate.num_qubits != circuit.num_qubits or gate.num_clbits != circuit.num_clbits:
283
- raise CircuitError(
284
- "Cannot add equivalence between circuit and gate "
285
- f"of different shapes. Gate: {gate.num_qubits} qubits and {gate.num_clbits} clbits. "
286
- f"Circuit: {circuit.num_qubits} qubits and {circuit.num_clbits} clbits."
287
- )
288
-
289
-
290
- def _rebind_equiv(equiv, query_params):
291
- equiv_params, equiv_circuit = equiv
292
- param_map = {x: y for x, y in zip(equiv_params, query_params) if isinstance(x, Parameter)}
293
- equiv = equiv_circuit.assign_parameters(param_map, inplace=False, flat_input=True)
294
-
295
- return equiv
qiskit/circuit/gate.py CHANGED
@@ -89,7 +89,9 @@ class Gate(Instruction):
89
89
  from qiskit.circuit.library.generalized_gates.unitary import UnitaryGate
90
90
 
91
91
  if not annotated:
92
- return UnitaryGate(Operator(self).power(exponent), label=f"{self.name}^{exponent}")
92
+ return UnitaryGate(
93
+ Operator(self).power(exponent, assume_unitary=True), label=f"{self.name}^{exponent}"
94
+ )
93
95
  else:
94
96
  return AnnotatedOperation(self, PowerModifier(exponent))
95
97
 
@@ -103,7 +103,23 @@ class Instruction(Operation):
103
103
  # list of instructions (and their contexts) that this instruction is composed of
104
104
  # empty definition means opaque or fundamental instruction
105
105
  self._definition = None
106
+ if duration is not None:
107
+ warnings.warn(
108
+ "Setting a custom duration per instruction is deprecated as of Qiskit "
109
+ "1.3.0. It will be removed in Qiskit 2.0.0. An instruction's duration "
110
+ "is defined in a backend's Target object.",
111
+ DeprecationWarning,
112
+ stacklevel=2,
113
+ )
106
114
  self._duration = duration
115
+ if unit is not None and unit != "dt":
116
+ warnings.warn(
117
+ "Setting a custom unit for duration per instruction is deprecated as of Qiskit "
118
+ "1.3.0. It will be removed in Qiskit 2.0.0. An instruction's duration "
119
+ "is defined in a backend's Target object which has a fixed unit in seconds.",
120
+ DeprecationWarning,
121
+ stacklevel=2,
122
+ )
107
123
  self._unit = unit
108
124
 
109
125
  self.params = params # must be at last (other properties may be required for validation)
@@ -160,6 +176,7 @@ class Instruction(Operation):
160
176
  return self.copy()
161
177
 
162
178
  @property
179
+ @deprecate_func(since="1.3.0", removal_timeline="in 2.0.0", is_property=True)
163
180
  def condition(self):
164
181
  """The classical condition on the instruction."""
165
182
  return self._condition
@@ -341,24 +358,26 @@ class Instruction(Operation):
341
358
  sel.add_equivalence(self, decomposition)
342
359
 
343
360
  @property
361
+ @deprecate_func(since="1.3.0", removal_timeline="in Qiskit 2.0.0", is_property=True)
344
362
  def duration(self):
345
363
  """Get the duration."""
346
364
  return self._duration
347
365
 
348
366
  @duration.setter
349
- def duration(self, duration):
367
+ def duration(self, value):
350
368
  """Set the duration."""
351
- self._duration = duration
369
+ self._duration = value
352
370
 
353
371
  @property
372
+ @deprecate_func(since="1.3.0", removal_timeline="in Qiskit 2.0.0", is_property=True)
354
373
  def unit(self):
355
374
  """Get the time unit of duration."""
356
375
  return self._unit
357
376
 
358
377
  @unit.setter
359
- def unit(self, unit):
378
+ def unit(self, value):
360
379
  """Set the time unit of duration."""
361
- self._unit = unit
380
+ self._unit = value
362
381
 
363
382
  @deprecate_func(
364
383
  since="1.2",
@@ -392,8 +411,8 @@ class Instruction(Operation):
392
411
  # Add condition parameters for assembler. This is needed to convert
393
412
  # to a qobj conditional instruction at assemble time and after
394
413
  # conversion will be deleted by the assembler.
395
- if self.condition:
396
- instruction._condition = self.condition
414
+ if self._condition:
415
+ instruction._condition = self._condition
397
416
  return instruction
398
417
 
399
418
  @property
@@ -499,6 +518,7 @@ class Instruction(Operation):
499
518
  inverse_gate.definition = inverse_definition
500
519
  return inverse_gate
501
520
 
521
+ @deprecate_func(since="1.3.0", removal_timeline="in 2.0.0")
502
522
  def c_if(self, classical, val):
503
523
  """Set a classical equality condition on this instruction between the register or cbit
504
524
  ``classical`` and value ``val``.
@@ -614,7 +634,7 @@ class Instruction(Operation):
614
634
  qargs = tuple(qc.qubits)
615
635
  cargs = tuple(qc.clbits)
616
636
  base = self.copy()
617
- if self.condition:
637
+ if self._condition:
618
638
  # Condition is handled on the outer instruction.
619
639
  base = base.to_mutable()
620
640
  base.condition = None
@@ -622,18 +642,19 @@ class Instruction(Operation):
622
642
  qc._append(CircuitInstruction(base, qargs, cargs))
623
643
 
624
644
  instruction.definition = qc
625
- if self.condition:
626
- instruction = instruction.c_if(*self.condition)
645
+ if self._condition:
646
+ instruction = instruction.c_if(*self._condition)
627
647
  return instruction
628
648
 
629
649
  @property
650
+ @deprecate_func(since="1.3.0", removal_timeline="in 2.0.0", is_property=True)
630
651
  def condition_bits(self) -> List[Clbit]:
631
652
  """Get Clbits in condition."""
632
653
  from qiskit.circuit.controlflow import condition_resources # pylint: disable=cyclic-import
633
654
 
634
- if self.condition is None:
655
+ if self._condition is None:
635
656
  return []
636
- return list(condition_resources(self.condition).clbits)
657
+ return list(condition_resources(self._condition).clbits)
637
658
 
638
659
  @property
639
660
  def name(self):
@@ -20,6 +20,7 @@ from collections.abc import MutableSequence
20
20
  from typing import Callable
21
21
 
22
22
  from qiskit.circuit.exceptions import CircuitError
23
+ from qiskit.utils import deprecate_func
23
24
  from .classicalregister import Clbit, ClassicalRegister
24
25
  from .operation import Operation
25
26
  from .quantumcircuitdata import CircuitInstruction
@@ -105,6 +106,7 @@ class InstructionSet:
105
106
  )
106
107
  return self
107
108
 
109
+ @deprecate_func(since="1.3.0", removal_timeline="in 2.0.0")
108
110
  def c_if(self, classical: Clbit | ClassicalRegister | int, val: int) -> "InstructionSet":
109
111
  """Set a classical equality condition on all the instructions in this set between the
110
112
  :obj:`.ClassicalRegister` or :obj:`.Clbit` ``classical`` and value ``val``.