graph#

static_order(specs: Sequence[JobSpec]) list[JobSpec]#
static_order_ix(specs: Sequence[JobSpec]) list[int]#
print_spec(spec: JobSpec, level: int = -1, file: TextIO = <_io.TextIOWrapper name='<stdout>' mode='w' encoding='utf-8'>, indent: str = '', style: str = 'none', end: bool = False)#

Given a list of test specs, print a visual tree structure

print(specs: ~typing.Sequence[JobSpec], style: str = 'none', file: ~typing.TextIO = <_io.TextIOWrapper name='<stdout>' mode='w' encoding='utf-8'>) None#
reachable_nodes(graph: dict[str, list[str]], roots: Iterable[str]) list[str]#

Return all nodes reachable from any of the given roots

reachable_up_down(graph_deps: dict[str, list[str]], nodes: Iterable[str]) tuple[set[str], set[str]]#

graph_deps: node -> list of dependencies (A: [B,C,D] means A depends on B,C,D) nodes: starting nodes

Returns (upstream, downstream):

upstream = all nodes that the start nodes depend on (ancestors) downstream = all nodes that depend on the start nodes (descendants)