qiskit 1.3.0b1__cp39-abi3-win32.whl → 1.3.0rc2__cp39-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 (360) hide show
  1. qiskit/VERSION.txt +1 -1
  2. qiskit/__init__.py +20 -1
  3. qiskit/_accelerate.pyd +0 -0
  4. qiskit/assembler/assemble_schedules.py +2 -0
  5. qiskit/circuit/__init__.py +44 -1
  6. qiskit/circuit/_standard_gates_commutations.py +585 -0
  7. qiskit/circuit/barrier.py +2 -0
  8. qiskit/circuit/controlflow/builder.py +3 -3
  9. qiskit/circuit/controlflow/if_else.py +13 -5
  10. qiskit/circuit/controlflow/while_loop.py +10 -2
  11. qiskit/circuit/delay.py +20 -3
  12. qiskit/circuit/equivalence.py +13 -214
  13. qiskit/circuit/gate.py +3 -1
  14. qiskit/circuit/instruction.py +32 -11
  15. qiskit/circuit/instructionset.py +2 -0
  16. qiskit/circuit/library/__init__.py +110 -14
  17. qiskit/circuit/library/arithmetic/__init__.py +9 -2
  18. qiskit/circuit/library/arithmetic/adders/__init__.py +1 -0
  19. qiskit/circuit/library/arithmetic/adders/adder.py +154 -2
  20. qiskit/circuit/library/arithmetic/adders/cdkm_ripple_carry_adder.py +20 -56
  21. qiskit/circuit/library/arithmetic/adders/draper_qft_adder.py +14 -1
  22. qiskit/circuit/library/arithmetic/adders/vbe_ripple_carry_adder.py +21 -91
  23. qiskit/circuit/library/arithmetic/linear_pauli_rotations.py +1 -1
  24. qiskit/circuit/library/arithmetic/multipliers/__init__.py +1 -0
  25. qiskit/circuit/library/arithmetic/multipliers/hrs_cumulative_multiplier.py +8 -1
  26. qiskit/circuit/library/arithmetic/multipliers/multiplier.py +94 -3
  27. qiskit/circuit/library/arithmetic/multipliers/rg_qft_multiplier.py +8 -1
  28. qiskit/circuit/library/arithmetic/weighted_adder.py +1 -1
  29. qiskit/circuit/library/basis_change/qft.py +20 -38
  30. qiskit/circuit/library/blueprintcircuit.py +64 -0
  31. qiskit/circuit/library/boolean_logic/__init__.py +4 -4
  32. qiskit/circuit/library/boolean_logic/inner_product.py +81 -4
  33. qiskit/circuit/library/boolean_logic/quantum_and.py +107 -4
  34. qiskit/circuit/library/boolean_logic/quantum_or.py +107 -3
  35. qiskit/circuit/library/boolean_logic/quantum_xor.py +97 -3
  36. qiskit/circuit/library/data_preparation/__init__.py +6 -3
  37. qiskit/circuit/library/data_preparation/{z_feature_map.py → _z_feature_map.py} +45 -34
  38. qiskit/circuit/library/data_preparation/_zz_feature_map.py +150 -0
  39. qiskit/circuit/library/data_preparation/pauli_feature_map.py +342 -29
  40. qiskit/circuit/library/fourier_checking.py +72 -11
  41. qiskit/circuit/library/generalized_gates/__init__.py +1 -1
  42. qiskit/circuit/library/generalized_gates/diagonal.py +45 -51
  43. qiskit/circuit/library/generalized_gates/gms.py +67 -14
  44. qiskit/circuit/library/generalized_gates/gr.py +4 -4
  45. qiskit/circuit/library/generalized_gates/isometry.py +2 -2
  46. qiskit/circuit/library/generalized_gates/linear_function.py +12 -6
  47. qiskit/circuit/library/generalized_gates/mcmt.py +167 -107
  48. qiskit/circuit/library/generalized_gates/permutation.py +8 -6
  49. qiskit/circuit/library/generalized_gates/rv.py +8 -9
  50. qiskit/circuit/library/graph_state.py +93 -10
  51. qiskit/circuit/library/grover_operator.py +270 -2
  52. qiskit/circuit/library/hidden_linear_function.py +83 -20
  53. qiskit/circuit/library/iqp.py +99 -20
  54. qiskit/circuit/library/n_local/__init__.py +19 -7
  55. qiskit/circuit/library/n_local/efficient_su2.py +118 -5
  56. qiskit/circuit/library/n_local/evolved_operator_ansatz.py +259 -0
  57. qiskit/circuit/library/n_local/excitation_preserving.py +130 -6
  58. qiskit/circuit/library/n_local/n_local.py +406 -5
  59. qiskit/circuit/library/n_local/pauli_two_design.py +106 -4
  60. qiskit/circuit/library/n_local/qaoa_ansatz.py +80 -1
  61. qiskit/circuit/library/n_local/real_amplitudes.py +127 -7
  62. qiskit/circuit/library/n_local/two_local.py +14 -7
  63. qiskit/circuit/library/overlap.py +91 -26
  64. qiskit/circuit/library/pauli_evolution.py +17 -15
  65. qiskit/circuit/library/phase_estimation.py +80 -4
  66. qiskit/circuit/library/quantum_volume.py +72 -20
  67. qiskit/circuit/library/standard_gates/__init__.py +20 -1
  68. qiskit/circuit/library/standard_gates/dcx.py +2 -1
  69. qiskit/circuit/library/standard_gates/ecr.py +2 -2
  70. qiskit/circuit/library/standard_gates/h.py +4 -3
  71. qiskit/circuit/library/standard_gates/i.py +2 -1
  72. qiskit/circuit/library/standard_gates/iswap.py +2 -2
  73. qiskit/circuit/library/standard_gates/p.py +20 -12
  74. qiskit/circuit/library/standard_gates/r.py +1 -1
  75. qiskit/circuit/library/standard_gates/rx.py +4 -3
  76. qiskit/circuit/library/standard_gates/rxx.py +2 -2
  77. qiskit/circuit/library/standard_gates/ry.py +4 -3
  78. qiskit/circuit/library/standard_gates/ryy.py +2 -2
  79. qiskit/circuit/library/standard_gates/rz.py +13 -12
  80. qiskit/circuit/library/standard_gates/rzx.py +6 -6
  81. qiskit/circuit/library/standard_gates/rzz.py +1 -1
  82. qiskit/circuit/library/standard_gates/s.py +4 -4
  83. qiskit/circuit/library/standard_gates/swap.py +3 -3
  84. qiskit/circuit/library/standard_gates/sx.py +4 -3
  85. qiskit/circuit/library/standard_gates/t.py +2 -2
  86. qiskit/circuit/library/standard_gates/u.py +11 -3
  87. qiskit/circuit/library/standard_gates/u1.py +65 -15
  88. qiskit/circuit/library/standard_gates/u2.py +4 -1
  89. qiskit/circuit/library/standard_gates/u3.py +31 -3
  90. qiskit/circuit/library/standard_gates/x.py +7 -5
  91. qiskit/circuit/library/standard_gates/xx_minus_yy.py +2 -2
  92. qiskit/circuit/library/standard_gates/xx_plus_yy.py +2 -2
  93. qiskit/circuit/library/standard_gates/y.py +4 -3
  94. qiskit/circuit/library/standard_gates/z.py +3 -3
  95. qiskit/circuit/library/templates/clifford/clifford_2_1.py +9 -8
  96. qiskit/circuit/library/templates/clifford/clifford_2_2.py +10 -9
  97. qiskit/circuit/library/templates/clifford/clifford_2_3.py +9 -7
  98. qiskit/circuit/library/templates/clifford/clifford_2_4.py +9 -8
  99. qiskit/circuit/library/templates/clifford/clifford_3_1.py +9 -8
  100. qiskit/circuit/library/templates/clifford/clifford_4_1.py +10 -9
  101. qiskit/circuit/library/templates/clifford/clifford_4_2.py +10 -9
  102. qiskit/circuit/library/templates/clifford/clifford_4_3.py +10 -9
  103. qiskit/circuit/library/templates/clifford/clifford_4_4.py +10 -9
  104. qiskit/circuit/library/templates/clifford/clifford_5_1.py +10 -9
  105. qiskit/circuit/library/templates/clifford/clifford_6_1.py +10 -9
  106. qiskit/circuit/library/templates/clifford/clifford_6_2.py +10 -9
  107. qiskit/circuit/library/templates/clifford/clifford_6_3.py +10 -9
  108. qiskit/circuit/library/templates/clifford/clifford_6_4.py +9 -8
  109. qiskit/circuit/library/templates/clifford/clifford_6_5.py +10 -9
  110. qiskit/circuit/library/templates/clifford/clifford_8_1.py +10 -9
  111. qiskit/circuit/library/templates/clifford/clifford_8_2.py +10 -9
  112. qiskit/circuit/library/templates/clifford/clifford_8_3.py +10 -9
  113. qiskit/circuit/library/templates/nct/template_nct_2a_1.py +9 -7
  114. qiskit/circuit/library/templates/nct/template_nct_2a_2.py +10 -8
  115. qiskit/circuit/library/templates/nct/template_nct_2a_3.py +12 -10
  116. qiskit/circuit/library/templates/nct/template_nct_4a_1.py +16 -14
  117. qiskit/circuit/library/templates/nct/template_nct_4a_2.py +14 -12
  118. qiskit/circuit/library/templates/nct/template_nct_4a_3.py +12 -10
  119. qiskit/circuit/library/templates/nct/template_nct_4b_1.py +14 -12
  120. qiskit/circuit/library/templates/nct/template_nct_4b_2.py +12 -10
  121. qiskit/circuit/library/templates/nct/template_nct_5a_1.py +12 -10
  122. qiskit/circuit/library/templates/nct/template_nct_5a_2.py +12 -10
  123. qiskit/circuit/library/templates/nct/template_nct_5a_3.py +12 -10
  124. qiskit/circuit/library/templates/nct/template_nct_5a_4.py +11 -9
  125. qiskit/circuit/library/templates/nct/template_nct_6a_1.py +11 -9
  126. qiskit/circuit/library/templates/nct/template_nct_6a_2.py +12 -10
  127. qiskit/circuit/library/templates/nct/template_nct_6a_3.py +12 -10
  128. qiskit/circuit/library/templates/nct/template_nct_6a_4.py +12 -10
  129. qiskit/circuit/library/templates/nct/template_nct_6b_1.py +12 -10
  130. qiskit/circuit/library/templates/nct/template_nct_6b_2.py +12 -10
  131. qiskit/circuit/library/templates/nct/template_nct_6c_1.py +12 -10
  132. qiskit/circuit/library/templates/nct/template_nct_7a_1.py +13 -11
  133. qiskit/circuit/library/templates/nct/template_nct_7b_1.py +13 -11
  134. qiskit/circuit/library/templates/nct/template_nct_7c_1.py +13 -11
  135. qiskit/circuit/library/templates/nct/template_nct_7d_1.py +13 -11
  136. qiskit/circuit/library/templates/nct/template_nct_7e_1.py +13 -11
  137. qiskit/circuit/library/templates/nct/template_nct_9a_1.py +13 -11
  138. qiskit/circuit/library/templates/nct/template_nct_9c_1.py +11 -9
  139. qiskit/circuit/library/templates/nct/template_nct_9c_10.py +12 -10
  140. qiskit/circuit/library/templates/nct/template_nct_9c_11.py +12 -10
  141. qiskit/circuit/library/templates/nct/template_nct_9c_12.py +12 -10
  142. qiskit/circuit/library/templates/nct/template_nct_9c_2.py +12 -10
  143. qiskit/circuit/library/templates/nct/template_nct_9c_3.py +12 -10
  144. qiskit/circuit/library/templates/nct/template_nct_9c_4.py +12 -10
  145. qiskit/circuit/library/templates/nct/template_nct_9c_5.py +12 -10
  146. qiskit/circuit/library/templates/nct/template_nct_9c_6.py +12 -10
  147. qiskit/circuit/library/templates/nct/template_nct_9c_7.py +12 -10
  148. qiskit/circuit/library/templates/nct/template_nct_9c_8.py +12 -10
  149. qiskit/circuit/library/templates/nct/template_nct_9c_9.py +12 -10
  150. qiskit/circuit/library/templates/nct/template_nct_9d_1.py +11 -9
  151. qiskit/circuit/library/templates/nct/template_nct_9d_10.py +12 -10
  152. qiskit/circuit/library/templates/nct/template_nct_9d_2.py +12 -10
  153. qiskit/circuit/library/templates/nct/template_nct_9d_3.py +12 -10
  154. qiskit/circuit/library/templates/nct/template_nct_9d_4.py +12 -10
  155. qiskit/circuit/library/templates/nct/template_nct_9d_5.py +12 -10
  156. qiskit/circuit/library/templates/nct/template_nct_9d_6.py +12 -10
  157. qiskit/circuit/library/templates/nct/template_nct_9d_7.py +12 -10
  158. qiskit/circuit/library/templates/nct/template_nct_9d_8.py +12 -10
  159. qiskit/circuit/library/templates/nct/template_nct_9d_9.py +12 -10
  160. qiskit/circuit/library/templates/rzx/rzx_cy.py +11 -10
  161. qiskit/circuit/library/templates/rzx/rzx_xz.py +16 -15
  162. qiskit/circuit/library/templates/rzx/rzx_yz.py +12 -10
  163. qiskit/circuit/library/templates/rzx/rzx_zz1.py +22 -20
  164. qiskit/circuit/library/templates/rzx/rzx_zz2.py +16 -15
  165. qiskit/circuit/library/templates/rzx/rzx_zz3.py +17 -15
  166. qiskit/circuit/parameter.py +4 -0
  167. qiskit/circuit/parameterexpression.py +167 -34
  168. qiskit/circuit/quantumcircuit.py +162 -126
  169. qiskit/circuit/singleton.py +2 -0
  170. qiskit/circuit/store.py +2 -0
  171. qiskit/circuit/twirling.py +145 -0
  172. qiskit/compiler/assembler.py +17 -4
  173. qiskit/compiler/scheduler.py +2 -0
  174. qiskit/compiler/sequencer.py +2 -0
  175. qiskit/compiler/transpiler.py +81 -26
  176. qiskit/converters/circuit_to_dag.py +2 -2
  177. qiskit/converters/circuit_to_dagdependency.py +1 -1
  178. qiskit/converters/circuit_to_dagdependency_v2.py +1 -1
  179. qiskit/converters/circuit_to_instruction.py +1 -1
  180. qiskit/converters/dag_to_circuit.py +7 -5
  181. qiskit/converters/dag_to_dagdependency.py +1 -1
  182. qiskit/converters/dag_to_dagdependency_v2.py +1 -1
  183. qiskit/converters/dagdependency_to_circuit.py +5 -1
  184. qiskit/converters/dagdependency_to_dag.py +6 -1
  185. qiskit/dagcircuit/collect_blocks.py +3 -3
  186. qiskit/dagcircuit/dagdependency.py +18 -5
  187. qiskit/dagcircuit/dagdependency_v2.py +1 -1
  188. qiskit/dagcircuit/dagnode.py +2 -2
  189. qiskit/passmanager/__init__.py +2 -2
  190. qiskit/primitives/backend_estimator.py +5 -2
  191. qiskit/primitives/backend_sampler_v2.py +61 -18
  192. qiskit/primitives/base/base_estimator.py +2 -2
  193. qiskit/primitives/containers/data_bin.py +9 -1
  194. qiskit/primitives/statevector_sampler.py +1 -1
  195. qiskit/primitives/utils.py +1 -1
  196. qiskit/providers/__init__.py +3 -3
  197. qiskit/providers/backend.py +12 -1
  198. qiskit/providers/backend_compat.py +23 -3
  199. qiskit/providers/basic_provider/basic_simulator.py +12 -2
  200. qiskit/providers/fake_provider/fake_pulse_backend.py +6 -1
  201. qiskit/providers/fake_provider/generic_backend_v2.py +46 -30
  202. qiskit/providers/models/pulsedefaults.py +2 -0
  203. qiskit/pulse/builder.py +59 -18
  204. qiskit/pulse/calibration_entries.py +4 -1
  205. qiskit/pulse/channels.py +2 -0
  206. qiskit/pulse/exceptions.py +2 -0
  207. qiskit/pulse/instruction_schedule_map.py +21 -6
  208. qiskit/pulse/instructions/acquire.py +2 -0
  209. qiskit/pulse/instructions/delay.py +2 -0
  210. qiskit/pulse/instructions/directives.py +8 -0
  211. qiskit/pulse/instructions/frequency.py +3 -0
  212. qiskit/pulse/instructions/instruction.py +2 -0
  213. qiskit/pulse/instructions/phase.py +3 -0
  214. qiskit/pulse/instructions/play.py +2 -0
  215. qiskit/pulse/instructions/reference.py +2 -0
  216. qiskit/pulse/instructions/snapshot.py +2 -0
  217. qiskit/pulse/library/pulse.py +2 -0
  218. qiskit/pulse/library/symbolic_pulses.py +28 -0
  219. qiskit/pulse/library/waveform.py +2 -0
  220. qiskit/pulse/macros.py +1 -1
  221. qiskit/pulse/schedule.py +12 -13
  222. qiskit/pulse/transforms/alignments.py +5 -3
  223. qiskit/pulse/transforms/dag.py +7 -0
  224. qiskit/qasm2/export.py +5 -3
  225. qiskit/qasm2/parse.py +46 -2
  226. qiskit/qasm3/__init__.py +1 -0
  227. qiskit/qasm3/ast.py +123 -15
  228. qiskit/qasm3/exporter.py +103 -77
  229. qiskit/qobj/converters/pulse_instruction.py +6 -4
  230. qiskit/qpy/__init__.py +181 -0
  231. qiskit/qpy/binary_io/circuits.py +20 -5
  232. qiskit/qpy/binary_io/schedules.py +3 -4
  233. qiskit/qpy/binary_io/value.py +310 -13
  234. qiskit/qpy/common.py +46 -2
  235. qiskit/qpy/formats.py +7 -0
  236. qiskit/qpy/interface.py +40 -4
  237. qiskit/quantum_info/__init__.py +4 -0
  238. qiskit/quantum_info/operators/channel/transformations.py +28 -21
  239. qiskit/quantum_info/operators/dihedral/dihedral.py +1 -1
  240. qiskit/quantum_info/operators/operator.py +54 -8
  241. qiskit/quantum_info/operators/symplectic/base_pauli.py +11 -19
  242. qiskit/quantum_info/operators/symplectic/clifford.py +1 -1
  243. qiskit/quantum_info/operators/symplectic/clifford_circuits.py +1 -1
  244. qiskit/quantum_info/operators/symplectic/pauli.py +2 -0
  245. qiskit/quantum_info/operators/symplectic/pauli_list.py +4 -4
  246. qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py +23 -2
  247. qiskit/quantum_info/states/densitymatrix.py +5 -5
  248. qiskit/quantum_info/states/stabilizerstate.py +1 -1
  249. qiskit/quantum_info/states/statevector.py +6 -6
  250. qiskit/result/mitigation/base_readout_mitigator.py +1 -1
  251. qiskit/result/mitigation/correlated_readout_mitigator.py +9 -1
  252. qiskit/result/mitigation/local_readout_mitigator.py +9 -1
  253. qiskit/result/mitigation/utils.py +57 -0
  254. qiskit/scheduler/config.py +2 -0
  255. qiskit/scheduler/methods/basic.py +3 -0
  256. qiskit/scheduler/schedule_circuit.py +2 -0
  257. qiskit/scheduler/sequence.py +2 -0
  258. qiskit/synthesis/__init__.py +25 -0
  259. qiskit/synthesis/arithmetic/__init__.py +16 -0
  260. qiskit/synthesis/arithmetic/adders/__init__.py +17 -0
  261. qiskit/synthesis/arithmetic/adders/cdkm_ripple_carry_adder.py +154 -0
  262. qiskit/synthesis/arithmetic/adders/draper_qft_adder.py +103 -0
  263. qiskit/synthesis/arithmetic/adders/vbe_ripple_carry_adder.py +161 -0
  264. qiskit/synthesis/arithmetic/multipliers/__init__.py +16 -0
  265. qiskit/synthesis/arithmetic/multipliers/hrs_cumulative_multiplier.py +102 -0
  266. qiskit/synthesis/arithmetic/multipliers/rg_qft_multiplier.py +99 -0
  267. qiskit/synthesis/clifford/clifford_decompose_bm.py +1 -2
  268. qiskit/synthesis/clifford/clifford_decompose_greedy.py +3 -2
  269. qiskit/synthesis/clifford/clifford_decompose_layers.py +2 -1
  270. qiskit/synthesis/evolution/__init__.py +1 -0
  271. qiskit/synthesis/evolution/lie_trotter.py +16 -42
  272. qiskit/synthesis/evolution/pauli_network.py +80 -0
  273. qiskit/synthesis/evolution/product_formula.py +165 -238
  274. qiskit/synthesis/evolution/qdrift.py +36 -29
  275. qiskit/synthesis/evolution/suzuki_trotter.py +87 -27
  276. qiskit/synthesis/multi_controlled/__init__.py +1 -0
  277. qiskit/synthesis/multi_controlled/mcmt_vchain.py +52 -0
  278. qiskit/synthesis/qft/qft_decompose_full.py +19 -1
  279. qiskit/synthesis/qft/qft_decompose_lnn.py +2 -1
  280. qiskit/synthesis/stabilizer/stabilizer_decompose.py +2 -1
  281. qiskit/synthesis/two_qubit/two_qubit_decompose.py +4 -63
  282. qiskit/synthesis/unitary/qsd.py +5 -5
  283. qiskit/transpiler/__init__.py +21 -14
  284. qiskit/transpiler/basepasses.py +1 -1
  285. qiskit/transpiler/passes/__init__.py +2 -0
  286. qiskit/transpiler/passes/basis/basis_translator.py +9 -565
  287. qiskit/transpiler/passes/basis/decompose.py +45 -12
  288. qiskit/transpiler/passes/basis/unroll_3q_or_more.py +1 -1
  289. qiskit/transpiler/passes/basis/unroll_custom_definitions.py +1 -1
  290. qiskit/transpiler/passes/calibration/pulse_gate.py +4 -2
  291. qiskit/transpiler/passes/calibration/rx_builder.py +11 -7
  292. qiskit/transpiler/passes/calibration/rzx_builder.py +46 -30
  293. qiskit/transpiler/passes/layout/disjoint_utils.py +15 -13
  294. qiskit/transpiler/passes/layout/sabre_layout.py +7 -2
  295. qiskit/transpiler/passes/layout/sabre_pre_layout.py +5 -0
  296. qiskit/transpiler/passes/optimization/__init__.py +1 -0
  297. qiskit/transpiler/passes/optimization/collect_cliffords.py +19 -3
  298. qiskit/transpiler/passes/optimization/collect_linear_functions.py +1 -1
  299. qiskit/transpiler/passes/optimization/collect_multiqubit_blocks.py +2 -2
  300. qiskit/transpiler/passes/optimization/commutative_inverse_cancellation.py +1 -1
  301. qiskit/transpiler/passes/optimization/consolidate_blocks.py +48 -131
  302. qiskit/transpiler/passes/optimization/echo_rzx_weyl_decomposition.py +4 -2
  303. qiskit/transpiler/passes/optimization/elide_permutations.py +9 -32
  304. qiskit/transpiler/passes/optimization/optimize_1q_decomposition.py +5 -11
  305. qiskit/transpiler/passes/optimization/optimize_1q_gates.py +1 -1
  306. qiskit/transpiler/passes/optimization/optimize_swap_before_measure.py +1 -1
  307. qiskit/transpiler/passes/optimization/remove_identity_equiv.py +69 -0
  308. qiskit/transpiler/passes/optimization/template_matching/backward_match.py +5 -5
  309. qiskit/transpiler/passes/optimization/template_matching/forward_match.py +4 -4
  310. qiskit/transpiler/passes/optimization/template_matching/template_substitution.py +2 -2
  311. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/commuting_2q_gate_router.py +1 -1
  312. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/swap_strategy.py +1 -1
  313. qiskit/transpiler/passes/routing/sabre_swap.py +7 -3
  314. qiskit/transpiler/passes/routing/star_prerouting.py +2 -2
  315. qiskit/transpiler/passes/scheduling/alap.py +1 -1
  316. qiskit/transpiler/passes/scheduling/alignments/align_measures.py +2 -2
  317. qiskit/transpiler/passes/scheduling/alignments/check_durations.py +1 -1
  318. qiskit/transpiler/passes/scheduling/alignments/pulse_gate_validation.py +2 -0
  319. qiskit/transpiler/passes/scheduling/alignments/reschedule.py +2 -2
  320. qiskit/transpiler/passes/scheduling/asap.py +1 -1
  321. qiskit/transpiler/passes/scheduling/base_scheduler.py +14 -12
  322. qiskit/transpiler/passes/scheduling/dynamical_decoupling.py +9 -4
  323. qiskit/transpiler/passes/scheduling/padding/base_padding.py +1 -1
  324. qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py +16 -5
  325. qiskit/transpiler/passes/scheduling/padding/pad_delay.py +4 -1
  326. qiskit/transpiler/passes/scheduling/scheduling/base_scheduler.py +6 -2
  327. qiskit/transpiler/passes/scheduling/time_unit_conversion.py +9 -4
  328. qiskit/transpiler/passes/synthesis/high_level_synthesis.py +262 -99
  329. qiskit/transpiler/passes/synthesis/hls_plugins.py +637 -7
  330. qiskit/transpiler/passes/synthesis/solovay_kitaev_synthesis.py +3 -3
  331. qiskit/transpiler/passes/synthesis/unitary_synthesis.py +55 -34
  332. qiskit/transpiler/passes/utils/barrier_before_final_measurements.py +2 -56
  333. qiskit/transpiler/passes/utils/convert_conditions_to_if_ops.py +5 -0
  334. qiskit/transpiler/passes/utils/gate_direction.py +12 -275
  335. qiskit/transpiler/passes/utils/gates_basis.py +7 -30
  336. qiskit/transpiler/passes/utils/merge_adjacent_barriers.py +2 -1
  337. qiskit/transpiler/passmanager_config.py +22 -4
  338. qiskit/transpiler/preset_passmanagers/builtin_plugins.py +40 -14
  339. qiskit/transpiler/preset_passmanagers/common.py +5 -3
  340. qiskit/transpiler/preset_passmanagers/generate_preset_pass_manager.py +125 -42
  341. qiskit/transpiler/preset_passmanagers/plugin.py +1 -1
  342. qiskit/transpiler/target.py +74 -16
  343. qiskit/utils/deprecate_pulse.py +119 -0
  344. qiskit/visualization/circuit/_utils.py +2 -2
  345. qiskit/visualization/circuit/circuit_visualization.py +3 -2
  346. qiskit/visualization/circuit/matplotlib.py +1 -1
  347. qiskit/visualization/dag_visualization.py +1 -1
  348. qiskit/visualization/pass_manager_visualization.py +3 -14
  349. qiskit/visualization/pulse_v2/interface.py +3 -1
  350. qiskit/visualization/timeline/core.py +25 -2
  351. qiskit/visualization/timeline/interface.py +12 -0
  352. {qiskit-1.3.0b1.dist-info → qiskit-1.3.0rc2.dist-info}/METADATA +9 -8
  353. {qiskit-1.3.0b1.dist-info → qiskit-1.3.0rc2.dist-info}/RECORD +357 -346
  354. {qiskit-1.3.0b1.dist-info → qiskit-1.3.0rc2.dist-info}/WHEEL +1 -1
  355. {qiskit-1.3.0b1.dist-info → qiskit-1.3.0rc2.dist-info}/entry_points.txt +19 -0
  356. qiskit/circuit/library/data_preparation/zz_feature_map.py +0 -118
  357. qiskit/synthesis/two_qubit/weyl.py +0 -97
  358. qiskit/transpiler/passes/synthesis/qubit_tracker.py +0 -132
  359. {qiskit-1.3.0b1.dist-info → qiskit-1.3.0rc2.dist-info}/LICENSE.txt +0 -0
  360. {qiskit-1.3.0b1.dist-info → qiskit-1.3.0rc2.dist-info}/top_level.txt +0 -0
@@ -16,6 +16,7 @@ Matrix Operator class.
16
16
 
17
17
  from __future__ import annotations
18
18
 
19
+ import cmath
19
20
  import copy as _copy
20
21
  import re
21
22
  from numbers import Number
@@ -540,11 +541,41 @@ class Operator(LinearOp):
540
541
  ret._op_shape = new_shape
541
542
  return ret
542
543
 
543
- def power(self, n: float) -> Operator:
544
+ def power(
545
+ self, n: float, branch_cut_rotation=cmath.pi * 1e-12, assume_unitary=False
546
+ ) -> Operator:
544
547
  """Return the matrix power of the operator.
545
548
 
549
+ Non-integer powers of operators with an eigenvalue whose complex phase is :math:`\\pi` have
550
+ a branch cut in the complex plane, which makes the calculation of the principal root around
551
+ this cut subject to precision / differences in BLAS implementation. For example, the square
552
+ root of Pauli Y can return the :math:`\\pi/2` or :math:`-\\pi/2` Y rotation depending on
553
+ whether the -1 eigenvalue is found as ``complex(-1, tiny)`` or ``complex(-1, -tiny)``. Such
554
+ eigenvalues are really common in quantum information, so this function first phase-rotates
555
+ the input matrix to shift the branch cut to a far less common point. The underlying
556
+ numerical precision issues around the branch-cut point remain, if an operator has an
557
+ eigenvalue close to this phase. The magnitude of this rotation can be controlled with the
558
+ ``branch_cut_rotation`` parameter.
559
+
560
+ The choice of ``branch_cut_rotation`` affects the principal root that is found. For
561
+ example, the square root of :class:`.ZGate` will be calculated as either :class:`.SGate` or
562
+ :class:`.SdgGate` depending on which way the rotation is done::
563
+
564
+ from qiskit.circuit import library
565
+ from qiskit.quantum_info import Operator
566
+
567
+ z_op = Operator(library.ZGate())
568
+ assert z_op.power(0.5, branch_cut_rotation=1e-3) == Operator(library.SGate())
569
+ assert z_op.power(0.5, branch_cut_rotation=-1e-3) == Operator(library.SdgGate())
570
+
546
571
  Args:
547
572
  n (float): the power to raise the matrix to.
573
+ branch_cut_rotation (float): The rotation angle to apply to the branch cut in the
574
+ complex plane. This shifts the branch cut away from the common point of :math:`-1`,
575
+ but can cause a different root to be selected as the principal root. The rotation
576
+ is anticlockwise, following the standard convention for complex phase.
577
+ assume_unitary (bool): if ``True``, the operator is assumed to be unitary. In this case,
578
+ for fractional powers we employ a faster implementation based on Schur's decomposition.
548
579
 
549
580
  Returns:
550
581
  Operator: the resulting operator ``O ** n``.
@@ -552,6 +583,11 @@ class Operator(LinearOp):
552
583
  Raises:
553
584
  QiskitError: if the input and output dimensions of the operator
554
585
  are not equal.
586
+
587
+ .. note::
588
+ It is only safe to set the argument ``assume_unitary`` to ``True`` when the operator
589
+ is unitary (or, more generally, normal). Otherwise, the function will return an
590
+ incorrect output.
555
591
  """
556
592
  if self.input_dims() != self.output_dims():
557
593
  raise QiskitError("Can only power with input_dims = output_dims.")
@@ -561,13 +597,23 @@ class Operator(LinearOp):
561
597
  else:
562
598
  import scipy.linalg
563
599
 
564
- # Experimentally, for fractional powers this seems to be 3x faster than
565
- # calling scipy.linalg.fractional_matrix_power(self.data, n)
566
- decomposition, unitary = scipy.linalg.schur(self.data, output="complex")
567
- decomposition_diagonal = decomposition.diagonal()
568
- decomposition_power = [pow(element, n) for element in decomposition_diagonal]
569
- unitary_power = unitary @ np.diag(decomposition_power) @ unitary.conj().T
570
- ret._data = unitary_power
600
+ if assume_unitary:
601
+ # Experimentally, for fractional powers this seems to be 3x faster than
602
+ # calling scipy.linalg.fractional_matrix_power(self.data, exponent)
603
+ decomposition, unitary = scipy.linalg.schur(
604
+ cmath.rect(1, -branch_cut_rotation) * self.data, output="complex"
605
+ )
606
+ decomposition_diagonal = decomposition.diagonal()
607
+ decomposition_power = [pow(element, n) for element in decomposition_diagonal]
608
+ unitary_power = unitary @ np.diag(decomposition_power) @ unitary.conj().T
609
+ ret._data = cmath.rect(1, branch_cut_rotation * n) * unitary_power
610
+ else:
611
+ ret._data = cmath.rect(
612
+ 1, branch_cut_rotation * n
613
+ ) * scipy.linalg.fractional_matrix_power(
614
+ cmath.rect(1, -branch_cut_rotation) * self.data, n
615
+ )
616
+
571
617
  return ret
572
618
 
573
619
  def tensor(self, other: Operator) -> Operator:
@@ -33,6 +33,8 @@ if TYPE_CHECKING:
33
33
 
34
34
  # utility for _to_matrix
35
35
  _PARITY = np.array([-1 if bin(i).count("1") % 2 else 1 for i in range(256)], dtype=complex)
36
+ # Utility for `_to_label`
37
+ _TO_LABEL_CHARS = np.array([ord("I"), ord("X"), ord("Z"), ord("Y")], dtype=np.uint8)
36
38
 
37
39
 
38
40
  class BasePauli(BaseOperator, AdjointMixin, MultiplyMixin):
@@ -184,7 +186,7 @@ class BasePauli(BaseOperator, AdjointMixin, MultiplyMixin):
184
186
  return BasePauli(self._z, self._x, np.mod(self._phase + phase, 4))
185
187
 
186
188
  def conjugate(self):
187
- """Return the conjugate of each Pauli in the list."""
189
+ """Return the complex conjugate of the Pauli with respect to the Z basis."""
188
190
  complex_phase = np.mod(self._phase, 2)
189
191
  if np.all(complex_phase == 0):
190
192
  return self
@@ -496,25 +498,15 @@ class BasePauli(BaseOperator, AdjointMixin, MultiplyMixin):
496
498
  the phase ``q`` for the coefficient :math:`(-i)^(q + x.z)`
497
499
  for the label from the full Pauli group.
498
500
  """
499
- num_qubits = z.size
500
- phase = int(phase)
501
- coeff_labels = {0: "", 1: "-i", 2: "-", 3: "i"}
502
- label = ""
503
- for i in range(num_qubits):
504
- if not z[num_qubits - 1 - i]:
505
- if not x[num_qubits - 1 - i]:
506
- label += "I"
507
- else:
508
- label += "X"
509
- elif not x[num_qubits - 1 - i]:
510
- label += "Z"
511
- else:
512
- label += "Y"
513
- if not group_phase:
514
- phase -= 1
515
- phase %= 4
501
+ # Map each qubit to the {I: 0, X: 1, Z: 2, Y: 3} integer form, then use Numpy advanced
502
+ # indexing to get a new data buffer which is compatible with an ASCII string label.
503
+ index = z << 1
504
+ index += x
505
+ ascii_label = _TO_LABEL_CHARS[index[::-1]].data.tobytes()
506
+ phase = (int(phase) if group_phase else int(phase) - ascii_label.count(b"Y")) % 4
507
+ label = ascii_label.decode("ascii")
516
508
  if phase and full_group:
517
- label = coeff_labels[phase] + label
509
+ label = ("", "-i", "-", "i")[phase] + label
518
510
  if return_phase:
519
511
  return label, phase
520
512
  return label
@@ -92,7 +92,7 @@ class Clifford(BaseOperator, AdjointMixin, Operation):
92
92
  # Print the Clifford stabilizer rows
93
93
  print(cliff.to_labels(mode="S"))
94
94
 
95
- .. parsed-literal::
95
+ .. code-block:: text
96
96
 
97
97
  Clifford: Stabilizer = ['+XX', '+ZZ'], Destabilizer = ['+IZ', '+XI']
98
98
  ['+IZ', '+XI']
@@ -81,7 +81,7 @@ def _append_operation(clifford, operation, qargs=None):
81
81
  else:
82
82
  # assert isinstance(gate, Instruction)
83
83
  name = gate.name
84
- if getattr(gate, "condition", None) is not None:
84
+ if getattr(gate, "_condition", None) is not None:
85
85
  raise QiskitError("Conditional gate is not a valid Clifford operation.")
86
86
 
87
87
  # Apply gate if it is a Clifford basis gate
@@ -144,6 +144,8 @@ class Pauli(BasePauli):
144
144
 
145
145
  .. code-block:: python
146
146
 
147
+ from qiskit.quantum_info import Pauli
148
+
147
149
  P = Pauli('-iXYZ')
148
150
 
149
151
  print('P[0] =', repr(P[0]))
@@ -80,7 +80,7 @@ class PauliList(BasePauli, LinearMixin, GroupMixin):
80
80
  pauli_list = PauliList.from_symplectic(z, x, phase)
81
81
  print("4. ", pauli_list)
82
82
 
83
- .. parsed-literal::
83
+ .. code-block:: text
84
84
 
85
85
  1. ['II', 'ZI', '-iYY']
86
86
  2. ['iXI']
@@ -100,7 +100,7 @@ class PauliList(BasePauli, LinearMixin, GroupMixin):
100
100
  print("List: ", repr(pauli_list[[0, 2]]))
101
101
  print("Slice: ", repr(pauli_list[0:2]))
102
102
 
103
- .. parsed-literal::
103
+ .. code-block:: text
104
104
 
105
105
  Integer: Pauli('ZZ')
106
106
  List: PauliList(['XX', 'IZ'])
@@ -568,7 +568,7 @@ class PauliList(BasePauli, LinearMixin, GroupMixin):
568
568
  print('Weight sorted')
569
569
  print(srt)
570
570
 
571
- .. parsed-literal::
571
+ .. code-block:: text
572
572
 
573
573
  Initial Ordering
574
574
  ['YX', 'ZZ', 'XZ', 'YI', 'YZ', 'II', 'XX', 'XI', 'XY', 'YY', 'IX', 'IZ',
@@ -603,7 +603,7 @@ class PauliList(BasePauli, LinearMixin, GroupMixin):
603
603
  unique = pt.unique()
604
604
  print(unique)
605
605
 
606
- .. parsed-literal::
606
+ .. code-block:: text
607
607
 
608
608
  ['X', 'Y', '-X', 'I', 'Z', 'iZ']
609
609
 
@@ -560,7 +560,7 @@ class SparsePauliOp(LinearOp):
560
560
  print('Weight sorted')
561
561
  print(srt)
562
562
 
563
- .. parsed-literal::
563
+ .. code-block:: text
564
564
 
565
565
  Initial Ordering
566
566
  SparsePauliOp(['XX', 'XX', 'XX', 'YI', 'II', 'XZ', 'XY', 'XI'],
@@ -629,7 +629,7 @@ class SparsePauliOp(LinearOp):
629
629
  print('Weight sorted')
630
630
  print(srt)
631
631
 
632
- .. parsed-literal::
632
+ .. code-block:: text
633
633
 
634
634
  Initial Ordering
635
635
  SparsePauliOp(['XX', 'XX', 'XX', 'YI', 'II', 'XZ', 'XY', 'XI'],
@@ -794,6 +794,8 @@ class SparsePauliOp(LinearOp):
794
794
 
795
795
  .. code-block:: python
796
796
 
797
+ from qiskit.quantum_info import SparsePauliOp
798
+
797
799
  # via tuples and the full Pauli string
798
800
  op = SparsePauliOp.from_list([("XIIZI", 1), ("IYIIY", 2)])
799
801
 
@@ -858,6 +860,8 @@ class SparsePauliOp(LinearOp):
858
860
 
859
861
  .. code-block:: python
860
862
 
863
+ from qiskit.quantum_info import SparsePauliOp
864
+
861
865
  # via triples and local Paulis with indices
862
866
  op = SparsePauliOp.from_sparse_list([("ZX", [1, 4], 1), ("YY", [0, 3], 2)], num_qubits=5)
863
867
 
@@ -931,6 +935,14 @@ class SparsePauliOp(LinearOp):
931
935
  return labels
932
936
  return labels.tolist()
933
937
 
938
+ def to_sparse_list(self):
939
+ """Convert to a sparse Pauli list format with elements (pauli, qubits, coefficient)."""
940
+ pauli_labels = self.paulis.to_labels()
941
+ sparse_list = [
942
+ (*sparsify_label(label), coeff) for label, coeff in zip(pauli_labels, self.coeffs)
943
+ ]
944
+ return sparse_list
945
+
934
946
  def to_matrix(self, sparse: bool = False, force_serial: bool = False) -> np.ndarray:
935
947
  """Convert to a dense or sparse matrix.
936
948
 
@@ -1053,6 +1065,7 @@ class SparsePauliOp(LinearOp):
1053
1065
 
1054
1066
  .. code-block:: python
1055
1067
 
1068
+ >>> from qiskit.quantum_info import SparsePauliOp
1056
1069
  >>> op = SparsePauliOp.from_list([("XX", 2), ("YY", 1), ("IZ",2j), ("ZZ",1j)])
1057
1070
  >>> op.group_commuting()
1058
1071
  [SparsePauliOp(["IZ", "ZZ"], coeffs=[0.+2.j, 0.+1j]),
@@ -1171,5 +1184,13 @@ class SparsePauliOp(LinearOp):
1171
1184
  return new_op.compose(self, qargs=layout)
1172
1185
 
1173
1186
 
1187
+ def sparsify_label(pauli_string):
1188
+ """Return a sparse format of a Pauli string, e.g. "XIIIZ" -> ("XZ", [0, 4])."""
1189
+ qubits = [i for i, label in enumerate(reversed(pauli_string)) if label != "I"]
1190
+ sparse_label = "".join(pauli_string[~i] for i in qubits)
1191
+
1192
+ return sparse_label, qubits
1193
+
1194
+
1174
1195
  # Update docstrings for API docs
1175
1196
  generate_apidocs(SparsePauliOp)
@@ -461,7 +461,7 @@ class DensityMatrix(QuantumState, TolerancesMixin):
461
461
  probs_qubit_1 = rho.probabilities([1])
462
462
  print('Qubit-1 probs: {}'.format(probs_qubit_1))
463
463
 
464
- .. parsed-literal::
464
+ .. code-block:: text
465
465
 
466
466
  probs: [0.5 0. 0.5 0. ]
467
467
  Qubit-0 probs: [1. 0.]
@@ -485,7 +485,7 @@ class DensityMatrix(QuantumState, TolerancesMixin):
485
485
  probs_swapped = rho.probabilities([1, 0])
486
486
  print('Swapped probs: {}'.format(probs_swapped))
487
487
 
488
- .. parsed-literal::
488
+ .. code-block:: text
489
489
 
490
490
  probs: [0.5 0. 0.5 0. ]
491
491
  Swapped probs: [0.5 0.5 0. 0. ]
@@ -654,7 +654,7 @@ class DensityMatrix(QuantumState, TolerancesMixin):
654
654
  rho = DensityMatrix.from_label('-0')
655
655
  print(rho.to_dict())
656
656
 
657
- .. parsed-literal::
657
+ .. code-block:: text
658
658
 
659
659
  {
660
660
  '00|00': (0.4999999999999999+0j),
@@ -679,7 +679,7 @@ class DensityMatrix(QuantumState, TolerancesMixin):
679
679
  rho = DensityMatrix(mat, dims=(3, 3))
680
680
  print(rho.to_dict())
681
681
 
682
- .. parsed-literal::
682
+ .. code-block:: text
683
683
 
684
684
  {'00|00': (0.25+0j), '10|10': (0.25+0j), '20|20': (0.25+0j), '22|22': (0.25+0j)}
685
685
 
@@ -698,7 +698,7 @@ class DensityMatrix(QuantumState, TolerancesMixin):
698
698
  rho = DensityMatrix(mat, dims=(2, 10))
699
699
  print(rho.to_dict())
700
700
 
701
- .. parsed-literal::
701
+ .. code-block:: text
702
702
 
703
703
  {'00|00': (0.5+0j), '91|91': (0.5+0j)}
704
704
  """
@@ -54,7 +54,7 @@ class StabilizerState(QuantumState):
54
54
  # Calculate expectation value of the StabilizerState
55
55
  print (stab.expectation_value(Pauli('ZZ')))
56
56
 
57
- .. parsed-literal::
57
+ .. code-block:: text
58
58
 
59
59
  StabilizerState(StabilizerTable: ['+XX', '+ZZ'])
60
60
  {'00': 0.5, '11': 0.5}
@@ -476,7 +476,7 @@ class Statevector(QuantumState, TolerancesMixin):
476
476
  pauli_phase = (-1j) ** pauli.phase if pauli.phase else 1
477
477
 
478
478
  if x_mask + z_mask == 0:
479
- return pauli_phase * np.linalg.norm(self.data)
479
+ return pauli_phase * np.linalg.norm(self.data) ** 2
480
480
 
481
481
  if x_mask == 0:
482
482
  return pauli_phase * expval_pauli_no_x(self.data, self.num_qubits, z_mask)
@@ -554,7 +554,7 @@ class Statevector(QuantumState, TolerancesMixin):
554
554
  probs_qubit_1 = psi.probabilities([1])
555
555
  print('Qubit-1 probs: {}'.format(probs_qubit_1))
556
556
 
557
- .. parsed-literal::
557
+ .. code-block:: text
558
558
 
559
559
  probs: [0.5 0. 0.5 0. ]
560
560
  Qubit-0 probs: [1. 0.]
@@ -578,7 +578,7 @@ class Statevector(QuantumState, TolerancesMixin):
578
578
  probs_swapped = psi.probabilities([1, 0])
579
579
  print('Swapped probs: {}'.format(probs_swapped))
580
580
 
581
- .. parsed-literal::
581
+ .. code-block:: text
582
582
 
583
583
  probs: [0.5 0. 0.5 0. ]
584
584
  Swapped probs: [0.5 0.5 0. 0. ]
@@ -794,7 +794,7 @@ class Statevector(QuantumState, TolerancesMixin):
794
794
  psi = Statevector.from_label('-0')
795
795
  print(psi.to_dict())
796
796
 
797
- .. parsed-literal::
797
+ .. code-block:: text
798
798
 
799
799
  {'00': (0.7071067811865475+0j), '10': (-0.7071067811865475+0j)}
800
800
 
@@ -812,7 +812,7 @@ class Statevector(QuantumState, TolerancesMixin):
812
812
  psi = Statevector(vec, dims=(3, 3))
813
813
  print(psi.to_dict())
814
814
 
815
- .. parsed-literal::
815
+ .. code-block:: text
816
816
 
817
817
  {'00': (0.7071067811865475+0j), '22': (0.7071067811865475+0j)}
818
818
 
@@ -831,7 +831,7 @@ class Statevector(QuantumState, TolerancesMixin):
831
831
  psi = Statevector(vec, dims=(2, 10))
832
832
  print(psi.to_dict())
833
833
 
834
- .. parsed-literal::
834
+ .. code-block:: text
835
835
 
836
836
  {'00': (0.7071067811865475+0j), '91': (0.7071067811865475+0j)}
837
837
 
@@ -21,7 +21,7 @@ from ..counts import Counts
21
21
 
22
22
 
23
23
  class BaseReadoutMitigator(ABC):
24
- """Base readout error mitigator class."""
24
+ """This class is DEPRECATED. Base readout error mitigator class."""
25
25
 
26
26
  @abstractmethod
27
27
  def quasi_probabilities(
@@ -18,6 +18,7 @@ from typing import Optional, List, Tuple, Iterable, Callable, Union, Dict
18
18
  import numpy as np
19
19
 
20
20
  from qiskit.exceptions import QiskitError
21
+ from qiskit.utils.deprecation import deprecate_func
21
22
  from ..distributions.quasi import QuasiDistribution
22
23
  from ..counts import Counts
23
24
  from .base_readout_mitigator import BaseReadoutMitigator
@@ -25,7 +26,7 @@ from .utils import counts_probability_vector, z_diagonal, str2diag
25
26
 
26
27
 
27
28
  class CorrelatedReadoutMitigator(BaseReadoutMitigator):
28
- """N-qubit readout error mitigator.
29
+ """This class is DEPRECATED. N-qubit readout error mitigator.
29
30
 
30
31
  Mitigates :meth:`expectation_value` and :meth:`quasi_probabilities`.
31
32
  The mitigation_matrix should be calibrated using qiskit experiments.
@@ -34,6 +35,13 @@ class CorrelatedReadoutMitigator(BaseReadoutMitigator):
34
35
  :math:`2^N x 2^N` so the mitigation complexity is :math:`O(4^N)`.
35
36
  """
36
37
 
38
+ @deprecate_func(
39
+ since="1.3",
40
+ package_name="Qiskit",
41
+ removal_timeline="in Qiskit 2.0",
42
+ additional_msg="The `qiskit.result.mitigation` module is deprecated in favor of "
43
+ "the https://github.com/Qiskit/qiskit-addon-mthree package.",
44
+ )
37
45
  def __init__(self, assignment_matrix: np.ndarray, qubits: Optional[Iterable[int]] = None):
38
46
  """Initialize a CorrelatedReadoutMitigator
39
47
 
@@ -19,6 +19,7 @@ from typing import Optional, List, Tuple, Iterable, Callable, Union, Dict
19
19
  import numpy as np
20
20
 
21
21
  from qiskit.exceptions import QiskitError
22
+ from qiskit.utils.deprecation import deprecate_func
22
23
  from ..distributions.quasi import QuasiDistribution
23
24
  from ..counts import Counts
24
25
  from .base_readout_mitigator import BaseReadoutMitigator
@@ -26,7 +27,7 @@ from .utils import counts_probability_vector, z_diagonal, str2diag
26
27
 
27
28
 
28
29
  class LocalReadoutMitigator(BaseReadoutMitigator):
29
- """1-qubit tensor product readout error mitigator.
30
+ """This class is DEPRECATED. 1-qubit tensor product readout error mitigator.
30
31
 
31
32
  Mitigates :meth:`expectation_value` and :meth:`quasi_probabilities`.
32
33
  The mitigator should either be calibrated using qiskit experiments,
@@ -37,6 +38,13 @@ class LocalReadoutMitigator(BaseReadoutMitigator):
37
38
  so it is more efficient than the :class:`CorrelatedReadoutMitigator` class.
38
39
  """
39
40
 
41
+ @deprecate_func(
42
+ since="1.3",
43
+ package_name="Qiskit",
44
+ removal_timeline="in Qiskit 2.0",
45
+ additional_msg="The `qiskit.result.mitigation` module is deprecated in favor of "
46
+ "the https://github.com/Qiskit/qiskit-addon-mthree package.",
47
+ )
40
48
  def __init__(
41
49
  self,
42
50
  assignment_matrices: Optional[List[np.ndarray]] = None,
@@ -19,12 +19,20 @@ from typing import Optional, List, Tuple, Dict
19
19
  import numpy as np
20
20
 
21
21
  from qiskit.exceptions import QiskitError
22
+ from qiskit.utils.deprecation import deprecate_func
22
23
  from ..utils import marginal_counts
23
24
  from ..counts import Counts
24
25
 
25
26
  logger = logging.getLogger(__name__)
26
27
 
27
28
 
29
+ @deprecate_func(
30
+ since="1.3",
31
+ package_name="Qiskit",
32
+ removal_timeline="in Qiskit 2.0",
33
+ additional_msg="The `qiskit.result.mitigation` module is deprecated in favor of "
34
+ "the https://github.com/Qiskit/qiskit-addon-mthree package.",
35
+ )
28
36
  def z_diagonal(dim, dtype=float):
29
37
  r"""Return the diagonal for the operator :math:`Z^\otimes n`"""
30
38
  parity = np.zeros(dim, dtype=dtype)
@@ -33,6 +41,13 @@ def z_diagonal(dim, dtype=float):
33
41
  return (-1) ** np.mod(parity, 2)
34
42
 
35
43
 
44
+ @deprecate_func(
45
+ since="1.3",
46
+ package_name="Qiskit",
47
+ removal_timeline="in Qiskit 2.0",
48
+ additional_msg="The `qiskit.result.mitigation` module is deprecated in favor of "
49
+ "the https://github.com/Qiskit/qiskit-addon-mthree package.",
50
+ )
36
51
  def expval_with_stddev(coeffs: np.ndarray, probs: np.ndarray, shots: int) -> Tuple[float, float]:
37
52
  """Compute expectation value and standard deviation.
38
53
  Args:
@@ -60,6 +75,13 @@ def expval_with_stddev(coeffs: np.ndarray, probs: np.ndarray, shots: int) -> Tup
60
75
  return [expval, calc_stddev]
61
76
 
62
77
 
78
+ @deprecate_func(
79
+ since="1.3",
80
+ package_name="Qiskit",
81
+ removal_timeline="in Qiskit 2.0",
82
+ additional_msg="The `qiskit.result.mitigation` module is deprecated in favor of "
83
+ "the https://github.com/Qiskit/qiskit-addon-mthree package.",
84
+ )
63
85
  def stddev(probs, shots):
64
86
  """Calculate stddev dict"""
65
87
  ret = {}
@@ -69,6 +91,13 @@ def stddev(probs, shots):
69
91
  return ret
70
92
 
71
93
 
94
+ @deprecate_func(
95
+ since="1.3",
96
+ package_name="Qiskit",
97
+ removal_timeline="in Qiskit 2.0",
98
+ additional_msg="The `qiskit.result.mitigation` module is deprecated in favor of "
99
+ "the https://github.com/Qiskit/qiskit-addon-mthree package.",
100
+ )
72
101
  def str2diag(string):
73
102
  """Transform diagonal from a string to a numpy array"""
74
103
  chars = {
@@ -85,6 +114,13 @@ def str2diag(string):
85
114
  return ret
86
115
 
87
116
 
117
+ @deprecate_func(
118
+ since="1.3",
119
+ package_name="Qiskit",
120
+ removal_timeline="in Qiskit 2.0",
121
+ additional_msg="The `qiskit.result.mitigation` module is deprecated in favor of "
122
+ "the https://github.com/Qiskit/qiskit-addon-mthree package.",
123
+ )
88
124
  def counts_to_vector(counts: Counts, num_qubits: int) -> Tuple[np.ndarray, int]:
89
125
  """Transforms Counts to a probability vector"""
90
126
  vec = np.zeros(2**num_qubits, dtype=float)
@@ -96,6 +132,13 @@ def counts_to_vector(counts: Counts, num_qubits: int) -> Tuple[np.ndarray, int]:
96
132
  return vec, shots
97
133
 
98
134
 
135
+ @deprecate_func(
136
+ since="1.3",
137
+ package_name="Qiskit",
138
+ removal_timeline="in Qiskit 2.0",
139
+ additional_msg="The `qiskit.result.mitigation` module is deprecated in favor of "
140
+ "the https://github.com/Qiskit/qiskit-addon-mthree package.",
141
+ )
99
142
  def remap_qubits(
100
143
  vec: np.ndarray, num_qubits: int, qubits: Optional[List[int]] = None
101
144
  ) -> np.ndarray:
@@ -108,6 +151,13 @@ def remap_qubits(
108
151
  return vec
109
152
 
110
153
 
154
+ @deprecate_func(
155
+ since="1.3",
156
+ package_name="Qiskit",
157
+ removal_timeline="in Qiskit 2.0",
158
+ additional_msg="The `qiskit.result.mitigation` module is deprecated in favor of "
159
+ "the https://github.com/Qiskit/qiskit-addon-mthree package.",
160
+ )
111
161
  def marganalize_counts(
112
162
  counts: Counts,
113
163
  qubit_index: Dict[int, int],
@@ -129,6 +179,13 @@ def marganalize_counts(
129
179
  return counts
130
180
 
131
181
 
182
+ @deprecate_func(
183
+ since="1.3",
184
+ package_name="Qiskit",
185
+ removal_timeline="in Qiskit 2.0",
186
+ additional_msg="The `qiskit.result.mitigation` module is deprecated in favor of "
187
+ "the https://github.com/Qiskit/qiskit-addon-mthree package.",
188
+ )
132
189
  def counts_probability_vector(
133
190
  counts: Counts,
134
191
  qubit_index: Dict[int, int],
@@ -16,11 +16,13 @@ from typing import List
16
16
 
17
17
  from qiskit.pulse.instruction_schedule_map import InstructionScheduleMap
18
18
  from qiskit.pulse.utils import format_meas_map
19
+ from qiskit.utils.deprecate_pulse import deprecate_pulse_dependency
19
20
 
20
21
 
21
22
  class ScheduleConfig:
22
23
  """Configuration for pulse scheduling."""
23
24
 
25
+ @deprecate_pulse_dependency(moving_to_dynamics=True)
24
26
  def __init__(self, inst_map: InstructionScheduleMap, meas_map: List[List[int]], dt: float):
25
27
  """
26
28
  Container for information needed to schedule a QuantumCircuit into a pulse Schedule.
@@ -23,8 +23,10 @@ from qiskit.pulse.schedule import Schedule
23
23
  from qiskit.scheduler.config import ScheduleConfig
24
24
  from qiskit.scheduler.lowering import lower_gates
25
25
  from qiskit.providers import BackendV1, BackendV2
26
+ from qiskit.utils.deprecate_pulse import deprecate_pulse_dependency
26
27
 
27
28
 
29
+ @deprecate_pulse_dependency(moving_to_dynamics=True)
28
30
  def as_soon_as_possible(
29
31
  circuit: QuantumCircuit,
30
32
  schedule_config: ScheduleConfig,
@@ -78,6 +80,7 @@ def as_soon_as_possible(
78
80
  return schedule
79
81
 
80
82
 
83
+ @deprecate_pulse_dependency(moving_to_dynamics=True)
81
84
  def as_late_as_possible(
82
85
  circuit: QuantumCircuit,
83
86
  schedule_config: ScheduleConfig,
@@ -20,8 +20,10 @@ from qiskit.pulse.schedule import Schedule
20
20
  from qiskit.scheduler.config import ScheduleConfig
21
21
  from qiskit.scheduler.methods import as_soon_as_possible, as_late_as_possible
22
22
  from qiskit.providers import BackendV1, BackendV2
23
+ from qiskit.utils.deprecate_pulse import deprecate_pulse_dependency
23
24
 
24
25
 
26
+ @deprecate_pulse_dependency(moving_to_dynamics=True)
25
27
  def schedule_circuit(
26
28
  circuit: QuantumCircuit,
27
29
  schedule_config: ScheduleConfig,
@@ -25,8 +25,10 @@ from qiskit.pulse.transforms import pad
25
25
  from qiskit.scheduler.config import ScheduleConfig
26
26
  from qiskit.scheduler.lowering import lower_gates
27
27
  from qiskit.providers import BackendV1, BackendV2
28
+ from qiskit.utils.deprecate_pulse import deprecate_pulse_dependency
28
29
 
29
30
 
31
+ @deprecate_pulse_dependency(moving_to_dynamics=True)
30
32
  def sequence(
31
33
  scheduled_circuit: QuantumCircuit,
32
34
  schedule_config: ScheduleConfig,