This repository has been archived on 2023-03-25. You can view files and clone it, but cannot push or open issues or pull requests.
mightyscape-1.1-deprecated/extensions/networkx/algorithms/tests/test_graphical.py
2020-07-30 01:16:18 +02:00

167 lines
5.4 KiB
Python

#!/usr/bin/env python
import pytest
import networkx as nx
def test_valid_degree_sequence1():
n = 100
p = .3
for i in range(10):
G = nx.erdos_renyi_graph(n, p)
deg = (d for n, d in G.degree())
assert nx.is_graphical(deg, method='eg')
assert nx.is_graphical(deg, method='hh')
def test_valid_degree_sequence2():
n = 100
for i in range(10):
G = nx.barabasi_albert_graph(n, 1)
deg = (d for n, d in G.degree())
assert nx.is_graphical(deg, method='eg')
assert nx.is_graphical(deg, method='hh')
def test_string_input():
pytest.raises(nx.NetworkXException, nx.is_graphical, [], 'foo')
pytest.raises(nx.NetworkXException, nx.is_graphical, ['red'], 'hh')
pytest.raises(nx.NetworkXException, nx.is_graphical, ['red'], 'eg')
def test_non_integer_input():
pytest.raises(nx.NetworkXException, nx.is_graphical, [72.5], 'eg')
pytest.raises(nx.NetworkXException, nx.is_graphical, [72.5], 'hh')
def test_negative_input():
assert not nx.is_graphical([-1], 'hh')
assert not nx.is_graphical([-1], 'eg')
class TestAtlas(object):
@classmethod
def setup_class(cls):
global atlas
import platform
# if platform.python_implementation() == 'Jython':
# raise SkipTest('graph atlas not available under Jython.')
import networkx.generators.atlas as atlas
cls.GAG = atlas.graph_atlas_g()
def test_atlas(self):
for graph in self.GAG:
deg = (d for n, d in graph.degree())
assert nx.is_graphical(deg, method='eg')
assert nx.is_graphical(deg, method='hh')
def test_small_graph_true():
z = [5, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1]
assert nx.is_graphical(z, method='hh')
assert nx.is_graphical(z, method='eg')
z = [10, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2]
assert nx.is_graphical(z, method='hh')
assert nx.is_graphical(z, method='eg')
z = [1, 1, 1, 1, 1, 2, 2, 2, 3, 4]
assert nx.is_graphical(z, method='hh')
assert nx.is_graphical(z, method='eg')
def test_small_graph_false():
z = [1000, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1]
assert not nx.is_graphical(z, method='hh')
assert not nx.is_graphical(z, method='eg')
z = [6, 5, 4, 4, 2, 1, 1, 1]
assert not nx.is_graphical(z, method='hh')
assert not nx.is_graphical(z, method='eg')
z = [1, 1, 1, 1, 1, 1, 2, 2, 2, 3, 4]
assert not nx.is_graphical(z, method='hh')
assert not nx.is_graphical(z, method='eg')
def test_directed_degree_sequence():
# Test a range of valid directed degree sequences
n, r = 100, 10
p = 1.0 / r
for i in range(r):
G = nx.erdos_renyi_graph(n, p * (i + 1), None, True)
din = (d for n, d in G.in_degree())
dout = (d for n, d in G.out_degree())
assert nx.is_digraphical(din, dout)
def test_small_directed_sequences():
dout = [5, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1]
din = [3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 1]
assert nx.is_digraphical(din, dout)
# Test nongraphical directed sequence
dout = [1000, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1]
din = [103, 102, 102, 102, 102, 102, 102, 102, 102, 102]
assert not nx.is_digraphical(din, dout)
# Test digraphical small sequence
dout = [1, 1, 1, 1, 1, 2, 2, 2, 3, 4]
din = [2, 2, 2, 2, 2, 2, 2, 2, 1, 1]
assert nx.is_digraphical(din, dout)
# Test nonmatching sum
din = [2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1]
assert not nx.is_digraphical(din, dout)
# Test for negative integer in sequence
din = [2, 2, 2, -2, 2, 2, 2, 2, 1, 1, 4]
assert not nx.is_digraphical(din, dout)
# Test for noninteger
din = dout = [1, 1, 1.1, 1]
assert not nx.is_digraphical(din, dout)
din = dout = [1, 1, "rer", 1]
assert not nx.is_digraphical(din, dout)
def test_multi_sequence():
# Test nongraphical multi sequence
seq = [1000, 3, 3, 3, 3, 2, 2, 2, 1, 1]
assert not nx.is_multigraphical(seq)
# Test small graphical multi sequence
seq = [6, 5, 4, 4, 2, 1, 1, 1]
assert nx.is_multigraphical(seq)
# Test for negative integer in sequence
seq = [6, 5, 4, -4, 2, 1, 1, 1]
assert not nx.is_multigraphical(seq)
# Test for sequence with odd sum
seq = [1, 1, 1, 1, 1, 1, 2, 2, 2, 3, 4]
assert not nx.is_multigraphical(seq)
# Test for noninteger
seq = [1, 1, 1.1, 1]
assert not nx.is_multigraphical(seq)
seq = [1, 1, "rer", 1]
assert not nx.is_multigraphical(seq)
def test_pseudo_sequence():
# Test small valid pseudo sequence
seq = [1000, 3, 3, 3, 3, 2, 2, 2, 1, 1]
assert nx.is_pseudographical(seq)
# Test for sequence with odd sum
seq = [1000, 3, 3, 3, 3, 2, 2, 2, 1, 1, 1]
assert not nx.is_pseudographical(seq)
# Test for negative integer in sequence
seq = [1000, 3, 3, 3, 3, 2, 2, -2, 1, 1]
assert not nx.is_pseudographical(seq)
# Test for noninteger
seq = [1, 1, 1.1, 1]
assert not nx.is_pseudographical(seq)
seq = [1, 1, "rer", 1]
assert not nx.is_pseudographical(seq)
def test_numpy_degree_sequence():
numpy = pytest.importorskip('numpy')
ds = numpy.array([1, 2, 2, 2, 1], dtype=numpy.int64)
assert nx.is_graphical(ds, 'eg')
assert nx.is_graphical(ds, 'hh')
ds = numpy.array([1, 2, 2, 2, 1], dtype=numpy.float64)
assert nx.is_graphical(ds, 'eg')
assert nx.is_graphical(ds, 'hh')
ds = numpy.array([1.1, 2, 2, 2, 1], dtype=numpy.float64)
pytest.raises(nx.NetworkXException, nx.is_graphical, ds, 'eg')
pytest.raises(nx.NetworkXException, nx.is_graphical, ds, 'hh')