| """Unit tests for the :mod:`networkx.generators.stochastic` module.""" | |
| import pytest | |
| import networkx as nx | |
| class TestStochasticGraph: | |
| """Unit tests for the :func:`~networkx.stochastic_graph` function.""" | |
| def test_default_weights(self): | |
| G = nx.DiGraph() | |
| G.add_edge(0, 1) | |
| G.add_edge(0, 2) | |
| S = nx.stochastic_graph(G) | |
| assert nx.is_isomorphic(G, S) | |
| assert sorted(S.edges(data=True)) == [ | |
| (0, 1, {"weight": 0.5}), | |
| (0, 2, {"weight": 0.5}), | |
| ] | |
| def test_in_place(self): | |
| """Tests for an in-place reweighting of the edges of the graph.""" | |
| G = nx.DiGraph() | |
| G.add_edge(0, 1, weight=1) | |
| G.add_edge(0, 2, weight=1) | |
| nx.stochastic_graph(G, copy=False) | |
| assert sorted(G.edges(data=True)) == [ | |
| (0, 1, {"weight": 0.5}), | |
| (0, 2, {"weight": 0.5}), | |
| ] | |
| def test_arbitrary_weights(self): | |
| G = nx.DiGraph() | |
| G.add_edge(0, 1, weight=1) | |
| G.add_edge(0, 2, weight=1) | |
| S = nx.stochastic_graph(G) | |
| assert sorted(S.edges(data=True)) == [ | |
| (0, 1, {"weight": 0.5}), | |
| (0, 2, {"weight": 0.5}), | |
| ] | |
| def test_multidigraph(self): | |
| G = nx.MultiDiGraph() | |
| G.add_edges_from([(0, 1), (0, 1), (0, 2), (0, 2)]) | |
| S = nx.stochastic_graph(G) | |
| d = {"weight": 0.25} | |
| assert sorted(S.edges(data=True)) == [ | |
| (0, 1, d), | |
| (0, 1, d), | |
| (0, 2, d), | |
| (0, 2, d), | |
| ] | |
| def test_zero_weights(self): | |
| """Smoke test: ensure ZeroDivisionError is not raised.""" | |
| G = nx.DiGraph() | |
| G.add_edge(0, 1, weight=0) | |
| G.add_edge(0, 2, weight=0) | |
| S = nx.stochastic_graph(G) | |
| assert sorted(S.edges(data=True)) == [ | |
| (0, 1, {"weight": 0}), | |
| (0, 2, {"weight": 0}), | |
| ] | |
| def test_graph_disallowed(self): | |
| with pytest.raises(nx.NetworkXNotImplemented): | |
| nx.stochastic_graph(nx.Graph()) | |
| def test_multigraph_disallowed(self): | |
| with pytest.raises(nx.NetworkXNotImplemented): | |
| nx.stochastic_graph(nx.MultiGraph()) | |