Closed alexanderivrii closed 3 weeks ago
One or more of the following people are relevant to this code:
@Qiskit/terra-core
Files with Coverage Reduction | New Missed Lines | % | ||
---|---|---|---|---|
qiskit/synthesis/two_qubit/xx_decompose/decomposer.py | 1 | 95.42% | ||
crates/qasm2/src/lex.rs | 2 | 92.23% | ||
crates/circuit/src/circuit_instruction.rs | 5 | 86.32% | ||
crates/circuit/src/dag_node.rs | 6 | 82.17% | ||
crates/qasm2/src/parse.rs | 18 | 96.69% | ||
<!-- | Total: | 32 | --> |
Totals | |
---|---|
Change from base Build 10691830429: | -0.03% |
Covered Lines: | 72513 |
Relevant Lines: | 81330 |
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 usesubstitute_node
as the simplified node has fewer qubits than the original node). To fix the problem, we can instead read off the simplified gate fromsubstitute_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 :).