fix: preserve gate labels through transpilation#16475
Open
elkadylojain-ops wants to merge 2 commits into
Open
Conversation
Gate labels were silently dropped or only partially propagated when a
labeled gate was decomposed into multiple gates during transpilation.
Before this fix:
circuit = QuantumCircuit(2)
circuit.cx(0, 1, label='hello')
w = transpile(circuit, basis_gates=['cz', 'rx', 'rz'])
for inst in w.data:
print(inst.operation.name, inst.operation.label)
# rz None
# rx None
# cz hello
# rx hello
# rz hello
After this fix:
# rz hello
# rx hello
# cz hello
# rx hello
# rz hello
Four separate places were dropping the label when emitting new
instructions to replace a labeled run/block:
- BasisTranslator: the label was only forwarded in the branch handling
gates without parameters, not in the branch handling parameterized
gates.
- ConsolidateBlocks: labels were dropped when consolidating a block or
a 1Q run into a UnitaryGate.
- CommutativeCancellation and Optimize1qGatesDecomposition: both call
DAGCircuit::insert_1q_on_incoming_qubit, which unconditionally set
label: None. Added insert_1q_on_incoming_qubit_with_label so callers
can propagate the original label.
- TwoQubitPeepholeOptimization: same issue when re-emitting a
synthesized 2Q gate sequence.
Fixes Qiskit#15168
Collaborator
|
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:
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Gate labels were silently dropped or only partially propagated when a labeled gate was decomposed into multiple gates during transpilation.
Before this fix:
After this fix:
Four separate places were dropping the label when emitting new instructions to replace a labeled run/block:
Fixes #15168
AI/LLM disclosure