[pypy-commit] pypy inline-taskengine: Remove the taskengine
william_ml_leslie
pypy.commits at gmail.com
Tue Jan 24 02:44:52 EST 2017
Author: William ML Leslie <william.leslie.ttg at gmail.com>
Branch: inline-taskengine
Changeset: r89718:e6538126874a
Date: 2017-01-24 18:36 +1100
http://bitbucket.org/pypy/pypy/changeset/e6538126874a/
Log: Remove the taskengine
diff --git a/rpython/translator/tool/taskengine.py b/rpython/translator/tool/taskengine.py
deleted file mode 100644
--- a/rpython/translator/tool/taskengine.py
+++ /dev/null
@@ -1,130 +0,0 @@
-class SimpleTaskEngine(object):
- def __init__(self):
- self._plan_cache = {}
-
- self.tasks = tasks = {}
-
- for name in dir(self):
- if name.startswith('task_'):
- task_name = name[len('task_'):]
- task = getattr(self, name)
- assert callable(task)
- task_deps = getattr(task, 'task_deps', [])
-
- tasks[task_name] = task, task_deps
-
- def _plan(self, goals, skip=[]):
- skip = [toskip for toskip in skip if toskip not in goals]
-
- key = (tuple(goals), tuple(skip))
- try:
- return self._plan_cache[key]
- except KeyError:
- pass
- constraints = []
-
- def subgoals(task_name):
- taskcallable, deps = self.tasks[task_name]
- for dep in deps:
- if dep.startswith('??'): # optional
- dep = dep[2:]
- if dep not in goals:
- continue
- if dep.startswith('?'): # suggested
- dep = dep[1:]
- if dep in skip:
- continue
- yield dep
-
- seen = {}
-
- def consider(subgoal):
- if subgoal in seen:
- return
- else:
- seen[subgoal] = True
- constraints.append([subgoal])
- deps = subgoals(subgoal)
- for dep in deps:
- constraints.append([subgoal, dep])
- consider(dep)
-
- for goal in goals:
- consider(goal)
-
- #sort
-
- plan = []
-
- while True:
- cands = dict.fromkeys([constr[0] for constr in constraints if constr])
- if not cands:
- break
-
- for cand in cands:
- for constr in constraints:
- if cand in constr[1:]:
- break
- else:
- break
- else:
- raise RuntimeError("circular dependecy")
-
- plan.append(cand)
- for constr in constraints:
- if constr and constr[0] == cand:
- del constr[0]
-
- plan.reverse()
-
- self._plan_cache[key] = plan
-
- return plan
-
- def _depending_on(self, goal):
- l = []
- for task_name, (task, task_deps) in self.tasks.iteritems():
- if goal in task_deps:
- l.append(task_name)
- return l
-
- def _depending_on_closure(self, goal):
- d = {}
-
- def track(goal):
- if goal in d:
- return
- d[goal] = True
- for depending in self._depending_on(goal):
- track(depending)
- track(goal)
- return d.keys()
-
- def _execute(self, goals, *args, **kwds):
- task_skip = kwds.get('task_skip', [])
- res = None
- goals = self._plan(goals, skip=task_skip)
- for goal in goals:
- taskcallable, _ = self.tasks[goal]
- self._event('planned', goal, taskcallable)
- for goal in goals:
- taskcallable, _ = self.tasks[goal]
- self._event('pre', goal, taskcallable)
- try:
- res = self._do(goal, taskcallable, *args, **kwds)
- except (SystemExit, KeyboardInterrupt):
- raise
- except:
- self._error(goal)
- raise
- self._event('post', goal, taskcallable)
- return res
-
- def _do(self, goal, func, *args, **kwds):
- return func()
-
- def _event(self, kind, goal, func):
- pass
-
- def _error(self, goal):
- pass
diff --git a/rpython/translator/tool/test/test_taskengine.py b/rpython/translator/tool/test/test_taskengine.py
deleted file mode 100644
--- a/rpython/translator/tool/test/test_taskengine.py
+++ /dev/null
@@ -1,150 +0,0 @@
-from rpython.translator.tool.taskengine import SimpleTaskEngine
-
-def test_simple():
-
- class ABC(SimpleTaskEngine):
-
- def task_A(self):
- pass
-
- task_A.task_deps = ['B', '?C']
-
- def task_B(self):
- pass
-
- def task_C(self):
- pass
-
- task_C.task_deps = ['B']
-
- def task_D(self):
- pass
- task_D.task_deps = ['E']
-
- def task_E(self):
- pass
- task_E.task_deps = ['F']
-
- def task_F(self):
- pass
-
- abc = ABC()
-
- assert abc._plan('B') == ['B']
- assert abc._plan('C') == ['B', 'C']
- assert abc._plan('A') == ['B', 'C', 'A']
- assert abc._plan('A', skip=['C']) == ['B', 'A']
-
- assert abc._depending_on('C') == []
- assert dict.fromkeys(abc._depending_on('B'), True) == {'A':True, 'C':True}
- assert abc._depending_on('A') == []
-
- assert abc._depending_on('F') == ['E']
- assert abc._depending_on('E') == ['D']
- assert abc._depending_on('D') == []
-
- assert abc._depending_on_closure('C') == ['C']
- assert dict.fromkeys(abc._depending_on_closure('B'), True) == {'A':True, 'C':True, 'B': True}
- assert abc._depending_on_closure('A') == ['A']
-
- assert dict.fromkeys(abc._depending_on_closure('F'), True) == {'D':True, 'E':True, 'F': True}
- assert dict.fromkeys(abc._depending_on_closure('E'), True) == {'D':True, 'E':True}
- assert abc._depending_on_closure('D') == ['D']
-
-
-def test_execute():
-
- class ABC(SimpleTaskEngine):
-
- def __init__(self):
- SimpleTaskEngine.__init__(self)
- self.done = []
-
- def task_A(self):
- self.done.append('A')
-
- task_A.task_deps = ['B', '?C']
-
- def task_B(self):
- self.done.append('B')
-
- def task_C(self):
- self.done.append('C')
-
- task_C.task_deps = ['B']
-
- def _event(self, kind, goal, taskcallable):
- self.done.append((kind, goal))
-
- def test(goals, task_skip=[]):
- if isinstance(goals, str):
- goals = [goals]
- abc = ABC()
- abc._execute(goals, task_skip=task_skip)
- return abc.done
-
- def trace(goals):
- t = []
- for goal in goals:
- t.append(('planned', goal))
- for goal in goals:
- t.extend([('pre', goal), goal, ('post', goal)])
- return t
-
- assert test('B') == trace('B')
- assert test('C') == trace(['B', 'C'])
- assert test('A') == trace(['B', 'C', 'A'])
- assert test('A', ['C']) == trace(['B', 'A'])
- assert test(['B', 'C']) == trace(['B', 'C'])
- assert test(['C', 'B']) == trace(['B', 'C'])
- assert test(['B', 'A']) == trace(['B', 'C', 'A'])
- assert test(['B', 'A'], ['C']) == trace(['B', 'A'])
- assert test(['B', 'A', 'C']) == trace(['B', 'C', 'A'])
- assert test(['B', 'A', 'C'], ['C']) == trace(['B', 'C', 'A'])
-
-def test_driver():
- class Drv(SimpleTaskEngine):
-
- def task_A():
- pass
- task_A.task_deps = []
-
- def task_R():
- pass
- task_R.task_deps = ['A']
-
- def task_b():
- pass
- task_b.task_deps = ['R']
-
- def task_H():
- pass
- task_H.task_deps = ['b']
-
- def task_T():
- pass
- task_T.task_deps = ['H']
-
- def task_B():
- pass
- task_B.task_deps = ['R', '??T']
-
- def task_D():
- pass
- task_D.task_deps = ['R', '?B', '?A', '??T']
-
- drv = Drv()
- assert drv._plan(['R']) == ['A', 'R']
- assert drv._plan(['B']) == ['A', 'R', 'B']
- assert drv._plan(['D']) == ['A', 'R', 'B', 'D']
- assert drv._plan(['D'], skip=['B']) == ['A', 'R', 'D']
- assert drv._plan(['D', 'R']) == ['A', 'R', 'B', 'D']
-
-
- assert drv._plan(['H', 'R']) == ['A', 'R', 'b', 'H']
- assert drv._plan(['H']) == ['A', 'R', 'b', 'H']
- assert drv._plan(['T', 'B']) == ['A', 'R', 'b', 'H', 'T', 'B']
- assert drv._plan(['D', 'T']) == ['A', 'R', 'b', 'H', 'T', 'B', 'D']
- assert drv._plan(['D', 'T', 'R']) == ['A', 'R', 'b', 'H', 'T', 'B', 'D']
- assert drv._plan(['D', 'T']) == ['A', 'R', 'b', 'H', 'T', 'B', 'D']
- assert drv._plan(['D', 'T'], skip=['B']) == ['A', 'R', 'b', 'H', 'T', 'D']
More information about the pypy-commit
mailing list