def _collect(continuations, nonlinear): PROFILE_COUNTERS[_collect, '...'] += 1 # Collect unique samples. samples = set() for continuation in continuations: sample = _close(continuation, nonlinear) if sample is TOP: return TOP samples.add(sample) if not samples: return BOT # Filter out dominated samples. # FIXME If x [= y and y [= x, this filters out both. filtered_samples = [] for sample in samples: if not any(oracle.try_decide_less(sample, other) for other in samples if other is not sample): filtered_samples.append(sample) filtered_samples.sort(key=lambda code: (complexity(code), code)) # Construct a join term. result = filtered_samples[0] for sample in filtered_samples[1:]: result = JOIN(result, sample) return result
def test_try_decide_less(x, y, less_xy, less_yx): assert oracle.try_decide_less(x, y) == less_xy assert oracle.try_decide_less(y, x) == less_yx