-
-
Notifications
You must be signed in to change notification settings - Fork 1.9k
Description
The types introduced in #14569 are more general than required. As an example look at DiGraph.out_degree
This is now typed as def out_degree(self) -> int | OutDegreeView[_Node] | OutMultiDegreeView[_Node]: ...
This seems to be based on the documentation here that claims that an int can be returned. However looking at the examples and the documentation an int is only returned if a single node is given as an argument. This is a somewhat confusing statement as this is a property and therefor does not take any argument. Furthermore, looking at the source code an OutDegreeView is always the property. What is meant by the docstring is that the property returned which is always a OutDegreeView can return an int if that is called with a single node
import networkx as nx
G = nx.DiGraph()
nx.add_path(G, [0, 1, 2, 3])
out_view = G.out_degree # this is always an `OutDegreeView`
G.out_degree(0) # this returns an int
G.out_degree([0, 1, 2])
The same applies to in_degree and edges in the DiGraph class and probably similar in other graph classes.
Suggested solution remove int (and probably also ...MultiDegreeView from the return type of DiGraph.in_degree DiGraph.out_degree and DiGraph.degree and similar in other Graph classes.
It might also be worthwile improving the docs in networkx to clarify this. As a bonus the types for OutDegreeView could be improved such that it overloads on the type of nbunch to clarify that an int is returned if a single node is given and a view otherwise.
An example of the issues this creates can be found in microsoft/Qcodes#7401