qiskit 1.4.1__cp39-abi3-win_amd64.whl → 2.0.0__cp39-abi3-win_amd64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (462) hide show
  1. qiskit/VERSION.txt +1 -1
  2. qiskit/__init__.py +3 -9
  3. qiskit/_accelerate.pyd +0 -0
  4. qiskit/circuit/__init__.py +35 -10
  5. qiskit/circuit/{add_control.py → _add_control.py} +32 -12
  6. qiskit/circuit/_classical_resource_map.py +5 -3
  7. qiskit/circuit/barrier.py +3 -7
  8. qiskit/circuit/classical/expr/__init__.py +31 -3
  9. qiskit/circuit/classical/expr/constructors.py +236 -28
  10. qiskit/circuit/classical/expr/expr.py +104 -3
  11. qiskit/circuit/classical/expr/visitors.py +75 -0
  12. qiskit/circuit/classical/types/__init__.py +12 -8
  13. qiskit/circuit/classical/types/ordering.py +14 -7
  14. qiskit/circuit/classical/types/types.py +36 -0
  15. qiskit/circuit/commutation_checker.py +34 -7
  16. qiskit/circuit/controlflow/__init__.py +32 -1
  17. qiskit/circuit/controlflow/_builder_utils.py +9 -5
  18. qiskit/circuit/controlflow/box.py +163 -0
  19. qiskit/circuit/controlflow/break_loop.py +1 -1
  20. qiskit/circuit/controlflow/builder.py +139 -39
  21. qiskit/circuit/controlflow/continue_loop.py +1 -3
  22. qiskit/circuit/controlflow/control_flow.py +10 -0
  23. qiskit/circuit/controlflow/for_loop.py +2 -1
  24. qiskit/circuit/controlflow/if_else.py +3 -16
  25. qiskit/circuit/controlflow/switch_case.py +2 -8
  26. qiskit/circuit/controlflow/while_loop.py +2 -7
  27. qiskit/circuit/controlledgate.py +2 -4
  28. qiskit/circuit/delay.py +40 -11
  29. qiskit/circuit/duration.py +0 -15
  30. qiskit/circuit/gate.py +2 -4
  31. qiskit/circuit/instruction.py +2 -141
  32. qiskit/circuit/instructionset.py +7 -54
  33. qiskit/circuit/library/__init__.py +469 -154
  34. qiskit/circuit/library/arithmetic/__init__.py +16 -10
  35. qiskit/circuit/library/arithmetic/adders/cdkm_ripple_carry_adder.py +1 -1
  36. qiskit/circuit/library/arithmetic/adders/draper_qft_adder.py +2 -2
  37. qiskit/circuit/library/arithmetic/adders/vbe_ripple_carry_adder.py +1 -1
  38. qiskit/circuit/library/arithmetic/exact_reciprocal.py +64 -21
  39. qiskit/circuit/library/arithmetic/integer_comparator.py +37 -80
  40. qiskit/circuit/library/arithmetic/linear_amplitude_function.py +169 -2
  41. qiskit/circuit/library/arithmetic/linear_pauli_rotations.py +59 -5
  42. qiskit/circuit/library/arithmetic/piecewise_chebyshev.py +154 -6
  43. qiskit/circuit/library/arithmetic/piecewise_linear_pauli_rotations.py +114 -4
  44. qiskit/circuit/library/arithmetic/piecewise_polynomial_pauli_rotations.py +191 -15
  45. qiskit/circuit/library/arithmetic/polynomial_pauli_rotations.py +93 -39
  46. qiskit/circuit/library/arithmetic/quadratic_form.py +168 -2
  47. qiskit/circuit/library/arithmetic/weighted_adder.py +73 -1
  48. qiskit/circuit/library/bit_flip_oracle.py +130 -0
  49. qiskit/circuit/library/blueprintcircuit.py +52 -16
  50. qiskit/circuit/library/data_preparation/initializer.py +1 -1
  51. qiskit/circuit/library/data_preparation/pauli_feature_map.py +4 -4
  52. qiskit/circuit/library/data_preparation/state_preparation.py +1 -1
  53. qiskit/circuit/library/generalized_gates/gms.py +1 -1
  54. qiskit/circuit/library/generalized_gates/isometry.py +1 -1
  55. qiskit/circuit/library/generalized_gates/pauli.py +1 -2
  56. qiskit/circuit/library/generalized_gates/uc.py +97 -7
  57. qiskit/circuit/library/generalized_gates/uc_pauli_rot.py +1 -1
  58. qiskit/circuit/library/generalized_gates/unitary.py +4 -2
  59. qiskit/circuit/library/graph_state.py +1 -0
  60. qiskit/circuit/library/hamiltonian_gate.py +1 -1
  61. qiskit/circuit/library/n_local/evolved_operator_ansatz.py +1 -1
  62. qiskit/circuit/library/n_local/n_local.py +1 -1
  63. qiskit/circuit/library/n_local/qaoa_ansatz.py +1 -1
  64. qiskit/circuit/library/overlap.py +2 -2
  65. qiskit/circuit/library/pauli_evolution.py +39 -24
  66. qiskit/circuit/library/phase_oracle.py +130 -51
  67. qiskit/circuit/library/standard_gates/__init__.py +0 -1
  68. qiskit/circuit/library/standard_gates/dcx.py +3 -4
  69. qiskit/circuit/library/standard_gates/ecr.py +3 -4
  70. qiskit/circuit/library/standard_gates/global_phase.py +5 -6
  71. qiskit/circuit/library/standard_gates/h.py +4 -9
  72. qiskit/circuit/library/standard_gates/i.py +2 -2
  73. qiskit/circuit/library/standard_gates/iswap.py +3 -4
  74. qiskit/circuit/library/standard_gates/p.py +15 -34
  75. qiskit/circuit/library/standard_gates/r.py +7 -10
  76. qiskit/circuit/library/standard_gates/rx.py +5 -15
  77. qiskit/circuit/library/standard_gates/rxx.py +3 -6
  78. qiskit/circuit/library/standard_gates/ry.py +5 -17
  79. qiskit/circuit/library/standard_gates/ryy.py +3 -6
  80. qiskit/circuit/library/standard_gates/rz.py +5 -17
  81. qiskit/circuit/library/standard_gates/rzx.py +3 -6
  82. qiskit/circuit/library/standard_gates/rzz.py +3 -6
  83. qiskit/circuit/library/standard_gates/s.py +6 -15
  84. qiskit/circuit/library/standard_gates/swap.py +4 -11
  85. qiskit/circuit/library/standard_gates/sx.py +7 -12
  86. qiskit/circuit/library/standard_gates/t.py +6 -7
  87. qiskit/circuit/library/standard_gates/u.py +2 -10
  88. qiskit/circuit/library/standard_gates/u1.py +5 -16
  89. qiskit/circuit/library/standard_gates/u2.py +2 -6
  90. qiskit/circuit/library/standard_gates/u3.py +3 -11
  91. qiskit/circuit/library/standard_gates/x.py +14 -62
  92. qiskit/circuit/library/standard_gates/xx_minus_yy.py +2 -5
  93. qiskit/circuit/library/standard_gates/xx_plus_yy.py +2 -5
  94. qiskit/circuit/library/standard_gates/y.py +4 -9
  95. qiskit/circuit/library/standard_gates/z.py +5 -15
  96. qiskit/circuit/measure.py +11 -2
  97. qiskit/circuit/parameterexpression.py +11 -0
  98. qiskit/circuit/quantumcircuit.py +890 -564
  99. qiskit/circuit/random/utils.py +12 -6
  100. qiskit/circuit/reset.py +5 -2
  101. qiskit/circuit/singleton.py +5 -11
  102. qiskit/circuit/store.py +0 -8
  103. qiskit/circuit/tools/pi_check.py +3 -0
  104. qiskit/compiler/__init__.py +1 -7
  105. qiskit/compiler/transpiler.py +38 -196
  106. qiskit/converters/circuit_to_dag.py +6 -4
  107. qiskit/converters/circuit_to_dagdependency.py +0 -2
  108. qiskit/converters/circuit_to_dagdependency_v2.py +0 -1
  109. qiskit/converters/circuit_to_gate.py +1 -1
  110. qiskit/converters/circuit_to_instruction.py +16 -29
  111. qiskit/converters/dag_to_circuit.py +7 -8
  112. qiskit/converters/dag_to_dagdependency.py +0 -1
  113. qiskit/converters/dag_to_dagdependency_v2.py +0 -1
  114. qiskit/converters/dagdependency_to_circuit.py +0 -6
  115. qiskit/converters/dagdependency_to_dag.py +0 -6
  116. qiskit/dagcircuit/collect_blocks.py +32 -20
  117. qiskit/dagcircuit/dagdependency.py +3 -37
  118. qiskit/dagcircuit/dagdependency_v2.py +5 -82
  119. qiskit/dagcircuit/dagnode.py +14 -2
  120. qiskit/passmanager/__init__.py +24 -6
  121. qiskit/passmanager/passmanager.py +26 -24
  122. qiskit/primitives/__init__.py +44 -35
  123. qiskit/primitives/backend_estimator_v2.py +102 -23
  124. qiskit/primitives/backend_sampler_v2.py +5 -20
  125. qiskit/primitives/base/__init__.py +4 -4
  126. qiskit/primitives/base/base_estimator.py +77 -82
  127. qiskit/primitives/base/base_primitive_job.py +2 -2
  128. qiskit/primitives/base/{base_primitive.py → base_primitive_v1.py} +1 -1
  129. qiskit/primitives/base/{base_result.py → base_result_v1.py} +1 -1
  130. qiskit/primitives/base/base_sampler.py +52 -60
  131. qiskit/primitives/base/{estimator_result.py → estimator_result_v1.py} +2 -2
  132. qiskit/primitives/base/{sampler_result.py → sampler_result_v1.py} +2 -2
  133. qiskit/primitives/base/{validation.py → validation_v1.py} +34 -15
  134. qiskit/primitives/containers/bindings_array.py +3 -1
  135. qiskit/primitives/containers/bit_array.py +23 -0
  136. qiskit/primitives/containers/data_bin.py +3 -1
  137. qiskit/primitives/containers/observables_array.py +19 -2
  138. qiskit/primitives/statevector_sampler.py +6 -8
  139. qiskit/primitives/utils.py +14 -189
  140. qiskit/providers/__init__.py +4 -130
  141. qiskit/providers/backend.py +11 -314
  142. qiskit/providers/basic_provider/__init__.py +3 -1
  143. qiskit/providers/basic_provider/basic_provider.py +29 -9
  144. qiskit/providers/basic_provider/basic_simulator.py +158 -298
  145. qiskit/providers/exceptions.py +0 -33
  146. qiskit/providers/fake_provider/__init__.py +0 -37
  147. qiskit/providers/fake_provider/generic_backend_v2.py +32 -693
  148. qiskit/qasm2/__init__.py +21 -6
  149. qiskit/qasm2/export.py +2 -10
  150. qiskit/qasm2/parse.py +11 -25
  151. qiskit/qasm3/__init__.py +5 -1
  152. qiskit/qasm3/ast.py +44 -0
  153. qiskit/qasm3/exporter.py +65 -27
  154. qiskit/qasm3/printer.py +35 -4
  155. qiskit/qpy/__init__.py +162 -19
  156. qiskit/qpy/binary_io/__init__.py +0 -1
  157. qiskit/qpy/binary_io/circuits.py +96 -116
  158. qiskit/qpy/binary_io/parse_sympy_repr.py +121 -0
  159. qiskit/qpy/binary_io/schedules.py +61 -388
  160. qiskit/qpy/binary_io/value.py +159 -33
  161. qiskit/qpy/common.py +10 -7
  162. qiskit/qpy/formats.py +41 -0
  163. qiskit/qpy/interface.py +29 -62
  164. qiskit/qpy/type_keys.py +58 -221
  165. qiskit/quantum_info/analysis/distance.py +3 -1
  166. qiskit/quantum_info/operators/dihedral/dihedral.py +3 -1
  167. qiskit/quantum_info/operators/operator.py +6 -2
  168. qiskit/quantum_info/operators/symplectic/clifford.py +3 -1
  169. qiskit/quantum_info/operators/symplectic/pauli.py +4 -2
  170. qiskit/quantum_info/operators/symplectic/pauli_list.py +17 -5
  171. qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py +40 -6
  172. qiskit/quantum_info/states/densitymatrix.py +16 -6
  173. qiskit/quantum_info/states/stabilizerstate.py +35 -4
  174. qiskit/quantum_info/states/statevector.py +16 -6
  175. qiskit/result/__init__.py +5 -17
  176. qiskit/result/models.py +18 -11
  177. qiskit/result/result.py +38 -134
  178. qiskit/result/sampled_expval.py +1 -2
  179. qiskit/result/utils.py +3 -4
  180. qiskit/synthesis/__init__.py +21 -1
  181. qiskit/synthesis/arithmetic/__init__.py +3 -1
  182. qiskit/synthesis/arithmetic/adders/cdkm_ripple_carry_adder.py +1 -1
  183. qiskit/synthesis/arithmetic/adders/draper_qft_adder.py +1 -1
  184. qiskit/synthesis/arithmetic/adders/vbe_ripple_carry_adder.py +2 -2
  185. qiskit/{providers/fake_provider/backends_v1/fake_20q → synthesis/arithmetic/comparators}/__init__.py +4 -6
  186. qiskit/synthesis/arithmetic/comparators/compare_2s.py +112 -0
  187. qiskit/synthesis/arithmetic/comparators/compare_greedy.py +66 -0
  188. qiskit/synthesis/arithmetic/multipliers/hrs_cumulative_multiplier.py +1 -1
  189. qiskit/synthesis/arithmetic/multipliers/rg_qft_multiplier.py +1 -1
  190. qiskit/synthesis/arithmetic/weighted_sum.py +155 -0
  191. qiskit/{result/mitigation → synthesis/boolean}/__init__.py +2 -2
  192. qiskit/synthesis/boolean/boolean_expression.py +231 -0
  193. qiskit/synthesis/boolean/boolean_expression_synth.py +124 -0
  194. qiskit/synthesis/boolean/boolean_expression_visitor.py +96 -0
  195. qiskit/synthesis/discrete_basis/generate_basis_approximations.py +2 -0
  196. qiskit/synthesis/evolution/lie_trotter.py +10 -7
  197. qiskit/synthesis/evolution/product_formula.py +44 -35
  198. qiskit/synthesis/evolution/qdrift.py +17 -24
  199. qiskit/synthesis/evolution/suzuki_trotter.py +20 -27
  200. qiskit/synthesis/linear/linear_depth_lnn.py +6 -221
  201. qiskit/synthesis/linear_phase/cx_cz_depth_lnn.py +4 -205
  202. qiskit/synthesis/multi_controlled/__init__.py +1 -0
  203. qiskit/synthesis/multi_controlled/mcx_synthesis.py +5 -2
  204. qiskit/synthesis/multi_controlled/multi_control_rotation_gates.py +206 -0
  205. qiskit/synthesis/one_qubit/one_qubit_decompose.py +1 -1
  206. qiskit/synthesis/two_qubit/__init__.py +1 -0
  207. qiskit/synthesis/two_qubit/two_qubit_decompose.py +28 -145
  208. qiskit/transpiler/__init__.py +32 -232
  209. qiskit/transpiler/basepasses.py +20 -51
  210. qiskit/transpiler/layout.py +1 -1
  211. qiskit/transpiler/passes/__init__.py +4 -40
  212. qiskit/transpiler/passes/basis/basis_translator.py +5 -4
  213. qiskit/transpiler/passes/basis/decompose.py +1 -15
  214. qiskit/transpiler/passes/basis/unroll_3q_or_more.py +1 -5
  215. qiskit/transpiler/passes/basis/unroll_custom_definitions.py +3 -2
  216. qiskit/transpiler/passes/layout/apply_layout.py +4 -0
  217. qiskit/transpiler/passes/layout/dense_layout.py +2 -39
  218. qiskit/transpiler/passes/layout/full_ancilla_allocation.py +3 -4
  219. qiskit/transpiler/passes/layout/sabre_layout.py +7 -3
  220. qiskit/transpiler/passes/layout/vf2_layout.py +2 -20
  221. qiskit/transpiler/passes/layout/vf2_post_layout.py +60 -125
  222. qiskit/transpiler/passes/layout/vf2_utils.py +2 -26
  223. qiskit/transpiler/passes/optimization/__init__.py +2 -3
  224. qiskit/transpiler/passes/optimization/collect_and_collapse.py +2 -0
  225. qiskit/transpiler/passes/optimization/collect_cliffords.py +5 -0
  226. qiskit/transpiler/passes/optimization/collect_linear_functions.py +5 -0
  227. qiskit/transpiler/passes/optimization/collect_multiqubit_blocks.py +16 -1
  228. qiskit/transpiler/passes/optimization/commutation_analysis.py +3 -3
  229. qiskit/transpiler/passes/optimization/consolidate_blocks.py +41 -19
  230. qiskit/transpiler/passes/optimization/contract_idle_wires_in_control_flow.py +104 -0
  231. qiskit/transpiler/passes/optimization/light_cone.py +135 -0
  232. qiskit/transpiler/passes/optimization/optimize_1q_commutation.py +0 -1
  233. qiskit/transpiler/passes/optimization/optimize_1q_decomposition.py +18 -22
  234. qiskit/transpiler/passes/optimization/optimize_annotated.py +3 -2
  235. qiskit/transpiler/passes/optimization/remove_identity_equiv.py +6 -4
  236. qiskit/transpiler/passes/optimization/reset_after_measure_simplification.py +5 -2
  237. qiskit/transpiler/passes/optimization/split_2q_unitaries.py +26 -3
  238. qiskit/transpiler/passes/optimization/template_matching/template_substitution.py +3 -2
  239. qiskit/transpiler/passes/routing/__init__.py +0 -1
  240. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/commuting_2q_gate_router.py +3 -1
  241. qiskit/transpiler/passes/routing/sabre_swap.py +14 -6
  242. qiskit/transpiler/passes/routing/star_prerouting.py +1 -1
  243. qiskit/transpiler/passes/scheduling/__init__.py +1 -7
  244. qiskit/transpiler/passes/scheduling/alignments/__init__.py +2 -4
  245. qiskit/transpiler/passes/scheduling/alignments/check_durations.py +1 -9
  246. qiskit/transpiler/passes/scheduling/alignments/reschedule.py +17 -16
  247. qiskit/transpiler/passes/scheduling/padding/base_padding.py +32 -4
  248. qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py +25 -63
  249. qiskit/transpiler/passes/scheduling/padding/pad_delay.py +12 -4
  250. qiskit/transpiler/passes/scheduling/scheduling/alap.py +5 -39
  251. qiskit/transpiler/passes/scheduling/scheduling/asap.py +4 -35
  252. qiskit/transpiler/passes/scheduling/scheduling/base_scheduler.py +10 -16
  253. qiskit/transpiler/passes/scheduling/time_unit_conversion.py +134 -62
  254. qiskit/transpiler/passes/synthesis/default_unitary_synth_plugin.py +653 -0
  255. qiskit/transpiler/passes/synthesis/high_level_synthesis.py +176 -601
  256. qiskit/transpiler/passes/synthesis/hls_plugins.py +294 -1
  257. qiskit/transpiler/passes/synthesis/plugin.py +4 -0
  258. qiskit/transpiler/passes/synthesis/solovay_kitaev_synthesis.py +16 -10
  259. qiskit/transpiler/passes/synthesis/unitary_synthesis.py +34 -697
  260. qiskit/transpiler/passes/utils/__init__.py +0 -1
  261. qiskit/transpiler/passes/utils/check_gate_direction.py +13 -5
  262. qiskit/transpiler/passes/utils/control_flow.py +2 -6
  263. qiskit/transpiler/passes/utils/gate_direction.py +7 -0
  264. qiskit/transpiler/passes/utils/remove_final_measurements.py +40 -33
  265. qiskit/transpiler/passmanager.py +13 -0
  266. qiskit/transpiler/passmanager_config.py +5 -81
  267. qiskit/transpiler/preset_passmanagers/builtin_plugins.py +225 -344
  268. qiskit/transpiler/preset_passmanagers/common.py +140 -167
  269. qiskit/transpiler/preset_passmanagers/generate_preset_pass_manager.py +107 -322
  270. qiskit/transpiler/preset_passmanagers/level0.py +2 -11
  271. qiskit/transpiler/preset_passmanagers/level1.py +2 -14
  272. qiskit/transpiler/preset_passmanagers/level2.py +2 -12
  273. qiskit/transpiler/preset_passmanagers/level3.py +2 -11
  274. qiskit/transpiler/preset_passmanagers/plugin.py +5 -3
  275. qiskit/transpiler/target.py +78 -524
  276. qiskit/user_config.py +8 -4
  277. qiskit/utils/__init__.py +13 -12
  278. qiskit/utils/deprecation.py +4 -112
  279. qiskit/utils/optionals.py +11 -4
  280. qiskit/utils/parallel.py +214 -87
  281. qiskit/utils/units.py +4 -1
  282. qiskit/visualization/__init__.py +3 -7
  283. qiskit/visualization/array.py +4 -1
  284. qiskit/visualization/bloch.py +1 -1
  285. qiskit/visualization/circuit/_utils.py +19 -19
  286. qiskit/visualization/circuit/circuit_visualization.py +11 -4
  287. qiskit/visualization/circuit/matplotlib.py +13 -23
  288. qiskit/visualization/circuit/text.py +7 -3
  289. qiskit/visualization/counts_visualization.py +4 -0
  290. qiskit/visualization/dag_visualization.py +2 -1
  291. qiskit/visualization/gate_map.py +39 -154
  292. qiskit/visualization/library.py +4 -1
  293. qiskit/visualization/pass_manager_visualization.py +6 -2
  294. qiskit/visualization/state_visualization.py +19 -2
  295. qiskit/visualization/timeline/core.py +19 -13
  296. qiskit/visualization/timeline/interface.py +19 -18
  297. qiskit/visualization/timeline/plotters/matplotlib.py +4 -1
  298. {qiskit-1.4.1.dist-info → qiskit-2.0.0.dist-info}/METADATA +4 -3
  299. {qiskit-1.4.1.dist-info → qiskit-2.0.0.dist-info}/RECORD +303 -449
  300. {qiskit-1.4.1.dist-info → qiskit-2.0.0.dist-info}/WHEEL +1 -1
  301. {qiskit-1.4.1.dist-info → qiskit-2.0.0.dist-info}/entry_points.txt +8 -2
  302. qiskit/assembler/__init__.py +0 -42
  303. qiskit/assembler/assemble_circuits.py +0 -451
  304. qiskit/assembler/assemble_schedules.py +0 -367
  305. qiskit/assembler/disassemble.py +0 -310
  306. qiskit/assembler/run_config.py +0 -77
  307. qiskit/circuit/bit.py +0 -106
  308. qiskit/circuit/classicalfunction/__init__.py +0 -152
  309. qiskit/circuit/classicalfunction/boolean_expression.py +0 -138
  310. qiskit/circuit/classicalfunction/classical_element.py +0 -54
  311. qiskit/circuit/classicalfunction/classical_function_visitor.py +0 -155
  312. qiskit/circuit/classicalfunction/classicalfunction.py +0 -182
  313. qiskit/circuit/classicalfunction/exceptions.py +0 -41
  314. qiskit/circuit/classicalfunction/types.py +0 -18
  315. qiskit/circuit/classicalfunction/utils.py +0 -91
  316. qiskit/circuit/classicalregister.py +0 -57
  317. qiskit/circuit/library/standard_gates/multi_control_rotation_gates.py +0 -405
  318. qiskit/circuit/quantumregister.py +0 -75
  319. qiskit/circuit/register.py +0 -246
  320. qiskit/compiler/assembler.py +0 -689
  321. qiskit/compiler/scheduler.py +0 -109
  322. qiskit/compiler/sequencer.py +0 -71
  323. qiskit/primitives/backend_estimator.py +0 -486
  324. qiskit/primitives/backend_sampler.py +0 -222
  325. qiskit/primitives/estimator.py +0 -172
  326. qiskit/primitives/sampler.py +0 -162
  327. qiskit/providers/backend_compat.py +0 -507
  328. qiskit/providers/fake_provider/backends_v1/__init__.py +0 -22
  329. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/__init__.py +0 -18
  330. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/conf_washington.json +0 -1
  331. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/defs_washington.json +0 -1
  332. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/fake_127q_pulse_v1.py +0 -37
  333. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/props_washington.json +0 -1
  334. qiskit/providers/fake_provider/backends_v1/fake_20q/conf_singapore.json +0 -1
  335. qiskit/providers/fake_provider/backends_v1/fake_20q/fake_20q.py +0 -43
  336. qiskit/providers/fake_provider/backends_v1/fake_20q/props_singapore.json +0 -1
  337. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/__init__.py +0 -18
  338. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/conf_hanoi.json +0 -1
  339. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/defs_hanoi.json +0 -1
  340. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/fake_27q_pulse_v1.py +0 -50
  341. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/props_hanoi.json +0 -1
  342. qiskit/providers/fake_provider/backends_v1/fake_5q/__init__.py +0 -18
  343. qiskit/providers/fake_provider/backends_v1/fake_5q/conf_yorktown.json +0 -1
  344. qiskit/providers/fake_provider/backends_v1/fake_5q/fake_5q_v1.py +0 -41
  345. qiskit/providers/fake_provider/backends_v1/fake_5q/props_yorktown.json +0 -1
  346. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/__init__.py +0 -18
  347. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/conf_nairobi.json +0 -1
  348. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/defs_nairobi.json +0 -1
  349. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/fake_7q_pulse_v1.py +0 -44
  350. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/props_nairobi.json +0 -1
  351. qiskit/providers/fake_provider/fake_1q.py +0 -91
  352. qiskit/providers/fake_provider/fake_backend.py +0 -165
  353. qiskit/providers/fake_provider/fake_openpulse_2q.py +0 -391
  354. qiskit/providers/fake_provider/fake_openpulse_3q.py +0 -340
  355. qiskit/providers/fake_provider/fake_pulse_backend.py +0 -49
  356. qiskit/providers/fake_provider/fake_qasm_backend.py +0 -77
  357. qiskit/providers/fake_provider/utils/backend_converter.py +0 -150
  358. qiskit/providers/fake_provider/utils/json_decoder.py +0 -109
  359. qiskit/providers/models/__init__.py +0 -89
  360. qiskit/providers/models/backendconfiguration.py +0 -1040
  361. qiskit/providers/models/backendproperties.py +0 -535
  362. qiskit/providers/models/backendstatus.py +0 -104
  363. qiskit/providers/models/jobstatus.py +0 -77
  364. qiskit/providers/models/pulsedefaults.py +0 -305
  365. qiskit/providers/provider.py +0 -95
  366. qiskit/pulse/__init__.py +0 -158
  367. qiskit/pulse/builder.py +0 -2262
  368. qiskit/pulse/calibration_entries.py +0 -381
  369. qiskit/pulse/channels.py +0 -227
  370. qiskit/pulse/configuration.py +0 -245
  371. qiskit/pulse/exceptions.py +0 -45
  372. qiskit/pulse/filters.py +0 -309
  373. qiskit/pulse/instruction_schedule_map.py +0 -424
  374. qiskit/pulse/instructions/__init__.py +0 -67
  375. qiskit/pulse/instructions/acquire.py +0 -150
  376. qiskit/pulse/instructions/delay.py +0 -71
  377. qiskit/pulse/instructions/directives.py +0 -154
  378. qiskit/pulse/instructions/frequency.py +0 -135
  379. qiskit/pulse/instructions/instruction.py +0 -270
  380. qiskit/pulse/instructions/phase.py +0 -152
  381. qiskit/pulse/instructions/play.py +0 -99
  382. qiskit/pulse/instructions/reference.py +0 -100
  383. qiskit/pulse/instructions/snapshot.py +0 -82
  384. qiskit/pulse/library/__init__.py +0 -97
  385. qiskit/pulse/library/continuous.py +0 -430
  386. qiskit/pulse/library/pulse.py +0 -148
  387. qiskit/pulse/library/samplers/__init__.py +0 -15
  388. qiskit/pulse/library/samplers/decorators.py +0 -295
  389. qiskit/pulse/library/samplers/strategies.py +0 -71
  390. qiskit/pulse/library/symbolic_pulses.py +0 -1989
  391. qiskit/pulse/library/waveform.py +0 -136
  392. qiskit/pulse/macros.py +0 -262
  393. qiskit/pulse/parameter_manager.py +0 -445
  394. qiskit/pulse/parser.py +0 -314
  395. qiskit/pulse/reference_manager.py +0 -58
  396. qiskit/pulse/schedule.py +0 -1854
  397. qiskit/pulse/transforms/__init__.py +0 -106
  398. qiskit/pulse/transforms/alignments.py +0 -406
  399. qiskit/pulse/transforms/base_transforms.py +0 -71
  400. qiskit/pulse/transforms/canonicalization.py +0 -498
  401. qiskit/pulse/transforms/dag.py +0 -122
  402. qiskit/pulse/utils.py +0 -149
  403. qiskit/qobj/__init__.py +0 -75
  404. qiskit/qobj/common.py +0 -81
  405. qiskit/qobj/converters/__init__.py +0 -18
  406. qiskit/qobj/converters/lo_config.py +0 -177
  407. qiskit/qobj/converters/pulse_instruction.py +0 -897
  408. qiskit/qobj/pulse_qobj.py +0 -709
  409. qiskit/qobj/qasm_qobj.py +0 -708
  410. qiskit/qobj/utils.py +0 -46
  411. qiskit/result/mitigation/base_readout_mitigator.py +0 -79
  412. qiskit/result/mitigation/correlated_readout_mitigator.py +0 -277
  413. qiskit/result/mitigation/local_readout_mitigator.py +0 -328
  414. qiskit/result/mitigation/utils.py +0 -217
  415. qiskit/scheduler/__init__.py +0 -40
  416. qiskit/scheduler/config.py +0 -37
  417. qiskit/scheduler/lowering.py +0 -187
  418. qiskit/scheduler/methods/__init__.py +0 -15
  419. qiskit/scheduler/methods/basic.py +0 -140
  420. qiskit/scheduler/schedule_circuit.py +0 -69
  421. qiskit/scheduler/sequence.py +0 -104
  422. qiskit/transpiler/passes/calibration/__init__.py +0 -17
  423. qiskit/transpiler/passes/calibration/base_builder.py +0 -79
  424. qiskit/transpiler/passes/calibration/builders.py +0 -20
  425. qiskit/transpiler/passes/calibration/exceptions.py +0 -22
  426. qiskit/transpiler/passes/calibration/pulse_gate.py +0 -100
  427. qiskit/transpiler/passes/calibration/rx_builder.py +0 -164
  428. qiskit/transpiler/passes/calibration/rzx_builder.py +0 -411
  429. qiskit/transpiler/passes/calibration/rzx_templates.py +0 -58
  430. qiskit/transpiler/passes/optimization/cx_cancellation.py +0 -65
  431. qiskit/transpiler/passes/optimization/echo_rzx_weyl_decomposition.py +0 -162
  432. qiskit/transpiler/passes/optimization/normalize_rx_angle.py +0 -157
  433. qiskit/transpiler/passes/routing/stochastic_swap.py +0 -532
  434. qiskit/transpiler/passes/scheduling/alap.py +0 -153
  435. qiskit/transpiler/passes/scheduling/alignments/align_measures.py +0 -255
  436. qiskit/transpiler/passes/scheduling/alignments/pulse_gate_validation.py +0 -107
  437. qiskit/transpiler/passes/scheduling/asap.py +0 -175
  438. qiskit/transpiler/passes/scheduling/base_scheduler.py +0 -310
  439. qiskit/transpiler/passes/scheduling/dynamical_decoupling.py +0 -313
  440. qiskit/transpiler/passes/utils/convert_conditions_to_if_ops.py +0 -93
  441. qiskit/utils/deprecate_pulse.py +0 -119
  442. qiskit/utils/multiprocessing.py +0 -56
  443. qiskit/visualization/pulse_v2/__init__.py +0 -21
  444. qiskit/visualization/pulse_v2/core.py +0 -901
  445. qiskit/visualization/pulse_v2/device_info.py +0 -173
  446. qiskit/visualization/pulse_v2/drawings.py +0 -253
  447. qiskit/visualization/pulse_v2/events.py +0 -254
  448. qiskit/visualization/pulse_v2/generators/__init__.py +0 -40
  449. qiskit/visualization/pulse_v2/generators/barrier.py +0 -76
  450. qiskit/visualization/pulse_v2/generators/chart.py +0 -208
  451. qiskit/visualization/pulse_v2/generators/frame.py +0 -436
  452. qiskit/visualization/pulse_v2/generators/snapshot.py +0 -133
  453. qiskit/visualization/pulse_v2/generators/waveform.py +0 -645
  454. qiskit/visualization/pulse_v2/interface.py +0 -459
  455. qiskit/visualization/pulse_v2/layouts.py +0 -387
  456. qiskit/visualization/pulse_v2/plotters/__init__.py +0 -17
  457. qiskit/visualization/pulse_v2/plotters/base_plotter.py +0 -53
  458. qiskit/visualization/pulse_v2/plotters/matplotlib.py +0 -201
  459. qiskit/visualization/pulse_v2/stylesheet.py +0 -312
  460. qiskit/visualization/pulse_v2/types.py +0 -242
  461. {qiskit-1.4.1.dist-info → qiskit-2.0.0.dist-info/licenses}/LICENSE.txt +0 -0
  462. {qiskit-1.4.1.dist-info → qiskit-2.0.0.dist-info}/top_level.txt +0 -0
@@ -10,38 +10,124 @@
10
10
  # copyright notice, and modified files need to carry a notice indicating
11
11
  # that they have been altered from the originals.
12
12
 
13
- """
13
+
14
+ r"""
14
15
  ===============================================
15
16
  Circuit Library (:mod:`qiskit.circuit.library`)
16
17
  ===============================================
17
18
 
18
19
  .. currentmodule:: qiskit.circuit.library
19
20
 
20
- The circuit library is a collection of well-studied and valuable circuits, directives, and gates.
21
- We call them valuable for different reasons, for instance they can serve as building blocks for
22
- algorithms or they are circuits that we think are hard to simulate classically.
21
+ The circuit library is a collection of valuable circuits and building blocks. We call these valuable
22
+ for different reasons. For instance, they can be used as building blocks for algorithms, serve as
23
+ benchmarks, or they are circuits conjectured to be difficult to simulate classically.
24
+
25
+ Elements in the circuit library are either :class:`.QuantumCircuit`\ s or
26
+ :class:`~.circuit.Instruction`\ s, allowing them to be easily investigated or plugged into other
27
+ circuits. This enables fast prototyping and circuit design at higher levels of abstraction.
23
28
 
24
- Each element can be plugged into a circuit using the :meth:`.QuantumCircuit.append`
25
- method and so the circuit library allows users to program at higher levels of abstraction.
26
- For example, to append a multi-controlled CNOT:
29
+ For example:
27
30
 
28
31
  .. plot::
29
- :alt: Circuit diagram output by the previous code.
32
+ :alt: A circuit implementing a Suzuki-Trotter expansion of a Hamiltonian evolution.
30
33
  :include-source:
31
34
 
32
- from qiskit.circuit.library import MCXGate
33
- gate = MCXGate(4)
35
+ from qiskit.circuit import QuantumCircuit
36
+ from qiskit.circuit.library import PauliEvolutionGate
37
+ from qiskit.quantum_info import SparsePauliOp
34
38
 
35
- from qiskit import QuantumCircuit
36
- circuit = QuantumCircuit(5)
37
- circuit.append(gate, [0, 1, 4, 2, 3])
38
- circuit.draw('mpl')
39
+ hamiltonian = SparsePauliOp(["ZZI", "IZZ", "IXI"], coeffs=[1, 1, -1])
40
+ gate = PauliEvolutionGate(hamiltonian)
39
41
 
40
- The library is organized in several sections. The function
41
- :func:`.get_standard_gate_name_mapping` allows you to see the available standard gates and operations.
42
+ circuit = QuantumCircuit(hamiltonian.num_qubits)
43
+ circuit.append(gate, circuit.qubits)
42
44
 
43
- .. autofunction:: get_standard_gate_name_mapping
45
+ circuit.draw("mpl")
46
+
47
+ This library is organized in different sections:
44
48
 
49
+ * :ref:`Standard gates <standard-gates>`
50
+ * :ref:`Standard directives <standard-directives>`
51
+ * :ref:`Standard operations <standard-operations>`
52
+ * :ref:`Generalized gates <generalized-gates>`
53
+ * :ref:`Arithmetic operations <arithmetic>`
54
+ * :ref:`Basis changes <basis-change>`
55
+ * :ref:`Boolean logic <boolean-logic>`
56
+ * :ref:`Data encoding <data-encoding>`
57
+ * :ref:`Data preparation <data-preparation>`
58
+ * :ref:`Particular operations <particular>`
59
+ * :ref:`N-local circuits <n-local>`
60
+ * :ref:`Oracles <oracles>`
61
+ * :ref:`Template circuits <template>`
62
+
63
+ We distinguish into different categories of operations:
64
+
65
+ Standard gates
66
+ These are fundamental quantum gates, a subset of which typically forms a basis gate
67
+ set on a quantum computer. These are unitary operations represented as :class:`.Gate`.
68
+ The library also provides standard compiler directives (a :class:`.Barrier`) and non-unitary
69
+ operations (like :class:`.Measure`).
70
+
71
+ Abstract operations
72
+ This category includes operations that are defined by a mathematical action, but can be implemented
73
+ with different decompositions. For example, a multi-controlled :class:`.XGate` flips the target
74
+ qubit if all control qubits are :math:`|1\rangle`, and there are a variety of concrete circuits
75
+ implementing this operation using lower-level gates. Such abstract operations are represented as
76
+ :class:`.Gate` or :class:`~.circuit.Instruction`. This allows building the circuit without choosing
77
+ a concrete implementation of each block and, finally, let the compiler (or you as user) choose the
78
+ optimal decomposition. For example:
79
+
80
+ .. plot::
81
+ :alt: A circuit with a multi-controlled X gate.
82
+ :include-source:
83
+
84
+ from qiskit.circuit.library import MCXGate
85
+ mcx = MCXGate(4)
86
+
87
+ from qiskit import QuantumCircuit
88
+ circuit = QuantumCircuit(5)
89
+ circuit.append(mcx, [0, 1, 4, 2, 3])
90
+ circuit.draw("mpl")
91
+
92
+ For circuits with abstract operations, the circuit context is taken into account during
93
+ transpilation. For example, if idle qubits are available, they can be used to obtain a shallower
94
+ circuit::
95
+
96
+ from qiskit import transpile
97
+
98
+ small_circuit = QuantumCircuit(5) # here we have no idle qubits
99
+ small_circuit.append(mcx, [0, 1, 4, 2, 3])
100
+ small_tqc = transpile(small_circuit, basis_gates=["u", "cx"])
101
+ print("No aux:", small_tqc.count_ops())
102
+
103
+ large_circuit = QuantumCircuit(10) # now we will have 5 idle qubits
104
+ large_circuit.append(mcx, [0, 1, 4, 2, 3])
105
+ large_tqc = transpile(large_circuit, basis_gates=["u", "cx"])
106
+ print("With aux:", large_tqc.count_ops())
107
+
108
+ Which prints:
109
+
110
+ .. parsed-literal::
111
+
112
+ No aux: OrderedDict([('u', 41), ('cx', 36)])
113
+ With aux: OrderedDict([('u', 24), ('cx', 18)])
114
+
115
+ Structural operations
116
+ These operations have a unique decomposition. As the compiler does not need to reason about
117
+ them on a higher level, they are implemented as functions that return a :class:`.QuantumCircuit`
118
+ object. For example:
119
+
120
+ .. plot::
121
+ :alt: The real amplitudes ansatz circuit.
122
+ :include-source:
123
+
124
+ from qiskit.circuit.library import real_amplitudes
125
+
126
+ ansatz = real_amplitudes(5, entanglement="pairwise")
127
+ ansatz.draw("mpl")
128
+
129
+
130
+ .. _standard-gates:
45
131
 
46
132
  Standard gates
47
133
  ==============
@@ -53,12 +139,15 @@ and :meth:`~qiskit.circuit.Gate.control`, which we can generally only apply to u
53
139
 
54
140
  For example:
55
141
 
56
- .. code-block::
142
+ .. plot::
143
+ :alt: The X gate and the matrix, power, and control methods.
144
+ :include-source:
145
+ :nofigs:
57
146
 
58
147
  from qiskit.circuit.library import XGate
59
148
  gate = XGate()
60
149
  print(gate.to_matrix()) # X gate
61
- print(gate.power(1/2).to_matrix()) # √X gate
150
+ print(gate.power(1/2).to_matrix()) # √X gate -- see also the SXGate
62
151
  print(gate.control(1).to_matrix()) # CX (controlled X) gate
63
152
 
64
153
  .. code-block:: text
@@ -72,52 +161,27 @@ For example:
72
161
  [0.+0.j 0.+0.j 1.+0.j 0.+0.j]
73
162
  [0.+0.j 1.+0.j 0.+0.j 0.+0.j]]
74
163
 
164
+
165
+ The function :func:`.get_standard_gate_name_mapping` allows you to see the available standard gates
166
+ and operations.
167
+
168
+ .. autofunction:: get_standard_gate_name_mapping
169
+
170
+ 1-qubit standard gates
171
+ ----------------------
172
+
75
173
  .. autosummary::
76
174
  :toctree: ../stubs/
77
- :template: autosummary/class_no_inherited_members.rst
78
175
 
79
- C3XGate
80
- C3SXGate
81
- C4XGate
82
- CCXGate
83
- DCXGate
84
- CHGate
85
- CPhaseGate
86
- CRXGate
87
- CRYGate
88
- CRZGate
89
- CSGate
90
- CSdgGate
91
- CSwapGate
92
- CSXGate
93
- CUGate
94
- CU1Gate
95
- CU3Gate
96
- CXGate
97
- CYGate
98
- CZGate
99
- CCZGate
100
- ECRGate
101
176
  HGate
102
177
  IGate
103
- MSGate
104
178
  PhaseGate
105
- RCCXGate
106
- RC3XGate
107
179
  RGate
108
180
  RXGate
109
- RXXGate
110
181
  RYGate
111
- RYYGate
112
182
  RZGate
113
- RZZGate
114
- RZXGate
115
- XXMinusYYGate
116
- XXPlusYYGate
117
183
  SGate
118
184
  SdgGate
119
- SwapGate
120
- iSwapGate
121
185
  SXGate
122
186
  SXdgGate
123
187
  TGate
@@ -129,9 +193,66 @@ For example:
129
193
  XGate
130
194
  YGate
131
195
  ZGate
196
+
197
+ 2-qubit standard gates
198
+ ----------------------
199
+
200
+ .. autosummary::
201
+ :toctree: ../stubs/
202
+
203
+ CHGate
204
+ CPhaseGate
205
+ CRXGate
206
+ CRYGate
207
+ CRZGate
208
+ CSGate
209
+ CSdgGate
210
+ CSXGate
211
+ CUGate
212
+ CU1Gate
213
+ CU3Gate
214
+ CXGate
215
+ CYGate
216
+ CZGate
217
+ DCXGate
218
+ ECRGate
219
+ iSwapGate
220
+ RXXGate
221
+ RYYGate
222
+ RZXGate
223
+ RZZGate
224
+ SwapGate
225
+ XXMinusYYGate
226
+ XXPlusYYGate
227
+
228
+ 3+ qubit standard gates
229
+ -----------------------
230
+
231
+ .. autosummary::
232
+ :toctree: ../stubs/
233
+
234
+ C3SXGate
235
+ C3XGate
236
+ C4XGate
237
+ CCXGate
238
+ CCZGate
239
+ CSwapGate
240
+ RCCXGate
241
+ RC3XGate
242
+
243
+ Global standard gates
244
+ ---------------------
245
+
246
+ The following gate is global and does not take any qubit arguments.
247
+
248
+ .. autosummary::
249
+ :toctree: ../stubs/
250
+
132
251
  GlobalPhaseGate
133
252
 
134
253
 
254
+ .. _standard-directives:
255
+
135
256
  Standard Directives
136
257
  ===================
137
258
 
@@ -139,24 +260,28 @@ Directives are operations to the quantum stack that are meant to be interpreted
139
260
  the transpiler. In general, the transpiler or backend might optionally ignore them if there is no
140
261
  implementation for them.
141
262
 
142
- * :class:`qiskit.circuit.Barrier`
263
+ * :class:`~qiskit.circuit.Barrier`
264
+
265
+
266
+ .. _standard-operations:
143
267
 
144
268
  Standard Operations
145
269
  ===================
146
270
 
147
271
  Operations are non-reversible changes in the quantum state of the circuit.
148
272
 
149
- * :class:`qiskit.circuit.Measure`
150
- * :class:`qiskit.circuit.Reset`
273
+ * :class:`~qiskit.circuit.Measure`
274
+ * :class:`~qiskit.circuit.Reset`
151
275
 
152
- Generalized Gates
153
- =================
154
276
 
155
- These "gates" (many are :class:`~qiskit.circuit.QuantumCircuit` subclasses) allow to
156
- set the amount of qubits involved at instantiation time.
277
+ .. _generalized-gates:
157
278
 
279
+ Generalized Gates
280
+ =================
158
281
 
159
- .. code-block::
282
+ This module extends the standard gates with a broader collection of basic gates. This includes
283
+ gates that are variadic, meaning that the number of qubits depends on the input.
284
+ For example::
160
285
 
161
286
  from qiskit.circuit.library import DiagonalGate
162
287
 
@@ -166,33 +291,22 @@ set the amount of qubits involved at instantiation time.
166
291
  diagonal = DiagonalGate([1, 1, 1, -1])
167
292
  print(diagonal.num_qubits)
168
293
 
294
+ which prints:
295
+
169
296
  .. code-block:: text
170
297
 
171
298
  1
172
299
  2
173
300
 
174
-
175
301
  .. autosummary::
176
302
  :toctree: ../stubs/
177
- :template: autosummary/class_no_inherited_members.rst
178
303
 
179
- Diagonal
180
304
  DiagonalGate
181
- MCMT
182
- MCMTVChain
183
- Permutation
184
305
  PermutationGate
185
- GMS
186
- GR
187
- GRX
188
- GRY
189
- GRZ
190
306
  MCMTGate
191
307
  MCPhaseGate
192
308
  MCXGate
193
- MCXGrayCode
194
- MCXRecursive
195
- MCXVChain
309
+ MSGate
196
310
  RVGate
197
311
  PauliGate
198
312
  LinearFunction
@@ -204,75 +318,117 @@ set the amount of qubits involved at instantiation time.
204
318
  UCRYGate
205
319
  UCRZGate
206
320
 
207
- Boolean Logic Circuits
208
- ======================
321
+ The above objects derive :class:`.Gate` or :class:`~.circuit.Instruction`, which allows the
322
+ compiler to reason about them on an abstract level. We therefore suggest using these instead
323
+ of the following, which derive :class:`.QuantumCircuit` and are eagerly constructed.
209
324
 
210
- These are :class:`~qiskit.circuit.QuantumCircuit` subclasses
211
- that implement boolean logic operations, such as the logical
212
- or of a set of qubit states.
325
+ .. autosummary::
326
+ :toctree: ../stubs/
327
+ :template: autosummary/class_no_inherited_members.rst
213
328
 
329
+ Diagonal
330
+ MCMT
331
+ MCMTVChain
332
+ MCXGrayCode
333
+ MCXRecursive
334
+ MCXVChain
335
+ Permutation
336
+ GMS
337
+ GR
338
+ GRX
339
+ GRY
340
+ GRZ
341
+
342
+ .. _boolean-logic:
343
+
344
+ Boolean Logic
345
+ =============
346
+
347
+ These :class:`.Gate`\ s implement boolean logic operations, such as the logical
348
+ ``or`` of a set of qubit states.
214
349
 
215
350
  .. autosummary::
216
351
  :toctree: ../stubs/
217
- :template: autosummary/class_no_inherited_members.rst
218
352
 
219
- AND
220
353
  AndGate
221
- OR
222
354
  OrGate
223
- XOR
224
355
  BitwiseXorGate
225
- random_bitwise_xor
226
- InnerProduct
227
356
  InnerProductGate
228
357
 
358
+ The above objects derive :class:`.Gate` (or return this type), which allows the
359
+ compiler to reason about them on an abstract level. We therefore suggest using these instead
360
+ of the following which derive :class:`.QuantumCircuit` and are eagerly constructed.
229
361
 
230
- Basis Change Circuits
231
- =====================
362
+ .. autosummary::
363
+ :toctree: ../stubs/
364
+ :template: autosummary/class_no_inherited_members.rst
232
365
 
233
- These circuits allow basis transformations of the qubit states. For example,
234
- in the case of the Quantum Fourier Transform (QFT), it transforms between
235
- the computational basis and the Fourier basis.
366
+ AND
367
+ OR
368
+ XOR
369
+ InnerProduct
370
+
371
+
372
+ A random bitwise ``xor`` circuit can be directly generated using:
236
373
 
237
374
  .. autosummary::
238
375
  :toctree: ../stubs/
239
- :template: autosummary/class_no_inherited_members.rst
240
376
 
241
- QFT
242
- QFTGate
377
+ random_bitwise_xor
243
378
 
244
- Arithmetic Circuits
245
- ===================
379
+ .. _basis-change:
246
380
 
247
- These :class:`~qiskit.circuit.QuantumCircuit`\\ s perform classical arithmetic,
248
- such as addition or multiplication.
381
+ Basis Change
382
+ ============
249
383
 
250
- Amplitude Functions
251
- -------------------
384
+ These gates perform basis transformations of the qubit states. For example,
385
+ in the case of the Quantum Fourier Transform (QFT), it transforms between
386
+ the computational basis and the Fourier basis.
252
387
 
253
388
  .. autosummary::
254
389
  :toctree: ../stubs/
255
- :template: autosummary/class_no_inherited_members.rst
256
390
 
257
- LinearAmplitudeFunction
391
+ QFTGate
258
392
 
259
- Functional Pauli Rotations
260
- --------------------------
393
+ The above object derives :class:`.Gate`, which allows the
394
+ compiler to reason about it on an abstract level. We therefore suggest using this instead
395
+ of the following which derives :class:`.QuantumCircuit` and is eagerly constructed.
261
396
 
262
397
  .. autosummary::
263
398
  :toctree: ../stubs/
264
399
  :template: autosummary/class_no_inherited_members.rst
265
400
 
266
- FunctionalPauliRotations
267
- LinearPauliRotations
268
- PolynomialPauliRotations
269
- PiecewiseLinearPauliRotations
270
- PiecewisePolynomialPauliRotations
271
- PiecewiseChebyshev
401
+ QFT
402
+
403
+ .. _arithmetic:
404
+
405
+ Arithmetic
406
+ ==========
407
+
408
+ These gates and circuits perform classical arithmetic, such as addition or multiplication.
272
409
 
273
410
  Adders
274
411
  ------
275
412
 
413
+ Adders compute the sum of two :math:`n`-qubit registers, that is
414
+
415
+ .. math::
416
+
417
+ |a\rangle_n |b\rangle_n \mapsto |a\rangle_n |a + b\rangle_{t},
418
+
419
+ where the size :math:`t` of the output register depends on the type of adder used.
420
+
421
+ .. autosummary::
422
+ :toctree: ../stubs/
423
+
424
+ ModularAdderGate
425
+ HalfAdderGate
426
+ FullAdderGate
427
+
428
+ The above objects derive :class:`.Gate`, which allows the
429
+ compiler to reason about them on an abstract level. We therefore suggest using these instead
430
+ of the following which derive :class:`.QuantumCircuit` and are eagerly constructed.
431
+
276
432
  .. autosummary::
277
433
  :toctree: ../stubs/
278
434
  :template: autosummary/class_no_inherited_members.rst
@@ -280,79 +436,129 @@ Adders
280
436
  DraperQFTAdder
281
437
  CDKMRippleCarryAdder
282
438
  VBERippleCarryAdder
283
- WeightedAdder
284
- ModularAdderGate
285
- HalfAdderGate
286
- FullAdderGate
287
439
 
288
440
  Multipliers
289
441
  -----------
290
442
 
443
+ Multipliers compute the product of two :math:`n`-qubit registers, that is
444
+
445
+ .. math::
446
+
447
+ |a\rangle_n |b\rangle_n |0\rangle_{t} \mapsto |a\rangle_n |b\rangle_n |a \cdot b\rangle_t,
448
+
449
+ where :math:`t` is the number of bits used to represent the result.
450
+
451
+ .. autosummary::
452
+ :toctree: ../stubs/
453
+
454
+ MultiplierGate
455
+
456
+ The above object derives :class:`.Gate`, which allows the
457
+ compiler to reason about it on an abstract level. We therefore suggest using this instead
458
+ of the following which derive :class:`.QuantumCircuit` and are eagerly constructed.
459
+
291
460
  .. autosummary::
292
461
  :toctree: ../stubs/
293
462
  :template: autosummary/class_no_inherited_members.rst
294
463
 
295
464
  HRSCumulativeMultiplier
296
465
  RGQFTMultiplier
297
- MultiplierGate
298
466
 
299
- Comparators
300
- -----------
467
+ Amplitude Functions
468
+ -------------------
469
+
470
+ An amplitude function approximates a function :math:`f: \{0, ..., 2^n - 1\} \rightarrow [0, 1]`
471
+ applied on the amplitudes of :math:`n` qubits. See the class docstring for more detailed information.
301
472
 
302
473
  .. autosummary::
303
474
  :toctree: ../stubs/
304
- :template: autosummary/class_no_inherited_members.rst
305
475
 
306
- IntegerComparator
476
+ LinearAmplitudeFunctionGate
307
477
 
308
- Functions on binary variables
309
- -----------------------------
478
+ The above object derives :class:`.Gate`, which allows the
479
+ compiler to reason about it on an abstract level. We therefore suggest using this instead
480
+ of the following which derives :class:`.QuantumCircuit` and is eagerly constructed.
310
481
 
311
482
  .. autosummary::
312
483
  :toctree: ../stubs/
313
484
  :template: autosummary/class_no_inherited_members.rst
314
485
 
315
- QuadraticForm
486
+ LinearAmplitudeFunction
316
487
 
317
- Other arithmetic functions
488
+ Functional Pauli Rotations
318
489
  --------------------------
319
490
 
491
+ Functional Pauli rotations implement operations of the form
492
+
493
+ .. math::
494
+
495
+ |x\rangle |0\rangle \mapsto \cos(f(x))|x\rangle|0\rangle + \sin(f(x))|x\rangle|1\rangle
496
+
497
+ using Pauli-:math:`Y` rotations for different types of functions :math:`f`, such as linear,
498
+ polynomial, or a piecewise version of these. They are similar to the amplitude functions above, but
499
+ without pre- and post-processing for the domain and image of the target function.
500
+
501
+ .. autosummary::
502
+ :toctree: ../stubs/
503
+
504
+ LinearPauliRotationsGate
505
+ PolynomialPauliRotationsGate
506
+ PiecewiseLinearPauliRotationsGate
507
+ PiecewisePolynomialPauliRotationsGate
508
+ PiecewiseChebyshevGate
509
+
510
+ The above objects derive :class:`.Gate`, which allows the
511
+ compiler to reason about them on an abstract level. We therefore suggest using these instead
512
+ of the following which derive :class:`.QuantumCircuit` and are eagerly constructed.
513
+
320
514
  .. autosummary::
321
515
  :toctree: ../stubs/
322
516
  :template: autosummary/class_no_inherited_members.rst
323
517
 
324
- ExactReciprocal
518
+ FunctionalPauliRotations
519
+ LinearPauliRotations
520
+ PolynomialPauliRotations
521
+ PiecewiseLinearPauliRotations
522
+ PiecewisePolynomialPauliRotations
523
+ PiecewiseChebyshev
325
524
 
326
- Particular Quantum Circuits
327
- ===========================
328
525
 
329
- The following gates and quantum circuits define specific
330
- quantum circuits of interest:
526
+ Other arithmetic functions
527
+ --------------------------
528
+
529
+ Here we list additional arithmetic circuits. See the individual class docstrings for more details.
331
530
 
332
531
  .. autosummary::
333
532
  :toctree: ../stubs/
334
- :template: autosummary/class_no_inherited_members.rst
335
533
 
336
- FourierChecking
337
- GraphState
338
- GraphStateGate
339
- HiddenLinearFunction
340
- IQP
341
- QuantumVolume
342
- PhaseEstimation
343
- GroverOperator
344
- PhaseOracle
345
- PauliEvolutionGate
346
- HamiltonianGate
347
- UnitaryOverlap
534
+ ExactReciprocalGate
535
+ IntegerComparatorGate
536
+ QuadraticFormGate
537
+ WeightedSumGate
348
538
 
349
- For circuits that have a well-defined structure it is preferrable
350
- to use the following functions to construct them:
539
+ The above objects derive :class:`.Gate`, which allows the
540
+ compiler to reason about them on an abstract level. We therefore suggest using these instead
541
+ of the following which derive :class:`.QuantumCircuit` and are eagerly constructed.
351
542
 
352
543
  .. autosummary::
353
544
  :toctree: ../stubs/
354
545
  :template: autosummary/class_no_inherited_members.rst
355
546
 
547
+ ExactReciprocal
548
+ IntegerComparator
549
+ QuadraticForm
550
+ WeightedAdder
551
+
552
+ .. _particular:
553
+
554
+ Particular Quantum Circuits
555
+ ===========================
556
+
557
+ The following gates and quantum circuits define specific operations of interest:
558
+
559
+ .. autosummary::
560
+ :toctree: ../stubs/
561
+
356
562
  fourier_checking
357
563
  hidden_linear_function
358
564
  iqp
@@ -361,17 +567,68 @@ to use the following functions to construct them:
361
567
  phase_estimation
362
568
  grover_operator
363
569
  unitary_overlap
570
+ GraphStateGate
571
+ PauliEvolutionGate
572
+ HamiltonianGate
364
573
 
574
+ Below we provide the same operations as classes deriving :class:`.QuantumCircuit`. For better
575
+ runtime and compiler performance, however, we suggest using above functions and gates.
576
+
577
+ .. autosummary::
578
+ :toctree: ../stubs/
579
+ :template: autosummary/class_no_inherited_members.rst
580
+
581
+ FourierChecking
582
+ GraphState
583
+ HiddenLinearFunction
584
+ IQP
585
+ QuantumVolume
586
+ PhaseEstimation
587
+ GroverOperator
588
+ UnitaryOverlap
589
+
590
+ .. _n-local:
365
591
 
366
592
  N-local circuits
367
593
  ================
368
594
 
369
595
  The following functions return a parameterized :class:`.QuantumCircuit` to use as ansatz in
370
- a broad set of variational quantum algorithms:
596
+ a broad set of variational quantum algorithms.
597
+
598
+ For example, we can build a variational circuit
599
+
600
+ .. plot::
601
+ :alt: The efficient SU2 ansatz circuit...
602
+ :context:
603
+
604
+ from qiskit.circuit.library import efficient_su2
605
+
606
+ num_qubits = 4
607
+ ansatz = efficient_su2(num_qubits, entanglement="pairwise")
608
+ ansatz.draw("mpl")
609
+
610
+ and combine it with
611
+
612
+ .. plot::
613
+ :alt: ... combined with the ZZ feature map.
614
+ :include-source:
615
+ :context:
616
+
617
+ from qiskit.circuit.library import zz_feature_map
618
+
619
+ circuit = zz_feature_map(num_qubits)
620
+ circuit.barrier()
621
+ circuit.compose(ansatz, inplace=True)
622
+
623
+ circuit.draw("mpl")
624
+
625
+ to obtain a circuit for variational quantum classification.
626
+
627
+ The following functions all construct variational circuits and are optimized for a fast
628
+ construction:
371
629
 
372
630
  .. autosummary::
373
631
  :toctree: ../stubs/
374
- :template: autosummary/class_no_inherited_members.rst
375
632
 
376
633
  n_local
377
634
  efficient_su2
@@ -382,9 +639,9 @@ a broad set of variational quantum algorithms:
382
639
  hamiltonian_variational_ansatz
383
640
  evolved_operator_ansatz
384
641
 
385
- These :class:`~qiskit.circuit.library.BlueprintCircuit` subclasses are used
386
- as parameterized models (a.k.a. ansatzes or variational forms) in variational algorithms.
387
- They are heavily used in near-term algorithms in e.g. Chemistry, Physics or Optimization.
642
+ While we suggest using the above functions, we also continue supporting the following
643
+ :class:`.BlueprintCircuit`, which wrap the circuits into a block
644
+ and allow for inplace mutations of the circuits:
388
645
 
389
646
  .. autosummary::
390
647
  :toctree: ../stubs/
@@ -400,6 +657,8 @@ They are heavily used in near-term algorithms in e.g. Chemistry, Physics or Opti
400
657
  QAOAAnsatz
401
658
 
402
659
 
660
+ .. _data-encoding:
661
+
403
662
  Data encoding circuits
404
663
  ======================
405
664
 
@@ -408,14 +667,14 @@ encoding circuits in a series of variational quantum algorithms:
408
667
 
409
668
  .. autosummary::
410
669
  :toctree: ../stubs/
411
- :template: autosummary/class_no_inherited_members.rst
412
670
 
413
671
  pauli_feature_map
414
672
  z_feature_map
415
673
  zz_feature_map
416
674
 
417
- These :class:`~qiskit.circuit.library.BlueprintCircuit` encode classical
418
- data in quantum states and are used as feature maps for classification.
675
+ While we suggest using the above functions, we also continue supporting the following
676
+ :class:`.BlueprintCircuit`, which wrap the circuits into a block
677
+ and allow for inplace mutations of the circuits:
419
678
 
420
679
  .. autosummary::
421
680
  :toctree: ../stubs/
@@ -426,6 +685,8 @@ data in quantum states and are used as feature maps for classification.
426
685
  ZZFeatureMap
427
686
 
428
687
 
688
+ .. _data-preparation:
689
+
429
690
  Data preparation circuits
430
691
  =========================
431
692
 
@@ -433,11 +694,51 @@ The following operations are used for state preparation:
433
694
 
434
695
  .. autosummary::
435
696
  :toctree: ../stubs/
436
- :template: autosummary/class_no_inherited_members.rst
437
697
 
438
698
  StatePreparation
439
699
  Initialize
440
700
 
701
+ .. _oracles:
702
+
703
+ Oracles
704
+ =======
705
+
706
+ An "oracle" can refer to a variety of black-box operations on quantum states. Here, we consider
707
+ oracles implementing boolean functions :math:`f: \{0, ..., 2^n - 1\} \rightarrow \{0, 1\}` via
708
+ phase-flips
709
+
710
+ .. math::
711
+
712
+ |x\rangle_n \mapsto (-1)^{f(x)} |x\rangle_n,
713
+
714
+ or bit-flips
715
+
716
+ .. math::
717
+
718
+ |x\rangle_n |b\rangle \mapsto |x\rangle_n |b \oplus f(x)\rangle.
719
+
720
+ These are implemented in
721
+
722
+ .. autosummary::
723
+ :toctree: ../stubs/
724
+
725
+ PhaseOracleGate
726
+ BitFlipOracleGate
727
+
728
+ and an important building block for Grover's algorithm (see :func:`.grover_operator`).
729
+
730
+ In addition to the :class:`.Gate`-based implementation we also support the
731
+ :class:`.QuantumCircuit`-version of the phase flip oracle
732
+
733
+ .. autosummary::
734
+ :toctree: ../stubs/
735
+ :template: autosummary/class_no_inherited_members.rst
736
+
737
+ PhaseOracle
738
+
739
+
740
+ .. _template:
741
+
441
742
  Template circuits
442
743
  =================
443
744
 
@@ -447,7 +748,10 @@ to replace the match with the inverse of the remainder from the template.
447
748
 
448
749
  In this example, the identity constant in a template is checked:
449
750
 
450
- .. code-block::
751
+ .. plot::
752
+ :alt: A Toffoli template circuit.
753
+ :include-source:
754
+ :nofigs:
451
755
 
452
756
  from qiskit.circuit.library.templates import template_nct_4b_1
453
757
  from qiskit.quantum_info import Operator
@@ -613,20 +917,30 @@ from .arithmetic import (
613
917
  MultiplierGate,
614
918
  FunctionalPauliRotations,
615
919
  LinearPauliRotations,
920
+ LinearPauliRotationsGate,
616
921
  PiecewiseLinearPauliRotations,
922
+ PiecewiseLinearPauliRotationsGate,
617
923
  PiecewisePolynomialPauliRotations,
924
+ PiecewisePolynomialPauliRotationsGate,
618
925
  PolynomialPauliRotations,
926
+ PolynomialPauliRotationsGate,
619
927
  IntegerComparator,
928
+ IntegerComparatorGate,
620
929
  WeightedAdder,
930
+ WeightedSumGate,
621
931
  QuadraticForm,
932
+ QuadraticFormGate,
622
933
  LinearAmplitudeFunction,
934
+ LinearAmplitudeFunctionGate,
623
935
  VBERippleCarryAdder,
624
936
  CDKMRippleCarryAdder,
625
937
  DraperQFTAdder,
626
938
  PiecewiseChebyshev,
939
+ PiecewiseChebyshevGate,
627
940
  HRSCumulativeMultiplier,
628
941
  RGQFTMultiplier,
629
942
  ExactReciprocal,
943
+ ExactReciprocalGate,
630
944
  )
631
945
 
632
946
  from .n_local import (
@@ -664,6 +978,7 @@ from .hidden_linear_function import HiddenLinearFunction, hidden_linear_function
664
978
  from .iqp import IQP, iqp, random_iqp
665
979
  from .phase_estimation import PhaseEstimation, phase_estimation
666
980
  from .grover_operator import GroverOperator, grover_operator
667
- from .phase_oracle import PhaseOracle
981
+ from .phase_oracle import PhaseOracle, PhaseOracleGate
982
+ from .bit_flip_oracle import BitFlipOracleGate
668
983
  from .overlap import UnitaryOverlap, unitary_overlap
669
984
  from .standard_gates import get_standard_gate_name_mapping