compilation =========== .. py:module:: quantify_scheduler.compilation .. autoapi-nested-parse:: Compiler for the quantify_scheduler. Module Contents --------------- Functions ~~~~~~~~~ .. autoapisummary:: quantify_scheduler.compilation._determine_absolute_timing quantify_scheduler.compilation._determine_absolute_timing_schedule quantify_scheduler.compilation._determine_scheduling_strategy quantify_scheduler.compilation._validate_schedulable_references quantify_scheduler.compilation._populate_references_graph quantify_scheduler.compilation._make_timing_constraints_explicit quantify_scheduler.compilation._make_timing_constraints_explicit_for_schedulable quantify_scheduler.compilation._determine_default_ref_pt quantify_scheduler.compilation._determine_default_ref_pt_new quantify_scheduler.compilation._determine_default_ref_schedulables_by_schedulable quantify_scheduler.compilation._get_start_time quantify_scheduler.compilation._normalize_absolute_timing quantify_scheduler.compilation.validate_config quantify_scheduler.compilation.plot_schedulable_references_graph Attributes ~~~~~~~~~~ .. autoapisummary:: quantify_scheduler.compilation.logger .. py:data:: logger .. py:function:: _determine_absolute_timing(schedule: quantify_scheduler.schedules.schedule.Schedule, time_unit: Literal['physical', 'ideal', None] = 'physical', config: quantify_scheduler.backends.graph_compilation.CompilationConfig | None = None) -> quantify_scheduler.schedules.schedule.Schedule _determine_absolute_timing(schedule: quantify_scheduler.operations.operation.Operation, time_unit: Literal['physical', 'ideal', None] = 'physical', config: quantify_scheduler.backends.graph_compilation.CompilationConfig | None = None) -> quantify_scheduler.operations.operation.Operation | quantify_scheduler.schedules.schedule.Schedule Determine the absolute timing of a schedule based on the timing constraints. This function determines absolute timings for every operation in the :attr:`~.ScheduleBase.schedulables`. It does this by: 1. iterating over all and elements in the :attr:`~.ScheduleBase.schedulables`. 2. determining the absolute time of the reference operation - reference point :code:`"ref_pt"` of the reference operation defaults to :code:`"end"` in case it is not set (i.e., is :code:`None`). 3. determining the start of the operation based on the :code:`rel_time` and :code:`duration` of operations - reference point :code:`"ref_pt_new"` of the added operation defaults to :code:`"start"` in case it is not set. :param schedule: The schedule for which to determine timings. :param config: Compilation config for :class:`~quantify_scheduler.backends.graph_compilation.QuantifyCompiler`. :param time_unit: Whether to use physical units to determine the absolute time or ideal time. When :code:`time_unit == "physical"` the duration attribute is used. When :code:`time_unit == "ideal"` the duration attribute is ignored and treated as if it is :code:`1`. When :code:`time_unit == None` it will revert to :code:`"physical"`. :returns: : The modified ``schedule`` where the absolute time for each operation has been determined. :raises NotImplementedError: If the scheduling strategy is not SchedulingStrategy.ASAP .. py:function:: _determine_absolute_timing_schedule(schedule: quantify_scheduler.schedules.schedule.Schedule, time_unit: Literal['physical', 'ideal', None], config: quantify_scheduler.backends.graph_compilation.CompilationConfig | None) -> quantify_scheduler.schedules.schedule.Schedule .. py:function:: _determine_scheduling_strategy(config: quantify_scheduler.backends.graph_compilation.CompilationConfig | None = None) -> quantify_scheduler.enums.SchedulingStrategy .. py:function:: _validate_schedulable_references(schedule: quantify_scheduler.schedules.schedule.Schedule, references_graph: networkx.DiGraph) -> None Check the schedulable references for circular references. .. py:function:: _populate_references_graph(schedule: quantify_scheduler.schedules.schedule.Schedule) -> networkx.DiGraph Add nodes and edges to the graph containing schedulable references. .. py:function:: _make_timing_constraints_explicit(schedule: quantify_scheduler.schedules.schedule.Schedule, strategy: quantify_scheduler.enums.SchedulingStrategy) -> None .. py:function:: _make_timing_constraints_explicit_for_schedulable(schedule: quantify_scheduler.schedules.schedule.Schedule, schedulable_name: str, default_reference_schedulable_name: str | None, strategy: quantify_scheduler.enums.SchedulingStrategy) -> None .. py:function:: _determine_default_ref_pt(strategy: quantify_scheduler.enums.SchedulingStrategy) -> Literal['start', 'end'] .. py:function:: _determine_default_ref_pt_new(strategy: quantify_scheduler.enums.SchedulingStrategy) -> Literal['start', 'end'] .. py:function:: _determine_default_ref_schedulables_by_schedulable(schedule: quantify_scheduler.schedules.schedule.Schedule, strategy: quantify_scheduler.enums.SchedulingStrategy) -> list[tuple[str, str | None]] .. py:function:: _get_start_time(schedule: quantify_scheduler.schedules.schedule.Schedule, t_constr: quantify_scheduler.schedules.schedule.TimingConstraint, curr_op: quantify_scheduler.operations.operation.Operation | quantify_scheduler.schedules.schedule.Schedule, time_unit: Literal['physical', 'ideal', None]) -> float .. py:function:: _normalize_absolute_timing(schedule: quantify_scheduler.schedules.schedule.Schedule, config: quantify_scheduler.backends.graph_compilation.CompilationConfig | None = None) -> quantify_scheduler.schedules.schedule.Schedule .. py:function:: validate_config(config: dict, scheme_fn: str) -> bool Validate a configuration using a schema. :param config: The configuration to validate :param scheme_fn: The name of a json schema in the quantify_scheduler.schemas folder. :returns: : True if valid .. py:function:: plot_schedulable_references_graph(schedule: quantify_scheduler.schedules.schedule.Schedule) -> None Show the schedulable reference graph. Can be used as a debugging tool to spot any circular references.