|
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- from abp import GraphState
- from abp.util import xyz
- import numpy as np
- import time
- import itertools
- import networkx as nx
- import requests
- import json
-
- 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
-
- def raussendorf(N=3):
- """ Generates raussendorf lattice """
- nodes, edges = lattice(raussendorf_unit_cell, (N, N, N))
-
- 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])
-
- return psi
-
-
|