qiskit 1.1.1__cp38-abi3-macosx_11_0_arm64.whl → 1.2.0__cp38-abi3-macosx_11_0_arm64.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 (347) hide show
  1. qiskit/VERSION.txt +1 -1
  2. qiskit/__init__.py +27 -24
  3. qiskit/_accelerate.abi3.so +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 +6 -3
  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/__init__.py +8 -0
  18. qiskit/circuit/classicalfunction/boolean_expression.py +1 -1
  19. qiskit/circuit/classicalfunction/classical_function_visitor.py +5 -5
  20. qiskit/circuit/classicalfunction/utils.py +1 -1
  21. qiskit/circuit/classicalregister.py +1 -1
  22. qiskit/circuit/commutation_checker.py +83 -35
  23. qiskit/circuit/controlflow/_builder_utils.py +1 -1
  24. qiskit/circuit/controlflow/builder.py +10 -6
  25. qiskit/circuit/controlflow/if_else.py +2 -2
  26. qiskit/circuit/controlflow/switch_case.py +1 -1
  27. qiskit/circuit/delay.py +1 -1
  28. qiskit/circuit/duration.py +2 -2
  29. qiskit/circuit/equivalence.py +5 -7
  30. qiskit/circuit/gate.py +11 -8
  31. qiskit/circuit/instruction.py +31 -13
  32. qiskit/circuit/instructionset.py +2 -5
  33. qiskit/circuit/library/__init__.py +2 -1
  34. qiskit/circuit/library/arithmetic/linear_amplitude_function.py +1 -1
  35. qiskit/circuit/library/arithmetic/linear_pauli_rotations.py +1 -1
  36. qiskit/circuit/library/arithmetic/piecewise_chebyshev.py +1 -1
  37. qiskit/circuit/library/arithmetic/piecewise_linear_pauli_rotations.py +1 -1
  38. qiskit/circuit/library/arithmetic/piecewise_polynomial_pauli_rotations.py +3 -3
  39. qiskit/circuit/library/arithmetic/polynomial_pauli_rotations.py +1 -1
  40. qiskit/circuit/library/basis_change/__init__.py +1 -1
  41. qiskit/circuit/library/basis_change/qft.py +40 -6
  42. qiskit/circuit/library/blueprintcircuit.py +3 -5
  43. qiskit/circuit/library/data_preparation/__init__.py +9 -2
  44. qiskit/circuit/library/data_preparation/initializer.py +8 -0
  45. qiskit/circuit/library/data_preparation/state_preparation.py +98 -178
  46. qiskit/circuit/library/generalized_gates/isometry.py +8 -8
  47. qiskit/circuit/library/generalized_gates/linear_function.py +3 -2
  48. qiskit/circuit/library/generalized_gates/mcg_up_to_diagonal.py +4 -4
  49. qiskit/circuit/library/generalized_gates/permutation.py +8 -9
  50. qiskit/circuit/library/generalized_gates/uc.py +3 -3
  51. qiskit/circuit/library/generalized_gates/uc_pauli_rot.py +2 -2
  52. qiskit/circuit/library/generalized_gates/unitary.py +13 -11
  53. qiskit/circuit/library/graph_state.py +1 -1
  54. qiskit/circuit/library/hamiltonian_gate.py +1 -2
  55. qiskit/circuit/library/hidden_linear_function.py +1 -1
  56. qiskit/circuit/library/n_local/evolved_operator_ansatz.py +3 -2
  57. qiskit/circuit/library/n_local/n_local.py +4 -5
  58. qiskit/circuit/library/n_local/pauli_two_design.py +1 -1
  59. qiskit/circuit/library/n_local/qaoa_ansatz.py +6 -8
  60. qiskit/circuit/library/n_local/two_local.py +1 -1
  61. qiskit/circuit/library/overlap.py +11 -5
  62. qiskit/circuit/library/pauli_evolution.py +7 -3
  63. qiskit/circuit/library/standard_gates/dcx.py +3 -0
  64. qiskit/circuit/library/standard_gates/ecr.py +3 -0
  65. qiskit/circuit/library/standard_gates/global_phase.py +3 -0
  66. qiskit/circuit/library/standard_gates/h.py +13 -5
  67. qiskit/circuit/library/standard_gates/i.py +3 -0
  68. qiskit/circuit/library/standard_gates/iswap.py +3 -0
  69. qiskit/circuit/library/standard_gates/multi_control_rotation_gates.py +19 -10
  70. qiskit/circuit/library/standard_gates/p.py +14 -9
  71. qiskit/circuit/library/standard_gates/r.py +3 -0
  72. qiskit/circuit/library/standard_gates/rx.py +21 -6
  73. qiskit/circuit/library/standard_gates/rxx.py +40 -1
  74. qiskit/circuit/library/standard_gates/ry.py +21 -6
  75. qiskit/circuit/library/standard_gates/ryy.py +40 -1
  76. qiskit/circuit/library/standard_gates/rz.py +22 -6
  77. qiskit/circuit/library/standard_gates/rzx.py +40 -1
  78. qiskit/circuit/library/standard_gates/rzz.py +41 -2
  79. qiskit/circuit/library/standard_gates/s.py +77 -0
  80. qiskit/circuit/library/standard_gates/swap.py +12 -5
  81. qiskit/circuit/library/standard_gates/sx.py +14 -5
  82. qiskit/circuit/library/standard_gates/t.py +5 -0
  83. qiskit/circuit/library/standard_gates/u.py +22 -7
  84. qiskit/circuit/library/standard_gates/u1.py +8 -3
  85. qiskit/circuit/library/standard_gates/u2.py +3 -0
  86. qiskit/circuit/library/standard_gates/u3.py +22 -7
  87. qiskit/circuit/library/standard_gates/x.py +158 -92
  88. qiskit/circuit/library/standard_gates/xx_minus_yy.py +40 -1
  89. qiskit/circuit/library/standard_gates/xx_plus_yy.py +52 -11
  90. qiskit/circuit/library/standard_gates/y.py +6 -1
  91. qiskit/circuit/library/standard_gates/z.py +8 -1
  92. qiskit/circuit/operation.py +1 -1
  93. qiskit/circuit/parameter.py +9 -10
  94. qiskit/circuit/parameterexpression.py +16 -13
  95. qiskit/circuit/parametertable.py +1 -190
  96. qiskit/circuit/parametervector.py +1 -1
  97. qiskit/circuit/quantumcircuit.py +395 -385
  98. qiskit/circuit/quantumcircuitdata.py +3 -5
  99. qiskit/circuit/quantumregister.py +1 -1
  100. qiskit/circuit/random/__init__.py +1 -1
  101. qiskit/circuit/random/utils.py +175 -26
  102. qiskit/circuit/register.py +5 -7
  103. qiskit/circuit/singleton.py +3 -3
  104. qiskit/circuit/tools/pi_check.py +4 -4
  105. qiskit/compiler/assembler.py +95 -24
  106. qiskit/compiler/scheduler.py +2 -2
  107. qiskit/compiler/transpiler.py +42 -128
  108. qiskit/converters/circuit_to_dag.py +4 -6
  109. qiskit/converters/circuit_to_gate.py +4 -8
  110. qiskit/converters/circuit_to_instruction.py +5 -17
  111. qiskit/converters/dag_to_circuit.py +2 -6
  112. qiskit/dagcircuit/collect_blocks.py +2 -2
  113. qiskit/dagcircuit/dagcircuit.py +197 -187
  114. qiskit/dagcircuit/dagdependency.py +4 -4
  115. qiskit/dagcircuit/dagdependency_v2.py +4 -4
  116. qiskit/dagcircuit/dagdepnode.py +1 -1
  117. qiskit/dagcircuit/dagnode.py +66 -157
  118. qiskit/passmanager/flow_controllers.py +1 -1
  119. qiskit/passmanager/passmanager.py +3 -3
  120. qiskit/primitives/__init__.py +1 -5
  121. qiskit/primitives/backend_estimator.py +25 -15
  122. qiskit/primitives/backend_estimator_v2.py +31 -7
  123. qiskit/primitives/backend_sampler.py +21 -12
  124. qiskit/primitives/backend_sampler_v2.py +12 -3
  125. qiskit/primitives/base/base_estimator.py +31 -4
  126. qiskit/primitives/base/base_primitive.py +2 -2
  127. qiskit/primitives/base/base_result.py +2 -2
  128. qiskit/primitives/base/base_sampler.py +26 -2
  129. qiskit/primitives/base/estimator_result.py +2 -2
  130. qiskit/primitives/base/sampler_result.py +2 -2
  131. qiskit/primitives/containers/__init__.py +0 -1
  132. qiskit/primitives/containers/bindings_array.py +2 -2
  133. qiskit/primitives/containers/bit_array.py +113 -12
  134. qiskit/primitives/containers/shape.py +3 -3
  135. qiskit/primitives/estimator.py +9 -2
  136. qiskit/primitives/primitive_job.py +1 -1
  137. qiskit/primitives/sampler.py +10 -3
  138. qiskit/primitives/statevector_estimator.py +5 -3
  139. qiskit/primitives/statevector_sampler.py +11 -5
  140. qiskit/primitives/utils.py +16 -0
  141. qiskit/providers/backend.py +15 -6
  142. qiskit/providers/backend_compat.py +7 -4
  143. qiskit/providers/basic_provider/basic_provider_tools.py +1 -1
  144. qiskit/providers/basic_provider/basic_simulator.py +33 -25
  145. qiskit/providers/fake_provider/fake_backend.py +10 -3
  146. qiskit/providers/fake_provider/fake_openpulse_2q.py +157 -149
  147. qiskit/providers/fake_provider/fake_openpulse_3q.py +228 -220
  148. qiskit/providers/fake_provider/fake_pulse_backend.py +2 -1
  149. qiskit/providers/fake_provider/fake_qasm_backend.py +7 -2
  150. qiskit/providers/fake_provider/generic_backend_v2.py +519 -68
  151. qiskit/providers/models/__init__.py +48 -11
  152. qiskit/providers/models/backendconfiguration.py +50 -4
  153. qiskit/providers/models/backendproperties.py +13 -2
  154. qiskit/providers/models/pulsedefaults.py +10 -11
  155. qiskit/providers/options.py +13 -13
  156. qiskit/providers/providerutils.py +3 -1
  157. qiskit/pulse/configuration.py +8 -12
  158. qiskit/pulse/instruction_schedule_map.py +3 -5
  159. qiskit/pulse/instructions/acquire.py +7 -8
  160. qiskit/pulse/instructions/instruction.py +2 -3
  161. qiskit/pulse/library/samplers/decorators.py +5 -9
  162. qiskit/pulse/library/symbolic_pulses.py +4 -7
  163. qiskit/pulse/library/waveform.py +2 -5
  164. qiskit/pulse/macros.py +11 -6
  165. qiskit/pulse/parser.py +8 -10
  166. qiskit/pulse/schedule.py +12 -20
  167. qiskit/pulse/transforms/alignments.py +1 -3
  168. qiskit/pulse/utils.py +1 -2
  169. qiskit/qasm/libs/stdgates.inc +35 -28
  170. qiskit/qasm2/__init__.py +7 -7
  171. qiskit/qasm2/export.py +5 -9
  172. qiskit/qasm2/parse.py +1 -1
  173. qiskit/qasm3/ast.py +9 -25
  174. qiskit/qasm3/exporter.py +582 -479
  175. qiskit/qasm3/printer.py +7 -16
  176. qiskit/qobj/common.py +10 -0
  177. qiskit/qobj/converters/lo_config.py +9 -0
  178. qiskit/qobj/converters/pulse_instruction.py +13 -6
  179. qiskit/qobj/pulse_qobj.py +69 -15
  180. qiskit/qobj/qasm_qobj.py +72 -20
  181. qiskit/qobj/utils.py +9 -0
  182. qiskit/qpy/__init__.py +1 -1
  183. qiskit/qpy/binary_io/circuits.py +8 -5
  184. qiskit/qpy/binary_io/schedules.py +1 -1
  185. qiskit/qpy/binary_io/value.py +3 -3
  186. qiskit/qpy/interface.py +3 -2
  187. qiskit/qpy/type_keys.py +2 -2
  188. qiskit/quantum_info/operators/channel/quantum_channel.py +3 -6
  189. qiskit/quantum_info/operators/channel/superop.py +2 -2
  190. qiskit/quantum_info/operators/channel/transformations.py +1 -1
  191. qiskit/quantum_info/operators/dihedral/dihedral.py +3 -4
  192. qiskit/quantum_info/operators/dihedral/dihedral_circuits.py +1 -3
  193. qiskit/quantum_info/operators/dihedral/random.py +6 -3
  194. qiskit/quantum_info/operators/measures.py +2 -2
  195. qiskit/quantum_info/operators/op_shape.py +12 -20
  196. qiskit/quantum_info/operators/operator.py +14 -21
  197. qiskit/quantum_info/operators/predicates.py +1 -0
  198. qiskit/quantum_info/operators/symplectic/base_pauli.py +7 -11
  199. qiskit/quantum_info/operators/symplectic/clifford.py +1 -1
  200. qiskit/quantum_info/operators/symplectic/pauli.py +14 -12
  201. qiskit/quantum_info/operators/symplectic/pauli_list.py +9 -10
  202. qiskit/quantum_info/operators/symplectic/random.py +1 -1
  203. qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py +15 -17
  204. qiskit/quantum_info/quaternion.py +1 -1
  205. qiskit/quantum_info/states/densitymatrix.py +5 -8
  206. qiskit/quantum_info/states/stabilizerstate.py +128 -37
  207. qiskit/quantum_info/states/statevector.py +4 -8
  208. qiskit/result/counts.py +2 -2
  209. qiskit/result/mitigation/correlated_readout_mitigator.py +2 -2
  210. qiskit/result/mitigation/local_readout_mitigator.py +2 -2
  211. qiskit/result/mitigation/utils.py +1 -3
  212. qiskit/result/models.py +17 -16
  213. qiskit/result/result.py +15 -20
  214. qiskit/scheduler/lowering.py +2 -2
  215. qiskit/synthesis/__init__.py +2 -1
  216. qiskit/synthesis/clifford/__init__.py +1 -1
  217. qiskit/synthesis/clifford/clifford_decompose_ag.py +2 -2
  218. qiskit/synthesis/clifford/clifford_decompose_bm.py +10 -240
  219. qiskit/synthesis/clifford/clifford_decompose_greedy.py +9 -303
  220. qiskit/synthesis/clifford/clifford_decompose_layers.py +25 -23
  221. qiskit/synthesis/cnotdihedral/cnotdihedral_decompose_full.py +1 -1
  222. qiskit/synthesis/cnotdihedral/cnotdihedral_decompose_general.py +1 -1
  223. qiskit/synthesis/discrete_basis/generate_basis_approximations.py +2 -2
  224. qiskit/synthesis/discrete_basis/solovay_kitaev.py +24 -14
  225. qiskit/synthesis/evolution/evolution_synthesis.py +4 -2
  226. qiskit/synthesis/evolution/lie_trotter.py +46 -19
  227. qiskit/synthesis/evolution/product_formula.py +111 -55
  228. qiskit/synthesis/evolution/qdrift.py +40 -10
  229. qiskit/synthesis/evolution/suzuki_trotter.py +43 -33
  230. qiskit/synthesis/linear/__init__.py +1 -0
  231. qiskit/synthesis/linear/cnot_synth.py +22 -96
  232. qiskit/synthesis/linear/linear_depth_lnn.py +8 -8
  233. qiskit/synthesis/linear/linear_matrix_utils.py +13 -161
  234. qiskit/synthesis/linear_phase/cnot_phase_synth.py +1 -1
  235. qiskit/synthesis/linear_phase/cx_cz_depth_lnn.py +3 -3
  236. qiskit/synthesis/linear_phase/cz_depth_lnn.py +1 -1
  237. qiskit/synthesis/one_qubit/one_qubit_decompose.py +29 -29
  238. qiskit/synthesis/permutation/permutation_full.py +5 -29
  239. qiskit/synthesis/permutation/permutation_lnn.py +2 -24
  240. qiskit/synthesis/permutation/permutation_utils.py +2 -59
  241. qiskit/synthesis/qft/__init__.py +1 -0
  242. qiskit/synthesis/qft/qft_decompose_full.py +79 -0
  243. qiskit/synthesis/qft/qft_decompose_lnn.py +17 -9
  244. qiskit/synthesis/stabilizer/stabilizer_circuit.py +6 -6
  245. qiskit/synthesis/stabilizer/stabilizer_decompose.py +2 -2
  246. qiskit/synthesis/two_qubit/local_invariance.py +8 -38
  247. qiskit/synthesis/two_qubit/two_qubit_decompose.py +48 -129
  248. qiskit/synthesis/unitary/aqc/cnot_structures.py +1 -1
  249. qiskit/synthesis/unitary/qsd.py +5 -3
  250. qiskit/transpiler/__init__.py +6 -5
  251. qiskit/transpiler/basepasses.py +1 -1
  252. qiskit/transpiler/coupling.py +3 -3
  253. qiskit/transpiler/instruction_durations.py +1 -2
  254. qiskit/transpiler/layout.py +6 -6
  255. qiskit/transpiler/passes/__init__.py +2 -0
  256. qiskit/transpiler/passes/basis/basis_translator.py +84 -64
  257. qiskit/transpiler/passes/basis/translate_parameterized.py +3 -5
  258. qiskit/transpiler/passes/basis/unroll_3q_or_more.py +1 -1
  259. qiskit/transpiler/passes/basis/unroll_custom_definitions.py +10 -10
  260. qiskit/transpiler/passes/calibration/rx_builder.py +3 -3
  261. qiskit/transpiler/passes/calibration/rzx_builder.py +3 -3
  262. qiskit/transpiler/passes/layout/apply_layout.py +13 -3
  263. qiskit/transpiler/passes/layout/sabre_layout.py +10 -8
  264. qiskit/transpiler/passes/layout/sabre_pre_layout.py +4 -1
  265. qiskit/transpiler/passes/layout/set_layout.py +2 -2
  266. qiskit/transpiler/passes/layout/vf2_layout.py +1 -1
  267. qiskit/transpiler/passes/layout/vf2_utils.py +3 -3
  268. qiskit/transpiler/passes/optimization/__init__.py +1 -0
  269. qiskit/transpiler/passes/optimization/collect_cliffords.py +6 -15
  270. qiskit/transpiler/passes/optimization/collect_multiqubit_blocks.py +2 -2
  271. qiskit/transpiler/passes/optimization/commutation_analysis.py +7 -10
  272. qiskit/transpiler/passes/optimization/commutative_cancellation.py +35 -19
  273. qiskit/transpiler/passes/optimization/consolidate_blocks.py +17 -8
  274. qiskit/transpiler/passes/optimization/inverse_cancellation.py +6 -6
  275. qiskit/transpiler/passes/optimization/optimize_1q_decomposition.py +64 -41
  276. qiskit/transpiler/passes/optimization/optimize_1q_gates.py +1 -1
  277. qiskit/transpiler/passes/optimization/split_2q_unitaries.py +83 -0
  278. qiskit/transpiler/passes/optimization/template_matching/backward_match.py +1 -1
  279. qiskit/transpiler/passes/optimization/template_matching/forward_match.py +2 -2
  280. qiskit/transpiler/passes/optimization/template_matching/template_substitution.py +1 -1
  281. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/commuting_2q_gate_router.py +3 -2
  282. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/pauli_2q_evolution_commutation.py +5 -1
  283. qiskit/transpiler/passes/routing/commuting_2q_gate_routing/swap_strategy.py +1 -1
  284. qiskit/transpiler/passes/routing/layout_transformation.py +2 -1
  285. qiskit/transpiler/passes/routing/sabre_swap.py +35 -26
  286. qiskit/transpiler/passes/routing/star_prerouting.py +80 -105
  287. qiskit/transpiler/passes/routing/stochastic_swap.py +1 -3
  288. qiskit/transpiler/passes/scheduling/alap.py +1 -2
  289. qiskit/transpiler/passes/scheduling/alignments/__init__.py +2 -2
  290. qiskit/transpiler/passes/scheduling/alignments/check_durations.py +1 -1
  291. qiskit/transpiler/passes/scheduling/alignments/pulse_gate_validation.py +2 -2
  292. qiskit/transpiler/passes/scheduling/alignments/reschedule.py +1 -1
  293. qiskit/transpiler/passes/scheduling/asap.py +1 -2
  294. qiskit/transpiler/passes/scheduling/base_scheduler.py +5 -5
  295. qiskit/transpiler/passes/scheduling/dynamical_decoupling.py +3 -3
  296. qiskit/transpiler/passes/scheduling/padding/base_padding.py +1 -1
  297. qiskit/transpiler/passes/scheduling/padding/dynamical_decoupling.py +20 -14
  298. qiskit/transpiler/passes/scheduling/scheduling/base_scheduler.py +7 -6
  299. qiskit/transpiler/passes/scheduling/time_unit_conversion.py +4 -3
  300. qiskit/transpiler/passes/synthesis/high_level_synthesis.py +211 -36
  301. qiskit/transpiler/passes/synthesis/plugin.py +2 -2
  302. qiskit/transpiler/passes/synthesis/unitary_synthesis.py +83 -40
  303. qiskit/transpiler/passes/utils/__init__.py +0 -1
  304. qiskit/transpiler/passes/utils/check_gate_direction.py +4 -4
  305. qiskit/transpiler/passes/utils/check_map.py +3 -6
  306. qiskit/transpiler/passes/utils/convert_conditions_to_if_ops.py +3 -4
  307. qiskit/transpiler/passes/utils/error.py +2 -2
  308. qiskit/transpiler/passes/utils/fixed_point.py +3 -3
  309. qiskit/transpiler/passes/utils/gate_direction.py +1 -1
  310. qiskit/transpiler/passes/utils/gates_basis.py +1 -2
  311. qiskit/transpiler/passmanager.py +7 -6
  312. qiskit/transpiler/preset_passmanagers/__init__.py +4 -228
  313. qiskit/transpiler/preset_passmanagers/builtin_plugins.py +73 -18
  314. qiskit/transpiler/preset_passmanagers/common.py +3 -6
  315. qiskit/transpiler/preset_passmanagers/generate_preset_pass_manager.py +518 -0
  316. qiskit/transpiler/preset_passmanagers/level0.py +1 -1
  317. qiskit/transpiler/target.py +27 -8
  318. qiskit/user_config.py +29 -6
  319. qiskit/utils/classtools.py +3 -3
  320. qiskit/utils/deprecation.py +3 -2
  321. qiskit/utils/lazy_tester.py +2 -2
  322. qiskit/utils/optionals.py +8 -8
  323. qiskit/visualization/bloch.py +62 -24
  324. qiskit/visualization/circuit/_utils.py +34 -10
  325. qiskit/visualization/circuit/circuit_visualization.py +23 -16
  326. qiskit/visualization/circuit/latex.py +29 -27
  327. qiskit/visualization/circuit/matplotlib.py +4 -2
  328. qiskit/visualization/circuit/qcstyle.py +2 -2
  329. qiskit/visualization/circuit/text.py +9 -15
  330. qiskit/visualization/dag_visualization.py +12 -5
  331. qiskit/visualization/pass_manager_visualization.py +9 -9
  332. qiskit/visualization/pulse_v2/core.py +1 -1
  333. qiskit/visualization/pulse_v2/events.py +1 -1
  334. qiskit/visualization/pulse_v2/generators/frame.py +3 -4
  335. qiskit/visualization/pulse_v2/generators/waveform.py +5 -9
  336. qiskit/visualization/pulse_v2/layouts.py +1 -5
  337. qiskit/visualization/pulse_v2/plotters/matplotlib.py +1 -2
  338. qiskit/visualization/state_visualization.py +5 -6
  339. qiskit/visualization/timeline/plotters/matplotlib.py +1 -2
  340. qiskit/visualization/transition_visualization.py +7 -2
  341. {qiskit-1.1.1.dist-info → qiskit-1.2.0.dist-info}/METADATA +28 -28
  342. {qiskit-1.1.1.dist-info → qiskit-1.2.0.dist-info}/RECORD +346 -344
  343. {qiskit-1.1.1.dist-info → qiskit-1.2.0.dist-info}/WHEEL +1 -1
  344. {qiskit-1.1.1.dist-info → qiskit-1.2.0.dist-info}/entry_points.txt +3 -0
  345. qiskit/transpiler/passes/utils/block_to_matrix.py +0 -47
  346. {qiskit-1.1.1.dist-info → qiskit-1.2.0.dist-info}/LICENSE.txt +0 -0
  347. {qiskit-1.1.1.dist-info → qiskit-1.2.0.dist-info}/top_level.txt +0 -0
@@ -66,12 +66,9 @@ class QuantumChannel(LinearOp):
66
66
  def __repr__(self):
67
67
  prefix = f"{self._channel_rep}("
68
68
  pad = len(prefix) * " "
69
- return "{}{},\n{}input_dims={}, output_dims={})".format(
70
- prefix,
71
- np.array2string(np.asarray(self.data), separator=", ", prefix=prefix),
72
- pad,
73
- self.input_dims(),
74
- self.output_dims(),
69
+ return (
70
+ f"{prefix}{np.array2string(np.asarray(self.data), separator=', ', prefix=prefix)}"
71
+ f",\n{pad}input_dims={self.input_dims()}, output_dims={self.output_dims()})"
75
72
  )
76
73
 
77
74
  def __eq__(self, other: Self):
@@ -355,8 +355,8 @@ class SuperOp(QuantumChannel):
355
355
  raise QiskitError(f"Cannot apply Instruction: {obj.name}")
356
356
  if not isinstance(obj.definition, QuantumCircuit):
357
357
  raise QiskitError(
358
- "{} instruction definition is {}; "
359
- "expected QuantumCircuit".format(obj.name, type(obj.definition))
358
+ f"{obj.name} instruction definition is {type(obj.definition)}; "
359
+ "expected QuantumCircuit"
360
360
  )
361
361
  qubit_indices = {bit: idx for idx, bit in enumerate(obj.definition.qubits)}
362
362
  for instruction in obj.definition.data:
@@ -228,7 +228,7 @@ def _choi_to_kraus(data, input_dim, output_dim, atol=ATOL_DEFAULT):
228
228
  # This should be a call to la.eigh, but there is an OpenBlas
229
229
  # threading issue that is causing segfaults.
230
230
  # Need schur here since la.eig does not
231
- # guarentee orthogonality in degenerate subspaces
231
+ # guarantee orthogonality in degenerate subspaces
232
232
  w, v = la.schur(data, output="complex")
233
233
  w = w.diagonal().real
234
234
  # Check eigenvalues are non-negative
@@ -97,7 +97,7 @@ class CNOTDihedral(BaseOperator, AdjointMixin):
97
97
  with optimal number of two qubit gates*, `Quantum 4(369), 2020
98
98
  <https://quantum-journal.org/papers/q-2020-12-07-369/>`_
99
99
  2. Andrew W. Cross, Easwar Magesan, Lev S. Bishop, John A. Smolin and Jay M. Gambetta,
100
- *Scalable randomised benchmarking of non-Clifford gates*,
100
+ *Scalable randomized benchmarking of non-Clifford gates*,
101
101
  npj Quantum Inf 2, 16012 (2016).
102
102
  """
103
103
 
@@ -325,7 +325,7 @@ class CNOTDihedral(BaseOperator, AdjointMixin):
325
325
  with optimal number of two qubit gates*, `Quantum 4(369), 2020
326
326
  <https://quantum-journal.org/papers/q-2020-12-07-369/>`_
327
327
  2. Andrew W. Cross, Easwar Magesan, Lev S. Bishop, John A. Smolin and Jay M. Gambetta,
328
- *Scalable randomised benchmarking of non-Clifford gates*,
328
+ *Scalable randomized benchmarking of non-Clifford gates*,
329
329
  npj Quantum Inf 2, 16012 (2016).
330
330
  """
331
331
  # pylint: disable=cyclic-import
@@ -452,8 +452,7 @@ class CNOTDihedral(BaseOperator, AdjointMixin):
452
452
  new_qubits = [bit_indices[tup] for tup in instruction.qubits]
453
453
  if instruction.operation.name == "p":
454
454
  params = 2 * np.pi - instruction.operation.params[0]
455
- instruction.operation.params[0] = params
456
- new_circ.append(instruction.operation, new_qubits)
455
+ new_circ.p(params, new_qubits)
457
456
  elif instruction.operation.name == "t":
458
457
  instruction.operation.name = "tdg"
459
458
  new_circ.append(instruction.operation, new_qubits)
@@ -92,9 +92,7 @@ def _append_circuit(elem, circuit, qargs=None):
92
92
  raise QiskitError(f"Cannot apply Instruction: {gate.name}")
93
93
  if not isinstance(gate.definition, QuantumCircuit):
94
94
  raise QiskitError(
95
- "{} instruction definition is {}; expected QuantumCircuit".format(
96
- gate.name, type(gate.definition)
97
- )
95
+ f"{gate.name} instruction definition is {type(gate.definition)}; expected QuantumCircuit"
98
96
  )
99
97
 
100
98
  flat_instr = gate.definition
@@ -1,6 +1,6 @@
1
1
  # This code is part of Qiskit.
2
2
  #
3
- # (C) Copyright IBM 2019, 2021.
3
+ # (C) Copyright IBM 2019, 2024.
4
4
  #
5
5
  # This code is licensed under the Apache License, Version 2.0. You may
6
6
  # obtain a copy of this license in the LICENSE.txt file in the root directory
@@ -49,9 +49,12 @@ def random_cnotdihedral(num_qubits, seed=None):
49
49
 
50
50
  # Random affine function
51
51
  # Random invertible binary matrix
52
- from qiskit.synthesis.linear import random_invertible_binary_matrix
52
+ from qiskit.synthesis.linear import ( # pylint: disable=cyclic-import
53
+ random_invertible_binary_matrix,
54
+ )
53
55
 
54
- linear = random_invertible_binary_matrix(num_qubits, seed=rng)
56
+ seed = rng.integers(100000, size=1, dtype=np.uint64)[0]
57
+ linear = random_invertible_binary_matrix(num_qubits, seed=seed).astype(int, copy=False)
55
58
  elem.linear = linear
56
59
 
57
60
  # Random shift
@@ -93,7 +93,7 @@ def process_fidelity(
93
93
  if channel.dim != target.dim:
94
94
  raise QiskitError(
95
95
  "Input quantum channel and target unitary must have the same "
96
- "dimensions ({} != {}).".format(channel.dim, target.dim)
96
+ f"dimensions ({channel.dim} != {target.dim})."
97
97
  )
98
98
 
99
99
  # Validate complete-positivity and trace-preserving
@@ -316,7 +316,7 @@ def diamond_norm(choi: Choi | QuantumChannel, solver: str = "SCS", **kwargs) ->
316
316
  iden = sparse.eye(dim_out)
317
317
 
318
318
  # Watrous uses row-vec convention for his Choi matrix while we use
319
- # col-vec. It turns out row-vec convention is requried for CVXPY too
319
+ # col-vec. It turns out row-vec convention is required for CVXPY too
320
320
  # since the cvxpy.kron function must have a constant as its first argument.
321
321
  c_r = cvxpy.bmat([[cvxpy.kron(iden, r0_r), x_r], [x_r.T, cvxpy.kron(iden, r1_r)]])
322
322
  c_i = cvxpy.bmat([[cvxpy.kron(iden, r0_i), x_i], [-x_i.T, cvxpy.kron(iden, r1_i)]])
@@ -193,7 +193,7 @@ class OpShape:
193
193
  if raise_exception:
194
194
  raise QiskitError(
195
195
  "Output dimensions do not match matrix shape "
196
- "({} != {})".format(reduce(mul, self._dims_l), shape[0])
196
+ f"({reduce(mul, self._dims_l)} != {shape[0]})"
197
197
  )
198
198
  return False
199
199
  elif shape[0] != 2**self._num_qargs_l:
@@ -207,7 +207,7 @@ class OpShape:
207
207
  if raise_exception:
208
208
  raise QiskitError(
209
209
  "Input dimensions do not match matrix shape "
210
- "({} != {})".format(reduce(mul, self._dims_r), shape[1])
210
+ f"({reduce(mul, self._dims_r)} != {shape[1]})"
211
211
  )
212
212
  return False
213
213
  elif shape[1] != 2**self._num_qargs_r:
@@ -430,7 +430,7 @@ class OpShape:
430
430
  if self._num_qargs_r != other._num_qargs_l or self._dims_r != other._dims_l:
431
431
  raise QiskitError(
432
432
  "Left and right compose dimensions don't match "
433
- "({} != {})".format(self.dims_r(), other.dims_l())
433
+ f"({self.dims_r()} != {other.dims_l()})"
434
434
  )
435
435
  ret._dims_l = self._dims_l
436
436
  ret._dims_r = other._dims_r
@@ -440,7 +440,7 @@ class OpShape:
440
440
  if self._num_qargs_l != other._num_qargs_r or self._dims_l != other._dims_r:
441
441
  raise QiskitError(
442
442
  "Left and right compose dimensions don't match "
443
- "({} != {})".format(self.dims_l(), other.dims_r())
443
+ f"({self.dims_l()} != {other.dims_r()})"
444
444
  )
445
445
  ret._dims_l = other._dims_l
446
446
  ret._dims_r = self._dims_r
@@ -453,15 +453,13 @@ class OpShape:
453
453
  ret._num_qargs_l = self._num_qargs_l
454
454
  if len(qargs) != other._num_qargs_l:
455
455
  raise QiskitError(
456
- "Number of qargs does not match ({} != {})".format(
457
- len(qargs), other._num_qargs_l
458
- )
456
+ f"Number of qargs does not match ({len(qargs)} != {other._num_qargs_l})"
459
457
  )
460
458
  if self._dims_r or other._dims_r:
461
459
  if self.dims_r(qargs) != other.dims_l():
462
460
  raise QiskitError(
463
461
  "Subsystem dimension do not match on specified qargs "
464
- "{} != {}".format(self.dims_r(qargs), other.dims_l())
462
+ f"{self.dims_r(qargs)} != {other.dims_l()}"
465
463
  )
466
464
  dims_r = list(self.dims_r())
467
465
  for i, dim in zip(qargs, other.dims_r()):
@@ -475,15 +473,13 @@ class OpShape:
475
473
  ret._num_qargs_r = self._num_qargs_r
476
474
  if len(qargs) != other._num_qargs_r:
477
475
  raise QiskitError(
478
- "Number of qargs does not match ({} != {})".format(
479
- len(qargs), other._num_qargs_r
480
- )
476
+ f"Number of qargs does not match ({len(qargs)} != {other._num_qargs_r})"
481
477
  )
482
478
  if self._dims_l or other._dims_l:
483
479
  if self.dims_l(qargs) != other.dims_r():
484
480
  raise QiskitError(
485
481
  "Subsystem dimension do not match on specified qargs "
486
- "{} != {}".format(self.dims_l(qargs), other.dims_r())
482
+ f"{self.dims_l(qargs)} != {other.dims_r()}"
487
483
  )
488
484
  dims_l = list(self.dims_l())
489
485
  for i, dim in zip(qargs, other.dims_l()):
@@ -508,26 +504,22 @@ class OpShape:
508
504
  if self.dims_l(qargs) != other.dims_l():
509
505
  raise QiskitError(
510
506
  "Cannot add shapes width different left "
511
- "dimension on specified qargs {} != {}".format(
512
- self.dims_l(qargs), other.dims_l()
513
- )
507
+ f"dimension on specified qargs {self.dims_l(qargs)} != {other.dims_l()}"
514
508
  )
515
509
  if self.dims_r(qargs) != other.dims_r():
516
510
  raise QiskitError(
517
511
  "Cannot add shapes width different total right "
518
- "dimension on specified qargs{} != {}".format(
519
- self.dims_r(qargs), other.dims_r()
520
- )
512
+ f"dimension on specified qargs{self.dims_r(qargs)} != {other.dims_r()}"
521
513
  )
522
514
  elif self != other:
523
515
  if self._dim_l != other._dim_l:
524
516
  raise QiskitError(
525
517
  "Cannot add shapes width different total left "
526
- "dimension {} != {}".format(self._dim_l, other._dim_l)
518
+ f"dimension {self._dim_l} != {other._dim_l}"
527
519
  )
528
520
  if self._dim_r != other._dim_r:
529
521
  raise QiskitError(
530
522
  "Cannot add shapes width different total right "
531
- "dimension {} != {}".format(self._dim_r, other._dim_r)
523
+ f"dimension {self._dim_r} != {other._dim_r}"
532
524
  )
533
525
  return self
@@ -128,12 +128,9 @@ class Operator(LinearOp):
128
128
  def __repr__(self):
129
129
  prefix = "Operator("
130
130
  pad = len(prefix) * " "
131
- return "{}{},\n{}input_dims={}, output_dims={})".format(
132
- prefix,
133
- np.array2string(self.data, separator=", ", prefix=prefix),
134
- pad,
135
- self.input_dims(),
136
- self.output_dims(),
131
+ return (
132
+ f"{prefix}{np.array2string(self.data, separator=', ', prefix=prefix)},\n"
133
+ f"{pad}input_dims={self.input_dims()}, output_dims={self.output_dims()})"
137
134
  )
138
135
 
139
136
  def __eq__(self, other):
@@ -414,6 +411,8 @@ class Operator(LinearOp):
414
411
 
415
412
  from qiskit.synthesis.permutation.permutation_utils import _inverse_pattern
416
413
 
414
+ op = Operator(circuit)
415
+
417
416
  if initial_layout is not None:
418
417
  input_qubits = [None] * len(layout.input_qubit_mapping)
419
418
  for q, p in layout.input_qubit_mapping.items():
@@ -421,22 +420,18 @@ class Operator(LinearOp):
421
420
 
422
421
  initial_permutation = initial_layout.to_permutation(input_qubits)
423
422
  initial_permutation_inverse = _inverse_pattern(initial_permutation)
423
+ op = op.apply_permutation(initial_permutation, True)
424
424
 
425
- if final_layout is not None:
425
+ if final_layout is not None:
426
+ final_permutation = final_layout.to_permutation(circuit.qubits)
427
+ final_permutation_inverse = _inverse_pattern(final_permutation)
428
+ op = op.apply_permutation(final_permutation_inverse, False)
429
+ op = op.apply_permutation(initial_permutation_inverse, False)
430
+ elif final_layout is not None:
426
431
  final_permutation = final_layout.to_permutation(circuit.qubits)
427
432
  final_permutation_inverse = _inverse_pattern(final_permutation)
428
-
429
- op = Operator(circuit)
430
-
431
- if initial_layout:
432
- op = op.apply_permutation(initial_permutation, True)
433
-
434
- if final_layout:
435
433
  op = op.apply_permutation(final_permutation_inverse, False)
436
434
 
437
- if initial_layout:
438
- op = op.apply_permutation(initial_permutation_inverse, False)
439
-
440
435
  return op
441
436
 
442
437
  def is_unitary(self, atol=None, rtol=None):
@@ -765,10 +760,8 @@ class Operator(LinearOp):
765
760
  raise QiskitError(f"Cannot apply Operation: {obj.name}")
766
761
  if not isinstance(obj.definition, QuantumCircuit):
767
762
  raise QiskitError(
768
- 'Operation "{}" '
769
- "definition is {} but expected QuantumCircuit.".format(
770
- obj.name, type(obj.definition)
771
- )
763
+ f'Operation "{obj.name}" '
764
+ f"definition is {type(obj.definition)} but expected QuantumCircuit."
772
765
  )
773
766
  if obj.definition.global_phase:
774
767
  dimension = 2**obj.num_qubits
@@ -22,6 +22,7 @@ RTOL_DEFAULT = 1e-5
22
22
 
23
23
 
24
24
  def matrix_equal(mat1, mat2, ignore_phase=False, rtol=RTOL_DEFAULT, atol=ATOL_DEFAULT, props=None):
25
+ # pylint: disable-next=consider-using-f-string
25
26
  """Test if two arrays are equal.
26
27
 
27
28
  The final comparison is implemented using Numpy.allclose. See its
@@ -215,12 +215,12 @@ class BasePauli(BaseOperator, AdjointMixin, MultiplyMixin):
215
215
  if qargs is not None and len(qargs) != other.num_qubits:
216
216
  raise QiskitError(
217
217
  "Number of qubits of other Pauli does not match number of "
218
- "qargs ({} != {}).".format(other.num_qubits, len(qargs))
218
+ f"qargs ({other.num_qubits} != {len(qargs)})."
219
219
  )
220
220
  if qargs is None and self.num_qubits != other.num_qubits:
221
221
  raise QiskitError(
222
222
  "Number of qubits of other Pauli does not match the current "
223
- "Pauli ({} != {}).".format(other.num_qubits, self.num_qubits)
223
+ f"Pauli ({other.num_qubits} != {self.num_qubits})."
224
224
  )
225
225
  if qargs is not None:
226
226
  inds = list(qargs)
@@ -262,15 +262,12 @@ class BasePauli(BaseOperator, AdjointMixin, MultiplyMixin):
262
262
  # Check dimension
263
263
  if qargs is not None and len(qargs) != other.num_qubits:
264
264
  raise QiskitError(
265
- "Incorrect number of qubits for Clifford circuit ({} != {}).".format(
266
- other.num_qubits, len(qargs)
267
- )
265
+ f"Incorrect number of qubits for Clifford circuit ({other.num_qubits} != {len(qargs)})."
268
266
  )
269
267
  if qargs is None and self.num_qubits != other.num_qubits:
270
268
  raise QiskitError(
271
- "Incorrect number of qubits for Clifford circuit ({} != {}).".format(
272
- other.num_qubits, self.num_qubits
273
- )
269
+ f"Incorrect number of qubits for Clifford circuit "
270
+ f"({other.num_qubits} != {self.num_qubits})."
274
271
  )
275
272
 
276
273
  # Evolve via Pauli
@@ -571,9 +568,8 @@ class BasePauli(BaseOperator, AdjointMixin, MultiplyMixin):
571
568
  raise QiskitError(f"Cannot apply Instruction: {gate.name}")
572
569
  if not isinstance(gate.definition, QuantumCircuit):
573
570
  raise QiskitError(
574
- "{} instruction definition is {}; expected QuantumCircuit".format(
575
- gate.name, type(gate.definition)
576
- )
571
+ f"{gate.name} instruction definition is {type(gate.definition)};"
572
+ f" expected QuantumCircuit"
577
573
  )
578
574
 
579
575
  circuit = gate.definition
@@ -185,7 +185,7 @@ class Clifford(BaseOperator, AdjointMixin, Operation):
185
185
  isinstance(data, (list, np.ndarray))
186
186
  and (data_asarray := np.asarray(data, dtype=bool)).ndim == 2
187
187
  ):
188
- # This little dance is to avoid Numpy 1/2 incompatiblities between the availability
188
+ # This little dance is to avoid Numpy 1/2 incompatibilities between the availability
189
189
  # and meaning of the 'copy' argument in 'array' and 'asarray', when the input needs
190
190
  # its dtype converting. 'asarray' prefers to return 'self' if possible in both.
191
191
  if copy and np.may_share_memory(data, data_asarray):
@@ -77,7 +77,7 @@ class Pauli(BasePauli):
77
77
 
78
78
  An :math:`n`-qubit Pauli may be represented by a string consisting of
79
79
  :math:`n` characters from ``['I', 'X', 'Y', 'Z']``, and optionally phase
80
- coefficient in :math:`['', '-i', '-', 'i']`. For example: ``XYZ`` or
80
+ coefficient in ``['', '-i', '-', 'i']``. For example: ``'XYZ'`` or
81
81
  ``'-iZIZ'``.
82
82
 
83
83
  In the string representation qubit-0 corresponds to the right-most
@@ -160,21 +160,23 @@ class Pauli(BasePauli):
160
160
  _CANONICAL_PHASE_LABEL = {"": 0, "-i": 1, "-": 2, "i": 3}
161
161
 
162
162
  def __init__(self, data: str | tuple | Pauli | ScalarOp | QuantumCircuit | None = None):
163
- """Initialize the Pauli.
163
+ r"""Initialize the Pauli.
164
164
 
165
165
  When using the symplectic array input data both z and x arguments must
166
166
  be provided, however the first (z) argument can be used alone for string
167
- label, Pauli operator, or ScalarOp input data.
167
+ label, Pauli operator, or :class:`.ScalarOp` input data.
168
168
 
169
169
  Args:
170
170
  data (str or tuple or Pauli or ScalarOp): input data for Pauli. If input is
171
- a tuple it must be of the form ``(z, x)`` or (z, x, phase)`` where
172
- ``z`` and ``x`` are boolean Numpy arrays, and phase is an integer from Z_4.
171
+ a tuple it must be of the form ``(z, x)`` or ``(z, x, phase)`` where
172
+ ``z`` and ``x`` are boolean Numpy arrays, and phase is an integer from
173
+ :math:`\mathbb{Z}_4`.
173
174
  If input is a string, it must be a concatenation of a phase and a Pauli string
174
- (e.g. 'XYZ', '-iZIZ') where a phase string is a combination of at most three
175
- characters from ['+', '-', ''], ['1', ''], and ['i', 'j', ''] in this order,
176
- e.g. '', '-1j' while a Pauli string is 1 or more characters of 'I', 'X', 'Y' or 'Z',
177
- e.g. 'Z', 'XIYY'.
175
+ (e.g. ``'XYZ', '-iZIZ'``) where a phase string is a combination of at most three
176
+ characters from ``['+', '-', '']``, ``['1', '']``, and ``['i', 'j', '']`` in this order,
177
+ e.g. ``''``, ``'-1j'`` while a Pauli string is 1 or more
178
+ characters of ``'I'``, ``'X'``, ``'Y'``, or ``'Z'``,
179
+ e.g. ``'Z'``, ``'XIYY'``.
178
180
 
179
181
  Raises:
180
182
  QiskitError: if input array is invalid shape.
@@ -344,7 +346,7 @@ class Pauli(BasePauli):
344
346
  if max(qubits) > self.num_qubits - 1:
345
347
  raise QiskitError(
346
348
  "Qubit index is larger than the number of qubits "
347
- "({}>{}).".format(max(qubits), self.num_qubits - 1)
349
+ f"({max(qubits)}>{self.num_qubits - 1})."
348
350
  )
349
351
  if len(qubits) == self.num_qubits:
350
352
  raise QiskitError("Cannot delete all qubits of Pauli")
@@ -379,12 +381,12 @@ class Pauli(BasePauli):
379
381
  if len(qubits) != value.num_qubits:
380
382
  raise QiskitError(
381
383
  "Number of indices does not match number of qubits for "
382
- "the inserted Pauli ({}!={})".format(len(qubits), value.num_qubits)
384
+ f"the inserted Pauli ({len(qubits)}!={value.num_qubits})"
383
385
  )
384
386
  if max(qubits) > ret.num_qubits - 1:
385
387
  raise QiskitError(
386
388
  "Index is too larger for combined Pauli number of qubits "
387
- "({}>{}).".format(max(qubits), ret.num_qubits - 1)
389
+ f"({max(qubits)}>{ret.num_qubits - 1})."
388
390
  )
389
391
  # Qubit positions for original op
390
392
  self_qubits = [i for i in range(ret.num_qubits) if i not in qubits]
@@ -382,8 +382,8 @@ class PauliList(BasePauli, LinearMixin, GroupMixin):
382
382
  if not qubit:
383
383
  if max(ind) >= len(self):
384
384
  raise QiskitError(
385
- "Indices {} are not all less than the size"
386
- " of the PauliList ({})".format(ind, len(self))
385
+ f"Indices {ind} are not all less than the size"
386
+ f" of the PauliList ({len(self)})"
387
387
  )
388
388
  z = np.delete(self._z, ind, axis=0)
389
389
  x = np.delete(self._x, ind, axis=0)
@@ -394,8 +394,8 @@ class PauliList(BasePauli, LinearMixin, GroupMixin):
394
394
  # Column (qubit) deletion
395
395
  if max(ind) >= self.num_qubits:
396
396
  raise QiskitError(
397
- "Indices {} are not all less than the number of"
398
- " qubits in the PauliList ({})".format(ind, self.num_qubits)
397
+ f"Indices {ind} are not all less than the number of"
398
+ f" qubits in the PauliList ({self.num_qubits})"
399
399
  )
400
400
  z = np.delete(self._z, ind, axis=1)
401
401
  x = np.delete(self._x, ind, axis=1)
@@ -432,8 +432,7 @@ class PauliList(BasePauli, LinearMixin, GroupMixin):
432
432
  if not qubit:
433
433
  if ind > size:
434
434
  raise QiskitError(
435
- "Index {} is larger than the number of rows in the"
436
- " PauliList ({}).".format(ind, size)
435
+ f"Index {ind} is larger than the number of rows in the" f" PauliList ({size})."
437
436
  )
438
437
  base_z = np.insert(self._z, ind, value._z, axis=0)
439
438
  base_x = np.insert(self._x, ind, value._x, axis=0)
@@ -443,8 +442,8 @@ class PauliList(BasePauli, LinearMixin, GroupMixin):
443
442
  # Column insertion
444
443
  if ind > self.num_qubits:
445
444
  raise QiskitError(
446
- "Index {} is greater than number of qubits"
447
- " in the PauliList ({})".format(ind, self.num_qubits)
445
+ f"Index {ind} is greater than number of qubits"
446
+ f" in the PauliList ({self.num_qubits})"
448
447
  )
449
448
  if len(value) == 1:
450
449
  # Pad blocks to correct size
@@ -461,7 +460,7 @@ class PauliList(BasePauli, LinearMixin, GroupMixin):
461
460
  raise QiskitError(
462
461
  "Input PauliList must have a single row, or"
463
462
  " the same number of rows as the Pauli Table"
464
- " ({}).".format(size)
463
+ f" ({size})."
465
464
  )
466
465
  # Build new array by blocks
467
466
  z = np.hstack([self.z[:, :ind], value_z, self.z[:, ind:]])
@@ -647,7 +646,7 @@ class PauliList(BasePauli, LinearMixin, GroupMixin):
647
646
  index = index[sort_inds]
648
647
  unique = PauliList(BasePauli(self._z[index], self._x[index], self._phase[index]))
649
648
 
650
- # Concatinate return tuples
649
+ # Concatenate return tuples
651
650
  ret = (unique,)
652
651
  if return_index:
653
652
  ret += (index,)
@@ -163,7 +163,7 @@ def _sample_qmallows(n, rng=None):
163
163
  if rng is None:
164
164
  rng = np.random.default_rng()
165
165
 
166
- # Hadmard layer
166
+ # Hadamard layer
167
167
  had = np.zeros(n, dtype=bool)
168
168
 
169
169
  # Permutation layer
@@ -135,19 +135,19 @@ class SparsePauliOp(LinearOp):
135
135
 
136
136
  pauli_list = PauliList(data.copy() if copy and hasattr(data, "copy") else data)
137
137
 
138
- if isinstance(coeffs, np.ndarray):
139
- dtype = object if coeffs.dtype == object else complex
140
- elif coeffs is not None:
141
- if not isinstance(coeffs, (np.ndarray, Sequence)):
142
- coeffs = [coeffs]
143
- if any(isinstance(coeff, ParameterExpression) for coeff in coeffs):
144
- dtype = object
145
- else:
146
- dtype = complex
147
-
148
138
  if coeffs is None:
149
139
  coeffs = np.ones(pauli_list.size, dtype=complex)
150
140
  else:
141
+ if isinstance(coeffs, np.ndarray):
142
+ dtype = object if coeffs.dtype == object else complex
143
+ else:
144
+ if not isinstance(coeffs, Sequence):
145
+ coeffs = [coeffs]
146
+ if any(isinstance(coeff, ParameterExpression) for coeff in coeffs):
147
+ dtype = object
148
+ else:
149
+ dtype = complex
150
+
151
151
  coeffs_asarray = np.asarray(coeffs, dtype=dtype)
152
152
  coeffs = (
153
153
  coeffs_asarray.copy()
@@ -172,7 +172,7 @@ class SparsePauliOp(LinearOp):
172
172
  if self._coeffs.shape != (self._pauli_list.size,):
173
173
  raise QiskitError(
174
174
  "coeff vector is incorrect shape for number"
175
- " of Paulis {} != {}".format(self._coeffs.shape, self._pauli_list.size)
175
+ f" of Paulis {self._coeffs.shape} != {self._pauli_list.size}"
176
176
  )
177
177
  # Initialize LinearOp
178
178
  super().__init__(num_qubits=self._pauli_list.num_qubits)
@@ -186,11 +186,9 @@ class SparsePauliOp(LinearOp):
186
186
  def __repr__(self):
187
187
  prefix = "SparsePauliOp("
188
188
  pad = len(prefix) * " "
189
- return "{}{},\n{}coeffs={})".format(
190
- prefix,
191
- self.paulis.to_labels(),
192
- pad,
193
- np.array2string(self.coeffs, separator=", "),
189
+ return (
190
+ f"{prefix}{self.paulis.to_labels()},\n{pad}"
191
+ f"coeffs={np.array2string(self.coeffs, separator=', ')})"
194
192
  )
195
193
 
196
194
  def __eq__(self, other):
@@ -939,7 +937,7 @@ class SparsePauliOp(LinearOp):
939
937
  array (the default).
940
938
  force_serial: if ``True``, use an unthreaded implementation, regardless of the state of
941
939
  the `Qiskit threading-control environment variables
942
- <https://docs.quantum.ibm.com/start/configure-qiskit-local#environment-variables>`__.
940
+ <https://docs.quantum.ibm.com/guides/configure-qiskit-local#environment-variables>`__.
943
941
  By default, this will use threaded parallelism over the available CPUs.
944
942
 
945
943
  Returns:
@@ -43,7 +43,7 @@ class Quaternion:
43
43
  out_data[3] = r(0) * q(3) - r(1) * q(2) + r(2) * q(1) + r(3) * q(0)
44
44
  return Quaternion(out_data)
45
45
  else:
46
- raise Exception("Multiplication by other not supported.")
46
+ return NotImplemented
47
47
 
48
48
  def norm(self):
49
49
  """Norm of quaternion."""
@@ -123,11 +123,9 @@ class DensityMatrix(QuantumState, TolerancesMixin):
123
123
  def __repr__(self):
124
124
  prefix = "DensityMatrix("
125
125
  pad = len(prefix) * " "
126
- return "{}{},\n{}dims={})".format(
127
- prefix,
128
- np.array2string(self._data, separator=", ", prefix=prefix),
129
- pad,
130
- self._op_shape.dims_l(),
126
+ return (
127
+ f"{prefix}{np.array2string(self._data, separator=', ', prefix=prefix)},\n"
128
+ f"{pad}dims={self._op_shape.dims_l()})"
131
129
  )
132
130
 
133
131
  @property
@@ -771,9 +769,8 @@ class DensityMatrix(QuantumState, TolerancesMixin):
771
769
  raise QiskitError(f"Cannot apply Instruction: {other.name}")
772
770
  if not isinstance(other.definition, QuantumCircuit):
773
771
  raise QiskitError(
774
- "{} instruction definition is {}; expected QuantumCircuit".format(
775
- other.name, type(other.definition)
776
- )
772
+ f"{other.name} instruction definition is {type(other.definition)};"
773
+ f" expected QuantumCircuit"
777
774
  )
778
775
  qubit_indices = {bit: idx for idx, bit in enumerate(other.definition.qubits)}
779
776
  for instruction in other.definition: