qiskit 1.1.2__cp38-abi3-win32.whl → 1.2.0rc1__cp38-abi3-win32.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (341) hide show
  1. qiskit/VERSION.txt +1 -1
  2. qiskit/__init__.py +27 -24
  3. qiskit/_accelerate.pyd +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
@@ -28,21 +28,9 @@ from itertools import product
28
28
  from functools import partial
29
29
  import numpy as np
30
30
 
31
- from qiskit.converters import circuit_to_dag, dag_to_circuit
32
- from qiskit.transpiler import CouplingMap, Target
33
- from qiskit.transpiler.basepasses import TransformationPass
34
- from qiskit.transpiler.exceptions import TranspilerError
35
- from qiskit.dagcircuit.dagcircuit import DAGCircuit
36
- from qiskit.synthesis.one_qubit import one_qubit_decompose
37
- from qiskit.transpiler.passes.optimization.optimize_1q_decomposition import _possible_decomposers
38
- from qiskit.synthesis.two_qubit.xx_decompose import XXDecomposer, XXEmbodiments
39
- from qiskit.synthesis.two_qubit.two_qubit_decompose import (
40
- TwoQubitBasisDecomposer,
41
- TwoQubitWeylDecomposition,
42
- GATE_NAME_MAP,
43
- )
44
- from qiskit.quantum_info import Operator
45
- from qiskit.circuit import ControlFlowOp, Gate, Parameter
31
+ from qiskit.circuit.controlflow import CONTROL_FLOW_OP_NAMES
32
+ from qiskit.circuit import Gate, Parameter, CircuitInstruction
33
+ from qiskit.circuit.library.standard_gates import get_standard_gate_name_mapping
46
34
  from qiskit.circuit.library.standard_gates import (
47
35
  iSwapGate,
48
36
  CXGate,
@@ -51,14 +39,54 @@ from qiskit.circuit.library.standard_gates import (
51
39
  RZXGate,
52
40
  RZZGate,
53
41
  ECRGate,
42
+ RXGate,
43
+ SXGate,
44
+ XGate,
45
+ RZGate,
46
+ UGate,
47
+ PhaseGate,
48
+ U1Gate,
49
+ U2Gate,
50
+ U3Gate,
51
+ RYGate,
52
+ RGate,
54
53
  )
55
- from qiskit.transpiler.passes.synthesis import plugin
54
+ from qiskit.converters import circuit_to_dag, dag_to_circuit
55
+ from qiskit.dagcircuit.dagcircuit import DAGCircuit, DAGOpNode
56
+ from qiskit.exceptions import QiskitError
57
+ from qiskit.providers.models import BackendProperties
58
+ from qiskit.quantum_info import Operator
59
+ from qiskit.synthesis.one_qubit import one_qubit_decompose
60
+ from qiskit.synthesis.two_qubit.xx_decompose import XXDecomposer, XXEmbodiments
61
+ from qiskit.synthesis.two_qubit.two_qubit_decompose import (
62
+ TwoQubitBasisDecomposer,
63
+ TwoQubitWeylDecomposition,
64
+ )
65
+ from qiskit.transpiler.basepasses import TransformationPass
66
+ from qiskit.transpiler.coupling import CouplingMap
67
+ from qiskit.transpiler.exceptions import TranspilerError
56
68
  from qiskit.transpiler.passes.optimization.optimize_1q_decomposition import (
57
69
  Optimize1qGatesDecomposition,
70
+ _possible_decomposers,
58
71
  )
59
- from qiskit.providers.models import BackendProperties
60
- from qiskit.circuit.library.standard_gates import get_standard_gate_name_mapping
61
- from qiskit.exceptions import QiskitError
72
+ from qiskit.transpiler.passes.synthesis import plugin
73
+ from qiskit.transpiler.target import Target
74
+
75
+
76
+ GATE_NAME_MAP = {
77
+ "cx": CXGate._standard_gate,
78
+ "rx": RXGate._standard_gate,
79
+ "sx": SXGate._standard_gate,
80
+ "x": XGate._standard_gate,
81
+ "rz": RZGate._standard_gate,
82
+ "u": UGate._standard_gate,
83
+ "p": PhaseGate._standard_gate,
84
+ "u1": U1Gate._standard_gate,
85
+ "u2": U2Gate._standard_gate,
86
+ "u3": U3Gate._standard_gate,
87
+ "ry": RYGate._standard_gate,
88
+ "r": RGate._standard_gate,
89
+ }
62
90
 
63
91
 
64
92
  KAK_GATE_NAMES = {
@@ -415,7 +443,7 @@ class UnitarySynthesis(TransformationPass):
415
443
  if self.method == "default":
416
444
  # If the method is the default, we only need to evaluate one set of keyword arguments.
417
445
  # To simplify later logic, and avoid cases where static analysis might complain that we
418
- # haven't initialised the "default" handler, we rebind the names so they point to the
446
+ # haven't initialized the "default" handler, we rebind the names so they point to the
419
447
  # same object as the chosen method.
420
448
  default_method = plugin_method
421
449
  default_kwargs = plugin_kwargs
@@ -480,7 +508,9 @@ class UnitarySynthesis(TransformationPass):
480
508
  self, dag, qubit_indices, plugin_method, plugin_kwargs, default_method, default_kwargs
481
509
  ):
482
510
  """Inner loop for the optimizer, after all DAG-independent set-up has been completed."""
483
- for node in dag.op_nodes(ControlFlowOp):
511
+ for node in dag.op_nodes():
512
+ if node.name not in CONTROL_FLOW_OP_NAMES:
513
+ continue
484
514
  node.op = node.op.replace_blocks(
485
515
  [
486
516
  dag_to_circuit(
@@ -503,9 +533,9 @@ class UnitarySynthesis(TransformationPass):
503
533
 
504
534
  out_dag = dag.copy_empty_like()
505
535
  for node in dag.topological_op_nodes():
506
- if node.op.name == "unitary" and len(node.qargs) >= self._min_qubits:
536
+ if node.name == "unitary" and len(node.qargs) >= self._min_qubits:
507
537
  synth_dag = None
508
- unitary = node.op.to_matrix()
538
+ unitary = node.matrix
509
539
  n_qubits = len(node.qargs)
510
540
  if (
511
541
  plugin_method.max_qubits is not None and n_qubits > plugin_method.max_qubits
@@ -520,35 +550,42 @@ class UnitarySynthesis(TransformationPass):
520
550
  )
521
551
  synth_dag = method.run(unitary, **kwargs)
522
552
  if synth_dag is None:
523
- out_dag.apply_operation_back(node.op, node.qargs, node.cargs, check=False)
553
+ out_dag._apply_op_node_back(node)
524
554
  continue
525
555
  if isinstance(synth_dag, DAGCircuit):
526
556
  qubit_map = dict(zip(synth_dag.qubits, node.qargs))
527
557
  for node in synth_dag.topological_op_nodes():
528
- out_dag.apply_operation_back(
529
- node.op, (qubit_map[x] for x in node.qargs), check=False
530
- )
558
+ node.qargs = tuple(qubit_map[x] for x in node.qargs)
559
+ out_dag._apply_op_node_back(node)
531
560
  out_dag.global_phase += synth_dag.global_phase
532
561
  else:
533
562
  node_list, global_phase, gate = synth_dag
534
563
  qubits = node.qargs
564
+ user_gate_node = DAGOpNode(gate)
535
565
  for (
536
- op_name,
566
+ gate,
537
567
  params,
538
568
  qargs,
539
569
  ) in node_list:
540
- if op_name == "USER_GATE":
541
- op = gate
570
+ if gate is None:
571
+ node = DAGOpNode.from_instruction(
572
+ user_gate_node._to_circuit_instruction().replace(
573
+ params=user_gate_node.params,
574
+ qubits=tuple(qubits[x] for x in qargs),
575
+ ),
576
+ dag=out_dag,
577
+ )
542
578
  else:
543
- op = GATE_NAME_MAP[op_name](*params)
544
- out_dag.apply_operation_back(
545
- op,
546
- (qubits[x] for x in qargs),
547
- check=False,
548
- )
579
+ node = DAGOpNode.from_instruction(
580
+ CircuitInstruction.from_standard(
581
+ gate, tuple(qubits[x] for x in qargs), params
582
+ ),
583
+ dag=out_dag,
584
+ )
585
+ out_dag._apply_op_node_back(node)
549
586
  out_dag.global_phase += global_phase
550
587
  else:
551
- out_dag.apply_operation_back(node.op, node.qargs, node.cargs, check=False)
588
+ out_dag._apply_op_node_back(node)
552
589
  return out_dag
553
590
 
554
591
 
@@ -975,8 +1012,8 @@ class DefaultUnitarySynthesis(plugin.UnitarySynthesisPlugin):
975
1012
  # if the gates in synthesis are in the opposite direction of the preferred direction
976
1013
  # resynthesize a new operator which is the original conjugated by swaps.
977
1014
  # this new operator is doubly mirrored from the original and is locally equivalent.
978
- for op_name, _params, qubits in synth_circ:
979
- if op_name in {"USER_GATE", "cx"}:
1015
+ for gate, _params, qubits in synth_circ:
1016
+ if gate is None or gate == CXGate._standard_gate:
980
1017
  synth_direction = qubits
981
1018
  if synth_direction is not None and synth_direction != preferred_direction:
982
1019
  # TODO: Avoid using a dag to correct the synthesis direction
@@ -1011,5 +1048,8 @@ class DefaultUnitarySynthesis(plugin.UnitarySynthesisPlugin):
1011
1048
  flip_bits = out_dag.qubits[::-1]
1012
1049
  for node in synth_circ.topological_op_nodes():
1013
1050
  qubits = tuple(flip_bits[synth_circ.find_bit(x).index] for x in node.qargs)
1014
- out_dag.apply_operation_back(node.op, qubits, check=False)
1051
+ node = DAGOpNode.from_instruction(
1052
+ node._to_circuit_instruction().replace(qubits=qubits, params=node.params)
1053
+ )
1054
+ out_dag._apply_op_node_back(node)
1015
1055
  return out_dag
@@ -31,4 +31,3 @@ from .filter_op_nodes import FilterOpNodes
31
31
 
32
32
  # Utility functions
33
33
  from . import control_flow
34
- from .block_to_matrix import _block_to_matrix
@@ -12,7 +12,7 @@
12
12
 
13
13
  """Check if the gates follow the right direction with respect to the coupling map."""
14
14
 
15
- from qiskit.circuit import ControlFlowOp
15
+ from qiskit.circuit.controlflow import CONTROL_FLOW_OP_NAMES
16
16
  from qiskit.converters import circuit_to_dag
17
17
  from qiskit.transpiler.basepasses import AnalysisPass
18
18
 
@@ -39,7 +39,7 @@ class CheckGateDirection(AnalysisPass):
39
39
  edges = self.coupling_map.get_edges()
40
40
  # Don't include directives to avoid things like barrier, which are assumed always supported.
41
41
  for node in dag.op_nodes(include_directives=False):
42
- if isinstance(node.op, ControlFlowOp):
42
+ if node.name in CONTROL_FLOW_OP_NAMES:
43
43
  for block in node.op.blocks:
44
44
  inner_wire_map = {
45
45
  inner: wire_map[outer] for outer, inner in zip(node.qargs, block.qubits)
@@ -57,7 +57,7 @@ class CheckGateDirection(AnalysisPass):
57
57
  def _target_visit(self, dag, wire_map):
58
58
  # Don't include directives to avoid things like barrier, which are assumed always supported.
59
59
  for node in dag.op_nodes(include_directives=False):
60
- if isinstance(node.op, ControlFlowOp):
60
+ if node.name in CONTROL_FLOW_OP_NAMES:
61
61
  for block in node.op.blocks:
62
62
  inner_wire_map = {
63
63
  inner: wire_map[outer] for outer, inner in zip(node.qargs, block.qubits)
@@ -65,7 +65,7 @@ class CheckGateDirection(AnalysisPass):
65
65
  if not self._target_visit(circuit_to_dag(block), inner_wire_map):
66
66
  return False
67
67
  elif len(node.qargs) == 2 and not self.target.instruction_supported(
68
- node.op.name, (wire_map[node.qargs[0]], wire_map[node.qargs[1]])
68
+ node.name, (wire_map[node.qargs[0]], wire_map[node.qargs[1]])
69
69
  ):
70
70
  return False
71
71
  return True
@@ -14,7 +14,6 @@
14
14
 
15
15
  from qiskit.transpiler.basepasses import AnalysisPass
16
16
  from qiskit.transpiler.target import Target
17
- from qiskit.circuit.controlflow import ControlFlowOp
18
17
  from qiskit.converters import circuit_to_dag
19
18
 
20
19
 
@@ -73,7 +72,7 @@ class CheckMap(AnalysisPass):
73
72
 
74
73
  def _recurse(self, dag, wire_map) -> bool:
75
74
  for node in dag.op_nodes(include_directives=False):
76
- if isinstance(node.op, ControlFlowOp):
75
+ if node.is_control_flow():
77
76
  for block in node.op.blocks:
78
77
  inner_wire_map = {
79
78
  inner: wire_map[outer] for inner, outer in zip(block.qubits, node.qargs)
@@ -85,10 +84,8 @@ class CheckMap(AnalysisPass):
85
84
  and not dag.has_calibration_for(node)
86
85
  and (wire_map[node.qargs[0]], wire_map[node.qargs[1]]) not in self.qargs
87
86
  ):
88
- self.property_set["check_map_msg"] = "{}({}, {}) failed".format(
89
- node.name,
90
- wire_map[node.qargs[0]],
91
- wire_map[node.qargs[1]],
87
+ self.property_set["check_map_msg"] = (
88
+ f"{node.name}({wire_map[node.qargs[0]]}, {wire_map[node.qargs[1]]}) failed"
92
89
  )
93
90
  return False
94
91
  return True
@@ -17,12 +17,11 @@ from qiskit.circuit import (
17
17
  CircuitInstruction,
18
18
  ClassicalRegister,
19
19
  Clbit,
20
- ControlFlowOp,
21
20
  IfElseOp,
22
21
  QuantumCircuit,
23
22
  )
24
23
  from qiskit.dagcircuit import DAGCircuit
25
- from qiskit.transpiler import TransformationPass
24
+ from qiskit.transpiler.basepasses import TransformationPass
26
25
 
27
26
 
28
27
  class ConvertConditionsToIfOps(TransformationPass):
@@ -37,7 +36,7 @@ class ConvertConditionsToIfOps(TransformationPass):
37
36
  was modified and ``False`` if not."""
38
37
  modified = False
39
38
  for node in dag.op_nodes():
40
- if isinstance(node.op, ControlFlowOp):
39
+ if node.is_control_flow():
41
40
  modified_blocks = False
42
41
  new_dags = []
43
42
  for block in node.op.blocks:
@@ -51,7 +50,7 @@ class ConvertConditionsToIfOps(TransformationPass):
51
50
  node.op.replace_blocks(dag_to_circuit(block) for block in new_dags),
52
51
  inplace=True,
53
52
  )
54
- elif getattr(node.op, "condition", None) is None:
53
+ elif node.condition is None:
55
54
  continue
56
55
  else:
57
56
  target, value = node.op.condition
@@ -43,7 +43,7 @@ class Error(AnalysisPass):
43
43
  if action in ["raise", "warn", "log"]:
44
44
  self.action = action
45
45
  else:
46
- raise TranspilerError("Unknown action: %s" % action)
46
+ raise TranspilerError(f"Unknown action: {action}")
47
47
 
48
48
  def run(self, _):
49
49
  """Run the Error pass on `dag`."""
@@ -66,4 +66,4 @@ class Error(AnalysisPass):
66
66
  logger = logging.getLogger(__name__)
67
67
  logger.info(msg)
68
68
  else:
69
- raise TranspilerError("Unknown action: %s" % self.action)
69
+ raise TranspilerError(f"Unknown action: {self.action}")
@@ -37,12 +37,12 @@ class FixedPoint(AnalysisPass):
37
37
  def run(self, dag):
38
38
  """Run the FixedPoint pass on `dag`."""
39
39
  current_value = self.property_set[self._property]
40
- fixed_point_previous_property = "_fixed_point_previous_%s" % self._property
40
+ fixed_point_previous_property = f"_fixed_point_previous_{self._property}"
41
41
 
42
42
  if self.property_set[fixed_point_previous_property] is None:
43
- self.property_set["%s_fixed_point" % self._property] = False
43
+ self.property_set[f"{self._property}_fixed_point"] = False
44
44
  else:
45
45
  fixed_point_reached = self.property_set[fixed_point_previous_property] == current_value
46
- self.property_set["%s_fixed_point" % self._property] = fixed_point_reached
46
+ self.property_set[f"{self._property}_fixed_point"] = fixed_point_reached
47
47
 
48
48
  self.property_set[fixed_point_previous_property] = deepcopy(current_value)
@@ -67,7 +67,7 @@ class GateDirection(TransformationPass):
67
67
  └──────┘ └───┘└──────┘└───┘
68
68
 
69
69
  This pass assumes that the positions of the qubits in the :attr:`.DAGCircuit.qubits` attribute
70
- are the physical qubit indicies. For example if ``dag.qubits[0]`` is qubit 0 in the
70
+ are the physical qubit indices. For example if ``dag.qubits[0]`` is qubit 0 in the
71
71
  :class:`.CouplingMap` or :class:`.Target`.
72
72
  """
73
73
 
@@ -12,7 +12,6 @@
12
12
 
13
13
  """Check if all gates in the DAGCircuit are in the specified basis gates."""
14
14
 
15
- from qiskit.circuit import ControlFlowOp
16
15
  from qiskit.converters import circuit_to_dag
17
16
  from qiskit.transpiler.basepasses import AnalysisPass
18
17
 
@@ -55,7 +54,7 @@ class GatesInBasis(AnalysisPass):
55
54
  return True
56
55
  # Control-flow ops still need to be supported, so don't skip them in the
57
56
  # previous checks.
58
- if isinstance(gate.op, ControlFlowOp):
57
+ if gate.is_control_flow():
59
58
  for block in gate.op.blocks:
60
59
  inner_wire_map = {
61
60
  inner: wire_map[outer]
@@ -18,7 +18,7 @@ import io
18
18
  import re
19
19
  from collections.abc import Iterator, Iterable, Callable
20
20
  from functools import wraps
21
- from typing import Union, List, Any
21
+ from typing import Union, List, Any, TypeVar
22
22
 
23
23
  from qiskit.circuit import QuantumCircuit
24
24
  from qiskit.converters import circuit_to_dag, dag_to_circuit
@@ -31,7 +31,7 @@ from .basepasses import BasePass
31
31
  from .exceptions import TranspilerError
32
32
  from .layout import TranspileLayout, Layout
33
33
 
34
- _CircuitsT = Union[List[QuantumCircuit], QuantumCircuit]
34
+ _CircuitsT = TypeVar("_CircuitsT", bound=Union[List[QuantumCircuit], QuantumCircuit])
35
35
 
36
36
 
37
37
  class PassManager(BasePassManager):
@@ -121,6 +121,7 @@ class PassManager(BasePassManager):
121
121
  # Ordered list of original qubits
122
122
  original_qubits_reverse = {v: k for k, v in original_qubit_indices.items()}
123
123
  original_qubits = []
124
+ # pylint: disable-next=consider-using-enumerate
124
125
  for i in range(len(original_qubits_reverse)):
125
126
  original_qubits.append(original_qubits_reverse[i])
126
127
 
@@ -139,7 +140,7 @@ class PassManager(BasePassManager):
139
140
  self.property_set["layout"] = t_initial_layout
140
141
  self.property_set["final_layout"] = new_final_layout
141
142
 
142
- def append(
143
+ def append( # pylint:disable=arguments-renamed
143
144
  self,
144
145
  passes: Task | list[Task],
145
146
  ) -> None:
@@ -153,7 +154,7 @@ class PassManager(BasePassManager):
153
154
  """
154
155
  super().append(tasks=passes)
155
156
 
156
- def replace(
157
+ def replace( # pylint:disable=arguments-renamed
157
158
  self,
158
159
  index: int,
159
160
  passes: Task | list[Task],
@@ -167,7 +168,7 @@ class PassManager(BasePassManager):
167
168
  super().replace(index, tasks=passes)
168
169
 
169
170
  # pylint: disable=arguments-differ
170
- def run(
171
+ def run( # pylint:disable=arguments-renamed
171
172
  self,
172
173
  circuits: _CircuitsT,
173
174
  output_name: str | None = None,
@@ -337,7 +338,7 @@ class StagedPassManager(PassManager):
337
338
  "scheduling",
338
339
  ]
339
340
  self._validate_stages(stages)
340
- # Set through parent class since `__setattr__` requieres `expanded_stages` to be defined
341
+ # Set through parent class since `__setattr__` requires `expanded_stages` to be defined
341
342
  super().__setattr__("_stages", tuple(stages))
342
343
  super().__setattr__("_expanded_stages", tuple(self._generate_expanded_stages()))
343
344
  super().__init__()