# -*- encoding: utf-8 -*- import math import operator from propagator.generic_operator import make_generic_operator add = make_generic_operator(2, "add", operator.add) sub = make_generic_operator(2, "sub", operator.sub) mul = make_generic_operator(2, "mul", operator.mul) truediv = make_generic_operator(2, "truediv", operator.truediv) lt = make_generic_operator(2, "lt", operator.lt) gt = make_generic_operator(2, "gt", operator.gt) le = make_generic_operator(2, "le", operator.le) ge = make_generic_operator(2, "ge", operator.ge) not_ = make_generic_operator(1, "not_", operator.not_) sqrt = make_generic_operator(1, "sqrt", math.sqrt) abs = make_generic_operator(1, "abs", abs) square = make_generic_operator(1, "square", lambda x: mul(x, x))
self.message = message def __repr__(self): if self.message is None: return "Contradiction()" else: return "Contradiction('{message}')".format(**vars(self)) def __str__(self): return repr(self) def __unicode__(self): return repr(self) is_contradictory = make_generic_operator( 1, "is_contradictory", lambda x: isinstance(x, Contradiction)) is_nothing = make_generic_operator(1, "is_nothing", partial(is_, None)) is_not_nothing = make_generic_operator(1, "is_not_nothing", lambda x: not is_nothing(x)) is_anything = lambda x: True def _default_merge(content, increment): debug("Merging {content} and {increment}...".format(**vars())) if content == increment: return content else: return Contradiction('{content} != {increment}'.format(**vars())) merge = make_generic_operator(2, "merge", _default_merge)
def __init__(self, message=None): self.message = message def __repr__(self): if self.message is None: return "Contradiction()" else: return "Contradiction('{message}')".format(**vars(self)) def __str__(self): return repr(self) def __unicode__(self): return repr(self) is_contradictory = make_generic_operator(1, "is_contradictory", lambda x: isinstance(x, Contradiction)) is_nothing = make_generic_operator(1, "is_nothing", partial(is_, None)) is_not_nothing = make_generic_operator(1, "is_not_nothing", lambda x: not is_nothing(x)) is_anything = lambda x: True def _default_merge(content, increment): debug("Merging {content} and {increment}...".format(**vars())) if content == increment: return content else: return Contradiction('{content} != {increment}'.format(**vars())) merge = make_generic_operator(2, "merge", _default_merge) def implies(v1, v2): return v1 == merge(v1, v2)