1151 lines
33 KiB
Python
1151 lines
33 KiB
Python
|
import pytest
|
||
|
|
||
|
import networkx as nx
|
||
|
|
||
|
|
||
|
# Nodes
|
||
|
class TestNodeView(object):
|
||
|
@classmethod
|
||
|
def setup_class(cls):
|
||
|
cls.G = nx.path_graph(9)
|
||
|
cls.nv = cls.G.nodes # NodeView(G)
|
||
|
|
||
|
def test_pickle(self):
|
||
|
import pickle
|
||
|
nv = self.nv
|
||
|
pnv = pickle.loads(pickle.dumps(nv, -1))
|
||
|
assert nv == pnv
|
||
|
assert nv.__slots__ == pnv.__slots__
|
||
|
|
||
|
def test_str(self):
|
||
|
assert str(self.nv) == "[0, 1, 2, 3, 4, 5, 6, 7, 8]"
|
||
|
|
||
|
def test_repr(self):
|
||
|
assert repr(self.nv) == "NodeView((0, 1, 2, 3, 4, 5, 6, 7, 8))"
|
||
|
|
||
|
def test_contains(self):
|
||
|
G = self.G.copy()
|
||
|
nv = G.nodes
|
||
|
assert 7 in nv
|
||
|
assert not 9 in nv
|
||
|
G.remove_node(7)
|
||
|
G.add_node(9)
|
||
|
assert not 7 in nv
|
||
|
assert 9 in nv
|
||
|
|
||
|
def test_getitem(self):
|
||
|
G = self.G.copy()
|
||
|
nv = G.nodes
|
||
|
G.nodes[3]['foo'] = 'bar'
|
||
|
assert nv[7] == {}
|
||
|
assert nv[3] == {'foo': 'bar'}
|
||
|
|
||
|
def test_iter(self):
|
||
|
nv = self.nv
|
||
|
for i, n in enumerate(nv):
|
||
|
assert i == n
|
||
|
inv = iter(nv)
|
||
|
assert next(inv) == 0
|
||
|
assert iter(nv) != nv
|
||
|
assert iter(inv) == inv
|
||
|
inv2 = iter(nv)
|
||
|
next(inv2)
|
||
|
assert list(inv) == list(inv2)
|
||
|
# odd case where NodeView calls NodeDataView with data=False
|
||
|
nnv = nv(data=False)
|
||
|
for i, n in enumerate(nnv):
|
||
|
assert i == n
|
||
|
|
||
|
def test_call(self):
|
||
|
nodes = self.nv
|
||
|
assert nodes is nodes()
|
||
|
assert nodes is not nodes(data=True)
|
||
|
assert nodes is not nodes(data='weight')
|
||
|
|
||
|
|
||
|
class TestNodeDataView(object):
|
||
|
@classmethod
|
||
|
def setup_class(cls):
|
||
|
cls.G = nx.path_graph(9)
|
||
|
cls.nv = cls.G.nodes.data() # NodeDataView(G)
|
||
|
cls.ndv = cls.G.nodes.data(True)
|
||
|
cls.nwv = cls.G.nodes.data('foo')
|
||
|
|
||
|
def test_viewtype(self):
|
||
|
nv = self.G.nodes
|
||
|
ndvfalse = nv.data(False)
|
||
|
assert nv is ndvfalse
|
||
|
assert nv is not self.ndv
|
||
|
|
||
|
def test_pickle(self):
|
||
|
import pickle
|
||
|
nv = self.nv
|
||
|
pnv = pickle.loads(pickle.dumps(nv, -1))
|
||
|
assert nv == pnv
|
||
|
assert nv.__slots__ == pnv.__slots__
|
||
|
|
||
|
def test_str(self):
|
||
|
msg = str([(n, {}) for n in range(9)])
|
||
|
assert str(self.ndv) == msg
|
||
|
|
||
|
def test_repr(self):
|
||
|
msg = "NodeDataView({0: {}, 1: {}, 2: {}, 3: {}, " + \
|
||
|
"4: {}, 5: {}, 6: {}, 7: {}, 8: {}})"
|
||
|
assert repr(self.ndv) == msg
|
||
|
|
||
|
def test_contains(self):
|
||
|
G = self.G.copy()
|
||
|
nv = G.nodes.data()
|
||
|
nwv = G.nodes.data('foo')
|
||
|
G.nodes[3]['foo'] = 'bar'
|
||
|
assert (7, {}) in nv
|
||
|
assert (3, {'foo': 'bar'}) in nv
|
||
|
assert (3, 'bar') in nwv
|
||
|
assert (7, None) in nwv
|
||
|
# default
|
||
|
nwv_def = G.nodes(data='foo', default='biz')
|
||
|
assert (7, 'biz') in nwv_def
|
||
|
assert (3, 'bar') in nwv_def
|
||
|
|
||
|
def test_getitem(self):
|
||
|
G = self.G.copy()
|
||
|
nv = G.nodes
|
||
|
G.nodes[3]['foo'] = 'bar'
|
||
|
assert nv[3] == {'foo': 'bar'}
|
||
|
# default
|
||
|
nwv_def = G.nodes(data='foo', default='biz')
|
||
|
assert nwv_def[7], 'biz'
|
||
|
assert nwv_def[3] == 'bar'
|
||
|
|
||
|
def test_iter(self):
|
||
|
G = self.G.copy()
|
||
|
nv = G.nodes.data()
|
||
|
ndv = G.nodes.data(True)
|
||
|
nwv = G.nodes.data('foo')
|
||
|
for i, (n, d) in enumerate(nv):
|
||
|
assert i == n
|
||
|
assert d == {}
|
||
|
inv = iter(nv)
|
||
|
assert next(inv) == (0, {})
|
||
|
G.nodes[3]['foo'] = 'bar'
|
||
|
# default
|
||
|
for n, d in nv:
|
||
|
if n == 3:
|
||
|
assert d == {'foo': 'bar'}
|
||
|
else:
|
||
|
assert d == {}
|
||
|
# data=True
|
||
|
for n, d in ndv:
|
||
|
if n == 3:
|
||
|
assert d == {'foo': 'bar'}
|
||
|
else:
|
||
|
assert d == {}
|
||
|
# data='foo'
|
||
|
for n, d in nwv:
|
||
|
if n == 3:
|
||
|
assert d == 'bar'
|
||
|
else:
|
||
|
assert d == None
|
||
|
# data='foo', default=1
|
||
|
for n, d in G.nodes.data('foo', default=1):
|
||
|
if n == 3:
|
||
|
assert d == 'bar'
|
||
|
else:
|
||
|
assert d == 1
|
||
|
|
||
|
|
||
|
def test_nodedataview_unhashable():
|
||
|
G = nx.path_graph(9)
|
||
|
G.nodes[3]['foo'] = 'bar'
|
||
|
nvs = [G.nodes.data()]
|
||
|
nvs.append(G.nodes.data(True))
|
||
|
H = G.copy()
|
||
|
H.nodes[4]['foo'] = {1, 2, 3}
|
||
|
nvs.append(H.nodes.data(True))
|
||
|
# raise unhashable
|
||
|
for nv in nvs:
|
||
|
pytest.raises(TypeError, set, nv)
|
||
|
pytest.raises(TypeError, eval, 'nv | nv', locals())
|
||
|
# no raise... hashable
|
||
|
Gn = G.nodes.data(False)
|
||
|
set(Gn)
|
||
|
Gn | Gn
|
||
|
Gn = G.nodes.data('foo')
|
||
|
set(Gn)
|
||
|
Gn | Gn
|
||
|
|
||
|
|
||
|
class TestNodeViewSetOps(object):
|
||
|
@classmethod
|
||
|
def setup_class(cls):
|
||
|
cls.G = nx.path_graph(9)
|
||
|
cls.G.nodes[3]['foo'] = 'bar'
|
||
|
cls.nv = cls.G.nodes
|
||
|
|
||
|
def n_its(self, nodes):
|
||
|
return {node for node in nodes}
|
||
|
|
||
|
def test_len(self):
|
||
|
G = self.G.copy()
|
||
|
nv = G.nodes
|
||
|
assert len(nv) == 9
|
||
|
G.remove_node(7)
|
||
|
assert len(nv) == 8
|
||
|
G.add_node(9)
|
||
|
assert len(nv) == 9
|
||
|
|
||
|
def test_and(self):
|
||
|
# print("G & H nodes:", gnv & hnv)
|
||
|
nv = self.nv
|
||
|
some_nodes = self.n_its(range(5, 12))
|
||
|
assert nv & some_nodes == self.n_its(range(5, 9))
|
||
|
assert some_nodes & nv == self.n_its(range(5, 9))
|
||
|
|
||
|
def test_or(self):
|
||
|
# print("G | H nodes:", gnv | hnv)
|
||
|
nv = self.nv
|
||
|
some_nodes = self.n_its(range(5, 12))
|
||
|
assert nv | some_nodes == self.n_its(range(12))
|
||
|
assert some_nodes | nv == self.n_its(range(12))
|
||
|
|
||
|
def test_xor(self):
|
||
|
# print("G ^ H nodes:", gnv ^ hnv)
|
||
|
nv = self.nv
|
||
|
some_nodes = self.n_its(range(5, 12))
|
||
|
nodes = {0, 1, 2, 3, 4, 9, 10, 11}
|
||
|
assert nv ^ some_nodes == self.n_its(nodes)
|
||
|
assert some_nodes ^ nv == self.n_its(nodes)
|
||
|
|
||
|
def test_sub(self):
|
||
|
# print("G - H nodes:", gnv - hnv)
|
||
|
nv = self.nv
|
||
|
some_nodes = self.n_its(range(5, 12))
|
||
|
assert nv - some_nodes == self.n_its(range(5))
|
||
|
assert some_nodes - nv == self.n_its(range(9, 12))
|
||
|
|
||
|
|
||
|
class TestNodeDataViewSetOps(TestNodeViewSetOps):
|
||
|
@classmethod
|
||
|
def setup_class(cls):
|
||
|
cls.G = nx.path_graph(9)
|
||
|
cls.G.nodes[3]['foo'] = 'bar'
|
||
|
cls.nv = cls.G.nodes.data('foo')
|
||
|
|
||
|
def n_its(self, nodes):
|
||
|
return {(node, 'bar' if node == 3 else None) for node in nodes}
|
||
|
|
||
|
|
||
|
class TestNodeDataViewDefaultSetOps(TestNodeDataViewSetOps):
|
||
|
@classmethod
|
||
|
def setup_class(cls):
|
||
|
cls.G = nx.path_graph(9)
|
||
|
cls.G.nodes[3]['foo'] = 'bar'
|
||
|
cls.nv = cls.G.nodes.data('foo', default=1)
|
||
|
|
||
|
def n_its(self, nodes):
|
||
|
return {(node, 'bar' if node == 3 else 1) for node in nodes}
|
||
|
|
||
|
|
||
|
# Edges Data View
|
||
|
class TestEdgeDataView(object):
|
||
|
@classmethod
|
||
|
def setup_class(cls):
|
||
|
cls.G = nx.path_graph(9)
|
||
|
cls.eview = nx.reportviews.EdgeView
|
||
|
|
||
|
def test_pickle(self):
|
||
|
import pickle
|
||
|
ev = self.eview(self.G)(data=True)
|
||
|
pev = pickle.loads(pickle.dumps(ev, -1))
|
||
|
assert list(ev) == list(pev)
|
||
|
assert ev.__slots__ == pev.__slots__
|
||
|
|
||
|
def modify_edge(self, G, e, **kwds):
|
||
|
G._adj[e[0]][e[1]].update(kwds)
|
||
|
|
||
|
def test_str(self):
|
||
|
ev = self.eview(self.G)(data=True)
|
||
|
rep = str([(n, n + 1, {}) for n in range(8)])
|
||
|
assert str(ev) == rep
|
||
|
|
||
|
def test_repr(self):
|
||
|
ev = self.eview(self.G)(data=True)
|
||
|
rep = "EdgeDataView([(0, 1, {}), (1, 2, {}), " + \
|
||
|
"(2, 3, {}), (3, 4, {}), " + \
|
||
|
"(4, 5, {}), (5, 6, {}), " + \
|
||
|
"(6, 7, {}), (7, 8, {})])"
|
||
|
assert repr(ev) == rep
|
||
|
|
||
|
def test_iterdata(self):
|
||
|
G = self.G.copy()
|
||
|
evr = self.eview(G)
|
||
|
ev = evr(data=True)
|
||
|
ev_def = evr(data='foo', default=1)
|
||
|
|
||
|
for u, v, d in ev:
|
||
|
pass
|
||
|
assert d == {}
|
||
|
|
||
|
for u, v, wt in ev_def:
|
||
|
pass
|
||
|
assert wt == 1
|
||
|
|
||
|
self.modify_edge(G, (2, 3), foo='bar')
|
||
|
for e in ev:
|
||
|
assert len(e) == 3
|
||
|
if set(e[:2]) == {2, 3}:
|
||
|
assert e[2] == {'foo': 'bar'}
|
||
|
checked = True
|
||
|
else:
|
||
|
assert e[2] == {}
|
||
|
assert checked
|
||
|
|
||
|
for e in ev_def:
|
||
|
assert len(e) == 3
|
||
|
if set(e[:2]) == {2, 3}:
|
||
|
assert e[2] == 'bar'
|
||
|
checked_wt = True
|
||
|
else:
|
||
|
assert e[2] == 1
|
||
|
assert checked_wt
|
||
|
|
||
|
def test_iter(self):
|
||
|
evr = self.eview(self.G)
|
||
|
ev = evr()
|
||
|
for u, v in ev:
|
||
|
pass
|
||
|
iev = iter(ev)
|
||
|
assert next(iev) == (0, 1)
|
||
|
assert iter(ev) != ev
|
||
|
assert iter(iev) == iev
|
||
|
|
||
|
def test_contains(self):
|
||
|
evr = self.eview(self.G)
|
||
|
ev = evr()
|
||
|
if self.G.is_directed():
|
||
|
assert (1, 2) in ev and (2, 1) not in ev
|
||
|
else:
|
||
|
assert (1, 2) in ev and (2, 1) in ev
|
||
|
assert not (1, 4) in ev
|
||
|
assert not (1, 90) in ev
|
||
|
assert not (90, 1) in ev
|
||
|
|
||
|
def test_len(self):
|
||
|
evr = self.eview(self.G)
|
||
|
ev = evr(data='foo')
|
||
|
assert len(ev) == 8
|
||
|
assert len(evr(1)) == 2
|
||
|
assert len(evr([1, 2, 3])) == 4
|
||
|
|
||
|
assert len(self.G.edges(1)) == 2
|
||
|
assert len(self.G.edges()) == 8
|
||
|
assert len(self.G.edges) == 8
|
||
|
|
||
|
H = self.G.copy()
|
||
|
H.add_edge(1, 1)
|
||
|
assert len(H.edges(1)) == 3
|
||
|
assert len(H.edges()) == 9
|
||
|
assert len(H.edges) == 9
|
||
|
|
||
|
|
||
|
class TestOutEdgeDataView(TestEdgeDataView):
|
||
|
@classmethod
|
||
|
def setup_class(cls):
|
||
|
cls.G = nx.path_graph(9, create_using=nx.DiGraph())
|
||
|
cls.eview = nx.reportviews.OutEdgeView
|
||
|
|
||
|
def test_repr(self):
|
||
|
ev = self.eview(self.G)(data=True)
|
||
|
rep = "OutEdgeDataView([(0, 1, {}), (1, 2, {}), " + \
|
||
|
"(2, 3, {}), (3, 4, {}), " + \
|
||
|
"(4, 5, {}), (5, 6, {}), " + \
|
||
|
"(6, 7, {}), (7, 8, {})])"
|
||
|
assert repr(ev) == rep
|
||
|
|
||
|
def test_len(self):
|
||
|
evr = self.eview(self.G)
|
||
|
ev = evr(data='foo')
|
||
|
assert len(ev) == 8
|
||
|
assert len(evr(1)) == 1
|
||
|
assert len(evr([1, 2, 3])) == 3
|
||
|
|
||
|
assert len(self.G.edges(1)) == 1
|
||
|
assert len(self.G.edges()) == 8
|
||
|
assert len(self.G.edges) == 8
|
||
|
|
||
|
H = self.G.copy()
|
||
|
H.add_edge(1, 1)
|
||
|
assert len(H.edges(1)) == 2
|
||
|
assert len(H.edges()) == 9
|
||
|
assert len(H.edges) == 9
|
||
|
|
||
|
|
||
|
class TestInEdgeDataView(TestOutEdgeDataView):
|
||
|
@classmethod
|
||
|
def setup_class(cls):
|
||
|
cls.G = nx.path_graph(9, create_using=nx.DiGraph())
|
||
|
cls.eview = nx.reportviews.InEdgeView
|
||
|
|
||
|
def test_repr(self):
|
||
|
ev = self.eview(self.G)(data=True)
|
||
|
rep = "InEdgeDataView([(0, 1, {}), (1, 2, {}), " + \
|
||
|
"(2, 3, {}), (3, 4, {}), " + \
|
||
|
"(4, 5, {}), (5, 6, {}), " + \
|
||
|
"(6, 7, {}), (7, 8, {})])"
|
||
|
assert repr(ev) == rep
|
||
|
|
||
|
|
||
|
class TestMultiEdgeDataView(TestEdgeDataView):
|
||
|
@classmethod
|
||
|
def setup_class(cls):
|
||
|
cls.G = nx.path_graph(9, create_using=nx.MultiGraph())
|
||
|
cls.eview = nx.reportviews.MultiEdgeView
|
||
|
|
||
|
def modify_edge(self, G, e, **kwds):
|
||
|
G._adj[e[0]][e[1]][0].update(kwds)
|
||
|
|
||
|
def test_repr(self):
|
||
|
ev = self.eview(self.G)(data=True)
|
||
|
rep = "MultiEdgeDataView([(0, 1, {}), (1, 2, {}), " + \
|
||
|
"(2, 3, {}), (3, 4, {}), " + \
|
||
|
"(4, 5, {}), (5, 6, {}), " + \
|
||
|
"(6, 7, {}), (7, 8, {})])"
|
||
|
assert repr(ev) == rep
|
||
|
|
||
|
|
||
|
class TestOutMultiEdgeDataView(TestOutEdgeDataView):
|
||
|
@classmethod
|
||
|
def setup_class(cls):
|
||
|
cls.G = nx.path_graph(9, create_using=nx.MultiDiGraph())
|
||
|
cls.eview = nx.reportviews.OutMultiEdgeView
|
||
|
|
||
|
def modify_edge(self, G, e, **kwds):
|
||
|
G._adj[e[0]][e[1]][0].update(kwds)
|
||
|
|
||
|
def test_repr(self):
|
||
|
ev = self.eview(self.G)(data=True)
|
||
|
rep = "OutMultiEdgeDataView([(0, 1, {}), (1, 2, {}), " + \
|
||
|
"(2, 3, {}), (3, 4, {}), " + \
|
||
|
"(4, 5, {}), (5, 6, {}), " + \
|
||
|
"(6, 7, {}), (7, 8, {})])"
|
||
|
assert repr(ev) == rep
|
||
|
|
||
|
|
||
|
class TestInMultiEdgeDataView(TestOutMultiEdgeDataView):
|
||
|
@classmethod
|
||
|
def setup_class(cls):
|
||
|
cls.G = nx.path_graph(9, create_using=nx.MultiDiGraph())
|
||
|
cls.eview = nx.reportviews.InMultiEdgeView
|
||
|
|
||
|
def test_repr(self):
|
||
|
ev = self.eview(self.G)(data=True)
|
||
|
rep = "InMultiEdgeDataView([(0, 1, {}), (1, 2, {}), " + \
|
||
|
"(2, 3, {}), (3, 4, {}), " + \
|
||
|
"(4, 5, {}), (5, 6, {}), " + \
|
||
|
"(6, 7, {}), (7, 8, {})])"
|
||
|
assert repr(ev) == rep
|
||
|
|
||
|
|
||
|
# Edge Views
|
||
|
class TestEdgeView(object):
|
||
|
@classmethod
|
||
|
def setup_class(cls):
|
||
|
cls.G = nx.path_graph(9)
|
||
|
cls.eview = nx.reportviews.EdgeView
|
||
|
|
||
|
def test_pickle(self):
|
||
|
import pickle
|
||
|
ev = self.eview(self.G)
|
||
|
pev = pickle.loads(pickle.dumps(ev, -1))
|
||
|
assert ev == pev
|
||
|
assert ev.__slots__ == pev.__slots__
|
||
|
|
||
|
def modify_edge(self, G, e, **kwds):
|
||
|
G._adj[e[0]][e[1]].update(kwds)
|
||
|
|
||
|
def test_str(self):
|
||
|
ev = self.eview(self.G)
|
||
|
rep = str([(n, n + 1) for n in range(8)])
|
||
|
assert str(ev) == rep
|
||
|
|
||
|
def test_repr(self):
|
||
|
ev = self.eview(self.G)
|
||
|
rep = "EdgeView([(0, 1), (1, 2), (2, 3), (3, 4), " + \
|
||
|
"(4, 5), (5, 6), (6, 7), (7, 8)])"
|
||
|
assert repr(ev) == rep
|
||
|
|
||
|
def test_call(self):
|
||
|
ev = self.eview(self.G)
|
||
|
assert id(ev) == id(ev())
|
||
|
assert id(ev) == id(ev(data=False))
|
||
|
assert id(ev) != id(ev(data=True))
|
||
|
assert id(ev) != id(ev(nbunch=1))
|
||
|
|
||
|
def test_data(self):
|
||
|
ev = self.eview(self.G)
|
||
|
assert id(ev) != id(ev.data())
|
||
|
assert id(ev) == id(ev.data(data=False))
|
||
|
assert id(ev) != id(ev.data(data=True))
|
||
|
assert id(ev) != id(ev.data(nbunch=1))
|
||
|
|
||
|
def test_iter(self):
|
||
|
ev = self.eview(self.G)
|
||
|
for u, v in ev:
|
||
|
pass
|
||
|
iev = iter(ev)
|
||
|
assert next(iev) == (0, 1)
|
||
|
assert iter(ev) != ev
|
||
|
assert iter(iev) == iev
|
||
|
|
||
|
def test_contains(self):
|
||
|
ev = self.eview(self.G)
|
||
|
edv = ev()
|
||
|
if self.G.is_directed():
|
||
|
assert (1, 2) in ev and (2, 1) not in ev
|
||
|
assert (1, 2) in edv and (2, 1) not in edv
|
||
|
else:
|
||
|
assert (1, 2) in ev and (2, 1) in ev
|
||
|
assert (1, 2) in edv and (2, 1) in edv
|
||
|
assert not (1, 4) in ev
|
||
|
assert not (1, 4) in edv
|
||
|
# edge not in graph
|
||
|
assert not (1, 90) in ev
|
||
|
assert not (90, 1) in ev
|
||
|
assert not (1, 90) in edv
|
||
|
assert not (90, 1) in edv
|
||
|
|
||
|
def test_len(self):
|
||
|
ev = self.eview(self.G)
|
||
|
num_ed = 9 if self.G.is_multigraph() else 8
|
||
|
assert len(ev) == num_ed
|
||
|
|
||
|
H = self.G.copy()
|
||
|
H.add_edge(1, 1)
|
||
|
assert len(H.edges(1)) == 3 + H.is_multigraph() - H.is_directed()
|
||
|
assert len(H.edges()) == num_ed + 1
|
||
|
assert len(H.edges) == num_ed + 1
|
||
|
|
||
|
def test_and(self):
|
||
|
# print("G & H edges:", gnv & hnv)
|
||
|
ev = self.eview(self.G)
|
||
|
some_edges = {(0, 1), (1, 0), (0, 2)}
|
||
|
if self.G.is_directed():
|
||
|
assert some_edges & ev, {(0, 1)}
|
||
|
assert ev & some_edges, {(0, 1)}
|
||
|
else:
|
||
|
assert ev & some_edges == {(0, 1), (1, 0)}
|
||
|
assert some_edges & ev == {(0, 1), (1, 0)}
|
||
|
return
|
||
|
|
||
|
def test_or(self):
|
||
|
# print("G | H edges:", gnv | hnv)
|
||
|
ev = self.eview(self.G)
|
||
|
some_edges = {(0, 1), (1, 0), (0, 2)}
|
||
|
result1 = {(n, n + 1) for n in range(8)}
|
||
|
result1.update(some_edges)
|
||
|
result2 = {(n + 1, n) for n in range(8)}
|
||
|
result2.update(some_edges)
|
||
|
assert (ev | some_edges) in (result1, result2)
|
||
|
assert (some_edges | ev) in (result1, result2)
|
||
|
|
||
|
def test_xor(self):
|
||
|
# print("G ^ H edges:", gnv ^ hnv)
|
||
|
ev = self.eview(self.G)
|
||
|
some_edges = {(0, 1), (1, 0), (0, 2)}
|
||
|
if self.G.is_directed():
|
||
|
result = {(n, n + 1) for n in range(1, 8)}
|
||
|
result.update({(1, 0), (0, 2)})
|
||
|
assert ev ^ some_edges == result
|
||
|
else:
|
||
|
result = {(n, n + 1) for n in range(1, 8)}
|
||
|
result.update({(0, 2)})
|
||
|
assert ev ^ some_edges == result
|
||
|
return
|
||
|
|
||
|
def test_sub(self):
|
||
|
# print("G - H edges:", gnv - hnv)
|
||
|
ev = self.eview(self.G)
|
||
|
some_edges = {(0, 1), (1, 0), (0, 2)}
|
||
|
result = {(n, n + 1) for n in range(8)}
|
||
|
result.remove((0, 1))
|
||
|
assert ev - some_edges, result
|
||
|
|
||
|
|
||
|
class TestOutEdgeView(TestEdgeView):
|
||
|
@classmethod
|
||
|
def setup_class(cls):
|
||
|
cls.G = nx.path_graph(9, nx.DiGraph())
|
||
|
cls.eview = nx.reportviews.OutEdgeView
|
||
|
|
||
|
def test_repr(self):
|
||
|
ev = self.eview(self.G)
|
||
|
rep = "OutEdgeView([(0, 1), (1, 2), (2, 3), (3, 4), " + \
|
||
|
"(4, 5), (5, 6), (6, 7), (7, 8)])"
|
||
|
assert repr(ev) == rep
|
||
|
|
||
|
|
||
|
class TestInEdgeView(TestEdgeView):
|
||
|
@classmethod
|
||
|
def setup_class(cls):
|
||
|
cls.G = nx.path_graph(9, nx.DiGraph())
|
||
|
cls.eview = nx.reportviews.InEdgeView
|
||
|
|
||
|
def test_repr(self):
|
||
|
ev = self.eview(self.G)
|
||
|
rep = "InEdgeView([(0, 1), (1, 2), (2, 3), (3, 4), " + \
|
||
|
"(4, 5), (5, 6), (6, 7), (7, 8)])"
|
||
|
assert repr(ev) == rep
|
||
|
|
||
|
|
||
|
class TestMultiEdgeView(TestEdgeView):
|
||
|
@classmethod
|
||
|
def setup_class(cls):
|
||
|
cls.G = nx.path_graph(9, nx.MultiGraph())
|
||
|
cls.G.add_edge(1, 2, key=3, foo='bar')
|
||
|
cls.eview = nx.reportviews.MultiEdgeView
|
||
|
|
||
|
def modify_edge(self, G, e, **kwds):
|
||
|
if len(e) == 2:
|
||
|
e = e + (0,)
|
||
|
G._adj[e[0]][e[1]][e[2]].update(kwds)
|
||
|
|
||
|
def test_str(self):
|
||
|
ev = self.eview(self.G)
|
||
|
replist = [(n, n + 1, 0) for n in range(8)]
|
||
|
replist.insert(2, (1, 2, 3))
|
||
|
rep = str(replist)
|
||
|
assert str(ev) == rep
|
||
|
|
||
|
def test_repr(self):
|
||
|
ev = self.eview(self.G)
|
||
|
rep = "MultiEdgeView([(0, 1, 0), (1, 2, 0), (1, 2, 3), (2, 3, 0), " + \
|
||
|
"(3, 4, 0), (4, 5, 0), (5, 6, 0), (6, 7, 0), (7, 8, 0)])"
|
||
|
assert repr(ev) == rep
|
||
|
|
||
|
def test_call(self):
|
||
|
ev = self.eview(self.G)
|
||
|
assert id(ev) == id(ev(keys=True))
|
||
|
assert id(ev) == id(ev(data=False, keys=True))
|
||
|
assert id(ev) != id(ev(keys=False))
|
||
|
assert id(ev) != id(ev(data=True))
|
||
|
assert id(ev) != id(ev(nbunch=1))
|
||
|
|
||
|
def test_data(self):
|
||
|
ev = self.eview(self.G)
|
||
|
assert id(ev) != id(ev.data())
|
||
|
assert id(ev) == id(ev.data(data=False, keys=True))
|
||
|
assert id(ev) != id(ev.data(keys=False))
|
||
|
assert id(ev) != id(ev.data(data=True))
|
||
|
assert id(ev) != id(ev.data(nbunch=1))
|
||
|
|
||
|
def test_iter(self):
|
||
|
ev = self.eview(self.G)
|
||
|
for u, v, k in ev:
|
||
|
pass
|
||
|
iev = iter(ev)
|
||
|
assert next(iev) == (0, 1, 0)
|
||
|
assert iter(ev) != ev
|
||
|
assert iter(iev) == iev
|
||
|
|
||
|
def test_iterkeys(self):
|
||
|
G = self.G
|
||
|
evr = self.eview(G)
|
||
|
ev = evr(keys=True)
|
||
|
for u, v, k in ev:
|
||
|
pass
|
||
|
assert k == 0
|
||
|
ev = evr(keys=True, data="foo", default=1)
|
||
|
for u, v, k, wt in ev:
|
||
|
pass
|
||
|
assert wt == 1
|
||
|
|
||
|
self.modify_edge(G, (2, 3, 0), foo='bar')
|
||
|
ev = evr(keys=True, data=True)
|
||
|
for e in ev:
|
||
|
assert len(e) == 4
|
||
|
print('edge:', e)
|
||
|
if set(e[:2]) == {2, 3}:
|
||
|
print(self.G._adj[2][3])
|
||
|
assert e[2] == 0
|
||
|
assert e[3] == {'foo': 'bar'}
|
||
|
checked = True
|
||
|
elif set(e[:3]) == {1, 2, 3}:
|
||
|
assert e[2] == 3
|
||
|
assert e[3] == {'foo': 'bar'}
|
||
|
checked_multi = True
|
||
|
else:
|
||
|
assert e[2] == 0
|
||
|
assert e[3] == {}
|
||
|
assert checked
|
||
|
assert checked_multi
|
||
|
ev = evr(keys=True, data='foo', default=1)
|
||
|
for e in ev:
|
||
|
if set(e[:2]) == {1, 2} and e[2] == 3:
|
||
|
assert e[3] == 'bar'
|
||
|
if set(e[:2]) == {1, 2} and e[2] == 0:
|
||
|
assert e[3] == 1
|
||
|
if set(e[:2]) == {2, 3}:
|
||
|
assert e[2] == 0
|
||
|
assert e[3] == 'bar'
|
||
|
assert len(e) == 4
|
||
|
checked_wt = True
|
||
|
assert checked_wt
|
||
|
ev = evr(keys=True)
|
||
|
for e in ev:
|
||
|
assert len(e) == 3
|
||
|
elist = sorted([(i, i + 1, 0) for i in range(8)] + [(1, 2, 3)])
|
||
|
assert sorted(list(ev)) == elist
|
||
|
# test order of arguments:graph, nbunch, data, keys, default
|
||
|
ev = evr((1, 2), 'foo', True, 1)
|
||
|
for e in ev:
|
||
|
if set(e[:2]) == {1, 2}:
|
||
|
assert e[2] in {0, 3}
|
||
|
if e[2] == 3:
|
||
|
assert e[3] == 'bar'
|
||
|
else: # e[2] == 0
|
||
|
assert e[3] == 1
|
||
|
if G.is_directed():
|
||
|
assert len(list(ev)) == 3
|
||
|
else:
|
||
|
assert len(list(ev)) == 4
|
||
|
|
||
|
def test_or(self):
|
||
|
# print("G | H edges:", gnv | hnv)
|
||
|
ev = self.eview(self.G)
|
||
|
some_edges = {(0, 1, 0), (1, 0, 0), (0, 2, 0)}
|
||
|
result = {(n, n + 1, 0) for n in range(8)}
|
||
|
result.update(some_edges)
|
||
|
result.update({(1, 2, 3)})
|
||
|
assert ev | some_edges == result
|
||
|
assert some_edges | ev == result
|
||
|
|
||
|
def test_sub(self):
|
||
|
# print("G - H edges:", gnv - hnv)
|
||
|
ev = self.eview(self.G)
|
||
|
some_edges = {(0, 1, 0), (1, 0, 0), (0, 2, 0)}
|
||
|
result = {(n, n + 1, 0) for n in range(8)}
|
||
|
result.remove((0, 1, 0))
|
||
|
result.update({(1, 2, 3)})
|
||
|
assert ev - some_edges, result
|
||
|
assert some_edges - ev, result
|
||
|
|
||
|
def test_xor(self):
|
||
|
# print("G ^ H edges:", gnv ^ hnv)
|
||
|
ev = self.eview(self.G)
|
||
|
some_edges = {(0, 1, 0), (1, 0, 0), (0, 2, 0)}
|
||
|
if self.G.is_directed():
|
||
|
result = {(n, n + 1, 0) for n in range(1, 8)}
|
||
|
result.update({(1, 0, 0), (0, 2, 0), (1, 2, 3)})
|
||
|
assert ev ^ some_edges == result
|
||
|
assert some_edges ^ ev == result
|
||
|
else:
|
||
|
result = {(n, n + 1, 0) for n in range(1, 8)}
|
||
|
result.update({(0, 2, 0), (1, 2, 3)})
|
||
|
assert ev ^ some_edges == result
|
||
|
assert some_edges ^ ev == result
|
||
|
|
||
|
def test_and(self):
|
||
|
# print("G & H edges:", gnv & hnv)
|
||
|
ev = self.eview(self.G)
|
||
|
some_edges = {(0, 1, 0), (1, 0, 0), (0, 2, 0)}
|
||
|
if self.G.is_directed():
|
||
|
assert ev & some_edges == {(0, 1, 0)}
|
||
|
assert some_edges & ev == {(0, 1, 0)}
|
||
|
else:
|
||
|
assert ev & some_edges == {(0, 1, 0), (1, 0, 0)}
|
||
|
assert some_edges & ev == {(0, 1, 0), (1, 0, 0)}
|
||
|
|
||
|
|
||
|
class TestOutMultiEdgeView(TestMultiEdgeView):
|
||
|
@classmethod
|
||
|
def setup_class(cls):
|
||
|
cls.G = nx.path_graph(9, nx.MultiDiGraph())
|
||
|
cls.G.add_edge(1, 2, key=3, foo='bar')
|
||
|
cls.eview = nx.reportviews.OutMultiEdgeView
|
||
|
|
||
|
def modify_edge(self, G, e, **kwds):
|
||
|
if len(e) == 2:
|
||
|
e = e + (0,)
|
||
|
G._adj[e[0]][e[1]][e[2]].update(kwds)
|
||
|
|
||
|
def test_repr(self):
|
||
|
ev = self.eview(self.G)
|
||
|
rep = "OutMultiEdgeView([(0, 1, 0), (1, 2, 0), (1, 2, 3), (2, 3, 0),"\
|
||
|
+ " (3, 4, 0), (4, 5, 0), (5, 6, 0), (6, 7, 0), (7, 8, 0)])"
|
||
|
assert repr(ev) == rep
|
||
|
|
||
|
|
||
|
class TestInMultiEdgeView(TestMultiEdgeView):
|
||
|
@classmethod
|
||
|
def setup_class(cls):
|
||
|
cls.G = nx.path_graph(9, nx.MultiDiGraph())
|
||
|
cls.G.add_edge(1, 2, key=3, foo='bar')
|
||
|
cls.eview = nx.reportviews.InMultiEdgeView
|
||
|
|
||
|
def modify_edge(self, G, e, **kwds):
|
||
|
if len(e) == 2:
|
||
|
e = e + (0,)
|
||
|
G._adj[e[0]][e[1]][e[2]].update(kwds)
|
||
|
|
||
|
def test_repr(self):
|
||
|
ev = self.eview(self.G)
|
||
|
rep = "InMultiEdgeView([(0, 1, 0), (1, 2, 0), (1, 2, 3), (2, 3, 0), "\
|
||
|
+ "(3, 4, 0), (4, 5, 0), (5, 6, 0), (6, 7, 0), (7, 8, 0)])"
|
||
|
assert repr(ev) == rep
|
||
|
|
||
|
|
||
|
# Degrees
|
||
|
class TestDegreeView(object):
|
||
|
GRAPH = nx.Graph
|
||
|
dview = nx.reportviews.DegreeView
|
||
|
|
||
|
@classmethod
|
||
|
def setup_class(cls):
|
||
|
cls.G = nx.path_graph(6, cls.GRAPH())
|
||
|
cls.G.add_edge(1, 3, foo=2)
|
||
|
cls.G.add_edge(1, 3, foo=3)
|
||
|
|
||
|
def test_pickle(self):
|
||
|
import pickle
|
||
|
deg = self.G.degree
|
||
|
pdeg = pickle.loads(pickle.dumps(deg, -1))
|
||
|
assert dict(deg) == dict(pdeg)
|
||
|
|
||
|
def test_str(self):
|
||
|
dv = self.dview(self.G)
|
||
|
rep = str([(0, 1), (1, 3), (2, 2), (3, 3), (4, 2), (5, 1)])
|
||
|
assert str(dv) == rep
|
||
|
dv = self.G.degree()
|
||
|
assert str(dv) == rep
|
||
|
|
||
|
def test_repr(self):
|
||
|
dv = self.dview(self.G)
|
||
|
rep = "DegreeView({0: 1, 1: 3, 2: 2, 3: 3, 4: 2, 5: 1})"
|
||
|
assert repr(dv) == rep
|
||
|
|
||
|
def test_iter(self):
|
||
|
dv = self.dview(self.G)
|
||
|
for n, d in dv:
|
||
|
pass
|
||
|
idv = iter(dv)
|
||
|
assert iter(dv) != dv
|
||
|
assert iter(idv) == idv
|
||
|
assert next(idv) == (0, dv[0])
|
||
|
assert next(idv) == (1, dv[1])
|
||
|
# weighted
|
||
|
dv = self.dview(self.G, weight='foo')
|
||
|
for n, d in dv:
|
||
|
pass
|
||
|
idv = iter(dv)
|
||
|
assert iter(dv) != dv
|
||
|
assert iter(idv) == idv
|
||
|
assert next(idv) == (0, dv[0])
|
||
|
assert next(idv) == (1, dv[1])
|
||
|
|
||
|
def test_nbunch(self):
|
||
|
dv = self.dview(self.G)
|
||
|
dvn = dv(0)
|
||
|
assert dvn == 1
|
||
|
dvn = dv([2, 3])
|
||
|
assert sorted(dvn) == [(2, 2), (3, 3)]
|
||
|
|
||
|
def test_getitem(self):
|
||
|
dv = self.dview(self.G)
|
||
|
assert dv[0] == 1
|
||
|
assert dv[1] == 3
|
||
|
assert dv[2] == 2
|
||
|
assert dv[3] == 3
|
||
|
dv = self.dview(self.G, weight='foo')
|
||
|
assert dv[0] == 1
|
||
|
assert dv[1] == 5
|
||
|
assert dv[2] == 2
|
||
|
assert dv[3] == 5
|
||
|
|
||
|
def test_weight(self):
|
||
|
dv = self.dview(self.G)
|
||
|
dvw = dv(0, weight='foo')
|
||
|
assert dvw == 1
|
||
|
dvw = dv(1, weight='foo')
|
||
|
assert dvw == 5
|
||
|
dvw = dv([2, 3], weight='foo')
|
||
|
assert sorted(dvw) == [(2, 2), (3, 5)]
|
||
|
dvd = dict(dv(weight='foo'))
|
||
|
assert dvd[0] == 1
|
||
|
assert dvd[1] == 5
|
||
|
assert dvd[2] == 2
|
||
|
assert dvd[3] == 5
|
||
|
|
||
|
def test_len(self):
|
||
|
dv = self.dview(self.G)
|
||
|
assert len(dv) == 6
|
||
|
|
||
|
|
||
|
class TestDiDegreeView(TestDegreeView):
|
||
|
GRAPH = nx.DiGraph
|
||
|
dview = nx.reportviews.DiDegreeView
|
||
|
|
||
|
def test_repr(self):
|
||
|
dv = self.G.degree()
|
||
|
rep = "DiDegreeView({0: 1, 1: 3, 2: 2, 3: 3, 4: 2, 5: 1})"
|
||
|
assert repr(dv) == rep
|
||
|
|
||
|
|
||
|
class TestOutDegreeView(TestDegreeView):
|
||
|
GRAPH = nx.DiGraph
|
||
|
dview = nx.reportviews.OutDegreeView
|
||
|
|
||
|
def test_str(self):
|
||
|
dv = self.dview(self.G)
|
||
|
rep = str([(0, 1), (1, 2), (2, 1), (3, 1), (4, 1), (5, 0)])
|
||
|
assert str(dv) == rep
|
||
|
dv = self.G.out_degree()
|
||
|
assert str(dv) == rep
|
||
|
|
||
|
def test_repr(self):
|
||
|
dv = self.G.out_degree()
|
||
|
rep = "OutDegreeView({0: 1, 1: 2, 2: 1, 3: 1, 4: 1, 5: 0})"
|
||
|
assert repr(dv) == rep
|
||
|
|
||
|
def test_nbunch(self):
|
||
|
dv = self.dview(self.G)
|
||
|
dvn = dv(0)
|
||
|
assert dvn == 1
|
||
|
dvn = dv([2, 3])
|
||
|
assert sorted(dvn) == [(2, 1), (3, 1)]
|
||
|
|
||
|
def test_getitem(self):
|
||
|
dv = self.dview(self.G)
|
||
|
assert dv[0] == 1
|
||
|
assert dv[1] == 2
|
||
|
assert dv[2] == 1
|
||
|
assert dv[3] == 1
|
||
|
dv = self.dview(self.G, weight='foo')
|
||
|
assert dv[0] == 1
|
||
|
assert dv[1] == 4
|
||
|
assert dv[2] == 1
|
||
|
assert dv[3] == 1
|
||
|
|
||
|
def test_weight(self):
|
||
|
dv = self.dview(self.G)
|
||
|
dvw = dv(0, weight='foo')
|
||
|
assert dvw == 1
|
||
|
dvw = dv(1, weight='foo')
|
||
|
assert dvw == 4
|
||
|
dvw = dv([2, 3], weight='foo')
|
||
|
assert sorted(dvw) == [(2, 1), (3, 1)]
|
||
|
dvd = dict(dv(weight='foo'))
|
||
|
assert dvd[0] == 1
|
||
|
assert dvd[1] == 4
|
||
|
assert dvd[2] == 1
|
||
|
assert dvd[3] == 1
|
||
|
|
||
|
|
||
|
class TestInDegreeView(TestDegreeView):
|
||
|
GRAPH = nx.DiGraph
|
||
|
dview = nx.reportviews.InDegreeView
|
||
|
|
||
|
def test_str(self):
|
||
|
dv = self.dview(self.G)
|
||
|
rep = str([(0, 0), (1, 1), (2, 1), (3, 2), (4, 1), (5, 1)])
|
||
|
assert str(dv) == rep
|
||
|
dv = self.G.in_degree()
|
||
|
assert str(dv) == rep
|
||
|
|
||
|
def test_repr(self):
|
||
|
dv = self.G.in_degree()
|
||
|
rep = "InDegreeView({0: 0, 1: 1, 2: 1, 3: 2, 4: 1, 5: 1})"
|
||
|
assert repr(dv) == rep
|
||
|
|
||
|
def test_nbunch(self):
|
||
|
dv = self.dview(self.G)
|
||
|
dvn = dv(0)
|
||
|
assert dvn == 0
|
||
|
dvn = dv([2, 3])
|
||
|
assert sorted(dvn) == [(2, 1), (3, 2)]
|
||
|
|
||
|
def test_getitem(self):
|
||
|
dv = self.dview(self.G)
|
||
|
assert dv[0] == 0
|
||
|
assert dv[1] == 1
|
||
|
assert dv[2] == 1
|
||
|
assert dv[3] == 2
|
||
|
dv = self.dview(self.G, weight='foo')
|
||
|
assert dv[0] == 0
|
||
|
assert dv[1] == 1
|
||
|
assert dv[2] == 1
|
||
|
assert dv[3] == 4
|
||
|
|
||
|
def test_weight(self):
|
||
|
dv = self.dview(self.G)
|
||
|
dvw = dv(0, weight='foo')
|
||
|
assert dvw == 0
|
||
|
dvw = dv(1, weight='foo')
|
||
|
assert dvw == 1
|
||
|
dvw = dv([2, 3], weight='foo')
|
||
|
assert sorted(dvw) == [(2, 1), (3, 4)]
|
||
|
dvd = dict(dv(weight='foo'))
|
||
|
assert dvd[0] == 0
|
||
|
assert dvd[1] == 1
|
||
|
assert dvd[2] == 1
|
||
|
assert dvd[3] == 4
|
||
|
|
||
|
|
||
|
class TestMultiDegreeView(TestDegreeView):
|
||
|
GRAPH = nx.MultiGraph
|
||
|
dview = nx.reportviews.MultiDegreeView
|
||
|
|
||
|
def test_str(self):
|
||
|
dv = self.dview(self.G)
|
||
|
rep = str([(0, 1), (1, 4), (2, 2), (3, 4), (4, 2), (5, 1)])
|
||
|
assert str(dv) == rep
|
||
|
dv = self.G.degree()
|
||
|
assert str(dv) == rep
|
||
|
|
||
|
def test_repr(self):
|
||
|
dv = self.G.degree()
|
||
|
rep = "MultiDegreeView({0: 1, 1: 4, 2: 2, 3: 4, 4: 2, 5: 1})"
|
||
|
assert repr(dv) == rep
|
||
|
|
||
|
def test_nbunch(self):
|
||
|
dv = self.dview(self.G)
|
||
|
dvn = dv(0)
|
||
|
assert dvn == 1
|
||
|
dvn = dv([2, 3])
|
||
|
assert sorted(dvn) == [(2, 2), (3, 4)]
|
||
|
|
||
|
def test_getitem(self):
|
||
|
dv = self.dview(self.G)
|
||
|
assert dv[0] == 1
|
||
|
assert dv[1] == 4
|
||
|
assert dv[2] == 2
|
||
|
assert dv[3] == 4
|
||
|
dv = self.dview(self.G, weight='foo')
|
||
|
assert dv[0] == 1
|
||
|
assert dv[1] == 7
|
||
|
assert dv[2] == 2
|
||
|
assert dv[3] == 7
|
||
|
|
||
|
def test_weight(self):
|
||
|
dv = self.dview(self.G)
|
||
|
dvw = dv(0, weight='foo')
|
||
|
assert dvw == 1
|
||
|
dvw = dv(1, weight='foo')
|
||
|
assert dvw == 7
|
||
|
dvw = dv([2, 3], weight='foo')
|
||
|
assert sorted(dvw) == [(2, 2), (3, 7)]
|
||
|
dvd = dict(dv(weight='foo'))
|
||
|
assert dvd[0] == 1
|
||
|
assert dvd[1] == 7
|
||
|
assert dvd[2] == 2
|
||
|
assert dvd[3] == 7
|
||
|
|
||
|
|
||
|
class TestDiMultiDegreeView(TestMultiDegreeView):
|
||
|
GRAPH = nx.MultiDiGraph
|
||
|
dview = nx.reportviews.DiMultiDegreeView
|
||
|
|
||
|
def test_repr(self):
|
||
|
dv = self.G.degree()
|
||
|
rep = "DiMultiDegreeView({0: 1, 1: 4, 2: 2, 3: 4, 4: 2, 5: 1})"
|
||
|
assert repr(dv) == rep
|
||
|
|
||
|
|
||
|
class TestOutMultiDegreeView(TestDegreeView):
|
||
|
GRAPH = nx.MultiDiGraph
|
||
|
dview = nx.reportviews.OutMultiDegreeView
|
||
|
|
||
|
def test_str(self):
|
||
|
dv = self.dview(self.G)
|
||
|
rep = str([(0, 1), (1, 3), (2, 1), (3, 1), (4, 1), (5, 0)])
|
||
|
assert str(dv) == rep
|
||
|
dv = self.G.out_degree()
|
||
|
assert str(dv) == rep
|
||
|
|
||
|
def test_repr(self):
|
||
|
dv = self.G.out_degree()
|
||
|
rep = "OutMultiDegreeView({0: 1, 1: 3, 2: 1, 3: 1, 4: 1, 5: 0})"
|
||
|
assert repr(dv) == rep
|
||
|
|
||
|
def test_nbunch(self):
|
||
|
dv = self.dview(self.G)
|
||
|
dvn = dv(0)
|
||
|
assert dvn == 1
|
||
|
dvn = dv([2, 3])
|
||
|
assert sorted(dvn) == [(2, 1), (3, 1)]
|
||
|
|
||
|
def test_getitem(self):
|
||
|
dv = self.dview(self.G)
|
||
|
assert dv[0] == 1
|
||
|
assert dv[1] == 3
|
||
|
assert dv[2] == 1
|
||
|
assert dv[3] == 1
|
||
|
dv = self.dview(self.G, weight='foo')
|
||
|
assert dv[0] == 1
|
||
|
assert dv[1] == 6
|
||
|
assert dv[2] == 1
|
||
|
assert dv[3] == 1
|
||
|
|
||
|
def test_weight(self):
|
||
|
dv = self.dview(self.G)
|
||
|
dvw = dv(0, weight='foo')
|
||
|
assert dvw == 1
|
||
|
dvw = dv(1, weight='foo')
|
||
|
assert dvw == 6
|
||
|
dvw = dv([2, 3], weight='foo')
|
||
|
assert sorted(dvw) == [(2, 1), (3, 1)]
|
||
|
dvd = dict(dv(weight='foo'))
|
||
|
assert dvd[0] == 1
|
||
|
assert dvd[1] == 6
|
||
|
assert dvd[2] == 1
|
||
|
assert dvd[3] == 1
|
||
|
|
||
|
|
||
|
class TestInMultiDegreeView(TestDegreeView):
|
||
|
GRAPH = nx.MultiDiGraph
|
||
|
dview = nx.reportviews.InMultiDegreeView
|
||
|
|
||
|
def test_str(self):
|
||
|
dv = self.dview(self.G)
|
||
|
rep = str([(0, 0), (1, 1), (2, 1), (3, 3), (4, 1), (5, 1)])
|
||
|
assert str(dv) == rep
|
||
|
dv = self.G.in_degree()
|
||
|
assert str(dv) == rep
|
||
|
|
||
|
def test_repr(self):
|
||
|
dv = self.G.in_degree()
|
||
|
rep = "InMultiDegreeView({0: 0, 1: 1, 2: 1, 3: 3, 4: 1, 5: 1})"
|
||
|
assert repr(dv) == rep
|
||
|
|
||
|
def test_nbunch(self):
|
||
|
dv = self.dview(self.G)
|
||
|
dvn = dv(0)
|
||
|
assert dvn == 0
|
||
|
dvn = dv([2, 3])
|
||
|
assert sorted(dvn) == [(2, 1), (3, 3)]
|
||
|
|
||
|
def test_getitem(self):
|
||
|
dv = self.dview(self.G)
|
||
|
assert dv[0] == 0
|
||
|
assert dv[1] == 1
|
||
|
assert dv[2] == 1
|
||
|
assert dv[3] == 3
|
||
|
dv = self.dview(self.G, weight='foo')
|
||
|
assert dv[0] == 0
|
||
|
assert dv[1] == 1
|
||
|
assert dv[2] == 1
|
||
|
assert dv[3] == 6
|
||
|
|
||
|
def test_weight(self):
|
||
|
dv = self.dview(self.G)
|
||
|
dvw = dv(0, weight='foo')
|
||
|
assert dvw == 0
|
||
|
dvw = dv(1, weight='foo')
|
||
|
assert dvw == 1
|
||
|
dvw = dv([2, 3], weight='foo')
|
||
|
assert sorted(dvw) == [(2, 1), (3, 6)]
|
||
|
dvd = dict(dv(weight='foo'))
|
||
|
assert dvd[0] == 0
|
||
|
assert dvd[1] == 1
|
||
|
assert dvd[2] == 1
|
||
|
assert dvd[3] == 6
|