def test(nphotons, nmodes, accelerate, explicit, mode='quantum'): '''test the simulator''' # build a basis, device and simulator basis=lo.basis(nphotons, nmodes) device=lo.random_unitary(basis.nmodes) simulator=lo.simulator(basis, device) simulator.configure_perm(accelerate, explicit) mode='quantum' if not mode else 'classical' simulator.set_mode(mode) # put photons in the top modes state=basis.get_state(['m'] + range(basis.nphotons)) #print str(state).strip() simulator.set_input_state(state) # how long does it take to work over the full hilbert space t=clock() for i in range(basis.hilbert_space_dimension): simulator.get_probability(i) util.progress_bar(i/float(basis.hilbert_space_dimension-1)) hilbert_space_time=clock()-t return hilbert_space_time
def new_sample(device): #phases=[0,pi,0,0,0,0,0,0] #phases=[pi,pi,0,0,0,0,0,0] phases=np.random.uniform(0,np.pi*2,8) phases[6]=0.93361981 phases[0]=np.pi counts=do_measurement(phases, ontime=2) coincidences=np.array(counts[8:12]) accidentals=np.array([counts[12], counts[17], counts[16], counts[13]]) corrected_counts=coincidences-accidentals probabilities_expt=corrected_counts/float(np.sum(corrected_counts)) print probabilities_expt '''get some simulated probabilities''' device.set_phases(phases) simulator=lo.simulator(device, nphotons=2) simulator.set_input_state([1,3]) probabilities_theory=simulator.get_probabilities(patterns=[[1,3],[1,4],[2,3],[2,4]]) sum_probs=sum(probabilities_theory) probabilities_theory=np.array(probabilities_theory)/sum_probs fidelity=statistical_fidelity(probabilities_expt, probabilities_theory) return np.sum(coincidences), np.sum(accidentals), np.sum(fidelity), phases, coincidences, accidentals
def new_sample(device): #phases=[0,pi,0,0,0,0,0,0] #phases=[pi,pi,0,0,0,0,0,0] phases = np.random.uniform(0, np.pi * 2, 8) phases[6] = 0.93361981 phases[0] = np.pi counts = do_measurement(phases, ontime=2) coincidences = np.array(counts[8:12]) accidentals = np.array([counts[12], counts[17], counts[16], counts[13]]) corrected_counts = coincidences - accidentals probabilities_expt = corrected_counts / float(np.sum(corrected_counts)) print probabilities_expt '''get some simulated probabilities''' device.set_phases(phases) simulator = lo.simulator(device, nphotons=2) simulator.set_input_state([1, 3]) probabilities_theory = simulator.get_probabilities( patterns=[[1, 3], [1, 4], [2, 3], [2, 4]]) sum_probs = sum(probabilities_theory) probabilities_theory = np.array(probabilities_theory) / sum_probs fidelity = statistical_fidelity(probabilities_expt, probabilities_theory) return np.sum(coincidences), np.sum(accidentals), np.sum( fidelity), phases, coincidences, accidentals
#data=data/np.amax(data) experiment_filename, theory_filename, param_filename, hold_table_filename = get_filenames( heater_index) file = open(hold_table_filename, "w") file.write(str(hold_table)) file.close() np.save(experiment_filename, experiment) np.save(theory_filename, theory) np.save(param_filename, parameter_space) return experiment_filename, theory_filename, param_filename start_time = timestamp() device = lo.beamsplitter_network(json='cnot_mz.json') simulator = lo.simulator(device, nphotons=2) simulator.set_input_state([1, 3]) simulator.set_visibility(0.99) dac = dac.dac() fpga = fpga() fpga.read() fpga.read() fpga.read() fpga.read() table = calibration_table() heater_index = 6 #hold_table=[[0,pi/2],[2,0], [6,pi/2]] hold_table = list(enumerate([pi, 0, 0, 0, 0, 0, 0, 0])) # Take data
# Close hardware dac.zero() # Normalize, save and return data #data=data/np.amax(data) experiment_filename, theory_filename, param_filename = get_filenames(heater_index) np.save(experiment_filename, experiment) np.save(theory_filename, theory) np.save(param_filename, parameter_space) return experiment_filename, theory_filename, param_filename start_time=timestamp() device=lo.beamsplitter_network(json='cnot_mz.json') simulator=lo.simulator(device, nphotons=2) simulator.set_input_state([1,3]) simulator.set_visibility(0.95) dac=dac.dac() fpga=fpga() fpga.read() fpga.read() fpga.read() fpga.read() table=calibration_table() heater_index = 5 #hold_table=[[0,pi/2],[2,0], [6,pi/2]] hold_table=list(enumerate([0,pi/2,0,0,0,0,0,pi/2])) # Take data
import numpy as np from qy.simulation import linear_optics as lo ''' Test our code with the CNOT-MZ ''' # Build the device and a two-photon basis, draw the device basis=lo.basis(2,2) device=lo.beamsplitter_network(json='devices/cnot_mz.json') device.draw('devices/cnot_mz.pdf') # Start a simulator simulator=lo.simulator(device, basis) # Set the input state and get some probabilities input_state=basis.get_state([1,3]) simulator.set_input_state(input_state) print 'INPUT:', input_state print 'P00', simulator.get_probability_quantum([1,3]) print 'P01', simulator.get_probability_quantum([2,3]) print 'P10', simulator.get_probability_quantum([1,4]) print 'P11', simulator.get_probability_quantum([2,4]) # Let's try a few different input states for input_modes in [[0,1], [0,0], [1,1]]: input_state=basis.get_state(input_modes) simulator.set_input_state(input_state) print '\nINPUT:', str(input_state).strip() for index, modes in basis: q=simulator.get_probability_quantum(index)
import numpy as np from qy.simulation import linear_optics as lo ''' Test our code with the CNOT-MZ ''' # Build the device and a two-photon basis, draw the device basis = lo.basis(2, 2) device = lo.beamsplitter_network(json='devices/cnot_mz.json') device.draw('devices/cnot_mz.pdf') # Start a simulator simulator = lo.simulator(device, basis) # Set the input state and get some probabilities input_state = basis.get_state([1, 3]) simulator.set_input_state(input_state) print 'INPUT:', input_state print 'P00', simulator.get_probability_quantum([1, 3]) print 'P01', simulator.get_probability_quantum([2, 3]) print 'P10', simulator.get_probability_quantum([1, 4]) print 'P11', simulator.get_probability_quantum([2, 4]) # Let's try a few different input states for input_modes in [[0, 1], [0, 0], [1, 1]]: input_state = basis.get_state(input_modes) simulator.set_input_state(input_state) print '\nINPUT:', str(input_state).strip() for index, modes in basis: q = simulator.get_probability_quantum(index) c = simulator.get_probability_classical(index)