blob: be70bba6a957648e1169db2ea7b591bb944d715f [file] [log] [blame]
"""
Unit tests for edgelists.
"""
from nose.tools import assert_equal, assert_raises, assert_not_equal
import networkx as nx
import io
import tempfile
import os
def assert_equal_edges(elist1,elist2):
if len(elist1[0]) == 2:
return assert_equal(sorted(sorted(e) for e in elist1),
sorted(sorted(e) for e in elist2))
else:
return assert_equal(sorted((sorted((u, v)), d) for u, v, d in elist1),
sorted((sorted((u, v)), d) for u, v, d in elist2))
class TestEdgelist:
def setUp(self):
self.G=nx.Graph(name="test")
e=[('a','b'),('b','c'),('c','d'),('d','e'),('e','f'),('a','f')]
self.G.add_edges_from(e)
self.G.add_node('g')
self.DG=nx.DiGraph(self.G)
self.XG=nx.MultiGraph()
self.XG.add_weighted_edges_from([(1,2,5),(1,2,5),(1,2,1),(3,3,42)])
self. XDG=nx.MultiDiGraph(self.XG)
def test_read_edgelist_1(self):
s = b"""\
# comment line
1 2
# comment line
2 3
"""
bytesIO = io.BytesIO(s)
G = nx.read_edgelist(bytesIO,nodetype=int)
assert_equal_edges(G.edges(),[(1,2),(2,3)])
def test_read_edgelist_2(self):
s = b"""\
# comment line
1 2 2.0
# comment line
2 3 3.0
"""
bytesIO = io.BytesIO(s)
G = nx.read_edgelist(bytesIO,nodetype=int,data=False)
assert_equal_edges(G.edges(),[(1,2),(2,3)])
bytesIO = io.BytesIO(s)
G = nx.read_weighted_edgelist(bytesIO,nodetype=int)
assert_equal_edges(G.edges(data=True),[(1,2,{'weight':2.0}),(2,3,{'weight':3.0})])
def test_read_edgelist_3(self):
s = b"""\
# comment line
1 2 {'weight':2.0}
# comment line
2 3 {'weight':3.0}
"""
bytesIO = io.BytesIO(s)
G = nx.read_edgelist(bytesIO,nodetype=int,data=False)
assert_equal_edges(G.edges(),[(1,2),(2,3)])
bytesIO = io.BytesIO(s)
G = nx.read_edgelist(bytesIO,nodetype=int,data=True)
assert_equal_edges(G.edges(data=True),[(1,2,{'weight':2.0}),(2,3,{'weight':3.0})])
def test_write_edgelist_1(self):
fh=io.BytesIO()
G=nx.Graph()
G.add_edges_from([(1,2),(2,3)])
nx.write_edgelist(G,fh,data=False)
fh.seek(0)
assert_equal(fh.read(),b"1 2\n2 3\n")
def test_write_edgelist_2(self):
fh=io.BytesIO()
G=nx.Graph()
G.add_edges_from([(1,2),(2,3)])
nx.write_edgelist(G,fh,data=True)
fh.seek(0)
assert_equal(fh.read(),b"1 2 {}\n2 3 {}\n")
def test_write_edgelist_3(self):
fh=io.BytesIO()
G=nx.Graph()
G.add_edge(1,2,weight=2.0)
G.add_edge(2,3,weight=3.0)
nx.write_edgelist(G,fh,data=True)
fh.seek(0)
assert_equal(fh.read(),b"1 2 {'weight': 2.0}\n2 3 {'weight': 3.0}\n")
def test_write_edgelist_4(self):
fh=io.BytesIO()
G=nx.Graph()
G.add_edge(1,2,weight=2.0)
G.add_edge(2,3,weight=3.0)
nx.write_edgelist(G,fh,data=[('weight')])
fh.seek(0)
assert_equal(fh.read(),b"1 2 2.0\n2 3 3.0\n")
def test_unicode(self):
G = nx.Graph()
try: # Python 3.x
name1 = chr(2344) + chr(123) + chr(6543)
name2 = chr(5543) + chr(1543) + chr(324)
except ValueError: # Python 2.6+
name1 = unichr(2344) + unichr(123) + unichr(6543)
name2 = unichr(5543) + unichr(1543) + unichr(324)
G.add_edge(name1, 'Radiohead', attr_dict={name2: 3})
fd, fname = tempfile.mkstemp()
nx.write_edgelist(G, fname)
H = nx.read_edgelist(fname)
assert_equal(G.adj, H.adj)
os.close(fd)
os.unlink(fname)
def test_latin1_error(self):
G = nx.Graph()
try: # Python 3.x
name1 = chr(2344) + chr(123) + chr(6543)
name2 = chr(5543) + chr(1543) + chr(324)
except ValueError: # Python 2.6+
name1 = unichr(2344) + unichr(123) + unichr(6543)
name2 = unichr(5543) + unichr(1543) + unichr(324)
G.add_edge(name1, 'Radiohead', attr_dict={name2: 3})
fd, fname = tempfile.mkstemp()
assert_raises(UnicodeEncodeError,
nx.write_edgelist,
G, fname, encoding = 'latin-1')
os.close(fd)
os.unlink(fname)
def test_latin1(self):
G = nx.Graph()
try: # Python 3.x
blurb = chr(1245) # just to trigger the exception
name1 = 'Bj' + chr(246) + 'rk'
name2 = chr(220) + 'ber'
except ValueError: # Python 2.6+
name1 = 'Bj' + unichr(246) + 'rk'
name2 = unichr(220) + 'ber'
G.add_edge(name1, 'Radiohead', attr_dict={name2: 3})
fd, fname = tempfile.mkstemp()
nx.write_edgelist(G, fname, encoding = 'latin-1')
H = nx.read_edgelist(fname, encoding = 'latin-1')
assert_equal(G.adj, H.adj)
os.close(fd)
os.unlink(fname)
def test_edgelist_graph(self):
G=self.G
(fd,fname)=tempfile.mkstemp()
nx.write_edgelist(G,fname)
H=nx.read_edgelist(fname)
H2=nx.read_edgelist(fname)
assert_not_equal(H,H2) # they should be different graphs
G.remove_node('g') # isolated nodes are not written in edgelist
assert_equal(sorted(H.nodes()),sorted(G.nodes()))
assert_equal(sorted(H.edges()),sorted(G.edges()))
os.close(fd)
os.unlink(fname)
def test_edgelist_digraph(self):
G=self.DG
(fd,fname)=tempfile.mkstemp()
nx.write_edgelist(G,fname)
H=nx.read_edgelist(fname,create_using=nx.DiGraph())
H2=nx.read_edgelist(fname,create_using=nx.DiGraph())
assert_not_equal(H,H2) # they should be different graphs
G.remove_node('g') # isolated nodes are not written in edgelist
assert_equal(sorted(H.nodes()),sorted(G.nodes()))
assert_equal(sorted(H.edges()),sorted(G.edges()))
os.close(fd)
os.unlink(fname)
def test_edgelist_integers(self):
G=nx.convert_node_labels_to_integers(self.G)
(fd,fname)=tempfile.mkstemp()
nx.write_edgelist(G,fname)
H=nx.read_edgelist(fname,nodetype=int)
# isolated nodes are not written in edgelist
G.remove_nodes_from(nx.isolates(G))
assert_equal(sorted(H.nodes()),sorted(G.nodes()))
assert_equal(sorted(H.edges()),sorted(G.edges()))
os.close(fd)
os.unlink(fname)
def test_edgelist_digraph(self):
G=self.DG
(fd,fname)=tempfile.mkstemp()
nx.write_edgelist(G,fname)
H=nx.read_edgelist(fname,create_using=nx.DiGraph())
G.remove_node('g') # isolated nodes are not written in edgelist
H2=nx.read_edgelist(fname,create_using=nx.DiGraph())
assert_not_equal(H,H2) # they should be different graphs
assert_equal(sorted(H.nodes()),sorted(G.nodes()))
assert_equal(sorted(H.edges()),sorted(G.edges()))
os.close(fd)
os.unlink(fname)
def test_edgelist_multigraph(self):
G=self.XG
(fd,fname)=tempfile.mkstemp()
nx.write_edgelist(G,fname)
H=nx.read_edgelist(fname,nodetype=int,create_using=nx.MultiGraph())
H2=nx.read_edgelist(fname,nodetype=int,create_using=nx.MultiGraph())
assert_not_equal(H,H2) # they should be different graphs
assert_equal(sorted(H.nodes()),sorted(G.nodes()))
assert_equal(sorted(H.edges()),sorted(G.edges()))
os.close(fd)
os.unlink(fname)
def test_edgelist_multidigraph(self):
G=self.XDG
(fd,fname)=tempfile.mkstemp()
nx.write_edgelist(G,fname)
H=nx.read_edgelist(fname,nodetype=int,create_using=nx.MultiDiGraph())
H2=nx.read_edgelist(fname,nodetype=int,create_using=nx.MultiDiGraph())
assert_not_equal(H,H2) # they should be different graphs
assert_equal(sorted(H.nodes()),sorted(G.nodes()))
assert_equal(sorted(H.edges()),sorted(G.edges()))
os.close(fd)
os.unlink(fname)