[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