Ejemplo n.º 1
0
def main():

    a = random.uniform(0.0, 1.0)
    b = random.uniform(0.0, 1.0)
    phi = random.uniform(0.0, 1.0)
    print("a,b = {0:.4f}, {1:.4f}".format(a,b))
    print("phi = {0:.4f}".format(phi))

    print("** one-way quantum computing")

    # graph state
    qs_oneway = QState(2)
    qs_oneway.ry(0, phase=a).rz(0, phase=b)  # input state (random)
    qs_oneway.h(1)
    qs_oneway.cz(0,1)

    # measurement
    s = qs_oneway.m([0], shots=1, angle=0.5, phase=phi)

    # result state
    qs_oneway.show([1])

    print("** conventianal quantum gate")

    qs_gate = QState(1)
    qs_gate.ry(0, phase=a).rz(0, phase=b)  # input state (random)
    qs_gate.rz(0, phase=-phi).h(0)
    qs_gate.show()
Ejemplo n.º 2
0
def main():

    print("== hadamard gate ==")

    print("** one-way quantum computing")

    # graph state
    qs_oneway = QState(5)
    qs_oneway.h(1).h(2).h(3).h(4)
    qs_oneway.cz(0, 1).cz(1, 2).cz(2, 3).cz(3, 4)

    # measurement
    qs_oneway.mx([0], shots=1)
    qs_oneway.my([1], shots=1)
    qs_oneway.my([2], shots=1)
    qs_oneway.my([3], shots=1)

    # result state
    qs_oneway.show([4])

    print("** conventianal quantum gate")

    qs_gate = QState(1)
    qs_gate.h(0)
    qs_gate.show()
Ejemplo n.º 3
0
def main():

    print("== general rotation ==")

    alpha = random.uniform(0.0, 1.0)
    beta = random.uniform(0.0, 1.0)
    gamma = random.uniform(0.0, 1.0)

    print("(euler angle = {0:.4f}, {1:.4f}, {2:.4f})".format(
        alpha, beta, gamma))

    print("** one-way quantum computing")

    # graph state
    qs_oneway = QState(5)
    qs_oneway.h(1).h(2).h(3).h(4)
    qs_oneway.cz(0, 1).cz(1, 2).cz(2, 3).cz(3, 4)

    # measurement
    alpha_oneway = alpha
    beta_oneway = beta
    gamma_oneway = gamma
    s0 = qs_oneway.m([0], shots=1, angle=0.5, phase=0.0).lst
    if s0 == 1:
        alpha_oneway = -alpha_oneway
    s1 = qs_oneway.m([1], shots=1, angle=0.5, phase=alpha_oneway).lst
    if s1 == 1:
        beta_oneway = -beta_oneway
    s2 = qs_oneway.m([2], shots=1, angle=0.5, phase=beta_oneway).lst
    if (s0 + s2) % 2 == 1:
        gamma_oneway = -gamma_oneway
    s3 = qs_oneway.m([3], shots=1, angle=0.5, phase=gamma_oneway).lst

    # result state
    qs_oneway.show([4])

    print("** conventianal quantum gate")

    qs_gate = QState(1)
    qs_gate.rx(0, phase=alpha).rz(0, phase=beta).rx(0, phase=gamma)
    qs_gate.show()
Ejemplo n.º 4
0
def main():

    print("== CNOT gate ==")

    print("** one-way quantum computing")

    # graph state
    qs_oneway = QState(15)
    qs_oneway.h(0)
    qs_oneway.h(1).h(2).h(3).h(4).h(5).h(6).h(7)
    qs_oneway.h(9).h(10).h(11).h(12).h(13).h(14)
    qs_oneway.cz(0, 1).cz(1, 2).cz(2, 3).cz(3, 4).cz(4, 5).cz(5, 6)
    qs_oneway.cz(3, 7).cz(7, 11)
    qs_oneway.cz(8, 9).cz(9, 10).cz(10, 11).cz(11, 12).cz(12, 13).cz(13, 14)

    # measurement
    qs_oneway.mx([0], shots=1)
    qs_oneway.my([1], shots=1)
    qs_oneway.my([2], shots=1)
    qs_oneway.my([3], shots=1)
    qs_oneway.my([4], shots=1)
    qs_oneway.my([5], shots=1)
    qs_oneway.my([7], shots=1)
    qs_oneway.mx([8], shots=1)
    qs_oneway.mx([9], shots=1)
    qs_oneway.mx([10], shots=1)
    qs_oneway.my([11], shots=1)
    qs_oneway.mx([12], shots=1)
    qs_oneway.mx([13], shots=1)

    qs_oneway.show([6, 14])

    print("** conventianal quantum gate")

    qs_gate = QState(2)
    qs_gate.h(0)
    qs_gate.cx(0, 1)
    qs_gate.show()
Ejemplo n.º 5
0
def logical_zero():

    anc = [0, 1, 2, 3, 4, 5, 6]  # registers for ancila
    cod = [7, 8, 9, 10, 11, 12, 13]  # registers for steane code
    qs_total = QState(14)

    # g1
    qs_total.h(anc[0])
    [qs_total.cx(anc[0], anc[i]) for i in range(1, 4)]
    qs_total.cx(anc[0], cod[3]).cx(anc[1],
                                   cod[4]).cx(anc[2],
                                              cod[5]).cx(anc[3], cod[6])
    [qs_total.cx(anc[0], anc[i]) for i in range(1, 4)]
    qs_total.h(anc[0])
    mval = qs_total.m(qid=[anc[0]]).last
    if mval == '1': qs_total.z(cod[0]).z(cod[1]).z(cod[2]).z(cod[3])
    qs_total.reset(qid=anc)

    # g2
    qs_total.h(anc[0])
    [qs_total.cx(anc[0], anc[i]) for i in range(1, 4)]
    qs_total.cx(anc[0], cod[1]).cx(anc[1],
                                   cod[2]).cx(anc[2],
                                              cod[5]).cx(anc[3], cod[6])
    [qs_total.cx(anc[0], anc[i]) for i in range(1, 4)]
    qs_total.h(anc[0])
    mval = qs_total.m(qid=[anc[0]]).last
    if mval == '1': qs_total.z(cod[0]).z(cod[1]).z(cod[4]).z(cod[5])
    qs_total.reset(qid=anc)

    # g3
    qs_total.h(anc[0])
    [qs_total.cx(anc[0], anc[i]) for i in range(1, 4)]
    qs_total.cx(anc[0], cod[0]).cx(anc[1],
                                   cod[2]).cx(anc[2],
                                              cod[4]).cx(anc[3], cod[6])
    [qs_total.cx(anc[0], anc[i]) for i in range(1, 4)]
    qs_total.h(anc[0])
    mval = qs_total.m(qid=[anc[0]]).last
    if mval == '1': qs_total.z(cod[2]).z(cod[4]).z(cod[6])
    qs_total.reset(qid=anc)

    # g4
    qs_total.h(anc[0])
    [qs_total.cx(anc[0], anc[i]) for i in range(1, 4)]
    qs_total.cz(anc[0], cod[3]).cz(anc[1],
                                   cod[4]).cz(anc[2],
                                              cod[5]).cz(anc[3], cod[6])
    [qs_total.cx(anc[0], anc[i]) for i in range(1, 4)]
    qs_total.h(anc[0])
    mval = qs_total.m(qid=[anc[0]]).last
    if mval == '1': qs_total.x(cod[0]).x(cod[1]).x(cod[2]).x(cod[3])
    qs_total.reset(qid=anc)

    # g5
    qs_total.h(anc[0])
    [qs_total.cx(anc[0], anc[i]) for i in range(1, 4)]
    qs_total.cz(anc[0], cod[1]).cz(anc[1],
                                   cod[2]).cz(anc[2],
                                              cod[5]).cz(anc[3], cod[6])
    [qs_total.cx(anc[0], anc[i]) for i in range(1, 4)]
    qs_total.h(anc[0])
    mval = qs_total.m(qid=[anc[0]]).last
    if mval == '1': qs_total.x(cod[0]).x(cod[1]).x(cod[4]).x(cod[5])
    qs_total.reset(qid=anc)

    # g6
    qs_total.h(anc[0])
    [qs_total.cx(anc[0], anc[i]) for i in range(1, 4)]
    qs_total.cz(anc[0], cod[0]).cz(anc[1],
                                   cod[2]).cz(anc[2],
                                              cod[4]).cz(anc[3], cod[6])
    [qs_total.cx(anc[0], anc[i]) for i in range(1, 4)]
    qs_total.h(anc[0])
    mval = qs_total.m(qid=[anc[0]]).last
    if mval == '1': qs_total.x(cod[2]).x(cod[4]).x(cod[6])
    qs_total.reset(qid=anc)

    # g7
    qs_total.h(anc[0])
    [qs_total.cx(anc[0], anc[i]) for i in range(1, 7)]
    [qs_total.cz(anc[i], cod[i]) for i in range(7)]
    [qs_total.cx(anc[0], anc[i]) for i in range(1, 7)]
    qs_total.h(anc[0])
    mval = qs_total.m(qid=[anc[0]]).last
    if mval == '1': [qs_total.x(q) for q in cod]
    qs_total.reset(qid=anc)

    qs = qs_total.partial(qid=cod)

    return qs
Ejemplo n.º 6
0
from qlazy import QState

qs = QState(3)

# prepare qubit (id=0) that Alice want to send to Bob by rotating around X,Z
qs.ry(0, phase=0.3).rz(0, phase=0.4)

# make entangled 2 qubits (id=1 for Alice, id=2 for Bob)
qs.h(1).cx(1, 2)

# initial state (before teleportation)
print("== Alice (initial) ==")
qs.show([0])
print("== Bob (initial) ==")
qs.show([2])

# equivalent to quantum teleportation
qs.cx(0, 1).h(0)
qs.cx(1, 2)
qs.cz(0, 2)

# final state (before teleportation)
print("== Alice (final) ==")
qs.show([0])
print("== Bob (final) ==")
qs.show([2])