Download .venv/Lib/site-packages/networkx/algorithms/tests/test_sparsifiers.py from DrDavis/PythonProject1: direct link, hf CLI and curl.
- Browser
- Download file 4.04 kB
-
https://huggingface.co/DrDavis/PythonProject1/resolve/main/.venv/Lib/site-packages/networkx/algorithms/tests/test_sparsifiers.py
- Command line
-
hf download hf://DrDavis/PythonProject1/.venv/Lib/site-packages/networkx/algorithms/tests/test_sparsifiers.py
-
curl -L -o test_sparsifiers.py https://huggingface.co/DrDavis/PythonProject1/resolve/main/.venv/Lib/site-packages/networkx/algorithms/tests/test_sparsifiers.py
4.04 kB
| """Unit tests for the sparsifier computation functions.""" | |
| import pytest | |
| import networkx as nx | |
| from networkx.utils import py_random_state | |
| _seed = 2 | |
| def _test_spanner(G, spanner, stretch, weight=None): | |
| """Test whether a spanner is valid. | |
| This function tests whether the given spanner is a subgraph of the | |
| given graph G with the same node set. It also tests for all shortest | |
| paths whether they adhere to the given stretch. | |
| Parameters | |
| ---------- | |
| G : NetworkX graph | |
| The original graph for which the spanner was constructed. | |
| spanner : NetworkX graph | |
| The spanner to be tested. | |
| stretch : float | |
| The proclaimed stretch of the spanner. | |
| weight : object | |
| The edge attribute to use as distance. | |
| """ | |
| # check node set | |
| assert set(G.nodes()) == set(spanner.nodes()) | |
| # check edge set and weights | |
| for u, v in spanner.edges(): | |
| assert G.has_edge(u, v) | |
| if weight: | |
| assert spanner[u][v][weight] == G[u][v][weight] | |
| # check connectivity and stretch | |
| original_length = dict(nx.shortest_path_length(G, weight=weight)) | |
| spanner_length = dict(nx.shortest_path_length(spanner, weight=weight)) | |
| for u in G.nodes(): | |
| for v in G.nodes(): | |
| if u in original_length and v in original_length[u]: | |
| assert spanner_length[u][v] <= stretch * original_length[u][v] | |
| def _assign_random_weights(G, seed=None): | |
| """Assigns random weights to the edges of a graph. | |
| Parameters | |
| ---------- | |
| G : NetworkX graph | |
| The original graph for which the spanner was constructed. | |
| seed : integer, random_state, or None (default) | |
| Indicator of random number generation state. | |
| See :ref:`Randomness<randomness>`. | |
| """ | |
| for u, v in G.edges(): | |
| G[u][v]["weight"] = seed.random() | |
| def test_spanner_trivial(): | |
| """Test a trivial spanner with stretch 1.""" | |
| G = nx.complete_graph(20) | |
| spanner = nx.spanner(G, 1, seed=_seed) | |
| for u, v in G.edges: | |
| assert spanner.has_edge(u, v) | |
| def test_spanner_unweighted_complete_graph(): | |
| """Test spanner construction on a complete unweighted graph.""" | |
| G = nx.complete_graph(20) | |
| spanner = nx.spanner(G, 4, seed=_seed) | |
| _test_spanner(G, spanner, 4) | |
| spanner = nx.spanner(G, 10, seed=_seed) | |
| _test_spanner(G, spanner, 10) | |
| def test_spanner_weighted_complete_graph(): | |
| """Test spanner construction on a complete weighted graph.""" | |
| G = nx.complete_graph(20) | |
| _assign_random_weights(G, seed=_seed) | |
| spanner = nx.spanner(G, 4, weight="weight", seed=_seed) | |
| _test_spanner(G, spanner, 4, weight="weight") | |
| spanner = nx.spanner(G, 10, weight="weight", seed=_seed) | |
| _test_spanner(G, spanner, 10, weight="weight") | |
| def test_spanner_unweighted_gnp_graph(): | |
| """Test spanner construction on an unweighted gnp graph.""" | |
| G = nx.gnp_random_graph(20, 0.4, seed=_seed) | |
| spanner = nx.spanner(G, 4, seed=_seed) | |
| _test_spanner(G, spanner, 4) | |
| spanner = nx.spanner(G, 10, seed=_seed) | |
| _test_spanner(G, spanner, 10) | |
| def test_spanner_weighted_gnp_graph(): | |
| """Test spanner construction on an weighted gnp graph.""" | |
| G = nx.gnp_random_graph(20, 0.4, seed=_seed) | |
| _assign_random_weights(G, seed=_seed) | |
| spanner = nx.spanner(G, 4, weight="weight", seed=_seed) | |
| _test_spanner(G, spanner, 4, weight="weight") | |
| spanner = nx.spanner(G, 10, weight="weight", seed=_seed) | |
| _test_spanner(G, spanner, 10, weight="weight") | |
| def test_spanner_unweighted_disconnected_graph(): | |
| """Test spanner construction on a disconnected graph.""" | |
| G = nx.disjoint_union(nx.complete_graph(10), nx.complete_graph(10)) | |
| spanner = nx.spanner(G, 4, seed=_seed) | |
| _test_spanner(G, spanner, 4) | |
| spanner = nx.spanner(G, 10, seed=_seed) | |
| _test_spanner(G, spanner, 10) | |
| def test_spanner_invalid_stretch(): | |
| """Check whether an invalid stretch is caught.""" | |
| with pytest.raises(ValueError): | |
| G = nx.empty_graph() | |
| nx.spanner(G, 0) | |