instantiate new objects

Michael Spencer mahs at telcopartners.com
Thu Mar 10 17:11:40 EST 2005


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





More information about the Python-list mailing list