Esempio n. 1
0
def single_purification(rho0, rho1):

    CCZZ = (
        kr(dens(d00), iden(4))
        + kr(dens(d01), kr(iden(2), Z))
        + kr(dens(d10), kr(Z, iden(2)))
        + kr(dens(d11), ZZ)
    )

    # Joint state of rho0 and rho1
    rho = kr(rho0, rho1)

    # Apply bilateral CNOT gate
    CXrho = gaterho(CCZZ, rho)

    # Get chances of ma = mb
    p0 = kr(iden(4), dpp)
    p1 = kr(iden(4), dmm)
    check0 = meas(dens(p0), CXrho)
    check1 = meas(dens(p1), CXrho)

    # Get post measurement state
    rhoPost = check0 * (her(p0) @ CXrho @ p0) + check1 * (her(p1) @ CXrho @ p1)

    # normalize state, find Fidelity
    (rhoPostn, F) = reconwerner(rhoPost)

    # Perform Hadamard
    rhopure = gaterho(kr(H, H), rhoPostn)

    return (rhopure, F)
Esempio n. 2
0
def cpcxz(a, b, c, d):
    phi = cpair(a, b, c, d)
    if a == 1:
        Ax = X
    elif a == 0:
        Ax = iden(2)
    else:
        print("Input must be 0 or 1")

    if b == 1:
        Bx = X
    elif b == 0:
        Bx = iden(2)
    else:
        print("Input must be 0 or 1")

    if c == 1:
        Cz = Z
    elif c == 0:
        Cz = iden(2)
    else:
        print("Input must be 0 or 1")

    if d == 1:
        Dz = Z
    elif d == 0:
        Dz = iden(2)
    else:
        print("Input must be 0 or 1")

    CM = kr(Ax, Bx) @ kr(Cz, Dz)
    Cv = kr(phi, CM)
    return Cv
Esempio n. 3
0
def cpair(a, b, c, d):
    D = {}
    D[0] = s0
    D[1] = s1
    D[2] = sp
    D[3] = sm
    D["p"] = sp
    D["m"] = sm
    phi = kr(kr(D[a], D[b]), kr(D[c], D[d]))
    return phi
Esempio n. 4
0
def initiate_gates():
    global X, Y, Z, H, CX, CY, CZ, XX, YY, ZZ
    X = vec("0 1; 1 0")
    Y = vec("0 -1j; 1j 0")
    Z = vec("1 0; 0 -1")
    H = (X + Z) / sqrt(2)
    CX = kr(dens(s0), iden(2)) + kr(dens(s1), X)
    CY = kr(dens(s0), iden(2)) + kr(dens(s1), Y)
    CZ = kr(dens(s0), iden(2)) + kr(dens(s1), Z)
    XX = kr(X, X)
    YY = kr(Y, Y)
    ZZ = kr(Z, Z)
Esempio n. 5
0
def initiate_vects():
    global s0, s1, sp, sm, d00, d01, d10, d11, dpp, dmm, Bphip, Bphim, Bpsip, Bpsim
    s0 = vec("1;0")
    s1 = vec("0;1")
    sp = (s0 + s1) / sqrt(2)
    sm = (s0 - s1) / sqrt(2)
    d00 = kr(s0, s0)
    d01 = kr(s0, s1)
    d10 = kr(s1, s0)
    d11 = kr(s1, s1)
    dpp = kr(sp, sp)
    dmm = kr(sm, sm)
    Bpsip = (d00 + d11) / sqrt(2)
    Bpsim = (d00 - d11) / sqrt(2)
    Bphip = (d01 + d10) / sqrt(2)
    Bphim = (d01 - d10) / sqrt(2)
Esempio n. 6
0
def double_purification(rho0, rho1, rho2):
    CCZZ0 = kr(
        kr(dens(d00), iden(4))
        + kr(dens(d01), kr(iden(2), Z))
        + kr(dens(d10), kr(Z, iden(2)))
        + kr(dens(d11), ZZ),
        iden(4),
    )
    CCZZ2 = kr(
        iden(4),
        kr(iden(4), dens(d00))
        + kr(kr(iden(2), Z), dens(d01))
        + kr(kr(Z, iden(2)), dens(d10))
        + kr(ZZ, dens(d11)),
    )
    # Joint state of rho0 and rho1
    rho = kr(kr(rho0, rho1), rho2)

    # Apply bilateral CNOT gate
    CXrho = gaterho(CCZZ0, rho)
    CXCXrho = gaterho(CCZZ2, CXrho)

    # Get chances of ma = mb

    p0 = kr(kr(iden(4), dpp), dpp)
    p1 = kr(kr(iden(4), dpp), dmm)
    p2 = kr(kr(iden(4), dmm), dpp)
    p3 = kr(kr(iden(4), dmm), dmm)
    check0 = meas(dens(p0), CXCXrho)
    check1 = meas(dens(p1), CXCXrho)
    check2 = meas(dens(p2), CXCXrho)
    check3 = meas(dens(p3), CXCXrho)

    # Get post measurement state
    rhoPost = (
        check0 * (her(p0) @ CXCXrho @ p0)
        + check1 * (her(p1) @ CXCXrho @ p1)
        + check2 * (her(p2) @ CXCXrho @ p2)
        + check3 * (her(p3) @ CXCXrho @ p3)
    )

    # normalize state, find Fidelity
    (rhoPostn, F) = reconwerner(rhoPost)

    # Perform Hadamard
    rhopure = gaterho(kr(H, H), rhoPostn)

    return (rhopure, F)
Esempio n. 7
0
    )
    return (reconrho, nbase[0])


initiate_vects()
initiate_gates()

F = 0.6
rhoW = wernerrho(F)

#####################################################
# Parity projection with a shared ancilla
parity_ancilla = False
if parity_ancilla:
    rhoAB = rhoW
    MXZ = (kr(d00, iden(4)) + kr(d01, ZZ) + kr(d10, XX) + kr(d11, XX @ ZZ)) / 2
    rhoABXZ = MXZ @ rhoAB @ MXZ.T

    Mh0 = dens(kr(kr(sp, sp), iden(4)))

    check_ancilla = meas(Mh0, rhoABXZ)
    print(check_ancilla)


#####################################################
# Parity projection with a shared entangled pair
parity_pair = False
if parity_pair:
    PrhoAB = rhoW
    PMXZ = (
        cpcxz(0, 0, 0, 0) + cpcxz(0, 0, 1, 1) + cpcxz(1, 1, 0, 0) + cpcxz(1, 1, 1, 1)