{ "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.0743350.0495570.0760940.076360.0740980.049398
Gx0.0764040.0509360.0768510.0769260.0763410.050894
Gy0.0755330.0503560.0757640.0757850.07550.050334
\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.0423120.043714--
Mdefault-0.041560.0424190.043467
\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
181.293836120.2938311.045361.849231\">★★★★★
2168.649613731.649616.552951.9116831\">★★★★★
\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
GS1168.649613731.649616.552951.9116831\">★★★★★
GS24061.6111373924.61116.552952×10216831\">★★
GS31002.246137865.246416.5529552.316831\">★★★
\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.945004 & 0.009417e^{i0.444\\pi} & 0.006951e^{i0.454\\pi} & 0.001022e^{-i0.776\\pi} \\\\ \n", "0.009417e^{-i0.444\\pi} & 0.015282 & 0.003276e^{i0.076\\pi} & 0.002139e^{i0.155\\pi} \\\\ \n", "0.006951e^{-i0.454\\pi} & 0.003276e^{-i0.076\\pi} & 0.020808 & 0.001819e^{-i0.644\\pi} \\\\ \n", "0.001022e^{i0.776\\pi} & 0.002139e^{-i0.155\\pi} & 0.001819e^{i0.644\\pi} & 0.018906\n", " \\end{pmatrix} $\n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
Gx$ \\begin{pmatrix}\n", "0.482049 & 0.462895e^{i0.501\\pi} & 0.002898e^{i0.512\\pi} & 0.000548e^{-i0.538\\pi} \\\\ \n", "0.462895e^{-i0.501\\pi} & 0.481094 & 0.004182e^{i0.005\\pi} & 0.000556e^{-i0.065\\pi} \\\\ \n", "0.002898e^{-i0.512\\pi} & 0.004182e^{-i0.005\\pi} & 0.018149 & 0.00183e^{i0.502\\pi} \\\\ \n", "0.000548e^{i0.538\\pi} & 0.000556e^{i0.065\\pi} & 0.00183e^{-i0.502\\pi} & 0.018709\n", " \\end{pmatrix} $\n", "
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
Gy$ \\begin{pmatrix}\n", "0.481416 & 0.003826e^{i0.509\\pi} & 0.462881e^{i0.500\\pi} & 0.00059e^{-i0.430\\pi} \\\\ \n", "0.003826e^{-i0.509\\pi} & 0.018169 & 0.003254e^{-i0.013\\pi} & 0.000502e^{-i0.573\\pi} \\\\ \n", "0.462881e^{-i0.500\\pi} & 0.003254e^{i0.013\\pi} & 0.483841 & 0.000585e^{i0.057\\pi} \\\\ \n", "0.00059e^{i0.430\\pi} & 0.000502e^{i0.573\\pi} & 0.000585e^{-i0.057\\pi} & 0.016574\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.006533 \\\\ \n", "0.006533\n", " \\end{pmatrix} $\n", "π0.00924π
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
00.331649π0.242237π
Gx$ \\begin{pmatrix}\n", "-0.351156 \\\\ \n", "0.351156\n", " \\end{pmatrix} $\n", "π0.496609π
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
00.331649π0.495319π
Gy$ \\begin{pmatrix}\n", "-0.353186 \\\\ \n", "0.353186\n", " \\end{pmatrix} $\n", "π0.49948π
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
00.242237π0.495319π
\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.5π0.500009π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.499987π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.5π0.25π0.500008π
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.499987π0.25π0.500008π0.25π
Gxx$ \\begin{pmatrix}\n", "-0.500005 \\\\ \n", "0.500006 \\\\ \n", "-4\\times 10^{-7} \\\\ \n", "0\n", " \\end{pmatrix} $\n", "π0.707114π
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
0.003505--0.25π0.499987π0.25π0.499987π0.499982π0.33333π0.33333π
Gyy$ \\begin{pmatrix}\n", "-0.500557 \\\\ \n", "0.500557 \\\\ \n", "0 \\\\ \n", "0\n", " \\end{pmatrix} $\n", "π0.707895π
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
0--0.5π0.25π0.5π0.25π0.499982π0.33334π0.333323π
Gxy$ \\begin{pmatrix}\n", "-0.500007 \\\\ \n", "0.500006 \\\\ \n", "0.000001 \\\\ \n", "0\n", " \\end{pmatrix} $\n", "π0.707116π
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
0.00368--0.500009π0.25π0.25π0.500008π0.33333π0.33334π0.500009π
Gyx$ \\begin{pmatrix}\n", "0.499981 \\\\ \n", "-0.49998 \\\\ \n", "-0.000002 \\\\ \n", "0\n", " \\end{pmatrix} $\n", "π0.707079π
\n", "
\n", "
\n", "
\n", "\n", "
\n", "
0.003891--0.25π0.499987π0.500008π0.25π0.33333π0.333323π0.500009π
\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.0743350.0495570.0760940.076360.0740980.049398
Gx0.0764040.0509360.0768510.0769260.0763410.050894
Gy0.0755330.0503560.0757640.0757850.07550.050334
\n", "
\n", "\n", "
\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "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 }