def test_ACStark_detailed(figNum):
    NumberOfIons = 1
    hspace = sim.hspace(NumberOfIons,2,0,0)
    params = sim.parameters(hspace)
    dec = sim.decoherence(params)

    params.progbar = False

    pulseseq = sim.PulseSequence( [ \
        sim.Rcar(params, pi/2, 0),
        sim.Rac(params, 0, 0, 0),
        sim.Rcar(params, pi/2, 0)
        ] )

    ACtime = np.linspace(0,10*pi,100)
    realtime = np.zeros_like(ACtime)

    YR = np.zeros([len(ACtime), hspace.dimensions], dtype='complex')

    for i in range(len(ACtime)):
        pulseseq[1] = sim.Rac(params, ACtime[i], 0, 0)
        realtime[i] = pulseseq[1].duration
        data = qc.simulateevolution(pulseseq, params, dec)
        YR[i,:] = data.YR[-1,:]


    data1 = sim.database(realtime, YR, hspace, statesvalid = False)
    data1.tracedpopulation(figNum)

    # start with fit here
    x = data1.T
    y = data1.YtrN.transpose()[0] # this is the s-state population

    # p[0] ... amplitude, should be 1
    # p[1] ... freq, should be params.omc
    # p[2] ... phase, should be 0
    # p[3] ... offset, should be 0

    startparams = np.array([1, params.omac, 0, 0])

    # 1-data ... to get the D-state population
    fitfun = lambda p, x: 1-p[0]*np.sin(p[1]*x/2+p[2])**2 + p[3]
    errfun = lambda p, x, y: y-fitfun(p,x)

    par, covmat, infodict, mesg, ier = leastsq(errfun, startparams, args=(x,y), full_output = True)

    epsilon = 10**-3
    if par[0] - startparams[0] > epsilon:
        print("amplitude of AC oscillations wrong")
    if par[1] - startparams[1] > epsilon:
        print("frequency of AC oscillations wrong")
    if par[2] - startparams[2] > epsilon:
        print("phase of AC oscillations wrong")
    if par[3] - startparams[3] > epsilon:
        print("offset of AC oscillations wrong")

    return np.all(par-startparams < epsilon), data1, fitfun, par, startparams
Beispiel #2
0
def cnot1234():
    return sim.PulseSequence([ \
            sim.Rcar(params, 1.5*pi, 0*pi),
            sim.Rac(params, 1.5*pi, 0, 0),
            sim.RMS(params, 0.25*pi, 0.5*pi),
            sim.Rcar(params, 0.75*pi, 0*pi),
            sim.Rac(params, 1*pi, 0, 0),
            sim.RMS(params, 1.75*pi, 0.5*pi),
            sim.Rcar(params, 0.75*pi, 0*pi),
            sim.Rac(params, 1.5*pi, 0, 0),
            sim.Rcar(params, 0.5*pi, 0*pi) ])
Beispiel #3
0
    def GeneratePulseSeq(self, params, Perms, perm2=None, perm3=None):

        #Legacy support for old-style calls:
        if perm2 and perm3:
            Perms = [Perms, perm2, perm3]
        ''' generate pulse sequences given all permutations '''\

        self.nOps = len(Perms)
        controlRots = [ \
             [sim.Delay(params, sim.Rac(params, pi/2**(i+1), 0, 0).duration),
              sim.Rac(params, pi/2**(i+1), 0, 0)]
                    for i in range(self.nOps)]

        Hadamard0 = sim.PulseSequence( [ \
                sim.Rcar(params, pi/4, pi),
                sim.Rac(params, pi, 0),
                sim.Rcar(params, pi/4, 0) ])

        def PulseSeqWithControls(ctl):
            # 'ctl' is a bit array of control qubits
            ctlstr = np.binary_repr(ctl).zfill(self.nOps - 1)
            pulseseq = sim.PulseSequence([])

            for k in range(self.nOps):
                pulseseq.append(Hadamard0)
                pulseseq.append(Perms[k])
                pulseseq += [copy.deepcopy(controlRots[i] \
                              [int(ctlstr[self.nOps-i-k-1])]) for i in range(k)]
                pulseseq.append(Hadamard0)

                if k == self.nOps - 1:
                    pulseseq += [ \
                      sim.Hide(params, 1, True),
                      sim.Hide(params, 2, True),
                      sim.MeasInit(params, 0, incl_hidingerr=False) ]
                else:
                    pulseseq += [ \
                      sim.Hide(params, 1, True),
                      sim.Hide(params, 2, True),
                      sim.MeasInit(params, 0),
                      sim.Hide(params, 1, False),
                      sim.Hide(params, 2, False) ]
            return pulseseq

        pulseseq_group = []
        for ctl in range(2**(self.nOps - 1)):
            pulseseq_group.append(PulseSeqWithControls(ctl))

        return pulseseq_group
''' pulse sequences for order-finding '''

import PyTIQC.core.simtools as sim

# order 1 - Toffoli(1,3,2) - from Volkmarizer
order1 = sim.PulseSequence( [ \
sim.Rcar(params, pi/2, pi/2),  #0
sim.Rac(params, pi/4, 0, 1),  #1
sim.RMS(params, pi/2, pi/2),   #2
sim.Rcar(params, pi/2,pi), #3
sim.Rac(params, 3*pi/2, 0, 1), #4
sim.Rcar(params, pi/4,1*pi), #5
sim.RMS(params, pi/4, pi/2), #6
sim.Rac(params, pi/2, 0, 1), #7
sim.RMS(params, pi/2, pi/2), #8
sim.Rcar(params, pi/2,0*pi), #9
sim.Rcar(params, pi/2,-pi/2) ])

# order 2 - CNOT(1,3) - from paper (IV.A first one)
order2 = sim.PulseSequence( [ \
sim.Rcar(params, pi/2, 0),
sim.Rac(params, 7*pi/2, 0, 2), # 3pi/2 in experiment
sim.RMS(params, pi/4, pi/2),
sim.Rcar(params, pi/4, 0),
sim.Rac(params, 3*pi, 0, 1),
sim.Rcar(params, pi/4, 0),
sim.RMS(params, pi/4, pi/2),
sim.Rac(params, 7*pi/2, 0, 2),
sim.Rcar(params, pi/2, 0),
sim.Rac(params, 3*pi, 0, 1) ])
Beispiel #5
0
pi = np.pi

NumberOfIons = 3
NumberOfPhonons = 7
hspace = sim.hspace(NumberOfIons, 2, NumberOfPhonons, 0)
params = sim.parameters(hspace)

params.stepsize = 100
params.printpulse = True

dec = sim.decoherence(params)

pulseseq = sim.PulseSequence( [ \
    sim.Rcar(params, pi/2, 0),
    sim.Rac(params, pi/2, 0, 0),
    sim.RMS(params, pi/4, 0),
    sim.Rcar(params, pi/4, 0),
    sim.Rac(params, pi, 0, 2),
    sim.Rcar(params, pi/4, 0),
    sim.RMS(params, pi/4, 0),
    sim.Rac(params, pi/2, 0, 0),
    sim.Rcar(params, pi/2, 0),
    sim.Rac(params, pi, 0, 2)
    ] )

#params.y0[qc.stateToIndex('DDD' + ',0', hspace)] =  0.25-0.25j
#params.y0[qc.stateToIndex('DDS' + ',0', hspace)] = -0.25-0.25j
#params.y0[qc.stateToIndex('DSD' + ',0', hspace)] = -0.25-0.25j
#params.y0[qc.stateToIndex('DSS' + ',0', hspace)] = -0.25+0.25j
#params.y0[qc.stateToIndex('SDD' + ',0', hspace)] =  0.25-0.25j
Beispiel #6
0
''' pulse sequences for (fully-quantum) QFT '''

import PyTIQC.core.simtools as sim

QFTseqP1 = sim.PulseSequence([sim.Rcar(params, pi / 2, -pi / 2)])
QFTseqP2 = sim.PulseSequence([
    sim.Rcar(params, pi / 2, -pi / 2),
    sim.Rac(params, pi / 2, 0, 0),
    sim.Rcar(params, pi / 2, 0)
])
QFTseqP3 = sim.PulseSequence( [ \
    sim.Rcar(params, pi/4, pi/2),  #U.Uy(pi/4, N),
    sim.Rac(params, pi, 0, 1),    #U.Uz(pi, N, 1),
    sim.Rcar(params, pi/4, -pi/2), #  U.Uy(-pi/4,  N),
    sim.Rcar(params, pi/2, pi/2),   #U.Uy(pi/2,N),
    sim.Rac(params, pi, 0, 2),     #U.Uz(pi, N, 2),
    sim.Rcar(params, pi/2, -pi/2),    #U.Uy(-pi/2,N),
    sim.RMS(params, pi/4, 0),    #U.MS(pi/4,0,N),
    sim.Rac(params, pi, 0, 1),   #U.Uz(pi, N, 1),
    sim.RMS(params, pi/4, 0),    #U.MS(pi/4,0,N)
                               ]   )
QFTseqP4 = sim.PulseSequence([
    sim.Rcar(params, pi / 4, -pi / 2),
    sim.Rac(params, pi, 0, 2),
    sim.Rcar(params, pi / 4, pi / 2)
])


QFTseq = sim.PulseSequence( [ \
    sim.Rcar(params, pi/2, 0),       #1
    sim.Rac(params, pi, 0, 1),       #2
Beispiel #7
0
dec.dict['none'] = True  # not doIdeal
#    if doPPKitaev: params.ppcpus = 2

Kit = Kitaev.Kitaev()

##########################################
# load the pulse sequences
# change ion order and define permutations
##########################################
# execfile(pulseseqfileShor,locals(),globals())
# exec(open(pulseseqfileShor).read(),globals(),locals()) #,locals(),globals())

#Fredkin gate
Fredkin = sim.PulseSequence([ \
sim.Rcar(params, 0.5*pi, 0.5*pi),
sim.Rac(params, 0.5*pi, 0, 0),
sim.RMS(params, 0.5*pi, pi/2),
sim.Rac(params, 0.5*pi, 0, 1),
sim.Rac(params, -0.5*pi, 0, 0),
sim.Rcar(params, 0.75*pi, 1*pi),
sim.RMS(params, -0.25*pi, pi/2),
sim.Rac(params, 0.5*pi, 0, 1),
sim.RMS(params, 0.5*pi, pi/2),
sim.Rcar(params, 0.5*pi, 0*pi),
sim.Rac(params, -0.25*pi, 0, 1),
sim.Rac(params, 0.5*pi, 0, 0),
sim.RMS(params, 0.5*pi, pi/2),
sim.Rac(params, 0.5*pi, 0, 1),
sim.Rac(params, 0.5*pi, 0, 2),
sim.Rcar(params, 0.5*pi, 0*pi),
sim.Rac(params, -0.5*pi, 0, 2),
Beispiel #8
0
dec = sim.decoherence(params)

params.y0[qc.stateToIndex('S' + ',0', hspace)] = 1
params.stepsize = 1
params.printpulse = False
params.progbar = False

# change this to check amplitude of off-resonant excitations
#params.ACintenFac = 60
#params.recalculate()

#params.solver = "Cheby" # seems to not work for this one

pulseseq = sim.PulseSequence( [ \
  sim.Rcar(params, pi/2, 0, 0), \
  sim.Rac(params,pi, 0, 0), \
  sim.Rcar(params, pi/2, 0, 0) \
  ] )

# this line turns on the ODE solver for the AC pulse
# then the total population exceeds 1, growing linearly w/ time
#pulseseq[1].dotimedepPulse = True
#pulseseq[1].duration = 40

data = qc.simulateevolution(pulseseq, params, dec)

data.tracedpopulation(1)

#plot the total population for all states vs time
#pl.figure(2)
#pl.plot(data.T, np.sum(data.YR,axis=1))