import repository from arizona
[raven.git] / tools / misc / percent.py
1 from distutils.version import LooseVersion
2
3 def versionCompare(x,y):
4     """ sort mapData by version number """
5     x = LooseVersion(x[3])
6     y = LooseVersion(y[3])
7     if (x<y):
8         return -1
9     elif (x==y):
10         return 0
11     else:
12         return 1
13
14 def versionProcess(data):
15     """ a postprocessor to map version numbers to colors. The most recent
16         version is blue. Version (n-1) is colored green, (n-2) yellow, and
17         remaining older versions are colored red.
18     """
19     colors = [0,2,4,3,1]  # grey, red, yellow, green, blue
20
21     work = data[:]
22
23     work.sort(versionCompare)
24     work.reverse() # reverse it so we can work from most recent to least
25
26     lastValue = None
27     colorIndex = 0
28     for item in work:
29         if item[3] != lastValue:
30             colorIndex += 1
31             if (colorIndex >= len(colors)):
32                 colorIndex = len(colors)-1
33         lastValue = item[3]
34         item[3] = colors[colorIndex]
35
36     return work
37
38 def percentileProcess(data):
39     results = []
40     work = []
41     for item in data:
42         if dfloat(item[3], 0) <= 0:
43             results.append([item[0], item[1], item[2], 0])
44         else:
45             work.append(item)
46
47     work.sort(lambda x, y: x[3]-y[3])
48
49     index = 0
50     for item in work:
51         if (index < len(work)/4):
52             item[3] = 2 # red
53         elif (index < 2*len(work)/4):
54             item[3] = 4 # yellow
55         elif (index < 3*len(work)/4):
56             item[3] = 3 # green
57         else:
58             item[3] = 1 # blue
59         index = index + 1
60
61     results.extend(work)
62
63     return results
64
65 def dfloat(x, default):
66     try:
67          return float(x)
68     except:
69          return default
70
71 def dint(x, default):
72     try:
73          return int(x)
74     except:
75          return default
76
77 data = [
78    [1,1,"a", 47],
79    [2,2,"b", 36],
80    [3,3,"c", 17],
81    [4,4,"d", 100],
82    [5,5,"e", 1],
83    [6,6,"f", 84],
84    [7,7,"g", 55],
85    [8,8,"h", 11],
86    [9,9,"i", 74],
87    [10,10,"j", 67],
88    [11,11,"k", ""]]
89
90 results = percentileProcess(data)
91
92 for item in data:
93     print item
94
95 print "---"
96
97 for item in results:
98     print item
99
100 data = [
101    [1,1, "a", "2.2.0"],
102    [2,2, "b", "2.3.7"],
103    [3,3, "c", "2.2.0-2480"],
104    [4,4, "d", "4"],
105    [5,5, "e", "1.0"],
106    [6,6, "f", "7.1"],
107    [7,7, "g", "2.2.0-2481"]]
108
109 results = versionProcess(data)
110
111 for item in data:
112     print item
113
114 print "---"
115
116 for item in results:
117     print item
118
119
120
121