def exhaustive_timeline(*events): """ A timeline is linear, and allows only a single relationship between each pair of events; a<b, b<a, or a*b """ return pairwise(lambda a, b: impl(a & b, onehot(simultaneous(a, b), sequential(a, b), sequential(b, a))), events)
def timeline(relationships): """A timeline is linear, and allows only a single relationship between each pair of events; a<b, b<a, or a*b""" clauses = [] for pair, rels in relationships.items(): clauses.append(impl(var(pair[0]) & var(pair[1]), onehot(*[relation[rel](*pair) for rel in rels]))) return clauses