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