/[ascend]/trunk/pygtk/diagnose.py
ViewVC logotype

Diff of /trunk/pygtk/diagnose.py

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 286 by johnpye, Thu Feb 9 07:36:39 2006 UTC revision 287 by johnpye, Thu Feb 9 23:56:11 2006 UTC
# Line 9  import re Line 9  import re
9  ZOOM_RE = re.compile(r"([0-9]+)\s*%?")  ZOOM_RE = re.compile(r"([0-9]+)\s*%?")
10  MAX_ZOOM_SIZE = 2000  MAX_ZOOM_SIZE = 2000
11  MAX_ZOOM_RATIO = 16  MAX_ZOOM_RATIO = 16
12    AT_BOUND_TOL = 0.0001;
13    
14  class DiagnoseWindow:  class DiagnoseWindow:
15      def __init__(self,GLADE_FILE,browser,block=0):      def __init__(self,GLADE_FILE,browser,block=0):
# Line 102  class DiagnoseWindow: Line 103  class DiagnoseWindow:
103              pos = rowstride*r + 3*c              pos = rowstride*r + 3*c
104              dot = blackdot;              dot = blackdot;
105              var = self.im.getVariable(i.col);              var = self.im.getVariable(i.col);
106              rat = var.getValue() / var.getNominal()              if abs( (var.getValue()-var.getUpperBound())/ var.getNominal() )  < AT_BOUND_TOL:
107              if rat!=0:                  dot = reddot
108                  try:              elif abs( var.getValue() - var.getLowerBound() ) / var.getNominal() < AT_BOUND_TOL:
109                      val = abs(rat)                  dot = reddot
110                      if abs(rat) > 1000:              else:
111                          dot = hotpinkdot                  rat = var.getValue() / var.getNominal()
112                      elif abs(rat) > 10:                  if rat!=0:
113                          dot = orangedot                      try:
114                      elif abs(rat) < 0.001:                          val = abs(rat)
115                          dot = brightbluedot                          if abs(rat) > 1000:
116                      elif abs(rat) < 10 and abs(rat) > 0.1:                              dot = hotpinkdot
117                          dot = greendot                          elif abs(rat) > 10:
118                      elif abs(rat) > 0.001 and abs(rat) < 0.1:                              dot = orangedot
119                          dot = bluegreendot                          elif abs(rat) < 0.001:
120                      else:                              dot = brightbluedot
121                          dot = blackdot                          elif abs(rat) < 10 and abs(rat) > 0.1:
122                  except ValueError, e:                              dot = greendot
123                      pass                          elif abs(rat) > 0.001 and abs(rat) < 0.1:
124                                dot = bluegreendot
125                            else:
126                                dot = blackdot
127                        except ValueError, e:
128                            pass
129              #print "DOT: ",dot              #print "DOT: ",dot
130              b[pos], b[pos+1], b[pos+2] = dot              b[pos], b[pos+1], b[pos+2] = dot
131    
# Line 177  class DiagnoseWindow: Line 183  class DiagnoseWindow:
183      def fill_var_names(self):      def fill_var_names(self):
184          names = [str(i) for i in self.im.getBlockVars(self.block)]          names = [str(i) for i in self.im.getBlockVars(self.block)]
185          if self.varcollapsed.get_active():          if self.varcollapsed.get_active():
186              res = collapse(names)              res = reduce(names)
187              rows = []              rows = []
188              for k in res:              for k in res:
189                  if k=="":                  if k=="":
# Line 193  class DiagnoseWindow: Line 199  class DiagnoseWindow:
199      def fill_rel_names(self):      def fill_rel_names(self):
200          names = [str(i) for i in self.im.getBlockRels(self.block)]          names = [str(i) for i in self.im.getBlockRels(self.block)]
201          if self.relcollapsed.get_active():          if self.relcollapsed.get_active():
202              text = "\n".join(collapse(names))              res = reduce(names)
203                rows = []
204                for k in res:
205                    if k=="":
206                        for r in res[k]:
207                            rows.append(r)
208                    else:
209                        rows.append( '%s:\n\t%s' % (k, "\n\t".join(res[k])) )
210                text = "\n".join(rows)
211          else:          else:
212              text = "\n".join(names)              text = "\n".join(names)
213          self.relbuf.set_text(text)          self.relbuf.set_text(text)
# Line 279  def fold(data): Line 293  def fold(data):
293      '[1,4-6,10,15-18,22,25-28]'      '[1,4-6,10,15-18,22,25-28]'
294      """      """
295      folded = []      folded = []
296      for k, g in groupby(enumerate(data), lambda (i,x):i-x):      for k, g in groupby(enumerate(sorted(data)), lambda (i,x):i-x):
297          seq = map(itemgetter(1), g)          seq = map(itemgetter(1), g)
298          if len(seq) > 1:          if len(seq) > 1:
299              x = '%s-%s' % (seq[0], seq[-1])              x = '%s-%s' % (seq[0], seq[-1])
# Line 288  def fold(data): Line 302  def fold(data):
302          folded.append(x)          folded.append(x)
303      return folded and '[%s]' % ','.join(folded) or ''      return folded and '[%s]' % ','.join(folded) or ''
304    
305  def collapse(names):  def reduce(names):
306      """reduce a list of items into something more readable:      """reduce a list of items nto something more readable:
307      >>> data = 'C.x C.p C.T C.delta[1] C.delta[2] C.delta[3] C.sat.x C.sat.p C.h C.delta[5]'.split()      >>> data = 'C.x C.p C.T C.delta[1] C.delta[2] C.delta[3] C.sat.x C.sat.p C.h C.delta[5]'.split()
308      >>> res = reduce(data)      >>> res = reduce(data)
309      >>> for k in sorted(res):      >>> for k in sorted(res):
# Line 297  def collapse(names): Line 311  def collapse(names):
311      C: T, delta[1-3,5], h, p, x      C: T, delta[1-3,5], h, p, x
312      C.sat: p, x      C.sat: p, x
313      """      """
314      data = sorted([n.split('.') for n in names], key=len)      data = sorted([n.split('.') for n in sorted(names)], key=len)
315      res = {}      res = {}
316      for k, g in groupby(data, lambda x: len(x)):      for k, g in groupby(data, lambda x: len(x)):
317          item = g.next()          if k == 1:
318          assert len(item) == k              indexed = {}
319          key = '.'.join(item[:-1]) or ''              seq = set(get(indexed, item) for item in g)
320          indexed = {}              res['[global]'] = [ i+fold(indexed.get(i, [])) for i in sorted(seq) ]
321          seq = set([get(indexed, item)])          else:
322          for item in g:              for key, g1 in groupby(g, lambda x: '.'.join(x[:-1])):
323              seq.add(get(indexed, item))                  indexed = {}
324          res[key] = [i+fold(indexed.get(i, [])) for i in sorted(seq)]                  seq = set(get(indexed, item) for item in g1)
325                    res[key] = [ i+fold(indexed.get(i, [])) for i in sorted(seq) ]
326      return res      return res
327    
328  def get(indexed, item):  def get(indexed, item):

Legend:
Removed from v.286  
changed lines
  Added in v.287

john.pye@anu.edu.au
ViewVC Help
Powered by ViewVC 1.1.22