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

# Repository: https://gitlab.com/quantify-os/quantify-scheduler
# Licensed according to the LICENCE file on the main branch
"""Contains the control flow operations for the Qblox backend."""

from __future__ import annotations

from typing import TYPE_CHECKING

from quantify_scheduler.backends.qblox import constants
from quantify_scheduler.operations.control_flow_library import (
    ConditionalOperation as _ConditionalOperation,
)

if TYPE_CHECKING:
    from quantify_scheduler.operations.operation import Operation
    from quantify_scheduler.schedules.schedule import Schedule


[docs] class ConditionalOperation(_ConditionalOperation): """ Conditional over another operation. If a preceding thresholded acquisition on ``qubit_name`` results in a "1", the body will be executed, otherwise it will generate a wait time that is equal to the time of the subschedule, to ensure the absolute timing of later operations remains consistent. Parameters ---------- body Operation to be conditionally played qubit_name Name of the qubit on which the body will be conditioned t0 Time offset, by default 0 Example ------- A conditional reset can be implemented as follows: .. jupyter-execute:: # relevant imports from quantify_scheduler import Schedule from quantify_scheduler.qblox.operations import ConditionalOperation from quantify_scheduler.operations import Measure, X # define conditional reset as a Schedule conditional_reset = Schedule("conditional reset") conditional_reset.add(Measure("q0", feedback_trigger_label="q0")) conditional_reset.add( ConditionalOperation(body=X("q0"), qubit_name="q0"), rel_time=364e-9, ) """ def __init__( self, body: Operation | Schedule, qubit_name: str, t0: float = 0.0, ) -> None: super().__init__( body, qubit_name, t0, hardware_buffer_time=constants.MIN_TIME_BETWEEN_OPERATIONS * 1e-9, )