Skip to content

Start

ProgramStart

ProgramStart(parent: Optional[Builder] = None)

Bases: Drive, Builder


              flowchart TD
              bloqade.analog.builder.start.ProgramStart[ProgramStart]
              bloqade.analog.builder.drive.Drive[Drive]
              bloqade.analog.builder.base.Builder[Builder]
              bloqade.analog.builder.parse.trait.Parse[Parse]
              bloqade.analog.builder.parse.trait.ParseRegister[ParseRegister]
              bloqade.analog.builder.parse.trait.ParseSequence[ParseSequence]
              bloqade.analog.builder.parse.trait.ParseCircuit[ParseCircuit]
              bloqade.analog.builder.parse.trait.ParseRoutine[ParseRoutine]
              bloqade.analog.builder.parse.trait.Show[Show]

                              bloqade.analog.builder.drive.Drive --> bloqade.analog.builder.start.ProgramStart
                
                bloqade.analog.builder.base.Builder --> bloqade.analog.builder.start.ProgramStart
                                bloqade.analog.builder.parse.trait.Parse --> bloqade.analog.builder.base.Builder
                                bloqade.analog.builder.parse.trait.ParseRegister --> bloqade.analog.builder.parse.trait.Parse
                
                bloqade.analog.builder.parse.trait.ParseSequence --> bloqade.analog.builder.parse.trait.Parse
                
                bloqade.analog.builder.parse.trait.ParseCircuit --> bloqade.analog.builder.parse.trait.Parse
                
                bloqade.analog.builder.parse.trait.ParseRoutine --> bloqade.analog.builder.parse.trait.Parse
                

                bloqade.analog.builder.parse.trait.Show --> bloqade.analog.builder.base.Builder
                



              click bloqade.analog.builder.start.ProgramStart href "" "bloqade.analog.builder.start.ProgramStart"
              click bloqade.analog.builder.drive.Drive href "" "bloqade.analog.builder.drive.Drive"
              click bloqade.analog.builder.base.Builder href "" "bloqade.analog.builder.base.Builder"
              click bloqade.analog.builder.parse.trait.Parse href "" "bloqade.analog.builder.parse.trait.Parse"
              click bloqade.analog.builder.parse.trait.ParseRegister href "" "bloqade.analog.builder.parse.trait.ParseRegister"
              click bloqade.analog.builder.parse.trait.ParseSequence href "" "bloqade.analog.builder.parse.trait.ParseSequence"
              click bloqade.analog.builder.parse.trait.ParseCircuit href "" "bloqade.analog.builder.parse.trait.ParseCircuit"
              click bloqade.analog.builder.parse.trait.ParseRoutine href "" "bloqade.analog.builder.parse.trait.ParseRoutine"
              click bloqade.analog.builder.parse.trait.Show href "" "bloqade.analog.builder.parse.trait.Show"
            

ProgramStart is the base class for a starting/entry node for building a program.

Source code in .venv/lib/python3.12/site-packages/bloqade/analog/builder/base.py
10
11
12
13
14
def __init__(
    self,
    parent: Optional["Builder"] = None,
) -> None:
    self.__parent__ = parent

apply

apply(sequence: SequenceExpr) -> SequenceBuilder

Apply a pre-built sequence to a program.

This allows you to build a program independent of any geometry and then apply the program to said geometry. Or, if you have a program you would like to try on multiple geometries you can trivially do so with this.

Example Usage:

>>> from numpy import pi
>>> seq = start.rydberg.rabi.amplitude.constant(2.0 * pi, 4.5)
# choose a geometry of interest to apply the program on
>>> from bloqade.analog.atom_arrangement import Chain, Kagome
>>> complete_program = Chain(10).apply(seq)
# you can .apply to as many geometries as you like
>>> another_complete_program = Kagome(3).apply(seq)

  • From here you can now do:
    • ...assign(assignments).bloqade: select the bloqade local emulator backend
    • ...assign(assignments).braket: select braket local emulator or QuEra hardware
    • ...assign(assignments).device(specifier_string): select backend by specifying a string
  • Assign multiple values to a single variable for a parameter sweep:
    • ...assign(assignments).batch_assign(assignments):
  • Parallelize the program register, duplicating the geometry and waveform sequence to take advantage of all available space/qubits on the QPU:
    • ...assign(assignments).parallelize(cluster_spacing)
  • Defer value assignment of certain variables to runtime:
    • ...assign(assignments).args([previously_defined_vars])
Source code in .venv/lib/python3.12/site-packages/bloqade/analog/builder/start.py
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
@beartype
def apply(self, sequence: SequenceExpr) -> SequenceBuilder:
    """
    Apply a pre-built sequence to a program.

    This allows you to build a program independent of any geometry
    and then `apply` the program to said geometry. Or, if you have a
    program you would like to try on multiple geometries you can
    trivially do so with this.

    Example Usage:
    ```
    >>> from numpy import pi
    >>> seq = start.rydberg.rabi.amplitude.constant(2.0 * pi, 4.5)
    # choose a geometry of interest to apply the program on
    >>> from bloqade.analog.atom_arrangement import Chain, Kagome
    >>> complete_program = Chain(10).apply(seq)
    # you can .apply to as many geometries as you like
    >>> another_complete_program = Kagome(3).apply(seq)
    ```

    - From here you can now do:
        - `...assign(assignments).bloqade`: select the bloqade
            local emulator backend
        - `...assign(assignments).braket`: select braket
            local emulator or QuEra hardware
        - `...assign(assignments).device(specifier_string)`: select
            backend by specifying a string
    - Assign multiple values to a single variable for a parameter sweep:
        - `...assign(assignments).batch_assign(assignments)`:
    - Parallelize the program register, duplicating the geometry and waveform
        sequence to take advantage of all available
      space/qubits on the QPU:
        - `...assign(assignments).parallelize(cluster_spacing)`
    - Defer value assignment of certain variables to runtime:
        - `...assign(assignments).args([previously_defined_vars])`

    """
    return SequenceBuilder(sequence, self)