| 
							- from abp.fancy import GraphState
 - 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(*map(range, size)):
 -         edges |= offset_unit_cell(unit_cell, offset)
 - 
 -     nodes = set(itertools.chain(*edges))
 -     return nodes, edges
 - 
 - nodes, edges = lattice(threedee_unit_cell, (1, 1, 1))
 - 
 - psi = GraphState()
 - for node in nodes:
 -     psi.add_node(str(node), position=xyz(*node))
 -     psi.act_hadamard(str(node))
 - 
 - for edge in edges:
 -     psi.act_cz(str(edge[0]), str(edge[1]))
 - 
 - nx.rename_no
 - print psi.to_state_vector()
 
 
  |