qiskit 1.4.2__cp39-abi3-win_amd64.whl → 2.0.0rc2__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 (455) hide show
  1. qiskit/VERSION.txt +1 -1
  2. qiskit/__init__.py +2 -5
  3. qiskit/_accelerate.pyd +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 +2 -141
  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 +3 -7
  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 +7 -1
  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 +93 -130
  156. qiskit/qpy/binary_io/schedules.py +69 -439
  157. qiskit/qpy/binary_io/value.py +154 -31
  158. qiskit/qpy/common.py +10 -7
  159. qiskit/qpy/formats.py +41 -0
  160. qiskit/qpy/interface.py +34 -81
  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/evolution/lie_trotter.py +10 -7
  193. qiskit/synthesis/evolution/product_formula.py +44 -35
  194. qiskit/synthesis/evolution/qdrift.py +17 -24
  195. qiskit/synthesis/evolution/suzuki_trotter.py +20 -27
  196. qiskit/synthesis/linear/linear_depth_lnn.py +6 -221
  197. qiskit/synthesis/linear_phase/cx_cz_depth_lnn.py +4 -205
  198. qiskit/synthesis/multi_controlled/__init__.py +1 -0
  199. qiskit/synthesis/multi_controlled/mcx_synthesis.py +5 -2
  200. qiskit/synthesis/multi_controlled/multi_control_rotation_gates.py +206 -0
  201. qiskit/synthesis/one_qubit/one_qubit_decompose.py +1 -1
  202. qiskit/synthesis/two_qubit/__init__.py +1 -0
  203. qiskit/synthesis/two_qubit/two_qubit_decompose.py +28 -145
  204. qiskit/transpiler/__init__.py +32 -232
  205. qiskit/transpiler/basepasses.py +20 -51
  206. qiskit/transpiler/layout.py +1 -1
  207. qiskit/transpiler/passes/__init__.py +2 -40
  208. qiskit/transpiler/passes/basis/basis_translator.py +4 -3
  209. qiskit/transpiler/passes/basis/decompose.py +1 -15
  210. qiskit/transpiler/passes/basis/unroll_3q_or_more.py +1 -5
  211. qiskit/transpiler/passes/basis/unroll_custom_definitions.py +3 -2
  212. qiskit/transpiler/passes/layout/apply_layout.py +4 -0
  213. qiskit/transpiler/passes/layout/dense_layout.py +2 -39
  214. qiskit/transpiler/passes/layout/full_ancilla_allocation.py +4 -4
  215. qiskit/transpiler/passes/layout/sabre_layout.py +7 -3
  216. qiskit/transpiler/passes/layout/vf2_layout.py +2 -20
  217. qiskit/transpiler/passes/layout/vf2_post_layout.py +60 -125
  218. qiskit/transpiler/passes/layout/vf2_utils.py +2 -26
  219. qiskit/transpiler/passes/optimization/__init__.py +1 -3
  220. qiskit/transpiler/passes/optimization/collect_and_collapse.py +2 -0
  221. qiskit/transpiler/passes/optimization/collect_cliffords.py +5 -0
  222. qiskit/transpiler/passes/optimization/collect_linear_functions.py +5 -0
  223. qiskit/transpiler/passes/optimization/collect_multiqubit_blocks.py +16 -1
  224. qiskit/transpiler/passes/optimization/commutation_analysis.py +3 -3
  225. qiskit/transpiler/passes/optimization/consolidate_blocks.py +41 -19
  226. qiskit/transpiler/passes/optimization/contract_idle_wires_in_control_flow.py +104 -0
  227. qiskit/transpiler/passes/optimization/light_cone.py +135 -0
  228. qiskit/transpiler/passes/optimization/optimize_1q_commutation.py +0 -1
  229. qiskit/transpiler/passes/optimization/optimize_1q_decomposition.py +18 -22
  230. qiskit/transpiler/passes/optimization/optimize_annotated.py +3 -2
  231. qiskit/transpiler/passes/optimization/remove_identity_equiv.py +6 -4
  232. qiskit/transpiler/passes/optimization/reset_after_measure_simplification.py +5 -2
  233. qiskit/transpiler/passes/optimization/split_2q_unitaries.py +26 -3
  234. qiskit/transpiler/passes/optimization/template_matching/template_substitution.py +1 -0
  235. qiskit/transpiler/passes/routing/__init__.py +0 -1
  236. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/commuting_2q_gate_router.py +3 -1
  237. qiskit/transpiler/passes/routing/sabre_swap.py +14 -6
  238. qiskit/transpiler/passes/routing/star_prerouting.py +1 -1
  239. qiskit/transpiler/passes/scheduling/__init__.py +1 -7
  240. qiskit/transpiler/passes/scheduling/alignments/__init__.py +2 -4
  241. qiskit/transpiler/passes/scheduling/alignments/check_durations.py +1 -9
  242. qiskit/transpiler/passes/scheduling/alignments/reschedule.py +17 -16
  243. qiskit/transpiler/passes/scheduling/padding/base_padding.py +30 -2
  244. qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py +20 -58
  245. qiskit/transpiler/passes/scheduling/padding/pad_delay.py +11 -3
  246. qiskit/transpiler/passes/scheduling/scheduling/alap.py +5 -39
  247. qiskit/transpiler/passes/scheduling/scheduling/asap.py +4 -35
  248. qiskit/transpiler/passes/scheduling/scheduling/base_scheduler.py +10 -16
  249. qiskit/transpiler/passes/scheduling/time_unit_conversion.py +127 -59
  250. qiskit/transpiler/passes/synthesis/default_unitary_synth_plugin.py +653 -0
  251. qiskit/transpiler/passes/synthesis/high_level_synthesis.py +176 -601
  252. qiskit/transpiler/passes/synthesis/hls_plugins.py +294 -1
  253. qiskit/transpiler/passes/synthesis/plugin.py +4 -0
  254. qiskit/transpiler/passes/synthesis/solovay_kitaev_synthesis.py +16 -10
  255. qiskit/transpiler/passes/synthesis/unitary_synthesis.py +34 -697
  256. qiskit/transpiler/passes/utils/__init__.py +0 -1
  257. qiskit/transpiler/passes/utils/check_gate_direction.py +13 -5
  258. qiskit/transpiler/passes/utils/control_flow.py +2 -6
  259. qiskit/transpiler/passes/utils/gate_direction.py +7 -0
  260. qiskit/transpiler/passes/utils/remove_final_measurements.py +40 -33
  261. qiskit/transpiler/passmanager.py +13 -0
  262. qiskit/transpiler/passmanager_config.py +5 -81
  263. qiskit/transpiler/preset_passmanagers/builtin_plugins.py +225 -344
  264. qiskit/transpiler/preset_passmanagers/common.py +140 -167
  265. qiskit/transpiler/preset_passmanagers/generate_preset_pass_manager.py +101 -322
  266. qiskit/transpiler/preset_passmanagers/level0.py +2 -11
  267. qiskit/transpiler/preset_passmanagers/level1.py +2 -14
  268. qiskit/transpiler/preset_passmanagers/level2.py +2 -12
  269. qiskit/transpiler/preset_passmanagers/level3.py +2 -11
  270. qiskit/transpiler/preset_passmanagers/plugin.py +5 -3
  271. qiskit/transpiler/target.py +67 -524
  272. qiskit/user_config.py +8 -4
  273. qiskit/utils/__init__.py +13 -12
  274. qiskit/utils/deprecation.py +4 -112
  275. qiskit/utils/optionals.py +11 -4
  276. qiskit/utils/parallel.py +214 -87
  277. qiskit/utils/units.py +4 -1
  278. qiskit/visualization/__init__.py +3 -7
  279. qiskit/visualization/array.py +4 -1
  280. qiskit/visualization/bloch.py +1 -1
  281. qiskit/visualization/circuit/_utils.py +19 -19
  282. qiskit/visualization/circuit/circuit_visualization.py +11 -4
  283. qiskit/visualization/circuit/matplotlib.py +13 -23
  284. qiskit/visualization/circuit/text.py +7 -3
  285. qiskit/visualization/dag_visualization.py +2 -1
  286. qiskit/visualization/gate_map.py +39 -154
  287. qiskit/visualization/pass_manager_visualization.py +6 -2
  288. qiskit/visualization/state_visualization.py +6 -0
  289. qiskit/visualization/timeline/core.py +18 -12
  290. qiskit/visualization/timeline/interface.py +19 -18
  291. {qiskit-1.4.2.dist-info → qiskit-2.0.0rc2.dist-info}/METADATA +2 -2
  292. {qiskit-1.4.2.dist-info → qiskit-2.0.0rc2.dist-info}/RECORD +296 -443
  293. {qiskit-1.4.2.dist-info → qiskit-2.0.0rc2.dist-info}/entry_points.txt +8 -2
  294. qiskit/assembler/__init__.py +0 -42
  295. qiskit/assembler/assemble_circuits.py +0 -451
  296. qiskit/assembler/assemble_schedules.py +0 -367
  297. qiskit/assembler/disassemble.py +0 -310
  298. qiskit/assembler/run_config.py +0 -77
  299. qiskit/circuit/bit.py +0 -106
  300. qiskit/circuit/classicalfunction/__init__.py +0 -152
  301. qiskit/circuit/classicalfunction/boolean_expression.py +0 -138
  302. qiskit/circuit/classicalfunction/classical_element.py +0 -54
  303. qiskit/circuit/classicalfunction/classical_function_visitor.py +0 -155
  304. qiskit/circuit/classicalfunction/classicalfunction.py +0 -182
  305. qiskit/circuit/classicalfunction/exceptions.py +0 -41
  306. qiskit/circuit/classicalfunction/types.py +0 -18
  307. qiskit/circuit/classicalfunction/utils.py +0 -91
  308. qiskit/circuit/classicalregister.py +0 -57
  309. qiskit/circuit/library/standard_gates/multi_control_rotation_gates.py +0 -405
  310. qiskit/circuit/quantumregister.py +0 -75
  311. qiskit/circuit/register.py +0 -246
  312. qiskit/compiler/assembler.py +0 -689
  313. qiskit/compiler/scheduler.py +0 -109
  314. qiskit/compiler/sequencer.py +0 -71
  315. qiskit/primitives/backend_estimator.py +0 -486
  316. qiskit/primitives/backend_sampler.py +0 -222
  317. qiskit/primitives/estimator.py +0 -172
  318. qiskit/primitives/sampler.py +0 -162
  319. qiskit/providers/backend_compat.py +0 -507
  320. qiskit/providers/fake_provider/backends_v1/__init__.py +0 -22
  321. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/__init__.py +0 -18
  322. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/conf_washington.json +0 -1
  323. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/defs_washington.json +0 -1
  324. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/fake_127q_pulse_v1.py +0 -37
  325. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/props_washington.json +0 -1
  326. qiskit/providers/fake_provider/backends_v1/fake_20q/conf_singapore.json +0 -1
  327. qiskit/providers/fake_provider/backends_v1/fake_20q/fake_20q.py +0 -43
  328. qiskit/providers/fake_provider/backends_v1/fake_20q/props_singapore.json +0 -1
  329. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/__init__.py +0 -18
  330. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/conf_hanoi.json +0 -1
  331. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/defs_hanoi.json +0 -1
  332. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/fake_27q_pulse_v1.py +0 -50
  333. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/props_hanoi.json +0 -1
  334. qiskit/providers/fake_provider/backends_v1/fake_5q/__init__.py +0 -18
  335. qiskit/providers/fake_provider/backends_v1/fake_5q/conf_yorktown.json +0 -1
  336. qiskit/providers/fake_provider/backends_v1/fake_5q/fake_5q_v1.py +0 -41
  337. qiskit/providers/fake_provider/backends_v1/fake_5q/props_yorktown.json +0 -1
  338. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/__init__.py +0 -18
  339. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/conf_nairobi.json +0 -1
  340. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/defs_nairobi.json +0 -1
  341. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/fake_7q_pulse_v1.py +0 -44
  342. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/props_nairobi.json +0 -1
  343. qiskit/providers/fake_provider/fake_1q.py +0 -91
  344. qiskit/providers/fake_provider/fake_backend.py +0 -165
  345. qiskit/providers/fake_provider/fake_openpulse_2q.py +0 -391
  346. qiskit/providers/fake_provider/fake_openpulse_3q.py +0 -340
  347. qiskit/providers/fake_provider/fake_pulse_backend.py +0 -49
  348. qiskit/providers/fake_provider/fake_qasm_backend.py +0 -77
  349. qiskit/providers/fake_provider/utils/backend_converter.py +0 -150
  350. qiskit/providers/fake_provider/utils/json_decoder.py +0 -109
  351. qiskit/providers/models/__init__.py +0 -89
  352. qiskit/providers/models/backendconfiguration.py +0 -1040
  353. qiskit/providers/models/backendproperties.py +0 -535
  354. qiskit/providers/models/backendstatus.py +0 -104
  355. qiskit/providers/models/jobstatus.py +0 -77
  356. qiskit/providers/models/pulsedefaults.py +0 -305
  357. qiskit/providers/provider.py +0 -95
  358. qiskit/pulse/__init__.py +0 -158
  359. qiskit/pulse/builder.py +0 -2262
  360. qiskit/pulse/calibration_entries.py +0 -381
  361. qiskit/pulse/channels.py +0 -227
  362. qiskit/pulse/configuration.py +0 -245
  363. qiskit/pulse/exceptions.py +0 -45
  364. qiskit/pulse/filters.py +0 -309
  365. qiskit/pulse/instruction_schedule_map.py +0 -424
  366. qiskit/pulse/instructions/__init__.py +0 -67
  367. qiskit/pulse/instructions/acquire.py +0 -150
  368. qiskit/pulse/instructions/delay.py +0 -71
  369. qiskit/pulse/instructions/directives.py +0 -154
  370. qiskit/pulse/instructions/frequency.py +0 -135
  371. qiskit/pulse/instructions/instruction.py +0 -270
  372. qiskit/pulse/instructions/phase.py +0 -152
  373. qiskit/pulse/instructions/play.py +0 -99
  374. qiskit/pulse/instructions/reference.py +0 -100
  375. qiskit/pulse/instructions/snapshot.py +0 -82
  376. qiskit/pulse/library/__init__.py +0 -97
  377. qiskit/pulse/library/continuous.py +0 -430
  378. qiskit/pulse/library/pulse.py +0 -148
  379. qiskit/pulse/library/samplers/__init__.py +0 -15
  380. qiskit/pulse/library/samplers/decorators.py +0 -295
  381. qiskit/pulse/library/samplers/strategies.py +0 -71
  382. qiskit/pulse/library/symbolic_pulses.py +0 -1989
  383. qiskit/pulse/library/waveform.py +0 -136
  384. qiskit/pulse/macros.py +0 -262
  385. qiskit/pulse/parameter_manager.py +0 -445
  386. qiskit/pulse/parser.py +0 -314
  387. qiskit/pulse/reference_manager.py +0 -58
  388. qiskit/pulse/schedule.py +0 -1854
  389. qiskit/pulse/transforms/__init__.py +0 -106
  390. qiskit/pulse/transforms/alignments.py +0 -406
  391. qiskit/pulse/transforms/base_transforms.py +0 -71
  392. qiskit/pulse/transforms/canonicalization.py +0 -498
  393. qiskit/pulse/transforms/dag.py +0 -122
  394. qiskit/pulse/utils.py +0 -149
  395. qiskit/qobj/__init__.py +0 -75
  396. qiskit/qobj/common.py +0 -81
  397. qiskit/qobj/converters/__init__.py +0 -18
  398. qiskit/qobj/converters/lo_config.py +0 -177
  399. qiskit/qobj/converters/pulse_instruction.py +0 -897
  400. qiskit/qobj/pulse_qobj.py +0 -709
  401. qiskit/qobj/qasm_qobj.py +0 -708
  402. qiskit/qobj/utils.py +0 -46
  403. qiskit/result/mitigation/base_readout_mitigator.py +0 -79
  404. qiskit/result/mitigation/correlated_readout_mitigator.py +0 -277
  405. qiskit/result/mitigation/local_readout_mitigator.py +0 -328
  406. qiskit/result/mitigation/utils.py +0 -217
  407. qiskit/scheduler/__init__.py +0 -40
  408. qiskit/scheduler/config.py +0 -37
  409. qiskit/scheduler/lowering.py +0 -187
  410. qiskit/scheduler/methods/__init__.py +0 -15
  411. qiskit/scheduler/methods/basic.py +0 -140
  412. qiskit/scheduler/schedule_circuit.py +0 -69
  413. qiskit/scheduler/sequence.py +0 -104
  414. qiskit/transpiler/passes/calibration/__init__.py +0 -17
  415. qiskit/transpiler/passes/calibration/base_builder.py +0 -79
  416. qiskit/transpiler/passes/calibration/builders.py +0 -20
  417. qiskit/transpiler/passes/calibration/exceptions.py +0 -22
  418. qiskit/transpiler/passes/calibration/pulse_gate.py +0 -100
  419. qiskit/transpiler/passes/calibration/rx_builder.py +0 -164
  420. qiskit/transpiler/passes/calibration/rzx_builder.py +0 -411
  421. qiskit/transpiler/passes/calibration/rzx_templates.py +0 -58
  422. qiskit/transpiler/passes/optimization/cx_cancellation.py +0 -65
  423. qiskit/transpiler/passes/optimization/echo_rzx_weyl_decomposition.py +0 -162
  424. qiskit/transpiler/passes/optimization/normalize_rx_angle.py +0 -157
  425. qiskit/transpiler/passes/routing/stochastic_swap.py +0 -532
  426. qiskit/transpiler/passes/scheduling/alap.py +0 -153
  427. qiskit/transpiler/passes/scheduling/alignments/align_measures.py +0 -255
  428. qiskit/transpiler/passes/scheduling/alignments/pulse_gate_validation.py +0 -107
  429. qiskit/transpiler/passes/scheduling/asap.py +0 -175
  430. qiskit/transpiler/passes/scheduling/base_scheduler.py +0 -310
  431. qiskit/transpiler/passes/scheduling/dynamical_decoupling.py +0 -313
  432. qiskit/transpiler/passes/utils/convert_conditions_to_if_ops.py +0 -93
  433. qiskit/utils/deprecate_pulse.py +0 -119
  434. qiskit/utils/multiprocessing.py +0 -56
  435. qiskit/visualization/pulse_v2/__init__.py +0 -21
  436. qiskit/visualization/pulse_v2/core.py +0 -901
  437. qiskit/visualization/pulse_v2/device_info.py +0 -173
  438. qiskit/visualization/pulse_v2/drawings.py +0 -253
  439. qiskit/visualization/pulse_v2/events.py +0 -254
  440. qiskit/visualization/pulse_v2/generators/__init__.py +0 -40
  441. qiskit/visualization/pulse_v2/generators/barrier.py +0 -76
  442. qiskit/visualization/pulse_v2/generators/chart.py +0 -208
  443. qiskit/visualization/pulse_v2/generators/frame.py +0 -436
  444. qiskit/visualization/pulse_v2/generators/snapshot.py +0 -133
  445. qiskit/visualization/pulse_v2/generators/waveform.py +0 -645
  446. qiskit/visualization/pulse_v2/interface.py +0 -459
  447. qiskit/visualization/pulse_v2/layouts.py +0 -387
  448. qiskit/visualization/pulse_v2/plotters/__init__.py +0 -17
  449. qiskit/visualization/pulse_v2/plotters/base_plotter.py +0 -53
  450. qiskit/visualization/pulse_v2/plotters/matplotlib.py +0 -201
  451. qiskit/visualization/pulse_v2/stylesheet.py +0 -312
  452. qiskit/visualization/pulse_v2/types.py +0 -242
  453. {qiskit-1.4.2.dist-info → qiskit-2.0.0rc2.dist-info}/LICENSE.txt +0 -0
  454. {qiskit-1.4.2.dist-info → qiskit-2.0.0rc2.dist-info}/WHEEL +0 -0
  455. {qiskit-1.4.2.dist-info → qiskit-2.0.0rc2.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