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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (462) hide show
  1. qiskit/VERSION.txt +1 -1
  2. qiskit/__init__.py +3 -9
  3. qiskit/_accelerate.pyd +0 -0
  4. qiskit/circuit/__init__.py +35 -10
  5. qiskit/circuit/{add_control.py → _add_control.py} +32 -12
  6. qiskit/circuit/_classical_resource_map.py +5 -3
  7. qiskit/circuit/barrier.py +3 -7
  8. qiskit/circuit/classical/expr/__init__.py +31 -3
  9. qiskit/circuit/classical/expr/constructors.py +236 -28
  10. qiskit/circuit/classical/expr/expr.py +104 -3
  11. qiskit/circuit/classical/expr/visitors.py +75 -0
  12. qiskit/circuit/classical/types/__init__.py +12 -8
  13. qiskit/circuit/classical/types/ordering.py +14 -7
  14. qiskit/circuit/classical/types/types.py +36 -0
  15. qiskit/circuit/commutation_checker.py +34 -7
  16. qiskit/circuit/controlflow/__init__.py +32 -1
  17. qiskit/circuit/controlflow/_builder_utils.py +9 -5
  18. qiskit/circuit/controlflow/box.py +163 -0
  19. qiskit/circuit/controlflow/break_loop.py +1 -1
  20. qiskit/circuit/controlflow/builder.py +139 -39
  21. qiskit/circuit/controlflow/continue_loop.py +1 -3
  22. qiskit/circuit/controlflow/control_flow.py +10 -0
  23. qiskit/circuit/controlflow/for_loop.py +2 -1
  24. qiskit/circuit/controlflow/if_else.py +3 -16
  25. qiskit/circuit/controlflow/switch_case.py +2 -8
  26. qiskit/circuit/controlflow/while_loop.py +2 -7
  27. qiskit/circuit/controlledgate.py +2 -4
  28. qiskit/circuit/delay.py +40 -11
  29. qiskit/circuit/duration.py +0 -15
  30. qiskit/circuit/gate.py +2 -4
  31. qiskit/circuit/instruction.py +2 -141
  32. qiskit/circuit/instructionset.py +7 -54
  33. qiskit/circuit/library/__init__.py +469 -154
  34. qiskit/circuit/library/arithmetic/__init__.py +16 -10
  35. qiskit/circuit/library/arithmetic/adders/cdkm_ripple_carry_adder.py +1 -1
  36. qiskit/circuit/library/arithmetic/adders/draper_qft_adder.py +2 -2
  37. qiskit/circuit/library/arithmetic/adders/vbe_ripple_carry_adder.py +1 -1
  38. qiskit/circuit/library/arithmetic/exact_reciprocal.py +64 -21
  39. qiskit/circuit/library/arithmetic/integer_comparator.py +37 -80
  40. qiskit/circuit/library/arithmetic/linear_amplitude_function.py +169 -2
  41. qiskit/circuit/library/arithmetic/linear_pauli_rotations.py +59 -5
  42. qiskit/circuit/library/arithmetic/piecewise_chebyshev.py +154 -6
  43. qiskit/circuit/library/arithmetic/piecewise_linear_pauli_rotations.py +114 -4
  44. qiskit/circuit/library/arithmetic/piecewise_polynomial_pauli_rotations.py +191 -15
  45. qiskit/circuit/library/arithmetic/polynomial_pauli_rotations.py +93 -39
  46. qiskit/circuit/library/arithmetic/quadratic_form.py +168 -2
  47. qiskit/circuit/library/arithmetic/weighted_adder.py +73 -1
  48. qiskit/circuit/library/bit_flip_oracle.py +130 -0
  49. qiskit/circuit/library/blueprintcircuit.py +52 -16
  50. qiskit/circuit/library/data_preparation/initializer.py +1 -1
  51. qiskit/circuit/library/data_preparation/pauli_feature_map.py +4 -4
  52. qiskit/circuit/library/data_preparation/state_preparation.py +1 -1
  53. qiskit/circuit/library/generalized_gates/gms.py +1 -1
  54. qiskit/circuit/library/generalized_gates/isometry.py +1 -1
  55. qiskit/circuit/library/generalized_gates/pauli.py +1 -2
  56. qiskit/circuit/library/generalized_gates/uc.py +97 -7
  57. qiskit/circuit/library/generalized_gates/uc_pauli_rot.py +1 -1
  58. qiskit/circuit/library/generalized_gates/unitary.py +4 -2
  59. qiskit/circuit/library/graph_state.py +1 -0
  60. qiskit/circuit/library/hamiltonian_gate.py +1 -1
  61. qiskit/circuit/library/n_local/evolved_operator_ansatz.py +1 -1
  62. qiskit/circuit/library/n_local/n_local.py +1 -1
  63. qiskit/circuit/library/n_local/qaoa_ansatz.py +1 -1
  64. qiskit/circuit/library/overlap.py +2 -2
  65. qiskit/circuit/library/pauli_evolution.py +39 -24
  66. qiskit/circuit/library/phase_oracle.py +130 -51
  67. qiskit/circuit/library/standard_gates/__init__.py +0 -1
  68. qiskit/circuit/library/standard_gates/dcx.py +3 -4
  69. qiskit/circuit/library/standard_gates/ecr.py +3 -4
  70. qiskit/circuit/library/standard_gates/global_phase.py +5 -6
  71. qiskit/circuit/library/standard_gates/h.py +4 -9
  72. qiskit/circuit/library/standard_gates/i.py +2 -2
  73. qiskit/circuit/library/standard_gates/iswap.py +3 -4
  74. qiskit/circuit/library/standard_gates/p.py +15 -34
  75. qiskit/circuit/library/standard_gates/r.py +7 -10
  76. qiskit/circuit/library/standard_gates/rx.py +5 -15
  77. qiskit/circuit/library/standard_gates/rxx.py +3 -6
  78. qiskit/circuit/library/standard_gates/ry.py +5 -17
  79. qiskit/circuit/library/standard_gates/ryy.py +3 -6
  80. qiskit/circuit/library/standard_gates/rz.py +5 -17
  81. qiskit/circuit/library/standard_gates/rzx.py +3 -6
  82. qiskit/circuit/library/standard_gates/rzz.py +3 -6
  83. qiskit/circuit/library/standard_gates/s.py +6 -15
  84. qiskit/circuit/library/standard_gates/swap.py +4 -11
  85. qiskit/circuit/library/standard_gates/sx.py +7 -12
  86. qiskit/circuit/library/standard_gates/t.py +6 -7
  87. qiskit/circuit/library/standard_gates/u.py +2 -10
  88. qiskit/circuit/library/standard_gates/u1.py +5 -16
  89. qiskit/circuit/library/standard_gates/u2.py +2 -6
  90. qiskit/circuit/library/standard_gates/u3.py +3 -11
  91. qiskit/circuit/library/standard_gates/x.py +14 -62
  92. qiskit/circuit/library/standard_gates/xx_minus_yy.py +2 -5
  93. qiskit/circuit/library/standard_gates/xx_plus_yy.py +2 -5
  94. qiskit/circuit/library/standard_gates/y.py +4 -9
  95. qiskit/circuit/library/standard_gates/z.py +5 -15
  96. qiskit/circuit/measure.py +11 -2
  97. qiskit/circuit/parameterexpression.py +11 -0
  98. qiskit/circuit/quantumcircuit.py +890 -564
  99. qiskit/circuit/random/utils.py +12 -6
  100. qiskit/circuit/reset.py +5 -2
  101. qiskit/circuit/singleton.py +5 -11
  102. qiskit/circuit/store.py +0 -8
  103. qiskit/circuit/tools/pi_check.py +3 -0
  104. qiskit/compiler/__init__.py +1 -7
  105. qiskit/compiler/transpiler.py +38 -196
  106. qiskit/converters/circuit_to_dag.py +6 -4
  107. qiskit/converters/circuit_to_dagdependency.py +0 -2
  108. qiskit/converters/circuit_to_dagdependency_v2.py +0 -1
  109. qiskit/converters/circuit_to_gate.py +1 -1
  110. qiskit/converters/circuit_to_instruction.py +16 -29
  111. qiskit/converters/dag_to_circuit.py +7 -8
  112. qiskit/converters/dag_to_dagdependency.py +0 -1
  113. qiskit/converters/dag_to_dagdependency_v2.py +0 -1
  114. qiskit/converters/dagdependency_to_circuit.py +0 -6
  115. qiskit/converters/dagdependency_to_dag.py +0 -6
  116. qiskit/dagcircuit/collect_blocks.py +32 -20
  117. qiskit/dagcircuit/dagdependency.py +3 -37
  118. qiskit/dagcircuit/dagdependency_v2.py +5 -82
  119. qiskit/dagcircuit/dagnode.py +14 -2
  120. qiskit/passmanager/__init__.py +24 -6
  121. qiskit/passmanager/passmanager.py +26 -24
  122. qiskit/primitives/__init__.py +44 -35
  123. qiskit/primitives/backend_estimator_v2.py +102 -23
  124. qiskit/primitives/backend_sampler_v2.py +5 -20
  125. qiskit/primitives/base/__init__.py +4 -4
  126. qiskit/primitives/base/base_estimator.py +77 -82
  127. qiskit/primitives/base/base_primitive_job.py +2 -2
  128. qiskit/primitives/base/{base_primitive.py → base_primitive_v1.py} +1 -1
  129. qiskit/primitives/base/{base_result.py → base_result_v1.py} +1 -1
  130. qiskit/primitives/base/base_sampler.py +52 -60
  131. qiskit/primitives/base/{estimator_result.py → estimator_result_v1.py} +2 -2
  132. qiskit/primitives/base/{sampler_result.py → sampler_result_v1.py} +2 -2
  133. qiskit/primitives/base/{validation.py → validation_v1.py} +34 -15
  134. qiskit/primitives/containers/bindings_array.py +3 -1
  135. qiskit/primitives/containers/bit_array.py +23 -0
  136. qiskit/primitives/containers/data_bin.py +3 -1
  137. qiskit/primitives/containers/observables_array.py +19 -2
  138. qiskit/primitives/statevector_sampler.py +6 -8
  139. qiskit/primitives/utils.py +14 -189
  140. qiskit/providers/__init__.py +4 -130
  141. qiskit/providers/backend.py +11 -314
  142. qiskit/providers/basic_provider/__init__.py +3 -1
  143. qiskit/providers/basic_provider/basic_provider.py +29 -9
  144. qiskit/providers/basic_provider/basic_simulator.py +158 -298
  145. qiskit/providers/exceptions.py +0 -33
  146. qiskit/providers/fake_provider/__init__.py +0 -37
  147. qiskit/providers/fake_provider/generic_backend_v2.py +32 -693
  148. qiskit/qasm2/__init__.py +21 -6
  149. qiskit/qasm2/export.py +2 -10
  150. qiskit/qasm2/parse.py +11 -25
  151. qiskit/qasm3/__init__.py +5 -1
  152. qiskit/qasm3/ast.py +44 -0
  153. qiskit/qasm3/exporter.py +65 -27
  154. qiskit/qasm3/printer.py +35 -4
  155. qiskit/qpy/__init__.py +162 -19
  156. qiskit/qpy/binary_io/__init__.py +0 -1
  157. qiskit/qpy/binary_io/circuits.py +96 -116
  158. qiskit/qpy/binary_io/parse_sympy_repr.py +121 -0
  159. qiskit/qpy/binary_io/schedules.py +61 -388
  160. qiskit/qpy/binary_io/value.py +159 -33
  161. qiskit/qpy/common.py +10 -7
  162. qiskit/qpy/formats.py +41 -0
  163. qiskit/qpy/interface.py +29 -62
  164. qiskit/qpy/type_keys.py +58 -221
  165. qiskit/quantum_info/analysis/distance.py +3 -1
  166. qiskit/quantum_info/operators/dihedral/dihedral.py +3 -1
  167. qiskit/quantum_info/operators/operator.py +6 -2
  168. qiskit/quantum_info/operators/symplectic/clifford.py +3 -1
  169. qiskit/quantum_info/operators/symplectic/pauli.py +4 -2
  170. qiskit/quantum_info/operators/symplectic/pauli_list.py +17 -5
  171. qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py +40 -6
  172. qiskit/quantum_info/states/densitymatrix.py +16 -6
  173. qiskit/quantum_info/states/stabilizerstate.py +35 -4
  174. qiskit/quantum_info/states/statevector.py +16 -6
  175. qiskit/result/__init__.py +5 -17
  176. qiskit/result/models.py +18 -11
  177. qiskit/result/result.py +38 -134
  178. qiskit/result/sampled_expval.py +1 -2
  179. qiskit/result/utils.py +3 -4
  180. qiskit/synthesis/__init__.py +21 -1
  181. qiskit/synthesis/arithmetic/__init__.py +3 -1
  182. qiskit/synthesis/arithmetic/adders/cdkm_ripple_carry_adder.py +1 -1
  183. qiskit/synthesis/arithmetic/adders/draper_qft_adder.py +1 -1
  184. qiskit/synthesis/arithmetic/adders/vbe_ripple_carry_adder.py +2 -2
  185. qiskit/{providers/fake_provider/backends_v1/fake_20q → synthesis/arithmetic/comparators}/__init__.py +4 -6
  186. qiskit/synthesis/arithmetic/comparators/compare_2s.py +112 -0
  187. qiskit/synthesis/arithmetic/comparators/compare_greedy.py +66 -0
  188. qiskit/synthesis/arithmetic/multipliers/hrs_cumulative_multiplier.py +1 -1
  189. qiskit/synthesis/arithmetic/multipliers/rg_qft_multiplier.py +1 -1
  190. qiskit/synthesis/arithmetic/weighted_sum.py +155 -0
  191. qiskit/{result/mitigation → synthesis/boolean}/__init__.py +2 -2
  192. qiskit/synthesis/boolean/boolean_expression.py +231 -0
  193. qiskit/synthesis/boolean/boolean_expression_synth.py +124 -0
  194. qiskit/synthesis/boolean/boolean_expression_visitor.py +96 -0
  195. qiskit/synthesis/discrete_basis/generate_basis_approximations.py +2 -0
  196. qiskit/synthesis/evolution/lie_trotter.py +10 -7
  197. qiskit/synthesis/evolution/product_formula.py +44 -35
  198. qiskit/synthesis/evolution/qdrift.py +17 -24
  199. qiskit/synthesis/evolution/suzuki_trotter.py +20 -27
  200. qiskit/synthesis/linear/linear_depth_lnn.py +6 -221
  201. qiskit/synthesis/linear_phase/cx_cz_depth_lnn.py +4 -205
  202. qiskit/synthesis/multi_controlled/__init__.py +1 -0
  203. qiskit/synthesis/multi_controlled/mcx_synthesis.py +5 -2
  204. qiskit/synthesis/multi_controlled/multi_control_rotation_gates.py +206 -0
  205. qiskit/synthesis/one_qubit/one_qubit_decompose.py +1 -1
  206. qiskit/synthesis/two_qubit/__init__.py +1 -0
  207. qiskit/synthesis/two_qubit/two_qubit_decompose.py +28 -145
  208. qiskit/transpiler/__init__.py +32 -232
  209. qiskit/transpiler/basepasses.py +20 -51
  210. qiskit/transpiler/layout.py +1 -1
  211. qiskit/transpiler/passes/__init__.py +4 -40
  212. qiskit/transpiler/passes/basis/basis_translator.py +5 -4
  213. qiskit/transpiler/passes/basis/decompose.py +1 -15
  214. qiskit/transpiler/passes/basis/unroll_3q_or_more.py +1 -5
  215. qiskit/transpiler/passes/basis/unroll_custom_definitions.py +3 -2
  216. qiskit/transpiler/passes/layout/apply_layout.py +4 -0
  217. qiskit/transpiler/passes/layout/dense_layout.py +2 -39
  218. qiskit/transpiler/passes/layout/full_ancilla_allocation.py +3 -4
  219. qiskit/transpiler/passes/layout/sabre_layout.py +7 -3
  220. qiskit/transpiler/passes/layout/vf2_layout.py +2 -20
  221. qiskit/transpiler/passes/layout/vf2_post_layout.py +60 -125
  222. qiskit/transpiler/passes/layout/vf2_utils.py +2 -26
  223. qiskit/transpiler/passes/optimization/__init__.py +2 -3
  224. qiskit/transpiler/passes/optimization/collect_and_collapse.py +2 -0
  225. qiskit/transpiler/passes/optimization/collect_cliffords.py +5 -0
  226. qiskit/transpiler/passes/optimization/collect_linear_functions.py +5 -0
  227. qiskit/transpiler/passes/optimization/collect_multiqubit_blocks.py +16 -1
  228. qiskit/transpiler/passes/optimization/commutation_analysis.py +3 -3
  229. qiskit/transpiler/passes/optimization/consolidate_blocks.py +41 -19
  230. qiskit/transpiler/passes/optimization/contract_idle_wires_in_control_flow.py +104 -0
  231. qiskit/transpiler/passes/optimization/light_cone.py +135 -0
  232. qiskit/transpiler/passes/optimization/optimize_1q_commutation.py +0 -1
  233. qiskit/transpiler/passes/optimization/optimize_1q_decomposition.py +18 -22
  234. qiskit/transpiler/passes/optimization/optimize_annotated.py +3 -2
  235. qiskit/transpiler/passes/optimization/remove_identity_equiv.py +6 -4
  236. qiskit/transpiler/passes/optimization/reset_after_measure_simplification.py +5 -2
  237. qiskit/transpiler/passes/optimization/split_2q_unitaries.py +26 -3
  238. qiskit/transpiler/passes/optimization/template_matching/template_substitution.py +3 -2
  239. qiskit/transpiler/passes/routing/__init__.py +0 -1
  240. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/commuting_2q_gate_router.py +3 -1
  241. qiskit/transpiler/passes/routing/sabre_swap.py +14 -6
  242. qiskit/transpiler/passes/routing/star_prerouting.py +1 -1
  243. qiskit/transpiler/passes/scheduling/__init__.py +1 -7
  244. qiskit/transpiler/passes/scheduling/alignments/__init__.py +2 -4
  245. qiskit/transpiler/passes/scheduling/alignments/check_durations.py +1 -9
  246. qiskit/transpiler/passes/scheduling/alignments/reschedule.py +17 -16
  247. qiskit/transpiler/passes/scheduling/padding/base_padding.py +32 -4
  248. qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py +25 -63
  249. qiskit/transpiler/passes/scheduling/padding/pad_delay.py +12 -4
  250. qiskit/transpiler/passes/scheduling/scheduling/alap.py +5 -39
  251. qiskit/transpiler/passes/scheduling/scheduling/asap.py +4 -35
  252. qiskit/transpiler/passes/scheduling/scheduling/base_scheduler.py +10 -16
  253. qiskit/transpiler/passes/scheduling/time_unit_conversion.py +134 -62
  254. qiskit/transpiler/passes/synthesis/default_unitary_synth_plugin.py +653 -0
  255. qiskit/transpiler/passes/synthesis/high_level_synthesis.py +176 -601
  256. qiskit/transpiler/passes/synthesis/hls_plugins.py +294 -1
  257. qiskit/transpiler/passes/synthesis/plugin.py +4 -0
  258. qiskit/transpiler/passes/synthesis/solovay_kitaev_synthesis.py +16 -10
  259. qiskit/transpiler/passes/synthesis/unitary_synthesis.py +34 -697
  260. qiskit/transpiler/passes/utils/__init__.py +0 -1
  261. qiskit/transpiler/passes/utils/check_gate_direction.py +13 -5
  262. qiskit/transpiler/passes/utils/control_flow.py +2 -6
  263. qiskit/transpiler/passes/utils/gate_direction.py +7 -0
  264. qiskit/transpiler/passes/utils/remove_final_measurements.py +40 -33
  265. qiskit/transpiler/passmanager.py +13 -0
  266. qiskit/transpiler/passmanager_config.py +5 -81
  267. qiskit/transpiler/preset_passmanagers/builtin_plugins.py +225 -344
  268. qiskit/transpiler/preset_passmanagers/common.py +140 -167
  269. qiskit/transpiler/preset_passmanagers/generate_preset_pass_manager.py +107 -322
  270. qiskit/transpiler/preset_passmanagers/level0.py +2 -11
  271. qiskit/transpiler/preset_passmanagers/level1.py +2 -14
  272. qiskit/transpiler/preset_passmanagers/level2.py +2 -12
  273. qiskit/transpiler/preset_passmanagers/level3.py +2 -11
  274. qiskit/transpiler/preset_passmanagers/plugin.py +5 -3
  275. qiskit/transpiler/target.py +78 -524
  276. qiskit/user_config.py +8 -4
  277. qiskit/utils/__init__.py +13 -12
  278. qiskit/utils/deprecation.py +4 -112
  279. qiskit/utils/optionals.py +11 -4
  280. qiskit/utils/parallel.py +214 -87
  281. qiskit/utils/units.py +4 -1
  282. qiskit/visualization/__init__.py +3 -7
  283. qiskit/visualization/array.py +4 -1
  284. qiskit/visualization/bloch.py +1 -1
  285. qiskit/visualization/circuit/_utils.py +19 -19
  286. qiskit/visualization/circuit/circuit_visualization.py +11 -4
  287. qiskit/visualization/circuit/matplotlib.py +13 -23
  288. qiskit/visualization/circuit/text.py +7 -3
  289. qiskit/visualization/counts_visualization.py +4 -0
  290. qiskit/visualization/dag_visualization.py +2 -1
  291. qiskit/visualization/gate_map.py +39 -154
  292. qiskit/visualization/library.py +4 -1
  293. qiskit/visualization/pass_manager_visualization.py +6 -2
  294. qiskit/visualization/state_visualization.py +19 -2
  295. qiskit/visualization/timeline/core.py +19 -13
  296. qiskit/visualization/timeline/interface.py +19 -18
  297. qiskit/visualization/timeline/plotters/matplotlib.py +4 -1
  298. {qiskit-1.4.1.dist-info → qiskit-2.0.0.dist-info}/METADATA +4 -3
  299. {qiskit-1.4.1.dist-info → qiskit-2.0.0.dist-info}/RECORD +303 -449
  300. {qiskit-1.4.1.dist-info → qiskit-2.0.0.dist-info}/WHEEL +1 -1
  301. {qiskit-1.4.1.dist-info → qiskit-2.0.0.dist-info}/entry_points.txt +8 -2
  302. qiskit/assembler/__init__.py +0 -42
  303. qiskit/assembler/assemble_circuits.py +0 -451
  304. qiskit/assembler/assemble_schedules.py +0 -367
  305. qiskit/assembler/disassemble.py +0 -310
  306. qiskit/assembler/run_config.py +0 -77
  307. qiskit/circuit/bit.py +0 -106
  308. qiskit/circuit/classicalfunction/__init__.py +0 -152
  309. qiskit/circuit/classicalfunction/boolean_expression.py +0 -138
  310. qiskit/circuit/classicalfunction/classical_element.py +0 -54
  311. qiskit/circuit/classicalfunction/classical_function_visitor.py +0 -155
  312. qiskit/circuit/classicalfunction/classicalfunction.py +0 -182
  313. qiskit/circuit/classicalfunction/exceptions.py +0 -41
  314. qiskit/circuit/classicalfunction/types.py +0 -18
  315. qiskit/circuit/classicalfunction/utils.py +0 -91
  316. qiskit/circuit/classicalregister.py +0 -57
  317. qiskit/circuit/library/standard_gates/multi_control_rotation_gates.py +0 -405
  318. qiskit/circuit/quantumregister.py +0 -75
  319. qiskit/circuit/register.py +0 -246
  320. qiskit/compiler/assembler.py +0 -689
  321. qiskit/compiler/scheduler.py +0 -109
  322. qiskit/compiler/sequencer.py +0 -71
  323. qiskit/primitives/backend_estimator.py +0 -486
  324. qiskit/primitives/backend_sampler.py +0 -222
  325. qiskit/primitives/estimator.py +0 -172
  326. qiskit/primitives/sampler.py +0 -162
  327. qiskit/providers/backend_compat.py +0 -507
  328. qiskit/providers/fake_provider/backends_v1/__init__.py +0 -22
  329. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/__init__.py +0 -18
  330. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/conf_washington.json +0 -1
  331. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/defs_washington.json +0 -1
  332. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/fake_127q_pulse_v1.py +0 -37
  333. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/props_washington.json +0 -1
  334. qiskit/providers/fake_provider/backends_v1/fake_20q/conf_singapore.json +0 -1
  335. qiskit/providers/fake_provider/backends_v1/fake_20q/fake_20q.py +0 -43
  336. qiskit/providers/fake_provider/backends_v1/fake_20q/props_singapore.json +0 -1
  337. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/__init__.py +0 -18
  338. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/conf_hanoi.json +0 -1
  339. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/defs_hanoi.json +0 -1
  340. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/fake_27q_pulse_v1.py +0 -50
  341. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/props_hanoi.json +0 -1
  342. qiskit/providers/fake_provider/backends_v1/fake_5q/__init__.py +0 -18
  343. qiskit/providers/fake_provider/backends_v1/fake_5q/conf_yorktown.json +0 -1
  344. qiskit/providers/fake_provider/backends_v1/fake_5q/fake_5q_v1.py +0 -41
  345. qiskit/providers/fake_provider/backends_v1/fake_5q/props_yorktown.json +0 -1
  346. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/__init__.py +0 -18
  347. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/conf_nairobi.json +0 -1
  348. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/defs_nairobi.json +0 -1
  349. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/fake_7q_pulse_v1.py +0 -44
  350. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/props_nairobi.json +0 -1
  351. qiskit/providers/fake_provider/fake_1q.py +0 -91
  352. qiskit/providers/fake_provider/fake_backend.py +0 -165
  353. qiskit/providers/fake_provider/fake_openpulse_2q.py +0 -391
  354. qiskit/providers/fake_provider/fake_openpulse_3q.py +0 -340
  355. qiskit/providers/fake_provider/fake_pulse_backend.py +0 -49
  356. qiskit/providers/fake_provider/fake_qasm_backend.py +0 -77
  357. qiskit/providers/fake_provider/utils/backend_converter.py +0 -150
  358. qiskit/providers/fake_provider/utils/json_decoder.py +0 -109
  359. qiskit/providers/models/__init__.py +0 -89
  360. qiskit/providers/models/backendconfiguration.py +0 -1040
  361. qiskit/providers/models/backendproperties.py +0 -535
  362. qiskit/providers/models/backendstatus.py +0 -104
  363. qiskit/providers/models/jobstatus.py +0 -77
  364. qiskit/providers/models/pulsedefaults.py +0 -305
  365. qiskit/providers/provider.py +0 -95
  366. qiskit/pulse/__init__.py +0 -158
  367. qiskit/pulse/builder.py +0 -2262
  368. qiskit/pulse/calibration_entries.py +0 -381
  369. qiskit/pulse/channels.py +0 -227
  370. qiskit/pulse/configuration.py +0 -245
  371. qiskit/pulse/exceptions.py +0 -45
  372. qiskit/pulse/filters.py +0 -309
  373. qiskit/pulse/instruction_schedule_map.py +0 -424
  374. qiskit/pulse/instructions/__init__.py +0 -67
  375. qiskit/pulse/instructions/acquire.py +0 -150
  376. qiskit/pulse/instructions/delay.py +0 -71
  377. qiskit/pulse/instructions/directives.py +0 -154
  378. qiskit/pulse/instructions/frequency.py +0 -135
  379. qiskit/pulse/instructions/instruction.py +0 -270
  380. qiskit/pulse/instructions/phase.py +0 -152
  381. qiskit/pulse/instructions/play.py +0 -99
  382. qiskit/pulse/instructions/reference.py +0 -100
  383. qiskit/pulse/instructions/snapshot.py +0 -82
  384. qiskit/pulse/library/__init__.py +0 -97
  385. qiskit/pulse/library/continuous.py +0 -430
  386. qiskit/pulse/library/pulse.py +0 -148
  387. qiskit/pulse/library/samplers/__init__.py +0 -15
  388. qiskit/pulse/library/samplers/decorators.py +0 -295
  389. qiskit/pulse/library/samplers/strategies.py +0 -71
  390. qiskit/pulse/library/symbolic_pulses.py +0 -1989
  391. qiskit/pulse/library/waveform.py +0 -136
  392. qiskit/pulse/macros.py +0 -262
  393. qiskit/pulse/parameter_manager.py +0 -445
  394. qiskit/pulse/parser.py +0 -314
  395. qiskit/pulse/reference_manager.py +0 -58
  396. qiskit/pulse/schedule.py +0 -1854
  397. qiskit/pulse/transforms/__init__.py +0 -106
  398. qiskit/pulse/transforms/alignments.py +0 -406
  399. qiskit/pulse/transforms/base_transforms.py +0 -71
  400. qiskit/pulse/transforms/canonicalization.py +0 -498
  401. qiskit/pulse/transforms/dag.py +0 -122
  402. qiskit/pulse/utils.py +0 -149
  403. qiskit/qobj/__init__.py +0 -75
  404. qiskit/qobj/common.py +0 -81
  405. qiskit/qobj/converters/__init__.py +0 -18
  406. qiskit/qobj/converters/lo_config.py +0 -177
  407. qiskit/qobj/converters/pulse_instruction.py +0 -897
  408. qiskit/qobj/pulse_qobj.py +0 -709
  409. qiskit/qobj/qasm_qobj.py +0 -708
  410. qiskit/qobj/utils.py +0 -46
  411. qiskit/result/mitigation/base_readout_mitigator.py +0 -79
  412. qiskit/result/mitigation/correlated_readout_mitigator.py +0 -277
  413. qiskit/result/mitigation/local_readout_mitigator.py +0 -328
  414. qiskit/result/mitigation/utils.py +0 -217
  415. qiskit/scheduler/__init__.py +0 -40
  416. qiskit/scheduler/config.py +0 -37
  417. qiskit/scheduler/lowering.py +0 -187
  418. qiskit/scheduler/methods/__init__.py +0 -15
  419. qiskit/scheduler/methods/basic.py +0 -140
  420. qiskit/scheduler/schedule_circuit.py +0 -69
  421. qiskit/scheduler/sequence.py +0 -104
  422. qiskit/transpiler/passes/calibration/__init__.py +0 -17
  423. qiskit/transpiler/passes/calibration/base_builder.py +0 -79
  424. qiskit/transpiler/passes/calibration/builders.py +0 -20
  425. qiskit/transpiler/passes/calibration/exceptions.py +0 -22
  426. qiskit/transpiler/passes/calibration/pulse_gate.py +0 -100
  427. qiskit/transpiler/passes/calibration/rx_builder.py +0 -164
  428. qiskit/transpiler/passes/calibration/rzx_builder.py +0 -411
  429. qiskit/transpiler/passes/calibration/rzx_templates.py +0 -58
  430. qiskit/transpiler/passes/optimization/cx_cancellation.py +0 -65
  431. qiskit/transpiler/passes/optimization/echo_rzx_weyl_decomposition.py +0 -162
  432. qiskit/transpiler/passes/optimization/normalize_rx_angle.py +0 -157
  433. qiskit/transpiler/passes/routing/stochastic_swap.py +0 -532
  434. qiskit/transpiler/passes/scheduling/alap.py +0 -153
  435. qiskit/transpiler/passes/scheduling/alignments/align_measures.py +0 -255
  436. qiskit/transpiler/passes/scheduling/alignments/pulse_gate_validation.py +0 -107
  437. qiskit/transpiler/passes/scheduling/asap.py +0 -175
  438. qiskit/transpiler/passes/scheduling/base_scheduler.py +0 -310
  439. qiskit/transpiler/passes/scheduling/dynamical_decoupling.py +0 -313
  440. qiskit/transpiler/passes/utils/convert_conditions_to_if_ops.py +0 -93
  441. qiskit/utils/deprecate_pulse.py +0 -119
  442. qiskit/utils/multiprocessing.py +0 -56
  443. qiskit/visualization/pulse_v2/__init__.py +0 -21
  444. qiskit/visualization/pulse_v2/core.py +0 -901
  445. qiskit/visualization/pulse_v2/device_info.py +0 -173
  446. qiskit/visualization/pulse_v2/drawings.py +0 -253
  447. qiskit/visualization/pulse_v2/events.py +0 -254
  448. qiskit/visualization/pulse_v2/generators/__init__.py +0 -40
  449. qiskit/visualization/pulse_v2/generators/barrier.py +0 -76
  450. qiskit/visualization/pulse_v2/generators/chart.py +0 -208
  451. qiskit/visualization/pulse_v2/generators/frame.py +0 -436
  452. qiskit/visualization/pulse_v2/generators/snapshot.py +0 -133
  453. qiskit/visualization/pulse_v2/generators/waveform.py +0 -645
  454. qiskit/visualization/pulse_v2/interface.py +0 -459
  455. qiskit/visualization/pulse_v2/layouts.py +0 -387
  456. qiskit/visualization/pulse_v2/plotters/__init__.py +0 -17
  457. qiskit/visualization/pulse_v2/plotters/base_plotter.py +0 -53
  458. qiskit/visualization/pulse_v2/plotters/matplotlib.py +0 -201
  459. qiskit/visualization/pulse_v2/stylesheet.py +0 -312
  460. qiskit/visualization/pulse_v2/types.py +0 -242
  461. {qiskit-1.4.1.dist-info → qiskit-2.0.0.dist-info/licenses}/LICENSE.txt +0 -0
  462. {qiskit-1.4.1.dist-info → qiskit-2.0.0.dist-info}/top_level.txt +0 -0
@@ -12,33 +12,34 @@
12
12
 
13
13
  """Phase Oracle object."""
14
14
 
15
- # Needed to avoid type hints from erroring when `classicalfunction` might not be available.
16
15
  from __future__ import annotations
17
16
 
18
- from typing import Union, Callable, Optional, TYPE_CHECKING
17
+ from qiskit.circuit import QuantumCircuit, Gate
19
18
 
20
- from qiskit.circuit import QuantumCircuit
21
- from qiskit.utils import optionals as _optionals
19
+ from qiskit.synthesis.boolean.boolean_expression import BooleanExpression
22
20
 
23
- if TYPE_CHECKING:
24
- from qiskit.circuit.classicalfunction.boolean_expression import BooleanExpression
25
- from qiskit.circuit.classicalfunction.classical_element import ClassicalElement
26
21
 
27
-
28
- @_optionals.HAS_TWEEDLEDUM.require_in_instance
29
22
  class PhaseOracle(QuantumCircuit):
30
23
  r"""Phase Oracle.
31
24
 
32
25
  The Phase Oracle object constructs circuits for any arbitrary
33
26
  input logical expressions. A logical expression is composed of logical operators
34
- `&` (`AND`), `|` (`OR`), `~` (`NOT`), and `^` (`XOR`).
27
+ `&` (logical `AND`), `|` (logical `OR`),
28
+ `~` (logical `NOT`), and `^` (logical `XOR`).
35
29
  as well as symbols for literals (variables).
36
30
  For example, `'a & b'`, and `(v0 | ~v1) & (~v2 & v3)`
37
31
  are both valid string representation of boolean logical expressions.
38
32
 
33
+ A phase oracle for a boolean function `f(x)` performs the following
34
+ quantum operation:
35
+
36
+ .. math::
37
+
38
+ |x\rangle \mapsto (-1)^{f(x)}|x\rangle
39
+
39
40
  For convenience, this oracle, in addition to parsing arbitrary logical expressions,
40
41
  also supports input strings in the `DIMACS CNF format
41
- <http://www.satcompetition.org/2009/format-benchmarks2009.html>`__,
42
+ <https://web.archive.org/web/20190325181937/https://www.satcompetition.org/2009/format-benchmarks2009.html>`__,
42
43
  which is the standard format for specifying SATisfiability (SAT) problem instances in
43
44
  `Conjunctive Normal Form (CNF) <https://en.wikipedia.org/wiki/Conjunctive_normal_form>`__,
44
45
  which is a conjunction of one or more clauses, where a clause is a disjunction of one
@@ -50,51 +51,21 @@ class PhaseOracle(QuantumCircuit):
50
51
 
51
52
  def __init__(
52
53
  self,
53
- expression: Union[str, ClassicalElement],
54
- synthesizer: Optional[Callable[[BooleanExpression], QuantumCircuit]] = None,
55
- var_order: list = None,
54
+ expression: str,
55
+ var_order: list[str] | None = None,
56
56
  ) -> None:
57
- """Creates a PhaseOracle object
58
-
57
+ """
59
58
  Args:
60
59
  expression: A Python-like boolean expression.
61
- synthesizer: Optional. A function to convert a BooleanExpression into a QuantumCircuit
62
- If None is provided, Tweedledum's `pkrm_synth` with `phase_esop` will be used.
63
- var_order(list): A list with the order in which variables will be created.
60
+ var_order: A list with the order in which variables will be created.
64
61
  (default: by appearance)
65
62
  """
66
- # ignore deprecation warning for BooleanExpression; implementation is changing in 2.0
67
- import warnings
68
-
69
- with warnings.catch_warnings():
70
- warnings.simplefilter("ignore", DeprecationWarning)
71
- from qiskit.circuit.classicalfunction.boolean_expression import BooleanExpression
72
- from qiskit.circuit.classicalfunction.classical_element import ClassicalElement
73
-
74
- if not isinstance(expression, ClassicalElement):
75
- expression = BooleanExpression(expression, var_order=var_order)
76
-
77
- self.boolean_expression = expression
78
-
79
- if synthesizer is None:
80
-
81
- def synthesizer(boolean_expression):
82
- from tweedledum.synthesis import pkrm_synth # pylint: disable=import-error
83
- from qiskit.circuit.classicalfunction.utils import tweedledum2qiskit
63
+ self.boolean_expression = BooleanExpression(expression, var_order=var_order)
64
+ oracle = self.boolean_expression.synth(circuit_type="phase")
84
65
 
85
- truth_table = boolean_expression._tweedledum_bool_expression.truth_table(
86
- output_bit=0
87
- )
88
- tweedledum_circuit = pkrm_synth(
89
- truth_table, {"pkrm_synth": {"phase_esop": True}}
90
- )
91
- return tweedledum2qiskit(tweedledum_circuit)
66
+ super().__init__(oracle.num_qubits, name="Phase Oracle")
92
67
 
93
- oracle = expression.synth(synthesizer=synthesizer)
94
-
95
- super().__init__(oracle.num_qubits, name="Phase Oracle")
96
-
97
- self.compose(oracle, inplace=True, copy=False)
68
+ self.compose(oracle, inplace=True, copy=False)
98
69
 
99
70
  def evaluate_bitstring(self, bitstring: str) -> bool:
100
71
  """Evaluate the oracle on a bitstring.
@@ -114,7 +85,7 @@ class PhaseOracle(QuantumCircuit):
114
85
  r"""Create a PhaseOracle from the string in the DIMACS format.
115
86
 
116
87
  It is possible to build a PhaseOracle from a file in `DIMACS CNF format
117
- <http://www.satcompetition.org/2009/format-benchmarks2009.html>`__,
88
+ <https://web.archive.org/web/20190325181937/https://www.satcompetition.org/2009/format-benchmarks2009.html>`__,
118
89
  which is the standard format for specifying SATisfiability (SAT) problem instances in
119
90
  `Conjunctive Normal Form (CNF) <https://en.wikipedia.org/wiki/Conjunctive_normal_form>`__,
120
91
  which is a conjunction of one or more clauses, where a clause is a disjunction of one
@@ -154,7 +125,115 @@ class PhaseOracle(QuantumCircuit):
154
125
  Returns:
155
126
  PhaseOracle: A quantum circuit with a phase oracle.
156
127
  """
157
- from qiskit.circuit.classicalfunction.boolean_expression import BooleanExpression
128
+ expr = BooleanExpression.from_dimacs_file(filename)
129
+ return cls(expr)
130
+
131
+
132
+ class PhaseOracleGate(Gate):
133
+ r"""Implements a phase oracle.
134
+
135
+ The Phase Oracle Gate object constructs circuits for any arbitrary
136
+ input logical expressions. A logical expression is composed of logical operators
137
+ `&` (logical `AND`), `|` (logical `OR`),
138
+ `~` (logical `NOT`), and `^` (logical `XOR`).
139
+ as well as symbols for literals (variables).
140
+ For example, `'a & b'`, and `(v0 | ~v1) & (~v2 & v3)`
141
+ are both valid string representation of boolean logical expressions.
142
+
143
+ A phase oracle for a boolean function `f(x)` performs the following
144
+ quantum operation:
145
+
146
+ .. math::
147
+
148
+ |x\rangle \mapsto (-1)^{f(x)}|x\rangle
149
+
150
+ For convenience, this oracle, in addition to parsing arbitrary logical expressions,
151
+ also supports input strings in the `DIMACS CNF format
152
+ <https://web.archive.org/web/20190325181937/https://www.satcompetition.org/2009/format-benchmarks2009.html>`__,
153
+ which is the standard format for specifying SATisfiability (SAT) problem instances in
154
+ `Conjunctive Normal Form (CNF) <https://en.wikipedia.org/wiki/Conjunctive_normal_form>`__,
155
+ which is a conjunction of one or more clauses, where a clause is a disjunction of one
156
+ or more literals. See :meth:`qiskit.circuit.library.phase_oracle.PhaseOracleGate.from_dimacs_file`.
157
+
158
+ From 16 variables on, possible performance issues should be expected when using the
159
+ default synthesizer.
160
+ """
161
+
162
+ def __init__(
163
+ self,
164
+ expression: str,
165
+ var_order: list[str] | None = None,
166
+ label: str | None = None,
167
+ ) -> None:
168
+ """
169
+ Args:
170
+ expression: A Python-like boolean expression.
171
+ var_order: A list with the order in which variables will be created.
172
+ (default: by appearance)
173
+ label: A label for the gate to display in visualizations. Per default, the label is
174
+ set to display the textual represntation of the boolean expression (truncated if needed)
175
+ """
176
+ self.boolean_expression = BooleanExpression(expression, var_order=var_order)
158
177
 
178
+ if label is None:
179
+ short_expr_for_name = (expression[:15] + "...") if len(expression) > 15 else expression
180
+ label = short_expr_for_name
181
+
182
+ super().__init__(
183
+ name="Phase Oracle",
184
+ num_qubits=self.boolean_expression.num_bits,
185
+ params=[],
186
+ label=label,
187
+ )
188
+
189
+ def _define(self):
190
+ """Defined by the synthesized phase oracle"""
191
+ self.definition = self.boolean_expression.synth(circuit_type="phase")
192
+
193
+ @classmethod
194
+ def from_dimacs_file(cls, filename: str) -> PhaseOracleGate:
195
+ r"""Create a PhaseOracle from the string in the DIMACS format.
196
+
197
+ It is possible to build a PhaseOracle from a file in `DIMACS CNF format
198
+ <https://web.archive.org/web/20190325181937/https://www.satcompetition.org/2009/format-benchmarks2009.html>`__,
199
+ which is the standard format for specifying SATisfiability (SAT) problem instances in
200
+ `Conjunctive Normal Form (CNF) <https://en.wikipedia.org/wiki/Conjunctive_normal_form>`__,
201
+ which is a conjunction of one or more clauses, where a clause is a disjunction of one
202
+ or more literals.
203
+
204
+ The following is an example of a CNF expressed in the DIMACS format:
205
+
206
+ .. code:: text
207
+
208
+ c DIMACS CNF file with 3 satisfying assignments: 1 -2 3, -1 -2 -3, 1 2 -3.
209
+ p cnf 3 5
210
+ -1 -2 -3 0
211
+ 1 -2 3 0
212
+ 1 2 -3 0
213
+ 1 -2 -3 0
214
+ -1 2 3 0
215
+
216
+ The first line, following the `c` character, is a comment. The second line specifies that
217
+ the CNF is over three boolean variables --- let us call them :math:`x_1, x_2, x_3`, and
218
+ contains five clauses. The five clauses, listed afterwards, are implicitly joined by the
219
+ logical `AND` operator, :math:`\land`, while the variables in each clause, represented by
220
+ their indices, are implicitly disjoined by the logical `OR` operator, :math:`\lor`. The
221
+ :math:`-` symbol preceding a boolean variable index corresponds to the logical `NOT`
222
+ operator, :math:`\lnot`. Character `0` (zero) marks the end of each clause. Essentially,
223
+ the code above corresponds to the following CNF:
224
+
225
+ :math:`(\lnot x_1 \lor \lnot x_2 \lor \lnot x_3)
226
+ \land (x_1 \lor \lnot x_2 \lor x_3)
227
+ \land (x_1 \lor x_2 \lor \lnot x_3)
228
+ \land (x_1 \lor \lnot x_2 \lor \lnot x_3)
229
+ \land (\lnot x_1 \lor x_2 \lor x_3)`.
230
+
231
+
232
+ Args:
233
+ filename: A file in DIMACS format.
234
+
235
+ Returns:
236
+ PhaseOracleGate: A quantum circuit with a phase oracle.
237
+ """
159
238
  expr = BooleanExpression.from_dimacs_file(filename)
160
239
  return cls(expr)
@@ -43,7 +43,6 @@ from .x import MCXGate, MCXGrayCode, MCXRecursive, MCXVChain
43
43
  from .y import YGate, CYGate
44
44
  from .z import ZGate, CZGate, CCZGate
45
45
  from .global_phase import GlobalPhaseGate
46
- from .multi_control_rotation_gates import mcrx, mcry, mcrz
47
46
 
48
47
 
49
48
  def get_standard_gate_name_mapping():
@@ -13,7 +13,6 @@
13
13
  """Double-CNOT gate."""
14
14
 
15
15
  from qiskit.circuit.singleton import SingletonGate, stdlib_singleton_key
16
- from qiskit.circuit.quantumregister import QuantumRegister
17
16
  from qiskit.circuit._utils import with_gate_array
18
17
  from qiskit._accelerate.circuit import StandardGate
19
18
 
@@ -52,9 +51,9 @@ class DCXGate(SingletonGate):
52
51
 
53
52
  _standard_gate = StandardGate.DCXGate
54
53
 
55
- def __init__(self, label=None, *, duration=None, unit="dt"):
54
+ def __init__(self, label=None):
56
55
  """Create new DCX gate."""
57
- super().__init__("dcx", 2, [], label=label, duration=duration, unit=unit)
56
+ super().__init__("dcx", 2, [], label=label)
58
57
 
59
58
  _singleton_lookup_key = stdlib_singleton_key()
60
59
 
@@ -63,7 +62,7 @@ class DCXGate(SingletonGate):
63
62
  gate dcx a, b { cx a, b; cx b, a; }
64
63
  """
65
64
  # pylint: disable=cyclic-import
66
- from qiskit.circuit.quantumcircuit import QuantumCircuit
65
+ from qiskit.circuit import QuantumCircuit, QuantumRegister
67
66
  from .x import CXGate
68
67
 
69
68
  q = QuantumRegister(2, "q")
@@ -15,7 +15,6 @@ from math import sqrt
15
15
  import numpy as np
16
16
 
17
17
  from qiskit.circuit._utils import with_gate_array
18
- from qiskit.circuit.quantumregister import QuantumRegister
19
18
  from qiskit.circuit.singleton import SingletonGate, stdlib_singleton_key
20
19
  from qiskit._accelerate.circuit import StandardGate
21
20
  from .rzx import RZXGate
@@ -87,9 +86,9 @@ class ECRGate(SingletonGate):
87
86
 
88
87
  _standard_gate = StandardGate.ECRGate
89
88
 
90
- def __init__(self, label=None, *, duration=None, unit="dt"):
89
+ def __init__(self, label=None):
91
90
  """Create new ECR gate."""
92
- super().__init__("ecr", 2, [], label=label, duration=duration, unit=unit)
91
+ super().__init__("ecr", 2, [], label=label)
93
92
 
94
93
  _singleton_lookup_key = stdlib_singleton_key()
95
94
 
@@ -98,7 +97,7 @@ class ECRGate(SingletonGate):
98
97
  gate ecr a, b { rzx(pi/4) a, b; x a; rzx(-pi/4) a, b;}
99
98
  """
100
99
  # pylint: disable=cyclic-import
101
- from qiskit.circuit.quantumcircuit import QuantumCircuit
100
+ from qiskit.circuit import QuantumCircuit, QuantumRegister
102
101
 
103
102
  q = QuantumRegister(2, "q")
104
103
  qc = QuantumCircuit(q, name=self.name)
@@ -17,8 +17,6 @@ from typing import Optional
17
17
  import numpy
18
18
 
19
19
  from qiskit.circuit.gate import Gate
20
- from qiskit.circuit.quantumregister import QuantumRegister
21
- from qiskit.circuit.quantumcircuit import QuantumCircuit
22
20
  from qiskit.circuit.parameterexpression import ParameterValueType
23
21
  from qiskit._accelerate.circuit import StandardGate
24
22
 
@@ -39,17 +37,18 @@ class GlobalPhaseGate(Gate):
39
37
 
40
38
  _standard_gate = StandardGate.GlobalPhaseGate
41
39
 
42
- def __init__(
43
- self, phase: ParameterValueType, label: Optional[str] = None, *, duration=None, unit="dt"
44
- ):
40
+ def __init__(self, phase: ParameterValueType, label: Optional[str] = None):
45
41
  """
46
42
  Args:
47
43
  phase: The value of phase it takes.
48
44
  label: An optional label for the gate.
49
45
  """
50
- super().__init__("global_phase", 0, [phase], label=label, duration=duration, unit=unit)
46
+ super().__init__("global_phase", 0, [phase], label=label)
51
47
 
52
48
  def _define(self):
49
+ # pylint: disable=cyclic-import
50
+ from qiskit.circuit import QuantumCircuit, QuantumRegister
51
+
53
52
  q = QuantumRegister(0, "q")
54
53
  qc = QuantumCircuit(q, name=self.name, global_phase=self.params[0])
55
54
 
@@ -18,7 +18,6 @@ from math import sqrt, pi
18
18
  from typing import Optional, Union
19
19
  import numpy
20
20
  from qiskit.circuit.singleton import SingletonGate, SingletonControlledGate, stdlib_singleton_key
21
- from qiskit.circuit.quantumregister import QuantumRegister
22
21
  from qiskit.circuit._utils import with_gate_array, with_controlled_gate_array
23
22
  from qiskit._accelerate.circuit import StandardGate
24
23
 
@@ -57,9 +56,9 @@ class HGate(SingletonGate):
57
56
 
58
57
  _standard_gate = StandardGate.HGate
59
58
 
60
- def __init__(self, label: Optional[str] = None, *, duration=None, unit="dt"):
59
+ def __init__(self, label: Optional[str] = None):
61
60
  """Create new H gate."""
62
- super().__init__("h", 1, [], label=label, duration=duration, unit=unit)
61
+ super().__init__("h", 1, [], label=label)
63
62
 
64
63
  _singleton_lookup_key = stdlib_singleton_key()
65
64
 
@@ -68,7 +67,7 @@ class HGate(SingletonGate):
68
67
  gate h a { u2(0,pi) a; }
69
68
  """
70
69
  # pylint: disable=cyclic-import
71
- from qiskit.circuit.quantumcircuit import QuantumCircuit
70
+ from qiskit.circuit import QuantumCircuit, QuantumRegister
72
71
  from .u2 import U2Gate
73
72
 
74
73
  q = QuantumRegister(1, "q")
@@ -196,8 +195,6 @@ class CHGate(SingletonControlledGate):
196
195
  label: Optional[str] = None,
197
196
  ctrl_state: Optional[Union[int, str]] = None,
198
197
  *,
199
- duration=None,
200
- unit="dt",
201
198
  _base_label=None,
202
199
  ):
203
200
  """Create new CH gate."""
@@ -209,8 +206,6 @@ class CHGate(SingletonControlledGate):
209
206
  label=label,
210
207
  ctrl_state=ctrl_state,
211
208
  base_gate=HGate(label=_base_label),
212
- duration=duration,
213
- unit=unit,
214
209
  _base_label=_base_label,
215
210
  )
216
211
 
@@ -229,7 +224,7 @@ class CHGate(SingletonControlledGate):
229
224
  }
230
225
  """
231
226
  # pylint: disable=cyclic-import
232
- from qiskit.circuit.quantumcircuit import QuantumCircuit
227
+ from qiskit.circuit import QuantumCircuit, QuantumRegister
233
228
  from .x import CXGate # pylint: disable=cyclic-import
234
229
  from .t import TGate, TdgGate
235
230
  from .s import SGate, SdgGate
@@ -49,9 +49,9 @@ class IGate(SingletonGate):
49
49
 
50
50
  _standard_gate = StandardGate.IGate
51
51
 
52
- def __init__(self, label: Optional[str] = None, *, duration=None, unit="dt"):
52
+ def __init__(self, label: Optional[str] = None):
53
53
  """Create new Identity gate."""
54
- super().__init__("id", 1, [], label=label, duration=duration, unit=unit)
54
+ super().__init__("id", 1, [], label=label)
55
55
 
56
56
  _singleton_lookup_key = stdlib_singleton_key()
57
57
 
@@ -17,7 +17,6 @@ from typing import Optional
17
17
  import numpy as np
18
18
 
19
19
  from qiskit.circuit.singleton import SingletonGate, stdlib_singleton_key
20
- from qiskit.circuit.quantumregister import QuantumRegister
21
20
  from qiskit.circuit._utils import with_gate_array
22
21
  from qiskit._accelerate.circuit import StandardGate
23
22
 
@@ -88,9 +87,9 @@ class iSwapGate(SingletonGate):
88
87
 
89
88
  _standard_gate = StandardGate.ISwapGate
90
89
 
91
- def __init__(self, label: Optional[str] = None, *, duration=None, unit="dt"):
90
+ def __init__(self, label: Optional[str] = None):
92
91
  """Create new iSwap gate."""
93
- super().__init__("iswap", 2, [], label=label, duration=duration, unit=unit)
92
+ super().__init__("iswap", 2, [], label=label)
94
93
 
95
94
  _singleton_lookup_key = stdlib_singleton_key()
96
95
 
@@ -106,7 +105,7 @@ class iSwapGate(SingletonGate):
106
105
  }
107
106
  """
108
107
  # pylint: disable=cyclic-import
109
- from qiskit.circuit.quantumcircuit import QuantumCircuit
108
+ from qiskit.circuit import QuantumCircuit, QuantumRegister
110
109
 
111
110
  from .h import HGate
112
111
  from .s import SGate
@@ -17,7 +17,6 @@ from cmath import exp
17
17
  import numpy
18
18
  from qiskit.circuit.controlledgate import ControlledGate
19
19
  from qiskit.circuit.gate import Gate
20
- from qiskit.circuit.quantumregister import QuantumRegister
21
20
  from qiskit.circuit.parameterexpression import ParameterValueType
22
21
  from qiskit._accelerate.circuit import StandardGate
23
22
 
@@ -78,15 +77,13 @@ class PhaseGate(Gate):
78
77
 
79
78
  _standard_gate = StandardGate.PhaseGate
80
79
 
81
- def __init__(
82
- self, theta: ParameterValueType, label: str | None = None, *, duration=None, unit="dt"
83
- ):
80
+ def __init__(self, theta: ParameterValueType, label: str | None = None):
84
81
  """Create new Phase gate."""
85
- super().__init__("p", 1, [theta], label=label, duration=duration, unit=unit)
82
+ super().__init__("p", 1, [theta], label=label)
86
83
 
87
84
  def _define(self):
88
85
  # pylint: disable=cyclic-import
89
- from qiskit.circuit.quantumcircuit import QuantumCircuit
86
+ from qiskit.circuit import QuantumCircuit, QuantumRegister
90
87
  from .u import UGate
91
88
 
92
89
  q = QuantumRegister(1, "q")
@@ -208,8 +205,6 @@ class CPhaseGate(ControlledGate):
208
205
  label: str | None = None,
209
206
  ctrl_state: str | int | None = None,
210
207
  *,
211
- duration=None,
212
- unit="dt",
213
208
  _base_label=None,
214
209
  ):
215
210
  """Create new CPhase gate."""
@@ -221,8 +216,6 @@ class CPhaseGate(ControlledGate):
221
216
  label=label,
222
217
  ctrl_state=ctrl_state,
223
218
  base_gate=PhaseGate(theta, label=_base_label),
224
- duration=duration,
225
- unit=unit,
226
219
  )
227
220
 
228
221
  def _define(self):
@@ -234,7 +227,7 @@ class CPhaseGate(ControlledGate):
234
227
  }
235
228
  """
236
229
  # pylint: disable=cyclic-import
237
- from qiskit.circuit.quantumcircuit import QuantumCircuit
230
+ from qiskit.circuit import QuantumCircuit, QuantumRegister
238
231
 
239
232
  # ┌────────┐
240
233
  # q_0: ┤ P(λ/2) ├──■───────────────■────────────
@@ -342,8 +335,6 @@ class MCPhaseGate(ControlledGate):
342
335
  label: str | None = None,
343
336
  ctrl_state: str | int | None = None,
344
337
  *,
345
- duration=None,
346
- unit="dt",
347
338
  _base_label=None,
348
339
  ):
349
340
  """Create new MCPhase gate."""
@@ -355,13 +346,11 @@ class MCPhaseGate(ControlledGate):
355
346
  label=label,
356
347
  ctrl_state=ctrl_state,
357
348
  base_gate=PhaseGate(lam, label=_base_label),
358
- duration=duration,
359
- unit=unit,
360
349
  )
361
350
 
362
351
  def _define(self):
363
352
  # pylint: disable=cyclic-import
364
- from qiskit.circuit.quantumcircuit import QuantumCircuit
353
+ from qiskit.circuit import QuantumCircuit, QuantumRegister
365
354
 
366
355
  qr = QuantumRegister(self.num_qubits, "q")
367
356
  qc = QuantumCircuit(qr, name=self.name)
@@ -372,24 +361,16 @@ class MCPhaseGate(ControlledGate):
372
361
  qc.cp(self.params[0], 0, 1)
373
362
  else:
374
363
  lam = self.params[0]
375
- if type(lam) in [float, int]:
376
- q_controls = list(range(self.num_ctrl_qubits))
377
- q_target = self.num_ctrl_qubits
378
- new_target = q_target
379
- for k in range(self.num_ctrl_qubits):
380
- # Note: it's better *not* to run transpile recursively
381
- qc.mcrz(lam / (2**k), q_controls, new_target, use_basis_gates=False)
382
- new_target = q_controls.pop()
383
- qc.p(lam / (2**self.num_ctrl_qubits), new_target)
384
- else: # in this case type(lam) is ParameterValueType
385
- from .u3 import _gray_code_chain
386
-
387
- scaled_lam = self.params[0] / (2 ** (self.num_ctrl_qubits - 1))
388
- bottom_gate = CPhaseGate(scaled_lam)
389
- for operation, qubits, clbits in _gray_code_chain(
390
- qr, self.num_ctrl_qubits, bottom_gate
391
- ):
392
- qc._append(operation, qubits, clbits)
364
+
365
+ q_controls = list(range(self.num_ctrl_qubits))
366
+ q_target = self.num_ctrl_qubits
367
+ new_target = q_target
368
+ for k in range(self.num_ctrl_qubits):
369
+ # Note: it's better *not* to run transpile recursively
370
+ qc.mcrz(lam / (2**k), q_controls, new_target, use_basis_gates=False)
371
+ new_target = q_controls.pop()
372
+ qc.p(lam / (2**self.num_ctrl_qubits), new_target)
373
+
393
374
  self.definition = qc
394
375
 
395
376
  def control(
@@ -18,7 +18,6 @@ from math import pi
18
18
  from typing import Optional
19
19
  import numpy
20
20
  from qiskit.circuit.gate import Gate
21
- from qiskit.circuit.quantumregister import QuantumRegister
22
21
  from qiskit.circuit.parameterexpression import ParameterValueType
23
22
  from qiskit._accelerate.circuit import StandardGate
24
23
 
@@ -33,9 +32,10 @@ class RGate(Gate):
33
32
 
34
33
  .. code-block:: text
35
34
 
36
- ┌──────┐
37
- q_0: ┤ R(ϴ)
38
- └──────┘
35
+ ┌─────────┐
36
+ q_0: ┤ R(θ,ϕ)
37
+ └─────────┘
38
+
39
39
 
40
40
  **Matrix Representation:**
41
41
 
@@ -57,19 +57,16 @@ class RGate(Gate):
57
57
  theta: ParameterValueType,
58
58
  phi: ParameterValueType,
59
59
  label: Optional[str] = None,
60
- *,
61
- duration=None,
62
- unit="dt",
63
60
  ):
64
61
  """Create new r single-qubit gate."""
65
- super().__init__("r", 1, [theta, phi], label=label, duration=duration, unit=unit)
62
+ super().__init__("r", 1, [theta, phi], label=label)
66
63
 
67
64
  def _define(self):
68
65
  """
69
66
  gate r(θ, φ) a {u3(θ, φ - π/2, -φ + π/2) a;}
70
67
  """
71
68
  # pylint: disable=cyclic-import
72
- from qiskit.circuit.quantumcircuit import QuantumCircuit
69
+ from qiskit.circuit import QuantumCircuit, QuantumRegister
73
70
  from .u3 import U3Gate
74
71
 
75
72
  q = QuantumRegister(1, "q")
@@ -83,7 +80,7 @@ class RGate(Gate):
83
80
  self.definition = qc
84
81
 
85
82
  def inverse(self, annotated: bool = False):
86
- """Invert this gate as: :math:`r(θ, φ)^dagger = r(-θ, φ)`
83
+ r"""Invert this gate as: :math:`R(θ, φ)^{\dagger} = R(-θ, φ)`
87
84
 
88
85
  Args:
89
86
  annotated: when set to ``True``, this is typically used to return an
@@ -21,8 +21,7 @@ import numpy
21
21
 
22
22
  from qiskit.circuit.controlledgate import ControlledGate
23
23
  from qiskit.circuit.gate import Gate
24
- from qiskit.circuit.quantumregister import QuantumRegister
25
- from qiskit.circuit.parameterexpression import ParameterValueType, ParameterExpression
24
+ from qiskit.circuit.parameterexpression import ParameterValueType
26
25
  from qiskit._accelerate.circuit import StandardGate
27
26
 
28
27
 
@@ -55,18 +54,16 @@ class RXGate(Gate):
55
54
 
56
55
  _standard_gate = StandardGate.RXGate
57
56
 
58
- def __init__(
59
- self, theta: ParameterValueType, label: Optional[str] = None, *, duration=None, unit="dt"
60
- ):
57
+ def __init__(self, theta: ParameterValueType, label: Optional[str] = None):
61
58
  """Create new RX gate."""
62
- super().__init__("rx", 1, [theta], label=label, duration=duration, unit=unit)
59
+ super().__init__("rx", 1, [theta], label=label)
63
60
 
64
61
  def _define(self):
65
62
  """
66
63
  gate rx(theta) a {r(theta, 0) a;}
67
64
  """
68
65
  # pylint: disable=cyclic-import
69
- from qiskit.circuit.quantumcircuit import QuantumCircuit
66
+ from qiskit.circuit import QuantumCircuit, QuantumRegister
70
67
  from .r import RGate
71
68
 
72
69
  q = QuantumRegister(1, "q")
@@ -104,11 +101,6 @@ class RXGate(Gate):
104
101
  gate = CRXGate(self.params[0], label=label, ctrl_state=ctrl_state)
105
102
  gate.base_gate.label = self.label
106
103
  else:
107
- # If the gate parameters contain free parameters, we cannot eagerly synthesize
108
- # the controlled gate decomposition. In this case, we annotate the gate per default.
109
- if annotated is None:
110
- annotated = any(isinstance(p, ParameterExpression) for p in self.params)
111
-
112
104
  gate = super().control(
113
105
  num_ctrl_qubits=num_ctrl_qubits,
114
106
  label=label,
@@ -218,8 +210,6 @@ class CRXGate(ControlledGate):
218
210
  label: Optional[str] = None,
219
211
  ctrl_state: Optional[Union[str, int]] = None,
220
212
  *,
221
- duration=None,
222
- unit="dt",
223
213
  _base_label=None,
224
214
  ):
225
215
  """Create new CRX gate."""
@@ -244,7 +234,7 @@ class CRXGate(ControlledGate):
244
234
  }
245
235
  """
246
236
  # pylint: disable=cyclic-import
247
- from qiskit.circuit.quantumcircuit import QuantumCircuit
237
+ from qiskit.circuit import QuantumCircuit, QuantumRegister
248
238
  from .u1 import U1Gate
249
239
  from .u3 import U3Gate
250
240
  from .x import CXGate