Felix Steffenhagen wrote:
[snip]
> In:

http://www.informatik.uni-freiburg.de/~steffenh/bayes.py

> [bayes.test gives different results each time it is called]

Without looking in the slightest at what you are implementing or how, this implies that state is maintained between calls to test

The question is where/how is the state maintained?

1) global module variables? - you don't have any
2) attributes of global objects?

I used:
>>> def attrs(obj):
... return dict((name,getattr(obj,name)) for name in dir(obj) if not callable(getattr(obj, name)) and name not in ("__doc__","__module__"))


to verify that the classes are not gaining (non-callable) attributes

3) as mutable default parameters?

See:
line 135:       def __init__(self,V,E,p=[]):
line 150:       def generate_cpd(self,node, rest, values={}):
line 360:       def computeJPD(self, rest, values={}):

I guess one (or more) of these is the culprit

Before running:

 Python 2.4 (#60, Nov 30 2004, 11:49:19) [MSC v.1310 32 bit (Intel)] on win32
 Type "help", "copyright", "credits" or "license" for more information.
 >>> bayesNet.generate_cpd.func_defaults
 ({},)
 >>> bayesNet.__init__.func_defaults
 ([],)
 >>> bayesNet.computeJPD.func_defaults
 ({},)
 >>> test()
 V = {'a': [0, 1], 'b': [0, 1]}
 [snip results]

After test:

 >>> bayesNet.generate_cpd.func_defaults
 ({'a': 1, 'b': 1},)
 >>> bayesNet.__init__.func_defaults
 ([],)
 >>> bayesNet.computeJPD.func_defaults
 ({'a': 1, 'b': 1},)
 >>>

HTH

Michael


-- http://mail.python.org/mailman/listinfo/python-list

Reply via email to