Author: William ML Leslie <william.leslie....@gmail.com> Branch: real-mode-translator-driver Changeset: r89724:aa48dbd8e0e2 Date: 2017-01-24 21:30 +1100 http://bitbucket.org/pypy/pypy/changeset/aa48dbd8e0e2/
Log: Remove 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'] _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit