@@ -1,7 +1,6 @@ | |||||
# Alias some stuff to make imports cleaner | # Alias some stuff to make imports cleaner | ||||
from abp.graphstate import GraphState | from abp.graphstate import GraphState | ||||
from abp.nxgraphstate import NXGraphState | from abp.nxgraphstate import NXGraphState | ||||
from abp.vizclient import VizClient | |||||
from abp.qi import CircuitModel | from abp.qi import CircuitModel | ||||
DETERMINISTIC = False | DETERMINISTIC = False |
@@ -9,6 +9,7 @@ import json, random | |||||
from . import qi, clifford, util | from . import qi, clifford, util | ||||
import abp | import abp | ||||
from .stabilizer import Stabilizer | from .stabilizer import Stabilizer | ||||
import requests | |||||
class GraphState(object): | class GraphState(object): | ||||
@@ -26,6 +27,7 @@ class GraphState(object): | |||||
""" | """ | ||||
self.adj, self.node = {}, {} | self.adj, self.node = {}, {} | ||||
self.url = None | |||||
try: | try: | ||||
# Cloning from a networkx graph | # Cloning from a networkx graph | ||||
self.adj = data.adj.copy() | self.adj = data.adj.copy() | ||||
@@ -492,3 +494,13 @@ class GraphState(object): | |||||
g.adj = self.adj.copy() | g.adj = self.adj.copy() | ||||
return g | 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 | from abp.util import xyz | ||||
import numpy as np | import numpy as np | ||||
import time | import time | ||||
@@ -52,6 +52,5 @@ for node in nodes: | |||||
for edge in edges: | for edge in edges: | ||||
psi.act_cz(edge[0], edge[1]) | 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 | |||||