instrument_compilers#

Compiler classes for Qblox backend.

Module Contents#

Classes#

LocalOscillatorCompiler

Implementation of an InstrumentCompiler that compiles for a generic LO. The main

QCMCompiler

QCM specific implementation of the qblox compiler.

QRMCompiler

QRM specific implementation of the qblox compiler.

QCMRFCompiler

QCM-RF specific implementation of the qblox compiler.

QRMRFCompiler

QRM-RF specific implementation of the qblox compiler.

TimetagModuleCompiler

QTM specific implementation of the qblox compiler.

ClusterCompiler

Compiler class for a Qblox cluster.

class LocalOscillatorCompiler(parent: quantify_scheduler.backends.qblox.compiler_container.CompilerContainer, name: str, total_play_time: float, instrument_cfg: dict[str, Any])[source]#

Bases: quantify_scheduler.backends.qblox.compiler_abc.InstrumentCompiler

Implementation of an InstrumentCompiler that compiles for a generic LO. The main difference between this class and the other compiler classes is that it doesn’t take pulses and acquisitions.

Parameters:
  • parent – Reference to the parent container object.

  • name – QCoDeS name of the device it compiles for.

  • total_play_time – Total time execution of the schedule should go on for. This parameter is used to ensure that the different devices, potentially with different clock rates, can work in a synchronized way when performing multiple executions of the schedule.

  • instrument_cfg – The part of the hardware mapping dict referring to this instrument.

property frequency: float | None[source]#

Getter for the frequency.

Returns:

The current frequency.

compile(debug_mode, repetitions: int = 1) dict[str, Any] | None[source]#

Compiles the program for the LO InstrumentCoordinator component.

Parameters:
  • debug_mode – Debug mode can modify the compilation process, so that debugging of the compilation process is easier.

  • repetitions – Number of times execution the schedule is repeated.

Returns:

Dictionary containing all the information the InstrumentCoordinator component needs to set the parameters appropriately.

class QCMCompiler(parent: quantify_scheduler.backends.qblox.instrument_compilers.ClusterCompiler, name: str, total_play_time: float, instrument_cfg: dict[str, Any], latency_corrections: dict[str, float] | None = None, distortion_corrections: dict[int, Any] | None = None)[source]#

Bases: quantify_scheduler.backends.qblox.analog.BasebandModuleCompiler

QCM specific implementation of the qblox compiler.

supports_acquisition = False[source]#
max_number_of_instructions[source]#
static_hw_properties[source]#
_configure_hardware_distortion_corrections()[source]#

Assign distortion corrections to settings of instrument compiler.

_configure_filter(filt, coefficient, marker_debug_mode_enable)[source]#
class QRMCompiler(parent: quantify_scheduler.backends.qblox.instrument_compilers.ClusterCompiler, name: str, total_play_time: float, instrument_cfg: dict[str, Any], latency_corrections: dict[str, float] | None = None, distortion_corrections: dict[int, Any] | None = None)[source]#

Bases: quantify_scheduler.backends.qblox.analog.BasebandModuleCompiler

QRM specific implementation of the qblox compiler.

supports_acquisition = True[source]#
max_number_of_instructions[source]#
static_hw_properties[source]#
class QCMRFCompiler(parent: quantify_scheduler.backends.qblox.instrument_compilers.ClusterCompiler, name: str, total_play_time: float, instrument_cfg: dict[str, Any], latency_corrections: dict[str, float] | None = None, distortion_corrections: dict[int, Any] | None = None)[source]#

Bases: quantify_scheduler.backends.qblox.analog.RFModuleCompiler

QCM-RF specific implementation of the qblox compiler.

supports_acquisition = False[source]#
max_number_of_instructions[source]#
static_hw_properties[source]#
class QRMRFCompiler(parent: quantify_scheduler.backends.qblox.instrument_compilers.ClusterCompiler, name: str, total_play_time: float, instrument_cfg: dict[str, Any], latency_corrections: dict[str, float] | None = None, distortion_corrections: dict[int, Any] | None = None)[source]#

Bases: quantify_scheduler.backends.qblox.analog.RFModuleCompiler

QRM-RF specific implementation of the qblox compiler.

supports_acquisition = True[source]#
max_number_of_instructions[source]#
static_hw_properties[source]#
class TimetagModuleCompiler(parent: ClusterCompiler, name: str, total_play_time: float, instrument_cfg: dict[str, Any], latency_corrections: dict[str, float] | None = None, distortion_corrections: dict[str, Any] | None = None)[source]#

Bases: quantify_scheduler.backends.qblox.compiler_abc.ClusterModuleCompiler

QTM specific implementation of the qblox compiler.

Parameters:
  • parent (quantify_scheduler.backends.qblox.instrument_compilers.ClusterCompiler) – Reference to the parent object.

  • name – Name of the QCoDeS instrument this compiler object corresponds to.

  • total_play_time – Total time execution of the schedule should go on for. This parameter is used to ensure that the different devices, potentially with different clock rates, can work in a synchronized way when performing multiple executions of the schedule.

  • instrument_cfg – The part of the hardware configuration dictionary referring to this device. This is one of the inner dictionaries of the overall hardware config.

  • latency_corrections – Dict containing the delays for each port-clock combination. This is specified in the top layer of hardware config.

property max_number_of_instructions: int[source]#

The maximum number of Q1ASM instructions supported by this module type.

property supports_acquisition: bool[source]#

Specifies whether the device can perform acquisitions.

property static_hw_properties: quantify_scheduler.backends.types.qblox.StaticTimetagModuleProperties[source]#

The static properties of the hardware. This effectively gathers all the differences between the different modules.

_construct_sequencer_compiler(index: int, portclock: tuple[str, str], channel_name: str, sequencer_cfg: dict[str, Any], channel_cfg: dict[str, Any]) quantify_scheduler.backends.qblox.timetag.TimetagSequencerCompiler[source]#

Create the sequencer object of the correct sequencer type belonging to the module.

prepare() None[source]#

Performs the logic needed before being able to start the compilation. In effect, this means assigning the pulses and acquisitions to the sequencers and calculating the relevant frequencies in case an external local oscillator is used.

class ClusterCompiler(parent: quantify_scheduler.backends.qblox.compiler_container.CompilerContainer, name: str, total_play_time: float, instrument_cfg: dict[str, Any], latency_corrections: dict[str, float] | None = None, distortion_corrections: dict[int, Any] | None = None)[source]#

Bases: quantify_scheduler.backends.qblox.compiler_abc.InstrumentCompiler

Compiler class for a Qblox cluster.

Parameters:
  • parent – Reference to the parent object.

  • name – Name of the QCoDeS instrument this compiler object corresponds to.

  • total_play_time – Total time execution of the schedule should go on for.

  • instrument_cfg – The part of the hardware configuration dictionary referring to this device. This is one of the inner dictionaries of the overall hardware config.

  • latency_corrections – Dict containing the delays for each port-clock combination. This is specified in the top layer of hardware config.

compiler_classes: dict[str, type][source]#

References to the individual module compiler classes that can be used by the cluster.

add_op_info(port: str, clock: str, op_info: quantify_scheduler.backends.types.qblox.OpInfo) None[source]#

Assigns a certain pulse or acquisition to this device.

Parameters:
  • port – The port this waveform is sent to (or acquired from).

  • clock – The clock for modulation of the pulse or acquisition. Can be a BasebandClock.

  • op_info – Data structure containing all the information regarding this specific pulse or acquisition operation.

construct_module_compilers() dict[str, quantify_scheduler.backends.qblox.analog.AnalogModuleCompiler][source]#

Constructs the compilers for the modules inside the cluster.

Returns:

A dictionary with the name of the instrument as key and the value its compiler.

_get_module_distortion_corrections(cfg)[source]#
prepare() None[source]#

Prepares the instrument compiler for compilation by assigning the data.

distribute_data() None[source]#

Distributes the pulses and acquisitions assigned to the cluster over the individual module compilers.

compile(debug_mode: bool, repetitions: int = 1) dict[str, Any][source]#

Performs the compilation.

Parameters:
  • debug_mode – Debug mode can modify the compilation process, so that debugging of the compilation process is easier.

  • repetitions – Amount of times to repeat execution of the schedule.

Returns:

The part of the compiled instructions relevant for this instrument.