-
Notifications
You must be signed in to change notification settings - Fork 163
added Trotterised time evolution #674
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
Merged
Merged
Conversation
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
which has the below benefits: - the remaining functions in operations.cpp are precise and do not need to be user-configured for accuracy (i.e. no Trotter hyperparameters) - the remaining functions in operations.cpp merely call the backend and do not include any bespoke logic (i.e. Trotter circuit scheduling) - incoming new Trotter functions for dynamical simulation will be more clearly delineated from the "standard" (and relatively boring) operations - the Trotter logic is isolated in preparation for it becoming more substantial with the introduction of randomisation, commuting groups, and that necessary for Linblad master equation solving
merely aliasing the existing gadget Trotterisation
though it is unsure this should be the final interface; we can also accept jump operators given as projectors and diagonal matrices without much greater complexity, and SHOULD also deal with exponentiating general dense matrices. This commit also includes a Trotter patch we'll commit separately to dev for publicity
in lieu of direct gadgets, for clarity
since it really only counts as imaginary-time evolution if the Hamiltonian is Hermitian - otherwise it's just sparkling non-unitary propagator Trotterisation
Trotterisation of a PauliStrSum gadget sees a density matrix operated upon by a sequence of PauliStr gadgets, each like rho -> exp(i angle coeff term) rho exp(i angle coeff term)^dagger where angle is a user-parameter, term is a PauliStr, and coeff is its coefficient in the PauliStrSum. In the linearised setting, this becomes: ||rho> -> conj[exp(i angle coeff term)] (x) exp(i angle coeff term) ||rho> When the gadget is unitary (i.e. the PauliStrSum is Hermitian and the angle parameter is real), the dagger of the LHS operator above simplifies to exp(+- i angle coeff term) where the +- sign is admitted by conj(term), depending on the parity of the Y operators therein. This simplification was erroneously used in the general case, when the PauliStrSum is not necessarily Hermitian and angle can be complex. In that general case, we have instead that the LHS operator's conjugation simplifies to: exp(+- i conj(angle*coeff) term) This patch corrects the argument of the prescribed gadget.
by replacing it with a function which directly answers the caller's question; what sign when multiplied upon the PauliStr produces its conjugate?
since the same facilities are anyway needed (with much better motivation) by Lindblad evolution
allowing the (potentially sub-optimal) expression of arbitrary operators like projectors, etc
…into linblad-evolution
for posterity!
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.
Added support unitary, imaginary and Lindbladian and evolution where the latter uses PauliStrSum jump operators. In the future, we will extend this to jump operators specified as dense matrices, diagonal matrices and projectors (including off-diagonal).
Also moved Trotterised gadgets to their own API module.