Add Rustiq-based synthesis for PauliEvolutionGate#13301
Merged
raynelfss merged 48 commits intoQiskit:mainfrom Nov 7, 2024
Merged
Add Rustiq-based synthesis for PauliEvolutionGate#13301raynelfss merged 48 commits intoQiskit:mainfrom
PauliEvolutionGate#13301raynelfss merged 48 commits intoQiskit:mainfrom
Conversation
Collaborator
|
One or more of the following people are relevant to this code:
|
…iskit-terra into integrate_rustiq_plugin
Cryoris
reviewed
Oct 9, 2024
Collaborator
Cryoris
left a comment
There was a problem hiding this comment.
I just had a brief look, but overall this looks good to me -- I'll give a detailed review later 🙂
Pull Request Test Coverage Report for Build 11722744591Details
💛 - Coveralls |
…iskit-terra into integrate_rustiq_plugin
Cryoris
reviewed
Nov 5, 2024
Collaborator
Cryoris
left a comment
There was a problem hiding this comment.
Looks pretty good to me! I've left a bunch of comments but they are all very small 🙂
…rotation injection
Member
Author
|
Thanks @Cryoris for a thorough review! I think I have addressed all of your review comments (and in a few cases explained why I don't want to address it). To keep track of your comments, I was marking them as resolved as I was going through them, so you will probably want to unresolve them to see if a deeper discussion is required. |
Making sure that the number of rotation gates in the synthesized circuit equals the number of non-trivial Pauli rotation gates.
Cryoris
approved these changes
Nov 7, 2024
Collaborator
Cryoris
left a comment
There was a problem hiding this comment.
LGTM thanks for the updates!
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.
Summary
Calls the
Rustiq'ssynthesis algorithm for pauli networks natively from within Qiskit.Together with #13295 addresses #12789.
This should be rebased on top of #13295, in order to support the plugin interface structure for
PauliEvolutionGates.Rustiq is available at https://github.com/smartiel/rustiq-core
How to experiment
One can experiment with the new functionality by creating a
PauliEvolutionGateand directly calling the newPauliEvolutionSynthesisRustiqon this gate:Alternatively, one can create a circuit with
PauliEvolutionGates and specify "rustiq" via the synthesis config interface:Details:
The Qiskit Rust function
pauli_network_synthesiscalls thegreedy_pauli_networkfunction from therustiq-core(in particular, most of the code is fully in Rust). However, the latter function only returns a sequence of Clifford gates, without the single-qubit rotations. Sopauli_network_synthesisalso adapts the code from Simon's private rustiq-plugin repository that simulates the circuit and inserts rotations wherever required.Preliminary Experiments:
To be updated (or maybe it would be even best to move this discussion to the issue #12789). After running some preliminary experiments on some specific examples (e.g. see #13285) and some hamlib examples (taken from https://github.com/Qiskit/benchpress/blob/main/benchpress/hamiltonian/hamlib/),
rustiqcan be amazingly powerful in many cases, greatly reducing the two-qubits gate-count and depth of the resulting circuit. On the other hand, there are also cases where Rustiq performs worse, i.e. creating a circuit with more gates.Some Concerns:
It is possible that some additional changes to Rustiq itself might be required.
ToDo: