Beispiel #1
0
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
Beispiel #3
0
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
Beispiel #6
0
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)
Beispiel #7
0
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)