qiskit 1.1.2__cp38-abi3-win32.whl → 1.2.0rc1__cp38-abi3-win32.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (341) hide show
  1. qiskit/VERSION.txt +1 -1
  2. qiskit/__init__.py +27 -24
  3. qiskit/_accelerate.pyd +0 -0
  4. qiskit/_numpy_compat.py +1 -1
  5. qiskit/assembler/assemble_circuits.py +107 -64
  6. qiskit/assembler/assemble_schedules.py +5 -12
  7. qiskit/assembler/disassemble.py +10 -1
  8. qiskit/circuit/__init__.py +1 -1
  9. qiskit/circuit/_classical_resource_map.py +5 -5
  10. qiskit/circuit/_utils.py +0 -13
  11. qiskit/circuit/add_control.py +1 -1
  12. qiskit/circuit/annotated_operation.py +23 -1
  13. qiskit/circuit/classical/expr/expr.py +4 -4
  14. qiskit/circuit/classical/expr/visitors.py +1 -1
  15. qiskit/circuit/classical/types/__init__.py +1 -1
  16. qiskit/circuit/classical/types/types.py +2 -2
  17. qiskit/circuit/classicalfunction/boolean_expression.py +1 -1
  18. qiskit/circuit/classicalfunction/classical_function_visitor.py +5 -5
  19. qiskit/circuit/classicalfunction/utils.py +1 -1
  20. qiskit/circuit/classicalregister.py +1 -1
  21. qiskit/circuit/commutation_checker.py +83 -35
  22. qiskit/circuit/controlflow/_builder_utils.py +1 -1
  23. qiskit/circuit/controlflow/builder.py +10 -6
  24. qiskit/circuit/controlflow/if_else.py +2 -2
  25. qiskit/circuit/controlflow/switch_case.py +1 -1
  26. qiskit/circuit/delay.py +1 -1
  27. qiskit/circuit/duration.py +2 -2
  28. qiskit/circuit/equivalence.py +5 -7
  29. qiskit/circuit/gate.py +11 -8
  30. qiskit/circuit/instruction.py +31 -13
  31. qiskit/circuit/instructionset.py +2 -5
  32. qiskit/circuit/library/__init__.py +2 -1
  33. qiskit/circuit/library/arithmetic/linear_amplitude_function.py +1 -1
  34. qiskit/circuit/library/arithmetic/linear_pauli_rotations.py +1 -1
  35. qiskit/circuit/library/arithmetic/piecewise_chebyshev.py +1 -1
  36. qiskit/circuit/library/arithmetic/piecewise_linear_pauli_rotations.py +1 -1
  37. qiskit/circuit/library/arithmetic/piecewise_polynomial_pauli_rotations.py +3 -3
  38. qiskit/circuit/library/arithmetic/polynomial_pauli_rotations.py +1 -1
  39. qiskit/circuit/library/basis_change/__init__.py +1 -1
  40. qiskit/circuit/library/basis_change/qft.py +40 -6
  41. qiskit/circuit/library/blueprintcircuit.py +3 -5
  42. qiskit/circuit/library/data_preparation/__init__.py +9 -2
  43. qiskit/circuit/library/data_preparation/initializer.py +8 -0
  44. qiskit/circuit/library/data_preparation/state_preparation.py +98 -178
  45. qiskit/circuit/library/generalized_gates/isometry.py +8 -8
  46. qiskit/circuit/library/generalized_gates/linear_function.py +3 -2
  47. qiskit/circuit/library/generalized_gates/mcg_up_to_diagonal.py +4 -4
  48. qiskit/circuit/library/generalized_gates/permutation.py +8 -9
  49. qiskit/circuit/library/generalized_gates/uc.py +3 -3
  50. qiskit/circuit/library/generalized_gates/uc_pauli_rot.py +2 -2
  51. qiskit/circuit/library/generalized_gates/unitary.py +13 -11
  52. qiskit/circuit/library/graph_state.py +1 -1
  53. qiskit/circuit/library/hamiltonian_gate.py +1 -2
  54. qiskit/circuit/library/hidden_linear_function.py +1 -1
  55. qiskit/circuit/library/n_local/evolved_operator_ansatz.py +3 -2
  56. qiskit/circuit/library/n_local/n_local.py +4 -5
  57. qiskit/circuit/library/n_local/pauli_two_design.py +1 -1
  58. qiskit/circuit/library/n_local/qaoa_ansatz.py +6 -8
  59. qiskit/circuit/library/n_local/two_local.py +1 -1
  60. qiskit/circuit/library/overlap.py +11 -5
  61. qiskit/circuit/library/pauli_evolution.py +7 -3
  62. qiskit/circuit/library/standard_gates/dcx.py +3 -0
  63. qiskit/circuit/library/standard_gates/ecr.py +3 -0
  64. qiskit/circuit/library/standard_gates/global_phase.py +3 -0
  65. qiskit/circuit/library/standard_gates/h.py +13 -5
  66. qiskit/circuit/library/standard_gates/i.py +3 -0
  67. qiskit/circuit/library/standard_gates/iswap.py +3 -0
  68. qiskit/circuit/library/standard_gates/multi_control_rotation_gates.py +19 -10
  69. qiskit/circuit/library/standard_gates/p.py +14 -9
  70. qiskit/circuit/library/standard_gates/r.py +3 -0
  71. qiskit/circuit/library/standard_gates/rx.py +21 -6
  72. qiskit/circuit/library/standard_gates/rxx.py +40 -1
  73. qiskit/circuit/library/standard_gates/ry.py +21 -6
  74. qiskit/circuit/library/standard_gates/ryy.py +40 -1
  75. qiskit/circuit/library/standard_gates/rz.py +22 -6
  76. qiskit/circuit/library/standard_gates/rzx.py +40 -1
  77. qiskit/circuit/library/standard_gates/rzz.py +41 -2
  78. qiskit/circuit/library/standard_gates/s.py +77 -0
  79. qiskit/circuit/library/standard_gates/swap.py +12 -5
  80. qiskit/circuit/library/standard_gates/sx.py +14 -5
  81. qiskit/circuit/library/standard_gates/t.py +5 -0
  82. qiskit/circuit/library/standard_gates/u.py +22 -7
  83. qiskit/circuit/library/standard_gates/u1.py +8 -3
  84. qiskit/circuit/library/standard_gates/u2.py +3 -0
  85. qiskit/circuit/library/standard_gates/u3.py +22 -7
  86. qiskit/circuit/library/standard_gates/x.py +156 -92
  87. qiskit/circuit/library/standard_gates/xx_minus_yy.py +40 -1
  88. qiskit/circuit/library/standard_gates/xx_plus_yy.py +52 -11
  89. qiskit/circuit/library/standard_gates/y.py +6 -1
  90. qiskit/circuit/library/standard_gates/z.py +8 -1
  91. qiskit/circuit/operation.py +1 -1
  92. qiskit/circuit/parameter.py +9 -10
  93. qiskit/circuit/parameterexpression.py +16 -13
  94. qiskit/circuit/parametertable.py +1 -190
  95. qiskit/circuit/parametervector.py +1 -1
  96. qiskit/circuit/quantumcircuit.py +392 -384
  97. qiskit/circuit/quantumcircuitdata.py +3 -5
  98. qiskit/circuit/quantumregister.py +1 -1
  99. qiskit/circuit/random/__init__.py +1 -1
  100. qiskit/circuit/random/utils.py +175 -26
  101. qiskit/circuit/register.py +5 -7
  102. qiskit/circuit/singleton.py +3 -3
  103. qiskit/circuit/tools/pi_check.py +4 -4
  104. qiskit/compiler/assembler.py +95 -24
  105. qiskit/compiler/scheduler.py +2 -2
  106. qiskit/compiler/transpiler.py +41 -127
  107. qiskit/converters/circuit_to_dag.py +4 -6
  108. qiskit/converters/circuit_to_gate.py +4 -8
  109. qiskit/converters/circuit_to_instruction.py +5 -17
  110. qiskit/converters/dag_to_circuit.py +2 -6
  111. qiskit/dagcircuit/collect_blocks.py +2 -2
  112. qiskit/dagcircuit/dagcircuit.py +190 -187
  113. qiskit/dagcircuit/dagdependency.py +4 -4
  114. qiskit/dagcircuit/dagdependency_v2.py +4 -4
  115. qiskit/dagcircuit/dagdepnode.py +1 -1
  116. qiskit/dagcircuit/dagnode.py +66 -157
  117. qiskit/passmanager/flow_controllers.py +1 -1
  118. qiskit/passmanager/passmanager.py +3 -3
  119. qiskit/primitives/__init__.py +1 -5
  120. qiskit/primitives/backend_estimator.py +25 -15
  121. qiskit/primitives/backend_estimator_v2.py +31 -7
  122. qiskit/primitives/backend_sampler.py +21 -12
  123. qiskit/primitives/backend_sampler_v2.py +12 -3
  124. qiskit/primitives/base/base_estimator.py +31 -4
  125. qiskit/primitives/base/base_primitive.py +2 -2
  126. qiskit/primitives/base/base_result.py +2 -2
  127. qiskit/primitives/base/base_sampler.py +26 -2
  128. qiskit/primitives/base/estimator_result.py +2 -2
  129. qiskit/primitives/base/sampler_result.py +2 -2
  130. qiskit/primitives/containers/__init__.py +0 -1
  131. qiskit/primitives/containers/bindings_array.py +2 -2
  132. qiskit/primitives/containers/bit_array.py +108 -10
  133. qiskit/primitives/containers/shape.py +3 -3
  134. qiskit/primitives/estimator.py +9 -2
  135. qiskit/primitives/primitive_job.py +1 -1
  136. qiskit/primitives/sampler.py +10 -3
  137. qiskit/primitives/statevector_estimator.py +5 -3
  138. qiskit/primitives/statevector_sampler.py +11 -5
  139. qiskit/primitives/utils.py +16 -0
  140. qiskit/providers/backend.py +15 -6
  141. qiskit/providers/backend_compat.py +7 -4
  142. qiskit/providers/basic_provider/basic_provider_tools.py +1 -1
  143. qiskit/providers/basic_provider/basic_simulator.py +32 -24
  144. qiskit/providers/fake_provider/fake_backend.py +10 -3
  145. qiskit/providers/fake_provider/fake_openpulse_2q.py +154 -146
  146. qiskit/providers/fake_provider/fake_openpulse_3q.py +226 -217
  147. qiskit/providers/fake_provider/fake_qasm_backend.py +5 -1
  148. qiskit/providers/fake_provider/generic_backend_v2.py +80 -50
  149. qiskit/providers/models/__init__.py +11 -0
  150. qiskit/providers/models/backendconfiguration.py +50 -4
  151. qiskit/providers/models/backendproperties.py +13 -2
  152. qiskit/providers/models/pulsedefaults.py +10 -11
  153. qiskit/providers/options.py +13 -13
  154. qiskit/providers/providerutils.py +3 -1
  155. qiskit/pulse/configuration.py +8 -12
  156. qiskit/pulse/instruction_schedule_map.py +3 -5
  157. qiskit/pulse/instructions/acquire.py +7 -8
  158. qiskit/pulse/instructions/instruction.py +2 -3
  159. qiskit/pulse/library/samplers/decorators.py +5 -9
  160. qiskit/pulse/library/symbolic_pulses.py +4 -7
  161. qiskit/pulse/library/waveform.py +2 -5
  162. qiskit/pulse/macros.py +11 -6
  163. qiskit/pulse/parser.py +8 -10
  164. qiskit/pulse/schedule.py +9 -17
  165. qiskit/pulse/transforms/alignments.py +1 -3
  166. qiskit/pulse/utils.py +1 -2
  167. qiskit/qasm/libs/stdgates.inc +35 -28
  168. qiskit/qasm2/__init__.py +7 -7
  169. qiskit/qasm2/export.py +5 -9
  170. qiskit/qasm2/parse.py +1 -1
  171. qiskit/qasm3/ast.py +9 -25
  172. qiskit/qasm3/exporter.py +578 -481
  173. qiskit/qasm3/printer.py +7 -16
  174. qiskit/qobj/common.py +10 -0
  175. qiskit/qobj/converters/lo_config.py +9 -0
  176. qiskit/qobj/converters/pulse_instruction.py +13 -6
  177. qiskit/qobj/pulse_qobj.py +69 -15
  178. qiskit/qobj/qasm_qobj.py +72 -20
  179. qiskit/qobj/utils.py +9 -0
  180. qiskit/qpy/binary_io/circuits.py +8 -5
  181. qiskit/qpy/binary_io/schedules.py +1 -1
  182. qiskit/qpy/binary_io/value.py +3 -3
  183. qiskit/qpy/interface.py +3 -2
  184. qiskit/qpy/type_keys.py +2 -2
  185. qiskit/quantum_info/operators/channel/quantum_channel.py +3 -6
  186. qiskit/quantum_info/operators/channel/superop.py +2 -2
  187. qiskit/quantum_info/operators/channel/transformations.py +1 -1
  188. qiskit/quantum_info/operators/dihedral/dihedral.py +3 -4
  189. qiskit/quantum_info/operators/dihedral/dihedral_circuits.py +1 -3
  190. qiskit/quantum_info/operators/dihedral/random.py +6 -3
  191. qiskit/quantum_info/operators/measures.py +2 -2
  192. qiskit/quantum_info/operators/op_shape.py +12 -20
  193. qiskit/quantum_info/operators/operator.py +14 -21
  194. qiskit/quantum_info/operators/predicates.py +1 -0
  195. qiskit/quantum_info/operators/symplectic/base_pauli.py +7 -11
  196. qiskit/quantum_info/operators/symplectic/clifford.py +1 -1
  197. qiskit/quantum_info/operators/symplectic/pauli.py +3 -3
  198. qiskit/quantum_info/operators/symplectic/pauli_list.py +9 -10
  199. qiskit/quantum_info/operators/symplectic/random.py +1 -1
  200. qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py +14 -16
  201. qiskit/quantum_info/quaternion.py +1 -1
  202. qiskit/quantum_info/states/densitymatrix.py +5 -8
  203. qiskit/quantum_info/states/stabilizerstate.py +128 -37
  204. qiskit/quantum_info/states/statevector.py +4 -8
  205. qiskit/result/counts.py +2 -2
  206. qiskit/result/mitigation/correlated_readout_mitigator.py +2 -2
  207. qiskit/result/mitigation/local_readout_mitigator.py +2 -2
  208. qiskit/result/mitigation/utils.py +1 -3
  209. qiskit/result/models.py +17 -16
  210. qiskit/result/result.py +15 -20
  211. qiskit/scheduler/lowering.py +2 -2
  212. qiskit/synthesis/__init__.py +2 -1
  213. qiskit/synthesis/clifford/__init__.py +1 -1
  214. qiskit/synthesis/clifford/clifford_decompose_ag.py +2 -2
  215. qiskit/synthesis/clifford/clifford_decompose_bm.py +10 -240
  216. qiskit/synthesis/clifford/clifford_decompose_greedy.py +9 -303
  217. qiskit/synthesis/clifford/clifford_decompose_layers.py +25 -23
  218. qiskit/synthesis/cnotdihedral/cnotdihedral_decompose_full.py +1 -1
  219. qiskit/synthesis/cnotdihedral/cnotdihedral_decompose_general.py +1 -1
  220. qiskit/synthesis/discrete_basis/generate_basis_approximations.py +1 -1
  221. qiskit/synthesis/discrete_basis/solovay_kitaev.py +2 -2
  222. qiskit/synthesis/evolution/evolution_synthesis.py +4 -2
  223. qiskit/synthesis/evolution/lie_trotter.py +46 -19
  224. qiskit/synthesis/evolution/product_formula.py +111 -55
  225. qiskit/synthesis/evolution/qdrift.py +40 -10
  226. qiskit/synthesis/evolution/suzuki_trotter.py +43 -33
  227. qiskit/synthesis/linear/__init__.py +1 -0
  228. qiskit/synthesis/linear/cnot_synth.py +22 -96
  229. qiskit/synthesis/linear/linear_depth_lnn.py +8 -8
  230. qiskit/synthesis/linear/linear_matrix_utils.py +13 -161
  231. qiskit/synthesis/linear_phase/cnot_phase_synth.py +1 -1
  232. qiskit/synthesis/linear_phase/cx_cz_depth_lnn.py +3 -3
  233. qiskit/synthesis/linear_phase/cz_depth_lnn.py +1 -1
  234. qiskit/synthesis/one_qubit/one_qubit_decompose.py +29 -29
  235. qiskit/synthesis/permutation/permutation_full.py +5 -29
  236. qiskit/synthesis/permutation/permutation_lnn.py +2 -24
  237. qiskit/synthesis/permutation/permutation_utils.py +2 -59
  238. qiskit/synthesis/qft/__init__.py +1 -0
  239. qiskit/synthesis/qft/qft_decompose_full.py +79 -0
  240. qiskit/synthesis/qft/qft_decompose_lnn.py +17 -9
  241. qiskit/synthesis/stabilizer/stabilizer_circuit.py +6 -6
  242. qiskit/synthesis/stabilizer/stabilizer_decompose.py +2 -2
  243. qiskit/synthesis/two_qubit/local_invariance.py +8 -38
  244. qiskit/synthesis/two_qubit/two_qubit_decompose.py +48 -129
  245. qiskit/synthesis/unitary/aqc/cnot_structures.py +1 -1
  246. qiskit/synthesis/unitary/qsd.py +5 -3
  247. qiskit/transpiler/__init__.py +1 -0
  248. qiskit/transpiler/basepasses.py +1 -1
  249. qiskit/transpiler/coupling.py +3 -3
  250. qiskit/transpiler/instruction_durations.py +1 -2
  251. qiskit/transpiler/layout.py +3 -3
  252. qiskit/transpiler/passes/__init__.py +2 -0
  253. qiskit/transpiler/passes/basis/basis_translator.py +82 -63
  254. qiskit/transpiler/passes/basis/translate_parameterized.py +3 -5
  255. qiskit/transpiler/passes/basis/unroll_3q_or_more.py +1 -1
  256. qiskit/transpiler/passes/basis/unroll_custom_definitions.py +10 -10
  257. qiskit/transpiler/passes/calibration/rx_builder.py +3 -3
  258. qiskit/transpiler/passes/calibration/rzx_builder.py +3 -3
  259. qiskit/transpiler/passes/layout/apply_layout.py +13 -3
  260. qiskit/transpiler/passes/layout/sabre_layout.py +10 -8
  261. qiskit/transpiler/passes/layout/sabre_pre_layout.py +4 -1
  262. qiskit/transpiler/passes/layout/set_layout.py +2 -2
  263. qiskit/transpiler/passes/layout/vf2_layout.py +1 -1
  264. qiskit/transpiler/passes/layout/vf2_utils.py +3 -3
  265. qiskit/transpiler/passes/optimization/__init__.py +1 -0
  266. qiskit/transpiler/passes/optimization/collect_multiqubit_blocks.py +2 -2
  267. qiskit/transpiler/passes/optimization/commutation_analysis.py +7 -10
  268. qiskit/transpiler/passes/optimization/commutative_cancellation.py +35 -19
  269. qiskit/transpiler/passes/optimization/consolidate_blocks.py +11 -8
  270. qiskit/transpiler/passes/optimization/inverse_cancellation.py +6 -6
  271. qiskit/transpiler/passes/optimization/optimize_1q_decomposition.py +64 -41
  272. qiskit/transpiler/passes/optimization/optimize_1q_gates.py +1 -1
  273. qiskit/transpiler/passes/optimization/split_2q_unitaries.py +83 -0
  274. qiskit/transpiler/passes/optimization/template_matching/backward_match.py +1 -1
  275. qiskit/transpiler/passes/optimization/template_matching/forward_match.py +2 -2
  276. qiskit/transpiler/passes/optimization/template_matching/template_substitution.py +1 -1
  277. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/commuting_2q_gate_router.py +3 -2
  278. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/swap_strategy.py +1 -1
  279. qiskit/transpiler/passes/routing/layout_transformation.py +2 -1
  280. qiskit/transpiler/passes/routing/sabre_swap.py +35 -26
  281. qiskit/transpiler/passes/routing/star_prerouting.py +80 -105
  282. qiskit/transpiler/passes/routing/stochastic_swap.py +1 -3
  283. qiskit/transpiler/passes/scheduling/alap.py +1 -2
  284. qiskit/transpiler/passes/scheduling/alignments/__init__.py +2 -2
  285. qiskit/transpiler/passes/scheduling/alignments/check_durations.py +1 -1
  286. qiskit/transpiler/passes/scheduling/alignments/pulse_gate_validation.py +1 -1
  287. qiskit/transpiler/passes/scheduling/alignments/reschedule.py +1 -1
  288. qiskit/transpiler/passes/scheduling/asap.py +1 -2
  289. qiskit/transpiler/passes/scheduling/base_scheduler.py +5 -5
  290. qiskit/transpiler/passes/scheduling/dynamical_decoupling.py +3 -3
  291. qiskit/transpiler/passes/scheduling/padding/base_padding.py +1 -1
  292. qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py +11 -11
  293. qiskit/transpiler/passes/scheduling/scheduling/base_scheduler.py +7 -6
  294. qiskit/transpiler/passes/scheduling/time_unit_conversion.py +4 -3
  295. qiskit/transpiler/passes/synthesis/high_level_synthesis.py +211 -36
  296. qiskit/transpiler/passes/synthesis/plugin.py +2 -2
  297. qiskit/transpiler/passes/synthesis/unitary_synthesis.py +80 -40
  298. qiskit/transpiler/passes/utils/__init__.py +0 -1
  299. qiskit/transpiler/passes/utils/check_gate_direction.py +4 -4
  300. qiskit/transpiler/passes/utils/check_map.py +3 -6
  301. qiskit/transpiler/passes/utils/convert_conditions_to_if_ops.py +3 -4
  302. qiskit/transpiler/passes/utils/error.py +2 -2
  303. qiskit/transpiler/passes/utils/fixed_point.py +3 -3
  304. qiskit/transpiler/passes/utils/gate_direction.py +1 -1
  305. qiskit/transpiler/passes/utils/gates_basis.py +1 -2
  306. qiskit/transpiler/passmanager.py +7 -6
  307. qiskit/transpiler/preset_passmanagers/__init__.py +4 -228
  308. qiskit/transpiler/preset_passmanagers/builtin_plugins.py +117 -18
  309. qiskit/transpiler/preset_passmanagers/common.py +3 -6
  310. qiskit/transpiler/preset_passmanagers/generate_preset_pass_manager.py +518 -0
  311. qiskit/transpiler/preset_passmanagers/level0.py +1 -1
  312. qiskit/transpiler/target.py +27 -8
  313. qiskit/user_config.py +29 -6
  314. qiskit/utils/classtools.py +3 -3
  315. qiskit/utils/deprecation.py +3 -2
  316. qiskit/utils/lazy_tester.py +2 -2
  317. qiskit/utils/optionals.py +8 -8
  318. qiskit/visualization/bloch.py +19 -67
  319. qiskit/visualization/circuit/_utils.py +34 -10
  320. qiskit/visualization/circuit/circuit_visualization.py +23 -16
  321. qiskit/visualization/circuit/latex.py +29 -27
  322. qiskit/visualization/circuit/matplotlib.py +4 -2
  323. qiskit/visualization/circuit/qcstyle.py +2 -2
  324. qiskit/visualization/circuit/text.py +9 -15
  325. qiskit/visualization/dag_visualization.py +5 -12
  326. qiskit/visualization/pulse_v2/core.py +1 -1
  327. qiskit/visualization/pulse_v2/events.py +1 -1
  328. qiskit/visualization/pulse_v2/generators/frame.py +3 -4
  329. qiskit/visualization/pulse_v2/generators/waveform.py +5 -9
  330. qiskit/visualization/pulse_v2/layouts.py +1 -5
  331. qiskit/visualization/pulse_v2/plotters/matplotlib.py +1 -2
  332. qiskit/visualization/state_visualization.py +5 -6
  333. qiskit/visualization/timeline/plotters/matplotlib.py +1 -2
  334. qiskit/visualization/transition_visualization.py +7 -2
  335. {qiskit-1.1.2.dist-info → qiskit-1.2.0rc1.dist-info}/METADATA +26 -26
  336. {qiskit-1.1.2.dist-info → qiskit-1.2.0rc1.dist-info}/RECORD +340 -338
  337. {qiskit-1.1.2.dist-info → qiskit-1.2.0rc1.dist-info}/WHEEL +1 -1
  338. {qiskit-1.1.2.dist-info → qiskit-1.2.0rc1.dist-info}/entry_points.txt +3 -0
  339. qiskit/transpiler/passes/utils/block_to_matrix.py +0 -47
  340. {qiskit-1.1.2.dist-info → qiskit-1.2.0rc1.dist-info}/LICENSE.txt +0 -0
  341. {qiskit-1.1.2.dist-info → qiskit-1.2.0rc1.dist-info}/top_level.txt +0 -0
@@ -130,8 +130,5 @@ class Waveform(Pulse):
130
130
  opt = np.get_printoptions()
131
131
  np.set_printoptions(threshold=50)
132
132
  np.set_printoptions(**opt)
133
- return "{}({}{})".format(
134
- self.__class__.__name__,
135
- repr(self.samples),
136
- f", name='{self.name}'" if self.name is not None else "",
137
- )
133
+ name_repr = f", name='{self.name}'" if self.name is not None else ""
134
+ return f"{self.__class__.__name__}({repr(self.samples)}{name_repr})"
qiskit/pulse/macros.py CHANGED
@@ -124,16 +124,21 @@ def _measure_v1(
124
124
  for qubit in qubits:
125
125
  measure_groups.add(tuple(meas_map[qubit]))
126
126
  for measure_group_qubits in measure_groups:
127
- if qubit_mem_slots is not None:
128
- unused_mem_slots = set(measure_group_qubits) - set(qubit_mem_slots.values())
127
+
128
+ unused_mem_slots = (
129
+ set()
130
+ if qubit_mem_slots is None
131
+ else set(measure_group_qubits) - set(qubit_mem_slots.values())
132
+ )
133
+
129
134
  try:
130
135
  default_sched = inst_map.get(measure_name, measure_group_qubits)
131
136
  except exceptions.PulseError as ex:
132
137
  raise exceptions.PulseError(
133
- "We could not find a default measurement schedule called '{}'. "
138
+ f"We could not find a default measurement schedule called '{measure_name}'. "
134
139
  "Please provide another name using the 'measure_name' keyword "
135
140
  "argument. For assistance, the instructions which are defined are: "
136
- "{}".format(measure_name, inst_map.instructions)
141
+ f"{inst_map.instructions}"
137
142
  ) from ex
138
143
  for time, inst in default_sched.instructions:
139
144
  if inst.channel.index not in qubits:
@@ -198,10 +203,10 @@ def _measure_v2(
198
203
  schedule += _schedule_remapping_memory_slot(default_sched, qubit_mem_slots)
199
204
  except KeyError as ex:
200
205
  raise exceptions.PulseError(
201
- "We could not find a default measurement schedule called '{}'. "
206
+ f"We could not find a default measurement schedule called '{measure_name}'. "
202
207
  "Please provide another name using the 'measure_name' keyword "
203
208
  "argument. For assistance, the instructions which are defined are: "
204
- "{}".format(measure_name, target.instructions)
209
+ f"{target.instructions}"
205
210
  ) from ex
206
211
  return schedule
207
212
 
qiskit/pulse/parser.py CHANGED
@@ -120,17 +120,15 @@ class PulseExpression(ast.NodeTransformer):
120
120
  if kwargs:
121
121
  for key, val in kwargs.items():
122
122
  if key in self.params:
123
- if key not in self._locals_dict.keys():
123
+ if key not in self._locals_dict:
124
124
  self._locals_dict[key] = val
125
125
  else:
126
126
  raise PulseError(
127
- "%s got multiple values for argument '%s'"
128
- % (self.__class__.__name__, key)
127
+ f"{self.__class__.__name__} got multiple values for argument '{key}'"
129
128
  )
130
129
  else:
131
130
  raise PulseError(
132
- "%s got an unexpected keyword argument '%s'"
133
- % (self.__class__.__name__, key)
131
+ f"{self.__class__.__name__} got an unexpected keyword argument '{key}'"
134
132
  )
135
133
 
136
134
  expr = self.visit(self._tree)
@@ -139,7 +137,7 @@ class PulseExpression(ast.NodeTransformer):
139
137
  if self._partial_binding:
140
138
  return PulseExpression(expr, self._partial_binding)
141
139
  else:
142
- raise PulseError("Parameters %s are not all bound." % self.params)
140
+ raise PulseError(f"Parameters {self.params} are not all bound.")
143
141
  return expr.body.value
144
142
 
145
143
  @staticmethod
@@ -160,7 +158,7 @@ class PulseExpression(ast.NodeTransformer):
160
158
  for op_type, op_func in opr_dict.items():
161
159
  if isinstance(opr, op_type):
162
160
  return op_func(*args)
163
- raise PulseError("Operator %s is not supported." % opr.__class__.__name__)
161
+ raise PulseError(f"Operator {opr.__class__.__name__} is not supported.")
164
162
 
165
163
  def visit_Expression(self, node: ast.Expression) -> ast.Expression:
166
164
  """Evaluate children nodes of expression.
@@ -272,8 +270,8 @@ class PulseExpression(ast.NodeTransformer):
272
270
  node = copy.copy(node)
273
271
  node.args = [self.visit(arg) for arg in node.args]
274
272
  if all(isinstance(arg, ast.Constant) for arg in node.args):
275
- if node.func.id not in self._math_ops.keys():
276
- raise PulseError("Function %s is not supported." % node.func.id)
273
+ if node.func.id not in self._math_ops:
274
+ raise PulseError(f"Function {node.func.id} is not supported.")
277
275
  _args = [arg.value for arg in node.args]
278
276
  _val = self._math_ops[node.func.id](*_args)
279
277
  if not _val.imag:
@@ -283,7 +281,7 @@ class PulseExpression(ast.NodeTransformer):
283
281
  return node
284
282
 
285
283
  def generic_visit(self, node):
286
- raise PulseError("Unsupported node: %s" % node.__class__.__name__)
284
+ raise PulseError(f"Unsupported node: {node.__class__.__name__}")
287
285
 
288
286
 
289
287
  def parse_string_expr(source: str, partial_binding: bool = False) -> PulseExpression:
qiskit/pulse/schedule.py CHANGED
@@ -553,17 +553,10 @@ class Schedule:
553
553
  self._timeslots[channel].insert(index, interval)
554
554
  except PulseError as ex:
555
555
  raise PulseError(
556
- "Schedule(name='{new}') cannot be inserted into Schedule(name='{old}') at "
557
- "time {time} because its instruction on channel {ch} scheduled from time "
558
- "{t0} to {tf} overlaps with an existing instruction."
559
- "".format(
560
- new=schedule.name or "",
561
- old=self.name or "",
562
- time=time,
563
- ch=channel,
564
- t0=interval[0],
565
- tf=interval[1],
566
- )
556
+ f"Schedule(name='{schedule.name or ''}') cannot be inserted into "
557
+ f"Schedule(name='{self.name or ''}') at "
558
+ f"time {time} because its instruction on channel {channel} scheduled from time "
559
+ f"{interval[0]} to {interval[1]} overlaps with an existing instruction."
567
560
  ) from ex
568
561
 
569
562
  _check_nonnegative_timeslot(self._timeslots)
@@ -598,10 +591,8 @@ class Schedule:
598
591
  continue
599
592
 
600
593
  raise PulseError(
601
- "Cannot find interval ({t0}, {tf}) to remove from "
602
- "channel {ch} in Schedule(name='{name}').".format(
603
- ch=channel, t0=interval[0], tf=interval[1], name=schedule.name
604
- )
594
+ f"Cannot find interval ({interval[0]}, {interval[1]}) to remove from "
595
+ f"channel {channel} in Schedule(name='{schedule.name}')."
605
596
  )
606
597
 
607
598
  if not channel_timeslots:
@@ -1615,8 +1606,9 @@ class ScheduleBlock:
1615
1606
  blocks = ", ".join([repr(instr) for instr in self.blocks[:50]])
1616
1607
  if len(self.blocks) > 25:
1617
1608
  blocks += ", ..."
1618
- return '{}({}, name="{}", transform={})'.format(
1619
- self.__class__.__name__, blocks, name, repr(self.alignment_context)
1609
+ return (
1610
+ f'{self.__class__.__name__}({blocks}, name="{name}",'
1611
+ f" transform={repr(self.alignment_context)})"
1620
1612
  )
1621
1613
 
1622
1614
  def __add__(self, other: "BlockComponent") -> "ScheduleBlock":
@@ -398,9 +398,7 @@ class AlignFunc(AlignmentKind):
398
398
  _t_center = self.duration * self.func(ind + 1)
399
399
  _t0 = int(_t_center - 0.5 * child.duration)
400
400
  if _t0 < 0 or _t0 > self.duration:
401
- raise PulseError(
402
- "Invalid schedule position t=%d is specified at index=%d" % (_t0, ind)
403
- )
401
+ raise PulseError(f"Invalid schedule position t={_t0} is specified at index={ind}")
404
402
  aligned.insert(_t0, child, inplace=True)
405
403
 
406
404
  return aligned
qiskit/pulse/utils.py CHANGED
@@ -108,10 +108,9 @@ def instruction_duration_validation(duration: int):
108
108
  """
109
109
  if isinstance(duration, ParameterExpression):
110
110
  raise UnassignedDurationError(
111
- "Instruction duration {} is not assigned. "
111
+ f"Instruction duration {repr(duration)} is not assigned. "
112
112
  "Please bind all durations to an integer value before playing in the Schedule, "
113
113
  "or use ScheduleBlock to align instructions with unassigned duration."
114
- "".format(repr(duration))
115
114
  )
116
115
 
117
116
  if not isinstance(duration, (int, np.integer)) or duration < 0:
@@ -1,51 +1,58 @@
1
- // OpenQASM 3 standard gate library
1
+ // OpenQASM 3.0 standard gate library
2
+ //
3
+ // Vendored from the OpenQASM 3.0 project at commit 4ca1d793833b24a1 of
4
+ // https://github.com/openqasm/openqasm.
5
+ //
6
+ // Used under the terms of its Apache-2.0 license.
7
+ // Copyright 2017-2024 OpenQASM Contributors.
8
+
2
9
 
3
10
  // phase gate
4
- gate p(lambda) a { ctrl @ gphase(lambda) a; }
11
+ gate p(λ) a { ctrl @ gphase(λ) a; }
5
12
 
6
13
  // Pauli gate: bit-flip or NOT gate
7
- gate x a { U(pi, 0, pi) a; }
14
+ gate x a { U(π, 0, π) a; gphase(-π/2);}
8
15
  // Pauli gate: bit and phase flip
9
- gate y a { U(pi, pi/2, pi/2) a; }
10
- // Pauli gate: phase flip
11
- gate z a { p(pi) a; }
16
+ gate y a { U(π, π/2, π/2) a; gphase(-π/2);}
17
+ // Pauli gate: phase flip
18
+ gate z a { p(π) a; }
12
19
 
13
20
  // Clifford gate: Hadamard
14
- gate h a { U(pi/2, 0, pi) a; }
21
+ gate h a { U(π/2, 0, π) a; gphase(-π/4);}
15
22
  // Clifford gate: sqrt(Z) or S gate
16
- gate s a { pow(1/2) @ z a; }
23
+ gate s a { pow(0.5) @ z a; }
17
24
  // Clifford gate: inverse of sqrt(Z)
18
- gate sdg a { inv @ pow(1/2) @ z a; }
25
+ gate sdg a { inv @ pow(0.5) @ z a; }
19
26
 
20
27
  // sqrt(S) or T gate
21
- gate t a { pow(1/2) @ s a; }
28
+ gate t a { pow(0.5) @ s a; }
22
29
  // inverse of sqrt(S)
23
- gate tdg a { inv @ pow(1/2) @ s a; }
30
+ gate tdg a { inv @ pow(0.5) @ s a; }
24
31
 
25
32
  // sqrt(NOT) gate
26
- gate sx a { pow(1/2) @ x a; }
33
+ gate sx a { pow(0.5) @ x a; }
27
34
 
28
35
  // Rotation around X-axis
29
- gate rx(theta) a { U(theta, -pi/2, pi/2) a; }
36
+ gate rx(θ) a { U(θ, -π/2, π/2) a; gphase(-θ/2);}
30
37
  // rotation around Y-axis
31
- gate ry(theta) a { U(theta, 0, 0) a; }
38
+ gate ry(θ) a { U(θ, 0, 0) a; gphase(-θ/2);}
32
39
  // rotation around Z axis
33
- gate rz(lambda) a { gphase(-lambda/2); U(0, 0, lambda) a; }
40
+ gate rz(λ) a { gphase(-λ/2); U(0, 0, λ) a; }
34
41
 
35
42
  // controlled-NOT
36
- gate cx c, t { ctrl @ x c, t; }
43
+ gate cx a, b { ctrl @ x a, b; }
37
44
  // controlled-Y
38
45
  gate cy a, b { ctrl @ y a, b; }
39
46
  // controlled-Z
40
47
  gate cz a, b { ctrl @ z a, b; }
41
48
  // controlled-phase
42
- gate cp(lambda) a, b { ctrl @ p(lambda) a, b; }
49
+ gate cp(λ) a, b { ctrl @ p(λ) a, b; }
43
50
  // controlled-rx
44
- gate crx(theta) a, b { ctrl @ rx(theta) a, b; }
51
+ gate crx(θ) a, b { ctrl @ rx(θ) a, b; }
45
52
  // controlled-ry
46
- gate cry(theta) a, b { ctrl @ ry(theta) a, b; }
53
+ gate cry(θ) a, b { ctrl @ ry(θ) a, b; }
47
54
  // controlled-rz
48
- gate crz(theta) a, b { ctrl @ rz(theta) a, b; }
55
+ gate crz(θ) a, b { ctrl @ rz(θ) a, b; }
49
56
  // controlled-H
50
57
  gate ch a, b { ctrl @ h a, b; }
51
58
 
@@ -57,19 +64,19 @@ gate ccx a, b, c { ctrl @ ctrl @ x a, b, c; }
57
64
  // controlled-swap
58
65
  gate cswap a, b, c { ctrl @ swap a, b, c; }
59
66
 
60
- // four parameter controlled-U gate with relative phase
61
- gate cu(theta, phi, lambda, gamma) c, t { p(gamma) c; ctrl @ U(theta, phi, lambda) c, t; }
67
+ // four parameter controlled-U gate with relative phase γ
68
+ gate cu(θ, φ, λ, γ) a, b { p(γ-θ/2) a; ctrl @ U(θ, φ, λ) a, b; }
62
69
 
63
70
  // Gates for OpenQASM 2 backwards compatibility
64
71
  // CNOT
65
- gate CX c, t { ctrl @ U(pi, 0, pi) c, t; }
72
+ gate CX a, b { ctrl @ U(π, 0, π) a, b; }
66
73
  // phase gate
67
- gate phase(lambda) q { U(0, 0, lambda) q; }
74
+ gate phase(λ) q { U(0, 0, λ) q; }
68
75
  // controlled-phase
69
- gate cphase(lambda) a, b { ctrl @ phase(lambda) a, b; }
76
+ gate cphase(λ) a, b { ctrl @ phase(λ) a, b; }
70
77
  // identity or idle gate
71
78
  gate id a { U(0, 0, 0) a; }
72
79
  // IBM Quantum experience gates
73
- gate u1(lambda) q { U(0, 0, lambda) q; }
74
- gate u2(phi, lambda) q { gphase(-(phi+lambda)/2); U(pi/2, phi, lambda) q; }
75
- gate u3(theta, phi, lambda) q { gphase(-(phi+lambda)/2); U(theta, phi, lambda) q; }
80
+ gate u1(λ) q { U(0, 0, λ) q; }
81
+ gate u2(φ, λ) q { gphase(-(φ+λ+π/2)/2); U(π/2, φ, λ) q; }
82
+ gate u3(θ, φ, λ) q { gphase(-(φ+λ+θ)/2); U(θ, φ, λ) q; }
qiskit/qasm2/__init__.py CHANGED
@@ -20,7 +20,7 @@ formats <qasm2-parse>` and :ref:`exporting back to OpenQASM 2 <qasm2-export>`.
20
20
 
21
21
  .. note::
22
22
 
23
- OpenQASM 2 is a simple language, and not suitable for general serialisation of Qiskit objects.
23
+ OpenQASM 2 is a simple language, and not suitable for general serialization of Qiskit objects.
24
24
  See :ref:`some discussion of alternatives below <qasm2-alternatives>`, if that is what you are
25
25
  looking for.
26
26
 
@@ -95,7 +95,7 @@ letter-of-the-spec mode with ``strict=True``.
95
95
  Exporting API
96
96
  =============
97
97
 
98
- Similar to other serialisation modules in Python, this module offers two public functions:
98
+ Similar to other serialization modules in Python, this module offers two public functions:
99
99
  :func:`dump` and :func:`dumps`, which take a :class:`.QuantumCircuit` and write out a representative
100
100
  OpenQASM 2 program to a file-like object or return a string, respectively.
101
101
 
@@ -394,7 +394,7 @@ Legacy Compatibility
394
394
 
395
395
  :meth:`.QuantumCircuit.from_qasm_str` and :meth:`~.QuantumCircuit.from_qasm_file` used to make a few
396
396
  additions on top of the raw specification. Qiskit originally tried to use OpenQASM 2 as a sort of
397
- serialisation format, and expanded its behaviour as Qiskit expanded. The new parser under all its
397
+ serialization format, and expanded its behavior as Qiskit expanded. The new parser under all its
398
398
  defaults implements the specification more strictly.
399
399
 
400
400
  In particular, in the legacy importers:
@@ -445,11 +445,11 @@ In particular, in the legacy importers:
445
445
  * the parsed grammar is effectively the same as :ref:`the strict mode of the new importers
446
446
  <qasm2-strict-mode>`.
447
447
 
448
- You can emulate this behaviour in :func:`load` and :func:`loads` by setting `include_path`
448
+ You can emulate this behavior in :func:`load` and :func:`loads` by setting `include_path`
449
449
  appropriately (try inspecting the variable ``qiskit.__file__`` to find the installed location), and
450
450
  by passing a list of :class:`CustomInstruction` instances for each of the custom gates you care
451
451
  about. To make things easier we make three tuples available, which each contain one component of
452
- a configuration that is equivalent to Qiskit's legacy converter behaviour.
452
+ a configuration that is equivalent to Qiskit's legacy converter behavior.
453
453
 
454
454
  .. py:data:: LEGACY_CUSTOM_INSTRUCTIONS
455
455
 
@@ -473,7 +473,7 @@ On *all* the gates defined in Qiskit's legacy version of ``qelib1.inc`` and the
473
473
  instruction, it does not matter how the gates are actually defined and used, the legacy importer
474
474
  will always attempt to output its custom objects for them. This can result in errors during the
475
475
  circuit construction, even after a successful parse. There is no way to emulate this buggy
476
- behaviour with :mod:`qiskit.qasm2`; only an ``include "qelib1.inc";`` statement or the
476
+ behavior with :mod:`qiskit.qasm2`; only an ``include "qelib1.inc";`` statement or the
477
477
  `custom_instructions` argument can cause built-in Qiskit instructions to be used, and the signatures
478
478
  of these match each other.
479
479
 
@@ -549,7 +549,7 @@ LEGACY_INCLUDE_PATH = (
549
549
 
550
550
 
551
551
  def _normalize_path(path: Union[str, os.PathLike]) -> str:
552
- """Normalise a given path into a path-like object that can be passed to Rust.
552
+ """Normalize a given path into a path-like object that can be passed to Rust.
553
553
 
554
554
  Ideally this would be something that we can convert to Rust's `OSString`, but in practice,
555
555
  Python uses `os.fsencode` to produce a `bytes` object, but this doesn't map especially well.
qiskit/qasm2/export.py CHANGED
@@ -157,7 +157,7 @@ def dumps(circuit: QuantumCircuit, /) -> str:
157
157
  _make_unique(_escape_name(reg.name, "reg_"), register_escaped_names)
158
158
  ] = reg
159
159
  bit_labels: dict[Qubit | Clbit, str] = {
160
- bit: "%s[%d]" % (name, idx)
160
+ bit: f"{name}[{idx}]"
161
161
  for name, register in register_escaped_names.items()
162
162
  for (idx, bit) in enumerate(register)
163
163
  }
@@ -244,18 +244,14 @@ def _instruction_call_site(operation):
244
244
  else:
245
245
  qasm2_call = operation.name
246
246
  if operation.params:
247
- qasm2_call = "{}({})".format(
248
- qasm2_call,
249
- ",".join([pi_check(i, output="qasm", eps=1e-12) for i in operation.params]),
250
- )
247
+ params = ",".join([pi_check(i, output="qasm", eps=1e-12) for i in operation.params])
248
+ qasm2_call = f"{qasm2_call}({params})"
251
249
  if operation.condition is not None:
252
250
  if not isinstance(operation.condition[0], ClassicalRegister):
253
251
  raise QASM2ExportError(
254
252
  "OpenQASM 2 can only condition on registers, but got '{operation.condition[0]}'"
255
253
  )
256
- qasm2_call = (
257
- "if(%s==%d) " % (operation.condition[0].name, operation.condition[1]) + qasm2_call
258
- )
254
+ qasm2_call = f"if({operation.condition[0].name}=={operation.condition[1]:d}) " + qasm2_call
259
255
  return qasm2_call
260
256
 
261
257
 
@@ -312,7 +308,7 @@ def _define_custom_operation(operation, gates_to_define):
312
308
  lib.U3Gate,
313
309
  }
314
310
 
315
- # In known-good situations we want to use a manually parametrised object as the source of the
311
+ # In known-good situations we want to use a manually parametrized object as the source of the
316
312
  # definition, but still continue to return the given object as the call-site object.
317
313
  if operation.base_class in known_good_parameterized:
318
314
  parameterized_operation = type(operation)(*_FIXED_PARAMETERS[: len(operation.params)])
qiskit/qasm2/parse.py CHANGED
@@ -287,7 +287,7 @@ def from_bytecode(bytecode, custom_instructions: Iterable[CustomInstruction]):
287
287
 
288
288
  class _DefinedGate(Gate):
289
289
  """A gate object defined by a `gate` statement in an OpenQASM 2 program. This object lazily
290
- binds its parameters to its definition, so it is only synthesised when required."""
290
+ binds its parameters to its definition, so it is only synthesized when required."""
291
291
 
292
292
  def __init__(self, name, num_qubits, params, gates, bytecode):
293
293
  self._gates = gates
qiskit/qasm3/ast.py CHANGED
@@ -317,7 +317,7 @@ class Designator(ASTNode):
317
317
 
318
318
 
319
319
  class ClassicalDeclaration(Statement):
320
- """Declaration of a classical type, optionally initialising it to a value."""
320
+ """Declaration of a classical type, optionally initializing it to a value."""
321
321
 
322
322
  def __init__(self, type_: ClassicalType, identifier: Identifier, initializer=None):
323
323
  self.type = type_
@@ -456,39 +456,23 @@ class SubroutineBlock(ProgramBlock):
456
456
  pass
457
457
 
458
458
 
459
- class QuantumArgument(QuantumDeclaration):
460
- """
461
- quantumArgument
462
- : 'qreg' Identifier designator? | 'qubit' designator? Identifier
463
- """
464
-
465
-
466
- class QuantumGateSignature(ASTNode):
459
+ class QuantumGateDefinition(Statement):
467
460
  """
468
- quantumGateSignature
469
- : quantumGateName ( LPAREN identifierList? RPAREN )? identifierList
461
+ quantumGateDefinition
462
+ : 'gate' quantumGateSignature quantumBlock
470
463
  """
471
464
 
472
465
  def __init__(
473
466
  self,
474
467
  name: Identifier,
475
- qargList: List[Identifier],
476
- params: Optional[List[Expression]] = None,
468
+ params: Tuple[Identifier, ...],
469
+ qubits: Tuple[Identifier, ...],
470
+ body: QuantumBlock,
477
471
  ):
478
472
  self.name = name
479
- self.qargList = qargList
480
473
  self.params = params
481
-
482
-
483
- class QuantumGateDefinition(Statement):
484
- """
485
- quantumGateDefinition
486
- : 'gate' quantumGateSignature quantumBlock
487
- """
488
-
489
- def __init__(self, quantumGateSignature: QuantumGateSignature, quantumBlock: QuantumBlock):
490
- self.quantumGateSignature = quantumGateSignature
491
- self.quantumBlock = quantumBlock
474
+ self.qubits = qubits
475
+ self.body = body
492
476
 
493
477
 
494
478
  class SubroutineDefinition(Statement):