|
|
@@ -52,22 +52,12 @@ def find_cz(bond, c1, c2, commuters, state_table, ab_cz_table): |
|
|
|
s2 = commuters if c2 in commuters else xrange(24) |
|
|
|
|
|
|
|
# Find a match |
|
|
|
options = set() # TODO: remove and put in a test |
|
|
|
for bondp, c1p, c2p in it.product([0, 1], s1, s2): |
|
|
|
if np.allclose(target, state_table[bondp, c1p, c2p]): |
|
|
|
# return bondp, c1p, c2p |
|
|
|
options.add((bondp, c1p, c2p)) |
|
|
|
|
|
|
|
# TODO fix this bull shit |
|
|
|
# assert tuple(ab_cz_table[bond, c1, c2]) in options |
|
|
|
options = sorted(options, key=lambda (a, b, c): a*10000 + b*100 + c*1) |
|
|
|
if not np.all(ab_cz_table[bond, c1, c2] == options[0]): |
|
|
|
print ab_cz_table[bond, c1, c2], options[0] |
|
|
|
|
|
|
|
return ab_cz_table[bond, c1, c2] |
|
|
|
return bondp, c1p, c2p |
|
|
|
|
|
|
|
# Didn't find anything - this should never happen |
|
|
|
# raise IndexError |
|
|
|
raise IndexError |
|
|
|
|
|
|
|
|
|
|
|
def compose_u(decomposition): |
|
|
@@ -129,7 +119,7 @@ def get_cz_table(unitaries): |
|
|
|
rows = list( |
|
|
|
it.product([0, 1], it.combinations_with_replacement(range(24), 2))) |
|
|
|
# CZ is symmetric so we only need combinations |
|
|
|
for bond, (c1, c2) in tqdm(rows, desc="Building CZ table", disable=True): |
|
|
|
for bond, (c1, c2) in tqdm(rows, desc="Building CZ table"): |
|
|
|
newbond, c1p, c2p = find_cz( |
|
|
|
bond, c1, c2, commuters, state_table, ab_cz_table) |
|
|
|
cz_table[bond, c1, c2] = [newbond, c1p, c2p] |
|
|
|