Browse Source

Remove lattices.py

master
Pete Shadbolt 7 years ago
parent
commit
1673cf1bda
1 changed files with 0 additions and 61 deletions
  1. +0
    -61
      abp/lattices.py

+ 0
- 61
abp/lattices.py View File

@@ -1,61 +0,0 @@
"""
This is a sketch of a consistent language for defining resource states and lattices.
"""

import networkx as nx
from abp.fancy import GraphState

def union(*graphs):
""" Assumes that all graphs are completely independent and uniquely labelled """
output = nx.Graph()
output.node = dict(i for g in graphs for i in g.node.items())
output.adj = dict(i for g in graphs for i in g.adj.items())
return output

def relabel(g, label):
""" Shorthand relabel """
return nx.relabel_nodes(g, lambda x: (label, x))

def fuse(psi, na, nb):
""" Deterministic fusion for testing purposes """
neighbors_a, neighbors_b = psi.neighbors(na), psi.neighbors(nb)
new_edges = ((i, j) for i in neighbors_a for j in neighbors_b if i != j)
psi.add_edges_from(new_edges)
psi.remove_nodes_from((na, nb))
return psi

def ghz(label):
""" A 3-GHZ state """
psi = nx.Graph(((0, 1), (1, 2)))
return relabel(psi, label)

def microcluster(label):
""" A microcluster """
psi = union(ghz(0), ghz(1), ghz(2))
psi = fuse(psi, (0, 1), (1, 0))
psi = fuse(psi, (1, 2), (2, 1))
return relabel(psi, label)

def unit_cell(label):
""" A simple ring-like unit cell """
psi = union(microcluster(0), microcluster(1), microcluster(2), microcluster(3))
psi = fuse(psi, (0, (0, 2)), (1, (2, 2)))
psi = fuse(psi, (1, (0, 2)), (2, (2, 2)))
psi = fuse(psi, (2, (0, 2)), (3, (2, 2)))
psi = fuse(psi, (3, (0, 2)), (0, (2, 2)))
return relabel(psi, label)

def position(node):
print node
return {}

def annotate(g, f):
""" Annotate a graph """
for node in g.nodes():
g.node[node].update(f(node))

if __name__ == '__main__':
psi = union(unit_cell((0, 0)), unit_cell((2, 0)))
annotate(psi, position)
g = GraphState(psi)


Loading…
Cancel
Save