Browse Source

Hacky Raussendorf example.

That factor of two is criminal.
master
Pete Shadbolt 7 years ago
parent
commit
b5089b2947
1 changed files with 57 additions and 0 deletions
  1. +57
    -0
      examples/visualization/raussendorf.py

+ 57
- 0
examples/visualization/raussendorf.py View File

@@ -0,0 +1,57 @@
from abp import GraphState, VizClient
from abp.util import xyz
import numpy as np
import time
import itertools
import networkx as nx

raussendorf_unit_cell = (
((1, 0, 0), (1, 1, 0)), ((0, 1, 0), (1, 1, 0)),
((1, 2, 0), (1, 1, 0)), ((2, 1, 0), (1, 1, 0)),
((1, 2, 2), (1, 1, 2)), ((0, 1, 2), (1, 1, 2)),
((1, 0, 2), (1, 1, 2)), ((2, 1, 2), (1, 1, 2)),
((0, 1, 0), (0, 1, 1)), ((0, 0, 1), (0, 1, 1)),
((0, 1, 2), (0, 1, 1)), ((0, 2, 1), (0, 1, 1)),
((2, 1, 0), (2, 1, 1)), ((2, 0, 1), (2, 1, 1)),
((2, 1, 2), (2, 1, 1)), ((2, 2, 1), (2, 1, 1)),
((1, 0, 0), (1, 0, 1)), ((0, 0, 1), (1, 0, 1)),
((1, 0, 2), (1, 0, 1)), ((2, 0, 1), (1, 0, 1)),
((1, 2, 0), (1, 2, 1)), ((0, 2, 1), (1, 2, 1)),
((1, 2, 2), (1, 2, 1)), ((2, 2, 1), (1, 2, 1)))


def add_offset(vector, offset):
""" Offset a vector in n-dimensional space """
return tuple(v + o*2 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(raussendorf_unit_cell, (2, 2, 3 ))

psi = GraphState()
for node in nodes:
x, y, z = node
color = "red" if (x+y+z) % 2 > 0 else "black"
print color
psi.add_qubit(node, position=xyz(*node), color=color)
psi.act_hadamard(node)

for edge in edges:
psi.act_cz(edge[0], edge[1])

v = VizClient()
v.update(psi)


Loading…
Cancel
Save