def Zcorrections(self):
'''Qubits on which to apply Z operator to fix the X stabilizer.'''
L = self.L
graph = self.Xwgraph()
matches = {tuple(sorted(_)) for _ in
nx.max_weight_matching(graph, maxcardinality=True).items()}
qubits = set()
for (y1, x1), (y2, x2) in matches:
ym, yM = 2*min(y1, y2), 2*max(y1, y2)
if yM-ym > L:
ym, yM = yM, ym+2*L
horizontal = yM if (x2-x1)*(y2-y1)<0 else ym
else:
horizontal = ym if (x2-x1)*(y2-y1)<0 else yM
xm, xM = min(x1, x2), max(x1, x2)
if xM-xm > L/2:
xm, xM = xM, xm+L
vertical = xM
else:
vertical = xm
qubits.update((horizontal%(2*L), _%L) for _ in range(xm, xM))
qubits.update(((_+1)%(2*L), vertical%L) for _ in range(ym, yM, 2))
return matches, qubits
评论列表
文章目录