| @@ -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) | s2 = commuters if c2 in commuters else xrange(24) | ||||
| # Find a match | # Find a match | ||||
| options = set() # TODO: remove and put in a test | |||||
| for bondp, c1p, c2p in it.product([0, 1], s1, s2): | for bondp, c1p, c2p in it.product([0, 1], s1, s2): | ||||
| if np.allclose(target, state_table[bondp, c1p, c2p]): | 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 | # Didn't find anything - this should never happen | ||||
| # raise IndexError | |||||
| raise IndexError | |||||
| def compose_u(decomposition): | def compose_u(decomposition): | ||||
| @@ -129,7 +119,7 @@ def get_cz_table(unitaries): | |||||
| rows = list( | rows = list( | ||||
| it.product([0, 1], it.combinations_with_replacement(range(24), 2))) | it.product([0, 1], it.combinations_with_replacement(range(24), 2))) | ||||
| # CZ is symmetric so we only need combinations | # 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( | newbond, c1p, c2p = find_cz( | ||||
| bond, c1, c2, commuters, state_table, ab_cz_table) | bond, c1, c2, commuters, state_table, ab_cz_table) | ||||
| cz_table[bond, c1, c2] = [newbond, c1p, c2p] | cz_table[bond, c1, c2] = [newbond, c1p, c2p] | ||||