예제 #1
0
def get_pqurec(state, post_state, p0, theta, niter, dim):
    """
   to get pure quantum state 
   Eqs. (16,17) in the main text
   >>>             (P+ - P- + 2P1)
       Re[psi]_n = ---------------   (16)
                   psi_til(1+delta_n) 

   >>>                PL - PR
       Im[psi]_n = ---------------   (17)
                   psi_til(1+deta_n)
   """

    #p0 = abs(sum(state))**2/dim
    niter = int(niter * p0 / 3.)
    temp_rs = np.zeros((niter, 6, dim))
    psi_til = abs(np.sum(dotx(post_state, state)))
    prob = get_prob(state, post_state, theta, dim)

    for i in range(niter):
        temp_rs[i, :, :] = get_bisection(state, prob, dim)

    ave_rs = np.zeros((6, dim))
    for i in range(6):
        for j in range(dim):
            ave_rs[i, j] = cdf(temp_rs[:, i, j])

    rtemp = np.zeros(dim)
    itemp = np.zeros(dim)
    rnorm = 0.0
    for i in range(dim):
        rtemp[i] = (ave_rs[2,i]-ave_rs[3,i]+2*ave_rs[1,i])/\
                   (psi_til*post_state[0,i])
        itemp[i] = (ave_rs[4,i]-ave_rs[5,i])/\
                   (psi_til*post_state[0,i])
        rnorm += rtemp[i]**2 + itemp[i]**2

    rtemp /= sqrt(rnorm)
    itemp /= sqrt(rnorm)

    restate = np.zeros((dim, dim), dtype=complex)
    for i in range(dim):
        for j in range(dim):
            restate[i,j] = (rtemp[i]+1j*itemp[i])*\
                        (rtemp[j]-1j*itemp[j])
    return restate
예제 #2
0
def get_rho10(state, prob, niter, dim):
    # to calculate rho10
    # just for mixed state

    N = np.int(niter / 2)  #we just meas. 2 bases {+,-} and {L,R}
    rho10 = np.zeros((dim, dim), dtype=complex)
    temp_rs = np.zeros((N, 4, dim, dim))

    for i in range(N):
        temp_rs[i, :, :, :] = get_bisection(state, prob, dim)

    ave_rs = np.zeros((4, dim, dim))
    for i in range(4):
        for j in range(dim):
            for k in range(dim):
                ave_rs[i, j, k] = cdf(temp_rs[:, i, j, k])
    for x in range(dim):
        for p in range(dim):
            rho10[x,p] = 1/2.0*(ave_rs[0,x,p]-ave_rs[1,x,p]+\
                            1j*(ave_rs[2,x,p]-ave_rs[3,x,p]))
    return rho10
예제 #3
0
def get_rho10_rho11(state, prob, niter, dim):
    # to calculate rho10 and rho11
    # just for mixed state

    N = np.int(niter / 3)
    rho10 = np.zeros((dim, dim), dtype=complex)
    rho11 = np.zeros((dim, dim), dtype=complex)
    temp_rs = np.zeros((N, 5, dim, dim))

    for i in range(N):
        temp_rs[i, :, :, :] = get_bisection(state, prob, dim)

    ave_rs = np.zeros((5, dim, dim))
    for i in range(5):
        for j in range(dim):
            for k in range(dim):
                ave_rs[i, j, k] = cdf(temp_rs[:, i, j, k])
    for x in range(dim):
        for p in range(dim):
            rho10[x,p] = 1/2.0*(ave_rs[0,x,p]-ave_rs[1,x,p]+\
                            1j*(ave_rs[2,x,p]-ave_rs[3,x,p]))
            rho11[x, p] = ave_rs[4, x, p]
    return rho10, rho11
예제 #4
0
def get_pqurec(state, theta, niter, prob, dim):
    # to get pure quantum state

    sin_tt = sin(pi * theta)
    rpsi = np.real(state)
    ipsi = np.imag(state)
    psit = sqrt(sum(rpsi)**2 + sum(ipsi)**2)
    p0 = (sum(rpsi)**2 + sum(ipsi)**2) / dim

    N = np.int(niter * p0 / 3)
    temp_rs = np.zeros((N, 5, dim))

    for i in range(N):
        temp_rs[i, :, :] = get_bisection(state, prob, dim)

    ave_rs = np.zeros((5, dim))
    for i in range(5):
        for j in range(dim):
            ave_rs[i, j] = cdf(temp_rs[:, i, j])

    rtemp = np.zeros(dim)
    itemp = np.zeros(dim)
    rnorm = 0.0
    for i in range(dim):
        rtemp[i] = (ave_rs[0,i]-ave_rs[1,i]+2.0*tan(pi*theta/2.0)*\
               ave_rs[4,i])*dim/(2*psit*sin_tt)
        itemp[i] = (ave_rs[2, i] - ave_rs[3, i]) * dim / (2 * psit * sin_tt)
        rnorm += rtemp[i]**2 + itemp[i]**2
    rtemp /= sqrt(rnorm)
    itemp /= sqrt(rnorm)

    restate = np.zeros((dim, dim), dtype=complex)
    for i in range(dim):
        for j in range(dim):
            restate[i,j] = (rtemp[i]+1j*itemp[i])*\
                        (rtemp[j]-1j*itemp[j])
    return restate
예제 #5
0
def get_rho(state, prob, niter, dim):
    # to calculate rho10
    # just for mixed state

    N = np.int(niter / 3)  #we measure 3 bases {+,-}, {L,R}, {0,1}
    rho = np.zeros((2, dim, dim), dtype=complex)
    temp_rs = np.zeros((N, 6, dim, dim))

    for i in range(N):
        temp_rs[i, :, :, :] = get_bisection(state, prob, dim)

    ave_rs = np.zeros((6, dim, dim))
    for i in range(6):
        for j in range(dim):
            for k in range(dim):
                ave_rs[i, j, k] = cdf(temp_rs[:, i, j, k])
    for x in range(dim):
        for p in range(dim):
            #rho10
            rho[0,x,p] = 1/2.0*(ave_rs[0,x,p]-ave_rs[1,x,p]+\
                     1j*(ave_rs[2,x,p]-ave_rs[3,x,p]))
            #rho11
            rho[1, x, p] = ave_rs[5, x, p]
    return rho