def both_stripper(asker, update, object, a, b): keeps = properties.trivial() strips = properties.trivial() for x in [a, b]: keep_or_strip = asker.ask(modifiers_to_strip(update, x, object)).value new_keeps = fields.get(asker, fields.implication_about(to_keep()), keep_or_strip) keeps = properties.both(keeps, new_keeps) new_strips = fields.get(asker, fields.implication_about(to_strip()), keep_or_strip) strips = properties.both(strips, new_strips) return asker.reply(value=keep_strip(keep=keeps, strip=strips))
def __init__(self, value=None, answer=None, question=None): self.question = question if value is None: value = properties.trivial() if answer is not None: value = properties.both(answer_is(answer), value) self.value = value
def keep_strip(keep=None, strip=None): if keep is None: keep = properties.trivial() if strip is None: strip = properties.trivial() return properties.both( fields.field_value(to_keep(), keep), fields.field_value(to_strip(), strip) )
def bindings(self): return frozendict( head=quote(self.represents.head), bindings=quote(self.represents.bindings), _modifier=properties.both( has_id(quote(self.represents.id)), has_source(quote(self.represents.source)) ) )
def process_both(a, b): return properties.both(*[self.process_response(x, Q=Q, handler=handler) for x in (a, b)])
def process_both(a, b): return properties.both(*[self.process_query(x) for x in (a, b)])
def add(self, new_value): return self.set(properties.both(new_value, self.value))
def add(self, property): return Query(question=self.question, other=properties.both(property, self.other))
def relay(self, m): self.to_relay = properties.both(m, self.to_relay)
def set_implication_about(asker, object, new_value, field): result = asker.ask(soft_set_implication(object, field, new_value)) if result.has_answer(): return result else: return asker.reply(answer=properties.both(field_value(field, new_value), object))
def set_both_implication(asker, field, new_value, a, b): for x, y in [(a, b), (b, a)]: r = asker.ask(soft_set_implication(x, field, new_value)) if r.has_answer(): return asker.reply(answer=properties.both(r.answer, y)) return asker.reply(value=unknown())