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
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
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
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
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
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)
def restrict(self, point): try: return 1 - boolify(point[self.exprvar]) except KeyError: return self
def restrict(self, point): try: return boolify(point[self]) except KeyError: return self
def param2output(output): return boolify(output)