Fix caching logic in SolovayKitaevSynthesis
plugin (backport #14304)
#14311
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 a problem described here: running the
SolovayKitaevSynthesis
unitary synthesis plugin repeatedly incorrectly reuses the set of basis gates specified on the very first run. For example,synthesizes both times to the first specified basis set of
["h", "t", "tdg"]
. Creating two differentSolovayKitaevSynthesis
plugins does not solve this, since the caching is done via a class-level attribute.The fix (many thanks to @eliarbel for the suggestion!) consists of storing a dictionary from the basis gate sets to the correspoding basis approximations. UPDATE: after review and online discussion, we have decided not to store the dictionary but instead to regenerate the basic approximations whenever the set of basis gates or the depth used for generation changes from the previous run.
Needed for #14225.
This is an automatic backport of pull request #14304 done by [Mergify](https://mergify.com).