def soft(e): to_expr(e) em = pop_expr() c = ConstraintSoftModel(em) c.srcinfo = em.srcinfo push_constraint_stmt(c)
def __enter__(self): push_constraint_stmt(self.stmt) push_constraint_scope(self.stmt) model = self.arr_model # return expr(ExprArraySubscriptModel()) push_foreach_arr(self.arr) idx_term = foreach.idx_term_c(self.stmt.index) if self.arr_model.is_scalar: it_term = foreach.it_term_c( ExprArraySubscriptModel(ExprFieldRefModel(model), ExprFieldRefModel(self.stmt.index))) else: self.arr.t._int_field_info.root_e = ExprArraySubscriptModel( ExprFieldRefModel(model), ExprFieldRefModel(self.stmt.index)) it_term = self.arr.t if self.idx and self.it: return (idx_term, it_term) else: if self.it: return it_term else: return idx_term
def unique(*args): expr_l = [] for i in range(-1, -(len(args) + 1), -1): to_expr(args[i]) expr_l.insert(0, pop_expr()) push_constraint_stmt(ConstraintUniqueModel(expr_l))
def __init__(self, e): if not in_constraint_scope(): raise Exception("Attempting to use if_then constraint outside constraint scope") to_expr(e) self.stmt = ConstraintIfElseModel(pop_expr()) push_constraint_stmt(self.stmt)
def unique(*args): expr_l = [] for i in range(-1, -(len(args) + 1), -1): to_expr(args[i]) expr_l.insert(0, pop_expr()) c = ConstraintUniqueModel(expr_l) if in_srcinfo_mode(): c.srcinfo = SourceInfo.mk() push_constraint_stmt(c)
def __init__(self, e): if not in_constraint_scope(): raise Exception( "Attempting to use if_then constraint outside constraint scope" ) to_expr(e) self.stmt = ConstraintIfElseModel(pop_expr()) if in_srcinfo_mode(): self.stmt.srcinfo = SourceInfo.mk() push_constraint_stmt(self.stmt)
def dist(lhs, weights): """Applies distribution weights to the specified field""" to_expr(lhs) lhs_e = pop_expr() weight_l = [] for w in weights: if not isinstance(w, weight): raise Exception("Weight specifications must of type 'vsc.weight', not " + str(w)) weight_l.append(w.weight_e) push_constraint_stmt(ConstraintDistModel(lhs_e, weight_l))
def __enter__(self): push_constraint_stmt(self.stmt) push_constraint_scope(self.stmt) idx_term = foreach.idx_term_c(self.stmt.index) it_term = foreach.it_term_c( ExprArraySubscriptModel(self.arr_ref_e, ExprFieldRefModel(self.stmt.index))) if self.idx and self.it: return (idx_term, it_term) else: if self.it: return it_term else: return idx_term
def solve_order(before, after): if constraint_scope_depth() != 1: raise Exception( "solve_before can only be used at a constraint top level") before_l = [] after_l = [] if isinstance(before, list): for b in before: to_expr(b) b_e = pop_expr() if not isinstance(b_e, ExprFieldRefModel): raise Exception("Parameter " + str(b) + " is not a field reference") before_l.append(b_e.fm) else: to_expr(before) before_e = pop_expr() if not isinstance(before_e, ExprFieldRefModel): raise Exception("Parameter " + str(before) + " is not a field reference") before_l.append(before_e.fm) if isinstance(after, list): for a in after: to_expr(a) a_e = pop_expr() if not isinstance(a_e, ExprFieldRefModel): raise Exception("Parameter " + str(a) + " is not a field reference") before_l.append(a_e.fm) else: to_expr(after) after_e = pop_expr() if not isinstance(after_e, ExprFieldRefModel): raise Exception("Parameter " + str(after) + " is not a field reference") after_l.append(after_e.fm) c = ConstraintSolveOrderModel(before_l, after_l) if in_srcinfo_mode(): c.srcinfo = SourceInfo.mk() push_constraint_stmt(c)
def __enter__(self): push_constraint_stmt(self.stmt) push_constraint_scope(self.stmt)
def soft(e): to_expr(e) push_constraint_stmt(ConstraintSoftModel(pop_expr()))