Last active
January 16, 2016 04:37
-
-
Save cgranade/9b3f8c4c8173eebf5f35 to your computer and use it in GitHub Desktop.
Practical Bayesian Tomography: Supplementary Material
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"# QInfer Tomography Tutorial #\n", | |
"\n", | |
"[Christopher Granade](http://www.cgranade.com/), Joshua Combes and D. G. Cory. <br>\n", | |
"Supplemental material to *Practical Bayesian Tomography*.\n", | |
"$\n", | |
"\\newcommand{\\id}{\\unicode{x1D7D9}}\n", | |
"\\newcommand{\\sket}[1]{|#1\\rangle\\!\\rangle}\n", | |
"\\newcommand{\\sbraket}[1]{\\langle\\!\\langle#1\\rangle\\!\\rangle}\n", | |
"\\newcommand{\\sbra}[1]{\\langle\\!\\langle#1|}\n", | |
"\\newcommand{\\Cov}{\\operatorname{Cov}}\n", | |
"\\newcommand{\\Tr}{\\operatorname{Tr}}\n", | |
"$" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Preamble" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Here, we take care of importing the various libraries that we need, as well as configuring settings needed to export this tutorial in a nice way." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 1, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": [ | |
"from __future__ import division\n", | |
"%matplotlib inline\n", | |
"%config InlineBackend.figure_formats = ['png', 'pdf']" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 2, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": [ | |
"# This is redundant with the actual tutorial, but we use it to force\n", | |
"# grayscale images where supported.\n", | |
"import qutip as qt\n", | |
"qt.settings.colorblind_safe = True" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 3, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": [ | |
"from IPython.display import display, Latex" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 4, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": [ | |
"import matplotlib.pyplot as plt\n", | |
"plt.style.use('ggplot')" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 5, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [], | |
"source": [ | |
"# We suppress warnings in this tutorial for ease of exporting to LaTeX.\n", | |
"import warnings\n", | |
"warnings.filterwarnings('ignore')" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## Introduction" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"In this Notebook, we demonstrate the use of [QInfer](https://github.com/csferrie/python-qinfer) for Bayesian state and process tomography. In particular, we show how to estimate states and channels given data synthesized from a description of a true state, and discuss how to obtain region estimates, covariance superoperators and other useful functions of tomography posteriors. We then discuss how to apply these techniques in experimental systems." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"The tomography implementation in QInfer is based on [QuTiP](http://qutip.org/) and [NumPy](numpy.org), so we start by importing everything here." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 6, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": [ | |
"import numpy as np\n", | |
"import qutip as qt\n", | |
"import qinfer as qi" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"As a first step, we define a *basis* for performing tomography; the choice of basis is largely arbitrary, but depending on the experiment, some bases may be more or less convienent. Here, we focus on the example of the single-qubit Pauli basis $B = \\{\\id, \\sigma_x, \\sigma_y, \\sigma_z\\}$." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 7, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"\n", | |
" <strong>TomographyBasis:</strong>\n", | |
" dims=$2$\n", | |
" <p>\n", | |
" \\begin{equation}\n", | |
" \n", | |
" 𝟙 = \n", | |
" \\left(\\begin{matrix}\n", | |
" 0.707&0\\\\0&0.707\n", | |
" \\end{matrix}\\right)\n", | |
" ,\n", | |
" \\sigma_x = \n", | |
" \\left(\\begin{matrix}\n", | |
" 0&0.707\\\\0.707&0\n", | |
" \\end{matrix}\\right)\n", | |
" ,\n", | |
" \\sigma_y = \n", | |
" \\left(\\begin{matrix}\n", | |
" 0&-0.707\\mathrm{i}\\\\0.707\\mathrm{i}&0\n", | |
" \\end{matrix}\\right)\n", | |
" ,\n", | |
" \\sigma_z = \n", | |
" \\left(\\begin{matrix}\n", | |
" 0.707&0\\\\0&-0.707\n", | |
" \\end{matrix}\\right)\n", | |
" \n", | |
" \\end{equation}\n", | |
" </p>\n", | |
" " | |
], | |
"text/plain": [ | |
"<TomographyBasis dims=[2] at 140700690071184>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"basis = qi.tomography.pauli_basis(1)\n", | |
"display(basis)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"We will get a lot of use out of the Pauli basis, so we also define some useful shorthand." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 8, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": [ | |
"I, X, Y, Z = qt.qeye(2), qt.sigmax(), qt.sigmay(), qt.sigmaz()" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Basis objects are responsible for converting between QuTiP's rich ``Qobj`` format and the unstructured model parameter representation used by QInfer." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 9, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"array([ 0.70710678, 0.70710678, 0. , 0. ])" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"display(basis.state_to_modelparams(I / 2 + X / 2))" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 10, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/latex": [ | |
"Quantum object: dims = [[2], [2]], shape = [2, 2], type = oper, isherm = True\\begin{equation*}\\left(\\begin{array}{*{11}c}1.000 & 0.0\\\\0.0 & 0.0\\\\\\end{array}\\right)\\end{equation*}" | |
], | |
"text/plain": [ | |
"Quantum object: dims = [[2], [2]], shape = [2, 2], type = oper, isherm = True\n", | |
"Qobj data =\n", | |
"[[ 1. 0.]\n", | |
" [ 0. 0.]]" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"display(basis.modelparams_to_state(np.array([1, 0, 0, 1]) / np.sqrt(2)))" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Having defined a basis, we then define the core object describing a tomography experiment, the *model*. In QInfer, models encapsulate the likelihood function, experimental parameters and other useful metadata about the experimental properties being estimated. In our case, we use ``TomographyModel`` to describe the single-shot experiment, and ``BinomialModel`` to describe batches of the single-shot experiment." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 11, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"\n", | |
" <strong>BinomialModel</strong> at 0x7ff76ea81050: 4 model parameters\n", | |
" <br>\n", | |
" <p>Model chain:</p>\n", | |
" <ul><li>\n", | |
" <strong>TomographyModel</strong> at 0x7ff76ea81290: 4 model parameters\n", | |
" </li>\n", | |
" </ul>\n", | |
" " | |
], | |
"text/plain": [ | |
"<qinfer.derived_models.BinomialModel at 0x7ff76ea81050>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"model = qi.BinomialModel(qi.tomography.TomographyModel(basis))\n", | |
"display(model)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"A ``Model`` defines a vector of model parameters; for a single qubit ``TomographyModel``, this is a vector of length 4, each describing a different element of the Hermitian operator basis. Each ``Model`` also defines experiment parameters as a NumPy record array. A record then describes a single measurement of the model." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 12, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"[('meas', float, 4), ('n_meas', 'uint')]" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"display(model.expparams_dtype)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"In this case, the experiment parameters record has two *fields*: ``meas`` and ``n_meas``. The first is a vector of four floats corresponding to $\\sket{M} = (\\sbraket{B_0 | M}, \\sbraket{B_1 | M}, \\sbraket{B_2 | M}, \\sbraket{B_3 | M)}$. The second is an unsigned integer (``uint``) describing how many times that measurement is performed. For instance, measuring $(\\id + \\sigma_z) / 2$ 40 times is given by the array:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 13, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"array([([0.7071067811865475, 0.0, 0.0, 0.7071067811865475], 40L)], \n", | |
" dtype=[('meas', '<f8', (4,)), ('n_meas', '<u8')])" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"expparams = np.array([\n", | |
" # Each tuple, marked with (), defines a single record.\n", | |
" (\n", | |
" # Within each tuple, fields are separated by commas.\n", | |
" # The fields follow in the order given by the model,\n", | |
" # so the first field is meas, a length-4 vector.\n", | |
" [1 / np.sqrt(2), 0, 0, 1 / np.sqrt(2)],\n", | |
" # The second field is then the number of measurements.\n", | |
" 40\n", | |
" )\n", | |
"],\n", | |
"# We finish building the array by passing along the right data\\\n", | |
"# type to NumPy. This is somwhat of a QInfer idiom.\n", | |
"dtype=model.expparams_dtype)\n", | |
"display(expparams)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"The fields of a record array can be obtained by indexing. For instance, the ``['meas']`` field is then a $1 \\times 4$ array, with the first index allowing for a sequence of measurements to be described at once." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 14, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"array([[ 0.70710678, 0. , 0. , 0.70710678]])" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"display(expparams['meas'])" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Note that by convention, ``meas`` is normalized to $1 / \\sqrt{d}$." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Often, we will not construct experiments directly, but will instead rely on QInfer's heuristics (described below). In any case, once we have a model, the next step is to create a prior. QInfer comes with several useful fiducial priors, as well as insightful priors constructed from amplitude damping channels. For instance, to create a Hilbert-Schmidt uniform prior constrained to rebits, we use the ``GinibreReditDistribution``:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 15, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [], | |
"source": [ | |
"fiducial_prior = qi.tomography.GinibreReditDistribution(basis)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 16, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"application/pdf": "JVBERi0xLjQKJazcIKu6CjEgMCBvYmoKPDwgL1R5cGUgL0NhdGFsb2cgL1BhZ2VzIDIgMCBSID4+\nCmVuZG9iago4IDAgb2JqCjw8IC9YT2JqZWN0IDcgMCBSIC9QYXR0ZXJuIDUgMCBSCi9Qcm9jU2V0\nIFsgL1BERiAvVGV4dCAvSW1hZ2VCIC9JbWFnZUMgL0ltYWdlSSBdIC9FeHRHU3RhdGUgNCAwIFIK\nL1NoYWRpbmcgNiAwIFIgL0ZvbnQgMyAwIFIgPj4KZW5kb2JqCjEwIDAgb2JqCjw8IC9Hcm91cCA8\nPCAvQ1MgL0RldmljZVJHQiAvUyAvVHJhbnNwYXJlbmN5IC9UeXBlIC9Hcm91cCA+PiAvUGFyZW50\nIDIgMCBSCi9NZWRpYUJveCBbIDAgMCAyODkuMTYyNSAyNzYuMjcxODc1IF0gL1Jlc291cmNlcyA4\nIDAgUiAvVHlwZSAvUGFnZQovQ29udGVudHMgOSAwIFIgPj4KZW5kb2JqCjkgMCBvYmoKPDwgL0Zp\nbHRlciAvRmxhdGVEZWNvZGUgL0xlbmd0aCAxMSAwIFIgPj4Kc3RyZWFtCniczJ3brqXZeZbP6yrm\nYThYf4/95jBWiCWOiGLBcQQJYMVGxoqMuCdyB3BtvM87ZnVXdX3D6tBGOAbL1b1qrn+Of4xvfJt3\nk1+//pRf/+mVXr/W///DKz399ctPSf/7N6+y9pNH6frDP/7whzLHU2Zes+ufpq//+J8//cOn7/5S\nn/d7fdDaK9Vdcp/+/F9+6uuZfELrzzp/g9+Rn/31P/zHH/5hGftJn//p+69/+uof8ht/9/r2k0up\nT3n/93/7+9e/f/329d1fFh6svP7NK/Nt9U3/oP/1y09jPTvN3Zv+8/XTff1vvvzFn/7209+8fvf5\nM9NTv/8/fdkfPv6rf/HTf1PL3y/Gp198uj7FNw846w8P+ItP74fLrz98+p1ecnp9JP2hz2eUMdP5\nKzXp7a2stfsPv/n0i1+9vvvr/Mrp9at/+LSeOtdO5/3/6j9++ov8pH/1+tWvP/3rX+nj0pP4RP3n\n8//Q3//ur/7+13/37/7pb//ut7//+M1/+e0//f71V//109/wn9fPfUc572fUXsrkP18t3Y/+1c9/\nSz/9d339nu4P8u1D/pQ3ldN62qjvv/UveVX6Wv8fX9XUev74nH//D/8Er+ePfv6PXknwa798mOtr\n+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\nKAL0WKTHJP9i+pCNZBUKXnBli1c+trR |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment