qblox#

Python dataclasses for compilation to Qblox hardware.

Module Contents#

Classes#

BoundedParameter

Specifies a certain parameter with a fixed max and min in a certain unit.

StaticHardwareProperties

Specifies the fixed hardware properties needed in the backend.

OpInfo

Data structure describing a pulse or acquisition and containing all the information

LOSettings

Dataclass containing all the settings for a generic LO instrument.

BaseModuleSettings

Shared settings between all the Qblox modules.

BasebandModuleSettings

Settings for a baseband module.

RFModuleSettings

Global settings for the module to be set in the InstrumentCoordinator component.

SequencerSettings

Sequencer level settings.

QbloxBaseDescription

Base class for a Qblox hardware description.

ComplexChannelDescription

Information needed to specify an complex input/output in the QbloxHardwareCompilationConfig.

RealChannelDescription

Information needed to specify a real input/output in the QbloxHardwareCompilationConfig.

DigitalChannelDescription

Information needed to specify a digital (marker) output (for MarkerPulse) in the QbloxHardwareCompilationConfig.

DescriptionAnnotationsGettersMixin

Provide the functionality of retrieving valid channel names by inheriting this class.

QRMDescription

Information needed to specify a QRM in the QbloxHardwareCompilationConfig.

QCMDescription

Information needed to specify a QCM in the QbloxHardwareCompilationConfig.

QRMRFDescription

Information needed to specify a QRM-RF in the QbloxHardwareCompilationConfig.

QCMRFDescription

Information needed to specify a QCM-RF in the QbloxHardwareCompilationConfig.

ClusterDescription

Information needed to specify a Cluster in the CompilationConfig.

ComplexInputGain

Input gain settings for a real input connected to a port-clock combination.

SequencerOptions

Configuration options for a sequencer.

QbloxHardwareOptions

Datastructure containing the hardware options for each port-clock combination.

Attributes#

ClusterModuleDescription

Specifies a Cluster module and its instrument-specific settings.

QbloxHardwareDescription

Specifies a piece of Qblox hardware and its instrument-specific settings.

RealInputGain

Input gain settings for a real input connected to a port-clock combination.

OutputAttenuation

Output attenuation setting for a port-clock combination.

InputAttenuation

Input attenuation setting for a port-clock combination.

class BoundedParameter[source]#

Specifies a certain parameter with a fixed max and min in a certain unit.

min_val: float[source]#

Min value allowed.

max_val: float[source]#

Max value allowed.

units: str[source]#

Units in which the parameter is specified.

class StaticHardwareProperties[source]#

Specifies the fixed hardware properties needed in the backend.

instrument_type: str[source]#

The type of instrument.

max_sequencers: int[source]#

The amount of sequencers available.

max_awg_output_voltage: float | None[source]#

Maximum output voltage of the awg.

mixer_dc_offset_range: BoundedParameter[source]#

Specifies the range over which the dc offsets can be set that are used for mixer calibration.

channel_name_to_connected_io_indices: Dict[str, Tuple[int] | Tuple[int, int]][source]#

Specifies the connected io indices per channel_name identifier.

default_marker: int = 0[source]#

The default marker value to set at the beginning of programs. Important for RF instruments that use the set_mrk command to enable/disable the RF output.

channel_name_to_digital_marker: Dict[str, int][source]#

A mapping from channel_name to digital marker setting. Specifies which marker bit needs to be set at start if the output (as a string ex. complex_output_0) contains a pulse.

_get_connected_output_indices(channel_name) Tuple[int] | Tuple[int, int] | None | None[source]#

Return the connected output indices associated with the output name specified in the hardware config.

_get_connected_input_indices(channel_name) Tuple[int] | Tuple[int, int] | None | None[source]#

Return the connected input indices associated with the input name specified in the hardware config.

class OpInfo[source]#

Bases: dataclasses_json.DataClassJsonMixin

Data structure describing a pulse or acquisition and containing all the information required to play it.

property duration: float[source]#

The duration of the pulse/acquisition.

property is_acquisition: bool[source]#

Returns True if this is an acquisition, False otherwise.

property is_real_time_io_operation: bool[source]#

Returns True if the operation is a non-idle pulse (i.e., it has a waveform), False otherwise.

property is_offset_instruction: bool[source]#

Returns True if the operation describes a DC offset operation, corresponding to the Q1ASM instruction set_awg_offset.

property is_parameter_instruction: bool[source]#

Return True if the instruction is a parameter, like a voltage offset.

From the Qblox documentation: “parameter operation instructions” are latched and only updated when the upd_param, play, acquire, acquire_weighed or acquire_ttl instructions are executed.

Please refer to https://qblox-qblox-instruments.readthedocs-hosted.com/en/main/cluster/q1_sequence_processor.html#q1-instructions for the full list of these instructions.

property is_parameter_update: bool[source]#

Return True if the operation is a parameter update, corresponding to the Q1ASM instruction upd_param.

property is_loop: bool[source]#

Return True if the operation is a loop, corresponding to the Q1ASM instruction loop.

property is_return_stack: bool[source]#

Return True if the operation is a return stack, corresponding to the Q1ASM instruction return_stack.

name: str[source]#

Name of the operation that this pulse/acquisition is part of.

data: dict[source]#

The pulse/acquisition info taken from the data property of the pulse/acquisition in the schedule.

timing: float[source]#

The start time of this pulse/acquisition. Note that this is a combination of the start time “t_abs” of the schedule operation, and the t0 of the pulse/acquisition which specifies a time relative to “t_abs”.

class LOSettings[source]#

Bases: dataclasses_json.DataClassJsonMixin

Dataclass containing all the settings for a generic LO instrument.

power: Dict[str, float][source]#

Power of the LO source.

frequency: Dict[str, float | None][source]#

The frequency to set the LO to.

classmethod from_mapping(mapping: Dict[str, Any]) LOSettings[source]#

Factory method for the LOSettings from a mapping dict. The required format is {“frequency”: {parameter_name: value}, “power”: {parameter_name: value}}. For convenience {“frequency”: value, “power”: value} is also allowed.

Parameters:

mapping – The part of the mapping dict relevant for this instrument.

Returns:

Instantiated LOSettings from the mapping dict.

class BaseModuleSettings[source]#

Bases: dataclasses_json.DataClassJsonMixin

Shared settings between all the Qblox modules.

offset_ch0_path_I: float | None[source]#

The DC offset on the path_I of channel 0.

offset_ch0_path_Q: float | None[source]#

The DC offset on the path_Q of channel 0.

offset_ch1_path_I: float | None[source]#

The DC offset on path_I of channel 1.

offset_ch1_path_Q: float | None[source]#

The DC offset on path_Q of channel 1.

in0_gain: int | None[source]#

The gain of input 0.

in1_gain: int | None[source]#

The gain of input 1.

class BasebandModuleSettings[source]#

Bases: BaseModuleSettings

Settings for a baseband module.

Class exists to ensure that the cluster baseband modules don’t need special treatment in the rest of the code.

classmethod extract_settings_from_mapping(mapping: Dict[str, Any], **kwargs: dict | None) BasebandModuleSettings[source]#

Factory method that takes all the settings defined in the mapping and generates a BasebandModuleSettings object from it.

Parameters:
  • mapping – The mapping dict to extract the settings from

  • **kwargs – Additional keyword arguments passed to the constructor. Can be used to override parts of the mapping dict.

class RFModuleSettings[source]#

Bases: BaseModuleSettings

Global settings for the module to be set in the InstrumentCoordinator component. This is kept separate from the settings that can be set on a per sequencer basis, which are specified in SequencerSettings.

lo0_freq: float | None[source]#

The frequency of Output 0 (O0) LO. If left None, the parameter will not be set.

lo1_freq: float | None[source]#

The frequency of Output 1 (O1) LO. If left None, the parameter will not be set.

out0_att: int | None[source]#

The attenuation of Output 0.

out1_att: int | None[source]#

The attenuation of Output 1.

in0_att: int | None[source]#

The attenuation of Input 0.

classmethod extract_settings_from_mapping(mapping: Dict[str, Any], **kwargs: dict | None) RFModuleSettings[source]#

Factory method that takes all the settings defined in the mapping and generates an RFModuleSettings object from it.

Parameters:
  • mapping – The mapping dict to extract the settings from

  • **kwargs – Additional keyword arguments passed to the constructor. Can be used to override parts of the mapping dict.

class SequencerSettings[source]#

Bases: dataclasses_json.DataClassJsonMixin

Sequencer level settings.

In the Qblox driver these settings are typically recognized by parameter names of the form "{module}.sequencer{index}.{setting}" (for allowed values see Cluster QCoDeS parameters). These settings are set once and will remain unchanged after, meaning that these correspond to the “slow” QCoDeS parameters and not settings that are changed dynamically by the sequencer.

These settings are mostly defined in the hardware configuration under each port-clock key combination or in some cases through the device configuration (e.g. parameters related to thresholded acquisition).

nco_en: bool[source]#

Specifies whether the NCO will be used or not.

sync_en: bool[source]#

Enables party-line synchronization.

channel_name: str[source]#

Specifies the channel identifier of the hardware config (e.g. complex_output_0).

connected_output_indices: Tuple[int] | Tuple[int, int] | None[source]#

Specifies the indices of the outputs this sequencer produces waveforms for.

connected_input_indices: Tuple[int] | Tuple[int, int] | None[source]#

Specifies the indices of the inputs this sequencer collects data for.

init_offset_awg_path_I: float = 0.0[source]#

Specifies what value the sequencer offset for AWG path_I will be reset to before the start of the experiment.

init_offset_awg_path_Q: float = 0.0[source]#

Specifies what value the sequencer offset for AWG path_Q will be reset to before the start of the experiment.

init_gain_awg_path_I: float = 1.0[source]#

Specifies what value the sequencer gain for AWG path_I will be reset to before the start of the experiment.

init_gain_awg_path_Q: float = 1.0[source]#

Specifies what value the sequencer gain for AWG path_Q will be reset to before the start of the experiment.

modulation_freq: float | None[source]#

Specifies the frequency of the modulation.

mixer_corr_phase_offset_degree: float = 0.0[source]#

The phase shift to apply between the I and Q channels, to correct for quadrature errors.

mixer_corr_gain_ratio: float = 1.0[source]#

The gain ratio to apply in order to correct for imbalances between the I and Q paths of the mixer.

integration_length_acq: int | None[source]#

Integration length for acquisitions. Must be a multiple of 4 ns.

sequence: Dict[str, Any] | None[source]#

JSON compatible dictionary holding the waveforms and program for the sequencer.

seq_fn: str | None[source]#

Filename of JSON file containing a dump of the waveforms and program.

thresholded_acq_threshold: float | None[source]#

The sequencer discretization threshold for discretizing the phase rotation result.

thresholded_acq_rotation: float | None[source]#

The sequencer integration result phase rotation in degrees.

ttl_acq_input_select: int | None[source]#

Selects the input used to compare against the threshold value in the TTL trigger acquisition path.

ttl_acq_threshold: float | None[source]#

Sets the threshold value with which to compare the input ADC values of the selected input path.

ttl_acq_auto_bin_incr_en: bool | None[source]#

Selects if the bin index is automatically incremented when acquiring multiple triggers.

thresholded_acq_trigger_address: int | None[source]#

Sets the feedback trigger address to be used by conditional playback.

thresholded_acq_trigger_en: bool | None[source]#

Enables the sequencer to record acquisitions.

thresholded_acq_trigger_invert: bool = False[source]#

If you want to set a trigger when the acquisition result is 1, the parameter must be set to false and vice versa.

classmethod initialize_from_config_dict(sequencer_cfg: Dict[str, Any], channel_name: str, connected_output_indices: Tuple[int] | Tuple[int, int] | None, connected_input_indices: Tuple[int] | Tuple[int, int] | None) SequencerSettings[source]#

Instantiates an instance of this class, with initial parameters determined from the sequencer configuration dictionary.

Parameters:
  • sequencer_cfg (dict) – The sequencer configuration dict.

  • channel_name – Specifies the channel identifier of the hardware config (e.g. complex_output_0).

  • connected_output_indices – Specifies the indices of the outputs this sequencer produces waveforms for.

  • connected_input_indices – Specifies the indices of the inputs this sequencer collects data for.

Returns:

A SequencerSettings instance with initial values.

Return type:

SequencerSettings

class QbloxBaseDescription(/, **data: Any)[source]#

Bases: quantify_scheduler.backends.types.common.HardwareDescription

Base class for a Qblox hardware description.

ref: Literal[internal] | Literal[external][source]#

The reference source for the instrument.

sequence_to_file: bool = False[source]#

Write sequencer programs to files for (all modules in this) instrument.

class ComplexChannelDescription(/, **data: Any)[source]#

Bases: quantify_scheduler.structure.model.DataStructure

Information needed to specify an complex input/output in the QbloxHardwareCompilationConfig.

marker_debug_mode_enable: bool = False[source]#

Setting to send 4 ns trigger pulse on the marker located next to the I/O port along with each operation. The marker will be pulled high at the same time as the module starts playing or acquiring.

mix_lo: bool = True[source]#

Whether IQ mixing with a local oscillator is enabled for this channel. Effectively always True for RF modules.

downconverter_freq: float | None[source]#

Downconverter frequency that should be taken into account when determining the modulation frequencies for this channel. Only relevant for users with custom Qblox downconverter hardware.

class RealChannelDescription(/, **data: Any)[source]#

Bases: quantify_scheduler.structure.model.DataStructure

Information needed to specify a real input/output in the QbloxHardwareCompilationConfig.

marker_debug_mode_enable: bool = False[source]#

Setting to send 4 ns trigger pulse on the marker located next to the I/O port along with each operation. The marker will be pulled high at the same time as the module starts playing or acquiring.

class DigitalChannelDescription(/, **data: Any)[source]#

Bases: quantify_scheduler.structure.model.DataStructure

Information needed to specify a digital (marker) output (for MarkerPulse) in the QbloxHardwareCompilationConfig.

This datastructure is currently empty, since no extra settings are needed/allowed for a digital output.

class DescriptionAnnotationsGettersMixin[source]#

Provide the functionality of retrieving valid channel names by inheriting this class.

classmethod get_valid_channels() List[str][source]#

Return all the valid channel names for this hardware description.

classmethod get_instrument_type() str[source]#

Return the instrument type indicated in this hardware description.

class QRMDescription(/, **data: Any)[source]#

Bases: quantify_scheduler.structure.model.DataStructure, DescriptionAnnotationsGettersMixin

Information needed to specify a QRM in the QbloxHardwareCompilationConfig.

instrument_type: Literal[QRM][source]#

The instrument type of this module.

sequence_to_file: bool = False[source]#

Write sequencer programs to files, for this module.

complex_output_0: ComplexChannelDescription | None[source]#

Description of the complex output channel on this QRM, corresponding to ports O1 and O2.

complex_input_0: ComplexChannelDescription | None[source]#

Description of the complex input channel on this QRM, corresponding to ports I1 and I2.

real_output_0: RealChannelDescription | None[source]#

Description of the real output channel on this QRM, corresponding to port O1.

real_output_1: RealChannelDescription | None[source]#

Description of the real output channel on this QRM, corresponding to port O2.

real_input_0: RealChannelDescription | None[source]#

Description of the real input channel on this QRM, corresponding to port I1.

real_input_1: RealChannelDescription | None[source]#

Description of the real output channel on this QRM, corresponding to port I2.

digital_output_0: DigitalChannelDescription | None[source]#

Description of the digital (marker) output channel on this QRM, corresponding to port M1.

digital_output_1: DigitalChannelDescription | None[source]#

Description of the digital (marker) output channel on this QRM, corresponding to port M2.

digital_output_2: DigitalChannelDescription | None[source]#

Description of the digital (marker) output channel on this QRM, corresponding to port M3.

digital_output_3: DigitalChannelDescription | None[source]#

Description of the digital (marker) output channel on this QRM, corresponding to port M4.

class QCMDescription(/, **data: Any)[source]#

Bases: quantify_scheduler.structure.model.DataStructure, DescriptionAnnotationsGettersMixin

Information needed to specify a QCM in the QbloxHardwareCompilationConfig.

instrument_type: Literal[QCM][source]#

The instrument type of this module.

sequence_to_file: bool = False[source]#

Write sequencer programs to files, for this module.

complex_output_0: ComplexChannelDescription | None[source]#

Description of the complex output channel on this QRM, corresponding to ports O1 and O2.

complex_output_1: ComplexChannelDescription | None[source]#

Description of the complex output channel on this QRM, corresponding to ports O3 and O4.

real_output_0: RealChannelDescription | None[source]#

Description of the real output channel on this QRM, corresponding to port O1.

real_output_1: RealChannelDescription | None[source]#

Description of the real output channel on this QRM, corresponding to port O2.

real_output_2: RealChannelDescription | None[source]#

Description of the real output channel on this QRM, corresponding to port O3.

real_output_3: RealChannelDescription | None[source]#

Description of the real output channel on this QRM, corresponding to port O4.

digital_output_0: DigitalChannelDescription | None[source]#

Description of the digital (marker) output channel on this QRM, corresponding to port M1.

digital_output_1: DigitalChannelDescription | None[source]#

Description of the digital (marker) output channel on this QRM, corresponding to port M2.

digital_output_2: DigitalChannelDescription | None[source]#

Description of the digital (marker) output channel on this QRM, corresponding to port M3.

digital_output_3: DigitalChannelDescription | None[source]#

Description of the digital (marker) output channel on this QRM, corresponding to port M4.

class QRMRFDescription(/, **data: Any)[source]#

Bases: quantify_scheduler.structure.model.DataStructure, DescriptionAnnotationsGettersMixin

Information needed to specify a QRM-RF in the QbloxHardwareCompilationConfig.

instrument_type: Literal[QRM_RF][source]#

The instrument type of this module.

sequence_to_file: bool = False[source]#

Write sequencer programs to files, for this module.

complex_output_0: ComplexChannelDescription | None[source]#

Description of the complex output channel on this QRM, corresponding to port O1.

complex_input_0: ComplexChannelDescription | None[source]#

Description of the complex input channel on this QRM, corresponding to port I1.

digital_output_0: DigitalChannelDescription | None[source]#

Description of the digital (marker) output channel on this QRM, corresponding to port M1.

digital_output_1: DigitalChannelDescription | None[source]#

Description of the digital (marker) output channel on this QRM, corresponding to port M2.

class QCMRFDescription(/, **data: Any)[source]#

Bases: quantify_scheduler.structure.model.DataStructure, DescriptionAnnotationsGettersMixin

Information needed to specify a QCM-RF in the QbloxHardwareCompilationConfig.

instrument_type: Literal[QCM_RF][source]#

The instrument type of this module.

sequence_to_file: bool = False[source]#

Write sequencer programs to files, for this module.

complex_output_0: ComplexChannelDescription | None[source]#

Description of the complex output channel on this QRM, corresponding to port O1.

complex_output_1: ComplexChannelDescription | None[source]#

Description of the complex output channel on this QRM, corresponding to port O2.

digital_output_0: DigitalChannelDescription | None[source]#

Description of the digital (marker) output channel on this QRM, corresponding to port M1.

digital_output_1: DigitalChannelDescription | None[source]#

Description of the digital (marker) output channel on this QRM, corresponding to port M2.

ClusterModuleDescription[source]#

Specifies a Cluster module and its instrument-specific settings.

The supported instrument types are: QRMDescription, QCMDescription, QRMRFDescription, QCMRFDescription,

class ClusterDescription(/, **data: Any)[source]#

Bases: QbloxBaseDescription

Information needed to specify a Cluster in the CompilationConfig.

instrument_type: Literal[Cluster][source]#

The instrument type, used to select this datastructure when parsing a CompilationConfig.

modules: Dict[int, ClusterModuleDescription][source]#

Description of the modules of this Cluster, using slot index as key.

QbloxHardwareDescription[source]#

Specifies a piece of Qblox hardware and its instrument-specific settings.

RealInputGain[source]#

Input gain settings for a real input connected to a port-clock combination.

This gain value will be set on the QRM input ports that are connected to this port-clock combination.

class ComplexInputGain(/, **data: Any)[source]#

Bases: quantify_scheduler.structure.model.DataStructure

Input gain settings for a real input connected to a port-clock combination.

This gain value will be set on the QRM input ports that are connected to this port-clock combination.

gain_I: int[source]#

Gain setting on the input receiving the I-component data for this port-clock combination.

gain_Q: int[source]#

Gain setting on the input receiving the Q-component data for this port-clock combination.

OutputAttenuation[source]#

Output attenuation setting for a port-clock combination.

This attenuation value will be set on each control-hardware output port that is connected to this port-clock combination.

InputAttenuation[source]#

Input attenuation setting for a port-clock combination.

This attenuation value will be set on each control-hardware output port that is connected to this port-clock combination.

class SequencerOptions(/, **data: Any)[source]#

Bases: quantify_scheduler.structure.model.DataStructure

Configuration options for a sequencer.

For allowed values, also see Cluster QCoDeS parameters.

init_offset_awg_path_I: float = 0.0[source]#

Specifies what value the sequencer offset for AWG path_I will be reset to before the start of the experiment.

init_offset_awg_path_Q: float = 0.0[source]#

Specifies what value the sequencer offset for AWG path_Q will be reset to before the start of the experiment.

init_gain_awg_path_I: float = 1.0[source]#

Specifies what value the sequencer gain for AWG path_I will be reset to before the start of the experiment.

init_gain_awg_path_Q: float = 1.0[source]#

Specifies what value the sequencer gain for AWG path_Q will be reset to before the start of the experiment.

ttl_acq_threshold: float | None[source]#

Threshold value with which to compare the input ADC values of the selected input path.

qasm_hook_func: Callable | None[source]#

Function to inject custom qasm instructions after the compiler inserts the footer and the stop instruction in the generated qasm program.

_init_setting_limits(init_setting)[source]#
class QbloxHardwareOptions(/, **data: Any)[source]#

Bases: quantify_scheduler.backends.types.common.HardwareOptions

Datastructure containing the hardware options for each port-clock combination.

input_gain: Dict[str, RealInputGain | ComplexInputGain] | None[source]#

Dictionary containing the input gain settings (values) that should be applied to the inputs that are connected to a certain port-clock combination (keys).

output_att: Dict[str, OutputAttenuation] | None[source]#

Dictionary containing the attenuation settings (values) that should be applied to the outputs that are connected to a certain port-clock combination (keys).

input_att: Dict[str, InputAttenuation] | None[source]#

Dictionary containing the attenuation settings (values) that should be applied to the inputs that are connected to a certain port-clock combination (keys).

sequencer_options: Dict[str, SequencerOptions] | None[source]#

Dictionary containing the options (values) that should be set on the sequencer that is used for a certain port-clock combination (keys).