Skip to content

Commit ef3115e

Browse files
authored
complete networkx/digraph.pyi addresses #14499 follows #14509 (#14569)
1 parent 893b9a7 commit ef3115e

File tree

2 files changed

+36
-15
lines changed

2 files changed

+36
-15
lines changed
Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,46 @@
1-
from _typeshed import Incomplete
21
from collections.abc import Iterator
32
from functools import cached_property
3+
from typing import Any
44
from typing_extensions import Self
55

66
from networkx.classes.coreviews import AdjacencyView
77
from networkx.classes.graph import Graph, _Node
8-
from networkx.classes.reportviews import InDegreeView, InMultiDegreeView, OutDegreeView, OutEdgeView, OutMultiDegreeView
8+
from networkx.classes.reportviews import (
9+
DiDegreeView,
10+
InDegreeView,
11+
InEdgeView,
12+
InMultiDegreeView,
13+
OutDegreeView,
14+
OutEdgeView,
15+
OutMultiDegreeView,
16+
)
917

1018
__all__ = ["DiGraph"]
1119

1220
class DiGraph(Graph[_Node]):
1321
@cached_property
14-
def succ(self) -> AdjacencyView[_Node, _Node, dict[str, Incomplete]]: ...
22+
def succ(self) -> AdjacencyView[_Node, _Node, dict[str, Any]]: ...
1523
@cached_property
16-
def pred(self) -> AdjacencyView[_Node, _Node, dict[str, Incomplete]]: ...
24+
def pred(self) -> AdjacencyView[_Node, _Node, dict[str, Any]]: ...
1725
def has_successor(self, u: _Node, v: _Node) -> bool: ...
1826
def has_predecessor(self, u: _Node, v: _Node) -> bool: ...
1927
def successors(self, n: _Node) -> Iterator[_Node]: ...
28+
2029
neighbors = successors
30+
2131
def predecessors(self, n: _Node) -> Iterator[_Node]: ...
2232
@cached_property
2333
def out_edges(self) -> OutEdgeView[_Node]: ...
2434
@cached_property
25-
def in_edges(self) -> OutEdgeView[_Node]: ...
35+
def in_edges(self) -> InEdgeView[_Node]: ...
2636
@cached_property
27-
def in_degree(self) -> InDegreeView[_Node] | InMultiDegreeView[_Node]: ... # Include subtypes' possible return types
37+
def in_degree(self) -> int | InDegreeView[_Node] | InMultiDegreeView[_Node]: ...
2838
@cached_property
29-
def out_degree(self) -> OutDegreeView[_Node] | OutMultiDegreeView[_Node]: ... # Include subtypes' possible return types
30-
def to_undirected(self, reciprocal: bool = False, as_view: bool = False) -> Graph[_Node]: ... # type: ignore[override] # Has an additional `reciprocal` keyword argument
39+
def out_degree(self) -> int | OutDegreeView[_Node] | OutMultiDegreeView[_Node]: ...
40+
def to_undirected(self, reciprocal: bool = False, as_view: bool = False) -> Graph[_Node]: ... # type: ignore[override]
41+
# reciprocal : If True, only edges that appear in both directions ... will be kept in the undirected graph.
3142
def reverse(self, copy: bool = True) -> Self: ...
32-
def copy(self, as_view: bool = False) -> DiGraph[_Node]: ...
43+
@cached_property
44+
def edges(self) -> OutEdgeView[_Node]: ... # type: ignore[override] # An OutEdgeView of the DiGraph as G.edges or G.edges().
45+
@cached_property
46+
def degree(self) -> int | DiDegreeView[_Node]: ... # type: ignore[override] # Returns DiDegreeView or int

stubs/networkx/networkx/classes/multidigraph.pyi

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,33 @@
1-
from _typeshed import Incomplete
21
from functools import cached_property
2+
from typing import Any
33

44
from networkx.classes.coreviews import MultiAdjacencyView
55
from networkx.classes.digraph import DiGraph
6-
from networkx.classes.graph import _Node
6+
from networkx.classes.graph import _EdgeWithData, _Node
77
from networkx.classes.multigraph import MultiGraph
8-
from networkx.classes.reportviews import InMultiDegreeView, OutMultiDegreeView, OutMultiEdgeView
8+
from networkx.classes.reportviews import (
9+
InMultiDegreeView,
10+
InMultiEdgeDataView,
11+
InMultiEdgeView,
12+
OutMultiDegreeView,
13+
OutMultiEdgeView,
14+
)
915

1016
__all__ = ["MultiDiGraph"]
1117

1218
class MultiDiGraph(MultiGraph[_Node], DiGraph[_Node]):
1319
@cached_property
14-
def succ(self) -> MultiAdjacencyView[_Node, _Node, dict[str, Incomplete]]: ...
20+
def succ(self) -> MultiAdjacencyView[_Node, _Node, dict[str, Any]]: ...
1521
@cached_property
16-
def pred(self) -> MultiAdjacencyView[_Node, _Node, dict[str, Incomplete]]: ...
22+
def pred(self) -> MultiAdjacencyView[_Node, _Node, dict[str, Any]]: ...
1723
@cached_property
1824
def edges(self) -> OutMultiEdgeView[_Node]: ... # type: ignore[override]
1925
# Returns: OutMultiEdgeView
2026
@cached_property
2127
def out_edges(self) -> OutMultiEdgeView[_Node]: ...
2228
@cached_property
23-
def in_edges(self) -> OutMultiEdgeView[_Node]: ...
29+
def in_edges(self) -> InMultiEdgeView[_Node] | InMultiEdgeDataView[_Node, _EdgeWithData[_Node]]: ... # type: ignore[override]
30+
# Returns : InMultiEdgeView or InMultiEdgeDataView
2431
@cached_property
2532
def in_degree(self) -> InMultiDegreeView[_Node]: ...
2633
@cached_property

0 commit comments

Comments
 (0)