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()
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")
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])
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()
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])
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")