Source code for quantify_scheduler.backends.qblox.operation_handling.factory_common
# Repository: https://gitlab.com/quantify-os/quantify-scheduler
# Licensed according to the LICENCE file on the main branch
"""Functions for producing common operation handling strategies."""
from __future__ import annotations
from typing import TYPE_CHECKING
from quantify_scheduler.backends.qblox.conditional import (
    FeedbackTriggerCondition,
    FeedbackTriggerOperator,
)
from quantify_scheduler.backends.qblox.operation_handling import base, virtual
if TYPE_CHECKING:
    from quantify_scheduler.backends.types.qblox import OpInfo
[docs]
def try_get_pulse_strategy_common(
    operation_info: OpInfo,
) -> base.IOperationStrategy | None:
    """
    Handles the logic for determining the correct pulse type.
    Returns ``None`` if no matching strategy class is found.
    """
    if operation_info.is_parameter_update:
        return virtual.UpdateParameterStrategy(operation_info)
    elif operation_info.is_loop:
        return virtual.LoopStrategy(operation_info)
    elif (
        feedback_trigger_address := operation_info.data.get("feedback_trigger_address")
    ) is not None:
        trigger_condition = FeedbackTriggerCondition(
            enable=True,
            operator=FeedbackTriggerOperator.OR,
            addresses=[feedback_trigger_address],
        )
        return virtual.ConditionalStrategy(
            operation_info=operation_info, trigger_condition=trigger_condition
        )
    elif operation_info.is_control_flow_end:
        return virtual.ControlFlowReturnStrategy(operation_info)
    elif operation_info.data.get("name") == "LatchReset":
        return virtual.ResetFeedbackTriggersStrategy(operation_info=operation_info)
    return None