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 Barrier broadcast arguments #11113

Merged
merged 1 commit into from
Oct 25, 2023
Merged

Conversation

mtreinish
Copy link
Member

Summary

This commit fixes an issue with the Barrier class's broadcast_arguments() method. Previously the Barrier class was overriding broadcast_arguments(), however this custom implementation resulted in an identical output to the Instruction's implementation (its parent class) but stripped out all the error checking to determine if the arguments aligned with the size of the instruction. This could result in creating a corrupt circuit that had a mismatch between the barrier width and the number of qargs. For example:

circuit = QuantumCircuit(1)
circuit.append(Barrier(42), [0])

would not error despite trying to add a 42 qubit barrier on qubit 0. This would result in weird errors such as invalid qpy generation that are confusing to debug. This commit fixes this by deleting the broadcast_arguments() implementation for Barrier so it will just depend on the inherited implementation from Instruction which will return an identical result but check the instruction is valid.

Details and comments

@mtreinish mtreinish added stable backport potential The bug might be minimal and/or import enough to be port to stable Changelog: Bugfix Include in the "Fixed" section of the changelog labels Oct 25, 2023
@mtreinish mtreinish added this to the 0.45.0 milestone Oct 25, 2023
@mtreinish mtreinish requested a review from a team as a code owner October 25, 2023 18:49
@qiskit-bot
Copy link
Collaborator

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

  • @Qiskit/terra-core

@mtreinish mtreinish changed the title Fix Barrier.broadcase_arguments Fix Barrier broadcast arguments Oct 25, 2023
This commit fixes an issue with the Barrier class's
broadcast_arguments() method. Previously the Barrier class was
overriding broadcast_arguments(), however this custom implementation
resulted in an identical output to the Instruction's implementation
(its parent class) but stripped out all the error checking to determine
if the arguments aligned with the size of the instruction. This could
result in creating a corrupt circuit that had a mismatch between the
barrier width and the number of qargs. For example:

```
circuit = QuantumCircuit(1)
circuit.append(Barrier(42), [0])
```

would not error despite trying to add a 42 qubit barrier on qubit 0.
This would result in weird errors such as invalid qpy generation that
are confusing to debug. This commit fixes this by deleting the
broadcast_arguments() implementation for Barrier so it will just
depend on the inherited implementation from Instruction which will
return an identical result but check the instruction is valid.
Copy link
Member

@jakelishman jakelishman left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Seems generally sensible. I remember talking about this over a year ago, but I'm not really sure why argument broadcasting rules should be a property of Instruction instances at all. Removing a special case just seems like a good idea to me.

@coveralls
Copy link

Pull Request Test Coverage Report for Build 6644833211

  • 0 of 0 changed or added relevant lines in 0 files are covered.
  • 13 unchanged lines in 2 files lost coverage.
  • Overall coverage decreased (-0.005%) to 86.908%

Files with Coverage Reduction New Missed Lines %
crates/qasm2/src/parse.rs 6 97.6%
crates/qasm2/src/lex.rs 7 90.66%
Totals Coverage Status
Change from base Build 6642110371: -0.005%
Covered Lines: 73963
Relevant Lines: 85105

💛 - Coveralls

@jakelishman jakelishman added this pull request to the merge queue Oct 25, 2023
Merged via the queue into Qiskit:main with commit 5df2439 Oct 25, 2023
14 checks passed
mergify bot pushed a commit that referenced this pull request Oct 25, 2023
This commit fixes an issue with the Barrier class's
broadcast_arguments() method. Previously the Barrier class was
overriding broadcast_arguments(), however this custom implementation
resulted in an identical output to the Instruction's implementation
(its parent class) but stripped out all the error checking to determine
if the arguments aligned with the size of the instruction. This could
result in creating a corrupt circuit that had a mismatch between the
barrier width and the number of qargs. For example:

```
circuit = QuantumCircuit(1)
circuit.append(Barrier(42), [0])
```

would not error despite trying to add a 42 qubit barrier on qubit 0.
This would result in weird errors such as invalid qpy generation that
are confusing to debug. This commit fixes this by deleting the
broadcast_arguments() implementation for Barrier so it will just
depend on the inherited implementation from Instruction which will
return an identical result but check the instruction is valid.

(cherry picked from commit 5df2439)
github-merge-queue bot pushed a commit that referenced this pull request Oct 26, 2023
This commit fixes an issue with the Barrier class's
broadcast_arguments() method. Previously the Barrier class was
overriding broadcast_arguments(), however this custom implementation
resulted in an identical output to the Instruction's implementation
(its parent class) but stripped out all the error checking to determine
if the arguments aligned with the size of the instruction. This could
result in creating a corrupt circuit that had a mismatch between the
barrier width and the number of qargs. For example:

```
circuit = QuantumCircuit(1)
circuit.append(Barrier(42), [0])
```

would not error despite trying to add a 42 qubit barrier on qubit 0.
This would result in weird errors such as invalid qpy generation that
are confusing to debug. This commit fixes this by deleting the
broadcast_arguments() implementation for Barrier so it will just
depend on the inherited implementation from Instruction which will
return an identical result but check the instruction is valid.

(cherry picked from commit 5df2439)

Co-authored-by: Matthew Treinish <mtreinish@kortar.org>
@mtreinish mtreinish deleted the fix-barrier branch October 26, 2023 02:22
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 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.

4 participants