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
@@ -0,0 +1,118 @@
1
+ # This code is part of Qiskit.
2
+ #
3
+ # (C) Copyright IBM 2017, 2020.
4
+ #
5
+ # This code is licensed under the Apache License, Version 2.0. You may
6
+ # obtain a copy of this license in the LICENSE.txt file in the root directory
7
+ # of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.
8
+ #
9
+ # Any modifications or derivative works of this code must retain this
10
+ # copyright notice, and modified files need to carry a notice indicating
11
+ # that they have been altered from the originals.
12
+
13
+ """Second-order Pauli-Z expansion circuit."""
14
+
15
+ from typing import Callable, List, Union, Optional, Dict, Tuple
16
+ import numpy as np
17
+ from .pauli_feature_map import PauliFeatureMap
18
+
19
+
20
+ class ZZFeatureMap(PauliFeatureMap):
21
+ r"""Second-order Pauli-Z evolution circuit.
22
+
23
+ For 3 qubits and 1 repetition and linear entanglement the circuit is represented by:
24
+
25
+ .. parsed-literal::
26
+
27
+ ┌───┐┌─────────────────┐
28
+ ┤ H ├┤ U1(2.0*φ(x[0])) ├──■────────────────────────────■────────────────────────────────────
29
+ ├───┤├─────────────────┤┌─┴─┐┌──────────────────────┐┌─┴─┐
30
+ ┤ H ├┤ U1(2.0*φ(x[1])) ├┤ X ├┤ U1(2.0*φ(x[0],x[1])) ├┤ X ├──■────────────────────────────■──
31
+ ├───┤├─────────────────┤└───┘└──────────────────────┘└───┘┌─┴─┐┌──────────────────────┐┌─┴─┐
32
+ ┤ H ├┤ U1(2.0*φ(x[2])) ├──────────────────────────────────┤ X ├┤ U1(2.0*φ(x[1],x[2])) ├┤ X ├
33
+ └───┘└─────────────────┘ └───┘└──────────────────────┘└───┘
34
+
35
+ where :math:`\varphi` is a classical non-linear function, which defaults to :math:`\varphi(x) = x`
36
+ if and :math:`\varphi(x,y) = (\pi - x)(\pi - y)`.
37
+
38
+ Examples:
39
+
40
+ >>> from qiskit.circuit.library import ZZFeatureMap
41
+ >>> prep = ZZFeatureMap(2, reps=1)
42
+ >>> print(prep)
43
+ ┌───┐┌──────────────┐
44
+ q_0: ┤ H ├┤ U1(2.0*x[0]) ├──■───────────────────────────────────────■──
45
+ ├───┤├──────────────┤┌─┴─┐┌─────────────────────────────────┐┌─┴─┐
46
+ q_1: ┤ H ├┤ U1(2.0*x[1]) ├┤ X ├┤ U1(2.0*(pi - x[0])*(pi - x[1])) ├┤ X ├
47
+ └───┘└──────────────┘└───┘└─────────────────────────────────┘└───┘
48
+
49
+ >>> from qiskit.circuit.library import EfficientSU2
50
+ >>> classifier = ZZFeatureMap(3) + EfficientSU2(3)
51
+ >>> classifier.num_parameters
52
+ 15
53
+ >>> classifier.parameters # 'x' for the data preparation, 'θ' for the SU2 parameters
54
+ ParameterView([
55
+ ParameterVectorElement(x[0]), ParameterVectorElement(x[1]),
56
+ ParameterVectorElement(x[2]), ParameterVectorElement(θ[0]),
57
+ ParameterVectorElement(θ[1]), ParameterVectorElement(θ[2]),
58
+ ParameterVectorElement(θ[3]), ParameterVectorElement(θ[4]),
59
+ ParameterVectorElement(θ[5]), ParameterVectorElement(θ[6]),
60
+ ParameterVectorElement(θ[7]), ParameterVectorElement(θ[8]),
61
+ ParameterVectorElement(θ[9]), ParameterVectorElement(θ[10]),
62
+ ParameterVectorElement(θ[11]), ParameterVectorElement(θ[12]),
63
+ ParameterVectorElement(θ[13]), ParameterVectorElement(θ[14]),
64
+ ParameterVectorElement(θ[15]), ParameterVectorElement(θ[16]),
65
+ ParameterVectorElement(θ[17]), ParameterVectorElement(θ[18]),
66
+ ParameterVectorElement(θ[19]), ParameterVectorElement(θ[20]),
67
+ ParameterVectorElement(θ[21]), ParameterVectorElement(θ[22]),
68
+ ParameterVectorElement(θ[23])
69
+ ])
70
+ >>> classifier.count_ops()
71
+ OrderedDict([('ZZFeatureMap', 1), ('EfficientSU2', 1)])
72
+ """
73
+
74
+ def __init__(
75
+ self,
76
+ feature_dimension: int,
77
+ reps: int = 2,
78
+ entanglement: Union[
79
+ str,
80
+ Dict[int, List[Tuple[int]]],
81
+ Callable[[int], Union[str, Dict[int, List[Tuple[int]]]]],
82
+ ] = "full",
83
+ data_map_func: Optional[Callable[[np.ndarray], float]] = None,
84
+ parameter_prefix: str = "x",
85
+ insert_barriers: bool = False,
86
+ name: str = "ZZFeatureMap",
87
+ ) -> None:
88
+ """Create a new second-order Pauli-Z expansion.
89
+
90
+ Args:
91
+ feature_dimension: Number of features.
92
+ reps: The number of repeated circuits, has a min. value of 1.
93
+ entanglement: Specifies the entanglement structure. Refer to
94
+ :class:`~qiskit.circuit.library.PauliFeatureMap` for detail.
95
+ data_map_func: A mapping function for data x.
96
+ parameter_prefix: The prefix used if default parameters are generated.
97
+ insert_barriers: If True, barriers are inserted in between the evolution instructions
98
+ and hadamard layers.
99
+
100
+ Raises:
101
+ ValueError: If the feature dimension is smaller than 2.
102
+ """
103
+ if feature_dimension < 2:
104
+ raise ValueError(
105
+ "The ZZFeatureMap contains 2-local interactions and cannot be "
106
+ f"defined for less than 2 qubits. You provided {feature_dimension}."
107
+ )
108
+
109
+ super().__init__(
110
+ feature_dimension=feature_dimension,
111
+ reps=reps,
112
+ entanglement=entanglement,
113
+ paulis=["Z", "ZZ"],
114
+ data_map_func=data_map_func,
115
+ parameter_prefix=parameter_prefix,
116
+ insert_barriers=insert_barriers,
117
+ name=name,
118
+ )
@@ -12,14 +12,13 @@
12
12
 
13
13
  """Fourier checking circuit."""
14
14
 
15
- from collections.abc import Sequence
16
- import math
15
+ from typing import List
17
16
 
17
+ import math
18
18
  from qiskit.circuit import QuantumCircuit
19
19
  from qiskit.circuit.exceptions import CircuitError
20
- from qiskit.utils.deprecation import deprecate_func
21
20
 
22
- from .generalized_gates.diagonal import Diagonal, DiagonalGate
21
+ from .generalized_gates.diagonal import Diagonal
23
22
 
24
23
 
25
24
  class FourierChecking(QuantumCircuit):
@@ -53,12 +52,7 @@ class FourierChecking(QuantumCircuit):
53
52
  `arXiv:1411.5729 <https://arxiv.org/abs/1411.5729>`_
54
53
  """
55
54
 
56
- @deprecate_func(
57
- since="1.3",
58
- additional_msg="Use qiskit.circuit.library.fourier_checking instead.",
59
- pending=True,
60
- )
61
- def __init__(self, f: Sequence[int], g: Sequence[int]) -> None:
55
+ def __init__(self, f: List[int], g: List[int]) -> None:
62
56
  """Create Fourier checking circuit.
63
57
 
64
58
  Args:
@@ -87,72 +81,17 @@ class FourierChecking(QuantumCircuit):
87
81
  "{1, -1}."
88
82
  )
89
83
 
90
- # This definition circuit is not replaced by the circuit produced by fourier_checking,
91
- # as the latter produces a slightly different circuit, with DiagonalGates instead
92
- # of Diagonal circuits.
93
- circuit = QuantumCircuit(int(num_qubits), name=f"fc: {f}, {g}")
84
+ circuit = QuantumCircuit(num_qubits, name=f"fc: {f}, {g}")
85
+
94
86
  circuit.h(circuit.qubits)
87
+
95
88
  circuit.compose(Diagonal(f), inplace=True)
89
+
96
90
  circuit.h(circuit.qubits)
91
+
97
92
  circuit.compose(Diagonal(g), inplace=True)
93
+
98
94
  circuit.h(circuit.qubits)
95
+
99
96
  super().__init__(*circuit.qregs, name=circuit.name)
100
97
  self.compose(circuit.to_gate(), qubits=self.qubits, inplace=True)
101
-
102
-
103
- def fourier_checking(f: Sequence[int], g: Sequence[int]) -> QuantumCircuit:
104
- """Fourier checking circuit.
105
-
106
- The circuit for the Fourier checking algorithm, introduced in [1],
107
- involves a layer of Hadamards, the function :math:`f`, another layer of
108
- Hadamards, the function :math:`g`, followed by a final layer of Hadamards.
109
- The functions :math:`f` and :math:`g` are classical functions realized
110
- as phase oracles (diagonal operators with {-1, 1} on the diagonal).
111
-
112
- The probability of observing the all-zeros string is :math:`p(f,g)`.
113
- The algorithm solves the promise Fourier checking problem,
114
- which decides if f is correlated with the Fourier transform
115
- of g, by testing if :math:`p(f,g) <= 0.01` or :math:`p(f,g) >= 0.05`,
116
- promised that one or the other of these is true.
117
-
118
- The functions :math:`f` and :math:`g` are currently implemented
119
- from their truth tables but could be represented concisely and
120
- implemented efficiently for special classes of functions.
121
-
122
- Fourier checking is a special case of :math:`k`-fold forrelation [2].
123
-
124
- **Reference Circuit:**
125
-
126
- .. plot::
127
- :include-source:
128
-
129
- from qiskit.circuit.library import fourier_checking
130
- circuit = fourier_checking([1, -1, -1, -1], [1, 1, -1, -1])
131
- circuit.draw('mpl')
132
-
133
- **Reference:**
134
-
135
- [1] S. Aaronson, BQP and the Polynomial Hierarchy, 2009 (Section 3.2).
136
- `arXiv:0910.4698 <https://arxiv.org/abs/0910.4698>`_
137
-
138
- [2] S. Aaronson, A. Ambainis, Forrelation: a problem that
139
- optimally separates quantum from classical computing, 2014.
140
- `arXiv:1411.5729 <https://arxiv.org/abs/1411.5729>`_
141
- """
142
- num_qubits = math.log2(len(f))
143
-
144
- if len(f) != len(g) or num_qubits == 0 or not num_qubits.is_integer():
145
- raise CircuitError(
146
- "The functions f and g must be given as truth "
147
- "tables, each as a list of 2**n entries of "
148
- "{1, -1}."
149
- )
150
- num_qubits = int(num_qubits)
151
-
152
- circuit = QuantumCircuit(num_qubits, name=f"fc: {f}, {g}")
153
- circuit.h(circuit.qubits)
154
- circuit.append(DiagonalGate(f), range(num_qubits))
155
- circuit.h(circuit.qubits)
156
- circuit.append(DiagonalGate(g), range(num_qubits))
157
- circuit.h(circuit.qubits)
158
- return circuit
@@ -14,7 +14,7 @@
14
14
 
15
15
  from .diagonal import Diagonal, DiagonalGate
16
16
  from .permutation import Permutation, PermutationGate
17
- from .mcmt import MCMT, MCMTVChain, MCMTGate
17
+ from .mcmt import MCMT, MCMTVChain
18
18
  from .gms import GMS, MSGate
19
19
  from .gr import GR, GRX, GRY, GRZ
20
20
  from .pauli import PauliGate
@@ -23,8 +23,6 @@ import numpy as np
23
23
  from qiskit.circuit.gate import Gate
24
24
  from qiskit.circuit.quantumcircuit import QuantumCircuit
25
25
  from qiskit.circuit.exceptions import CircuitError
26
- from qiskit.circuit.annotated_operation import AnnotatedOperation, InverseModifier
27
- from qiskit.utils.deprecation import deprecate_func
28
26
 
29
27
  from .ucrz import UCRZGate
30
28
 
@@ -32,28 +30,19 @@ _EPS = 1e-10
32
30
 
33
31
 
34
32
  class Diagonal(QuantumCircuit):
35
- """Circuit implementing a diagonal transformation."""
33
+ r"""Diagonal circuit.
36
34
 
37
- @deprecate_func(since="1.3", additional_msg="Use DiagonalGate instead.", pending=True)
38
- def __init__(self, diag: Sequence[complex]) -> None:
39
- r"""
40
- Args:
41
- diag: List of the :math:`2^k` diagonal entries (for a diagonal gate on :math:`k` qubits).
42
-
43
- Raises:
44
- CircuitError: if the list of the diagonal entries or the qubit list is in bad format;
45
- if the number of diagonal entries is not :math:`2^k`, where :math:`k` denotes the
46
- number of qubits.
47
- """
48
- DiagonalGate._check_input(diag)
49
- num_qubits = int(math.log2(len(diag)))
50
-
51
- super().__init__(num_qubits, name="Diagonal")
52
- self.append(DiagonalGate(diag), self.qubits)
35
+ Circuit symbol:
53
36
 
37
+ .. parsed-literal::
54
38
 
55
- class DiagonalGate(Gate):
56
- r"""A generic diagonal quantum gate.
39
+ ┌───────────┐
40
+ q_0: ┤0 ├
41
+ │ │
42
+ q_1: ┤1 Diagonal ├
43
+ │ │
44
+ q_2: ┤2 ├
45
+ └───────────┘
57
46
 
58
47
  Matrix form:
59
48
 
@@ -91,28 +80,30 @@ class DiagonalGate(Gate):
91
80
  def __init__(self, diag: Sequence[complex]) -> None:
92
81
  r"""
93
82
  Args:
94
- diag: list of the :math:`2^k` diagonal entries (for a diagonal gate on :math:`k` qubits).
83
+ diag: List of the :math:`2^k` diagonal entries (for a diagonal gate on :math:`k` qubits).
84
+
85
+ Raises:
86
+ CircuitError: if the list of the diagonal entries or the qubit list is in bad format;
87
+ if the number of diagonal entries is not :math:`2^k`, where :math:`k` denotes the
88
+ number of qubits.
95
89
  """
96
90
  self._check_input(diag)
97
91
  num_qubits = int(math.log2(len(diag)))
98
92
 
99
- super().__init__("diagonal", num_qubits, diag)
93
+ circuit = QuantumCircuit(num_qubits, name="Diagonal")
100
94
 
101
- def _define(self):
102
95
  # Since the diagonal is a unitary, all its entries have absolute value
103
96
  # one and the diagonal is fully specified by the phases of its entries.
104
- diag_phases = [cmath.phase(z) for z in self.params]
105
- n = len(diag_phases)
106
- circuit = QuantumCircuit(self.num_qubits)
107
-
97
+ diag_phases = [cmath.phase(z) for z in diag]
98
+ n = len(diag)
108
99
  while n >= 2:
109
100
  angles_rz = []
110
101
  for i in range(0, n, 2):
111
102
  diag_phases[i // 2], rz_angle = _extract_rz(diag_phases[i], diag_phases[i + 1])
112
103
  angles_rz.append(rz_angle)
113
104
  num_act_qubits = int(math.log2(n))
114
- ctrl_qubits = list(range(self.num_qubits - num_act_qubits + 1, self.num_qubits))
115
- target_qubit = self.num_qubits - num_act_qubits
105
+ ctrl_qubits = list(range(num_qubits - num_act_qubits + 1, num_qubits))
106
+ target_qubit = num_qubits - num_act_qubits
116
107
 
117
108
  ucrz = UCRZGate(angles_rz)
118
109
  circuit.append(ucrz, [target_qubit] + ctrl_qubits)
@@ -120,7 +111,36 @@ class DiagonalGate(Gate):
120
111
  n //= 2
121
112
  circuit.global_phase += diag_phases[0]
122
113
 
123
- self.definition = circuit
114
+ super().__init__(num_qubits, name="Diagonal")
115
+ self.append(circuit.to_gate(), self.qubits)
116
+
117
+ @staticmethod
118
+ def _check_input(diag):
119
+ """Check if ``diag`` is in valid format."""
120
+ if not isinstance(diag, (list, np.ndarray)):
121
+ raise CircuitError("Diagonal entries must be in a list or numpy array.")
122
+ num_qubits = math.log2(len(diag))
123
+ if num_qubits < 1 or not num_qubits.is_integer():
124
+ raise CircuitError("The number of diagonal entries is not a positive power of 2.")
125
+ if not np.allclose(np.abs(diag), 1, atol=_EPS):
126
+ raise CircuitError("A diagonal element does not have absolute value one.")
127
+
128
+
129
+ class DiagonalGate(Gate):
130
+ """Gate implementing a diagonal transformation."""
131
+
132
+ def __init__(self, diag: Sequence[complex]) -> None:
133
+ r"""
134
+ Args:
135
+ diag: list of the :math:`2^k` diagonal entries (for a diagonal gate on :math:`k` qubits).
136
+ """
137
+ Diagonal._check_input(diag)
138
+ num_qubits = int(math.log2(len(diag)))
139
+
140
+ super().__init__("diagonal", num_qubits, diag)
141
+
142
+ def _define(self):
143
+ self.definition = Diagonal(self.params).decompose()
124
144
 
125
145
  def validate_parameter(self, parameter):
126
146
  """Diagonal Gate parameter should accept complex
@@ -132,22 +152,8 @@ class DiagonalGate(Gate):
132
152
 
133
153
  def inverse(self, annotated: bool = False):
134
154
  """Return the inverse of the diagonal gate."""
135
- if annotated:
136
- return AnnotatedOperation(self.copy(), InverseModifier)
137
-
138
155
  return DiagonalGate([np.conj(entry) for entry in self.params])
139
156
 
140
- @staticmethod
141
- def _check_input(diag):
142
- """Check if ``diag`` is in valid format."""
143
- if not isinstance(diag, (list, np.ndarray)):
144
- raise CircuitError("Diagonal entries must be in a list or numpy array.")
145
- num_qubits = math.log2(len(diag))
146
- if num_qubits < 1 or not num_qubits.is_integer():
147
- raise CircuitError("The number of diagonal entries is not a positive power of 2.")
148
- if not np.allclose(np.abs(diag), 1, atol=_EPS):
149
- raise CircuitError("A diagonal element does not have absolute value one.")
150
-
151
157
 
152
158
  def _extract_rz(phi1, phi2):
153
159
  """
@@ -15,16 +15,13 @@
15
15
  Global Mølmer–Sørensen gate.
16
16
  """
17
17
 
18
- from __future__ import annotations
19
- from collections.abc import Sequence
18
+ from typing import Union, List
20
19
 
21
20
  import numpy as np
22
21
  from qiskit.circuit.quantumcircuit import QuantumCircuit
23
22
  from qiskit.circuit.quantumregister import QuantumRegister
24
- from qiskit.circuit.parameterexpression import ParameterValueType
25
23
  from qiskit.circuit.library.standard_gates import RXXGate
26
24
  from qiskit.circuit.gate import Gate
27
- from qiskit.utils.deprecation import deprecate_func
28
25
 
29
26
 
30
27
  class GMS(QuantumCircuit):
@@ -32,7 +29,7 @@ class GMS(QuantumCircuit):
32
29
 
33
30
  **Circuit symbol:**
34
31
 
35
- .. code-block:: text
32
+ .. parsed-literal::
36
33
 
37
34
  ┌───────────┐
38
35
  q_0: ┤0 ├
@@ -77,8 +74,7 @@ class GMS(QuantumCircuit):
77
74
  `arXiv:1707.06356 <https://arxiv.org/abs/1707.06356>`_
78
75
  """
79
76
 
80
- @deprecate_func(since="1.3", additional_msg="Use the MSGate instead.", pending=True)
81
- def __init__(self, num_qubits: int, theta: list[list[float]] | np.ndarray) -> None:
77
+ def __init__(self, num_qubits: int, theta: Union[List[List[float]], np.ndarray]) -> None:
82
78
  """Create a new Global Mølmer–Sørensen (GMS) gate.
83
79
 
84
80
  Args:
@@ -98,77 +94,28 @@ class GMS(QuantumCircuit):
98
94
 
99
95
 
100
96
  class MSGate(Gate):
101
- r"""The Mølmer–Sørensen gate.
97
+ """MSGate has been deprecated.
98
+ Please use ``GMS`` in ``qiskit.circuit.generalized_gates`` instead.
102
99
 
103
- The Mølmer–Sørensen gate is native to ion-trap systems. The global MS
104
- can be applied to multiple ions to entangle multiple qubits simultaneously [1].
105
-
106
- In the two-qubit case, this is equivalent to an XX interaction,
107
- and is thus reduced to the :class:`.RXXGate`. The global MS gate is a sum of XX
108
- interactions on all pairs [2].
109
-
110
- .. math::
111
-
112
- MS(\chi_{12}, \chi_{13}, ..., \chi_{n-1 n}) =
113
- exp(-i \sum_{i=1}^{n} \sum_{j=i+1}^{n} X{\otimes}X \frac{\chi_{ij}}{2})
114
-
115
- Example::
116
-
117
- import numpy as np
118
- from qiskit.circuit.library import MSGate
119
- from qiskit.quantum_info import Operator
120
-
121
- gate = MSGate(num_qubits=3, theta=[[0, np.pi/4, np.pi/8],
122
- [0, 0, np.pi/2],
123
- [0, 0, 0]])
124
- print(Operator(gate))
125
-
126
-
127
- **References:**
100
+ Global Mølmer–Sørensen gate.
128
101
 
129
- [1] Sørensen, A. and Mølmer, K., Multi-particle entanglement of hot trapped ions.
130
- Physical Review Letters. 82 (9): 1835–1838.
131
- `arXiv:9810040 <https://arxiv.org/abs/quant-ph/9810040>`_
102
+ The Mølmer–Sørensen gate is native to ion-trap systems. The global MS can be
103
+ applied to multiple ions to entangle multiple qubits simultaneously.
132
104
 
133
- [2] Maslov, D. and Nam, Y., Use of global interactions in efficient quantum circuit
134
- constructions. New Journal of Physics, 20(3), p.033018.
135
- `arXiv:1707.06356 <https://arxiv.org/abs/1707.06356>`_
105
+ In the two-qubit case, this is equivalent to an XX(theta) interaction,
106
+ and is thus reduced to the RXXGate.
136
107
  """
137
108
 
138
- def __init__(
139
- self,
140
- num_qubits: int,
141
- theta: ParameterValueType | Sequence[Sequence[ParameterValueType]],
142
- label: str | None = None,
143
- ):
144
- """
145
- Args:
146
- num_qubits: The number of qubits the MS gate acts on.
147
- theta: The XX rotation angles. If a single value, the same angle is used on all
148
- interactions. Alternatively an upper-triangular, square matrix with width
149
- ``num_qubits`` can be provided with interaction angles for each qubit pair.
150
- label: A gate label.
151
- """
109
+ def __init__(self, num_qubits, theta, label=None):
110
+ """Create new MS gate."""
152
111
  super().__init__("ms", num_qubits, [theta], label=label)
153
112
 
154
113
  def _define(self):
155
- thetas = self.params[0]
156
- q = QuantumRegister(self.num_qubits, name="q")
114
+ theta = self.params[0]
115
+ q = QuantumRegister(self.num_qubits, "q")
157
116
  qc = QuantumCircuit(q, name=self.name)
158
117
  for i in range(self.num_qubits):
159
118
  for j in range(i + 1, self.num_qubits):
160
- # if theta is just a single angle, use that, otherwise use the correct index
161
- theta = thetas if not isinstance(thetas, Sequence) else thetas[i][j]
162
119
  qc._append(RXXGate(theta), [q[i], q[j]], [])
163
120
 
164
121
  self.definition = qc
165
-
166
- def validate_parameter(self, parameter):
167
- if isinstance(parameter, Sequence):
168
- # pylint: disable=super-with-arguments
169
- return [
170
- [super(MSGate, self).validate_parameter(theta) for theta in row]
171
- for row in parameter
172
- ]
173
-
174
- return super().validate_parameter(parameter)
@@ -21,7 +21,7 @@ class GR(QuantumCircuit):
21
21
 
22
22
  **Circuit symbol:**
23
23
 
24
- .. code-block:: text
24
+ .. parsed-literal::
25
25
 
26
26
  ┌──────────┐
27
27
  q_0: ┤0 ├
@@ -75,7 +75,7 @@ class GRX(GR):
75
75
 
76
76
  **Circuit symbol:**
77
77
 
78
- .. code-block:: text
78
+ .. parsed-literal::
79
79
 
80
80
  ┌──────────┐
81
81
  q_0: ┤0 ├
@@ -123,7 +123,7 @@ class GRY(GR):
123
123
 
124
124
  **Circuit symbol:**
125
125
 
126
- .. code-block:: text
126
+ .. parsed-literal::
127
127
 
128
128
  ┌──────────┐
129
129
  q_0: ┤0 ├
@@ -171,7 +171,7 @@ class GRZ(QuantumCircuit):
171
171
 
172
172
  **Circuit symbol:**
173
173
 
174
- .. code-block:: text
174
+ .. parsed-literal::
175
175
 
176
176
  ┌──────────┐
177
177
  q_0: ┤0 ├
@@ -31,7 +31,7 @@ from qiskit.exceptions import QiskitError
31
31
  from qiskit.quantum_info.operators.predicates import is_isometry
32
32
  from qiskit._accelerate import isometry as isometry_rs
33
33
 
34
- from .diagonal import DiagonalGate
34
+ from .diagonal import Diagonal
35
35
  from .uc import UCGate
36
36
  from .mcg_up_to_diagonal import MCGupDiag
37
37
 
@@ -167,7 +167,7 @@ class Isometry(Instruction):
167
167
  if len(diag) > 1 and not isometry_rs.diag_is_identity_up_to_global_phase(
168
168
  diag, self._epsilon
169
169
  ):
170
- diagonal = DiagonalGate(np.conj(diag))
170
+ diagonal = Diagonal(np.conj(diag))
171
171
  circuit.append(diagonal, q_input)
172
172
  return circuit
173
173
 
@@ -17,7 +17,6 @@ import numpy as np
17
17
  from qiskit.circuit.quantumcircuit import QuantumCircuit, Gate
18
18
  from qiskit.circuit.exceptions import CircuitError
19
19
  from qiskit.circuit.library.generalized_gates.permutation import PermutationGate
20
- from qiskit.utils.deprecation import deprecate_func
21
20
 
22
21
  # pylint: disable=cyclic-import
23
22
  from qiskit.quantum_info import Clifford
@@ -38,7 +37,7 @@ class LinearFunction(Gate):
38
37
 
39
38
  **Example:** the circuit
40
39
 
41
- .. code-block:: text
40
+ .. parsed-literal::
42
41
 
43
42
  q_0: ──■──
44
43
  ┌─┴─┐
@@ -68,7 +67,7 @@ class LinearFunction(Gate):
68
67
  def __init__(
69
68
  self,
70
69
  linear: (
71
- list[list[bool]]
70
+ list[list]
72
71
  | np.ndarray[bool]
73
72
  | QuantumCircuit
74
73
  | LinearFunction
@@ -222,22 +221,17 @@ class LinearFunction(Gate):
222
221
 
223
222
  def _define(self):
224
223
  """Populates self.definition with a decomposition of this gate."""
225
- from qiskit.synthesis.linear import synth_cnot_count_full_pmh
226
-
227
- self.definition = synth_cnot_count_full_pmh(self.linear)
224
+ self.definition = self.synthesize()
228
225
 
229
- @deprecate_func(
230
- since="1.3",
231
- pending=True,
232
- additional_msg="Call LinearFunction.definition instead, or compile the circuit.",
233
- )
234
226
  def synthesize(self):
235
227
  """Synthesizes the linear function into a quantum circuit.
236
228
 
237
229
  Returns:
238
230
  QuantumCircuit: A circuit implementing the evolution.
239
231
  """
240
- return self.definition
232
+ from qiskit.synthesis.linear import synth_cnot_count_full_pmh
233
+
234
+ return synth_cnot_count_full_pmh(self.linear)
241
235
 
242
236
  @property
243
237
  def linear(self):