-
Notifications
You must be signed in to change notification settings - Fork 60
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
[open-systems] Superoperator tensor contraction #1596
Draft
mpharrigan
wants to merge
68
commits into
quantumlib:main
Choose a base branch
from
mpharrigan:2025-03/open-quimb-1
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Draft
Conversation
This file contains 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.
This pull request is the third in a series for supporting open system (classical data & measurement), roadmap item #445.
This branch is based on #1590 (for my convenience; it doesn't use any of that functionality)
Bloq.tensor_contract(superoperator=True)
This is the new interface. It will return a 0-, 2-, or 4-dimensional tensor for constants, density matrices, and superoperators (resp) to support simulating programs with measurements and non-unitary maps. Read the docs for the indexing convention for the superoperator; but if you're really doing something with the superoperators you may want to operate on the quimb tensor network with friendly indices itself.
cbloq_to_superquimb
The workhorse of the new functionality is this function that converts a composite bloq to a tensor network that represents the density matrix and/or superoperator of the program. Some operations like measurement or discarding qubits cannot be represented in a pure-state statevector / unitary picture.
cbloq_to_superquimb
still usesBloq.my_tensors
to construct the network. It adds each tensor twice: once in the "forward" direction and again in the "backward" (adjoint) direction.DiscardInd
The
Bloq.my_tensors
method can now return aDiscardInd
object, which signifies that that tensor index should be discarded by tracing it out.It turns out that this simple extension lets you represent any CPTP map using the "system+environment" modeling approach.
MeasZ
,Discard
This PR includes two non-unitary maps: measuring in the Z basis and discarding a qubit or classical bit.
Manipulating quimb tensor networks
This PR makes some changes to the way we handle outer indices in the quimb tensor network. This should only be of interest to folks who use the "hands on" approach of directly manipulating the tensor networks. The changes make sense and clean up some of the docs.
The outer indices are now re-mapped to tuples of qualtran objects that actually make sense rather than keeping them as
Connection
s toDanglingT
objects. There is a new flagfriendly_indices=True
which will make the outer indices friendly strings.breaking change I renamed and made-private the
get_left_and_right_inds
function. The original idea was to use this as a public way of getting a handle on the outer indices, but it was always tricky to use; and needed to be changed to support the new variety of outer indices present in the superoperator networks. No one should need a replacement for this function since theqtn.TensorNetwork
object outer indices now just intrinsically make sense.Non-changes
This includes the minimal set of non-unitary CPTP bloqs to support the docs notebooks.