qblox ===== .. py:module:: quantify_scheduler.backends.types.qblox .. autoapi-nested-parse:: Python dataclasses for compilation to Qblox hardware. Module Contents --------------- Classes ~~~~~~~ .. autoapisummary:: quantify_scheduler.backends.types.qblox.BoundedParameter quantify_scheduler.backends.types.qblox.StaticHardwareProperties quantify_scheduler.backends.types.qblox.StaticAnalogModuleProperties quantify_scheduler.backends.types.qblox.StaticTimetagModuleProperties quantify_scheduler.backends.types.qblox.OpInfo quantify_scheduler.backends.types.qblox.LOSettings quantify_scheduler.backends.types.qblox.QbloxRealTimeFilter quantify_scheduler.backends.types.qblox.DistortionSettings quantify_scheduler.backends.types.qblox.BaseModuleSettings quantify_scheduler.backends.types.qblox.AnalogModuleSettings quantify_scheduler.backends.types.qblox.BasebandModuleSettings quantify_scheduler.backends.types.qblox.RFModuleSettings quantify_scheduler.backends.types.qblox.TimetagModuleSettings quantify_scheduler.backends.types.qblox.SequencerSettings quantify_scheduler.backends.types.qblox.AnalogSequencerSettings quantify_scheduler.backends.types.qblox.TimetagSequencerSettings quantify_scheduler.backends.types.qblox.QbloxBaseDescription quantify_scheduler.backends.types.qblox.ComplexChannelDescription quantify_scheduler.backends.types.qblox.RealChannelDescription quantify_scheduler.backends.types.qblox.DigitalChannelDescription quantify_scheduler.backends.types.qblox.DescriptionAnnotationsGettersMixin quantify_scheduler.backends.types.qblox.QRMDescription quantify_scheduler.backends.types.qblox.QCMDescription quantify_scheduler.backends.types.qblox.QRMRFDescription quantify_scheduler.backends.types.qblox.QCMRFDescription quantify_scheduler.backends.types.qblox.QTMDescription quantify_scheduler.backends.types.qblox.ClusterDescription quantify_scheduler.backends.types.qblox.ComplexInputGain quantify_scheduler.backends.types.qblox.QbloxMixerCorrections quantify_scheduler.backends.types.qblox.SequencerOptions quantify_scheduler.backends.types.qblox.QbloxHardwareDistortionCorrection quantify_scheduler.backends.types.qblox.DigitizationThresholds quantify_scheduler.backends.types.qblox.QbloxHardwareOptions Attributes ~~~~~~~~~~ .. autoapisummary:: quantify_scheduler.backends.types.qblox._ModuleSettingsT quantify_scheduler.backends.types.qblox.ClusterModuleDescription quantify_scheduler.backends.types.qblox.QbloxHardwareDescription quantify_scheduler.backends.types.qblox.RealInputGain quantify_scheduler.backends.types.qblox.OutputAttenuation quantify_scheduler.backends.types.qblox.InputAttenuation .. py:exception:: ValidationWarning Bases: :py:obj:`UserWarning` Warning type for dubious arguments passed to pydantic models. .. py:class:: BoundedParameter Specifies a certain parameter with a fixed max and min in a certain unit. .. py:attribute:: min_val :type: float Min value allowed. .. py:attribute:: max_val :type: float Max value allowed. .. py:attribute:: units :type: str Units in which the parameter is specified. .. py:class:: StaticHardwareProperties Specifies the fixed hardware properties needed in the backend. .. py:attribute:: instrument_type :type: str The type of instrument. .. py:attribute:: max_sequencers :type: int The amount of sequencers available. .. py:attribute:: channel_name_to_connected_io_indices :type: Dict[str, tuple[int, Ellipsis]] Specifies the connected io indices per channel_name identifier. .. py:method:: _get_connected_output_indices(channel_name) -> tuple[int, Ellipsis] Return the connected output indices associated with the output name specified in the hardware config. .. py:method:: _get_connected_input_indices(channel_name) -> tuple[int, Ellipsis] Return the connected input indices associated with the input name specified in the hardware config. .. py:class:: StaticAnalogModuleProperties Bases: :py:obj:`StaticHardwareProperties` Specifies the fixed hardware properties needed in the backend for QRM/QCM modules. .. py:attribute:: max_awg_output_voltage :type: Optional[float] Maximum output voltage of the awg. .. py:attribute:: mixer_dc_offset_range :type: BoundedParameter Specifies the range over which the dc offsets can be set that are used for mixer calibration. .. py:attribute:: default_marker :type: int :value: 0 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. .. py:attribute:: channel_name_to_digital_marker :type: Dict[str, int] 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. .. py:class:: StaticTimetagModuleProperties Bases: :py:obj:`StaticHardwareProperties` Specifies the fixed hardware properties needed in the backend for QTM modules. .. py:class:: OpInfo Bases: :py:obj:`dataclasses_json.DataClassJsonMixin` Data structure describing a pulse or acquisition and containing all the information required to play it. .. py:attribute:: name :type: str Name of the operation that this pulse/acquisition is part of. .. py:attribute:: data :type: dict The pulse/acquisition info taken from the ``data`` property of the pulse/acquisition in the schedule. .. py:attribute:: timing :type: float 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". .. py:property:: duration :type: float The duration of the pulse/acquisition. .. py:property:: is_acquisition :type: bool Returns ``True`` if this is an acquisition, ``False`` otherwise. .. py:property:: is_real_time_io_operation :type: bool Returns ``True`` if the operation is a non-idle pulse (i.e., it has a waveform), ``False`` otherwise. .. py:property:: is_offset_instruction :type: bool Returns ``True`` if the operation describes a DC offset operation, corresponding to the Q1ASM instruction ``set_awg_offset``. .. py:property:: is_parameter_instruction :type: bool 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. .. py:property:: is_parameter_update :type: bool Return ``True`` if the operation is a parameter update, corresponding to the Q1ASM instruction ``upd_param``. .. py:property:: is_loop :type: bool Return ``True`` if the operation is a loop, corresponding to the Q1ASM instruction ``loop``. .. py:property:: is_control_flow_end :type: bool Return ``True`` if the operation is a control flow end. .. py:class:: LOSettings Bases: :py:obj:`dataclasses_json.DataClassJsonMixin` Dataclass containing all the settings for a generic LO instrument. .. py:attribute:: power :type: Dict[str, float] Power of the LO source. .. py:attribute:: frequency :type: Dict[str, Optional[float]] The frequency to set the LO to. .. py:data:: _ModuleSettingsT Custom type to allow correct type inference from ``extract_settings_from_mapping`` for child classes. .. py:class:: QbloxRealTimeFilter Bases: :py:obj:`dataclasses_json.DataClassJsonMixin` An individual real time filter on Qblox hardware. .. py:attribute:: coeffs :type: Optional[Union[float, List[float]]] :value: None Coefficient(s) of the filter. Can be None if there is no filter or if it is inactive. .. py:attribute:: config :type: quantify_scheduler.backends.qblox.enums.QbloxFilterConfig Configuration of the filter. One of 'BYPASSED', 'ENABLED', or 'DELAY_COMP'. .. py:attribute:: marker_delay :type: quantify_scheduler.backends.qblox.enums.QbloxFilterMarkerDelay State of the marker delay. One of 'BYPASSED' or 'ENABLED'. .. py:class:: DistortionSettings Bases: :py:obj:`dataclasses_json.DataClassJsonMixin` Distortion correction settings for all Qblox modules. .. py:attribute:: bt :type: QbloxRealTimeFilter The bias tee correction filter. .. py:attribute:: exp0 :type: QbloxRealTimeFilter The exponential overshoot correction 1 filter. .. py:attribute:: exp1 :type: QbloxRealTimeFilter The exponential overshoot correction 2 filter. .. py:attribute:: exp2 :type: QbloxRealTimeFilter The exponential overshoot correction 3 filter. .. py:attribute:: exp3 :type: QbloxRealTimeFilter The exponential overshoot correction 4 filter. .. py:attribute:: fir :type: QbloxRealTimeFilter The FIR filter. .. py:class:: BaseModuleSettings Bases: :py:obj:`dataclasses_json.DataClassJsonMixin` Shared settings between all the Qblox modules. .. py:attribute:: offset_ch0_path_I :type: Optional[float] :value: None The DC offset on the path_I of channel 0. .. py:attribute:: offset_ch0_path_Q :type: Optional[float] :value: None The DC offset on the path_Q of channel 0. .. py:attribute:: offset_ch1_path_I :type: Optional[float] :value: None The DC offset on path_I of channel 1. .. py:attribute:: offset_ch1_path_Q :type: Optional[float] :value: None The DC offset on path_Q of channel 1. .. py:attribute:: in0_gain :type: Optional[int] :value: None The gain of input 0. .. py:attribute:: in1_gain :type: Optional[int] :value: None The gain of input 1. .. py:attribute:: distortion_corrections :type: List[DistortionSettings] distortion correction settings .. py:method:: extract_settings_from_mapping(mapping: quantify_scheduler.backends.qblox_backend._ClusterModuleCompilationConfig, **kwargs) -> _ModuleSettingsT :classmethod: Factory method that takes all the settings defined in the mapping and generates an instance of this class. :param mapping: The mapping dict to extract the settings from :param \*\*kwargs: Additional keyword arguments passed to the constructor. Can be used to override parts of the mapping dict. .. py:class:: AnalogModuleSettings Bases: :py:obj:`BaseModuleSettings` Shared settings between all QCM/QRM modules. .. py:attribute:: offset_ch0_path_I :type: Optional[float] :value: None The DC offset on the path_I of channel 0. .. py:attribute:: offset_ch0_path_Q :type: Optional[float] :value: None The DC offset on the path_Q of channel 0. .. py:attribute:: offset_ch1_path_I :type: Optional[float] :value: None The DC offset on path_I of channel 1. .. py:attribute:: offset_ch1_path_Q :type: Optional[float] :value: None The DC offset on path_Q of channel 1. .. py:attribute:: out0_lo_freq_cal_type_default :type: quantify_scheduler.backends.qblox.enums.LoCalEnum Setting that controls whether the mixer of channel 0 is calibrated upon changing the LO and/or intermodulation frequency. .. py:attribute:: out1_lo_freq_cal_type_default :type: quantify_scheduler.backends.qblox.enums.LoCalEnum Setting that controls whether the mixer of channel 1 is calibrated upon changing the LO and/or intermodulation frequency. .. py:attribute:: in0_gain :type: Optional[int] :value: None The gain of input 0. .. py:attribute:: in1_gain :type: Optional[int] :value: None The gain of input 1. .. py:class:: BasebandModuleSettings Bases: :py:obj:`AnalogModuleSettings` 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. .. py:class:: RFModuleSettings Bases: :py:obj:`AnalogModuleSettings` 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 :class:`~.AnalogSequencerSettings`. .. py:attribute:: lo0_freq :type: Optional[float] :value: None The frequency of Output 0 (O0) LO. If left `None`, the parameter will not be set. .. py:attribute:: lo1_freq :type: Optional[float] :value: None The frequency of Output 1 (O1) LO. If left `None`, the parameter will not be set. .. py:attribute:: out0_att :type: Optional[int] :value: None The attenuation of Output 0. .. py:attribute:: out1_att :type: Optional[int] :value: None The attenuation of Output 1. .. py:attribute:: in0_att :type: Optional[int] :value: None The attenuation of Input 0. .. py:method:: extract_settings_from_mapping(mapping: quantify_scheduler.backends.qblox_backend._ClusterModuleCompilationConfig, **kwargs: Optional[dict]) -> RFModuleSettings :classmethod: Factory method that takes all the settings defined in the mapping and generates an :class:`~.RFModuleSettings` object from it. :param mapping: The compiler config to extract the settings from :param \*\*kwargs: Additional keyword arguments passed to the constructor. Can be used to override parts of the mapping dict. .. py:class:: TimetagModuleSettings Bases: :py:obj:`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 :class:`~.TimetagSequencerSettings`. .. py:class:: SequencerSettings Bases: :py:obj:`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). .. py:attribute:: sync_en :type: bool Enables party-line synchronization. .. py:attribute:: channel_name :type: str Specifies the channel identifier of the hardware config (e.g. `complex_output_0`). .. py:attribute:: connected_output_indices :type: Tuple[int, Ellipsis] Specifies the indices of the outputs this sequencer produces waveforms for. .. py:attribute:: connected_input_indices :type: Tuple[int, Ellipsis] Specifies the indices of the inputs this sequencer collects data for. .. py:attribute:: sequence :type: Optional[Dict[str, Any]] :value: None JSON compatible dictionary holding the waveforms and program for the sequencer. .. py:attribute:: seq_fn :type: Optional[str] :value: None Filename of JSON file containing a dump of the waveforms and program. .. py:attribute:: thresholded_acq_trigger_address :type: Optional[int] :value: None Sets the feedback trigger address to be used by conditional playback. .. py:attribute:: thresholded_acq_trigger_en :type: Optional[bool] :value: None Enables the sequencer to record acquisitions. .. py:attribute:: thresholded_acq_trigger_invert :type: bool :value: False If you want to set a trigger when the acquisition result is 1, the parameter must be set to false and vice versa. .. py:method:: initialize_from_compilation_config(sequencer_cfg: quantify_scheduler.backends.qblox_backend._SequencerCompilationConfig, connected_output_indices: tuple[int, Ellipsis], connected_input_indices: tuple[int, Ellipsis]) -> SequencerSettings :classmethod: Instantiates an instance of this class, with initial parameters determined from the sequencer compilation config. :param sequencer_cfg: The sequencer compilation_config. :param connected_output_indices: Specifies the indices of the outputs this sequencer produces waveforms for. :param connected_input_indices: Specifies the indices of the inputs this sequencer collects data for. :returns: A SequencerSettings instance with initial values. :rtype: SequencerSettings .. py:class:: AnalogSequencerSettings Bases: :py:obj:`SequencerSettings` 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). .. py:attribute:: nco_en :type: bool :value: False Specifies whether the NCO will be used or not. .. py:attribute:: init_offset_awg_path_I :type: float :value: 0.0 Specifies what value the sequencer offset for AWG path_I will be reset to before the start of the experiment. .. py:attribute:: init_offset_awg_path_Q :type: float :value: 0.0 Specifies what value the sequencer offset for AWG path_Q will be reset to before the start of the experiment. .. py:attribute:: init_gain_awg_path_I :type: float :value: 1.0 Specifies what value the sequencer gain for AWG path_I will be reset to before the start of the experiment. .. py:attribute:: init_gain_awg_path_Q :type: float :value: 1.0 Specifies what value the sequencer gain for AWG path_Q will be reset to before the start of the experiment. .. py:attribute:: modulation_freq :type: Optional[float] :value: None Specifies the frequency of the modulation. .. py:attribute:: mixer_corr_phase_offset_degree :type: Optional[float] :value: None The phase shift to apply between the I and Q channels, to correct for quadrature errors. .. py:attribute:: mixer_corr_gain_ratio :type: Optional[float] :value: None The gain ratio to apply in order to correct for imbalances between the I and Q paths of the mixer. .. py:attribute:: auto_sideband_cal :type: quantify_scheduler.backends.qblox.enums.SidebandCalEnum Setting that controls whether the mixer is calibrated upon changing the intermodulation frequency. .. py:attribute:: integration_length_acq :type: Optional[int] :value: None Integration length for acquisitions. Must be a multiple of 4 ns. .. py:attribute:: thresholded_acq_threshold :type: Optional[float] :value: None The sequencer discretization threshold for discretizing the phase rotation result. .. py:attribute:: thresholded_acq_rotation :type: Optional[float] :value: None The sequencer integration result phase rotation in degrees. .. py:attribute:: ttl_acq_input_select :type: Optional[int] :value: None Selects the input used to compare against the threshold value in the TTL trigger acquisition path. .. py:attribute:: ttl_acq_threshold :type: Optional[float] :value: None For QRM modules only, sets the threshold value with which to compare the input ADC values of the selected input path. .. py:attribute:: ttl_acq_auto_bin_incr_en :type: Optional[bool] :value: None Selects if the bin index is automatically incremented when acquiring multiple triggers. .. py:attribute:: allow_off_grid_nco_ops :type: Optional[bool] :value: None Flag to allow NCO operations to play at times that are not aligned with the NCO grid. .. py:method:: initialize_from_compilation_config(sequencer_cfg: quantify_scheduler.backends.qblox_backend._SequencerCompilationConfig, connected_output_indices: tuple[int, Ellipsis], connected_input_indices: tuple[int, Ellipsis]) -> AnalogSequencerSettings :classmethod: Instantiates an instance of this class, with initial parameters determined from the sequencer compilation config. :param sequencer_cfg: The sequencer compilation_config. :param connected_output_indices: Specifies the indices of the outputs this sequencer produces waveforms for. :param connected_input_indices: Specifies the indices of the inputs this sequencer collects data for. :returns: A AnalogSequencerSettings instance with initial values. :rtype: AnalogSequencerSettings .. py:class:: TimetagSequencerSettings Bases: :py:obj:`SequencerSettings` 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). .. py:attribute:: in_threshold_primary :type: Optional[float] :value: None The voltage threshold above which an input signal is registered as high. .. py:attribute:: time_source :type: Optional[quantify_scheduler.enums.TimeSource] :value: None Selects the timetag data source for timetag acquisitions. .. py:attribute:: time_ref :type: Optional[quantify_scheduler.enums.TimeRef] :value: None Selects the time reference that the timetag is recorded in relation to. .. py:attribute:: scope_trace_type :type: Optional[quantify_scheduler.backends.qblox.enums.TimetagTraceType] :value: None Set to True if the program on this sequencer contains a scope/trace acquisition. .. py:attribute:: trace_acq_duration :type: Optional[int] :value: None Duration of the trace acquisition (if any) done with this sequencer. .. py:method:: _validate_io_indices_no_channel_map() -> None There is no channel map in the QTM yet, so there can be only one connected index: either input or output. .. py:method:: initialize_from_compilation_config(sequencer_cfg: quantify_scheduler.backends.qblox_backend._SequencerCompilationConfig, connected_output_indices: tuple[int, Ellipsis], connected_input_indices: tuple[int, Ellipsis]) -> TimetagSequencerSettings :classmethod: Instantiates an instance of this class, with initial parameters determined from the sequencer compilation config. :param sequencer_cfg: The sequencer compilation config. :param connected_output_indices: Specifies the indices of the outputs this sequencer produces waveforms for. :param connected_input_indices: Specifies the indices of the inputs this sequencer collects data for. :returns: A SequencerSettings instance with initial values. :rtype: SequencerSettings .. py:class:: QbloxBaseDescription(/, **data: Any) Bases: :py:obj:`quantify_scheduler.backends.types.common.HardwareDescription` Base class for a Qblox hardware description. .. py:attribute:: ref :type: Union[Literal['internal'], Literal['external']] The reference source for the instrument. .. py:attribute:: sequence_to_file :type: bool :value: False Write sequencer programs to files for (all modules in this) instrument. .. py:class:: ComplexChannelDescription(/, **data: Any) Bases: :py:obj:`quantify_scheduler.structure.model.DataStructure` Information needed to specify an complex input/output in the :class:`~.quantify_scheduler.backends.qblox_backend.QbloxHardwareCompilationConfig`. .. py:attribute:: marker_debug_mode_enable :type: bool :value: False 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. .. py:attribute:: mix_lo :type: bool :value: True Whether IQ mixing with a local oscillator is enabled for this channel. Effectively always ``True`` for RF modules. .. py:attribute:: downconverter_freq :type: Optional[float] :value: None 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. .. py:attribute:: distortion_correction_latency_compensation :type: int Delay compensation setting that either delays the signal by the amount chosen by the settings or not. .. py:class:: RealChannelDescription(/, **data: Any) Bases: :py:obj:`quantify_scheduler.structure.model.DataStructure` Information needed to specify a real input/output in the :class:`~.quantify_scheduler.backends.qblox_backend.QbloxHardwareCompilationConfig`. .. py:attribute:: marker_debug_mode_enable :type: bool :value: False 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. .. py:attribute:: mix_lo :type: bool :value: True Whether IQ mixing with a local oscillator is enabled for this channel. Effectively always ``True`` for RF modules. .. py:attribute:: distortion_correction_latency_compensation :type: int Delay compensation setting that either delays the signal by the amount chosen by the settings or not. .. py:class:: DigitalChannelDescription(/, **data: Any) Bases: :py:obj:`quantify_scheduler.structure.model.DataStructure` Information needed to specify a digital (marker) output (for :class:`~.quantify_scheduler.operations.pulse_library.MarkerPulse`) in the :class:`~.quantify_scheduler.backends.qblox_backend.QbloxHardwareCompilationConfig`. .. py:attribute:: distortion_correction_latency_compensation :type: int Delay compensation setting that either delays the signal by the amount chosen by the settings or not. .. py:class:: DescriptionAnnotationsGettersMixin Provide the functionality of retrieving valid channel names by inheriting this class. .. py:method:: get_valid_channels() -> List[str] :classmethod: Return all the valid channel names for this hardware description. .. py:method:: get_instrument_type() -> str :classmethod: Return the instrument type indicated in this hardware description. .. py:method:: validate_channel_names(channel_names: Iterable[str]) -> None :classmethod: Validate channel names specified in the Connectivity. .. py:class:: QRMDescription(/, **data: Any) Bases: :py:obj:`quantify_scheduler.structure.model.DataStructure`, :py:obj:`DescriptionAnnotationsGettersMixin` Information needed to specify a QRM in the :class:`~.quantify_scheduler.backends.qblox_backend.QbloxHardwareCompilationConfig`. .. py:attribute:: instrument_type :type: Literal['QRM'] The instrument type of this module. .. py:attribute:: sequence_to_file :type: bool :value: False Write sequencer programs to files, for this module. .. py:attribute:: complex_output_0 :type: Optional[ComplexChannelDescription] :value: None Description of the complex output channel on this QRM, corresponding to ports O1 and O2. .. py:attribute:: complex_input_0 :type: Optional[ComplexChannelDescription] :value: None Description of the complex input channel on this QRM, corresponding to ports I1 and I2. .. py:attribute:: real_output_0 :type: Optional[RealChannelDescription] :value: None Description of the real output channel on this QRM, corresponding to port O1. .. py:attribute:: real_output_1 :type: Optional[RealChannelDescription] :value: None Description of the real output channel on this QRM, corresponding to port O2. .. py:attribute:: real_input_0 :type: Optional[RealChannelDescription] :value: None Description of the real input channel on this QRM, corresponding to port I1. .. py:attribute:: real_input_1 :type: Optional[RealChannelDescription] :value: None Description of the real output channel on this QRM, corresponding to port I2. .. py:attribute:: digital_output_0 :type: Optional[DigitalChannelDescription] :value: None Description of the digital (marker) output channel on this QRM, corresponding to port M1. .. py:attribute:: digital_output_1 :type: Optional[DigitalChannelDescription] :value: None Description of the digital (marker) output channel on this QRM, corresponding to port M2. .. py:attribute:: digital_output_2 :type: Optional[DigitalChannelDescription] :value: None Description of the digital (marker) output channel on this QRM, corresponding to port M3. .. py:attribute:: digital_output_3 :type: Optional[DigitalChannelDescription] :value: None Description of the digital (marker) output channel on this QRM, corresponding to port M4. .. py:class:: QCMDescription(/, **data: Any) Bases: :py:obj:`quantify_scheduler.structure.model.DataStructure`, :py:obj:`DescriptionAnnotationsGettersMixin` Information needed to specify a QCM in the :class:`~.quantify_scheduler.backends.qblox_backend.QbloxHardwareCompilationConfig`. .. py:attribute:: instrument_type :type: Literal['QCM'] The instrument type of this module. .. py:attribute:: sequence_to_file :type: bool :value: False Write sequencer programs to files, for this module. .. py:attribute:: complex_output_0 :type: Optional[ComplexChannelDescription] :value: None Description of the complex output channel on this QRM, corresponding to ports O1 and O2. .. py:attribute:: complex_output_1 :type: Optional[ComplexChannelDescription] :value: None Description of the complex output channel on this QRM, corresponding to ports O3 and O4. .. py:attribute:: real_output_0 :type: Optional[RealChannelDescription] :value: None Description of the real output channel on this QRM, corresponding to port O1. .. py:attribute:: real_output_1 :type: Optional[RealChannelDescription] :value: None Description of the real output channel on this QRM, corresponding to port O2. .. py:attribute:: real_output_2 :type: Optional[RealChannelDescription] :value: None Description of the real output channel on this QRM, corresponding to port O3. .. py:attribute:: real_output_3 :type: Optional[RealChannelDescription] :value: None Description of the real output channel on this QRM, corresponding to port O4. .. py:attribute:: digital_output_0 :type: Optional[DigitalChannelDescription] :value: None Description of the digital (marker) output channel on this QRM, corresponding to port M1. .. py:attribute:: digital_output_1 :type: Optional[DigitalChannelDescription] :value: None Description of the digital (marker) output channel on this QRM, corresponding to port M2. .. py:attribute:: digital_output_2 :type: Optional[DigitalChannelDescription] :value: None Description of the digital (marker) output channel on this QRM, corresponding to port M3. .. py:attribute:: digital_output_3 :type: Optional[DigitalChannelDescription] :value: None Description of the digital (marker) output channel on this QRM, corresponding to port M4. .. py:class:: QRMRFDescription(/, **data: Any) Bases: :py:obj:`quantify_scheduler.structure.model.DataStructure`, :py:obj:`DescriptionAnnotationsGettersMixin` Information needed to specify a QRM-RF in the :class:`~.quantify_scheduler.backends.qblox_backend.QbloxHardwareCompilationConfig`. .. py:attribute:: instrument_type :type: Literal['QRM_RF'] The instrument type of this module. .. py:attribute:: sequence_to_file :type: bool :value: False Write sequencer programs to files, for this module. .. py:attribute:: complex_output_0 :type: Optional[ComplexChannelDescription] :value: None Description of the complex output channel on this QRM, corresponding to port O1. .. py:attribute:: complex_input_0 :type: Optional[ComplexChannelDescription] :value: None Description of the complex input channel on this QRM, corresponding to port I1. .. py:attribute:: digital_output_0 :type: Optional[DigitalChannelDescription] :value: None Description of the digital (marker) output channel on this QRM, corresponding to port M1. .. py:attribute:: digital_output_1 :type: Optional[DigitalChannelDescription] :value: None Description of the digital (marker) output channel on this QRM, corresponding to port M2. .. py:class:: QCMRFDescription(/, **data: Any) Bases: :py:obj:`quantify_scheduler.structure.model.DataStructure`, :py:obj:`DescriptionAnnotationsGettersMixin` Information needed to specify a QCM-RF in the :class:`~.quantify_scheduler.backends.qblox_backend.QbloxHardwareCompilationConfig`. .. py:attribute:: instrument_type :type: Literal['QCM_RF'] The instrument type of this module. .. py:attribute:: sequence_to_file :type: bool :value: False Write sequencer programs to files, for this module. .. py:attribute:: complex_output_0 :type: Optional[ComplexChannelDescription] :value: None Description of the complex output channel on this QRM, corresponding to port O1. .. py:attribute:: complex_output_1 :type: Optional[ComplexChannelDescription] :value: None Description of the complex output channel on this QRM, corresponding to port O2. .. py:attribute:: digital_output_0 :type: Optional[DigitalChannelDescription] :value: None Description of the digital (marker) output channel on this QRM, corresponding to port M1. .. py:attribute:: digital_output_1 :type: Optional[DigitalChannelDescription] :value: None Description of the digital (marker) output channel on this QRM, corresponding to port M2. .. py:class:: QTMDescription(/, **data: Any) Bases: :py:obj:`quantify_scheduler.structure.model.DataStructure`, :py:obj:`DescriptionAnnotationsGettersMixin` Information needed to specify a QTM in the :class:`~.quantify_scheduler.backends.qblox_backend.QbloxHardwareCompilationConfig`. .. py:attribute:: instrument_type :type: Literal['QTM'] The instrument type of this module. .. py:attribute:: sequence_to_file :type: bool :value: False Write sequencer programs to files, for this module. .. py:attribute:: digital_input_0 :type: Optional[DigitalChannelDescription] :value: None Description of the digital channel corresponding to port 1, specified as input. .. py:attribute:: digital_input_1 :type: Optional[DigitalChannelDescription] :value: None Description of the digital channel corresponding to port 2, specified as input. .. py:attribute:: digital_input_2 :type: Optional[DigitalChannelDescription] :value: None Description of the digital channel corresponding to port 3, specified as input. .. py:attribute:: digital_input_3 :type: Optional[DigitalChannelDescription] :value: None Description of the digital channel corresponding to port 4, specified as input. .. py:attribute:: digital_input_4 :type: Optional[DigitalChannelDescription] :value: None Description of the digital channel corresponding to port 5, specified as input. .. py:attribute:: digital_input_5 :type: Optional[DigitalChannelDescription] :value: None Description of the digital channel corresponding to port 6, specified as input. .. py:attribute:: digital_input_6 :type: Optional[DigitalChannelDescription] :value: None Description of the digital channel corresponding to port 7, specified as input. .. py:attribute:: digital_input_7 :type: Optional[DigitalChannelDescription] :value: None Description of the digital channel corresponding to port 8, specified as input. .. py:attribute:: digital_output_0 :type: Optional[DigitalChannelDescription] :value: None Description of the digital channel corresponding to port 1, specified as output. .. py:attribute:: digital_output_1 :type: Optional[DigitalChannelDescription] :value: None Description of the digital channel corresponding to port 2, specified as output. .. py:attribute:: digital_output_2 :type: Optional[DigitalChannelDescription] :value: None Description of the digital channel corresponding to port 3, specified as output. .. py:attribute:: digital_output_3 :type: Optional[DigitalChannelDescription] :value: None Description of the digital channel corresponding to port 4, specified as output. .. py:attribute:: digital_output_4 :type: Optional[DigitalChannelDescription] :value: None Description of the digital channel corresponding to port 5, specified as output. .. py:attribute:: digital_output_5 :type: Optional[DigitalChannelDescription] :value: None Description of the digital channel corresponding to port 6, specified as output. .. py:attribute:: digital_output_6 :type: Optional[DigitalChannelDescription] :value: None Description of the digital channel corresponding to port 7, specified as output. .. py:attribute:: digital_output_7 :type: Optional[DigitalChannelDescription] :value: None Description of the digital channel corresponding to port 8, specified as output. .. py:method:: validate_channel_names(channel_names: Iterable[str]) -> None :classmethod: Validate channel names specified in the Connectivity. .. py:data:: ClusterModuleDescription Specifies a Cluster module and its instrument-specific settings. The supported instrument types are: :class:`~.QRMDescription`, :class:`~.QCMDescription`, :class:`~.QRMRFDescription`, :class:`~.QCMRFDescription`, :class:`~.QTMDescription`, .. py:class:: ClusterDescription(/, **data: Any) Bases: :py:obj:`QbloxBaseDescription` Information needed to specify a Cluster in the :class:`~.CompilationConfig`. .. py:attribute:: instrument_type :type: Literal['Cluster'] The instrument type, used to select this datastructure when parsing a :class:`~.CompilationConfig`. .. py:attribute:: modules :type: Dict[int, ClusterModuleDescription] Description of the modules of this Cluster, using slot index as key. .. py:attribute:: ip :type: Optional[str] :value: None Unique identifier (typically the ip address) used to connect to the cluster .. py:data:: QbloxHardwareDescription Specifies a piece of Qblox hardware and its instrument-specific settings. .. py:data:: RealInputGain 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. .. admonition:: Example :class: dropdown .. code-block:: python hardware_compilation_config.hardware_options.input_gain = { "q0:res-q0.ro": RealInputGain(2), } .. py:class:: ComplexInputGain(/, **data: Any) Bases: :py:obj:`quantify_scheduler.structure.model.DataStructure` Input gain settings for a complex 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. .. admonition:: Example :class: dropdown .. code-block:: python hardware_compilation_config.hardware_options.input_gain = { "q0:res-q0.ro": ComplexInputGain( gain_I=2, gain_Q=3 ), } .. py:attribute:: gain_I :type: int Gain setting on the input receiving the I-component data for this port-clock combination. .. py:attribute:: gain_Q :type: int Gain setting on the input receiving the Q-component data for this port-clock combination. .. py:data:: OutputAttenuation 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. .. admonition:: Example :class: dropdown .. code-block:: python hardware_compilation_config.hardware_options.output_att = { "q0:res-q0.ro": OutputAttenuation(10), } .. py:data:: InputAttenuation 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. .. admonition:: Example :class: dropdown .. code-block:: python hardware_compilation_config.hardware_options.input_att = { "q0:res-q0.ro": InputAttenuation(10), } .. py:class:: QbloxMixerCorrections(/, **data: Any) Bases: :py:obj:`quantify_scheduler.backends.types.common.MixerCorrections` Mixer correction settings with defaults set to None, and extra mixer correction settings for _automated_ mixer correction. These settings will be set on each control-hardware output port that is connected to this port-clock combination. .. admonition:: Example :class: dropdown .. code-block:: python hardware_compilation_config.hardware_options.mixer_corrections = { "q0:res-q0.ro": { auto_lo_cal="on_lo_interm_freq_change", auto_sideband_cal="on_interm_freq_change" }, } .. py:attribute:: dc_offset_i :type: Optional[float] :value: None The DC offset on the I channel used for this port-clock combination. .. py:attribute:: dc_offset_q :type: Optional[float] :value: None The DC offset on the Q channel used for this port-clock combination. .. py:attribute:: amp_ratio :type: float The mixer gain ratio used for this port-clock combination. .. py:attribute:: phase_error :type: float The mixer phase error used for this port-clock combination. .. py:attribute:: auto_lo_cal :type: quantify_scheduler.backends.qblox.enums.LoCalEnum Setting that controls whether the mixer is calibrated upon changing the LO and/or intermodulation frequency. .. py:attribute:: auto_sideband_cal :type: quantify_scheduler.backends.qblox.enums.SidebandCalEnum Setting that controls whether the mixer is calibrated upon changing the intermodulation frequency. .. py:method:: warn_if_mixed_auto_and_manual_calibration(data: dict[str, Any]) -> dict[str, Any] :classmethod: Warn if there is mixed usage of automatic mixer calibration (the auto_* settings) and manual mixer correction settings. .. py:class:: SequencerOptions(/, **data: Any) Bases: :py:obj:`quantify_scheduler.structure.model.DataStructure` Configuration options for a sequencer. For allowed values, also see `Cluster QCoDeS parameters `__. .. admonition:: Example :class: dropdown .. code-block:: python hardware_compilation_config.hardware_options.sequencer_options = { "q0:res-q0.ro": { "init_offset_awg_path_I": 0.1, "init_offset_awg_path_Q": -0.1, "init_gain_awg_path_I": 0.9, "init_gain_awg_path_Q": 1.0, "ttl_acq_threshold": 0.5 "qasm_hook_func": foo } } .. py:attribute:: init_offset_awg_path_I :type: float Specifies what value the sequencer offset for AWG path_I will be reset to before the start of the experiment. .. py:attribute:: init_offset_awg_path_Q :type: float Specifies what value the sequencer offset for AWG path_Q will be reset to before the start of the experiment. .. py:attribute:: init_gain_awg_path_I :type: float Specifies what value the sequencer gain for AWG path_I will be reset to before the start of the experiment. .. py:attribute:: init_gain_awg_path_Q :type: float Specifies what value the sequencer gain for AWG path_Q will be reset to before the start of the experiment. .. py:attribute:: ttl_acq_threshold :type: Optional[float] :value: None For QRM modules only, the threshold value with which to compare the input ADC values of the selected input path. .. py:attribute:: qasm_hook_func :type: Optional[Callable] :value: None Function to inject custom qasm instructions after the compiler inserts the footer and the stop instruction in the generated qasm program. .. py:method:: _init_setting_limits(init_setting) .. py:class:: QbloxHardwareDistortionCorrection(/, **data: Any) Bases: :py:obj:`quantify_scheduler.backends.types.common.HardwareDistortionCorrection` A hardware distortion correction specific to the Qblox backend. .. py:attribute:: bt_coeffs :type: Optional[List[float]] :value: None Coefficient of the bias tee correction. .. py:attribute:: exp0_coeffs :type: Optional[List[float]] :value: None Coefficients of the exponential overshoot/undershoot correction 1. .. py:attribute:: exp1_coeffs :type: Optional[List[float]] :value: None Coefficients of the exponential overshoot/undershoot correction 2. .. py:attribute:: exp2_coeffs :type: Optional[List[float]] :value: None Coefficients of the exponential overshoot/undershoot correction 3. .. py:attribute:: exp3_coeffs :type: Optional[List[float]] :value: None Coefficients of the exponential overshoot/undershoot correction 4. .. py:attribute:: fir_coeffs :type: Optional[List[float]] :value: None Coefficients for the FIR filter. .. py:class:: DigitizationThresholds(/, **data: Any) Bases: :py:obj:`quantify_scheduler.structure.model.DataStructure` The settings that determine when an analog voltage is counted as a pulse. .. py:attribute:: in_threshold_primary :type: Optional[float] :value: None For QTM modules only, this is the voltage threshold above which an input signal is registered as high. .. py:class:: QbloxHardwareOptions(/, **data: Any) Bases: :py:obj:`quantify_scheduler.backends.types.common.HardwareOptions` Datastructure containing the hardware options for each port-clock combination. .. admonition:: Example :class: dropdown Here, the HardwareOptions datastructure is created by parsing a dictionary containing the relevant information. .. jupyter-execute:: import pprint from quantify_scheduler.schemas.examples.utils import ( load_json_example_scheme ) .. jupyter-execute:: from quantify_scheduler.backends.types.qblox import ( QbloxHardwareOptions ) qblox_hw_options_dict = load_json_example_scheme( "qblox_hardware_config_transmon.json")["hardware_options"] pprint.pprint(qblox_hw_options_dict) The dictionary can be parsed using the :code:`model_validate` method. .. jupyter-execute:: qblox_hw_options = QbloxHardwareOptions.model_validate(qblox_hw_options_dict) qblox_hw_options .. py:attribute:: input_gain :type: Optional[Dict[str, Union[RealInputGain, ComplexInputGain]]] :value: None Dictionary containing the input gain settings (values) that should be applied to the inputs that are connected to a certain port-clock combination (keys). .. py:attribute:: output_att :type: Optional[Dict[str, OutputAttenuation]] :value: None Dictionary containing the attenuation settings (values) that should be applied to the outputs that are connected to a certain port-clock combination (keys). .. py:attribute:: input_att :type: Optional[Dict[str, InputAttenuation]] :value: None Dictionary containing the attenuation settings (values) that should be applied to the inputs that are connected to a certain port-clock combination (keys). .. py:attribute:: mixer_corrections :type: Optional[Dict[str, QbloxMixerCorrections]] :value: None Dictionary containing the qblox-specific mixer corrections (values) that should be used for signals on a certain port-clock combination (keys). .. py:attribute:: sequencer_options :type: Optional[Dict[str, SequencerOptions]] :value: None Dictionary containing the options (values) that should be set on the sequencer that is used for a certain port-clock combination (keys). .. py:attribute:: distortion_corrections :type: Optional[Dict[str, Union[quantify_scheduler.backends.types.common.SoftwareDistortionCorrection, QbloxHardwareDistortionCorrection, List[QbloxHardwareDistortionCorrection]]]] :value: None Dictionary containing the distortion corrections (values) that should be applied to waveforms on a certain port-clock combination (keys). .. py:attribute:: digitization_thresholds :type: Optional[Dict[str, DigitizationThresholds]] :value: None Dictionary containing the digitization threshold settings for QTM modules. These are the settings that determine the voltage thresholds above which input signals are registered as high.