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
@@ -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):
@@ -346,7 +346,7 @@ class Pauli(BasePauli):
346
346
  if max(qubits) > self.num_qubits - 1:
347
347
  raise QiskitError(
348
348
  "Qubit index is larger than the number of qubits "
349
- "({}>{}).".format(max(qubits), self.num_qubits - 1)
349
+ f"({max(qubits)}>{self.num_qubits - 1})."
350
350
  )
351
351
  if len(qubits) == self.num_qubits:
352
352
  raise QiskitError("Cannot delete all qubits of Pauli")
@@ -381,12 +381,12 @@ class Pauli(BasePauli):
381
381
  if len(qubits) != value.num_qubits:
382
382
  raise QiskitError(
383
383
  "Number of indices does not match number of qubits for "
384
- "the inserted Pauli ({}!={})".format(len(qubits), value.num_qubits)
384
+ f"the inserted Pauli ({len(qubits)}!={value.num_qubits})"
385
385
  )
386
386
  if max(qubits) > ret.num_qubits - 1:
387
387
  raise QiskitError(
388
388
  "Index is too larger for combined Pauli number of qubits "
389
- "({}>{}).".format(max(qubits), ret.num_qubits - 1)
389
+ f"({max(qubits)}>{ret.num_qubits - 1})."
390
390
  )
391
391
  # Qubit positions for original op
392
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):
@@ -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: