Esempio n. 1
0
    def helper(program_base, t):
        if monitor['stopped']:
            return

        try:
            stop_queue.get_nowait()
            monitor['stopped'] = True
            return
        except queue.Empty:
            pass

        if t == T:
            if not get_unused_indices(program_base):
                result_queue.put(program_base.prefix)
            # don't keep searching if pruned
            # has < T stmts. will get picked up
            # on another enumeration
            return

        type_to_inputs = collections.defaultdict(list)
        for i, typ in enumerate(program_base.types):
            type_to_inputs[typ].append(i)

        for k, v in ctx.typemap.items():
            type_to_inputs[k] += v

        used = set(program_base.stmts)
        for f in ctx.functions:
            for args in iterate_inputs(f, type_to_inputs):

                stmt = f, args
                if stmt in used:
                    continue

                program = Program(program_base.input_types,
                                  list(program_base.stmts) + [stmt])
                helper(program, t + 1)
 def test_get_unused_indices(self):
     prefix = 'LIST|INT|MAP,*2,0|FILTER,>0,0|FILTER,<0,2'
     program = Program.parse(prefix)
     expected = {1, 3}
     actual = get_unused_indices(program)
     self.assertEqual(actual, expected)