Return steps in topological order (dependencies before dependents).
(self)
| 30 | return next((s for s in self.steps if s.step_number == number), None) |
| 31 | |
| 32 | def resolved_order(self) -> list[PlanStep]: |
| 33 | """Return steps in topological order (dependencies before dependents).""" |
| 34 | seen: set[int] = set() |
| 35 | ordered: list[PlanStep] = [] |
| 36 | |
| 37 | def visit(n: int) -> None: |
| 38 | if n in seen: |
| 39 | return |
| 40 | step = self.get_step(n) |
| 41 | if step is None: |
| 42 | return |
| 43 | for dep in step.dependencies: |
| 44 | visit(dep) |
| 45 | seen.add(n) |
| 46 | ordered.append(step) |
| 47 | |
| 48 | for step in self.steps: |
| 49 | visit(step.step_number) |
| 50 | return ordered |
| 51 | |
| 52 | |
| 53 | @dataclass |
no outgoing calls