summaryrefslogtreecommitdiff
path: root/networkx/drawing
diff options
context:
space:
mode:
authorMartin K. Scherer <marscher@users.noreply.github.com>2022-03-04 21:04:42 +0100
committerGitHub <noreply@github.com>2022-03-04 12:04:42 -0800
commit1ca398b5daa2fbc11e48554f427c8c15a4a1fe50 (patch)
treeb7a4393dba22f8a22c617c62a227321fd2dce281 /networkx/drawing
parent8feb4a645c93598bb187bf1707beb673fa27915e (diff)
downloadnetworkx-1ca398b5daa2fbc11e48554f427c8c15a4a1fe50.tar.gz
[nx_pylab] fix StopIteration, if empty dict is passed for labels. (#5372)
* [nx_pylab] fix StopIteration, if empty dict is passed for labels. The new detection for multi-edge labels raises, if an empty dict was passed. Before this detection that was fine, because the loop iterating over the passed labels just passed. Added small test as well. * incorporate suggestions [ci skip] * Add regression test for empty edge label dict. * Simplify dict lookup (keys only). Co-authored-by: Ross Barnowski <rossbar@berkeley.edu>
Diffstat (limited to 'networkx/drawing')
-rw-r--r--networkx/drawing/nx_pylab.py7
-rw-r--r--networkx/drawing/tests/test_pylab.py8
2 files changed, 13 insertions, 2 deletions
diff --git a/networkx/drawing/nx_pylab.py b/networkx/drawing/nx_pylab.py
index 26c76134..0e392e2b 100644
--- a/networkx/drawing/nx_pylab.py
+++ b/networkx/drawing/nx_pylab.py
@@ -1058,7 +1058,7 @@ def draw_networkx_edge_labels(
A dictionary with nodes as keys and positions as values.
Positions should be sequences of length 2.
- edge_labels : dictionary (default={})
+ edge_labels : dictionary (default=None)
Edge labels in a dictionary of labels keyed by edge two-tuple.
Only labels for the keys in the dictionary are drawn.
@@ -1131,11 +1131,14 @@ def draw_networkx_edge_labels(
labels = edge_labels
# Informative exception for multiedges
try:
- (u, v), d = next(iter(labels.items()))
+ (u, v) = next(iter(labels)) # ensures no edge key provided
except ValueError as err:
raise nx.NetworkXError(
"draw_networkx_edge_labels does not support multiedges."
) from err
+ except StopIteration:
+ pass
+
text_items = {}
for (n1, n2), label in labels.items():
(x1, y1) = pos[n1]
diff --git a/networkx/drawing/tests/test_pylab.py b/networkx/drawing/tests/test_pylab.py
index b8ea9423..54ea6e0c 100644
--- a/networkx/drawing/tests/test_pylab.py
+++ b/networkx/drawing/tests/test_pylab.py
@@ -716,3 +716,11 @@ def test_draw_networkx_edge_label_multiedge_exception():
pos = {n: (n, n) for n in G}
with pytest.raises(nx.NetworkXError, match=exception_msg):
nx.draw_networkx_edge_labels(G, pos, edge_labels=edge_labels)
+
+
+def test_draw_networkx_edge_label_empty_dict():
+ """Regression test for draw_networkx_edge_labels with empty dict. See
+ gh-5372."""
+ G = nx.path_graph(3)
+ pos = {n: (n, n) for n in G.nodes}
+ assert nx.draw_networkx_edge_labels(G, pos, edge_labels={}) == {}