qiskit 1.4.2__cp39-abi3-macosx_11_0_arm64.whl → 2.0.0__cp39-abi3-macosx_11_0_arm64.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 (459) hide show
  1. qiskit/VERSION.txt +1 -1
  2. qiskit/__init__.py +3 -9
  3. qiskit/_accelerate.abi3.so +0 -0
  4. qiskit/circuit/__init__.py +35 -10
  5. qiskit/circuit/{add_control.py → _add_control.py} +32 -12
  6. qiskit/circuit/_classical_resource_map.py +5 -3
  7. qiskit/circuit/barrier.py +3 -7
  8. qiskit/circuit/classical/expr/__init__.py +31 -3
  9. qiskit/circuit/classical/expr/constructors.py +236 -28
  10. qiskit/circuit/classical/expr/expr.py +104 -3
  11. qiskit/circuit/classical/expr/visitors.py +75 -0
  12. qiskit/circuit/classical/types/__init__.py +12 -8
  13. qiskit/circuit/classical/types/ordering.py +14 -7
  14. qiskit/circuit/classical/types/types.py +36 -0
  15. qiskit/circuit/commutation_checker.py +34 -7
  16. qiskit/circuit/controlflow/__init__.py +32 -1
  17. qiskit/circuit/controlflow/_builder_utils.py +9 -5
  18. qiskit/circuit/controlflow/box.py +163 -0
  19. qiskit/circuit/controlflow/break_loop.py +1 -1
  20. qiskit/circuit/controlflow/builder.py +139 -39
  21. qiskit/circuit/controlflow/continue_loop.py +1 -3
  22. qiskit/circuit/controlflow/control_flow.py +10 -0
  23. qiskit/circuit/controlflow/for_loop.py +2 -1
  24. qiskit/circuit/controlflow/if_else.py +3 -16
  25. qiskit/circuit/controlflow/switch_case.py +2 -8
  26. qiskit/circuit/controlflow/while_loop.py +2 -7
  27. qiskit/circuit/controlledgate.py +2 -4
  28. qiskit/circuit/delay.py +40 -11
  29. qiskit/circuit/duration.py +0 -15
  30. qiskit/circuit/gate.py +2 -4
  31. qiskit/circuit/instruction.py +2 -141
  32. qiskit/circuit/instructionset.py +7 -54
  33. qiskit/circuit/library/__init__.py +469 -154
  34. qiskit/circuit/library/arithmetic/__init__.py +16 -10
  35. qiskit/circuit/library/arithmetic/adders/cdkm_ripple_carry_adder.py +1 -1
  36. qiskit/circuit/library/arithmetic/adders/draper_qft_adder.py +2 -2
  37. qiskit/circuit/library/arithmetic/adders/vbe_ripple_carry_adder.py +1 -1
  38. qiskit/circuit/library/arithmetic/exact_reciprocal.py +64 -21
  39. qiskit/circuit/library/arithmetic/integer_comparator.py +37 -80
  40. qiskit/circuit/library/arithmetic/linear_amplitude_function.py +169 -2
  41. qiskit/circuit/library/arithmetic/linear_pauli_rotations.py +59 -5
  42. qiskit/circuit/library/arithmetic/piecewise_chebyshev.py +154 -6
  43. qiskit/circuit/library/arithmetic/piecewise_linear_pauli_rotations.py +114 -4
  44. qiskit/circuit/library/arithmetic/piecewise_polynomial_pauli_rotations.py +191 -15
  45. qiskit/circuit/library/arithmetic/polynomial_pauli_rotations.py +93 -39
  46. qiskit/circuit/library/arithmetic/quadratic_form.py +168 -2
  47. qiskit/circuit/library/arithmetic/weighted_adder.py +73 -1
  48. qiskit/circuit/library/bit_flip_oracle.py +130 -0
  49. qiskit/circuit/library/blueprintcircuit.py +52 -16
  50. qiskit/circuit/library/data_preparation/initializer.py +1 -1
  51. qiskit/circuit/library/data_preparation/pauli_feature_map.py +4 -4
  52. qiskit/circuit/library/data_preparation/state_preparation.py +1 -1
  53. qiskit/circuit/library/generalized_gates/gms.py +1 -1
  54. qiskit/circuit/library/generalized_gates/isometry.py +1 -1
  55. qiskit/circuit/library/generalized_gates/pauli.py +1 -2
  56. qiskit/circuit/library/generalized_gates/uc.py +97 -7
  57. qiskit/circuit/library/generalized_gates/uc_pauli_rot.py +1 -1
  58. qiskit/circuit/library/generalized_gates/unitary.py +4 -2
  59. qiskit/circuit/library/graph_state.py +1 -0
  60. qiskit/circuit/library/hamiltonian_gate.py +1 -1
  61. qiskit/circuit/library/n_local/evolved_operator_ansatz.py +1 -1
  62. qiskit/circuit/library/n_local/n_local.py +1 -1
  63. qiskit/circuit/library/n_local/qaoa_ansatz.py +1 -1
  64. qiskit/circuit/library/overlap.py +2 -2
  65. qiskit/circuit/library/pauli_evolution.py +39 -24
  66. qiskit/circuit/library/phase_oracle.py +130 -51
  67. qiskit/circuit/library/standard_gates/__init__.py +0 -1
  68. qiskit/circuit/library/standard_gates/dcx.py +3 -4
  69. qiskit/circuit/library/standard_gates/ecr.py +3 -4
  70. qiskit/circuit/library/standard_gates/global_phase.py +5 -6
  71. qiskit/circuit/library/standard_gates/h.py +4 -9
  72. qiskit/circuit/library/standard_gates/i.py +2 -2
  73. qiskit/circuit/library/standard_gates/iswap.py +3 -4
  74. qiskit/circuit/library/standard_gates/p.py +15 -34
  75. qiskit/circuit/library/standard_gates/r.py +7 -10
  76. qiskit/circuit/library/standard_gates/rx.py +5 -15
  77. qiskit/circuit/library/standard_gates/rxx.py +3 -6
  78. qiskit/circuit/library/standard_gates/ry.py +5 -17
  79. qiskit/circuit/library/standard_gates/ryy.py +3 -6
  80. qiskit/circuit/library/standard_gates/rz.py +5 -17
  81. qiskit/circuit/library/standard_gates/rzx.py +3 -6
  82. qiskit/circuit/library/standard_gates/rzz.py +3 -6
  83. qiskit/circuit/library/standard_gates/s.py +6 -15
  84. qiskit/circuit/library/standard_gates/swap.py +4 -11
  85. qiskit/circuit/library/standard_gates/sx.py +7 -12
  86. qiskit/circuit/library/standard_gates/t.py +6 -7
  87. qiskit/circuit/library/standard_gates/u.py +2 -10
  88. qiskit/circuit/library/standard_gates/u1.py +5 -16
  89. qiskit/circuit/library/standard_gates/u2.py +2 -6
  90. qiskit/circuit/library/standard_gates/u3.py +3 -11
  91. qiskit/circuit/library/standard_gates/x.py +14 -62
  92. qiskit/circuit/library/standard_gates/xx_minus_yy.py +2 -5
  93. qiskit/circuit/library/standard_gates/xx_plus_yy.py +2 -5
  94. qiskit/circuit/library/standard_gates/y.py +4 -9
  95. qiskit/circuit/library/standard_gates/z.py +5 -15
  96. qiskit/circuit/measure.py +11 -2
  97. qiskit/circuit/parameterexpression.py +7 -1
  98. qiskit/circuit/quantumcircuit.py +890 -564
  99. qiskit/circuit/random/utils.py +12 -6
  100. qiskit/circuit/reset.py +5 -2
  101. qiskit/circuit/singleton.py +5 -11
  102. qiskit/circuit/store.py +0 -8
  103. qiskit/compiler/__init__.py +1 -7
  104. qiskit/compiler/transpiler.py +38 -196
  105. qiskit/converters/circuit_to_dag.py +6 -4
  106. qiskit/converters/circuit_to_dagdependency.py +0 -2
  107. qiskit/converters/circuit_to_dagdependency_v2.py +0 -1
  108. qiskit/converters/circuit_to_gate.py +1 -1
  109. qiskit/converters/circuit_to_instruction.py +16 -29
  110. qiskit/converters/dag_to_circuit.py +7 -8
  111. qiskit/converters/dag_to_dagdependency.py +0 -1
  112. qiskit/converters/dag_to_dagdependency_v2.py +0 -1
  113. qiskit/converters/dagdependency_to_circuit.py +0 -6
  114. qiskit/converters/dagdependency_to_dag.py +0 -6
  115. qiskit/dagcircuit/collect_blocks.py +32 -20
  116. qiskit/dagcircuit/dagdependency.py +3 -37
  117. qiskit/dagcircuit/dagdependency_v2.py +5 -82
  118. qiskit/dagcircuit/dagnode.py +14 -2
  119. qiskit/passmanager/__init__.py +24 -6
  120. qiskit/passmanager/passmanager.py +26 -24
  121. qiskit/primitives/__init__.py +44 -35
  122. qiskit/primitives/backend_estimator_v2.py +102 -23
  123. qiskit/primitives/backend_sampler_v2.py +5 -20
  124. qiskit/primitives/base/__init__.py +4 -4
  125. qiskit/primitives/base/base_estimator.py +77 -82
  126. qiskit/primitives/base/base_primitive_job.py +2 -2
  127. qiskit/primitives/base/{base_primitive.py → base_primitive_v1.py} +1 -1
  128. qiskit/primitives/base/{base_result.py → base_result_v1.py} +1 -1
  129. qiskit/primitives/base/base_sampler.py +52 -60
  130. qiskit/primitives/base/{estimator_result.py → estimator_result_v1.py} +2 -2
  131. qiskit/primitives/base/{sampler_result.py → sampler_result_v1.py} +2 -2
  132. qiskit/primitives/base/{validation.py → validation_v1.py} +34 -15
  133. qiskit/primitives/containers/bindings_array.py +3 -1
  134. qiskit/primitives/containers/bit_array.py +23 -0
  135. qiskit/primitives/containers/data_bin.py +3 -1
  136. qiskit/primitives/containers/observables_array.py +19 -2
  137. qiskit/primitives/statevector_sampler.py +6 -8
  138. qiskit/primitives/utils.py +14 -189
  139. qiskit/providers/__init__.py +4 -130
  140. qiskit/providers/backend.py +11 -314
  141. qiskit/providers/basic_provider/__init__.py +3 -1
  142. qiskit/providers/basic_provider/basic_provider.py +29 -9
  143. qiskit/providers/basic_provider/basic_simulator.py +158 -298
  144. qiskit/providers/exceptions.py +0 -33
  145. qiskit/providers/fake_provider/__init__.py +0 -37
  146. qiskit/providers/fake_provider/generic_backend_v2.py +32 -693
  147. qiskit/qasm2/__init__.py +21 -6
  148. qiskit/qasm2/export.py +2 -10
  149. qiskit/qasm2/parse.py +11 -25
  150. qiskit/qasm3/__init__.py +5 -1
  151. qiskit/qasm3/ast.py +44 -0
  152. qiskit/qasm3/exporter.py +65 -27
  153. qiskit/qasm3/printer.py +35 -4
  154. qiskit/qpy/__init__.py +162 -19
  155. qiskit/qpy/binary_io/__init__.py +0 -1
  156. qiskit/qpy/binary_io/circuits.py +98 -130
  157. qiskit/qpy/binary_io/schedules.py +69 -439
  158. qiskit/qpy/binary_io/value.py +154 -31
  159. qiskit/qpy/common.py +10 -7
  160. qiskit/qpy/formats.py +41 -0
  161. qiskit/qpy/interface.py +34 -81
  162. qiskit/qpy/type_keys.py +58 -221
  163. qiskit/quantum_info/analysis/distance.py +3 -1
  164. qiskit/quantum_info/operators/dihedral/dihedral.py +3 -1
  165. qiskit/quantum_info/operators/operator.py +6 -2
  166. qiskit/quantum_info/operators/symplectic/clifford.py +3 -1
  167. qiskit/quantum_info/operators/symplectic/pauli.py +4 -2
  168. qiskit/quantum_info/operators/symplectic/pauli_list.py +17 -5
  169. qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py +40 -6
  170. qiskit/quantum_info/states/densitymatrix.py +16 -6
  171. qiskit/quantum_info/states/stabilizerstate.py +35 -4
  172. qiskit/quantum_info/states/statevector.py +16 -6
  173. qiskit/result/__init__.py +5 -17
  174. qiskit/result/models.py +18 -11
  175. qiskit/result/result.py +38 -134
  176. qiskit/result/sampled_expval.py +1 -2
  177. qiskit/result/utils.py +3 -4
  178. qiskit/synthesis/__init__.py +21 -1
  179. qiskit/synthesis/arithmetic/__init__.py +3 -1
  180. qiskit/synthesis/arithmetic/adders/cdkm_ripple_carry_adder.py +1 -1
  181. qiskit/synthesis/arithmetic/adders/draper_qft_adder.py +1 -1
  182. qiskit/synthesis/arithmetic/adders/vbe_ripple_carry_adder.py +2 -2
  183. qiskit/{providers/fake_provider/backends_v1/fake_20q → synthesis/arithmetic/comparators}/__init__.py +4 -6
  184. qiskit/synthesis/arithmetic/comparators/compare_2s.py +112 -0
  185. qiskit/synthesis/arithmetic/comparators/compare_greedy.py +66 -0
  186. qiskit/synthesis/arithmetic/multipliers/hrs_cumulative_multiplier.py +1 -1
  187. qiskit/synthesis/arithmetic/multipliers/rg_qft_multiplier.py +1 -1
  188. qiskit/synthesis/arithmetic/weighted_sum.py +155 -0
  189. qiskit/{result/mitigation → synthesis/boolean}/__init__.py +2 -2
  190. qiskit/synthesis/boolean/boolean_expression.py +231 -0
  191. qiskit/synthesis/boolean/boolean_expression_synth.py +124 -0
  192. qiskit/synthesis/boolean/boolean_expression_visitor.py +96 -0
  193. qiskit/synthesis/evolution/lie_trotter.py +10 -7
  194. qiskit/synthesis/evolution/product_formula.py +44 -35
  195. qiskit/synthesis/evolution/qdrift.py +17 -24
  196. qiskit/synthesis/evolution/suzuki_trotter.py +20 -27
  197. qiskit/synthesis/linear/linear_depth_lnn.py +6 -221
  198. qiskit/synthesis/linear_phase/cx_cz_depth_lnn.py +4 -205
  199. qiskit/synthesis/multi_controlled/__init__.py +1 -0
  200. qiskit/synthesis/multi_controlled/mcx_synthesis.py +5 -2
  201. qiskit/synthesis/multi_controlled/multi_control_rotation_gates.py +206 -0
  202. qiskit/synthesis/one_qubit/one_qubit_decompose.py +1 -1
  203. qiskit/synthesis/two_qubit/__init__.py +1 -0
  204. qiskit/synthesis/two_qubit/two_qubit_decompose.py +28 -145
  205. qiskit/transpiler/__init__.py +32 -232
  206. qiskit/transpiler/basepasses.py +20 -51
  207. qiskit/transpiler/layout.py +1 -1
  208. qiskit/transpiler/passes/__init__.py +4 -40
  209. qiskit/transpiler/passes/basis/basis_translator.py +5 -4
  210. qiskit/transpiler/passes/basis/decompose.py +1 -15
  211. qiskit/transpiler/passes/basis/unroll_3q_or_more.py +1 -5
  212. qiskit/transpiler/passes/basis/unroll_custom_definitions.py +3 -2
  213. qiskit/transpiler/passes/layout/apply_layout.py +4 -0
  214. qiskit/transpiler/passes/layout/dense_layout.py +2 -39
  215. qiskit/transpiler/passes/layout/full_ancilla_allocation.py +3 -4
  216. qiskit/transpiler/passes/layout/sabre_layout.py +7 -3
  217. qiskit/transpiler/passes/layout/vf2_layout.py +2 -20
  218. qiskit/transpiler/passes/layout/vf2_post_layout.py +60 -125
  219. qiskit/transpiler/passes/layout/vf2_utils.py +2 -26
  220. qiskit/transpiler/passes/optimization/__init__.py +2 -3
  221. qiskit/transpiler/passes/optimization/collect_and_collapse.py +2 -0
  222. qiskit/transpiler/passes/optimization/collect_cliffords.py +5 -0
  223. qiskit/transpiler/passes/optimization/collect_linear_functions.py +5 -0
  224. qiskit/transpiler/passes/optimization/collect_multiqubit_blocks.py +16 -1
  225. qiskit/transpiler/passes/optimization/commutation_analysis.py +3 -3
  226. qiskit/transpiler/passes/optimization/consolidate_blocks.py +41 -19
  227. qiskit/transpiler/passes/optimization/contract_idle_wires_in_control_flow.py +104 -0
  228. qiskit/transpiler/passes/optimization/light_cone.py +135 -0
  229. qiskit/transpiler/passes/optimization/optimize_1q_commutation.py +0 -1
  230. qiskit/transpiler/passes/optimization/optimize_1q_decomposition.py +18 -22
  231. qiskit/transpiler/passes/optimization/optimize_annotated.py +3 -2
  232. qiskit/transpiler/passes/optimization/remove_identity_equiv.py +6 -4
  233. qiskit/transpiler/passes/optimization/reset_after_measure_simplification.py +5 -2
  234. qiskit/transpiler/passes/optimization/split_2q_unitaries.py +26 -3
  235. qiskit/transpiler/passes/optimization/template_matching/template_substitution.py +1 -0
  236. qiskit/transpiler/passes/routing/__init__.py +0 -1
  237. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/commuting_2q_gate_router.py +3 -1
  238. qiskit/transpiler/passes/routing/sabre_swap.py +14 -6
  239. qiskit/transpiler/passes/routing/star_prerouting.py +1 -1
  240. qiskit/transpiler/passes/scheduling/__init__.py +1 -7
  241. qiskit/transpiler/passes/scheduling/alignments/__init__.py +2 -4
  242. qiskit/transpiler/passes/scheduling/alignments/check_durations.py +1 -9
  243. qiskit/transpiler/passes/scheduling/alignments/reschedule.py +17 -16
  244. qiskit/transpiler/passes/scheduling/padding/base_padding.py +32 -4
  245. qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py +25 -63
  246. qiskit/transpiler/passes/scheduling/padding/pad_delay.py +12 -4
  247. qiskit/transpiler/passes/scheduling/scheduling/alap.py +5 -39
  248. qiskit/transpiler/passes/scheduling/scheduling/asap.py +4 -35
  249. qiskit/transpiler/passes/scheduling/scheduling/base_scheduler.py +10 -16
  250. qiskit/transpiler/passes/scheduling/time_unit_conversion.py +134 -62
  251. qiskit/transpiler/passes/synthesis/default_unitary_synth_plugin.py +653 -0
  252. qiskit/transpiler/passes/synthesis/high_level_synthesis.py +176 -601
  253. qiskit/transpiler/passes/synthesis/hls_plugins.py +294 -1
  254. qiskit/transpiler/passes/synthesis/plugin.py +4 -0
  255. qiskit/transpiler/passes/synthesis/solovay_kitaev_synthesis.py +16 -10
  256. qiskit/transpiler/passes/synthesis/unitary_synthesis.py +34 -697
  257. qiskit/transpiler/passes/utils/__init__.py +0 -1
  258. qiskit/transpiler/passes/utils/check_gate_direction.py +13 -5
  259. qiskit/transpiler/passes/utils/control_flow.py +2 -6
  260. qiskit/transpiler/passes/utils/gate_direction.py +7 -0
  261. qiskit/transpiler/passes/utils/remove_final_measurements.py +40 -33
  262. qiskit/transpiler/passmanager.py +13 -0
  263. qiskit/transpiler/passmanager_config.py +5 -81
  264. qiskit/transpiler/preset_passmanagers/builtin_plugins.py +225 -344
  265. qiskit/transpiler/preset_passmanagers/common.py +140 -167
  266. qiskit/transpiler/preset_passmanagers/generate_preset_pass_manager.py +107 -322
  267. qiskit/transpiler/preset_passmanagers/level0.py +2 -11
  268. qiskit/transpiler/preset_passmanagers/level1.py +2 -14
  269. qiskit/transpiler/preset_passmanagers/level2.py +2 -12
  270. qiskit/transpiler/preset_passmanagers/level3.py +2 -11
  271. qiskit/transpiler/preset_passmanagers/plugin.py +5 -3
  272. qiskit/transpiler/target.py +78 -524
  273. qiskit/user_config.py +8 -4
  274. qiskit/utils/__init__.py +13 -12
  275. qiskit/utils/deprecation.py +4 -112
  276. qiskit/utils/optionals.py +11 -4
  277. qiskit/utils/parallel.py +214 -87
  278. qiskit/utils/units.py +4 -1
  279. qiskit/visualization/__init__.py +3 -7
  280. qiskit/visualization/array.py +4 -1
  281. qiskit/visualization/bloch.py +1 -1
  282. qiskit/visualization/circuit/_utils.py +19 -19
  283. qiskit/visualization/circuit/circuit_visualization.py +11 -4
  284. qiskit/visualization/circuit/matplotlib.py +13 -23
  285. qiskit/visualization/circuit/text.py +7 -3
  286. qiskit/visualization/counts_visualization.py +4 -0
  287. qiskit/visualization/dag_visualization.py +2 -1
  288. qiskit/visualization/gate_map.py +39 -154
  289. qiskit/visualization/library.py +4 -1
  290. qiskit/visualization/pass_manager_visualization.py +6 -2
  291. qiskit/visualization/state_visualization.py +19 -2
  292. qiskit/visualization/timeline/core.py +19 -13
  293. qiskit/visualization/timeline/interface.py +19 -18
  294. qiskit/visualization/timeline/plotters/matplotlib.py +4 -1
  295. {qiskit-1.4.2.dist-info → qiskit-2.0.0.dist-info}/METADATA +4 -3
  296. {qiskit-1.4.2.dist-info → qiskit-2.0.0.dist-info}/RECORD +300 -447
  297. {qiskit-1.4.2.dist-info → qiskit-2.0.0.dist-info}/WHEEL +2 -1
  298. {qiskit-1.4.2.dist-info → qiskit-2.0.0.dist-info}/entry_points.txt +8 -2
  299. qiskit/assembler/__init__.py +0 -42
  300. qiskit/assembler/assemble_circuits.py +0 -451
  301. qiskit/assembler/assemble_schedules.py +0 -367
  302. qiskit/assembler/disassemble.py +0 -310
  303. qiskit/assembler/run_config.py +0 -77
  304. qiskit/circuit/bit.py +0 -106
  305. qiskit/circuit/classicalfunction/__init__.py +0 -152
  306. qiskit/circuit/classicalfunction/boolean_expression.py +0 -138
  307. qiskit/circuit/classicalfunction/classical_element.py +0 -54
  308. qiskit/circuit/classicalfunction/classical_function_visitor.py +0 -155
  309. qiskit/circuit/classicalfunction/classicalfunction.py +0 -182
  310. qiskit/circuit/classicalfunction/exceptions.py +0 -41
  311. qiskit/circuit/classicalfunction/types.py +0 -18
  312. qiskit/circuit/classicalfunction/utils.py +0 -91
  313. qiskit/circuit/classicalregister.py +0 -57
  314. qiskit/circuit/library/standard_gates/multi_control_rotation_gates.py +0 -405
  315. qiskit/circuit/quantumregister.py +0 -75
  316. qiskit/circuit/register.py +0 -246
  317. qiskit/compiler/assembler.py +0 -689
  318. qiskit/compiler/scheduler.py +0 -109
  319. qiskit/compiler/sequencer.py +0 -71
  320. qiskit/primitives/backend_estimator.py +0 -486
  321. qiskit/primitives/backend_sampler.py +0 -222
  322. qiskit/primitives/estimator.py +0 -172
  323. qiskit/primitives/sampler.py +0 -162
  324. qiskit/providers/backend_compat.py +0 -507
  325. qiskit/providers/fake_provider/backends_v1/__init__.py +0 -22
  326. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/__init__.py +0 -18
  327. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/conf_washington.json +0 -1
  328. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/defs_washington.json +0 -1
  329. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/fake_127q_pulse_v1.py +0 -37
  330. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/props_washington.json +0 -1
  331. qiskit/providers/fake_provider/backends_v1/fake_20q/conf_singapore.json +0 -1
  332. qiskit/providers/fake_provider/backends_v1/fake_20q/fake_20q.py +0 -43
  333. qiskit/providers/fake_provider/backends_v1/fake_20q/props_singapore.json +0 -1
  334. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/__init__.py +0 -18
  335. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/conf_hanoi.json +0 -1
  336. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/defs_hanoi.json +0 -1
  337. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/fake_27q_pulse_v1.py +0 -50
  338. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/props_hanoi.json +0 -1
  339. qiskit/providers/fake_provider/backends_v1/fake_5q/__init__.py +0 -18
  340. qiskit/providers/fake_provider/backends_v1/fake_5q/conf_yorktown.json +0 -1
  341. qiskit/providers/fake_provider/backends_v1/fake_5q/fake_5q_v1.py +0 -41
  342. qiskit/providers/fake_provider/backends_v1/fake_5q/props_yorktown.json +0 -1
  343. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/__init__.py +0 -18
  344. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/conf_nairobi.json +0 -1
  345. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/defs_nairobi.json +0 -1
  346. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/fake_7q_pulse_v1.py +0 -44
  347. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/props_nairobi.json +0 -1
  348. qiskit/providers/fake_provider/fake_1q.py +0 -91
  349. qiskit/providers/fake_provider/fake_backend.py +0 -165
  350. qiskit/providers/fake_provider/fake_openpulse_2q.py +0 -391
  351. qiskit/providers/fake_provider/fake_openpulse_3q.py +0 -340
  352. qiskit/providers/fake_provider/fake_pulse_backend.py +0 -49
  353. qiskit/providers/fake_provider/fake_qasm_backend.py +0 -77
  354. qiskit/providers/fake_provider/utils/backend_converter.py +0 -150
  355. qiskit/providers/fake_provider/utils/json_decoder.py +0 -109
  356. qiskit/providers/models/__init__.py +0 -89
  357. qiskit/providers/models/backendconfiguration.py +0 -1040
  358. qiskit/providers/models/backendproperties.py +0 -535
  359. qiskit/providers/models/backendstatus.py +0 -104
  360. qiskit/providers/models/jobstatus.py +0 -77
  361. qiskit/providers/models/pulsedefaults.py +0 -305
  362. qiskit/providers/provider.py +0 -95
  363. qiskit/pulse/__init__.py +0 -158
  364. qiskit/pulse/builder.py +0 -2262
  365. qiskit/pulse/calibration_entries.py +0 -381
  366. qiskit/pulse/channels.py +0 -227
  367. qiskit/pulse/configuration.py +0 -245
  368. qiskit/pulse/exceptions.py +0 -45
  369. qiskit/pulse/filters.py +0 -309
  370. qiskit/pulse/instruction_schedule_map.py +0 -424
  371. qiskit/pulse/instructions/__init__.py +0 -67
  372. qiskit/pulse/instructions/acquire.py +0 -150
  373. qiskit/pulse/instructions/delay.py +0 -71
  374. qiskit/pulse/instructions/directives.py +0 -154
  375. qiskit/pulse/instructions/frequency.py +0 -135
  376. qiskit/pulse/instructions/instruction.py +0 -270
  377. qiskit/pulse/instructions/phase.py +0 -152
  378. qiskit/pulse/instructions/play.py +0 -99
  379. qiskit/pulse/instructions/reference.py +0 -100
  380. qiskit/pulse/instructions/snapshot.py +0 -82
  381. qiskit/pulse/library/__init__.py +0 -97
  382. qiskit/pulse/library/continuous.py +0 -430
  383. qiskit/pulse/library/pulse.py +0 -148
  384. qiskit/pulse/library/samplers/__init__.py +0 -15
  385. qiskit/pulse/library/samplers/decorators.py +0 -295
  386. qiskit/pulse/library/samplers/strategies.py +0 -71
  387. qiskit/pulse/library/symbolic_pulses.py +0 -1989
  388. qiskit/pulse/library/waveform.py +0 -136
  389. qiskit/pulse/macros.py +0 -262
  390. qiskit/pulse/parameter_manager.py +0 -445
  391. qiskit/pulse/parser.py +0 -314
  392. qiskit/pulse/reference_manager.py +0 -58
  393. qiskit/pulse/schedule.py +0 -1854
  394. qiskit/pulse/transforms/__init__.py +0 -106
  395. qiskit/pulse/transforms/alignments.py +0 -406
  396. qiskit/pulse/transforms/base_transforms.py +0 -71
  397. qiskit/pulse/transforms/canonicalization.py +0 -498
  398. qiskit/pulse/transforms/dag.py +0 -122
  399. qiskit/pulse/utils.py +0 -149
  400. qiskit/qobj/__init__.py +0 -75
  401. qiskit/qobj/common.py +0 -81
  402. qiskit/qobj/converters/__init__.py +0 -18
  403. qiskit/qobj/converters/lo_config.py +0 -177
  404. qiskit/qobj/converters/pulse_instruction.py +0 -897
  405. qiskit/qobj/pulse_qobj.py +0 -709
  406. qiskit/qobj/qasm_qobj.py +0 -708
  407. qiskit/qobj/utils.py +0 -46
  408. qiskit/result/mitigation/base_readout_mitigator.py +0 -79
  409. qiskit/result/mitigation/correlated_readout_mitigator.py +0 -277
  410. qiskit/result/mitigation/local_readout_mitigator.py +0 -328
  411. qiskit/result/mitigation/utils.py +0 -217
  412. qiskit/scheduler/__init__.py +0 -40
  413. qiskit/scheduler/config.py +0 -37
  414. qiskit/scheduler/lowering.py +0 -187
  415. qiskit/scheduler/methods/__init__.py +0 -15
  416. qiskit/scheduler/methods/basic.py +0 -140
  417. qiskit/scheduler/schedule_circuit.py +0 -69
  418. qiskit/scheduler/sequence.py +0 -104
  419. qiskit/transpiler/passes/calibration/__init__.py +0 -17
  420. qiskit/transpiler/passes/calibration/base_builder.py +0 -79
  421. qiskit/transpiler/passes/calibration/builders.py +0 -20
  422. qiskit/transpiler/passes/calibration/exceptions.py +0 -22
  423. qiskit/transpiler/passes/calibration/pulse_gate.py +0 -100
  424. qiskit/transpiler/passes/calibration/rx_builder.py +0 -164
  425. qiskit/transpiler/passes/calibration/rzx_builder.py +0 -411
  426. qiskit/transpiler/passes/calibration/rzx_templates.py +0 -58
  427. qiskit/transpiler/passes/optimization/cx_cancellation.py +0 -65
  428. qiskit/transpiler/passes/optimization/echo_rzx_weyl_decomposition.py +0 -162
  429. qiskit/transpiler/passes/optimization/normalize_rx_angle.py +0 -157
  430. qiskit/transpiler/passes/routing/stochastic_swap.py +0 -532
  431. qiskit/transpiler/passes/scheduling/alap.py +0 -153
  432. qiskit/transpiler/passes/scheduling/alignments/align_measures.py +0 -255
  433. qiskit/transpiler/passes/scheduling/alignments/pulse_gate_validation.py +0 -107
  434. qiskit/transpiler/passes/scheduling/asap.py +0 -175
  435. qiskit/transpiler/passes/scheduling/base_scheduler.py +0 -310
  436. qiskit/transpiler/passes/scheduling/dynamical_decoupling.py +0 -313
  437. qiskit/transpiler/passes/utils/convert_conditions_to_if_ops.py +0 -93
  438. qiskit/utils/deprecate_pulse.py +0 -119
  439. qiskit/utils/multiprocessing.py +0 -56
  440. qiskit/visualization/pulse_v2/__init__.py +0 -21
  441. qiskit/visualization/pulse_v2/core.py +0 -901
  442. qiskit/visualization/pulse_v2/device_info.py +0 -173
  443. qiskit/visualization/pulse_v2/drawings.py +0 -253
  444. qiskit/visualization/pulse_v2/events.py +0 -254
  445. qiskit/visualization/pulse_v2/generators/__init__.py +0 -40
  446. qiskit/visualization/pulse_v2/generators/barrier.py +0 -76
  447. qiskit/visualization/pulse_v2/generators/chart.py +0 -208
  448. qiskit/visualization/pulse_v2/generators/frame.py +0 -436
  449. qiskit/visualization/pulse_v2/generators/snapshot.py +0 -133
  450. qiskit/visualization/pulse_v2/generators/waveform.py +0 -645
  451. qiskit/visualization/pulse_v2/interface.py +0 -459
  452. qiskit/visualization/pulse_v2/layouts.py +0 -387
  453. qiskit/visualization/pulse_v2/plotters/__init__.py +0 -17
  454. qiskit/visualization/pulse_v2/plotters/base_plotter.py +0 -53
  455. qiskit/visualization/pulse_v2/plotters/matplotlib.py +0 -201
  456. qiskit/visualization/pulse_v2/stylesheet.py +0 -312
  457. qiskit/visualization/pulse_v2/types.py +0 -242
  458. {qiskit-1.4.2.dist-info → qiskit-2.0.0.dist-info/licenses}/LICENSE.txt +0 -0
  459. {qiskit-1.4.2.dist-info → qiskit-2.0.0.dist-info}/top_level.txt +0 -0
@@ -54,9 +54,9 @@ def random_circuit(
54
54
  reset (bool): if True, insert middle resets
55
55
  seed (int): sets random seed (optional)
56
56
  num_operand_distribution (dict): a distribution of gates that specifies the ratio
57
- of 1-qubit, 2-qubit, 3-qubit, ..., n-qubit gates in the random circuit. Expect a
58
- deviation from the specified ratios that depends on the size of the requested
59
- random circuit. (optional)
57
+ of 1-qubit, 2-qubit, 3-qubit, ..., n-qubit gates in the random circuit. Expect a
58
+ deviation from the specified ratios that depends on the size of the requested
59
+ random circuit. (optional)
60
60
 
61
61
  Returns:
62
62
  QuantumCircuit: constructed circuit
@@ -274,9 +274,15 @@ def random_circuit(
274
274
  if is_cond:
275
275
  qc.measure(qc.qubits, cr)
276
276
  # The condition values are required to be bigints, not Numpy's fixed-width type.
277
- operation = operation.c_if(cr, int(condition_values[c_ptr]))
278
- c_ptr += 1
279
- qc._append(CircuitInstruction(operation=operation, qubits=qubits[q_start:q_end]))
277
+ with qc.if_test((cr, int(condition_values[c_ptr]))):
278
+ c_ptr += 1
279
+ qc._append(
280
+ CircuitInstruction(operation=operation, qubits=qubits[q_start:q_end])
281
+ )
282
+ else:
283
+ qc._append(
284
+ CircuitInstruction(operation=operation, qubits=qubits[q_start:q_end])
285
+ )
280
286
  else:
281
287
  for gate, q_start, q_end, p_start, p_end in zip(
282
288
  gate_specs["class"], q_indices[:-1], q_indices[1:], p_indices[:-1], p_indices[1:]
qiskit/circuit/reset.py CHANGED
@@ -15,17 +15,20 @@ Qubit reset to computational zero.
15
15
  """
16
16
 
17
17
  from qiskit.circuit.singleton import SingletonInstruction, stdlib_singleton_key
18
+ from qiskit._accelerate.circuit import StandardInstructionType
18
19
 
19
20
 
20
21
  class Reset(SingletonInstruction):
21
22
  r"""Incoherently reset a qubit to the :math:`\lvert0\rangle` state."""
22
23
 
23
- def __init__(self, label=None, *, duration=None, unit="dt"):
24
+ _standard_instruction_type = StandardInstructionType.Reset
25
+
26
+ def __init__(self, label=None):
24
27
  """
25
28
  Args:
26
29
  label: optional string label of this instruction.
27
30
  """
28
- super().__init__("reset", 1, 0, [], label=label, duration=duration, unit=unit)
31
+ super().__init__("reset", 1, 0, [], label=label)
29
32
 
30
33
  _singleton_lookup_key = stdlib_singleton_key()
31
34
 
@@ -251,7 +251,6 @@ from __future__ import annotations
251
251
 
252
252
  import functools
253
253
 
254
- from qiskit.utils import deprecate_func
255
254
  from .instruction import Instruction
256
255
  from .gate import Gate
257
256
  from .controlledgate import ControlledGate, _ctrl_state_to_int
@@ -490,10 +489,6 @@ class _SingletonInstructionOverrides(Instruction):
490
489
  instruction._params = _frozenlist(instruction._params)
491
490
  return instruction
492
491
 
493
- @deprecate_func(since="1.3.0", removal_timeline="in 2.0.0")
494
- def c_if(self, classical, val):
495
- return self.to_mutable().c_if(classical, val)
496
-
497
492
  def copy(self, name=None):
498
493
  if name is None:
499
494
  return self
@@ -513,8 +508,7 @@ class SingletonInstruction(Instruction, _SingletonBase, overrides=_SingletonInst
513
508
  memory footprint of multiple instructions.
514
509
 
515
510
  The exception to be aware of with this class though are the :class:`~.circuit.Instruction`
516
- attributes :attr:`~.Instruction.label`, :attr:`~.Instruction.condition`,
517
- :attr:`~.Instruction.duration`, and :attr:`~.Instruction.unit` which can be set differently for
511
+ attribute :attr:`~.Instruction.label` which can be set differently for
518
512
  specific instances of gates. For :class:`SingletonInstruction` usage to be sound setting these
519
513
  attributes is not available and they can only be set at creation time, or on an object that has
520
514
  been specifically made mutable using :meth:`~.Instruction.to_mutable`. If any of these
@@ -589,8 +583,8 @@ def stdlib_singleton_key(*, num_ctrl_qubits: int = 0):
589
583
 
590
584
  if num_ctrl_qubits:
591
585
 
592
- def key(label=None, ctrl_state=None, *, duration=None, unit="dt", _base_label=None):
593
- if label is None and duration is None and unit == "dt" and _base_label is None:
586
+ def key(label=None, ctrl_state=None, *, _base_label=None):
587
+ if label is None and _base_label is None:
594
588
  # Normalisation; we want all types for the control state to key the same.
595
589
  ctrl_state = _ctrl_state_to_int(ctrl_state, num_ctrl_qubits)
596
590
  return (ctrl_state,)
@@ -598,8 +592,8 @@ def stdlib_singleton_key(*, num_ctrl_qubits: int = 0):
598
592
 
599
593
  else:
600
594
 
601
- def key(label=None, *, duration=None, unit="dt"):
602
- if label is None and duration is None and unit == "dt":
595
+ def key(label=None):
596
+ if label is None:
603
597
  return ()
604
598
  return None
605
599
 
qiskit/circuit/store.py CHANGED
@@ -16,7 +16,6 @@ from __future__ import annotations
16
16
 
17
17
  import typing
18
18
 
19
- from qiskit.utils import deprecate_func
20
19
  from .exceptions import CircuitError
21
20
  from .classical import expr, types
22
21
  from .instruction import Instruction
@@ -88,10 +87,3 @@ class Store(Instruction):
88
87
  def rvalue(self):
89
88
  """Get the r-value :class:`~.expr.Expr` node that is being written into the l-value."""
90
89
  return self.params[1]
91
-
92
- @deprecate_func(since="1.3.0", removal_timeline="in 2.0.0")
93
- def c_if(self, classical, val):
94
- """:meta hidden:"""
95
- raise NotImplementedError(
96
- "stores cannot be conditioned with `c_if`; use a full `if_test` context instead"
97
- )
@@ -17,17 +17,11 @@ Compilation Routines (:mod:`qiskit.compiler`)
17
17
 
18
18
  .. currentmodule:: qiskit.compiler
19
19
 
20
- Circuit and Pulse Compilation Functions
20
+ Circuit Compilation Functions
21
21
  =======================================
22
22
 
23
- .. autofunction:: assemble
24
- .. autofunction:: schedule
25
23
  .. autofunction:: transpile
26
- .. autofunction:: sequence
27
24
 
28
25
  """
29
26
 
30
- from .assembler import assemble
31
27
  from .transpiler import transpile
32
- from .scheduler import schedule
33
- from .sequencer import sequence
@@ -16,73 +16,35 @@
16
16
  import logging
17
17
  from time import time
18
18
  from typing import List, Union, Dict, Callable, Any, Optional, TypeVar
19
- import warnings
20
19
 
21
20
  from qiskit import user_config
22
21
  from qiskit.circuit.quantumcircuit import QuantumCircuit
23
22
  from qiskit.dagcircuit import DAGCircuit
24
23
  from qiskit.providers.backend import Backend
25
- from qiskit.providers.backend_compat import BackendV2Converter
26
- from qiskit.providers.models.backendproperties import BackendProperties
27
- from qiskit.pulse import Schedule, InstructionScheduleMap
28
24
  from qiskit.transpiler import Layout, CouplingMap, PropertySet
29
25
  from qiskit.transpiler.basepasses import BasePass
30
26
  from qiskit.transpiler.exceptions import TranspilerError, CircuitTooWideForTarget
31
- from qiskit.transpiler.instruction_durations import InstructionDurationsType
32
27
  from qiskit.transpiler.passes.synthesis.high_level_synthesis import HLSConfig
33
28
  from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
34
29
  from qiskit.transpiler.target import Target
35
- from qiskit.utils import deprecate_arg
36
- from qiskit.utils.deprecate_pulse import deprecate_pulse_arg
37
30
 
38
31
  logger = logging.getLogger(__name__)
39
32
 
40
33
  _CircuitT = TypeVar("_CircuitT", bound=Union[QuantumCircuit, List[QuantumCircuit]])
41
34
 
42
35
 
43
- @deprecate_arg(
44
- name="instruction_durations",
45
- since="1.3",
46
- package_name="Qiskit",
47
- removal_timeline="in Qiskit 2.0",
48
- additional_msg="The `target` parameter should be used instead. You can build a `Target` instance "
49
- "with defined instruction durations with "
50
- "`Target.from_configuration(..., instruction_durations=...)`",
51
- )
52
- @deprecate_arg(
53
- name="timing_constraints",
54
- since="1.3",
55
- package_name="Qiskit",
56
- removal_timeline="in Qiskit 2.0",
57
- additional_msg="The `target` parameter should be used instead. You can build a `Target` instance "
58
- "with defined timing constraints with "
59
- "`Target.from_configuration(..., timing_constraints=...)`",
60
- )
61
- @deprecate_arg(
62
- name="backend_properties",
63
- since="1.3",
64
- package_name="Qiskit",
65
- removal_timeline="in Qiskit 2.0",
66
- additional_msg="The `target` parameter should be used instead. You can build a `Target` instance "
67
- "with defined properties with Target.from_configuration(..., backend_properties=...)",
68
- )
69
- @deprecate_pulse_arg("inst_map", predicate=lambda inst_map: inst_map is not None)
70
36
  def transpile( # pylint: disable=too-many-return-statements
71
37
  circuits: _CircuitT,
72
38
  backend: Optional[Backend] = None,
73
39
  basis_gates: Optional[List[str]] = None,
74
- inst_map: Optional[List[InstructionScheduleMap]] = None,
75
40
  coupling_map: Optional[Union[CouplingMap, List[List[int]]]] = None,
76
- backend_properties: Optional[BackendProperties] = None,
77
41
  initial_layout: Optional[Union[Layout, Dict, List]] = None,
78
42
  layout_method: Optional[str] = None,
79
43
  routing_method: Optional[str] = None,
80
44
  translation_method: Optional[str] = None,
81
45
  scheduling_method: Optional[str] = None,
82
- instruction_durations: Optional[InstructionDurationsType] = None,
83
46
  dt: Optional[float] = None,
84
47
  approximation_degree: Optional[float] = 1.0,
85
- timing_constraints: Optional[Dict[str, int]] = None,
86
48
  seed_transpiler: Optional[int] = None,
87
49
  optimization_level: Optional[int] = None,
88
50
  callback: Optional[Callable[[BasePass, DAGCircuit, float, PropertySet, int], Any]] = None,
@@ -105,26 +67,21 @@ def transpile( # pylint: disable=too-many-return-statements
105
67
 
106
68
  The prioritization of transpilation target constraints works as follows: if a ``target``
107
69
  input is provided, it will take priority over any ``backend`` input or loose constraints
108
- (``basis_gates``, ``inst_map``, ``coupling_map``, ``backend_properties``, ``instruction_durations``,
109
- ``dt`` or ``timing_constraints``). If a ``backend`` is provided together with any loose constraint
70
+ (``basis_gates``, ``coupling_map``, or ``dt``). If a ``backend`` is provided
71
+ together with any loose constraint
110
72
  from the list above, the loose constraint will take priority over the corresponding backend
111
- constraint. This behavior is independent of whether the ``backend`` instance is of type
112
- :class:`.BackendV1` or :class:`.BackendV2`, as summarized in the table below. The first column
73
+ constraint. This behavior is summarized in the table below. The first column
113
74
  in the table summarizes the potential user-provided constraints, and each cell shows whether
114
75
  the priority is assigned to that specific constraint input or another input
115
- (`target`/`backend(V1)`/`backend(V2)`).
116
-
117
- ============================ ========= ======================== =======================
118
- User Provided target backend(V1) backend(V2)
119
- ============================ ========= ======================== =======================
120
- **basis_gates** target basis_gates basis_gates
121
- **coupling_map** target coupling_map coupling_map
122
- **instruction_durations** target instruction_durations instruction_durations
123
- **inst_map** target inst_map inst_map
124
- **dt** target dt dt
125
- **timing_constraints** target timing_constraints timing_constraints
126
- **backend_properties** target backend_properties backend_properties
127
- ============================ ========= ======================== =======================
76
+ (`target`/`backend(V2)`).
77
+
78
+ ============================ ========= ========================
79
+ User Provided target backend(V2)
80
+ ============================ ========= ========================
81
+ **basis_gates** target basis_gates
82
+ **coupling_map** target coupling_map
83
+ **dt** target dt
84
+ ============================ ========= ========================
128
85
 
129
86
  Args:
130
87
  circuits: Circuit(s) to transpile
@@ -133,12 +90,6 @@ def transpile( # pylint: disable=too-many-return-statements
133
90
  will override the backend's.
134
91
  basis_gates: List of basis gate names to unroll to
135
92
  (e.g: ``['u1', 'u2', 'u3', 'cx']``). If ``None``, do not unroll.
136
- inst_map: DEPRECATED. Mapping of unrolled gates to pulse schedules. If this is not provided,
137
- transpiler tries to get from the backend. If any user defined calibration
138
- is found in the map and this is used in a circuit, transpiler attaches
139
- the custom gate definition to the circuit. This enables one to flexibly
140
- override the low-level instruction implementation. This feature is available
141
- iff the backend supports the pulse gate experiment.
142
93
  coupling_map: Directed coupling map (perhaps custom) to target in mapping. If
143
94
  the coupling map is symmetric, both directions need to be specified.
144
95
 
@@ -148,10 +99,6 @@ def transpile( # pylint: disable=too-many-return-statements
148
99
  #. List, must be given as an adjacency matrix, where each entry
149
100
  specifies all directed two-qubit interactions supported by backend,
150
101
  e.g: ``[[0, 1], [0, 3], [1, 2], [1, 5], [2, 5], [4, 1], [5, 3]]``
151
-
152
- backend_properties: properties returned by a backend, including information on gate
153
- errors, readout errors, qubit coherence times, etc. Find a backend
154
- that provides this information with: ``backend.properties()``
155
102
  initial_layout: Initial position of virtual qubits on physical qubits.
156
103
  If this layout makes the circuit compatible with the coupling_map
157
104
  constraints, it will be used. The final layout is not guaranteed to be the same,
@@ -191,10 +138,10 @@ def transpile( # pylint: disable=too-many-return-statements
191
138
  This can also be the external plugin name to use for the ``routing`` stage.
192
139
  You can see a list of installed plugins by using :func:`~.list_stage_plugins` with
193
140
  ``"routing"`` for the ``stage_name`` argument.
194
- translation_method: Name of translation pass (``"translator"`` or ``"synthesis"``)
195
- This can also be the external plugin name to use for the ``translation`` stage.
196
- You can see a list of installed plugins by using :func:`~.list_stage_plugins` with
197
- ``"translation"`` for the ``stage_name`` argument.
141
+ translation_method: Name of translation pass (``"default"``, ``"translator"`` or
142
+ ``"synthesis"``). This can also be the external plugin name to use for the
143
+ ``translation`` stage. You can see a list of installed plugins by using
144
+ :func:`~.list_stage_plugins` with ``"translation"`` for the ``stage_name`` argument.
198
145
  scheduling_method: Name of scheduling pass.
199
146
  * ``'as_soon_as_possible'``: Schedule instructions greedily, as early as possible
200
147
  on a qubit resource. (alias: ``'asap'``)
@@ -204,40 +151,10 @@ def transpile( # pylint: disable=too-many-return-statements
204
151
  to use for the ``scheduling`` stage. You can see a list of installed plugins by
205
152
  using :func:`~.list_stage_plugins` with ``"scheduling"`` for the ``stage_name``
206
153
  argument.
207
- instruction_durations: Durations of instructions.
208
- Applicable only if scheduling_method is specified.
209
- The gate lengths defined in ``backend.properties`` are used as default.
210
- They are overwritten if this ``instruction_durations`` is specified.
211
- The format of ``instruction_durations`` must be as follows.
212
- The `instruction_durations` must be given as a list of tuples
213
- [(instruction_name, qubits, duration, unit), ...].
214
- | [('cx', [0, 1], 12.3, 'ns'), ('u3', [0], 4.56, 'ns')]
215
- | [('cx', [0, 1], 1000), ('u3', [0], 300)]
216
- If unit is omitted, the default is 'dt', which is a sample time depending on backend.
217
- If the time unit is 'dt', the duration must be an integer.
218
154
  dt: Backend sample time (resolution) in seconds.
219
- If ``None`` (default), ``backend.configuration().dt`` is used.
155
+ If ``None`` (default), ``backend.dt`` is used.
220
156
  approximation_degree (float): heuristic dial used for circuit approximation
221
157
  (1.0=no approximation, 0.0=maximal approximation)
222
- timing_constraints: An optional control hardware restriction on instruction time resolution.
223
- A quantum computer backend may report a set of restrictions, namely:
224
-
225
- - granularity: An integer value representing minimum pulse gate
226
- resolution in units of ``dt``. A user-defined pulse gate should have
227
- duration of a multiple of this granularity value.
228
- - min_length: An integer value representing minimum pulse gate
229
- length in units of ``dt``. A user-defined pulse gate should be longer
230
- than this length.
231
- - pulse_alignment: An integer value representing a time resolution of gate
232
- instruction starting time. Gate instruction should start at time which
233
- is a multiple of the alignment value.
234
- - acquire_alignment: An integer value representing a time resolution of measure
235
- instruction starting time. Measure instruction should start at time which
236
- is a multiple of the alignment value.
237
-
238
- This information will be provided by the backend configuration.
239
- If the backend doesn't have any restriction on the instruction time allocation,
240
- then ``timing_constraints`` is None and no adjustment will be performed.
241
158
  seed_transpiler: Sets random seed for the stochastic parts of the transpiler
242
159
  optimization_level: How much optimization to perform on the circuits.
243
160
  Higher levels generate more optimized circuits,
@@ -329,58 +246,13 @@ def transpile( # pylint: disable=too-many-return-statements
329
246
  if not circuits:
330
247
  return []
331
248
 
332
- # transpiling schedules is not supported yet.
333
249
  start_time = time()
334
- if all(isinstance(c, Schedule) for c in circuits):
335
- warnings.warn("Transpiling schedules is not supported yet.", UserWarning)
336
- end_time = time()
337
- _log_transpile_time(start_time, end_time)
338
- if arg_circuits_list:
339
- return circuits
340
- else:
341
- return circuits[0]
342
250
 
343
251
  if optimization_level is None:
344
252
  # Take optimization level from the configuration or 1 as default.
345
253
  config = user_config.get_config()
346
254
  optimization_level = config.get("transpile_optimization_level", 2)
347
255
 
348
- if backend is not None and getattr(backend, "version", 0) <= 1:
349
- warnings.warn(
350
- "The `transpile` function will stop supporting inputs of "
351
- f"type `BackendV1` ( {backend} ) in the `backend` parameter in a future "
352
- "release no earlier than 2.0. `BackendV1` is deprecated and implementations "
353
- "should move to `BackendV2`.",
354
- category=DeprecationWarning,
355
- stacklevel=2,
356
- )
357
- with warnings.catch_warnings():
358
- # This is a temporary conversion step to allow for a smoother transition
359
- # to a fully target-based transpiler pipeline while maintaining the behavior
360
- # of `transpile` with BackendV1 inputs.
361
- # TODO BackendV1 is deprecated and this path can be
362
- # removed once it gets removed:
363
- # https://github.com/Qiskit/qiskit/pull/12850
364
- warnings.filterwarnings(
365
- "ignore",
366
- category=DeprecationWarning,
367
- message=r".+qiskit\.providers\.backend_compat\.BackendV2Converter.+",
368
- module="qiskit",
369
- )
370
- backend = BackendV2Converter(backend)
371
-
372
- if (
373
- scheduling_method is not None
374
- and backend is None
375
- and target is None
376
- and not instruction_durations
377
- ):
378
- warnings.warn(
379
- "When scheduling circuits without backend,"
380
- " 'instruction_durations' should be usually provided.",
381
- UserWarning,
382
- )
383
-
384
256
  if not ignore_backend_supplied_default_methods:
385
257
  if scheduling_method is None and hasattr(backend, "get_scheduling_stage_plugin"):
386
258
  scheduling_method = backend.get_scheduling_stage_plugin()
@@ -394,57 +266,27 @@ def transpile( # pylint: disable=too-many-return-statements
394
266
  # Edge cases require using the old model (loose constraints) instead of building a target,
395
267
  # but we don't populate the passmanager config with loose constraints unless it's one of
396
268
  # the known edge cases to control the execution path.
397
- # Filter instruction_durations, timing_constraints, backend_properties and inst_map deprecation
398
- with warnings.catch_warnings():
399
- warnings.filterwarnings(
400
- "ignore",
401
- category=DeprecationWarning,
402
- message=".*``inst_map`` is deprecated as of Qiskit 1.3.*",
403
- module="qiskit",
404
- )
405
- warnings.filterwarnings(
406
- "ignore",
407
- category=DeprecationWarning,
408
- message=".*``timing_constraints`` is deprecated as of Qiskit 1.3.*",
409
- module="qiskit",
410
- )
411
- warnings.filterwarnings(
412
- "ignore",
413
- category=DeprecationWarning,
414
- message=".*``instruction_durations`` is deprecated as of Qiskit 1.3.*",
415
- module="qiskit",
416
- )
417
- warnings.filterwarnings(
418
- "ignore",
419
- category=DeprecationWarning,
420
- message=".*``backend_properties`` is deprecated as of Qiskit 1.3.*",
421
- module="qiskit",
422
- )
423
- pm = generate_preset_pass_manager(
424
- optimization_level,
425
- target=target,
426
- backend=backend,
427
- basis_gates=basis_gates,
428
- coupling_map=coupling_map,
429
- instruction_durations=instruction_durations,
430
- backend_properties=backend_properties,
431
- timing_constraints=timing_constraints,
432
- inst_map=inst_map,
433
- initial_layout=initial_layout,
434
- layout_method=layout_method,
435
- routing_method=routing_method,
436
- translation_method=translation_method,
437
- scheduling_method=scheduling_method,
438
- approximation_degree=approximation_degree,
439
- seed_transpiler=seed_transpiler,
440
- unitary_synthesis_method=unitary_synthesis_method,
441
- unitary_synthesis_plugin_config=unitary_synthesis_plugin_config,
442
- hls_config=hls_config,
443
- init_method=init_method,
444
- optimization_method=optimization_method,
445
- dt=dt,
446
- qubits_initially_zero=qubits_initially_zero,
447
- )
269
+ pm = generate_preset_pass_manager(
270
+ optimization_level,
271
+ target=target,
272
+ backend=backend,
273
+ basis_gates=basis_gates,
274
+ coupling_map=coupling_map,
275
+ initial_layout=initial_layout,
276
+ layout_method=layout_method,
277
+ routing_method=routing_method,
278
+ translation_method=translation_method,
279
+ scheduling_method=scheduling_method,
280
+ approximation_degree=approximation_degree,
281
+ seed_transpiler=seed_transpiler,
282
+ unitary_synthesis_method=unitary_synthesis_method,
283
+ unitary_synthesis_plugin_config=unitary_synthesis_plugin_config,
284
+ hls_config=hls_config,
285
+ init_method=init_method,
286
+ optimization_method=optimization_method,
287
+ dt=dt,
288
+ qubits_initially_zero=qubits_initially_zero,
289
+ )
448
290
 
449
291
  out_circuits = pm.run(circuits, callback=callback, num_processes=num_processes)
450
292
 
@@ -41,7 +41,9 @@ def circuit_to_dag(circuit, copy_operations=True, *, qubit_order=None, clbit_ord
41
41
  the circuit.
42
42
 
43
43
  Example:
44
- .. code-block::
44
+ .. plot::
45
+ :include-source:
46
+ :nofigs:
45
47
 
46
48
  from qiskit import QuantumRegister, ClassicalRegister, QuantumCircuit
47
49
  from qiskit.dagcircuit import DAGCircuit
@@ -53,7 +55,7 @@ def circuit_to_dag(circuit, copy_operations=True, *, qubit_order=None, clbit_ord
53
55
  circ.h(q[0])
54
56
  circ.cx(q[0], q[1])
55
57
  circ.measure(q[0], c[0])
56
- circ.rz(0.5, q[1]).c_if(c, 2)
58
+ circ.rz(0.5, q[1])
57
59
  dag = circuit_to_dag(circ)
58
60
  """
59
61
  # If we have an instance of BluePrintCircuit, make sure it is built by calling ._build()
@@ -73,6 +75,6 @@ def circuit_to_dag(circuit, copy_operations=True, *, qubit_order=None, clbit_ord
73
75
 
74
76
  dagcircuit = core_circuit_to_dag(circuit, copy_operations, qubit_order, clbit_order)
75
77
 
76
- dagcircuit.duration = circuit._duration
77
- dagcircuit.unit = circuit._unit
78
+ dagcircuit._duration = circuit._duration
79
+ dagcircuit._unit = circuit._unit
78
80
  return dagcircuit
@@ -46,6 +46,4 @@ def circuit_to_dagdependency(circuit, create_preds_and_succs=True):
46
46
  dagdependency._add_predecessors()
47
47
  dagdependency._add_successors()
48
48
 
49
- dagdependency._calibrations = circuit._calibrations_prop
50
-
51
49
  return dagdependency
@@ -27,7 +27,6 @@ def _circuit_to_dagdependency_v2(circuit):
27
27
  dagdependency = _DAGDependencyV2()
28
28
  dagdependency.name = circuit.name
29
29
  dagdependency.metadata = circuit.metadata
30
- dagdependency._calibrations = circuit._calibrations_prop
31
30
  dagdependency.global_phase = circuit.global_phase
32
31
 
33
32
  dagdependency.add_qubits(circuit.qubits)
@@ -14,7 +14,7 @@
14
14
  """Helper function for converting a circuit to a gate"""
15
15
  from qiskit.circuit.annotated_operation import AnnotatedOperation
16
16
  from qiskit.circuit.gate import Gate
17
- from qiskit.circuit.quantumregister import QuantumRegister
17
+ from qiskit.circuit import QuantumRegister
18
18
  from qiskit.exceptions import QiskitError
19
19
 
20
20
 
@@ -11,10 +11,11 @@
11
11
  # that they have been altered from the originals.
12
12
 
13
13
  """Helper function for converting a circuit to an instruction."""
14
+ from qiskit.circuit.controlflow import CONTROL_FLOW_OP_NAMES
14
15
  from qiskit.exceptions import QiskitError
15
16
  from qiskit.circuit.instruction import Instruction
16
- from qiskit.circuit.quantumregister import QuantumRegister
17
- from qiskit.circuit.classicalregister import ClassicalRegister, Clbit
17
+ from qiskit.circuit import QuantumRegister
18
+ from qiskit.circuit import ClassicalRegister
18
19
 
19
20
 
20
21
  def circuit_to_instruction(circuit, parameter_map=None, equivalence_library=None, label=None):
@@ -43,7 +44,9 @@ def circuit_to_instruction(circuit, parameter_map=None, equivalence_library=None
43
44
  yield the components comprising the original circuit.
44
45
 
45
46
  Example:
46
- .. code-block::
47
+ .. plot::
48
+ :include-source:
49
+ :nofigs:
47
50
 
48
51
  from qiskit import QuantumRegister, ClassicalRegister, QuantumCircuit
49
52
  from qiskit.converters import circuit_to_instruction
@@ -54,7 +57,7 @@ def circuit_to_instruction(circuit, parameter_map=None, equivalence_library=None
54
57
  circ.h(q[0])
55
58
  circ.cx(q[0], q[1])
56
59
  circ.measure(q[0], c[0])
57
- circ.rz(0.5, q[1]).c_if(c, 2)
60
+ circ.rz(0.5, q[1])
58
61
  circuit_to_instruction(circ)
59
62
  """
60
63
  # pylint: disable=cyclic-import
@@ -81,6 +84,10 @@ def circuit_to_instruction(circuit, parameter_map=None, equivalence_library=None
81
84
  "Circuits with internal variables cannot yet be converted to instructions."
82
85
  " You may be able to use `QuantumCircuit.compose` to inline this circuit into another."
83
86
  )
87
+ if CONTROL_FLOW_OP_NAMES.intersection(circuit.count_ops()):
88
+ raise QiskitError(
89
+ "Circuits with control flow operations cannot be converted to an instruction."
90
+ )
84
91
 
85
92
  if parameter_map is None:
86
93
  parameter_dict = {p: p for p in circuit.parameters}
@@ -117,36 +124,16 @@ def circuit_to_instruction(circuit, parameter_map=None, equivalence_library=None
117
124
  creg = ClassicalRegister(out_instruction.num_clbits, "c")
118
125
  regs.append(creg)
119
126
 
120
- clbit_map = {bit: creg[idx] for idx, bit in enumerate(circuit.clbits)}
121
- operation_map = {}
122
-
123
- def fix_condition(op):
124
- original_id = id(op)
125
- if (out := operation_map.get(original_id)) is not None:
126
- return out
127
-
128
- condition = getattr(op, "_condition", None)
129
- if condition:
130
- reg, val = condition
131
- if isinstance(reg, Clbit):
132
- op = op.c_if(clbit_map[reg], val)
133
- elif reg.size == creg.size:
134
- op = op.c_if(creg, val)
135
- else:
136
- raise QiskitError(
137
- "Cannot convert condition in circuit with "
138
- "multiple classical registers to instruction"
139
- )
140
- operation_map[original_id] = op
141
- return op
142
-
143
127
  data = target._data.copy()
144
128
  data.replace_bits(qubits=qreg, clbits=creg)
145
- data.map_nonstandard_ops(fix_condition)
146
129
 
147
- qc = QuantumCircuit(*regs, name=out_instruction.name)
130
+ qc = QuantumCircuit(name=out_instruction.name)
148
131
  qc._data = data
149
132
 
133
+ # Re-add the registers.
134
+ for reg in regs:
135
+ qc.add_register(reg)
136
+
150
137
  if circuit.global_phase:
151
138
  qc.global_phase = circuit.global_phase
152
139
 
@@ -49,7 +49,7 @@ def dag_to_circuit(dag, copy_operations=True):
49
49
  circ.h(q[0])
50
50
  circ.cx(q[0], q[1])
51
51
  circ.measure(q[0], c[0])
52
- circ.rz(0.5, q[1]).c_if(c, 2)
52
+ circ.rz(0.5, q[1])
53
53
  dag = circuit_to_dag(circ)
54
54
  circuit = dag_to_circuit(dag)
55
55
  circuit.draw('mpl')
@@ -66,15 +66,14 @@ def dag_to_circuit(dag, copy_operations=True):
66
66
  name=name,
67
67
  global_phase=dag.global_phase,
68
68
  inputs=dag.iter_input_vars(),
69
- captures=dag.iter_captured_vars(),
69
+ captures=dag.iter_captures(),
70
70
  )
71
71
  for var in dag.iter_declared_vars():
72
72
  circuit.add_uninitialized_var(var)
73
- circuit.metadata = dag.metadata
74
- circuit._calibrations_prop = dag._calibrations_prop
75
-
73
+ for stretch in dag.iter_declared_stretches():
74
+ circuit.add_stretch(stretch)
75
+ circuit.metadata = dag.metadata or {}
76
76
  circuit._data = circuit_data
77
-
78
- circuit._duration = dag.duration
79
- circuit._unit = dag.unit
77
+ circuit._duration = dag._duration
78
+ circuit._unit = dag._unit
80
79
  return circuit
@@ -50,6 +50,5 @@ def dag_to_dagdependency(dag, create_preds_and_succs=True):
50
50
 
51
51
  # copy metadata
52
52
  dagdependency.global_phase = dag.global_phase
53
- dagdependency._calibrations_prop = dag._calibrations_prop
54
53
 
55
54
  return dagdependency