Mercurial > codeOptimizer
comparison DepGraph.py @ 0:28b636105ed6
Working version of codeOptimizer.
-Still needs to implement more finegrained control per file basis.
-CXXFLAGS are hardcoded.
| author | Tom Fredrik Blenning Klaussen <bfg@blenning.no> |
|---|---|
| date | Sat, 15 Sep 2012 20:34:39 +0200 |
| parents | |
| children | a1224150b8f6 |
comparison
equal
deleted
inserted
replaced
| -1:000000000000 | 0:28b636105ed6 |
|---|---|
| 1 import numpy | |
| 2 | |
| 3 from types import * | |
| 4 | |
| 5 class DepGraph: | |
| 6 def __init__(self): | |
| 7 self.deps = [] | |
| 8 self.values = [] | |
| 9 | |
| 10 def add(self, value): | |
| 11 if value in self.values: | |
| 12 raise ValueError | |
| 13 self.values.append(value) | |
| 14 | |
| 15 | |
| 16 def addDependency(self, src, dst): | |
| 17 if not type(dst) is ListType: | |
| 18 dst = [ dst ] | |
| 19 | |
| 20 vl = len(self.values) | |
| 21 dl = len(self.deps) | |
| 22 si = self.values.index(src) | |
| 23 | |
| 24 | |
| 25 if dl != vl: | |
| 26 full = [] | |
| 27 for i in range(0, vl): | |
| 28 full.append(False) | |
| 29 | |
| 30 exp = [] | |
| 31 for i in range(dl, vl): | |
| 32 exp.append(False) | |
| 33 self.deps.append(full[:]) | |
| 34 | |
| 35 for i in range(0, dl): | |
| 36 self.deps[i].append(exp[:]) | |
| 37 | |
| 38 for d in dst: | |
| 39 if d in self.values: | |
| 40 di = self.values.index(d) | |
| 41 self.deps[si][di] = True | |
| 42 | |
| 43 | |
| 44 @staticmethod | |
| 45 def directedGraphInternal(deps): | |
| 46 dl = len(deps) | |
| 47 myVals = [] | |
| 48 for i in range(dl): | |
| 49 if not max(deps[i]): | |
| 50 myVals.append(i) | |
| 51 | |
| 52 for i in myVals: | |
| 53 for j in range(dl): | |
| 54 deps[j][i] = False | |
| 55 | |
| 56 retVal = myVals | |
| 57 | |
| 58 if len(deps) != len(myVals): | |
| 59 subVals = self.directedGraphInternal(deps) | |
| 60 for val in myVals: | |
| 61 if val in subVals: | |
| 62 ind = subVals.index(val) | |
| 63 del subVals[ind] | |
| 64 | |
| 65 if subVals: | |
| 66 retVal.extend(subVals) | |
| 67 | |
| 68 return retVal | |
| 69 | |
| 70 @staticmethod | |
| 71 def printableDepgraph(deps): | |
| 72 res='' | |
| 73 for i in range(len(deps)): | |
| 74 if res: | |
| 75 res += '\n' | |
| 76 s = '' | |
| 77 for j in range(len(deps[i])): | |
| 78 if deps[i][j]: | |
| 79 s += '1' | |
| 80 else: | |
| 81 s += '0' | |
| 82 res += s | |
| 83 return res | |
| 84 | |
| 85 def directedGraph(self): | |
| 86 deps = self.deps[:][:] | |
| 87 vals = self.directedGraphInternal(deps) | |
| 88 retVal = [] | |
| 89 for i in vals: | |
| 90 retVal.append(self.values[i]) | |
| 91 return retVal | |
| 92 | |
| 93 | |
| 94 def toplevelDependencies(self): | |
| 95 dl = len(self.deps) | |
| 96 retVal = [] | |
| 97 for i in range(dl): | |
| 98 if not max(self.deps[i]): | |
| 99 print max(self.deps[i]) | |
| 100 retVal.append(self.values[i]) | |
| 101 return retVal |
