qiskit 1.4.1__cp39-abi3-win_amd64.whl → 2.0.0rc1__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 (456) hide show
  1. qiskit/VERSION.txt +1 -1
  2. qiskit/__init__.py +2 -5
  3. qiskit/_accelerate.pyd +0 -0
  4. qiskit/circuit/__init__.py +24 -5
  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 +248 -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 +34 -5
  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/hamiltonian_gate.py +1 -1
  60. qiskit/circuit/library/n_local/evolved_operator_ansatz.py +1 -1
  61. qiskit/circuit/library/n_local/n_local.py +1 -1
  62. qiskit/circuit/library/n_local/qaoa_ansatz.py +1 -1
  63. qiskit/circuit/library/overlap.py +2 -2
  64. qiskit/circuit/library/pauli_evolution.py +39 -24
  65. qiskit/circuit/library/phase_oracle.py +130 -51
  66. qiskit/circuit/library/standard_gates/__init__.py +0 -1
  67. qiskit/circuit/library/standard_gates/dcx.py +3 -4
  68. qiskit/circuit/library/standard_gates/ecr.py +3 -4
  69. qiskit/circuit/library/standard_gates/global_phase.py +5 -6
  70. qiskit/circuit/library/standard_gates/h.py +4 -9
  71. qiskit/circuit/library/standard_gates/i.py +2 -2
  72. qiskit/circuit/library/standard_gates/iswap.py +3 -4
  73. qiskit/circuit/library/standard_gates/p.py +15 -34
  74. qiskit/circuit/library/standard_gates/r.py +2 -6
  75. qiskit/circuit/library/standard_gates/rx.py +5 -15
  76. qiskit/circuit/library/standard_gates/rxx.py +3 -6
  77. qiskit/circuit/library/standard_gates/ry.py +5 -17
  78. qiskit/circuit/library/standard_gates/ryy.py +3 -6
  79. qiskit/circuit/library/standard_gates/rz.py +5 -17
  80. qiskit/circuit/library/standard_gates/rzx.py +3 -6
  81. qiskit/circuit/library/standard_gates/rzz.py +3 -6
  82. qiskit/circuit/library/standard_gates/s.py +6 -15
  83. qiskit/circuit/library/standard_gates/swap.py +4 -11
  84. qiskit/circuit/library/standard_gates/sx.py +7 -12
  85. qiskit/circuit/library/standard_gates/t.py +6 -7
  86. qiskit/circuit/library/standard_gates/u.py +2 -10
  87. qiskit/circuit/library/standard_gates/u1.py +5 -16
  88. qiskit/circuit/library/standard_gates/u2.py +2 -6
  89. qiskit/circuit/library/standard_gates/u3.py +3 -11
  90. qiskit/circuit/library/standard_gates/x.py +13 -60
  91. qiskit/circuit/library/standard_gates/xx_minus_yy.py +2 -5
  92. qiskit/circuit/library/standard_gates/xx_plus_yy.py +2 -5
  93. qiskit/circuit/library/standard_gates/y.py +4 -9
  94. qiskit/circuit/library/standard_gates/z.py +5 -15
  95. qiskit/circuit/measure.py +11 -2
  96. qiskit/circuit/parameterexpression.py +4 -0
  97. qiskit/circuit/quantumcircuit.py +881 -555
  98. qiskit/circuit/random/utils.py +12 -6
  99. qiskit/circuit/reset.py +5 -2
  100. qiskit/circuit/singleton.py +5 -11
  101. qiskit/circuit/store.py +0 -8
  102. qiskit/compiler/__init__.py +1 -7
  103. qiskit/compiler/transpiler.py +38 -196
  104. qiskit/converters/circuit_to_dag.py +4 -2
  105. qiskit/converters/circuit_to_dagdependency.py +0 -2
  106. qiskit/converters/circuit_to_dagdependency_v2.py +0 -1
  107. qiskit/converters/circuit_to_gate.py +1 -1
  108. qiskit/converters/circuit_to_instruction.py +16 -29
  109. qiskit/converters/dag_to_circuit.py +5 -5
  110. qiskit/converters/dag_to_dagdependency.py +0 -1
  111. qiskit/converters/dag_to_dagdependency_v2.py +0 -1
  112. qiskit/converters/dagdependency_to_circuit.py +0 -6
  113. qiskit/converters/dagdependency_to_dag.py +0 -6
  114. qiskit/dagcircuit/collect_blocks.py +32 -20
  115. qiskit/dagcircuit/dagdependency.py +3 -37
  116. qiskit/dagcircuit/dagdependency_v2.py +2 -80
  117. qiskit/dagcircuit/dagnode.py +14 -2
  118. qiskit/passmanager/__init__.py +24 -6
  119. qiskit/passmanager/passmanager.py +26 -24
  120. qiskit/primitives/__init__.py +44 -35
  121. qiskit/primitives/backend_estimator_v2.py +102 -23
  122. qiskit/primitives/backend_sampler_v2.py +5 -20
  123. qiskit/primitives/base/__init__.py +4 -4
  124. qiskit/primitives/base/base_estimator.py +77 -82
  125. qiskit/primitives/base/base_primitive_job.py +2 -2
  126. qiskit/primitives/base/{base_primitive.py → base_primitive_v1.py} +1 -1
  127. qiskit/primitives/base/{base_result.py → base_result_v1.py} +1 -1
  128. qiskit/primitives/base/base_sampler.py +52 -60
  129. qiskit/primitives/base/{estimator_result.py → estimator_result_v1.py} +2 -2
  130. qiskit/primitives/base/{sampler_result.py → sampler_result_v1.py} +2 -2
  131. qiskit/primitives/base/{validation.py → validation_v1.py} +34 -15
  132. qiskit/primitives/containers/bindings_array.py +3 -1
  133. qiskit/primitives/containers/bit_array.py +23 -0
  134. qiskit/primitives/containers/data_bin.py +3 -1
  135. qiskit/primitives/containers/observables_array.py +19 -2
  136. qiskit/primitives/statevector_sampler.py +6 -8
  137. qiskit/primitives/utils.py +14 -189
  138. qiskit/providers/__init__.py +4 -130
  139. qiskit/providers/backend.py +11 -314
  140. qiskit/providers/basic_provider/__init__.py +3 -1
  141. qiskit/providers/basic_provider/basic_provider.py +29 -9
  142. qiskit/providers/basic_provider/basic_simulator.py +158 -298
  143. qiskit/providers/exceptions.py +0 -33
  144. qiskit/providers/fake_provider/__init__.py +0 -37
  145. qiskit/providers/fake_provider/generic_backend_v2.py +32 -693
  146. qiskit/qasm2/__init__.py +21 -6
  147. qiskit/qasm2/export.py +2 -10
  148. qiskit/qasm2/parse.py +11 -25
  149. qiskit/qasm3/__init__.py +5 -1
  150. qiskit/qasm3/ast.py +44 -0
  151. qiskit/qasm3/exporter.py +65 -27
  152. qiskit/qasm3/printer.py +35 -4
  153. qiskit/qpy/__init__.py +141 -19
  154. qiskit/qpy/binary_io/__init__.py +0 -1
  155. qiskit/qpy/binary_io/circuits.py +91 -116
  156. qiskit/qpy/binary_io/schedules.py +61 -388
  157. qiskit/qpy/binary_io/value.py +154 -28
  158. qiskit/qpy/common.py +10 -7
  159. qiskit/qpy/formats.py +41 -0
  160. qiskit/qpy/interface.py +29 -62
  161. qiskit/qpy/type_keys.py +58 -221
  162. qiskit/quantum_info/analysis/distance.py +3 -1
  163. qiskit/quantum_info/operators/dihedral/dihedral.py +3 -1
  164. qiskit/quantum_info/operators/operator.py +6 -2
  165. qiskit/quantum_info/operators/symplectic/clifford.py +3 -1
  166. qiskit/quantum_info/operators/symplectic/pauli.py +4 -2
  167. qiskit/quantum_info/operators/symplectic/pauli_list.py +17 -5
  168. qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py +40 -6
  169. qiskit/quantum_info/states/densitymatrix.py +16 -6
  170. qiskit/quantum_info/states/stabilizerstate.py +35 -4
  171. qiskit/quantum_info/states/statevector.py +16 -6
  172. qiskit/result/__init__.py +5 -17
  173. qiskit/result/models.py +18 -10
  174. qiskit/result/result.py +28 -126
  175. qiskit/result/sampled_expval.py +1 -2
  176. qiskit/result/utils.py +3 -4
  177. qiskit/synthesis/__init__.py +21 -1
  178. qiskit/synthesis/arithmetic/__init__.py +3 -1
  179. qiskit/synthesis/arithmetic/adders/cdkm_ripple_carry_adder.py +1 -1
  180. qiskit/synthesis/arithmetic/adders/draper_qft_adder.py +1 -1
  181. qiskit/synthesis/arithmetic/adders/vbe_ripple_carry_adder.py +2 -2
  182. qiskit/{providers/fake_provider/backends_v1/fake_20q → synthesis/arithmetic/comparators}/__init__.py +4 -6
  183. qiskit/synthesis/arithmetic/comparators/compare_2s.py +112 -0
  184. qiskit/synthesis/arithmetic/comparators/compare_greedy.py +66 -0
  185. qiskit/synthesis/arithmetic/multipliers/hrs_cumulative_multiplier.py +1 -1
  186. qiskit/synthesis/arithmetic/multipliers/rg_qft_multiplier.py +1 -1
  187. qiskit/synthesis/arithmetic/weighted_sum.py +155 -0
  188. qiskit/{result/mitigation → synthesis/boolean}/__init__.py +2 -2
  189. qiskit/synthesis/boolean/boolean_expression.py +231 -0
  190. qiskit/synthesis/boolean/boolean_expression_synth.py +124 -0
  191. qiskit/synthesis/boolean/boolean_expression_visitor.py +96 -0
  192. qiskit/synthesis/discrete_basis/generate_basis_approximations.py +2 -0
  193. qiskit/synthesis/evolution/lie_trotter.py +10 -7
  194. qiskit/synthesis/evolution/product_formula.py +44 -35
  195. qiskit/synthesis/evolution/qdrift.py +17 -24
  196. qiskit/synthesis/evolution/suzuki_trotter.py +20 -27
  197. qiskit/synthesis/linear/linear_depth_lnn.py +6 -221
  198. qiskit/synthesis/linear_phase/cx_cz_depth_lnn.py +4 -205
  199. qiskit/synthesis/multi_controlled/__init__.py +1 -0
  200. qiskit/synthesis/multi_controlled/mcx_synthesis.py +5 -2
  201. qiskit/synthesis/multi_controlled/multi_control_rotation_gates.py +206 -0
  202. qiskit/synthesis/one_qubit/one_qubit_decompose.py +1 -1
  203. qiskit/synthesis/two_qubit/__init__.py +1 -0
  204. qiskit/synthesis/two_qubit/two_qubit_decompose.py +28 -145
  205. qiskit/transpiler/__init__.py +32 -232
  206. qiskit/transpiler/basepasses.py +20 -51
  207. qiskit/transpiler/layout.py +1 -1
  208. qiskit/transpiler/passes/__init__.py +2 -40
  209. qiskit/transpiler/passes/basis/basis_translator.py +4 -3
  210. qiskit/transpiler/passes/basis/decompose.py +1 -15
  211. qiskit/transpiler/passes/basis/unroll_3q_or_more.py +1 -5
  212. qiskit/transpiler/passes/basis/unroll_custom_definitions.py +3 -2
  213. qiskit/transpiler/passes/layout/apply_layout.py +4 -0
  214. qiskit/transpiler/passes/layout/dense_layout.py +2 -39
  215. qiskit/transpiler/passes/layout/full_ancilla_allocation.py +4 -4
  216. qiskit/transpiler/passes/layout/sabre_layout.py +7 -3
  217. qiskit/transpiler/passes/layout/vf2_layout.py +2 -20
  218. qiskit/transpiler/passes/layout/vf2_post_layout.py +60 -125
  219. qiskit/transpiler/passes/layout/vf2_utils.py +2 -26
  220. qiskit/transpiler/passes/optimization/__init__.py +1 -3
  221. qiskit/transpiler/passes/optimization/collect_and_collapse.py +2 -0
  222. qiskit/transpiler/passes/optimization/collect_cliffords.py +5 -0
  223. qiskit/transpiler/passes/optimization/collect_linear_functions.py +5 -0
  224. qiskit/transpiler/passes/optimization/collect_multiqubit_blocks.py +16 -1
  225. qiskit/transpiler/passes/optimization/commutation_analysis.py +3 -3
  226. qiskit/transpiler/passes/optimization/consolidate_blocks.py +41 -19
  227. qiskit/transpiler/passes/optimization/contract_idle_wires_in_control_flow.py +104 -0
  228. qiskit/transpiler/passes/optimization/light_cone.py +135 -0
  229. qiskit/transpiler/passes/optimization/optimize_1q_commutation.py +0 -1
  230. qiskit/transpiler/passes/optimization/optimize_1q_decomposition.py +18 -22
  231. qiskit/transpiler/passes/optimization/optimize_annotated.py +3 -2
  232. qiskit/transpiler/passes/optimization/remove_identity_equiv.py +6 -4
  233. qiskit/transpiler/passes/optimization/reset_after_measure_simplification.py +5 -2
  234. qiskit/transpiler/passes/optimization/split_2q_unitaries.py +26 -3
  235. qiskit/transpiler/passes/optimization/template_matching/template_substitution.py +1 -0
  236. qiskit/transpiler/passes/routing/__init__.py +0 -1
  237. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/commuting_2q_gate_router.py +3 -1
  238. qiskit/transpiler/passes/routing/sabre_swap.py +14 -6
  239. qiskit/transpiler/passes/routing/star_prerouting.py +1 -1
  240. qiskit/transpiler/passes/scheduling/__init__.py +1 -7
  241. qiskit/transpiler/passes/scheduling/alignments/__init__.py +2 -4
  242. qiskit/transpiler/passes/scheduling/alignments/check_durations.py +1 -9
  243. qiskit/transpiler/passes/scheduling/alignments/reschedule.py +17 -16
  244. qiskit/transpiler/passes/scheduling/padding/base_padding.py +30 -2
  245. qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py +20 -58
  246. qiskit/transpiler/passes/scheduling/padding/pad_delay.py +11 -3
  247. qiskit/transpiler/passes/scheduling/scheduling/alap.py +5 -39
  248. qiskit/transpiler/passes/scheduling/scheduling/asap.py +4 -35
  249. qiskit/transpiler/passes/scheduling/scheduling/base_scheduler.py +10 -16
  250. qiskit/transpiler/passes/scheduling/time_unit_conversion.py +127 -59
  251. qiskit/transpiler/passes/synthesis/default_unitary_synth_plugin.py +653 -0
  252. qiskit/transpiler/passes/synthesis/high_level_synthesis.py +176 -601
  253. qiskit/transpiler/passes/synthesis/hls_plugins.py +294 -1
  254. qiskit/transpiler/passes/synthesis/plugin.py +4 -0
  255. qiskit/transpiler/passes/synthesis/solovay_kitaev_synthesis.py +16 -10
  256. qiskit/transpiler/passes/synthesis/unitary_synthesis.py +34 -697
  257. qiskit/transpiler/passes/utils/__init__.py +0 -1
  258. qiskit/transpiler/passes/utils/check_gate_direction.py +13 -5
  259. qiskit/transpiler/passes/utils/control_flow.py +2 -6
  260. qiskit/transpiler/passes/utils/gate_direction.py +7 -0
  261. qiskit/transpiler/passes/utils/remove_final_measurements.py +40 -33
  262. qiskit/transpiler/passmanager.py +13 -0
  263. qiskit/transpiler/passmanager_config.py +5 -81
  264. qiskit/transpiler/preset_passmanagers/builtin_plugins.py +225 -344
  265. qiskit/transpiler/preset_passmanagers/common.py +140 -167
  266. qiskit/transpiler/preset_passmanagers/generate_preset_pass_manager.py +101 -322
  267. qiskit/transpiler/preset_passmanagers/level0.py +2 -11
  268. qiskit/transpiler/preset_passmanagers/level1.py +2 -14
  269. qiskit/transpiler/preset_passmanagers/level2.py +2 -12
  270. qiskit/transpiler/preset_passmanagers/level3.py +2 -11
  271. qiskit/transpiler/preset_passmanagers/plugin.py +5 -3
  272. qiskit/transpiler/target.py +67 -524
  273. qiskit/user_config.py +8 -4
  274. qiskit/utils/__init__.py +13 -12
  275. qiskit/utils/deprecation.py +4 -112
  276. qiskit/utils/optionals.py +11 -4
  277. qiskit/utils/parallel.py +214 -87
  278. qiskit/utils/units.py +4 -1
  279. qiskit/visualization/__init__.py +3 -7
  280. qiskit/visualization/array.py +4 -1
  281. qiskit/visualization/bloch.py +1 -1
  282. qiskit/visualization/circuit/_utils.py +19 -19
  283. qiskit/visualization/circuit/circuit_visualization.py +11 -4
  284. qiskit/visualization/circuit/matplotlib.py +13 -23
  285. qiskit/visualization/circuit/text.py +7 -3
  286. qiskit/visualization/dag_visualization.py +2 -1
  287. qiskit/visualization/gate_map.py +39 -154
  288. qiskit/visualization/pass_manager_visualization.py +6 -2
  289. qiskit/visualization/state_visualization.py +6 -0
  290. qiskit/visualization/timeline/core.py +18 -12
  291. qiskit/visualization/timeline/interface.py +19 -18
  292. {qiskit-1.4.1.dist-info → qiskit-2.0.0rc1.dist-info}/METADATA +2 -2
  293. {qiskit-1.4.1.dist-info → qiskit-2.0.0rc1.dist-info}/RECORD +297 -444
  294. {qiskit-1.4.1.dist-info → qiskit-2.0.0rc1.dist-info}/WHEEL +1 -1
  295. {qiskit-1.4.1.dist-info → qiskit-2.0.0rc1.dist-info}/entry_points.txt +8 -2
  296. qiskit/assembler/__init__.py +0 -42
  297. qiskit/assembler/assemble_circuits.py +0 -451
  298. qiskit/assembler/assemble_schedules.py +0 -367
  299. qiskit/assembler/disassemble.py +0 -310
  300. qiskit/assembler/run_config.py +0 -77
  301. qiskit/circuit/bit.py +0 -106
  302. qiskit/circuit/classicalfunction/__init__.py +0 -152
  303. qiskit/circuit/classicalfunction/boolean_expression.py +0 -138
  304. qiskit/circuit/classicalfunction/classical_element.py +0 -54
  305. qiskit/circuit/classicalfunction/classical_function_visitor.py +0 -155
  306. qiskit/circuit/classicalfunction/classicalfunction.py +0 -182
  307. qiskit/circuit/classicalfunction/exceptions.py +0 -41
  308. qiskit/circuit/classicalfunction/types.py +0 -18
  309. qiskit/circuit/classicalfunction/utils.py +0 -91
  310. qiskit/circuit/classicalregister.py +0 -57
  311. qiskit/circuit/library/standard_gates/multi_control_rotation_gates.py +0 -405
  312. qiskit/circuit/quantumregister.py +0 -75
  313. qiskit/circuit/register.py +0 -246
  314. qiskit/compiler/assembler.py +0 -689
  315. qiskit/compiler/scheduler.py +0 -109
  316. qiskit/compiler/sequencer.py +0 -71
  317. qiskit/primitives/backend_estimator.py +0 -486
  318. qiskit/primitives/backend_sampler.py +0 -222
  319. qiskit/primitives/estimator.py +0 -172
  320. qiskit/primitives/sampler.py +0 -162
  321. qiskit/providers/backend_compat.py +0 -507
  322. qiskit/providers/fake_provider/backends_v1/__init__.py +0 -22
  323. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/__init__.py +0 -18
  324. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/conf_washington.json +0 -1
  325. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/defs_washington.json +0 -1
  326. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/fake_127q_pulse_v1.py +0 -37
  327. qiskit/providers/fake_provider/backends_v1/fake_127q_pulse/props_washington.json +0 -1
  328. qiskit/providers/fake_provider/backends_v1/fake_20q/conf_singapore.json +0 -1
  329. qiskit/providers/fake_provider/backends_v1/fake_20q/fake_20q.py +0 -43
  330. qiskit/providers/fake_provider/backends_v1/fake_20q/props_singapore.json +0 -1
  331. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/__init__.py +0 -18
  332. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/conf_hanoi.json +0 -1
  333. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/defs_hanoi.json +0 -1
  334. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/fake_27q_pulse_v1.py +0 -50
  335. qiskit/providers/fake_provider/backends_v1/fake_27q_pulse/props_hanoi.json +0 -1
  336. qiskit/providers/fake_provider/backends_v1/fake_5q/__init__.py +0 -18
  337. qiskit/providers/fake_provider/backends_v1/fake_5q/conf_yorktown.json +0 -1
  338. qiskit/providers/fake_provider/backends_v1/fake_5q/fake_5q_v1.py +0 -41
  339. qiskit/providers/fake_provider/backends_v1/fake_5q/props_yorktown.json +0 -1
  340. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/__init__.py +0 -18
  341. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/conf_nairobi.json +0 -1
  342. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/defs_nairobi.json +0 -1
  343. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/fake_7q_pulse_v1.py +0 -44
  344. qiskit/providers/fake_provider/backends_v1/fake_7q_pulse/props_nairobi.json +0 -1
  345. qiskit/providers/fake_provider/fake_1q.py +0 -91
  346. qiskit/providers/fake_provider/fake_backend.py +0 -165
  347. qiskit/providers/fake_provider/fake_openpulse_2q.py +0 -391
  348. qiskit/providers/fake_provider/fake_openpulse_3q.py +0 -340
  349. qiskit/providers/fake_provider/fake_pulse_backend.py +0 -49
  350. qiskit/providers/fake_provider/fake_qasm_backend.py +0 -77
  351. qiskit/providers/fake_provider/utils/backend_converter.py +0 -150
  352. qiskit/providers/fake_provider/utils/json_decoder.py +0 -109
  353. qiskit/providers/models/__init__.py +0 -89
  354. qiskit/providers/models/backendconfiguration.py +0 -1040
  355. qiskit/providers/models/backendproperties.py +0 -535
  356. qiskit/providers/models/backendstatus.py +0 -104
  357. qiskit/providers/models/jobstatus.py +0 -77
  358. qiskit/providers/models/pulsedefaults.py +0 -305
  359. qiskit/providers/provider.py +0 -95
  360. qiskit/pulse/__init__.py +0 -158
  361. qiskit/pulse/builder.py +0 -2262
  362. qiskit/pulse/calibration_entries.py +0 -381
  363. qiskit/pulse/channels.py +0 -227
  364. qiskit/pulse/configuration.py +0 -245
  365. qiskit/pulse/exceptions.py +0 -45
  366. qiskit/pulse/filters.py +0 -309
  367. qiskit/pulse/instruction_schedule_map.py +0 -424
  368. qiskit/pulse/instructions/__init__.py +0 -67
  369. qiskit/pulse/instructions/acquire.py +0 -150
  370. qiskit/pulse/instructions/delay.py +0 -71
  371. qiskit/pulse/instructions/directives.py +0 -154
  372. qiskit/pulse/instructions/frequency.py +0 -135
  373. qiskit/pulse/instructions/instruction.py +0 -270
  374. qiskit/pulse/instructions/phase.py +0 -152
  375. qiskit/pulse/instructions/play.py +0 -99
  376. qiskit/pulse/instructions/reference.py +0 -100
  377. qiskit/pulse/instructions/snapshot.py +0 -82
  378. qiskit/pulse/library/__init__.py +0 -97
  379. qiskit/pulse/library/continuous.py +0 -430
  380. qiskit/pulse/library/pulse.py +0 -148
  381. qiskit/pulse/library/samplers/__init__.py +0 -15
  382. qiskit/pulse/library/samplers/decorators.py +0 -295
  383. qiskit/pulse/library/samplers/strategies.py +0 -71
  384. qiskit/pulse/library/symbolic_pulses.py +0 -1989
  385. qiskit/pulse/library/waveform.py +0 -136
  386. qiskit/pulse/macros.py +0 -262
  387. qiskit/pulse/parameter_manager.py +0 -445
  388. qiskit/pulse/parser.py +0 -314
  389. qiskit/pulse/reference_manager.py +0 -58
  390. qiskit/pulse/schedule.py +0 -1854
  391. qiskit/pulse/transforms/__init__.py +0 -106
  392. qiskit/pulse/transforms/alignments.py +0 -406
  393. qiskit/pulse/transforms/base_transforms.py +0 -71
  394. qiskit/pulse/transforms/canonicalization.py +0 -498
  395. qiskit/pulse/transforms/dag.py +0 -122
  396. qiskit/pulse/utils.py +0 -149
  397. qiskit/qobj/__init__.py +0 -75
  398. qiskit/qobj/common.py +0 -81
  399. qiskit/qobj/converters/__init__.py +0 -18
  400. qiskit/qobj/converters/lo_config.py +0 -177
  401. qiskit/qobj/converters/pulse_instruction.py +0 -897
  402. qiskit/qobj/pulse_qobj.py +0 -709
  403. qiskit/qobj/qasm_qobj.py +0 -708
  404. qiskit/qobj/utils.py +0 -46
  405. qiskit/result/mitigation/base_readout_mitigator.py +0 -79
  406. qiskit/result/mitigation/correlated_readout_mitigator.py +0 -277
  407. qiskit/result/mitigation/local_readout_mitigator.py +0 -328
  408. qiskit/result/mitigation/utils.py +0 -217
  409. qiskit/scheduler/__init__.py +0 -40
  410. qiskit/scheduler/config.py +0 -37
  411. qiskit/scheduler/lowering.py +0 -187
  412. qiskit/scheduler/methods/__init__.py +0 -15
  413. qiskit/scheduler/methods/basic.py +0 -140
  414. qiskit/scheduler/schedule_circuit.py +0 -69
  415. qiskit/scheduler/sequence.py +0 -104
  416. qiskit/transpiler/passes/calibration/__init__.py +0 -17
  417. qiskit/transpiler/passes/calibration/base_builder.py +0 -79
  418. qiskit/transpiler/passes/calibration/builders.py +0 -20
  419. qiskit/transpiler/passes/calibration/exceptions.py +0 -22
  420. qiskit/transpiler/passes/calibration/pulse_gate.py +0 -100
  421. qiskit/transpiler/passes/calibration/rx_builder.py +0 -164
  422. qiskit/transpiler/passes/calibration/rzx_builder.py +0 -411
  423. qiskit/transpiler/passes/calibration/rzx_templates.py +0 -58
  424. qiskit/transpiler/passes/optimization/cx_cancellation.py +0 -65
  425. qiskit/transpiler/passes/optimization/echo_rzx_weyl_decomposition.py +0 -162
  426. qiskit/transpiler/passes/optimization/normalize_rx_angle.py +0 -157
  427. qiskit/transpiler/passes/routing/stochastic_swap.py +0 -532
  428. qiskit/transpiler/passes/scheduling/alap.py +0 -153
  429. qiskit/transpiler/passes/scheduling/alignments/align_measures.py +0 -255
  430. qiskit/transpiler/passes/scheduling/alignments/pulse_gate_validation.py +0 -107
  431. qiskit/transpiler/passes/scheduling/asap.py +0 -175
  432. qiskit/transpiler/passes/scheduling/base_scheduler.py +0 -310
  433. qiskit/transpiler/passes/scheduling/dynamical_decoupling.py +0 -313
  434. qiskit/transpiler/passes/utils/convert_conditions_to_if_ops.py +0 -93
  435. qiskit/utils/deprecate_pulse.py +0 -119
  436. qiskit/utils/multiprocessing.py +0 -56
  437. qiskit/visualization/pulse_v2/__init__.py +0 -21
  438. qiskit/visualization/pulse_v2/core.py +0 -901
  439. qiskit/visualization/pulse_v2/device_info.py +0 -173
  440. qiskit/visualization/pulse_v2/drawings.py +0 -253
  441. qiskit/visualization/pulse_v2/events.py +0 -254
  442. qiskit/visualization/pulse_v2/generators/__init__.py +0 -40
  443. qiskit/visualization/pulse_v2/generators/barrier.py +0 -76
  444. qiskit/visualization/pulse_v2/generators/chart.py +0 -208
  445. qiskit/visualization/pulse_v2/generators/frame.py +0 -436
  446. qiskit/visualization/pulse_v2/generators/snapshot.py +0 -133
  447. qiskit/visualization/pulse_v2/generators/waveform.py +0 -645
  448. qiskit/visualization/pulse_v2/interface.py +0 -459
  449. qiskit/visualization/pulse_v2/layouts.py +0 -387
  450. qiskit/visualization/pulse_v2/plotters/__init__.py +0 -17
  451. qiskit/visualization/pulse_v2/plotters/base_plotter.py +0 -53
  452. qiskit/visualization/pulse_v2/plotters/matplotlib.py +0 -201
  453. qiskit/visualization/pulse_v2/stylesheet.py +0 -312
  454. qiskit/visualization/pulse_v2/types.py +0 -242
  455. {qiskit-1.4.1.dist-info → qiskit-2.0.0rc1.dist-info}/LICENSE.txt +0 -0
  456. {qiskit-1.4.1.dist-info → qiskit-2.0.0rc1.dist-info}/top_level.txt +0 -0
@@ -34,21 +34,17 @@ The circuit itself keeps this context.
34
34
  from __future__ import annotations
35
35
 
36
36
  import copy
37
- import warnings
38
37
  from itertools import zip_longest
39
38
  import math
40
- from typing import List, Type
39
+ from typing import Type
41
40
 
42
41
  import numpy
43
42
 
44
43
  from qiskit.circuit.exceptions import CircuitError
45
- from qiskit.circuit.classicalregister import ClassicalRegister, Clbit
46
- from qiskit.qobj.qasm_qobj import QasmQobjInstruction
47
44
  from qiskit.circuit.parameter import ParameterExpression
48
45
  from qiskit.circuit.operation import Operation
49
46
 
50
47
  from qiskit.circuit.annotated_operation import AnnotatedOperation, InverseModifier
51
- from qiskit.utils import deprecate_func
52
48
 
53
49
  _CUTOFF_PRECISION = 1e-10
54
50
 
@@ -61,7 +57,7 @@ class Instruction(Operation):
61
57
  _directive = False
62
58
  _standard_gate = None
63
59
 
64
- def __init__(self, name, num_qubits, num_clbits, params, duration=None, unit="dt", label=None):
60
+ def __init__(self, name, num_qubits, num_clbits, params, label=None):
65
61
  """Create a new instruction.
66
62
 
67
63
  .. deprecated:: 1.3
@@ -75,9 +71,6 @@ class Instruction(Operation):
75
71
  num_clbits (int): instruction's clbit width
76
72
  params (list[int|float|complex|str|ndarray|list|ParameterExpression]):
77
73
  list of parameters
78
- duration (int|float): (DEPRECATED) instruction's duration. it must be
79
- an integer if ``unit`` is ``'dt'``
80
- unit (str): (DEPRECATED) time unit of duration
81
74
  label (str or None): An optional label for identifying the instruction.
82
75
 
83
76
  Raises:
@@ -103,30 +96,9 @@ class Instruction(Operation):
103
96
  if label is not None and not isinstance(label, str):
104
97
  raise TypeError("label expects a string or None")
105
98
  self._label = label
106
- # tuple (ClassicalRegister, int), tuple (Clbit, bool) or tuple (Clbit, int)
107
- # when the instruction has a conditional ("if")
108
- self._condition = None
109
99
  # list of instructions (and their contexts) that this instruction is composed of
110
100
  # empty definition means opaque or fundamental instruction
111
101
  self._definition = None
112
- if duration is not None:
113
- warnings.warn(
114
- "Setting a custom duration per instruction is deprecated as of Qiskit "
115
- "1.3.0. It will be removed in Qiskit 2.0.0. An instruction's duration "
116
- "is defined in a backend's Target object.",
117
- DeprecationWarning,
118
- stacklevel=2,
119
- )
120
- self._duration = duration
121
- if unit is not None and unit != "dt":
122
- warnings.warn(
123
- "Setting a custom unit for duration per instruction is deprecated as of Qiskit "
124
- "1.3.0. It will be removed in Qiskit 2.0.0. An instruction's duration "
125
- "is defined in a backend's Target object which has a fixed unit in seconds.",
126
- DeprecationWarning,
127
- stacklevel=2,
128
- )
129
- self._unit = unit
130
102
 
131
103
  self.params = params # must be at last (other properties may be required for validation)
132
104
 
@@ -181,16 +153,6 @@ class Instruction(Operation):
181
153
  """
182
154
  return self.copy()
183
155
 
184
- @property
185
- @deprecate_func(since="1.3.0", removal_timeline="in 2.0.0", is_property=True)
186
- def condition(self):
187
- """The classical condition on the instruction."""
188
- return self._condition
189
-
190
- @condition.setter
191
- def condition(self, condition):
192
- self._condition = condition
193
-
194
156
  def __eq__(self, other):
195
157
  """Two instructions are the same if they have the same name,
196
158
  same dimensions, and same params.
@@ -363,64 +325,6 @@ class Instruction(Operation):
363
325
 
364
326
  sel.add_equivalence(self, decomposition)
365
327
 
366
- @property
367
- @deprecate_func(since="1.3.0", removal_timeline="in Qiskit 2.0.0", is_property=True)
368
- def duration(self):
369
- """Get the duration."""
370
- return self._duration
371
-
372
- @duration.setter
373
- def duration(self, value):
374
- """Set the duration."""
375
- self._duration = value
376
-
377
- @property
378
- @deprecate_func(since="1.3.0", removal_timeline="in Qiskit 2.0.0", is_property=True)
379
- def unit(self):
380
- """Get the time unit of duration."""
381
- return self._unit
382
-
383
- @unit.setter
384
- def unit(self, value):
385
- """Set the time unit of duration."""
386
- self._unit = value
387
-
388
- @deprecate_func(
389
- since="1.2",
390
- removal_timeline="in the 2.0 release",
391
- additional_msg="The `Qobj` class and related functionality are part of the deprecated "
392
- "`BackendV1` workflow, and no longer necessary for `BackendV2`. If a user "
393
- "workflow requires `Qobj` it likely relies on deprecated functionality and "
394
- "should be updated to use `BackendV2`.",
395
- )
396
- def assemble(self):
397
- """Assemble a QasmQobjInstruction"""
398
- return self._assemble()
399
-
400
- def _assemble(self):
401
- with warnings.catch_warnings():
402
- # The class QasmQobjInstruction is deprecated
403
- warnings.filterwarnings("ignore", category=DeprecationWarning, module="qiskit")
404
- instruction = QasmQobjInstruction(name=self.name)
405
- # Evaluate parameters
406
- if self.params:
407
- params = [x.evalf(x) if hasattr(x, "evalf") else x for x in self.params]
408
- instruction.params = params
409
- # Add placeholder for qarg and carg params
410
- if self.num_qubits:
411
- instruction.qubits = list(range(self.num_qubits))
412
- if self.num_clbits:
413
- instruction.memory = list(range(self.num_clbits))
414
- # Add label if defined
415
- if self.label:
416
- instruction.label = self.label
417
- # Add condition parameters for assembler. This is needed to convert
418
- # to a qobj conditional instruction at assemble time and after
419
- # conversion will be deleted by the assembler.
420
- if self._condition:
421
- instruction._condition = self._condition
422
- return instruction
423
-
424
328
  @property
425
329
  def label(self) -> str:
426
330
  """Return instruction label"""
@@ -524,27 +428,6 @@ class Instruction(Operation):
524
428
  inverse_gate.definition = inverse_definition
525
429
  return inverse_gate
526
430
 
527
- @deprecate_func(since="1.3.0", removal_timeline="in 2.0.0")
528
- def c_if(self, classical, val):
529
- """Set a classical equality condition on this instruction between the register or cbit
530
- ``classical`` and value ``val``.
531
-
532
- .. note::
533
-
534
- This is a setter method, not an additive one. Calling this multiple times will silently
535
- override any previously set condition; it does not stack.
536
- """
537
- if not isinstance(classical, (ClassicalRegister, Clbit)):
538
- raise CircuitError("c_if must be used with a classical register or classical bit")
539
- if val < 0:
540
- raise CircuitError("condition value should be non-negative")
541
- if isinstance(classical, Clbit):
542
- # Casting the conditional value as Boolean when
543
- # the classical condition is on a classical bit.
544
- val = bool(val)
545
- self._condition = (classical, val)
546
- return self
547
-
548
431
  def copy(self, name=None):
549
432
  """
550
433
  Copy of the instruction.
@@ -611,12 +494,6 @@ class Instruction(Operation):
611
494
  def repeat(self, n):
612
495
  """Creates an instruction with ``self`` repeated :math`n` times.
613
496
 
614
- If this operation has a conditional, the output instruction will have the same conditional
615
- and the inner repeated operations will be unconditional; instructions within a compound
616
- definition cannot be conditioned on registers within Qiskit's data model. This means that
617
- it is not valid to apply a repeated instruction to a clbit that it both writes to and reads
618
- from in its condition.
619
-
620
497
  Args:
621
498
  n (int): Number of times to repeat the instruction
622
499
 
@@ -640,28 +517,12 @@ class Instruction(Operation):
640
517
  qargs = tuple(qc.qubits)
641
518
  cargs = tuple(qc.clbits)
642
519
  base = self.copy()
643
- if self._condition:
644
- # Condition is handled on the outer instruction.
645
- base = base.to_mutable()
646
- base.condition = None
647
520
  for _ in [None] * n:
648
521
  qc._append(CircuitInstruction(base, qargs, cargs))
649
522
 
650
523
  instruction.definition = qc
651
- if self._condition:
652
- instruction = instruction.c_if(*self._condition)
653
524
  return instruction
654
525
 
655
- @property
656
- @deprecate_func(since="1.3.0", removal_timeline="in 2.0.0", is_property=True)
657
- def condition_bits(self) -> List[Clbit]:
658
- """Get Clbits in condition."""
659
- from qiskit.circuit.controlflow import condition_resources # pylint: disable=cyclic-import
660
-
661
- if self._condition is None:
662
- return []
663
- return list(condition_resources(self._condition).clbits)
664
-
665
526
  @property
666
527
  def name(self):
667
528
  """Return the name."""
@@ -17,14 +17,15 @@ Instruction collection.
17
17
  from __future__ import annotations
18
18
 
19
19
  from collections.abc import MutableSequence
20
- from typing import Callable
20
+ from typing import Callable, TYPE_CHECKING
21
21
 
22
22
  from qiskit.circuit.exceptions import CircuitError
23
- from qiskit.utils import deprecate_func
24
- from .classicalregister import Clbit, ClassicalRegister
25
23
  from .operation import Operation
26
24
  from .quantumcircuitdata import CircuitInstruction
27
25
 
26
+ if TYPE_CHECKING:
27
+ from qiskit.circuit import Clbit, ClassicalRegister
28
+
28
29
 
29
30
  class InstructionSet:
30
31
  """Instruction collection, and their contexts."""
@@ -50,9 +51,9 @@ class InstructionSet:
50
51
 
51
52
  .. note::
52
53
 
53
- The callback ``resource_requester`` is called once for each call to
54
- :meth:`.c_if`, and assumes that a call implies that the resource will now be
55
- used. It may throw an error if the resource is not valid for usage.
54
+ The callback ``resource_requester`` assumes that a call implies that the
55
+ resource will now be used. It may throw an error if the resource is not valid
56
+ for usage.
56
57
 
57
58
  """
58
59
  self._instructions: list[
@@ -106,54 +107,6 @@ class InstructionSet:
106
107
  )
107
108
  return self
108
109
 
109
- @deprecate_func(since="1.3.0", removal_timeline="in 2.0.0")
110
- def c_if(self, classical: Clbit | ClassicalRegister | int, val: int) -> "InstructionSet":
111
- """Set a classical equality condition on all the instructions in this set between the
112
- :obj:`.ClassicalRegister` or :obj:`.Clbit` ``classical`` and value ``val``.
113
-
114
- .. note::
115
- You should prefer to use the :meth:`.QuantumCircuit.if_test` builder interface, rather
116
- than using this method.
117
-
118
- .. note::
119
-
120
- This is a setter method, not an additive one. Calling this multiple times will silently
121
- override any previously set condition on any of the contained instructions; it does not
122
- stack.
123
-
124
- Args:
125
- classical: the classical resource the equality condition should be on. If this is given
126
- as an integer, it will be resolved into a :obj:`.Clbit` using the same conventions
127
- as the circuit these instructions are attached to.
128
- val: the value the classical resource should be equal to.
129
-
130
- Returns:
131
- This same instance of :obj:`.InstructionSet`, but now mutated to have the given equality
132
- condition.
133
-
134
- Raises:
135
- CircuitError: if the passed classical resource is invalid, or otherwise not resolvable
136
- to a concrete resource that these instructions are permitted to access.
137
- """
138
- if self._requester is None and not isinstance(classical, (Clbit, ClassicalRegister)):
139
- raise CircuitError(
140
- "Cannot pass an index as a condition variable without specifying a requester"
141
- " when creating this InstructionSet."
142
- )
143
- if self._requester is not None:
144
- classical = self._requester(classical)
145
- for idx, instruction in enumerate(self._instructions):
146
- if isinstance(instruction, CircuitInstruction):
147
- updated = instruction.operation.c_if(classical, val)
148
- self._instructions[idx] = instruction.replace(operation=updated)
149
- else:
150
- data, idx = instruction
151
- instruction = data[idx]
152
- data[idx] = instruction.replace(
153
- operation=instruction.operation.c_if(classical, val)
154
- )
155
- return self
156
-
157
110
  # Legacy support for properties. Added in Terra 0.21 to support the internal switch in
158
111
  # `QuantumCircuit.data` from the 3-tuple to `CircuitInstruction`.
159
112
 
@@ -53,7 +53,9 @@ and :meth:`~qiskit.circuit.Gate.control`, which we can generally only apply to u
53
53
 
54
54
  For example:
55
55
 
56
- .. code-block::
56
+ .. plot::
57
+ :include-source:
58
+ :nofigs:
57
59
 
58
60
  from qiskit.circuit.library import XGate
59
61
  gate = XGate()
@@ -156,7 +158,9 @@ These "gates" (many are :class:`~qiskit.circuit.QuantumCircuit` subclasses) allo
156
158
  set the amount of qubits involved at instantiation time.
157
159
 
158
160
 
159
- .. code-block::
161
+ .. plot::
162
+ :include-source:
163
+ :nofigs:
160
164
 
161
165
  from qiskit.circuit.library import DiagonalGate
162
166
 
@@ -255,6 +259,7 @@ Amplitude Functions
255
259
  :template: autosummary/class_no_inherited_members.rst
256
260
 
257
261
  LinearAmplitudeFunction
262
+ LinearAmplitudeFunctionGate
258
263
 
259
264
  Functional Pauli Rotations
260
265
  --------------------------
@@ -265,10 +270,15 @@ Functional Pauli Rotations
265
270
 
266
271
  FunctionalPauliRotations
267
272
  LinearPauliRotations
273
+ LinearPauliRotationsGate
268
274
  PolynomialPauliRotations
275
+ PolynomialPauliRotationsGate
269
276
  PiecewiseLinearPauliRotations
277
+ PiecewiseLinearPauliRotationsGate
270
278
  PiecewisePolynomialPauliRotations
279
+ PiecewisePolynomialPauliRotationsGate
271
280
  PiecewiseChebyshev
281
+ PiecewiseChebyshevGate
272
282
 
273
283
  Adders
274
284
  ------
@@ -280,7 +290,6 @@ Adders
280
290
  DraperQFTAdder
281
291
  CDKMRippleCarryAdder
282
292
  VBERippleCarryAdder
283
- WeightedAdder
284
293
  ModularAdderGate
285
294
  HalfAdderGate
286
295
  FullAdderGate
@@ -304,6 +313,7 @@ Comparators
304
313
  :template: autosummary/class_no_inherited_members.rst
305
314
 
306
315
  IntegerComparator
316
+ IntegerComparatorGate
307
317
 
308
318
  Functions on binary variables
309
319
  -----------------------------
@@ -313,6 +323,7 @@ Functions on binary variables
313
323
  :template: autosummary/class_no_inherited_members.rst
314
324
 
315
325
  QuadraticForm
326
+ QuadraticFormGate
316
327
 
317
328
  Other arithmetic functions
318
329
  --------------------------
@@ -322,6 +333,9 @@ Other arithmetic functions
322
333
  :template: autosummary/class_no_inherited_members.rst
323
334
 
324
335
  ExactReciprocal
336
+ ExactReciprocalGate
337
+ WeightedAdder
338
+ WeightedSumGate
325
339
 
326
340
  Particular Quantum Circuits
327
341
  ===========================
@@ -341,6 +355,8 @@ quantum circuits of interest:
341
355
  QuantumVolume
342
356
  PhaseEstimation
343
357
  GroverOperator
358
+ BitFlipOracleGate
359
+ PhaseOracleGate
344
360
  PhaseOracle
345
361
  PauliEvolutionGate
346
362
  HamiltonianGate
@@ -447,7 +463,9 @@ to replace the match with the inverse of the remainder from the template.
447
463
 
448
464
  In this example, the identity constant in a template is checked:
449
465
 
450
- .. code-block::
466
+ .. plot::
467
+ :include-source:
468
+ :nofigs:
451
469
 
452
470
  from qiskit.circuit.library.templates import template_nct_4b_1
453
471
  from qiskit.quantum_info import Operator
@@ -613,20 +631,30 @@ from .arithmetic import (
613
631
  MultiplierGate,
614
632
  FunctionalPauliRotations,
615
633
  LinearPauliRotations,
634
+ LinearPauliRotationsGate,
616
635
  PiecewiseLinearPauliRotations,
636
+ PiecewiseLinearPauliRotationsGate,
617
637
  PiecewisePolynomialPauliRotations,
638
+ PiecewisePolynomialPauliRotationsGate,
618
639
  PolynomialPauliRotations,
640
+ PolynomialPauliRotationsGate,
619
641
  IntegerComparator,
642
+ IntegerComparatorGate,
620
643
  WeightedAdder,
644
+ WeightedSumGate,
621
645
  QuadraticForm,
646
+ QuadraticFormGate,
622
647
  LinearAmplitudeFunction,
648
+ LinearAmplitudeFunctionGate,
623
649
  VBERippleCarryAdder,
624
650
  CDKMRippleCarryAdder,
625
651
  DraperQFTAdder,
626
652
  PiecewiseChebyshev,
653
+ PiecewiseChebyshevGate,
627
654
  HRSCumulativeMultiplier,
628
655
  RGQFTMultiplier,
629
656
  ExactReciprocal,
657
+ ExactReciprocalGate,
630
658
  )
631
659
 
632
660
  from .n_local import (
@@ -664,6 +692,7 @@ from .hidden_linear_function import HiddenLinearFunction, hidden_linear_function
664
692
  from .iqp import IQP, iqp, random_iqp
665
693
  from .phase_estimation import PhaseEstimation, phase_estimation
666
694
  from .grover_operator import GroverOperator, grover_operator
667
- from .phase_oracle import PhaseOracle
695
+ from .phase_oracle import PhaseOracle, PhaseOracleGate
696
+ from .bit_flip_oracle import BitFlipOracleGate
668
697
  from .overlap import UnitaryOverlap, unitary_overlap
669
698
  from .standard_gates import get_standard_gate_name_mapping
@@ -13,14 +13,22 @@
13
13
  """The arithmetic circuit library."""
14
14
 
15
15
  from .functional_pauli_rotations import FunctionalPauliRotations
16
- from .integer_comparator import IntegerComparator
17
- from .linear_pauli_rotations import LinearPauliRotations
18
- from .piecewise_linear_pauli_rotations import PiecewiseLinearPauliRotations
19
- from .piecewise_polynomial_pauli_rotations import PiecewisePolynomialPauliRotations
20
- from .polynomial_pauli_rotations import PolynomialPauliRotations
21
- from .weighted_adder import WeightedAdder
22
- from .quadratic_form import QuadraticForm
23
- from .linear_amplitude_function import LinearAmplitudeFunction
16
+ from .integer_comparator import IntegerComparator, IntegerComparatorGate
17
+ from .linear_pauli_rotations import LinearPauliRotations, LinearPauliRotationsGate
18
+ from .piecewise_linear_pauli_rotations import (
19
+ PiecewiseLinearPauliRotations,
20
+ PiecewiseLinearPauliRotationsGate,
21
+ )
22
+ from .piecewise_polynomial_pauli_rotations import (
23
+ PiecewisePolynomialPauliRotations,
24
+ PiecewisePolynomialPauliRotationsGate,
25
+ )
26
+ from .polynomial_pauli_rotations import PolynomialPauliRotations, PolynomialPauliRotationsGate
27
+ from .weighted_adder import WeightedAdder, WeightedSumGate
28
+ from .quadratic_form import QuadraticForm, QuadraticFormGate
29
+ from .linear_amplitude_function import LinearAmplitudeFunction, LinearAmplitudeFunctionGate
30
+ from .piecewise_chebyshev import PiecewiseChebyshev, PiecewiseChebyshevGate
31
+ from .exact_reciprocal import ExactReciprocal, ExactReciprocalGate
24
32
  from .adders import (
25
33
  VBERippleCarryAdder,
26
34
  CDKMRippleCarryAdder,
@@ -29,6 +37,4 @@ from .adders import (
29
37
  HalfAdderGate,
30
38
  FullAdderGate,
31
39
  )
32
- from .piecewise_chebyshev import PiecewiseChebyshev
33
40
  from .multipliers import HRSCumulativeMultiplier, RGQFTMultiplier, MultiplierGate
34
- from .exact_reciprocal import ExactReciprocal
@@ -84,7 +84,7 @@ class CDKMRippleCarryAdder(Adder):
84
84
  :class:`.ModularAdderGate`: A generic inplace adder, modulo :math:`2^n`. This
85
85
  is functionally equivalent to ``kind="fixed"``.
86
86
 
87
- :class:`.HalfAdderGate`: A generic inplace adder. This
87
+ :class:`.AdderGate`: A generic inplace adder. This
88
88
  is functionally equivalent to ``kind="half"``.
89
89
 
90
90
  :class:`.FullAdderGate`: A generic inplace adder, with a carry-in bit. This
@@ -15,7 +15,7 @@
15
15
  import numpy as np
16
16
 
17
17
  from qiskit.circuit.quantumcircuit import QuantumCircuit
18
- from qiskit.circuit.quantumregister import QuantumRegister
18
+ from qiskit.circuit import QuantumRegister
19
19
  from qiskit.circuit.library.basis_change import QFT
20
20
 
21
21
  from .adder import Adder
@@ -54,7 +54,7 @@ class DraperQFTAdder(Adder):
54
54
  :class:`.ModularAdderGate`: A generic inplace adder, modulo :math:`2^n`. This
55
55
  is functionally equivalent to ``kind="fixed"``.
56
56
 
57
- :class:`.HalfAdderGate`: A generic inplace adder. This
57
+ :class:`.AdderGate`: A generic inplace adder. This
58
58
  is functionally equivalent to ``kind="half"``.
59
59
 
60
60
  **References:**
@@ -60,7 +60,7 @@ class VBERippleCarryAdder(Adder):
60
60
  :class:`.ModularAdderGate`: A generic inplace adder, modulo :math:`2^n`. This
61
61
  is functionally equivalent to ``kind="fixed"``.
62
62
 
63
- :class:`.HalfAdderGate`: A generic inplace adder. This
63
+ :class:`.AdderGate`: A generic inplace adder. This
64
64
  is functionally equivalent to ``kind="half"``.
65
65
 
66
66
  :class:`.FullAdderGate`: A generic inplace adder, with a carry-in bit. This
@@ -13,7 +13,7 @@
13
13
 
14
14
  from math import isclose
15
15
  import numpy as np
16
- from qiskit.circuit import QuantumCircuit, QuantumRegister
16
+ from qiskit.circuit import QuantumCircuit, QuantumRegister, Gate
17
17
  from qiskit.circuit.library.generalized_gates import UCRYGate
18
18
 
19
19
 
@@ -46,43 +46,86 @@ class ExactReciprocal(QuantumCircuit):
46
46
  """
47
47
  qr_state = QuantumRegister(num_state_qubits, "state")
48
48
  qr_flag = QuantumRegister(1, "flag")
49
- circuit = QuantumCircuit(qr_state, qr_flag, name=name)
49
+ super().__init__(qr_state, qr_flag, name=name)
50
+
51
+ reciprocal = ExactReciprocalGate(num_state_qubits, scaling, neg_vals, label=name)
52
+ self.append(reciprocal, self.qubits)
53
+
54
+
55
+ class ExactReciprocalGate(Gate):
56
+ r"""Implements an exact reciprocal function.
57
+
58
+ For a state :math:`|x\rangle` and a scaling factor :math:`s`, this gate implements the operation
59
+
60
+ .. math::
61
+
62
+ |x\rangle |0\rangle \mapsto
63
+ \cos\left(\arcsin\left(s\frac{2^n}{x}\right)\right)|x\rangle|0\rangle +
64
+ \left(s\frac{2^n}{x}\right)|x\rangle|1\rangle.
65
+
66
+ States representing :math:`x = 0` or :math:`s 2^n / x \geq 1` are left unchanged, since
67
+ this function would not be defined.
68
+ """
69
+
70
+ def __init__(
71
+ self, num_state_qubits: int, scaling: float, neg_vals: bool = False, label: str = "1/x"
72
+ ) -> None:
73
+ r"""
74
+ Args:
75
+ num_state_qubits: The number of qubits representing the value to invert.
76
+ scaling: Scaling factor :math:`s` of the reciprocal function, i.e. to compute
77
+ :math:`s / x`.
78
+ neg_vals: Whether :math:`x` might represent negative values. In this case the first
79
+ qubit is the sign, with :math:`|1\rangle` for negative and :math:`|0\rangle` for
80
+ positive. For the negative case it is assumed that the remaining string represents
81
+ :math:`1 - x`. This is because :math:`e^{-2 \pi i x} = e^{2 \pi i (1 - x)}` for
82
+ :math:`x \in [0,1)`.
83
+ label: The label of the object.
84
+
85
+ .. note::
86
+
87
+ It is assumed that the binary string :math:`x` represents a number < 1.
88
+ """
89
+ super().__init__("ExactReciprocal", num_state_qubits + 1, [], label=label)
90
+
91
+ self.scaling = scaling
92
+ self.neg_vals = neg_vals
93
+
94
+ def _define(self):
95
+ num_state_qubits = self.num_qubits - 1
96
+ qr_state = QuantumRegister(num_state_qubits, "state")
97
+ qr_flag = QuantumRegister(1, "flag")
98
+ circuit = QuantumCircuit(qr_state, qr_flag)
50
99
 
51
100
  angles = [0.0]
52
- nl = 2 ** (num_state_qubits - 1) if neg_vals else 2**num_state_qubits
101
+ nl = 2 ** (num_state_qubits - 1) if self.neg_vals else 2**num_state_qubits
53
102
 
54
103
  # Angles to rotate by scaling / x, where x = i / nl
55
104
  for i in range(1, nl):
56
- if isclose(scaling * nl / i, 1, abs_tol=1e-5):
105
+ if isclose(self.scaling * nl / i, 1, abs_tol=1e-5):
57
106
  angles.append(np.pi)
58
- elif scaling * nl / i < 1:
59
- angles.append(2 * np.arcsin(scaling * nl / i))
107
+ elif self.scaling * nl / i < 1:
108
+ angles.append(2 * np.arcsin(self.scaling * nl / i))
60
109
  else:
61
110
  angles.append(0.0)
62
111
 
63
- circuit.compose(
64
- UCRYGate(angles), [qr_flag[0]] + qr_state[: len(qr_state) - neg_vals], inplace=True
65
- )
112
+ circuit.append(UCRYGate(angles), [qr_flag[0]] + qr_state[: len(qr_state) - self.neg_vals])
66
113
 
67
- if neg_vals:
68
- circuit.compose(
114
+ if self.neg_vals:
115
+ circuit.append(
69
116
  UCRYGate([-theta for theta in angles]).control(),
70
117
  [qr_state[-1]] + [qr_flag[0]] + qr_state[:-1],
71
- inplace=True,
72
118
  )
73
119
  angles_neg = [0.0]
74
120
  for i in range(1, nl):
75
- if isclose(scaling * (-1) / (1 - i / nl), -1, abs_tol=1e-5):
121
+ if isclose(self.scaling * (-1) / (1 - i / nl), -1, abs_tol=1e-5):
76
122
  angles_neg.append(-np.pi)
77
- elif np.abs(scaling * (-1) / (1 - i / nl)) < 1:
78
- angles_neg.append(2 * np.arcsin(scaling * (-1) / (1 - i / nl)))
123
+ elif np.abs(self.scaling * (-1) / (1 - i / nl)) < 1:
124
+ angles_neg.append(2 * np.arcsin(self.scaling * (-1) / (1 - i / nl)))
79
125
  else:
80
126
  angles_neg.append(0.0)
81
- circuit.compose(
82
- UCRYGate(angles_neg).control(),
83
- [qr_state[-1]] + [qr_flag[0]] + qr_state[:-1],
84
- inplace=True,
127
+ circuit.append(
128
+ UCRYGate(angles_neg).control(), [qr_state[-1]] + [qr_flag[0]] + qr_state[:-1]
85
129
  )
86
130
 
87
- super().__init__(*circuit.qregs, name=name)
88
- self.compose(circuit.to_gate(), qubits=self.qubits, inplace=True)
131
+ self.definition = circuit