|
|
import pytest |
|
|
|
|
|
np = pytest.importorskip("numpy") |
|
|
|
|
|
import networkx as nx |
|
|
|
|
|
|
|
|
def test_attr_matrix(): |
|
|
G = nx.Graph() |
|
|
G.add_edge(0, 1, thickness=1, weight=3) |
|
|
G.add_edge(0, 1, thickness=1, weight=3) |
|
|
G.add_edge(0, 2, thickness=2) |
|
|
G.add_edge(1, 2, thickness=3) |
|
|
|
|
|
def node_attr(u): |
|
|
return G.nodes[u].get("size", 0.5) * 3 |
|
|
|
|
|
def edge_attr(u, v): |
|
|
return G[u][v].get("thickness", 0.5) |
|
|
|
|
|
M = nx.attr_matrix(G, edge_attr=edge_attr, node_attr=node_attr) |
|
|
np.testing.assert_equal(M[0], np.array([[6.0]])) |
|
|
assert M[1] == [1.5] |
|
|
|
|
|
|
|
|
def test_attr_matrix_directed(): |
|
|
G = nx.DiGraph() |
|
|
G.add_edge(0, 1, thickness=1, weight=3) |
|
|
G.add_edge(0, 1, thickness=1, weight=3) |
|
|
G.add_edge(0, 2, thickness=2) |
|
|
G.add_edge(1, 2, thickness=3) |
|
|
M = nx.attr_matrix(G, rc_order=[0, 1, 2]) |
|
|
|
|
|
data = np.array( |
|
|
[[0., 1., 1.], |
|
|
[0., 0., 1.], |
|
|
[0., 0., 0.]] |
|
|
) |
|
|
|
|
|
np.testing.assert_equal(M, np.array(data)) |
|
|
|
|
|
|
|
|
def test_attr_matrix_multigraph(): |
|
|
G = nx.MultiGraph() |
|
|
G.add_edge(0, 1, thickness=1, weight=3) |
|
|
G.add_edge(0, 1, thickness=1, weight=3) |
|
|
G.add_edge(0, 1, thickness=1, weight=3) |
|
|
G.add_edge(0, 2, thickness=2) |
|
|
G.add_edge(1, 2, thickness=3) |
|
|
M = nx.attr_matrix(G, rc_order=[0, 1, 2]) |
|
|
|
|
|
data = np.array( |
|
|
[[0., 3., 1.], |
|
|
[3., 0., 1.], |
|
|
[1., 1., 0.]] |
|
|
) |
|
|
|
|
|
np.testing.assert_equal(M, np.array(data)) |
|
|
M = nx.attr_matrix(G, edge_attr="weight", rc_order=[0, 1, 2]) |
|
|
|
|
|
data = np.array( |
|
|
[[0., 9., 1.], |
|
|
[9., 0., 1.], |
|
|
[1., 1., 0.]] |
|
|
) |
|
|
|
|
|
np.testing.assert_equal(M, np.array(data)) |
|
|
M = nx.attr_matrix(G, edge_attr="thickness", rc_order=[0, 1, 2]) |
|
|
|
|
|
data = np.array( |
|
|
[[0., 3., 2.], |
|
|
[3., 0., 3.], |
|
|
[2., 3., 0.]] |
|
|
) |
|
|
|
|
|
np.testing.assert_equal(M, np.array(data)) |
|
|
|
|
|
|
|
|
def test_attr_sparse_matrix(): |
|
|
pytest.importorskip("scipy") |
|
|
G = nx.Graph() |
|
|
G.add_edge(0, 1, thickness=1, weight=3) |
|
|
G.add_edge(0, 2, thickness=2) |
|
|
G.add_edge(1, 2, thickness=3) |
|
|
M = nx.attr_sparse_matrix(G) |
|
|
mtx = M[0] |
|
|
data = np.ones((3, 3), float) |
|
|
np.fill_diagonal(data, 0) |
|
|
np.testing.assert_equal(mtx.todense(), np.array(data)) |
|
|
assert M[1] == [0, 1, 2] |
|
|
|
|
|
|
|
|
def test_attr_sparse_matrix_directed(): |
|
|
pytest.importorskip("scipy") |
|
|
G = nx.DiGraph() |
|
|
G.add_edge(0, 1, thickness=1, weight=3) |
|
|
G.add_edge(0, 1, thickness=1, weight=3) |
|
|
G.add_edge(0, 2, thickness=2) |
|
|
G.add_edge(1, 2, thickness=3) |
|
|
M = nx.attr_sparse_matrix(G, rc_order=[0, 1, 2]) |
|
|
|
|
|
data = np.array( |
|
|
[[0., 1., 1.], |
|
|
[0., 0., 1.], |
|
|
[0., 0., 0.]] |
|
|
) |
|
|
|
|
|
np.testing.assert_equal(M.todense(), np.array(data)) |
|
|
|