Source code for qibolab.instruments.qblox.module

"""Qblox Cluster QCM driver."""

from qibolab.instruments.abstract import Instrument
from qibolab.instruments.qblox.port import QbloxInputPort, QbloxOutputPort


[docs]class ClusterModule(Instrument): """This class defines common features shared by all Qblox modules (QCM-BB, QCM-RF, QRM-RF). It serves as a foundational class, unifying the behavior of the three distinct modules. All module-specific classes are intended to inherit from this base class. """ DEFAULT_SEQUENCERS_VALUES = { "cont_mode_en_awg_path0": False, "cont_mode_en_awg_path1": False, "cont_mode_waveform_idx_awg_path0": 0, "cont_mode_waveform_idx_awg_path1": 0, "marker_ovr_en": True, # Default after reboot = False "marker_ovr_value": 15, # Default after reboot = 0 "mixer_corr_gain_ratio": 1, "mixer_corr_phase_offset_degree": 0, "offset_awg_path0": 0, "offset_awg_path1": 0, "sync_en": False, # Default after reboot = False "upsample_rate_awg_path0": 0, "upsample_rate_awg_path1": 0, } def __init__(self, name: str, address: str): super().__init__(name, address) self._ports: dict = {}
[docs] def ports(self, name: str, out: bool = True): """Adds an entry to the dictionary `self._ports` with key 'name' and value a `QbloxOutputPort` (or `QbloxInputPort` if `out=False`) object. To the object is assigned the provided name, and the `port_number` is automatically determined based on the number of ports of the same type inside `self._ports`. Returns this port object. Example: >>> qrm_module = QrmRf("qrm_rf", f"{IP_ADDRESS}:{SLOT_IDX}") >>> output_port = qrm_module.add_port("o1") >>> input_port = qrm_module.add_port("i1", out=False) >>> qrm_module.ports { 'o1': QbloxOutputPort(module=qrm_module, port_number=0, port_name='o1'), 'i1': QbloxInputPort(module=qrm_module, port_number=0, port_name='i1') } """ def count(cls): return len(list(filter(lambda x: isinstance(x, cls), self._ports.values()))) port_cls = QbloxOutputPort if out else QbloxInputPort self._ports[name] = port_cls(self, port_number=count(port_cls), port_name=name) return self._ports[name]