{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Example for qutrit GST\n", "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$." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import pygsti\n", "import pygsti.construction as pc\n", "from pygsti.construction import qutrit\n", "\n", "from numpy import pi, array\n", "import pickle\n", "\n", "import numpy as np" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "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." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "gs_target = qutrit.make_qutrit_gateset(errorScale=0, Xangle=pi/2, Yangle=pi/2, MSglobal=pi/2, MSlocal=0, basis=\"qt\")\n", "#print(gs_target)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "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." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "fiducialPrep = pc.gatestring_list(\n", " [(),('Gy',),('Gx',),('Gm',),\n", " ('Gx','Gx'), ('Gm','Gy'),('Gm','Gx'),\n", " ('Gy','Gy','Gy'),('Gx','Gx','Gx')])\n", "\n", "fiducialMeasure = pc.gatestring_list(\n", " [(),('Gy',),('Gx',),('Gm',),\n", " ('Gy','Gm'),('Gx','Gm')])\n", "\n", "maxLengths = [1,2,4]\n", "\n", "germs = pygsti.construction.gatestring_list(\n", "[('Gi',),\n", " ('Gy',),\n", " ('Gx',),\n", " ('Gm',),\n", " ('Gi', 'Gy'),\n", " ('Gi', 'Gx'),\n", " ('Gi', 'Gm'),\n", " ('Gy', 'Gx'),\n", " ('Gy', 'Gm'),\n", " ('Gx', 'Gm'),\n", " ('Gi', 'Gi', 'Gy'),\n", " ('Gi', 'Gi', 'Gx'),\n", " ('Gi', 'Gi', 'Gm'),\n", " ('Gi', 'Gy', 'Gy'),\n", " ('Gi', 'Gy', 'Gx'),\n", " ('Gi', 'Gy', 'Gm'),\n", " ('Gi', 'Gx', 'Gy'),\n", " ('Gi', 'Gx', 'Gx'),\n", " ('Gi', 'Gx', 'Gm'),\n", " ('Gi', 'Gm', 'Gy'),\n", " ('Gi', 'Gm', 'Gx'),\n", " ('Gi', 'Gm', 'Gm'),\n", " ('Gy', 'Gy', 'Gx'),\n", " ('Gy', 'Gy', 'Gm'),\n", " ('Gy', 'Gx', 'Gx'),\n", " ('Gy', 'Gx', 'Gm'),\n", " ('Gy', 'Gm', 'Gx'),\n", " ('Gy', 'Gm', 'Gm'),\n", " ('Gx', 'Gx', 'Gm'),\n", " ('Gx', 'Gm', 'Gm')])" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "#Note above construction is now a \"standard\" qutrit gateset\n", "from pygsti.construction import stdQT_XYIMS\n", "gs_target = stdQT_XYIMS.gs_target\n", "fiducialPrep = stdQT_XYIMS.prepStrs\n", "fiducialMeasure = stdQT_XYIMS.effectStrs\n", "germs = stdQT_XYIMS.germs_lite\n", "maxLengths = [1,2,4]" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "9 prep fiducials\n", "7 meas fiducials\n", "31 germs\n" ] } ], "source": [ "print(\"%d prep fiducials\" % len(fiducialPrep))\n", "print(\"%d meas fiducials\" % len(fiducialMeasure))\n", "print(\"%d germs\" % len(germs))" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "#generate data template\n", "expList = pygsti.construction.make_lsgst_experiment_list(gs_target.gates.keys(), fiducialPrep, fiducialMeasure, germs, maxLengths)\n", "pygsti.io.write_empty_dataset(\"example_files/dataTemplate_qutrit_maxL=4.txt\", expList, \"## Columns = 0bright count, 1bright count, 2bright count\")" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "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." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "gs_datagen = gs_target.depolarize(gate_noise=0.05)\n", "DS = pygsti.construction.generate_fake_data(gs_datagen, expList, 500, sampleError='multinomial', seed=2018)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "#DS = pygsti.io.load_dataset('PATH_TO_YOUR_DATASET',cache=True) # (cache=True speeds up future loads)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "-- Std Practice: Iter 1 of 2 (TP) --: \n", " --- Gate Sequence Creation ---\n", " --- LGST ---\n", " --- Iterative MLGST: [##################################################] 100.0% 2017 gate strings ---\n", " Iterative MLGST Total Time: 89.9s\n", " -- Performing 'single' gauge optimization on TP estimate --\n", "-- Std Practice: Iter 2 of 2 (CPTP) --: \n", " --- Gate Sequence Creation ---\n", " --- Iterative MLGST: [##################################################] 100.0% 2017 gate strings ---\n", " Iterative MLGST Total Time: 1132.2s\n", " --- Re-optimizing logl after robust data scaling ---\n", " -- Performing 'single' gauge optimization on CPTP estimate --\n", " -- Conveying 'single' gauge optimization to CPTP.Robust+ estimate --\n" ] } ], "source": [ "#Run qutrit GST... which could take a while on a single CPU. Please adjust memLimit to machine specs \n", "# (now 3GB; usually set to slightly less than the total machine memory)\n", "result = pygsti.do_stdpractice_gst(DS,gs_target,fiducialPrep,fiducialMeasure,germs,maxLengths,\n", " verbosity=2, comm=None, memLimit=3*(1024)**3, modes=\"TP,CPTP\")" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "*** Creating workspace ***\n", "*** Generating switchboard ***\n", "*** Generating tables ***\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/enielse/research/pyGSTi/packages/pygsti/tools/gatetools.py:2676: UserWarning:\n", "\n", "Target-eigenspace-projected gate has an imaginary component. This usually isn't desired and indicates a failure to match eigenvalues.\n", "\n", "/Users/enielse/research/pyGSTi/packages/pygsti/objects/gate.py:961: ComplexWarning:\n", "\n", "Casting complex values to real discards the imaginary part\n", "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " targetSpamBriefTable took 0.876432 seconds\n", " targetGatesBoxTable took 0.639296 seconds\n", " datasetOverviewTable took 0.128624 seconds\n", " bestGatesetSpamParametersTable took 0.00208 seconds\n", " bestGatesetSpamBriefTable took 0.737387 seconds\n", " bestGatesetSpamVsTargetTable took 0.661824 seconds\n", " bestGatesetGaugeOptParamsTable took 0.000949 seconds\n", " bestGatesetGatesBoxTable took 1.285632 seconds\n", " bestGatesetChoiEvalTable took 1.295087 seconds\n", " bestGatesetDecompTable took 47.756436 seconds\n", " bestGatesetEvalTable took 0.033483 seconds\n", " bestGermsEvalTable took 0.232337 seconds\n", " bestGatesetVsTargetTable took 0.243957 seconds\n", " bestGatesVsTargetTable_gv took 2.97757 seconds\n", " bestGatesVsTargetTable_gvgerms took 1.73519 seconds\n", " bestGatesVsTargetTable_gi took 0.141423 seconds\n", " bestGatesVsTargetTable_gigerms took 0.244606 seconds\n", " bestGatesVsTargetTable_sum took 3.21595 seconds\n", " bestGatesetErrGenBoxTable took 3.774635 seconds\n", " metadataTable took 0.003258 seconds\n", " stdoutBlock took 0.00051 seconds\n", " profilerTable took 0.002298 seconds\n", " softwareEnvTable took 0.049123 seconds\n", " exampleTable took 0.0775 seconds\n", " singleMetricTable_gv took 3.351871 seconds\n", " singleMetricTable_gi took 0.167496 seconds\n", " fiducialListTable took 0.001375 seconds\n", " prepStrListTable took 0.000374 seconds\n", " effectStrListTable took 0.000311 seconds\n", " colorBoxPlotKeyPlot took 0.100008 seconds\n", " germList2ColTable took 0.000563 seconds\n", " progressTable took 3.850201 seconds\n", "*** Generating plots ***\n", " gramBarPlot took 0.25235 seconds\n", " progressBarPlot took 0.666525 seconds\n", " progressBarPlot_sum took 0.000649 seconds\n", " finalFitComparePlot took 0.186399 seconds\n", " bestEstimateColorBoxPlot took 15.036789 seconds\n", " bestEstimateTVDColorBoxPlot took 15.716076 seconds\n", " bestEstimateColorScatterPlot took 18.853158 seconds\n", " bestEstimateColorHistogram took 17.617432 seconds\n", " progressTable_scl took 2.258093 seconds\n", " progressBarPlot_scl took 0.260648 seconds\n", " bestEstimateColorBoxPlot_scl took 7.623235 seconds\n", " bestEstimateColorScatterPlot_scl took 10.650908 seconds\n", " bestEstimateColorHistogram_scl took 8.227025 seconds\n", " dataScalingColorBoxPlot took 0.415585 seconds\n", "*** Merging into template file ***\n", " Rendering topSwitchboard took 0.000278 seconds\n", " Rendering maxLSwitchboard1 took 0.000116 seconds\n", " Rendering targetSpamBriefTable took 0.06928 seconds\n", " Rendering targetGatesBoxTable took 0.068216 seconds\n", " Rendering datasetOverviewTable took 0.003559 seconds\n", " Rendering bestGatesetSpamParametersTable took 0.007129 seconds\n", " Rendering bestGatesetSpamBriefTable took 0.132766 seconds\n", " Rendering bestGatesetSpamVsTargetTable took 0.013671 seconds\n", " Rendering bestGatesetGaugeOptParamsTable took 0.005538 seconds\n", " Rendering bestGatesetGatesBoxTable took 0.146068 seconds\n", " Rendering bestGatesetChoiEvalTable took 0.075373 seconds\n", " Rendering bestGatesetDecompTable took 0.065373 seconds\n", " Rendering bestGatesetEvalTable took 0.120437 seconds\n", " Rendering bestGermsEvalTable took 0.59854 seconds\n", " Rendering bestGatesetVsTargetTable took 0.003297 seconds\n", " Rendering bestGatesVsTargetTable_gv took 0.014306 seconds\n", " Rendering bestGatesVsTargetTable_gvgerms took 0.058066 seconds\n", " Rendering bestGatesVsTargetTable_gi took 0.013648 seconds\n", " Rendering bestGatesVsTargetTable_gigerms took 0.022695 seconds\n", " Rendering bestGatesVsTargetTable_sum took 0.01572 seconds\n", " Rendering bestGatesetErrGenBoxTable took 0.157313 seconds\n", " Rendering metadataTable took 0.012599 seconds\n", " Rendering stdoutBlock took 0.003239 seconds\n", " Rendering profilerTable took 0.005821 seconds\n", " Rendering softwareEnvTable took 0.005421 seconds\n", " Rendering exampleTable took 0.007781 seconds\n", " Rendering metricSwitchboard_gv took 7.3e-05 seconds\n", " Rendering metricSwitchboard_gi took 5.9e-05 seconds\n", " Rendering singleMetricTable_gv took 0.02288 seconds\n", " Rendering singleMetricTable_gi took 0.014049 seconds\n", " Rendering fiducialListTable took 0.006194 seconds\n", " Rendering prepStrListTable took 0.004871 seconds\n", " Rendering effectStrListTable took 0.003944 seconds\n", " Rendering colorBoxPlotKeyPlot took 0.008939 seconds\n", " Rendering germList2ColTable took 0.009759 seconds\n", " Rendering progressTable took 0.010173 seconds\n", " Rendering gramBarPlot took 0.011455 seconds\n", " Rendering progressBarPlot took 0.01002 seconds\n", " Rendering progressBarPlot_sum took 0.009715 seconds\n", " Rendering finalFitComparePlot took 0.006018 seconds\n", " Rendering bestEstimateColorBoxPlot took 0.163837 seconds\n", " Rendering bestEstimateTVDColorBoxPlot took 0.139049 seconds\n", " Rendering bestEstimateColorScatterPlot took 0.14102 seconds\n", " Rendering bestEstimateColorHistogram took 0.090511 seconds\n", " Rendering progressTable_scl took 0.005984 seconds\n", " Rendering progressBarPlot_scl took 0.003856 seconds\n", " Rendering bestEstimateColorBoxPlot_scl took 0.082334 seconds\n", " Rendering bestEstimateColorScatterPlot_scl took 0.081121 seconds\n", " Rendering bestEstimateColorHistogram_scl took 0.046132 seconds\n", " Rendering dataScalingColorBoxPlot took 0.044945 seconds\n", "Output written to example_files/sampleQutritReport directory\n", "Opening example_files/sampleQutritReport/main.html...\n", "*** Report Generation Complete! Total time 176.119s ***\n" ] } ], "source": [ "#Create a report\n", "ws = pygsti.report.create_standard_report(result, \"example_files/sampleQutritReport\",\n", " \"Example Qutrit Report\", verbosity=3, auto_open=True)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Qutrit Basis : II, X+Y, X-Y, YZ, IX, IY, IZ, XY, XZ\n" ] } ], "source": [ "print(gs_target.basis)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.0" } }, "nbformat": 4, "nbformat_minor": 1 }