Skip to content

Instantly share code, notes, and snippets.

@aflaxman
Created July 25, 2014 18:53
Show Gist options
  • Save aflaxman/ea054090465548c7cab5 to your computer and use it in GitHub Desktop.
Save aflaxman/ea054090465548c7cab5 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"metadata": {
"name": "",
"signature": "sha256:311a3882502a52297a22d5f89c4b1e219ea598960e1eaa78896e65a42dcbef09"
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "code",
"collapsed": false,
"input": [
"!date"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Fri Jul 25 11:53:02 PDT 2014\r\n"
]
}
],
"prompt_number": 7
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import numpy as np\n",
"import pymc\n"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 8
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"N = 2\n",
"T = 10\n",
"tau = 1\n"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 9
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"def NAFCgenerator():\n",
"\n",
" D = np.empty(T, dtype=object)\n",
" theta = np.empty([N,T], dtype=object)\n",
" x = np.empty([N,T], dtype=object)\n",
"\n",
" # true location of signal\n",
" for t in range(T):\n",
" D[t] = pymc.DiscreteUniform('D_%i' % t, lower=0, upper=N-1)\n",
"\n",
" for t in range(T):\n",
" for n in range(N):\n",
" @pymc.deterministic(plot=False)\n",
" def temp_theta(dt=D[t], n=n):\n",
" return dt==n\n",
" theta[n,t] = temp_theta\n",
"\n",
" x[n,t] = pymc.Normal('x_%i,%i' % (n,t),\n",
" mu=theta[n,t], tau=tau)\n",
"\n",
" return locals()\n",
"\n",
"m = pymc.MCMC(NAFCgenerator())"
],
"language": "python",
"metadata": {},
"outputs": [
{
"ename": "ValueError",
"evalue": "A tallyable PyMC object called temp_theta already exists. This will cause problems for some database backends.",
"output_type": "pyerr",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[1;31mValueError\u001b[0m Traceback (most recent call last)",
"\u001b[1;32m<ipython-input-10-3e20a2b24497>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m()\u001b[0m\n\u001b[0;32m 21\u001b[0m \u001b[1;32mreturn\u001b[0m \u001b[0mlocals\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 22\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 23\u001b[1;33m \u001b[0mm\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mpymc\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mMCMC\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mNAFCgenerator\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[1;32m/homes/abie/anaconda/lib/python2.7/site-packages/pymc/MCMC.pyc\u001b[0m in \u001b[0;36m__init__\u001b[1;34m(self, input, db, name, calc_deviance, **kwds)\u001b[0m\n\u001b[0;32m 79\u001b[0m \u001b[0mname\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 80\u001b[0m \u001b[0mcalc_deviance\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mcalc_deviance\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 81\u001b[1;33m **kwds)\n\u001b[0m\u001b[0;32m 82\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 83\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_sm_assigned\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mFalse\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m/homes/abie/anaconda/lib/python2.7/site-packages/pymc/Model.pyc\u001b[0m in \u001b[0;36m__init__\u001b[1;34m(self, input, db, name, reinit_model, calc_deviance, verbose, **kwds)\u001b[0m\n\u001b[0;32m 203\u001b[0m \u001b[1;31m# Specify database backend and save its keywords\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 204\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_db_args\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mkwds\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 205\u001b[1;33m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_assign_database_backend\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mdb\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 206\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 207\u001b[0m \u001b[1;31m# Flag for model state\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m/homes/abie/anaconda/lib/python2.7/site-packages/pymc/Model.pyc\u001b[0m in \u001b[0;36m_assign_database_backend\u001b[1;34m(self, db)\u001b[0m\n\u001b[0;32m 558\u001b[0m \u001b[0mobject\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mtrace\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mno_trace\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mTrace\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mobject\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m__name__\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 559\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 560\u001b[1;33m \u001b[0mcheck_valid_object_name\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_variables_to_tally\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 561\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 562\u001b[0m \u001b[1;31m# If not already done, load the trace backend from the database\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;32m/homes/abie/anaconda/lib/python2.7/site-packages/pymc/Model.pyc\u001b[0m in \u001b[0;36mcheck_valid_object_name\u001b[1;34m(sequence)\u001b[0m\n\u001b[0;32m 854\u001b[0m raise ValueError(\n\u001b[0;32m 855\u001b[0m \u001b[1;34m'A tallyable PyMC object called %s already exists. This will cause problems for some database backends.'\u001b[0m \u001b[1;33m%\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 856\u001b[1;33m o.__name__)\n\u001b[0m\u001b[0;32m 857\u001b[0m \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 858\u001b[0m \u001b[0mnames\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mo\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m__name__\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
"\u001b[1;31mValueError\u001b[0m: A tallyable PyMC object called temp_theta already exists. This will cause problems for some database backends."
]
}
],
"prompt_number": 10
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This error is because the decorator syntax for creating deterministic nodes defaults to taking the node name from the function being decorated. The solution is simple, specify the node name as a parameter for the decorator:"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"def NAFCgenerator():\n",
"\n",
" D = np.empty(T, dtype=object)\n",
" theta = np.empty([N,T], dtype=object)\n",
" x = np.empty([N,T], dtype=object)\n",
"\n",
" # true location of signal\n",
" for t in range(T):\n",
" D[t] = pymc.DiscreteUniform('D_%i' % t, lower=0, upper=N-1)\n",
"\n",
" for t in range(T):\n",
" for n in range(N):\n",
" @pymc.deterministic(name='temp_theta_%d_%d'%(t,n), plot=False)\n",
" def temp_theta(dt=D[t], n=n):\n",
" return dt==n\n",
" theta[n,t] = temp_theta\n",
"\n",
" x[n,t] = pymc.Normal('x_%i,%i' % (n,t),\n",
" mu=theta[n,t], tau=tau)\n",
"\n",
" return locals()\n",
"\n",
"m = pymc.MCMC(NAFCgenerator())"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 11
},
{
"cell_type": "code",
"collapsed": false,
"input": [],
"language": "python",
"metadata": {},
"outputs": []
}
],
"metadata": {}
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment