instrument_compilers#

Compiler classes for Qblox backend.

Module Contents#

Classes#

LocalOscillatorCompiler

Implementation of an

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.

QTMCompiler

QTM specific implementation of the qblox compiler.

ClusterCompiler

Compiler class for a Qblox cluster.

class LocalOscillatorCompiler(name: str, total_play_time: float, instrument_cfg: quantify_scheduler.backends.qblox_backend._LocalOscillatorCompilationConfig)[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:
  • 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 compiler config referring to this instrument.

freq_param_name = 'frequency'[source]#
_frequency[source]#
power_param_name = 'power'[source]#
_power[source]#
property frequency: float | None[source]#

Getter for the frequency.

Returns:

The current frequency.

compile(debug_mode: bool, 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(name: str, total_play_time: float, instrument_cfg: quantify_scheduler.backends.qblox_backend._ClusterModuleCompilationConfig)[source]#

Bases: quantify_scheduler.backends.qblox.analog.BasebandModuleCompiler

QCM specific implementation of the qblox compiler.

_settings_type[source]#
supports_acquisition = False[source]#

Specifies whether the device can perform acquisitions.

max_number_of_instructions = 16384[source]#

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

static_hw_properties[source]#

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

_configure_hardware_distortion_corrections() None[source]#

Assign distortion corrections to settings of instrument compiler.

_get_distortion_configs_per_output() dict[int, dict][source]#
_configure_filter(filt: quantify_scheduler.backends.types.qblox.QbloxRealTimeFilter, coefficient: float, marker_debug_mode_enable: bool) None[source]#
class QRMCompiler(name: str, total_play_time: float, instrument_cfg: quantify_scheduler.backends.qblox_backend._ClusterModuleCompilationConfig)[source]#

Bases: quantify_scheduler.backends.qblox.analog.BasebandModuleCompiler

QRM specific implementation of the qblox compiler.

_settings_type[source]#
supports_acquisition = True[source]#

Specifies whether the device can perform acquisitions.

max_number_of_instructions = 12288[source]#

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

static_hw_properties[source]#

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

class QCMRFCompiler(name: str, total_play_time: float, instrument_cfg: quantify_scheduler.backends.qblox_backend._ClusterModuleCompilationConfig)[source]#

Bases: quantify_scheduler.backends.qblox.analog.RFModuleCompiler

QCM-RF specific implementation of the qblox compiler.

supports_acquisition = False[source]#

Specifies whether the device can perform acquisitions.

max_number_of_instructions = 16384[source]#

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

static_hw_properties[source]#

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

class QRMRFCompiler(name: str, total_play_time: float, instrument_cfg: quantify_scheduler.backends.qblox_backend._ClusterModuleCompilationConfig)[source]#

Bases: quantify_scheduler.backends.qblox.analog.RFModuleCompiler

QRM-RF specific implementation of the qblox compiler.

supports_acquisition = True[source]#

Specifies whether the device can perform acquisitions.

max_number_of_instructions = 12288[source]#

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

static_hw_properties[source]#

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

class QTMCompiler(name: str, total_play_time: float, instrument_cfg: quantify_scheduler.backends.qblox_backend._ClusterModuleCompilationConfig)[source]#

Bases: quantify_scheduler.backends.qblox.compiler_abc.ClusterModuleCompiler

QTM specific implementation of the qblox compiler.

Parameters:
  • 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 instrument compilation config referring to this device.

sequencers: dict[str, quantify_scheduler.backends.qblox.timetag.TimetagSequencerCompiler][source]#
_settings: quantify_scheduler.backends.types.qblox.TimetagModuleSettings[source]#
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, sequencer_cfg: quantify_scheduler.backends.qblox_backend._SequencerCompilationConfig) quantify_scheduler.backends.qblox.timetag.TimetagSequencerCompiler[source]#

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

prepare(**kwargs) 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(name: str, total_play_time: float, instrument_cfg: quantify_scheduler.backends.qblox_backend._ClusterCompilationConfig)[source]#

Bases: quantify_scheduler.backends.qblox.compiler_abc.InstrumentCompiler

Compiler class for a Qblox cluster.

Parameters:
  • 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 instrument compiler config referring to this device.

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

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

instrument_cfg: quantify_scheduler.backends.qblox_backend._ClusterCompilationConfig[source]#
_op_infos: dict[tuple[str, str], list[quantify_scheduler.backends.types.qblox.OpInfo]][source]#
instrument_compilers[source]#
portclock_to_path[source]#
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 module as key and the value its compiler.

prepare(external_los: dict[str, LocalOscillatorCompiler] | None = None, schedule_resources: dict[str, quantify_scheduler.resources.Resource] | None = None, **kwargs) None[source]#

Prepares the instrument compiler for compilation by assigning the data.

Parameters:
  • external_los – Optional LO compiler objects representing external LOs, whose LO frequency will be determined and set.

  • schedule_resources – Mapping from clock name to clock resource, which contains the clock frequency.

  • kwargs – Potential keyword arguments for other compiler classes.

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.