@@ -1,4 +1,4 @@ | |||
# Alias some stuff to make imports cleaner | |||
from abp.graphstate import GraphState | |||
from abp.qi import CircuitModel | |||
from abp.graphstate import VisibleGraphState | |||
from abp.visiblegraphstate import VisibleGraphState |
@@ -6,27 +6,24 @@ import itertools as it | |||
import clifford | |||
import json | |||
import qi | |||
import networkx as nx | |||
from websocket import create_connection | |||
import atexit | |||
try: | |||
import networkx as nx | |||
except ImportError: | |||
print "Could not import networkx." | |||
class GraphState(object): | |||
class GraphState(): | |||
def __init__(self, nodes=[]): | |||
self.ngbh = {} | |||
self.vops = {} | |||
self.meta = {} | |||
try: | |||
self.add_nodes(nodes) | |||
except TypeError: | |||
self.add_nodes(xrange(nodes)) | |||
def add_node(self, v): | |||
self.ngbh, self.vops, self.meta = {}, {}, {} | |||
self.add_nodes(nodes) | |||
def add_node(self, v, meta={}): | |||
""" Add a node """ | |||
self.ngbh[v] = set() | |||
self.vops[v] = clifford.by_name["hadamard"] | |||
self.meta[v] = dict() | |||
self.meta[v] = meta | |||
def add_nodes(self, nodes): | |||
""" Add a buncha nodes """ | |||
@@ -62,10 +59,10 @@ class GraphState(object): | |||
def edgelist(self): | |||
""" Describe a graph as an edgelist """ | |||
edges = frozenset(tuple(sorted((i, n))) | |||
edges = set(tuple(sorted((i, n))) | |||
for i, v in self.ngbh.items() | |||
for n in v) | |||
return [tuple(e) for e in edges] | |||
return tuple(edges) | |||
def remove_vop(self, a, avoid): | |||
""" Reduces VOP[a] to the identity """ | |||
@@ -230,30 +227,4 @@ class GraphState(object): | |||
return self.ngbh == other.ngbh and self.vops == other.vops | |||
class VisibleGraphState(GraphState): | |||
def __init__(self, *args, **kwargs): | |||
GraphState.__init__(self, *args, **kwargs) | |||
self.ws = create_connection("ws://localhost:5001") | |||
atexit.register(self.ws.close) | |||
self.send("clear") | |||
def send(self, method, *args, **kwargs): | |||
kwargs.update({"method": method}) | |||
self.ws.send(json.dumps(kwargs)) | |||
def add_node(self, node): | |||
GraphState.add_node(self, node) | |||
self.send("add_node", node=node) | |||
def add_edge(self, start, end): | |||
GraphState.add_edge(self, start, end) | |||
self.send("add_edge", start=start, end=end) | |||
def del_edge(self, start, end): | |||
GraphState.del_edge(self, start, end) | |||
self.send("del_edge", start=start, end=end) | |||
def act_local_rotation(self, node, operation): | |||
GraphState.del_edge(self, start, end) | |||
self.send("update_vop", node=node, vop=self.vops[node]) |
@@ -0,0 +1,51 @@ | |||
""" | |||
Allows us to visualize the state in a browser | |||
""" | |||
import atexit | |||
import threading | |||
import time | |||
from websocket import create_connection | |||
from graphstate import GraphState | |||
import json | |||
class VisibleGraphState(GraphState): | |||
def __init__(self, *args, **kwargs): | |||
GraphState.__init__(self, *args, **kwargs) | |||
self.ws = create_connection("ws://localhost:5001") | |||
self.diff = [] | |||
atexit.register(self.shutdown) | |||
self.ws.send(json.dumps({"method":"clear"})) | |||
def shutdown(self): | |||
if len(self.diff)>0: | |||
self.update() | |||
self.ws.close() | |||
def send(self, method, *args, **kwargs): | |||
kwargs.update({"method": method}) | |||
self.diff.append(kwargs) | |||
def add_node(self, node, meta = {}): | |||
GraphState.add_node(self, node, meta) | |||
self.send("add_node", node=node, meta=meta) | |||
def add_edge(self, start, end): | |||
GraphState.add_edge(self, start, end) | |||
self.send("add_edge", start=start, end=end) | |||
def del_edge(self, start, end): | |||
GraphState.del_edge(self, start, end) | |||
self.send("del_edge", start=start, end=end) | |||
def act_local_rotation(self, node, operation): | |||
GraphState.act_local_rotation(self, node, operation) | |||
self.send("update_vop", node = node, vop = self.vops[node]) | |||
def update(self): | |||
#data = json.dumps({"diff": self.diff, "state":self.to_json()}) | |||
data = json.dumps({"diff": self.diff}) | |||
self.ws.send(data) | |||
self.diff = [] | |||
@@ -0,0 +1,10 @@ | |||
from abp import VisibleGraphState | |||
s = VisibleGraphState() | |||
for i in range(1000): | |||
s.add_node(i) | |||
s.act_local_rotation(i, "hadamard") | |||
s.update() | |||
for i in range(1000-1): | |||
s.act_cz(i, i+1) | |||
s.update() |
@@ -2,9 +2,10 @@ from websocket_server import WebsocketServer | |||
import threading | |||
clients = [] | |||
state = "awd" | |||
#state = "awd" | |||
def new_message(client, server, message): | |||
print "Sending message ..." | |||
server.send_message_to_all(message) | |||
def new_client(client, server): | |||
@@ -1,17 +0,0 @@ | |||
import requests | |||
import abp, json | |||
import time | |||
def test_client(): | |||
client = abp.Client(clear=True) | |||
client.clear() | |||
for i in range(100): | |||
client.add_node(i) | |||
client.act_local_rotation(i, 10) | |||
for i in range(100-1): | |||
client.act_cz(i, i+1) | |||
print client.get_state() | |||