Gary, Thanks for the response. I have applied Doug's patch 'patch2' attached to the bug #10022 report at https://gna.org/bugs/?10022. This simple patch solves the issue by catching the problematic situations and just ignoring them. The solution is similar to your last example.
Regards, Edward On 9/18/07, Gary Thompson <[EMAIL PROTECTED]> wrote: > [EMAIL PROTECTED] wrote: > > Hi, > > > > I've reviewed the patch attached to bug #10022 > > (https://gna.org/bugs/?10022), and have found an issue. The problem > > is with the use of two dictionaries for the previous and current run. > > The issue is that order in a dictionary is not guaranteed, and hence > > the comparison may not work. > > Hi I have two thoughts here ( I haven't seen thr patches so I can't be > certain that I am on ther > > 1. if you compare two dictionaries with the same contents though the > absolute order of the contents are not guarunteed within the same python > interpreter they will have the same order and the dictionaries can be > compared e.g. > > test = {'1':1,'2':2,'3':3} > test2={'1':1,'2':2,'3':3} > test==test2 > True > test3={'1':1,'2':2,'3':4} > test3==test2 > test4={'1':1,'2':2,'4':3} > test2==test4 > False > > whats more the way python is structured they would have forbidden > dictionary comparisons if they weren't possible > > if you need to extract all they keys and compare the contents in order > then the thing to do is call keys on the two dictionaries and put the > results in a set and then lookup by the keys from the set while properly > guarding for missing keys > > > reading more on this the dictionaries you are looking at seem to be > keyed by residue (or is it an arbitary something else i.e. just and > index in which case ed comment is fair) > > for i in xrange(len(self.relax.data.res['previous'])): > if hasattr(self.relax.data.res['previous'][i], 'model'): > and > > for i in xrange(len(self.relax.data.res[run])): > if hasattr(self.relax.data.res[run][i], 'model'): > > > which you are looking up by an xrange call so the order of i by which > you are comparing seems to be well defined... > > > now from the look of the problem: > > residue 1: prev=None curr=m2 > residue 2: prev=None curr=m2 > residue 3: prev=None curr=m2 > residue 6: prev=m2 curr=m4 > residue 7: prev=m2 curr=m1 > residue 9: prev=m4 curr=m2 > residue 11: prev=None curr=m2 > residue 12: prev=m2 curr=m3 > residue 13: prev=m2 curr=m3 > residue 15: prev=m2 curr=m1 > residue 16: prev=m3 curr=m2 > residue 17: prev=m3 curr=m1 > residue 18: prev=None curr=m3 > > surely we need to do the following to compare results excluding those which > have none from the previous round > > lookup_keys = [] > prev_models = '' > for i in xrange(len(self.relax.data.res['previous'])): > if hasattr(self.relax.data.res['previous'][i], 'model'): > if not self.relax.data.res['previous'][i].model == None: > prev_models = prev_models + > self.relax.data.res['previous'][i].model > lookup_keys.append(i) > > # Create a string representation of the model-free models of the > current run. > curr_models = '' > for i in lookup_keys: > if hasattr(self.relax.data.res[run][i], 'model'): > if not self.relax.data.res[run][i].model == None: > curr_models = curr_models + > self.relax.data.res[run][i].model > > # The test. > if prev_models == curr_models: > > > > now I maybe missing a trick here because I came late to the party but > If not I hope it helps > > > regards > gary > > Maybe a simple test such as "if > > self.relax.data.res[run][i].model == None" or its negative after > > testing for the presence of the 'model' attribute, and removal of the > > dictionary would remove the problem. Significant simplifications to > > the code after the comment "# The test." could also be made. > > > > As for the code in the section "NOTE: the following code has not been > > extenstively tested", this does not directly address the bug itself > > and it will have problems with the dictionary ordering. I would > > prefer that this section not be present in the patch. If someone does > > have different residues in two different iterations of > > full_analysis.py then this error is much more severe and belongs > > elsewhere other than in the convergence tests. > > > > Cheers, > > > > Edward > > > > > > > > > > > > > > > -- > ------------------------------------------------------------------- > Dr Gary Thompson > Astbury Centre for Structural Molecular Biology, > University of Leeds, Astbury Building, > Leeds, LS2 9JT, West-Yorkshire, UK Tel. +44-113-3433024 > email: [EMAIL PROTECTED] Fax +44-113-2331407 > ------------------------------------------------------------------- > > > > _______________________________________________ > relax (http://nmr-relax.com) > > This is the relax-users mailing list > [email protected] > > To unsubscribe from this list, get a password > reminder, or change your subscription options, > visit the list information page at > https://mail.gna.org/listinfo/relax-users > _______________________________________________ relax (http://nmr-relax.com) This is the relax-users mailing list [email protected] To unsubscribe from this list, get a password reminder, or change your subscription options, visit the list information page at https://mail.gna.org/listinfo/relax-users

