diff --git a/server/anders_briegel.js b/server/anders_briegel.js new file mode 100644 index 0000000..f0207e6 --- /dev/null +++ b/server/anders_briegel.js @@ -0,0 +1,113 @@ +var ngbh = {}; +var vops = {}; +var meta = {}; + +function add_node(node, m) { + ngbh[node] = {}; + vops[node] = clifford.hadamard; + meta[node] = m ? m : {}; +} + +function add_nodes(nodes) { + nodes.forEach(add_node); +} + +function add_edge(a, b) { + ngbh[a][b] = true; + ngbh[b][a] = true; +} + +function add_edges(edges) { + edges.forEach(function(e) { + add_edge(e[0], e[1]); + }); +} + +function del_edge(a, b) { + delete ngbh[a][b]; + delete ngbh[b][a]; +} + +function has_edge(a, b) { + return Object.prototype.hasOwnProperty.call(ngbh[a], b); +} + +function toggle_edge(a, b) { + if (has_edge(a, b)) { + del_edge(a, b); + } else { + add_edge(a, b); + } +} + +function get_swap(node, avoid) { + for (var i in ngbh[node]) { + if (i != avoid) {return i;} + } + return avoid; +} + +function remove_vop(node, avoid) { + var swap_qubit = get_swap(node, avoid); + var decomposition = decompositions[vops[node]]; + for (var i=decomposition.length-1; i >=0; --i) { + var v = decomposition[i]; + local_complementation(v == "x" ? a : swap_qubit); + } +} + +function local_complementation(node) { + var keys = Object.keys(ngbh[node]); + for (var i=0; i < keys.length; ++i) { + for (var j=i+1; j < keys.length; ++j) { + toggle_edge(keys[i], keys[j]); + } + vops[i] = times_table[vops[keys[i]]][sqz_h]; + } + vops[node] = times_table[vops[node]][msqx_h]; +} + +function act_local_rotation(node, operation) { + var rotation = clifford[operation]; + vops[node] = times_table[rotation][vops[node]]; +} + +function act_hadamard(node){ + act_local_rotation(node, 10); +} + +function is_sole_member(node, group){ + return group.length == 1 && group[0] == node; +} + +function act_cz(a, b){ + if (is_sole_member(ngbh[a], b)) { + remove_vop(a, b); + } + if (is_sole_member(ngbh[b], a)) { + remove_vop(b, a); + } + if (is_sole_member(ngbh[a], b)) { + remove_vop(a, b); + } + var edge = has_edge(a, b); + var new_state = cz_table[edge ? 1 : 0][vops[a]][vops[b]]; + vops[a] = new_state[1]; + vops[b] = new_state[2]; + if (new_state[0] != edge){ + toggle_edge(a, b); + } +} + + +function log_graph_state() { + console.log(vops); + console.log(ngbh); +} + +add_node(0); +add_node(1); +act_local_rotation(0, 10); +act_local_rotation(1, 10); +act_cz(0, 1); +log_graph_state(); diff --git a/server/poll.js b/server/api.js similarity index 62% rename from server/poll.js rename to server/api.js index 83f4779..6f8663f 100644 --- a/server/poll.js +++ b/server/api.js @@ -1,5 +1,12 @@ -function poll() { - var ws = new WebSocket("ws://localhost:5001"); +var ws; + +function add_node(node){ + data = {"method": "add_node", "node": node}; + ws.send(JSON.stringify(data)); +} + +function connect_to_server() { + ws = new WebSocket("ws://localhost:5001"); ws.onopen = function() { console.log("Connected to server."); @@ -17,5 +24,4 @@ function poll() { }; } -window.onload = poll; diff --git a/server/client.py b/server/client.py deleted file mode 100644 index 4824dee..0000000 --- a/server/client.py +++ /dev/null @@ -1,4 +0,0 @@ -from abp import VisibleGraphState - -s = VisibleGraphState() -s.add_node(0) diff --git a/server/client2.py b/server/client2.py deleted file mode 100644 index 033e298..0000000 --- a/server/client2.py +++ /dev/null @@ -1,38 +0,0 @@ -import abp -import atexit -import json -from websocket import create_connection - -class ServedState(abp.GraphState): - def __init__(self): - abp.GraphState.__init__(self) - 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): - abp.GraphState.add_node(self, node) - self.send("add_node", node = node) - - def add_edge(self, start, end): - abp.GraphState.add_edge(self, start, end) - self.send("add_edge", start = start, end = end) - - def del_edge(self, start, end): - abp.GraphState.del_edge(self, start, end) - self.send("del_edge", start = start, end = end) - - def del_edge(self, start, end): - abp.GraphState.del_edge(self, start, end) - self.send("del_edge", start = start, end = end) - - -if __name__ == '__main__': - s = ServedState() - s.add_node(0) - s.add_node(1) - s.add_edge(0,1) diff --git a/server/static/curve.js b/server/curve.js similarity index 100% rename from server/static/curve.js rename to server/curve.js diff --git a/server/static/graph.js b/server/graph.js similarity index 100% rename from server/static/graph.js rename to server/graph.js diff --git a/server/grid.js b/server/grid.js new file mode 100644 index 0000000..553927b --- /dev/null +++ b/server/grid.js @@ -0,0 +1,5 @@ +//TODO Move to THREE.gridhelper +// Make a grid +function makeGrid(side, n, color) { + return grid; +} diff --git a/server/index.html b/server/index.html index 135dccc..70d5e3b 100644 --- a/server/index.html +++ b/server/index.html @@ -4,9 +4,35 @@