qiskit 1.4.1__cp39-abi3-macosx_11_0_arm64.whl → 2.0.0rc1__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 (456) hide show
  1. qiskit/VERSION.txt +1 -1
  2. qiskit/__init__.py +2 -5
  3. qiskit/_accelerate.abi3.so +0 -0
  4. qiskit/circuit/__init__.py +24 -5
  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 +248 -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 +34 -5
  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/hamiltonian_gate.py +1 -1
  60. qiskit/circuit/library/n_local/evolved_operator_ansatz.py +1 -1
  61. qiskit/circuit/library/n_local/n_local.py +1 -1
  62. qiskit/circuit/library/n_local/qaoa_ansatz.py +1 -1
  63. qiskit/circuit/library/overlap.py +2 -2
  64. qiskit/circuit/library/pauli_evolution.py +39 -24
  65. qiskit/circuit/library/phase_oracle.py +130 -51
  66. qiskit/circuit/library/standard_gates/__init__.py +0 -1
  67. qiskit/circuit/library/standard_gates/dcx.py +3 -4
  68. qiskit/circuit/library/standard_gates/ecr.py +3 -4
  69. qiskit/circuit/library/standard_gates/global_phase.py +5 -6
  70. qiskit/circuit/library/standard_gates/h.py +4 -9
  71. qiskit/circuit/library/standard_gates/i.py +2 -2
  72. qiskit/circuit/library/standard_gates/iswap.py +3 -4
  73. qiskit/circuit/library/standard_gates/p.py +15 -34
  74. qiskit/circuit/library/standard_gates/r.py +2 -6
  75. qiskit/circuit/library/standard_gates/rx.py +5 -15
  76. qiskit/circuit/library/standard_gates/rxx.py +3 -6
  77. qiskit/circuit/library/standard_gates/ry.py +5 -17
  78. qiskit/circuit/library/standard_gates/ryy.py +3 -6
  79. qiskit/circuit/library/standard_gates/rz.py +5 -17
  80. qiskit/circuit/library/standard_gates/rzx.py +3 -6
  81. qiskit/circuit/library/standard_gates/rzz.py +3 -6
  82. qiskit/circuit/library/standard_gates/s.py +6 -15
  83. qiskit/circuit/library/standard_gates/swap.py +4 -11
  84. qiskit/circuit/library/standard_gates/sx.py +7 -12
  85. qiskit/circuit/library/standard_gates/t.py +6 -7
  86. qiskit/circuit/library/standard_gates/u.py +2 -10
  87. qiskit/circuit/library/standard_gates/u1.py +5 -16
  88. qiskit/circuit/library/standard_gates/u2.py +2 -6
  89. qiskit/circuit/library/standard_gates/u3.py +3 -11
  90. qiskit/circuit/library/standard_gates/x.py +13 -60
  91. qiskit/circuit/library/standard_gates/xx_minus_yy.py +2 -5
  92. qiskit/circuit/library/standard_gates/xx_plus_yy.py +2 -5
  93. qiskit/circuit/library/standard_gates/y.py +4 -9
  94. qiskit/circuit/library/standard_gates/z.py +5 -15
  95. qiskit/circuit/measure.py +11 -2
  96. qiskit/circuit/parameterexpression.py +4 -0
  97. qiskit/circuit/quantumcircuit.py +881 -555
  98. qiskit/circuit/random/utils.py +12 -6
  99. qiskit/circuit/reset.py +5 -2
  100. qiskit/circuit/singleton.py +5 -11
  101. qiskit/circuit/store.py +0 -8
  102. qiskit/compiler/__init__.py +1 -7
  103. qiskit/compiler/transpiler.py +38 -196
  104. qiskit/converters/circuit_to_dag.py +4 -2
  105. qiskit/converters/circuit_to_dagdependency.py +0 -2
  106. qiskit/converters/circuit_to_dagdependency_v2.py +0 -1
  107. qiskit/converters/circuit_to_gate.py +1 -1
  108. qiskit/converters/circuit_to_instruction.py +16 -29
  109. qiskit/converters/dag_to_circuit.py +5 -5
  110. qiskit/converters/dag_to_dagdependency.py +0 -1
  111. qiskit/converters/dag_to_dagdependency_v2.py +0 -1
  112. qiskit/converters/dagdependency_to_circuit.py +0 -6
  113. qiskit/converters/dagdependency_to_dag.py +0 -6
  114. qiskit/dagcircuit/collect_blocks.py +32 -20
  115. qiskit/dagcircuit/dagdependency.py +3 -37
  116. qiskit/dagcircuit/dagdependency_v2.py +2 -80
  117. qiskit/dagcircuit/dagnode.py +14 -2
  118. qiskit/passmanager/__init__.py +24 -6
  119. qiskit/passmanager/passmanager.py +26 -24
  120. qiskit/primitives/__init__.py +44 -35
  121. qiskit/primitives/backend_estimator_v2.py +102 -23
  122. qiskit/primitives/backend_sampler_v2.py +5 -20
  123. qiskit/primitives/base/__init__.py +4 -4
  124. qiskit/primitives/base/base_estimator.py +77 -82
  125. qiskit/primitives/base/base_primitive_job.py +2 -2
  126. qiskit/primitives/base/{base_primitive.py → base_primitive_v1.py} +1 -1
  127. qiskit/primitives/base/{base_result.py → base_result_v1.py} +1 -1
  128. qiskit/primitives/base/base_sampler.py +52 -60
  129. qiskit/primitives/base/{estimator_result.py → estimator_result_v1.py} +2 -2
  130. qiskit/primitives/base/{sampler_result.py → sampler_result_v1.py} +2 -2
  131. qiskit/primitives/base/{validation.py → validation_v1.py} +34 -15
  132. qiskit/primitives/containers/bindings_array.py +3 -1
  133. qiskit/primitives/containers/bit_array.py +23 -0
  134. qiskit/primitives/containers/data_bin.py +3 -1
  135. qiskit/primitives/containers/observables_array.py +19 -2
  136. qiskit/primitives/statevector_sampler.py +6 -8
  137. qiskit/primitives/utils.py +14 -189
  138. qiskit/providers/__init__.py +4 -130
  139. qiskit/providers/backend.py +11 -314
  140. qiskit/providers/basic_provider/__init__.py +3 -1
  141. qiskit/providers/basic_provider/basic_provider.py +29 -9
  142. qiskit/providers/basic_provider/basic_simulator.py +158 -298
  143. qiskit/providers/exceptions.py +0 -33
  144. qiskit/providers/fake_provider/__init__.py +0 -37
  145. qiskit/providers/fake_provider/generic_backend_v2.py +32 -693
  146. qiskit/qasm2/__init__.py +21 -6
  147. qiskit/qasm2/export.py +2 -10
  148. qiskit/qasm2/parse.py +11 -25
  149. qiskit/qasm3/__init__.py +5 -1
  150. qiskit/qasm3/ast.py +44 -0
  151. qiskit/qasm3/exporter.py +65 -27
  152. qiskit/qasm3/printer.py +35 -4
  153. qiskit/qpy/__init__.py +141 -19
  154. qiskit/qpy/binary_io/__init__.py +0 -1
  155. qiskit/qpy/binary_io/circuits.py +91 -116
  156. qiskit/qpy/binary_io/schedules.py +61 -388
  157. qiskit/qpy/binary_io/value.py +154 -28
  158. qiskit/qpy/common.py +10 -7
  159. qiskit/qpy/formats.py +41 -0
  160. qiskit/qpy/interface.py +29 -62
  161. qiskit/qpy/type_keys.py +58 -221
  162. qiskit/quantum_info/analysis/distance.py +3 -1
  163. qiskit/quantum_info/operators/dihedral/dihedral.py +3 -1
  164. qiskit/quantum_info/operators/operator.py +6 -2
  165. qiskit/quantum_info/operators/symplectic/clifford.py +3 -1
  166. qiskit/quantum_info/operators/symplectic/pauli.py +4 -2
  167. qiskit/quantum_info/operators/symplectic/pauli_list.py +17 -5
  168. qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py +40 -6
  169. qiskit/quantum_info/states/densitymatrix.py +16 -6
  170. qiskit/quantum_info/states/stabilizerstate.py +35 -4
  171. qiskit/quantum_info/states/statevector.py +16 -6
  172. qiskit/result/__init__.py +5 -17
  173. qiskit/result/models.py +18 -10
  174. qiskit/result/result.py +28 -126
  175. qiskit/result/sampled_expval.py +1 -2
  176. qiskit/result/utils.py +3 -4
  177. qiskit/synthesis/__init__.py +21 -1
  178. qiskit/synthesis/arithmetic/__init__.py +3 -1
  179. qiskit/synthesis/arithmetic/adders/cdkm_ripple_carry_adder.py +1 -1
  180. qiskit/synthesis/arithmetic/adders/draper_qft_adder.py +1 -1
  181. qiskit/synthesis/arithmetic/adders/vbe_ripple_carry_adder.py +2 -2
  182. qiskit/{providers/fake_provider/backends_v1/fake_20q → synthesis/arithmetic/comparators}/__init__.py +4 -6
  183. qiskit/synthesis/arithmetic/comparators/compare_2s.py +112 -0
  184. qiskit/synthesis/arithmetic/comparators/compare_greedy.py +66 -0
  185. qiskit/synthesis/arithmetic/multipliers/hrs_cumulative_multiplier.py +1 -1
  186. qiskit/synthesis/arithmetic/multipliers/rg_qft_multiplier.py +1 -1
  187. qiskit/synthesis/arithmetic/weighted_sum.py +155 -0
  188. qiskit/{result/mitigation → synthesis/boolean}/__init__.py +2 -2
  189. qiskit/synthesis/boolean/boolean_expression.py +231 -0
  190. qiskit/synthesis/boolean/boolean_expression_synth.py +124 -0
  191. qiskit/synthesis/boolean/boolean_expression_visitor.py +96 -0
  192. qiskit/synthesis/discrete_basis/generate_basis_approximations.py +2 -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 +2 -40
  209. qiskit/transpiler/passes/basis/basis_translator.py +4 -3
  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 +4 -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 +1 -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 +30 -2
  245. qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py +20 -58
  246. qiskit/transpiler/passes/scheduling/padding/pad_delay.py +11 -3
  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 +127 -59
  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 +101 -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 +67 -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/dag_visualization.py +2 -1
  287. qiskit/visualization/gate_map.py +39 -154
  288. qiskit/visualization/pass_manager_visualization.py +6 -2
  289. qiskit/visualization/state_visualization.py +6 -0
  290. qiskit/visualization/timeline/core.py +18 -12
  291. qiskit/visualization/timeline/interface.py +19 -18
  292. {qiskit-1.4.1.dist-info → qiskit-2.0.0rc1.dist-info}/METADATA +2 -2
  293. {qiskit-1.4.1.dist-info → qiskit-2.0.0rc1.dist-info}/RECORD +297 -444
  294. {qiskit-1.4.1.dist-info → qiskit-2.0.0rc1.dist-info}/WHEEL +2 -1
  295. {qiskit-1.4.1.dist-info → qiskit-2.0.0rc1.dist-info}/entry_points.txt +8 -2
  296. qiskit/assembler/__init__.py +0 -42
  297. qiskit/assembler/assemble_circuits.py +0 -451
  298. qiskit/assembler/assemble_schedules.py +0 -367
  299. qiskit/assembler/disassemble.py +0 -310
  300. qiskit/assembler/run_config.py +0 -77
  301. qiskit/circuit/bit.py +0 -106
  302. qiskit/circuit/classicalfunction/__init__.py +0 -152
  303. qiskit/circuit/classicalfunction/boolean_expression.py +0 -138
  304. qiskit/circuit/classicalfunction/classical_element.py +0 -54
  305. qiskit/circuit/classicalfunction/classical_function_visitor.py +0 -155
  306. qiskit/circuit/classicalfunction/classicalfunction.py +0 -182
  307. qiskit/circuit/classicalfunction/exceptions.py +0 -41
  308. qiskit/circuit/classicalfunction/types.py +0 -18
  309. qiskit/circuit/classicalfunction/utils.py +0 -91
  310. qiskit/circuit/classicalregister.py +0 -57
  311. qiskit/circuit/library/standard_gates/multi_control_rotation_gates.py +0 -405
  312. qiskit/circuit/quantumregister.py +0 -75
  313. qiskit/circuit/register.py +0 -246
  314. qiskit/compiler/assembler.py +0 -689
  315. qiskit/compiler/scheduler.py +0 -109
  316. qiskit/compiler/sequencer.py +0 -71
  317. qiskit/primitives/backend_estimator.py +0 -486
  318. qiskit/primitives/backend_sampler.py +0 -222
  319. qiskit/primitives/estimator.py +0 -172
  320. qiskit/primitives/sampler.py +0 -162
  321. qiskit/providers/backend_compat.py +0 -507
  322. qiskit/providers/fake_provider/backends_v1/__init__.py +0 -22
  323. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/__init__.py +0 -18
  324. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/conf_washington.json +0 -1
  325. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/defs_washington.json +0 -1
  326. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/fake_127q_pulse_v1.py +0 -37
  327. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/props_washington.json +0 -1
  328. qiskit/providers/fake_provider/backends_v1/fake_20q/conf_singapore.json +0 -1
  329. qiskit/providers/fake_provider/backends_v1/fake_20q/fake_20q.py +0 -43
  330. qiskit/providers/fake_provider/backends_v1/fake_20q/props_singapore.json +0 -1
  331. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/__init__.py +0 -18
  332. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/conf_hanoi.json +0 -1
  333. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/defs_hanoi.json +0 -1
  334. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/fake_27q_pulse_v1.py +0 -50
  335. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/props_hanoi.json +0 -1
  336. qiskit/providers/fake_provider/backends_v1/fake_5q/__init__.py +0 -18
  337. qiskit/providers/fake_provider/backends_v1/fake_5q/conf_yorktown.json +0 -1
  338. qiskit/providers/fake_provider/backends_v1/fake_5q/fake_5q_v1.py +0 -41
  339. qiskit/providers/fake_provider/backends_v1/fake_5q/props_yorktown.json +0 -1
  340. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/__init__.py +0 -18
  341. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/conf_nairobi.json +0 -1
  342. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/defs_nairobi.json +0 -1
  343. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/fake_7q_pulse_v1.py +0 -44
  344. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/props_nairobi.json +0 -1
  345. qiskit/providers/fake_provider/fake_1q.py +0 -91
  346. qiskit/providers/fake_provider/fake_backend.py +0 -165
  347. qiskit/providers/fake_provider/fake_openpulse_2q.py +0 -391
  348. qiskit/providers/fake_provider/fake_openpulse_3q.py +0 -340
  349. qiskit/providers/fake_provider/fake_pulse_backend.py +0 -49
  350. qiskit/providers/fake_provider/fake_qasm_backend.py +0 -77
  351. qiskit/providers/fake_provider/utils/backend_converter.py +0 -150
  352. qiskit/providers/fake_provider/utils/json_decoder.py +0 -109
  353. qiskit/providers/models/__init__.py +0 -89
  354. qiskit/providers/models/backendconfiguration.py +0 -1040
  355. qiskit/providers/models/backendproperties.py +0 -535
  356. qiskit/providers/models/backendstatus.py +0 -104
  357. qiskit/providers/models/jobstatus.py +0 -77
  358. qiskit/providers/models/pulsedefaults.py +0 -305
  359. qiskit/providers/provider.py +0 -95
  360. qiskit/pulse/__init__.py +0 -158
  361. qiskit/pulse/builder.py +0 -2262
  362. qiskit/pulse/calibration_entries.py +0 -381
  363. qiskit/pulse/channels.py +0 -227
  364. qiskit/pulse/configuration.py +0 -245
  365. qiskit/pulse/exceptions.py +0 -45
  366. qiskit/pulse/filters.py +0 -309
  367. qiskit/pulse/instruction_schedule_map.py +0 -424
  368. qiskit/pulse/instructions/__init__.py +0 -67
  369. qiskit/pulse/instructions/acquire.py +0 -150
  370. qiskit/pulse/instructions/delay.py +0 -71
  371. qiskit/pulse/instructions/directives.py +0 -154
  372. qiskit/pulse/instructions/frequency.py +0 -135
  373. qiskit/pulse/instructions/instruction.py +0 -270
  374. qiskit/pulse/instructions/phase.py +0 -152
  375. qiskit/pulse/instructions/play.py +0 -99
  376. qiskit/pulse/instructions/reference.py +0 -100
  377. qiskit/pulse/instructions/snapshot.py +0 -82
  378. qiskit/pulse/library/__init__.py +0 -97
  379. qiskit/pulse/library/continuous.py +0 -430
  380. qiskit/pulse/library/pulse.py +0 -148
  381. qiskit/pulse/library/samplers/__init__.py +0 -15
  382. qiskit/pulse/library/samplers/decorators.py +0 -295
  383. qiskit/pulse/library/samplers/strategies.py +0 -71
  384. qiskit/pulse/library/symbolic_pulses.py +0 -1989
  385. qiskit/pulse/library/waveform.py +0 -136
  386. qiskit/pulse/macros.py +0 -262
  387. qiskit/pulse/parameter_manager.py +0 -445
  388. qiskit/pulse/parser.py +0 -314
  389. qiskit/pulse/reference_manager.py +0 -58
  390. qiskit/pulse/schedule.py +0 -1854
  391. qiskit/pulse/transforms/__init__.py +0 -106
  392. qiskit/pulse/transforms/alignments.py +0 -406
  393. qiskit/pulse/transforms/base_transforms.py +0 -71
  394. qiskit/pulse/transforms/canonicalization.py +0 -498
  395. qiskit/pulse/transforms/dag.py +0 -122
  396. qiskit/pulse/utils.py +0 -149
  397. qiskit/qobj/__init__.py +0 -75
  398. qiskit/qobj/common.py +0 -81
  399. qiskit/qobj/converters/__init__.py +0 -18
  400. qiskit/qobj/converters/lo_config.py +0 -177
  401. qiskit/qobj/converters/pulse_instruction.py +0 -897
  402. qiskit/qobj/pulse_qobj.py +0 -709
  403. qiskit/qobj/qasm_qobj.py +0 -708
  404. qiskit/qobj/utils.py +0 -46
  405. qiskit/result/mitigation/base_readout_mitigator.py +0 -79
  406. qiskit/result/mitigation/correlated_readout_mitigator.py +0 -277
  407. qiskit/result/mitigation/local_readout_mitigator.py +0 -328
  408. qiskit/result/mitigation/utils.py +0 -217
  409. qiskit/scheduler/__init__.py +0 -40
  410. qiskit/scheduler/config.py +0 -37
  411. qiskit/scheduler/lowering.py +0 -187
  412. qiskit/scheduler/methods/__init__.py +0 -15
  413. qiskit/scheduler/methods/basic.py +0 -140
  414. qiskit/scheduler/schedule_circuit.py +0 -69
  415. qiskit/scheduler/sequence.py +0 -104
  416. qiskit/transpiler/passes/calibration/__init__.py +0 -17
  417. qiskit/transpiler/passes/calibration/base_builder.py +0 -79
  418. qiskit/transpiler/passes/calibration/builders.py +0 -20
  419. qiskit/transpiler/passes/calibration/exceptions.py +0 -22
  420. qiskit/transpiler/passes/calibration/pulse_gate.py +0 -100
  421. qiskit/transpiler/passes/calibration/rx_builder.py +0 -164
  422. qiskit/transpiler/passes/calibration/rzx_builder.py +0 -411
  423. qiskit/transpiler/passes/calibration/rzx_templates.py +0 -58
  424. qiskit/transpiler/passes/optimization/cx_cancellation.py +0 -65
  425. qiskit/transpiler/passes/optimization/echo_rzx_weyl_decomposition.py +0 -162
  426. qiskit/transpiler/passes/optimization/normalize_rx_angle.py +0 -157
  427. qiskit/transpiler/passes/routing/stochastic_swap.py +0 -532
  428. qiskit/transpiler/passes/scheduling/alap.py +0 -153
  429. qiskit/transpiler/passes/scheduling/alignments/align_measures.py +0 -255
  430. qiskit/transpiler/passes/scheduling/alignments/pulse_gate_validation.py +0 -107
  431. qiskit/transpiler/passes/scheduling/asap.py +0 -175
  432. qiskit/transpiler/passes/scheduling/base_scheduler.py +0 -310
  433. qiskit/transpiler/passes/scheduling/dynamical_decoupling.py +0 -313
  434. qiskit/transpiler/passes/utils/convert_conditions_to_if_ops.py +0 -93
  435. qiskit/utils/deprecate_pulse.py +0 -119
  436. qiskit/utils/multiprocessing.py +0 -56
  437. qiskit/visualization/pulse_v2/__init__.py +0 -21
  438. qiskit/visualization/pulse_v2/core.py +0 -901
  439. qiskit/visualization/pulse_v2/device_info.py +0 -173
  440. qiskit/visualization/pulse_v2/drawings.py +0 -253
  441. qiskit/visualization/pulse_v2/events.py +0 -254
  442. qiskit/visualization/pulse_v2/generators/__init__.py +0 -40
  443. qiskit/visualization/pulse_v2/generators/barrier.py +0 -76
  444. qiskit/visualization/pulse_v2/generators/chart.py +0 -208
  445. qiskit/visualization/pulse_v2/generators/frame.py +0 -436
  446. qiskit/visualization/pulse_v2/generators/snapshot.py +0 -133
  447. qiskit/visualization/pulse_v2/generators/waveform.py +0 -645
  448. qiskit/visualization/pulse_v2/interface.py +0 -459
  449. qiskit/visualization/pulse_v2/layouts.py +0 -387
  450. qiskit/visualization/pulse_v2/plotters/__init__.py +0 -17
  451. qiskit/visualization/pulse_v2/plotters/base_plotter.py +0 -53
  452. qiskit/visualization/pulse_v2/plotters/matplotlib.py +0 -201
  453. qiskit/visualization/pulse_v2/stylesheet.py +0 -312
  454. qiskit/visualization/pulse_v2/types.py +0 -242
  455. {qiskit-1.4.1.dist-info → qiskit-2.0.0rc1.dist-info}/LICENSE.txt +0 -0
  456. {qiskit-1.4.1.dist-info → qiskit-2.0.0rc1.dist-info}/top_level.txt +0 -0
@@ -18,7 +18,7 @@ Visualizations (:mod:`qiskit.visualization`)
18
18
  .. currentmodule:: qiskit.visualization
19
19
 
20
20
  The visualization module contain functions that visualizes measurement outcome counts, quantum
21
- states, circuits, pulses, devices and more.
21
+ states, circuits, devices and more.
22
22
 
23
23
  To use visualization functions, you are required to install visualization optionals to your
24
24
  development environment:
@@ -63,6 +63,7 @@ You can specify ``legend``, ``title``, ``figsize`` and ``color`` by passing to t
63
63
  .. plot::
64
64
  :alt: Output from the previous code.
65
65
  :include-source:
66
+ :context: reset
66
67
 
67
68
  from qiskit.visualization import plot_histogram
68
69
 
@@ -87,6 +88,7 @@ You can save the figure to file either by passing the file name to ``filename``
87
88
  hist = plot_histogram(data)
88
89
  hist.savefig('new_hist.png')
89
90
 
91
+
90
92
  Counts Visualizations
91
93
  =====================
92
94
 
@@ -279,8 +281,6 @@ from .gate_map import plot_gate_map, plot_circuit_layout, plot_error_map, plot_c
279
281
  from .pass_manager_visualization import pass_manager_drawer
280
282
  from .pass_manager_visualization import staged_pass_manager_drawer
281
283
 
282
- from .pulse_v2 import draw as pulse_drawer
283
-
284
284
  from .timeline import draw as timeline_drawer
285
285
 
286
286
  from .exceptions import VisualizationError
@@ -288,7 +288,3 @@ from .exceptions import VisualizationError
288
288
  # These modules aren't part of the public interface, and were moved in Terra 0.22. They're
289
289
  # re-imported here to allow a backwards compatible path, and should be deprecated in Terra 0.23.
290
290
  from .circuit import text, matplotlib, latex
291
-
292
- # Prepare for migration of old versioned name to unversioned name. The `pulse_drawer_v2` name can
293
- # be deprecated in Terra 0.24, as `pulse_drawer` became available by that name in Terra 0.23.
294
- pulse_drawer_v2 = pulse_drawer
@@ -16,8 +16,10 @@ Tools to create LaTeX arrays.
16
16
  import numpy as np
17
17
 
18
18
  from qiskit.exceptions import MissingOptionalLibraryError
19
+ from qiskit.utils.optionals import HAS_SYMPY
19
20
 
20
21
 
22
+ @HAS_SYMPY.require_in_call("Create a latex representation of a ket expression")
21
23
  def _num_to_latex(raw_value, decimals=15, first_term=True, coefficient=False):
22
24
  """Convert a complex number to latex code suitable for a ket expression
23
25
 
@@ -83,6 +85,7 @@ def _matrix_to_latex(matrix, decimals=10, prefix="", max_size=(8, 8)):
83
85
 
84
86
  Raises:
85
87
  ValueError: If minimum value in max_size < 3
88
+ MissingOptionalLibraryError: If sympy is not installed
86
89
  """
87
90
  if min(max_size) < 3:
88
91
  raise ValueError("""Smallest value in max_size must be greater than or equal to 3""")
@@ -171,7 +174,7 @@ def array_to_latex(array, precision=10, prefix="", source=False, max_size=8):
171
174
  TypeError: If array can not be interpreted as a numerical numpy array.
172
175
  ValueError: If the dimension of array is not 1 or 2.
173
176
  MissingOptionalLibraryError: If ``source`` is ``False`` and ``IPython.display.Latex`` cannot be
174
- imported.
177
+ imported. Or if sympy is not installed.
175
178
  """
176
179
  try:
177
180
  array = np.asarray(array)
@@ -138,7 +138,7 @@ class Arrow3D(Patch3D, FancyArrowPatch):
138
138
 
139
139
  class Bloch:
140
140
  """Class for plotting data on the Bloch sphere. Valid data can be
141
- either points, vectors, or qobj objects.
141
+ either points or vectors.
142
142
 
143
143
  Attributes:
144
144
  axes (instance):
@@ -32,7 +32,7 @@ from qiskit.circuit import (
32
32
  )
33
33
  from qiskit.circuit.annotated_operation import AnnotatedOperation, InverseModifier, PowerModifier
34
34
  from qiskit.circuit.controlflow import condition_resources
35
- from qiskit.circuit.library import PauliEvolutionGate
35
+ from qiskit.circuit.library import PauliEvolutionGate, PhaseOracleGate, BitFlipOracleGate
36
36
  from qiskit.circuit.tools import pi_check
37
37
  from qiskit.converters import circuit_to_dag
38
38
  from qiskit.utils import optionals as _optionals
@@ -41,14 +41,10 @@ from ..exceptions import VisualizationError
41
41
 
42
42
 
43
43
  def _is_boolean_expression(gate_text, op):
44
- if not _optionals.HAS_TWEEDLEDUM:
45
- return False
46
- from qiskit.circuit.classicalfunction import BooleanExpression
44
+ return isinstance(op, (PhaseOracleGate, BitFlipOracleGate)) and gate_text == op.label
47
45
 
48
- return isinstance(op, BooleanExpression) and gate_text == op.name
49
46
 
50
-
51
- def get_gate_ctrl_text(op, drawer, style=None, calibrations=None):
47
+ def get_gate_ctrl_text(op, drawer, style=None):
52
48
  """Load the gate_text and ctrl_text strings based on names and labels"""
53
49
  anno_list = []
54
50
  anno_text = ""
@@ -123,13 +119,6 @@ def get_gate_ctrl_text(op, drawer, style=None, calibrations=None):
123
119
  ) and (op_type is not PauliEvolutionGate):
124
120
  gate_text = gate_text.capitalize()
125
121
 
126
- if drawer == "mpl" and op.name in calibrations:
127
- if isinstance(op, ControlledGate):
128
- ctrl_text = "" if ctrl_text is None else ctrl_text
129
- ctrl_text = "(cal)\n" + ctrl_text
130
- else:
131
- gate_text = gate_text + "\n(cal)"
132
-
133
122
  if anno_text:
134
123
  gate_text += " - " + anno_text
135
124
 
@@ -289,10 +278,21 @@ def get_wire_label(drawer, register, index, layout=None, cregbundle=True):
289
278
  f"{{{virt_reg.name}}}_{{{virt_reg[:].index(virt_bit)}}} \\mapsto {{{index}}}"
290
279
  )
291
280
  except StopIteration:
292
- if drawer == "text":
293
- wire_label = f"{virt_bit} -> {index}"
281
+ if virt_bit._register is not None:
282
+ virt_reg = virt_bit._register
283
+ if drawer == "text":
284
+ wire_label = f"{virt_reg.name}_{virt_reg[:].index(virt_bit)} -> {index}"
285
+ else:
286
+ wire_label = (
287
+ f"{{{virt_reg.name}}}_"
288
+ f"{{{virt_reg[:].index(virt_bit)}}} "
289
+ f"\\mapsto {{{index}}}"
290
+ )
294
291
  else:
295
- wire_label = f"{{{virt_bit}}} \\mapsto {{{index}}}"
292
+ if drawer == "text":
293
+ wire_label = f"{index_str} -> {index}"
294
+ else:
295
+ wire_label = f"{index_str} \\mapsto {{{index}}}"
296
296
  if drawer != "text":
297
297
  wire_label = wire_label.replace(" ", "\\;") # use wider spaces
298
298
  else:
@@ -461,9 +461,9 @@ def _get_layered_instructions(
461
461
  else:
462
462
  nodes = _LayerSpooler(dag, qubits, clbits, justify, measure_map)
463
463
 
464
- # Optionally remove all idle wires and instructions that are on them and
465
- # on them only.
466
464
  if not idle_wires:
465
+ # Optionally remove all idle wires and instructions that are on them and
466
+ # on them only.
467
467
  for wire in dag.idle_wires(ignore=["barrier", "delay"]):
468
468
  if wire in qubits:
469
469
  qubits.remove(wire)
@@ -64,7 +64,7 @@ def circuit_drawer(
64
64
  reverse_bits: bool | None = None,
65
65
  justify: str | None = None,
66
66
  vertical_compression: str | None = "medium",
67
- idle_wires: bool | None = None,
67
+ idle_wires: bool | str | None = None,
68
68
  with_layout: bool = True,
69
69
  fold: int | None = None,
70
70
  # The type of ax is matplotlib.axes.Axes, but this is not a fixed dependency, so cannot be
@@ -141,8 +141,10 @@ def circuit_drawer(
141
141
  merges the lines generated by the `text` output so the drawing
142
142
  will take less vertical room. Default is ``medium``. Only used by
143
143
  the ``text`` output, will be silently ignored otherwise.
144
- idle_wires: Include idle wires (wires with no circuit elements)
145
- in output visualization. Default is ``True`` unless the
144
+ idle_wires: Include (or not) idle wires (wires with no circuit elements)
145
+ in output visualization. The string ``"auto"`` is also possible, in which
146
+ case idle wires are show except that the circuit has a layout attached.
147
+ Default is ``"auto"`` unless the
146
148
  user config file (usually ``~/.qiskit/settings.conf``) has an
147
149
  alternative value set. For example, ``circuit_idle_wires = False``.
148
150
  with_layout: Include layout information, with labels on the
@@ -205,7 +207,7 @@ def circuit_drawer(
205
207
  # Get default from config file else use text
206
208
  default_output = "text"
207
209
  default_reverse_bits = False
208
- default_idle_wires = config.get("circuit_idle_wires", True)
210
+ default_idle_wires = config.get("circuit_idle_wires", "auto")
209
211
  if config:
210
212
  default_output = config.get("circuit_drawer", "text")
211
213
  if default_output == "auto":
@@ -223,6 +225,11 @@ def circuit_drawer(
223
225
 
224
226
  if idle_wires is None:
225
227
  idle_wires = default_idle_wires
228
+ if isinstance(idle_wires, str):
229
+ if idle_wires == "auto":
230
+ idle_wires = hasattr(circuit, "_layout") and circuit._layout is None
231
+ else:
232
+ raise VisualizationError(f"Parameter idle_wires={idle_wires} unrecognized.")
226
233
 
227
234
  if wire_order is not None and reverse_bits:
228
235
  raise VisualizationError(
@@ -29,6 +29,7 @@ from qiskit.circuit import (
29
29
  ControlledGate,
30
30
  Measure,
31
31
  ControlFlowOp,
32
+ BoxOp,
32
33
  WhileLoopOp,
33
34
  IfElseOp,
34
35
  ForLoopOp,
@@ -135,7 +136,6 @@ class MatplotlibDrawer:
135
136
 
136
137
  self._initial_state = initial_state
137
138
  self._global_phase = self._circuit.global_phase
138
- self._calibrations = self._circuit._calibrations_prop
139
139
  self._expr_len = expr_len
140
140
  self._cregbundle = cregbundle
141
141
 
@@ -420,7 +420,7 @@ class MatplotlibDrawer:
420
420
 
421
421
  base_type = getattr(op, "base_gate", None)
422
422
  gate_text, ctrl_text, raw_gate_text = get_gate_ctrl_text(
423
- op, "mpl", style=self._style, calibrations=self._calibrations
423
+ op, "mpl", style=self._style
424
424
  )
425
425
  node_data[node].gate_text = gate_text
426
426
  node_data[node].ctrl_text = ctrl_text
@@ -1074,7 +1074,7 @@ class MatplotlibDrawer:
1074
1074
  self._get_colors(node, node_data)
1075
1075
 
1076
1076
  if verbose:
1077
- print(op)
1077
+ print(op) # pylint: disable=bad-builtin
1078
1078
 
1079
1079
  # add conditional
1080
1080
  if getattr(op, "condition", None) or isinstance(op, SwitchCaseOp):
@@ -1455,7 +1455,7 @@ class MatplotlibDrawer:
1455
1455
 
1456
1456
  # Swap gate
1457
1457
  if isinstance(op, SwapGate):
1458
- self._swap(xy, node, node_data, node_data[node].lc)
1458
+ self._swap(xy, node_data[node].lc)
1459
1459
  return
1460
1460
 
1461
1461
  # RZZ Gate
@@ -1584,8 +1584,10 @@ class MatplotlibDrawer:
1584
1584
  flow_text = " For"
1585
1585
  elif isinstance(node.op, SwitchCaseOp):
1586
1586
  flow_text = "Switch"
1587
+ elif isinstance(node.op, BoxOp):
1588
+ flow_text = ""
1587
1589
  else:
1588
- flow_text = node.op.name
1590
+ raise RuntimeError(f"unhandled control-flow op: {node.name}")
1589
1591
 
1590
1592
  # Some spacers. op_spacer moves 'Switch' back a bit for alignment,
1591
1593
  # expr_spacer moves the expr over to line up with 'Switch' and
@@ -1595,6 +1597,10 @@ class MatplotlibDrawer:
1595
1597
  op_spacer = 0.04
1596
1598
  expr_spacer = 0.0
1597
1599
  empty_default_spacer = 0.3 if len(node.op.blocks[-1]) == 0 else 0.0
1600
+ elif isinstance(node.op, BoxOp):
1601
+ op_spacer = 0.0
1602
+ expr_spacer = 0.0
1603
+ empty_default_spacer = 0.0
1598
1604
  else:
1599
1605
  op_spacer = 0.08
1600
1606
  expr_spacer = 0.02
@@ -1747,7 +1753,7 @@ class MatplotlibDrawer:
1747
1753
  self._gate(node, node_data, glob_data, xy[num_ctrl_qubits:][0])
1748
1754
 
1749
1755
  elif isinstance(base_type, SwapGate):
1750
- self._swap(xy[num_ctrl_qubits:], node, node_data, node_data[node].lc)
1756
+ self._swap(xy[num_ctrl_qubits:], node_data[node].lc)
1751
1757
 
1752
1758
  else:
1753
1759
  self._multiqubit_gate(node, node_data, glob_data, xy[num_ctrl_qubits:])
@@ -1882,28 +1888,12 @@ class MatplotlibDrawer:
1882
1888
  )
1883
1889
  self._line(qubit_b, qubit_t, lc=lc)
1884
1890
 
1885
- def _swap(self, xy, node, node_data, color=None):
1891
+ def _swap(self, xy, color=None):
1886
1892
  """Draw a Swap gate"""
1887
1893
  self._swap_cross(xy[0], color=color)
1888
1894
  self._swap_cross(xy[1], color=color)
1889
1895
  self._line(xy[0], xy[1], lc=color)
1890
1896
 
1891
- # add calibration text
1892
- gate_text = node_data[node].gate_text.split("\n")[-1]
1893
- if node_data[node].raw_gate_text in self._calibrations:
1894
- xpos, ypos = xy[0]
1895
- self._ax.text(
1896
- xpos,
1897
- ypos + 0.7 * HIG,
1898
- gate_text,
1899
- ha="center",
1900
- va="top",
1901
- fontsize=self._style["sfs"],
1902
- color=self._style["tc"],
1903
- clip_on=True,
1904
- zorder=PORDER_TEXT,
1905
- )
1906
-
1907
1897
  def _swap_cross(self, xy, color=None):
1908
1898
  """Draw the Swap cross symbol"""
1909
1899
  xpos, ypos = xy
@@ -22,7 +22,7 @@ import sys
22
22
 
23
23
  from qiskit.circuit import Qubit, Clbit, ClassicalRegister, CircuitError
24
24
  from qiskit.circuit import ControlledGate, Reset, Measure
25
- from qiskit.circuit import ControlFlowOp, WhileLoopOp, IfElseOp, ForLoopOp, SwitchCaseOp
25
+ from qiskit.circuit import ControlFlowOp, WhileLoopOp, IfElseOp, ForLoopOp, SwitchCaseOp, BoxOp
26
26
  from qiskit.circuit.classical import expr
27
27
  from qiskit.circuit.controlflow import node_resources
28
28
  from qiskit.circuit.library.standard_gates import IGate, RZZGate, SwapGate, SXGate, SXdgGate
@@ -1335,7 +1335,7 @@ class TextDrawing:
1335
1335
  if len(self._expr_text) > self.expr_len:
1336
1336
  self._expr_text = self._expr_text[: self.expr_len] + "..."
1337
1337
  else:
1338
- draw_conditional = not isinstance(node.op, ForLoopOp)
1338
+ draw_conditional = isinstance(node.op, (IfElseOp, WhileLoopOp, SwitchCaseOp))
1339
1339
 
1340
1340
  # # Draw a left box such as If, While, For, and Switch
1341
1341
  flow_layer = self.draw_flow_box(node, wire_map, CF_LEFT, conditional=draw_conditional)
@@ -1421,8 +1421,12 @@ class TextDrawing:
1421
1421
  else:
1422
1422
  index_str = str(indexset)
1423
1423
  label = "For-" + depth + " " + index_str
1424
- else:
1424
+ elif isinstance(op, BoxOp):
1425
+ label = "Box-" + depth + etext
1426
+ elif isinstance(op, SwitchCaseOp):
1425
1427
  label = "Switch-" + depth + etext
1428
+ else:
1429
+ raise RuntimeError(f"unhandled control-flow operation: {node.name}")
1426
1430
  elif section == CF_MID:
1427
1431
  if isinstance(op, IfElseOp):
1428
1432
  label = "Else-" + depth
@@ -113,7 +113,8 @@ def dag_drawer(dag, scale=0.7, filename=None, style="color"):
113
113
  circ.h(q[0])
114
114
  circ.cx(q[0], q[1])
115
115
  circ.measure(q[0], c[0])
116
- circ.rz(0.5, q[1]).c_if(c, 2)
116
+ with circ.if_test((c, 2)):
117
+ circ.rz(0.5, q[1])
117
118
 
118
119
  dag = circuit_to_dag(circ)
119
120
  dag_drawer(dag)
@@ -13,7 +13,6 @@
13
13
  """A module for visualizing device coupling maps"""
14
14
 
15
15
  import math
16
- import warnings
17
16
  from typing import List
18
17
 
19
18
  import numpy as np
@@ -22,17 +21,10 @@ from rustworkx.visualization import graphviz_draw
22
21
 
23
22
  from qiskit.exceptions import QiskitError
24
23
  from qiskit.utils import optionals as _optionals
25
- from qiskit.providers import BackendV2
26
- from qiskit.providers.exceptions import BackendPropertyError
27
24
  from qiskit.transpiler.coupling import CouplingMap
28
25
  from .exceptions import VisualizationError
29
26
 
30
27
 
31
- def _get_backend_interface_version(backend):
32
- backend_interface_version = getattr(backend, "version", None)
33
- return backend_interface_version
34
-
35
-
36
28
  @_optionals.HAS_MATPLOTLIB.require_in_call
37
29
  def plot_gate_map(
38
30
  backend,
@@ -52,12 +44,6 @@ def plot_gate_map(
52
44
  ):
53
45
  """Plots the gate map of a device.
54
46
 
55
- .. deprecated:: 1.4
56
- The function ``plot_gate_map`` will stop supporting inputs of type
57
- :class:`.BackendV1` in the `backend` parameter in a future release no
58
- earlier than 2.0. :class:`.BackendV1` is deprecated and implementations should
59
- move to :class:`.BackendV2`.
60
-
61
47
  Args:
62
48
  backend (Backend): The backend instance that will be used to plot the device
63
49
  gate map.
@@ -100,15 +86,6 @@ def plot_gate_map(
100
86
 
101
87
  plot_gate_map(backend)
102
88
  """
103
- if not isinstance(backend, BackendV2):
104
- warnings.warn(
105
- "The function `plot_gate_map` will stop supporting inputs of "
106
- f"type `BackendV1` ( {backend} ) in the `backend` parameter in a future "
107
- "release no earlier than 2.0. `BackendV1` is deprecated and implementations "
108
- "should move to `BackendV2`.",
109
- category=DeprecationWarning,
110
- stacklevel=2,
111
- )
112
89
  qubit_coordinates_map = {}
113
90
 
114
91
  qubit_coordinates_map[5] = [[1, 0], [0, 1], [1, 1], [1, 2], [2, 1]]
@@ -926,18 +903,9 @@ def plot_gate_map(
926
903
  [24, 26],
927
904
  ]
928
905
 
929
- backend_version = _get_backend_interface_version(backend)
930
- if backend_version <= 1:
931
- if backend.configuration().simulator:
932
- raise QiskitError("Requires a device backend, not simulator.")
933
- config = backend.configuration()
934
- num_qubits = config.n_qubits
935
- coupling_map = CouplingMap(config.coupling_map)
936
- name = backend.name()
937
- else:
938
- num_qubits = backend.num_qubits
939
- coupling_map = backend.coupling_map
940
- name = backend.name
906
+ num_qubits = backend.num_qubits
907
+ coupling_map = backend.coupling_map
908
+ name = backend.name
941
909
  if qubit_coordinates is None and ("ibm" in name or "fake" in name):
942
910
  qubit_coordinates = qubit_coordinates_map.get(num_qubits, None)
943
911
 
@@ -1162,12 +1130,6 @@ def plot_circuit_layout(circuit, backend, view="virtual", qubit_coordinates=None
1162
1130
  """Plot the layout of a circuit transpiled for a given
1163
1131
  target backend.
1164
1132
 
1165
- .. deprecated:: 1.4
1166
- The function ``plot_circuit_layout`` will stop supporting inputs of type
1167
- :class:`.BackendV1` in the `backend` parameter in a future release no
1168
- earlier than 2.0. :class:`.BackendV1` is deprecated and implementations should
1169
- move to :class:`.BackendV2`.
1170
-
1171
1133
  Args:
1172
1134
  circuit (QuantumCircuit): Input quantum circuit.
1173
1135
  backend (Backend): Target backend.
@@ -1210,29 +1172,12 @@ def plot_circuit_layout(circuit, backend, view="virtual", qubit_coordinates=None
1210
1172
  new_circ_lv3 = transpile(ghz, backend=backend, optimization_level=3)
1211
1173
  plot_circuit_layout(new_circ_lv3, backend)
1212
1174
  """
1213
-
1214
- if not isinstance(backend, BackendV2):
1215
- warnings.warn(
1216
- "The function `plot_circuit_layout` will stop supporting inputs of "
1217
- f"type `BackendV1` ( {backend} ) in the `backend` parameter in a future "
1218
- "release no earlier than 2.0. `BackendV1` is deprecated and implementations "
1219
- "should move to `BackendV2`.",
1220
- category=DeprecationWarning,
1221
- stacklevel=2,
1222
- )
1223
-
1224
1175
  if circuit._layout is None:
1225
1176
  raise QiskitError("Circuit has no layout. Perhaps it has not been transpiled.")
1226
1177
 
1227
- backend_version = _get_backend_interface_version(backend)
1228
- if backend_version <= 1:
1229
- num_qubits = backend.configuration().n_qubits
1230
- cmap = backend.configuration().coupling_map
1231
- cmap_len = len(cmap)
1232
- else:
1233
- num_qubits = backend.num_qubits
1234
- cmap = backend.coupling_map
1235
- cmap_len = cmap.graph.num_edges()
1178
+ num_qubits = backend.num_qubits
1179
+ cmap = backend.coupling_map
1180
+ cmap_len = cmap.graph.num_edges()
1236
1181
 
1237
1182
  qubits = []
1238
1183
  qubit_labels = [""] * num_qubits
@@ -1288,12 +1233,6 @@ def plot_circuit_layout(circuit, backend, view="virtual", qubit_coordinates=None
1288
1233
  def plot_error_map(backend, figsize=(15, 12), show_title=True, qubit_coordinates=None):
1289
1234
  """Plots the error map of a given backend.
1290
1235
 
1291
- .. deprecated:: 1.4
1292
- The function ``plot_error_map`` will stop supporting inputs of type
1293
- :class:`.BackendV1` in the `backend` parameter in a future release no
1294
- earlier than 2.0. :class:`.BackendV1` is deprecated and implementations should
1295
- move to :class:`.BackendV2`.
1296
-
1297
1236
  Args:
1298
1237
  backend (Backend): Given backend.
1299
1238
  figsize (tuple): Figure size in inches.
@@ -1322,16 +1261,6 @@ def plot_error_map(backend, figsize=(15, 12), show_title=True, qubit_coordinates
1322
1261
  backend = GenericBackendV2(num_qubits=5)
1323
1262
  plot_error_map(backend)
1324
1263
  """
1325
- if not isinstance(backend, BackendV2):
1326
- warnings.warn(
1327
- "The function `plot_error_map` will stop supporting inputs of "
1328
- f"type `BackendV1` ( {backend} ) in the `backend` parameter in a future "
1329
- "release no earlier than 2.0. `BackendV1` is deprecated and implementations "
1330
- "should move to `BackendV2`.",
1331
- category=DeprecationWarning,
1332
- stacklevel=2,
1333
- )
1334
-
1335
1264
  import matplotlib
1336
1265
  import matplotlib.pyplot as plt
1337
1266
  from matplotlib import gridspec, ticker
@@ -1340,84 +1269,40 @@ def plot_error_map(backend, figsize=(15, 12), show_title=True, qubit_coordinates
1340
1269
 
1341
1270
  color_map = sns.cubehelix_palette(reverse=True, as_cmap=True)
1342
1271
 
1343
- backend_version = _get_backend_interface_version(backend)
1344
- if backend_version <= 1:
1345
- backend_name = backend.name()
1346
- num_qubits = backend.configuration().n_qubits
1347
- cmap = backend.configuration().coupling_map
1348
- props = backend.properties()
1349
- props_dict = props.to_dict()
1350
- single_gate_errors = [0] * num_qubits
1351
- read_err = [0] * num_qubits
1352
- cx_errors = []
1353
- # sx error rates
1354
- for gate in props_dict["gates"]:
1355
- if gate["gate"] == "sx":
1356
- _qubit = gate["qubits"][0]
1357
- for param in gate["parameters"]:
1358
- if param["name"] == "gate_error":
1359
- single_gate_errors[_qubit] = param["value"]
1360
- break
1361
- else:
1362
- raise VisualizationError(
1363
- f"Backend '{backend}' did not supply an error for the 'sx' gate."
1364
- )
1365
- if cmap:
1366
- directed = False
1367
- if num_qubits < 20:
1368
- for edge in cmap:
1369
- if not [edge[1], edge[0]] in cmap:
1370
- directed = True
1371
- break
1372
-
1373
- for line in cmap:
1374
- for item in props_dict["gates"]:
1375
- if item["qubits"] == line:
1376
- cx_errors.append(item["parameters"][0]["value"])
1377
- break
1378
- for qubit in range(num_qubits):
1379
- try:
1380
- read_err[qubit] = props.readout_error(qubit)
1381
- except BackendPropertyError:
1382
- pass
1383
-
1384
- else:
1385
- backend_name = backend.name
1386
- num_qubits = backend.num_qubits
1387
- cmap = backend.coupling_map
1388
- two_q_error_map = {}
1389
- single_gate_errors = [0] * num_qubits
1390
- read_err = [0] * num_qubits
1391
- cx_errors = []
1392
- for gate, prop_dict in backend.target.items():
1393
- if prop_dict is None or None in prop_dict:
1272
+ backend_name = backend.name
1273
+ num_qubits = backend.num_qubits
1274
+ cmap = backend.coupling_map
1275
+ two_q_error_map = {}
1276
+ single_gate_errors = [0] * num_qubits
1277
+ read_err = [0] * num_qubits
1278
+ cx_errors = []
1279
+ for gate, prop_dict in backend.target.items():
1280
+ if prop_dict is None or None in prop_dict:
1281
+ continue
1282
+ for qargs, inst_props in prop_dict.items():
1283
+ if inst_props is None:
1394
1284
  continue
1395
- for qargs, inst_props in prop_dict.items():
1396
- if inst_props is None:
1397
- continue
1398
- if gate == "measure":
1399
- if inst_props.error is not None:
1400
- read_err[qargs[0]] = inst_props.error
1401
- elif len(qargs) == 1:
1402
- if inst_props.error is not None:
1403
- single_gate_errors[qargs[0]] = max(
1404
- single_gate_errors[qargs[0]], inst_props.error
1405
- )
1406
- elif len(qargs) == 2:
1407
- if inst_props.error is not None:
1408
- two_q_error_map[qargs] = max(
1409
- two_q_error_map.get(qargs, 0), inst_props.error
1410
- )
1411
- if cmap:
1412
- directed = False
1413
- if num_qubits < 20:
1414
- for edge in cmap:
1415
- if not [edge[1], edge[0]] in cmap:
1416
- directed = True
1417
- break
1418
- for line in cmap.get_edges():
1419
- err = two_q_error_map.get(tuple(line), 0)
1420
- cx_errors.append(err)
1285
+ if gate == "measure":
1286
+ if inst_props.error is not None:
1287
+ read_err[qargs[0]] = inst_props.error
1288
+ elif len(qargs) == 1:
1289
+ if inst_props.error is not None:
1290
+ single_gate_errors[qargs[0]] = max(
1291
+ single_gate_errors[qargs[0]], inst_props.error
1292
+ )
1293
+ elif len(qargs) == 2:
1294
+ if inst_props.error is not None:
1295
+ two_q_error_map[qargs] = max(two_q_error_map.get(qargs, 0), inst_props.error)
1296
+ if cmap:
1297
+ directed = False
1298
+ if num_qubits < 20:
1299
+ for edge in cmap:
1300
+ if not [edge[1], edge[0]] in cmap:
1301
+ directed = True
1302
+ break
1303
+ for line in cmap.get_edges():
1304
+ err = two_q_error_map.get(tuple(line), 0)
1305
+ cx_errors.append(err)
1421
1306
 
1422
1307
  # Convert to percent
1423
1308
  single_gate_errors = 100 * np.asarray(single_gate_errors)
@@ -56,7 +56,9 @@ def pass_manager_drawer(pass_manager, filename=None, style=None, raw=False):
56
56
  VisualizationError: If raw=True and filename=None.
57
57
 
58
58
  Example:
59
- .. code-block::
59
+ .. plot::
60
+ :include-source:
61
+ :nofigs:
60
62
 
61
63
  from qiskit import QuantumCircuit
62
64
  from qiskit.transpiler import generate_preset_pass_manager
@@ -131,7 +133,9 @@ def staged_pass_manager_drawer(pass_manager, filename=None, style=None, raw=Fals
131
133
  VisualizationError: If raw=True and filename=None.
132
134
 
133
135
  Example:
134
- .. code-block::
136
+ .. plot::
137
+ :include-source:
138
+ :nofigs:
135
139
 
136
140
  %matplotlib inline
137
141
  from qiskit.providers.fake_provider import GenericBackendV2
@@ -1266,6 +1266,9 @@ def state_to_latex(
1266
1266
 
1267
1267
  Returns:
1268
1268
  Latex representation of the state
1269
+ MissingOptionalLibrary: If SymPy isn't installed and ``'latex'`` or
1270
+ ``'latex_source'`` is selected for ``output``.
1271
+
1269
1272
  """
1270
1273
  if dims is None: # show dims if state is not only qubits
1271
1274
  if set(state.dims()) == {2}:
@@ -1438,6 +1441,9 @@ def state_drawer(state, output=None, **drawer_args):
1438
1441
 
1439
1442
  Raises:
1440
1443
  MissingOptionalLibraryError: when `output` is `latex` and IPython is not installed.
1444
+ or if SymPy isn't installed and ``'latex'`` or ``'latex_source'`` is selected for
1445
+ ``output``.
1446
+
1441
1447
  ValueError: when `output` is not a valid selection.
1442
1448
  """
1443
1449
  config = user_config.get_config()