summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Schult <dschult@colgate.edu>2023-03-12 01:13:44 -0500
committerGitHub <noreply@github.com>2023-03-11 22:13:44 -0800
commit1b3646ad9d0f9506c60b473a8f84915a01ed0f86 (patch)
tree0c21cd33a1c0f69fe69358b5c83f0a802eeb941a
parent4a6f2f43508d26d0eb9884a24cba28721d5fb875 (diff)
downloadnetworkx-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.py8
-rw-r--r--networkx/classes/tests/test_backends.py14
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()