Qiskit / qiskit

Qiskit is an open-source SDK for working with quantum computers at the level of extended quantum circuits, operators, and primitives.
https://www.ibm.com/quantum/qiskit
Apache License 2.0
5.28k stars 2.37k forks source link

Bug fix in `HoareOptimizer` (backport #13083) #13087

Closed mergify[bot] closed 2 months ago

mergify[bot] commented 2 months ago

Summary

Fixes #13079.

Detailed Comments

The problem was due to first simplifying a controlled-gate by removing its controls (in the example: the control qubit of a CX-gate is at |1>, allowing to replace the CX-gate by an X-gate), then incorrectly keeping track of the simplified gate (in order to store the new X-gate for later purposes, the code mutated the original CX-gate in some weird way).

The code was already using substitute_node_with_dag to replace the controlled-gate by the base-gate (I don't really like this, but I don't think we can use substitute_node as the simplified node has fewer qubits than the original node). To fix the problem, we can instead read off the simplified gate from substitute_node_with_dag's output.

While this fixes the immediate problem, the code in HoareOptimizer is very messy and quite possibly contains many other sources of bugs (for instance, I did not like the idea of iterating over the DAG's topological nodes, while removing and simplifying some of the nodes in-place) and not optimized for performance. A complete rewrite while porting to Rust would be ideal :).


This is an automatic backport of pull request #13083 done by Mergify.

qiskit-bot commented 2 months ago

Thank you for opening a new pull request.

Before your PR can be merged it will first need to pass continuous integration tests and be reviewed. Sometimes the review process can be slow, so please be patient.

While you're waiting, please feel free to review other open PRs. While only a subset of people are authorized to approve pull requests for merging, everyone is encouraged to review open pull requests. Doing reviews helps reduce the burden on the core team and helps make the project's code better for everyone.

One or more of the following people are relevant to this code:

coveralls commented 2 months ago

Pull Request Test Coverage Report for Build 10705682221

Details


Files with Coverage Reduction New Missed Lines %
crates/circuit/src/dag_node.rs 6 81.5%
crates/qasm2/src/lex.rs 6 91.98%
crates/circuit/src/circuit_instruction.rs 9 88.51%
crates/qasm2/src/parse.rs 24 95.77%
<!-- Total: 45 -->
Totals Coverage Status
Change from base Build 10687317978: -0.05%
Covered Lines: 66882
Relevant Lines: 74492

💛 - Coveralls