Pete Shadbolt před 8 roky
rodič
revize
dac9946b65
1 změnil soubory, kde provedl 19 přidání a 9 odebrání
  1. +19
    -9
      make_tables.py

+ 19
- 9
make_tables.py Zobrazit soubor

@@ -11,9 +11,9 @@ from tqdm import tqdm
from functools import reduce
import itertools as it

DECOMPOSITIONS = ("xxxx", "xx", "zzxx", "zz", "zxx", "z", "zzz", "xxz",
"xzx", "xzxxx", "xzzzx", "xxxzx", "xzz", "zzx", "xxx", "x",
"zzzx", "xxzx", "zx", "zxxx", "xxxz", "xzzz", "xz", "xzxx")
decompositions = ("xxxx", "xx", "zzxx", "zz", "zxx", "z", "zzz", "xxz",
"xzx", "xzxxx", "xzzzx", "xxxzx", "xzz", "zzx", "xxx", "x",
"zzzx", "xxzx", "zx", "zxxx", "xxxz", "xzzz", "xz", "xzxx")


def find_clifford(needle, haystack):
@@ -70,7 +70,7 @@ def get_conjugation_table(unitaries):
def get_times_table(unitaries):
""" Construct the times-table """
return np.array([[find_clifford(u.dot(v), unitaries) for v in unitaries]
for u in tqdm(unitaries)])
for u in tqdm(unitaries)])


def get_state_table():
@@ -79,11 +79,10 @@ def get_state_table():
for bond, i, j in it.product([0, 1], range(24), range(24)):
state = qi.bond if bond else qi.nobond
kp = np.kron(unitaries[i], unitaries[j])
state_table[bond, i, j,:] = np.dot(kp, state).T
state_table[bond, i, j, :] = np.dot(kp, state).T
return state_table



def get_cz_table(unitaries):
""" Compute the lookup table for the CZ (A&B eq. 9) """
commuters = (qi.id, qi.px, qi.pz, qi.ph, hermitian_conjugate(qi.ph))
@@ -95,8 +94,19 @@ def get_cz_table(unitaries):
cz_table[bond, c1, c2] = find_cz(bond, c1, c2, commuters, state_table)
return cz_table

if __name__ == '__main__':
unitaries = get_unitaries(DECOMPOSITIONS)

if not __name__ == "__main__":
try:
unitaries = np.load("tables/unitaries.npy")
conjugation_table = np.load("tables/conjugation_table.npy")
times_table = np.load("tables/times_table.npy")
cz_table = np.load("tables/cz_table.npy")
except IOError:
print "Precomputed tables not found, try running `python make_tables.py`"


if __name__ == "__main__":
unitaries = get_unitaries(decompositions)
conjugation_table = get_conjugation_table(unitaries)
times_table = get_times_table(unitaries)
cz_table = get_cz_table(unitaries)
@@ -104,4 +114,4 @@ if __name__ == '__main__':
np.save("tables/unitaries.npy", unitaries)
np.save("tables/conjugation_table.npy", conjugation_table)
np.save("tables/times_table.npy", times_table)
np.save("cz_table.npy", cz_table)
np.save("tables/cz_table.npy", cz_table)

Načítá se…
Zrušit
Uložit