qiskit 1.4.1__cp39-abi3-win_amd64.whl → 2.0.0__cp39-abi3-win_amd64.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 (462) hide show
  1. qiskit/VERSION.txt +1 -1
  2. qiskit/__init__.py +3 -9
  3. qiskit/_accelerate.pyd +0 -0
  4. qiskit/circuit/__init__.py +35 -10
  5. qiskit/circuit/{add_control.py → _add_control.py} +32 -12
  6. qiskit/circuit/_classical_resource_map.py +5 -3
  7. qiskit/circuit/barrier.py +3 -7
  8. qiskit/circuit/classical/expr/__init__.py +31 -3
  9. qiskit/circuit/classical/expr/constructors.py +236 -28
  10. qiskit/circuit/classical/expr/expr.py +104 -3
  11. qiskit/circuit/classical/expr/visitors.py +75 -0
  12. qiskit/circuit/classical/types/__init__.py +12 -8
  13. qiskit/circuit/classical/types/ordering.py +14 -7
  14. qiskit/circuit/classical/types/types.py +36 -0
  15. qiskit/circuit/commutation_checker.py +34 -7
  16. qiskit/circuit/controlflow/__init__.py +32 -1
  17. qiskit/circuit/controlflow/_builder_utils.py +9 -5
  18. qiskit/circuit/controlflow/box.py +163 -0
  19. qiskit/circuit/controlflow/break_loop.py +1 -1
  20. qiskit/circuit/controlflow/builder.py +139 -39
  21. qiskit/circuit/controlflow/continue_loop.py +1 -3
  22. qiskit/circuit/controlflow/control_flow.py +10 -0
  23. qiskit/circuit/controlflow/for_loop.py +2 -1
  24. qiskit/circuit/controlflow/if_else.py +3 -16
  25. qiskit/circuit/controlflow/switch_case.py +2 -8
  26. qiskit/circuit/controlflow/while_loop.py +2 -7
  27. qiskit/circuit/controlledgate.py +2 -4
  28. qiskit/circuit/delay.py +40 -11
  29. qiskit/circuit/duration.py +0 -15
  30. qiskit/circuit/gate.py +2 -4
  31. qiskit/circuit/instruction.py +2 -141
  32. qiskit/circuit/instructionset.py +7 -54
  33. qiskit/circuit/library/__init__.py +469 -154
  34. qiskit/circuit/library/arithmetic/__init__.py +16 -10
  35. qiskit/circuit/library/arithmetic/adders/cdkm_ripple_carry_adder.py +1 -1
  36. qiskit/circuit/library/arithmetic/adders/draper_qft_adder.py +2 -2
  37. qiskit/circuit/library/arithmetic/adders/vbe_ripple_carry_adder.py +1 -1
  38. qiskit/circuit/library/arithmetic/exact_reciprocal.py +64 -21
  39. qiskit/circuit/library/arithmetic/integer_comparator.py +37 -80
  40. qiskit/circuit/library/arithmetic/linear_amplitude_function.py +169 -2
  41. qiskit/circuit/library/arithmetic/linear_pauli_rotations.py +59 -5
  42. qiskit/circuit/library/arithmetic/piecewise_chebyshev.py +154 -6
  43. qiskit/circuit/library/arithmetic/piecewise_linear_pauli_rotations.py +114 -4
  44. qiskit/circuit/library/arithmetic/piecewise_polynomial_pauli_rotations.py +191 -15
  45. qiskit/circuit/library/arithmetic/polynomial_pauli_rotations.py +93 -39
  46. qiskit/circuit/library/arithmetic/quadratic_form.py +168 -2
  47. qiskit/circuit/library/arithmetic/weighted_adder.py +73 -1
  48. qiskit/circuit/library/bit_flip_oracle.py +130 -0
  49. qiskit/circuit/library/blueprintcircuit.py +52 -16
  50. qiskit/circuit/library/data_preparation/initializer.py +1 -1
  51. qiskit/circuit/library/data_preparation/pauli_feature_map.py +4 -4
  52. qiskit/circuit/library/data_preparation/state_preparation.py +1 -1
  53. qiskit/circuit/library/generalized_gates/gms.py +1 -1
  54. qiskit/circuit/library/generalized_gates/isometry.py +1 -1
  55. qiskit/circuit/library/generalized_gates/pauli.py +1 -2
  56. qiskit/circuit/library/generalized_gates/uc.py +97 -7
  57. qiskit/circuit/library/generalized_gates/uc_pauli_rot.py +1 -1
  58. qiskit/circuit/library/generalized_gates/unitary.py +4 -2
  59. qiskit/circuit/library/graph_state.py +1 -0
  60. qiskit/circuit/library/hamiltonian_gate.py +1 -1
  61. qiskit/circuit/library/n_local/evolved_operator_ansatz.py +1 -1
  62. qiskit/circuit/library/n_local/n_local.py +1 -1
  63. qiskit/circuit/library/n_local/qaoa_ansatz.py +1 -1
  64. qiskit/circuit/library/overlap.py +2 -2
  65. qiskit/circuit/library/pauli_evolution.py +39 -24
  66. qiskit/circuit/library/phase_oracle.py +130 -51
  67. qiskit/circuit/library/standard_gates/__init__.py +0 -1
  68. qiskit/circuit/library/standard_gates/dcx.py +3 -4
  69. qiskit/circuit/library/standard_gates/ecr.py +3 -4
  70. qiskit/circuit/library/standard_gates/global_phase.py +5 -6
  71. qiskit/circuit/library/standard_gates/h.py +4 -9
  72. qiskit/circuit/library/standard_gates/i.py +2 -2
  73. qiskit/circuit/library/standard_gates/iswap.py +3 -4
  74. qiskit/circuit/library/standard_gates/p.py +15 -34
  75. qiskit/circuit/library/standard_gates/r.py +7 -10
  76. qiskit/circuit/library/standard_gates/rx.py +5 -15
  77. qiskit/circuit/library/standard_gates/rxx.py +3 -6
  78. qiskit/circuit/library/standard_gates/ry.py +5 -17
  79. qiskit/circuit/library/standard_gates/ryy.py +3 -6
  80. qiskit/circuit/library/standard_gates/rz.py +5 -17
  81. qiskit/circuit/library/standard_gates/rzx.py +3 -6
  82. qiskit/circuit/library/standard_gates/rzz.py +3 -6
  83. qiskit/circuit/library/standard_gates/s.py +6 -15
  84. qiskit/circuit/library/standard_gates/swap.py +4 -11
  85. qiskit/circuit/library/standard_gates/sx.py +7 -12
  86. qiskit/circuit/library/standard_gates/t.py +6 -7
  87. qiskit/circuit/library/standard_gates/u.py +2 -10
  88. qiskit/circuit/library/standard_gates/u1.py +5 -16
  89. qiskit/circuit/library/standard_gates/u2.py +2 -6
  90. qiskit/circuit/library/standard_gates/u3.py +3 -11
  91. qiskit/circuit/library/standard_gates/x.py +14 -62
  92. qiskit/circuit/library/standard_gates/xx_minus_yy.py +2 -5
  93. qiskit/circuit/library/standard_gates/xx_plus_yy.py +2 -5
  94. qiskit/circuit/library/standard_gates/y.py +4 -9
  95. qiskit/circuit/library/standard_gates/z.py +5 -15
  96. qiskit/circuit/measure.py +11 -2
  97. qiskit/circuit/parameterexpression.py +11 -0
  98. qiskit/circuit/quantumcircuit.py +890 -564
  99. qiskit/circuit/random/utils.py +12 -6
  100. qiskit/circuit/reset.py +5 -2
  101. qiskit/circuit/singleton.py +5 -11
  102. qiskit/circuit/store.py +0 -8
  103. qiskit/circuit/tools/pi_check.py +3 -0
  104. qiskit/compiler/__init__.py +1 -7
  105. qiskit/compiler/transpiler.py +38 -196
  106. qiskit/converters/circuit_to_dag.py +6 -4
  107. qiskit/converters/circuit_to_dagdependency.py +0 -2
  108. qiskit/converters/circuit_to_dagdependency_v2.py +0 -1
  109. qiskit/converters/circuit_to_gate.py +1 -1
  110. qiskit/converters/circuit_to_instruction.py +16 -29
  111. qiskit/converters/dag_to_circuit.py +7 -8
  112. qiskit/converters/dag_to_dagdependency.py +0 -1
  113. qiskit/converters/dag_to_dagdependency_v2.py +0 -1
  114. qiskit/converters/dagdependency_to_circuit.py +0 -6
  115. qiskit/converters/dagdependency_to_dag.py +0 -6
  116. qiskit/dagcircuit/collect_blocks.py +32 -20
  117. qiskit/dagcircuit/dagdependency.py +3 -37
  118. qiskit/dagcircuit/dagdependency_v2.py +5 -82
  119. qiskit/dagcircuit/dagnode.py +14 -2
  120. qiskit/passmanager/__init__.py +24 -6
  121. qiskit/passmanager/passmanager.py +26 -24
  122. qiskit/primitives/__init__.py +44 -35
  123. qiskit/primitives/backend_estimator_v2.py +102 -23
  124. qiskit/primitives/backend_sampler_v2.py +5 -20
  125. qiskit/primitives/base/__init__.py +4 -4
  126. qiskit/primitives/base/base_estimator.py +77 -82
  127. qiskit/primitives/base/base_primitive_job.py +2 -2
  128. qiskit/primitives/base/{base_primitive.py → base_primitive_v1.py} +1 -1
  129. qiskit/primitives/base/{base_result.py → base_result_v1.py} +1 -1
  130. qiskit/primitives/base/base_sampler.py +52 -60
  131. qiskit/primitives/base/{estimator_result.py → estimator_result_v1.py} +2 -2
  132. qiskit/primitives/base/{sampler_result.py → sampler_result_v1.py} +2 -2
  133. qiskit/primitives/base/{validation.py → validation_v1.py} +34 -15
  134. qiskit/primitives/containers/bindings_array.py +3 -1
  135. qiskit/primitives/containers/bit_array.py +23 -0
  136. qiskit/primitives/containers/data_bin.py +3 -1
  137. qiskit/primitives/containers/observables_array.py +19 -2
  138. qiskit/primitives/statevector_sampler.py +6 -8
  139. qiskit/primitives/utils.py +14 -189
  140. qiskit/providers/__init__.py +4 -130
  141. qiskit/providers/backend.py +11 -314
  142. qiskit/providers/basic_provider/__init__.py +3 -1
  143. qiskit/providers/basic_provider/basic_provider.py +29 -9
  144. qiskit/providers/basic_provider/basic_simulator.py +158 -298
  145. qiskit/providers/exceptions.py +0 -33
  146. qiskit/providers/fake_provider/__init__.py +0 -37
  147. qiskit/providers/fake_provider/generic_backend_v2.py +32 -693
  148. qiskit/qasm2/__init__.py +21 -6
  149. qiskit/qasm2/export.py +2 -10
  150. qiskit/qasm2/parse.py +11 -25
  151. qiskit/qasm3/__init__.py +5 -1
  152. qiskit/qasm3/ast.py +44 -0
  153. qiskit/qasm3/exporter.py +65 -27
  154. qiskit/qasm3/printer.py +35 -4
  155. qiskit/qpy/__init__.py +162 -19
  156. qiskit/qpy/binary_io/__init__.py +0 -1
  157. qiskit/qpy/binary_io/circuits.py +96 -116
  158. qiskit/qpy/binary_io/parse_sympy_repr.py +121 -0
  159. qiskit/qpy/binary_io/schedules.py +61 -388
  160. qiskit/qpy/binary_io/value.py +159 -33
  161. qiskit/qpy/common.py +10 -7
  162. qiskit/qpy/formats.py +41 -0
  163. qiskit/qpy/interface.py +29 -62
  164. qiskit/qpy/type_keys.py +58 -221
  165. qiskit/quantum_info/analysis/distance.py +3 -1
  166. qiskit/quantum_info/operators/dihedral/dihedral.py +3 -1
  167. qiskit/quantum_info/operators/operator.py +6 -2
  168. qiskit/quantum_info/operators/symplectic/clifford.py +3 -1
  169. qiskit/quantum_info/operators/symplectic/pauli.py +4 -2
  170. qiskit/quantum_info/operators/symplectic/pauli_list.py +17 -5
  171. qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py +40 -6
  172. qiskit/quantum_info/states/densitymatrix.py +16 -6
  173. qiskit/quantum_info/states/stabilizerstate.py +35 -4
  174. qiskit/quantum_info/states/statevector.py +16 -6
  175. qiskit/result/__init__.py +5 -17
  176. qiskit/result/models.py +18 -11
  177. qiskit/result/result.py +38 -134
  178. qiskit/result/sampled_expval.py +1 -2
  179. qiskit/result/utils.py +3 -4
  180. qiskit/synthesis/__init__.py +21 -1
  181. qiskit/synthesis/arithmetic/__init__.py +3 -1
  182. qiskit/synthesis/arithmetic/adders/cdkm_ripple_carry_adder.py +1 -1
  183. qiskit/synthesis/arithmetic/adders/draper_qft_adder.py +1 -1
  184. qiskit/synthesis/arithmetic/adders/vbe_ripple_carry_adder.py +2 -2
  185. qiskit/{providers/fake_provider/backends_v1/fake_20q → synthesis/arithmetic/comparators}/__init__.py +4 -6
  186. qiskit/synthesis/arithmetic/comparators/compare_2s.py +112 -0
  187. qiskit/synthesis/arithmetic/comparators/compare_greedy.py +66 -0
  188. qiskit/synthesis/arithmetic/multipliers/hrs_cumulative_multiplier.py +1 -1
  189. qiskit/synthesis/arithmetic/multipliers/rg_qft_multiplier.py +1 -1
  190. qiskit/synthesis/arithmetic/weighted_sum.py +155 -0
  191. qiskit/{result/mitigation → synthesis/boolean}/__init__.py +2 -2
  192. qiskit/synthesis/boolean/boolean_expression.py +231 -0
  193. qiskit/synthesis/boolean/boolean_expression_synth.py +124 -0
  194. qiskit/synthesis/boolean/boolean_expression_visitor.py +96 -0
  195. qiskit/synthesis/discrete_basis/generate_basis_approximations.py +2 -0
  196. qiskit/synthesis/evolution/lie_trotter.py +10 -7
  197. qiskit/synthesis/evolution/product_formula.py +44 -35
  198. qiskit/synthesis/evolution/qdrift.py +17 -24
  199. qiskit/synthesis/evolution/suzuki_trotter.py +20 -27
  200. qiskit/synthesis/linear/linear_depth_lnn.py +6 -221
  201. qiskit/synthesis/linear_phase/cx_cz_depth_lnn.py +4 -205
  202. qiskit/synthesis/multi_controlled/__init__.py +1 -0
  203. qiskit/synthesis/multi_controlled/mcx_synthesis.py +5 -2
  204. qiskit/synthesis/multi_controlled/multi_control_rotation_gates.py +206 -0
  205. qiskit/synthesis/one_qubit/one_qubit_decompose.py +1 -1
  206. qiskit/synthesis/two_qubit/__init__.py +1 -0
  207. qiskit/synthesis/two_qubit/two_qubit_decompose.py +28 -145
  208. qiskit/transpiler/__init__.py +32 -232
  209. qiskit/transpiler/basepasses.py +20 -51
  210. qiskit/transpiler/layout.py +1 -1
  211. qiskit/transpiler/passes/__init__.py +4 -40
  212. qiskit/transpiler/passes/basis/basis_translator.py +5 -4
  213. qiskit/transpiler/passes/basis/decompose.py +1 -15
  214. qiskit/transpiler/passes/basis/unroll_3q_or_more.py +1 -5
  215. qiskit/transpiler/passes/basis/unroll_custom_definitions.py +3 -2
  216. qiskit/transpiler/passes/layout/apply_layout.py +4 -0
  217. qiskit/transpiler/passes/layout/dense_layout.py +2 -39
  218. qiskit/transpiler/passes/layout/full_ancilla_allocation.py +3 -4
  219. qiskit/transpiler/passes/layout/sabre_layout.py +7 -3
  220. qiskit/transpiler/passes/layout/vf2_layout.py +2 -20
  221. qiskit/transpiler/passes/layout/vf2_post_layout.py +60 -125
  222. qiskit/transpiler/passes/layout/vf2_utils.py +2 -26
  223. qiskit/transpiler/passes/optimization/__init__.py +2 -3
  224. qiskit/transpiler/passes/optimization/collect_and_collapse.py +2 -0
  225. qiskit/transpiler/passes/optimization/collect_cliffords.py +5 -0
  226. qiskit/transpiler/passes/optimization/collect_linear_functions.py +5 -0
  227. qiskit/transpiler/passes/optimization/collect_multiqubit_blocks.py +16 -1
  228. qiskit/transpiler/passes/optimization/commutation_analysis.py +3 -3
  229. qiskit/transpiler/passes/optimization/consolidate_blocks.py +41 -19
  230. qiskit/transpiler/passes/optimization/contract_idle_wires_in_control_flow.py +104 -0
  231. qiskit/transpiler/passes/optimization/light_cone.py +135 -0
  232. qiskit/transpiler/passes/optimization/optimize_1q_commutation.py +0 -1
  233. qiskit/transpiler/passes/optimization/optimize_1q_decomposition.py +18 -22
  234. qiskit/transpiler/passes/optimization/optimize_annotated.py +3 -2
  235. qiskit/transpiler/passes/optimization/remove_identity_equiv.py +6 -4
  236. qiskit/transpiler/passes/optimization/reset_after_measure_simplification.py +5 -2
  237. qiskit/transpiler/passes/optimization/split_2q_unitaries.py +26 -3
  238. qiskit/transpiler/passes/optimization/template_matching/template_substitution.py +3 -2
  239. qiskit/transpiler/passes/routing/__init__.py +0 -1
  240. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/commuting_2q_gate_router.py +3 -1
  241. qiskit/transpiler/passes/routing/sabre_swap.py +14 -6
  242. qiskit/transpiler/passes/routing/star_prerouting.py +1 -1
  243. qiskit/transpiler/passes/scheduling/__init__.py +1 -7
  244. qiskit/transpiler/passes/scheduling/alignments/__init__.py +2 -4
  245. qiskit/transpiler/passes/scheduling/alignments/check_durations.py +1 -9
  246. qiskit/transpiler/passes/scheduling/alignments/reschedule.py +17 -16
  247. qiskit/transpiler/passes/scheduling/padding/base_padding.py +32 -4
  248. qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py +25 -63
  249. qiskit/transpiler/passes/scheduling/padding/pad_delay.py +12 -4
  250. qiskit/transpiler/passes/scheduling/scheduling/alap.py +5 -39
  251. qiskit/transpiler/passes/scheduling/scheduling/asap.py +4 -35
  252. qiskit/transpiler/passes/scheduling/scheduling/base_scheduler.py +10 -16
  253. qiskit/transpiler/passes/scheduling/time_unit_conversion.py +134 -62
  254. qiskit/transpiler/passes/synthesis/default_unitary_synth_plugin.py +653 -0
  255. qiskit/transpiler/passes/synthesis/high_level_synthesis.py +176 -601
  256. qiskit/transpiler/passes/synthesis/hls_plugins.py +294 -1
  257. qiskit/transpiler/passes/synthesis/plugin.py +4 -0
  258. qiskit/transpiler/passes/synthesis/solovay_kitaev_synthesis.py +16 -10
  259. qiskit/transpiler/passes/synthesis/unitary_synthesis.py +34 -697
  260. qiskit/transpiler/passes/utils/__init__.py +0 -1
  261. qiskit/transpiler/passes/utils/check_gate_direction.py +13 -5
  262. qiskit/transpiler/passes/utils/control_flow.py +2 -6
  263. qiskit/transpiler/passes/utils/gate_direction.py +7 -0
  264. qiskit/transpiler/passes/utils/remove_final_measurements.py +40 -33
  265. qiskit/transpiler/passmanager.py +13 -0
  266. qiskit/transpiler/passmanager_config.py +5 -81
  267. qiskit/transpiler/preset_passmanagers/builtin_plugins.py +225 -344
  268. qiskit/transpiler/preset_passmanagers/common.py +140 -167
  269. qiskit/transpiler/preset_passmanagers/generate_preset_pass_manager.py +107 -322
  270. qiskit/transpiler/preset_passmanagers/level0.py +2 -11
  271. qiskit/transpiler/preset_passmanagers/level1.py +2 -14
  272. qiskit/transpiler/preset_passmanagers/level2.py +2 -12
  273. qiskit/transpiler/preset_passmanagers/level3.py +2 -11
  274. qiskit/transpiler/preset_passmanagers/plugin.py +5 -3
  275. qiskit/transpiler/target.py +78 -524
  276. qiskit/user_config.py +8 -4
  277. qiskit/utils/__init__.py +13 -12
  278. qiskit/utils/deprecation.py +4 -112
  279. qiskit/utils/optionals.py +11 -4
  280. qiskit/utils/parallel.py +214 -87
  281. qiskit/utils/units.py +4 -1
  282. qiskit/visualization/__init__.py +3 -7
  283. qiskit/visualization/array.py +4 -1
  284. qiskit/visualization/bloch.py +1 -1
  285. qiskit/visualization/circuit/_utils.py +19 -19
  286. qiskit/visualization/circuit/circuit_visualization.py +11 -4
  287. qiskit/visualization/circuit/matplotlib.py +13 -23
  288. qiskit/visualization/circuit/text.py +7 -3
  289. qiskit/visualization/counts_visualization.py +4 -0
  290. qiskit/visualization/dag_visualization.py +2 -1
  291. qiskit/visualization/gate_map.py +39 -154
  292. qiskit/visualization/library.py +4 -1
  293. qiskit/visualization/pass_manager_visualization.py +6 -2
  294. qiskit/visualization/state_visualization.py +19 -2
  295. qiskit/visualization/timeline/core.py +19 -13
  296. qiskit/visualization/timeline/interface.py +19 -18
  297. qiskit/visualization/timeline/plotters/matplotlib.py +4 -1
  298. {qiskit-1.4.1.dist-info → qiskit-2.0.0.dist-info}/METADATA +4 -3
  299. {qiskit-1.4.1.dist-info → qiskit-2.0.0.dist-info}/RECORD +303 -449
  300. {qiskit-1.4.1.dist-info → qiskit-2.0.0.dist-info}/WHEEL +1 -1
  301. {qiskit-1.4.1.dist-info → qiskit-2.0.0.dist-info}/entry_points.txt +8 -2
  302. qiskit/assembler/__init__.py +0 -42
  303. qiskit/assembler/assemble_circuits.py +0 -451
  304. qiskit/assembler/assemble_schedules.py +0 -367
  305. qiskit/assembler/disassemble.py +0 -310
  306. qiskit/assembler/run_config.py +0 -77
  307. qiskit/circuit/bit.py +0 -106
  308. qiskit/circuit/classicalfunction/__init__.py +0 -152
  309. qiskit/circuit/classicalfunction/boolean_expression.py +0 -138
  310. qiskit/circuit/classicalfunction/classical_element.py +0 -54
  311. qiskit/circuit/classicalfunction/classical_function_visitor.py +0 -155
  312. qiskit/circuit/classicalfunction/classicalfunction.py +0 -182
  313. qiskit/circuit/classicalfunction/exceptions.py +0 -41
  314. qiskit/circuit/classicalfunction/types.py +0 -18
  315. qiskit/circuit/classicalfunction/utils.py +0 -91
  316. qiskit/circuit/classicalregister.py +0 -57
  317. qiskit/circuit/library/standard_gates/multi_control_rotation_gates.py +0 -405
  318. qiskit/circuit/quantumregister.py +0 -75
  319. qiskit/circuit/register.py +0 -246
  320. qiskit/compiler/assembler.py +0 -689
  321. qiskit/compiler/scheduler.py +0 -109
  322. qiskit/compiler/sequencer.py +0 -71
  323. qiskit/primitives/backend_estimator.py +0 -486
  324. qiskit/primitives/backend_sampler.py +0 -222
  325. qiskit/primitives/estimator.py +0 -172
  326. qiskit/primitives/sampler.py +0 -162
  327. qiskit/providers/backend_compat.py +0 -507
  328. qiskit/providers/fake_provider/backends_v1/__init__.py +0 -22
  329. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/__init__.py +0 -18
  330. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/conf_washington.json +0 -1
  331. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/defs_washington.json +0 -1
  332. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/fake_127q_pulse_v1.py +0 -37
  333. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/props_washington.json +0 -1
  334. qiskit/providers/fake_provider/backends_v1/fake_20q/conf_singapore.json +0 -1
  335. qiskit/providers/fake_provider/backends_v1/fake_20q/fake_20q.py +0 -43
  336. qiskit/providers/fake_provider/backends_v1/fake_20q/props_singapore.json +0 -1
  337. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/__init__.py +0 -18
  338. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/conf_hanoi.json +0 -1
  339. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/defs_hanoi.json +0 -1
  340. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/fake_27q_pulse_v1.py +0 -50
  341. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/props_hanoi.json +0 -1
  342. qiskit/providers/fake_provider/backends_v1/fake_5q/__init__.py +0 -18
  343. qiskit/providers/fake_provider/backends_v1/fake_5q/conf_yorktown.json +0 -1
  344. qiskit/providers/fake_provider/backends_v1/fake_5q/fake_5q_v1.py +0 -41
  345. qiskit/providers/fake_provider/backends_v1/fake_5q/props_yorktown.json +0 -1
  346. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/__init__.py +0 -18
  347. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/conf_nairobi.json +0 -1
  348. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/defs_nairobi.json +0 -1
  349. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/fake_7q_pulse_v1.py +0 -44
  350. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/props_nairobi.json +0 -1
  351. qiskit/providers/fake_provider/fake_1q.py +0 -91
  352. qiskit/providers/fake_provider/fake_backend.py +0 -165
  353. qiskit/providers/fake_provider/fake_openpulse_2q.py +0 -391
  354. qiskit/providers/fake_provider/fake_openpulse_3q.py +0 -340
  355. qiskit/providers/fake_provider/fake_pulse_backend.py +0 -49
  356. qiskit/providers/fake_provider/fake_qasm_backend.py +0 -77
  357. qiskit/providers/fake_provider/utils/backend_converter.py +0 -150
  358. qiskit/providers/fake_provider/utils/json_decoder.py +0 -109
  359. qiskit/providers/models/__init__.py +0 -89
  360. qiskit/providers/models/backendconfiguration.py +0 -1040
  361. qiskit/providers/models/backendproperties.py +0 -535
  362. qiskit/providers/models/backendstatus.py +0 -104
  363. qiskit/providers/models/jobstatus.py +0 -77
  364. qiskit/providers/models/pulsedefaults.py +0 -305
  365. qiskit/providers/provider.py +0 -95
  366. qiskit/pulse/__init__.py +0 -158
  367. qiskit/pulse/builder.py +0 -2262
  368. qiskit/pulse/calibration_entries.py +0 -381
  369. qiskit/pulse/channels.py +0 -227
  370. qiskit/pulse/configuration.py +0 -245
  371. qiskit/pulse/exceptions.py +0 -45
  372. qiskit/pulse/filters.py +0 -309
  373. qiskit/pulse/instruction_schedule_map.py +0 -424
  374. qiskit/pulse/instructions/__init__.py +0 -67
  375. qiskit/pulse/instructions/acquire.py +0 -150
  376. qiskit/pulse/instructions/delay.py +0 -71
  377. qiskit/pulse/instructions/directives.py +0 -154
  378. qiskit/pulse/instructions/frequency.py +0 -135
  379. qiskit/pulse/instructions/instruction.py +0 -270
  380. qiskit/pulse/instructions/phase.py +0 -152
  381. qiskit/pulse/instructions/play.py +0 -99
  382. qiskit/pulse/instructions/reference.py +0 -100
  383. qiskit/pulse/instructions/snapshot.py +0 -82
  384. qiskit/pulse/library/__init__.py +0 -97
  385. qiskit/pulse/library/continuous.py +0 -430
  386. qiskit/pulse/library/pulse.py +0 -148
  387. qiskit/pulse/library/samplers/__init__.py +0 -15
  388. qiskit/pulse/library/samplers/decorators.py +0 -295
  389. qiskit/pulse/library/samplers/strategies.py +0 -71
  390. qiskit/pulse/library/symbolic_pulses.py +0 -1989
  391. qiskit/pulse/library/waveform.py +0 -136
  392. qiskit/pulse/macros.py +0 -262
  393. qiskit/pulse/parameter_manager.py +0 -445
  394. qiskit/pulse/parser.py +0 -314
  395. qiskit/pulse/reference_manager.py +0 -58
  396. qiskit/pulse/schedule.py +0 -1854
  397. qiskit/pulse/transforms/__init__.py +0 -106
  398. qiskit/pulse/transforms/alignments.py +0 -406
  399. qiskit/pulse/transforms/base_transforms.py +0 -71
  400. qiskit/pulse/transforms/canonicalization.py +0 -498
  401. qiskit/pulse/transforms/dag.py +0 -122
  402. qiskit/pulse/utils.py +0 -149
  403. qiskit/qobj/__init__.py +0 -75
  404. qiskit/qobj/common.py +0 -81
  405. qiskit/qobj/converters/__init__.py +0 -18
  406. qiskit/qobj/converters/lo_config.py +0 -177
  407. qiskit/qobj/converters/pulse_instruction.py +0 -897
  408. qiskit/qobj/pulse_qobj.py +0 -709
  409. qiskit/qobj/qasm_qobj.py +0 -708
  410. qiskit/qobj/utils.py +0 -46
  411. qiskit/result/mitigation/base_readout_mitigator.py +0 -79
  412. qiskit/result/mitigation/correlated_readout_mitigator.py +0 -277
  413. qiskit/result/mitigation/local_readout_mitigator.py +0 -328
  414. qiskit/result/mitigation/utils.py +0 -217
  415. qiskit/scheduler/__init__.py +0 -40
  416. qiskit/scheduler/config.py +0 -37
  417. qiskit/scheduler/lowering.py +0 -187
  418. qiskit/scheduler/methods/__init__.py +0 -15
  419. qiskit/scheduler/methods/basic.py +0 -140
  420. qiskit/scheduler/schedule_circuit.py +0 -69
  421. qiskit/scheduler/sequence.py +0 -104
  422. qiskit/transpiler/passes/calibration/__init__.py +0 -17
  423. qiskit/transpiler/passes/calibration/base_builder.py +0 -79
  424. qiskit/transpiler/passes/calibration/builders.py +0 -20
  425. qiskit/transpiler/passes/calibration/exceptions.py +0 -22
  426. qiskit/transpiler/passes/calibration/pulse_gate.py +0 -100
  427. qiskit/transpiler/passes/calibration/rx_builder.py +0 -164
  428. qiskit/transpiler/passes/calibration/rzx_builder.py +0 -411
  429. qiskit/transpiler/passes/calibration/rzx_templates.py +0 -58
  430. qiskit/transpiler/passes/optimization/cx_cancellation.py +0 -65
  431. qiskit/transpiler/passes/optimization/echo_rzx_weyl_decomposition.py +0 -162
  432. qiskit/transpiler/passes/optimization/normalize_rx_angle.py +0 -157
  433. qiskit/transpiler/passes/routing/stochastic_swap.py +0 -532
  434. qiskit/transpiler/passes/scheduling/alap.py +0 -153
  435. qiskit/transpiler/passes/scheduling/alignments/align_measures.py +0 -255
  436. qiskit/transpiler/passes/scheduling/alignments/pulse_gate_validation.py +0 -107
  437. qiskit/transpiler/passes/scheduling/asap.py +0 -175
  438. qiskit/transpiler/passes/scheduling/base_scheduler.py +0 -310
  439. qiskit/transpiler/passes/scheduling/dynamical_decoupling.py +0 -313
  440. qiskit/transpiler/passes/utils/convert_conditions_to_if_ops.py +0 -93
  441. qiskit/utils/deprecate_pulse.py +0 -119
  442. qiskit/utils/multiprocessing.py +0 -56
  443. qiskit/visualization/pulse_v2/__init__.py +0 -21
  444. qiskit/visualization/pulse_v2/core.py +0 -901
  445. qiskit/visualization/pulse_v2/device_info.py +0 -173
  446. qiskit/visualization/pulse_v2/drawings.py +0 -253
  447. qiskit/visualization/pulse_v2/events.py +0 -254
  448. qiskit/visualization/pulse_v2/generators/__init__.py +0 -40
  449. qiskit/visualization/pulse_v2/generators/barrier.py +0 -76
  450. qiskit/visualization/pulse_v2/generators/chart.py +0 -208
  451. qiskit/visualization/pulse_v2/generators/frame.py +0 -436
  452. qiskit/visualization/pulse_v2/generators/snapshot.py +0 -133
  453. qiskit/visualization/pulse_v2/generators/waveform.py +0 -645
  454. qiskit/visualization/pulse_v2/interface.py +0 -459
  455. qiskit/visualization/pulse_v2/layouts.py +0 -387
  456. qiskit/visualization/pulse_v2/plotters/__init__.py +0 -17
  457. qiskit/visualization/pulse_v2/plotters/base_plotter.py +0 -53
  458. qiskit/visualization/pulse_v2/plotters/matplotlib.py +0 -201
  459. qiskit/visualization/pulse_v2/stylesheet.py +0 -312
  460. qiskit/visualization/pulse_v2/types.py +0 -242
  461. {qiskit-1.4.1.dist-info → qiskit-2.0.0.dist-info/licenses}/LICENSE.txt +0 -0
  462. {qiskit-1.4.1.dist-info → qiskit-2.0.0.dist-info}/top_level.txt +0 -0
@@ -1,328 +0,0 @@
1
- # This code is part of Qiskit.
2
- #
3
- # (C) Copyright IBM 2021
4
- #
5
- # This code is licensed under the Apache License, Version 2.0. You may
6
- # obtain a copy of this license in the LICENSE.txt file in the root directory
7
- # of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
8
- #
9
- # Any modifications or derivative works of this code must retain this
10
- # copyright notice, and modified files need to carry a notice indicating
11
- # that they have been altered from the originals.
12
- """
13
- Readout mitigator class based on the 1-qubit local tensored mitigation method
14
- """
15
-
16
-
17
- import math
18
- from typing import Optional, List, Tuple, Iterable, Callable, Union, Dict
19
- import numpy as np
20
-
21
- from qiskit.exceptions import QiskitError
22
- from qiskit.utils.deprecation import deprecate_func
23
- from ..distributions.quasi import QuasiDistribution
24
- from ..counts import Counts
25
- from .base_readout_mitigator import BaseReadoutMitigator
26
- from .utils import counts_probability_vector, z_diagonal, str2diag
27
-
28
-
29
- class LocalReadoutMitigator(BaseReadoutMitigator):
30
- """This class is DEPRECATED. 1-qubit tensor product readout error mitigator.
31
-
32
- Mitigates :meth:`expectation_value` and :meth:`quasi_probabilities`.
33
- The mitigator should either be calibrated using qiskit experiments,
34
- or calculated directly from the backend properties.
35
- This mitigation method should be used in case the readout errors of the qubits
36
- are assumed to be uncorrelated. For *N* qubits there are *N* mitigation matrices,
37
- each of size :math:`2 x 2` and the mitigation complexity is :math:`O(2^N)`,
38
- so it is more efficient than the :class:`CorrelatedReadoutMitigator` class.
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
- )
48
- def __init__(
49
- self,
50
- assignment_matrices: Optional[List[np.ndarray]] = None,
51
- qubits: Optional[Iterable[int]] = None,
52
- backend=None,
53
- ):
54
- """Initialize a LocalReadoutMitigator
55
-
56
- Args:
57
- assignment_matrices: Optional, list of single-qubit readout error assignment matrices.
58
- qubits: Optional, the measured physical qubits for mitigation.
59
- backend: Optional, backend name.
60
-
61
- Raises:
62
- QiskitError: matrices sizes do not agree with number of qubits
63
- """
64
- if assignment_matrices is None:
65
- assignment_matrices = self._from_backend(backend, qubits)
66
- else:
67
- assignment_matrices = [np.asarray(amat, dtype=float) for amat in assignment_matrices]
68
- for amat in assignment_matrices:
69
- if np.any(amat < 0) or not np.allclose(np.sum(amat, axis=0), 1):
70
- raise QiskitError(
71
- "Assignment matrix columns must be valid probability distributions"
72
- )
73
- if qubits is None:
74
- self._num_qubits = len(assignment_matrices)
75
- self._qubits = range(self._num_qubits)
76
- else:
77
- if len(qubits) != len(assignment_matrices):
78
- raise QiskitError(
79
- f"The number of given qubits ({len(qubits)}) is different than the number of qubits "
80
- f"inferred from the matrices ({len(assignment_matrices)})"
81
- )
82
- self._qubits = qubits
83
- self._num_qubits = len(self._qubits)
84
-
85
- self._qubit_index = dict(zip(self._qubits, range(self._num_qubits)))
86
- self._assignment_mats = assignment_matrices
87
- self._mitigation_mats = np.zeros([self._num_qubits, 2, 2], dtype=float)
88
- self._gammas = np.zeros(self._num_qubits, dtype=float)
89
-
90
- for i in range(self._num_qubits):
91
- mat = self._assignment_mats[i]
92
- # Compute Gamma values
93
- error0 = mat[1, 0]
94
- error1 = mat[0, 1]
95
- self._gammas[i] = (1 + abs(error0 - error1)) / (1 - error0 - error1)
96
- # Compute inverse mitigation matrix
97
- try:
98
- ainv = np.linalg.inv(mat)
99
- except np.linalg.LinAlgError:
100
- ainv = np.linalg.pinv(mat)
101
- self._mitigation_mats[i] = ainv
102
-
103
- @property
104
- def settings(self) -> Dict:
105
- """Return settings."""
106
- return {"assignment_matrices": self._assignment_mats, "qubits": self._qubits}
107
-
108
- def expectation_value(
109
- self,
110
- data: Counts,
111
- diagonal: Union[Callable, dict, str, np.ndarray] = None,
112
- qubits: Iterable[int] = None,
113
- clbits: Optional[List[int]] = None,
114
- shots: Optional[int] = None,
115
- ) -> Tuple[float, float]:
116
- r"""Compute the mitigated expectation value of a diagonal observable.
117
-
118
- This computes the mitigated estimator of
119
- :math:`\langle O \rangle = \mbox{Tr}[\rho. O]` of a diagonal observable
120
- :math:`O = \sum_{x\in\{0, 1\}^n} O(x)|x\rangle\!\langle x|`.
121
-
122
- Args:
123
- data: Counts object
124
- diagonal: Optional, the vector of diagonal values for summing the
125
- expectation value. If ``None`` the default value is
126
- :math:`[1, -1]^\otimes n`.
127
- qubits: Optional, the measured physical qubits the count
128
- bitstrings correspond to. If None qubits are assumed to be
129
- :math:`[0, ..., n-1]`.
130
- clbits: Optional, if not None marginalize counts to the specified bits.
131
- shots: the number of shots.
132
-
133
- Returns:
134
- (float, float): the expectation value and an upper bound of the standard deviation.
135
-
136
- Additional Information:
137
- The diagonal observable :math:`O` is input using the ``diagonal`` kwarg as
138
- a list or Numpy array :math:`[O(0), ..., O(2^n -1)]`. If no diagonal is specified
139
- the diagonal of the Pauli operator
140
- :math`O = \mbox{diag}(Z^{\otimes n}) = [1, -1]^{\otimes n}` is used.
141
- The ``clbits`` kwarg is used to marginalize the input counts dictionary
142
- over the specified bit-values, and the ``qubits`` kwarg is used to specify
143
- which physical qubits these bit-values correspond to as
144
- ``circuit.measure(qubits, clbits)``.
145
- """
146
- if qubits is None:
147
- qubits = self._qubits
148
- num_qubits = len(qubits)
149
- probs_vec, shots = counts_probability_vector(
150
- data, qubit_index=self._qubit_index, clbits=clbits, qubits=qubits
151
- )
152
-
153
- # Get qubit mitigation matrix and mitigate probs
154
- qubit_indices = [self._qubit_index[qubit] for qubit in qubits]
155
- ainvs = self._mitigation_mats[qubit_indices]
156
-
157
- # Get operator coeffs
158
- if diagonal is None:
159
- diagonal = z_diagonal(2**num_qubits)
160
- elif isinstance(diagonal, str):
161
- diagonal = str2diag(diagonal)
162
-
163
- # Apply transpose of mitigation matrix
164
- coeffs = np.reshape(diagonal, num_qubits * [2])
165
- einsum_args = [coeffs, list(range(num_qubits))]
166
- for i, ainv in enumerate(reversed(ainvs)):
167
- einsum_args += [ainv.T, [num_qubits + i, i]]
168
- einsum_args += [list(range(num_qubits, 2 * num_qubits))]
169
- coeffs = np.einsum(*einsum_args).ravel()
170
-
171
- expval = coeffs.dot(probs_vec)
172
- stddev_upper_bound = self.stddev_upper_bound(shots, qubits)
173
-
174
- return (expval, stddev_upper_bound)
175
-
176
- def quasi_probabilities(
177
- self,
178
- data: Counts,
179
- qubits: Optional[List[int]] = None,
180
- clbits: Optional[List[int]] = None,
181
- shots: Optional[int] = None,
182
- ) -> QuasiDistribution:
183
- """Compute mitigated quasi probabilities value.
184
-
185
- Args:
186
- data: counts object
187
- qubits: qubits the count bitstrings correspond to.
188
- clbits: Optional, marginalize counts to just these bits.
189
- shots: Optional, the total number of shots, if None shots will
190
- be calculated as the sum of all counts.
191
-
192
- Returns:
193
- QuasiDistribution: A dictionary containing pairs of [output, mean] where "output"
194
- is the key in the dictionaries,
195
- which is the length-N bitstring of a measured standard basis state,
196
- and "mean" is the mean of non-zero quasi-probability estimates.
197
-
198
- Raises:
199
- QiskitError: if qubit and clbit kwargs are not valid.
200
- """
201
- if qubits is None:
202
- qubits = self._qubits
203
-
204
- num_qubits = len(qubits)
205
-
206
- probs_vec, calculated_shots = counts_probability_vector(
207
- data, qubit_index=self._qubit_index, clbits=clbits, qubits=qubits
208
- )
209
- if shots is None:
210
- shots = calculated_shots
211
-
212
- # Get qubit mitigation matrix and mitigate probs
213
- qubit_indices = [self._qubit_index[qubit] for qubit in qubits]
214
- ainvs = self._mitigation_mats[qubit_indices]
215
-
216
- # Apply transpose of mitigation matrix
217
- prob_tens = np.reshape(probs_vec, num_qubits * [2])
218
- einsum_args = [prob_tens, list(range(num_qubits))]
219
- for i, ainv in enumerate(reversed(ainvs)):
220
- einsum_args += [ainv, [num_qubits + i, i]]
221
- einsum_args += [list(range(num_qubits, 2 * num_qubits))]
222
- probs_vec = np.einsum(*einsum_args).ravel()
223
-
224
- probs_dict = {}
225
- for index, _ in enumerate(probs_vec):
226
- probs_dict[index] = probs_vec[index]
227
-
228
- quasi_dist = QuasiDistribution(
229
- probs_dict, shots=shots, stddev_upper_bound=self.stddev_upper_bound(shots, qubits)
230
- )
231
- return quasi_dist
232
-
233
- def mitigation_matrix(self, qubits: Optional[Union[List[int], int]] = None) -> np.ndarray:
234
- r"""Return the measurement mitigation matrix for the specified qubits.
235
-
236
- The mitigation matrix :math:`A^{-1}` is defined as the inverse of the
237
- :meth:`assignment_matrix` :math:`A`.
238
-
239
- Args:
240
- qubits: Optional, qubits being measured for operator expval.
241
- if a single int is given, it is assumed to be the index
242
- of the qubit in self._qubits
243
-
244
- Returns:
245
- np.ndarray: the measurement error mitigation matrix :math:`A^{-1}`.
246
- """
247
- if qubits is None:
248
- qubits = self._qubits
249
- if isinstance(qubits, int):
250
- qubits = [self._qubits[qubits]]
251
- qubit_indices = [self._qubit_index[qubit] for qubit in qubits]
252
- mat = self._mitigation_mats[qubit_indices[0]]
253
- for i in qubit_indices[1:]:
254
- mat = np.kron(self._mitigation_mats[i], mat)
255
- return mat
256
-
257
- def assignment_matrix(self, qubits: List[int] = None) -> np.ndarray:
258
- r"""Return the measurement assignment matrix for specified qubits.
259
-
260
- The assignment matrix is the stochastic matrix :math:`A` which assigns
261
- a noisy measurement probability distribution to an ideal input
262
- measurement distribution: :math:`P(i|j) = \langle i | A | j \rangle`.
263
-
264
- Args:
265
- qubits: Optional, qubits being measured for operator expval.
266
-
267
- Returns:
268
- np.ndarray: the assignment matrix A.
269
- """
270
- if qubits is None:
271
- qubits = self._qubits
272
- if isinstance(qubits, int):
273
- qubits = [qubits]
274
- qubit_indices = [self._qubit_index[qubit] for qubit in qubits]
275
- mat = self._assignment_mats[qubit_indices[0]]
276
- for i in qubit_indices[1:]:
277
- mat = np.kron(self._assignment_mats[i], mat)
278
- return mat
279
-
280
- def _compute_gamma(self, qubits=None):
281
- """Compute gamma for N-qubit mitigation"""
282
- if qubits is None:
283
- gammas = self._gammas
284
- else:
285
- qubit_indices = [self._qubit_index[qubit] for qubit in qubits]
286
- gammas = self._gammas[qubit_indices]
287
- return np.prod(gammas)
288
-
289
- def stddev_upper_bound(self, shots: int, qubits: List[int] = None):
290
- """Return an upper bound on standard deviation of expval estimator.
291
-
292
- Args:
293
- shots: Number of shots used for expectation value measurement.
294
- qubits: qubits being measured for operator expval.
295
-
296
- Returns:
297
- float: the standard deviation upper bound.
298
- """
299
- gamma = self._compute_gamma(qubits=qubits)
300
- return gamma / math.sqrt(shots)
301
-
302
- def _from_backend(self, backend, qubits):
303
- """Calculates amats from backend properties readout_error"""
304
- backend_qubits = backend.properties().qubits
305
- if qubits is not None:
306
- if any(qubit >= len(backend_qubits) for qubit in qubits):
307
- raise QiskitError("The chosen backend does not contain the specified qubits.")
308
- reduced_backend_qubits = [backend_qubits[i] for i in qubits]
309
- backend_qubits = reduced_backend_qubits
310
- num_qubits = len(backend_qubits)
311
-
312
- amats = np.zeros([num_qubits, 2, 2], dtype=float)
313
-
314
- for qubit_idx, qubit_prop in enumerate(backend_qubits):
315
- for prop in qubit_prop:
316
- if prop.name == "prob_meas0_prep1":
317
- (amats[qubit_idx])[0, 1] = prop.value
318
- (amats[qubit_idx])[1, 1] = 1 - prop.value
319
- if prop.name == "prob_meas1_prep0":
320
- (amats[qubit_idx])[1, 0] = prop.value
321
- (amats[qubit_idx])[0, 0] = 1 - prop.value
322
-
323
- return amats
324
-
325
- @property
326
- def qubits(self) -> Tuple[int]:
327
- """The device qubits for this mitigator"""
328
- return self._qubits
@@ -1,217 +0,0 @@
1
- # This code is part of Qiskit.
2
- #
3
- # (C) Copyright IBM 2021
4
- #
5
- # This code is licensed under the Apache License, Version 2.0. You may
6
- # obtain a copy of this license in the LICENSE.txt file in the root directory
7
- # of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
8
- #
9
- # Any modifications or derivative works of this code must retain this
10
- # copyright notice, and modified files need to carry a notice indicating
11
- # that they have been altered from the originals.
12
- """
13
- Readout mitigation data handling utils
14
- """
15
-
16
- import logging
17
- import math
18
- from typing import Optional, List, Tuple, Dict
19
- import numpy as np
20
-
21
- from qiskit.exceptions import QiskitError
22
- from qiskit.utils.deprecation import deprecate_func
23
- from ..utils import marginal_counts
24
- from ..counts import Counts
25
-
26
- logger = logging.getLogger(__name__)
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
- )
36
- def z_diagonal(dim, dtype=float):
37
- r"""Return the diagonal for the operator :math:`Z^\otimes n`"""
38
- parity = np.zeros(dim, dtype=dtype)
39
- for i in range(dim):
40
- parity[i] = bin(i)[2:].count("1")
41
- return (-1) ** np.mod(parity, 2)
42
-
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
- )
51
- def expval_with_stddev(coeffs: np.ndarray, probs: np.ndarray, shots: int) -> Tuple[float, float]:
52
- """Compute expectation value and standard deviation.
53
- Args:
54
- coeffs: array of diagonal operator coefficients.
55
- probs: array of measurement probabilities.
56
- shots: total number of shots to obtain probabilities.
57
- Returns:
58
- tuple: (expval, stddev) expectation value and standard deviation.
59
- """
60
- # Compute expval
61
- expval = coeffs.dot(probs)
62
-
63
- # Compute variance
64
- sq_expval = (coeffs**2).dot(probs)
65
- variance = (sq_expval - expval**2) / shots
66
-
67
- # Compute standard deviation
68
- if variance < 0 and not np.isclose(variance, 0):
69
- logger.warning(
70
- "Encountered a negative variance in expectation value calculation."
71
- "(%f). Setting standard deviation of result to 0.",
72
- variance,
73
- )
74
- calc_stddev = math.sqrt(variance) if variance > 0 else 0.0
75
- return [expval, calc_stddev]
76
-
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
- )
85
- def stddev(probs, shots):
86
- """Calculate stddev dict"""
87
- ret = {}
88
- for key, prob in probs.items():
89
- std_err = math.sqrt(prob * (1 - prob) / shots)
90
- ret[key] = std_err
91
- return ret
92
-
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
- )
101
- def str2diag(string):
102
- """Transform diagonal from a string to a numpy array"""
103
- chars = {
104
- "I": np.array([1, 1], dtype=float),
105
- "Z": np.array([1, -1], dtype=float),
106
- "0": np.array([1, 0], dtype=float),
107
- "1": np.array([0, 1], dtype=float),
108
- }
109
- ret = np.array([1], dtype=float)
110
- for i in reversed(string):
111
- if i not in chars:
112
- raise QiskitError(f"Invalid diagonal string character {i}")
113
- ret = np.kron(chars[i], ret)
114
- return ret
115
-
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
- )
124
- def counts_to_vector(counts: Counts, num_qubits: int) -> Tuple[np.ndarray, int]:
125
- """Transforms Counts to a probability vector"""
126
- vec = np.zeros(2**num_qubits, dtype=float)
127
- shots = 0
128
- for key, val in counts.items():
129
- shots += val
130
- vec[int(key, 2)] = val
131
- vec /= shots
132
- return vec, shots
133
-
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
- )
142
- def remap_qubits(
143
- vec: np.ndarray, num_qubits: int, qubits: Optional[List[int]] = None
144
- ) -> np.ndarray:
145
- """Remapping the qubits"""
146
- if qubits is not None:
147
- if len(qubits) != num_qubits:
148
- raise QiskitError("Num qubits does not match vector length.")
149
- axes = [num_qubits - 1 - i for i in reversed(np.argsort(qubits))]
150
- vec = np.reshape(vec, num_qubits * [2]).transpose(axes).reshape(vec.shape)
151
- return vec
152
-
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
- )
161
- def marganalize_counts(
162
- counts: Counts,
163
- qubit_index: Dict[int, int],
164
- qubits: Optional[List[int]] = None,
165
- clbits: Optional[List[int]] = None,
166
- ) -> np.ndarray:
167
- """Marginalization of the Counts. Verify that number of clbits equals to the number of qubits."""
168
- if clbits is not None:
169
- qubits_len = len(qubits) if not qubits is None else 0
170
- clbits_len = len(clbits) if not clbits is None else 0
171
- if clbits_len not in (0, qubits_len):
172
- raise QiskitError(
173
- f"Num qubits ({qubits_len}) does not match number of clbits ({clbits_len})."
174
- )
175
- counts = marginal_counts(counts, clbits)
176
- if clbits is None and qubits is not None:
177
- clbits = [qubit_index[qubit] for qubit in qubits]
178
- counts = marginal_counts(counts, clbits)
179
- return counts
180
-
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
- )
189
- def counts_probability_vector(
190
- counts: Counts,
191
- qubit_index: Dict[int, int],
192
- qubits: Optional[List[int]] = None,
193
- clbits: Optional[List[int]] = None,
194
- ) -> Tuple[np.ndarray, int]:
195
- """Compute a probability vector for all count outcomes.
196
-
197
- Args:
198
- counts: counts object
199
- qubit_index: For each qubit, its index in the mitigator qubits list
200
- qubits: qubits the count bitstrings correspond to.
201
- clbits: Optional, marginalize counts to just these bits.
202
-
203
- Raises:
204
- QiskitError: if qubits and clbits kwargs are not valid.
205
-
206
- Returns:
207
- np.ndarray: a probability vector for all count outcomes.
208
- int: Number of shots in the counts
209
- """
210
- counts = marganalize_counts(counts, qubit_index, qubits, clbits)
211
- if qubits is not None:
212
- num_qubits = len(qubits)
213
- else:
214
- num_qubits = len(qubit_index.keys())
215
- vec, shots = counts_to_vector(counts, num_qubits)
216
- vec = remap_qubits(vec, num_qubits, qubits)
217
- return vec, shots
@@ -1,40 +0,0 @@
1
- # This code is part of Qiskit.
2
- #
3
- # (C) Copyright IBM 2019.
4
- #
5
- # This code is licensed under the Apache License, Version 2.0. You may
6
- # obtain a copy of this license in the LICENSE.txt file in the root directory
7
- # of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
8
- #
9
- # Any modifications or derivative works of this code must retain this
10
- # copyright notice, and modified files need to carry a notice indicating
11
- # that they have been altered from the originals.
12
-
13
- """
14
- ===========================================
15
- Circuit Scheduler (:mod:`qiskit.scheduler`)
16
- ===========================================
17
-
18
- .. currentmodule:: qiskit.scheduler
19
-
20
- A circuit scheduler compiles a circuit program to a pulse program.
21
-
22
- Core API
23
- ========
24
-
25
- .. autoclass:: ScheduleConfig
26
-
27
- .. currentmodule:: qiskit.scheduler.schedule_circuit
28
- .. autofunction:: schedule_circuit
29
- .. currentmodule:: qiskit.scheduler
30
-
31
- Pulse scheduling methods
32
- ========================
33
-
34
- .. currentmodule:: qiskit.scheduler.methods
35
- .. autofunction:: as_soon_as_possible
36
- .. autofunction:: as_late_as_possible
37
- .. currentmodule:: qiskit.scheduler
38
- """
39
- from qiskit.scheduler import schedule_circuit
40
- from qiskit.scheduler.config import ScheduleConfig
@@ -1,37 +0,0 @@
1
- # This code is part of Qiskit.
2
- #
3
- # (C) Copyright IBM 2019.
4
- #
5
- # This code is licensed under the Apache License, Version 2.0. You may
6
- # obtain a copy of this license in the LICENSE.txt file in the root directory
7
- # of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
8
- #
9
- # Any modifications or derivative works of this code must retain this
10
- # copyright notice, and modified files need to carry a notice indicating
11
- # that they have been altered from the originals.
12
-
13
- """Scheduling container classes."""
14
-
15
- from typing import List
16
-
17
- from qiskit.pulse.instruction_schedule_map import InstructionScheduleMap
18
- from qiskit.pulse.utils import format_meas_map
19
- from qiskit.utils.deprecate_pulse import deprecate_pulse_dependency
20
-
21
-
22
- class ScheduleConfig:
23
- """Configuration for pulse scheduling."""
24
-
25
- @deprecate_pulse_dependency(moving_to_dynamics=True)
26
- def __init__(self, inst_map: InstructionScheduleMap, meas_map: List[List[int]], dt: float):
27
- """
28
- Container for information needed to schedule a QuantumCircuit into a pulse Schedule.
29
-
30
- Args:
31
- inst_map: The schedule definition of all gates supported on a backend.
32
- meas_map: A list of groups of qubits which have to be measured together.
33
- dt: Sample duration.
34
- """
35
- self.inst_map = inst_map
36
- self.meas_map = format_meas_map(meas_map)
37
- self.dt = dt