22ac9fc4dd
1. 为多个测试函数补充pytest.CaptureFixture[str]类型注解 2. 为graphlib类型声明文件补全方法参数类型 3. 为pdftool测试的mock函数添加Any类型标注 4. 新增数据库连接非空校验断言 5. 优化emlmanager测试的字典展开格式与修复decode测试bug 6. 为gittool测试添加命令类型列表校验 7. 为envrs测试添加pyrefly忽略注释
114 lines
4.1 KiB
Python
114 lines
4.1 KiB
Python
"""
|
|
This type stub file was generated by pyright.
|
|
"""
|
|
|
|
from typing import Any, Generator
|
|
|
|
__all__ = ["CycleError", "TopologicalSorter"]
|
|
_NODE_OUT = ...
|
|
_NODE_DONE = ...
|
|
|
|
class _NodeInfo:
|
|
__slots__: list[str]
|
|
|
|
def __init__(self, node: Any) -> None: ...
|
|
|
|
class CycleError(ValueError):
|
|
"""Subclass of ValueError raised by TopologicalSorterif cycles exist in the graph
|
|
|
|
If multiple cycles exist, only one undefined choice among them will be reported
|
|
and included in the exception. The detected cycle can be accessed via the second
|
|
element in the *args* attribute of the exception instance and consists in a list
|
|
of nodes, such that each node is, in the graph, an immediate predecessor of the
|
|
next node in the list. In the reported list, the first and the last node will be
|
|
the same, to make it clear that it is cyclic.
|
|
"""
|
|
|
|
...
|
|
|
|
class TopologicalSorter:
|
|
"""Provides functionality to topologically sort a graph of hashable nodes"""
|
|
|
|
def __init__(self, graph: Any) -> None: ...
|
|
def add(self, node: Any, *predecessors: Any) -> None:
|
|
"""Add a new node and its predecessors to the graph.
|
|
|
|
Both the *node* and all elements in *predecessors* must be hashable.
|
|
|
|
If called multiple times with the same node argument, the set of dependencies
|
|
will be the union of all dependencies passed in.
|
|
|
|
It is possible to add a node with no dependencies (*predecessors* is not provided)
|
|
as well as provide a dependency twice. If a node that has not been provided before
|
|
is included among *predecessors* it will be automatically added to the graph with
|
|
no predecessors of its own.
|
|
|
|
Raises ValueError if called after "prepare".
|
|
"""
|
|
|
|
...
|
|
|
|
def prepare(self) -> None:
|
|
"""Mark the graph as finished and check for cycles in the graph.
|
|
|
|
If any cycle is detected, "CycleError" will be raised, but "get_ready" can
|
|
still be used to obtain as many nodes as possible until cycles block more
|
|
progress. After a call to this function, the graph cannot be modified and
|
|
therefore no more nodes can be added using "add".
|
|
"""
|
|
|
|
...
|
|
|
|
def get_ready(self) -> tuple[Any, ...]:
|
|
"""Return a tuple of all the nodes that are ready.
|
|
|
|
Initially it returns all nodes with no predecessors; once those are marked
|
|
as processed by calling "done", further calls will return all new nodes that
|
|
have all their predecessors already processed. Once no more progress can be made,
|
|
empty tuples are returned.
|
|
|
|
Raises ValueError if called without calling "prepare" previously.
|
|
"""
|
|
|
|
...
|
|
|
|
def is_active(self) -> bool:
|
|
"""Return True if more progress can be made and ``False`` otherwise.
|
|
|
|
Progress can be made if cycles do not block the resolution and either there
|
|
are still nodes ready that haven't yet been returned by "get_ready" or the
|
|
number of nodes marked "done" is less than the number that have been returned
|
|
by "get_ready".
|
|
|
|
Raises ValueError if called without calling "prepare" previously.
|
|
"""
|
|
|
|
...
|
|
|
|
def __bool__(self) -> bool: ...
|
|
def done(self, *nodes: Any) -> None:
|
|
"""Marks a set of nodes returned by "get_ready" as processed.
|
|
|
|
This method unblocks any successor of each node in *nodes* for being returned
|
|
in the future by a a call to "get_ready"
|
|
|
|
Raises :exec:`ValueError` if any node in *nodes* has already been marked as
|
|
processed by a previous call to this method, if a node was not added to the
|
|
graph by using "add" or if called without calling "prepare" previously or if
|
|
node has not yet been returned by "get_ready".
|
|
"""
|
|
|
|
...
|
|
|
|
def static_order(self) -> Generator[Any]:
|
|
"""Returns an iterable of nodes in a topological order.
|
|
|
|
The particular order that is returned may depend on the specific
|
|
order in which the items were inserted in the graph.
|
|
|
|
Using this method does not require to call "prepare" or "done". If any
|
|
cycle is detected, :exc:`CycleError` will be raised.
|
|
"""
|
|
|
|
...
|