qiskit 1.3.0b1__cp39-abi3-win32.whl → 1.3.0rc2__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 (360) hide show
  1. qiskit/VERSION.txt +1 -1
  2. qiskit/__init__.py +20 -1
  3. qiskit/_accelerate.pyd +0 -0
  4. qiskit/assembler/assemble_schedules.py +2 -0
  5. qiskit/circuit/__init__.py +44 -1
  6. qiskit/circuit/_standard_gates_commutations.py +585 -0
  7. qiskit/circuit/barrier.py +2 -0
  8. qiskit/circuit/controlflow/builder.py +3 -3
  9. qiskit/circuit/controlflow/if_else.py +13 -5
  10. qiskit/circuit/controlflow/while_loop.py +10 -2
  11. qiskit/circuit/delay.py +20 -3
  12. qiskit/circuit/equivalence.py +13 -214
  13. qiskit/circuit/gate.py +3 -1
  14. qiskit/circuit/instruction.py +32 -11
  15. qiskit/circuit/instructionset.py +2 -0
  16. qiskit/circuit/library/__init__.py +110 -14
  17. qiskit/circuit/library/arithmetic/__init__.py +9 -2
  18. qiskit/circuit/library/arithmetic/adders/__init__.py +1 -0
  19. qiskit/circuit/library/arithmetic/adders/adder.py +154 -2
  20. qiskit/circuit/library/arithmetic/adders/cdkm_ripple_carry_adder.py +20 -56
  21. qiskit/circuit/library/arithmetic/adders/draper_qft_adder.py +14 -1
  22. qiskit/circuit/library/arithmetic/adders/vbe_ripple_carry_adder.py +21 -91
  23. qiskit/circuit/library/arithmetic/linear_pauli_rotations.py +1 -1
  24. qiskit/circuit/library/arithmetic/multipliers/__init__.py +1 -0
  25. qiskit/circuit/library/arithmetic/multipliers/hrs_cumulative_multiplier.py +8 -1
  26. qiskit/circuit/library/arithmetic/multipliers/multiplier.py +94 -3
  27. qiskit/circuit/library/arithmetic/multipliers/rg_qft_multiplier.py +8 -1
  28. qiskit/circuit/library/arithmetic/weighted_adder.py +1 -1
  29. qiskit/circuit/library/basis_change/qft.py +20 -38
  30. qiskit/circuit/library/blueprintcircuit.py +64 -0
  31. qiskit/circuit/library/boolean_logic/__init__.py +4 -4
  32. qiskit/circuit/library/boolean_logic/inner_product.py +81 -4
  33. qiskit/circuit/library/boolean_logic/quantum_and.py +107 -4
  34. qiskit/circuit/library/boolean_logic/quantum_or.py +107 -3
  35. qiskit/circuit/library/boolean_logic/quantum_xor.py +97 -3
  36. qiskit/circuit/library/data_preparation/__init__.py +6 -3
  37. qiskit/circuit/library/data_preparation/{z_feature_map.py → _z_feature_map.py} +45 -34
  38. qiskit/circuit/library/data_preparation/_zz_feature_map.py +150 -0
  39. qiskit/circuit/library/data_preparation/pauli_feature_map.py +342 -29
  40. qiskit/circuit/library/fourier_checking.py +72 -11
  41. qiskit/circuit/library/generalized_gates/__init__.py +1 -1
  42. qiskit/circuit/library/generalized_gates/diagonal.py +45 -51
  43. qiskit/circuit/library/generalized_gates/gms.py +67 -14
  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 +12 -6
  47. qiskit/circuit/library/generalized_gates/mcmt.py +167 -107
  48. qiskit/circuit/library/generalized_gates/permutation.py +8 -6
  49. qiskit/circuit/library/generalized_gates/rv.py +8 -9
  50. qiskit/circuit/library/graph_state.py +93 -10
  51. qiskit/circuit/library/grover_operator.py +270 -2
  52. qiskit/circuit/library/hidden_linear_function.py +83 -20
  53. qiskit/circuit/library/iqp.py +99 -20
  54. qiskit/circuit/library/n_local/__init__.py +19 -7
  55. qiskit/circuit/library/n_local/efficient_su2.py +118 -5
  56. qiskit/circuit/library/n_local/evolved_operator_ansatz.py +259 -0
  57. qiskit/circuit/library/n_local/excitation_preserving.py +130 -6
  58. qiskit/circuit/library/n_local/n_local.py +406 -5
  59. qiskit/circuit/library/n_local/pauli_two_design.py +106 -4
  60. qiskit/circuit/library/n_local/qaoa_ansatz.py +80 -1
  61. qiskit/circuit/library/n_local/real_amplitudes.py +127 -7
  62. qiskit/circuit/library/n_local/two_local.py +14 -7
  63. qiskit/circuit/library/overlap.py +91 -26
  64. qiskit/circuit/library/pauli_evolution.py +17 -15
  65. qiskit/circuit/library/phase_estimation.py +80 -4
  66. qiskit/circuit/library/quantum_volume.py +72 -20
  67. qiskit/circuit/library/standard_gates/__init__.py +20 -1
  68. qiskit/circuit/library/standard_gates/dcx.py +2 -1
  69. qiskit/circuit/library/standard_gates/ecr.py +2 -2
  70. qiskit/circuit/library/standard_gates/h.py +4 -3
  71. qiskit/circuit/library/standard_gates/i.py +2 -1
  72. qiskit/circuit/library/standard_gates/iswap.py +2 -2
  73. qiskit/circuit/library/standard_gates/p.py +20 -12
  74. qiskit/circuit/library/standard_gates/r.py +1 -1
  75. qiskit/circuit/library/standard_gates/rx.py +4 -3
  76. qiskit/circuit/library/standard_gates/rxx.py +2 -2
  77. qiskit/circuit/library/standard_gates/ry.py +4 -3
  78. qiskit/circuit/library/standard_gates/ryy.py +2 -2
  79. qiskit/circuit/library/standard_gates/rz.py +13 -12
  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 +4 -3
  85. qiskit/circuit/library/standard_gates/t.py +2 -2
  86. qiskit/circuit/library/standard_gates/u.py +11 -3
  87. qiskit/circuit/library/standard_gates/u1.py +65 -15
  88. qiskit/circuit/library/standard_gates/u2.py +4 -1
  89. qiskit/circuit/library/standard_gates/u3.py +31 -3
  90. qiskit/circuit/library/standard_gates/x.py +7 -5
  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 +4 -3
  94. qiskit/circuit/library/standard_gates/z.py +3 -3
  95. qiskit/circuit/library/templates/clifford/clifford_2_1.py +9 -8
  96. qiskit/circuit/library/templates/clifford/clifford_2_2.py +10 -9
  97. qiskit/circuit/library/templates/clifford/clifford_2_3.py +9 -7
  98. qiskit/circuit/library/templates/clifford/clifford_2_4.py +9 -8
  99. qiskit/circuit/library/templates/clifford/clifford_3_1.py +9 -8
  100. qiskit/circuit/library/templates/clifford/clifford_4_1.py +10 -9
  101. qiskit/circuit/library/templates/clifford/clifford_4_2.py +10 -9
  102. qiskit/circuit/library/templates/clifford/clifford_4_3.py +10 -9
  103. qiskit/circuit/library/templates/clifford/clifford_4_4.py +10 -9
  104. qiskit/circuit/library/templates/clifford/clifford_5_1.py +10 -9
  105. qiskit/circuit/library/templates/clifford/clifford_6_1.py +10 -9
  106. qiskit/circuit/library/templates/clifford/clifford_6_2.py +10 -9
  107. qiskit/circuit/library/templates/clifford/clifford_6_3.py +10 -9
  108. qiskit/circuit/library/templates/clifford/clifford_6_4.py +9 -8
  109. qiskit/circuit/library/templates/clifford/clifford_6_5.py +10 -9
  110. qiskit/circuit/library/templates/clifford/clifford_8_1.py +10 -9
  111. qiskit/circuit/library/templates/clifford/clifford_8_2.py +10 -9
  112. qiskit/circuit/library/templates/clifford/clifford_8_3.py +10 -9
  113. qiskit/circuit/library/templates/nct/template_nct_2a_1.py +9 -7
  114. qiskit/circuit/library/templates/nct/template_nct_2a_2.py +10 -8
  115. qiskit/circuit/library/templates/nct/template_nct_2a_3.py +12 -10
  116. qiskit/circuit/library/templates/nct/template_nct_4a_1.py +16 -14
  117. qiskit/circuit/library/templates/nct/template_nct_4a_2.py +14 -12
  118. qiskit/circuit/library/templates/nct/template_nct_4a_3.py +12 -10
  119. qiskit/circuit/library/templates/nct/template_nct_4b_1.py +14 -12
  120. qiskit/circuit/library/templates/nct/template_nct_4b_2.py +12 -10
  121. qiskit/circuit/library/templates/nct/template_nct_5a_1.py +12 -10
  122. qiskit/circuit/library/templates/nct/template_nct_5a_2.py +12 -10
  123. qiskit/circuit/library/templates/nct/template_nct_5a_3.py +12 -10
  124. qiskit/circuit/library/templates/nct/template_nct_5a_4.py +11 -9
  125. qiskit/circuit/library/templates/nct/template_nct_6a_1.py +11 -9
  126. qiskit/circuit/library/templates/nct/template_nct_6a_2.py +12 -10
  127. qiskit/circuit/library/templates/nct/template_nct_6a_3.py +12 -10
  128. qiskit/circuit/library/templates/nct/template_nct_6a_4.py +12 -10
  129. qiskit/circuit/library/templates/nct/template_nct_6b_1.py +12 -10
  130. qiskit/circuit/library/templates/nct/template_nct_6b_2.py +12 -10
  131. qiskit/circuit/library/templates/nct/template_nct_6c_1.py +12 -10
  132. qiskit/circuit/library/templates/nct/template_nct_7a_1.py +13 -11
  133. qiskit/circuit/library/templates/nct/template_nct_7b_1.py +13 -11
  134. qiskit/circuit/library/templates/nct/template_nct_7c_1.py +13 -11
  135. qiskit/circuit/library/templates/nct/template_nct_7d_1.py +13 -11
  136. qiskit/circuit/library/templates/nct/template_nct_7e_1.py +13 -11
  137. qiskit/circuit/library/templates/nct/template_nct_9a_1.py +13 -11
  138. qiskit/circuit/library/templates/nct/template_nct_9c_1.py +11 -9
  139. qiskit/circuit/library/templates/nct/template_nct_9c_10.py +12 -10
  140. qiskit/circuit/library/templates/nct/template_nct_9c_11.py +12 -10
  141. qiskit/circuit/library/templates/nct/template_nct_9c_12.py +12 -10
  142. qiskit/circuit/library/templates/nct/template_nct_9c_2.py +12 -10
  143. qiskit/circuit/library/templates/nct/template_nct_9c_3.py +12 -10
  144. qiskit/circuit/library/templates/nct/template_nct_9c_4.py +12 -10
  145. qiskit/circuit/library/templates/nct/template_nct_9c_5.py +12 -10
  146. qiskit/circuit/library/templates/nct/template_nct_9c_6.py +12 -10
  147. qiskit/circuit/library/templates/nct/template_nct_9c_7.py +12 -10
  148. qiskit/circuit/library/templates/nct/template_nct_9c_8.py +12 -10
  149. qiskit/circuit/library/templates/nct/template_nct_9c_9.py +12 -10
  150. qiskit/circuit/library/templates/nct/template_nct_9d_1.py +11 -9
  151. qiskit/circuit/library/templates/nct/template_nct_9d_10.py +12 -10
  152. qiskit/circuit/library/templates/nct/template_nct_9d_2.py +12 -10
  153. qiskit/circuit/library/templates/nct/template_nct_9d_3.py +12 -10
  154. qiskit/circuit/library/templates/nct/template_nct_9d_4.py +12 -10
  155. qiskit/circuit/library/templates/nct/template_nct_9d_5.py +12 -10
  156. qiskit/circuit/library/templates/nct/template_nct_9d_6.py +12 -10
  157. qiskit/circuit/library/templates/nct/template_nct_9d_7.py +12 -10
  158. qiskit/circuit/library/templates/nct/template_nct_9d_8.py +12 -10
  159. qiskit/circuit/library/templates/nct/template_nct_9d_9.py +12 -10
  160. qiskit/circuit/library/templates/rzx/rzx_cy.py +11 -10
  161. qiskit/circuit/library/templates/rzx/rzx_xz.py +16 -15
  162. qiskit/circuit/library/templates/rzx/rzx_yz.py +12 -10
  163. qiskit/circuit/library/templates/rzx/rzx_zz1.py +22 -20
  164. qiskit/circuit/library/templates/rzx/rzx_zz2.py +16 -15
  165. qiskit/circuit/library/templates/rzx/rzx_zz3.py +17 -15
  166. qiskit/circuit/parameter.py +4 -0
  167. qiskit/circuit/parameterexpression.py +167 -34
  168. qiskit/circuit/quantumcircuit.py +162 -126
  169. qiskit/circuit/singleton.py +2 -0
  170. qiskit/circuit/store.py +2 -0
  171. qiskit/circuit/twirling.py +145 -0
  172. qiskit/compiler/assembler.py +17 -4
  173. qiskit/compiler/scheduler.py +2 -0
  174. qiskit/compiler/sequencer.py +2 -0
  175. qiskit/compiler/transpiler.py +81 -26
  176. qiskit/converters/circuit_to_dag.py +2 -2
  177. qiskit/converters/circuit_to_dagdependency.py +1 -1
  178. qiskit/converters/circuit_to_dagdependency_v2.py +1 -1
  179. qiskit/converters/circuit_to_instruction.py +1 -1
  180. qiskit/converters/dag_to_circuit.py +7 -5
  181. qiskit/converters/dag_to_dagdependency.py +1 -1
  182. qiskit/converters/dag_to_dagdependency_v2.py +1 -1
  183. qiskit/converters/dagdependency_to_circuit.py +5 -1
  184. qiskit/converters/dagdependency_to_dag.py +6 -1
  185. qiskit/dagcircuit/collect_blocks.py +3 -3
  186. qiskit/dagcircuit/dagdependency.py +18 -5
  187. qiskit/dagcircuit/dagdependency_v2.py +1 -1
  188. qiskit/dagcircuit/dagnode.py +2 -2
  189. qiskit/passmanager/__init__.py +2 -2
  190. qiskit/primitives/backend_estimator.py +5 -2
  191. qiskit/primitives/backend_sampler_v2.py +61 -18
  192. qiskit/primitives/base/base_estimator.py +2 -2
  193. qiskit/primitives/containers/data_bin.py +9 -1
  194. qiskit/primitives/statevector_sampler.py +1 -1
  195. qiskit/primitives/utils.py +1 -1
  196. qiskit/providers/__init__.py +3 -3
  197. qiskit/providers/backend.py +12 -1
  198. qiskit/providers/backend_compat.py +23 -3
  199. qiskit/providers/basic_provider/basic_simulator.py +12 -2
  200. qiskit/providers/fake_provider/fake_pulse_backend.py +6 -1
  201. qiskit/providers/fake_provider/generic_backend_v2.py +46 -30
  202. qiskit/providers/models/pulsedefaults.py +2 -0
  203. qiskit/pulse/builder.py +59 -18
  204. qiskit/pulse/calibration_entries.py +4 -1
  205. qiskit/pulse/channels.py +2 -0
  206. qiskit/pulse/exceptions.py +2 -0
  207. qiskit/pulse/instruction_schedule_map.py +21 -6
  208. qiskit/pulse/instructions/acquire.py +2 -0
  209. qiskit/pulse/instructions/delay.py +2 -0
  210. qiskit/pulse/instructions/directives.py +8 -0
  211. qiskit/pulse/instructions/frequency.py +3 -0
  212. qiskit/pulse/instructions/instruction.py +2 -0
  213. qiskit/pulse/instructions/phase.py +3 -0
  214. qiskit/pulse/instructions/play.py +2 -0
  215. qiskit/pulse/instructions/reference.py +2 -0
  216. qiskit/pulse/instructions/snapshot.py +2 -0
  217. qiskit/pulse/library/pulse.py +2 -0
  218. qiskit/pulse/library/symbolic_pulses.py +28 -0
  219. qiskit/pulse/library/waveform.py +2 -0
  220. qiskit/pulse/macros.py +1 -1
  221. qiskit/pulse/schedule.py +12 -13
  222. qiskit/pulse/transforms/alignments.py +5 -3
  223. qiskit/pulse/transforms/dag.py +7 -0
  224. qiskit/qasm2/export.py +5 -3
  225. qiskit/qasm2/parse.py +46 -2
  226. qiskit/qasm3/__init__.py +1 -0
  227. qiskit/qasm3/ast.py +123 -15
  228. qiskit/qasm3/exporter.py +103 -77
  229. qiskit/qobj/converters/pulse_instruction.py +6 -4
  230. qiskit/qpy/__init__.py +181 -0
  231. qiskit/qpy/binary_io/circuits.py +20 -5
  232. qiskit/qpy/binary_io/schedules.py +3 -4
  233. qiskit/qpy/binary_io/value.py +310 -13
  234. qiskit/qpy/common.py +46 -2
  235. qiskit/qpy/formats.py +7 -0
  236. qiskit/qpy/interface.py +40 -4
  237. qiskit/quantum_info/__init__.py +4 -0
  238. qiskit/quantum_info/operators/channel/transformations.py +28 -21
  239. qiskit/quantum_info/operators/dihedral/dihedral.py +1 -1
  240. qiskit/quantum_info/operators/operator.py +54 -8
  241. qiskit/quantum_info/operators/symplectic/base_pauli.py +11 -19
  242. qiskit/quantum_info/operators/symplectic/clifford.py +1 -1
  243. qiskit/quantum_info/operators/symplectic/clifford_circuits.py +1 -1
  244. qiskit/quantum_info/operators/symplectic/pauli.py +2 -0
  245. qiskit/quantum_info/operators/symplectic/pauli_list.py +4 -4
  246. qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py +23 -2
  247. qiskit/quantum_info/states/densitymatrix.py +5 -5
  248. qiskit/quantum_info/states/stabilizerstate.py +1 -1
  249. qiskit/quantum_info/states/statevector.py +6 -6
  250. qiskit/result/mitigation/base_readout_mitigator.py +1 -1
  251. qiskit/result/mitigation/correlated_readout_mitigator.py +9 -1
  252. qiskit/result/mitigation/local_readout_mitigator.py +9 -1
  253. qiskit/result/mitigation/utils.py +57 -0
  254. qiskit/scheduler/config.py +2 -0
  255. qiskit/scheduler/methods/basic.py +3 -0
  256. qiskit/scheduler/schedule_circuit.py +2 -0
  257. qiskit/scheduler/sequence.py +2 -0
  258. qiskit/synthesis/__init__.py +25 -0
  259. qiskit/synthesis/arithmetic/__init__.py +16 -0
  260. qiskit/synthesis/arithmetic/adders/__init__.py +17 -0
  261. qiskit/synthesis/arithmetic/adders/cdkm_ripple_carry_adder.py +154 -0
  262. qiskit/synthesis/arithmetic/adders/draper_qft_adder.py +103 -0
  263. qiskit/synthesis/arithmetic/adders/vbe_ripple_carry_adder.py +161 -0
  264. qiskit/synthesis/arithmetic/multipliers/__init__.py +16 -0
  265. qiskit/synthesis/arithmetic/multipliers/hrs_cumulative_multiplier.py +102 -0
  266. qiskit/synthesis/arithmetic/multipliers/rg_qft_multiplier.py +99 -0
  267. qiskit/synthesis/clifford/clifford_decompose_bm.py +1 -2
  268. qiskit/synthesis/clifford/clifford_decompose_greedy.py +3 -2
  269. qiskit/synthesis/clifford/clifford_decompose_layers.py +2 -1
  270. qiskit/synthesis/evolution/__init__.py +1 -0
  271. qiskit/synthesis/evolution/lie_trotter.py +16 -42
  272. qiskit/synthesis/evolution/pauli_network.py +80 -0
  273. qiskit/synthesis/evolution/product_formula.py +165 -238
  274. qiskit/synthesis/evolution/qdrift.py +36 -29
  275. qiskit/synthesis/evolution/suzuki_trotter.py +87 -27
  276. qiskit/synthesis/multi_controlled/__init__.py +1 -0
  277. qiskit/synthesis/multi_controlled/mcmt_vchain.py +52 -0
  278. qiskit/synthesis/qft/qft_decompose_full.py +19 -1
  279. qiskit/synthesis/qft/qft_decompose_lnn.py +2 -1
  280. qiskit/synthesis/stabilizer/stabilizer_decompose.py +2 -1
  281. qiskit/synthesis/two_qubit/two_qubit_decompose.py +4 -63
  282. qiskit/synthesis/unitary/qsd.py +5 -5
  283. qiskit/transpiler/__init__.py +21 -14
  284. qiskit/transpiler/basepasses.py +1 -1
  285. qiskit/transpiler/passes/__init__.py +2 -0
  286. qiskit/transpiler/passes/basis/basis_translator.py +9 -565
  287. qiskit/transpiler/passes/basis/decompose.py +45 -12
  288. qiskit/transpiler/passes/basis/unroll_3q_or_more.py +1 -1
  289. qiskit/transpiler/passes/basis/unroll_custom_definitions.py +1 -1
  290. qiskit/transpiler/passes/calibration/pulse_gate.py +4 -2
  291. qiskit/transpiler/passes/calibration/rx_builder.py +11 -7
  292. qiskit/transpiler/passes/calibration/rzx_builder.py +46 -30
  293. qiskit/transpiler/passes/layout/disjoint_utils.py +15 -13
  294. qiskit/transpiler/passes/layout/sabre_layout.py +7 -2
  295. qiskit/transpiler/passes/layout/sabre_pre_layout.py +5 -0
  296. qiskit/transpiler/passes/optimization/__init__.py +1 -0
  297. qiskit/transpiler/passes/optimization/collect_cliffords.py +19 -3
  298. qiskit/transpiler/passes/optimization/collect_linear_functions.py +1 -1
  299. qiskit/transpiler/passes/optimization/collect_multiqubit_blocks.py +2 -2
  300. qiskit/transpiler/passes/optimization/commutative_inverse_cancellation.py +1 -1
  301. qiskit/transpiler/passes/optimization/consolidate_blocks.py +48 -131
  302. qiskit/transpiler/passes/optimization/echo_rzx_weyl_decomposition.py +4 -2
  303. qiskit/transpiler/passes/optimization/elide_permutations.py +9 -32
  304. qiskit/transpiler/passes/optimization/optimize_1q_decomposition.py +5 -11
  305. qiskit/transpiler/passes/optimization/optimize_1q_gates.py +1 -1
  306. qiskit/transpiler/passes/optimization/optimize_swap_before_measure.py +1 -1
  307. qiskit/transpiler/passes/optimization/remove_identity_equiv.py +69 -0
  308. qiskit/transpiler/passes/optimization/template_matching/backward_match.py +5 -5
  309. qiskit/transpiler/passes/optimization/template_matching/forward_match.py +4 -4
  310. qiskit/transpiler/passes/optimization/template_matching/template_substitution.py +2 -2
  311. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/commuting_2q_gate_router.py +1 -1
  312. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/swap_strategy.py +1 -1
  313. qiskit/transpiler/passes/routing/sabre_swap.py +7 -3
  314. qiskit/transpiler/passes/routing/star_prerouting.py +2 -2
  315. qiskit/transpiler/passes/scheduling/alap.py +1 -1
  316. qiskit/transpiler/passes/scheduling/alignments/align_measures.py +2 -2
  317. qiskit/transpiler/passes/scheduling/alignments/check_durations.py +1 -1
  318. qiskit/transpiler/passes/scheduling/alignments/pulse_gate_validation.py +2 -0
  319. qiskit/transpiler/passes/scheduling/alignments/reschedule.py +2 -2
  320. qiskit/transpiler/passes/scheduling/asap.py +1 -1
  321. qiskit/transpiler/passes/scheduling/base_scheduler.py +14 -12
  322. qiskit/transpiler/passes/scheduling/dynamical_decoupling.py +9 -4
  323. qiskit/transpiler/passes/scheduling/padding/base_padding.py +1 -1
  324. qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py +16 -5
  325. qiskit/transpiler/passes/scheduling/padding/pad_delay.py +4 -1
  326. qiskit/transpiler/passes/scheduling/scheduling/base_scheduler.py +6 -2
  327. qiskit/transpiler/passes/scheduling/time_unit_conversion.py +9 -4
  328. qiskit/transpiler/passes/synthesis/high_level_synthesis.py +262 -99
  329. qiskit/transpiler/passes/synthesis/hls_plugins.py +637 -7
  330. qiskit/transpiler/passes/synthesis/solovay_kitaev_synthesis.py +3 -3
  331. qiskit/transpiler/passes/synthesis/unitary_synthesis.py +55 -34
  332. qiskit/transpiler/passes/utils/barrier_before_final_measurements.py +2 -56
  333. qiskit/transpiler/passes/utils/convert_conditions_to_if_ops.py +5 -0
  334. qiskit/transpiler/passes/utils/gate_direction.py +12 -275
  335. qiskit/transpiler/passes/utils/gates_basis.py +7 -30
  336. qiskit/transpiler/passes/utils/merge_adjacent_barriers.py +2 -1
  337. qiskit/transpiler/passmanager_config.py +22 -4
  338. qiskit/transpiler/preset_passmanagers/builtin_plugins.py +40 -14
  339. qiskit/transpiler/preset_passmanagers/common.py +5 -3
  340. qiskit/transpiler/preset_passmanagers/generate_preset_pass_manager.py +125 -42
  341. qiskit/transpiler/preset_passmanagers/plugin.py +1 -1
  342. qiskit/transpiler/target.py +74 -16
  343. qiskit/utils/deprecate_pulse.py +119 -0
  344. qiskit/visualization/circuit/_utils.py +2 -2
  345. qiskit/visualization/circuit/circuit_visualization.py +3 -2
  346. qiskit/visualization/circuit/matplotlib.py +1 -1
  347. qiskit/visualization/dag_visualization.py +1 -1
  348. qiskit/visualization/pass_manager_visualization.py +3 -14
  349. qiskit/visualization/pulse_v2/interface.py +3 -1
  350. qiskit/visualization/timeline/core.py +25 -2
  351. qiskit/visualization/timeline/interface.py +12 -0
  352. {qiskit-1.3.0b1.dist-info → qiskit-1.3.0rc2.dist-info}/METADATA +9 -8
  353. {qiskit-1.3.0b1.dist-info → qiskit-1.3.0rc2.dist-info}/RECORD +357 -346
  354. {qiskit-1.3.0b1.dist-info → qiskit-1.3.0rc2.dist-info}/WHEEL +1 -1
  355. {qiskit-1.3.0b1.dist-info → qiskit-1.3.0rc2.dist-info}/entry_points.txt +19 -0
  356. qiskit/circuit/library/data_preparation/zz_feature_map.py +0 -118
  357. qiskit/synthesis/two_qubit/weyl.py +0 -97
  358. qiskit/transpiler/passes/synthesis/qubit_tracker.py +0 -132
  359. {qiskit-1.3.0b1.dist-info → qiskit-1.3.0rc2.dist-info}/LICENSE.txt +0 -0
  360. {qiskit-1.3.0b1.dist-info → qiskit-1.3.0rc2.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  # This code is part of Qiskit.
2
2
  #
3
- # (C) Copyright IBM 2020.
3
+ # (C) Copyright IBM 2020, 2024.
4
4
  #
5
5
  # This code is licensed under the Apache License, Version 2.0. You may
6
6
  # obtain a copy of this license in the LICENSE.txt file in the root directory
@@ -11,11 +11,13 @@
11
11
  # that they have been altered from the originals.
12
12
 
13
13
 
14
- """Implementations of boolean logic quantum circuits."""
14
+ """Boolean AND circuit and gate."""
15
+
15
16
  from __future__ import annotations
16
17
 
17
- from qiskit.circuit import QuantumRegister, QuantumCircuit, AncillaRegister
18
+ from qiskit.circuit import QuantumRegister, QuantumCircuit, AncillaRegister, Gate
18
19
  from qiskit.circuit.library.standard_gates import MCXGate
20
+ from qiskit.utils.deprecation import deprecate_func
19
21
 
20
22
 
21
23
  class AND(QuantumCircuit):
@@ -49,6 +51,11 @@ class AND(QuantumCircuit):
49
51
 
50
52
  """
51
53
 
54
+ @deprecate_func(
55
+ since="1.3",
56
+ additional_msg="Use qiskit.circuit.library.AndGate instead.",
57
+ pending=True,
58
+ )
52
59
  def __init__(
53
60
  self,
54
61
  num_variable_qubits: int,
@@ -58,7 +65,7 @@ class AND(QuantumCircuit):
58
65
  """Create a new logical AND circuit.
59
66
 
60
67
  Args:
61
- num_variable_qubits: The qubits of which the OR is computed. The result will be written
68
+ num_variable_qubits: The qubits of which the AND is computed. The result will be written
62
69
  into an additional result qubit.
63
70
  flags: A list of +1/0/-1 marking negations or omissions of qubits.
64
71
  mcx_mode: The mode to be used to implement the multi-controlled X gate.
@@ -95,3 +102,99 @@ class AND(QuantumCircuit):
95
102
 
96
103
  super().__init__(*circuit.qregs, name="and")
97
104
  self.compose(circuit.to_gate(), qubits=self.qubits, inplace=True)
105
+
106
+
107
+ class AndGate(Gate):
108
+ r"""A gate representing the logical AND operation on a number of qubits.
109
+
110
+ For the AND operation the state :math:`|1\rangle` is interpreted as ``True``. The result
111
+ qubit is flipped, if the state of all variable qubits is ``True``. In this format, the AND
112
+ operation equals a multi-controlled X gate, which is controlled on all variable qubits.
113
+ Using a list of flags however, qubits can be skipped or negated. Practically, the flags
114
+ allow to skip controls or to apply pre- and post-X gates to the negated qubits.
115
+
116
+ The AndGate gate without special flags equals the multi-controlled-X gate:
117
+
118
+ .. plot::
119
+
120
+ from qiskit.circuit import QuantumCircuit
121
+ from qiskit.circuit.library import AndGate
122
+ from qiskit.visualization.library import _generate_circuit_library_visualization
123
+ circuit = QuantumCircuit(6)
124
+ circuit.append(AndGate(5), [0, 1, 2, 3, 4, 5])
125
+ _generate_circuit_library_visualization(circuit)
126
+
127
+ Using flags we can negate qubits or skip them. For instance, if we have 5 qubits and want to
128
+ return ``True`` if the first qubit is ``False`` and the last two are ``True`` we use the flags
129
+ ``[-1, 0, 0, 1, 1]``.
130
+
131
+ .. plot::
132
+
133
+ from qiskit.circuit import QuantumCircuit
134
+ from qiskit.circuit.library import AndGate
135
+ from qiskit.visualization.library import _generate_circuit_library_visualization
136
+ circuit = QuantumCircuit(6)
137
+ circuit.append(AndGate(5, flags=[-1, 0, 0, 1, 1]), [0, 1, 2, 3, 4, 5])
138
+ _generate_circuit_library_visualization(circuit)
139
+
140
+ """
141
+
142
+ def __init__(
143
+ self,
144
+ num_variable_qubits: int,
145
+ flags: list[int] | None = None,
146
+ ) -> None:
147
+ """
148
+ Args:
149
+ num_variable_qubits: The qubits of which the AND is computed. The result will be written
150
+ into an additional result qubit.
151
+ flags: A list of +1/0/-1 marking negations or omissions of qubits.
152
+ """
153
+ super().__init__("and", num_variable_qubits + 1, [])
154
+ self.num_variable_qubits = num_variable_qubits
155
+ self.flags = flags
156
+
157
+ def _define(self):
158
+ # add registers
159
+ qr_variable = QuantumRegister(self.num_variable_qubits, name="variable")
160
+ qr_result = QuantumRegister(1, name="result")
161
+
162
+ # determine the control qubits: all that have a nonzero flag
163
+ flags = self.flags or [1] * self.num_variable_qubits
164
+ control_qubits = [q for q, flag in zip(qr_variable, flags) if flag != 0]
165
+
166
+ # determine the qubits that need to be flipped (if a flag is < 0)
167
+ flip_qubits = [q for q, flag in zip(qr_variable, flags) if flag < 0]
168
+
169
+ # create the definition circuit
170
+ circuit = QuantumCircuit(qr_variable, qr_result, name="and")
171
+
172
+ if len(flip_qubits) > 0:
173
+ circuit.x(flip_qubits)
174
+ circuit.mcx(control_qubits, qr_result[:])
175
+ if len(flip_qubits) > 0:
176
+ circuit.x(flip_qubits)
177
+
178
+ self.definition = circuit
179
+
180
+ # pylint: disable=unused-argument
181
+ def inverse(self, annotated: bool = False):
182
+ r"""Return inverted AND gate (itself).
183
+
184
+ Args:
185
+ annotated: when set to ``True``, this is typically used to return an
186
+ :class:`.AnnotatedOperation` with an inverse modifier set instead of a concrete
187
+ :class:`.Gate`. However, for this class this argument is ignored as this gate
188
+ is self-inverse.
189
+
190
+ Returns:
191
+ AndGate: inverse gate (self-inverse).
192
+ """
193
+ return AndGate(self.num_variable_qubits, self.flags)
194
+
195
+ def __eq__(self, other):
196
+ return (
197
+ isinstance(other, AndGate)
198
+ and self.num_variable_qubits == other.num_variable_qubits
199
+ and self.flags == other.flags
200
+ )
@@ -1,6 +1,6 @@
1
1
  # This code is part of Qiskit.
2
2
  #
3
- # (C) Copyright IBM 2020.
3
+ # (C) Copyright IBM 2020, 2024.
4
4
  #
5
5
  # This code is licensed under the Apache License, Version 2.0. You may
6
6
  # obtain a copy of this license in the LICENSE.txt file in the root directory
@@ -11,12 +11,14 @@
11
11
  # that they have been altered from the originals.
12
12
 
13
13
 
14
- """Implementations of boolean logic quantum circuits."""
14
+ """Boolean OR circuit and gate."""
15
+
15
16
  from __future__ import annotations
16
17
  from typing import List, Optional
17
18
 
18
- from qiskit.circuit import QuantumRegister, QuantumCircuit, AncillaRegister
19
+ from qiskit.circuit import QuantumRegister, QuantumCircuit, AncillaRegister, Gate
19
20
  from qiskit.circuit.library.standard_gates import MCXGate
21
+ from qiskit.utils.deprecation import deprecate_func
20
22
 
21
23
 
22
24
  class OR(QuantumCircuit):
@@ -50,6 +52,11 @@ class OR(QuantumCircuit):
50
52
 
51
53
  """
52
54
 
55
+ @deprecate_func(
56
+ since="1.3",
57
+ additional_msg="Use qiskit.circuit.library.OrGate instead.",
58
+ pending=True,
59
+ )
53
60
  def __init__(
54
61
  self,
55
62
  num_variable_qubits: int,
@@ -96,3 +103,100 @@ class OR(QuantumCircuit):
96
103
 
97
104
  super().__init__(*circuit.qregs, name="or")
98
105
  self.compose(circuit.to_gate(), qubits=self.qubits, inplace=True)
106
+
107
+
108
+ class OrGate(Gate):
109
+ r"""A gate representing the logical OR operation on a number of qubits.
110
+
111
+ For the OR operation the state :math:`|1\rangle` is interpreted as ``True``. The result
112
+ qubit is flipped, if the state of any variable qubit is ``True``. The OR is implemented using
113
+ a multi-open-controlled X gate (i.e. flips if the state is :math:`|0\rangle`) and
114
+ applying an X gate on the result qubit.
115
+ Using a list of flags, qubits can be skipped or negated.
116
+
117
+ The OrGate gate without special flags:
118
+
119
+ .. plot::
120
+
121
+ from qiskit.circuit import QuantumCircuit
122
+ from qiskit.circuit.library import OrGate
123
+ from qiskit.visualization.library import _generate_circuit_library_visualization
124
+ circuit = QuantumCircuit(6)
125
+ circuit.append(OrGate(5), [0, 1, 2, 3, 4, 5])
126
+ _generate_circuit_library_visualization(circuit)
127
+
128
+ Using flags we can negate qubits or skip them. For instance, if we have 5 qubits and want to
129
+ return ``True`` if the first qubit is ``False`` or one of the last two are ``True`` we use the
130
+ flags ``[-1, 0, 0, 1, 1]``.
131
+
132
+ .. plot::
133
+
134
+ from qiskit.circuit import QuantumCircuit
135
+ from qiskit.circuit.library import OrGate
136
+ from qiskit.visualization.library import _generate_circuit_library_visualization
137
+ circuit = QuantumCircuit(6)
138
+ circuit.append(OrGate(5, flags=[-1, 0, 0, 1, 1]), [0, 1, 2, 3, 4, 5])
139
+ _generate_circuit_library_visualization(circuit)
140
+
141
+ """
142
+
143
+ def __init__(
144
+ self,
145
+ num_variable_qubits: int,
146
+ flags: list[int] | None = None,
147
+ ) -> None:
148
+ """
149
+ Args:
150
+ num_variable_qubits: The qubits of which the AND is computed. The result will be written
151
+ into an additional result qubit.
152
+ flags: A list of +1/0/-1 marking negations or omissions of qubits.
153
+ """
154
+ super().__init__("and", num_variable_qubits + 1, [])
155
+ self.num_variable_qubits = num_variable_qubits
156
+ self.flags = flags
157
+
158
+ def _define(self):
159
+ # add registers
160
+ qr_variable = QuantumRegister(self.num_variable_qubits, name="variable")
161
+ qr_result = QuantumRegister(1, name="result")
162
+
163
+ # determine the control qubits: all that have a nonzero flag
164
+ flags = self.flags or [1] * self.num_variable_qubits
165
+ control_qubits = [q for q, flag in zip(qr_variable, flags) if flag != 0]
166
+
167
+ # determine the qubits that need to be flipped (if a flag is > 0)
168
+ flip_qubits = [q for q, flag in zip(qr_variable, flags) if flag > 0]
169
+
170
+ # create the definition circuit
171
+ circuit = QuantumCircuit(qr_variable, qr_result, name="or")
172
+
173
+ circuit.x(qr_result)
174
+ if len(flip_qubits) > 0:
175
+ circuit.x(flip_qubits)
176
+ circuit.mcx(control_qubits, qr_result[:])
177
+ if len(flip_qubits) > 0:
178
+ circuit.x(flip_qubits)
179
+
180
+ self.definition = circuit
181
+
182
+ # pylint: disable=unused-argument
183
+ def inverse(self, annotated: bool = False):
184
+ r"""Return inverted OR gate (itself).
185
+
186
+ Args:
187
+ annotated: when set to ``True``, this is typically used to return an
188
+ :class:`.AnnotatedOperation` with an inverse modifier set instead of a concrete
189
+ :class:`.Gate`. However, for this class this argument is ignored as this gate
190
+ is self-inverse.
191
+
192
+ Returns:
193
+ OrGate: inverse gate (self-inverse).
194
+ """
195
+ return OrGate(self.num_variable_qubits, self.flags)
196
+
197
+ def __eq__(self, other):
198
+ return (
199
+ isinstance(other, OrGate)
200
+ and self.num_variable_qubits == other.num_variable_qubits
201
+ and self.flags == other.flags
202
+ )
@@ -1,6 +1,6 @@
1
1
  # This code is part of Qiskit.
2
2
  #
3
- # (C) Copyright IBM 2020.
3
+ # (C) Copyright IBM 2020, 2024.
4
4
  #
5
5
  # This code is licensed under the Apache License, Version 2.0. You may
6
6
  # obtain a copy of this license in the LICENSE.txt file in the root directory
@@ -11,13 +11,14 @@
11
11
  # that they have been altered from the originals.
12
12
 
13
13
 
14
- """XOR circuit."""
14
+ """Bitwise XOR circuit and gate."""
15
15
 
16
16
  from typing import Optional
17
17
 
18
18
  import numpy as np
19
- from qiskit.circuit import QuantumCircuit
19
+ from qiskit.circuit import QuantumCircuit, Gate
20
20
  from qiskit.circuit.exceptions import CircuitError
21
+ from qiskit.utils.deprecation import deprecate_func
21
22
 
22
23
 
23
24
  class XOR(QuantumCircuit):
@@ -28,6 +29,12 @@ class XOR(QuantumCircuit):
28
29
  This circuit can also represent addition by ``amount`` over the finite field GF(2).
29
30
  """
30
31
 
32
+ @deprecate_func(
33
+ since="1.3",
34
+ additional_msg="Instead, for xor-ing with a specified amount, use BitwiseXorGate,"
35
+ "and for xor-ing with a random amount, use random_bitwise_xor.",
36
+ pending=True,
37
+ )
31
38
  def __init__(
32
39
  self,
33
40
  num_qubits: int,
@@ -69,3 +76,90 @@ class XOR(QuantumCircuit):
69
76
 
70
77
  super().__init__(*circuit.qregs, name="xor")
71
78
  self.compose(circuit.to_gate(), qubits=self.qubits, inplace=True)
79
+
80
+
81
+ class BitwiseXorGate(Gate):
82
+ """An n-qubit gate for bitwise xor-ing the input with some integer ``amount``.
83
+
84
+ The ``amount`` is xor-ed in bitstring form with the input.
85
+
86
+ This gate can also represent addition by ``amount`` over the finite field GF(2).
87
+
88
+ Reference Circuit:
89
+
90
+ .. plot::
91
+
92
+ from qiskit.circuit import QuantumCircuit
93
+ from qiskit.circuit.library import BitwiseXorGate
94
+ from qiskit.visualization.library import _generate_circuit_library_visualization
95
+ circuit = QuantumCircuit(5)
96
+ circuit.append(BitwiseXorGate(5, amount=12), [0, 1, 2, 3, 4])
97
+ _generate_circuit_library_visualization(circuit)
98
+
99
+ """
100
+
101
+ def __init__(
102
+ self,
103
+ num_qubits: int,
104
+ amount: int,
105
+ ) -> None:
106
+ """
107
+ Args:
108
+ num_qubits: the width of circuit.
109
+ amount: the xor amount in decimal form.
110
+
111
+ Raises:
112
+ CircuitError: if the xor bitstring exceeds available qubits.
113
+ """
114
+ if len(bin(amount)[2:]) > num_qubits:
115
+ raise CircuitError("Bits in 'amount' exceed circuit width")
116
+
117
+ super().__init__("xor", num_qubits, [])
118
+ self.amount = amount
119
+
120
+ def _define(self):
121
+ circuit = QuantumCircuit(self.num_qubits, name="xor")
122
+ amount = self.amount
123
+ for i in range(self.num_qubits):
124
+ bit = amount & 1
125
+ amount = amount >> 1
126
+ if bit == 1:
127
+ circuit.x(i)
128
+
129
+ self.definition = circuit
130
+
131
+ def __eq__(self, other):
132
+ return (
133
+ isinstance(other, BitwiseXorGate)
134
+ and self.num_qubits == other.num_qubits
135
+ and self.amount == other.amount
136
+ )
137
+
138
+ # pylint: disable=unused-argument
139
+ def inverse(self, annotated: bool = False):
140
+ r"""Return inverted BitwiseXorGate gate (itself).
141
+
142
+ Args:
143
+ annotated: when set to ``True``, this is typically used to return an
144
+ :class:`.AnnotatedOperation` with an inverse modifier set instead of a concrete
145
+ :class:`.Gate`. However, for this class this argument is ignored as this gate
146
+ is self-inverse.
147
+
148
+ Returns:
149
+ BitwiseXorGate: inverse gate (self-inverse).
150
+ """
151
+ return BitwiseXorGate(self.num_qubits, self.amount)
152
+
153
+
154
+ def random_bitwise_xor(num_qubits: int, seed: int) -> BitwiseXorGate:
155
+ """
156
+ Create a random BitwiseXorGate.
157
+
158
+ Args:
159
+ num_qubits: the width of circuit.
160
+ seed: random seed in case a random xor is requested.
161
+ """
162
+
163
+ rng = np.random.default_rng(seed)
164
+ amount = rng.integers(0, 2**num_qubits)
165
+ return BitwiseXorGate(num_qubits, amount)
@@ -38,15 +38,18 @@ of the complete initial data.
38
38
 
39
39
  """
40
40
 
41
- from .pauli_feature_map import PauliFeatureMap
42
- from .z_feature_map import ZFeatureMap
43
- from .zz_feature_map import ZZFeatureMap
41
+ from .pauli_feature_map import PauliFeatureMap, pauli_feature_map, z_feature_map, zz_feature_map
42
+ from ._z_feature_map import ZFeatureMap
43
+ from ._zz_feature_map import ZZFeatureMap
44
44
  from .state_preparation import StatePreparation, UniformSuperpositionGate
45
45
  from .initializer import Initialize
46
46
 
47
47
  __all__ = [
48
+ "pauli_feature_map",
48
49
  "PauliFeatureMap",
50
+ "z_feature_map",
49
51
  "ZFeatureMap",
52
+ "zz_feature_map",
50
53
  "ZZFeatureMap",
51
54
  "StatePreparation",
52
55
  "UniformSuperpositionGate",
@@ -14,6 +14,7 @@
14
14
 
15
15
  from typing import Callable, Optional
16
16
  import numpy as np
17
+ from qiskit.utils.deprecation import deprecate_func
17
18
 
18
19
  from .pauli_feature_map import PauliFeatureMap
19
20
 
@@ -23,15 +24,15 @@ class ZFeatureMap(PauliFeatureMap):
23
24
 
24
25
  On 3 qubits and with 2 repetitions the circuit is represented by:
25
26
 
26
- .. parsed-literal::
27
+ .. code-block:: text
27
28
 
28
- ┌───┐┌──────────────┐┌───┐┌──────────────┐
29
- ┤ H ├┤ U1(2.0*x[0]) ├┤ H ├┤ U1(2.0*x[0]) ├
30
- ├───┤├──────────────┤├───┤├──────────────┤
31
- ┤ H ├┤ U1(2.0*x[1]) ├┤ H ├┤ U1(2.0*x[1]) ├
32
- ├───┤├──────────────┤├───┤├──────────────┤
33
- ┤ H ├┤ U1(2.0*x[2]) ├┤ H ├┤ U1(2.0*x[2]) ├
34
- └───┘└──────────────┘└───┘└──────────────┘
29
+ ┌───┐┌─────────────┐┌───┐┌─────────────┐
30
+ ┤ H ├┤ P(2.0*x[0]) ├┤ H ├┤ P(2.0*x[0]) ├
31
+ ├───┤├─────────────┤├───┤├─────────────┤
32
+ ┤ H ├┤ U(2.0*x[1]) ├┤ H ├┤ P(2.0*x[1]) ├
33
+ ├───┤├─────────────┤├───┤├─────────────┤
34
+ ┤ H ├┤ P(2.0*x[2]) ├┤ H ├┤ P(2.0*x[2]) ├
35
+ └───┘└─────────────┘└───┘└─────────────┘
35
36
 
36
37
  This is a sub-class of :class:`~qiskit.circuit.library.PauliFeatureMap` where the Pauli
37
38
  strings are fixed as `['Z']`. As a result the first order expansion will be a circuit without
@@ -40,38 +41,48 @@ class ZFeatureMap(PauliFeatureMap):
40
41
  Examples:
41
42
 
42
43
  >>> prep = ZFeatureMap(3, reps=3, insert_barriers=True)
43
- >>> print(prep)
44
- ┌───┐ ░ ┌──────────────┐ ░ ┌───┐ ░ ┌──────────────┐ ░ ┌───┐ ░ ┌──────────────┐
45
- q_0: ┤ H ├─░─┤ U1(2.0*x[0]) ├─░─┤ H ├─░─┤ U1(2.0*x[0]) ├─░─┤ H ├─░─┤ U1(2.0*x[0]) ├
46
- ├───┤ ░ ├──────────────┤ ░ ├───┤ ░ ├──────────────┤ ░ ├───┤ ░ ├──────────────┤
47
- q_1: ┤ H ├─░─┤ U1(2.0*x[1]) ├─░─┤ H ├─░─┤ U1(2.0*x[1]) ├─░─┤ H ├─░─┤ U1(2.0*x[1]) ├
48
- ├───┤ ░ ├──────────────┤ ░ ├───┤ ░ ├──────────────┤ ░ ├───┤ ░ ├──────────────┤
49
- q_2: ┤ H ├─░─┤ U1(2.0*x[2]) ├─░─┤ H ├─░─┤ U1(2.0*x[2]) ├─░─┤ H ├─░─┤ U1(2.0*x[2]) ├
50
- └───┘ ░ └──────────────┘ ░ └───┘ ░ └──────────────┘ ░ └───┘ ░ └──────────────┘
44
+ >>> print(prep.decompose())
45
+ ┌───┐ ░ ┌─────────────┐ ░ ┌───┐ ░ ┌─────────────┐ ░ ┌───┐ ░ ┌─────────────┐
46
+ q_0: ┤ H ├─░─┤ P(2.0*x[0]) ├─░─┤ H ├─░─┤ P(2.0*x[0]) ├─░─┤ H ├─░─┤ P(2.0*x[0]) ├
47
+ ├───┤ ░ ├─────────────┤ ░ ├───┤ ░ ├─────────────┤ ░ ├───┤ ░ ├─────────────┤
48
+ q_1: ┤ H ├─░─┤ P(2.0*x[1]) ├─░─┤ H ├─░─┤ P(2.0*x[1]) ├─░─┤ H ├─░─┤ P(2.0*x[1]) ├
49
+ ├───┤ ░ ├─────────────┤ ░ ├───┤ ░ ├─────────────┤ ░ ├───┤ ░ ├─────────────┤
50
+ q_2: ┤ H ├─░─┤ P(2.0*x[2]) ├─░─┤ H ├─░─┤ P(2.0*x[2]) ├─░─┤ H ├─░─┤ P(2.0*x[2]) ├
51
+ └───┘ ░ └─────────────┘ ░ └───┘ ░ └─────────────┘ ░ └───┘ ░ └─────────────┘
51
52
 
52
53
  >>> data_map = lambda x: x[0]*x[0] + 1 # note: input is an array
53
54
  >>> prep = ZFeatureMap(3, reps=1, data_map_func=data_map)
54
- >>> print(prep)
55
- ┌───┐┌───────────────────────┐
56
- q_0: ┤ H ├┤ U1(2.0*x[0]**2 + 2.0) ├
57
- ├───┤├───────────────────────┤
58
- q_1: ┤ H ├┤ U1(2.0*x[1]**2 + 2.0) ├
59
- ├───┤├───────────────────────┤
60
- q_2: ┤ H ├┤ U1(2.0*x[2]**2 + 2.0) ├
61
- └───┘└───────────────────────┘
62
-
63
- >>> classifier = ZFeatureMap(3, reps=1) + RY(3, reps=1)
64
- >>> print(classifier)
65
- ┌───┐┌──────────────┐┌──────────┐ ┌──────────┐
66
- q_0: ┤ H ├┤ U1(2.0*x[0]) ├┤ RY(θ[0]) ├─■──■─┤ RY(θ[3]) ├────────────
67
- ├───┤├──────────────┤├──────────┤ │ │ └──────────┘┌──────────┐
68
- q_1: ┤ H ├┤ U1(2.0*x[1]) ├┤ RY(θ[1]) ├─■──┼──────■──────┤ RY(θ[4])
69
- ├───┤├──────────────┤├──────────┤ ├──────────┤
70
- q_2: ┤ H ├┤ U1(2.0*x[2]) ├┤ RY(θ[2]) ├────■──────■──────┤ RY(θ[5]) ├
71
- └───┘└──────────────┘└──────────┘ └──────────┘
55
+ >>> print(prep.decompose())
56
+ ┌───┐┌──────────────────────┐
57
+ q_0: ┤ H ├┤ P(2.0*x[0]**2 + 2.0) ├
58
+ ├───┤├──────────────────────┤
59
+ q_1: ┤ H ├┤ P(2.0*x[1]**2 + 2.0) ├
60
+ ├───┤├──────────────────────┤
61
+ q_2: ┤ H ├┤ P(2.0*x[2]**2 + 2.0) ├
62
+ └───┘└──────────────────────┘
63
+
64
+ >>> from qiskit.circuit.library import TwoLocal
65
+ >>> ry = TwoLocal(3, "ry", "cz", reps=1)
66
+ >>> classifier = ZFeatureMap(3, reps=1) + ry
67
+ >>> print(classifier.decompose())
68
+ ┌───┐┌─────────────┐┌──────────┐ ┌──────────┐
69
+ q_0: ┤ H ├┤ P(2.0*x[0]) ├┤ RY(θ[0]) ├─■──■─┤ RY(θ[3]) ├────────────
70
+ ├───┤├─────────────┤├──────────┤ └──────────┘┌──────────┐
71
+ q_1: ┤ H ├┤ P(2.0*x[1]) ├┤ RY(θ[1]) ├─■──┼──────■──────┤ RY(θ[4]) ├
72
+ ├───┤├─────────────┤├──────────┤ │ │ ├──────────┤
73
+ q_2: ┤ H ├┤ P(2.0*x[2]) ├┤ RY(θ[2]) ├────■──────■──────┤ RY(θ[5]) ├
74
+ └───┘└─────────────┘└──────────┘ └──────────┘
72
75
 
73
76
  """
74
77
 
78
+ @deprecate_func(
79
+ since="1.3",
80
+ additional_msg=(
81
+ "Use the z_feature_map function as a replacement. Note that this will no longer "
82
+ "return a BlueprintCircuit, but just a plain QuantumCircuit."
83
+ ),
84
+ pending=True,
85
+ )
75
86
  def __init__(
76
87
  self,
77
88
  feature_dimension: int,