1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
|
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""Simple script that tests CytoscapeGraphDrawer.
This script is kept separate from the unit tests as it is very
hard to test for the correctness of CytoscapeGraphDrawer without
a working instance of Cytoscape.
Prerequisites for running this test:
1. Start Cytoscape
2. Activate the Cytoscape RPC plugin, listening at port 9000
"""
from igraph import Graph
from igraph.drawing.graph import CytoscapeGraphDrawer
def test():
g = Graph.GRG(100, 0.2)
### Adding network attributes
g["name"] = "Network name"
g["version"] = 5
g["obsolete"] = False
g["density"] = g.density()
### Adding vertex attributes
# String attribute
g.vs["name"] = ["Node %d" % (i+1) for i in xrange(g.vcount())]
# Integer attribute
g.vs["degree"] = g.degree()
# Float attribute
g.vs["pagerank"] = g.pagerank()
# Boolean attribute
g.vs["even"] = [i % 2 for i in xrange(g.vcount())]
# Mixed attribute
g.vs["mixed"] = ["abc", 123, None, 1.0] * ((g.vcount()+3) / 4)
# Special attribute with Hungarian accents
g.vs[0]["name"] = u"árvíztűrő tükörfúrógép ÁRVÍZTŰRŐ TÜKÖRFÚRÓGÉP"
### Adding edge attributes
# String attribute
g.es["name"] = ["Edge %d -- %d" % edge.tuple for edge in g.es]
# Integer attribute
g.es["multiplicity"] = g.count_multiple()
# Float attribute
g.es["betweenness"] = g.edge_betweenness()
# Boolean attribute
g.es["even"] = [i % 2 for i in xrange(g.ecount())]
# Mixed attribute
g.es["mixed"] = [u"yay", 123, None, 0.7] * ((g.ecount()+3) / 4)
# Sending graph
drawer = CytoscapeGraphDrawer()
drawer.draw(g, layout="fr")
# Fetching graph
g2 = drawer.fetch()
del g2.vs["hiddenLabel"]
del g2.es["interaction"]
# Check isomorphism
result = g2.isomorphic(g)
if not result:
raise ValueError("g2 not isomorphic to g")
# Check the graph attributes
if set(g.attributes()) != set(g2.attributes()):
raise ValueError("Graph attribute name set mismatch")
for attr_name in g.attributes():
if g[attr_name] != g2[attr_name]:
raise ValueError("Graph attribute mismatch for %r" % attr_name)
# Check the vertex attribute names
if set(g.vertex_attributes()) != set(g2.vertex_attributes()):
raise ValueError("Vertex attribute name set mismatch")
# Check the edge attribute names
if set(g.edge_attributes()) != set(g2.edge_attributes()):
raise ValueError("Edge attribute name set mismatch")
if __name__ == "__main__":
test()
|