.. _doot.control.tracker.naive_tracker: ================================== doot.control.tracker.naive_tracker ================================== .. py:module:: doot.control.tracker.naive_tracker .. autoapi-nested-parse:: Abstract Specs: A[n] Concrete Specs: C[n] Task: T[n] Expansion: ∀x ∈ C[n].depends_on => A[x] -> C[x] Head: C[1].depends_on[A[n].$head$] => A[n] -> C[n], A[n].head -> C[n].head, connect Type Aliases ------------ .. autoapisummary:: doot.control.tracker.naive_tracker.Abstract Classes ------- .. autoapisummary:: doot.control.tracker.naive_tracker.NaiveTracker Module Contents =============== .. py:data:: Abstract :type: TypeAlias :value: T .. _doot.control.tracker.naive_tracker.NaiveTracker: .. py:class:: NaiveTracker(**kwargs: Any) Bases: :py:obj:`doot.control.tracker._base.Tracker_abs` Specific implementations for the default naive tracker .. py:attribute:: _registry :type: doot.control.tracker.registry.TrackRegistry .. py:method:: next_for(target: jgdv.Maybe[str | doot.workflow._interface.TaskName_p] = None) -> jgdv.Maybe[doot.workflow._interface.Task_p | doot.workflow._interface.Artifact_i] ask for the next task that can be performed Returns a Task or Artifact that needs to be executed or created Returns None if it loops too many times trying to find a target, or if theres nothing left in the queue .. py:method:: _next_for_task(focus: doot.workflow._interface.TaskName_p) -> jgdv.Maybe[doot.workflow._interface.Task_p] logic for handling a dequed task .. py:method:: _next_for_artifact(focus: doot.workflow._interface.Artifact_i) -> jgdv.Maybe[doot.workflow._interface.Artifact_i] logic for handling a dequed artifact .. py:method:: _instantiate(target: doot.workflow._interface.TaskName_p | doot.workflow._interface.RelationSpec_i, *args: Any, task: bool = False, **kwargs: Any) -> jgdv.Maybe[doot.workflow._interface.TaskName_p] extends base instantiation to add late injection for tasks .. py:method:: _dependency_states_of(focus: doot.workflow._interface.TaskName_p | doot.workflow._interface.Artifact_i) -> list[tuple] .. py:method:: _successor_states_of(focus: doot.workflow._interface.TaskName_p | doot.workflow._interface.Artifact_i) -> list[tuple] .. py:method:: _deque() -> doot.workflow._interface.TaskName_p | doot.workflow._interface.Artifact_i .. py:method:: get_status(*, target: jgdv.Maybe[Concrete[doot.workflow._interface.TaskName_p] | doot.workflow._interface.Artifact_i] = None) -> tuple[doot.workflow._interface.TaskStatus_e | doot.workflow._interface.ArtifactStatus_e, int] .. py:method:: set_status(task: Concrete[doot.workflow._interface.TaskName_p] | doot.workflow._interface.Artifact_i | doot.workflow._interface.Task_p, internal_state: doot.workflow._interface.TaskStatus_e) -> bool .. py:method:: _apply_injections(name: doot.workflow._interface.TaskName_p, *, parent: jgdv.Maybe[doot.workflow._interface.TaskName_p] = None) -> None After a task is created, values can be injected into it. these include, in order: - parent internal_state, - cli params - instantiator internal_state injection .. py:method:: _get_parent_data(parent: jgdv.Maybe[doot.workflow._interface.TaskName_p] = None) -> jgdv.Maybe[dict] .. py:method:: _get_cli_data(name: doot.workflow._interface.TaskName_p) -> jgdv.Maybe[dict] .. py:method:: _get_inject_data(name: doot.workflow._interface.TaskName_p) -> jgdv.Maybe[dict]