"""Hypothetical allocation arithmetic, not a model run.
Run: python random-attention-retention.py > random-retention.csv
Survival law: https://arxiv.org/html/2609.03430v2#A4
"""
import csv
import sys
from fractions import Fraction
from itertools import combinations

B, r, n = 1024, 64, 16
writer = csv.writer(sys.stdout)
writer.writerow(['post_compaction_B', 'pre_eviction_entries', 'newest_r',
                 'protected_P', 'random_slots_R', 'eligible_rounds_n',
                 'one_round_survival', 'survival_fraction', 'survival_percent'])
for P in (128, 512, 768):
    assert 0 <= P < B-r
    R = B-r-P
    q = Fraction(R, R+r)
    s = q**n
    writer.writerow([B, B+r, r, P, R, n, str(q), str(s), f'{float(s)*100:.8f}'])
# Independent finite sample-space check: choose four of six without replacement.
subsets = list(combinations(range(6), 4))
assert Fraction(sum(0 in subset for subset in subsets), len(subsets)) == Fraction(4, 6)
assert Fraction(sum(0 in subset and 1 in subset for subset in subsets), len(subsets)) == Fraction(4*3, 6*5)
assert Fraction(448, 512)**16 == Fraction(7, 8)**16
