| @@ -1,7 +1,6 @@ | |||
| # Alias some stuff to make imports cleaner | |||
| from abp.graphstate import GraphState | |||
| from abp.nxgraphstate import NXGraphState | |||
| from abp.vizclient import VizClient | |||
| from abp.qi import CircuitModel | |||
| DETERMINISTIC = False | |||
| @@ -9,6 +9,7 @@ import json, random | |||
| from . import qi, clifford, util | |||
| import abp | |||
| from .stabilizer import Stabilizer | |||
| import requests | |||
| class GraphState(object): | |||
| @@ -26,6 +27,7 @@ class GraphState(object): | |||
| """ | |||
| self.adj, self.node = {}, {} | |||
| self.url = None | |||
| try: | |||
| # Cloning from a networkx graph | |||
| self.adj = data.adj.copy() | |||
| @@ -492,3 +494,13 @@ class GraphState(object): | |||
| g.adj = self.adj.copy() | |||
| return g | |||
| def show(self): | |||
| """ Shares the state on the server and displays browser """ | |||
| if self.url == None: | |||
| self.url = requests.get("https://abv.peteshadbolt.co.uk/").url | |||
| data = json.dumps(self.to_json(stringify=True)) | |||
| print("Shared state to {}".format(self.url)) | |||
| return requests.post("{}/graph".format(self.url), data=data) | |||
| @@ -1,52 +0,0 @@ | |||
| from abp import GraphState, VizClient | |||
| from abp.util import xyz | |||
| import numpy as np | |||
| import time | |||
| import itertools | |||
| import networkx as nx | |||
| threedee_unit_cell = ( | |||
| (( 0, 0, 0), (0, 1, 0)), | |||
| (( 0, 0, 0), (1, 0, 0)), | |||
| (( 1, 0, 0), (1, 1, 0)), | |||
| (( 0, 1, 0), (1, 1, 0)), | |||
| (( 0, 0, 1), (0, 1, 1)), | |||
| (( 0, 0, 1), (1, 0, 1)), | |||
| (( 1, 0, 1), (1, 1, 1)), | |||
| (( 0, 1, 1), (1, 1, 1)), | |||
| (( 0, 0, 0), (0, 0, 1)), | |||
| (( 0, 1, 0), (0, 1, 1)), | |||
| (( 1, 0, 0), (1, 0, 1)), | |||
| (( 1, 1, 0), (1, 1, 1)) | |||
| ) | |||
| def add_offset(vector, offset): | |||
| """ Offset a vector in n-dimensional space """ | |||
| return tuple(v + o for v, o in zip(vector, offset)) | |||
| def offset_unit_cell(unit_cell, offset): | |||
| """ Offset a unit cell """ | |||
| return {(add_offset(a, offset), add_offset(b, offset)) for a, b in unit_cell} | |||
| def lattice(unit_cell, size): | |||
| """ Generate a lattice from a unit cell """ | |||
| edges = set() | |||
| for offset in itertools.product(*list(map(range, size))): | |||
| edges |= offset_unit_cell(unit_cell, offset) | |||
| nodes = set(itertools.chain(*edges)) | |||
| return nodes, edges | |||
| nodes, edges = lattice(threedee_unit_cell, (3, 3, 3)) | |||
| psi = GraphState(nodes) | |||
| for a, b in edges: | |||
| psi.act_cz(a, b) | |||
| v = VizClient() | |||
| v.update(psi) | |||
| @@ -1,24 +0,0 @@ | |||
| from abp import GraphState, VizClient | |||
| from abp.util import xyz | |||
| import itertools | |||
| def grid_2d(width, height): | |||
| """ Make a 2D grid """ | |||
| psi = GraphState() | |||
| grid = list(itertools.product(list(range(width)), list(range(height)))) | |||
| for x, y in grid: | |||
| psi.add_qubit((x, y), position=xyz(x, y, 0), vop=0) | |||
| for x, y in grid: | |||
| if x<width-1: psi.act_cz((x, y), (x+1, y)) | |||
| if y<height-1: psi.act_cz((x, y), (x, y+1)) | |||
| return psi | |||
| if __name__ == '__main__': | |||
| psi = grid_2d(5, 5) | |||
| v = VizClient() | |||
| v.update(psi) | |||
| @@ -1,20 +0,0 @@ | |||
| from abp import GraphState, VizClient | |||
| from abp.util import xyz | |||
| # Prepare to visualize | |||
| v = VizClient() | |||
| # Make a graph state with position attributes | |||
| g = GraphState() | |||
| for i in range(5): | |||
| g.add_qubit(i, position=xyz(i, 0, 0), vop="identity") | |||
| g.act_czs((0,1),(1,2),(2,3),(3,4)) | |||
| # Show it | |||
| v.update(g, 3) | |||
| # Add a qubit with no position | |||
| g.add_qubit('start') | |||
| # Show it | |||
| v.update(g) | |||
| @@ -1,45 +0,0 @@ | |||
| from abp import GraphState, VizClient | |||
| from abp.util import xyz | |||
| import numpy as np | |||
| import time | |||
| import itertools | |||
| square_unit_cell = ( | |||
| ((0, 0), (0, 1)), ((0, 0), (1, 0)), ((1, 0), (1, 1)), ((0, 1), (1, 1))) | |||
| funny_unit_cell = (((0, 0), (0, 1)), ((0, 0), (1, 0)), | |||
| ((1, 0), (1, 1)), ((0, 1), (1, 1)), ((0, 0), (.5, .5))) | |||
| def add_offset(vector, offset): | |||
| """ Offset a vector in n-dimensional space """ | |||
| return tuple(v + o for v, o in zip(vector, offset)) | |||
| def offset_unit_cell(unit_cell, offset): | |||
| """ Offset a unit cell """ | |||
| return {(add_offset(a, offset), add_offset(b, offset)) for a, b in unit_cell} | |||
| def lattice(unit_cell, size): | |||
| """ Generate a lattice from a unit cell """ | |||
| edges = set() | |||
| for offset in itertools.product(*list(map(range, size))): | |||
| edges |= offset_unit_cell(unit_cell, offset) | |||
| nodes = set(itertools.chain(*edges)) | |||
| return nodes, edges | |||
| # s = VisibleGraphState() | |||
| nodes, edges = lattice(square_unit_cell, (10, 10)) | |||
| psi = GraphState() | |||
| v = VizClient() | |||
| for node in nodes: | |||
| psi.add_qubit(str(node), position=xyz(node[0], node[1])) | |||
| psi.act_hadamard(str(node)) | |||
| v.update(psi, 0.1) | |||
| for edge in edges: | |||
| psi.act_cz(str(edge[0]), str(edge[1])) | |||
| v.update(psi, 0.1) | |||
| @@ -1,56 +0,0 @@ | |||
| from abp import GraphState, VizClient | |||
| from abp.util import xyz | |||
| import numpy as np | |||
| import time | |||
| import itertools | |||
| import networkx as nx | |||
| threedee_unit_cell = ( | |||
| (( 0, 0, 0), (0, 1, 0)), | |||
| (( 0, 0, 0), (1, 0, 0)), | |||
| (( 1, 0, 0), (1, 1, 0)), | |||
| (( 0, 1, 0), (1, 1, 0)), | |||
| (( 0, 0, 1), (0, 1, 1)), | |||
| (( 0, 0, 1), (1, 0, 1)), | |||
| (( 1, 0, 1), (1, 1, 1)), | |||
| (( 0, 1, 1), (1, 1, 1)), | |||
| (( 0, 0, 0), (0, 0, 1)), | |||
| (( 0, 1, 0), (0, 1, 1)), | |||
| (( 1, 0, 0), (1, 0, 1)), | |||
| (( 1, 1, 0), (1, 1, 1)) | |||
| ) | |||
| def add_offset(vector, offset): | |||
| """ Offset a vector in n-dimensional space """ | |||
| return tuple(v + o for v, o in zip(vector, offset)) | |||
| def offset_unit_cell(unit_cell, offset): | |||
| """ Offset a unit cell """ | |||
| return {(add_offset(a, offset), add_offset(b, offset)) for a, b in unit_cell} | |||
| def lattice(unit_cell, size): | |||
| """ Generate a lattice from a unit cell """ | |||
| edges = set() | |||
| for offset in itertools.product(*list(map(range, size))): | |||
| edges |= offset_unit_cell(unit_cell, offset) | |||
| nodes = set(itertools.chain(*edges)) | |||
| return nodes, edges | |||
| nodes, edges = lattice(threedee_unit_cell, (3, 3, 3)) | |||
| psi = GraphState() | |||
| for node in nodes: | |||
| psi.add_qubit(str(node), position=xyz(*node)) | |||
| psi.act_hadamard(str(node)) | |||
| for edge in edges: | |||
| psi.act_cz(str(edge[0]), str(edge[1])) | |||
| v = VizClient() | |||
| v.update(psi) | |||
| @@ -1,8 +0,0 @@ | |||
| from abp import GraphState, VizClient | |||
| from abp.util import xyz | |||
| v = VizClient() | |||
| g = GraphState(5) | |||
| for i in range(5): | |||
| g.node[i]["position"] = xyz(i, 0, 0) | |||
| v.update(g) | |||
| @@ -1,4 +1,4 @@ | |||
| from abp import GraphState, VizClient | |||
| from abp import GraphState | |||
| from abp.util import xyz | |||
| import numpy as np | |||
| import time | |||
| @@ -52,6 +52,5 @@ for node in nodes: | |||
| for edge in edges: | |||
| psi.act_cz(edge[0], edge[1]) | |||
| v = VizClient() | |||
| v.update(psi) | |||
| psi.show() | |||
| @@ -1,46 +0,0 @@ | |||
| from abp import GraphState, VizClient | |||
| from abp.util import xyz | |||
| import numpy as np | |||
| import time | |||
| import itertools | |||
| threedee_unit_cell = ( | |||
| (( 0, 0, 0), (0, 1, 0)), | |||
| (( 0, 0, 0), (1, 0, 0)), | |||
| (( 1, 0, 0), (1, 1, 0)), | |||
| (( 0, 1, 0), (1, 1, 0))) | |||
| def add_offset(vector, offset): | |||
| """ Offset a vector in n-dimensional space """ | |||
| return tuple(v + o for v, o in zip(vector, offset)) | |||
| def offset_unit_cell(unit_cell, offset): | |||
| """ Offset a unit cell """ | |||
| return {(add_offset(a, offset), add_offset(b, offset)) for a, b in unit_cell} | |||
| def lattice(unit_cell, size): | |||
| """ Generate a lattice from a unit cell """ | |||
| edges = set() | |||
| for offset in itertools.product(*map(range, size)): | |||
| edges |= offset_unit_cell(unit_cell, offset) | |||
| nodes = set(itertools.chain(*edges)) | |||
| return nodes, edges | |||
| nodes, edges = lattice(threedee_unit_cell, (4, 4, 4)) | |||
| v = VizClient() | |||
| while True: | |||
| psi = GraphState() | |||
| for node in nodes: | |||
| v.update(psi, 0.1) | |||
| psi.add_qubit(str(node), position=xyz(node[0], node[1], node[2]), vop="identity") | |||
| for edge in edges: | |||
| v.update(psi, 0.1) | |||
| psi.act_cz(str(edge[0]), str(edge[1])) | |||
| del psi | |||