Browse Source

Removed the symmetry

master
Pete Shadbolt 8 years ago
parent
commit
a3d1aae8b9
1 changed files with 16 additions and 19 deletions
  1. +16
    -19
      abp/make_tables.py

+ 16
- 19
abp/make_tables.py View File

@@ -10,6 +10,7 @@ from functools import reduce
import itertools as it import itertools as it
import qi import qi
import numpy as np import numpy as np
import tempfile
from tqdm import tqdm from tqdm import tqdm
from clifford import decompositions from clifford import decompositions


@@ -25,7 +26,7 @@ def find_clifford(needle, haystack):


def normalize_global_phase(m): def normalize_global_phase(m):
""" Normalize the global phase of a matrix """ """ Normalize the global phase of a matrix """
v = [x for x in m.flatten() if np.abs(x)>0.001][0]
v = (x for x in m.flatten() if np.abs(x)>0.001).next()
phase = np.arctan2(v.imag, v.real) % np.pi phase = np.arctan2(v.imag, v.real) % np.pi
rot = np.exp(-1j*phase) rot = np.exp(-1j*phase)
return rot * m if rot * v > 0 else -rot*m return rot * m if rot * v > 0 else -rot*m
@@ -34,7 +35,6 @@ def normalize_global_phase(m):
def find_cz(bond, c1, c2, commuters, state_table): def find_cz(bond, c1, c2, commuters, state_table):
""" Find the output of a CZ operation """ """ Find the output of a CZ operation """
# Figure out the target state # Figure out the target state
state = qi.bond if bond else qi.nobond
target = qi.cz.dot(state_table[bond, c1, c2]) target = qi.cz.dot(state_table[bond, c1, c2])
target = normalize_global_phase(target) target = normalize_global_phase(target)


@@ -44,8 +44,7 @@ def find_cz(bond, c1, c2, commuters, state_table):


# Find a match # Find a match
for bond, c1p, c2p in it.product([0, 1], s1, s2): for bond, c1p, c2p in it.product([0, 1], s1, s2):
trial = state_table[bond, c1p, c2p]
if np.allclose(target, trial):
if np.allclose(target, state_table[bond, c1p, c2p]):
return bond, c1p, c2p return bond, c1p, c2p


# Didn't find anything - this should never happen # Didn't find anything - this should never happen
@@ -100,9 +99,11 @@ def get_cz_table(unitaries):


# TODO: it's symmetric. this can be much faster # TODO: it's symmetric. this can be much faster
cz_table = np.zeros((2, 24, 24, 3)) cz_table = np.zeros((2, 24, 24, 3))
rows = list(it.product([0, 1], range(24), range(24)))
for bond, c1, c2 in tqdm(rows, desc="Building CZ table"):
cz_table[bond, c1, c2] = find_cz(bond, c1, c2, commuters, state_table)
rows = list(it.product([0, 1], it.combinations(range(24), 2)))
for bond, (c1, c2) in tqdm(rows, desc="Building CZ table"):
newbond, c1p, c2p = find_cz(bond, c1, c2, commuters, state_table)
cz_table[bond, c1, c2] = [newbond, c1p, c2p]
cz_table[bond, c2, c1] = [newbond, c2p, c1p]
return cz_table return cz_table




@@ -115,15 +116,11 @@ if __name__ == "__main__":
cz_table = get_cz_table(unitaries) cz_table = get_cz_table(unitaries)


# Write it all to disk # Write it all to disk
#print __file__
#directory = os.path.dirname(os.path.realpath(__file__))
#print directory
#where = os.path.join(directory, "tables/")
#os.chdir(where)
#np.save("unitaries.npy", unitaries)
#np.save("conjugation_table.npy", conjugation_table)
#np.save("times_table.npy", times_table)
# np.save("cz_table.npy", cz_table)

#with open("by_name.json", "wb") as f:
#json.dump(by_name, f)
where = tempfile.gettempdir()
np.save("unitaries.npy", unitaries)
np.save("conjugation_table.npy", conjugation_table)
np.save("times_table.npy", times_table)
np.save("cz_table.npy", cz_table)

with open("by_name.json", "wb") as f:
json.dump(by_name, f)

Loading…
Cancel
Save