Source code for quantify_scheduler.backends.qblox.operations.pulse_library

# Repository: https://gitlab.com/quantify-os/quantify-scheduler
# Licensed according to the LICENCE file on the main branch
"""Standard pulse-level operations for use with the quantify_scheduler."""

from __future__ import annotations

import numpy as np

from quantify_scheduler import Operation
from quantify_scheduler.backends.qblox import constants
from quantify_scheduler.operations.pulse_library import (
    NumericalPulse,
    ReferenceMagnitude,
)
from quantify_scheduler.resources import BasebandClockResource


[docs] class LatchReset(Operation): """ Operation that resets the feedback trigger addresses from the hardware. Currently only implemented for Qblox backend, refer to :class:`~quantify_scheduler.backends.qblox.operation_handling.virtual.ResetFeedbackTriggersStrategy` for more details. """ def __init__( self, portclock: tuple[str, str], t0: float = 0, duration: float = 4e-9, ) -> None: super().__init__(name=self.__class__.__name__) self.data["pulse_info"] = [ { "name": self.__class__.__name__, "wf_func": None, "t0": t0, "port": portclock[0], "clock": portclock[1], "duration": duration, } ] self._update() def __str__(self) -> str: pulse_info = self.data["pulse_info"][0] return ( f"{self.__class__.__name__}(" f"name='{self.name}', " f"t0='{pulse_info['t0']}', " f"port='{pulse_info['port']}'" f"clock='{pulse_info['clock']}'" f"duration='{pulse_info['duration']}'" f")" )
[docs] class SimpleNumericalPulse(NumericalPulse): """ Wrapper on top of NumericalPulse to provide a simple interface for creating a pulse where the samples correspond 1:1 to the produced waveform, without needing to specify the time samples. Parameters ---------- samples An array of (possibly complex) values specifying the shape of the pulse. port The port that the pulse should be played on. clock Clock used to (de)modulate the pulse. By default the baseband clock. reference_magnitude Scaling value and unit for the unitless samples. Uses settings in hardware config if not provided. t0 Time in seconds when to start the pulses relative to the start time of the Operation in the Schedule. Example ------- .. jupyter-execute:: from quantify_scheduler.backends.qblox.operations.pulse_library import SimpleNumericalPulse from quantify_scheduler import Schedule waveform = [0.1,0.2,0.2,0.3,0.5,0.4] schedule = Schedule("") schedule.add(SimpleNumericalPulse(waveform, port="q0:out")) """ def __init__( self, samples: np.ndarray | list, port: str, clock: str = BasebandClockResource.IDENTITY, reference_magnitude: ReferenceMagnitude | None = None, t0: float = 0, ) -> None: # Append samples with one value which will be truncated away by the interpolation.
[docs] samples = np.append(samples, 0)
[docs] t_samples = np.arange(len(samples)) / constants.SAMPLING_RATE
super().__init__( samples=samples, t_samples=t_samples, port=port, clock=clock, reference_magnitude=reference_magnitude, t0=t0, interpolation="linear", )