Source code for quantify_scheduler.backends.qblox.exceptions

# Repository: https://gitlab.com/quantify-os/quantify-scheduler
# Licensed according to the LICENCE file on the main branch
"""Exceptions used by Qblox backend."""


from typing import Literal

from quantify_scheduler.backends.types.qblox import OpInfo


[docs] class NcoOperationTimingError(ValueError): """Exception thrown if there are timing errors for NCO operations."""
[docs] class FineDelayTimingError(ValueError): """ Exception thrown if there are timing errors for fine delays. Note that all units are in picoseconds. """ def __init__( self, error_type: Literal["within_op", "between_op"], operation_info: OpInfo, fine_start_delay: int, fine_end_delay: int, operation_start_time: int, operation_duration: int, last_digital_pulse_end_ps: int, ) -> None: if error_type == "within_op": message = ( f"Operation {operation_info} has fine delay specifications " f"that are not supported by the hardware: {fine_start_delay=} " f"ps, {fine_end_delay=} ps and the duration of the operation " f"is {operation_duration//1000} ns. To avoid undefined " "behaviour, there must be at least 7ns between the start and " "end of the operation including the fine delay, OR the time " "between the start and end must be an integer number of " "nanoseconds." ) else: message = ( f"Operation {operation_info} is started too soon after " "another operation with fine delay. This operation starts at " f"{operation_start_time + fine_start_delay} ps including fine " "delay, while the previous operation with fine delay ended at " f"{last_digital_pulse_end_ps} ps. To avoid undefined " "behaviour, there must be at least 7ns between the end of the " "previous operation and the start of this one including the " "fine delay, OR the time between the end and start must be an " "integer number of nanoseconds." ) super().__init__(message)