| @@ -7,13 +7,13 @@ import clifford | |||||
| #""" Act a controlled-phase gate on two qubits """ | #""" Act a controlled-phase gate on two qubits """ | ||||
| #if g | #if g | ||||
| def remove_vop(g, vops, a, b): | |||||
| def remove_vop(g, vops, a, avoid): | |||||
| """ Reduces VOP[a] to the identity, avoiding (if possible) the use of vertex b as a swapping partner """ | """ Reduces VOP[a] to the identity, avoiding (if possible) the use of vertex b as a swapping partner """ | ||||
| free_neighbours = g[a] - {b} | |||||
| c = b if len(free_neighbours) == 0 else free_neighbours.pop() | |||||
| d = clifford.decompositions[a] | |||||
| other_neighbours = g[a] - {avoid} | |||||
| c = avoid if len(other_neighbours) == 0 else other_neighbours.pop() | |||||
| d = clifford.decompositions[vops[a]] | |||||
| for v in reversed(d): | for v in reversed(d): | ||||
| target = a if v == clifford.by_name["msqx"] else b | |||||
| target = a if v == "x" else c | |||||
| local_complementation(g, vops, target) | local_complementation(g, vops, target) | ||||
| @@ -28,7 +28,6 @@ def local_complementation(g, vops, v): | |||||
| vops[i] = clifford.times_table[vops[i]][clifford.by_name["msqz"]] | vops[i] = clifford.times_table[vops[i]][clifford.by_name["msqz"]] | ||||
| if __name__ == '__main__': | if __name__ == '__main__': | ||||
| g, vops = graph() | g, vops = graph() | ||||
| add_edge(g, 0, 1) | add_edge(g, 0, 1) | ||||
| @@ -38,5 +37,5 @@ if __name__ == '__main__': | |||||
| add_edge(g, 6, 7) | add_edge(g, 6, 7) | ||||
| pos = viz.draw(g, vops, "out.pdf") | pos = viz.draw(g, vops, "out.pdf") | ||||
| local_complementation(g, vops, 0) | |||||
| remove_vop(g, vops, 0, 1) | |||||
| viz.draw(g, vops, "out2.pdf", pos) | viz.draw(g, vops, "out2.pdf", pos) | ||||