Repository URL to install this package:
|
Version:
2.1 ▾
|
from nose.tools import *
import networkx as nx
from networkx import *
from networkx.testing import *
def test_union_attributes():
g = nx.Graph()
g.add_node(0, x=4)
g.add_node(1, x=5)
g.add_edge(0, 1, size=5)
g.graph['name'] = 'g'
h = g.copy()
h.graph['name'] = 'h'
h.graph['attr'] = 'attr'
h.nodes[0]['x'] = 7
gh = nx.union(g, h, rename=('g', 'h'))
assert_equal(set(gh.nodes()), set(['h0', 'h1', 'g0', 'g1']))
for n in gh:
graph, node = n
assert_equal(gh.nodes[n], eval(graph).nodes[int(node)])
assert_equal(gh.graph['attr'], 'attr')
assert_equal(gh.graph['name'], 'h') # h graph attributes take precendent
def test_intersection():
G = nx.Graph()
H = nx.Graph()
G.add_nodes_from([1, 2, 3, 4])
G.add_edge(1, 2)
G.add_edge(2, 3)
H.add_nodes_from([1, 2, 3, 4])
H.add_edge(2, 3)
H.add_edge(3, 4)
I = nx.intersection(G, H)
assert_equal(set(I.nodes()), set([1, 2, 3, 4]))
assert_equal(sorted(I.edges()), [(2, 3)])
def test_intersection_attributes():
g = nx.Graph()
g.add_node(0, x=4)
g.add_node(1, x=5)
g.add_edge(0, 1, size=5)
g.graph['name'] = 'g'
h = g.copy()
h.graph['name'] = 'h'
h.graph['attr'] = 'attr'
h.nodes[0]['x'] = 7
gh = nx.intersection(g, h)
assert_equal(set(gh.nodes()), set(g.nodes()))
assert_equal(set(gh.nodes()), set(h.nodes()))
assert_equal(sorted(gh.edges()), sorted(g.edges()))
h.remove_node(0)
assert_raises(nx.NetworkXError, nx.intersection, g, h)
def test_intersection_multigraph_attributes():
g = nx.MultiGraph()
g.add_edge(0, 1, key=0)
g.add_edge(0, 1, key=1)
g.add_edge(0, 1, key=2)
h = nx.MultiGraph()
h.add_edge(0, 1, key=0)
h.add_edge(0, 1, key=3)
gh = nx.intersection(g, h)
assert_equal(set(gh.nodes()), set(g.nodes()))
assert_equal(set(gh.nodes()), set(h.nodes()))
assert_equal(sorted(gh.edges()), [(0, 1)])
assert_equal(sorted(gh.edges(keys=True)), [(0, 1, 0)])
def test_difference():
G = nx.Graph()
H = nx.Graph()
G.add_nodes_from([1, 2, 3, 4])
G.add_edge(1, 2)
G.add_edge(2, 3)
H.add_nodes_from([1, 2, 3, 4])
H.add_edge(2, 3)
H.add_edge(3, 4)
D = nx.difference(G, H)
assert_equal(set(D.nodes()), set([1, 2, 3, 4]))
assert_equal(sorted(D.edges()), [(1, 2)])
D = nx.difference(H, G)
assert_equal(set(D.nodes()), set([1, 2, 3, 4]))
assert_equal(sorted(D.edges()), [(3, 4)])
D = nx.symmetric_difference(G, H)
assert_equal(set(D.nodes()), set([1, 2, 3, 4]))
assert_equal(sorted(D.edges()), [(1, 2), (3, 4)])
def test_difference2():
G = nx.Graph()
H = nx.Graph()
G.add_nodes_from([1, 2, 3, 4])
H.add_nodes_from([1, 2, 3, 4])
G.add_edge(1, 2)
H.add_edge(1, 2)
G.add_edge(2, 3)
D = nx.difference(G, H)
assert_equal(set(D.nodes()), set([1, 2, 3, 4]))
assert_equal(sorted(D.edges()), [(2, 3)])
D = nx.difference(H, G)
assert_equal(set(D.nodes()), set([1, 2, 3, 4]))
assert_equal(sorted(D.edges()), [])
H.add_edge(3, 4)
D = nx.difference(H, G)
assert_equal(set(D.nodes()), set([1, 2, 3, 4]))
assert_equal(sorted(D.edges()), [(3, 4)])
def test_difference_attributes():
g = nx.Graph()
g.add_node(0, x=4)
g.add_node(1, x=5)
g.add_edge(0, 1, size=5)
g.graph['name'] = 'g'
h = g.copy()
h.graph['name'] = 'h'
h.graph['attr'] = 'attr'
h.nodes[0]['x'] = 7
gh = nx.difference(g, h)
assert_equal(set(gh.nodes()), set(g.nodes()))
assert_equal(set(gh.nodes()), set(h.nodes()))
assert_equal(sorted(gh.edges()), [])
h.remove_node(0)
assert_raises(nx.NetworkXError, nx.intersection, g, h)
def test_difference_multigraph_attributes():
g = nx.MultiGraph()
g.add_edge(0, 1, key=0)
g.add_edge(0, 1, key=1)
g.add_edge(0, 1, key=2)
h = nx.MultiGraph()
h.add_edge(0, 1, key=0)
h.add_edge(0, 1, key=3)
gh = nx.difference(g, h)
assert_equal(set(gh.nodes()), set(g.nodes()))
assert_equal(set(gh.nodes()), set(h.nodes()))
assert_equal(sorted(gh.edges()), [(0, 1), (0, 1)])
assert_equal(sorted(gh.edges(keys=True)), [(0, 1, 1), (0, 1, 2)])
@raises(nx.NetworkXError)
def test_difference_raise():
G = nx.path_graph(4)
H = nx.path_graph(3)
GH = nx.difference(G, H)
def test_symmetric_difference_multigraph():
g = nx.MultiGraph()
g.add_edge(0, 1, key=0)
g.add_edge(0, 1, key=1)
g.add_edge(0, 1, key=2)
h = nx.MultiGraph()
h.add_edge(0, 1, key=0)
h.add_edge(0, 1, key=3)
gh = nx.symmetric_difference(g, h)
assert_equal(set(gh.nodes()), set(g.nodes()))
assert_equal(set(gh.nodes()), set(h.nodes()))
assert_equal(sorted(gh.edges()), 3 * [(0, 1)])
assert_equal(sorted(sorted(e) for e in gh.edges(keys=True)),
[[0, 1, 1], [0, 1, 2], [0, 1, 3]])
@raises(nx.NetworkXError)
def test_symmetric_difference_raise():
G = nx.path_graph(4)
H = nx.path_graph(3)
GH = nx.symmetric_difference(G, H)
def test_union_and_compose():
K3 = complete_graph(3)
P3 = path_graph(3)
G1 = nx.DiGraph()
G1.add_edge('A', 'B')
G1.add_edge('A', 'C')
G1.add_edge('A', 'D')
G2 = nx.DiGraph()
G2.add_edge('1', '2')
G2.add_edge('1', '3')
G2.add_edge('1', '4')
G = union(G1, G2)
H = compose(G1, G2)
assert_edges_equal(G.edges(), H.edges())
assert_false(G.has_edge('A', 1))
assert_raises(nx.NetworkXError, nx.union, K3, P3)
H1 = union(H, G1, rename=('H', 'G1'))
assert_equal(sorted(H1.nodes()),
['G1A', 'G1B', 'G1C', 'G1D',
'H1', 'H2', 'H3', 'H4', 'HA', 'HB', 'HC', 'HD'])
H2 = union(H, G2, rename=("H", ""))
assert_equal(sorted(H2.nodes()),
['1', '2', '3', '4',
'H1', 'H2', 'H3', 'H4', 'HA', 'HB', 'HC', 'HD'])
assert_false(H1.has_edge('NB', 'NA'))
G = compose(G, G)
assert_edges_equal(G.edges(), H.edges())
G2 = union(G2, G2, rename=('', 'copy'))
assert_equal(sorted(G2.nodes()),
['1', '2', '3', '4', 'copy1', 'copy2', 'copy3', 'copy4'])
assert_equal(sorted(G2.neighbors('copy4')), [])
assert_equal(sorted(G2.neighbors('copy1')), ['copy2', 'copy3', 'copy4'])
assert_equal(len(G), 8)
assert_equal(number_of_edges(G), 6)
E = disjoint_union(G, G)
assert_equal(len(E), 16)
assert_equal(number_of_edges(E), 12)
E = disjoint_union(G1, G2)
assert_equal(sorted(E.nodes()), [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
G = nx.Graph()
H = nx.Graph()
G.add_nodes_from([(1, {'a1': 1})])
H.add_nodes_from([(1, {'b1': 1})])
R = compose(G, H)
assert_equal(R.nodes, {1: {'a1': 1, 'b1': 1}})
def test_union_multigraph():
G = nx.MultiGraph()
G.add_edge(1, 2, key=0)
G.add_edge(1, 2, key=1)
H = nx.MultiGraph()
H.add_edge(3, 4, key=0)
H.add_edge(3, 4, key=1)
GH = nx.union(G, H)
assert_equal(set(GH), set(G) | set(H))
assert_equal(set(GH.edges(keys=True)),
set(G.edges(keys=True)) | set(H.edges(keys=True)))
def test_disjoint_union_multigraph():
G = nx.MultiGraph()
G.add_edge(0, 1, key=0)
G.add_edge(0, 1, key=1)
H = nx.MultiGraph()
H.add_edge(2, 3, key=0)
H.add_edge(2, 3, key=1)
GH = nx.disjoint_union(G, H)
assert_equal(set(GH), set(G) | set(H))
assert_equal(set(GH.edges(keys=True)),
set(G.edges(keys=True)) | set(H.edges(keys=True)))
def test_compose_multigraph():
G = nx.MultiGraph()
G.add_edge(1, 2, key=0)
G.add_edge(1, 2, key=1)
H = nx.MultiGraph()
H.add_edge(3, 4, key=0)
H.add_edge(3, 4, key=1)
GH = nx.compose(G, H)
assert_equal(set(GH), set(G) | set(H))
assert_equal(set(GH.edges(keys=True)),
set(G.edges(keys=True)) | set(H.edges(keys=True)))
H.add_edge(1, 2, key=2)
GH = nx.compose(G, H)
assert_equal(set(GH), set(G) | set(H))
assert_equal(set(GH.edges(keys=True)),
set(G.edges(keys=True)) | set(H.edges(keys=True)))
@raises(nx.NetworkXError)
def test_mixed_type_union():
G = nx.Graph()
H = nx.MultiGraph()
U = nx.union(G, H)
@raises(nx.NetworkXError)
def test_mixed_type_disjoint_union():
G = nx.Graph()
H = nx.MultiGraph()
U = nx.disjoint_union(G, H)
@raises(nx.NetworkXError)
def test_mixed_type_intersection():
G = nx.Graph()
H = nx.MultiGraph()
U = nx.intersection(G, H)
@raises(nx.NetworkXError)
def test_mixed_type_difference():
G = nx.Graph()
H = nx.MultiGraph()
U = nx.difference(G, H)
@raises(nx.NetworkXError)
def test_mixed_type_symmetric_difference():
G = nx.Graph()
H = nx.MultiGraph()
U = nx.symmetric_difference(G, H)
@raises(nx.NetworkXError)
def test_mixed_type_compose():
G = nx.Graph()
H = nx.MultiGraph()
U = nx.compose(G, H)