qiskit 1.3.0__cp39-abi3-win32.whl → 1.3.0b1__cp39-abi3-win32.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (361) hide show
  1. qiskit/VERSION.txt +1 -1
  2. qiskit/__init__.py +1 -20
  3. qiskit/_accelerate.pyd +0 -0
  4. qiskit/assembler/assemble_schedules.py +0 -2
  5. qiskit/circuit/__init__.py +1 -44
  6. qiskit/circuit/_standard_gates_commutations.py +0 -585
  7. qiskit/circuit/barrier.py +0 -2
  8. qiskit/circuit/controlflow/builder.py +3 -3
  9. qiskit/circuit/controlflow/if_else.py +5 -13
  10. qiskit/circuit/controlflow/while_loop.py +2 -10
  11. qiskit/circuit/delay.py +3 -20
  12. qiskit/circuit/equivalence.py +214 -13
  13. qiskit/circuit/gate.py +1 -3
  14. qiskit/circuit/instruction.py +11 -32
  15. qiskit/circuit/instructionset.py +0 -2
  16. qiskit/circuit/library/__init__.py +14 -110
  17. qiskit/circuit/library/arithmetic/__init__.py +2 -9
  18. qiskit/circuit/library/arithmetic/adders/__init__.py +0 -1
  19. qiskit/circuit/library/arithmetic/adders/adder.py +2 -154
  20. qiskit/circuit/library/arithmetic/adders/cdkm_ripple_carry_adder.py +56 -20
  21. qiskit/circuit/library/arithmetic/adders/draper_qft_adder.py +1 -14
  22. qiskit/circuit/library/arithmetic/adders/vbe_ripple_carry_adder.py +91 -21
  23. qiskit/circuit/library/arithmetic/linear_pauli_rotations.py +1 -1
  24. qiskit/circuit/library/arithmetic/multipliers/__init__.py +0 -1
  25. qiskit/circuit/library/arithmetic/multipliers/hrs_cumulative_multiplier.py +1 -8
  26. qiskit/circuit/library/arithmetic/multipliers/multiplier.py +3 -94
  27. qiskit/circuit/library/arithmetic/multipliers/rg_qft_multiplier.py +1 -8
  28. qiskit/circuit/library/arithmetic/weighted_adder.py +1 -1
  29. qiskit/circuit/library/basis_change/qft.py +38 -20
  30. qiskit/circuit/library/blueprintcircuit.py +0 -64
  31. qiskit/circuit/library/boolean_logic/__init__.py +4 -4
  32. qiskit/circuit/library/boolean_logic/inner_product.py +4 -81
  33. qiskit/circuit/library/boolean_logic/quantum_and.py +4 -107
  34. qiskit/circuit/library/boolean_logic/quantum_or.py +3 -107
  35. qiskit/circuit/library/boolean_logic/quantum_xor.py +3 -97
  36. qiskit/circuit/library/data_preparation/__init__.py +3 -6
  37. qiskit/circuit/library/data_preparation/pauli_feature_map.py +29 -342
  38. qiskit/circuit/library/data_preparation/{_z_feature_map.py → z_feature_map.py} +34 -45
  39. qiskit/circuit/library/data_preparation/zz_feature_map.py +118 -0
  40. qiskit/circuit/library/fourier_checking.py +11 -72
  41. qiskit/circuit/library/generalized_gates/__init__.py +1 -1
  42. qiskit/circuit/library/generalized_gates/diagonal.py +51 -45
  43. qiskit/circuit/library/generalized_gates/gms.py +14 -67
  44. qiskit/circuit/library/generalized_gates/gr.py +4 -4
  45. qiskit/circuit/library/generalized_gates/isometry.py +2 -2
  46. qiskit/circuit/library/generalized_gates/linear_function.py +6 -12
  47. qiskit/circuit/library/generalized_gates/mcmt.py +107 -167
  48. qiskit/circuit/library/generalized_gates/permutation.py +6 -8
  49. qiskit/circuit/library/generalized_gates/rv.py +9 -8
  50. qiskit/circuit/library/graph_state.py +10 -93
  51. qiskit/circuit/library/grover_operator.py +2 -270
  52. qiskit/circuit/library/hidden_linear_function.py +20 -83
  53. qiskit/circuit/library/iqp.py +20 -99
  54. qiskit/circuit/library/n_local/__init__.py +7 -19
  55. qiskit/circuit/library/n_local/efficient_su2.py +5 -118
  56. qiskit/circuit/library/n_local/evolved_operator_ansatz.py +0 -259
  57. qiskit/circuit/library/n_local/excitation_preserving.py +6 -130
  58. qiskit/circuit/library/n_local/n_local.py +5 -406
  59. qiskit/circuit/library/n_local/pauli_two_design.py +4 -106
  60. qiskit/circuit/library/n_local/qaoa_ansatz.py +1 -80
  61. qiskit/circuit/library/n_local/real_amplitudes.py +7 -127
  62. qiskit/circuit/library/n_local/two_local.py +7 -14
  63. qiskit/circuit/library/overlap.py +26 -91
  64. qiskit/circuit/library/pauli_evolution.py +15 -17
  65. qiskit/circuit/library/phase_estimation.py +4 -80
  66. qiskit/circuit/library/quantum_volume.py +20 -72
  67. qiskit/circuit/library/standard_gates/__init__.py +1 -20
  68. qiskit/circuit/library/standard_gates/dcx.py +1 -2
  69. qiskit/circuit/library/standard_gates/ecr.py +2 -2
  70. qiskit/circuit/library/standard_gates/h.py +3 -4
  71. qiskit/circuit/library/standard_gates/i.py +1 -2
  72. qiskit/circuit/library/standard_gates/iswap.py +2 -2
  73. qiskit/circuit/library/standard_gates/p.py +12 -20
  74. qiskit/circuit/library/standard_gates/r.py +1 -1
  75. qiskit/circuit/library/standard_gates/rx.py +3 -4
  76. qiskit/circuit/library/standard_gates/rxx.py +2 -2
  77. qiskit/circuit/library/standard_gates/ry.py +3 -4
  78. qiskit/circuit/library/standard_gates/ryy.py +2 -2
  79. qiskit/circuit/library/standard_gates/rz.py +12 -13
  80. qiskit/circuit/library/standard_gates/rzx.py +6 -6
  81. qiskit/circuit/library/standard_gates/rzz.py +1 -1
  82. qiskit/circuit/library/standard_gates/s.py +4 -4
  83. qiskit/circuit/library/standard_gates/swap.py +3 -3
  84. qiskit/circuit/library/standard_gates/sx.py +3 -4
  85. qiskit/circuit/library/standard_gates/t.py +2 -2
  86. qiskit/circuit/library/standard_gates/u.py +3 -11
  87. qiskit/circuit/library/standard_gates/u1.py +15 -65
  88. qiskit/circuit/library/standard_gates/u2.py +1 -4
  89. qiskit/circuit/library/standard_gates/u3.py +3 -31
  90. qiskit/circuit/library/standard_gates/x.py +5 -7
  91. qiskit/circuit/library/standard_gates/xx_minus_yy.py +2 -2
  92. qiskit/circuit/library/standard_gates/xx_plus_yy.py +2 -2
  93. qiskit/circuit/library/standard_gates/y.py +3 -4
  94. qiskit/circuit/library/standard_gates/z.py +3 -3
  95. qiskit/circuit/library/templates/clifford/clifford_2_1.py +8 -9
  96. qiskit/circuit/library/templates/clifford/clifford_2_2.py +9 -10
  97. qiskit/circuit/library/templates/clifford/clifford_2_3.py +7 -9
  98. qiskit/circuit/library/templates/clifford/clifford_2_4.py +8 -9
  99. qiskit/circuit/library/templates/clifford/clifford_3_1.py +8 -9
  100. qiskit/circuit/library/templates/clifford/clifford_4_1.py +9 -10
  101. qiskit/circuit/library/templates/clifford/clifford_4_2.py +9 -10
  102. qiskit/circuit/library/templates/clifford/clifford_4_3.py +9 -10
  103. qiskit/circuit/library/templates/clifford/clifford_4_4.py +9 -10
  104. qiskit/circuit/library/templates/clifford/clifford_5_1.py +9 -10
  105. qiskit/circuit/library/templates/clifford/clifford_6_1.py +9 -10
  106. qiskit/circuit/library/templates/clifford/clifford_6_2.py +9 -10
  107. qiskit/circuit/library/templates/clifford/clifford_6_3.py +9 -10
  108. qiskit/circuit/library/templates/clifford/clifford_6_4.py +8 -9
  109. qiskit/circuit/library/templates/clifford/clifford_6_5.py +9 -10
  110. qiskit/circuit/library/templates/clifford/clifford_8_1.py +9 -10
  111. qiskit/circuit/library/templates/clifford/clifford_8_2.py +9 -10
  112. qiskit/circuit/library/templates/clifford/clifford_8_3.py +9 -10
  113. qiskit/circuit/library/templates/nct/template_nct_2a_1.py +7 -9
  114. qiskit/circuit/library/templates/nct/template_nct_2a_2.py +8 -10
  115. qiskit/circuit/library/templates/nct/template_nct_2a_3.py +10 -12
  116. qiskit/circuit/library/templates/nct/template_nct_4a_1.py +14 -16
  117. qiskit/circuit/library/templates/nct/template_nct_4a_2.py +12 -14
  118. qiskit/circuit/library/templates/nct/template_nct_4a_3.py +10 -12
  119. qiskit/circuit/library/templates/nct/template_nct_4b_1.py +12 -14
  120. qiskit/circuit/library/templates/nct/template_nct_4b_2.py +10 -12
  121. qiskit/circuit/library/templates/nct/template_nct_5a_1.py +10 -12
  122. qiskit/circuit/library/templates/nct/template_nct_5a_2.py +10 -12
  123. qiskit/circuit/library/templates/nct/template_nct_5a_3.py +10 -12
  124. qiskit/circuit/library/templates/nct/template_nct_5a_4.py +9 -11
  125. qiskit/circuit/library/templates/nct/template_nct_6a_1.py +9 -11
  126. qiskit/circuit/library/templates/nct/template_nct_6a_2.py +10 -12
  127. qiskit/circuit/library/templates/nct/template_nct_6a_3.py +10 -12
  128. qiskit/circuit/library/templates/nct/template_nct_6a_4.py +10 -12
  129. qiskit/circuit/library/templates/nct/template_nct_6b_1.py +10 -12
  130. qiskit/circuit/library/templates/nct/template_nct_6b_2.py +10 -12
  131. qiskit/circuit/library/templates/nct/template_nct_6c_1.py +10 -12
  132. qiskit/circuit/library/templates/nct/template_nct_7a_1.py +11 -13
  133. qiskit/circuit/library/templates/nct/template_nct_7b_1.py +11 -13
  134. qiskit/circuit/library/templates/nct/template_nct_7c_1.py +11 -13
  135. qiskit/circuit/library/templates/nct/template_nct_7d_1.py +11 -13
  136. qiskit/circuit/library/templates/nct/template_nct_7e_1.py +11 -13
  137. qiskit/circuit/library/templates/nct/template_nct_9a_1.py +11 -13
  138. qiskit/circuit/library/templates/nct/template_nct_9c_1.py +9 -11
  139. qiskit/circuit/library/templates/nct/template_nct_9c_10.py +10 -12
  140. qiskit/circuit/library/templates/nct/template_nct_9c_11.py +10 -12
  141. qiskit/circuit/library/templates/nct/template_nct_9c_12.py +10 -12
  142. qiskit/circuit/library/templates/nct/template_nct_9c_2.py +10 -12
  143. qiskit/circuit/library/templates/nct/template_nct_9c_3.py +10 -12
  144. qiskit/circuit/library/templates/nct/template_nct_9c_4.py +10 -12
  145. qiskit/circuit/library/templates/nct/template_nct_9c_5.py +10 -12
  146. qiskit/circuit/library/templates/nct/template_nct_9c_6.py +10 -12
  147. qiskit/circuit/library/templates/nct/template_nct_9c_7.py +10 -12
  148. qiskit/circuit/library/templates/nct/template_nct_9c_8.py +10 -12
  149. qiskit/circuit/library/templates/nct/template_nct_9c_9.py +10 -12
  150. qiskit/circuit/library/templates/nct/template_nct_9d_1.py +9 -11
  151. qiskit/circuit/library/templates/nct/template_nct_9d_10.py +10 -12
  152. qiskit/circuit/library/templates/nct/template_nct_9d_2.py +10 -12
  153. qiskit/circuit/library/templates/nct/template_nct_9d_3.py +10 -12
  154. qiskit/circuit/library/templates/nct/template_nct_9d_4.py +10 -12
  155. qiskit/circuit/library/templates/nct/template_nct_9d_5.py +10 -12
  156. qiskit/circuit/library/templates/nct/template_nct_9d_6.py +10 -12
  157. qiskit/circuit/library/templates/nct/template_nct_9d_7.py +10 -12
  158. qiskit/circuit/library/templates/nct/template_nct_9d_8.py +10 -12
  159. qiskit/circuit/library/templates/nct/template_nct_9d_9.py +10 -12
  160. qiskit/circuit/library/templates/rzx/rzx_cy.py +10 -11
  161. qiskit/circuit/library/templates/rzx/rzx_xz.py +15 -16
  162. qiskit/circuit/library/templates/rzx/rzx_yz.py +10 -12
  163. qiskit/circuit/library/templates/rzx/rzx_zz1.py +20 -22
  164. qiskit/circuit/library/templates/rzx/rzx_zz2.py +15 -16
  165. qiskit/circuit/library/templates/rzx/rzx_zz3.py +15 -17
  166. qiskit/circuit/parameter.py +0 -4
  167. qiskit/circuit/parameterexpression.py +34 -167
  168. qiskit/circuit/quantumcircuit.py +126 -162
  169. qiskit/circuit/singleton.py +0 -2
  170. qiskit/circuit/store.py +0 -2
  171. qiskit/compiler/assembler.py +4 -17
  172. qiskit/compiler/scheduler.py +0 -2
  173. qiskit/compiler/sequencer.py +0 -2
  174. qiskit/compiler/transpiler.py +26 -81
  175. qiskit/converters/circuit_to_dag.py +2 -2
  176. qiskit/converters/circuit_to_dagdependency.py +1 -1
  177. qiskit/converters/circuit_to_dagdependency_v2.py +1 -1
  178. qiskit/converters/circuit_to_instruction.py +1 -1
  179. qiskit/converters/dag_to_circuit.py +5 -7
  180. qiskit/converters/dag_to_dagdependency.py +1 -1
  181. qiskit/converters/dag_to_dagdependency_v2.py +1 -1
  182. qiskit/converters/dagdependency_to_circuit.py +1 -5
  183. qiskit/converters/dagdependency_to_dag.py +1 -6
  184. qiskit/dagcircuit/collect_blocks.py +3 -3
  185. qiskit/dagcircuit/dagdependency.py +5 -18
  186. qiskit/dagcircuit/dagdependency_v2.py +1 -1
  187. qiskit/dagcircuit/dagnode.py +2 -2
  188. qiskit/passmanager/__init__.py +2 -2
  189. qiskit/primitives/backend_estimator.py +2 -5
  190. qiskit/primitives/backend_sampler_v2.py +18 -61
  191. qiskit/primitives/base/base_estimator.py +2 -2
  192. qiskit/primitives/containers/data_bin.py +1 -9
  193. qiskit/primitives/statevector_sampler.py +1 -1
  194. qiskit/primitives/utils.py +1 -1
  195. qiskit/providers/__init__.py +3 -3
  196. qiskit/providers/backend.py +1 -12
  197. qiskit/providers/backend_compat.py +3 -23
  198. qiskit/providers/basic_provider/basic_simulator.py +2 -12
  199. qiskit/providers/fake_provider/fake_pulse_backend.py +1 -6
  200. qiskit/providers/fake_provider/generic_backend_v2.py +30 -46
  201. qiskit/providers/models/pulsedefaults.py +0 -2
  202. qiskit/pulse/builder.py +18 -59
  203. qiskit/pulse/calibration_entries.py +1 -4
  204. qiskit/pulse/channels.py +0 -2
  205. qiskit/pulse/exceptions.py +0 -2
  206. qiskit/pulse/instruction_schedule_map.py +6 -21
  207. qiskit/pulse/instructions/acquire.py +0 -2
  208. qiskit/pulse/instructions/delay.py +0 -2
  209. qiskit/pulse/instructions/directives.py +0 -8
  210. qiskit/pulse/instructions/frequency.py +0 -3
  211. qiskit/pulse/instructions/instruction.py +0 -2
  212. qiskit/pulse/instructions/phase.py +0 -3
  213. qiskit/pulse/instructions/play.py +0 -2
  214. qiskit/pulse/instructions/reference.py +0 -2
  215. qiskit/pulse/instructions/snapshot.py +0 -2
  216. qiskit/pulse/library/pulse.py +0 -2
  217. qiskit/pulse/library/symbolic_pulses.py +0 -28
  218. qiskit/pulse/library/waveform.py +0 -2
  219. qiskit/pulse/macros.py +1 -1
  220. qiskit/pulse/schedule.py +13 -12
  221. qiskit/pulse/transforms/alignments.py +3 -5
  222. qiskit/pulse/transforms/dag.py +0 -7
  223. qiskit/qasm2/export.py +3 -5
  224. qiskit/qasm2/parse.py +2 -46
  225. qiskit/qasm3/__init__.py +0 -1
  226. qiskit/qasm3/ast.py +15 -123
  227. qiskit/qasm3/exporter.py +77 -103
  228. qiskit/qobj/converters/pulse_instruction.py +4 -6
  229. qiskit/qpy/__init__.py +0 -181
  230. qiskit/qpy/binary_io/circuits.py +5 -20
  231. qiskit/qpy/binary_io/schedules.py +4 -3
  232. qiskit/qpy/binary_io/value.py +13 -310
  233. qiskit/qpy/common.py +2 -46
  234. qiskit/qpy/formats.py +0 -7
  235. qiskit/qpy/interface.py +4 -40
  236. qiskit/quantum_info/__init__.py +0 -4
  237. qiskit/quantum_info/operators/channel/transformations.py +21 -28
  238. qiskit/quantum_info/operators/dihedral/dihedral.py +1 -1
  239. qiskit/quantum_info/operators/operator.py +8 -54
  240. qiskit/quantum_info/operators/symplectic/base_pauli.py +19 -11
  241. qiskit/quantum_info/operators/symplectic/clifford.py +1 -1
  242. qiskit/quantum_info/operators/symplectic/clifford_circuits.py +1 -1
  243. qiskit/quantum_info/operators/symplectic/pauli.py +0 -2
  244. qiskit/quantum_info/operators/symplectic/pauli_list.py +4 -4
  245. qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py +2 -23
  246. qiskit/quantum_info/states/densitymatrix.py +5 -5
  247. qiskit/quantum_info/states/stabilizerstate.py +1 -1
  248. qiskit/quantum_info/states/statevector.py +6 -6
  249. qiskit/result/mitigation/base_readout_mitigator.py +1 -1
  250. qiskit/result/mitigation/correlated_readout_mitigator.py +1 -9
  251. qiskit/result/mitigation/local_readout_mitigator.py +1 -9
  252. qiskit/result/mitigation/utils.py +0 -57
  253. qiskit/scheduler/config.py +0 -2
  254. qiskit/scheduler/methods/basic.py +0 -3
  255. qiskit/scheduler/schedule_circuit.py +0 -2
  256. qiskit/scheduler/sequence.py +0 -2
  257. qiskit/synthesis/__init__.py +0 -25
  258. qiskit/synthesis/clifford/clifford_decompose_bm.py +2 -1
  259. qiskit/synthesis/clifford/clifford_decompose_greedy.py +2 -3
  260. qiskit/synthesis/clifford/clifford_decompose_layers.py +1 -2
  261. qiskit/synthesis/evolution/__init__.py +0 -1
  262. qiskit/synthesis/evolution/lie_trotter.py +42 -16
  263. qiskit/synthesis/evolution/product_formula.py +238 -165
  264. qiskit/synthesis/evolution/qdrift.py +29 -36
  265. qiskit/synthesis/evolution/suzuki_trotter.py +27 -87
  266. qiskit/synthesis/multi_controlled/__init__.py +0 -1
  267. qiskit/synthesis/qft/qft_decompose_full.py +1 -19
  268. qiskit/synthesis/qft/qft_decompose_lnn.py +1 -2
  269. qiskit/synthesis/stabilizer/stabilizer_decompose.py +1 -2
  270. qiskit/synthesis/two_qubit/two_qubit_decompose.py +63 -4
  271. qiskit/synthesis/two_qubit/weyl.py +97 -0
  272. qiskit/synthesis/unitary/qsd.py +5 -5
  273. qiskit/transpiler/__init__.py +14 -21
  274. qiskit/transpiler/basepasses.py +1 -1
  275. qiskit/transpiler/passes/__init__.py +0 -2
  276. qiskit/transpiler/passes/basis/basis_translator.py +565 -9
  277. qiskit/transpiler/passes/basis/decompose.py +12 -45
  278. qiskit/transpiler/passes/basis/unroll_3q_or_more.py +1 -1
  279. qiskit/transpiler/passes/basis/unroll_custom_definitions.py +1 -1
  280. qiskit/transpiler/passes/calibration/pulse_gate.py +2 -4
  281. qiskit/transpiler/passes/calibration/rx_builder.py +7 -11
  282. qiskit/transpiler/passes/calibration/rzx_builder.py +30 -46
  283. qiskit/transpiler/passes/layout/disjoint_utils.py +13 -15
  284. qiskit/transpiler/passes/layout/sabre_layout.py +2 -7
  285. qiskit/transpiler/passes/layout/sabre_pre_layout.py +0 -5
  286. qiskit/transpiler/passes/optimization/__init__.py +0 -1
  287. qiskit/transpiler/passes/optimization/collect_cliffords.py +3 -19
  288. qiskit/transpiler/passes/optimization/collect_linear_functions.py +1 -1
  289. qiskit/transpiler/passes/optimization/collect_multiqubit_blocks.py +2 -2
  290. qiskit/transpiler/passes/optimization/commutative_inverse_cancellation.py +1 -1
  291. qiskit/transpiler/passes/optimization/consolidate_blocks.py +131 -48
  292. qiskit/transpiler/passes/optimization/echo_rzx_weyl_decomposition.py +2 -4
  293. qiskit/transpiler/passes/optimization/elide_permutations.py +32 -9
  294. qiskit/transpiler/passes/optimization/inverse_cancellation.py +0 -2
  295. qiskit/transpiler/passes/optimization/optimize_1q_decomposition.py +11 -5
  296. qiskit/transpiler/passes/optimization/optimize_1q_gates.py +1 -1
  297. qiskit/transpiler/passes/optimization/optimize_swap_before_measure.py +1 -1
  298. qiskit/transpiler/passes/optimization/template_matching/backward_match.py +5 -5
  299. qiskit/transpiler/passes/optimization/template_matching/forward_match.py +4 -4
  300. qiskit/transpiler/passes/optimization/template_matching/template_substitution.py +2 -2
  301. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/commuting_2q_gate_router.py +1 -1
  302. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/swap_strategy.py +1 -1
  303. qiskit/transpiler/passes/routing/sabre_swap.py +3 -7
  304. qiskit/transpiler/passes/routing/star_prerouting.py +2 -2
  305. qiskit/transpiler/passes/scheduling/alap.py +1 -1
  306. qiskit/transpiler/passes/scheduling/alignments/align_measures.py +2 -2
  307. qiskit/transpiler/passes/scheduling/alignments/check_durations.py +1 -1
  308. qiskit/transpiler/passes/scheduling/alignments/pulse_gate_validation.py +0 -2
  309. qiskit/transpiler/passes/scheduling/alignments/reschedule.py +2 -2
  310. qiskit/transpiler/passes/scheduling/asap.py +1 -1
  311. qiskit/transpiler/passes/scheduling/base_scheduler.py +12 -14
  312. qiskit/transpiler/passes/scheduling/dynamical_decoupling.py +4 -9
  313. qiskit/transpiler/passes/scheduling/padding/base_padding.py +1 -1
  314. qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py +5 -16
  315. qiskit/transpiler/passes/scheduling/padding/pad_delay.py +1 -4
  316. qiskit/transpiler/passes/scheduling/scheduling/base_scheduler.py +2 -6
  317. qiskit/transpiler/passes/scheduling/time_unit_conversion.py +4 -9
  318. qiskit/transpiler/passes/synthesis/high_level_synthesis.py +99 -262
  319. qiskit/transpiler/passes/synthesis/hls_plugins.py +7 -638
  320. qiskit/transpiler/passes/synthesis/qubit_tracker.py +132 -0
  321. qiskit/transpiler/passes/synthesis/solovay_kitaev_synthesis.py +3 -3
  322. qiskit/transpiler/passes/synthesis/unitary_synthesis.py +34 -55
  323. qiskit/transpiler/passes/utils/barrier_before_final_measurements.py +56 -2
  324. qiskit/transpiler/passes/utils/convert_conditions_to_if_ops.py +0 -5
  325. qiskit/transpiler/passes/utils/gate_direction.py +275 -12
  326. qiskit/transpiler/passes/utils/gates_basis.py +30 -7
  327. qiskit/transpiler/passes/utils/merge_adjacent_barriers.py +1 -2
  328. qiskit/transpiler/passmanager_config.py +4 -22
  329. qiskit/transpiler/preset_passmanagers/builtin_plugins.py +14 -40
  330. qiskit/transpiler/preset_passmanagers/common.py +3 -5
  331. qiskit/transpiler/preset_passmanagers/generate_preset_pass_manager.py +42 -125
  332. qiskit/transpiler/preset_passmanagers/plugin.py +1 -1
  333. qiskit/transpiler/target.py +16 -74
  334. qiskit/visualization/circuit/_utils.py +2 -2
  335. qiskit/visualization/circuit/circuit_visualization.py +2 -3
  336. qiskit/visualization/circuit/matplotlib.py +1 -1
  337. qiskit/visualization/dag_visualization.py +1 -1
  338. qiskit/visualization/pass_manager_visualization.py +14 -3
  339. qiskit/visualization/pulse_v2/interface.py +1 -3
  340. qiskit/visualization/timeline/core.py +2 -25
  341. qiskit/visualization/timeline/interface.py +0 -12
  342. {qiskit-1.3.0.dist-info → qiskit-1.3.0b1.dist-info}/METADATA +19 -20
  343. {qiskit-1.3.0.dist-info → qiskit-1.3.0b1.dist-info}/RECORD +347 -358
  344. {qiskit-1.3.0.dist-info → qiskit-1.3.0b1.dist-info}/WHEEL +1 -1
  345. {qiskit-1.3.0.dist-info → qiskit-1.3.0b1.dist-info}/entry_points.txt +0 -19
  346. qiskit/circuit/library/data_preparation/_zz_feature_map.py +0 -150
  347. qiskit/circuit/twirling.py +0 -145
  348. qiskit/synthesis/arithmetic/__init__.py +0 -16
  349. qiskit/synthesis/arithmetic/adders/__init__.py +0 -17
  350. qiskit/synthesis/arithmetic/adders/cdkm_ripple_carry_adder.py +0 -154
  351. qiskit/synthesis/arithmetic/adders/draper_qft_adder.py +0 -103
  352. qiskit/synthesis/arithmetic/adders/vbe_ripple_carry_adder.py +0 -161
  353. qiskit/synthesis/arithmetic/multipliers/__init__.py +0 -16
  354. qiskit/synthesis/arithmetic/multipliers/hrs_cumulative_multiplier.py +0 -102
  355. qiskit/synthesis/arithmetic/multipliers/rg_qft_multiplier.py +0 -99
  356. qiskit/synthesis/evolution/pauli_network.py +0 -80
  357. qiskit/synthesis/multi_controlled/mcmt_vchain.py +0 -52
  358. qiskit/transpiler/passes/optimization/remove_identity_equiv.py +0 -69
  359. qiskit/utils/deprecate_pulse.py +0 -119
  360. {qiskit-1.3.0.dist-info → qiskit-1.3.0b1.dist-info}/LICENSE.txt +0 -0
  361. {qiskit-1.3.0.dist-info → qiskit-1.3.0b1.dist-info}/top_level.txt +0 -0
@@ -36,11 +36,7 @@ For example, to append a multi-controlled CNOT:
36
36
  circuit.append(gate, [0, 1, 4, 2, 3])
37
37
  circuit.draw('mpl')
38
38
 
39
- The library is organized in several sections. The function
40
- :func:`.get_standard_gate_name_mapping` allows you to see the available standard gates and operations.
41
-
42
- .. autofunction:: get_standard_gate_name_mapping
43
-
39
+ The library is organized in several sections.
44
40
 
45
41
  Standard gates
46
42
  ==============
@@ -60,7 +56,7 @@ For example:
60
56
  print(gate.power(1/2).to_matrix()) # √X gate
61
57
  print(gate.control(1).to_matrix()) # CX (controlled X) gate
62
58
 
63
- .. code-block:: text
59
+ .. parsed-literal::
64
60
 
65
61
  [[0.+0.j 1.+0.j]
66
62
  [1.+0.j 0.+0.j]]
@@ -130,7 +126,6 @@ For example:
130
126
  ZGate
131
127
  GlobalPhaseGate
132
128
 
133
-
134
129
  Standard Directives
135
130
  ===================
136
131
 
@@ -157,15 +152,15 @@ set the amount of qubits involved at instantiation time.
157
152
 
158
153
  .. code-block::
159
154
 
160
- from qiskit.circuit.library import DiagonalGate
155
+ from qiskit.circuit.library import Diagonal
161
156
 
162
- diagonal = DiagonalGate([1, 1j])
157
+ diagonal = Diagonal([1, 1])
163
158
  print(diagonal.num_qubits)
164
159
 
165
- diagonal = DiagonalGate([1, 1, 1, -1])
160
+ diagonal = Diagonal([1, 1, 1, 1])
166
161
  print(diagonal.num_qubits)
167
162
 
168
- .. code-block:: text
163
+ .. parsed-literal::
169
164
 
170
165
  1
171
166
  2
@@ -186,7 +181,6 @@ set the amount of qubits involved at instantiation time.
186
181
  GRX
187
182
  GRY
188
183
  GRZ
189
- MCMTGate
190
184
  MCPhaseGate
191
185
  MCXGate
192
186
  MCXGrayCode
@@ -216,15 +210,9 @@ or of a set of qubit states.
216
210
  :template: autosummary/class_no_inherited_members.rst
217
211
 
218
212
  AND
219
- AndGate
220
213
  OR
221
- OrGate
222
214
  XOR
223
- BitwiseXorGate
224
- random_bitwise_xor
225
215
  InnerProduct
226
- InnerProductGate
227
-
228
216
 
229
217
  Basis Change Circuits
230
218
  =====================
@@ -280,9 +268,6 @@ Adders
280
268
  CDKMRippleCarryAdder
281
269
  VBERippleCarryAdder
282
270
  WeightedAdder
283
- ModularAdderGate
284
- HalfAdderGate
285
- FullAdderGate
286
271
 
287
272
  Multipliers
288
273
  -----------
@@ -293,7 +278,6 @@ Multipliers
293
278
 
294
279
  HRSCumulativeMultiplier
295
280
  RGQFTMultiplier
296
- MultiplierGate
297
281
 
298
282
  Comparators
299
283
  -----------
@@ -325,16 +309,12 @@ Other arithmetic functions
325
309
  Particular Quantum Circuits
326
310
  ===========================
327
311
 
328
- The following gates and quantum circuits define specific
329
- quantum circuits of interest:
330
-
331
312
  .. autosummary::
332
313
  :toctree: ../stubs/
333
314
  :template: autosummary/class_no_inherited_members.rst
334
315
 
335
316
  FourierChecking
336
317
  GraphState
337
- GraphStateGate
338
318
  HiddenLinearFunction
339
319
  IQP
340
320
  QuantumVolume
@@ -345,42 +325,10 @@ quantum circuits of interest:
345
325
  HamiltonianGate
346
326
  UnitaryOverlap
347
327
 
348
- For circuits that have a well-defined structure it is preferrable
349
- to use the following functions to construct them:
350
-
351
- .. autosummary::
352
- :toctree: ../stubs/
353
- :template: autosummary/class_no_inherited_members.rst
354
-
355
- fourier_checking
356
- hidden_linear_function
357
- iqp
358
- random_iqp
359
- quantum_volume
360
- phase_estimation
361
- grover_operator
362
- unitary_overlap
363
-
364
328
 
365
329
  N-local circuits
366
330
  ================
367
331
 
368
- The following functions return a parameterized :class:`.QuantumCircuit` to use as ansatz in
369
- a broad set of variational quantum algorithms:
370
-
371
- .. autosummary::
372
- :toctree: ../stubs/
373
- :template: autosummary/class_no_inherited_members.rst
374
-
375
- n_local
376
- efficient_su2
377
- real_amplitudes
378
- pauli_two_design
379
- excitation_preserving
380
- qaoa_ansatz
381
- hamiltonian_variational_ansatz
382
- evolved_operator_ansatz
383
-
384
332
  These :class:`~qiskit.circuit.library.BlueprintCircuit` subclasses are used
385
333
  as parameterized models (a.k.a. ansatzes or variational forms) in variational algorithms.
386
334
  They are heavily used in near-term algorithms in e.g. Chemistry, Physics or Optimization.
@@ -402,17 +350,6 @@ They are heavily used in near-term algorithms in e.g. Chemistry, Physics or Opti
402
350
  Data encoding circuits
403
351
  ======================
404
352
 
405
- The following functions return a parameterized :class:`.QuantumCircuit` to use as data
406
- encoding circuits in a series of variational quantum algorithms:
407
-
408
- .. autosummary::
409
- :toctree: ../stubs/
410
- :template: autosummary/class_no_inherited_members.rst
411
-
412
- pauli_feature_map
413
- z_feature_map
414
- zz_feature_map
415
-
416
353
  These :class:`~qiskit.circuit.library.BlueprintCircuit` encode classical
417
354
  data in quantum states and are used as feature maps for classification.
418
355
 
@@ -423,17 +360,6 @@ data in quantum states and are used as feature maps for classification.
423
360
  PauliFeatureMap
424
361
  ZFeatureMap
425
362
  ZZFeatureMap
426
-
427
-
428
- Data preparation circuits
429
- =========================
430
-
431
- The following operations are used for state preparation:
432
-
433
- .. autosummary::
434
- :toctree: ../stubs/
435
- :template: autosummary/class_no_inherited_members.rst
436
-
437
363
  StatePreparation
438
364
  Initialize
439
365
 
@@ -574,7 +500,6 @@ from .generalized_gates import (
574
500
  Permutation,
575
501
  PermutationGate,
576
502
  GMS,
577
- MCMTGate,
578
503
  MSGate,
579
504
  GR,
580
505
  GRX,
@@ -595,21 +520,12 @@ from .pauli_evolution import PauliEvolutionGate
595
520
  from .hamiltonian_gate import HamiltonianGate
596
521
  from .boolean_logic import (
597
522
  AND,
598
- AndGate,
599
523
  OR,
600
- OrGate,
601
524
  XOR,
602
- BitwiseXorGate,
603
- random_bitwise_xor,
604
525
  InnerProduct,
605
- InnerProductGate,
606
526
  )
607
527
  from .basis_change import QFT, QFTGate
608
528
  from .arithmetic import (
609
- ModularAdderGate,
610
- HalfAdderGate,
611
- FullAdderGate,
612
- MultiplierGate,
613
529
  FunctionalPauliRotations,
614
530
  LinearPauliRotations,
615
531
  PiecewiseLinearPauliRotations,
@@ -629,40 +545,28 @@ from .arithmetic import (
629
545
  )
630
546
 
631
547
  from .n_local import (
632
- n_local,
633
548
  NLocal,
634
549
  TwoLocal,
635
- pauli_two_design,
636
550
  PauliTwoDesign,
637
- real_amplitudes,
638
551
  RealAmplitudes,
639
- efficient_su2,
640
552
  EfficientSU2,
641
- hamiltonian_variational_ansatz,
642
- evolved_operator_ansatz,
643
553
  EvolvedOperatorAnsatz,
644
- excitation_preserving,
645
554
  ExcitationPreserving,
646
- qaoa_ansatz,
647
555
  QAOAAnsatz,
648
556
  )
649
557
  from .data_preparation import (
650
- z_feature_map,
651
- zz_feature_map,
652
- pauli_feature_map,
653
558
  PauliFeatureMap,
654
559
  ZFeatureMap,
655
560
  ZZFeatureMap,
656
561
  StatePreparation,
657
562
  Initialize,
658
563
  )
659
- from .quantum_volume import QuantumVolume, quantum_volume
660
- from .fourier_checking import FourierChecking, fourier_checking
661
- from .graph_state import GraphState, GraphStateGate
662
- from .hidden_linear_function import HiddenLinearFunction, hidden_linear_function
663
- from .iqp import IQP, iqp, random_iqp
664
- from .phase_estimation import PhaseEstimation, phase_estimation
665
- from .grover_operator import GroverOperator, grover_operator
564
+ from .quantum_volume import QuantumVolume
565
+ from .fourier_checking import FourierChecking
566
+ from .graph_state import GraphState
567
+ from .hidden_linear_function import HiddenLinearFunction
568
+ from .iqp import IQP
569
+ from .phase_estimation import PhaseEstimation
570
+ from .grover_operator import GroverOperator
666
571
  from .phase_oracle import PhaseOracle
667
- from .overlap import UnitaryOverlap, unitary_overlap
668
- from .standard_gates import get_standard_gate_name_mapping
572
+ from .overlap import UnitaryOverlap
@@ -21,14 +21,7 @@ from .polynomial_pauli_rotations import PolynomialPauliRotations
21
21
  from .weighted_adder import WeightedAdder
22
22
  from .quadratic_form import QuadraticForm
23
23
  from .linear_amplitude_function import LinearAmplitudeFunction
24
- from .adders import (
25
- VBERippleCarryAdder,
26
- CDKMRippleCarryAdder,
27
- DraperQFTAdder,
28
- ModularAdderGate,
29
- HalfAdderGate,
30
- FullAdderGate,
31
- )
24
+ from .adders import VBERippleCarryAdder, CDKMRippleCarryAdder, DraperQFTAdder
32
25
  from .piecewise_chebyshev import PiecewiseChebyshev
33
- from .multipliers import HRSCumulativeMultiplier, RGQFTMultiplier, MultiplierGate
26
+ from .multipliers import HRSCumulativeMultiplier, RGQFTMultiplier
34
27
  from .exact_reciprocal import ExactReciprocal
@@ -15,4 +15,3 @@
15
15
  from .cdkm_ripple_carry_adder import CDKMRippleCarryAdder
16
16
  from .draper_qft_adder import DraperQFTAdder
17
17
  from .vbe_ripple_carry_adder import VBERippleCarryAdder
18
- from .adder import ModularAdderGate, HalfAdderGate, FullAdderGate
@@ -12,16 +12,13 @@
12
12
 
13
13
  """Compute the sum of two equally sized qubit registers."""
14
14
 
15
- from __future__ import annotations
16
-
17
- from qiskit.circuit import QuantumCircuit, Gate
18
- from qiskit.utils.deprecation import deprecate_func
15
+ from qiskit.circuit import QuantumCircuit
19
16
 
20
17
 
21
18
  class Adder(QuantumCircuit):
22
19
  r"""Compute the sum of two equally sized qubit registers.
23
20
 
24
- For two registers :math:`|a\rangle_n` and :math:`|b\rangle_n` with :math:`n` qubits each, an
21
+ For two registers :math:`|a\rangle_n` and :math:|b\rangle_n` with :math:`n` qubits each, an
25
22
  adder performs the following operation
26
23
 
27
24
  .. math::
@@ -42,16 +39,6 @@ class Adder(QuantumCircuit):
42
39
 
43
40
  """
44
41
 
45
- @deprecate_func(
46
- since="1.3",
47
- additional_msg=(
48
- "Use the adder gates provided in qiskit.circuit.library.arithmetic instead. "
49
- "The gate type depends on the adder kind: fixed, half, full are represented by "
50
- "ModularAdderGate, HalfAdderGate, FullAdderGate, respectively. For different adder "
51
- "implementations, see https://docs.quantum.ibm.com/api/qiskit/synthesis.",
52
- ),
53
- pending=True,
54
- )
55
42
  def __init__(self, num_state_qubits: int, name: str = "Adder") -> None:
56
43
  """
57
44
  Args:
@@ -69,142 +56,3 @@ class Adder(QuantumCircuit):
69
56
  The number of state qubits.
70
57
  """
71
58
  return self._num_state_qubits
72
-
73
-
74
- class HalfAdderGate(Gate):
75
- r"""Compute the sum of two equally-sized qubit registers, including a carry-out bit.
76
-
77
- For two registers :math:`|a\rangle_n` and :math:`|b\rangle_n` with :math:`n` qubits each, an
78
- adder performs the following operation
79
-
80
- .. math::
81
-
82
- |a\rangle_n |b\rangle_n \mapsto |a\rangle_n |a + b\rangle_{n + 1}.
83
-
84
- The quantum register :math:`|a\rangle_n` (and analogously :math:`|b\rangle_n`)
85
-
86
- .. math::
87
-
88
- |a\rangle_n = |a_0\rangle \otimes \cdots \otimes |a_{n - 1}\rangle,
89
-
90
- for :math:`a_i \in \{0, 1\}`, is associated with the integer value
91
-
92
- .. math::
93
-
94
- a = 2^{0}a_{0} + 2^{1}a_{1} + \cdots + 2^{n - 1}a_{n - 1}.
95
-
96
- """
97
-
98
- def __init__(self, num_state_qubits: int, label: str | None = None) -> None:
99
- """
100
- Args:
101
- num_state_qubits: The number of qubits in each of the registers.
102
- name: The name of the circuit.
103
- """
104
- if num_state_qubits < 1:
105
- raise ValueError("Need at least 1 state qubit.")
106
-
107
- super().__init__("HalfAdder", 2 * num_state_qubits + 1, [], label=label)
108
- self._num_state_qubits = num_state_qubits
109
-
110
- @property
111
- def num_state_qubits(self) -> int:
112
- """The number of state qubits, i.e. the number of bits in each input register.
113
-
114
- Returns:
115
- The number of state qubits.
116
- """
117
- return self._num_state_qubits
118
-
119
-
120
- class ModularAdderGate(Gate):
121
- r"""Compute the sum modulo :math:`2^n` of two :math:`n`-sized qubit registers.
122
-
123
- For two registers :math:`|a\rangle_n` and :math:`|b\rangle_n` with :math:`n` qubits each, an
124
- adder performs the following operation
125
-
126
- .. math::
127
-
128
- |a\rangle_n |b\rangle_n \mapsto |a\rangle_n |a + b \text{ mod } 2^n\rangle_n.
129
-
130
- The quantum register :math:`|a\rangle_n` (and analogously :math:`|b\rangle_n`)
131
-
132
- .. math::
133
-
134
- |a\rangle_n = |a_0\rangle \otimes \cdots \otimes |a_{n - 1}\rangle,
135
-
136
- for :math:`a_i \in \{0, 1\}`, is associated with the integer value
137
-
138
- .. math::
139
-
140
- a = 2^{0}a_{0} + 2^{1}a_{1} + \cdots + 2^{n - 1}a_{n - 1}.
141
-
142
- """
143
-
144
- def __init__(self, num_state_qubits: int, label: str | None = None) -> None:
145
- """
146
- Args:
147
- num_state_qubits: The number of qubits in each of the registers.
148
- name: The name of the circuit.
149
- """
150
- if num_state_qubits < 1:
151
- raise ValueError("Need at least 1 state qubit.")
152
-
153
- super().__init__("ModularAdder", 2 * num_state_qubits, [], label=label)
154
- self._num_state_qubits = num_state_qubits
155
-
156
- @property
157
- def num_state_qubits(self) -> int:
158
- """The number of state qubits, i.e. the number of bits in each input register.
159
-
160
- Returns:
161
- The number of state qubits.
162
- """
163
- return self._num_state_qubits
164
-
165
-
166
- class FullAdderGate(Gate):
167
- r"""Compute the sum of two :math:`n`-sized qubit registers, including carry-in and -out bits.
168
-
169
- For two registers :math:`|a\rangle_n` and :math:`|b\rangle_n` with :math:`n` qubits each, an
170
- adder performs the following operation
171
-
172
- .. math::
173
-
174
- |c_{\text{in}}\rangle_1 |a\rangle_n |b\rangle_n
175
- \mapsto |a\rangle_n |c_{\text{in}} + a + b \rangle_{n + 1}.
176
-
177
- The quantum register :math:`|a\rangle_n` (and analogously :math:`|b\rangle_n`)
178
-
179
- .. math::
180
-
181
- |a\rangle_n = |a_0\rangle \otimes \cdots \otimes |a_{n - 1}\rangle,
182
-
183
- for :math:`a_i \in \{0, 1\}`, is associated with the integer value
184
-
185
- .. math::
186
-
187
- a = 2^{0}a_{0} + 2^{1}a_{1} + \cdots + 2^{n - 1}a_{n - 1}.
188
-
189
- """
190
-
191
- def __init__(self, num_state_qubits: int, label: str | None = None) -> None:
192
- """
193
- Args:
194
- num_state_qubits: The number of qubits in each of the registers.
195
- name: The name of the circuit.
196
- """
197
- if num_state_qubits < 1:
198
- raise ValueError("Need at least 1 state qubit.")
199
-
200
- super().__init__("FullAdder", 2 * num_state_qubits + 2, [], label=label)
201
- self._num_state_qubits = num_state_qubits
202
-
203
- @property
204
- def num_state_qubits(self) -> int:
205
- """The number of state qubits, i.e. the number of bits in each input register.
206
-
207
- Returns:
208
- The number of state qubits.
209
- """
210
- return self._num_state_qubits
@@ -12,7 +12,8 @@
12
12
 
13
13
  """Compute the sum of two qubit registers using ripple-carry approach."""
14
14
 
15
- from qiskit.synthesis.arithmetic import adder_ripple_c04
15
+ from qiskit.circuit import QuantumCircuit, QuantumRegister, AncillaRegister
16
+
16
17
  from .adder import Adder
17
18
 
18
19
 
@@ -22,7 +23,7 @@ class CDKMRippleCarryAdder(Adder):
22
23
  As an example, a ripple-carry adder circuit that performs addition on two 3-qubit sized
23
24
  registers with a carry-in bit (``kind="full"``) is as follows:
24
25
 
25
- .. code-block:: text
26
+ .. parsed-literal::
26
27
 
27
28
  ┌──────┐ ┌──────┐
28
29
  cin_0: ┤2 ├─────────────────────────────────────┤2 ├
@@ -53,7 +54,7 @@ class CDKMRippleCarryAdder(Adder):
53
54
 
54
55
  The circuit diagram for the fixed-point adder (``kind="fixed"``) on 3-qubit sized inputs is
55
56
 
56
- .. code-block:: text
57
+ .. parsed-literal::
57
58
 
58
59
  ┌──────┐┌──────┐ ┌──────┐┌──────┐
59
60
  a_0: ┤0 ├┤2 ├────────────────┤2 ├┤0 ├
@@ -74,21 +75,6 @@ class CDKMRippleCarryAdder(Adder):
74
75
  It has one less qubit than the full-adder since it doesn't have the carry-out, but uses
75
76
  a helper qubit instead of the carry-in, so it only has one less qubit, not two.
76
77
 
77
- .. seealso::
78
-
79
- The following generic gate objects perform additions, like this circuit class,
80
- but allow the compiler to select the optimal decomposition based on the context.
81
- Specific implementations can be set via the :class:`.HLSConfig`, e.g. this circuit
82
- can be chosen via ``Adder=["ripple_c04"]``.
83
-
84
- :class:`.ModularAdderGate`: A generic inplace adder, modulo :math:`2^n`. This
85
- is functionally equivalent to ``kind="fixed"``.
86
-
87
- :class:`.HalfAdderGate`: A generic inplace adder. This
88
- is functionally equivalent to ``kind="half"``.
89
-
90
- :class:`.FullAdderGate`: A generic inplace adder, with a carry-in bit. This
91
- is functionally equivalent to ``kind="full"``.
92
78
 
93
79
  **References:**
94
80
 
@@ -116,8 +102,58 @@ class CDKMRippleCarryAdder(Adder):
116
102
  Raises:
117
103
  ValueError: If ``num_state_qubits`` is lower than 1.
118
104
  """
105
+ if num_state_qubits < 1:
106
+ raise ValueError("The number of qubits must be at least 1.")
107
+
119
108
  super().__init__(num_state_qubits, name=name)
120
- circuit = adder_ripple_c04(num_state_qubits, kind)
121
109
 
122
- self.add_register(*circuit.qregs)
110
+ if kind == "full":
111
+ qr_c = QuantumRegister(1, name="cin")
112
+ self.add_register(qr_c)
113
+ else:
114
+ qr_c = AncillaRegister(1, name="help")
115
+
116
+ qr_a = QuantumRegister(num_state_qubits, name="a")
117
+ qr_b = QuantumRegister(num_state_qubits, name="b")
118
+ self.add_register(qr_a, qr_b)
119
+
120
+ if kind in ["full", "half"]:
121
+ qr_z = QuantumRegister(1, name="cout")
122
+ self.add_register(qr_z)
123
+
124
+ if kind != "full":
125
+ self.add_register(qr_c)
126
+
127
+ # build carry circuit for majority of 3 bits in-place
128
+ # corresponds to MAJ gate in [1]
129
+ qc_maj = QuantumCircuit(3, name="MAJ")
130
+ qc_maj.cx(0, 1)
131
+ qc_maj.cx(0, 2)
132
+ qc_maj.ccx(2, 1, 0)
133
+ maj_gate = qc_maj.to_gate()
134
+
135
+ # build circuit for reversing carry operation
136
+ # corresponds to UMA gate in [1]
137
+ qc_uma = QuantumCircuit(3, name="UMA")
138
+ qc_uma.ccx(2, 1, 0)
139
+ qc_uma.cx(0, 2)
140
+ qc_uma.cx(2, 1)
141
+ uma_gate = qc_uma.to_gate()
142
+
143
+ circuit = QuantumCircuit(*self.qregs, name=name)
144
+
145
+ # build ripple-carry adder circuit
146
+ circuit.append(maj_gate, [qr_a[0], qr_b[0], qr_c[0]])
147
+
148
+ for i in range(num_state_qubits - 1):
149
+ circuit.append(maj_gate, [qr_a[i + 1], qr_b[i + 1], qr_a[i]])
150
+
151
+ if kind in ["full", "half"]:
152
+ circuit.cx(qr_a[-1], qr_z[0])
153
+
154
+ for i in reversed(range(num_state_qubits - 1)):
155
+ circuit.append(uma_gate, [qr_a[i + 1], qr_b[i + 1], qr_a[i]])
156
+
157
+ circuit.append(uma_gate, [qr_a[0], qr_b[0], qr_c[0]])
158
+
123
159
  self.append(circuit.to_gate(), self.qubits)
@@ -31,7 +31,7 @@ class DraperQFTAdder(Adder):
31
31
  As an example, a non-fixed_point QFT adder circuit that performs addition on two 2-qubit sized
32
32
  registers is as follows:
33
33
 
34
- .. code-block:: text
34
+ .. parsed-literal::
35
35
 
36
36
  a_0: ─────────■──────■────────────────────────■────────────────
37
37
  │ │ │
@@ -44,19 +44,6 @@ class DraperQFTAdder(Adder):
44
44
  cout_0: ┤2 ├────────────────────────■────────■───────┤2 ├
45
45
  └──────┘ └───────┘
46
46
 
47
- .. seealso::
48
-
49
- The following generic gate objects perform additions, like this circuit class,
50
- but allow the compiler to select the optimal decomposition based on the context.
51
- Specific implementations can be set via the :class:`.HLSConfig`, e.g. this
52
- circuit can be chosen via ``Adder=["qft_d00"]``.
53
-
54
- :class:`.ModularAdderGate`: A generic inplace adder, modulo :math:`2^n`. This
55
- is functionally equivalent to ``kind="fixed"``.
56
-
57
- :class:`.HalfAdderGate`: A generic inplace adder. This
58
- is functionally equivalent to ``kind="half"``.
59
-
60
47
  **References:**
61
48
 
62
49
  [1] T. G. Draper, Addition on a Quantum Computer, 2000.