Skip to content

Commit 0183650

Browse files
authored
networkx: (almost) complete the traversal algorithms module (#14628)
1 parent b4546ed commit 0183650

File tree

5 files changed

+94
-42
lines changed

5 files changed

+94
-42
lines changed
Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
from _typeshed import Incomplete
21
from collections.abc import Callable, Generator
32

43
from networkx.classes.graph import Graph, _Node
@@ -8,5 +7,5 @@ __all__ = ["bfs_beam_edges"]
87

98
@_dispatchable
109
def bfs_beam_edges(
11-
G: Graph[_Node], source: _Node, value: Callable[..., Incomplete], width: int | None = None
12-
) -> Generator[Incomplete, Incomplete, Incomplete]: ...
10+
G: Graph[_Node], source: _Node, value: Callable[[_Node], float], width: int | None = None
11+
) -> Generator[tuple[_Node, _Node]]: ...
Lines changed: 33 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
from _typeshed import Incomplete
2-
from collections.abc import Callable, Generator
3-
from typing import Literal
1+
from collections.abc import Callable, Generator, Iterable, Iterator
2+
from typing import Final, Literal
43

4+
from networkx.classes.digraph import DiGraph
55
from networkx.classes.graph import Graph, _Node
66
from networkx.utils.backends import _dispatchable
77

@@ -17,34 +17,50 @@ __all__ = [
1717
]
1818

1919
@_dispatchable
20-
def generic_bfs_edges(G, source, neighbors=None, depth_limit=None) -> Generator[tuple[Incomplete, Incomplete]]: ...
20+
def generic_bfs_edges(
21+
G: Graph[_Node], source: _Node, neighbors: Callable[[_Node], Iterable[_Node]] | None = None, depth_limit: int | None = None
22+
) -> Generator[tuple[_Node, _Node]]: ...
2123
@_dispatchable
2224
def bfs_edges(
2325
G: Graph[_Node],
2426
source: _Node,
2527
reverse: bool | None = False,
26-
depth_limit=None,
27-
sort_neighbors: Callable[..., Incomplete] | None = None,
28-
) -> Generator[Incomplete, Incomplete, None]: ...
28+
depth_limit: int | None = None,
29+
sort_neighbors: Callable[[Iterator[_Node]], Iterable[_Node]] | None = None,
30+
) -> Generator[tuple[_Node, _Node]]: ...
2931
@_dispatchable
3032
def bfs_tree(
3133
G: Graph[_Node],
3234
source: _Node,
3335
reverse: bool | None = False,
34-
depth_limit=None,
35-
sort_neighbors: Callable[..., Incomplete] | None = None,
36-
): ...
36+
depth_limit: int | None = None,
37+
sort_neighbors: Callable[[Iterator[_Node]], Iterable[_Node]] | None = None,
38+
) -> DiGraph[_Node]: ...
3739
@_dispatchable
3840
def bfs_predecessors(
39-
G: Graph[_Node], source: _Node, depth_limit=None, sort_neighbors: Callable[..., Incomplete] | None = None
40-
) -> Generator[Incomplete, None, None]: ...
41+
G: Graph[_Node],
42+
source: _Node,
43+
depth_limit: int | None = None,
44+
sort_neighbors: Callable[[Iterator[_Node]], Iterable[_Node]] | None = None,
45+
) -> Generator[tuple[_Node, _Node]]: ...
4146
@_dispatchable
4247
def bfs_successors(
43-
G: Graph[_Node], source: _Node, depth_limit=None, sort_neighbors: Callable[..., Incomplete] | None = None
44-
) -> Generator[Incomplete, None, None]: ...
48+
G: Graph[_Node],
49+
source: _Node,
50+
depth_limit: int | None = None,
51+
sort_neighbors: Callable[[Iterator[_Node]], Iterable[_Node]] | None = None,
52+
) -> Generator[tuple[_Node, list[_Node]]]: ...
4553
@_dispatchable
46-
def bfs_layers(G: Graph[_Node], sources) -> Generator[Incomplete, None, None]: ...
54+
def bfs_layers(G: Graph[_Node], sources: _Node | Iterable[_Node]) -> Generator[list[_Node]]: ...
55+
56+
REVERSE_EDGE: Final = "reverse"
57+
TREE_EDGE: Final = "tree"
58+
FORWARD_EDGE: Final = "forward"
59+
LEVEL_EDGE: Final = "level"
60+
4761
@_dispatchable
48-
def bfs_labeled_edges(G, sources) -> Generator[tuple[Incomplete, Incomplete, Literal["tree", "level", "forward", "reverse"]]]: ...
62+
def bfs_labeled_edges(
63+
G: Graph[_Node], sources: _Node | Iterable[_Node]
64+
) -> Generator[tuple[_Node, _Node, Literal["tree", "level", "forward", "reverse"]]]: ...
4965
@_dispatchable
50-
def descendants_at_distance(G: Graph[_Node], source, distance): ...
66+
def descendants_at_distance(G: Graph[_Node], source: _Node, distance: int) -> set[_Node]: ...
Lines changed: 45 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
from _typeshed import Incomplete
2-
from collections.abc import Callable, Generator
1+
from collections.abc import Callable, Generator, Iterable, Iterator
2+
from typing import Literal
33

4+
from networkx.classes.digraph import DiGraph
45
from networkx.classes.graph import Graph, _Node
56
from networkx.utils.backends import _dispatchable
67

@@ -16,29 +17,57 @@ __all__ = [
1617

1718
@_dispatchable
1819
def dfs_edges(
19-
G: Graph[_Node], source: _Node | None = None, depth_limit=None, *, sort_neighbors: Callable[..., Incomplete] | None = None
20-
) -> Generator[tuple[_Node, _Node], None, None]: ...
20+
G: Graph[_Node],
21+
source: _Node | None = None,
22+
depth_limit: int | None = None,
23+
*,
24+
sort_neighbors: Callable[[Iterator[_Node]], Iterable[_Node]] | None = None,
25+
) -> Generator[tuple[_Node, _Node]]: ...
2126
@_dispatchable
2227
def dfs_tree(
23-
G: Graph[_Node], source: _Node | None = None, depth_limit=None, *, sort_neighbors: Callable[..., Incomplete] | None = None
24-
): ...
28+
G: Graph[_Node],
29+
source: _Node | None = None,
30+
depth_limit: int | None = None,
31+
*,
32+
sort_neighbors: Callable[[Iterator[_Node]], Iterable[_Node]] | None = None,
33+
) -> DiGraph[_Node]: ...
2534
@_dispatchable
2635
def dfs_predecessors(
27-
G: Graph[_Node], source: _Node | None = None, depth_limit=None, *, sort_neighbors: Callable[..., Incomplete] | None = None
28-
) -> dict[Incomplete, Incomplete]: ...
36+
G: Graph[_Node],
37+
source: _Node | None = None,
38+
depth_limit: int | None = None,
39+
*,
40+
sort_neighbors: Callable[[Iterator[_Node]], Iterable[_Node]] | None = None,
41+
) -> dict[_Node, _Node]: ...
2942
@_dispatchable
3043
def dfs_successors(
31-
G: Graph[_Node], source: _Node | None = None, depth_limit=None, *, sort_neighbors: Callable[..., Incomplete] | None = None
32-
) -> dict[Incomplete, list[Incomplete]]: ...
44+
G: Graph[_Node],
45+
source: _Node | None = None,
46+
depth_limit: int | None = None,
47+
*,
48+
sort_neighbors: Callable[[Iterator[_Node]], Iterable[_Node]] | None = None,
49+
) -> dict[_Node, list[_Node]]: ...
3350
@_dispatchable
3451
def dfs_postorder_nodes(
35-
G: Graph[_Node], source: _Node | None = None, depth_limit=None, *, sort_neighbors: Callable[..., Incomplete] | None = None
36-
): ...
52+
G: Graph[_Node],
53+
source: _Node | None = None,
54+
depth_limit: int | None = None,
55+
*,
56+
sort_neighbors: Callable[[Iterator[_Node]], Iterable[_Node]] | None = None,
57+
) -> Generator[_Node]: ...
3758
@_dispatchable
3859
def dfs_preorder_nodes(
39-
G: Graph[_Node], source: _Node | None = None, depth_limit=None, *, sort_neighbors: Callable[..., Incomplete] | None = None
40-
): ...
60+
G: Graph[_Node],
61+
source: _Node | None = None,
62+
depth_limit: int | None = None,
63+
*,
64+
sort_neighbors: Callable[[Iterator[_Node]], Iterable[_Node]] | None = None,
65+
) -> Generator[_Node]: ...
4166
@_dispatchable
4267
def dfs_labeled_edges(
43-
G: Graph[_Node], source: _Node | None = None, depth_limit=None, *, sort_neighbors: Callable[..., Incomplete] | None = None
44-
) -> None: ...
68+
G: Graph[_Node],
69+
source: _Node | None = None,
70+
depth_limit: int | None = None,
71+
*,
72+
sort_neighbors: Callable[[Iterator[_Node]], Iterable[_Node]] | None = None,
73+
) -> Generator[tuple[_Node, _Node, Literal["forward", "nontree", "reverse", "reverse-depth_limit"]]]: ...
Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from _typeshed import Incomplete
2-
from collections.abc import Generator
3-
from typing import Final
2+
from collections.abc import Generator, Iterable
3+
from typing import Final, Literal
44

55
from networkx.classes.graph import Graph, _Node
66
from networkx.utils.backends import _dispatchable
@@ -11,4 +11,8 @@ FORWARD: Final = "forward"
1111
REVERSE: Final = "reverse"
1212

1313
@_dispatchable
14-
def edge_bfs(G: Graph[_Node], source=None, orientation=None) -> Generator[Incomplete, None, None]: ...
14+
def edge_bfs(
15+
G: Graph[_Node],
16+
source: _Node | Iterable[_Node] | None = None,
17+
orientation: Literal["original", "reverse", "ignore"] | None = None,
18+
) -> Generator[tuple[Incomplete, ...]]: ...
Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from _typeshed import Incomplete
2-
from collections.abc import Generator
3-
from typing import Final
2+
from collections.abc import Generator, Iterable
3+
from typing import Final, Literal
44

55
from networkx.classes.graph import Graph, _Node
66
from networkx.utils.backends import _dispatchable
@@ -11,4 +11,8 @@ FORWARD: Final = "forward"
1111
REVERSE: Final = "reverse"
1212

1313
@_dispatchable
14-
def edge_dfs(G: Graph[_Node], source=None, orientation=None) -> Generator[Incomplete, None, None]: ...
14+
def edge_dfs(
15+
G: Graph[_Node],
16+
source: _Node | Iterable[_Node] | None = None,
17+
orientation: Literal["original", "reverse", "ignore"] | None = None,
18+
) -> Generator[tuple[Incomplete, ...]]: ...

0 commit comments

Comments
 (0)