diff options
author | Dan Schult <dschult@colgate.edu> | 2023-03-12 01:13:44 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-03-11 22:13:44 -0800 |
commit | 1b3646ad9d0f9506c60b473a8f84915a01ed0f86 (patch) | |
tree | 0c21cd33a1c0f69fe69358b5c83f0a802eeb941a | |
parent | 4a6f2f43508d26d0eb9884a24cba28721d5fb875 (diff) | |
download | networkx-1b3646ad9d0f9506c60b473a8f84915a01ed0f86.tar.gz |
Allow first argument to be passed as kwarg in dispatcher (#6471)
* tweak _dispatch to allow func(G=G) pattern in signature
Co-authored-by: Erik Welch <erik.n.welch@gmail.com>
-rw-r--r-- | networkx/classes/backends.py | 8 | ||||
-rw-r--r-- | networkx/classes/tests/test_backends.py | 14 |
2 files changed, 21 insertions, 1 deletions
diff --git a/networkx/classes/backends.py b/networkx/classes/backends.py index 183db170..c96f4896 100644 --- a/networkx/classes/backends.py +++ b/networkx/classes/backends.py @@ -128,7 +128,13 @@ def _dispatch(func=None, *, name=None): @functools.wraps(func) def wrapper(*args, **kwds): - graph = args[0] + if args: + graph = args[0] + else: + try: + graph = kwds["G"] + except KeyError: + raise TypeError(f"{name}() missing positional argument: 'G'") from None if hasattr(graph, "__networkx_plugin__") and plugins: plugin_name = graph.__networkx_plugin__ if plugin_name in plugins: diff --git a/networkx/classes/tests/test_backends.py b/networkx/classes/tests/test_backends.py new file mode 100644 index 00000000..8d0c86a4 --- /dev/null +++ b/networkx/classes/tests/test_backends.py @@ -0,0 +1,14 @@ +import pytest + +import networkx as nx + +pytest.importorskip("scipy") +pytest.importorskip("numpy") + + +def test_dispatch_kwds_vs_args(): + G = nx.path_graph(4) + nx.pagerank(G) + nx.pagerank(G=G) + with pytest.raises(TypeError): + nx.pagerank() |