Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix a corner case of SparsePauliOp.apply_layout #12375

Merged
merged 4 commits into from
May 14, 2024

Conversation

t-imamichi
Copy link
Member

@t-imamichi t-imamichi commented May 9, 2024

Summary

SparsePauliOp.apply_layout raises an error if a zero-qubit operator is given.
This PR fixes the case.

from qiskit.quantum_info import SparsePauliOp

op = SparsePauliOp("")
print(op.apply_layout(None, 3))

main branch

SparsePauliOp([''],
              coeffs=[1.+0.j])
Traceback (most recent call last):
  File "/Users/ima/tasks/4_2024/qiskit/terra/tmp/layout.py", line 5, in <module>
    print(op.apply_layout(None, 3))
  File "/Users/ima/tasks/4_2024/qiskit/terra/qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py", line 1167, in apply_layout
    return new_op.compose(self, qargs=layout)
  File "/Users/ima/tasks/4_2024/qiskit/terra/qiskit/quantum_info/operators/symplectic/sparse_pauli_op.py", line 349, in compose
    q = np.logical_and(z1[:, np.newaxis], x2).reshape((-1, num_qubits))
ValueError: cannot reshape array of size 0 into shape (0)

this PR

SparsePauliOp(['III'],
              coeffs=[1.+0.j])

Although Pauli.apply_layout works correctly, I added the zero-qubit test cases to ensure it.

Details and comments

@t-imamichi t-imamichi requested a review from a team as a code owner May 9, 2024 03:17
@qiskit-bot
Copy link
Collaborator

One or more of the the following people are requested to review this:

  • @Qiskit/terra-core

@t-imamichi t-imamichi added Changelog: Bugfix Include in the "Fixed" section of the changelog mod: quantum info Related to the Quantum Info module (States & Operators) labels May 9, 2024
@coveralls
Copy link

coveralls commented May 9, 2024

Pull Request Test Coverage Report for Build 9081444739

Warning: This coverage report may be inaccurate.

This pull request's base commit is no longer the HEAD commit of its target branch. This means it includes changes from outside the original pull request, including, potentially, unrelated coverage changes.

Details

  • 2 of 2 (100.0%) changed or added relevant lines in 1 file are covered.
  • 21 unchanged lines in 2 files lost coverage.
  • Overall coverage increased (+0.02%) to 89.651%

Files with Coverage Reduction New Missed Lines %
qiskit/dagcircuit/dagnode.py 8 88.12%
crates/circuit/src/circuit_instruction.rs 13 87.59%
Totals Coverage Status
Change from base Build 9037095581: 0.02%
Covered Lines: 62323
Relevant Lines: 69517

💛 - Coveralls

@mtreinish mtreinish added this to the 1.1.0 milestone May 9, 2024
@t-imamichi
Copy link
Member Author

I noticed that I have to fix Pauli as well.

@t-imamichi
Copy link
Member Author

t-imamichi commented May 13, 2024

I confirmed that the current Pauli.apply_laytout works correctly. So, we don't have to update it. I just added tests to ensure it.

@ewinston
Copy link
Contributor

Looks good although maybe could be made briefer using @data like test_zero_qubit_pauli_construction above.

@t-imamichi
Copy link
Member Author

t-imamichi commented May 14, 2024

Thank you for your suggestion, Erick. I simplified this PR with combine.
I also applied isort to remove pylint: disable=wrong-import-order

@mtreinish mtreinish added the stable backport potential The bug might be minimal and/or import enough to be port to stable label May 14, 2024
@mtreinish mtreinish enabled auto-merge May 14, 2024 14:47
@mtreinish mtreinish added this pull request to the merge queue May 14, 2024
Merged via the queue into Qiskit:main with commit cea93a0 May 14, 2024
15 checks passed
mergify bot pushed a commit that referenced this pull request May 14, 2024
* fix a corner case of `SparsePauliOp.apply_layout`

* Add zero-qubit tests of Pauli.apply_layout

* use combine and apply isort

* Update releasenotes/notes/fix-sparse-pauli-op-apply-layout-zero-43b9e70f0d1536a6.yaml

---------

Co-authored-by: Matthew Treinish <mtreinish@kortar.org>
(cherry picked from commit cea93a0)
github-merge-queue bot pushed a commit that referenced this pull request May 14, 2024
* fix a corner case of `SparsePauliOp.apply_layout`

* Add zero-qubit tests of Pauli.apply_layout

* use combine and apply isort

* Update releasenotes/notes/fix-sparse-pauli-op-apply-layout-zero-43b9e70f0d1536a6.yaml

---------

Co-authored-by: Matthew Treinish <mtreinish@kortar.org>
(cherry picked from commit cea93a0)

Co-authored-by: Takashi Imamichi <31178928+t-imamichi@users.noreply.github.com>
@t-imamichi t-imamichi deleted the spo-apply_layout branch May 15, 2024 02:15
ElePT pushed a commit to ElePT/qiskit that referenced this pull request May 31, 2024
* fix a corner case of `SparsePauliOp.apply_layout`

* Add zero-qubit tests of Pauli.apply_layout

* use combine and apply isort

* Update releasenotes/notes/fix-sparse-pauli-op-apply-layout-zero-43b9e70f0d1536a6.yaml

---------

Co-authored-by: Matthew Treinish <mtreinish@kortar.org>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Changelog: Bugfix Include in the "Fixed" section of the changelog mod: quantum info Related to the Quantum Info module (States & Operators) stable backport potential The bug might be minimal and/or import enough to be port to stable
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants