qiskit 1.4.0__cp39-abi3-macosx_11_0_arm64.whl → 2.0.0rc1__cp39-abi3-macosx_11_0_arm64.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 (456) hide show
  1. qiskit/VERSION.txt +1 -1
  2. qiskit/__init__.py +2 -5
  3. qiskit/_accelerate.abi3.so +0 -0
  4. qiskit/circuit/__init__.py +24 -5
  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 +248 -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 +7 -140
  32. qiskit/circuit/instructionset.py +7 -54
  33. qiskit/circuit/library/__init__.py +34 -5
  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/hamiltonian_gate.py +1 -1
  60. qiskit/circuit/library/n_local/evolved_operator_ansatz.py +1 -1
  61. qiskit/circuit/library/n_local/n_local.py +1 -1
  62. qiskit/circuit/library/n_local/qaoa_ansatz.py +1 -1
  63. qiskit/circuit/library/overlap.py +2 -2
  64. qiskit/circuit/library/pauli_evolution.py +39 -24
  65. qiskit/circuit/library/phase_oracle.py +130 -51
  66. qiskit/circuit/library/standard_gates/__init__.py +0 -1
  67. qiskit/circuit/library/standard_gates/dcx.py +3 -4
  68. qiskit/circuit/library/standard_gates/ecr.py +3 -4
  69. qiskit/circuit/library/standard_gates/global_phase.py +5 -6
  70. qiskit/circuit/library/standard_gates/h.py +4 -9
  71. qiskit/circuit/library/standard_gates/i.py +2 -2
  72. qiskit/circuit/library/standard_gates/iswap.py +3 -4
  73. qiskit/circuit/library/standard_gates/p.py +15 -34
  74. qiskit/circuit/library/standard_gates/r.py +2 -6
  75. qiskit/circuit/library/standard_gates/rx.py +5 -15
  76. qiskit/circuit/library/standard_gates/rxx.py +3 -6
  77. qiskit/circuit/library/standard_gates/ry.py +5 -17
  78. qiskit/circuit/library/standard_gates/ryy.py +3 -6
  79. qiskit/circuit/library/standard_gates/rz.py +5 -17
  80. qiskit/circuit/library/standard_gates/rzx.py +3 -6
  81. qiskit/circuit/library/standard_gates/rzz.py +3 -6
  82. qiskit/circuit/library/standard_gates/s.py +6 -15
  83. qiskit/circuit/library/standard_gates/swap.py +4 -11
  84. qiskit/circuit/library/standard_gates/sx.py +7 -12
  85. qiskit/circuit/library/standard_gates/t.py +6 -7
  86. qiskit/circuit/library/standard_gates/u.py +2 -10
  87. qiskit/circuit/library/standard_gates/u1.py +5 -16
  88. qiskit/circuit/library/standard_gates/u2.py +2 -6
  89. qiskit/circuit/library/standard_gates/u3.py +3 -11
  90. qiskit/circuit/library/standard_gates/x.py +13 -60
  91. qiskit/circuit/library/standard_gates/xx_minus_yy.py +2 -5
  92. qiskit/circuit/library/standard_gates/xx_plus_yy.py +2 -5
  93. qiskit/circuit/library/standard_gates/y.py +4 -9
  94. qiskit/circuit/library/standard_gates/z.py +5 -15
  95. qiskit/circuit/measure.py +11 -2
  96. qiskit/circuit/parameterexpression.py +4 -0
  97. qiskit/circuit/quantumcircuit.py +881 -555
  98. qiskit/circuit/random/utils.py +12 -6
  99. qiskit/circuit/reset.py +5 -2
  100. qiskit/circuit/singleton.py +5 -11
  101. qiskit/circuit/store.py +0 -8
  102. qiskit/compiler/__init__.py +1 -7
  103. qiskit/compiler/transpiler.py +38 -196
  104. qiskit/converters/circuit_to_dag.py +4 -2
  105. qiskit/converters/circuit_to_dagdependency.py +0 -2
  106. qiskit/converters/circuit_to_dagdependency_v2.py +0 -1
  107. qiskit/converters/circuit_to_gate.py +1 -1
  108. qiskit/converters/circuit_to_instruction.py +16 -29
  109. qiskit/converters/dag_to_circuit.py +5 -5
  110. qiskit/converters/dag_to_dagdependency.py +0 -1
  111. qiskit/converters/dag_to_dagdependency_v2.py +0 -1
  112. qiskit/converters/dagdependency_to_circuit.py +0 -6
  113. qiskit/converters/dagdependency_to_dag.py +0 -6
  114. qiskit/dagcircuit/collect_blocks.py +32 -20
  115. qiskit/dagcircuit/dagdependency.py +3 -37
  116. qiskit/dagcircuit/dagdependency_v2.py +2 -80
  117. qiskit/dagcircuit/dagnode.py +14 -2
  118. qiskit/passmanager/__init__.py +24 -6
  119. qiskit/passmanager/passmanager.py +26 -24
  120. qiskit/primitives/__init__.py +44 -35
  121. qiskit/primitives/backend_estimator_v2.py +102 -23
  122. qiskit/primitives/backend_sampler_v2.py +5 -20
  123. qiskit/primitives/base/__init__.py +4 -4
  124. qiskit/primitives/base/base_estimator.py +77 -82
  125. qiskit/primitives/base/base_primitive_job.py +2 -2
  126. qiskit/primitives/base/{base_primitive.py → base_primitive_v1.py} +1 -1
  127. qiskit/primitives/base/{base_result.py → base_result_v1.py} +1 -1
  128. qiskit/primitives/base/base_sampler.py +52 -60
  129. qiskit/primitives/base/{estimator_result.py → estimator_result_v1.py} +2 -2
  130. qiskit/primitives/base/{sampler_result.py → sampler_result_v1.py} +2 -2
  131. qiskit/primitives/base/{validation.py → validation_v1.py} +34 -15
  132. qiskit/primitives/containers/bindings_array.py +3 -1
  133. qiskit/primitives/containers/bit_array.py +23 -0
  134. qiskit/primitives/containers/data_bin.py +3 -1
  135. qiskit/primitives/containers/observables_array.py +19 -2
  136. qiskit/primitives/statevector_sampler.py +6 -8
  137. qiskit/primitives/utils.py +14 -189
  138. qiskit/providers/__init__.py +4 -130
  139. qiskit/providers/backend.py +11 -314
  140. qiskit/providers/basic_provider/__init__.py +3 -1
  141. qiskit/providers/basic_provider/basic_provider.py +29 -9
  142. qiskit/providers/basic_provider/basic_simulator.py +158 -298
  143. qiskit/providers/exceptions.py +0 -33
  144. qiskit/providers/fake_provider/__init__.py +0 -37
  145. qiskit/providers/fake_provider/generic_backend_v2.py +32 -693
  146. qiskit/qasm2/__init__.py +21 -6
  147. qiskit/qasm2/export.py +2 -10
  148. qiskit/qasm2/parse.py +11 -25
  149. qiskit/qasm3/__init__.py +5 -1
  150. qiskit/qasm3/ast.py +44 -0
  151. qiskit/qasm3/exporter.py +65 -27
  152. qiskit/qasm3/printer.py +35 -4
  153. qiskit/qpy/__init__.py +141 -19
  154. qiskit/qpy/binary_io/__init__.py +0 -1
  155. qiskit/qpy/binary_io/circuits.py +91 -116
  156. qiskit/qpy/binary_io/schedules.py +61 -388
  157. qiskit/qpy/binary_io/value.py +168 -28
  158. qiskit/qpy/common.py +10 -7
  159. qiskit/qpy/formats.py +41 -0
  160. qiskit/qpy/interface.py +29 -62
  161. qiskit/qpy/type_keys.py +58 -221
  162. qiskit/quantum_info/analysis/distance.py +3 -1
  163. qiskit/quantum_info/operators/dihedral/dihedral.py +3 -1
  164. qiskit/quantum_info/operators/operator.py +6 -2
  165. qiskit/quantum_info/operators/symplectic/clifford.py +3 -1
  166. qiskit/quantum_info/operators/symplectic/pauli.py +4 -2
  167. qiskit/quantum_info/operators/symplectic/pauli_list.py +17 -5
  168. qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py +40 -6
  169. qiskit/quantum_info/states/densitymatrix.py +16 -6
  170. qiskit/quantum_info/states/stabilizerstate.py +35 -4
  171. qiskit/quantum_info/states/statevector.py +16 -6
  172. qiskit/result/__init__.py +5 -17
  173. qiskit/result/models.py +18 -10
  174. qiskit/result/result.py +28 -126
  175. qiskit/result/sampled_expval.py +1 -2
  176. qiskit/result/utils.py +3 -4
  177. qiskit/synthesis/__init__.py +21 -1
  178. qiskit/synthesis/arithmetic/__init__.py +3 -1
  179. qiskit/synthesis/arithmetic/adders/cdkm_ripple_carry_adder.py +1 -1
  180. qiskit/synthesis/arithmetic/adders/draper_qft_adder.py +1 -1
  181. qiskit/synthesis/arithmetic/adders/vbe_ripple_carry_adder.py +2 -2
  182. qiskit/{providers/fake_provider/backends_v1/fake_20q → synthesis/arithmetic/comparators}/__init__.py +4 -6
  183. qiskit/synthesis/arithmetic/comparators/compare_2s.py +112 -0
  184. qiskit/synthesis/arithmetic/comparators/compare_greedy.py +66 -0
  185. qiskit/synthesis/arithmetic/multipliers/hrs_cumulative_multiplier.py +1 -1
  186. qiskit/synthesis/arithmetic/multipliers/rg_qft_multiplier.py +1 -1
  187. qiskit/synthesis/arithmetic/weighted_sum.py +155 -0
  188. qiskit/{result/mitigation → synthesis/boolean}/__init__.py +2 -2
  189. qiskit/synthesis/boolean/boolean_expression.py +231 -0
  190. qiskit/synthesis/boolean/boolean_expression_synth.py +124 -0
  191. qiskit/synthesis/boolean/boolean_expression_visitor.py +96 -0
  192. qiskit/synthesis/discrete_basis/generate_basis_approximations.py +2 -0
  193. qiskit/synthesis/evolution/lie_trotter.py +10 -7
  194. qiskit/synthesis/evolution/product_formula.py +44 -35
  195. qiskit/synthesis/evolution/qdrift.py +17 -24
  196. qiskit/synthesis/evolution/suzuki_trotter.py +20 -27
  197. qiskit/synthesis/linear/linear_depth_lnn.py +6 -221
  198. qiskit/synthesis/linear_phase/cx_cz_depth_lnn.py +4 -205
  199. qiskit/synthesis/multi_controlled/__init__.py +1 -0
  200. qiskit/synthesis/multi_controlled/mcx_synthesis.py +5 -2
  201. qiskit/synthesis/multi_controlled/multi_control_rotation_gates.py +206 -0
  202. qiskit/synthesis/one_qubit/one_qubit_decompose.py +1 -1
  203. qiskit/synthesis/two_qubit/__init__.py +1 -0
  204. qiskit/synthesis/two_qubit/two_qubit_decompose.py +28 -145
  205. qiskit/transpiler/__init__.py +32 -232
  206. qiskit/transpiler/basepasses.py +20 -51
  207. qiskit/transpiler/layout.py +1 -1
  208. qiskit/transpiler/passes/__init__.py +2 -40
  209. qiskit/transpiler/passes/basis/basis_translator.py +4 -3
  210. qiskit/transpiler/passes/basis/decompose.py +1 -15
  211. qiskit/transpiler/passes/basis/unroll_3q_or_more.py +1 -5
  212. qiskit/transpiler/passes/basis/unroll_custom_definitions.py +3 -2
  213. qiskit/transpiler/passes/layout/apply_layout.py +5 -0
  214. qiskit/transpiler/passes/layout/dense_layout.py +2 -39
  215. qiskit/transpiler/passes/layout/full_ancilla_allocation.py +4 -4
  216. qiskit/transpiler/passes/layout/sabre_layout.py +7 -3
  217. qiskit/transpiler/passes/layout/vf2_layout.py +2 -20
  218. qiskit/transpiler/passes/layout/vf2_post_layout.py +60 -125
  219. qiskit/transpiler/passes/layout/vf2_utils.py +2 -26
  220. qiskit/transpiler/passes/optimization/__init__.py +1 -3
  221. qiskit/transpiler/passes/optimization/collect_and_collapse.py +2 -0
  222. qiskit/transpiler/passes/optimization/collect_cliffords.py +5 -0
  223. qiskit/transpiler/passes/optimization/collect_linear_functions.py +5 -0
  224. qiskit/transpiler/passes/optimization/collect_multiqubit_blocks.py +16 -1
  225. qiskit/transpiler/passes/optimization/commutation_analysis.py +3 -3
  226. qiskit/transpiler/passes/optimization/consolidate_blocks.py +41 -19
  227. qiskit/transpiler/passes/optimization/contract_idle_wires_in_control_flow.py +104 -0
  228. qiskit/transpiler/passes/optimization/light_cone.py +135 -0
  229. qiskit/transpiler/passes/optimization/optimize_1q_commutation.py +0 -1
  230. qiskit/transpiler/passes/optimization/optimize_1q_decomposition.py +18 -22
  231. qiskit/transpiler/passes/optimization/optimize_annotated.py +3 -2
  232. qiskit/transpiler/passes/optimization/remove_identity_equiv.py +6 -4
  233. qiskit/transpiler/passes/optimization/reset_after_measure_simplification.py +5 -2
  234. qiskit/transpiler/passes/optimization/split_2q_unitaries.py +26 -3
  235. qiskit/transpiler/passes/optimization/template_matching/template_substitution.py +1 -0
  236. qiskit/transpiler/passes/routing/__init__.py +0 -1
  237. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/commuting_2q_gate_router.py +3 -1
  238. qiskit/transpiler/passes/routing/sabre_swap.py +14 -6
  239. qiskit/transpiler/passes/routing/star_prerouting.py +1 -1
  240. qiskit/transpiler/passes/scheduling/__init__.py +1 -7
  241. qiskit/transpiler/passes/scheduling/alignments/__init__.py +2 -4
  242. qiskit/transpiler/passes/scheduling/alignments/check_durations.py +1 -9
  243. qiskit/transpiler/passes/scheduling/alignments/reschedule.py +17 -16
  244. qiskit/transpiler/passes/scheduling/padding/base_padding.py +30 -2
  245. qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py +20 -58
  246. qiskit/transpiler/passes/scheduling/padding/pad_delay.py +11 -3
  247. qiskit/transpiler/passes/scheduling/scheduling/alap.py +5 -39
  248. qiskit/transpiler/passes/scheduling/scheduling/asap.py +4 -35
  249. qiskit/transpiler/passes/scheduling/scheduling/base_scheduler.py +10 -16
  250. qiskit/transpiler/passes/scheduling/time_unit_conversion.py +127 -59
  251. qiskit/transpiler/passes/synthesis/default_unitary_synth_plugin.py +653 -0
  252. qiskit/transpiler/passes/synthesis/high_level_synthesis.py +176 -601
  253. qiskit/transpiler/passes/synthesis/hls_plugins.py +294 -1
  254. qiskit/transpiler/passes/synthesis/plugin.py +4 -0
  255. qiskit/transpiler/passes/synthesis/solovay_kitaev_synthesis.py +16 -10
  256. qiskit/transpiler/passes/synthesis/unitary_synthesis.py +34 -697
  257. qiskit/transpiler/passes/utils/__init__.py +0 -1
  258. qiskit/transpiler/passes/utils/check_gate_direction.py +13 -5
  259. qiskit/transpiler/passes/utils/control_flow.py +2 -6
  260. qiskit/transpiler/passes/utils/gate_direction.py +7 -0
  261. qiskit/transpiler/passes/utils/remove_final_measurements.py +40 -33
  262. qiskit/transpiler/passmanager.py +13 -0
  263. qiskit/transpiler/passmanager_config.py +5 -81
  264. qiskit/transpiler/preset_passmanagers/builtin_plugins.py +225 -344
  265. qiskit/transpiler/preset_passmanagers/common.py +140 -167
  266. qiskit/transpiler/preset_passmanagers/generate_preset_pass_manager.py +101 -322
  267. qiskit/transpiler/preset_passmanagers/level0.py +2 -11
  268. qiskit/transpiler/preset_passmanagers/level1.py +2 -14
  269. qiskit/transpiler/preset_passmanagers/level2.py +2 -12
  270. qiskit/transpiler/preset_passmanagers/level3.py +2 -11
  271. qiskit/transpiler/preset_passmanagers/plugin.py +5 -3
  272. qiskit/transpiler/target.py +67 -524
  273. qiskit/user_config.py +8 -4
  274. qiskit/utils/__init__.py +13 -12
  275. qiskit/utils/deprecation.py +4 -112
  276. qiskit/utils/optionals.py +11 -4
  277. qiskit/utils/parallel.py +214 -87
  278. qiskit/utils/units.py +4 -1
  279. qiskit/visualization/__init__.py +3 -7
  280. qiskit/visualization/array.py +4 -1
  281. qiskit/visualization/bloch.py +1 -1
  282. qiskit/visualization/circuit/_utils.py +19 -19
  283. qiskit/visualization/circuit/circuit_visualization.py +11 -4
  284. qiskit/visualization/circuit/matplotlib.py +13 -23
  285. qiskit/visualization/circuit/text.py +7 -3
  286. qiskit/visualization/dag_visualization.py +2 -1
  287. qiskit/visualization/gate_map.py +39 -154
  288. qiskit/visualization/pass_manager_visualization.py +6 -2
  289. qiskit/visualization/state_visualization.py +6 -0
  290. qiskit/visualization/timeline/core.py +27 -12
  291. qiskit/visualization/timeline/interface.py +23 -18
  292. {qiskit-1.4.0.dist-info → qiskit-2.0.0rc1.dist-info}/METADATA +2 -2
  293. {qiskit-1.4.0.dist-info → qiskit-2.0.0rc1.dist-info}/RECORD +297 -444
  294. {qiskit-1.4.0.dist-info → qiskit-2.0.0rc1.dist-info}/WHEEL +2 -1
  295. {qiskit-1.4.0.dist-info → qiskit-2.0.0rc1.dist-info}/entry_points.txt +8 -2
  296. qiskit/assembler/__init__.py +0 -42
  297. qiskit/assembler/assemble_circuits.py +0 -451
  298. qiskit/assembler/assemble_schedules.py +0 -367
  299. qiskit/assembler/disassemble.py +0 -310
  300. qiskit/assembler/run_config.py +0 -77
  301. qiskit/circuit/bit.py +0 -106
  302. qiskit/circuit/classicalfunction/__init__.py +0 -152
  303. qiskit/circuit/classicalfunction/boolean_expression.py +0 -138
  304. qiskit/circuit/classicalfunction/classical_element.py +0 -54
  305. qiskit/circuit/classicalfunction/classical_function_visitor.py +0 -155
  306. qiskit/circuit/classicalfunction/classicalfunction.py +0 -182
  307. qiskit/circuit/classicalfunction/exceptions.py +0 -41
  308. qiskit/circuit/classicalfunction/types.py +0 -18
  309. qiskit/circuit/classicalfunction/utils.py +0 -91
  310. qiskit/circuit/classicalregister.py +0 -57
  311. qiskit/circuit/library/standard_gates/multi_control_rotation_gates.py +0 -405
  312. qiskit/circuit/quantumregister.py +0 -75
  313. qiskit/circuit/register.py +0 -246
  314. qiskit/compiler/assembler.py +0 -689
  315. qiskit/compiler/scheduler.py +0 -109
  316. qiskit/compiler/sequencer.py +0 -71
  317. qiskit/primitives/backend_estimator.py +0 -486
  318. qiskit/primitives/backend_sampler.py +0 -222
  319. qiskit/primitives/estimator.py +0 -172
  320. qiskit/primitives/sampler.py +0 -162
  321. qiskit/providers/backend_compat.py +0 -507
  322. qiskit/providers/fake_provider/backends_v1/__init__.py +0 -22
  323. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/__init__.py +0 -18
  324. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/conf_washington.json +0 -1
  325. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/defs_washington.json +0 -1
  326. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/fake_127q_pulse_v1.py +0 -37
  327. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/props_washington.json +0 -1
  328. qiskit/providers/fake_provider/backends_v1/fake_20q/conf_singapore.json +0 -1
  329. qiskit/providers/fake_provider/backends_v1/fake_20q/fake_20q.py +0 -43
  330. qiskit/providers/fake_provider/backends_v1/fake_20q/props_singapore.json +0 -1
  331. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/__init__.py +0 -18
  332. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/conf_hanoi.json +0 -1
  333. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/defs_hanoi.json +0 -1
  334. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/fake_27q_pulse_v1.py +0 -50
  335. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/props_hanoi.json +0 -1
  336. qiskit/providers/fake_provider/backends_v1/fake_5q/__init__.py +0 -18
  337. qiskit/providers/fake_provider/backends_v1/fake_5q/conf_yorktown.json +0 -1
  338. qiskit/providers/fake_provider/backends_v1/fake_5q/fake_5q_v1.py +0 -41
  339. qiskit/providers/fake_provider/backends_v1/fake_5q/props_yorktown.json +0 -1
  340. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/__init__.py +0 -18
  341. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/conf_nairobi.json +0 -1
  342. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/defs_nairobi.json +0 -1
  343. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/fake_7q_pulse_v1.py +0 -44
  344. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/props_nairobi.json +0 -1
  345. qiskit/providers/fake_provider/fake_1q.py +0 -91
  346. qiskit/providers/fake_provider/fake_backend.py +0 -165
  347. qiskit/providers/fake_provider/fake_openpulse_2q.py +0 -391
  348. qiskit/providers/fake_provider/fake_openpulse_3q.py +0 -340
  349. qiskit/providers/fake_provider/fake_pulse_backend.py +0 -49
  350. qiskit/providers/fake_provider/fake_qasm_backend.py +0 -77
  351. qiskit/providers/fake_provider/utils/backend_converter.py +0 -150
  352. qiskit/providers/fake_provider/utils/json_decoder.py +0 -109
  353. qiskit/providers/models/__init__.py +0 -89
  354. qiskit/providers/models/backendconfiguration.py +0 -1040
  355. qiskit/providers/models/backendproperties.py +0 -535
  356. qiskit/providers/models/backendstatus.py +0 -104
  357. qiskit/providers/models/jobstatus.py +0 -77
  358. qiskit/providers/models/pulsedefaults.py +0 -305
  359. qiskit/providers/provider.py +0 -95
  360. qiskit/pulse/__init__.py +0 -158
  361. qiskit/pulse/builder.py +0 -2262
  362. qiskit/pulse/calibration_entries.py +0 -381
  363. qiskit/pulse/channels.py +0 -227
  364. qiskit/pulse/configuration.py +0 -245
  365. qiskit/pulse/exceptions.py +0 -45
  366. qiskit/pulse/filters.py +0 -309
  367. qiskit/pulse/instruction_schedule_map.py +0 -424
  368. qiskit/pulse/instructions/__init__.py +0 -67
  369. qiskit/pulse/instructions/acquire.py +0 -150
  370. qiskit/pulse/instructions/delay.py +0 -71
  371. qiskit/pulse/instructions/directives.py +0 -154
  372. qiskit/pulse/instructions/frequency.py +0 -135
  373. qiskit/pulse/instructions/instruction.py +0 -270
  374. qiskit/pulse/instructions/phase.py +0 -152
  375. qiskit/pulse/instructions/play.py +0 -99
  376. qiskit/pulse/instructions/reference.py +0 -100
  377. qiskit/pulse/instructions/snapshot.py +0 -82
  378. qiskit/pulse/library/__init__.py +0 -97
  379. qiskit/pulse/library/continuous.py +0 -430
  380. qiskit/pulse/library/pulse.py +0 -148
  381. qiskit/pulse/library/samplers/__init__.py +0 -15
  382. qiskit/pulse/library/samplers/decorators.py +0 -295
  383. qiskit/pulse/library/samplers/strategies.py +0 -71
  384. qiskit/pulse/library/symbolic_pulses.py +0 -1989
  385. qiskit/pulse/library/waveform.py +0 -136
  386. qiskit/pulse/macros.py +0 -262
  387. qiskit/pulse/parameter_manager.py +0 -445
  388. qiskit/pulse/parser.py +0 -314
  389. qiskit/pulse/reference_manager.py +0 -58
  390. qiskit/pulse/schedule.py +0 -1854
  391. qiskit/pulse/transforms/__init__.py +0 -106
  392. qiskit/pulse/transforms/alignments.py +0 -406
  393. qiskit/pulse/transforms/base_transforms.py +0 -71
  394. qiskit/pulse/transforms/canonicalization.py +0 -498
  395. qiskit/pulse/transforms/dag.py +0 -122
  396. qiskit/pulse/utils.py +0 -149
  397. qiskit/qobj/__init__.py +0 -75
  398. qiskit/qobj/common.py +0 -81
  399. qiskit/qobj/converters/__init__.py +0 -18
  400. qiskit/qobj/converters/lo_config.py +0 -177
  401. qiskit/qobj/converters/pulse_instruction.py +0 -897
  402. qiskit/qobj/pulse_qobj.py +0 -709
  403. qiskit/qobj/qasm_qobj.py +0 -708
  404. qiskit/qobj/utils.py +0 -46
  405. qiskit/result/mitigation/base_readout_mitigator.py +0 -79
  406. qiskit/result/mitigation/correlated_readout_mitigator.py +0 -277
  407. qiskit/result/mitigation/local_readout_mitigator.py +0 -328
  408. qiskit/result/mitigation/utils.py +0 -217
  409. qiskit/scheduler/__init__.py +0 -40
  410. qiskit/scheduler/config.py +0 -37
  411. qiskit/scheduler/lowering.py +0 -187
  412. qiskit/scheduler/methods/__init__.py +0 -15
  413. qiskit/scheduler/methods/basic.py +0 -140
  414. qiskit/scheduler/schedule_circuit.py +0 -69
  415. qiskit/scheduler/sequence.py +0 -104
  416. qiskit/transpiler/passes/calibration/__init__.py +0 -17
  417. qiskit/transpiler/passes/calibration/base_builder.py +0 -79
  418. qiskit/transpiler/passes/calibration/builders.py +0 -20
  419. qiskit/transpiler/passes/calibration/exceptions.py +0 -22
  420. qiskit/transpiler/passes/calibration/pulse_gate.py +0 -100
  421. qiskit/transpiler/passes/calibration/rx_builder.py +0 -164
  422. qiskit/transpiler/passes/calibration/rzx_builder.py +0 -411
  423. qiskit/transpiler/passes/calibration/rzx_templates.py +0 -58
  424. qiskit/transpiler/passes/optimization/cx_cancellation.py +0 -65
  425. qiskit/transpiler/passes/optimization/echo_rzx_weyl_decomposition.py +0 -162
  426. qiskit/transpiler/passes/optimization/normalize_rx_angle.py +0 -157
  427. qiskit/transpiler/passes/routing/stochastic_swap.py +0 -532
  428. qiskit/transpiler/passes/scheduling/alap.py +0 -153
  429. qiskit/transpiler/passes/scheduling/alignments/align_measures.py +0 -255
  430. qiskit/transpiler/passes/scheduling/alignments/pulse_gate_validation.py +0 -107
  431. qiskit/transpiler/passes/scheduling/asap.py +0 -175
  432. qiskit/transpiler/passes/scheduling/base_scheduler.py +0 -310
  433. qiskit/transpiler/passes/scheduling/dynamical_decoupling.py +0 -313
  434. qiskit/transpiler/passes/utils/convert_conditions_to_if_ops.py +0 -93
  435. qiskit/utils/deprecate_pulse.py +0 -119
  436. qiskit/utils/multiprocessing.py +0 -56
  437. qiskit/visualization/pulse_v2/__init__.py +0 -21
  438. qiskit/visualization/pulse_v2/core.py +0 -901
  439. qiskit/visualization/pulse_v2/device_info.py +0 -173
  440. qiskit/visualization/pulse_v2/drawings.py +0 -253
  441. qiskit/visualization/pulse_v2/events.py +0 -254
  442. qiskit/visualization/pulse_v2/generators/__init__.py +0 -40
  443. qiskit/visualization/pulse_v2/generators/barrier.py +0 -76
  444. qiskit/visualization/pulse_v2/generators/chart.py +0 -208
  445. qiskit/visualization/pulse_v2/generators/frame.py +0 -436
  446. qiskit/visualization/pulse_v2/generators/snapshot.py +0 -133
  447. qiskit/visualization/pulse_v2/generators/waveform.py +0 -645
  448. qiskit/visualization/pulse_v2/interface.py +0 -459
  449. qiskit/visualization/pulse_v2/layouts.py +0 -387
  450. qiskit/visualization/pulse_v2/plotters/__init__.py +0 -17
  451. qiskit/visualization/pulse_v2/plotters/base_plotter.py +0 -53
  452. qiskit/visualization/pulse_v2/plotters/matplotlib.py +0 -201
  453. qiskit/visualization/pulse_v2/stylesheet.py +0 -312
  454. qiskit/visualization/pulse_v2/types.py +0 -242
  455. {qiskit-1.4.0.dist-info → qiskit-2.0.0rc1.dist-info}/LICENSE.txt +0 -0
  456. {qiskit-1.4.0.dist-info → qiskit-2.0.0rc1.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