@@ -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 | |||