By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
439,941 Members | 1,753 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 439,941 IT Pros & Developers. It's quick & easy.

instantiate new objects

P: n/a
Hello @ all,

i'm a newbie in python and have written a module for computations in a
bayesian network.

The module can be found at:
http://www.informatik.uni-freiburg.d...ffenh/bayes.py

In this module i define four classes.
- cdp (conditional probability [distribution]) consisting of cdp_entry
objects
- graph ( a graph class )
- bayesNet ( the bayesian network, a subclass of graph )
My problem is the following:
I have a global method test() in the module, where i want to test my
implementation of the em-learning algorithm, for learning parameters in
a bayesian network.
When I import this module in the python environment and then run the
test method, everything seems to be ok, and the calculations that are
hardcoded in this method seems to be correct.
In the test method i instantiate a bayesNet object for the further
calculations.
The results that are computed and printed are probability distributions
in the bayesian network, but this is not important for the problem.
The problem comes when i want to run the test method again for a second
time. What happens is that the "same" expressions/computations listed
in the test method leads to another results, even if the commands are
the same.
I can only imagine that this comes out of some objects that are not
destroyed and influence the new bayesNet object that is created there.

If there is a problem with the instantiations, it is in the test method
which is at the end of the file bayes.py (see above)
Does someone see the problem there???

If you need some more information about what happens in the module
please write me a mail, but i hope the comments are enough to understand
the problem.

If you think this is too much off-topic we can discuss the problem out
of the newsgroup.

thanks in advance,
Felix Steffenhagen
Jul 18 '05 #1
Share this Question
Share on Google+
2 Replies


P: n/a
Felix Steffenhagen wrote:
[snip]
In: http://www.informatik.uni-freiburg.d...ffenh/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
Jul 18 '05 #2

P: n/a
The default mutual parameters in the method bayes.generate_cpd(...)
was the problem, thanks alot for the hint and for this code snippet
to find such problems :-).

Greetings,
Felix

Michael Spencer wrote:
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?
.
.
.
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

Jul 18 '05 #3

This discussion thread is closed

Replies have been disabled for this discussion.