Skip to content

Commit

Permalink
fix a corner case of SparsePauliOp.apply_layout
Browse files Browse the repository at this point in the history
  • Loading branch information
t-imamichi committed May 13, 2024
1 parent f20dad0 commit 49e96fa
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 0 deletions.
2 changes: 2 additions & 0 deletions qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py
Original file line number Diff line number Diff line change
Expand Up @@ -1165,6 +1165,8 @@ def apply_layout(
raise QiskitError("Provided layout contains indices outside the number of qubits.")
if len(set(layout)) != len(layout):
raise QiskitError("Provided layout contains duplicate indices.")
if self.num_qubits == 0:
return type(self)(["I" * n_qubits] * self.size, self.coeffs)
new_op = type(self)("I" * n_qubits)
return new_op.compose(self, qargs=layout)

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
fixes:
- |
Fixed :meth:`~.SparsePauliOp.apply_layout` to work correctly with zero-qubit operators.
Original file line number Diff line number Diff line change
Expand Up @@ -1191,6 +1191,25 @@ def test_apply_layout_duplicate_indices(self):
with self.assertRaises(QiskitError):
op.apply_layout(layout=[0, 0], num_qubits=3)

def test_apply_layout_zero_qubit(self):
"""Test apply_layout with a zero-qubit operator"""
with self.subTest("default"):
op = SparsePauliOp("")
res = op.apply_layout(layout=None, num_qubits=5)
self.assertEqual(SparsePauliOp("IIIII"), res)
with self.subTest("coeff"):
op = SparsePauliOp("", 2)
res = op.apply_layout(layout=None, num_qubits=5)
self.assertEqual(SparsePauliOp("IIIII", 2), res)
with self.subTest("layout"):
op = SparsePauliOp("")
res = op.apply_layout(layout=[], num_qubits=5)
self.assertEqual(SparsePauliOp("IIIII"), res)
with self.subTest("multiple ops"):
op = SparsePauliOp.from_list([("", 1), ("", 2)])
res = op.apply_layout(layout=None, num_qubits=5)
self.assertEqual(SparsePauliOp.from_list([("IIIII", 1), ("IIIII", 2)]), res)


if __name__ == "__main__":
unittest.main()

0 comments on commit 49e96fa

Please sign in to comment.