コード例 #1
0
    def get_preconds(cls, symbols, term_siz):
        """
        sage: x,y,z = sage.all.var('x y z')
        #doctest: +NORMALIZE_WHITESPACE
        sage: sorted(CegirPrePosts._preconds([x,y], 2), key=str)
        [-x + y < 0,
         -x + y <= 0,
         -x - y < 0,
         -x - y <= 0,
         -x < 0,
         -x <= 0,
         -y < 0,
         -y <= 0,
         x + y < 0,
         x + y <= 0,
         x - y < 0,
         x - y <= 0,
         x < 0,
         x <= 0,
         x == 0,
         y < 0,
         y <= 0,
         y == 0]

        """
        t1 = [Eqt(t == 0) for t in symbols]  # M=0, N=0
        ts = Miscs.get_terms_fixed_coefs(symbols, term_siz, settings.ICOEFS)
        t2 = [Oct(t < 0) for t in ts]  # +/M+/-N >0
        t3 = [Oct(t <= 0) for t in ts]  # +/M+/-N >=0
        return t1 + t2 + t3
コード例 #2
0
ファイル: alg.py プロジェクト: ruricolist/dig
    def infer_ieqs(self, symbols, traces):
        maxV = settings.IUPPER
        minV = -1 * maxV

        terms = Miscs.get_terms_fixed_coefs(
            symbols.sageExprs,
            settings.ITERMS,
            settings.ICOEFS,
        )
        ieqs = []
        for t in terms:
            upperbound = max(traces.myeval(t))
            if upperbound > maxV or upperbound < minV:
                continue
            ieqs.append(t <= upperbound)

        import data.inv.oct
        ieqs = [data.inv.oct.Oct(ieq) for ieq in ieqs]
        return ieqs
コード例 #3
0
ファイル: binsearch.py プロジェクト: ruricolist/dig
    def get_terms(self, symbols):

        terms = []
        if settings.DO_IEQS:
            oct_siz = 2
            terms_ieqs = Miscs.get_terms_fixed_coefs(symbols, oct_siz)
            terms_ieqs = [data.poly.base.GeneralPoly(t) for t in terms_ieqs]
            mlog.debug("{} terms for Ieqs".format(len(terms_ieqs)))
            terms.extend(terms_ieqs)

        if settings.DO_MINMAXPLUS:
            terms_u = data.poly.mp.MP.get_terms(symbols)
            terms_u_no_octs = [(a, b) for a, b in terms_u if len(b) >= 2]

            if settings.DO_IEQS:  # ignore oct invs
                terms_u = terms_u_no_octs

            def _get_terms(terms_u, is_max):
                terms_l = [(b, a) for a, b in terms_u]
                terms = terms_u + terms_l
                terms = [data.poly.mp.MP(a, b, is_max) for a, b in terms]
                return terms

            terms_max = _get_terms(terms_u, is_max=True)

            terms_min = _get_terms(terms_u_no_octs, is_max=False)
            terms_mp = terms_min + terms_max
            terms.extend(terms_mp)
            mlog.debug("{} terms for MP".format(len(terms_mp)))
            print(terms_mp)

        if settings.DO_TERM_FILTER:
            st = time()
            new_terms = self.filter_terms(terms,
                                          set(self.prog.inp_decls.names))
            Miscs.show_removed('term filter', len(terms), len(new_terms),
                               time() - st)
            return new_terms
        else:
            return terms