Beispiel #1
0
    def __new__(cls, arg, simplify=True):
        arg = arg if isinstance(arg, Expression) else boolify(arg)
        if simplify:
            degenerate, arg = cls._simplify(arg)
            if degenerate:
                return arg

        self = super(Not, cls).__new__(cls)
        self._args = (arg, )
        self._simplified = simplify
        return self
Beispiel #2
0
    def __new__(cls, *args, **kwargs):
        simplify = kwargs.get('simplify', True)
        args = tuple(arg if isinstance(arg, Expression) else boolify(arg)
                     for arg in args)
        if simplify:
            degenerate, args = cls._simplify(args)
            if degenerate:
                return args

        self = super(OrAnd, cls).__new__(cls)
        self._args = args
        self._simplified = simplify
        return self
Beispiel #3
0
    def __new__(cls, s, a, b, simplify=True):
        args = (arg if isinstance(arg, Expression) else boolify(arg)
                for arg in (s, a, b))
        if simplify:
            degenerate, args = cls._simplify(args)
            if degenerate:
                return args
        else:
            args = (s, a, b)

        self = super(ITE, cls).__new__(cls)
        self._args = args
        self._simplified = simplify
        return self
Beispiel #4
0
    def __new__(cls, p, q, simplify=True):
        args = tuple(arg if isinstance(arg, Expression) else boolify(arg)
                     for arg in (p, q))
        if simplify:
            degenerate, args = cls._simplify(args)
            if degenerate:
                return args
        else:
            args = (p, q)

        self = super(Implies, cls).__new__(cls)
        self._args = args
        self._simplified = simplify
        return self
Beispiel #5
0
    def __new__(cls, *args, **kwargs):
        simplify = kwargs.get('simplify', True)
        args = tuple(arg if isinstance(arg, Expression) else boolify(arg)
                     for arg in args)
        if simplify:
            degenerate, args, par = cls._simplify(args)
            if degenerate:
                return args
        else:
            par = cls.PARITY

        self = super(Exclusive, cls).__new__(_PAR2CLS[par])
        self._args = args
        self._simplified = simplify
        return self
Beispiel #6
0
    def restrict(self, point):
        idents = set()
        doms = set()
        for v, val in point.items():
            if boolify(val) == self.IDENTITY:
                idents.add(-v.uniqid)
                doms.add(v.uniqid)
            else:
                idents.add(v.uniqid)
                doms.add(-v.uniqid)

        new_clauses = set()
        for clause in self.clauses:
            if not clause & doms:
                new_clause = clause - idents
                if new_clause:
                    new_clauses.add(new_clause)
                else:
                    return self.DOMINATOR

        return self.__class__(new_clauses)
Beispiel #7
0
 def restrict(self, point):
     try:
         return 1 - boolify(point[self.exprvar])
     except KeyError:
         return self
Beispiel #8
0
 def restrict(self, point):
     try:
         return boolify(point[self])
     except KeyError:
         return self
Beispiel #9
0
 def param2output(output):
     return boolify(output)