diff --git a/.gitignore b/.gitignore index 8cfad81..0be40d4 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +*.pdf # Project-specific ab/ anders_briegel diff --git a/abp.py b/abp.py deleted file mode 100644 index 9dafe9b..0000000 --- a/abp.py +++ /dev/null @@ -1 +0,0 @@ -nothing diff --git a/graph.py b/graph.py new file mode 100644 index 0000000..735ee05 --- /dev/null +++ b/graph.py @@ -0,0 +1,48 @@ +import networkx as nx +from matplotlib import pyplot as plt +from vops import * + +class Graph(object): + + def __init__(self, n): + self.vertices = [set() for i in xrange(n)] + self.vops = [hadamard for i in xrange(n)] + + def add_edge(self, v1, v2): + self.vertices[v1].add(v2) + self.vertices[v2].add(v1) + + def del_edge(self, v1, v2): + self.vertices[v1].remove(v2) + self.vertices[v2].remove(v1) + + def edgelist(self): + edges = frozenset(frozenset((i, n)) + for i, v in enumerate(self.vertices) + for n in v) + return [tuple(e) for e in edges] + + def draw(self, filename="out.pdf"): + g = nx.from_edgelist(self.edgelist()) + pos = nx.spring_layout(g) + nx.draw_networkx_nodes(g, pos, node_color="white", node_size=1000) + nx.draw_networkx_labels(g, pos) + nx.draw_networkx_edges(g, pos) + for i, vop in enumerate(self.vops): + if not i in pos: continue + x, y = pos[i] + plt.text(x, y+0.1, vops[vop], ha="center") + + plt.axis('off') + plt.savefig(filename) + +if __name__ == '__main__': + g = Graph(10) + g.add_edge(0, 1) + g.add_edge(1, 3) + g.add_edge(3, 2) + g.add_edge(3, 0) + g.add_edge(2, 0) + print g.edgelist() + + g.draw() diff --git a/tests/test_graph.py b/tests/test_graph.py new file mode 100644 index 0000000..b9d339b --- /dev/null +++ b/tests/test_graph.py @@ -0,0 +1,15 @@ +from graph import Graph + +def test_graph(): + g = Graph(3) + g.add_edge(0,1) + g.add_edge(1,2) + g.add_edge(2,0) + assert g.vertices[0]==set([1,2]) + + g.del_edge(0,1) + assert g.vertices[0]==set([2]) + el = g.edgelist() + assert (1,2) in el + assert not (0,1) in el + assert len(el)==2 diff --git a/vops.py b/vops.py new file mode 100644 index 0000000..8827c37 --- /dev/null +++ b/vops.py @@ -0,0 +1,3 @@ +vops = ["hadamard"] +globals().update({x:i for i, x in enumerate(vops)}) +