python - How do I fix the 'TypeError: hasattr(): attribute name must be string' error? -


i have following code:

import pymc pm matplotlib import pyplot plt pymc.matplot import plot mcplot import numpy np matplotlib import rc  res = [18.752, 12.450, 11.832]  v = pm.uniform('v', 0, 20)  errors = pm.uniform('errors', 0, 100, size = 3)  taus = 1/(errors ** 2)  mydist = pm.normal('mydist', mu = v, tau = taus, value = res, observed = true)  model=pm.model([mydist, errors, taus, v, res]) mcmc=pm.mcmc(model) # line 19 typeerror originates mcmc.sample(20000,10000)  mcplot(mcmc.trace('mydist')) 

for reason doesn't work, 'typeerror: hasattr(): attribute name must string' error, following trace:

 traceback (most recent call last):    file "<ipython-input-49-759ebaf4321c>", line 1, in <module> runfile('c:/users/paul/.spyder2-py3/temp.py', wdir='c:/users/paul/.spyder2-py3')    file "c:\users\paul\miniconda3\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 685, in runfile execfile(filename, namespace)    file "c:\users\paul\miniconda3\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 85, in execfile exec(compile(open(filename, 'rb').read(), filename, 'exec'), namespace)    file "c:/users/paul/.spyder2-py3/temp.py", line 19, in <module> mcmc=pm.mcmc(model)    file "c:\users\paul\miniconda3\lib\site-packages\pymc\mcmc.py", line 82, in __init__ **kwds)    file "c:\users\paul\miniconda3\lib\site-packages\pymc\model.py", line 197, in __init__ model.__init__(self, input, name, verbose)    file "c:\users\paul\miniconda3\lib\site-packages\pymc\model.py", line 99, in __init__ objectcontainer.__init__(self, input)    file "c:\users\paul\miniconda3\lib\site-packages\pymc\container.py", line 606, in __init__ conservative_update(self, input_to_file)    file "c:\users\paul\miniconda3\lib\site-packages\pymc\container.py", line 549, in conservative_update if not hasattr(obj, k):  typeerror: hasattr(): attribute name must string 

how make work , output "mydist"?

edit: posted wrong trace @ first accident.

edit2: must because res doesn't have name, because it's array, don't know how assign name it, it'll make work.

i must admit i'm not familiar pymc, changing following @ least made application run:

mydist = pm.normal('mydist', mu = v, tau = taus, value = res, observed = false)  mcmc=pm.mcmc([mydist, errors, taus, v, res]) 

this seems because wrapping in model extension of objectcontainer, since passed list, mcmc file_items in container.py tried assign index 4 in list using replace, since model objectcontainer assigned key 4 in it's __dict__ causing weird typeerror got. removing wrapping model caused mcmc correctly use listcontainer instead.

now, there's bug in model.py on line 543 observable stochastics aren't stored in database - expression for object in self.stochastics | self.deterministics: suspect should include self.observable_stochastics - needed change observable false or last line throw keyerror.

i'm not familiar enough pymc determine if it's or bug or desired behaviour leave submit issue it.


Comments