-
Notifications
You must be signed in to change notification settings - Fork 2.4k
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
Don't run ElidePermutation if routing is disabled #13184
Conversation
We have a routing plugin named "none" which is used to assert that no routing should be performed (it errors if there is routing required). We were previously running the ElidePermutations pass in this case which is not the expected or correct behavior because it causes the same kind of permutation as routing and would eliminate and swap gates in the circuit. As the typical use case for routing_method='none' is when you've already routed a circuit (or constructed it by hand to match the connectivity constraints) we shouldn't be doing this. This commit fixes this behavior so if the routing_method is set to "none" we no longer run the ElidePermutations pass. Fixes Qiskit#13144
One or more of the following people are relevant to this code:
|
Pull Request Test Coverage Report for Build 10946369059Details
💛 - Coveralls |
I'm certainly fine with this case, but for minor discussion, an extension: should we also disable (My rough initial feeling to both is "no, leave it", especially since setting |
Yeah, I think for now we should just leave it, especially for a potential backport. I agree it's not exactly clear what we should do in the case of a If we did want to only run elide permutations when there isn't a vf2 match, we'd have to move ElidePermutations into the Writing all of that I think I've convinced myself we should just make it an opt-out thing with the routing_method plugin. |
Just a small thought: we probably should enable ElidePermutations for all-to-all connectivity, as removing swap/permutation gates keeps the circuit routable yet makes it smaller. |
* Don't run ElidePermutation if routing is disabled We have a routing plugin named "none" which is used to assert that no routing should be performed (it errors if there is routing required). We were previously running the ElidePermutations pass in this case which is not the expected or correct behavior because it causes the same kind of permutation as routing and would eliminate and swap gates in the circuit. As the typical use case for routing_method='none' is when you've already routed a circuit (or constructed it by hand to match the connectivity constraints) we shouldn't be doing this. This commit fixes this behavior so if the routing_method is set to "none" we no longer run the ElidePermutations pass. Fixes #13144 * Move release note to the correct location (cherry picked from commit 9a896d3)
* Don't run ElidePermutation if routing is disabled We have a routing plugin named "none" which is used to assert that no routing should be performed (it errors if there is routing required). We were previously running the ElidePermutations pass in this case which is not the expected or correct behavior because it causes the same kind of permutation as routing and would eliminate and swap gates in the circuit. As the typical use case for routing_method='none' is when you've already routed a circuit (or constructed it by hand to match the connectivity constraints) we shouldn't be doing this. This commit fixes this behavior so if the routing_method is set to "none" we no longer run the ElidePermutations pass. Fixes #13144 * Move release note to the correct location (cherry picked from commit 9a896d3) Co-authored-by: Matthew Treinish <mtreinish@kortar.org>
Summary
We have a routing plugin named "none" which is used to assert that no routing should be performed (it errors if there is routing required). We were previously running the ElidePermutations pass in this case which is not the expected or correct behavior because it causes the same kind of permutation as routing and would eliminate and swap gates in the circuit. As the typical use case for routing_method='none' is when you've already routed a circuit (or constructed it by hand to match the connectivity constraints) we shouldn't be doing this. This commit fixes this behavior so if the routing_method is set to "none" we no longer run the ElidePermutations pass.
Details and comments
Fixes #13144