qiskit 1.1.2__cp38-abi3-macosx_10_9_universal2.whl → 1.2.0rc1__cp38-abi3-macosx_10_9_universal2.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 (341) hide show
  1. qiskit/VERSION.txt +1 -1
  2. qiskit/__init__.py +27 -24
  3. qiskit/_accelerate.abi3.so +0 -0
  4. qiskit/_numpy_compat.py +1 -1
  5. qiskit/assembler/assemble_circuits.py +107 -64
  6. qiskit/assembler/assemble_schedules.py +5 -12
  7. qiskit/assembler/disassemble.py +10 -1
  8. qiskit/circuit/__init__.py +1 -1
  9. qiskit/circuit/_classical_resource_map.py +5 -5
  10. qiskit/circuit/_utils.py +0 -13
  11. qiskit/circuit/add_control.py +1 -1
  12. qiskit/circuit/annotated_operation.py +23 -1
  13. qiskit/circuit/classical/expr/expr.py +4 -4
  14. qiskit/circuit/classical/expr/visitors.py +1 -1
  15. qiskit/circuit/classical/types/__init__.py +1 -1
  16. qiskit/circuit/classical/types/types.py +2 -2
  17. qiskit/circuit/classicalfunction/boolean_expression.py +1 -1
  18. qiskit/circuit/classicalfunction/classical_function_visitor.py +5 -5
  19. qiskit/circuit/classicalfunction/utils.py +1 -1
  20. qiskit/circuit/classicalregister.py +1 -1
  21. qiskit/circuit/commutation_checker.py +83 -35
  22. qiskit/circuit/controlflow/_builder_utils.py +1 -1
  23. qiskit/circuit/controlflow/builder.py +10 -6
  24. qiskit/circuit/controlflow/if_else.py +2 -2
  25. qiskit/circuit/controlflow/switch_case.py +1 -1
  26. qiskit/circuit/delay.py +1 -1
  27. qiskit/circuit/duration.py +2 -2
  28. qiskit/circuit/equivalence.py +5 -7
  29. qiskit/circuit/gate.py +11 -8
  30. qiskit/circuit/instruction.py +31 -13
  31. qiskit/circuit/instructionset.py +2 -5
  32. qiskit/circuit/library/__init__.py +2 -1
  33. qiskit/circuit/library/arithmetic/linear_amplitude_function.py +1 -1
  34. qiskit/circuit/library/arithmetic/linear_pauli_rotations.py +1 -1
  35. qiskit/circuit/library/arithmetic/piecewise_chebyshev.py +1 -1
  36. qiskit/circuit/library/arithmetic/piecewise_linear_pauli_rotations.py +1 -1
  37. qiskit/circuit/library/arithmetic/piecewise_polynomial_pauli_rotations.py +3 -3
  38. qiskit/circuit/library/arithmetic/polynomial_pauli_rotations.py +1 -1
  39. qiskit/circuit/library/basis_change/__init__.py +1 -1
  40. qiskit/circuit/library/basis_change/qft.py +40 -6
  41. qiskit/circuit/library/blueprintcircuit.py +3 -5
  42. qiskit/circuit/library/data_preparation/__init__.py +9 -2
  43. qiskit/circuit/library/data_preparation/initializer.py +8 -0
  44. qiskit/circuit/library/data_preparation/state_preparation.py +98 -178
  45. qiskit/circuit/library/generalized_gates/isometry.py +8 -8
  46. qiskit/circuit/library/generalized_gates/linear_function.py +3 -2
  47. qiskit/circuit/library/generalized_gates/mcg_up_to_diagonal.py +4 -4
  48. qiskit/circuit/library/generalized_gates/permutation.py +8 -9
  49. qiskit/circuit/library/generalized_gates/uc.py +3 -3
  50. qiskit/circuit/library/generalized_gates/uc_pauli_rot.py +2 -2
  51. qiskit/circuit/library/generalized_gates/unitary.py +13 -11
  52. qiskit/circuit/library/graph_state.py +1 -1
  53. qiskit/circuit/library/hamiltonian_gate.py +1 -2
  54. qiskit/circuit/library/hidden_linear_function.py +1 -1
  55. qiskit/circuit/library/n_local/evolved_operator_ansatz.py +3 -2
  56. qiskit/circuit/library/n_local/n_local.py +4 -5
  57. qiskit/circuit/library/n_local/pauli_two_design.py +1 -1
  58. qiskit/circuit/library/n_local/qaoa_ansatz.py +6 -8
  59. qiskit/circuit/library/n_local/two_local.py +1 -1
  60. qiskit/circuit/library/overlap.py +11 -5
  61. qiskit/circuit/library/pauli_evolution.py +7 -3
  62. qiskit/circuit/library/standard_gates/dcx.py +3 -0
  63. qiskit/circuit/library/standard_gates/ecr.py +3 -0
  64. qiskit/circuit/library/standard_gates/global_phase.py +3 -0
  65. qiskit/circuit/library/standard_gates/h.py +13 -5
  66. qiskit/circuit/library/standard_gates/i.py +3 -0
  67. qiskit/circuit/library/standard_gates/iswap.py +3 -0
  68. qiskit/circuit/library/standard_gates/multi_control_rotation_gates.py +19 -10
  69. qiskit/circuit/library/standard_gates/p.py +14 -9
  70. qiskit/circuit/library/standard_gates/r.py +3 -0
  71. qiskit/circuit/library/standard_gates/rx.py +21 -6
  72. qiskit/circuit/library/standard_gates/rxx.py +40 -1
  73. qiskit/circuit/library/standard_gates/ry.py +21 -6
  74. qiskit/circuit/library/standard_gates/ryy.py +40 -1
  75. qiskit/circuit/library/standard_gates/rz.py +22 -6
  76. qiskit/circuit/library/standard_gates/rzx.py +40 -1
  77. qiskit/circuit/library/standard_gates/rzz.py +41 -2
  78. qiskit/circuit/library/standard_gates/s.py +77 -0
  79. qiskit/circuit/library/standard_gates/swap.py +12 -5
  80. qiskit/circuit/library/standard_gates/sx.py +14 -5
  81. qiskit/circuit/library/standard_gates/t.py +5 -0
  82. qiskit/circuit/library/standard_gates/u.py +22 -7
  83. qiskit/circuit/library/standard_gates/u1.py +8 -3
  84. qiskit/circuit/library/standard_gates/u2.py +3 -0
  85. qiskit/circuit/library/standard_gates/u3.py +22 -7
  86. qiskit/circuit/library/standard_gates/x.py +156 -92
  87. qiskit/circuit/library/standard_gates/xx_minus_yy.py +40 -1
  88. qiskit/circuit/library/standard_gates/xx_plus_yy.py +52 -11
  89. qiskit/circuit/library/standard_gates/y.py +6 -1
  90. qiskit/circuit/library/standard_gates/z.py +8 -1
  91. qiskit/circuit/operation.py +1 -1
  92. qiskit/circuit/parameter.py +9 -10
  93. qiskit/circuit/parameterexpression.py +16 -13
  94. qiskit/circuit/parametertable.py +1 -190
  95. qiskit/circuit/parametervector.py +1 -1
  96. qiskit/circuit/quantumcircuit.py +392 -384
  97. qiskit/circuit/quantumcircuitdata.py +3 -5
  98. qiskit/circuit/quantumregister.py +1 -1
  99. qiskit/circuit/random/__init__.py +1 -1
  100. qiskit/circuit/random/utils.py +175 -26
  101. qiskit/circuit/register.py +5 -7
  102. qiskit/circuit/singleton.py +3 -3
  103. qiskit/circuit/tools/pi_check.py +4 -4
  104. qiskit/compiler/assembler.py +95 -24
  105. qiskit/compiler/scheduler.py +2 -2
  106. qiskit/compiler/transpiler.py +41 -127
  107. qiskit/converters/circuit_to_dag.py +4 -6
  108. qiskit/converters/circuit_to_gate.py +4 -8
  109. qiskit/converters/circuit_to_instruction.py +5 -17
  110. qiskit/converters/dag_to_circuit.py +2 -6
  111. qiskit/dagcircuit/collect_blocks.py +2 -2
  112. qiskit/dagcircuit/dagcircuit.py +190 -187
  113. qiskit/dagcircuit/dagdependency.py +4 -4
  114. qiskit/dagcircuit/dagdependency_v2.py +4 -4
  115. qiskit/dagcircuit/dagdepnode.py +1 -1
  116. qiskit/dagcircuit/dagnode.py +66 -157
  117. qiskit/passmanager/flow_controllers.py +1 -1
  118. qiskit/passmanager/passmanager.py +3 -3
  119. qiskit/primitives/__init__.py +1 -5
  120. qiskit/primitives/backend_estimator.py +25 -15
  121. qiskit/primitives/backend_estimator_v2.py +31 -7
  122. qiskit/primitives/backend_sampler.py +21 -12
  123. qiskit/primitives/backend_sampler_v2.py +12 -3
  124. qiskit/primitives/base/base_estimator.py +31 -4
  125. qiskit/primitives/base/base_primitive.py +2 -2
  126. qiskit/primitives/base/base_result.py +2 -2
  127. qiskit/primitives/base/base_sampler.py +26 -2
  128. qiskit/primitives/base/estimator_result.py +2 -2
  129. qiskit/primitives/base/sampler_result.py +2 -2
  130. qiskit/primitives/containers/__init__.py +0 -1
  131. qiskit/primitives/containers/bindings_array.py +2 -2
  132. qiskit/primitives/containers/bit_array.py +108 -10
  133. qiskit/primitives/containers/shape.py +3 -3
  134. qiskit/primitives/estimator.py +9 -2
  135. qiskit/primitives/primitive_job.py +1 -1
  136. qiskit/primitives/sampler.py +10 -3
  137. qiskit/primitives/statevector_estimator.py +5 -3
  138. qiskit/primitives/statevector_sampler.py +11 -5
  139. qiskit/primitives/utils.py +16 -0
  140. qiskit/providers/backend.py +15 -6
  141. qiskit/providers/backend_compat.py +7 -4
  142. qiskit/providers/basic_provider/basic_provider_tools.py +1 -1
  143. qiskit/providers/basic_provider/basic_simulator.py +32 -24
  144. qiskit/providers/fake_provider/fake_backend.py +10 -3
  145. qiskit/providers/fake_provider/fake_openpulse_2q.py +154 -146
  146. qiskit/providers/fake_provider/fake_openpulse_3q.py +226 -217
  147. qiskit/providers/fake_provider/fake_qasm_backend.py +5 -1
  148. qiskit/providers/fake_provider/generic_backend_v2.py +80 -50
  149. qiskit/providers/models/__init__.py +11 -0
  150. qiskit/providers/models/backendconfiguration.py +50 -4
  151. qiskit/providers/models/backendproperties.py +13 -2
  152. qiskit/providers/models/pulsedefaults.py +10 -11
  153. qiskit/providers/options.py +13 -13
  154. qiskit/providers/providerutils.py +3 -1
  155. qiskit/pulse/configuration.py +8 -12
  156. qiskit/pulse/instruction_schedule_map.py +3 -5
  157. qiskit/pulse/instructions/acquire.py +7 -8
  158. qiskit/pulse/instructions/instruction.py +2 -3
  159. qiskit/pulse/library/samplers/decorators.py +5 -9
  160. qiskit/pulse/library/symbolic_pulses.py +4 -7
  161. qiskit/pulse/library/waveform.py +2 -5
  162. qiskit/pulse/macros.py +11 -6
  163. qiskit/pulse/parser.py +8 -10
  164. qiskit/pulse/schedule.py +9 -17
  165. qiskit/pulse/transforms/alignments.py +1 -3
  166. qiskit/pulse/utils.py +1 -2
  167. qiskit/qasm/libs/stdgates.inc +35 -28
  168. qiskit/qasm2/__init__.py +7 -7
  169. qiskit/qasm2/export.py +5 -9
  170. qiskit/qasm2/parse.py +1 -1
  171. qiskit/qasm3/ast.py +9 -25
  172. qiskit/qasm3/exporter.py +578 -481
  173. qiskit/qasm3/printer.py +7 -16
  174. qiskit/qobj/common.py +10 -0
  175. qiskit/qobj/converters/lo_config.py +9 -0
  176. qiskit/qobj/converters/pulse_instruction.py +13 -6
  177. qiskit/qobj/pulse_qobj.py +69 -15
  178. qiskit/qobj/qasm_qobj.py +72 -20
  179. qiskit/qobj/utils.py +9 -0
  180. qiskit/qpy/binary_io/circuits.py +8 -5
  181. qiskit/qpy/binary_io/schedules.py +1 -1
  182. qiskit/qpy/binary_io/value.py +3 -3
  183. qiskit/qpy/interface.py +3 -2
  184. qiskit/qpy/type_keys.py +2 -2
  185. qiskit/quantum_info/operators/channel/quantum_channel.py +3 -6
  186. qiskit/quantum_info/operators/channel/superop.py +2 -2
  187. qiskit/quantum_info/operators/channel/transformations.py +1 -1
  188. qiskit/quantum_info/operators/dihedral/dihedral.py +3 -4
  189. qiskit/quantum_info/operators/dihedral/dihedral_circuits.py +1 -3
  190. qiskit/quantum_info/operators/dihedral/random.py +6 -3
  191. qiskit/quantum_info/operators/measures.py +2 -2
  192. qiskit/quantum_info/operators/op_shape.py +12 -20
  193. qiskit/quantum_info/operators/operator.py +14 -21
  194. qiskit/quantum_info/operators/predicates.py +1 -0
  195. qiskit/quantum_info/operators/symplectic/base_pauli.py +7 -11
  196. qiskit/quantum_info/operators/symplectic/clifford.py +1 -1
  197. qiskit/quantum_info/operators/symplectic/pauli.py +3 -3
  198. qiskit/quantum_info/operators/symplectic/pauli_list.py +9 -10
  199. qiskit/quantum_info/operators/symplectic/random.py +1 -1
  200. qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py +14 -16
  201. qiskit/quantum_info/quaternion.py +1 -1
  202. qiskit/quantum_info/states/densitymatrix.py +5 -8
  203. qiskit/quantum_info/states/stabilizerstate.py +128 -37
  204. qiskit/quantum_info/states/statevector.py +4 -8
  205. qiskit/result/counts.py +2 -2
  206. qiskit/result/mitigation/correlated_readout_mitigator.py +2 -2
  207. qiskit/result/mitigation/local_readout_mitigator.py +2 -2
  208. qiskit/result/mitigation/utils.py +1 -3
  209. qiskit/result/models.py +17 -16
  210. qiskit/result/result.py +15 -20
  211. qiskit/scheduler/lowering.py +2 -2
  212. qiskit/synthesis/__init__.py +2 -1
  213. qiskit/synthesis/clifford/__init__.py +1 -1
  214. qiskit/synthesis/clifford/clifford_decompose_ag.py +2 -2
  215. qiskit/synthesis/clifford/clifford_decompose_bm.py +10 -240
  216. qiskit/synthesis/clifford/clifford_decompose_greedy.py +9 -303
  217. qiskit/synthesis/clifford/clifford_decompose_layers.py +25 -23
  218. qiskit/synthesis/cnotdihedral/cnotdihedral_decompose_full.py +1 -1
  219. qiskit/synthesis/cnotdihedral/cnotdihedral_decompose_general.py +1 -1
  220. qiskit/synthesis/discrete_basis/generate_basis_approximations.py +1 -1
  221. qiskit/synthesis/discrete_basis/solovay_kitaev.py +2 -2
  222. qiskit/synthesis/evolution/evolution_synthesis.py +4 -2
  223. qiskit/synthesis/evolution/lie_trotter.py +46 -19
  224. qiskit/synthesis/evolution/product_formula.py +111 -55
  225. qiskit/synthesis/evolution/qdrift.py +40 -10
  226. qiskit/synthesis/evolution/suzuki_trotter.py +43 -33
  227. qiskit/synthesis/linear/__init__.py +1 -0
  228. qiskit/synthesis/linear/cnot_synth.py +22 -96
  229. qiskit/synthesis/linear/linear_depth_lnn.py +8 -8
  230. qiskit/synthesis/linear/linear_matrix_utils.py +13 -161
  231. qiskit/synthesis/linear_phase/cnot_phase_synth.py +1 -1
  232. qiskit/synthesis/linear_phase/cx_cz_depth_lnn.py +3 -3
  233. qiskit/synthesis/linear_phase/cz_depth_lnn.py +1 -1
  234. qiskit/synthesis/one_qubit/one_qubit_decompose.py +29 -29
  235. qiskit/synthesis/permutation/permutation_full.py +5 -29
  236. qiskit/synthesis/permutation/permutation_lnn.py +2 -24
  237. qiskit/synthesis/permutation/permutation_utils.py +2 -59
  238. qiskit/synthesis/qft/__init__.py +1 -0
  239. qiskit/synthesis/qft/qft_decompose_full.py +79 -0
  240. qiskit/synthesis/qft/qft_decompose_lnn.py +17 -9
  241. qiskit/synthesis/stabilizer/stabilizer_circuit.py +6 -6
  242. qiskit/synthesis/stabilizer/stabilizer_decompose.py +2 -2
  243. qiskit/synthesis/two_qubit/local_invariance.py +8 -38
  244. qiskit/synthesis/two_qubit/two_qubit_decompose.py +48 -129
  245. qiskit/synthesis/unitary/aqc/cnot_structures.py +1 -1
  246. qiskit/synthesis/unitary/qsd.py +5 -3
  247. qiskit/transpiler/__init__.py +1 -0
  248. qiskit/transpiler/basepasses.py +1 -1
  249. qiskit/transpiler/coupling.py +3 -3
  250. qiskit/transpiler/instruction_durations.py +1 -2
  251. qiskit/transpiler/layout.py +3 -3
  252. qiskit/transpiler/passes/__init__.py +2 -0
  253. qiskit/transpiler/passes/basis/basis_translator.py +82 -63
  254. qiskit/transpiler/passes/basis/translate_parameterized.py +3 -5
  255. qiskit/transpiler/passes/basis/unroll_3q_or_more.py +1 -1
  256. qiskit/transpiler/passes/basis/unroll_custom_definitions.py +10 -10
  257. qiskit/transpiler/passes/calibration/rx_builder.py +3 -3
  258. qiskit/transpiler/passes/calibration/rzx_builder.py +3 -3
  259. qiskit/transpiler/passes/layout/apply_layout.py +13 -3
  260. qiskit/transpiler/passes/layout/sabre_layout.py +10 -8
  261. qiskit/transpiler/passes/layout/sabre_pre_layout.py +4 -1
  262. qiskit/transpiler/passes/layout/set_layout.py +2 -2
  263. qiskit/transpiler/passes/layout/vf2_layout.py +1 -1
  264. qiskit/transpiler/passes/layout/vf2_utils.py +3 -3
  265. qiskit/transpiler/passes/optimization/__init__.py +1 -0
  266. qiskit/transpiler/passes/optimization/collect_multiqubit_blocks.py +2 -2
  267. qiskit/transpiler/passes/optimization/commutation_analysis.py +7 -10
  268. qiskit/transpiler/passes/optimization/commutative_cancellation.py +35 -19
  269. qiskit/transpiler/passes/optimization/consolidate_blocks.py +11 -8
  270. qiskit/transpiler/passes/optimization/inverse_cancellation.py +6 -6
  271. qiskit/transpiler/passes/optimization/optimize_1q_decomposition.py +64 -41
  272. qiskit/transpiler/passes/optimization/optimize_1q_gates.py +1 -1
  273. qiskit/transpiler/passes/optimization/split_2q_unitaries.py +83 -0
  274. qiskit/transpiler/passes/optimization/template_matching/backward_match.py +1 -1
  275. qiskit/transpiler/passes/optimization/template_matching/forward_match.py +2 -2
  276. qiskit/transpiler/passes/optimization/template_matching/template_substitution.py +1 -1
  277. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/commuting_2q_gate_router.py +3 -2
  278. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/swap_strategy.py +1 -1
  279. qiskit/transpiler/passes/routing/layout_transformation.py +2 -1
  280. qiskit/transpiler/passes/routing/sabre_swap.py +35 -26
  281. qiskit/transpiler/passes/routing/star_prerouting.py +80 -105
  282. qiskit/transpiler/passes/routing/stochastic_swap.py +1 -3
  283. qiskit/transpiler/passes/scheduling/alap.py +1 -2
  284. qiskit/transpiler/passes/scheduling/alignments/__init__.py +2 -2
  285. qiskit/transpiler/passes/scheduling/alignments/check_durations.py +1 -1
  286. qiskit/transpiler/passes/scheduling/alignments/pulse_gate_validation.py +1 -1
  287. qiskit/transpiler/passes/scheduling/alignments/reschedule.py +1 -1
  288. qiskit/transpiler/passes/scheduling/asap.py +1 -2
  289. qiskit/transpiler/passes/scheduling/base_scheduler.py +5 -5
  290. qiskit/transpiler/passes/scheduling/dynamical_decoupling.py +3 -3
  291. qiskit/transpiler/passes/scheduling/padding/base_padding.py +1 -1
  292. qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py +11 -11
  293. qiskit/transpiler/passes/scheduling/scheduling/base_scheduler.py +7 -6
  294. qiskit/transpiler/passes/scheduling/time_unit_conversion.py +4 -3
  295. qiskit/transpiler/passes/synthesis/high_level_synthesis.py +211 -36
  296. qiskit/transpiler/passes/synthesis/plugin.py +2 -2
  297. qiskit/transpiler/passes/synthesis/unitary_synthesis.py +80 -40
  298. qiskit/transpiler/passes/utils/__init__.py +0 -1
  299. qiskit/transpiler/passes/utils/check_gate_direction.py +4 -4
  300. qiskit/transpiler/passes/utils/check_map.py +3 -6
  301. qiskit/transpiler/passes/utils/convert_conditions_to_if_ops.py +3 -4
  302. qiskit/transpiler/passes/utils/error.py +2 -2
  303. qiskit/transpiler/passes/utils/fixed_point.py +3 -3
  304. qiskit/transpiler/passes/utils/gate_direction.py +1 -1
  305. qiskit/transpiler/passes/utils/gates_basis.py +1 -2
  306. qiskit/transpiler/passmanager.py +7 -6
  307. qiskit/transpiler/preset_passmanagers/__init__.py +4 -228
  308. qiskit/transpiler/preset_passmanagers/builtin_plugins.py +117 -18
  309. qiskit/transpiler/preset_passmanagers/common.py +3 -6
  310. qiskit/transpiler/preset_passmanagers/generate_preset_pass_manager.py +518 -0
  311. qiskit/transpiler/preset_passmanagers/level0.py +1 -1
  312. qiskit/transpiler/target.py +27 -8
  313. qiskit/user_config.py +29 -6
  314. qiskit/utils/classtools.py +3 -3
  315. qiskit/utils/deprecation.py +3 -2
  316. qiskit/utils/lazy_tester.py +2 -2
  317. qiskit/utils/optionals.py +8 -8
  318. qiskit/visualization/bloch.py +19 -67
  319. qiskit/visualization/circuit/_utils.py +34 -10
  320. qiskit/visualization/circuit/circuit_visualization.py +23 -16
  321. qiskit/visualization/circuit/latex.py +29 -27
  322. qiskit/visualization/circuit/matplotlib.py +4 -2
  323. qiskit/visualization/circuit/qcstyle.py +2 -2
  324. qiskit/visualization/circuit/text.py +9 -15
  325. qiskit/visualization/dag_visualization.py +5 -12
  326. qiskit/visualization/pulse_v2/core.py +1 -1
  327. qiskit/visualization/pulse_v2/events.py +1 -1
  328. qiskit/visualization/pulse_v2/generators/frame.py +3 -4
  329. qiskit/visualization/pulse_v2/generators/waveform.py +5 -9
  330. qiskit/visualization/pulse_v2/layouts.py +1 -5
  331. qiskit/visualization/pulse_v2/plotters/matplotlib.py +1 -2
  332. qiskit/visualization/state_visualization.py +5 -6
  333. qiskit/visualization/timeline/plotters/matplotlib.py +1 -2
  334. qiskit/visualization/transition_visualization.py +7 -2
  335. {qiskit-1.1.2.dist-info → qiskit-1.2.0rc1.dist-info}/METADATA +26 -26
  336. {qiskit-1.1.2.dist-info → qiskit-1.2.0rc1.dist-info}/RECORD +340 -338
  337. {qiskit-1.1.2.dist-info → qiskit-1.2.0rc1.dist-info}/WHEEL +1 -1
  338. {qiskit-1.1.2.dist-info → qiskit-1.2.0rc1.dist-info}/entry_points.txt +3 -0
  339. qiskit/transpiler/passes/utils/block_to_matrix.py +0 -47
  340. {qiskit-1.1.2.dist-info → qiskit-1.2.0rc1.dist-info}/LICENSE.txt +0 -0
  341. {qiskit-1.1.2.dist-info → qiskit-1.2.0rc1.dist-info}/top_level.txt +0 -0
@@ -13,7 +13,6 @@
13
13
  # pylint: disable=invalid-sequence-index
14
14
 
15
15
  """Circuit transpile function"""
16
- import copy
17
16
  import logging
18
17
  from time import time
19
18
  from typing import List, Union, Dict, Callable, Any, Optional, TypeVar
@@ -21,7 +20,6 @@ import warnings
21
20
 
22
21
  from qiskit import user_config
23
22
  from qiskit.circuit.quantumcircuit import QuantumCircuit
24
- from qiskit.circuit.quantumregister import Qubit
25
23
  from qiskit.dagcircuit import DAGCircuit
26
24
  from qiskit.providers.backend import Backend
27
25
  from qiskit.providers.backend_compat import BackendV2Converter
@@ -30,11 +28,10 @@ from qiskit.pulse import Schedule, InstructionScheduleMap
30
28
  from qiskit.transpiler import Layout, CouplingMap, PropertySet
31
29
  from qiskit.transpiler.basepasses import BasePass
32
30
  from qiskit.transpiler.exceptions import TranspilerError, CircuitTooWideForTarget
33
- from qiskit.transpiler.instruction_durations import InstructionDurations, InstructionDurationsType
31
+ from qiskit.transpiler.instruction_durations import InstructionDurationsType
34
32
  from qiskit.transpiler.passes.synthesis.high_level_synthesis import HLSConfig
35
33
  from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
36
- from qiskit.transpiler.timing_constraints import TimingConstraints
37
- from qiskit.transpiler.target import Target, target_to_backend_properties
34
+ from qiskit.transpiler.target import Target
38
35
 
39
36
  logger = logging.getLogger(__name__)
40
37
 
@@ -318,10 +315,28 @@ def transpile( # pylint: disable=too-many-return-statements
318
315
  optimization_level = config.get("transpile_optimization_level", 1)
319
316
 
320
317
  if backend is not None and getattr(backend, "version", 0) <= 1:
321
- # This is a temporary conversion step to allow for a smoother transition
322
- # to a fully target-based transpiler pipeline while maintaining the behavior
323
- # of `transpile` with BackendV1 inputs.
324
- backend = BackendV2Converter(backend)
318
+ warnings.warn(
319
+ "The `transpile` function will stop supporting inputs of "
320
+ f"type `BackendV1` ( {backend} ) in the `backend` parameter in a future "
321
+ "release no earlier than 2.0. `BackendV1` is deprecated and implementations "
322
+ "should move to `BackendV2`.",
323
+ category=DeprecationWarning,
324
+ stacklevel=2,
325
+ )
326
+ with warnings.catch_warnings():
327
+ # This is a temporary conversion step to allow for a smoother transition
328
+ # to a fully target-based transpiler pipeline while maintaining the behavior
329
+ # of `transpile` with BackendV1 inputs.
330
+ # TODO BackendV1 is deprecated and this path can be
331
+ # removed once it gets removed:
332
+ # https://github.com/Qiskit/qiskit/pull/12850
333
+ warnings.filterwarnings(
334
+ "ignore",
335
+ category=DeprecationWarning,
336
+ message=r".+qiskit\.providers\.backend_compat\.BackendV2Converter.+",
337
+ module="qiskit",
338
+ )
339
+ backend = BackendV2Converter(backend)
325
340
 
326
341
  if (
327
342
  scheduling_method is not None
@@ -335,73 +350,29 @@ def transpile( # pylint: disable=too-many-return-statements
335
350
  UserWarning,
336
351
  )
337
352
 
338
- _skip_target = False
339
- _given_inst_map = bool(inst_map) # check before inst_map is overwritten
340
- # If a target is specified, have it override any implicit selections from a backend
341
- if target is not None:
342
- if coupling_map is None:
343
- coupling_map = target.build_coupling_map()
344
- if basis_gates is None:
345
- basis_gates = list(target.operation_names)
346
- if instruction_durations is None:
347
- instruction_durations = target.durations()
348
- if inst_map is None:
349
- inst_map = target.instruction_schedule_map()
350
- if dt is None:
351
- dt = target.dt
352
- if timing_constraints is None:
353
- timing_constraints = target.timing_constraints()
354
- if backend_properties is None:
355
- backend_properties = target_to_backend_properties(target)
356
- # If target is not specified and any hardware constraint object is
357
- # manually specified, do not use the target from the backend as
358
- # it is invalidated by a custom basis gate list, custom coupling map,
359
- # custom dt or custom instruction_durations
360
- elif (
361
- basis_gates is not None # pylint: disable=too-many-boolean-expressions
362
- or coupling_map is not None
363
- or dt is not None
364
- or instruction_durations is not None
365
- or backend_properties is not None
366
- or timing_constraints is not None
367
- ):
368
- _skip_target = True
369
- else:
370
- target = getattr(backend, "target", None)
371
-
372
- initial_layout = _parse_initial_layout(initial_layout)
373
- coupling_map = _parse_coupling_map(coupling_map, backend)
374
- approximation_degree = _parse_approximation_degree(approximation_degree)
375
-
376
- output_name = _parse_output_name(output_name, circuits)
377
- inst_map = _parse_inst_map(inst_map, backend)
378
-
379
- _check_circuits_coupling_map(circuits, coupling_map, backend)
380
-
381
- timing_constraints = _parse_timing_constraints(backend, timing_constraints)
382
- instruction_durations = _parse_instruction_durations(backend, instruction_durations, dt)
383
-
384
- if _given_inst_map and inst_map.has_custom_gate() and target is not None:
385
- # Do not mutate backend target
386
- target = copy.deepcopy(target)
387
- target.update_from_instruction_schedule_map(inst_map)
388
-
389
353
  if not ignore_backend_supplied_default_methods:
390
354
  if scheduling_method is None and hasattr(backend, "get_scheduling_stage_plugin"):
391
355
  scheduling_method = backend.get_scheduling_stage_plugin()
392
356
  if translation_method is None and hasattr(backend, "get_translation_stage_plugin"):
393
357
  translation_method = backend.get_translation_stage_plugin()
394
358
 
359
+ output_name = _parse_output_name(output_name, circuits)
360
+ coupling_map = _parse_coupling_map(coupling_map)
361
+ _check_circuits_coupling_map(circuits, coupling_map, backend)
362
+
363
+ # Edge cases require using the old model (loose constraints) instead of building a target,
364
+ # but we don't populate the passmanager config with loose constraints unless it's one of
365
+ # the known edge cases to control the execution path.
395
366
  pm = generate_preset_pass_manager(
396
367
  optimization_level,
397
- backend=backend,
398
368
  target=target,
369
+ backend=backend,
399
370
  basis_gates=basis_gates,
400
- inst_map=inst_map,
401
371
  coupling_map=coupling_map,
402
372
  instruction_durations=instruction_durations,
403
373
  backend_properties=backend_properties,
404
374
  timing_constraints=timing_constraints,
375
+ inst_map=inst_map,
405
376
  initial_layout=initial_layout,
406
377
  layout_method=layout_method,
407
378
  routing_method=routing_method,
@@ -414,14 +385,15 @@ def transpile( # pylint: disable=too-many-return-statements
414
385
  hls_config=hls_config,
415
386
  init_method=init_method,
416
387
  optimization_method=optimization_method,
417
- _skip_target=_skip_target,
388
+ dt=dt,
418
389
  )
390
+
419
391
  out_circuits = pm.run(circuits, callback=callback, num_processes=num_processes)
392
+
420
393
  for name, circ in zip(output_name, out_circuits):
421
394
  circ.name = name
422
395
  end_time = time()
423
396
  _log_transpile_time(start_time, end_time)
424
-
425
397
  if arg_circuits_list:
426
398
  return out_circuits
427
399
  else:
@@ -447,72 +419,24 @@ def _check_circuits_coupling_map(circuits, cmap, backend):
447
419
 
448
420
 
449
421
  def _log_transpile_time(start_time, end_time):
450
- log_msg = "Total Transpile Time - %.5f (ms)" % ((end_time - start_time) * 1000)
422
+ log_msg = f"Total Transpile Time - {((end_time - start_time) * 1000):.5f} (ms)"
451
423
  logger.info(log_msg)
452
424
 
453
425
 
454
- def _parse_inst_map(inst_map, backend):
455
- # try getting inst_map from user, else backend
456
- if inst_map is None and backend is not None:
457
- inst_map = backend.target.instruction_schedule_map()
458
- return inst_map
459
-
460
-
461
- def _parse_coupling_map(coupling_map, backend):
462
- # try getting coupling_map from user, else backend
463
- if coupling_map is None and backend is not None:
464
- coupling_map = backend.coupling_map
465
-
426
+ def _parse_coupling_map(coupling_map):
466
427
  # coupling_map could be None, or a list of lists, e.g. [[0, 1], [2, 1]]
467
- if coupling_map is None or isinstance(coupling_map, CouplingMap):
468
- return coupling_map
469
428
  if isinstance(coupling_map, list) and all(
470
429
  isinstance(i, list) and len(i) == 2 for i in coupling_map
471
430
  ):
472
431
  return CouplingMap(coupling_map)
473
- else:
432
+ elif isinstance(coupling_map, list):
474
433
  raise TranspilerError(
475
434
  "Only a single input coupling map can be used with transpile() if you need to "
476
435
  "target different coupling maps for different circuits you must call transpile() "
477
436
  "multiple times"
478
437
  )
479
-
480
-
481
- def _parse_initial_layout(initial_layout):
482
- # initial_layout could be None, or a list of ints, e.g. [0, 5, 14]
483
- # or a list of tuples/None e.g. [qr[0], None, qr[1]] or a dict e.g. {qr[0]: 0}
484
- if initial_layout is None or isinstance(initial_layout, Layout):
485
- return initial_layout
486
- if isinstance(initial_layout, dict):
487
- return Layout(initial_layout)
488
- initial_layout = list(initial_layout)
489
- if all(phys is None or isinstance(phys, Qubit) for phys in initial_layout):
490
- return Layout.from_qubit_list(initial_layout)
491
- return initial_layout
492
-
493
-
494
- def _parse_instruction_durations(backend, inst_durations, dt):
495
- """Create a list of ``InstructionDuration``s. If ``inst_durations`` is provided,
496
- the backend will be ignored, otherwise, the durations will be populated from the
497
- backend.
498
- """
499
- final_durations = InstructionDurations()
500
- if not inst_durations:
501
- backend_durations = InstructionDurations()
502
- if backend is not None:
503
- backend_durations = backend.instruction_durations
504
- final_durations.update(backend_durations, dt or backend_durations.dt)
505
438
  else:
506
- final_durations.update(inst_durations, dt or getattr(inst_durations, "dt", None))
507
- return final_durations
508
-
509
-
510
- def _parse_approximation_degree(approximation_degree):
511
- if approximation_degree is None:
512
- return None
513
- if approximation_degree < 0.0 or approximation_degree > 1.0:
514
- raise TranspilerError("Approximation degree must be in [0.0, 1.0]")
515
- return approximation_degree
439
+ return coupling_map
516
440
 
517
441
 
518
442
  def _parse_output_name(output_name, circuits):
@@ -545,17 +469,7 @@ def _parse_output_name(output_name, circuits):
545
469
  else:
546
470
  raise TranspilerError(
547
471
  "The parameter output_name should be a string or a"
548
- "list of strings: %s was used." % type(output_name)
472
+ f"list of strings: {type(output_name)} was used."
549
473
  )
550
474
  else:
551
475
  return [circuit.name for circuit in circuits]
552
-
553
-
554
- def _parse_timing_constraints(backend, timing_constraints):
555
- if isinstance(timing_constraints, TimingConstraints):
556
- return timing_constraints
557
- if backend is None and timing_constraints is None:
558
- timing_constraints = TimingConstraints()
559
- elif backend is not None:
560
- timing_constraints = backend.target.timing_constraints()
561
- return timing_constraints
@@ -11,9 +11,8 @@
11
11
  # that they have been altered from the originals.
12
12
 
13
13
  """Helper function for converting a circuit to a dag"""
14
- import copy
15
14
 
16
- from qiskit.dagcircuit.dagcircuit import DAGCircuit
15
+ from qiskit.dagcircuit.dagcircuit import DAGCircuit, DAGOpNode
17
16
 
18
17
 
19
18
  def circuit_to_dag(circuit, copy_operations=True, *, qubit_order=None, clbit_order=None):
@@ -93,10 +92,9 @@ def circuit_to_dag(circuit, copy_operations=True, *, qubit_order=None, clbit_ord
93
92
  dagcircuit.add_creg(register)
94
93
 
95
94
  for instruction in circuit.data:
96
- op = instruction.operation
97
- if copy_operations:
98
- op = copy.deepcopy(op)
99
- dagcircuit.apply_operation_back(op, instruction.qubits, instruction.clbits, check=False)
95
+ dagcircuit._apply_op_node_back(
96
+ DAGOpNode.from_instruction(instruction, dag=dagcircuit, deepcopy=copy_operations)
97
+ )
100
98
 
101
99
  dagcircuit.duration = circuit.duration
102
100
  dagcircuit.unit = circuit.unit
@@ -64,10 +64,8 @@ def circuit_to_gate(circuit, parameter_map=None, equivalence_library=None, label
64
64
  for instruction in circuit.data:
65
65
  if not _check_is_gate(instruction.operation):
66
66
  raise QiskitError(
67
- (
68
- "One or more instructions cannot be converted to"
69
- ' a gate. "{}" is not a gate instruction'
70
- ).format(instruction.operation.name)
67
+ "One or more instructions cannot be converted to"
68
+ f' a gate. "{instruction.operation.name}" is not a gate instruction'
71
69
  )
72
70
 
73
71
  if parameter_map is None:
@@ -77,10 +75,8 @@ def circuit_to_gate(circuit, parameter_map=None, equivalence_library=None, label
77
75
 
78
76
  if parameter_dict.keys() != circuit.parameters:
79
77
  raise QiskitError(
80
- (
81
- "parameter_map should map all circuit parameters. "
82
- "Circuit parameters: {}, parameter_map: {}"
83
- ).format(circuit.parameters, parameter_dict)
78
+ "parameter_map should map all circuit parameters. "
79
+ f"Circuit parameters: {circuit.parameters}, parameter_map: {parameter_dict}"
84
80
  )
85
81
 
86
82
  gate = Gate(
@@ -11,7 +11,6 @@
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.parametertable import ParameterTable, ParameterReferences
15
14
  from qiskit.exceptions import QiskitError
16
15
  from qiskit.circuit.instruction import Instruction
17
16
  from qiskit.circuit.quantumregister import QuantumRegister
@@ -63,7 +62,7 @@ def circuit_to_instruction(circuit, parameter_map=None, equivalence_library=None
63
62
 
64
63
  if circuit.num_input_vars:
65
64
  # This could be supported by moving the `input` variables to be parameters of the
66
- # instruction, but we don't really have a good reprssentation of that yet, so safer to
65
+ # instruction, but we don't really have a good representation of that yet, so safer to
67
66
  # forbid it.
68
67
  raise QiskitError("Circuits with 'input' variables cannot yet be converted to instructions")
69
68
  if circuit.num_captured_vars:
@@ -90,10 +89,8 @@ def circuit_to_instruction(circuit, parameter_map=None, equivalence_library=None
90
89
 
91
90
  if parameter_dict.keys() != circuit.parameters:
92
91
  raise QiskitError(
93
- (
94
- "parameter_map should map all circuit parameters. "
95
- "Circuit parameters: {}, parameter_map: {}"
96
- ).format(circuit.parameters, parameter_dict)
92
+ "parameter_map should map all circuit parameters. "
93
+ f"Circuit parameters: {circuit.parameters}, parameter_map: {parameter_dict}"
97
94
  )
98
95
 
99
96
  out_instruction = Instruction(
@@ -121,7 +118,7 @@ def circuit_to_instruction(circuit, parameter_map=None, equivalence_library=None
121
118
  regs.append(creg)
122
119
 
123
120
  clbit_map = {bit: creg[idx] for idx, bit in enumerate(circuit.clbits)}
124
- operation_map = {id(ParameterTable.GLOBAL_PHASE): ParameterTable.GLOBAL_PHASE}
121
+ operation_map = {}
125
122
 
126
123
  def fix_condition(op):
127
124
  original_id = id(op)
@@ -145,19 +142,10 @@ def circuit_to_instruction(circuit, parameter_map=None, equivalence_library=None
145
142
 
146
143
  data = target._data.copy()
147
144
  data.replace_bits(qubits=qreg, clbits=creg)
148
- data.map_ops(fix_condition)
145
+ data.map_nonstandard_ops(fix_condition)
149
146
 
150
147
  qc = QuantumCircuit(*regs, name=out_instruction.name)
151
148
  qc._data = data
152
- qc._parameter_table = ParameterTable(
153
- {
154
- param: ParameterReferences(
155
- (operation_map[id(operation)], param_index)
156
- for operation, param_index in target._parameter_table[param]
157
- )
158
- for param in target._parameter_table
159
- }
160
- )
161
149
 
162
150
  if circuit.global_phase:
163
151
  qc.global_phase = circuit.global_phase
@@ -11,9 +11,8 @@
11
11
  # that they have been altered from the originals.
12
12
 
13
13
  """Helper function for converting a dag to a circuit."""
14
- import copy
15
14
 
16
- from qiskit.circuit import QuantumCircuit, CircuitInstruction
15
+ from qiskit.circuit import QuantumCircuit
17
16
 
18
17
 
19
18
  def dag_to_circuit(dag, copy_operations=True):
@@ -71,10 +70,7 @@ def dag_to_circuit(dag, copy_operations=True):
71
70
  circuit.calibrations = dag.calibrations
72
71
 
73
72
  for node in dag.topological_op_nodes():
74
- op = node.op
75
- if copy_operations:
76
- op = copy.deepcopy(op)
77
- circuit._append(CircuitInstruction(op, node.qargs, node.cargs))
73
+ circuit._append(node._to_circuit_instruction(deepcopy=copy_operations))
78
74
 
79
75
  circuit.duration = dag.duration
80
76
  circuit.unit = dag.unit
@@ -288,8 +288,8 @@ class BlockSplitter:
288
288
  self.group[self.find_leader(first)].append(node)
289
289
 
290
290
  blocks = []
291
- for index in self.leader:
292
- if self.leader[index] == index:
291
+ for index, item in self.leader.items():
292
+ if index == item:
293
293
  blocks.append(self.group[index])
294
294
 
295
295
  return blocks