blob: 19c00ae856dab86aa06bf0045b1061555132c59b [file] [log] [blame]
#!/usr/bin/env python
from nose.tools import *
import networkx as nx
class TestTriangles:
def test_empty(self):
G = nx.Graph()
assert_equal(list(nx.triangles(G).values()),[])
def test_path(self):
G = nx.path_graph(10)
assert_equal(list(nx.triangles(G).values()),
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
assert_equal(nx.triangles(G),
{0: 0, 1: 0, 2: 0, 3: 0, 4: 0,
5: 0, 6: 0, 7: 0, 8: 0, 9: 0})
def test_cubical(self):
G = nx.cubical_graph()
assert_equal(list(nx.triangles(G).values()),
[0, 0, 0, 0, 0, 0, 0, 0])
assert_equal(nx.triangles(G,1),0)
assert_equal(list(nx.triangles(G,[1,2]).values()),[0, 0])
assert_equal(nx.triangles(G,1),0)
assert_equal(nx.triangles(G,[1,2]),{1: 0, 2: 0})
def test_k5(self):
G = nx.complete_graph(5)
assert_equal(list(nx.triangles(G).values()),[6, 6, 6, 6, 6])
assert_equal(sum(nx.triangles(G).values())/3.0,10)
assert_equal(nx.triangles(G,1),6)
G.remove_edge(1,2)
assert_equal(list(nx.triangles(G).values()),[5, 3, 3, 5, 5])
assert_equal(nx.triangles(G,1),3)
class TestWeightedClustering:
def test_clustering(self):
G = nx.Graph()
assert_equal(list(nx.clustering(G,weight='weight').values()),[])
assert_equal(nx.clustering(G),{})
def test_path(self):
G = nx.path_graph(10)
assert_equal(list(nx.clustering(G,weight='weight').values()),
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0])
assert_equal(nx.clustering(G,weight='weight'),
{0: 0.0, 1: 0.0, 2: 0.0, 3: 0.0, 4: 0.0,
5: 0.0, 6: 0.0, 7: 0.0, 8: 0.0, 9: 0.0})
def test_cubical(self):
G = nx.cubical_graph()
assert_equal(list(nx.clustering(G,weight='weight').values()),
[0, 0, 0, 0, 0, 0, 0, 0])
assert_equal(nx.clustering(G,1),0)
assert_equal(list(nx.clustering(G,[1,2],weight='weight').values()),[0, 0])
assert_equal(nx.clustering(G,1,weight='weight'),0)
assert_equal(nx.clustering(G,[1,2],weight='weight'),{1: 0, 2: 0})
def test_k5(self):
G = nx.complete_graph(5)
assert_equal(list(nx.clustering(G,weight='weight').values()),[1, 1, 1, 1, 1])
assert_equal(nx.average_clustering(G,weight='weight'),1)
G.remove_edge(1,2)
assert_equal(list(nx.clustering(G,weight='weight').values()),
[5./6., 1.0, 1.0, 5./6., 5./6.])
assert_equal(nx.clustering(G,[1,4],weight='weight'),{1: 1.0, 4: 0.83333333333333337})
def test_triangle_and_edge(self):
G=nx.Graph()
G.add_cycle([0,1,2])
G.add_edge(0,4,weight=2)
assert_equal(nx.clustering(G)[0],1.0/3.0)
assert_equal(nx.clustering(G,weight='weight')[0],1.0/6.0)
class TestClustering:
def test_clustering(self):
G = nx.Graph()
assert_equal(list(nx.clustering(G).values()),[])
assert_equal(nx.clustering(G),{})
def test_path(self):
G = nx.path_graph(10)
assert_equal(list(nx.clustering(G).values()),
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0])
assert_equal(nx.clustering(G),
{0: 0.0, 1: 0.0, 2: 0.0, 3: 0.0, 4: 0.0,
5: 0.0, 6: 0.0, 7: 0.0, 8: 0.0, 9: 0.0})
def test_cubical(self):
G = nx.cubical_graph()
assert_equal(list(nx.clustering(G).values()),
[0, 0, 0, 0, 0, 0, 0, 0])
assert_equal(nx.clustering(G,1),0)
assert_equal(list(nx.clustering(G,[1,2]).values()),[0, 0])
assert_equal(nx.clustering(G,1),0)
assert_equal(nx.clustering(G,[1,2]),{1: 0, 2: 0})
def test_k5(self):
G = nx.complete_graph(5)
assert_equal(list(nx.clustering(G).values()),[1, 1, 1, 1, 1])
assert_equal(nx.average_clustering(G),1)
G.remove_edge(1,2)
assert_equal(list(nx.clustering(G).values()),
[5./6., 1.0, 1.0, 5./6., 5./6.])
assert_equal(nx.clustering(G,[1,4]),{1: 1.0, 4: 0.83333333333333337})
class TestTransitivity:
def test_transitivity(self):
G = nx.Graph()
assert_equal(nx.transitivity(G),0.0)
def test_path(self):
G = nx.path_graph(10)
assert_equal(nx.transitivity(G),0.0)
def test_cubical(self):
G = nx.cubical_graph()
assert_equal(nx.transitivity(G),0.0)
def test_k5(self):
G = nx.complete_graph(5)
assert_equal(nx.transitivity(G),1.0)
G.remove_edge(1,2)
assert_equal(nx.transitivity(G),0.875)
# def test_clustering_transitivity(self):
# # check that weighted average of clustering is transitivity
# G = nx.complete_graph(5)
# G.remove_edge(1,2)
# t1=nx.transitivity(G)
# (cluster_d2,weights)=nx.clustering(G,weights=True)
# trans=[]
# for v in G.nodes():
# trans.append(cluster_d2[v]*weights[v])
# t2=sum(trans)
# assert_almost_equal(abs(t1-t2),0)
class TestSquareClustering:
def test_clustering(self):
G = nx.Graph()
assert_equal(list(nx.square_clustering(G).values()),[])
assert_equal(nx.square_clustering(G),{})
def test_path(self):
G = nx.path_graph(10)
assert_equal(list(nx.square_clustering(G).values()),
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0])
assert_equal(nx.square_clustering(G),
{0: 0.0, 1: 0.0, 2: 0.0, 3: 0.0, 4: 0.0,
5: 0.0, 6: 0.0, 7: 0.0, 8: 0.0, 9: 0.0})
def test_cubical(self):
G = nx.cubical_graph()
assert_equal(list(nx.square_clustering(G).values()),
[0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5])
assert_equal(list(nx.square_clustering(G,[1,2]).values()),[0.5, 0.5])
assert_equal(nx.square_clustering(G,[1])[1],0.5)
assert_equal(nx.square_clustering(G,[1,2]),{1: 0.5, 2: 0.5})
def test_k5(self):
G = nx.complete_graph(5)
assert_equal(list(nx.square_clustering(G).values()),[1, 1, 1, 1, 1])
def test_bipartite_k5(self):
G = nx.complete_bipartite_graph(5,5)
assert_equal(list(nx.square_clustering(G).values()),
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1])
def test_lind_square_clustering(self):
"""Test C4 for figure 1 Lind et al (2005)"""
G = nx.Graph([(1,2),(1,3),(1,6),(1,7),(2,4),(2,5),
(3,4),(3,5),(6,7),(7,8),(6,8),(7,9),
(7,10),(6,11),(6,12),(2,13),(2,14),(3,15),(3,16)])
G1 = G.subgraph([1,2,3,4,5,13,14,15,16])
G2 = G.subgraph([1,6,7,8,9,10,11,12])
assert_equal(nx.square_clustering(G, [1])[1], 3/75.0)
assert_equal(nx.square_clustering(G1, [1])[1], 2/6.0)
assert_equal(nx.square_clustering(G2, [1])[1], 1/5.0)
def test_average_clustering():
G=nx.cycle_graph(3)
G.add_edge(2,3)
assert_equal(nx.average_clustering(G),(1+1+1/3.0)/4.0)
assert_equal(nx.average_clustering(G,count_zeros=True),(1+1+1/3.0)/4.0)
assert_equal(nx.average_clustering(G,count_zeros=False),(1+1+1/3.0)/3.0)