Mercurial > repos > shellac > sam_consensus_v3
diff env/lib/python3.9/site-packages/networkx/generators/tests/test_expanders.py @ 0:4f3585e2f14b draft default tip
"planemo upload commit 60cee0fc7c0cda8592644e1aad72851dec82c959"
author | shellac |
---|---|
date | Mon, 22 Mar 2021 18:12:50 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/env/lib/python3.9/site-packages/networkx/generators/tests/test_expanders.py Mon Mar 22 18:12:50 2021 +0000 @@ -0,0 +1,71 @@ +"""Unit tests for the :mod:`networkx.generators.expanders` module. + +""" + +import networkx as nx +from networkx import adjacency_matrix +from networkx import number_of_nodes +from networkx.generators.expanders import chordal_cycle_graph +from networkx.generators.expanders import margulis_gabber_galil_graph +from networkx.generators.expanders import paley_graph + +import pytest + + +def test_margulis_gabber_galil_graph(): + for n in 2, 3, 5, 6, 10: + g = margulis_gabber_galil_graph(n) + assert number_of_nodes(g) == n * n + for node in g: + assert g.degree(node) == 8 + assert len(node) == 2 + for i in node: + assert int(i) == i + assert 0 <= i < n + + np = pytest.importorskip("numpy") + scipy = pytest.importorskip("scipy") + scipy.linalg = pytest.importorskip("scipy.linalg") + # Eigenvalues are already sorted using the scipy eigvalsh, + # but the implementation in numpy does not guarantee order. + w = sorted(scipy.linalg.eigvalsh(adjacency_matrix(g).A)) + assert w[-2] < 5 * np.sqrt(2) + + +def test_chordal_cycle_graph(): + """Test for the :func:`networkx.chordal_cycle_graph` function.""" + primes = [3, 5, 7, 11] + for p in primes: + G = chordal_cycle_graph(p) + assert len(G) == p + # TODO The second largest eigenvalue should be smaller than a constant, + # independent of the number of nodes in the graph: + # + # eigs = sorted(scipy.linalg.eigvalsh(adjacency_matrix(G).A)) + # assert_less(eigs[-2], ...) + # + + +def test_paley_graph(): + """Test for the :func:`networkx.paley_graph` function.""" + primes = [3, 5, 7, 11, 13] + for p in primes: + G = paley_graph(p) + # G has p nodes + assert len(G) == p + # G is (p-1)/2-regular + in_degrees = {G.in_degree(node) for node in G.nodes} + out_degrees = {G.out_degree(node) for node in G.nodes} + assert len(in_degrees) == 1 and in_degrees.pop() == (p - 1) // 2 + assert len(out_degrees) == 1 and out_degrees.pop() == (p - 1) // 2 + + # If p = 1 mod 4, -1 is a square mod 4 and therefore the + # edge in the Paley graph are symmetric. + if p % 4 == 1: + for (u, v) in G.edges: + assert (v, u) in G.edges + + +def test_margulis_gabber_galil_graph_badinput(): + pytest.raises(nx.NetworkXError, margulis_gabber_galil_graph, 3, nx.DiGraph()) + pytest.raises(nx.NetworkXError, margulis_gabber_galil_graph, 3, nx.Graph())