-
Notifications
You must be signed in to change notification settings - Fork 0
Home
Welcome to the NetworkX wiki!
Design Specification - API Sandbox
Developer Notes
- Configuring your fork with Read the Docs
- Formatting copyright, authors, "the top of the module"
- Formatting docstrings to look nice in code and in sphinx. (Generally, follow numpydoc recommendations.)
- Guidelines for corner cases
-
How we tend to handle
None
When checking a value against
None
use theif var is None:
construction. We also use None (as does Python itself) as a null argument to functions where the default argument must be newly computed at runtime. For example, if you usedef f(nlist=[]):
the list will be created when the function is defined and it will be the same list for all function calls. If you want a new list for each function call usedef f(nlist=None): if nlist is None: nlist = []
In some functions we allow nodes to be specified with a default of processing all nodes. We use
None
to indicate whether an argument was provided or not. Thus,None
is special in that it cannot be a node in our graphs. We state that a node can be any hashable other thanNone
.
-
Explicitly not supporting directed or multigraph in a function:
Use the decorator
not_implemented_for
in networkx/utils/decorators.py to designate that a function doesn't accept 'directed', 'undirected', 'multigraph' or 'graph'. The function should have its first argument be the graph object to be checked.@nx.not_implemented_for('directed', 'multigraph') def function_not_for_MultiDiGraph(G, others): # function not for graphs that are directed *and* multigraph pass @nx.not_implemented_for('directed') @nx.not_implemented_for('multigraph') def function_only_for_Graph(G, others): # function not for directed graphs *or* for multigraphs pass