Ejemplo n.º 1
0
    def loadexpdata(self,
                    filepath,
                    timetags,
                    is_range,
                    is_pop,
                    print_fidelities=True):
        ''' load experimental data and optionally calculate state fidelities (jozsafid) '''
        auspath = rd.PathObject(filepath)
        self.YRexp = []
        self.rhoexp = []

        # load populations
        if is_pop:
            auspath = rd.PathObject(filepath)
            if is_range:
                dataobj_list = rd.ReadDataMultiple(timetags, is_range=True)
                dataobj = dataobj_list.pop()
                for item in dataobj_list:
                    dataobj += item
                print(dataobj.parameters['cycles'])
            else:
                dataobj = rd.ReadData(timetags[0])

            self.YRexp = dataobj.data_dict['cprb'][:, 1:]
            self.YRexp_err = np.sqrt(self.YRexp * (1 - self.YRexp) /
                                     dataobj.parameters['cycles'])
            self.rhoexp = None

        # else load densmats
        else:
            data_list = rd.ReadDataMultiple(timetags, is_range=is_range)
            # if len(data) = len(ideal)-1, assume the missing one is the prep'd state
            if self.rho != None:
                if len(data_list) == np.shape(self.rho)[0] - 1:
                    self.rhoexp.append(self.rho[0])
                elif len(data_list) != np.shape(self.rho)[0]:
                    print(
                        "length of data_list and ideal results don't match. Adding initial density matrix."
                    )
                    self.rhoexp.append(self.rho[0])
            else:
                print("ideal densmat not loaded - check len(rhoexp).")

            for dat in data_list:  #range(len(expfiles)):
                rhoexp1 = dmr.IterML.iterfun(dat, 100)
                YRexp1 = np.diag(rhoexp1)
                self.rhoexp.append(rhoexp1)
                self.YRexp.append(YRexp1)

            self.YRexp = np.array(self.YRexp)
            self.rhoexp = np.array(self.rhoexp)
            if print_fidelities:
                for i in range(np.min([len(self.rhoexp), len(self.rho)])):
                    print(i, ": ", U.jozsafid(self.rho[i], self.rhoexp[i]))

        self.exploaded = True
Ejemplo n.º 2
0
    def calculateGateFidelityProcTomo(self, ErrorBars=False, ind=None):
        ''' use proctomo to convert error of gate to fidelity '''
        #print "Using ProcTomo to calculate gate fidelity. This may take a while ..."

        if ind != None:
            indreal = [ind]
            if ErrorBars:
                indreal = [ind, ind, ind]
        elif not ErrorBars:
            indreal = [self.error0]
        else:
            indreal = [self.error0, self.error0max, self.error0min]

        result = []
        for ind in indreal:
            if self.noisetype == 'all':
                for noisetype in self.dec.dict_params_static.keys():
                    self.setNoiseAmp(noisetype, ind)
            else:
                self.setNoiseAmp(self.noisetype, ind)   

            if not self.verbose:
                widgets = [progressbar.Percentage(), ' ', progressbar.Bar(),' ', progressbar.ETA()]
                pbar = progressbar.ProgressBar(widgets=widgets).start()        
            else:
                pbar = None

            pos = self.gates[0] # only do it once, for now
            newpulseseq = sim.PulseSequence([ copy.deepcopy(self.pulseseq[pos]) ])
            self.pulseseq[pos].UtrAll = []
            newpulseseq[0].use_ideal=False

            ScanObj = ips.ScanParameter_in_Sequence(newpulseseq, self.params, self.dec, np.arange(12**self.params.hspace.nuions),type='ProcTomo', verbose=self.verbose, doPP=True, use_ideal=True, pbar=pbar)
            ScanObj.runScan(batchsize=40)
            data_proctom = ScanObj.output_dict['qstates_camera']
            chi = proctom.proctomo(data_proctom, 100)
            chiId = qproc.Unitary2Chi(newpulseseq[0].Uidtr.conjugate())
            result.append(U.jozsafid(chiId, chi))
            #print "PT:"
            #print np.around(chiId,3)
            #print np.around(chi,3) # TEMP

        if ind != None and ErrorBars:
            result.sort()
            result.append(result[0])
            result.remove(result[0])

        if not ErrorBars:
            print self._printGatetype(self.gatetype),":", np.around(result[0],4)
            return [result[0], result[0], result[0]]
        else:
            print self._printGatetype(self.gatetype) + " : %0.4f + %0.4f - %0.4f" % (np.around(result[0],4), np.around(result[1]-result[0],4), np.around(result[0]-result[2],4) )
            return result
Ejemplo n.º 3
0
    def loadsimdata(self, data, print_fidelities=False):
        ''' load simulation data directly from variables '''
        try: # data is a database object
            self.data = data
            self.data.RhoPNAll = np.array(self.data.RhoPNAll)
            self.rhosim = self.data.RhoPN
        except AttributeError: # or it's just the densmats
            # make a dummy data object
            self.data = sim.database(np.zeros(1), np.zeros(1), sim.hspace(1,2,0,0))
            self.data.RhoPNAll = data

        self.simloaded = True
        if print_fidelities:
            for i in range(np.min([len(self.rhosim), len(self.rho)])):
                print i, ": ", U.jozsafid(self.rho[i], self.rhosim[i])
Ejemplo n.º 4
0
    def loadexpdata(self, filepath, timetags, is_range, is_pop, print_fidelities = True):
        ''' load experimental data and optionally calculate state fidelities (jozsafid) '''
        auspath = rd.PathObject(filepath)
        self.YRexp = []
        self.rhoexp = []

        # load populations
        if is_pop:
            auspath = rd.PathObject(filepath)
            if is_range:
                dataobj_list = rd.ReadDataMultiple(timetags,is_range=True)
                dataobj = dataobj_list.pop()
                for item in dataobj_list:
                    dataobj += item
                print dataobj.parameters['cycles']
            else:
                dataobj = rd.ReadData(timetags[0])

            self.YRexp = dataobj.data_dict['cprb'][:,1:]
            self.YRexp_err = np.sqrt(self.YRexp*(1-self.YRexp) / dataobj.parameters['cycles'] )
            self.rhoexp = None

        # else load densmats  
        else:  
            data_list = rd.ReadDataMultiple(timetags, is_range=is_range)
            # if len(data) = len(ideal)-1, assume the missing one is the prep'd state
            if self.rho != None:
                if len(data_list) == np.shape(self.rho)[0]-1:
                    self.rhoexp.append(self.rho[0])
                elif len(data_list) != np.shape(self.rho)[0]:
                    print "length of data_list and ideal results don't match. Adding initial density matrix."
                    self.rhoexp.append(self.rho[0])
            else:
                print "ideal densmat not loaded - check len(rhoexp)."

            for dat in data_list: #range(len(expfiles)):
                rhoexp1 = dmr.IterML.iterfun(dat, 100)
                YRexp1 = np.diag(rhoexp1)
                self.rhoexp.append(rhoexp1)
                self.YRexp.append(YRexp1)

            self.YRexp = np.array(self.YRexp)
            self.rhoexp = np.array(self.rhoexp)
            if print_fidelities:
                for i in range(np.min([len(self.rhoexp), len(self.rho)])):
                    print i, ": ", U.jozsafid(self.rho[i], self.rhoexp[i])

        self.exploaded = True
Ejemplo n.º 5
0
    def calculateGateFidelityProcTomo(self, ErrorBars=False, ind=None):
        ''' use proctomo to convert error of gate to fidelity '''
        #print "Using ProcTomo to calculate gate fidelity. This may take a while ..."

        if ind != None:
            indreal = [ind]
            if ErrorBars:
                indreal = [ind, ind, ind]
        elif not ErrorBars:
            indreal = [self.error0]
        else:
            indreal = [self.error0, self.error0max, self.error0min]

        result = []
        for ind in indreal:
            if self.noisetype == 'all':
                for noisetype in self.dec.dict_params_static.keys():
                    self.setNoiseAmp(noisetype, ind)
            else:
                self.setNoiseAmp(self.noisetype, ind)

            if not self.verbose:
                widgets = [
                    progressbar.Percentage(), ' ',
                    progressbar.Bar(), ' ',
                    progressbar.ETA()
                ]
                pbar = progressbar.ProgressBar(widgets=widgets).start()
            else:
                pbar = None

            pos = self.gates[0]  # only do it once, for now
            newpulseseq = sim.PulseSequence(
                [copy.deepcopy(self.pulseseq[pos])])
            self.pulseseq[pos].UtrAll = []
            newpulseseq[0].use_ideal = False

            ScanObj = ips.ScanParameter_in_Sequence(
                newpulseseq,
                self.params,
                self.dec,
                np.arange(12**self.params.hspace.nuions),
                type='ProcTomo',
                verbose=self.verbose,
                doPP=True,
                use_ideal=True,
                pbar=pbar)
            ScanObj.runScan(batchsize=40)
            data_proctom = ScanObj.output_dict['qstates_camera']
            chi = proctom.proctomo(data_proctom, 100)
            chiId = qproc.Unitary2Chi(newpulseseq[0].Uidtr.conjugate())
            result.append(U.jozsafid(chiId, chi))
            #print "PT:"
            #print np.around(chiId,3)
            #print np.around(chi,3) # TEMP

        if ind != None and ErrorBars:
            result.sort()
            result.append(result[0])
            result.remove(result[0])

        if not ErrorBars:
            print self._printGatetype(self.gatetype), ":", np.around(
                result[0], 4)
            return [result[0], result[0], result[0]]
        else:
            print self._printGatetype(
                self.gatetype) + " : %0.4f + %0.4f - %0.4f" % (np.around(
                    result[0],
                    4), np.around(result[1] - result[0],
                                  4), np.around(result[0] - result[2], 4))
            return result