Skip to content

Commit

Permalink
Merge pull request #6287 from MetRonnie/remove-prep
Browse files Browse the repository at this point in the history
`TaskState`: remove cached prereq satisfaction in preparation for `cylc remove`
  • Loading branch information
hjoliver authored Aug 8, 2024
2 parents 4a7c1ae + 80fa008 commit b46f35a
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 38 deletions.
2 changes: 1 addition & 1 deletion cylc/flow/task_pool.py
Original file line number Diff line number Diff line change
Expand Up @@ -1990,7 +1990,7 @@ def _set_prereqs_itask(
"""
if prereqs == ["all"]:
itask.state.set_all_satisfied()
itask.state.set_prerequisites_all_satisfied()
else:
# Attempt to set the given presrequisites.
# Log any that aren't valid for the task.
Expand Down
48 changes: 11 additions & 37 deletions cylc/flow/task_state.py
Original file line number Diff line number Diff line change
Expand Up @@ -195,12 +195,6 @@ class TaskState:
Time string of latest update time.
.xtriggers (dict):
xtriggers as {trigger (str): satisfied (boolean), ...}.
._is_satisfied (boolean):
Are prerequisites satisfied?
Reset None to force re-evaluation when a prereq gets satisfied.
._suicide_is_satisfied (boolean):
Are prerequisites to trigger suicide satisfied?
Reset None to force re-evaluation when a prereq gets satisfied.
"""

# Memory optimization - constrain possible attributes to this list.
Expand All @@ -217,8 +211,6 @@ class TaskState:
"suicide_prerequisites",
"time_updated",
"xtriggers",
"_is_satisfied",
"_suicide_is_satisfied",
]

def __init__(self, tdef, point, status, is_held):
Expand All @@ -229,9 +221,6 @@ def __init__(self, tdef, point, status, is_held):
self.is_updated = False
self.time_updated = None

self._is_satisfied = None
self._suicide_is_satisfied = None

# Prerequisites.
self.prerequisites: List[Prerequisite] = []
self.suicide_prerequisites: List[Prerequisite] = []
Expand Down Expand Up @@ -320,12 +309,9 @@ def satisfy_me(
"""
valid: Set[Tokens] = set()
for prereq in (*self.prerequisites, *self.suicide_prerequisites):
yep = prereq.satisfy_me(outputs)
if yep:
valid = valid.union(yep)
continue
self._is_satisfied = None
self._suicide_is_satisfied = None
valid.update(
prereq.satisfy_me(outputs)
)
return valid

def xtriggers_all_satisfied(self):
Expand All @@ -336,18 +322,9 @@ def external_triggers_all_satisfied(self):
"""Return True if all external triggers are satisfied."""
return all(self.external_triggers.values())

def set_all_satisfied(self):
"""Set all my prerequisites satisfied."""
for p in self.prerequisites:
p.set_satisfied()
self._is_satisfied = True

def prerequisites_all_satisfied(self):
"""Return True if (non-suicide) prerequisites are fully satisfied."""
if self._is_satisfied is None:
self._is_satisfied = all(
preq.is_satisfied() for preq in self.prerequisites)
return self._is_satisfied
return all(preq.is_satisfied() for preq in self.prerequisites)

def prerequisites_are_not_all_satisfied(self):
"""Return True if (any) prerequisites are not fully satisfied."""
Expand All @@ -356,10 +333,7 @@ def prerequisites_are_not_all_satisfied(self):

def suicide_prerequisites_all_satisfied(self):
"""Return True if all suicide prerequisites are satisfied."""
if self._suicide_is_satisfied is None:
self._suicide_is_satisfied = all(
preq.is_satisfied() for preq in self.suicide_prerequisites)
return self._suicide_is_satisfied
return all(preq.is_satisfied() for preq in self.suicide_prerequisites)

def prerequisites_get_target_points(self):
"""Return a list of cycle points targeted by each prerequisite."""
Expand All @@ -369,9 +343,12 @@ def prerequisites_get_target_points(self):
for point in prerequisite.get_target_points()
}

def prerequisites_eval_all(self):
"""Set all prerequisites to satisfied."""
# (Validation: will abort on illegal trigger expressions.)
def prerequisites_eval_all(self) -> None:
"""Evaluate satisifaction of all prerequisites and
suicide prerequisites.
Provides validation - will abort on illegal trigger expressions.
"""
for preqs in [self.prerequisites, self.suicide_prerequisites]:
for preq in preqs:
preq.is_satisfied()
Expand All @@ -380,7 +357,6 @@ def set_prerequisites_all_satisfied(self):
"""Set prerequisites to all satisfied."""
for prereq in self.prerequisites:
prereq.set_satisfied()
self._is_satisfied = None

def get_resolved_dependencies(self):
"""Return a list of dependencies which have been met for this task.
Expand Down Expand Up @@ -467,8 +443,6 @@ def _add_prerequisites(self, point, tdef):
"""Add task prerequisites."""
# Triggers for sequence_i only used if my cycle point is a
# valid member of sequence_i's sequence of cycle points.
self._is_satisfied = None
self._suicide_is_satisfied = None

# Use dicts to avoid generating duplicate prerequisites from sequences
# with coincident cycle points.
Expand Down

0 comments on commit b46f35a

Please sign in to comment.