コード例 #1
0
 def add_query(self, q : Query):
     """
     Given a query in terms of abstract state, add an initial concrete
     implementation.
     """
     print("Adding query {}...".format(q.name))
     self.query_specs.append(q)
     fvs = free_vars(q)
     # initial rep
     qargs = set(EVar(a).with_type(t) for (a, t) in q.args)
     rep, ret = tease_apart(wrap_naked_statevars(q.ret, self.abstract_state))
     self.set_impl(q, rep, ret)
コード例 #2
0
ファイル: high_level_interface.py プロジェクト: timwee/cozy
    def run(self):
        print("STARTING IMPROVEMENT JOB {}".format(self.q.name))
        os.makedirs(log_dir.value, exist_ok=True)
        with open(os.path.join(log_dir.value, "{}.log".format(self.q.name)),
                  "w",
                  buffering=LINE_BUFFER_MODE) as f:
            sys.stdout = f
            print("STARTING IMPROVEMENT JOB {}".format(self.q.name))
            print(pprint(self.q))

            if nice_children.value:
                os.nice(20)

            ctx = RootCtx(
                state_vars=self.state,
                args=[EVar(v).with_type(t) for (v, t) in self.q.args],
                funcs=self.funcs)

            cost_model = CostModel(
                funcs=ctx.funcs(),
                assumptions=EAll(self.assumptions),
                freebies=[h.e for h in self.hints if isinstance(h, EStateVar)])

            try:
                for expr in itertools.chain(
                    (self.q.ret, ),
                        core.improve(target=self.q.ret,
                                     assumptions=EAll(self.assumptions),
                                     context=ctx,
                                     hints=self.hints,
                                     stop_callback=lambda: self.stop_requested,
                                     cost_model=cost_model)):

                    new_rep, new_ret = tease_apart(expr)
                    self.k(new_rep, new_ret)
                print("PROVED OPTIMALITY FOR {}".format(self.q.name))
            except core.StopException:
                print("stopping synthesis of {}".format(self.q.name))
                return
コード例 #3
0
ファイル: high_level_interface.py プロジェクト: sanidhya/cozy
    def run(self):
        print("STARTING IMPROVEMENT JOB {} (|examples|={})".format(
            self.q.name, len(self.examples or ())))
        os.makedirs(log_dir.value, exist_ok=True)
        with open(os.path.join(log_dir.value, "{}.log".format(self.q.name)),
                  "w",
                  buffering=LINE_BUFFER_MODE) as f:
            sys.stdout = f
            print("STARTING IMPROVEMENT JOB {} (|examples|={})".format(
                self.q.name, len(self.examples or ())))
            print(pprint(self.q))

            if nice_children.value:
                os.nice(20)

            all_types = self.ctx.all_types
            n_binders = 1
            done = False
            expr = ETuple(
                (EAll(self.assumptions),
                 self.q.ret)).with_type(TTuple((BOOL, self.q.ret.type)))
            while not done:
                binders = []
                for t in all_types:
                    # if isinstance(t, TBag):
                    #     binders += [fresh_var(t.t) for i in range(n_binders)]
                    for i in range(n_binders):
                        b = fresh_var(t)
                        binders.append(b)
                try:
                    core.fixup_binders(expr, binders, throw=True)
                    done = True
                except:
                    pass
                n_binders += 1

            binders = [
                fresh_var(t) for t in all_types if is_scalar(t)
                for i in range(n_binders)
            ]
            print("Using {} binders".format(n_binders))
            relevant_state_vars = [
                v for v in self.state if v in free_vars(EAll(self.assumptions))
                | free_vars(self.q.ret)
            ]
            used_vars = free_vars(self.q.ret)
            for a in self.q.assumptions:
                used_vars |= free_vars(a)
            args = [EVar(v).with_type(t) for (v, t) in self.q.args]
            args = [a for a in args if a in used_vars]
            b = BinderBuilder(binders, relevant_state_vars, args)
            if accelerate.value:
                b = AcceleratedBuilder(b, binders, relevant_state_vars, args)

            try:
                for expr in itertools.chain(
                    (self.q.ret, ),
                        core.improve(
                            target=self.q.ret,
                            assumptions=EAll(self.assumptions),
                            hints=self.hints,
                            examples=self.examples,
                            binders=binders,
                            state_vars=relevant_state_vars,
                            args=args,
                            cost_model=CompositeCostModel(),
                            builder=b,
                            stop_callback=lambda: self.stop_requested)):

                    new_rep, new_ret = tease_apart(expr)
                    self.k(new_rep, new_ret)
                print("PROVED OPTIMALITY FOR {}".format(self.q.name))
            except core.StopException:
                print("stopping synthesis of {}".format(self.q.name))
                return