Browse Source

Better

master
Pete Shadbolt 8 years ago
parent
commit
b7380f802b
5 changed files with 19 additions and 51 deletions
  1. +0
    -4
      TODO
  2. +10
    -19
      tables.py
  3. +2
    -2
      tests/test_graph.py
  4. +7
    -6
      tests/test_viz.py
  5. +0
    -20
      util.py

+ 0
- 4
TODO View File

@@ -1,4 +0,0 @@
Next things to do:
- Read A&B code which expresses C(1) as products of sqrt(iX), sqrt(iY)
- Read A&B code which exposes LC API
- Implement the above

+ 10
- 19
tables.py View File

@@ -7,24 +7,10 @@ unitaries = [p*s for p in permutations for s in signs]

import numpy as np
from tqdm import tqdm
import qi
import os
from functools import reduce
import cPickle

def cache_to_disk(file_name):
""" A decorator to cache the output of a function to disk """
def wrap(func):
def modified(*args, **kwargs):
try:
output = cPickle.load(open(file_name, "r"))
except (IOError, ValueError):
output = func(*args, **kwargs)
with open(file_name, "w") as f:
cPickle.dump(output, f)
return output
return modified
return wrap

import qi

# TODO: make this more efficient / shorter
def find_up_to_phase(u):
@@ -47,9 +33,11 @@ def name_of(vop):
return "%s" % get_name[vop] if vop in get_name else "VOP%d" % vop


@cache_to_disk("tables.cache")
def construct_tables():
def construct_tables(filename="tables.cache"):
""" Constructs / caches multiplication and conjugation tables """
if os.path.exists(filename):
return cPickle.load(open(filename, "r"))

by_name = {name: find_up_to_phase(u)[0] for name, u in qi.by_name.items()}
get_name = {v:k for k, v in by_name.items()}
conjugation_table = [find_up_to_phase(u.H)[0]
@@ -57,7 +45,10 @@ def construct_tables():
times_table = [[find_up_to_phase(u * v)[0] for v in unitaries]
for u in tqdm(unitaries)]
cz_table = None
return by_name, get_name, conjugation_table, times_table, cz_table
output = by_name, get_name, conjugation_table, times_table, cz_table
with open(filename, "w") as f:
cPickle.dump(output, f)
return output


decompositions = ("xxxx", "xx", "zzxx", "zz", "zxx", "z", "zzz", "xxz",


+ 2
- 2
tests/test_graph.py View File

@@ -58,9 +58,9 @@ def test_edgelist():


def test_million_sites():
""" Testing making really big graphs """
""" Testing that making a graph of tent housand qubits takes less than half a second"""
g = GraphState()
t = time.clock()
for i in xrange(100000):
g.add_edge(i, i + 1)
print time.clock() - t
assert time.clock() - t < .5

+ 7
- 6
tests/test_viz.py View File

@@ -1,12 +1,13 @@
from graph import GraphState
import viz


def test_viz():
g = GraphState()
g.add_edge(0,1)
g.add_edge(1,2)
g.add_edge(2,0)
g.add_edge(0,3)
g.add_edge(100,200)
#g.remove_vop(0, 1)
g.add_edge(0, 1)
g.add_edge(1, 2)
g.add_edge(2, 0)
g.add_edge(0, 3)
g.add_edge(100, 200)
# g.remove_vop(0, 1)
viz.draw(g)

+ 0
- 20
util.py View File

@@ -1,20 +0,0 @@
"""
Useful but messy crap
"""


def cache_to_disk(file_name):
""" A decorator to cache the output of a function to disk """
def wrap(func):
def modified(*args, **kwargs):
try:
output = cPickle.load(open(file_name, "r"))
except (IOError, ValueError):
output = func(*args, **kwargs)
with open(file_name, "w") as f:
cPickle.dump(output, f)
return output
return modified
return wrap



Loading…
Cancel
Save