blob: 34b7e6e811ef0eb8010650991cfc54c3a2d2966d [file] [log] [blame]
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.node[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.node[n], eval(graph).node[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.node[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.node[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(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])
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)))