diff --git a/abp/static/scripts/anders_briegel.js b/abp/static/scripts/anders_briegel.js index c1fe54b..c504182 100644 --- a/abp/static/scripts/anders_briegel.js +++ b/abp/static/scripts/anders_briegel.js @@ -41,101 +41,12 @@ abj.has_edge = function(a, b) { return Object.prototype.hasOwnProperty.call(abj.adj[a], b); }; -abj.toggle_edge = function(a, b) { - if (abj.has_edge(a, b)) { - abj.del_edge(a, b); - } else { - abj.add_edge(a, b); - } -}; - -abj.get_swap = function(node, avoid) { - for (var i in abj.adj[node]) { - if (i != avoid) { - return i; - } - } - return avoid; -}; - -abj.remove_vop = function(node, avoid) { - var swap_qubit = abj.get_swap(node, avoid); - var decomposition = tables.decompositions[abj.node[node].vop]; - for (var i = decomposition.length - 1; i >= 0; --i) { - var v = decomposition[i]; - abj.local_complementation(v == "x" ? node : swap_qubit); - } -}; - -abj.local_complementation = function(node) { - // TODO: inefficient - var done = {}; - for (var i in abj.adj) { - for (var j in abj.adj[i]) { - var name = i>j ? [i,j] : [j,i]; - if (done[name]===false){ - abj.toggle_edge(i, j); - done[name] = true; - } - } - abj.node[i].vop = tables.times_table[abj.node[i].vop][6]; - } - abj.node[node].vop = tables.times_table[abj.node[node].vop][14]; -}; - -abj.act_local_rotation = function(node, operation) { - var rotation = tables.clifford[operation]; - abj.node[node].vop = tables.times_table[rotation][abj.node[node].vop]; -}; - -abj.act_hadamard = function(node) { - abj.act_local_rotation(node, 10); -}; - abj.is_sole_member = function(group, node) { // TODO: this is slow as heck var keys = Object.keys(group); return keys.length == 1 && keys[0] == node; }; -abj.act_cz = function(a, b) { - if (abj.is_sole_member(abj.adj[a], b)) { - abj.remove_vop(a, b); - } - if (abj.is_sole_member(abj.adj[b], a)) { - abj.remove_vop(b, a); - } - if (abj.is_sole_member(abj.adj[a], b)) { - abj.remove_vop(a, b); - } - var edge = abj.has_edge(a, b); - var new_state = tables.cz_table[edge ? 1 : 0][abj.node[a].vop][abj.node[b].vop]; - abj.node[a].vop = new_state[1]; - abj.node[b].vop = new_state[2]; - if (new_state[0] != edge) { - abj.toggle_edge(a, b); - } -}; - -abj.edgelist = function() { - var seen = {}; - var output = []; - for (var i in abj.adj) { - for (var j in abj.adj[i]) { - if (!Object.prototype.hasOwnProperty.call(seen, j)) { - output.push([i, j]); - } - } - seen[i] = true; - } - return output; -}; - -abj.log_graph_state = function() { - console.log(JSON.stringify(abj.node)); - console.log(JSON.stringify(abj.adj)); -}; - abj.update = function(newState) { abj.node = newState.node; abj.adj = newState.adj;