18
28
== (True, None, [0, 2, 5, 7, 1, 3, 4, 6]))
19
29
self.assertRaises(ValueError, g2.isomorphic_bliss, g1, sh2="nonexistent")
31
# Test the automorphy of g1
32
self.failUnless(g1.isomorphic())
33
self.failUnless(g1.isomorphic_vf2(return_mapping_21=True) \
34
== (True, None, [0, 1, 2, 3, 4, 5, 6, 7]))
36
# Test VF2 with colors
37
self.failUnless(g1.isomorphic_vf2(g2,
38
color1=[0,1,0,1,0,1,0,1],
39
color2=[0,0,1,1,0,0,1,1]))
40
g1.vs["color"] = [0,1,0,1,0,1,0,1]
41
g2.vs["color"] = [0,0,1,1,0,1,1,0]
42
self.failUnless(not g1.isomorphic_vf2(g2, "color", "color"))
44
# Test VF2 with vertex and edge colors
45
self.failUnless(g1.isomorphic_vf2(g2,
46
color1=[0,1,0,1,0,1,0,1],
47
color2=[0,0,1,1,0,0,1,1]))
48
g1.es["color"] = range(12)
49
g2.es["color"] = [0]*6 + [1]*6
50
self.failUnless(not g1.isomorphic_vf2(g2, "color", "color", "color", "color"))
52
# Test VF2 with node compatibility function
53
g2.vs["color"] = [0,0,1,1,0,0,1,1]
54
self.failUnless(g1.isomorphic_vf2(g2, node_compat_fn=node_compat))
55
g2.vs["color"] = [0,0,1,1,0,1,1,0]
56
self.failUnless(not g1.isomorphic_vf2(g2, node_compat_fn=node_compat))
58
# Test VF2 with node edge compatibility function
59
g2.vs["color"] = [0,0,1,1,0,0,1,1]
60
g1.es["color"] = range(12)
61
g2.es["color"] = [0]*6 + [1]*6
62
self.failUnless(not g1.isomorphic_vf2(g2, node_compat_fn=node_compat,
63
edge_compat_fn=edge_compat))
65
def testIsomorphicCallback(self):
67
def callback(g1, g2, map1, map2):
72
g = Graph(6, [(0,1), (2,3), (4,5), (0,2), (2,4), (1,3), (3,5)])
73
g.isomorphic_vf2(g, callback=callback)
74
expected_maps = [[0,1,2,3,4,5], [1,0,3,2,5,4], [4,5,2,3,0,1], [5,4,3,2,1,0]]
75
self.failUnless(sorted(maps) == expected_maps)
79
g3.vs["color"] = [0,1,1,0]
80
g3.isomorphic_vf2(callback=callback, color1="color", color2="color")
81
expected_maps = [[0,1,2,3], [0,2,1,3], [3,1,2,0], [3,2,1,0]]
82
self.failUnless(sorted(maps) == expected_maps)
21
84
def testCountIsomorphisms(self):
23
86
self.failUnless(g.count_automorphisms_vf2() == 24)
24
87
g = Graph(6, [(0,1), (2,3), (4,5), (0,2), (2,4), (1,3), (3,5)])
25
88
self.failUnless(g.count_automorphisms_vf2() == 4)
90
# Some more tests with colors
92
g3.vs["color"] = [0,1,1,0]
93
self.failUnless(g3.count_isomorphisms_vf2() == 24)
94
self.failUnless(g3.count_isomorphisms_vf2(color1="color", color2="color") == 4)
95
self.failUnless(g3.count_isomorphisms_vf2(color1=[0,1,2,0], color2=(0,1,2,0)) == 2)
96
self.failUnless(g3.count_isomorphisms_vf2(edge_color1=[0,1,0,0,0,1],
97
edge_color2=[0,1,0,0,0,1]) == 2)
99
# Test VF2 with node/edge compatibility function
100
g3.vs["color"] = [0,1,1,0]
101
self.failUnless(g3.count_isomorphisms_vf2(node_compat_fn=node_compat) == 4)
102
g3.vs["color"] = [0,1,2,0]
103
self.failUnless(g3.count_isomorphisms_vf2(node_compat_fn=node_compat) == 2)
104
g3.es["color"] = [0,1,0,0,0,1]
105
self.failUnless(g3.count_isomorphisms_vf2(edge_compat_fn=edge_compat) == 2)
27
107
def testGetIsomorphisms(self):
28
108
g = Graph(6, [(0,1), (2,3), (4,5), (0,2), (2,4), (1,3), (3,5)])
29
109
maps = g.get_automorphisms_vf2()
30
110
expected_maps = [[0,1,2,3,4,5], [1,0,3,2,5,4], [4,5,2,3,0,1], [5,4,3,2,1,0]]
31
111
self.failUnless(maps == expected_maps)
114
g3.vs["color"] = [0,1,1,0]
115
expected_maps = [[0,1,2,3], [0,2,1,3], [3,1,2,0], [3,2,1,0]]
116
self.failUnless(sorted(g3.get_automorphisms_vf2(color="color")) == expected_maps)
33
118
def testSubisomorphic(self):
34
119
g = Graph.Lattice([3,3], circular=False)
35
120
g2 = Graph([(0,1), (1,2), (1,3)])
36
121
self.failUnless(g.subisomorphic_vf2(g2))
37
122
self.failUnless(not g2.subisomorphic_vf2(g))
124
# Test with vertex colors
125
g.vs["color"] = [0,0,0,0,1,0,0,0,0]
126
g2.vs["color"] = [1,0,0,0]
127
self.failUnless(g.subisomorphic_vf2(g2, node_compat_fn=node_compat))
128
g2.vs["color"] = [2,0,0,0]
129
self.failUnless(not g.subisomorphic_vf2(g2, node_compat_fn=node_compat))
131
# Test with edge colors
132
g.es["color"] = [1] + [0]*(g.ecount()-1)
133
g2.es["color"] = [1] + [0]*(g2.ecount()-1)
134
self.failUnless(g.subisomorphic_vf2(g2, edge_compat_fn=edge_compat))
135
g2.es[0]["color"] = [2]
136
self.failUnless(not g.subisomorphic_vf2(g2, node_compat_fn=node_compat))
39
138
def testCountSubisomorphisms(self):
40
139
g = Graph.Lattice([3,3], circular=False)
41
140
g2 = Graph.Lattice([2,2], circular=False)
42
141
self.failUnless(g.count_subisomorphisms_vf2(g2) == 4*4*2)
43
142
self.failUnless(g2.count_subisomorphisms_vf2(g) == 0)
144
# Test with vertex colors
145
g.vs["color"] = [0,0,0,0,1,0,0,0,0]
146
g2.vs["color"] = [1,0,0,0]
147
self.failUnless(g.count_subisomorphisms_vf2(g2, "color", "color") == 4*2)
148
self.failUnless(g.count_subisomorphisms_vf2(g2, node_compat_fn=node_compat) == 4*2)
150
# Test with edge colors
151
g.es["color"] = [1] + [0]*(g.ecount()-1)
152
g2.es["color"] = [1] + [0]*(g2.ecount()-1)
153
self.failUnless(g.count_subisomorphisms_vf2(g2, edge_color1="color", edge_color2="color") == 2)
154
self.failUnless(g.count_subisomorphisms_vf2(g2, edge_compat_fn=edge_compat) == 2)
45
156
def testPermuteVertices(self):
46
157
g1 = Graph(8, [(0, 4), (0, 5), (0, 6), \
47
158
(1, 4), (1, 5), (1, 7), \