Sweepers

Qibosoq supports several sweepers, all executable at the same time in multi-dimentionals scans. A qibosoq.components.base.Sweeper object can be istantiated with:

from qibosoq.components.base import Sweeper, Parameter

sweeper = Sweeper(
            parameters = [Parameter.AMPLITUDE, Parameter.AMPLITUDE],
            indexes = [0, 1],
            starts = [0, -1],
            stops = [1, 0.5],
            expts = 100  # number of points for the scan
)

The sweeper object will later be included in the server_commands dictionary as:

server_commands = {
    ...
    sweepers: [asdict(sweeper)]
}
The parameters attribute contains a list of parameter from qibosoq.components.base.Parameter so:
  • FREQUENCY

  • AMPLITUDE

  • RELATIVE_PHASE

  • DELAY

  • BIAS

Warning

In the parameter class there is also a DURATION parameter, but this is not sweepable!

The indexes attribute refers to the index of the pulse to sweep in the sequence list (or, for BIAS sweepers, the index of the qubit in the qubit list).

A single sweeper can contain multiple parameters and perform update on different pulses, but note that it’s still a 1-dimensional sweeper! After each execution, every parameter will be updated accordingly to the value in starts and stops.

To write a multi-dimentional sweeper we have to define multiple sweepers objects:

from qibosoq.components.base import Sweeper, Parameter

sweeper_1 = Sweeper(
            parameters = [Parameter.AMPLITUDE],
            indexes = [0],
            starts = [0],
            stops = [1],
            expts = 100  # number of points for the scan
)

sweeper2 = Sweeper(
            parameters = [Parameter.AMPLITUDE],
            indexes = [1],
            starts = [-1],
            stops = [0.5],
            expts = 50  # number of points for the scan
)

server_commands = {
    ...
    sweepers: [sweeper.serialized, sweeper2.serialized]
}

This will execute the sequence considering the matrix product of the swept parameters.

The final results (i and q) will have shape:
  • if averaged: (number_of_adc_chs, number_of_readouts, expts_sweeper1, expts_sweeper2…)

  • if not averaged: (number_of_adc_chs, number_of_readouts, expts_sweeper1, expts_sweeper2…, number of shots)

Warning

The serialized property is required and it’s not possible to use a simple asdict because Sweeper objects use, for starts and stops, non-json-serializable numpy arrays.