Skip to content

Instantly share code, notes, and snippets.

@mfouesneau
Created May 26, 2017 09:31
Show Gist options
  • Save mfouesneau/43a7c70fcdd2f9b70ce502a7415dfca5 to your computer and use it in GitHub Desktop.
Save mfouesneau/43a7c70fcdd2f9b70ce502a7415dfca5 to your computer and use it in GitHub Desktop.
Trying PyMC3 on power-law distributions
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Plotting & imports"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Loading configuration\n",
"# Don't forget that mac has this annoying configuration that leads\n",
"# to limited number of figures/files\n",
"# ulimit -n 4096 <---- osx limits to 256\n",
"\n",
"# Notebook matplotlib mode\n",
"%pylab inline \n",
"# set for retina or hi-resolution displays\n",
"%config InlineBackend.figure_format='retina' \n",
"\n",
"import pylab as plt\n",
"import theano.tensor as tt\n",
"import pymc3 as pm\n",
"from scipy import stats\n",
"import numpy as np"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Definition of Power-law Random variable"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"def powerlaw_rvs(N, slope, xmin, xmax):\n",
" \"\"\" Draw random samples from a power-law RV: p(X|xmin, xmax, slope)\n",
"\n",
" PDF:\n",
"\n",
" .. math::\n",
" p(X|xmin, xmax, slope) = X ^ slope / norm\n",
"\n",
" norm = \\\\int_{Xmin}^{Xmax} t ^ slope dt\n",
" = \\\\frac{1}{slope + 1} \\\\times \\\\ln(Xmax/Xmin) if slope = -1\n",
" = \\\\frac{1}{slope + 1} \\\\times (Xmax ^ {slope + 1} - Xmin ^ {slope + 1} otherwise\n",
"\n",
" Parameters\n",
" ----------\n",
" xmin: float\n",
" lower limit on X\n",
"\n",
" xmax: float\n",
" upper limit on X\n",
"\n",
" slope: float\n",
" power-law slope\n",
" \n",
" Returns\n",
" -------\n",
" seq: ndarray\n",
" random draws\n",
" \"\"\"\n",
" x = np.random.uniform(0.0, 1.0, N)\n",
"\n",
" b = slope + 1.\n",
" _x = np.atleast_1d(x)\n",
"\n",
" if b == 0:\n",
" return xmin * (xmax / xmin) ** _x\n",
" else:\n",
" return (( xmax ** b - xmin ** b ) * _x + xmin ** b) ** (1. / b)\n",
" \n",
" \n",
"def powerlaw_pdf(X, slope, xmin, xmax):\n",
" \"\"\"\n",
" Parameters\n",
" ----------\n",
" xmin: float\n",
" lower limit on X\n",
"\n",
" xmax: float\n",
" upper limit on X\n",
"\n",
" slope: float\n",
" power-law slope\n",
" \n",
" Returns\n",
" -------\n",
" seq: ndarray\n",
" p(X | alpha, xmin, xmax)\n",
" \"\"\"\n",
" b = slope + 1\n",
" if b == 0:\n",
" norm = np.log(xmax / xmin)\n",
" else:\n",
" norm = 1. / b * (xmax ** b - xmin ** b)\n",
" _X = np.atleast_1d(np.asarray(X))\n",
" f_X = np.zeros(_X.shape, dtype=float)\n",
" ind = (_X >= xmin) & (_X <= xmax)\n",
" f_X[ind] = _X[ind] ** slope / norm\n",
" return f_X\n",
" \n",
" \n",
"class ContinuousPowerLaw(pm.Continuous):\n",
" R\"\"\"\n",
" Discrete powerlaw distribution.\n",
" \n",
" Parameters\n",
" ----------\n",
" lower : float\n",
" Lower limit.\n",
" upper : float\n",
" Upper limit (upper > lower).\n",
" slope: float\n",
" index of the power law\n",
" \"\"\"\n",
" def __init__(self, lower, upper, slope, *args, **kwargs):\n",
" super(self.__class__, self).__init__(*args, **kwargs)\n",
" self.lower = tt.as_tensor_variable(lower)\n",
" self.upper = tt.as_tensor_variable(upper)\n",
" self.slope = tt.as_tensor_variable(slope)\n",
" b = slope + 1\n",
" if b == 0:\n",
" self.norm = tt.log(upper / lower)\n",
" else:\n",
" self.norm = tt.as_tensor_variable(1. / b * (upper ** b - lower ** b))\n",
" \n",
" def random(self, point=None, size=None, repeat=None):\n",
" lower, upper = pm.distributions.draw_values([self.lower, self.upper], point=point)\n",
" return pm.distributions.generate_samples(powerlaw_rvs, self.slope, lower, upper, \n",
" dist_shape=self.shape,\n",
" size=size)\n",
"\n",
" def logp(self, value):\n",
" upper = self.upper\n",
" lower = self.lower\n",
" return pm.distributions.dist_math.bound(tt.log(value) * self.slope - tt.log(self.norm),\n",
" lower <= value, value <= upper)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Generate mock data."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"# True values\n",
"Mmin = 0.1\n",
"alpha = -2.35\n",
"Mmax_true = 10\n",
"k = int(1e3) # number of observed stars \n",
"# measured masses\n",
"np.random.seed(1234)\n",
"Dk = powerlaw_rvs(k, alpha, Mmin, Mmax_true)\n",
"\n",
"# add log normal noise for later use\n",
"log_normal_dispersion = 0.3\n",
"Dk_noisy = Dk * np.random.lognormal(1, 0.3, size=len(Dk))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# PyMC3 model definition, noise free version.\n",
"\n",
"using noise free mock data and fitting for slope and upper mass."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"Auto-assigning NUTS sampler...\n",
"Initializing NUTS using advi...\n",
"Average ELBO = 800.26: 100%|██████████| 200000/200000 [00:15<00:00, 13184.89it/s]\n",
"Finished [100%]: Average ELBO = 800.27\n",
"100%|██████████| 10000/10000 [00:12<00:00, 797.49it/s]\n"
]
}
],
"source": [
"noise_free_model = pm.Model()\n",
"\n",
"with noise_free_model:\n",
" # prior P(n)\n",
" Mmax = pm.Uniform(\"Mmax\", lower=max(Dk), upper=1000)\n",
" slope = pm.Uniform(\"slope\", lower=-4, upper=-1)\n",
" # likelihood: P(Sk|n)\n",
" D_obs = ContinuousPowerLaw(\"D_obs\", lower=Mmin, upper=Mmax, slope=slope, shape=(len(Dk),), observed=Dk)\n",
"\n",
" start = {\"Mmax\": max(Dk), # the highest number is a reasonable starting point\n",
" \"slope\": alpha # real value\n",
" } \n",
" trace = pm.sample(10000, start=start, njobs=4)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABq4AAAIqCAYAAABVB7tKAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAWJQAAFiUBSVIk8AAAIABJREFUeJzs3Xt8zvX/x/HH+5rD5rTFnDVGjr8OCo0cN0ohh8yhnKII\nRSlSfYuVDjr4lkolObfom1M5hJhRDskhlXKIHVAkshxGtr1/f+zQru2aXZvNDp732+1zu3gfXu/3\n5/LZ4eV9fd4fY61FREREREREREREREREJK858noCIiIiIiIiIiIiIiIiIqCFKxERERERERERERER\nEckntHAlIiIiIiIiIiIiIiIi+YIWrkRERERERERERERERCRf0MKViIiIiIiIiIiIiIiI5AtauBIR\nEREREREREREREZF8QQtXIiIiIiIiIiIiIiIiki9o4UpERERERERERERERETyBS1ciYiIiIiIiIiI\niIiISL6ghSsRERERERERERERERHJF7RwJSIiIiIiIiIiIiIiIvmCFq5EREREREREREREREQkX9DC\nlYiIiIiIiIiIiIiIiOQLWrgSERERERERERERERGRfKFQLVwZY7obY942xmwwxsQYYxKMMXMyaHud\nMWasMWatMSbaGHPBGHPUGLPEGNPmCk9dREREREQkW4wxVY0xM4wxR4wx540xEcaYN40xPlmMc40x\n5q2k/ueT4k03xlTNrbGNMc8l5W0JxpigS7QbYIz51hhz2hhzyhizzhjTMSvnJyIiIiIiBYOx1ub1\nHHKMMWYncCNwBjgM1ANCrbX9XbSdB/QEfga+AU4CdYHOQBFgpLX23Ss0dRERERERkSwzxtQENgO+\nwBJgL3ArEATsAZpba/9yI07ZpDjXAWHAdyTmU12BY0Aza21kTo5tjLklqf95oBRwu7U2zEW7N4DH\ngUPAAqAY0BsoBzxirX0vs/MTEREREZGCo7AtXLUGDltrDyT9eR3wcQYLV/2BXdbaXWnKWwJrgASg\nhrX22BWYuoiIiIiISJYZY1YB7YARqRdwjDGTgFHAB9ba4W7EmQo8CPzXWjsmVfkjwNvASmtth5wa\n2xhTHNgB/AUcAPriYuHKGNMM2AjsB5pYa/9OKvdL6l8CqGetjc7sHEVEREREpGAoVFsFWmvXW2sP\nuNl2TtpFq6Tyr4FwEj/Fd1vOzlBERERERCRnGGP8gduBSBd3HY0HzgL9jDFemcQpQeLC0VkgJE31\n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\nf0fXoSPtobxNRERECjLlbVnj5eVlK1eu7HZ75W3569AdVyIiIiICJH5iLO2Da6tUqQJAnTp1KFmy\npFOdw+GgYsWK6bacOHToEBMnTiQsLIzo6GhiY2NT6owxHDlyJN3YY8eOJTw8nE8++QRjDPfddx8D\nBw5M1+7EiRNA4if+MhIcHEy3bt1Yt24d33zzDTt37uSbb77h888/Z8mSJQwYMICZM2emtD927Bhv\nv/028fHxTJw4McO4yby9vTl58mSm7ZK5+jRcTujduzcff/wxq1atokGDBnTp0gVPT0/WrFnD0aNH\n8fPz49ChQ3h4eFzRWCIiIiIiknuUt7mXt5UtW5Y//vgj03bJlLflL1q4EhEREREgcUEmreRfeF3V\nQeJDYC9evJjy94iICJo0aUJMTAwtW7akffv2eHt74+HhQWRkJLNnz+bChQsuY3Xr1o1Vq1YB8Oij\nj7psk7zNxPnz5y95Lh4eHrRr14527doBibsMLFy4kIEDBzJnzhy6detG586dAahYsSK33norM2bM\nuGTMZBcuXKB48eJutc1NDoeDpUuX8t///pePP/6YOXPm4OnpSWBgIIsWLaJ79+4AlC9f/orGEilI\ntm/f7rK8UaNGV3gmIiJ5R98LRQoW5W3u5W2xsbEutynMba6+p4aEhBAYGKi8LQu0cCUiIiIiOWbS\npEn89ddfzJo1i379+jnVzZ8/n1mzZrnst3//fkaPHk3ZsmWJiYnhwQcfZOvWrRQrVsypXYUKFYB/\nP8HnLmMMwcHB/PDDD7z44ouEhYWlJEAA33//fUqydCnWWk6fPk3VqlXdHju39kqHxERvzJgxjBkz\nxqn8woUL7N+/H19fX6pXr37FY4mIiIiISP51NeRtp06dombNmm6Prbwtf9HClYiIiIjkmAMHDgCJ\nD9tNKzw8PN2WFgD//PMPvXr14ty5cyxatIgNGzbw4osv8thjj/Hee+85ta1cuTLly5dn79692Zpf\n6dKlAZKfd5MiLCyMDz74INP+e/fuxVqbpQfdTp48mejoaLfbDxgwwO0EKCPz5s3jn3/+4b777rus\nODkdS0RERERE8t7Vkrc1bNjQ7TGVt+UvjryegIiIiIgUHjVq1AASk53UVq1axfTp0132eeKJJ9i1\naxdjx46lXbt2hISE0Lx5c6ZOncqCBQvStW/VqhV//vknBw8eTFc3f/581qxZky7BATh69Cgffvgh\nxhhatWqVUh4bG8uhQ4eoX78+y5cvZ9SoUZQsWdJljC1btgDQpEmTDN+DtCIiIoiPj3f7cHfrC4DT\np0+nK/v+++8ZM2YM5cqVY+zYsenqDx48yN69e4mPj7/sWCIiIiIiUvBcLXlbUFBQhu9BWrmZt509\nezZdmfK2S9MdVyIiIiKSY4YPH87MmTMJDg6me/fuVK1alZ9++olVq1bRs2dP5s+f79R+yZIlTJky\nhWbNmjFhwgQgcd/uefPm0bBhQwYPHkyjRo3w9/dP6dO9e3cWLlzIqlWrGDZsmFO8b7/9lsmTJ1Op\nUiVatGiR0i8iIoLly5dz/vx5unbtmrL3N8A333xD7dq1CQ0NJSgoiLvuuotRo0a5/JThqlWr8PDw\ncEqg8tLtt9+Ol5cX119/PaVLl+aXX35h+fLllCxZkqVLl1KpUqV0fYKCgoiOjiYyMhI/P7/LiiUi\nIiIiIgXP1ZC3FSlSxGmbwbz08MMP4+vrq7wtC3THlYiIiIhgjHH5C39mdcn1yW644QbCw8Np3rw5\nX375JR988AGnT59m8eLFPPTQQ06xDh06xAMPPMA111zDvHnzcDj+/dW0WrVqzJgxg7///pt7772X\nuLi4lLru3btTsWJF5syZk24uo0ePTkmofvzxR6ZOncrkyZPZuHFjysNwFy5c6NQnLCwMLy8vVq9e\nzY4dO3A4HE6JQbK///6bzz//nJYtW6bs2Z7XevTowZkzZwgNDeXNN9/kxx9/ZOjQoezevZsWLVq4\n7GOMcXqvLyeWiIiIiIhcOcrb3M/b7r777iw9mzg3tWvXTnlbFhlXt9JJ1hhjLKTfc1OkoNm+fbvL\n8kaNGl3hmYhIMn1dirg2ceJE/vOf/7Bjxw5uuummy4oVEBDAxx9/jDGGW2+9lZMnT/LTTz9x/fXX\nO7V75513eOyxx5g2bZrLMfV1+W8ybK3NOGMWySOu8jb9nBUR0fdCEck9eZm3ff3119x2222XNWZ2\nFITvqQUhb9MdVyIiIiJS4IwaNYprr72WcePGXVacv//+m8OHD1O7dm3KlClDlSpVAFi7dq1Tu/Pn\nzzNx4kSCg4MvO+ESERERERG5GuRl3pYXi1aSc7RwJSIiIiIFTvHixfn4449p3LgxsbGx2Y6ze/du\n7rrrLgAqVKhAixYtmDp1Kp06dXJqFxkZyUMPPcTrr79+WfMWERERERG5Wihvk+zSVoE5QFsFSmFR\n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\nCqBHjx5Ya9m/f79TuY+PD4GBgfj46BGvIiIiIiK5RflW7ouPj6dfv37UqlUr090innnmGS5evEho\naGi6RSsgw7wqp7Ru3ZpatWq53b5IEdf3Inl4eNC1a1eXuV5BdDXfcbUAeBXobYx511q7HcAYUxx4\nkcRnW72fh/MTERERyVMREREEBATQoEEDBg4cSGRkJIsWLSIwMJBNmzZx55134u3tTe/evTl58iTz\n5s2jQ4cO7Nu3j2rVqqXEiYuLo1OnTqxevZp69erRp08fPD09WbduHSNGjGDr1q3Mnj3baezhw4fz\nf//3f7Ru3ZrKlStz4sQJVqxYQb9+/di3b1+65CP5Tp97772Xb775hrvuuosyZcqwYsUKXnvtNY4f\nP8706dNz/03LJUWLFgUyTlKy4osvvsAYw0033XTZsUREREREJHuUb+WeCRMmsGvXLrZs2ZKSS7ly\n+vRpVqxYQcOGDalTpw5bt25l06ZNxMXFUb9+fe64444M+1+4cIHQ0FCio6MpWbIkN954I61atcqt\nU8pUQkICy5cvxxjDjTfemGfzyCmFauHKGNMF6Jr010pJr7cZY2Ym/flPa+0YAGvtaWPMYOAzINwY\nMx84CXQmcfvAz6y1n1252YuIiIjkLxs2bOCll17iqaeeSil78cUXGTduHAEBAfTu3ZspU6ak1LVr\n147+/fvz5ptvMmnSJKc+q1evZuTIkbz55pspSY+1lsGDBzNz5kyCg4O5++67U/rs3r0bf39/p/nE\nxcVx5513MnHiRIYOHUrlypWd6q21HDx4kJ9//hlv78THmL700kvceOONzJkzh1deeYUKFSpket67\ndu1iyZIlGdb/9ttv6cruu+++TONm1+nTp1m4cCHGGO64444s9Y2Pj2fChAkYYzh58iQbNmzghx9+\nICgoiAcffDCXZiwiIiIiIplRvuW+UaNGUaZMGbfafvfdd7z88ss888wzmW6zvn37dhISEqhevTq9\nevXis88+c3r//Pz8WLBgAY0bN07X9+jRo/Tv3z/l79Za/P39eeqpp7jllluycHbZc+LECd555x0A\njh8/zldffcWBAwfo06cPHTt2zPXxc521ttAcwHgg/hLHARd9mgHLgBPAWWAXMBIwWRjXJr6VIgXb\ntm3bXB4ikndy+usSMj9EIiMjrTHG1qxZ0yYkJDjVRUdHW2OMLVWqlD1z5oxTXXx8vC1atKgNCgpK\nKUtISLC+vr62SpUqNj4+Pt1Yp06dsg6Hw/bq1cutuS1atMg6HA47d+5cp/I2bdpYh8Nhw8LC0vUZ\nP368dTgcdvny5W6NMWvWLOtwOLJ0LFu2zK3Y2dGjRw/rcDjsiBEjstz3/Pnz1hjjNNcBAwbYs2fP\nZtr3/vvvtw6Hw65du9bt8VL9XpznuYEOHWkPV3lb8s/VyMhIa621H35o3fpZmXyMG2dFRAo8/V+A\nyJWlfCvr+VZUVJRbsWNjY23dunXtzTffbOPi4lLKa9SoYR0OR7r36NNPP7XGGFukSBHr6+trP/30\nU3vq1CkbHR1tx44da40xtkKFCvbEiRNO/V544QW7bt06+8cff9jY2Fi7e/duO2zYMOtwOKyXl5ed\nP39+tr6nhoeHW2OM7devX6Zt9+zZ45TreXh42CeffNLpvDNSEPK2QnXHlbX2eeDSm1am77MZ6JQ7\nMxIREREpuBo2bJjyabNkVapUAaBOnTqULFnSqc7hcFCxYkUOHz6cUrZv3z5OnDhBnTp1mDBhQrox\nrLV4eXnxyy+/OJUfOnSIiRMnEhYWRnR0NLGxsSl1xhiOHDnics6NGjVKV3bttdcCuHyArSsDBgxg\nwIABGdZn9WG7yVx9stDHx4dHH300wz6PP/44CxYsoHXr1k6fqnRX8eLFSUhIAOD3339nzZo1PPXU\nUzRq1IhVq1bh5+eX5ZgiIiIiInL5lG/lvDFjxhAZGcl3333n1rOp4uPjgcRt9t577z169OgBgLe3\nNxMnTuTXX39l8eLFTJs2jbFjx6b0e+6555ziNGjQgPfee4+SJUsyadIkpk6dyuuvv56DZ5Ze3bp1\nSUhIwFrLkSNHWLx4Mc899xxff/01K1asKPDPLi5UC1ciIiL5WZrfR12y6Z+ZmmdxRZK3f0gt+Zd/\nV3WQ+Aym1A/mPXHiBAD79+/nhRdeyHCss2fPpvw5IiKCJk2aEBMTQ8uWLWnfvj3e3t54eHgQGRnJ\n7NmzuXDhgss4rraPSH4uVHJSkle+//77dO9B9erVM1y4GjNmDG+99RZt2rRh2bJll9yb3R2VK1em\nX79+1KlTh2bNmvHII4/wxRdfXFZMERERERHJHuVbOWvDhg289957PP/889xwww0u29g0/zlyzTXX\nAImLdZ07d07Xvlu3bixatIitW7e6NYehQ4cyadIkdu7cmcXZZ58xhmrVqjFixAgqVKjAvffey7hx\n43j77bev2BxygxauRERExCUtiElOSE64unXrxoIFC9zqM2nSJP766y9mzZpFv379nOrmz5/PrFmz\ncnqaTnLrGVdZ+WThqFGjmDx5Mm3btmXp0qV4enq61c8dAQEB+Pj4EB4enmMxRURERETkyiuM+ZYr\n7jzjaufOnVhrGTduHOPGjUtXb4yhaNGiGGPYuXMnN954I3Xr1gXA09OT4sWLp+uTvLCV+o60S0l+\nxpe77XPaXXfdBVAocj0tXImIiKShBRuRnFOvXj18fHzYsmUL8fHxbm3XcODAAQDuueeedHXh4eHp\nttPIaa7ujMqMq0/nZdfDDz/M+++/T/v27VmyZInLBOpynDlzhr///tvthxuLiIiIiEj+dLXkWwMH\nDsw0f7n++ut58MEHXdbNnz+fs2fP8sADD+BwOChXrhwA/v7+1KxZk4iICCIiIvD393fq9+OPP6a0\nc8emTZsAqFq1qlvtc1ryNpLJd8EVZI68noCIiIiIFF4eHh6MGDGC3377jREjRnD+/Pl0bY4ePeq0\n53qNGjWA9J8SW7VqFdOnT8/N6QKJd0bFx8dneGzdujXdUalSpRwZe/Dgwbz//vt07NiRzz//PNNF\nq9jYWPbu3cuhQ4ecyn/66SeX23tcvHiRhx9+mISEBDp10mNeRUREREQKssKYb7k63Hk2b9u2bfnw\nww9dHskLVVOnTmXq1KlOC0uPPPII1lrGjh3rtN3h4cOHefPNNzHG0Lt375TyPXv2cO7cuXTjR0VF\n8cgjj2CMoUOHDk51cXFx7N27l4MHD2b5/Upr586dKc8xTu3MmTM8+uijGGMKRa5X8JfeRERERCRf\ne+655/jhhx+YOnUqS5cuJSgoiKpVq/LHH3+wf/9+Nm7cyMsvv0z9+vUBGD58ODNnziQ4OJju3btT\ntWpVfvrpJ1atWkXPnj2ZP39+lueQdi/z/Oj5559n+vTplChRghtvvJFXXnklXZuGDRvSpUuXlL9v\n3bqVwMBA2rRpQ1hYWEr59OnTmTlzJs2bN6d69er4+Pjw22+/sXr1ao4dO0b9+vVdPix49OjRKfvk\nf/PNN1hree2115g7dy4AXbt2dRpfRERERETylvKtyzNixAhWrlzJwoULadiwIW3btuX06dMsWbKE\nU6dO8cQTT9CyZcuU9p9++imTJk2iVatWVK9endKlS3PgwAGWL1/OhQsXaN68OX379nUa4/jx4zRr\n1owaNWqkW7z6/PPPU7ZOPHr0KJB459bAgQMB8PX1dcrdXnjhBTZu3Mhtt92Gn58fJUqU4NChQ3z5\n5ZfExMTQvHlznnrqqVx5r64kLVyJiIiISDrGmAy3iLhUXXJ9akWKFGHx4sWEhoYya9Ysli9fzpkz\nZyhfvjz+/v689NJL9OnTJ6X9DTfcQHh4OM8++yxffvklcXFx3HTTTSxevJgyZcrw6aefuhw/K3PK\njyIjIzHGEBsby8SJE122GTBgQLqFI1f/Hj179uTMmTNs2bKFLVu2cPr0acqUKUODBg0YM2YMw4YN\nc/ncrIULFxIdHe0U+6uvvkr5u7+/vxauREREREQuk/KtKy+jOXp4eLBs2TImT57MnDlzmDZtGkWK\nFKFhw4Y8/PDD9OzZ06l9YGAg+/btY+fOnWzatImzZ8/i4+NDy5Yt6d+/P/Xq1ctwfFdz+P7775kz\nZ45Tu+StCyHxDrnUC1dDhgyhVKlSfPfdd6xfv55z585xzTXX0LhxY3r16sXAgQNxOAr+RnumIK+G\n5hfGGAsFe2VZBGD79u0uyxs1anSFZyKSt3LrGVfZievO12VW4uZWW5GriX5eZiw5EbPW5v/MVa46\nrvK25K9nX19fqlevzrRpMGSI+zHHjYPnn8/ZeYqIXGn63UZEJOcUhO+pBSFvK/hLbyIiIiIiIiIi\nIiIiIlIoaOFKRERERERERERERERE8gU940pERCQfy0+3kouIiIiIiIiIiOQ23XElIiIiIiIiIiIi\nIiIi+YLuuBIREcmHjBuPx0z1bHkREREREREREZFCQXdciYiIiIiIiIiIiIiISL6ghSsRERERERER\nERERERHJF7RwJSIiIiJumz17Ng6HI+Xo0KFDXk9JctHChQud/r2DgoLyekoiIiIiIlcl5WKSkbvv\nvtvp2pgzZ05eT+myaeFKRETkMhiT+XE1mTZtGk2bNqV06dKUKlWKJk2aMHXqVKyLB3KtX7/e6Rer\ntMczzzyTrs+vv/5Kx44dKVeuHH5+fowYMYIzZ864nEufPn2oVasW586dy9I5REVF4XA4qFmz5iXb\nORwOPDw8XJanPooUKUL58uVp27Ytn3zySabtPT09qVChAo0aNWLw4MGsXLmShISELJ3DldC1a1dC\nQkLo27ev231+++033nnnHTp06IC/vz+enp74+vpyxx13sHjx4iyNf/r0aR577DFatWpF1apV8fLy\nomLFigQEBDB58uQM/93/+OMPRowYQc2aNVPe63vuuYedO3dmafzsiIuLY/HixTzwwAPccMMNeHt7\nU7JkSW688UbGjx+f4bWcU7FOnjzJRx99xD333EPt2rUpUaIEPj4+tGzZkhkzZrj8Om3QoAEhISGE\nhIRczqmLiIiISC5TLqZcDHI23zl+/DhPPvkkN9xwA2XKlMHX15fGjRvzxhtvpPu3T/63y+zYuHFj\nts872ZkzZ/jPf/5D/fr18fLyomzZstx5552EhYW51f/EiRNUqlQJh8NBq1at3Oozd+7clHOYMWNG\nluabkJDAl19+SatWrahcuTIlS5akbt26DBo0iJ9//jld+127dhESEkKLFi2oUqUKxYsXp1q1atx3\n330Z/jv26dOHkJAQunbtiikk/xFVJK8nICIiIgVf4u9FfYB5QEXgPsCLbdvWsG3bMIYO3Yy1s1z2\nbdOmDW3atElX3qJFC6e/nzt3jqCgIGJjYxkwYACHDx9mypQp/PHHH3z66adObZctW8b8+fNZs2YN\nJUqUuPwTzCJjDCEhIVhruXjxInv37mXJkiWsW7eOHTt28MYbb2TYPj4+nlOnTrF7924+/vhjpk+f\nTuPGjQkNDaV27dpX/FxcMcbQtWtX+vfvn6V+77zzDq+++io1a9YkKCiISpUqERUVxaJFi1izZg2P\nP/54uvcmI8mLME2aNKFTp06UL1+emJgYwsLCGDVqFB999BGbN2+mVKlSKX2ioqJo1qwZx44dIyAg\ngO7du3P8+HEWLVrE8uXLWbZsGbfffnuWzikrDhw4QPfu3SlVqhSBgYF06tSJM2fOsGrVKiZMmMD/\n/vc/Nm7cSNmyZXMl1meffcawYcOoUqUKgYGB+Pn5cezYMRYtWsSDDz7IypUr+d///uc0Tv369Rk3\nbhyAFq9ERERE8qk+ffowb948KlasyH333YeXlxdr1qxh2LBhbN68mVmzZrnsp1yscOViOZnvREVF\nceutt/Lnn3/Spk0bOnTowPnz51m9ejVPPvkkoaGhbNmyheLFiwPg4+OTYb5w6NAhpk+fTvny5bn1\n1luzfe4Ap06donnz5vzyyy9cf/31DBs2jDNnzvD555/Trl07pk+fzsCBAy8ZY8iQIcTGxrq9wHPo\n0CFGjhxJ6dKls/Rhw2T/+c9/WLNmDddeey3du3endOnS/Pjjj8yePZtPPvmElStXOn0dDh06lK1b\nt9KoUaOUnO/7779n/vz5LFiwgM8++4wuXbo4jdG7d28g8a68zz//PMtzzJestTou8wBs4lspUrBt\n27bN5SFytYHMD7VN23aRBWPhOgt/pWpz0cLdFhx28eLFTu9zeHi4NcbY559/3q1/l/nz51uHw2G/\n+eablLKBAwdah8Nhjx8/nlIWExNjq1WrZh966CG34qYVGRlpjTHW39//ku2MMdbhcLhdHhYWZh0O\nh/Xw8LBRUVGZtrfW2j/++MP26tXLGmNs9erVnc4zr8yaNcs6HA47e/bsLPddvHix3bBhQ7ryPXv2\nWG9vb+twOOyOHTvcipWQkGDj4uJc1vXt29c6HA77+uuvO5V37tzZOhwOO2rUKKfy/fv32zJlytiq\nVavac+fOZTp2dn9eHjlyxL7//vvpxrh48aLt1KmTdTgcduTIkZnGyW6sdevW2WXLlqWLdezYMevn\n52cdDoddtGhRhmMaY2xgYOAl55Xq9+I8/x1dh460h6u8LfnrNzIy0lpr7YcfWrd+/iUf48ZZEZEC\nT/8XULAtWrTIGmPsddddZ//666+U8osXL9q7777bOhzKxa6WXCyn8h1rrR0+fLh1OBx2woQJTuUJ\nCQm2bdu21uFw2Llz57oV6+mnn7bGGDt69Gi32l/KyJEjrTHG9ujRw8bHx6eUHz9+3Pr5+dmSJUva\nI0eOZNh/9uzZ1uFw2A8++MAaY2zLli0zHbNt27b2uuuus08++aR1OBx2+vTpl2yf+vvonDlzrDHG\n1q5d254/f96p3axZs6wxxrZt29ap/N1337UHDhxIF/eTTz6xxhhbvnx5e/HiRZdju5uvF4S8TVsF\niojIVUFb+uW2JYABngB8UpUXASYAlnffffeyRoiOjgagSZMmKWXJn9aKiopKKRs1ahTGGF5//fXL\nGi+nBQYGUq9ePay1fPfdd271KV++PPPmzaNNmzYcOnSIl19+OZdnmbu6du1Ky5Yt05XXrVuXXr16\nARAeHu5WLGOMy+1BAHr06IG1lv3796eUXbhwgZUrV+JwOJgwYYJT++uuu45Bgwbx+++/s3DhQjfP\nJuuqVKnC0KFD8fLyciovUqQIzzzzDNZat88/O7HatGlDx44d08WqUKECQ4cOzdL4IiIiIpI/LFmy\nBGMMTzzxBD4+/+ZiRYoUYcKECVirXOxqyMVyOt+JiIgAEp+dlJoxho4dO2Kt5fjx45nGiY+PZ+bM\nmRhjGDx4sJtnk7Hk6/3555/H4fh3acPX15fHH3+c2NjYDLfyi46O5tFHH+XBBx/kzjvvdGu8yZMn\nEx4ezsyZM7N1B+GRI0cAaNy4ccrdack6d+4MkO59fPjhh11ul3nvvfdSu3ZtTpw4wY8//pjluRQ0\nWrgSERGRHHA06dXfRV3iL1xff/01cXFx6Wp//fVXpkyZwiuvvMLMmTP59ddfXY7g5+cHwPbt21PK\nkpOO6tWrA/DVV18xc+ZMPvzwQ0qXLp3Nc8k9iR9sIkt7ThtjePbZZ7HWMm/evNyaWp4rWrQokJhg\nX64vvvgCYww33XRTStnJkye5ePEivr6+lCxZMl2fmjVrYq1l7dq1lz1+duTk+WcnVk6OLyIiIiJX\nztGjibmYv3/6XCz5P7+VixX+XCyn853/+7//w1rL8uXLncqttaxYsQIPDw+CgoIyjbNkyRKOHTtG\n69atqVOnjnsncwnJ17urhZ3MzvH+++/Hx8eHSZMmuTXWL7/8wtNPP81jjz2WbvtMdyXPc9u2bZw/\nf96pbunSpQBZ2q7+asrbCv8ZioiIyBXgm/Qa4aLuIABxcXEcPHgw3S+roaGhhIaGpvzdWkv37t2Z\nNm2a0ycGO3XqRNWqVenSpQt9+/bl0KFDLFy4kODgYHx9fTl79ixDhgyhf//+bn966lJOnTrF888/\n77IuOenJijVr1rB3716MMU6fVHRHixYt+H/27jzO6rJu/P/rPeACCmJCeksK7oZmbplmuaaWYGbp\nbertgtKiaS5JmpaMmGlZCNyppaGi5lbcN6Z+VQT3BQ2Xcs9U1NtQ3JF9e//+OGfmN8zCzDBnOHNm\nXs/H4/M4zOdzfd7X+zMzDHPxPtd1de/enZkzZ/L666/XDg6b8vHHH3PxxRe3alB20EEHsc0227Qq\nr1L55JNPmDBhAhHBvvvu26p7lyxZwnnnnUdE8MEHH/DAAw/wj3/8g7322othw4bVtlt77bXp1q0b\n7733HnPnzm3wbrlXXy18n7700kttf6AVMG7cOAC+/vWvr/RYS5YsYfz48URESf7uSJIkaeXp27cw\nFquZIVNXze+4jsU6/1is1OOdn/zkJ9x+++38/Oc/55577mH77bdn4cKFTJo0iXfeeYdx48Yt80bB\nplx++eVEBN///vdb/1CN6Nu3L2+//TavvfYaW2655TLXlveMF198MQ888AB33303a665Ju+///5y\n+1myZAlHHnkkAwcO5Pzzz1/hfDfZZBOOOOIIrr/+erbcckuGDBlCr169ePbZZ7nrrrs4/PDDG8yQ\na2Rko+IAACAASURBVMpjjz3G888/zwYbbMDWW2+9wjlVCgtXkiSpBAYDNwCjgEOBtYvnFwPn1Lb6\n8MMPa//cr18/fvWrXzF48GAGDhzI/PnzmTZtGmeddRYTJkzgnXfe4YEHHqhtv8YaazBlyhROOeUU\nxo8fT8+ePTnhhBO48MILgcIv1gsWLGD06NG8+eabnHDCCUyZMoXu3btz0EEH8bvf/a5V7/z7+OOP\nGTly5Ap/RmoGWosWLeLFF1+s3SD11FNPZYMNNmhVrFVXXZV11lmHmTNn8u677zY7WProo48YOXJk\nqwZLG220UdkKV8cddxwzZ87khz/8IVtssUWr7l28eHGDZz3yyCO59NJLWXXVVWvPrb766uy5555M\nmTKFc845Z5lNmf/1r3/VLl9R93t0ZfnrX//K5ZdfzoYbbsjw4cNXeqwzzjiD5557jiFDhrTq3X6S\nJEkqv8GDB3PDDTcwatQoDj30UNZeuzAWW7x4Meec41isq4zFSj3e6devH48++ijHHnssEydO5N57\n7wWoXfKvJbOtXn/9daZMmcI666zDt771rRV7sHoGDx7MH//4R6qrq7n++utrlwt89913ufjiiwEa\nPOPzzz/P2WefzfHHH8+ee+7Zon7OPfdc/v73v/Pwww83WOKvtU455RQ23HBDRo8ezWWXXVZ7focd\nduCoo45qsPx7Yz766COOPPJIIoJRo0a16vurUlm4kiRJJfAd4DrgLmAQcCCwOjCZwjKCGwJvLrMn\n0aBBgxg0aFDtxz179mTfffdll112Ydttt+Xhhx/m1ltvXWZN7c0226zBUgUADzzwAL///e+ZMGEC\nffr0Ya+99uK9997jxhtv5JNPPuHEE09k/vz53HTTTS1+ogEDBtS+Y6sxddfTbkzNQCsi6NOnD7vv\nvjvHHXcchx12WItzqKs1S1sMGDCApUuXrlA/bfH3v/+diRMnLnOuT58+nHzyyU3ec9ppp/GXv/yF\n3XffvcVLNtS12mqr1T7rjBkzmDx5MmeeeSY77LADd911V+2yJgCjR4/my1/+MhdffDGPPPIIu+66\nKzNnzuR//ud/2HzzzXnqqaea3Derpaqrqxt8jYYOHbpMHnU98sgjHH744fTq1YsJEyaw1lprrXDf\nKxJr7NixjBo1ikGDBnHNNdescN+SJEkqj+985ztcd9113HXXXQwaNIgDDzyQ1VdfncmTJ/P222+z\n4YYb8uabjsU6+1gMSjveef311znggANYsGABd9xxB1/60peYO3cut9xyC6eddhoTJ05k6tSpyy3k\nXX755SxdupRjjjmmdom7tho5ciSTJk3iz3/+M88//zx77703c+bM4ZZbbqF///688cYbyzzj4sWL\nOfLII+nfvz+//vWvW9TH448/zgUXXMDpp59eu5dbW1x00UX85S9/4YILLuCII46gT58+PP3005xy\nyil87Wtf45JLLuH4449v8v65c+dywAEH8Morr3DGGWfw7W9/u805VYTM9GjjAWThUylVtmnTpjV6\nSJ0BNH/Ytq1tFyf8OmGbhB4Jayd8K+GlhK2zqqoqp0+f3qKv189+9rOMiDz99NObbTtv3rzcfPPN\n89BDD83MzEmTJmVE5PXXX1/b5rzzzsuqqqp89dVXm403ffr0jIjcaKONltsuIrKqqqrF51sbp675\n8+fnKqusklVVVfn666+3OHZ7uPrqq7OqqirHjx/f5LW6x/I+j6effnpGRO655545Z86ckuU4derU\njIg84IADGlx79dVX85hjjsn+/fvnaqutlhtttFGOGDEiH3rooYyI3GOPPZqNv7x/L2u+nnWP+++/\nv9E4jzzySPbu3Tv79OmTjz76aJueeUVi/e53v8uIyM997nP5zjvvNNu+5mu1PHV+Ly777+hd6QD6\nA1cCbwHzKazbejHQp5Vx1gZGF++fX4w3Duhfir6BXsX4DxTbzwPeAR4DTgZ6LqefIcB9wEfAJ8BU\n4KhWPl+DcVvN39+af58uvzxb9O9fzXHOOSlJFc//C6h8ixcvzl//+te5zTbbZI8ePXLttdfOb33r\nW/nSSy/l1ls7FmttnLoqZSxWoxTjnczM3XffPauqqvLZZ59tcG3MmDEZETl06NAm71+8eHGuv/76\nWVVVlf/85z9b1GdLzZw5M0866aTcaKONcrXVVsv+/fvnySefnK+88kpGRA4cOLC27bnnnpvdunXL\nBx54YJkYr732WkZEfuUrX2mQ9+abb55bbbVVLly4cJlrI0aMyKqqqhw3btxy86v7c3TEiBEZEXnk\nkUc2aPf2229nz549s3fv3k2Oh+fMmVP7tRg+fPhy+81s2fdIZlbEuM0ZV5IkqUS6AcOLR10LgJfp\n27dvs8sq1OjXrx8Ac+bMabbt2WefzYcffsgll1wCwIsvvkhEsN1229W22WGHHYDCEgGNbVrc0dVs\nprzeeus1OXOnrnKtq3700Udz9NFHt6jtqaeeypgxY9h777259dZbWX311dvUd11f/OIX6dOnD/fd\nd1+DaxtttBFXXXVVg/NXXnklQJvfUdfSd1c++OCDDB48mFVWWYU777yz1WvttzXW6NGjOe2009hm\nm22YPHly7d4IqjwRsTHwKIXNBicCLwE7USgE7RcRu2Zms2vCRMSninE2Be6hsP7rlsBQYP+I2CUz\np7ex708Bw4C/AbcB7wJrAXtRKHYNK/Yzu14/JwJjgfeAa4GFwMHA1RGxdWb+pAWfKkmSOq1u3box\nfPjwBktFL1iwgJdfdizWFpUyFqtRivHO7NmzeeCBB1hnnXXYaqutGlyvWW7viSeeaDLGX//6V2bM\nmMGee+7JZptt1tL0W6Rfv36MHTuWsWPHLnO+ZjnDuuOhp556isxk9913bxAnInjooYeoqqqiT58+\nfPDBB8yePZuXX36ZiGh0icCIYNiwYQwbNoxTTjmFUaNGLTfXhx56iIio/XtQ17rrrsuWW27J008/\nzUsvvbTM3xsofB32339/Hn74Yc444wx++ctfLrevzsbClSRJamc3AAs5/PDDW3zHo48+SkSw8cYb\nL7fdY489xpgxY7juuutYZ511gP9/GYcFCxbUtps/f37t+UqTmZx//vlEBEcccUSL7unoe1z98Ic/\n5LLLLmO//fZj4sSJbV4zvL7Zs2cza9Ysevfu3eJ7rr32WiKC73znOyXNpTH33HNP7RIud911F9tv\nv/1KjfWrX/2Kn/70p2y//fbcfffdtfsgqGJdRqFwdFJmXlpzMiJ+C5wKnA+c0II4F1AoWo3KzNr/\n9apTNLoU2L+Nfb8BrJWZS+p3HhHXAocDPwB+U+f8AOAi4H1gh8x8s3h+JDAN+HFETMjMx1rwjJIk\ndSk33HADCxc6FltRnWks1prxzsKFCwGYNWsWixcvpnv3ZUsI7777LsAyewrXd/nllxMRfO9732tD\n1q0zfvz4Bl+rfffdt7YYW9fs2bO58cYbWW+99RgyZAhrrLEGUFiKftiwYY3Gf/LJJ3nqqaf4yle+\nwhZbbMEuu+zSbE41n8um9hZr6nM5a9Ys9ttvPx5//HF+9rOf1e7b1qWUe8pXZzhwqUB1Ei4PoM6s\n4yyn15nbzmqkzVMJfRP65owZM5b5mjT18+Xaa6/NqqqqXH311Ze7FMPChQtz0KBBeeCBBy5zfvLk\nyRkRed5559WeO+aYYypyeYp33nknDznkkNp83n///RbHbS8tXXqgKcOGDcuIyCFDhuSCBQuabT93\n7tx88cUX84033ljm/DPPPJPz589v0H7hwoV51FFHNbocw4IFCxrt8xe/+EVGRB5++OENrl199dUN\nlsFoy7+Xd911V/bs2TP79euXTz/9dIvueeWVV/LFF1/MxYsXtznWyJEjMyJyp512yg8//LBF99Rw\nqcCOdwAbAUuBVxq5tiaFJfU+AXo0E6cnMAeYBaxR71oArwJLgIGl7rvOPd8oxvtDvfMji32f08g9\nQ4v3XNXCPlwqUJIa4f8FVL5Zs2Y1OPfUU09l3759s29fx2KtjZNZmWOxFRnvzJgxI1988cX8+OOP\nlzk/aNCgrKqqyp///OfLnJ8/f37uscceWVVVlWeeeWajebz++uvZrVu37NevX4Pl9uo7+uijMyJa\nPL5cunRpzp49u8H5a665Jquqqhos/deUmu+1lrbPzKyurm5yqcC649a6P0d/9KMfZUTkpptu2uBz\nfNlll2VEZP/+/XPp0qW15z/88MPccccds6qqKn/xi1+0OL9MlwqUJElqxD5AD2BrCtuYvADcDqwB\n3Mp66623TOuDDz6Y7t27s+OOO/KZz3yG+fPn87e//Y3HH3+cVVZZhcsvv3y5SzFUV1czY8YMpkyZ\nssz5vffemx122IGRI0cyffp0PvnkE/785z9z6KGHduilKWreQbV06VI++ugjnnvuOR566CEWLVrE\nzjvvzHXXXcenPvWpMmfZNueeey7jxo2jZ8+ebLPNNlxwwQUN2my77bYceOCBtR8//vjj7Lnnnuyx\nxx7cc889tefHjRvHVVddxa677sqAAQPo06cP//73v5k0aRLvvPMOn/3sZ7nooouWif3yyy/zla98\nhX322YeBAweyaNEipkyZwrPPPstuu+3GH/7whwb51Cz9V/9dhivin//8JwceeCALFy5k8ODBTJw4\nkYkTJzZoN2LEiGU+3muvvXjjjTeYPn167d+JFYk1fvx4RowYQffu3dl1110ZM2ZMg/YDBw5s8XKP\n6hD2Kr5Oqn8hM2dHxMMUfjjvDNy7nDi7UPgBfldmLrMuUGZmREwCvgvsCdSsPVOqvmt8g8IA+u/1\n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\ncv5ONgoAAGANtup65vwx3UlVdehUOTVR/rkTuzZS9+syBLvusEye62cITv1bd1+8ljxJbpnk6knO\n6+6vr/TiAACAxbKnA1fdfVGSc5IcU1WnT+0+M8mhSc7u7kt3vHEAAAAHsJHrmao6rqqOmyrnkiQv\nSHJYkqWpch6S5Jgkr+7ufZupO8kbkrwvyS2q6q4TbaokT8owquuZU2W9NMnnkvxqVR0/ked7k/zh\nCnkAAIAFVt2bfU7vYquqGyQ5L8n3J3l5hgupmyW5VZL3Jzmpu784swYCAACsYL3XM1V1ZZLu7oOn\nyrlWkrdkmK7v3CRvT3LjJKck+dRYzsVTedZ9LVVVN03y2iTfkyEo9ZEkt8kwHeCbk9x2evRUVf1i\nkpckuTzJi5J8YWzXjZK8pLt/de3vGAAAMO/2fOAqSarqqAx3Bd4hybWTfDLJ3yc5s7u/NMu2AQAA\nHMh6rmfGwNWV3f1dzzuuqiOSnJHkbkl+KMnnk/xDkjO6+xObrXsiz48leXySWyf5viT/luSvkzyx\nuy9fIc+JSX4/yYlJrprkQ0mek+TP2kUtAADsKgJXAAAAAAAAzIU9/YwrAAAAAAAA5ofAFQAAAAAA\nAHNB4GoZVXVsVT26ql5bVR+pqsur6lNV9bKqutUWlP+cqrpyXG6wzP4zJvZPL9+sqttvtg1svVn3\nmzHNQVX1O1X1z1X1tar6fFW9anwmAHNoK/tNVf1IVT2jqs6vqk9W1WVV9fGqemNV3a+qlnuWxakH\nON5cWVW/sWUvli0z634zkffUqnpbVX2lqr5UVedW1Z03/QLZFlvcb9ZdluPNYpp1v5nI63jDhlXV\nUVX13PH8dllVXVxVT63hmV7sYlV1rap6YFX9XVV9cLxG+lJVvamq7l9VtUK+m1fVP4zXU5eM11cP\nq6oVf0OpqrtU1evH8r8yfre67/a9OnZaVd1n4nvL/VdIs+5+4By3+1TVbarq76eur15dVXdYJq3j\nDamqO1fVOVX10fFc9eGqenFV3WyF9PrNHlFV96iqp9XwG82Xx3PQ81fJsyP9Y7vPX55xtYyqemGS\neyV5b5I3J/lCkuOSnJLkkCQP7e6nb7Dsuyb5X0m+kuSwJDfs7oum0pyR5HFJzk6yb5li/nI6D7M3\n634zpntJknskeX+SVyS5VpJfSXK1JHfv7ldspH62z1b2m6q6ZZKXJXlbkovGsq6d5I5Jrpfk3CS3\n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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x11cd33b70>"
]
},
"metadata": {
"image/png": {
"height": 277,
"width": 855
}
},
"output_type": "display_data"
}
],
"source": [
"burn_in = 0\n",
"\n",
"plt.figure(figsize=(12,4))\n",
"\n",
"plt.subplot(121)\n",
"samples = np.ravel(trace.get_values('slope', burn=burn_in))\n",
"hpd = pm.hpd(samples)\n",
"stats = np.mean(samples), hpd[0], hpd[1], max(Dk), len(Dk)\n",
"limits = np.percentile(samples, [1, 99])\n",
"_n, _, _ = plt.hist(samples, log=False, bins=50, \n",
" normed=True, edgecolor='w', range=limits)\n",
"plt.vlines(stats[:3], 0, max(_n) * 1.1, color='0.8', linestyle='-', lw=3, zorder=-100)\n",
"plt.ylabel(r'p($\\alpha$ $\\mid$ D$_k$)')\n",
"plt.xlabel(r'$\\alpha$')\n",
"txt = \"\"\"k = {4:d}\n",
"max(S$_k$) = {3:0.1f}\n",
"\n",
"mean = {0:.2f}\n",
"95% HPD = [{1:.2f}, {2:.2f}]\n",
"\"\"\".format(*stats)\n",
"plt.text(0.99, 0.99, txt, ha='right', va='top', transform=plt.gca().transAxes);\n",
"\n",
"\n",
"plt.subplot(122)\n",
"# plot the trace\n",
"samples = np.ravel(trace.get_values('Mmax', burn=burn_in))\n",
"hpd = pm.hpd(samples)\n",
"stats = np.mean(samples), hpd[0], hpd[1], max(Dk), len(Dk)\n",
"limits = np.percentile(samples, [1, 99])\n",
"_n, _, _ = plt.hist(samples, log=False, bins=50, \n",
" normed=True, edgecolor='w', range=limits)\n",
"plt.vlines(stats[:3], 0, max(_n) * 1.1, color='0.8', linestyle='-', lw=3, zorder=-100)\n",
"plt.ylabel(r'p(M$_{\\max}$ $\\mid$ D$_k$)')\n",
"plt.xlabel('M$_{\\max}$')\n",
"txt = \"\"\"k = {4:d}\n",
"max(S$_k$) = {3:0.1f}\n",
"\n",
"mean = {0:.2f}\n",
"95% HPD = [{1:.2f}, {2:.2f}]\n",
"\"\"\".format(*stats)\n",
"plt.text(0.99, 0.99, txt, ha='right', va='top', transform=plt.gca().transAxes);\n",
"\n",
"plt.tight_layout()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Noise free seems reasonable.\n",
"\n",
"# Checking Noisy data modeling"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA00AAAIjCAYAAADfivCyAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAWJQAAFiUBSVIk8AAAIABJREFUeJzs3Xd8FNX6x/HP2YQSCAkgIEWFBAVRIAGpFrqAXhVERXpR\nARsgqKCiEECxAyLCz4siHeSKwlUslIsgzUJvCtIRkN5rkvP7I2TNsmmQTWY3+b5fr3ktmefMzLMr\ni/PknDnHWGsRERERERGR5LmcTkBERERERMSfqWgSERERERFJhYomERERERGRVKhoEhERERERSYWK\nJhERERERkVSoaBIREREREUmFiiYREREREZFUqGgSERERERFJhYomERERERGRVKhoEhERERERSYWK\nJhERERERkVSoaBIREREREUmFiiYREREREZFUqGi6QsaYAcaY+Mu2vU7nJSIiIiIimSPY6QQC1O9A\nXcBc+jnOwVxERERERCQTqWi6OrHW2oNOJyEiIiIiIplPw/OuTqQxZo8xZpsxZqoxJsLphERERERE\nJHMYa63TOQQUY0wToAAJQ/SKAa8BNwO3WGuPOpmbiIiIiIj4XrbqaTLGPGSMGWGMWWSMOX5pkoYJ\naRxTyhgz1hjzlzHmnDFmuzFmmDGmYHLtrbU/WGu/sNaut9b+D7iPhM+xYya8JRERERERcVh2e6bp\nVaAycArYQ0IPUIqMMZHAMqAIMBP4A6gB9ASaGGPuSKv3yFp72hizAbgp4+mLiIiIiIi/yVY9TcBz\nQDlrbTjwNP/MbpeS0SQUTN2ttQ9Za1+x1jYChpFQcL2R1gWNMXkvtd2XocxFRERERMQvZdtnmowx\ndYEFwCRrbYdk4hHAVmC7tbbsZbFQ/imCillrzyaJvQt8DewCriXhmaY7gUrW2t2Z8V5ERERERMQ5\n2a2n6Uo0uPQ65/KAtfYUsATIB9S6LHwdMIWEiSC+AM4CtVQwiYiIiIhkT9ntmaYrUR6wwOYU4luA\nu4FyJPRYAWCtbZ35qYmIiIiIiL/IyUVT+KXX4ynEE/cnO4ve1TLGZM/xkCIiIiIimcham9Z8BZkm\nJw/PS0vifxQVOSIiIiIiOVhO7mlK7EkKTyEedlk7n8quE3D4gjEmID4fp/LM7Ov68vwZPdfVHn+l\nx11J+0D5++mUQPl89P3N/HPp+xt4AunzyY7fYX1/U2/ntJzc0/QHCb1J5VKIJ667lNIzTyIiIiIi\nkgPk5KIpcXKHxpcHLk05fgcJM+Mtz8qkRERERETEv+TYoslau42E6cbLGGOevSw8CMgPjE+6RpMv\nGWPcW0xMTGZcImANGDDA6RTSxak8M/u6vjx/Rs91tcdf6XGB8ncuEATKZ6nvb+afS9/fwBNIn2V2\n/A7r++spJibGfa/sD7LV4rbGmGZA80s/FgeaANuAny7tO2StfTFJ+0gS1mMqBvwX2ETCukz1SFiH\n6Q5r7VEf52hBzzSJBKpAGvMvIp70/RUJTImFk5Oz52W3omkA0D+VJjustWUvO6YUCT1LTYFrgH3A\nV8Aga+2xTMhRRZNIANNNl0jg0vdXJDD5Q9GUrYbnWWsHWmuDUtnKJnPMX9bax621pay1ea21Edba\n3plRMCWl4XkiIiIiIsnzt+F5OXnKcUfpN10igSmQxvyLiCd9f0UCR0xMjLtjwR8Kp2w1PC8QaHie\niIiIiEj6aXieiIiIiIiIn1PRJCIiIiIikgoVTQ7RRBAiIiIiIsnzt4kg9ExTFtMzTSIiIiIi6adn\nmkRERERERPyciiYREREREZFUqGgSERERERFJhYomh2giCBERERGR5GkiiBxOE0GIiIiIiKSfJoIQ\nERERERHxcyqaREREREREUqGiSUREREREJBUqmhyiiSBEREREoF69erhcLiZMmOB0Ksnq1KkTLpeL\nQYMGOZrH+PHjcblcNGjQwNE8soq/TQQR7HQCOZUmghAREREhU26ME2+4e/XqRVhYWIbO5U837jlJ\nTEyMu2PBHz5/FU0iIiIi4pgbbriB8uXLEx4e7rNzDho0CGMMnTt3znDRVKJECcqXL0+RIkV8lN3V\nCQ8P5+abb6Z06dKO5pFTacrxLKYpx0VEREQyl8vlwhjD9u3bueGGG5xORzJIU46LiIiIiIj4ORVN\nIiIiIuKY5CaCWLhwIS6Xi8jISACWLFnCfffdR9GiRcmXLx/R0dF89NFHXudKnLTBGIO1ljJlyuBy\nudzbY4895tV20KBBXLhwgTfeeIOoqCjCwsJwuVycOHHCq11SO3fuxOVyERQUBMD69etp1aoVJUqU\nICQkhAoVKvD6669z8eLFZN/3qVOnGDx4MNWqVSMsLIw8efJQqlQpqlevTp8+fdiwYYNH+/RMBPH7\n77/z5JNPUr58eUJDQylUqBCVK1emZ8+erFy5MrX/DJIGPdMkIiIiIo5Ja6KF8ePH88QTT2CtJSws\njPPnz7Nu3Tq6d+/O1q1bGTp0qLttwYIFKV68OPv378cYQ5EiRdxFTWL88uuePXuWu+66i99++41c\nuXKRL18+XC6XV7vUzJ07l+bNm3Pu3DnCw8OJjY1l8+bN9O/fn5UrV/Lll196tD9x4gS1a9dm06ZN\nGGNwuVyEh4dz4MAB9u/fz8qVKwkODmbIkCHp/hw//PBDevfuTVxcHMYY8ufPj8vlYsOGDWzYsIF1\n69bxv//9L93nE0/qaRIRERERv3TgwAGefPJJnnnmGfbt28eRI0c4evQo3bt3B2DEiBFs2rTJ3X74\n8OHs3bvX/fNvv/3G3r173VvSAgsSnjH/6KOP+PPPP/n88885deoUR44cYfv27eTPnz/deT766KM0\na9aMHTt2cOTIEU6cOMGbb76JMYZZs2bx/fffe7QfPnw4mzZtolixYsyePZvz589z6NAhzp07x+bN\nm3nrrbcoW7Zsuq//n//8h549exIfH0/Lli3ZuHEjJ06c4PDhwxw+fJhJkyZx2223pft84k1Fk0O0\nTpOIiIiA5z2Bv2z+4uzZs3Ts2JHhw4dTtGhRAMLCwhg+fDiVKlXCWsuMGTNSPD49E2+dPn2a6dOn\n8/DDDxMcnDAI6/rrr/fooUpLzZo1mTJlCtdffz0AISEh9OnTh3/9618AfPHFFx7tf/75Z4wxPP/8\n8zRt2tTdsxUUFETZsmV58cUXefzxx9N17djYWHr37o0xhjZt2jBt2jTKly/vjhcsWJDWrVvz7rvv\npvv9+AN/W6dJRZNDrLXuTUWTiIiISPJeeumlZPc3a9YMay3r16/P0PkrV65Mw4YNM3SOvn37Jru/\nefPmyeaYOA36vn37MnRdgPnz5/PXX38RFBTEO++8k+Hz+YuYmBj3vbI/UNEkIiIiIn6pcOHClClT\nJtlYqVKlADh69OhVn98YQ+3ata/6+ETVq1dPdn9KOd57771Ya/nggw/o0KED33//PadOnbqqay9f\nvhyAqKgoSpQocVXnkLSpaBIRERERv1SgQIEUY3nz5gVIcXa69Eoc9pcRKT3/lFKO7du3p1u3bgBM\nnjyZe++9l4IFC1K1alUGDBjA/v37033tv//+G0DrUWUyFU0iIiIiDko6ZN9ftpzkSp5d8qXRo0ez\nfv16+vfvT/369cmbNy9r1qxh8ODB3HTTTcyfPz9d58lp/72coqJJRERERMQBFSpUYMCAAcyfP59j\nx47x9ddfU7lyZU6fPk3Hjh2Ji4tL8xzFixcHEtaNksyjoklEREREspXEGdcCqRcmODiYe++9l+nT\npwMJk0Rs2bIlzeNq1aoFwNq1a30ysYQkT0WTiIiIiGQribPTHTt2zOFMkpfac1iJz0EBnD9/Ps1z\nNWzYkFKlShEXF8eLL77ok/zEm4omEREREclWbr31VgAmTJhAfHy8w9l4a9SoET179uSnn37i3Llz\n7v0bNmygU6dOAJQsWZJKlSqlea7g4GDef/99rLVMmTKFRx99lD/++MMdP3r0KGPGjKFnz54+fx85\niYomh2hxWxEREZHM8cQTT2CtZdiwYYSGhlKmTBkiIiLo06ePR7v0Dt/z9TC/EydOMHLkSOrWrUto\naCjXXHMN+fLlo1KlSixcuJD8+fMzceJE96K3aWnZsiVDhw4lKCiIL774ggoVKhAWFkbhwoW55ppr\n6NatG+vWrfPpe8hs/ra4bbDTCeRUgTTGVkRERCSrpeeGOaU2nTp1Ij4+njFjxrBx40b27NmDtZbD\nhw97HZ/eXK4mllKOn376Kd9++y0//vgj27dvZ//+/RhjqFChAnfffTe9evWidOnS6TpXoueee45G\njRoxfPhwFixYwL59+8idOzdRUVE0aNCADh06pOOd+o+YmBh3x4I/FE5GN+9ZyxhjQUWTiIiIiEh6\nJJnYw7HqScPzREREREREUqGiSUREREREJBUqmkRERERERFKhoklERERERCQVKppERERERERSoaJJ\nREREREQkFSqaREREREREUqGiSUREREREJBUqmkRERERERFKhoklERERERCQVKpocYoxxbzExMU6n\nIyIiIiLiN2JiYtz3yv7AWGudziFHMcZYAH3uIiIiIiJpSyycrLWOVVDqaRIREREREUmFiiYRERER\nEZFUqGgSERERERFJhYomERERERGRVKhoEhEREZEcp0yZMrhcLhYtWuR0KmmaOnUqt99+O2FhYbhc\nroDJOzsJdjoBERERkezOT2ZNzrDsNPmvP01nnZopU6bQrl07jDHkypWL4sWLY4whd+7cTqeWo6ho\nEhEREZEcp2zZsoSEhJAvXz6nU0nV8OHDMcbQu3dv3n77bVwuDRRzgtZpymJap0lERCTnSezQCNT/\n/Qd6/oEsf/78nDt3jnXr1nHLLbc4nY4jtE5TgDPGvGKMiTfGjLjSY2NjYzMjJRERERHJRs6ePQtA\n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\n6623eO6553C5NHpUREREAsddd93F0qVL6d+/v3siCsm4xOJTRVMOoqLpH4lTk//+++9esaZNmzJu\n3DiuvfZaBzITERERuTKffvopXbp0IW/evGzbto3ixYs7nVK24Q9Fk36VL46Jjo7mt99+o0uXLl6x\n77//nsqVK/PDDz84kJmIiIhI2v766y/KlClDkSJF6NKlC8YY+vbtq4IpG1LRJI7Knz8///73v/nP\nf/5DwYIFPWIHDhygadOmPP/88ymuiSAiIiLilNjYWHbv3s3x48eJjIzkzTff1LC8bErD87KYhuel\nbNeuXbRr146ffvrJK1alShWmTp1K+fLlHchMRERERJyi4XkiSdxwww3873//Y+DAgV6TQKxatYqq\nVasyduxYFZwiIiIikqXU05TF1NOUPosXL6Zt27bs2rXLK9ayZUs+/vhjr+F8IiIiIpL9qKdJJAV3\n3nknq1ev5pFHHvGKTZ8+nejoaJYuXepAZiIiIiKS06hoEr9VqFAhPv/8cz755BPy5cvnEdu5cyd1\n6tRh8ODBxMXFOZShiIiIiOQEGp6XxTQ87+r8/vvvtG7dmtWrV3vF6tSpw6RJk7j++usdyExERERE\nMpOG54mk080338zy5cvp1auXV2zRokVERUXx5ZdfOpCZiIiIiGR36mnKYuppyrjvvvuOjh07cvDg\nQa9Y165dGTZsmNdwPhEREREJTOppysGMMe4tJibG6XQCyj333MPatWtp3LixV+zf//431apVY82a\nNQ5kJiIiIiK+EBMT475X9gfqacpi6mnynfj4eIYNG8bLL7/MxYsXPWJ58uThnXfeoXv37n7zZRMR\nERGRK+cPPU0qmrKYiibfW7FiBa1bt2bLli1esX/961989tlnFC1a1IHMRERERCSj/KFo0vA8CXi3\n3XYbK1eupHPnzl6x2bNnU7lyZebOnetAZiIiIiKSHahokmwhNDSUsWPHMnXqVMLCwjxi+/fvp3Hj\nxvTp04cLFy44lKGIiIiIBCoNz8tiGp6X+Xbs2EGbNm1YtmyZV6xatWpMnTqVG2+80YHMRERERORK\naXieSCYoU6YMixYt4rXXXsPl8vwr/ttvv1GlShUmTJigwlVERERE0kU9TVlMPU1Za9GiRbRt25Y9\ne/Z4xdq0acPo0aO9hvOJiIiIiP9QT5NIJqtTpw5r1qyhRYsWXrEpU6YQHR3N8uXLHchMRERERAKF\n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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x11d503748>"
]
},
"metadata": {
"image/png": {
"height": 273,
"width": 422
}
},
"output_type": "display_data"
}
],
"source": [
"bins = np.arange(0.1, 1.4 * Mmax_true, log_normal_dispersion)\n",
"plt.plot(bins, len(Dk) * powerlaw_pdf(bins, alpha, Mmin, Mmax_true), color='k', lw=2, label=\"intrinsic\")\n",
"plt.hist(Dk, bins=bins, histtype='step', log=True, label='noise free');\n",
"plt.hist(Dk_noisy, bins=bins, histtype='step', log=True, label='noisy');\n",
"plt.xscale('log')\n",
"plt.xlabel(r'mass M / M$_\\odot$')\n",
"plt.ylabel(r'counts')\n",
"plt.legend(loc='best', frameon=False)\n",
"\n",
"plt.tight_layout()"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"noisy_model = pm.Model()\n",
"\n",
"with noisy_model:\n",
" # prior P(n)\n",
" Mmax = pm.Uniform(\"Mmax\", lower=max(Dk), upper=1000)\n",
" slope = pm.Uniform(\"slope\", lower=-4, upper=-1)\n",
" # likelihood: P(Sk|n)\n",
" Mi = ContinuousPowerLaw(\"Mi\", lower=Mmin, upper=Mmax, slope=slope, testval=1.)\n",
" M_obs = pm.Lognormal('M_obs', mu=Mi, sd=log_normal_dispersion, observed=Dk_noisy)\n",
"\n",
" # start with mock values already\n",
" start = {\"Mmax\": max(Dk_noisy), \n",
" \"slope\": alpha, \n",
" \"Mi\": Dk\n",
" } "
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"Auto-assigning NUTS sampler...\n",
"Initializing NUTS using advi...\n",
"Average ELBO = -inf: 100%|██████████| 200000/200000 [00:15<00:00, 13169.26it/s]\n",
"Finished [100%]: Average ELBO = -inf\n",
" 0%| | 0/10000 [00:00<?, ?it/s]"
]
},
{
"ename": "JoblibValueError",
"evalue": "JoblibValueError\n___________________________________________________________________________\nMultiprocessing exception:\n...........................................................................\n/Users/fouesneau/anaconda/lib/python3.5/runpy.py in _run_module_as_main(mod_name='ipykernel.__main__', alter_argv=1)\n 179 sys.exit(msg)\n 180 main_globals = sys.modules[\"__main__\"].__dict__\n 181 if alter_argv:\n 182 sys.argv[0] = mod_spec.origin\n 183 return _run_code(code, main_globals, None,\n--> 184 \"__main__\", mod_spec)\n mod_spec = ModuleSpec(name='ipykernel.__main__', loader=<_f...b/python3.5/site-packages/ipykernel/__main__.py')\n 185 \n 186 def run_module(mod_name, init_globals=None,\n 187 run_name=None, alter_sys=False):\n 188 \"\"\"Execute a module's code without importing it\n\n...........................................................................\n/Users/fouesneau/anaconda/lib/python3.5/runpy.py in _run_code(code=<code object <module> at 0x10076e0c0, file \"/Use...3.5/site-packages/ipykernel/__main__.py\", line 1>, run_globals={'__builtins__': <module 'builtins' (built-in)>, '__cached__': '/Users/fouesneau/anaconda/lib/python3.5/site-packages/ipykernel/__pycache__/__main__.cpython-35.pyc', '__doc__': None, '__file__': '/Users/fouesneau/anaconda/lib/python3.5/site-packages/ipykernel/__main__.py', '__loader__': <_frozen_importlib_external.SourceFileLoader object>, '__name__': '__main__', '__package__': 'ipykernel', '__spec__': ModuleSpec(name='ipykernel.__main__', loader=<_f...b/python3.5/site-packages/ipykernel/__main__.py'), 'app': <module 'ipykernel.kernelapp' from '/Users/foues.../python3.5/site-packages/ipykernel/kernelapp.py'>}, init_globals=None, mod_name='__main__', mod_spec=ModuleSpec(name='ipykernel.__main__', loader=<_f...b/python3.5/site-packages/ipykernel/__main__.py'), pkg_name='ipykernel', script_name=None)\n 80 __cached__ = cached,\n 81 __doc__ = None,\n 82 __loader__ = loader,\n 83 __package__ = pkg_name,\n 84 __spec__ = mod_spec)\n---> 85 exec(code, run_globals)\n code = <code object <module> at 0x10076e0c0, file \"/Use...3.5/site-packages/ipykernel/__main__.py\", line 1>\n run_globals = {'__builtins__': <module 'builtins' (built-in)>, '__cached__': '/Users/fouesneau/anaconda/lib/python3.5/site-packages/ipykernel/__pycache__/__main__.cpython-35.pyc', '__doc__': None, '__file__': '/Users/fouesneau/anaconda/lib/python3.5/site-packages/ipykernel/__main__.py', '__loader__': <_frozen_importlib_external.SourceFileLoader object>, '__name__': '__main__', '__package__': 'ipykernel', '__spec__': ModuleSpec(name='ipykernel.__main__', loader=<_f...b/python3.5/site-packages/ipykernel/__main__.py'), 'app': <module 'ipykernel.kernelapp' from '/Users/foues.../python3.5/site-packages/ipykernel/kernelapp.py'>}\n 86 return run_globals\n 87 \n 88 def _run_module_code(code, init_globals=None,\n 89 mod_name=None, mod_spec=None,\n\n...........................................................................\n/Users/fouesneau/anaconda/lib/python3.5/site-packages/ipykernel/__main__.py in <module>()\n 1 if __name__ == '__main__':\n 2 from ipykernel import kernelapp as app\n----> 3 app.launch_new_instance()\n\n...........................................................................\n/Users/fouesneau/anaconda/lib/python3.5/site-packages/traitlets/config/application.py in launch_instance(cls=<class 'ipykernel.kernelapp.IPKernelApp'>, argv=None, **kwargs={})\n 653 \n 654 If a global instance already exists, this reinitializes and starts it\n 655 \"\"\"\n 656 app = cls.instance(**kwargs)\n 657 app.initialize(argv)\n--> 658 app.start()\n app.start = <bound method IPKernelApp.start of <ipykernel.kernelapp.IPKernelApp object>>\n 659 \n 660 #-----------------------------------------------------------------------------\n 661 # utility functions, for convenience\n 662 #-----------------------------------------------------------------------------\n\n...........................................................................\n/Users/fouesneau/anaconda/lib/python3.5/site-packages/ipykernel/kernelapp.py in start(self=<ipykernel.kernelapp.IPKernelApp object>)\n 472 return self.subapp.start()\n 473 if self.poller is not None:\n 474 self.poller.start()\n 475 self.kernel.start()\n 476 try:\n--> 477 ioloop.IOLoop.instance().start()\n 478 except KeyboardInterrupt:\n 479 pass\n 480 \n 481 launch_new_instance = IPKernelApp.launch_instance\n\n...........................................................................\n/Users/fouesneau/anaconda/lib/python3.5/site-packages/zmq/eventloop/ioloop.py in start(self=<zmq.eventloop.ioloop.ZMQIOLoop object>)\n 172 )\n 173 return loop\n 174 \n 175 def start(self):\n 176 try:\n--> 177 super(ZMQIOLoop, self).start()\n self.start = <bound method ZMQIOLoop.start of <zmq.eventloop.ioloop.ZMQIOLoop object>>\n 178 except ZMQError as e:\n 179 if e.errno == ETERM:\n 180 # quietly return on ETERM\n 181 pass\n\n...........................................................................\n/Users/fouesneau/anaconda/lib/python3.5/site-packages/tornado/ioloop.py in start(self=<zmq.eventloop.ioloop.ZMQIOLoop object>)\n 883 self._events.update(event_pairs)\n 884 while self._events:\n 885 fd, events = self._events.popitem()\n 886 try:\n 887 fd_obj, handler_func = self._handlers[fd]\n--> 888 handler_func(fd_obj, events)\n handler_func = <function wrap.<locals>.null_wrapper>\n fd_obj = <zmq.sugar.socket.Socket object>\n events = 5\n 889 except (OSError, IOError) as e:\n 890 if errno_from_exception(e) == errno.EPIPE:\n 891 # Happens when the client closes the connection\n 892 pass\n\n...........................................................................\n/Users/fouesneau/anaconda/lib/python3.5/site-packages/tornado/stack_context.py in null_wrapper(*args=(<zmq.sugar.socket.Socket object>, 5), **kwargs={})\n 272 # Fast path when there are no active contexts.\n 273 def null_wrapper(*args, **kwargs):\n 274 try:\n 275 current_state = _state.contexts\n 276 _state.contexts = cap_contexts[0]\n--> 277 return fn(*args, **kwargs)\n args = (<zmq.sugar.socket.Socket object>, 5)\n kwargs = {}\n 278 finally:\n 279 _state.contexts = current_state\n 280 null_wrapper._wrapped = True\n 281 return null_wrapper\n\n...........................................................................\n/Users/fouesneau/anaconda/lib/python3.5/site-packages/zmq/eventloop/zmqstream.py in _handle_events(self=<zmq.eventloop.zmqstream.ZMQStream object>, fd=<zmq.sugar.socket.Socket object>, events=5)\n 435 # dispatch events:\n 436 if events & IOLoop.ERROR:\n 437 gen_log.error(\"got POLLERR event on ZMQStream, which doesn't make sense\")\n 438 return\n 439 if events & IOLoop.READ:\n--> 440 self._handle_recv()\n self._handle_recv = <bound method ZMQStream._handle_recv of <zmq.eventloop.zmqstream.ZMQStream object>>\n 441 if not self.socket:\n 442 return\n 443 if events & IOLoop.WRITE:\n 444 self._handle_send()\n\n...........................................................................\n/Users/fouesneau/anaconda/lib/python3.5/site-packages/zmq/eventloop/zmqstream.py in _handle_recv(self=<zmq.eventloop.zmqstream.ZMQStream object>)\n 467 gen_log.error(\"RECV Error: %s\"%zmq.strerror(e.errno))\n 468 else:\n 469 if self._recv_callback:\n 470 callback = self._recv_callback\n 471 # self._recv_callback = None\n--> 472 self._run_callback(callback, msg)\n self._run_callback = <bound method ZMQStream._run_callback of <zmq.eventloop.zmqstream.ZMQStream object>>\n callback = <function wrap.<locals>.null_wrapper>\n msg = [<zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>]\n 473 \n 474 # self.update_state()\n 475 \n 476 \n\n...........................................................................\n/Users/fouesneau/anaconda/lib/python3.5/site-packages/zmq/eventloop/zmqstream.py in _run_callback(self=<zmq.eventloop.zmqstream.ZMQStream object>, callback=<function wrap.<locals>.null_wrapper>, *args=([<zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>],), **kwargs={})\n 409 close our socket.\"\"\"\n 410 try:\n 411 # Use a NullContext to ensure that all StackContexts are run\n 412 # inside our blanket exception handler rather than outside.\n 413 with stack_context.NullContext():\n--> 414 callback(*args, **kwargs)\n callback = <function wrap.<locals>.null_wrapper>\n args = ([<zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>],)\n kwargs = {}\n 415 except:\n 416 gen_log.error(\"Uncaught exception, closing connection.\",\n 417 exc_info=True)\n 418 # Close the socket on an uncaught exception from a user callback\n\n...........................................................................\n/Users/fouesneau/anaconda/lib/python3.5/site-packages/tornado/stack_context.py in null_wrapper(*args=([<zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>],), **kwargs={})\n 272 # Fast path when there are no active contexts.\n 273 def null_wrapper(*args, **kwargs):\n 274 try:\n 275 current_state = _state.contexts\n 276 _state.contexts = cap_contexts[0]\n--> 277 return fn(*args, **kwargs)\n args = ([<zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>],)\n kwargs = {}\n 278 finally:\n 279 _state.contexts = current_state\n 280 null_wrapper._wrapped = True\n 281 return null_wrapper\n\n...........................................................................\n/Users/fouesneau/anaconda/lib/python3.5/site-packages/ipykernel/kernelbase.py in dispatcher(msg=[<zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>])\n 278 if self.control_stream:\n 279 self.control_stream.on_recv(self.dispatch_control, copy=False)\n 280 \n 281 def make_dispatcher(stream):\n 282 def dispatcher(msg):\n--> 283 return self.dispatch_shell(stream, msg)\n msg = [<zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>]\n 284 return dispatcher\n 285 \n 286 for s in self.shell_streams:\n 287 s.on_recv(make_dispatcher(s), copy=False)\n\n...........................................................................\n/Users/fouesneau/anaconda/lib/python3.5/site-packages/ipykernel/kernelbase.py in dispatch_shell(self=<ipykernel.ipkernel.IPythonKernel object>, stream=<zmq.eventloop.zmqstream.ZMQStream object>, msg={'buffers': [], 'content': {'allow_stdin': True, 'code': 'with noisy_model:\\n trace = pm.sample(10000, start=start, njobs=4)', 'silent': False, 'stop_on_error': True, 'store_history': True, 'user_expressions': {}}, 'header': {'date': datetime.datetime(2017, 5, 26, 9, 29, 41, 16513, tzinfo=datetime.timezone.utc), 'msg_id': '8F9F1275974B458B84088AF3A8BE8825', 'msg_type': 'execute_request', 'session': '4C0B7BC38441495B825BA6C86F0A4D13', 'username': 'username', 'version': '5.0'}, 'metadata': {}, 'msg_id': '8F9F1275974B458B84088AF3A8BE8825', 'msg_type': 'execute_request', 'parent_header': {}})\n 230 self.log.warn(\"Unknown message type: %r\", msg_type)\n 231 else:\n 232 self.log.debug(\"%s: %s\", msg_type, msg)\n 233 self.pre_handler_hook()\n 234 try:\n--> 235 handler(stream, idents, msg)\n handler = <bound method Kernel.execute_request of <ipykernel.ipkernel.IPythonKernel object>>\n stream = <zmq.eventloop.zmqstream.ZMQStream object>\n idents = [b'4C0B7BC38441495B825BA6C86F0A4D13']\n msg = {'buffers': [], 'content': {'allow_stdin': True, 'code': 'with noisy_model:\\n trace = pm.sample(10000, start=start, njobs=4)', 'silent': False, 'stop_on_error': True, 'store_history': True, 'user_expressions': {}}, 'header': {'date': datetime.datetime(2017, 5, 26, 9, 29, 41, 16513, tzinfo=datetime.timezone.utc), 'msg_id': '8F9F1275974B458B84088AF3A8BE8825', 'msg_type': 'execute_request', 'session': '4C0B7BC38441495B825BA6C86F0A4D13', 'username': 'username', 'version': '5.0'}, 'metadata': {}, 'msg_id': '8F9F1275974B458B84088AF3A8BE8825', 'msg_type': 'execute_request', 'parent_header': {}}\n 236 except Exception:\n 237 self.log.error(\"Exception in message handler:\", exc_info=True)\n 238 finally:\n 239 self.post_handler_hook()\n\n...........................................................................\n/Users/fouesneau/anaconda/lib/python3.5/site-packages/ipykernel/kernelbase.py in execute_request(self=<ipykernel.ipkernel.IPythonKernel object>, stream=<zmq.eventloop.zmqstream.ZMQStream object>, ident=[b'4C0B7BC38441495B825BA6C86F0A4D13'], parent={'buffers': [], 'content': {'allow_stdin': True, 'code': 'with noisy_model:\\n trace = pm.sample(10000, start=start, njobs=4)', 'silent': False, 'stop_on_error': True, 'store_history': True, 'user_expressions': {}}, 'header': {'date': datetime.datetime(2017, 5, 26, 9, 29, 41, 16513, tzinfo=datetime.timezone.utc), 'msg_id': '8F9F1275974B458B84088AF3A8BE8825', 'msg_type': 'execute_request', 'session': '4C0B7BC38441495B825BA6C86F0A4D13', 'username': 'username', 'version': '5.0'}, 'metadata': {}, 'msg_id': '8F9F1275974B458B84088AF3A8BE8825', 'msg_type': 'execute_request', 'parent_header': {}})\n 394 if not silent:\n 395 self.execution_count += 1\n 396 self._publish_execute_input(code, parent, self.execution_count)\n 397 \n 398 reply_content = self.do_execute(code, silent, store_history,\n--> 399 user_expressions, allow_stdin)\n user_expressions = {}\n allow_stdin = True\n 400 \n 401 # Flush output before sending the reply.\n 402 sys.stdout.flush()\n 403 sys.stderr.flush()\n\n...........................................................................\n/Users/fouesneau/anaconda/lib/python3.5/site-packages/ipykernel/ipkernel.py in do_execute(self=<ipykernel.ipkernel.IPythonKernel object>, code='with noisy_model:\\n trace = pm.sample(10000, start=start, njobs=4)', silent=False, store_history=True, user_expressions={}, allow_stdin=True)\n 191 \n 192 self._forward_input(allow_stdin)\n 193 \n 194 reply_content = {}\n 195 try:\n--> 196 res = shell.run_cell(code, store_history=store_history, silent=silent)\n res = undefined\n shell.run_cell = <bound method ZMQInteractiveShell.run_cell of <ipykernel.zmqshell.ZMQInteractiveShell object>>\n code = 'with noisy_model:\\n trace = pm.sample(10000, start=start, njobs=4)'\n store_history = True\n silent = False\n 197 finally:\n 198 self._restore_input()\n 199 \n 200 if res.error_before_exec is not None:\n\n...........................................................................\n/Users/fouesneau/anaconda/lib/python3.5/site-packages/ipykernel/zmqshell.py in run_cell(self=<ipykernel.zmqshell.ZMQInteractiveShell object>, *args=('with noisy_model:\\n trace = pm.sample(10000, start=start, njobs=4)',), **kwargs={'silent': False, 'store_history': True})\n 528 )\n 529 self.payload_manager.write_payload(payload)\n 530 \n 531 def run_cell(self, *args, **kwargs):\n 532 self._last_traceback = None\n--> 533 return super(ZMQInteractiveShell, self).run_cell(*args, **kwargs)\n self.run_cell = <bound method ZMQInteractiveShell.run_cell of <ipykernel.zmqshell.ZMQInteractiveShell object>>\n args = ('with noisy_model:\\n trace = pm.sample(10000, start=start, njobs=4)',)\n kwargs = {'silent': False, 'store_history': True}\n 534 \n 535 def _showtraceback(self, etype, evalue, stb):\n 536 # try to preserve ordering of tracebacks and print statements\n 537 sys.stdout.flush()\n\n...........................................................................\n/Users/fouesneau/anaconda/lib/python3.5/site-packages/IPython/core/interactiveshell.py in run_cell(self=<ipykernel.zmqshell.ZMQInteractiveShell object>, raw_cell='with noisy_model:\\n trace = pm.sample(10000, start=start, njobs=4)', store_history=True, silent=False, shell_futures=True)\n 2712 self.displayhook.exec_result = result\n 2713 \n 2714 # Execute the user code\n 2715 interactivity = \"none\" if silent else self.ast_node_interactivity\n 2716 has_raised = self.run_ast_nodes(code_ast.body, cell_name,\n-> 2717 interactivity=interactivity, compiler=compiler, result=result)\n interactivity = 'last_expr'\n compiler = <IPython.core.compilerop.CachingCompiler object>\n 2718 \n 2719 self.last_execution_succeeded = not has_raised\n 2720 \n 2721 # Reset this so later displayed values do not modify the\n\n...........................................................................\n/Users/fouesneau/anaconda/lib/python3.5/site-packages/IPython/core/interactiveshell.py in run_ast_nodes(self=<ipykernel.zmqshell.ZMQInteractiveShell object>, nodelist=[<_ast.With object>], cell_name='<ipython-input-8-4fdb4925d502>', interactivity='none', compiler=<IPython.core.compilerop.CachingCompiler object>, result=<ExecutionResult object at 11e4acf98, execution_..._before_exec=None error_in_exec=None result=None>)\n 2816 \n 2817 try:\n 2818 for i, node in enumerate(to_run_exec):\n 2819 mod = ast.Module([node])\n 2820 code = compiler(mod, cell_name, \"exec\")\n-> 2821 if self.run_code(code, result):\n self.run_code = <bound method InteractiveShell.run_code of <ipykernel.zmqshell.ZMQInteractiveShell object>>\n code = <code object <module> at 0x11844eed0, file \"<ipython-input-8-4fdb4925d502>\", line 1>\n result = <ExecutionResult object at 11e4acf98, execution_..._before_exec=None error_in_exec=None result=None>\n 2822 return True\n 2823 \n 2824 for i, node in enumerate(to_run_interactive):\n 2825 mod = ast.Interactive([node])\n\n...........................................................................\n/Users/fouesneau/anaconda/lib/python3.5/site-packages/IPython/core/interactiveshell.py in run_code(self=<ipykernel.zmqshell.ZMQInteractiveShell object>, code_obj=<code object <module> at 0x11844eed0, file \"<ipython-input-8-4fdb4925d502>\", line 1>, result=<ExecutionResult object at 11e4acf98, execution_..._before_exec=None error_in_exec=None result=None>)\n 2876 outflag = 1 # happens in more places, so it's easier as default\n 2877 try:\n 2878 try:\n 2879 self.hooks.pre_run_code_hook()\n 2880 #rprint('Running code', repr(code_obj)) # dbg\n-> 2881 exec(code_obj, self.user_global_ns, self.user_ns)\n code_obj = <code object <module> at 0x11844eed0, file \"<ipython-input-8-4fdb4925d502>\", line 1>\n self.user_global_ns = {'ALLOW_THREADS': 1, 'Annotation': <class 'matplotlib.text.Annotation'>, 'Arrow': <class 'matplotlib.patches.Arrow'>, 'Artist': <class 'matplotlib.artist.Artist'>, 'AutoLocator': <class 'matplotlib.ticker.AutoLocator'>, 'Axes': <class 'matplotlib.axes._axes.Axes'>, 'BUFSIZE': 8192, 'Button': <class 'matplotlib.widgets.Button'>, 'CLIP': 0, 'Circle': <class 'matplotlib.patches.Circle'>, ...}\n self.user_ns = {'ALLOW_THREADS': 1, 'Annotation': <class 'matplotlib.text.Annotation'>, 'Arrow': <class 'matplotlib.patches.Arrow'>, 'Artist': <class 'matplotlib.artist.Artist'>, 'AutoLocator': <class 'matplotlib.ticker.AutoLocator'>, 'Axes': <class 'matplotlib.axes._axes.Axes'>, 'BUFSIZE': 8192, 'Button': <class 'matplotlib.widgets.Button'>, 'CLIP': 0, 'Circle': <class 'matplotlib.patches.Circle'>, ...}\n 2882 finally:\n 2883 # Reset our crash handler in place\n 2884 sys.excepthook = old_excepthook\n 2885 except SystemExit as e:\n\n...........................................................................\n/Users/fouesneau/Work/bayesian_limits/<ipython-input-8-4fdb4925d502> in <module>()\n 1 with noisy_model:\n----> 2 trace = pm.sample(10000, start=start, njobs=4)\n\n...........................................................................\n/Users/fouesneau/anaconda/lib/python3.5/site-packages/pymc3/sampling.py in sample(draws=10000, step=<pymc3.step_methods.nuts.NUTS object>, init='advi', n_init=200000, start={'Mi': array([ 0.11701483, 0.20511936, 0.15301196, 0...82748974, 0.11094993, 0.17152482, 0.16146663]), 'Mmax': 23.377061076354696, 'slope': -2.35}, trace=None, chain=0, njobs=4, tune=None, progressbar=True, model=<pymc3.model.Model object>, random_seed=-1)\n 170 sample_func = _mp_sample\n 171 sample_args['njobs'] = njobs\n 172 else:\n 173 sample_func = _sample\n 174 \n--> 175 return sample_func(**sample_args)\n sample_func = <function _mp_sample>\n sample_args = {'chain': 0, 'draws': 10000, 'model': <pymc3.model.Model object>, 'njobs': 4, 'progressbar': True, 'random_seed': -1, 'start': {'Mi': array([ 0.11701483, 0.20511936, 0.15301196, 0...82748974, 0.11094993, 0.17152482, 0.16146663]), 'Mmax': 23.377061076354696, 'slope': -2.35}, 'step': <pymc3.step_methods.nuts.NUTS object>, 'trace': None, 'tune': None}\n 176 \n 177 \n 178 def _sample(draws, step=None, start=None, trace=None, chain=0, tune=None,\n 179 progressbar=True, model=None, random_seed=-1):\n\n...........................................................................\n/Users/fouesneau/anaconda/lib/python3.5/site-packages/pymc3/sampling.py in _mp_sample(**kwargs={'draws': 10000, 'model': <pymc3.model.Model object>, 'step': <pymc3.step_methods.nuts.NUTS object>, 'trace': None, 'tune': None})\n 319 pbars = [kwargs.pop('progressbar')] + [False] * (njobs - 1)\n 320 traces = Parallel(n_jobs=njobs)(delayed(_sample)(chain=chains[i],\n 321 progressbar=pbars[i],\n 322 random_seed=rseed[i],\n 323 start=start_vals[i],\n--> 324 **kwargs) for i in range(njobs))\n kwargs = {'draws': 10000, 'model': <pymc3.model.Model object>, 'step': <pymc3.step_methods.nuts.NUTS object>, 'trace': None, 'tune': None}\n njobs = 4\n 325 return merge_traces(traces)\n 326 \n 327 \n 328 def stop_tuning(step):\n\n...........................................................................\n/Users/fouesneau/anaconda/lib/python3.5/site-packages/joblib/parallel.py in __call__(self=Parallel(n_jobs=4), iterable=<generator object _mp_sample.<locals>.<genexpr>>)\n 784 if pre_dispatch == \"all\" or n_jobs == 1:\n 785 # The iterable was consumed all at once by the above for loop.\n 786 # No need to wait for async callbacks to trigger to\n 787 # consumption.\n 788 self._iterating = False\n--> 789 self.retrieve()\n self.retrieve = <bound method Parallel.retrieve of Parallel(n_jobs=4)>\n 790 # Make sure that we get a last message telling us we are done\n 791 elapsed_time = time.time() - self._start_time\n 792 self._print('Done %3i out of %3i | elapsed: %s finished',\n 793 (len(self._output), len(self._output),\n\n---------------------------------------------------------------------------\nSub-process traceback:\n---------------------------------------------------------------------------\nValueError Fri May 26 11:30:02 2017\nPID: 54136 Python 3.5.2: /Users/fouesneau/anaconda/bin/python\n...........................................................................\n/Users/fouesneau/anaconda/lib/python3.5/site-packages/joblib/parallel.py in __call__(self=<joblib.parallel.BatchedCalls object>)\n 126 def __init__(self, iterator_slice):\n 127 self.items = list(iterator_slice)\n 128 self._size = len(self.items)\n 129 \n 130 def __call__(self):\n--> 131 return [func(*args, **kwargs) for func, args, kwargs in self.items]\n self.items = [(<function _sample>, (), {'chain': 0, 'draws': 10000, 'model': <pymc3.model.Model object>, 'progressbar': True, 'random_seed': 1671993037, 'start': {'Mi': array([ 0.11701483, 0.20511936, 0.15301196, 0...82748974, 0.11094993, 0.17152482, 0.16146663]), 'Mmax': 23.377061076354696, 'Mmax_interval_': array(-1.1102230246251565e-16), 'slope': -2.35, 'slope_interval_': array(0.0)}, 'step': <pymc3.step_methods.nuts.NUTS object>, 'trace': None, 'tune': None})]\n 132 \n 133 def __len__(self):\n 134 return self._size\n 135 \n\n...........................................................................\n/Users/fouesneau/anaconda/lib/python3.5/site-packages/joblib/parallel.py in <listcomp>(.0=<list_iterator object>)\n 126 def __init__(self, iterator_slice):\n 127 self.items = list(iterator_slice)\n 128 self._size = len(self.items)\n 129 \n 130 def __call__(self):\n--> 131 return [func(*args, **kwargs) for func, args, kwargs in self.items]\n func = <function _sample>\n args = ()\n kwargs = {'chain': 0, 'draws': 10000, 'model': <pymc3.model.Model object>, 'progressbar': True, 'random_seed': 1671993037, 'start': {'Mi': array([ 0.11701483, 0.20511936, 0.15301196, 0...82748974, 0.11094993, 0.17152482, 0.16146663]), 'Mmax': 23.377061076354696, 'Mmax_interval_': array(-1.1102230246251565e-16), 'slope': -2.35, 'slope_interval_': array(0.0)}, 'step': <pymc3.step_methods.nuts.NUTS object>, 'trace': None, 'tune': None}\n 132 \n 133 def __len__(self):\n 134 return self._size\n 135 \n\n...........................................................................\n/Users/fouesneau/anaconda/lib/python3.5/site-packages/pymc3/sampling.py in _sample(draws=10000, step=<pymc3.step_methods.nuts.NUTS object>, start={'Mi': array([ 0.11701483, 0.20511936, 0.15301196, 0...82748974, 0.11094993, 0.17152482, 0.16146663]), 'Mmax': 23.377061076354696, 'Mmax_interval_': array(-1.1102230246251565e-16), 'slope': -2.35, 'slope_interval_': array(0.0)}, trace=None, chain=0, tune=None, progressbar=True, model=<pymc3.model.Model object>, random_seed=1671993037)\n 180 sampling = _iter_sample(draws, step, start, trace, chain,\n 181 tune, model, random_seed)\n 182 if progressbar:\n 183 sampling = tqdm(sampling, total=draws)\n 184 try:\n--> 185 for strace in sampling:\n strace = undefined\n sampling = 0%| | 0/10000 [00:00<?, ?it/s]\n 186 pass\n 187 except KeyboardInterrupt:\n 188 strace.close()\n 189 return MultiTrace([strace])\n\n...........................................................................\n/Users/fouesneau/anaconda/lib/python3.5/site-packages/tqdm/_tqdm.py in __iter__(self= 0%| | 0/10000 [00:00<?, ?it/s])\n 828 except AttributeError:\n 829 raise TqdmDeprecationWarning(\"\"\"\\\n 830 Please use `tqdm_gui(...)` instead of `tqdm(..., gui=True)`\n 831 \"\"\", fp_write=getattr(self.fp, 'write', sys.stderr.write))\n 832 \n--> 833 for obj in iterable:\n obj = undefined\n iterable = <generator object _iter_sample>\n 834 yield obj\n 835 # Update and print the progressbar.\n 836 # Note: does not call self.update(1) for speed optimisation.\n 837 n += 1\n\n...........................................................................\n/Users/fouesneau/anaconda/lib/python3.5/site-packages/pymc3/sampling.py in _iter_sample(draws=10000, step=<pymc3.step_methods.nuts.NUTS object>, start={'Mi': array([ 0.11701483, 0.20511936, 0.15301196, 0...82748974, 0.11094993, 0.17152482, 0.16146663]), 'Mmax': 23.377061076354696, 'Mmax_interval_': array(-1.1102230246251565e-16), 'slope': -2.35, 'slope_interval_': array(0.0)}, trace=None, chain=0, tune=None, model=<pymc3.model.Model object>, random_seed=1671993037)\n 262 \n 263 strace.setup(draws, chain)\n 264 for i in range(draws):\n 265 if i == tune:\n 266 step = stop_tuning(step)\n--> 267 point = step.step(point)\n point = {'Mi': array([ 0.11701483, 0.20511936, 0.15301196, 0...82748974, 0.11094993, 0.17152482, 0.16146663]), 'Mmax_interval_': array(-1.1102230246251565e-16), 'slope_interval_': array(0.0)}\n step.step = <bound method ArrayStepShared.step of <pymc3.step_methods.nuts.NUTS object>>\n 268 strace.record(point)\n 269 yield strace\n 270 else:\n 271 strace.close()\n\n...........................................................................\n/Users/fouesneau/anaconda/lib/python3.5/site-packages/pymc3/step_methods/arraystep.py in step(self=<pymc3.step_methods.nuts.NUTS object>, point={'Mi': array([ 0.11701483, 0.20511936, 0.15301196, 0...82748974, 0.11094993, 0.17152482, 0.16146663]), 'Mmax_interval_': array(-1.1102230246251565e-16), 'slope_interval_': array(0.0)})\n 137 for var, share in self.shared.items():\n 138 share.container.storage[0] = point[var]\n 139 \n 140 bij = DictToArrayBijection(self.ordering, point)\n 141 \n--> 142 apoint = self.astep(bij.map(point))\n apoint = undefined\n self.astep = <bound method NUTS.astep of <pymc3.step_methods.nuts.NUTS object>>\n bij.map = <bound method DictToArrayBijection.map of <pymc3.blocking.DictToArrayBijection object>>\n point = {'Mi': array([ 0.11701483, 0.20511936, 0.15301196, 0...82748974, 0.11094993, 0.17152482, 0.16146663]), 'Mmax_interval_': array(-1.1102230246251565e-16), 'slope_interval_': array(0.0)}\n 143 return bij.rmap(apoint)\n 144 \n 145 \n 146 def metrop_select(mr, q, q0):\n\n...........................................................................\n/Users/fouesneau/anaconda/lib/python3.5/site-packages/pymc3/blocking.py in map(self=<pymc3.blocking.DictToArrayBijection object>, dpt={'Mi': array([ 0.11701483, 0.20511936, 0.15301196, 0...82748974, 0.11094993, 0.17152482, 0.16146663]), 'Mmax_interval_': array(-1.1102230246251565e-16), 'slope_interval_': array(0.0)})\n 55 ----------\n 56 dpt : dict\n 57 \"\"\"\n 58 apt = np.empty(self.ordering.dimensions, dtype=self.array_dtype)\n 59 for var, slc, _, _ in self.ordering.vmap:\n---> 60 apt[slc] = dpt[var].ravel()\n apt = array([ 0., 0., 0.])\n slc = slice(0, 1, None)\n dpt = {'Mi': array([ 0.11701483, 0.20511936, 0.15301196, 0...82748974, 0.11094993, 0.17152482, 0.16146663]), 'Mmax_interval_': array(-1.1102230246251565e-16), 'slope_interval_': array(0.0)}\n var.ravel = undefined\n 61 return apt\n 62 \n 63 def rmap(self, apt):\n 64 \"\"\"\n\nValueError: could not broadcast input array from shape (1000) into shape (1)\n___________________________________________________________________________",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mRemoteTraceback\u001b[0m Traceback (most recent call last)",
"\u001b[0;31mRemoteTraceback\u001b[0m: \n\"\"\"\nTraceback (most recent call last):\n File \"/Users/fouesneau/anaconda/lib/python3.5/site-packages/joblib/_parallel_backends.py\", line 350, in __call__\n return self.func(*args, **kwargs)\n File \"/Users/fouesneau/anaconda/lib/python3.5/site-packages/joblib/parallel.py\", line 131, in __call__\n return [func(*args, **kwargs) for func, args, kwargs in self.items]\n File \"/Users/fouesneau/anaconda/lib/python3.5/site-packages/joblib/parallel.py\", line 131, in <listcomp>\n return [func(*args, **kwargs) for func, args, kwargs in self.items]\n File \"/Users/fouesneau/anaconda/lib/python3.5/site-packages/pymc3/sampling.py\", line 185, in _sample\n for strace in sampling:\n File \"/Users/fouesneau/anaconda/lib/python3.5/site-packages/tqdm/_tqdm.py\", line 833, in __iter__\n for obj in iterable:\n File \"/Users/fouesneau/anaconda/lib/python3.5/site-packages/pymc3/sampling.py\", line 267, in _iter_sample\n point = step.step(point)\n File \"/Users/fouesneau/anaconda/lib/python3.5/site-packages/pymc3/step_methods/arraystep.py\", line 142, in step\n apoint = self.astep(bij.map(point))\n File \"/Users/fouesneau/anaconda/lib/python3.5/site-packages/pymc3/blocking.py\", line 60, in map\n apt[slc] = dpt[var].ravel()\nValueError: could not broadcast input array from shape (1000) into shape (1)\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n File \"/Users/fouesneau/anaconda/lib/python3.5/multiprocessing/pool.py\", line 119, in worker\n result = (True, func(*args, **kwds))\n File \"/Users/fouesneau/anaconda/lib/python3.5/site-packages/joblib/_parallel_backends.py\", line 359, in __call__\n raise TransportableException(text, e_type)\njoblib.my_exceptions.TransportableException: TransportableException\n___________________________________________________________________________\nValueError Fri May 26 11:30:02 2017\nPID: 54136 Python 3.5.2: /Users/fouesneau/anaconda/bin/python\n...........................................................................\n/Users/fouesneau/anaconda/lib/python3.5/site-packages/joblib/parallel.py in __call__(self=<joblib.parallel.BatchedCalls object>)\n 126 def __init__(self, iterator_slice):\n 127 self.items = list(iterator_slice)\n 128 self._size = len(self.items)\n 129 \n 130 def __call__(self):\n--> 131 return [func(*args, **kwargs) for func, args, kwargs in self.items]\n self.items = [(<function _sample>, (), {'chain': 0, 'draws': 10000, 'model': <pymc3.model.Model object>, 'progressbar': True, 'random_seed': 1671993037, 'start': {'Mi': array([ 0.11701483, 0.20511936, 0.15301196, 0...82748974, 0.11094993, 0.17152482, 0.16146663]), 'Mmax': 23.377061076354696, 'Mmax_interval_': array(-1.1102230246251565e-16), 'slope': -2.35, 'slope_interval_': array(0.0)}, 'step': <pymc3.step_methods.nuts.NUTS object>, 'trace': None, 'tune': None})]\n 132 \n 133 def __len__(self):\n 134 return self._size\n 135 \n\n...........................................................................\n/Users/fouesneau/anaconda/lib/python3.5/site-packages/joblib/parallel.py in <listcomp>(.0=<list_iterator object>)\n 126 def __init__(self, iterator_slice):\n 127 self.items = list(iterator_slice)\n 128 self._size = len(self.items)\n 129 \n 130 def __call__(self):\n--> 131 return [func(*args, **kwargs) for func, args, kwargs in self.items]\n func = <function _sample>\n args = ()\n kwargs = {'chain': 0, 'draws': 10000, 'model': <pymc3.model.Model object>, 'progressbar': True, 'random_seed': 1671993037, 'start': {'Mi': array([ 0.11701483, 0.20511936, 0.15301196, 0...82748974, 0.11094993, 0.17152482, 0.16146663]), 'Mmax': 23.377061076354696, 'Mmax_interval_': array(-1.1102230246251565e-16), 'slope': -2.35, 'slope_interval_': array(0.0)}, 'step': <pymc3.step_methods.nuts.NUTS object>, 'trace': None, 'tune': None}\n 132 \n 133 def __len__(self):\n 134 return self._size\n 135 \n\n...........................................................................\n/Users/fouesneau/anaconda/lib/python3.5/site-packages/pymc3/sampling.py in _sample(draws=10000, step=<pymc3.step_methods.nuts.NUTS object>, start={'Mi': array([ 0.11701483, 0.20511936, 0.15301196, 0...82748974, 0.11094993, 0.17152482, 0.16146663]), 'Mmax': 23.377061076354696, 'Mmax_interval_': array(-1.1102230246251565e-16), 'slope': -2.35, 'slope_interval_': array(0.0)}, trace=None, chain=0, tune=None, progressbar=True, model=<pymc3.model.Model object>, random_seed=1671993037)\n 180 sampling = _iter_sample(draws, step, start, trace, chain,\n 181 tune, model, random_seed)\n 182 if progressbar:\n 183 sampling = tqdm(sampling, total=draws)\n 184 try:\n--> 185 for strace in sampling:\n strace = undefined\n sampling = 0%| | 0/10000 [00:00<?, ?it/s]\n 186 pass\n 187 except KeyboardInterrupt:\n 188 strace.close()\n 189 return MultiTrace([strace])\n\n...........................................................................\n/Users/fouesneau/anaconda/lib/python3.5/site-packages/tqdm/_tqdm.py in __iter__(self= 0%| | 0/10000 [00:00<?, ?it/s])\n 828 except AttributeError:\n 829 raise TqdmDeprecationWarning(\"\"\"\\\n 830 Please use `tqdm_gui(...)` instead of `tqdm(..., gui=True)`\n 831 \"\"\", fp_write=getattr(self.fp, 'write', sys.stderr.write))\n 832 \n--> 833 for obj in iterable:\n obj = undefined\n iterable = <generator object _iter_sample>\n 834 yield obj\n 835 # Update and print the progressbar.\n 836 # Note: does not call self.update(1) for speed optimisation.\n 837 n += 1\n\n...........................................................................\n/Users/fouesneau/anaconda/lib/python3.5/site-packages/pymc3/sampling.py in _iter_sample(draws=10000, step=<pymc3.step_methods.nuts.NUTS object>, start={'Mi': array([ 0.11701483, 0.20511936, 0.15301196, 0...82748974, 0.11094993, 0.17152482, 0.16146663]), 'Mmax': 23.377061076354696, 'Mmax_interval_': array(-1.1102230246251565e-16), 'slope': -2.35, 'slope_interval_': array(0.0)}, trace=None, chain=0, tune=None, model=<pymc3.model.Model object>, random_seed=1671993037)\n 262 \n 263 strace.setup(draws, chain)\n 264 for i in range(draws):\n 265 if i == tune:\n 266 step = stop_tuning(step)\n--> 267 point = step.step(point)\n point = {'Mi': array([ 0.11701483, 0.20511936, 0.15301196, 0...82748974, 0.11094993, 0.17152482, 0.16146663]), 'Mmax_interval_': array(-1.1102230246251565e-16), 'slope_interval_': array(0.0)}\n step.step = <bound method ArrayStepShared.step of <pymc3.step_methods.nuts.NUTS object>>\n 268 strace.record(point)\n 269 yield strace\n 270 else:\n 271 strace.close()\n\n...........................................................................\n/Users/fouesneau/anaconda/lib/python3.5/site-packages/pymc3/step_methods/arraystep.py in step(self=<pymc3.step_methods.nuts.NUTS object>, point={'Mi': array([ 0.11701483, 0.20511936, 0.15301196, 0...82748974, 0.11094993, 0.17152482, 0.16146663]), 'Mmax_interval_': array(-1.1102230246251565e-16), 'slope_interval_': array(0.0)})\n 137 for var, share in self.shared.items():\n 138 share.container.storage[0] = point[var]\n 139 \n 140 bij = DictToArrayBijection(self.ordering, point)\n 141 \n--> 142 apoint = self.astep(bij.map(point))\n apoint = undefined\n self.astep = <bound method NUTS.astep of <pymc3.step_methods.nuts.NUTS object>>\n bij.map = <bound method DictToArrayBijection.map of <pymc3.blocking.DictToArrayBijection object>>\n point = {'Mi': array([ 0.11701483, 0.20511936, 0.15301196, 0...82748974, 0.11094993, 0.17152482, 0.16146663]), 'Mmax_interval_': array(-1.1102230246251565e-16), 'slope_interval_': array(0.0)}\n 143 return bij.rmap(apoint)\n 144 \n 145 \n 146 def metrop_select(mr, q, q0):\n\n...........................................................................\n/Users/fouesneau/anaconda/lib/python3.5/site-packages/pymc3/blocking.py in map(self=<pymc3.blocking.DictToArrayBijection object>, dpt={'Mi': array([ 0.11701483, 0.20511936, 0.15301196, 0...82748974, 0.11094993, 0.17152482, 0.16146663]), 'Mmax_interval_': array(-1.1102230246251565e-16), 'slope_interval_': array(0.0)})\n 55 ----------\n 56 dpt : dict\n 57 \"\"\"\n 58 apt = np.empty(self.ordering.dimensions, dtype=self.array_dtype)\n 59 for var, slc, _, _ in self.ordering.vmap:\n---> 60 apt[slc] = dpt[var].ravel()\n apt = array([ 0., 0., 0.])\n slc = slice(0, 1, None)\n dpt = {'Mi': array([ 0.11701483, 0.20511936, 0.15301196, 0...82748974, 0.11094993, 0.17152482, 0.16146663]), 'Mmax_interval_': array(-1.1102230246251565e-16), 'slope_interval_': array(0.0)}\n var.ravel = undefined\n 61 return apt\n 62 \n 63 def rmap(self, apt):\n 64 \"\"\"\n\nValueError: could not broadcast input array from shape (1000) into shape (1)\n___________________________________________________________________________\n\"\"\"",
"\nThe above exception was the direct cause of the following exception:\n",
"\u001b[0;31mTransportableException\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m/Users/fouesneau/anaconda/lib/python3.5/site-packages/joblib/parallel.py\u001b[0m in \u001b[0;36mretrieve\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 698\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mgetattr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_backend\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'supports_timeout'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;32mFalse\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 699\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_output\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mextend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mjob\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtimeout\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtimeout\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 700\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/Users/fouesneau/anaconda/lib/python3.5/multiprocessing/pool.py\u001b[0m in \u001b[0;36mget\u001b[0;34m(self, timeout)\u001b[0m\n\u001b[1;32m 607\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 608\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_value\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 609\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mTransportableException\u001b[0m: TransportableException\n___________________________________________________________________________\nValueError Fri May 26 11:30:02 2017\nPID: 54136 Python 3.5.2: /Users/fouesneau/anaconda/bin/python\n...........................................................................\n/Users/fouesneau/anaconda/lib/python3.5/site-packages/joblib/parallel.py in __call__(self=<joblib.parallel.BatchedCalls object>)\n 126 def __init__(self, iterator_slice):\n 127 self.items = list(iterator_slice)\n 128 self._size = len(self.items)\n 129 \n 130 def __call__(self):\n--> 131 return [func(*args, **kwargs) for func, args, kwargs in self.items]\n self.items = [(<function _sample>, (), {'chain': 0, 'draws': 10000, 'model': <pymc3.model.Model object>, 'progressbar': True, 'random_seed': 1671993037, 'start': {'Mi': array([ 0.11701483, 0.20511936, 0.15301196, 0...82748974, 0.11094993, 0.17152482, 0.16146663]), 'Mmax': 23.377061076354696, 'Mmax_interval_': array(-1.1102230246251565e-16), 'slope': -2.35, 'slope_interval_': array(0.0)}, 'step': <pymc3.step_methods.nuts.NUTS object>, 'trace': None, 'tune': None})]\n 132 \n 133 def __len__(self):\n 134 return self._size\n 135 \n\n...........................................................................\n/Users/fouesneau/anaconda/lib/python3.5/site-packages/joblib/parallel.py in <listcomp>(.0=<list_iterator object>)\n 126 def __init__(self, iterator_slice):\n 127 self.items = list(iterator_slice)\n 128 self._size = len(self.items)\n 129 \n 130 def __call__(self):\n--> 131 return [func(*args, **kwargs) for func, args, kwargs in self.items]\n func = <function _sample>\n args = ()\n kwargs = {'chain': 0, 'draws': 10000, 'model': <pymc3.model.Model object>, 'progressbar': True, 'random_seed': 1671993037, 'start': {'Mi': array([ 0.11701483, 0.20511936, 0.15301196, 0...82748974, 0.11094993, 0.17152482, 0.16146663]), 'Mmax': 23.377061076354696, 'Mmax_interval_': array(-1.1102230246251565e-16), 'slope': -2.35, 'slope_interval_': array(0.0)}, 'step': <pymc3.step_methods.nuts.NUTS object>, 'trace': None, 'tune': None}\n 132 \n 133 def __len__(self):\n 134 return self._size\n 135 \n\n...........................................................................\n/Users/fouesneau/anaconda/lib/python3.5/site-packages/pymc3/sampling.py in _sample(draws=10000, step=<pymc3.step_methods.nuts.NUTS object>, start={'Mi': array([ 0.11701483, 0.20511936, 0.15301196, 0...82748974, 0.11094993, 0.17152482, 0.16146663]), 'Mmax': 23.377061076354696, 'Mmax_interval_': array(-1.1102230246251565e-16), 'slope': -2.35, 'slope_interval_': array(0.0)}, trace=None, chain=0, tune=None, progressbar=True, model=<pymc3.model.Model object>, random_seed=1671993037)\n 180 sampling = _iter_sample(draws, step, start, trace, chain,\n 181 tune, model, random_seed)\n 182 if progressbar:\n 183 sampling = tqdm(sampling, total=draws)\n 184 try:\n--> 185 for strace in sampling:\n strace = undefined\n sampling = 0%| | 0/10000 [00:00<?, ?it/s]\n 186 pass\n 187 except KeyboardInterrupt:\n 188 strace.close()\n 189 return MultiTrace([strace])\n\n...........................................................................\n/Users/fouesneau/anaconda/lib/python3.5/site-packages/tqdm/_tqdm.py in __iter__(self= 0%| | 0/10000 [00:00<?, ?it/s])\n 828 except AttributeError:\n 829 raise TqdmDeprecationWarning(\"\"\"\\\n 830 Please use `tqdm_gui(...)` instead of `tqdm(..., gui=True)`\n 831 \"\"\", fp_write=getattr(self.fp, 'write', sys.stderr.write))\n 832 \n--> 833 for obj in iterable:\n obj = undefined\n iterable = <generator object _iter_sample>\n 834 yield obj\n 835 # Update and print the progressbar.\n 836 # Note: does not call self.update(1) for speed optimisation.\n 837 n += 1\n\n...........................................................................\n/Users/fouesneau/anaconda/lib/python3.5/site-packages/pymc3/sampling.py in _iter_sample(draws=10000, step=<pymc3.step_methods.nuts.NUTS object>, start={'Mi': array([ 0.11701483, 0.20511936, 0.15301196, 0...82748974, 0.11094993, 0.17152482, 0.16146663]), 'Mmax': 23.377061076354696, 'Mmax_interval_': array(-1.1102230246251565e-16), 'slope': -2.35, 'slope_interval_': array(0.0)}, trace=None, chain=0, tune=None, model=<pymc3.model.Model object>, random_seed=1671993037)\n 262 \n 263 strace.setup(draws, chain)\n 264 for i in range(draws):\n 265 if i == tune:\n 266 step = stop_tuning(step)\n--> 267 point = step.step(point)\n point = {'Mi': array([ 0.11701483, 0.20511936, 0.15301196, 0...82748974, 0.11094993, 0.17152482, 0.16146663]), 'Mmax_interval_': array(-1.1102230246251565e-16), 'slope_interval_': array(0.0)}\n step.step = <bound method ArrayStepShared.step of <pymc3.step_methods.nuts.NUTS object>>\n 268 strace.record(point)\n 269 yield strace\n 270 else:\n 271 strace.close()\n\n...........................................................................\n/Users/fouesneau/anaconda/lib/python3.5/site-packages/pymc3/step_methods/arraystep.py in step(self=<pymc3.step_methods.nuts.NUTS object>, point={'Mi': array([ 0.11701483, 0.20511936, 0.15301196, 0...82748974, 0.11094993, 0.17152482, 0.16146663]), 'Mmax_interval_': array(-1.1102230246251565e-16), 'slope_interval_': array(0.0)})\n 137 for var, share in self.shared.items():\n 138 share.container.storage[0] = point[var]\n 139 \n 140 bij = DictToArrayBijection(self.ordering, point)\n 141 \n--> 142 apoint = self.astep(bij.map(point))\n apoint = undefined\n self.astep = <bound method NUTS.astep of <pymc3.step_methods.nuts.NUTS object>>\n bij.map = <bound method DictToArrayBijection.map of <pymc3.blocking.DictToArrayBijection object>>\n point = {'Mi': array([ 0.11701483, 0.20511936, 0.15301196, 0...82748974, 0.11094993, 0.17152482, 0.16146663]), 'Mmax_interval_': array(-1.1102230246251565e-16), 'slope_interval_': array(0.0)}\n 143 return bij.rmap(apoint)\n 144 \n 145 \n 146 def metrop_select(mr, q, q0):\n\n...........................................................................\n/Users/fouesneau/anaconda/lib/python3.5/site-packages/pymc3/blocking.py in map(self=<pymc3.blocking.DictToArrayBijection object>, dpt={'Mi': array([ 0.11701483, 0.20511936, 0.15301196, 0...82748974, 0.11094993, 0.17152482, 0.16146663]), 'Mmax_interval_': array(-1.1102230246251565e-16), 'slope_interval_': array(0.0)})\n 55 ----------\n 56 dpt : dict\n 57 \"\"\"\n 58 apt = np.empty(self.ordering.dimensions, dtype=self.array_dtype)\n 59 for var, slc, _, _ in self.ordering.vmap:\n---> 60 apt[slc] = dpt[var].ravel()\n apt = array([ 0., 0., 0.])\n slc = slice(0, 1, None)\n dpt = {'Mi': array([ 0.11701483, 0.20511936, 0.15301196, 0...82748974, 0.11094993, 0.17152482, 0.16146663]), 'Mmax_interval_': array(-1.1102230246251565e-16), 'slope_interval_': array(0.0)}\n var.ravel = undefined\n 61 return apt\n 62 \n 63 def rmap(self, apt):\n 64 \"\"\"\n\nValueError: could not broadcast input array from shape (1000) into shape (1)\n___________________________________________________________________________",
"\nDuring handling of the above exception, another exception occurred:\n",
"\u001b[0;31mJoblibValueError\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-8-4fdb4925d502>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;32mwith\u001b[0m \u001b[0mnoisy_model\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mtrace\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpm\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msample\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m10000\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstart\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mstart\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mnjobs\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m4\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;32m/Users/fouesneau/anaconda/lib/python3.5/site-packages/pymc3/sampling.py\u001b[0m in \u001b[0;36msample\u001b[0;34m(draws, step, init, n_init, start, trace, chain, njobs, tune, progressbar, model, random_seed)\u001b[0m\n\u001b[1;32m 173\u001b[0m \u001b[0msample_func\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m_sample\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 174\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 175\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0msample_func\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m**\u001b[0m\u001b[0msample_args\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 176\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 177\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/Users/fouesneau/anaconda/lib/python3.5/site-packages/pymc3/sampling.py\u001b[0m in \u001b[0;36m_mp_sample\u001b[0;34m(**kwargs)\u001b[0m\n\u001b[1;32m 322\u001b[0m \u001b[0mrandom_seed\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mrseed\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 323\u001b[0m \u001b[0mstart\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mstart_vals\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mi\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 324\u001b[0;31m **kwargs) for i in range(njobs))\n\u001b[0m\u001b[1;32m 325\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mmerge_traces\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtraces\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 326\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/Users/fouesneau/anaconda/lib/python3.5/site-packages/joblib/parallel.py\u001b[0m in \u001b[0;36m__call__\u001b[0;34m(self, iterable)\u001b[0m\n\u001b[1;32m 787\u001b[0m \u001b[0;31m# consumption.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 788\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_iterating\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mFalse\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 789\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mretrieve\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 790\u001b[0m \u001b[0;31m# Make sure that we get a last message telling us we are done\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 791\u001b[0m \u001b[0melapsed_time\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtime\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtime\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m-\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_start_time\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m/Users/fouesneau/anaconda/lib/python3.5/site-packages/joblib/parallel.py\u001b[0m in \u001b[0;36mretrieve\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 738\u001b[0m \u001b[0mexception\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mexception_type\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mreport\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 739\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 740\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mexception\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 741\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 742\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m__call__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0miterable\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mJoblibValueError\u001b[0m: JoblibValueError\n___________________________________________________________________________\nMultiprocessing exception:\n...........................................................................\n/Users/fouesneau/anaconda/lib/python3.5/runpy.py in _run_module_as_main(mod_name='ipykernel.__main__', alter_argv=1)\n 179 sys.exit(msg)\n 180 main_globals = sys.modules[\"__main__\"].__dict__\n 181 if alter_argv:\n 182 sys.argv[0] = mod_spec.origin\n 183 return _run_code(code, main_globals, None,\n--> 184 \"__main__\", mod_spec)\n mod_spec = ModuleSpec(name='ipykernel.__main__', loader=<_f...b/python3.5/site-packages/ipykernel/__main__.py')\n 185 \n 186 def run_module(mod_name, init_globals=None,\n 187 run_name=None, alter_sys=False):\n 188 \"\"\"Execute a module's code without importing it\n\n...........................................................................\n/Users/fouesneau/anaconda/lib/python3.5/runpy.py in _run_code(code=<code object <module> at 0x10076e0c0, file \"/Use...3.5/site-packages/ipykernel/__main__.py\", line 1>, run_globals={'__builtins__': <module 'builtins' (built-in)>, '__cached__': '/Users/fouesneau/anaconda/lib/python3.5/site-packages/ipykernel/__pycache__/__main__.cpython-35.pyc', '__doc__': None, '__file__': '/Users/fouesneau/anaconda/lib/python3.5/site-packages/ipykernel/__main__.py', '__loader__': <_frozen_importlib_external.SourceFileLoader object>, '__name__': '__main__', '__package__': 'ipykernel', '__spec__': ModuleSpec(name='ipykernel.__main__', loader=<_f...b/python3.5/site-packages/ipykernel/__main__.py'), 'app': <module 'ipykernel.kernelapp' from '/Users/foues.../python3.5/site-packages/ipykernel/kernelapp.py'>}, init_globals=None, mod_name='__main__', mod_spec=ModuleSpec(name='ipykernel.__main__', loader=<_f...b/python3.5/site-packages/ipykernel/__main__.py'), pkg_name='ipykernel', script_name=None)\n 80 __cached__ = cached,\n 81 __doc__ = None,\n 82 __loader__ = loader,\n 83 __package__ = pkg_name,\n 84 __spec__ = mod_spec)\n---> 85 exec(code, run_globals)\n code = <code object <module> at 0x10076e0c0, file \"/Use...3.5/site-packages/ipykernel/__main__.py\", line 1>\n run_globals = {'__builtins__': <module 'builtins' (built-in)>, '__cached__': '/Users/fouesneau/anaconda/lib/python3.5/site-packages/ipykernel/__pycache__/__main__.cpython-35.pyc', '__doc__': None, '__file__': '/Users/fouesneau/anaconda/lib/python3.5/site-packages/ipykernel/__main__.py', '__loader__': <_frozen_importlib_external.SourceFileLoader object>, '__name__': '__main__', '__package__': 'ipykernel', '__spec__': ModuleSpec(name='ipykernel.__main__', loader=<_f...b/python3.5/site-packages/ipykernel/__main__.py'), 'app': <module 'ipykernel.kernelapp' from '/Users/foues.../python3.5/site-packages/ipykernel/kernelapp.py'>}\n 86 return run_globals\n 87 \n 88 def _run_module_code(code, init_globals=None,\n 89 mod_name=None, mod_spec=None,\n\n...........................................................................\n/Users/fouesneau/anaconda/lib/python3.5/site-packages/ipykernel/__main__.py in <module>()\n 1 if __name__ == '__main__':\n 2 from ipykernel import kernelapp as app\n----> 3 app.launch_new_instance()\n\n...........................................................................\n/Users/fouesneau/anaconda/lib/python3.5/site-packages/traitlets/config/application.py in launch_instance(cls=<class 'ipykernel.kernelapp.IPKernelApp'>, argv=None, **kwargs={})\n 653 \n 654 If a global instance already exists, this reinitializes and starts it\n 655 \"\"\"\n 656 app = cls.instance(**kwargs)\n 657 app.initialize(argv)\n--> 658 app.start()\n app.start = <bound method IPKernelApp.start of <ipykernel.kernelapp.IPKernelApp object>>\n 659 \n 660 #-----------------------------------------------------------------------------\n 661 # utility functions, for convenience\n 662 #-----------------------------------------------------------------------------\n\n...........................................................................\n/Users/fouesneau/anaconda/lib/python3.5/site-packages/ipykernel/kernelapp.py in start(self=<ipykernel.kernelapp.IPKernelApp object>)\n 472 return self.subapp.start()\n 473 if self.poller is not None:\n 474 self.poller.start()\n 475 self.kernel.start()\n 476 try:\n--> 477 ioloop.IOLoop.instance().start()\n 478 except KeyboardInterrupt:\n 479 pass\n 480 \n 481 launch_new_instance = IPKernelApp.launch_instance\n\n...........................................................................\n/Users/fouesneau/anaconda/lib/python3.5/site-packages/zmq/eventloop/ioloop.py in start(self=<zmq.eventloop.ioloop.ZMQIOLoop object>)\n 172 )\n 173 return loop\n 174 \n 175 def start(self):\n 176 try:\n--> 177 super(ZMQIOLoop, self).start()\n self.start = <bound method ZMQIOLoop.start of <zmq.eventloop.ioloop.ZMQIOLoop object>>\n 178 except ZMQError as e:\n 179 if e.errno == ETERM:\n 180 # quietly return on ETERM\n 181 pass\n\n...........................................................................\n/Users/fouesneau/anaconda/lib/python3.5/site-packages/tornado/ioloop.py in start(self=<zmq.eventloop.ioloop.ZMQIOLoop object>)\n 883 self._events.update(event_pairs)\n 884 while self._events:\n 885 fd, events = self._events.popitem()\n 886 try:\n 887 fd_obj, handler_func = self._handlers[fd]\n--> 888 handler_func(fd_obj, events)\n handler_func = <function wrap.<locals>.null_wrapper>\n fd_obj = <zmq.sugar.socket.Socket object>\n events = 5\n 889 except (OSError, IOError) as e:\n 890 if errno_from_exception(e) == errno.EPIPE:\n 891 # Happens when the client closes the connection\n 892 pass\n\n...........................................................................\n/Users/fouesneau/anaconda/lib/python3.5/site-packages/tornado/stack_context.py in null_wrapper(*args=(<zmq.sugar.socket.Socket object>, 5), **kwargs={})\n 272 # Fast path when there are no active contexts.\n 273 def null_wrapper(*args, **kwargs):\n 274 try:\n 275 current_state = _state.contexts\n 276 _state.contexts = cap_contexts[0]\n--> 277 return fn(*args, **kwargs)\n args = (<zmq.sugar.socket.Socket object>, 5)\n kwargs = {}\n 278 finally:\n 279 _state.contexts = current_state\n 280 null_wrapper._wrapped = True\n 281 return null_wrapper\n\n...........................................................................\n/Users/fouesneau/anaconda/lib/python3.5/site-packages/zmq/eventloop/zmqstream.py in _handle_events(self=<zmq.eventloop.zmqstream.ZMQStream object>, fd=<zmq.sugar.socket.Socket object>, events=5)\n 435 # dispatch events:\n 436 if events & IOLoop.ERROR:\n 437 gen_log.error(\"got POLLERR event on ZMQStream, which doesn't make sense\")\n 438 return\n 439 if events & IOLoop.READ:\n--> 440 self._handle_recv()\n self._handle_recv = <bound method ZMQStream._handle_recv of <zmq.eventloop.zmqstream.ZMQStream object>>\n 441 if not self.socket:\n 442 return\n 443 if events & IOLoop.WRITE:\n 444 self._handle_send()\n\n...........................................................................\n/Users/fouesneau/anaconda/lib/python3.5/site-packages/zmq/eventloop/zmqstream.py in _handle_recv(self=<zmq.eventloop.zmqstream.ZMQStream object>)\n 467 gen_log.error(\"RECV Error: %s\"%zmq.strerror(e.errno))\n 468 else:\n 469 if self._recv_callback:\n 470 callback = self._recv_callback\n 471 # self._recv_callback = None\n--> 472 self._run_callback(callback, msg)\n self._run_callback = <bound method ZMQStream._run_callback of <zmq.eventloop.zmqstream.ZMQStream object>>\n callback = <function wrap.<locals>.null_wrapper>\n msg = [<zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>]\n 473 \n 474 # self.update_state()\n 475 \n 476 \n\n...........................................................................\n/Users/fouesneau/anaconda/lib/python3.5/site-packages/zmq/eventloop/zmqstream.py in _run_callback(self=<zmq.eventloop.zmqstream.ZMQStream object>, callback=<function wrap.<locals>.null_wrapper>, *args=([<zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>],), **kwargs={})\n 409 close our socket.\"\"\"\n 410 try:\n 411 # Use a NullContext to ensure that all StackContexts are run\n 412 # inside our blanket exception handler rather than outside.\n 413 with stack_context.NullContext():\n--> 414 callback(*args, **kwargs)\n callback = <function wrap.<locals>.null_wrapper>\n args = ([<zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>],)\n kwargs = {}\n 415 except:\n 416 gen_log.error(\"Uncaught exception, closing connection.\",\n 417 exc_info=True)\n 418 # Close the socket on an uncaught exception from a user callback\n\n...........................................................................\n/Users/fouesneau/anaconda/lib/python3.5/site-packages/tornado/stack_context.py in null_wrapper(*args=([<zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>],), **kwargs={})\n 272 # Fast path when there are no active contexts.\n 273 def null_wrapper(*args, **kwargs):\n 274 try:\n 275 current_state = _state.contexts\n 276 _state.contexts = cap_contexts[0]\n--> 277 return fn(*args, **kwargs)\n args = ([<zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>],)\n kwargs = {}\n 278 finally:\n 279 _state.contexts = current_state\n 280 null_wrapper._wrapped = True\n 281 return null_wrapper\n\n...........................................................................\n/Users/fouesneau/anaconda/lib/python3.5/site-packages/ipykernel/kernelbase.py in dispatcher(msg=[<zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>])\n 278 if self.control_stream:\n 279 self.control_stream.on_recv(self.dispatch_control, copy=False)\n 280 \n 281 def make_dispatcher(stream):\n 282 def dispatcher(msg):\n--> 283 return self.dispatch_shell(stream, msg)\n msg = [<zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>, <zmq.sugar.frame.Frame object>]\n 284 return dispatcher\n 285 \n 286 for s in self.shell_streams:\n 287 s.on_recv(make_dispatcher(s), copy=False)\n\n...........................................................................\n/Users/fouesneau/anaconda/lib/python3.5/site-packages/ipykernel/kernelbase.py in dispatch_shell(self=<ipykernel.ipkernel.IPythonKernel object>, stream=<zmq.eventloop.zmqstream.ZMQStream object>, msg={'buffers': [], 'content': {'allow_stdin': True, 'code': 'with noisy_model:\\n trace = pm.sample(10000, start=start, njobs=4)', 'silent': False, 'stop_on_error': True, 'store_history': True, 'user_expressions': {}}, 'header': {'date': datetime.datetime(2017, 5, 26, 9, 29, 41, 16513, tzinfo=datetime.timezone.utc), 'msg_id': '8F9F1275974B458B84088AF3A8BE8825', 'msg_type': 'execute_request', 'session': '4C0B7BC38441495B825BA6C86F0A4D13', 'username': 'username', 'version': '5.0'}, 'metadata': {}, 'msg_id': '8F9F1275974B458B84088AF3A8BE8825', 'msg_type': 'execute_request', 'parent_header': {}})\n 230 self.log.warn(\"Unknown message type: %r\", msg_type)\n 231 else:\n 232 self.log.debug(\"%s: %s\", msg_type, msg)\n 233 self.pre_handler_hook()\n 234 try:\n--> 235 handler(stream, idents, msg)\n handler = <bound method Kernel.execute_request of <ipykernel.ipkernel.IPythonKernel object>>\n stream = <zmq.eventloop.zmqstream.ZMQStream object>\n idents = [b'4C0B7BC38441495B825BA6C86F0A4D13']\n msg = {'buffers': [], 'content': {'allow_stdin': True, 'code': 'with noisy_model:\\n trace = pm.sample(10000, start=start, njobs=4)', 'silent': False, 'stop_on_error': True, 'store_history': True, 'user_expressions': {}}, 'header': {'date': datetime.datetime(2017, 5, 26, 9, 29, 41, 16513, tzinfo=datetime.timezone.utc), 'msg_id': '8F9F1275974B458B84088AF3A8BE8825', 'msg_type': 'execute_request', 'session': '4C0B7BC38441495B825BA6C86F0A4D13', 'username': 'username', 'version': '5.0'}, 'metadata': {}, 'msg_id': '8F9F1275974B458B84088AF3A8BE8825', 'msg_type': 'execute_request', 'parent_header': {}}\n 236 except Exception:\n 237 self.log.error(\"Exception in message handler:\", exc_info=True)\n 238 finally:\n 239 self.post_handler_hook()\n\n...........................................................................\n/Users/fouesneau/anaconda/lib/python3.5/site-packages/ipykernel/kernelbase.py in execute_request(self=<ipykernel.ipkernel.IPythonKernel object>, stream=<zmq.eventloop.zmqstream.ZMQStream object>, ident=[b'4C0B7BC38441495B825BA6C86F0A4D13'], parent={'buffers': [], 'content': {'allow_stdin': True, 'code': 'with noisy_model:\\n trace = pm.sample(10000, start=start, njobs=4)', 'silent': False, 'stop_on_error': True, 'store_history': True, 'user_expressions': {}}, 'header': {'date': datetime.datetime(2017, 5, 26, 9, 29, 41, 16513, tzinfo=datetime.timezone.utc), 'msg_id': '8F9F1275974B458B84088AF3A8BE8825', 'msg_type': 'execute_request', 'session': '4C0B7BC38441495B825BA6C86F0A4D13', 'username': 'username', 'version': '5.0'}, 'metadata': {}, 'msg_id': '8F9F1275974B458B84088AF3A8BE8825', 'msg_type': 'execute_request', 'parent_header': {}})\n 394 if not silent:\n 395 self.execution_count += 1\n 396 self._publish_execute_input(code, parent, self.execution_count)\n 397 \n 398 reply_content = self.do_execute(code, silent, store_history,\n--> 399 user_expressions, allow_stdin)\n user_expressions = {}\n allow_stdin = True\n 400 \n 401 # Flush output before sending the reply.\n 402 sys.stdout.flush()\n 403 sys.stderr.flush()\n\n...........................................................................\n/Users/fouesneau/anaconda/lib/python3.5/site-packages/ipykernel/ipkernel.py in do_execute(self=<ipykernel.ipkernel.IPythonKernel object>, code='with noisy_model:\\n trace = pm.sample(10000, start=start, njobs=4)', silent=False, store_history=True, user_expressions={}, allow_stdin=True)\n 191 \n 192 self._forward_input(allow_stdin)\n 193 \n 194 reply_content = {}\n 195 try:\n--> 196 res = shell.run_cell(code, store_history=store_history, silent=silent)\n res = undefined\n shell.run_cell = <bound method ZMQInteractiveShell.run_cell of <ipykernel.zmqshell.ZMQInteractiveShell object>>\n code = 'with noisy_model:\\n trace = pm.sample(10000, start=start, njobs=4)'\n store_history = True\n silent = False\n 197 finally:\n 198 self._restore_input()\n 199 \n 200 if res.error_before_exec is not None:\n\n...........................................................................\n/Users/fouesneau/anaconda/lib/python3.5/site-packages/ipykernel/zmqshell.py in run_cell(self=<ipykernel.zmqshell.ZMQInteractiveShell object>, *args=('with noisy_model:\\n trace = pm.sample(10000, start=start, njobs=4)',), **kwargs={'silent': False, 'store_history': True})\n 528 )\n 529 self.payload_manager.write_payload(payload)\n 530 \n 531 def run_cell(self, *args, **kwargs):\n 532 self._last_traceback = None\n--> 533 return super(ZMQInteractiveShell, self).run_cell(*args, **kwargs)\n self.run_cell = <bound method ZMQInteractiveShell.run_cell of <ipykernel.zmqshell.ZMQInteractiveShell object>>\n args = ('with noisy_model:\\n trace = pm.sample(10000, start=start, njobs=4)',)\n kwargs = {'silent': False, 'store_history': True}\n 534 \n 535 def _showtraceback(self, etype, evalue, stb):\n 536 # try to preserve ordering of tracebacks and print statements\n 537 sys.stdout.flush()\n\n...........................................................................\n/Users/fouesneau/anaconda/lib/python3.5/site-packages/IPython/core/interactiveshell.py in run_cell(self=<ipykernel.zmqshell.ZMQInteractiveShell object>, raw_cell='with noisy_model:\\n trace = pm.sample(10000, start=start, njobs=4)', store_history=True, silent=False, shell_futures=True)\n 2712 self.displayhook.exec_result = result\n 2713 \n 2714 # Execute the user code\n 2715 interactivity = \"none\" if silent else self.ast_node_interactivity\n 2716 has_raised = self.run_ast_nodes(code_ast.body, cell_name,\n-> 2717 interactivity=interactivity, compiler=compiler, result=result)\n interactivity = 'last_expr'\n compiler = <IPython.core.compilerop.CachingCompiler object>\n 2718 \n 2719 self.last_execution_succeeded = not has_raised\n 2720 \n 2721 # Reset this so later displayed values do not modify the\n\n...........................................................................\n/Users/fouesneau/anaconda/lib/python3.5/site-packages/IPython/core/interactiveshell.py in run_ast_nodes(self=<ipykernel.zmqshell.ZMQInteractiveShell object>, nodelist=[<_ast.With object>], cell_name='<ipython-input-8-4fdb4925d502>', interactivity='none', compiler=<IPython.core.compilerop.CachingCompiler object>, result=<ExecutionResult object at 11e4acf98, execution_..._before_exec=None error_in_exec=None result=None>)\n 2816 \n 2817 try:\n 2818 for i, node in enumerate(to_run_exec):\n 2819 mod = ast.Module([node])\n 2820 code = compiler(mod, cell_name, \"exec\")\n-> 2821 if self.run_code(code, result):\n self.run_code = <bound method InteractiveShell.run_code of <ipykernel.zmqshell.ZMQInteractiveShell object>>\n code = <code object <module> at 0x11844eed0, file \"<ipython-input-8-4fdb4925d502>\", line 1>\n result = <ExecutionResult object at 11e4acf98, execution_..._before_exec=None error_in_exec=None result=None>\n 2822 return True\n 2823 \n 2824 for i, node in enumerate(to_run_interactive):\n 2825 mod = ast.Interactive([node])\n\n...........................................................................\n/Users/fouesneau/anaconda/lib/python3.5/site-packages/IPython/core/interactiveshell.py in run_code(self=<ipykernel.zmqshell.ZMQInteractiveShell object>, code_obj=<code object <module> at 0x11844eed0, file \"<ipython-input-8-4fdb4925d502>\", line 1>, result=<ExecutionResult object at 11e4acf98, execution_..._before_exec=None error_in_exec=None result=None>)\n 2876 outflag = 1 # happens in more places, so it's easier as default\n 2877 try:\n 2878 try:\n 2879 self.hooks.pre_run_code_hook()\n 2880 #rprint('Running code', repr(code_obj)) # dbg\n-> 2881 exec(code_obj, self.user_global_ns, self.user_ns)\n code_obj = <code object <module> at 0x11844eed0, file \"<ipython-input-8-4fdb4925d502>\", line 1>\n self.user_global_ns = {'ALLOW_THREADS': 1, 'Annotation': <class 'matplotlib.text.Annotation'>, 'Arrow': <class 'matplotlib.patches.Arrow'>, 'Artist': <class 'matplotlib.artist.Artist'>, 'AutoLocator': <class 'matplotlib.ticker.AutoLocator'>, 'Axes': <class 'matplotlib.axes._axes.Axes'>, 'BUFSIZE': 8192, 'Button': <class 'matplotlib.widgets.Button'>, 'CLIP': 0, 'Circle': <class 'matplotlib.patches.Circle'>, ...}\n self.user_ns = {'ALLOW_THREADS': 1, 'Annotation': <class 'matplotlib.text.Annotation'>, 'Arrow': <class 'matplotlib.patches.Arrow'>, 'Artist': <class 'matplotlib.artist.Artist'>, 'AutoLocator': <class 'matplotlib.ticker.AutoLocator'>, 'Axes': <class 'matplotlib.axes._axes.Axes'>, 'BUFSIZE': 8192, 'Button': <class 'matplotlib.widgets.Button'>, 'CLIP': 0, 'Circle': <class 'matplotlib.patches.Circle'>, ...}\n 2882 finally:\n 2883 # Reset our crash handler in place\n 2884 sys.excepthook = old_excepthook\n 2885 except SystemExit as e:\n\n...........................................................................\n/Users/fouesneau/Work/bayesian_limits/<ipython-input-8-4fdb4925d502> in <module>()\n 1 with noisy_model:\n----> 2 trace = pm.sample(10000, start=start, njobs=4)\n\n...........................................................................\n/Users/fouesneau/anaconda/lib/python3.5/site-packages/pymc3/sampling.py in sample(draws=10000, step=<pymc3.step_methods.nuts.NUTS object>, init='advi', n_init=200000, start={'Mi': array([ 0.11701483, 0.20511936, 0.15301196, 0...82748974, 0.11094993, 0.17152482, 0.16146663]), 'Mmax': 23.377061076354696, 'slope': -2.35}, trace=None, chain=0, njobs=4, tune=None, progressbar=True, model=<pymc3.model.Model object>, random_seed=-1)\n 170 sample_func = _mp_sample\n 171 sample_args['njobs'] = njobs\n 172 else:\n 173 sample_func = _sample\n 174 \n--> 175 return sample_func(**sample_args)\n sample_func = <function _mp_sample>\n sample_args = {'chain': 0, 'draws': 10000, 'model': <pymc3.model.Model object>, 'njobs': 4, 'progressbar': True, 'random_seed': -1, 'start': {'Mi': array([ 0.11701483, 0.20511936, 0.15301196, 0...82748974, 0.11094993, 0.17152482, 0.16146663]), 'Mmax': 23.377061076354696, 'slope': -2.35}, 'step': <pymc3.step_methods.nuts.NUTS object>, 'trace': None, 'tune': None}\n 176 \n 177 \n 178 def _sample(draws, step=None, start=None, trace=None, chain=0, tune=None,\n 179 progressbar=True, model=None, random_seed=-1):\n\n...........................................................................\n/Users/fouesneau/anaconda/lib/python3.5/site-packages/pymc3/sampling.py in _mp_sample(**kwargs={'draws': 10000, 'model': <pymc3.model.Model object>, 'step': <pymc3.step_methods.nuts.NUTS object>, 'trace': None, 'tune': None})\n 319 pbars = [kwargs.pop('progressbar')] + [False] * (njobs - 1)\n 320 traces = Parallel(n_jobs=njobs)(delayed(_sample)(chain=chains[i],\n 321 progressbar=pbars[i],\n 322 random_seed=rseed[i],\n 323 start=start_vals[i],\n--> 324 **kwargs) for i in range(njobs))\n kwargs = {'draws': 10000, 'model': <pymc3.model.Model object>, 'step': <pymc3.step_methods.nuts.NUTS object>, 'trace': None, 'tune': None}\n njobs = 4\n 325 return merge_traces(traces)\n 326 \n 327 \n 328 def stop_tuning(step):\n\n...........................................................................\n/Users/fouesneau/anaconda/lib/python3.5/site-packages/joblib/parallel.py in __call__(self=Parallel(n_jobs=4), iterable=<generator object _mp_sample.<locals>.<genexpr>>)\n 784 if pre_dispatch == \"all\" or n_jobs == 1:\n 785 # The iterable was consumed all at once by the above for loop.\n 786 # No need to wait for async callbacks to trigger to\n 787 # consumption.\n 788 self._iterating = False\n--> 789 self.retrieve()\n self.retrieve = <bound method Parallel.retrieve of Parallel(n_jobs=4)>\n 790 # Make sure that we get a last message telling us we are done\n 791 elapsed_time = time.time() - self._start_time\n 792 self._print('Done %3i out of %3i | elapsed: %s finished',\n 793 (len(self._output), len(self._output),\n\n---------------------------------------------------------------------------\nSub-process traceback:\n---------------------------------------------------------------------------\nValueError Fri May 26 11:30:02 2017\nPID: 54136 Python 3.5.2: /Users/fouesneau/anaconda/bin/python\n...........................................................................\n/Users/fouesneau/anaconda/lib/python3.5/site-packages/joblib/parallel.py in __call__(self=<joblib.parallel.BatchedCalls object>)\n 126 def __init__(self, iterator_slice):\n 127 self.items = list(iterator_slice)\n 128 self._size = len(self.items)\n 129 \n 130 def __call__(self):\n--> 131 return [func(*args, **kwargs) for func, args, kwargs in self.items]\n self.items = [(<function _sample>, (), {'chain': 0, 'draws': 10000, 'model': <pymc3.model.Model object>, 'progressbar': True, 'random_seed': 1671993037, 'start': {'Mi': array([ 0.11701483, 0.20511936, 0.15301196, 0...82748974, 0.11094993, 0.17152482, 0.16146663]), 'Mmax': 23.377061076354696, 'Mmax_interval_': array(-1.1102230246251565e-16), 'slope': -2.35, 'slope_interval_': array(0.0)}, 'step': <pymc3.step_methods.nuts.NUTS object>, 'trace': None, 'tune': None})]\n 132 \n 133 def __len__(self):\n 134 return self._size\n 135 \n\n...........................................................................\n/Users/fouesneau/anaconda/lib/python3.5/site-packages/joblib/parallel.py in <listcomp>(.0=<list_iterator object>)\n 126 def __init__(self, iterator_slice):\n 127 self.items = list(iterator_slice)\n 128 self._size = len(self.items)\n 129 \n 130 def __call__(self):\n--> 131 return [func(*args, **kwargs) for func, args, kwargs in self.items]\n func = <function _sample>\n args = ()\n kwargs = {'chain': 0, 'draws': 10000, 'model': <pymc3.model.Model object>, 'progressbar': True, 'random_seed': 1671993037, 'start': {'Mi': array([ 0.11701483, 0.20511936, 0.15301196, 0...82748974, 0.11094993, 0.17152482, 0.16146663]), 'Mmax': 23.377061076354696, 'Mmax_interval_': array(-1.1102230246251565e-16), 'slope': -2.35, 'slope_interval_': array(0.0)}, 'step': <pymc3.step_methods.nuts.NUTS object>, 'trace': None, 'tune': None}\n 132 \n 133 def __len__(self):\n 134 return self._size\n 135 \n\n...........................................................................\n/Users/fouesneau/anaconda/lib/python3.5/site-packages/pymc3/sampling.py in _sample(draws=10000, step=<pymc3.step_methods.nuts.NUTS object>, start={'Mi': array([ 0.11701483, 0.20511936, 0.15301196, 0...82748974, 0.11094993, 0.17152482, 0.16146663]), 'Mmax': 23.377061076354696, 'Mmax_interval_': array(-1.1102230246251565e-16), 'slope': -2.35, 'slope_interval_': array(0.0)}, trace=None, chain=0, tune=None, progressbar=True, model=<pymc3.model.Model object>, random_seed=1671993037)\n 180 sampling = _iter_sample(draws, step, start, trace, chain,\n 181 tune, model, random_seed)\n 182 if progressbar:\n 183 sampling = tqdm(sampling, total=draws)\n 184 try:\n--> 185 for strace in sampling:\n strace = undefined\n sampling = 0%| | 0/10000 [00:00<?, ?it/s]\n 186 pass\n 187 except KeyboardInterrupt:\n 188 strace.close()\n 189 return MultiTrace([strace])\n\n...........................................................................\n/Users/fouesneau/anaconda/lib/python3.5/site-packages/tqdm/_tqdm.py in __iter__(self= 0%| | 0/10000 [00:00<?, ?it/s])\n 828 except AttributeError:\n 829 raise TqdmDeprecationWarning(\"\"\"\\\n 830 Please use `tqdm_gui(...)` instead of `tqdm(..., gui=True)`\n 831 \"\"\", fp_write=getattr(self.fp, 'write', sys.stderr.write))\n 832 \n--> 833 for obj in iterable:\n obj = undefined\n iterable = <generator object _iter_sample>\n 834 yield obj\n 835 # Update and print the progressbar.\n 836 # Note: does not call self.update(1) for speed optimisation.\n 837 n += 1\n\n...........................................................................\n/Users/fouesneau/anaconda/lib/python3.5/site-packages/pymc3/sampling.py in _iter_sample(draws=10000, step=<pymc3.step_methods.nuts.NUTS object>, start={'Mi': array([ 0.11701483, 0.20511936, 0.15301196, 0...82748974, 0.11094993, 0.17152482, 0.16146663]), 'Mmax': 23.377061076354696, 'Mmax_interval_': array(-1.1102230246251565e-16), 'slope': -2.35, 'slope_interval_': array(0.0)}, trace=None, chain=0, tune=None, model=<pymc3.model.Model object>, random_seed=1671993037)\n 262 \n 263 strace.setup(draws, chain)\n 264 for i in range(draws):\n 265 if i == tune:\n 266 step = stop_tuning(step)\n--> 267 point = step.step(point)\n point = {'Mi': array([ 0.11701483, 0.20511936, 0.15301196, 0...82748974, 0.11094993, 0.17152482, 0.16146663]), 'Mmax_interval_': array(-1.1102230246251565e-16), 'slope_interval_': array(0.0)}\n step.step = <bound method ArrayStepShared.step of <pymc3.step_methods.nuts.NUTS object>>\n 268 strace.record(point)\n 269 yield strace\n 270 else:\n 271 strace.close()\n\n...........................................................................\n/Users/fouesneau/anaconda/lib/python3.5/site-packages/pymc3/step_methods/arraystep.py in step(self=<pymc3.step_methods.nuts.NUTS object>, point={'Mi': array([ 0.11701483, 0.20511936, 0.15301196, 0...82748974, 0.11094993, 0.17152482, 0.16146663]), 'Mmax_interval_': array(-1.1102230246251565e-16), 'slope_interval_': array(0.0)})\n 137 for var, share in self.shared.items():\n 138 share.container.storage[0] = point[var]\n 139 \n 140 bij = DictToArrayBijection(self.ordering, point)\n 141 \n--> 142 apoint = self.astep(bij.map(point))\n apoint = undefined\n self.astep = <bound method NUTS.astep of <pymc3.step_methods.nuts.NUTS object>>\n bij.map = <bound method DictToArrayBijection.map of <pymc3.blocking.DictToArrayBijection object>>\n point = {'Mi': array([ 0.11701483, 0.20511936, 0.15301196, 0...82748974, 0.11094993, 0.17152482, 0.16146663]), 'Mmax_interval_': array(-1.1102230246251565e-16), 'slope_interval_': array(0.0)}\n 143 return bij.rmap(apoint)\n 144 \n 145 \n 146 def metrop_select(mr, q, q0):\n\n...........................................................................\n/Users/fouesneau/anaconda/lib/python3.5/site-packages/pymc3/blocking.py in map(self=<pymc3.blocking.DictToArrayBijection object>, dpt={'Mi': array([ 0.11701483, 0.20511936, 0.15301196, 0...82748974, 0.11094993, 0.17152482, 0.16146663]), 'Mmax_interval_': array(-1.1102230246251565e-16), 'slope_interval_': array(0.0)})\n 55 ----------\n 56 dpt : dict\n 57 \"\"\"\n 58 apt = np.empty(self.ordering.dimensions, dtype=self.array_dtype)\n 59 for var, slc, _, _ in self.ordering.vmap:\n---> 60 apt[slc] = dpt[var].ravel()\n apt = array([ 0., 0., 0.])\n slc = slice(0, 1, None)\n dpt = {'Mi': array([ 0.11701483, 0.20511936, 0.15301196, 0...82748974, 0.11094993, 0.17152482, 0.16146663]), 'Mmax_interval_': array(-1.1102230246251565e-16), 'slope_interval_': array(0.0)}\n var.ravel = undefined\n 61 return apt\n 62 \n 63 def rmap(self, apt):\n 64 \"\"\"\n\nValueError: could not broadcast input array from shape (1000) into shape (1)\n___________________________________________________________________________"
]
}
],
"source": [
"with noisy_model:\n",
" trace = pm.sample(10000, start=start, njobs=4)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python [default]",
"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.5.2"
},
"latex_envs": {
"LaTeX_envs_menu_present": true,
"bibliofile": "biblio.bib",
"cite_by": "apalike",
"current_citInitial": 1,
"eqLabelWithNumbers": true,
"eqNumInitial": 1,
"labels_anchors": false,
"latex_user_defs": false,
"report_style_numbering": false,
"user_envs_cfg": false
},
"toc": {
"colors": {
"hover_highlight": "#DAA520",
"running_highlight": "#FF0000",
"selected_highlight": "#FFD700"
},
"moveMenuLeft": true,
"nav_menu": {
"height": "84px",
"width": "252px"
},
"navigate_menu": true,
"number_sections": true,
"sideBar": true,
"threshold": 4,
"toc_cell": false,
"toc_section_display": "block",
"toc_window_display": false
}
},
"nbformat": 4,
"nbformat_minor": 2
}
@AustinRochford
Copy link

I just got a chance to look at your notebook and have not been able to figure out the problem yet. I will keep thinking about it.

@mfouesneau
Copy link
Author

Do I use properly the model definition? I don't know if it is necessray, but I cannot check that the sampling of the Power law works.

@bdyetton
Copy link

did you ever get this to work?
Id love to use a power law dist.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment