qiskit 1.1.2__cp38-abi3-macosx_10_9_universal2.whl → 1.2.0__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 (343) 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 +6 -3
  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 +395 -387
  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 +42 -128
  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 +33 -25
  144. qiskit/providers/fake_provider/fake_backend.py +10 -3
  145. qiskit/providers/fake_provider/fake_openpulse_2q.py +157 -149
  146. qiskit/providers/fake_provider/fake_openpulse_3q.py +228 -220
  147. qiskit/providers/fake_provider/fake_pulse_backend.py +2 -1
  148. qiskit/providers/fake_provider/fake_qasm_backend.py +7 -2
  149. qiskit/providers/fake_provider/generic_backend_v2.py +514 -68
  150. qiskit/providers/models/__init__.py +48 -11
  151. qiskit/providers/models/backendconfiguration.py +50 -4
  152. qiskit/providers/models/backendproperties.py +13 -2
  153. qiskit/providers/models/pulsedefaults.py +10 -11
  154. qiskit/providers/options.py +13 -13
  155. qiskit/providers/providerutils.py +3 -1
  156. qiskit/pulse/configuration.py +8 -12
  157. qiskit/pulse/instruction_schedule_map.py +3 -5
  158. qiskit/pulse/instructions/acquire.py +7 -8
  159. qiskit/pulse/instructions/instruction.py +2 -3
  160. qiskit/pulse/library/samplers/decorators.py +5 -9
  161. qiskit/pulse/library/symbolic_pulses.py +4 -7
  162. qiskit/pulse/library/waveform.py +2 -5
  163. qiskit/pulse/macros.py +11 -6
  164. qiskit/pulse/parser.py +8 -10
  165. qiskit/pulse/schedule.py +9 -17
  166. qiskit/pulse/transforms/alignments.py +1 -3
  167. qiskit/pulse/utils.py +1 -2
  168. qiskit/qasm/libs/stdgates.inc +35 -28
  169. qiskit/qasm2/__init__.py +7 -7
  170. qiskit/qasm2/export.py +5 -9
  171. qiskit/qasm2/parse.py +1 -1
  172. qiskit/qasm3/ast.py +9 -25
  173. qiskit/qasm3/exporter.py +582 -479
  174. qiskit/qasm3/printer.py +7 -16
  175. qiskit/qobj/common.py +10 -0
  176. qiskit/qobj/converters/lo_config.py +9 -0
  177. qiskit/qobj/converters/pulse_instruction.py +13 -6
  178. qiskit/qobj/pulse_qobj.py +69 -15
  179. qiskit/qobj/qasm_qobj.py +72 -20
  180. qiskit/qobj/utils.py +9 -0
  181. qiskit/qpy/__init__.py +1 -1
  182. qiskit/qpy/binary_io/circuits.py +8 -5
  183. qiskit/qpy/binary_io/schedules.py +1 -1
  184. qiskit/qpy/binary_io/value.py +3 -3
  185. qiskit/qpy/interface.py +3 -2
  186. qiskit/qpy/type_keys.py +2 -2
  187. qiskit/quantum_info/operators/channel/quantum_channel.py +3 -6
  188. qiskit/quantum_info/operators/channel/superop.py +2 -2
  189. qiskit/quantum_info/operators/channel/transformations.py +1 -1
  190. qiskit/quantum_info/operators/dihedral/dihedral.py +3 -4
  191. qiskit/quantum_info/operators/dihedral/dihedral_circuits.py +1 -3
  192. qiskit/quantum_info/operators/dihedral/random.py +6 -3
  193. qiskit/quantum_info/operators/measures.py +2 -2
  194. qiskit/quantum_info/operators/op_shape.py +12 -20
  195. qiskit/quantum_info/operators/operator.py +14 -21
  196. qiskit/quantum_info/operators/predicates.py +1 -0
  197. qiskit/quantum_info/operators/symplectic/base_pauli.py +7 -11
  198. qiskit/quantum_info/operators/symplectic/clifford.py +1 -1
  199. qiskit/quantum_info/operators/symplectic/pauli.py +3 -3
  200. qiskit/quantum_info/operators/symplectic/pauli_list.py +9 -10
  201. qiskit/quantum_info/operators/symplectic/random.py +1 -1
  202. qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py +15 -17
  203. qiskit/quantum_info/quaternion.py +1 -1
  204. qiskit/quantum_info/states/densitymatrix.py +5 -8
  205. qiskit/quantum_info/states/stabilizerstate.py +128 -37
  206. qiskit/quantum_info/states/statevector.py +4 -8
  207. qiskit/result/counts.py +2 -2
  208. qiskit/result/mitigation/correlated_readout_mitigator.py +2 -2
  209. qiskit/result/mitigation/local_readout_mitigator.py +2 -2
  210. qiskit/result/mitigation/utils.py +1 -3
  211. qiskit/result/models.py +17 -16
  212. qiskit/result/result.py +15 -20
  213. qiskit/scheduler/lowering.py +2 -2
  214. qiskit/synthesis/__init__.py +2 -1
  215. qiskit/synthesis/clifford/__init__.py +1 -1
  216. qiskit/synthesis/clifford/clifford_decompose_ag.py +2 -2
  217. qiskit/synthesis/clifford/clifford_decompose_bm.py +10 -240
  218. qiskit/synthesis/clifford/clifford_decompose_greedy.py +9 -303
  219. qiskit/synthesis/clifford/clifford_decompose_layers.py +25 -23
  220. qiskit/synthesis/cnotdihedral/cnotdihedral_decompose_full.py +1 -1
  221. qiskit/synthesis/cnotdihedral/cnotdihedral_decompose_general.py +1 -1
  222. qiskit/synthesis/discrete_basis/generate_basis_approximations.py +1 -1
  223. qiskit/synthesis/discrete_basis/solovay_kitaev.py +2 -2
  224. qiskit/synthesis/evolution/evolution_synthesis.py +4 -2
  225. qiskit/synthesis/evolution/lie_trotter.py +46 -19
  226. qiskit/synthesis/evolution/product_formula.py +111 -55
  227. qiskit/synthesis/evolution/qdrift.py +40 -10
  228. qiskit/synthesis/evolution/suzuki_trotter.py +43 -33
  229. qiskit/synthesis/linear/__init__.py +1 -0
  230. qiskit/synthesis/linear/cnot_synth.py +22 -96
  231. qiskit/synthesis/linear/linear_depth_lnn.py +8 -8
  232. qiskit/synthesis/linear/linear_matrix_utils.py +13 -161
  233. qiskit/synthesis/linear_phase/cnot_phase_synth.py +1 -1
  234. qiskit/synthesis/linear_phase/cx_cz_depth_lnn.py +3 -3
  235. qiskit/synthesis/linear_phase/cz_depth_lnn.py +1 -1
  236. qiskit/synthesis/one_qubit/one_qubit_decompose.py +29 -29
  237. qiskit/synthesis/permutation/permutation_full.py +5 -29
  238. qiskit/synthesis/permutation/permutation_lnn.py +2 -24
  239. qiskit/synthesis/permutation/permutation_utils.py +2 -59
  240. qiskit/synthesis/qft/__init__.py +1 -0
  241. qiskit/synthesis/qft/qft_decompose_full.py +79 -0
  242. qiskit/synthesis/qft/qft_decompose_lnn.py +17 -9
  243. qiskit/synthesis/stabilizer/stabilizer_circuit.py +6 -6
  244. qiskit/synthesis/stabilizer/stabilizer_decompose.py +2 -2
  245. qiskit/synthesis/two_qubit/local_invariance.py +8 -38
  246. qiskit/synthesis/two_qubit/two_qubit_decompose.py +48 -129
  247. qiskit/synthesis/unitary/aqc/cnot_structures.py +1 -1
  248. qiskit/synthesis/unitary/qsd.py +5 -3
  249. qiskit/transpiler/__init__.py +1 -0
  250. qiskit/transpiler/basepasses.py +1 -1
  251. qiskit/transpiler/coupling.py +3 -3
  252. qiskit/transpiler/instruction_durations.py +1 -2
  253. qiskit/transpiler/layout.py +3 -3
  254. qiskit/transpiler/passes/__init__.py +2 -0
  255. qiskit/transpiler/passes/basis/basis_translator.py +84 -64
  256. qiskit/transpiler/passes/basis/translate_parameterized.py +3 -5
  257. qiskit/transpiler/passes/basis/unroll_3q_or_more.py +1 -1
  258. qiskit/transpiler/passes/basis/unroll_custom_definitions.py +10 -10
  259. qiskit/transpiler/passes/calibration/rx_builder.py +3 -3
  260. qiskit/transpiler/passes/calibration/rzx_builder.py +3 -3
  261. qiskit/transpiler/passes/layout/apply_layout.py +13 -3
  262. qiskit/transpiler/passes/layout/sabre_layout.py +10 -8
  263. qiskit/transpiler/passes/layout/sabre_pre_layout.py +4 -1
  264. qiskit/transpiler/passes/layout/set_layout.py +2 -2
  265. qiskit/transpiler/passes/layout/vf2_layout.py +1 -1
  266. qiskit/transpiler/passes/layout/vf2_utils.py +3 -3
  267. qiskit/transpiler/passes/optimization/__init__.py +1 -0
  268. qiskit/transpiler/passes/optimization/collect_multiqubit_blocks.py +2 -2
  269. qiskit/transpiler/passes/optimization/commutation_analysis.py +7 -10
  270. qiskit/transpiler/passes/optimization/commutative_cancellation.py +35 -19
  271. qiskit/transpiler/passes/optimization/consolidate_blocks.py +17 -8
  272. qiskit/transpiler/passes/optimization/inverse_cancellation.py +6 -6
  273. qiskit/transpiler/passes/optimization/optimize_1q_decomposition.py +64 -41
  274. qiskit/transpiler/passes/optimization/optimize_1q_gates.py +1 -1
  275. qiskit/transpiler/passes/optimization/split_2q_unitaries.py +83 -0
  276. qiskit/transpiler/passes/optimization/template_matching/backward_match.py +1 -1
  277. qiskit/transpiler/passes/optimization/template_matching/forward_match.py +2 -2
  278. qiskit/transpiler/passes/optimization/template_matching/template_substitution.py +1 -1
  279. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/commuting_2q_gate_router.py +3 -2
  280. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/swap_strategy.py +1 -1
  281. qiskit/transpiler/passes/routing/layout_transformation.py +2 -1
  282. qiskit/transpiler/passes/routing/sabre_swap.py +35 -26
  283. qiskit/transpiler/passes/routing/star_prerouting.py +80 -105
  284. qiskit/transpiler/passes/routing/stochastic_swap.py +1 -3
  285. qiskit/transpiler/passes/scheduling/alap.py +1 -2
  286. qiskit/transpiler/passes/scheduling/alignments/__init__.py +2 -2
  287. qiskit/transpiler/passes/scheduling/alignments/check_durations.py +1 -1
  288. qiskit/transpiler/passes/scheduling/alignments/pulse_gate_validation.py +2 -2
  289. qiskit/transpiler/passes/scheduling/alignments/reschedule.py +1 -1
  290. qiskit/transpiler/passes/scheduling/asap.py +1 -2
  291. qiskit/transpiler/passes/scheduling/base_scheduler.py +5 -5
  292. qiskit/transpiler/passes/scheduling/dynamical_decoupling.py +3 -3
  293. qiskit/transpiler/passes/scheduling/padding/base_padding.py +1 -1
  294. qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py +20 -14
  295. qiskit/transpiler/passes/scheduling/scheduling/base_scheduler.py +7 -6
  296. qiskit/transpiler/passes/scheduling/time_unit_conversion.py +4 -3
  297. qiskit/transpiler/passes/synthesis/high_level_synthesis.py +211 -36
  298. qiskit/transpiler/passes/synthesis/plugin.py +2 -2
  299. qiskit/transpiler/passes/synthesis/unitary_synthesis.py +80 -40
  300. qiskit/transpiler/passes/utils/__init__.py +0 -1
  301. qiskit/transpiler/passes/utils/check_gate_direction.py +4 -4
  302. qiskit/transpiler/passes/utils/check_map.py +3 -6
  303. qiskit/transpiler/passes/utils/convert_conditions_to_if_ops.py +3 -4
  304. qiskit/transpiler/passes/utils/error.py +2 -2
  305. qiskit/transpiler/passes/utils/fixed_point.py +3 -3
  306. qiskit/transpiler/passes/utils/gate_direction.py +1 -1
  307. qiskit/transpiler/passes/utils/gates_basis.py +1 -2
  308. qiskit/transpiler/passmanager.py +7 -6
  309. qiskit/transpiler/preset_passmanagers/__init__.py +4 -228
  310. qiskit/transpiler/preset_passmanagers/builtin_plugins.py +73 -18
  311. qiskit/transpiler/preset_passmanagers/common.py +3 -6
  312. qiskit/transpiler/preset_passmanagers/generate_preset_pass_manager.py +518 -0
  313. qiskit/transpiler/preset_passmanagers/level0.py +1 -1
  314. qiskit/transpiler/target.py +27 -8
  315. qiskit/user_config.py +29 -6
  316. qiskit/utils/classtools.py +3 -3
  317. qiskit/utils/deprecation.py +3 -2
  318. qiskit/utils/lazy_tester.py +2 -2
  319. qiskit/utils/optionals.py +8 -8
  320. qiskit/visualization/bloch.py +18 -23
  321. qiskit/visualization/circuit/_utils.py +34 -10
  322. qiskit/visualization/circuit/circuit_visualization.py +23 -16
  323. qiskit/visualization/circuit/latex.py +29 -27
  324. qiskit/visualization/circuit/matplotlib.py +4 -2
  325. qiskit/visualization/circuit/qcstyle.py +2 -2
  326. qiskit/visualization/circuit/text.py +9 -15
  327. qiskit/visualization/dag_visualization.py +2 -2
  328. qiskit/visualization/pulse_v2/core.py +1 -1
  329. qiskit/visualization/pulse_v2/events.py +1 -1
  330. qiskit/visualization/pulse_v2/generators/frame.py +3 -4
  331. qiskit/visualization/pulse_v2/generators/waveform.py +5 -9
  332. qiskit/visualization/pulse_v2/layouts.py +1 -5
  333. qiskit/visualization/pulse_v2/plotters/matplotlib.py +1 -2
  334. qiskit/visualization/state_visualization.py +5 -6
  335. qiskit/visualization/timeline/plotters/matplotlib.py +1 -2
  336. qiskit/visualization/transition_visualization.py +7 -2
  337. {qiskit-1.1.2.dist-info → qiskit-1.2.0.dist-info}/METADATA +12 -12
  338. {qiskit-1.1.2.dist-info → qiskit-1.2.0.dist-info}/RECORD +342 -340
  339. {qiskit-1.1.2.dist-info → qiskit-1.2.0.dist-info}/entry_points.txt +3 -0
  340. qiskit/transpiler/passes/utils/block_to_matrix.py +0 -47
  341. {qiskit-1.1.2.dist-info → qiskit-1.2.0.dist-info}/LICENSE.txt +0 -0
  342. {qiskit-1.1.2.dist-info → qiskit-1.2.0.dist-info}/WHEEL +0 -0
  343. {qiskit-1.1.2.dist-info → qiskit-1.2.0.dist-info}/top_level.txt +0 -0
@@ -297,7 +297,7 @@ class StabilizerState(QuantumState):
297
297
 
298
298
  # Otherwise pauli is (-1)^a prod_j S_j^b_j for Clifford stabilizers
299
299
  # If pauli anti-commutes with D_j then b_j = 1.
300
- # Multiply pauli by stabilizers with anti-commuting destabilizers
300
+ # Multiply pauli by stabilizers with anti-commuting destabilisers
301
301
  pauli_z = (pauli.z).copy() # Make a copy of pauli.z
302
302
  for p in range(num_qubits):
303
303
  # Check if destabilizer anti-commutes
@@ -386,8 +386,17 @@ class StabilizerState(QuantumState):
386
386
 
387
387
  return probs
388
388
 
389
- def probabilities_dict(self, qargs: None | list = None, decimals: None | int = None) -> dict:
390
- """Return the subsystem measurement probability dictionary.
389
+ def probabilities_dict_from_bitstring(
390
+ self,
391
+ outcome_bitstring: str,
392
+ qargs: None | list = None,
393
+ decimals: None | int = None,
394
+ ) -> dict[str, float]:
395
+ """Return the subsystem measurement probability dictionary utilizing
396
+ a targeted outcome_bitstring to perform the measurement for. This
397
+ will calculate a probability for only a single targeted
398
+ outcome_bitstring value, giving a performance boost over calculating
399
+ all possible outcomes.
391
400
 
392
401
  Measurement probabilities are with respect to measurement in the
393
402
  computation (diagonal) basis.
@@ -398,30 +407,44 @@ class StabilizerState(QuantumState):
398
407
  inserted between integers so that subsystems can be distinguished.
399
408
 
400
409
  Args:
410
+ outcome_bitstring (None or str): targeted outcome bitstring
411
+ to perform a measurement calculation for, this will significantly
412
+ reduce the number of calculation performed (Default: None)
401
413
  qargs (None or list): subsystems to return probabilities for,
402
- if None return for all subsystems (Default: None).
414
+ if None return for all subsystems (Default: None).
403
415
  decimals (None or int): the number of decimal places to round
404
- values. If None no rounding is done (Default: None).
416
+ values. If None no rounding is done (Default: None)
405
417
 
406
418
  Returns:
407
- dict: The measurement probabilities in dict (ket) form.
419
+ dict[str, float]: The measurement probabilities in dict (ket) form.
408
420
  """
409
- if qargs is None:
410
- qubits = range(self.clifford.num_qubits)
411
- else:
412
- qubits = qargs
421
+ return self._get_probabilities_dict(
422
+ outcome_bitstring=outcome_bitstring, qargs=qargs, decimals=decimals
423
+ )
413
424
 
414
- outcome = ["X"] * len(qubits)
415
- outcome_prob = 1.0
416
- probs = {} # probabilities dictionary
425
+ def probabilities_dict(
426
+ self, qargs: None | list = None, decimals: None | int = None
427
+ ) -> dict[str, float]:
428
+ """Return the subsystem measurement probability dictionary.
417
429
 
418
- self._get_probabilities(qubits, outcome, outcome_prob, probs)
430
+ Measurement probabilities are with respect to measurement in the
431
+ computation (diagonal) basis.
419
432
 
420
- if decimals is not None:
421
- for key, value in probs.items():
422
- probs[key] = round(value, decimals)
433
+ This dictionary representation uses a Ket-like notation where the
434
+ dictionary keys are qudit strings for the subsystem basis vectors.
435
+ If any subsystem has a dimension greater than 10 comma delimiters are
436
+ inserted between integers so that subsystems can be distinguished.
423
437
 
424
- return probs
438
+ Args:
439
+ qargs (None or list): subsystems to return probabilities for,
440
+ if None return for all subsystems (Default: None).
441
+ decimals (None or int): the number of decimal places to round
442
+ values. If None no rounding is done (Default: None).
443
+
444
+ Returns:
445
+ dict: The measurement probabilities in dict (key) form.
446
+ """
447
+ return self._get_probabilities_dict(outcome_bitstring=None, qargs=qargs, decimals=decimals)
425
448
 
426
449
  def reset(self, qargs: list | None = None) -> StabilizerState:
427
450
  """Reset state or subsystems to the 0-state.
@@ -623,7 +646,7 @@ class StabilizerState(QuantumState):
623
646
 
624
647
  @staticmethod
625
648
  def _rowsum_deterministic(clifford, aux_pauli, row):
626
- """Updating an auxilary Pauli aux_pauli in the
649
+ """Updating an auxiliary Pauli aux_pauli in the
627
650
  deterministic rowsum calculation.
628
651
  The StabilizerState itself is not updated."""
629
652
 
@@ -644,22 +667,48 @@ class StabilizerState(QuantumState):
644
667
  # -----------------------------------------------------------------------
645
668
  # Helper functions for calculating the probabilities
646
669
  # -----------------------------------------------------------------------
647
- def _get_probabilities(self, qubits, outcome, outcome_prob, probs):
648
- """Recursive helper function for calculating the probabilities"""
670
+ def _get_probabilities(
671
+ self,
672
+ qubits: range,
673
+ outcome: list[str],
674
+ outcome_prob: float,
675
+ probs: dict[str, float],
676
+ outcome_bitstring: str = None,
677
+ ):
678
+ """Recursive helper function for calculating the probabilities
649
679
 
650
- qubit_for_branching = -1
651
- ret = self.copy()
680
+ Args:
681
+ qubits (range): range of qubits
682
+ outcome (list[str]): outcome being built
683
+ outcome_prob (float): probability of the outcome
684
+ probs (dict[str, float]): holds the outcomes and probability results
685
+ outcome_bitstring (str): target outcome to measure which reduces measurements, None
686
+ if not targeting a specific target
687
+ """
688
+ qubit_for_branching: int = -1
652
689
 
690
+ ret: StabilizerState = self.copy()
691
+
692
+ # Find outcomes for each qubit
653
693
  for i in range(len(qubits)):
654
- qubit = qubits[len(qubits) - i - 1]
655
694
  if outcome[i] == "X":
656
- is_deterministic = not any(ret.clifford.stab_x[:, qubit])
657
- if is_deterministic:
658
- single_qubit_outcome = ret._measure_and_update(qubit, 0)
659
- if single_qubit_outcome:
660
- outcome[i] = "1"
695
+ # Retrieve the qubit for the current measurement
696
+ qubit = qubits[(len(qubits) - i - 1)]
697
+ # Determine if the probability is deterministic
698
+ if not any(ret.clifford.stab_x[:, qubit]):
699
+ single_qubit_outcome: np.int64 = ret._measure_and_update(qubit, 0)
700
+ if outcome_bitstring is None or (
701
+ int(outcome_bitstring[i]) == single_qubit_outcome
702
+ ):
703
+ # No outcome_bitstring target, or using outcome_bitstring target and
704
+ # the single_qubit_outcome equals the desired outcome_bitstring target value,
705
+ # then use current outcome_prob value
706
+ outcome[i] = str(single_qubit_outcome)
661
707
  else:
662
- outcome[i] = "0"
708
+ # If the single_qubit_outcome does not equal the outcome_bitsring target
709
+ # then we know that the probability will be 0
710
+ outcome[i] = str(outcome_bitstring[i])
711
+ outcome_prob = 0
663
712
  else:
664
713
  qubit_for_branching = i
665
714
 
@@ -668,15 +717,57 @@ class StabilizerState(QuantumState):
668
717
  probs[str_outcome] = outcome_prob
669
718
  return
670
719
 
671
- for single_qubit_outcome in range(0, 2):
720
+ for single_qubit_outcome in (
721
+ range(0, 2)
722
+ if (outcome_bitstring is None)
723
+ else [int(outcome_bitstring[qubit_for_branching])]
724
+ ):
672
725
  new_outcome = outcome.copy()
673
- if single_qubit_outcome:
674
- new_outcome[qubit_for_branching] = "1"
675
- else:
676
- new_outcome[qubit_for_branching] = "0"
726
+ new_outcome[qubit_for_branching] = str(single_qubit_outcome)
677
727
 
678
728
  stab_cpy = ret.copy()
679
729
  stab_cpy._measure_and_update(
680
- qubits[len(qubits) - qubit_for_branching - 1], single_qubit_outcome
730
+ qubits[(len(qubits) - qubit_for_branching - 1)], single_qubit_outcome
731
+ )
732
+ stab_cpy._get_probabilities(
733
+ qubits, new_outcome, (0.5 * outcome_prob), probs, outcome_bitstring
681
734
  )
682
- stab_cpy._get_probabilities(qubits, new_outcome, 0.5 * outcome_prob, probs)
735
+
736
+ def _get_probabilities_dict(
737
+ self,
738
+ outcome_bitstring: None | str = None,
739
+ qargs: None | list = None,
740
+ decimals: None | int = None,
741
+ ) -> dict[str, float]:
742
+ """Helper Function for calculating the subsystem measurement probability dictionary.
743
+ When the targeted outcome_bitstring value is set, then only the single outcome_bitstring
744
+ probability will be calculated.
745
+
746
+ Args:
747
+ outcome_bitstring (None or str): targeted outcome bitstring
748
+ to perform a measurement calculation for, this will significantly
749
+ reduce the number of calculation performed (Default: None)
750
+ qargs (None or list): subsystems to return probabilities for,
751
+ if None return for all subsystems (Default: None).
752
+ decimals (None or int): the number of decimal places to round
753
+ values. If None no rounding is done (Default: None).
754
+
755
+ Returns:
756
+ dict: The measurement probabilities in dict (key) form.
757
+ """
758
+ if qargs is None:
759
+ qubits = range(self.clifford.num_qubits)
760
+ else:
761
+ qubits = qargs
762
+
763
+ outcome = ["X"] * len(qubits)
764
+ outcome_prob = 1.0
765
+ probs: dict[str, float] = {} # Probabilities dict to return with the measured values
766
+
767
+ self._get_probabilities(qubits, outcome, outcome_prob, probs, outcome_bitstring)
768
+
769
+ if decimals is not None:
770
+ for key, value in probs.items():
771
+ probs[key] = round(value, decimals)
772
+
773
+ return probs
@@ -117,11 +117,9 @@ class Statevector(QuantumState, TolerancesMixin):
117
117
  def __repr__(self):
118
118
  prefix = "Statevector("
119
119
  pad = len(prefix) * " "
120
- return "{}{},\n{}dims={})".format(
121
- prefix,
122
- np.array2string(self._data, separator=", ", prefix=prefix),
123
- pad,
124
- self._op_shape.dims_l(),
120
+ return (
121
+ f"{prefix}{np.array2string(self._data, separator=', ', prefix=prefix)},\n{pad}"
122
+ f"dims={self._op_shape.dims_l()})"
125
123
  )
126
124
 
127
125
  @property
@@ -940,9 +938,7 @@ class Statevector(QuantumState, TolerancesMixin):
940
938
  raise QiskitError(f"Cannot apply Instruction: {obj.name}")
941
939
  if not isinstance(obj.definition, QuantumCircuit):
942
940
  raise QiskitError(
943
- "{} instruction definition is {}; expected QuantumCircuit".format(
944
- obj.name, type(obj.definition)
945
- )
941
+ f"{obj.name} instruction definition is {type(obj.definition)}; expected QuantumCircuit"
946
942
  )
947
943
 
948
944
  if obj.definition.global_phase:
qiskit/result/counts.py CHANGED
@@ -101,7 +101,7 @@ class Counts(dict):
101
101
  else:
102
102
  raise TypeError(
103
103
  "Invalid input key type %s, must be either an int "
104
- "key or string key with hexademical value or bit string"
104
+ "key or string key with hexadecimal value or bit string"
105
105
  )
106
106
  header = {}
107
107
  self.creg_sizes = creg_sizes
@@ -130,7 +130,7 @@ class Counts(dict):
130
130
  max_values_counts = [x[0] for x in self.items() if x[1] == max_value]
131
131
  if len(max_values_counts) != 1:
132
132
  raise exceptions.QiskitError(
133
- "Multiple values have the same maximum counts: %s" % ",".join(max_values_counts)
133
+ f"Multiple values have the same maximum counts: {','.join(max_values_counts)}"
134
134
  )
135
135
  return max_values_counts[0]
136
136
 
@@ -54,8 +54,8 @@ class CorrelatedReadoutMitigator(BaseReadoutMitigator):
54
54
  else:
55
55
  if len(qubits) != matrix_qubits_num:
56
56
  raise QiskitError(
57
- "The number of given qubits ({}) is different than the number of "
58
- "qubits inferred from the matrices ({})".format(len(qubits), matrix_qubits_num)
57
+ f"The number of given qubits ({len(qubits)}) is different than the number of "
58
+ f"qubits inferred from the matrices ({matrix_qubits_num})"
59
59
  )
60
60
  self._qubits = qubits
61
61
  self._num_qubits = len(self._qubits)
@@ -68,8 +68,8 @@ class LocalReadoutMitigator(BaseReadoutMitigator):
68
68
  else:
69
69
  if len(qubits) != len(assignment_matrices):
70
70
  raise QiskitError(
71
- "The number of given qubits ({}) is different than the number of qubits "
72
- "inferred from the matrices ({})".format(len(qubits), len(assignment_matrices))
71
+ f"The number of given qubits ({len(qubits)}) is different than the number of qubits "
72
+ f"inferred from the matrices ({len(assignment_matrices)})"
73
73
  )
74
74
  self._qubits = qubits
75
75
  self._num_qubits = len(self._qubits)
@@ -120,9 +120,7 @@ def marganalize_counts(
120
120
  clbits_len = len(clbits) if not clbits is None else 0
121
121
  if clbits_len not in (0, qubits_len):
122
122
  raise QiskitError(
123
- "Num qubits ({}) does not match number of clbits ({}).".format(
124
- qubits_len, clbits_len
125
- )
123
+ f"Num qubits ({qubits_len}) does not match number of clbits ({clbits_len})."
126
124
  )
127
125
  counts = marginal_counts(counts, clbits)
128
126
  if clbits is None and qubits is not None:
qiskit/result/models.py CHANGED
@@ -13,6 +13,7 @@
13
13
  """Schema and helper models for schema-conformant Results."""
14
14
 
15
15
  import copy
16
+ import warnings
16
17
 
17
18
  from qiskit.qobj.utils import MeasReturnType, MeasLevel
18
19
  from qiskit.qobj import QobjExperimentHeader
@@ -66,8 +67,7 @@ class ExperimentResultData:
66
67
  string_list = []
67
68
  for field in self._data_attributes:
68
69
  string_list.append(f"{field}={getattr(self, field)}")
69
- out = "ExperimentResultData(%s)" % ", ".join(string_list)
70
- return out
70
+ return f"ExperimentResultData({', '.join(string_list)})"
71
71
 
72
72
  def to_dict(self):
73
73
  """Return a dictionary format representation of the ExperimentResultData
@@ -157,25 +157,23 @@ class ExperimentResult:
157
157
  self._metadata.update(kwargs)
158
158
 
159
159
  def __repr__(self):
160
- out = "ExperimentResult(shots={}, success={}, meas_level={}, data={}".format(
161
- self.shots,
162
- self.success,
163
- self.meas_level,
164
- self.data,
160
+ out = (
161
+ f"ExperimentResult(shots={self.shots}, success={self.success},"
162
+ f" meas_level={self.meas_level}, data={self.data}"
165
163
  )
166
164
  if hasattr(self, "header"):
167
- out += ", header=%s" % self.header
165
+ out += f", header={self.header}"
168
166
  if hasattr(self, "status"):
169
- out += ", status=%s" % self.status
167
+ out += f", status={self.status}"
170
168
  if hasattr(self, "seed"):
171
- out += ", seed=%s" % self.seed
169
+ out += f", seed={self.seed}"
172
170
  if hasattr(self, "meas_return"):
173
- out += ", meas_return=%s" % self.meas_return
174
- for key in self._metadata:
175
- if isinstance(self._metadata[key], str):
176
- value_str = "'%s'" % self._metadata[key]
171
+ out += f", meas_return={self.meas_return}"
172
+ for key, value in self._metadata.items():
173
+ if isinstance(value, str):
174
+ value_str = f"'{value}'"
177
175
  else:
178
- value_str = repr(self._metadata[key])
176
+ value_str = repr(value)
179
177
  out += f", {key}={value_str}"
180
178
  out += ")"
181
179
  return out
@@ -226,7 +224,10 @@ class ExperimentResult:
226
224
  in_data = copy.copy(data)
227
225
  data_obj = ExperimentResultData.from_dict(in_data.pop("data"))
228
226
  if "header" in in_data:
229
- in_data["header"] = QobjExperimentHeader.from_dict(in_data.pop("header"))
227
+ with warnings.catch_warnings():
228
+ # The class QobjExperimentHeader is deprecated
229
+ warnings.filterwarnings("ignore", category=DeprecationWarning, module="qiskit")
230
+ in_data["header"] = QobjExperimentHeader.from_dict(in_data.pop("header"))
230
231
  shots = in_data.pop("shots")
231
232
  success = in_data.pop("success")
232
233
 
qiskit/result/result.py CHANGED
@@ -69,23 +69,16 @@ class Result:
69
69
 
70
70
  def __repr__(self):
71
71
  out = (
72
- "Result(backend_name='%s', backend_version='%s', qobj_id='%s', "
73
- "job_id='%s', success=%s, results=%s"
74
- % (
75
- self.backend_name,
76
- self.backend_version,
77
- self.qobj_id,
78
- self.job_id,
79
- self.success,
80
- self.results,
81
- )
72
+ f"Result(backend_name='{self.backend_name}', backend_version='{self.backend_version}',"
73
+ f" qobj_id='{self.qobj_id}', job_id='{self.job_id}', success={self.success},"
74
+ f" results={self.results}"
82
75
  )
83
76
  out += f", date={self.date}, status={self.status}, header={self.header}"
84
- for key in self._metadata:
85
- if isinstance(self._metadata[key], str):
86
- value_str = "'%s'" % self._metadata[key]
77
+ for key, value in self._metadata.items():
78
+ if isinstance(value, str):
79
+ value_str = f"'{value}'"
87
80
  else:
88
- value_str = repr(self._metadata[key])
81
+ value_str = repr(value)
89
82
  out += f", {key}={value_str}"
90
83
  out += ")"
91
84
  return out
@@ -132,7 +125,9 @@ class Result:
132
125
  in_data = copy.copy(data)
133
126
  in_data["results"] = [ExperimentResult.from_dict(x) for x in in_data.pop("results")]
134
127
  if in_data.get("header") is not None:
135
- in_data["header"] = QobjHeader.from_dict(in_data.pop("header"))
128
+ with warnings.catch_warnings():
129
+ warnings.filterwarnings("ignore", category=DeprecationWarning, module="qiskit")
130
+ in_data["header"] = QobjHeader.from_dict(in_data.pop("header"))
136
131
  return cls(**in_data)
137
132
 
138
133
  def data(self, experiment=None):
@@ -236,10 +231,10 @@ class Result:
236
231
 
237
232
  except KeyError as ex:
238
233
  raise QiskitError(
239
- 'No memory for experiment "{}". '
234
+ f'No memory for experiment "{repr(experiment)}". '
240
235
  "Please verify that you either ran a measurement level 2 job "
241
236
  'with the memory flag set, eg., "memory=True", '
242
- "or a measurement level 0/1 job.".format(repr(experiment))
237
+ "or a measurement level 0/1 job."
243
238
  ) from ex
244
239
 
245
240
  def get_counts(self, experiment=None):
@@ -377,14 +372,14 @@ class Result:
377
372
  ]
378
373
 
379
374
  if len(exp) == 0:
380
- raise QiskitError('Data for experiment "%s" could not be found.' % key)
375
+ raise QiskitError(f'Data for experiment "{key}" could not be found.')
381
376
  if len(exp) == 1:
382
377
  exp = exp[0]
383
378
  else:
384
379
  warnings.warn(
385
- 'Result object contained multiple results matching name "%s", '
380
+ f'Result object contained multiple results matching name "{key}", '
386
381
  "only first match will be returned. Use an integer index to "
387
- "retrieve results for all entries." % key
382
+ "retrieve results for all entries."
388
383
  )
389
384
  exp = exp[0]
390
385
 
@@ -145,9 +145,9 @@ def lower_gates(
145
145
  elif isinstance(instruction.operation, Measure):
146
146
  if len(inst_qubits) != 1 and len(instruction.clbits) != 1:
147
147
  raise QiskitError(
148
- "Qubit '{}' or classical bit '{}' errored because the "
148
+ f"Qubit '{inst_qubits}' or classical bit '{instruction.clbits}' errored because the "
149
149
  "circuit Measure instruction only takes one of "
150
- "each.".format(inst_qubits, instruction.clbits)
150
+ "each."
151
151
  )
152
152
  qubit_mem_slots[inst_qubits[0]] = clbit_indices[instruction.clbits[0]]
153
153
  else:
@@ -91,6 +91,7 @@ Basis Change Synthesis
91
91
  ======================
92
92
 
93
93
  .. autofunction:: synth_qft_line
94
+ .. autofunction:: synth_qft_full
94
95
 
95
96
  Unitary Synthesis
96
97
  =================
@@ -162,7 +163,7 @@ from .stabilizer import (
162
163
  synth_circuit_from_stabilizers,
163
164
  )
164
165
  from .discrete_basis import SolovayKitaevDecomposition, generate_basic_approximations
165
- from .qft import synth_qft_line
166
+ from .qft import synth_qft_line, synth_qft_full
166
167
  from .unitary.qsd import qs_decomposition
167
168
  from .unitary import aqc
168
169
  from .one_qubit import OneQubitEulerDecomposer
@@ -14,6 +14,6 @@
14
14
 
15
15
  from .clifford_decompose_full import synth_clifford_full
16
16
  from .clifford_decompose_ag import synth_clifford_ag
17
- from .clifford_decompose_bm import synth_clifford_bm, _decompose_clifford_1q
17
+ from .clifford_decompose_bm import synth_clifford_bm
18
18
  from .clifford_decompose_greedy import synth_clifford_greedy
19
19
  from .clifford_decompose_layers import synth_clifford_layers, synth_clifford_depth_lnn
@@ -30,7 +30,7 @@ from qiskit.quantum_info.operators.symplectic.clifford_circuits import (
30
30
  _append_x,
31
31
  _append_z,
32
32
  )
33
- from .clifford_decompose_bm import _decompose_clifford_1q
33
+ from .clifford_decompose_bm import synth_clifford_bm
34
34
 
35
35
 
36
36
  def synth_clifford_ag(clifford: Clifford) -> QuantumCircuit:
@@ -50,7 +50,7 @@ def synth_clifford_ag(clifford: Clifford) -> QuantumCircuit:
50
50
  """
51
51
  # Use 1-qubit decomposition method
52
52
  if clifford.num_qubits == 1:
53
- return _decompose_clifford_1q(clifford.tableau)
53
+ return synth_clifford_bm(clifford)
54
54
 
55
55
  # Compose a circuit which we will convert to an instruction
56
56
  circuit = QuantumCircuit(clifford.num_qubits, name=str(clifford))