Skip to content
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
wants to merge 3 commits into from

Commits on Nov 24, 2023

  1. Add representation of storage-owning Var nodes

    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.
    jakelishman committed Nov 24, 2023
    Configuration menu
    Copy the full SHA
    dc31205 View commit details
    Browse the repository at this point in the history
  2. Add definition of Store instruction

    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.
    jakelishman committed Nov 24, 2023
    Configuration menu
    Copy the full SHA
    3d2f8dd View commit details
    Browse the repository at this point in the history
  3. Add variable-handling methods to QuantumCircuit

    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 committed Nov 24, 2023
    Configuration menu
    Copy the full SHA
    424ec66 View commit details
    Browse the repository at this point in the history