More enhancements for documenting functions:
[scons.git] / bin / memoicmp.py
1 #!/usr/bin/env python
2 #
3 # A script to compare the --debug=memoizer output found int
4 # two different files.
5
6 import sys,string
7
8 def memoize_output(fname):
9         mout = {}
10         lines=filter(lambda words:
11                      len(words) == 5 and
12                      words[1] == 'hits' and words[3] == 'misses',
13                      map(string.split, open(fname,'r').readlines()))
14         for line in lines:
15                 mout[line[-1]] = ( int(line[0]), int(line[2]) )
16         return mout
17
18         
19 def memoize_cmp(filea, fileb):
20         ma = memoize_output(filea)
21         mb = memoize_output(fileb)
22
23         print 'All output: %s / %s [delta]'%(filea, fileb)
24         print '----------HITS---------- ---------MISSES---------'
25         cfmt='%7d/%-7d [%d]'
26         ma_o = []
27         mb_o = []
28         mab  = []
29         for k in ma.keys():
30                 if k in mb.keys():
31                         if k not in mab:
32                                 mab.append(k)
33                 else:
34                         ma_o.append(k)
35         for k in mb.keys():
36                 if k in ma.keys():
37                         if k not in mab:
38                                 mab.append(k)
39                 else:
40                         mb_o.append(k)
41
42         mab.sort()
43         ma_o.sort()
44         mb_o.sort()
45         
46         for k in mab:
47                 hits = cfmt%(ma[k][0], mb[k][0], mb[k][0]-ma[k][0])
48                 miss = cfmt%(ma[k][1], mb[k][1], mb[k][1]-ma[k][1])
49                 print '%-24s %-24s  %s'%(hits, miss, k)
50
51         for k in ma_o:
52                 hits = '%7d/ --'%(ma[k][0])
53                 miss = '%7d/ --'%(ma[k][1])
54                 print '%-24s %-24s  %s'%(hits, miss, k)
55
56         for k in mb_o:
57                 hits = '    -- /%-7d'%(mb[k][0])
58                 miss = '    -- /%-7d'%(mb[k][1])
59                 print '%-24s %-24s  %s'%(hits, miss, k)
60
61         print '-'*(24+24+1+20)
62         
63
64 if __name__ == "__main__":
65         if len(sys.argv) != 3:
66                 print """Usage: %s file1 file2
67
68 Compares --debug=memomize output from file1 against file2."""%sys.argv[0]
69                 sys.exit(1)
70
71         memoize_cmp(sys.argv[1], sys.argv[2])
72         sys.exit(0)
73
74 # Local Variables:
75 # tab-width:4
76 # indent-tabs-mode:nil
77 # End:
78 # vim: set expandtab tabstop=4 shiftwidth=4: