annotate DepGraph.py @ 8:8952a4f7aa95

Fix off by one error, and simplify.
author Tom Fredrik Blenning Klaussen <bfg@blenning.no>
date Mon, 24 Sep 2012 10:36:03 +0200
parents 3a56cd936c59
children 2263a283203c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
8
8952a4f7aa95 Fix off by one error, and simplify.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 4
diff changeset
1 import copy
0
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
2 from types import *
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
3
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
4 class DepGraph:
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
5 def __init__(self):
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
6 self.deps = []
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
7 self.values = []
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
8
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
9 def add(self, value):
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
10 if value in self.values:
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
11 raise ValueError
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
12 self.values.append(value)
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
13
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
14
4
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
15 def rightSize(self):
0
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
16 vl = len(self.values)
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
17 dl = len(self.deps)
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
18
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
19 if dl != vl:
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
20 full = []
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
21 for i in range(0, vl):
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
22 full.append(False)
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
23
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
24 exp = []
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
25 for i in range(dl, vl):
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
26 exp.append(False)
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
27 self.deps.append(full[:])
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
28
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
29 for i in range(0, dl):
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
30 self.deps[i].append(exp[:])
4
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
31
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
32 def addDependency(self, src, dst):
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
33 if not type(dst) is ListType:
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
34 dst = [ dst ]
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
35
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
36 self.rightSize()
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
37
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
38 si = self.values.index(src)
0
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
39 for d in dst:
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
40 if d in self.values:
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
41 di = self.values.index(d)
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
42 self.deps[si][di] = True
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
43
4
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
44 @staticmethod
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
45 def identifyStronglyConnectedComponents(deps):
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
46 S=[]
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
47 vindex={}
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
48 lowlink={}
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
49 retVal=[]
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
50 for v in range(len(deps)):
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
51 if not v in vindex:
8
8952a4f7aa95 Fix off by one error, and simplify.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 4
diff changeset
52 retVal.extend(DepGraph.strongconnect(deps, v, 0, vindex, lowlink, S))
4
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
53 return retVal
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
54
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
55 @staticmethod
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
56 def strongconnect(deps, v, index, vindex, lowlink, S):
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
57 retVal = []
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
58 # Set the depth index for v to the smallest unused index
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
59 vindex[v] = index
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
60 lowlink[v] = index
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
61 #print index
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
62 S.append(v)
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
63
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
64 # Consider successors of v
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
65 for w in range(len(deps)):
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
66 if not deps[w][v]:
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
67 continue
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
68 if not w in vindex:
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
69 # Successor w has not yet been visited; recurse on it
8
8952a4f7aa95 Fix off by one error, and simplify.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 4
diff changeset
70 res = DepGraph.strongconnect(deps, w, index + 1, vindex, lowlink, S)
4
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
71 retVal.extend(res)
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
72 lowlink[v] = min(lowlink[v], lowlink[w])
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
73 elif w in S:
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
74 # Successor w is in stack S and hence in the current SCC
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
75 lowlink[v] = min(lowlink[v], vindex[w])
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
76
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
77 # If v is a root node, pop the stack and generate an SCC
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
78 if lowlink[v] == vindex[v]:
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
79 #start a new strongly connected component
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
80 component = []
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
81 w = None
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
82 while w != v:
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
83 w = S.pop()
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
84 #add w to current strongly connected component
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
85 component.append(w)
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
86 retVal.append(component)
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
87 return retVal
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
88
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
89 @staticmethod
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
90 def dissolveStronglyConnectedComponents(deps):
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
91 dissolved = True
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
92 while dissolved:
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
93 dissolved = False
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
94 strong = DepGraph.identifyStronglyConnectedComponents(deps)
8
8952a4f7aa95 Fix off by one error, and simplify.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 4
diff changeset
95 print strong
4
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
96 for s in strong:
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
97 if len(s) > 1:
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
98 #We remove the first dependency, and see how it goes.
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
99 v = s[0]
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
100 for w in s[1:]:
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
101 if deps[w][v]:
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
102 #print "Remove link %d -> %d" % (w, v)
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
103 deps[w][v] = False
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
104 dissolved = True
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
105 break
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
106 return deps
0
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
107
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
108 @staticmethod
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
109 def directedGraphInternal(deps):
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
110 dl = len(deps)
4
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
111 startPoints = []
0
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
112 for i in range(dl):
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
113 if not max(deps[i]):
4
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
114 startPoints.append(i)
0
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
115
4
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
116 for i in startPoints:
0
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
117 for j in range(dl):
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
118 deps[j][i] = False
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
119
4
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
120 retVal = startPoints
0
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
121
4
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
122 if len(deps) != len(startPoints):
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
123 subVals = DepGraph.directedGraphInternal(deps)
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
124 for val in startPoints:
0
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
125 if val in subVals:
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
126 ind = subVals.index(val)
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
127 del subVals[ind]
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
128
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
129 if subVals:
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
130 retVal.extend(subVals)
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
131
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
132 return retVal
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
133
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
134 @staticmethod
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
135 def printableDepgraph(deps):
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
136 res=''
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
137 for i in range(len(deps)):
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
138 if res:
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
139 res += '\n'
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
140 s = ''
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
141 for j in range(len(deps[i])):
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
142 if deps[i][j]:
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
143 s += '1'
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
144 else:
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
145 s += '0'
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
146 res += s
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
147 return res
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
148
4
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
149 def depGraphRepr(self):
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
150 return self.printableDepgraph(self.deps)
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
151
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
152 def directedGraph(self, force = True):
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
153 deps = copy.deepcopy(self.deps)
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
154 if force:
3a56cd936c59 Cleanup some code.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents: 1
diff changeset
155 deps = self.dissolveStronglyConnectedComponents(deps)
0
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
156 vals = self.directedGraphInternal(deps)
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
157 retVal = []
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
158 for i in vals:
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
159 retVal.append(self.values[i])
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
160 return retVal
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
161
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
162
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
163 def toplevelDependencies(self):
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
164 dl = len(self.deps)
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
165 retVal = []
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
166 for i in range(dl):
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
167 if not max(self.deps[i]):
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
168 print max(self.deps[i])
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
169 retVal.append(self.values[i])
28b636105ed6 Working version of codeOptimizer.
Tom Fredrik Blenning Klaussen <bfg@blenning.no>
parents:
diff changeset
170 return retVal