Пример #1
0
def soft(e):

    to_expr(e)
    em = pop_expr()
    c = ConstraintSoftModel(em)
    c.srcinfo = em.srcinfo
    push_constraint_stmt(c)
Пример #2
0
    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
Пример #3
0
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))
Пример #4
0
 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)
Пример #5
0
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)
Пример #6
0
    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)
Пример #7
0
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))
Пример #8
0
    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
Пример #9
0
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)
Пример #10
0
 def __enter__(self):
     push_constraint_stmt(self.stmt)
     push_constraint_scope(self.stmt)
Пример #11
0
def soft(e):

    to_expr(e)
    push_constraint_stmt(ConstraintSoftModel(pop_expr()))