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
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
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