{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Examples of tables and plots available from a `Workspace`\n", "\n", "PyGSTi's `Workspace` object is first a foremost a container and factory for plots and tables. At the most basic level, it can be used to generate nice output based on quantities (e.g. `Model`, `DataSet`, etc. objects) that you've computed or loaded within a notebook. For this, it's useful to call `init_notebook_mode` with `autodisplay=True` (see below) so that you don't have to `.display()` everything - `display()` gets called automatically when a plot or table is created.\n", "\n", "## Getting some results\n", "First, let's run Gate Set Tomography (GST) on the standard 1-qubit model to get some results to play with. We generate a few `DataSet` objects and then call `do_long_sequence_gst` to run GST, generating a `Results` object (essentially a container for `Model` objects). For more details, see the tutorials [GST overview tutorial](../algorithms/GST-Overview.ipynb), the [tutorial on GST functions](../algorithms/GST-Drivers.ipynb), and the [tutorial explaining the Results object](../objects/advanced/Results.ipynb). " ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import pygsti\n", "from pygsti.construction import std1Q_XYI" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "#The usual GST setup: we're going to run GST on the standard XYI 1-qubit model\n", "target_model = std1Q_XYI.target_model()\n", "fiducials = std1Q_XYI.fiducials\n", "germs = std1Q_XYI.germs\n", "maxLengths = [1,2]\n", "listOfExperiments = pygsti.construction.make_lsgst_experiment_list(\n", " target_model.operations.keys(), fiducials, fiducials, germs, maxLengths)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "#Create some datasets for analysis\n", "mdl_datagen1 = target_model.depolarize(op_noise=0.1, spam_noise=0.02)\n", "mdl_datagen2 = target_model.depolarize(op_noise=0.05, spam_noise=0.01).rotate(rotate=(0.01,0.01,0.01))\n", "\n", "ds1 = pygsti.construction.generate_fake_data(mdl_datagen1, listOfExperiments, nSamples=1000,\n", " sampleError=\"binomial\", seed=1234)\n", "ds2 = pygsti.construction.generate_fake_data(mdl_datagen2, listOfExperiments, nSamples=1000,\n", " sampleError=\"binomial\", seed=1234)\n", "ds3 = ds1.copy_nonstatic(); ds3.add_counts_from_dataset(ds2); ds3.done_adding_data()" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "#Run GST on all three datasets\n", "target_model.set_all_parameterizations(\"TP\")\n", "results1 = pygsti.do_long_sequence_gst(ds1, target_model, fiducials, fiducials, germs, maxLengths, verbosity=0)\n", "results2 = pygsti.do_long_sequence_gst(ds2, target_model, fiducials, fiducials, germs, maxLengths, verbosity=0)\n", "results3 = pygsti.do_long_sequence_gst(ds3, target_model, fiducials, fiducials, germs, maxLengths, verbosity=0)\n", "\n", "#make some shorthand variable names for later\n", "tgt = results1.estimates['default'].models['target']\n", "\n", "ds1 = results1.dataset\n", "ds2 = results2.dataset\n", "ds3 = results3.dataset\n", "\n", "mdl1 = results1.estimates['default'].models['go0']\n", "mdl2 = results2.estimates['default'].models['go0']\n", "mdl3 = results3.estimates['default'].models['go0']\n", "\n", "gss = results1.circuit_structs['final']" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Gallery of `Workspace` plots and tables.\n", "Now that we have some results, let's create a `Workspace` and make some plots and tables.\n", "\n", "To get tables and plots to display properly, one must run `init_notebook_mode`. The `connected` argument indicates whether you want to rely on an active internet connection. If `True`, then resources will be loaded from the web (e.g. a CDN), and if you save a notebook as HTML the file size may be smaller. If `False`, then all the needed resources (except MathJax) are provided by pyGSTi, and an `offline` directory is automatically created in the same directory as your notebook. This directory contains all the necessary resources, and must \"tag along\" with the notebook and any saved-as-HTML versions of it in order for everything to work. The second argument, `autodisplay`, determines whether tables and plots are automatically displayed when they are created. If `autodisplay=False`, one must call the `display()` member function of a table or plot to display it. " ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "
Loading...
\n", "\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from pygsti.report import workspace\n", "w = workspace.Workspace()\n", "w.init_notebook_mode(connected=False, autodisplay=True) " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Plots and tables are created via member functions of a `Workspace` (`w` in our case). Note that you can start typing \"`w.`\" and TAB-complete to see the different things a `Workspace` can make for you. Furthermore, pressing SHIFT-TAB after the opening parenthesis of a function, e.g. after typing \"`w.GatesVsTargetTable(`\", will bring up Jupyter's help window showing you the function signature (the arguments you need to give the function).\n", "\n", "#### The remainder of this tutorial demonstrates some of the tables and plots you can create. \n", "Note that displayed objects have a resize handle in their lower right corner." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "
\n", "
\n", "
\n", "\n", "
\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
\n", "
\n", "
\n", "
\n", "\n", "
\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
\n", "
\n", "
\n", "
\n", "\n", "
\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "w.ColorBoxPlot((\"logl\",), gss, ds1, mdl1, typ='scatter')\n", "w.ColorBoxPlot((\"logl\",), gss, ds1, mdl1, typ='boxes')\n", "w.ColorBoxPlot((\"logl\",), gss, ds1, mdl1, typ='histogram')" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "
\n", "
\n", "
\n", "\n", "
\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "w.FitComparisonBarPlot(gss.Ls, results1.circuit_structs['iteration'],\n", " results1.estimates['default'].models['iteration estimates'], ds1)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "
\n", "
\n", "
\n", "\n", "
\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "w.GramMatrixBarPlot(ds1,tgt)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "
\n", "
Gate \">Entanglement Infidelity Avg. Gate Infidelity 1/2 Trace Distance 1/2 Diamond-Dist Non-unitary Ent. Infidelity Non-unitary Avg. Gate Infidelity
Gi0.0747480.0498320.0766170.076840.0744770.049652
Gx0.0771080.0514050.0775910.0775950.0770180.051345
Gy0.0751480.0500980.0752480.0752670.075110.050073
\n", "
\n", "\n", "
\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "w.GatesVsTargetTable(mdl1, tgt)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/html": [ "
\n", "
\n", "
Prep/POVM Infidelity 1/2 Trace Distance 1/2 Diamond-Dist
ρ00.0424890.043884--
Mdefault-0.041770.0426250.043673
\n", "
\n", "\n", "
\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "w.SpamVsTargetTable(mdl2, tgt)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "scrolled": false }, "outputs": [ { "data": { "text/html": [ "
\n", "
\n", "
\n", "
\n", "\n", "
\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "w.ColorBoxPlot((\"chi2\",\"logl\"), gss, ds1, mdl1, boxLabels=True)\n", " #Notice how long it takes to switch between \"chi2\" and \"logl\". This \n", " # is due to drawing all of the box labels (boxLabels=True)." ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "
\n", "
L 2Δ(log L) k 2Δ(log L)-k 2k Nsigma Ns Np Rating
1110.85866149.8586111.045364.519231\">★★★★
2166.852613729.8525616.552951.816831\">★★★★★
\n", "
\n", "\n", "
\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#This one requires knowng that each Results object holds a list of models\n", "# from each GST intation along with the corresponding operation sequences that were used.\n", "w.FitComparisonTable(gss.Ls, results1.circuit_structs['iteration'],\n", " results1.estimates['default'].models['iteration estimates'], ds1)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "
\n", "
Model 2Δ(log L) k 2Δ(log L)-k 2k Nsigma Ns Np Rating
GS1166.852613729.8525616.552951.816831\">★★★★★
GS24088.0641373951.06416.552952×10216831\">★★
GS31006.891137869.890516.5529552.616831\">★★★
\n", "
\n", "\n", "
\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# We can reuse 'gss' for all three since the operation sequences are the same.\n", "w.FitComparisonTable([\"GS1\",\"GS2\",\"GS3\"], [gss, gss, gss], [mdl1,mdl2,mdl3], ds1, Xlabel=\"Model\")" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "scrolled": false }, "outputs": [ { "data": { "text/html": [ "
\n", "
\n", "
Gate Choi matrix (Pauli-Product basis basis) Eigenvalue Magnitudes
Gi$ \\begin{pmatrix}\n", "0.944851 & 0.010383e^{i0.450\\pi} & 0.007336e^{i0.464\\pi} & 0.001242e^{i0.710\\pi} \\\\ \n", "0.010383e^{-i0.450\\pi} & 0.015242 & 0.003872e^{i0.063\\pi} & 0.001952e^{i0.138\\pi} \\\\ \n", "0.007336e^{-i0.464\\pi} & 0.003872e^{-i0.063\\pi} & 0.020849 & 0.001798e^{-i0.639\\pi} \\\\ \n", "0.001242e^{-i0.710\\pi} & 0.001952e^{-i0.138\\pi} & 0.001798e^{i0.639\\pi} & 0.019058\n", " \\end{pmatrix} $\n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
Gx$ \\begin{pmatrix}\n", "0.482477 & 0.462924e^{i0.501\\pi} & 0.00285e^{i0.508\\pi} & 0.000055e^{i0.786\\pi} \\\\ \n", "0.462924e^{-i0.501\\pi} & 0.480083 & 0.002985e^{i0.005\\pi} & 0.000079e^{-i0.643\\pi} \\\\ \n", "0.00285e^{-i0.508\\pi} & 0.002985e^{-i0.005\\pi} & 0.019276 & 0.001123e^{i0.486\\pi} \\\\ \n", "0.000055e^{-i0.786\\pi} & 0.000079e^{i0.643\\pi} & 0.001123e^{-i0.486\\pi} & 0.018164\n", " \\end{pmatrix} $\n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
Gy$ \\begin{pmatrix}\n", "0.480739 & 0.002381e^{i0.514\\pi} & 0.463008e^{i0.500\\pi} & 0.00008e^{-i0.107\\pi} \\\\ \n", "0.002381e^{-i0.514\\pi} & 0.017701 & 0.003456e^{-i0.007\\pi} & 0.000538e^{-i0.531\\pi} \\\\ \n", "0.463008e^{-i0.500\\pi} & 0.003456e^{i0.007\\pi} & 0.484353 & 0.000107e^{i0.420\\pi} \\\\ \n", "0.00008e^{i0.107\\pi} & 0.000538e^{i0.531\\pi} & 0.000107e^{-i0.420\\pi} & 0.017208\n", " \\end{pmatrix} $\n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", "\n", "
\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "w.ChoiTable(mdl3, display=('matrix','barplot'))" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/html": [ "
\n", "
\n", "
\n", "
\n", "\n", "
\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "
\n", "
\n", "
\n", "
\n", "\n", "
\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "w.GateMatrixPlot(mdl1['Gx'],scale=1.0, boxLabels=True,ylabel=\"hello\")\n", "w.GateMatrixPlot(pygsti.tools.error_generator(mdl1['Gx'], tgt['Gx'], 'pp'), scale=1.5)" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "
\n", "
\n", "
\n", "\n", "
\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from pygsti.construction import std2Q_XYCNOT\n", "w.GateMatrixPlot(std2Q_XYCNOT.target_model()['Gxi'],scale=1.0, boxLabels=False,ylabel=\"hello\",mxBasis=\"pp\")" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "
\n", "
\n", "
\n", "\n", "
\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mx = np.array( \n", "[[ 7.3380823, 8.28446943, 7.4593754, 3.91256384, 0.68631199],\n", " [ 3.36139818, 7.42955114, 6.78516082, 0.35863173, 5.57713093],\n", " [ 2.61489939, 3.40182958, 6.77389064, 9.29736475, 0.33824271],\n", " [ 9.64258149, 9.45928809, 6.91516602, 5.61423854, 0.56480777],\n", " [ 2.15195669, 9.37588783, 5.1781991, 7.20087591, 1.46096288]], 'd')\n", "cMap = pygsti.report.colormaps.LinlogColormap(vmin=0, vmax=10, n_boxes=25, pcntle=0.55, dof_per_box=1, color='blue')\n", "w.MatrixPlot(mx, colormap=cMap, colorbar=False)" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "
\n", "
\n", "
\n", "\n", "
\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mx = np.identity(3,'d')\n", "mx[0,1] = 2.1\n", "mx[2,2] = 4.0\n", "mx[2,0] = 3.0\n", "mx[0,2] = 7.0\n", "mx[2,1] = 10.0\n", "mx[0,0] = np.nan\n", "cMap = pygsti.report.colormaps.PiecewiseLinearColormap(\n", " [[0,(0,0.5,0)],[1,(0,1.0,0)],[2,(1.0,1.0,0)],\n", " [4,(1.0,0.5,0)],[10,(1.0,0,0)]])\n", "#print(cMap.get_colorscale())\n", "w.MatrixPlot(mx, colormap=cMap, colorbar=False, grid=\"white:1\", boxLabels=True, prec=2,\n", " xlabels=('TP',\"CPTP\",\"full\"),ylabels=(\"DS0\",\"DS1\",\"DS2\"))" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "scrolled": false }, "outputs": [ { "data": { "text/html": [ "
\n", "
\n", "
Gate Error Generator Pauli Hamiltonian Projections Pauli Stochastic Projections Pauli Affine Projections
Gi
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
Gx
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
Gy
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", "\n", "
\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "w.ErrgenTable(mdl3,tgt)" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "
\n", "
\n", "
\n", "\n", "
\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "w.PolarEigenvaluePlot([np.linalg.eigvals(mdl2['Gx'])],[\"purple\"],scale=1.5)" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "scrolled": false }, "outputs": [ { "data": { "text/html": [ "
\n", "
\n", "
Gate Eigenvalues ($E$) Eigenvalues
Gi$ \\begin{pmatrix}\n", "1 \\\\ \n", "0.955547 \\\\ \n", "0.94681e^{i0.008\\pi} \\\\ \n", "0.94681e^{-i0.008\\pi}\n", " \\end{pmatrix} $\n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
Gx$ \\begin{pmatrix}\n", "1 \\\\ \n", "0.95118 \\\\ \n", "0.949197e^{i0.502\\pi} \\\\ \n", "0.949197e^{-i0.502\\pi}\n", " \\end{pmatrix} $\n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
Gy$ \\begin{pmatrix}\n", "1 \\\\ \n", "0.957594 \\\\ \n", "0.948507e^{i0.502\\pi} \\\\ \n", "0.948507e^{-i0.502\\pi}\n", " \\end{pmatrix} $\n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
\n", "
\n", "\n", "
\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "w.GateEigenvalueTable(mdl2, display=('evals','polar'))" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "
\n", "
Gate Ham. Evals. Rotn. angle Rotn. axis Log Error Axis angle w/Gi Axis angle w/Gx Axis angle w/Gy
Gi$ \\begin{pmatrix}\n", "-0.006835 \\\\ \n", "0.006835\n", " \\end{pmatrix} $\n", "π0.009667π
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
00.285541π0.222932π
Gx$ \\begin{pmatrix}\n", "-0.350316 \\\\ \n", "0.350316\n", " \\end{pmatrix} $\n", "π0.495421π
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
00.285541π0.496963π
Gy$ \\begin{pmatrix}\n", "-0.353879 \\\\ \n", "0.353879\n", " \\end{pmatrix} $\n", "π0.500461π
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
00.222932π0.496963π
\n", "
\n", "\n", "
\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "w.GateDecompTable(mdl1,target_model)\n", "#w.old_GateDecompTable(gs1) #historical; 1Q only" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "scrolled": false }, "outputs": [ { "data": { "text/html": [ "
\n", "
\n", "
Gate Ham. Evals. Rotn. angle Rotn. axis Log Error Axis angle w/Gii Axis angle w/Gix Axis angle w/Giy Axis angle w/Gxi Axis angle w/Gyi Axis angle w/Gxx Axis angle w/Gyy Axis angle w/Gxy Axis angle w/Gyx
Gii$ \\begin{pmatrix}\n", "0 \\\\ \n", "0 \\\\ \n", "0 \\\\ \n", "0\n", " \\end{pmatrix} $\n", "π
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
0----------------
Gix$ \\begin{pmatrix}\n", "0.25 \\\\ \n", "-0.25 \\\\ \n", "0.25 \\\\ \n", "-0.25\n", " \\end{pmatrix} $\n", "π0.5π
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
0--0.5π0.5π0.5π0.25π0.499987π0.499985π0.25π
Giy$ \\begin{pmatrix}\n", "0.25 \\\\ \n", "-0.25 \\\\ \n", "0.25 \\\\ \n", "-0.25\n", " \\end{pmatrix} $\n", "π0.5π
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
0--0.5π0.5π0.5π0.499994π0.25π0.25π0.499987π
Gxi$ \\begin{pmatrix}\n", "-0.25 \\\\ \n", "0.25 \\\\ \n", "-0.25 \\\\ \n", "0.25\n", " \\end{pmatrix} $\n", "π0.5π
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
0--0.5π0.5π0.5π0.25π0.499987π0.25π0.500015π
Gyi$ \\begin{pmatrix}\n", "0.25 \\\\ \n", "-0.25 \\\\ \n", "0.25 \\\\ \n", "-0.25\n", " \\end{pmatrix} $\n", "π0.5π
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
0--0.5π0.5π0.5π0.499994π0.25π0.500016π0.25π
Gxx$ \\begin{pmatrix}\n", "-0.500003 \\\\ \n", "0.500001 \\\\ \n", "0.000002 \\\\ \n", "0\n", " \\end{pmatrix} $\n", "π0.707109π
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
0.005218--0.25π0.499994π0.25π0.499994π0.499974π0.333316π0.333341π
Gyy$ \\begin{pmatrix}\n", "-0.500008 \\\\ \n", "0.500009 \\\\ \n", "-5\\times 10^{-7} \\\\ \n", "0\n", " \\end{pmatrix} $\n", "π0.707119π
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
0.005607--0.499987π0.25π0.499987π0.25π0.499974π0.333336π0.333312π
Gxy$ \\begin{pmatrix}\n", "0.5 \\\\ \n", "-0.499999 \\\\ \n", "0.000001 \\\\ \n", "-0.000001\n", " \\end{pmatrix} $\n", "π0.707106π
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
0.008731--0.499985π0.25π0.25π0.500016π0.333316π0.333336π0.500002π
Gyx$ \\begin{pmatrix}\n", "0.500007 \\\\ \n", "-0.500005 \\\\ \n", "0 \\\\ \n", "-0.000001\n", " \\end{pmatrix} $\n", "π0.707115π
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
0.005198--0.25π0.499987π0.500015π0.25π0.333341π0.333312π0.500002π
\n", "
\n", "\n", "
\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# import importlib\n", "# importlib.reload(pygsti.report.workspace)\n", "# importlib.reload(pygsti.report.workspaceplots)\n", "# importlib.reload(pygsti.report.workspacetables)\n", "\n", "#Note 2Q angle decompositions\n", "from pygsti.construction import std2Q_XXYYII\n", "from pygsti.construction import std2Q_XYCNOT\n", "\n", "w.GateDecompTable(std2Q_XXYYII.target_model(), std2Q_XXYYII.target_model())\n", "\n", "import scipy\n", "I = np.array([[1,0],[0,1]],'complex')\n", "X = np.array([[0,1],[1,0]],'complex')\n", "Y = np.array([[0,1j],[-1j,0]],'complex')\n", "XX = np.kron(X,X)\n", "YY = np.kron(Y,Y)\n", "IX = np.kron(I,X)\n", "XI = np.kron(X,I)\n", "testU = scipy.linalg.expm(-1j*np.pi/2*XX)\n", "testS = pygsti.unitary_to_process_mx(testU)\n", "testS = pygsti.change_basis(testS,\"std\",\"pp\")\n", "\n", "#mdl_decomp = std2Q_XYCNOT.target_model()\n", "#mdl_decomp.operations['Gtest'] = testS\n", "#w.GateDecompTable(mdl_decomp, mdl_decomp)" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "
\n", "
\n", "
\n", "\n", "
\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "dsLabels = [\"A\",\"B\",\"C\"]\n", "datasets = [ds1, ds2, ds3]\n", "dscmps = {}\n", "for i,ds1 in enumerate(datasets):\n", " for j,ds2 in enumerate(datasets[i+1:],start=i+1):\n", " dscmps[(i,j)] = pygsti.objects.DataComparator([datasets[i],datasets[j]])\n", "\n", "w.DatasetComparisonSummaryPlot(dsLabels, dscmps)" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "
\n", "
\n", "
\n", "\n", "
\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/plain": [ "" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "w.DatasetComparisonHistogramPlot(dscmps[(1,2)])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Saving figures to file\n", "You can also save plot and figures to separate files using their `saveas` method. The output format is determined by the file extension, and allowed extensions are:\n", "\n", "- 'pdf': Adobe portable document format\n", "- 'tex': LaTeX source (uncompiled, *tables only*)\n", "- 'pkl': Python pickle (of a pandas `DataFrame` for tables, a dict for plots)\n", "- 'html': A stand-alone HTML document" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "
\n", "
Gate \">Entanglement Infidelity Avg. Gate Infidelity 1/2 Trace Distance 1/2 Diamond-Dist Non-unitary Ent. Infidelity Non-unitary Avg. Gate Infidelity
Gi0.0747480.0498320.0766170.076840.0744770.049652
Gx0.0771080.0514050.0775910.0775950.0770180.051345
Gy0.0751480.0500980.0752480.0752670.075110.050073
\n", "
\n", "\n", "
\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import os\n", "if not os.path.exists(\"../tutorial_files/tempTest\"):\n", " os.mkdir(\"../tutorial_files/tempTest\")\n", "\n", "obj = w.GatesVsTargetTable(mdl1, tgt)\n", "#obj = w.ErrgenTable(mdl3,tgt)\n", "#obj = w.ColorBoxPlot((\"logl\",), gss, ds1, mdl1, typ='boxes')\n", "\n", "obj.saveas(\"../tutorial_files/tempTest/testSave.pdf\")\n", "obj.saveas(\"../tutorial_files/tempTest/testSave.tex\")\n", "obj.saveas(\"../tutorial_files/tempTest/testSave.pkl\")\n", "obj.saveas(\"../tutorial_files/tempTest/testSave.html\")" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "## Exporting notebooks to HTML\n", "If you want, you can save figure-containing notebooks (like this one) as an HTML file by going to **File => Download As => HTML** in the Jupyter menu. The resulting file will retain all of the plot interactivity, so long as its in a directory with an `offline` folder (because we set `connected=False` above)." ] }, { "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": 2 }