-
Notifications
You must be signed in to change notification settings - Fork 2.3k
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
Add variable-handling methods to QuantumCircuit
#10962
Closed
Closed
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
jakelishman
added
Changelog: New Feature
Include in the "Added" section of the changelog
mod: circuit
Related to the core of the `QuantumCircuit` class or the circuit library
labels
Oct 3, 2023
One or more of the the following people are requested to review this:
|
jakelishman
force-pushed
the
var/qc-repr
branch
from
October 3, 2023 23:05
ecd22a5
to
036152d
Compare
Pull Request Test Coverage Report for Build 6989301087
💛 - Coveralls |
This adds the representation of `expr.Var` nodes that own their own storage locations, and consequently are not backed by existing Qiskit objects (`Clbit` or `ClassicalRegister`). This is the base of the ability for Qiskit to represent manual classical-value storage in `QuantumCircuit`, and the base for how manual storage will be implemented.
This does not yet add the implementation of `QuantumCircuit.store`, which will come later as part of expanding the full API of `QuantumCircuit` to be able to support these runtime variables. The `is_lvalue` helper is added generally to the `classical.expr` module because it's generally useful, while `types.cast_kind` is moved from being a private method in `expr` to a public-API function so `Store` can use it. These now come with associated unit tests.
This adds all the new `QuantumCircuit` methods discussed in the variable-declaration RFC[^1], and threads the support for them through the methods that are called in turn, such as `QuantumCircuit.append`. It does yet not add support to methods such as `copy` or `compose`, which will be done in a follow-up. The APIs discussed in the RFC necessitated making `Var` nodes hashable. This is done in this commit, as it is logically connected. These nodes now have enforced immutability, which is technically a minor breaking change, but in practice required for the properties of such expressions to be tracked correctly through circuits. A helper attribute `Var.standalone` is added to unify the handling of whether a variable is an old-style existing-memory wrapper, or a new "proper" variable with its own memory. [^1]: Qiskit/RFCs#50
jakelishman
force-pushed
the
var/qc-repr
branch
from
November 25, 2023 13:09
036152d
to
424ec66
Compare
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Labels
Changelog: New Feature
Include in the "Added" section of the changelog
mod: circuit
Related to the core of the `QuantumCircuit` class or the circuit library
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
This adds all the new
QuantumCircuit
methods discussed in the variable-declaration RFC1, and threads the support for them through the methods that are called in turn, such asQuantumCircuit.append
. It does yet not add support to methods such ascopy
orcompose
, which will be done in a follow-up.The APIs discussed in the RFC necessitated making
Var
nodes hashable. This is done in this commit, as it is logically connected. These nodes now have enforced immutability, which is technically a minor breaking change, but in practice required for the properties of such expressions to be tracked correctly through circuits.A helper attribute
Var.standalone
is added to unify the handling of whether a variable is an old-style existing-memory wrapper, or a new "proper" variable with its own memory.Details and comments
Depends on #10946
Close #10924
Two changelog entries are added for the semi-orthogonal changes, but the main thrust will come as with most things at the end of the epic.
Footnotes
https://github.com/Qiskit/RFCs/pull/50 ↩