From ca11acf38821572c8fcb2817c228183c6346fac2 Mon Sep 17 00:00:00 2001 From: Erik Johnston Date: Fri, 1 Jun 2018 11:06:50 +0100 Subject: [PATCH] foo --- synapse/storage/chunk_ordered_table.py | 48 +++++++++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) diff --git a/synapse/storage/chunk_ordered_table.py b/synapse/storage/chunk_ordered_table.py index 125636a1e2..1d49e24f95 100644 --- a/synapse/storage/chunk_ordered_table.py +++ b/synapse/storage/chunk_ordered_table.py @@ -93,7 +93,7 @@ class ChunkDBOrderedListStore(OrderedListStore): def __init__(self, txn, room_id, clock, rebalance_max_denominator=100, - max_denominator=10000): + max_denominator=100000): self.txn = txn self.room_id = room_id self.clock = clock @@ -507,3 +507,49 @@ def stern_brocot_single(min_frac, max_frac): return f else: a, b, c, d = a, b, a + c, b + d + + +def stern_brocot_range_depth(min_frac, max_denom): + assert 0 < min_frac + + states = stern_brocot_single(min_frac) + + while len(states): + a, b, c, d = states.pop() + + if b + d > max_denom: + continue + + f = (a + c) / float(b + d) + if f < min_frac: + states.append((a + c, b + d, c, d)) + + elif min_frac <= f: + states.append((a + c, b + d, c, d)) + states.append((a, b, a + c, b + d)) + + yield Fraction(a + c, b + d) + else: + states.append((a, b, a + c, b + d)) + + + +def stern_brocot_single(min_frac): + assert 0 <= min_frac + + states = [] + + a, b, c, d = 0, 1, 1, 0 + + states.append((a, b, c, d)) + + while True: + f = Fraction(a + c, b + d) + if f < min_frac: + a, b, c, d = a + c, b + d, c, d + elif f == min_frac: + return states + else: + a, b, c, d = a, b, a + c, b + d + + states.append((a, b, c, d))