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
@@ -15,16 +15,19 @@
15
15
  from __future__ import annotations
16
16
 
17
17
  import inspect
18
+ import typing
18
19
  from collections.abc import Callable
19
-
20
- import numpy as np
20
+ from itertools import chain
21
21
 
22
22
  from qiskit.circuit.quantumcircuit import QuantumCircuit
23
23
  from qiskit.quantum_info.operators import SparsePauliOp, Pauli
24
24
  from qiskit.utils.deprecation import deprecate_arg
25
25
 
26
+ from .product_formula import ProductFormula, reorder_paulis
26
27
 
27
- from .product_formula import ProductFormula
28
+ if typing.TYPE_CHECKING:
29
+ from qiskit.circuit.quantumcircuit import ParameterValueType
30
+ from qiskit.circuit.library.pauli_evolution import PauliEvolutionGate
28
31
 
29
32
 
30
33
  class SuzukiTrotter(ProductFormula):
@@ -44,7 +47,7 @@ class SuzukiTrotter(ProductFormula):
44
47
 
45
48
  .. math::
46
49
 
47
- e^{-it(XX + ZZ)} = e^{-it/2 ZZ}e^{-it XX}e^{-it/2 ZZ} + \mathcal{O}(t^3).
50
+ e^{-it(XI + ZZ)} = e^{-it/2 XI}e^{-it ZZ}e^{-it/2 XI} + \mathcal{O}(t^3).
48
51
 
49
52
  References:
50
53
  [1]: D. Berry, G. Ahokas, R. Cleve and B. Sanders,
@@ -82,6 +85,7 @@ class SuzukiTrotter(ProductFormula):
82
85
  | None
83
86
  ) = None,
84
87
  wrap: bool = False,
88
+ preserve_order: bool = True,
85
89
  ) -> None:
86
90
  """
87
91
  Args:
@@ -101,55 +105,111 @@ class SuzukiTrotter(ProductFormula):
101
105
  built.
102
106
  wrap: Whether to wrap the atomic evolutions into custom gate objects. This only takes
103
107
  effect when ``atomic_evolution is None``.
108
+ preserve_order: If ``False``, allows reordering the terms of the operator to
109
+ potentially yield a shallower evolution circuit. Not relevant
110
+ when synthesizing operator with a single term.
104
111
  Raises:
105
112
  ValueError: If order is not even
106
113
  """
107
114
 
108
- if order % 2 == 1:
115
+ if order > 1 and order % 2 == 1:
109
116
  raise ValueError(
110
117
  "Suzuki product formulae are symmetric and therefore only defined "
111
- "for even orders."
118
+ f"for when the order is 1 or even, not {order}."
112
119
  )
113
- super().__init__(order, reps, insert_barriers, cx_structure, atomic_evolution, wrap)
120
+ super().__init__(
121
+ order,
122
+ reps,
123
+ insert_barriers,
124
+ cx_structure,
125
+ atomic_evolution,
126
+ wrap,
127
+ preserve_order=preserve_order,
128
+ )
129
+
130
+ def expand(
131
+ self, evolution: PauliEvolutionGate
132
+ ) -> list[tuple[str, list[int], ParameterValueType]]:
133
+ """Expand the Hamiltonian into a Suzuki-Trotter sequence of sparse gates.
134
+
135
+ For example, the Hamiltonian ``H = IX + ZZ`` for an evolution time ``t`` and
136
+ 1 repetition for an order 2 formula would get decomposed into a list of 3-tuples
137
+ containing ``(pauli, indices, rz_rotation_angle)``, that is:
138
+
139
+ .. code-block:: text
140
+
141
+ ("X", [0], t), ("ZZ", [0, 1], 2t), ("X", [0], 2)
142
+
143
+ Note that the rotation angle contains a factor of 2, such that that evolution
144
+ of a Pauli :math:`P` over time :math:`t`, which is :math:`e^{itP}`, is represented
145
+ by ``(P, indices, 2 * t)``.
146
+
147
+ For ``N`` repetitions, this sequence would be repeated ``N`` times and the coefficients
148
+ divided by ``N``.
114
149
 
115
- def synthesize(self, evolution):
116
- # get operators and time to evolve
117
- operators = evolution.operator
150
+ Args:
151
+ evolution: The evolution gate to expand.
152
+
153
+ Returns:
154
+ The Pauli network implementing the Trotter expansion.
155
+ """
156
+ operators = evolution.operator # type: SparsePauliOp | list[SparsePauliOp]
118
157
  time = evolution.time
119
158
 
120
- if not isinstance(operators, list):
121
- pauli_list = [(Pauli(op), np.real(coeff)) for op, coeff in operators.to_list()]
122
- else:
123
- pauli_list = [(op, 1) for op in operators]
159
+ def to_sparse_list(operator):
160
+ paulis = (time * (2 / self.reps) * operator).to_sparse_list()
161
+ if not self.preserve_order:
162
+ return reorder_paulis(paulis)
124
163
 
125
- ops_to_evolve = self._recurse(self.order, time / self.reps, pauli_list)
164
+ return paulis
126
165
 
127
166
  # construct the evolution circuit
128
- single_rep = QuantumCircuit(operators[0].num_qubits)
167
+ if isinstance(operators, list): # already sorted into commuting bits
168
+ non_commuting = [to_sparse_list(operator) for operator in operators]
169
+ else:
170
+ # Assume no commutativity here. If we were to group commuting Paulis,
171
+ # here would be the location to do so.
172
+ non_commuting = [[op] for op in to_sparse_list(operators)]
173
+
174
+ # normalize coefficients, i.e. ensure they are float or ParameterExpression
175
+ non_commuting = self._normalize_coefficients(non_commuting)
129
176
 
130
- for i, (op, coeff) in enumerate(ops_to_evolve):
131
- self.atomic_evolution(single_rep, op, coeff)
132
- if self.insert_barriers and i != len(ops_to_evolve) - 1:
133
- single_rep.barrier()
177
+ # we're already done here since Lie Trotter does not do any operator repetition
178
+ product_formula = self._recurse(self.order, non_commuting)
179
+ flattened = self.reps * list(chain.from_iterable(product_formula))
134
180
 
135
- return single_rep.repeat(self.reps, insert_barriers=self.insert_barriers).decompose()
181
+ return flattened
136
182
 
137
183
  @staticmethod
138
- def _recurse(order, time, pauli_list):
184
+ def _recurse(order, grouped_paulis):
139
185
  if order == 1:
140
- return pauli_list
186
+ return grouped_paulis
141
187
 
142
188
  elif order == 2:
143
- halves = [(op, coeff * time / 2) for op, coeff in pauli_list[:-1]]
144
- full = [(pauli_list[-1][0], time * pauli_list[-1][1])]
189
+ halves = [
190
+ [(label, qubits, coeff / 2) for label, qubits, coeff in paulis]
191
+ for paulis in grouped_paulis[:-1]
192
+ ]
193
+ full = [grouped_paulis[-1]]
145
194
  return halves + full + list(reversed(halves))
146
195
 
147
196
  else:
148
197
  reduction = 1 / (4 - 4 ** (1 / (order - 1)))
149
198
  outer = 2 * SuzukiTrotter._recurse(
150
- order - 2, time=reduction * time, pauli_list=pauli_list
199
+ order - 2,
200
+ [
201
+ [(label, qubits, coeff * reduction) for label, qubits, coeff in paulis]
202
+ for paulis in grouped_paulis
203
+ ],
151
204
  )
152
205
  inner = SuzukiTrotter._recurse(
153
- order - 2, time=(1 - 4 * reduction) * time, pauli_list=pauli_list
206
+ order - 2,
207
+ [
208
+ [
209
+ (label, qubits, coeff * (1 - 4 * reduction))
210
+ for label, qubits, coeff in paulis
211
+ ]
212
+ for paulis in grouped_paulis
213
+ ],
154
214
  )
155
215
  return outer + inner + outer
@@ -12,6 +12,7 @@
12
12
 
13
13
  """Module containing multi-controlled circuits synthesis"""
14
14
 
15
+ from .mcmt_vchain import synth_mcmt_vchain
15
16
  from .mcx_synthesis import (
16
17
  synth_mcx_n_dirty_i15,
17
18
  synth_mcx_n_clean_m15,
@@ -0,0 +1,52 @@
1
+ # This code is part of Qiskit.
2
+ #
3
+ # (C) Copyright IBM 2024.
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
+ """Synthesis for multiple-control, multiple-target Gate."""
14
+
15
+ from __future__ import annotations
16
+
17
+ from qiskit.circuit import QuantumCircuit, Gate
18
+ from qiskit._accelerate.synthesis.multi_controlled import mcmt_v_chain
19
+
20
+
21
+ def synth_mcmt_vchain(
22
+ gate: Gate, num_ctrl_qubits: int, num_target_qubits: int, ctrl_state: int | None = None
23
+ ) -> QuantumCircuit:
24
+ """Synthesize MCMT using a V-chain.
25
+
26
+ This uses a chain of CCX gates, using ``num_ctrl_qubits - 1`` auxiliary qubits.
27
+
28
+ For example, a 3-control and 2-target H gate will be synthesized as::
29
+
30
+ q_0: ──■────────────────────────■──
31
+ │ │
32
+ q_1: ──■────────────────────────■──
33
+ │ │
34
+ q_2: ──┼────■──────────────■────┼──
35
+ │ │ ┌───┐ │ │
36
+ q_3: ──┼────┼──┤ H ├───────┼────┼──
37
+ │ │ └─┬─┘┌───┐ │ │
38
+ q_4: ──┼────┼────┼──┤ H ├──┼────┼──
39
+ ┌─┴─┐ │ │ └─┬─┘ │ ┌─┴─┐
40
+ q_5: ┤ X ├──■────┼────┼────■──┤ X ├
41
+ └───┘┌─┴─┐ │ │ ┌─┴─┐└───┘
42
+ q_6: ─────┤ X ├──■────■──┤ X ├─────
43
+ └───┘ └───┘
44
+
45
+ """
46
+ if gate.num_qubits != 1:
47
+ raise ValueError("Only single qubit gates are supported as input.")
48
+
49
+ circ = QuantumCircuit._from_circuit_data(
50
+ mcmt_v_chain(gate.control(), num_ctrl_qubits, num_target_qubits, ctrl_state)
51
+ )
52
+ return circ
@@ -14,6 +14,7 @@ Circuit synthesis for a QFT circuit.
14
14
  """
15
15
 
16
16
  from __future__ import annotations
17
+ import warnings
17
18
  import numpy as np
18
19
  from qiskit.circuit.quantumcircuit import QuantumCircuit
19
20
 
@@ -54,7 +55,7 @@ def synth_qft_full(
54
55
  A circuit implementing the QFT operation.
55
56
 
56
57
  """
57
-
58
+ _warn_if_precision_loss(num_qubits - approximation_degree - 1)
58
59
  circuit = QuantumCircuit(num_qubits, name=name)
59
60
 
60
61
  for j in reversed(range(num_qubits)):
@@ -77,3 +78,20 @@ def synth_qft_full(
77
78
  circuit = circuit.inverse()
78
79
 
79
80
  return circuit
81
+
82
+
83
+ def _warn_if_precision_loss(max_num_entanglements):
84
+ """Issue a warning if constructing the circuit will lose precision.
85
+
86
+ If we need an angle smaller than ``pi * 2**-1022``, we start to lose precision by going into
87
+ the subnormal numbers. We won't lose _all_ precision until an exponent of about 1075, but
88
+ beyond 1022 we're using fractional bits to represent leading zeros.
89
+ """
90
+ if max_num_entanglements > -np.finfo(float).minexp: # > 1022 for doubles.
91
+ warnings.warn(
92
+ "precision loss in QFT."
93
+ f" The rotation needed to represent {max_num_entanglements} entanglements"
94
+ " is smaller than the smallest normal floating-point number.",
95
+ category=RuntimeWarning,
96
+ stacklevel=4,
97
+ )
@@ -16,6 +16,7 @@ Circuit synthesis for a QFT circuit.
16
16
  import numpy as np
17
17
  from qiskit.circuit import QuantumCircuit
18
18
  from qiskit.synthesis.permutation.permutation_reverse_lnn import _append_reverse_permutation_lnn_kms
19
+ from .qft_decompose_full import _warn_if_precision_loss
19
20
 
20
21
 
21
22
  def synth_qft_line(
@@ -51,7 +52,7 @@ def synth_qft_line(
51
52
  Quantum Info. Comput. 4, 4 (July 2004), 237–251.
52
53
  `arXiv:quant-ph/0402196 [quant-ph] <https://arxiv.org/abs/quant-ph/0402196>`_
53
54
  """
54
-
55
+ _warn_if_precision_loss(num_qubits - approximation_degree - 1)
55
56
  qc = QuantumCircuit(num_qubits)
56
57
 
57
58
  for i in range(num_qubits):
@@ -46,7 +46,8 @@ def synth_stabilizer_layers(
46
46
 
47
47
  For example, a 5-qubit stabilizer state is decomposed into the following layers:
48
48
 
49
- .. parsed-literal::
49
+ .. code-block:: text
50
+
50
51
  ┌─────┐┌─────┐┌─────┐┌─────┐┌────────┐
51
52
  q_0: ┤0 ├┤0 ├┤0 ├┤0 ├┤0 ├
52
53
  │ ││ ││ ││ ││ │
@@ -24,8 +24,6 @@ Gambetta, J. M. Validating quantum computers using randomized model circuits.
24
24
  arXiv:1811.12926 [quant-ph] (2018).
25
25
  """
26
26
  from __future__ import annotations
27
- import cmath
28
- import math
29
27
  import io
30
28
  import base64
31
29
  import warnings
@@ -91,41 +89,18 @@ def decompose_two_qubit_product_gate(special_unitary_matrix: np.ndarray):
91
89
  QiskitError: if decomposition isn't possible.
92
90
  """
93
91
  special_unitary_matrix = np.asarray(special_unitary_matrix, dtype=complex)
94
- # extract the right component
95
- R = special_unitary_matrix[:2, :2].copy()
96
- detR = R[0, 0] * R[1, 1] - R[0, 1] * R[1, 0]
97
- if abs(detR) < 0.1:
98
- R = special_unitary_matrix[2:, :2].copy()
99
- detR = R[0, 0] * R[1, 1] - R[0, 1] * R[1, 0]
100
- if abs(detR) < 0.1:
101
- raise QiskitError("decompose_two_qubit_product_gate: unable to decompose: detR < 0.1")
102
- R /= np.sqrt(detR)
103
-
104
- # extract the left component
105
- temp = np.kron(np.eye(2), R.T.conj())
106
- temp = special_unitary_matrix.dot(temp)
107
- L = temp[::2, ::2]
108
- detL = L[0, 0] * L[1, 1] - L[0, 1] * L[1, 0]
109
- if abs(detL) < 0.9:
110
- raise QiskitError("decompose_two_qubit_product_gate: unable to decompose: detL < 0.9")
111
- L /= np.sqrt(detL)
112
- phase = cmath.phase(detL) / 2
92
+ (L, R, phase) = two_qubit_decompose.decompose_two_qubit_product_gate(special_unitary_matrix)
113
93
 
114
94
  temp = np.kron(L, R)
115
95
  deviation = abs(abs(temp.conj().T.dot(special_unitary_matrix).trace()) - 4)
96
+
116
97
  if deviation > 1.0e-13:
117
98
  raise QiskitError(
118
99
  "decompose_two_qubit_product_gate: decomposition failed: "
119
100
  f"deviation too large: {deviation}"
120
101
  )
121
102
 
122
- return L, R, phase
123
-
124
-
125
- _ipx = np.array([[0, 1j], [1j, 0]], dtype=complex)
126
- _ipy = np.array([[0, 1], [-1, 0]], dtype=complex)
127
- _ipz = np.array([[1j, 0], [0, -1j]], dtype=complex)
128
- _id = np.array([[1, 0], [0, 1]], dtype=complex)
103
+ return (L, R, phase)
129
104
 
130
105
 
131
106
  class TwoQubitWeylDecomposition:
@@ -239,7 +214,7 @@ class TwoQubitWeylDecomposition:
239
214
  """Calculates the actual fidelity of the decomposed circuit to the input unitary."""
240
215
  circ = self.circuit(**kwargs)
241
216
  trace = np.trace(Operator(circ).data.T.conj() @ self.unitary_matrix)
242
- return trace_to_fid(trace)
217
+ return two_qubit_decompose.trace_to_fid(trace)
243
218
 
244
219
  def __repr__(self):
245
220
  """Represent with enough precision to allow copy-paste debugging of all corner cases"""
@@ -460,40 +435,6 @@ class TwoQubitControlledUDecomposer:
460
435
  return circ
461
436
 
462
437
 
463
- def Ud(a, b, c):
464
- r"""Generates the array :math:`e^{(i a XX + i b YY + i c ZZ)}`"""
465
- return np.array(
466
- [
467
- [cmath.exp(1j * c) * math.cos(a - b), 0, 0, 1j * cmath.exp(1j * c) * math.sin(a - b)],
468
- [0, cmath.exp(-1j * c) * math.cos(a + b), 1j * cmath.exp(-1j * c) * math.sin(a + b), 0],
469
- [0, 1j * cmath.exp(-1j * c) * math.sin(a + b), cmath.exp(-1j * c) * math.cos(a + b), 0],
470
- [1j * cmath.exp(1j * c) * math.sin(a - b), 0, 0, cmath.exp(1j * c) * math.cos(a - b)],
471
- ],
472
- dtype=complex,
473
- )
474
-
475
-
476
- def trace_to_fid(trace):
477
- r"""Average gate fidelity is
478
-
479
- .. math::
480
-
481
- \bar{F} = \frac{d + |\mathrm{Tr} (U_\text{target} \cdot U^{\dag})|^2}{d(d+1)}
482
-
483
- M. Horodecki, P. Horodecki and R. Horodecki, PRA 60, 1888 (1999)"""
484
- return (4 + abs(trace) ** 2) / 20
485
-
486
-
487
- def rz_array(theta):
488
- """Return numpy array for Rz(theta).
489
-
490
- Rz(theta) = diag(exp(-i*theta/2),exp(i*theta/2))
491
- """
492
- return np.array(
493
- [[cmath.exp(-1j * theta / 2.0), 0], [0, cmath.exp(1j * theta / 2.0)]], dtype=complex
494
- )
495
-
496
-
497
438
  class TwoQubitBasisDecomposer:
498
439
  """A class for decomposing 2-qubit unitaries into minimal number of uses of a 2-qubit
499
440
  basis gate.
@@ -47,7 +47,8 @@ def qs_decomposition(
47
47
 
48
48
  This decomposition is described in Shende et al. [1].
49
49
 
50
- .. parsed-literal::
50
+ .. code-block:: text
51
+
51
52
  ┌───┐ ┌───┐ ┌───┐ ┌───┐
52
53
  ─┤ ├─ ───────┤ Rz├─────┤ Ry├─────┤ Rz├─────
53
54
  │ │ ≃ ┌───┐└─┬─┘┌───┐└─┬─┘┌───┐└─┬─┘┌───┐
@@ -250,14 +251,13 @@ def _get_ucry_cz(nqubits, angles):
250
251
 
251
252
 
252
253
  def _apply_a2(circ):
253
- from qiskit.compiler import transpile
254
254
  from qiskit.quantum_info import Operator
255
255
  from qiskit.circuit.library.generalized_gates.unitary import UnitaryGate
256
+ from qiskit.transpiler.passes.synthesis import HighLevelSynthesis
256
257
 
257
258
  decomposer = two_qubit_decompose_up_to_diagonal
258
- ccirc = transpile(
259
- circ, basis_gates=["u", "cx", "qsd2q"], optimization_level=0, qubits_initially_zero=False
260
- )
259
+ hls = HighLevelSynthesis(basis_gates=["u", "cx", "qsd2q"], qubits_initially_zero=False)
260
+ ccirc = hls(circ)
261
261
  ind2q = []
262
262
  # collect 2q instrs
263
263
  for i, instruction in enumerate(ccirc.data):
@@ -106,8 +106,9 @@ also add initial logical optimization prior to routing, you would do something l
106
106
  .. code-block:: python
107
107
 
108
108
  import numpy as np
109
+ from qiskit.providers.fake_provider import GenericBackendV2
109
110
  from qiskit.circuit.library import HGate, PhaseGate, RXGate, TdgGate, TGate, XGate
110
- from qiskit.transpiler import PassManager
111
+ from qiskit.transpiler import PassManager, generate_preset_pass_manager
111
112
  from qiskit.transpiler.passes import (
112
113
  ALAPScheduleAnalysis,
113
114
  CXCancellation,
@@ -115,6 +116,7 @@ also add initial logical optimization prior to routing, you would do something l
115
116
  PadDynamicalDecoupling,
116
117
  )
117
118
 
119
+ backend = GenericBackendV2(num_qubits=5)
118
120
  dd_sequence = [XGate(), XGate()]
119
121
  scheduling_pm = PassManager(
120
122
  [
@@ -135,6 +137,9 @@ also add initial logical optimization prior to routing, you would do something l
135
137
  ]
136
138
  )
137
139
 
140
+ pass_manager = generate_preset_pass_manager(
141
+ optimization_level=0
142
+ )
138
143
 
139
144
  # Add pre-layout stage to run extra logical optimization
140
145
  pass_manager.pre_layout = logical_opt
@@ -253,7 +258,7 @@ descriptions of the instructions it supports:
253
258
  )
254
259
  print(target)
255
260
 
256
- .. parsed-literal::
261
+ .. code-block:: text
257
262
 
258
263
  Target
259
264
  Number of qubits: 3
@@ -578,7 +583,7 @@ original. This can be verified by checking the depth of both circuits:
578
583
 
579
584
  print('Original depth:', qc.depth(), 'Decomposed Depth:', qc_basis.depth())
580
585
 
581
- .. parsed-literal::
586
+ .. code-block:: text
582
587
 
583
588
  Original depth: 4 Decomposed Depth: 10
584
589
 
@@ -598,7 +603,7 @@ It is important to highlight two special cases:
598
603
 
599
604
  print(backend.operation_names)
600
605
 
601
- .. parsed-literal::
606
+ .. code-block:: text
602
607
 
603
608
  ['id', 'rz', 'sx', 'x', 'cx', 'measure', 'delay']
604
609
 
@@ -1017,7 +1022,7 @@ classical register wires, though theoretically two conditional instructions
1017
1022
  conditioned on the same register could commute, i.e. read-access to the
1018
1023
  classical register doesn't change its state.
1019
1024
 
1020
- .. parsed-literal::
1025
+ .. code-block:: text
1021
1026
 
1022
1027
  qc = QuantumCircuit(2, 1)
1023
1028
  qc.delay(100, 0)
@@ -1028,7 +1033,7 @@ The scheduler SHOULD comply with the above topological ordering policy of the
1028
1033
  DAG circuit.
1029
1034
  Accordingly, the `asap`-scheduled circuit will become
1030
1035
 
1031
- .. parsed-literal::
1036
+ .. code-block:: text
1032
1037
 
1033
1038
  ┌────────────────┐ ┌───┐
1034
1039
  q_0: ┤ Delay(100[dt]) ├───┤ X ├──────────────
@@ -1055,7 +1060,7 @@ then a discriminated (D) binary value is moved to the classical register (C).
1055
1060
  A sequence from t0 to t1 of the measure instruction interval could be
1056
1061
  modeled as follows:
1057
1062
 
1058
- .. parsed-literal::
1063
+ .. code-block:: text
1059
1064
 
1060
1065
  Q ░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░
1061
1066
  B ░░▒▒▒▒▒▒▒▒░░░░░░░░░
@@ -1070,7 +1075,7 @@ and the :class:`.Clbit` is only occupied at the very end of the interval.
1070
1075
  The lack of precision representing the physical model may induce
1071
1076
  edge cases in the scheduling:
1072
1077
 
1073
- .. parsed-literal::
1078
+ .. code-block:: text
1074
1079
 
1075
1080
  ┌───┐
1076
1081
  q_0: ───┤ X ├──────
@@ -1089,7 +1094,7 @@ is unchanged during the application of the stimulus, so two nodes are
1089
1094
  simultaneously operated.
1090
1095
  If one tries to `alap`-schedule this circuit, it may return following circuit:
1091
1096
 
1092
- .. parsed-literal::
1097
+ .. code-block:: text
1093
1098
 
1094
1099
  ┌────────────────┐ ┌───┐
1095
1100
  q_0: ┤ Delay(500[dt]) ├───┤ X ├──────
@@ -1105,7 +1110,7 @@ It looks like the topological ordering between the nodes is flipped in the
1105
1110
  scheduled view.
1106
1111
  This behavior can be understood by considering the control flow model described above,
1107
1112
 
1108
- .. parsed-literal::
1113
+ .. code-block:: text
1109
1114
 
1110
1115
  : Quantum Circuit, first-measure
1111
1116
  0 ░░░░░░░░░░░░▒▒▒▒▒▒░
@@ -1137,7 +1142,7 @@ be copied to the pass manager property set before the pass is called.
1137
1142
 
1138
1143
  Due to default latencies, the `alap`-scheduled circuit of above example may become
1139
1144
 
1140
- .. parsed-literal::
1145
+ .. code-block:: text
1141
1146
 
1142
1147
  ┌───┐
1143
1148
  q_0: ───┤ X ├──────
@@ -1151,7 +1156,8 @@ If the backend microarchitecture supports smart scheduling of the control flow
1151
1156
  instructions, such as separately scheduling qubits and classical registers,
1152
1157
  the insertion of the delay yields an unnecessarily longer total execution time.
1153
1158
 
1154
- .. parsed-literal::
1159
+ .. code-block:: text
1160
+
1155
1161
  : Quantum Circuit, first-XGate
1156
1162
  0 ░▒▒▒░░░░░░░░░░░░░░░
1157
1163
  1 ░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░
@@ -1168,7 +1174,7 @@ However, this result is much more intuitive in the topological ordering view.
1168
1174
  If a finite conditional latency value is provided, for example, 30 dt, the circuit
1169
1175
  is scheduled as follows:
1170
1176
 
1171
- .. parsed-literal::
1177
+ .. code-block:: text
1172
1178
 
1173
1179
  ┌───────────────┐ ┌───┐
1174
1180
  q_0: ┤ Delay(30[dt]) ├───┤ X ├──────
@@ -1180,7 +1186,8 @@ is scheduled as follows:
1180
1186
 
1181
1187
  with the timing model:
1182
1188
 
1183
- .. parsed-literal::
1189
+ .. code-block:: text
1190
+
1184
1191
  : Quantum Circuit, first-xgate
1185
1192
  0 ░░▒▒▒░░░░░░░░░░░░░░░
1186
1193
  1 ░░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░
@@ -201,7 +201,7 @@ class TransformationPass(BasePass): # pylint: disable=abstract-method
201
201
  if state.workflow_status.previous_run == RunState.SUCCESS:
202
202
  if isinstance(new_dag, DAGCircuit):
203
203
  # Copy calibration data from the original program
204
- new_dag.calibrations = passmanager_ir.calibrations
204
+ new_dag._calibrations_prop = passmanager_ir._calibrations_prop
205
205
  else:
206
206
  raise TranspilerError(
207
207
  "Transformation passes should return a transformed dag."
@@ -93,6 +93,7 @@ Optimizations
93
93
  NormalizeRXAngle
94
94
  OptimizeAnnotated
95
95
  Split2QUnitaries
96
+ RemoveIdentityEquivalent
96
97
 
97
98
  Calibration
98
99
  =============
@@ -247,6 +248,7 @@ from .optimization import OptimizeCliffords
247
248
  from .optimization import ElidePermutations
248
249
  from .optimization import NormalizeRXAngle
249
250
  from .optimization import OptimizeAnnotated
251
+ from .optimization import RemoveIdentityEquivalent
250
252
  from .optimization import Split2QUnitaries
251
253
 
252
254
  # circuit analysis