|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- import networkx as nx
- from matplotlib import pyplot as plt
-
- vop_colors = ["red", "green", "blue"]
-
- def graph(n):
- """ Generate a graph with Hadamards on each qubit """
- graph = [set() for i in xrange(n)]
- vops = [0 for i in xrange(n)]
- return graph, vops # TODO: seems ugly
-
- def add_edge(graph, v1, v2):
- """ Add an edge between two vertices in the graph """
- graph[v1].add(v2)
- graph[v2].add(v1)
-
- def del_edge(graph, v1, v2):
- """ Delete an edge between two vertices in the graph """
- graph[v1].remove(v2)
- graph[v2].remove(v1)
-
- def has_edge(graph, v1, v2):
- """ Test existence of an edge between two vertices in the graph """
- return v2 in graph[v1]
-
- def toggle_edge(graph, v1, v2):
- """ Toggle an edge between two vertices in the graph """
- if has_edge(graph, v1, v2):
- del_edge(graph, v1, v2)
- else:
- add_edge(graph, v1, v2)
-
- def edgelist(graph):
- """ Describe a graph as an edgelist """
- edges = frozenset(frozenset((i, n))
- for i, v in enumerate(graph)
- for n in v)
- return [tuple(e) for e in edges]
-
- def draw(graph, vops, filename="out.pdf", ns=500):
- """ Draw a graph with networkx layout """
- g = nx.from_edgelist(edgelist(graph))
- pos = nx.spring_layout(g)
- colors = [vop_colors[vop] for vop in vops]
- nx.draw_networkx_nodes(g, pos, node_color="white", node_size=ns)
- nx.draw_networkx_nodes(g, pos, node_color=colors, node_size=ns, alpha=.4)
- nx.draw_networkx_labels(g, pos)
- nx.draw_networkx_edges(g, pos)
- plt.axis('off')
- plt.savefig(filename)
-
- if __name__ == '__main__':
- g, vops = graph(10)
- add_edge(g, 0, 1)
- add_edge(g, 1, 3)
- add_edge(g, 3, 2)
- add_edge(g, 3, 0)
- add_edge(g, 2, 0)
- edgelist(g)
- draw(g, vops)
|