Christopher Granade, Joshua Combes and D. G. Cory
from __future__ import division
%matplotlib inline
import numpy as np
import qutip as qt
import qinfer as qi
import matplotlib
matplotlib.style.use('ggplot')
import matplotlib.pyplot as plt
from matplotlib.patches import Ellipse
import tempfile as tf
import os
pallette = plt.rcParams['axes.color_cycle']
plt.rcParams['legend.fontsize'] = 18
plt.rcParams['axes.labelsize'] = 22
from qinfer.tomography.plotting_tools import (
plot_cov_ellipse, plot_decorate_rebits, plot_rebit_modelparams, plot_rebit_prior, plot_rebit_posterior
)
I, X, Y, Z = qt.qeye(2), qt.sigmax(), qt.sigmay(), qt.sigmaz()
def diffusion_movie(n_steps=1000, save_stills=()):
tempdir = tf.mkdtemp()
print "Saving to {}.".format(tempdir)
pbar = qt.ui.TextProgressBar()
pbar.start(n_steps, chunk_size=1)
basis = qi.tomography.pauli_basis(1)
diffusive_model = qi.BinomialModel(qi.tomography.DiffusiveTomographyModel(basis, False))
true_states = []
est_states = []
true_state = np.array([[1, 0.99, 0, 0, 0]]) / np.sqrt(2)
true_state[0, -1] = 0.0045
diffusive_prior = qi.ProductDistribution(
qi.tomography.GADFLIDistribution(
qi.tomography.GinibreReditDistribution(basis),
I / 2 - 0.02 * Z / 2 + 0.88 * X / 2
),
qi.LogNormalDistribution(0.0, 0.006)
)
updater = qi.smc.SMCUpdater(diffusive_model, 3000, diffusive_prior)
heuristic = qi.tomography.RandomPauliHeuristic(updater, other_fields={'n_meas': 25, 't': 1})
fig, (ax_rebit, ax_cov) = plt.subplots(1, 2, figsize=(1920 * 12 / 1080, 12))
for idx_exp in xrange(n_steps):
expparams = heuristic()
outcome = diffusive_model.simulate_experiment(true_state, expparams)
updater.update(outcome, expparams)
est_states.append(basis.modelparams_to_state(updater.est_mean()[:-1]))
true_states.append(basis.modelparams_to_state(true_state[0, :-1]))
err = np.linalg.norm(true_state[0] - updater.est_mean(), 2)
true_state = diffusive_model.update_timestep(true_state, expparams)[:, :, 0]
plt.sca(ax_rebit)
plot_rebit_posterior(updater, prior=None, true_state=true_state, rebit_axes=[1, 3], true_size=600)
plt.xticks([-1, 0, 1], size=14)
plt.yticks([-1, 0, 1], size=14)
plt.sca(ax_cov)
updater.plot_covariance(param_slice=np.s_[1:4], tick_params={'size': 20})
plt.savefig(os.path.join(tempdir, '{:05}.png'.format(idx_exp)), dpi=1080 * 100 / 1200)
if idx_exp in save_stills:
plt.savefig(os.path.join(tempdir, '{:05}.pdf'.format(idx_exp)), dpi=1080 * 100 / 1200)
ax_rebit.clear()
ax_cov.clear()
pbar.update(idx_exp)
return true_states, est_states
true_states, est_states = diffusion_movie(10000, save_stills=[1000 * idx for idx in xrange(1, 10)])
Saving to /tmp/tmpCq3B7o. 1.0%. Run time: 67.76s. Est. time left: 00:01:51:47 2.0%. Run time: 131.56s. Est. time left: 00:01:47:26 3.0%. Run time: 195.61s. Est. time left: 00:01:45:24 4.0%. Run time: 263.44s. Est. time left: 00:01:45:22 5.0%. Run time: 330.26s. Est. time left: 00:01:44:34 6.0%. Run time: 397.35s. Est. time left: 00:01:43:45 7.0%. Run time: 463.27s. Est. time left: 00:01:42:34 8.0%. Run time: 527.75s. Est. time left: 00:01:41:09 9.0%. Run time: 593.93s. Est. time left: 00:01:40:05 10.0%. Run time: 660.34s. Est. time left: 00:01:39:03 11.0%. Run time: 723.63s. Est. time left: 00:01:37:34 12.0%. Run time: 787.11s. Est. time left: 00:01:36:12 13.0%. Run time: 851.94s. Est. time left: 00:01:35:01 14.0%. Run time: 916.34s. Est. time left: 00:01:33:48 15.0%. Run time: 981.08s. Est. time left: 00:01:32:39 16.0%. Run time: 1045.72s. Est. time left: 00:01:31:30 17.0%. Run time: 1111.48s. Est. time left: 00:01:30:26 18.0%. Run time: 1176.59s. Est. time left: 00:01:29:20 19.0%. Run time: 1241.75s. Est. time left: 00:01:28:13 20.0%. Run time: 1308.85s. Est. time left: 00:01:27:15 21.0%. Run time: 1373.86s. Est. time left: 00:01:26:08 22.0%. Run time: 1438.81s. Est. time left: 00:01:25:01 23.0%. Run time: 1505.17s. Est. time left: 00:01:23:59 24.0%. Run time: 1568.57s. Est. time left: 00:01:22:47 25.0%. Run time: 1631.72s. Est. time left: 00:01:21:35 26.0%. Run time: 1694.48s. Est. time left: 00:01:20:22 27.0%. Run time: 1757.57s. Est. time left: 00:01:19:11 28.0%. Run time: 1820.74s. Est. time left: 00:01:18:01 29.0%. Run time: 1885.02s. Est. time left: 00:01:16:52 30.0%. Run time: 1948.88s. Est. time left: 00:01:15:47 31.0%. Run time: 2011.91s. Est. time left: 00:01:14:38 32.0%. Run time: 2074.69s. Est. time left: 00:01:13:28 33.0%. Run time: 2137.90s. Est. time left: 00:01:12:20 34.0%. Run time: 2201.56s. Est. time left: 00:01:11:13 35.0%. Run time: 2264.74s. Est. time left: 00:01:10:05 36.0%. Run time: 2327.52s. Est. time left: 00:01:08:57 37.0%. Run time: 2390.59s. Est. time left: 00:01:07:50 38.0%. Run time: 2453.88s. Est. time left: 00:01:06:43 39.0%. Run time: 2516.90s. Est. time left: 00:01:05:36 40.0%. Run time: 2581.04s. Est. time left: 00:01:04:31 41.0%. Run time: 2643.90s. Est. time left: 00:01:03:24 42.0%. Run time: 2706.93s. Est. time left: 00:01:02:18 43.0%. Run time: 2770.12s. Est. time left: 00:01:01:12 44.0%. Run time: 2833.48s. Est. time left: 00:01:00:06 45.0%. Run time: 2897.07s. Est. time left: 00:00:59:00 46.0%. Run time: 2960.11s. Est. time left: 00:00:57:54 47.0%. Run time: 3022.64s. Est. time left: 00:00:56:48 48.0%. Run time: 3085.53s. Est. time left: 00:00:55:42 49.0%. Run time: 3148.47s. Est. time left: 00:00:54:36 50.0%. Run time: 3212.77s. Est. time left: 00:00:53:32 51.0%. Run time: 3275.71s. Est. time left: 00:00:52:27 52.0%. Run time: 3338.65s. Est. time left: 00:00:51:21 53.0%. Run time: 3402.26s. Est. time left: 00:00:50:17 54.0%. Run time: 3465.29s. Est. time left: 00:00:49:11 55.0%. Run time: 3528.25s. Est. time left: 00:00:48:06 56.0%. Run time: 3591.17s. Est. time left: 00:00:47:01 57.0%. Run time: 3655.75s. Est. time left: 00:00:45:56 58.0%. Run time: 3720.92s. Est. time left: 00:00:44:53 59.0%. Run time: 3783.78s. Est. time left: 00:00:43:49 60.0%. Run time: 3848.76s. Est. time left: 00:00:42:45 61.0%. Run time: 3912.63s. Est. time left: 00:00:41:41 62.0%. Run time: 3977.23s. Est. time left: 00:00:40:37 63.0%. Run time: 4040.68s. Est. time left: 00:00:39:33 64.0%. Run time: 4103.81s. Est. time left: 00:00:38:28 65.0%. Run time: 4167.64s. Est. time left: 00:00:37:24 66.0%. Run time: 4231.44s. Est. time left: 00:00:36:19 67.0%. Run time: 4294.72s. Est. time left: 00:00:35:15 68.0%. Run time: 4358.07s. Est. time left: 00:00:34:10 69.0%. Run time: 4421.45s. Est. time left: 00:00:33:06 70.0%. Run time: 4486.73s. Est. time left: 00:00:32:02 71.0%. Run time: 4552.52s. Est. time left: 00:00:30:59 72.0%. Run time: 4615.65s. Est. time left: 00:00:29:54 73.0%. Run time: 4678.71s. Est. time left: 00:00:28:50 74.0%. Run time: 4742.11s. Est. time left: 00:00:27:46 75.0%. Run time: 4805.56s. Est. time left: 00:00:26:41 76.0%. Run time: 4869.36s. Est. time left: 00:00:25:37 77.0%. Run time: 4932.84s. Est. time left: 00:00:24:33 78.0%. Run time: 4995.55s. Est. time left: 00:00:23:29 79.0%. Run time: 5058.94s. Est. time left: 00:00:22:24 80.0%. Run time: 5123.75s. Est. time left: 00:00:21:20 81.0%. Run time: 5187.62s. Est. time left: 00:00:20:16 82.0%. Run time: 5251.30s. Est. time left: 00:00:19:12 83.0%. Run time: 5314.64s. Est. time left: 00:00:18:08 84.0%. Run time: 5378.31s. Est. time left: 00:00:17:04 85.0%. Run time: 5441.60s. Est. time left: 00:00:16:00 86.0%. Run time: 5505.13s. Est. time left: 00:00:14:56 87.0%. Run time: 5568.67s. Est. time left: 00:00:13:52 88.0%. Run time: 5632.15s. Est. time left: 00:00:12:48 89.0%. Run time: 5695.83s. Est. time left: 00:00:11:43 90.0%. Run time: 5760.30s. Est. time left: 00:00:10:40 91.0%. Run time: 5823.69s. Est. time left: 00:00:09:35 92.0%. Run time: 5886.75s. Est. time left: 00:00:08:31 93.0%. Run time: 5949.77s. Est. time left: 00:00:07:27 94.0%. Run time: 6013.39s. Est. time left: 00:00:06:23 95.0%. Run time: 6077.14s. Est. time left: 00:00:05:19 96.0%. Run time: 6140.26s. Est. time left: 00:00:04:15 97.0%. Run time: 6204.73s. Est. time left: 00:00:03:11 98.0%. Run time: 6267.70s. Est. time left: 00:00:02:07 99.0%. Run time: 6330.96s. Est. time left: 00:00:01:03
/home/cgranade/anaconda/lib/python2.7/site-packages/qinfer/utils.py:109: ApproximationWarning: Numerical error in covariance estimation causing positive semidefinite violation. warnings.warn('Numerical error in covariance estimation causing positive semidefinite violation.', ApproximationWarning)
To compile these frames into a video, use ffmpeg
:
$ ffmpeg -framerate 30 -i %05d.png -c:v libx264 -r 30 -pix_fmt yuv420p out.mp4