instantiate new objects

Discussion in 'Python' started by Felix Steffenhagen, Mar 10, 2005.

  1. 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.de/~steffenh/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
     
    Felix Steffenhagen, Mar 10, 2005
    #1
    1. Advertising

  2. 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
     
    Michael Spencer, Mar 10, 2005
    #2
    1. Advertising

  3. 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
    >
    >
     
    Felix Steffenhagen, Mar 10, 2005
    #3
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Daniel Walzenbach

    Instantiate objects

    Daniel Walzenbach, Jul 16, 2005, in forum: ASP .Net
    Replies:
    6
    Views:
    432
    Chris Kennedy
    Jul 17, 2005
  2. Jacques-Henri
    Replies:
    1
    Views:
    341
    Michael Borgwardt
    Apr 16, 2004
  3. eomer
    Replies:
    9
    Views:
    1,091
    eomer
    Dec 5, 2005
  4. Glenn Serpas
    Replies:
    5
    Views:
    425
    Glenn Serpas
    Aug 9, 2004
  5. Donald Westfield

    Instantiate all objects in a module?

    Donald Westfield, Aug 16, 2006, in forum: Python
    Replies:
    1
    Views:
    331
    John Machin
    Aug 16, 2006
Loading...

Share This Page