示例#1
0
def Deutche_Jova(func, num_sim=1000):
    psi0 = np.array(list(basis(6, 0) * basis(6, 0).dag()))[:, 0]
    # psi0= np.array(list(basis(6,0)*basis(6,0).dag()+basis(6,1)*basis(6,0).dag()+basis(6,0)*basis(6,1).dag()+basis(6,1)*basis(6,1).dag()))[:,0]/2

    # define hamiltonian
    db = double_dot_hamiltonian(18.4e9, 19.7e9, 850e9, 840e9, 0.250e9)
    # # # J = 6MHZ @ epsilon 835e9, t = 210e6
    chargingE = 850e9 * np.pi * 2
    detuningE = 828.6e9 * np.pi * 2
    if num_sim > 1:
        db = noise.add_nuclear_and_charge_noise(db)

        db.number_of_sim_for_static_noise(num_sim)

    db.mw_pulse(18.4e9, 0, 2e6, 50e-9, 175e-9)
    db.mw_pulse(19.7e9, np.pi, 2e6, 50e-9, 175e-9)

    if func == 'Iden':
        phase_qb1 = 0
        phase_qb2 = 0
        extra_time = 0e-9
    if func == 'NOT':
        db.mw_pulse(19.7e9, -np.pi / 2, 2e6, 175e-9, 425e-9)
        phase_qb1 = 0
        phase_qb2 = 0
        extra_time = 50e-9

    if func == 'CNOT':
        a = 35e-9
        db.mw_pulse(19.7e9, np.pi, 2e6, 175e-9, 300e-9)
        db.awg_pulse(detuningE / np.pi / 2, 310e-9, 360e-9 + a, 1e-9)
        db.mw_pulse(19.7e9, -np.pi / 2, 2e6, 405e-9, 530e-9)
        phase_qb1 = -np.pi / 2
        phase_qb2 = -np.pi / 2
        extra_time = 155e-9

    if func == 'CNOT_low':
        a = 35e-9
        db.mw_pulse(19.7e9, 0, 2e6, 175e-9, 300e-9)
        db.awg_pulse(detuningE / np.pi / 2, 310e-9, 360e-9 + a, 1e-9)
        db.mw_pulse(19.7e9, -np.pi / 2, 2e6, 405e-9, 530e-9)
        phase_qb1 = np.pi / 2
        phase_qb2 = np.pi / 2
        extra_time = 155e-9

    db.mw_pulse(18.4e9, np.pi + phase_qb1, 2e6, 375e-9 + extra_time,
                500e-9 + extra_time)
    db.mw_pulse(19.7e9, 0 + phase_qb2, 2e6, 375e-9 + extra_time,
                500e-9 + extra_time)

    db.calc_time_evolution(psi0, 0e-9, 700e-9, 70000)

    db.save_pop("./../DJ_DATA/NORMAL/pop_" + func + ".txt")

    if num_sim < 1:
        db.plot_pop()
        plt.show()
示例#2
0
def grovers(state, show=False, samples=1):
    if state == "00":
        phaseQ1 = np.pi / 2
        phaseQ2 = np.pi / 2
        file = "Grovers/Grovers1_data.txt"
    elif state == "01":
        phaseQ1 = np.pi / 2
        phaseQ2 = -np.pi / 2
        file = "Grovers/Grovers2_data.txt"
    elif state == "10":
        phaseQ1 = -np.pi / 2
        phaseQ2 = np.pi / 2
        file = "Grovers/Grovers3_data.txt"

    elif state == "11":
        phaseQ1 = -np.pi / 2
        phaseQ2 = -np.pi / 2
        file = "Grovers/Grovers4_data.txt"

    psi0 = np.array(list(basis(6, 0) * basis(6, 0).dag()))[:, 0]
    # define hamiltonian
    db = double_dot_hamiltonian(19.7e9, 18.4e9, 850e9, 840e9, 0.250e9)
    # # # J = 6MHZ @ epsilon 835e9, t = 210e6
    chargingE = 850e9 * np.pi * 2
    detuningE = 828.6e9 * np.pi * 2
    if samples > 1:
        db = noise.add_nuclear_and_charge_noise(db)
        db.number_of_sim_for_static_noise(samples)

    db.mw_pulse(18.4e9, np.pi / 2, 2e6, 100e-9, 225e-9)
    db.mw_pulse(19.7e9, np.pi / 2, 2e6, 100e-9, 225e-9)

    a = 35e-9

    db.awg_pulse(detuningE / np.pi / 2, 225e-9, 275e-9 + a, 1e-9)

    db.mw_pulse(19.7e9, np.pi / 2 + phaseQ1, 2e6, 325e-9, 450e-9)
    db.mw_pulse(18.4e9, np.pi / 2 + phaseQ2, 2e6, 325e-9, 450e-9)

    db.awg_pulse(detuningE / np.pi / 2, 451e-9, 501e-9 + a, 1e-9)
    db.mw_pulse(19.7e9, np.pi + phaseQ1, 2e6, 550e-9 + 10e-9, 675e-9 + 10e-9)
    db.mw_pulse(18.4e9, np.pi + phaseQ2, 2e6, 550e-9 + 10e-9, 675e-9 + 10e-9)

    db.calc_time_evolution(psi0, 0e-9, 700e-9, 70000)
    # db.plot_expect()
    # db.plot_pop()
    # plt.show()
    db.save_pop("./../GROVERS_DATA/NORMAL/pop" + state + ".txt")
示例#3
0
def expected_value(t, T2_electric, right_qubit=True, num_sim=500):
    psi0 = np.array(list(basis(6, 0) * basis(6, 0).dag()))[:, 0]
    # define hamiltonian
    db = double_dot_hamiltonian(19.7e9, 18.4e9, 850e9, 840e9, 0.250e9)
    # # # J = 6MHZ @ epsilon 835e9, t = 210e6
    chargingE = 850e9 * np.pi * 2
    detuningE = 828.6e9 * np.pi * 2

    t /= 2
    db = noise.add_nuclear_and_charge_noise(db)

    db.number_of_sim_for_static_noise(num_sim)

    if right_qubit == True:
        db.mw_pulse(19.7e9, 0, 2e6, 0e-9, 125e-9)
    else:
        db.mw_pulse(18.4e9, 0, 2e6, 0e-9, 125e-9)

    db.awg_pulse(detuningE / np.pi / 2, 125e-9, 125e-9 + t, 1e-9)

    db.mw_pulse(19.7e9, 0, 2e6, 125e-9 + t, 375e-9 + t)
    db.mw_pulse(18.4e9, 0, 2e6, 125e-9 + t, 375e-9 + t)

    db.awg_pulse(detuningE / np.pi / 2, 375e-9 + t, 375e-9 + 2 * t, 1e-9)

    if right_qubit == True:
        db.mw_pulse(19.7e9, 0, 2e6, 375e-9 + 2 * t, 500e-9 + 2 * t)
    else:
        db.mw_pulse(18.4e9, 0, 2e6, 375e-9 + 2 * t, 500e-9 + 2 * t)

    db.calc_time_evolution(psi0, 0e-9, 500e-9 + 2 * t,
                           int((500e-9 + 2 * t) * 1e9 * 100))
    # db.plot_pop()
    # plt.show()
    # # raise

    rho = db.get_density_matrix_final()
    db.clear()
    pop_00 = np.real(rho[0, 0])
    pop_01 = np.real(rho[1, 1])
    pop_10 = np.real(rho[2, 2])
    pop_11 = np.real(rho[3, 3])

    return np.array([pop_00, pop_01, pop_10, pop_11])
示例#4
0
def genertate_bell_state(state, noise, tc, dec):
    '''
	state [int]:
		0 : |00> + |11>
		1 : |00> - |11>
		2 : |01> - |10>
		3 : |01> + |10>
	noise [boolean]:
		add noise to the exp
	tc [boolean]:
		turn tunnelcoupling completely off when you do single qubit gates
	dec [boolean]: # not yet implemented.
		enable decoupled gate
	'''

    # Start in |00>
    psi0 = np.array(list(basis(6, 0) * basis(6, 0).dag()))[:, 0]

    # define hamiltonian
    if tc == True:
        db = double_dot_hamiltonian(19.7e9, 18.4e9, 850e9, 840e9, 0 * 0.250e9)
    else:
        db = double_dot_hamiltonian(19.7e9, 18.4e9, 850e9, 840e9, 0.250e9)

    # # # J = ~6MHZ @ epsilon 835e9, t = 210e6 // note a bit of assymetry, so you will get a tiny bit of phase
    chargingE = 850e9 * np.pi * 2
    detuningE = 828.6e9 * np.pi * 2

    # Number of simulation to average.
    num_sim = 500
    if noise == True:
        db = my_noise.add_nuclear_and_charge_noise(db)
        db.number_of_sim_for_static_noise(num_sim)

    # Do MW on both qubits.
    if state == 0 or state == 3:
        db.mw_pulse(19.7e9, np.pi / 2, 2e6, 0e-9, 125e-9)
    else:
        db.mw_pulse(19.7e9, -np.pi / 2, 2e6, 0e-9, 125e-9)

    db.mw_pulse(18.4e9, np.pi / 2, 2e6, 0e-9, 125e-9)

    # If decoupled is used
    if dec == True:

        # implement tunnel coupling pulse.
        if tc == True:
            a = 49e-9
        else:
            a = 40e-9
        db.awg_pulse(detuningE / np.pi / 2, 125e-9, 125e-9 + a, 1e-9)
        if tc == True:
            db.awg_pulse_tc(0.25e9, 123e-9, 127e-9 + a, 0.05e-9)

        db.mw_pulse(18.4e9, 0, 2e6, 200e-9, 450e-9)
        db.mw_pulse(19.7e9, 0, 2e6, 200e-9, 450e-9)
        db.awg_pulse(detuningE / np.pi / 2, 450e-9, 450e-9 + a, 1e-9)
        if tc == True:
            db.awg_pulse_tc(0.25e9, 448e-9, 452e-9 + a, 0.05e-9)

        if state == 1 or state == 3:
            db.mw_pulse(19.7e9, 0, 2e6, 500e-9, 625e-9)
        else:
            db.mw_pulse(19.7e9, np.pi, 2e6, 500e-9, 625e-9)

        db.calc_time_evolution(psi0, 0e-9, 625e-9, int((625e-9) * 1e9 * 100))

    else:
        if tc == True:
            a = 91e-9
        else:
            a = 85e-9
        db.awg_pulse(detuningE / np.pi / 2, 130e-9, 130e-9 + a, 1e-9)
        if tc == True:
            db.awg_pulse_tc(0.25e9, 125e-9, 135e-9 + a, 0.05e-9)

        if state == 1 or state == 3:
            db.mw_pulse(19.7e9, 0, 2e6, 235e-9, 360e-9)
        else:
            db.mw_pulse(19.7e9, np.pi, 2e6, 235e-9, 360e-9)

        db.calc_time_evolution(psi0, 0e-9, 365e-9, int((625e-9) * 1e9 * 100))

    rho = db.get_density_matrix_final()[:4, :4]
    rho_full = db.get_density_matrix_final()

    C = calc_concurrence(rho)
    bell_states = ['00', '01', '11', '10']
    Bell = bell_state(bell_states[state])
    Bell.dims = [[4], [1]]

    F = (Bell.dag() * Qobj(rho) * Bell)[0, 0]

    fig, ax = hinton(rho, ['00', '01', '10', '11'], ['00', '01', '10', '11'])
    plt.savefig('Bell_' + str(state) + '_hinton_dec_' + str(dec) + '_noise_' +
                str(noise) + "_tc_" + str(tc) + '.png')
    fig, ax = matrix_histogram(rho, ['00', '01', '10', '11'],
                               ['00', '01', '10', '11'])
    plt.savefig('Bell_' + str(state) + '_hist_dec_' + str(dec) + '_noise_' +
                str(noise) + "_tc_" + str(tc) + '.png')
    np.savetxt('Bell_' + str(state) + "_dec_" + str(dec) + '_noise_' +
               str(noise) + '_tc_' + str(tc) + '_DM.txt',
               rho_full,
               header='density matrix data, 00,01,10,11,0S,S0')
    np.savetxt('Bell_' + str(state) + "_dec_" + str(dec) + '_noise_' +
               str(noise) + '_tc_' + str(tc) + '_FID.txt',
               np.array([F, C]),
               header='State overlap -- Concurrence')
    db.clear()
def grovers(state, show=False, samples=1):
    if state == "00":
        phaseQ1 = np.pi
        phaseQ2 = np.pi
        file = "Grovers/Grovers1_data.txt"
    elif state == "01":
        phaseQ1 = 0
        phaseQ2 = np.pi
        file = "Grovers/Grovers2_data.txt"
    elif state == "10":
        phaseQ1 = np.pi
        phaseQ2 = 0
        file = "Grovers/Grovers3_data.txt"

    elif state == "11":
        phaseQ1 = 0
        phaseQ2 = 0
        file = "Grovers/Grovers4_data.txt"

    psi0 = np.array(list(basis(6, 0) * basis(6, 0).dag()))[:, 0]

    # # define hamiltonian
    db = double_dot_hamiltonian(18.4e9, 19.7e9, 850e9, 840e9, 0.250e9)
    # # # J = 6MHZ @ epsilon 835e9, t = 210e6
    chargingE = 850e9 * np.pi * 2
    detuningE = 828.6e9 * np.pi * 2
    if samples > 1:
        db = noise.add_nuclear_and_charge_noise(db)

        db.number_of_sim_for_static_noise(samples)

    # YY
    db.mw_pulse(18.4e9, np.pi / 2, 2.5e6, 100e-9, 199e-9)
    db.mw_pulse(19.7e9, np.pi / 2, 2.5e6, 100e-9, 199e-9)

    a = 40e-9

    # CPHASE
    db.awg_pulse(detuningE / np.pi / 2, 200e-9, 200e-9 + a, 1e-9)
    db.mw_pulse(18.4e9, 0, 2.5e6, 250e-9, 449e-9)
    db.mw_pulse(19.7e9, 0, 2.5e6, 250e-9, 449e-9)
    db.awg_pulse(detuningE / np.pi / 2, 450e-9, 450e-9 + a, 1e-9)

    # YY
    db.mw_pulse(18.4e9, np.pi + phaseQ1, 2.5e6, 500e-9, 599e-9)
    db.mw_pulse(19.7e9, np.pi + phaseQ2, 2.5e6, 500e-9, 599e-9)

    # CPHASE
    db.awg_pulse(detuningE / np.pi / 2, 600e-9, 600e-9 + a, 1e-9)
    db.mw_pulse(18.4e9, np.pi / 2, 2.5e6, 650e-9, 849e-9)
    db.mw_pulse(19.7e9, np.pi / 2, 2.5e6, 650e-9, 849e-9)
    db.awg_pulse(detuningE / np.pi / 2, 850e-9, 850e-9 + a, 1e-9)

    # YY
    db.mw_pulse(18.4e9, -np.pi / 2 + phaseQ2, 2.5e6, 900e-9, 999e-9)
    db.mw_pulse(19.7e9, -np.pi / 2 + phaseQ1, 2.5e6, 900e-9, 999e-9)

    db.calc_time_evolution(psi0, 0e-9, 1000e-9, 100000)

    db.save_pop("./../GROVERS_DATA/DEC_SINGLE_X/pop" + state + "_single.txt")
    # db.save_purities("Grovers/pur" + state)
    # plt.figure(1)

    if show == True:
        db.plot_expect()
        db.plot_pop()
        plt.show()
示例#6
0
import sys
sys.path.append('./../../')
sys.path.append('./../')
from c_solver.double_dot_sim_class import *
import c_solver.ME_solver as me
import set_noise as noise
import numpy as np

psi0 = np.array(list(basis(6, 0) * basis(6, 0).dag()))[:, 0]
db = double_dot_hamiltonian(18.4e9, 19.7e9, 850e9, 840e9, 0 * 0.250e9)
db = noise.add_nuclear_and_charge_noise(db)
db.number_of_sim_for_static_noise(5000)

db.mw_pulse(19.7e9, 0, 2e6, 0e-9, 250e-9)
db.calc_time_evolution(psi0, 0e-9, 250e-9, 25000)

rho = np.diagonal(db.get_density_matrix_final()[:4, :4])
print(rho)

DM1 = db.get_unitary()
np.savetxt('DM1.txt', DM1)

psi0 = np.array(list(basis(6, 0) * basis(6, 0).dag()))[:, 0]
db = double_dot_hamiltonian(18.4e9, 19.7e9, 850e9, 840e9, 0.250e9)
db = noise.add_nuclear_and_charge_noise(db)
db.number_of_sim_for_static_noise(5000)

db.mw_pulse(18.4e9, 0, 2e6, 0e-9, 250e-9)
db.calc_time_evolution(psi0, 0e-9, 250e-9, 25000)

rho = np.diagonal(db.get_density_matrix_final()[:4, :4])
示例#7
0
def Deutche_Jova(func, num_sim=1000):

    psi0 = np.array(list(basis(6, 0) * basis(6, 0).dag()))[:, 0]
    # define hamiltonian
    db = double_dot_hamiltonian(19.7e9, 18.4e9, 850e9, 840e9, 0.250e9)
    # # # J = 6MHZ @ epsilon 835e9, t = 210e6
    chargingE = 850e9 * np.pi * 2
    detuningE = 828.6e9 * np.pi * 2

    if num_sim > 1:
        db = noise.add_nuclear_and_charge_noise(db)
        db.number_of_sim_for_static_noise(num_sim)

    db.mw_pulse(18.4e9, 0, 2e6, 50e-9, 175e-9)
    db.mw_pulse(19.7e9, np.pi, 2e6, 50e-9, 175e-9)

    if func == 'Iden':
        db.mw_pulse(18.4e9, 0, 2e6, 175e-9, 675e-9)
        db.mw_pulse(19.7e9, 0, 2e6, 175e-9, 675e-9)
        phase_qb1 = 0
        phase_qb2 = 0
        extra_time = 325e-9
    if func == 'NOT':
        db.mw_pulse(19.7e9, np.pi / 2, 2e6, 175e-9, 425e-9)

        phase_qb1 = 0
        phase_qb2 = 0
        extra_time = 75e-9

    if func == 'CNOT':
        a = 40e-9
        db.mw_pulse(19.7e9, 0, 2e6, 175e-9, 300e-9)

        db.mw_pulse(18.4e9, 0, 2e6, 300e-9, 550e-9)
        db.mw_pulse(19.7e9, 0, 2e6, 300e-9, 550e-9)
        db.awg_pulse(detuningE / np.pi / 2, 550e-9, 550e-9 + a, 1e-9)
        db.mw_pulse(18.4e9, 0, 2e6, 600e-9, 850e-9)
        db.mw_pulse(19.7e9, 0, 2e6, 600e-9, 850e-9)
        db.awg_pulse(detuningE / np.pi / 2, 850e-9, 850e-9 + a, 1e-9)

        db.mw_pulse(19.7e9, np.pi / 2, 2e6, 900e-9, 1025e-9)
        phase_qb1 = np.pi / 2
        phase_qb2 = -np.pi / 2
        extra_time = 675e-9

    if func == 'CNOT_low':
        a = 40e-9

        db.mw_pulse(19.7e9, np.pi, 2e6, 175e-9, 300e-9)

        db.mw_pulse(18.4e9, 0, 2e6, 300e-9, 550e-9)
        db.mw_pulse(19.7e9, 0, 2e6, 300e-9, 550e-9)
        db.awg_pulse(detuningE / np.pi / 2, 550e-9, 550e-9 + a, 1e-9)
        db.mw_pulse(18.4e9, 0, 2e6, 600e-9, 850e-9)
        db.mw_pulse(19.7e9, 0, 2e6, 600e-9, 850e-9)
        db.awg_pulse(detuningE / np.pi / 2, 850e-9, 850e-9 + a, 1e-9)

        db.mw_pulse(19.7e9, np.pi / 2, 2e6, 900e-9, 1025e-9)

        phase_qb1 = -np.pi / 2
        phase_qb2 = np.pi / 2
        extra_time = 675e-9

    db.mw_pulse(18.4e9, np.pi + phase_qb1, 2e6, 350e-9 + extra_time,
                475e-9 + extra_time)
    db.mw_pulse(19.7e9, 0 + phase_qb2, 2e6, 350e-9 + extra_time,
                475e-9 + extra_time)

    db.calc_time_evolution(psi0, 0e-9, 475e-9 + extra_time,
                           int((475e-9 + extra_time) * 1e9 * 100))
    if num_sim == 1:
        db.plot_expect()
        db.plot_pop()

        plt.show()

    db.save_pop("./../DJ_DATA/DEC_DOUBLE_X/pop_" + func + "_DOUBLE_X.txt")