Example for qutrit GST

This notebook demonstrates how to construct the gate sequences and perform the analysis for qutrit GST when the gate set consists of symmetric $\pi/2$-rotations on each single qubit separately, X, Y and a 2-qubit Molmer-Sorenson gate which rotates around the XX axis by $\pi/2$.

In [1]:
import pygsti
import pygsti.construction as pc
from pygsti.construction import qutrit

from numpy import pi, array
import pickle

import numpy as np

First, we construct the target gate set. This functionality is built into pyGSTi, so we just need to specify the single-qubit and M-S angles.

In [2]:
gs_target = qutrit.make_qutrit_gateset(errorScale=0, Xangle=pi/2, Yangle=pi/2, MSglobal=pi/2, MSlocal=0, basis="qt")
#print(gs_target)

Now construct the gate sequences needed by GST. These fiducials and germs have been computed ahead of time and the results are used to construct the gate string lists below. Then we construct an empty dataset containing all of the necessary experimental sequences which can serve as a template for the actual experimental results.

In [3]:
fiducialPrep = pc.gatestring_list(
    [(),('Gy',),('Gx',),('Gm',),
    ('Gx','Gx'), ('Gm','Gy'),('Gm','Gx'),
    ('Gy','Gy','Gy'),('Gx','Gx','Gx')])

fiducialMeasure = pc.gatestring_list(
    [(),('Gy',),('Gx',),('Gm',),
    ('Gy','Gm'),('Gx','Gm')])

maxLengths = [1,2,4]

germs = pygsti.construction.gatestring_list(
[('Gi',),
 ('Gy',),
 ('Gx',),
 ('Gm',),
 ('Gi', 'Gy'),
 ('Gi', 'Gx'),
 ('Gi', 'Gm'),
 ('Gy', 'Gx'),
 ('Gy', 'Gm'),
 ('Gx', 'Gm'),
 ('Gi', 'Gi', 'Gy'),
 ('Gi', 'Gi', 'Gx'),
 ('Gi', 'Gi', 'Gm'),
 ('Gi', 'Gy', 'Gy'),
 ('Gi', 'Gy', 'Gx'),
 ('Gi', 'Gy', 'Gm'),
 ('Gi', 'Gx', 'Gy'),
 ('Gi', 'Gx', 'Gx'),
 ('Gi', 'Gx', 'Gm'),
 ('Gi', 'Gm', 'Gy'),
 ('Gi', 'Gm', 'Gx'),
 ('Gi', 'Gm', 'Gm'),
 ('Gy', 'Gy', 'Gx'),
 ('Gy', 'Gy', 'Gm'),
 ('Gy', 'Gx', 'Gx'),
 ('Gy', 'Gx', 'Gm'),
 ('Gy', 'Gm', 'Gx'),
 ('Gy', 'Gm', 'Gm'),
 ('Gx', 'Gx', 'Gm'),
 ('Gx', 'Gm', 'Gm')])
In [4]:
#Note above construction is now a "standard" qutrit gateset
from pygsti.construction import stdQT_XYIMS
gs_target = stdQT_XYIMS.gs_target
fiducialPrep = stdQT_XYIMS.prepStrs
fiducialMeasure = stdQT_XYIMS.effectStrs
germs = stdQT_XYIMS.germs_lite
maxLengths = [1,2,4]
In [5]:
print("%d prep fiducials" % len(fiducialPrep))
print("%d meas fiducials" % len(fiducialMeasure))
print("%d germs" % len(germs))
9 prep fiducials
7 meas fiducials
31 germs
In [6]:
#generate data template
expList = pygsti.construction.make_lsgst_experiment_list(gs_target.gates.keys(), fiducialPrep, fiducialMeasure, germs,  maxLengths)
pygsti.io.write_empty_dataset("example_files/dataTemplate_qutrit_maxL=4.txt", expList, "## Columns = 0bright count, 1bright count, 2bright count")

At this point STOP and create/fill a dataset file using the template written in the above cell. Then proceed with the lines below to run GST on the data and create (hopefully useful) reports telling you about your gates.

In [7]:
gs_datagen = gs_target.depolarize(gate_noise=0.05)
DS = pygsti.construction.generate_fake_data(gs_datagen, expList, 500, sampleError='multinomial', seed=2018)
In [8]:
#DS = pygsti.io.load_dataset('PATH_TO_YOUR_DATASET',cache=True) # (cache=True speeds up future loads)
In [9]:
#Run qutrit GST... which could take a while on a single CPU.  Please adjust memLimit to machine specs 
# (now 3GB; usually set to slightly less than the total machine memory)
result = pygsti.do_stdpractice_gst(DS,gs_target,fiducialPrep,fiducialMeasure,germs,maxLengths,
                                     verbosity=2, comm=None, memLimit=3*(1024)**3, modes="TP,CPTP")
-- Std Practice:  Iter 1 of 2  (TP) --: 
  --- Gate Sequence Creation ---
  --- LGST ---
  --- Iterative MLGST: [##################################################] 100.0%  2017 gate strings ---
  Iterative MLGST Total Time: 89.9s
  -- Performing 'single' gauge optimization on TP estimate --
-- Std Practice:  Iter 2 of 2  (CPTP) --: 
  --- Gate Sequence Creation ---
  --- Iterative MLGST: [##################################################] 100.0%  2017 gate strings ---
  Iterative MLGST Total Time: 1132.2s
  --- Re-optimizing logl after robust data scaling ---
  -- Performing 'single' gauge optimization on CPTP estimate --
  -- Conveying 'single' gauge optimization to CPTP.Robust+ estimate --
In [10]:
#Create a report
ws = pygsti.report.create_standard_report(result, "example_files/sampleQutritReport",
                                         "Example Qutrit Report", verbosity=3, auto_open=True)
*** Creating workspace ***
*** Generating switchboard ***
*** Generating tables ***
/Users/enielse/research/pyGSTi/packages/pygsti/tools/gatetools.py:2676: UserWarning:

Target-eigenspace-projected gate has an imaginary component.  This usually isn't desired and indicates a failure to match eigenvalues.

/Users/enielse/research/pyGSTi/packages/pygsti/objects/gate.py:961: ComplexWarning:

Casting complex values to real discards the imaginary part

  targetSpamBriefTable                          took 0.876432 seconds
  targetGatesBoxTable                           took 0.639296 seconds
  datasetOverviewTable                          took 0.128624 seconds
  bestGatesetSpamParametersTable                took 0.00208 seconds
  bestGatesetSpamBriefTable                     took 0.737387 seconds
  bestGatesetSpamVsTargetTable                  took 0.661824 seconds
  bestGatesetGaugeOptParamsTable                took 0.000949 seconds
  bestGatesetGatesBoxTable                      took 1.285632 seconds
  bestGatesetChoiEvalTable                      took 1.295087 seconds
  bestGatesetDecompTable                        took 47.756436 seconds
  bestGatesetEvalTable                          took 0.033483 seconds
  bestGermsEvalTable                            took 0.232337 seconds
  bestGatesetVsTargetTable                      took 0.243957 seconds
  bestGatesVsTargetTable_gv                     took 2.97757 seconds
  bestGatesVsTargetTable_gvgerms                took 1.73519 seconds
  bestGatesVsTargetTable_gi                     took 0.141423 seconds
  bestGatesVsTargetTable_gigerms                took 0.244606 seconds
  bestGatesVsTargetTable_sum                    took 3.21595 seconds
  bestGatesetErrGenBoxTable                     took 3.774635 seconds
  metadataTable                                 took 0.003258 seconds
  stdoutBlock                                   took 0.00051 seconds
  profilerTable                                 took 0.002298 seconds
  softwareEnvTable                              took 0.049123 seconds
  exampleTable                                  took 0.0775 seconds
  singleMetricTable_gv                          took 3.351871 seconds
  singleMetricTable_gi                          took 0.167496 seconds
  fiducialListTable                             took 0.001375 seconds
  prepStrListTable                              took 0.000374 seconds
  effectStrListTable                            took 0.000311 seconds
  colorBoxPlotKeyPlot                           took 0.100008 seconds
  germList2ColTable                             took 0.000563 seconds
  progressTable                                 took 3.850201 seconds
*** Generating plots ***
  gramBarPlot                                   took 0.25235 seconds
  progressBarPlot                               took 0.666525 seconds
  progressBarPlot_sum                           took 0.000649 seconds
  finalFitComparePlot                           took 0.186399 seconds
  bestEstimateColorBoxPlot                      took 15.036789 seconds
  bestEstimateTVDColorBoxPlot                   took 15.716076 seconds
  bestEstimateColorScatterPlot                  took 18.853158 seconds
  bestEstimateColorHistogram                    took 17.617432 seconds
  progressTable_scl                             took 2.258093 seconds
  progressBarPlot_scl                           took 0.260648 seconds
  bestEstimateColorBoxPlot_scl                  took 7.623235 seconds
  bestEstimateColorScatterPlot_scl              took 10.650908 seconds
  bestEstimateColorHistogram_scl                took 8.227025 seconds
  dataScalingColorBoxPlot                       took 0.415585 seconds
*** Merging into template file ***
  Rendering topSwitchboard                      took 0.000278 seconds
  Rendering maxLSwitchboard1                    took 0.000116 seconds
  Rendering targetSpamBriefTable                took 0.06928 seconds
  Rendering targetGatesBoxTable                 took 0.068216 seconds
  Rendering datasetOverviewTable                took 0.003559 seconds
  Rendering bestGatesetSpamParametersTable      took 0.007129 seconds
  Rendering bestGatesetSpamBriefTable           took 0.132766 seconds
  Rendering bestGatesetSpamVsTargetTable        took 0.013671 seconds
  Rendering bestGatesetGaugeOptParamsTable      took 0.005538 seconds
  Rendering bestGatesetGatesBoxTable            took 0.146068 seconds
  Rendering bestGatesetChoiEvalTable            took 0.075373 seconds
  Rendering bestGatesetDecompTable              took 0.065373 seconds
  Rendering bestGatesetEvalTable                took 0.120437 seconds
  Rendering bestGermsEvalTable                  took 0.59854 seconds
  Rendering bestGatesetVsTargetTable            took 0.003297 seconds
  Rendering bestGatesVsTargetTable_gv           took 0.014306 seconds
  Rendering bestGatesVsTargetTable_gvgerms      took 0.058066 seconds
  Rendering bestGatesVsTargetTable_gi           took 0.013648 seconds
  Rendering bestGatesVsTargetTable_gigerms      took 0.022695 seconds
  Rendering bestGatesVsTargetTable_sum          took 0.01572 seconds
  Rendering bestGatesetErrGenBoxTable           took 0.157313 seconds
  Rendering metadataTable                       took 0.012599 seconds
  Rendering stdoutBlock                         took 0.003239 seconds
  Rendering profilerTable                       took 0.005821 seconds
  Rendering softwareEnvTable                    took 0.005421 seconds
  Rendering exampleTable                        took 0.007781 seconds
  Rendering metricSwitchboard_gv                took 7.3e-05 seconds
  Rendering metricSwitchboard_gi                took 5.9e-05 seconds
  Rendering singleMetricTable_gv                took 0.02288 seconds
  Rendering singleMetricTable_gi                took 0.014049 seconds
  Rendering fiducialListTable                   took 0.006194 seconds
  Rendering prepStrListTable                    took 0.004871 seconds
  Rendering effectStrListTable                  took 0.003944 seconds
  Rendering colorBoxPlotKeyPlot                 took 0.008939 seconds
  Rendering germList2ColTable                   took 0.009759 seconds
  Rendering progressTable                       took 0.010173 seconds
  Rendering gramBarPlot                         took 0.011455 seconds
  Rendering progressBarPlot                     took 0.01002 seconds
  Rendering progressBarPlot_sum                 took 0.009715 seconds
  Rendering finalFitComparePlot                 took 0.006018 seconds
  Rendering bestEstimateColorBoxPlot            took 0.163837 seconds
  Rendering bestEstimateTVDColorBoxPlot         took 0.139049 seconds
  Rendering bestEstimateColorScatterPlot        took 0.14102 seconds
  Rendering bestEstimateColorHistogram          took 0.090511 seconds
  Rendering progressTable_scl                   took 0.005984 seconds
  Rendering progressBarPlot_scl                 took 0.003856 seconds
  Rendering bestEstimateColorBoxPlot_scl        took 0.082334 seconds
  Rendering bestEstimateColorScatterPlot_scl    took 0.081121 seconds
  Rendering bestEstimateColorHistogram_scl      took 0.046132 seconds
  Rendering dataScalingColorBoxPlot             took 0.044945 seconds
Output written to example_files/sampleQutritReport directory
Opening example_files/sampleQutritReport/main.html...
*** Report Generation Complete!  Total time 176.119s ***
In [11]:
print(gs_target.basis)
Qutrit Basis : II, X+Y, X-Y, YZ, IX, IY, IZ, XY, XZ
In [ ]: