Fix ElidePermutations
pass in the presence of PermutationGate
s (backport #14603)
#14623
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
Fixes #14602.
Details and comments
The
ElidePermutations
transpiler pass removes swap gates and permutation gates from the circuit, tracking the current permutation of the qubits using the internal variablemapping
. Previously, this mapping was not updated correctly in the presence of permutation gates, leading to incorrect output circuits and updates to the pass manager's property set (namely, to"virtual_permutation_layout"
).The correct update rule should be$$M [ Q [i] ] \leftarrow M [Q [ P[i] ] ]$$ for $i=1,\dots,k$ , where $M$ is the current mapping within the $Q$ is the set of qubits the permutation gate is defined on, and $P$ is the "permutation pattern" of the permutation gate (stating which qubits get mapped to positions $0$ , $1$ , etc. when the permutation gate is applied).
ElidePermutations
pass,This is an automatic backport of pull request #14603 done by Mergify.