wip(assembler): round L31 -- FI recipe column audit corrected; recipe-stamped audit runner
On the real FloatingIslands recipe, column caps sit inside anchor-island rock and native bedrock; the old check sampled the route foot. The audit now samples each planned cap against the native field (negative control: a cap moved into air is detected). The audit runner records requested vs actual recipe and exits on mismatch. All 16 passage rows (4 styles x 2 recipes x 2 compilers) pass. The readable shader uses a smooth tint. Interim: FI Gradient displacement capped at width/256 (flat floor, no contour rings); restoring real undulation is L32. Evaluator 19. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CSFYgsdW8ejZSyiMf4qRSX
This commit is contained in:
1 parent
103d8b471e
commit
28069f0d98
23 files changed
+1235
-19
No files matched your search
@@ -0,0 +1,52 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Combine the initial and repeat L31 interleaved cost batches."""
|
||||
import csv
|
||||
import statistics
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[4]
|
||||
OUT = ROOT / "Saved/Linux/l31"
|
||||
sources = (
|
||||
("first", 0, OUT / "cost-first/cost-runs.csv"),
|
||||
("repeat", 5, OUT / "cost-runs.csv"),
|
||||
)
|
||||
rows = []
|
||||
for batch, offset, path in sources:
|
||||
with path.open(newline="", encoding="utf-8") as stream:
|
||||
for row in csv.DictReader(stream):
|
||||
row["pair"] = str(int(row["pair"]) + offset)
|
||||
row["source_batch"] = batch
|
||||
rows.append(row)
|
||||
|
||||
with (OUT / "cost-combined.csv").open("w", newline="", encoding="utf-8") as stream:
|
||||
writer = csv.DictWriter(stream, fieldnames=(
|
||||
"recipe", "pair", "build", "whole_view_ready_seconds", "process_elapsed_seconds",
|
||||
"exit_code", "status", "source_batch"))
|
||||
writer.writeheader()
|
||||
writer.writerows(rows)
|
||||
|
||||
print("recipe pairs median_l30_s median_l31_s median_change_pct paired_median_pct range_pct")
|
||||
failed = False
|
||||
for recipe in ("surface-world", "floating-islands"):
|
||||
by_build = {
|
||||
build: [float(row["whole_view_ready_seconds"]) for row in rows
|
||||
if row["recipe"] == recipe and row["build"] == build]
|
||||
for build in ("l30", "l31")
|
||||
}
|
||||
paired = []
|
||||
for pair in range(1, 11):
|
||||
times = {
|
||||
row["build"]: float(row["whole_view_ready_seconds"])
|
||||
for row in rows if row["recipe"] == recipe and int(row["pair"]) == pair
|
||||
}
|
||||
paired.append((times["l31"] / times["l30"] - 1.0) * 100.0)
|
||||
median_l30 = statistics.median(by_build["l30"])
|
||||
median_l31 = statistics.median(by_build["l31"])
|
||||
median_change = (median_l31 / median_l30 - 1.0) * 100.0
|
||||
print(f"{recipe} 10 {median_l30:.3f} {median_l31:.3f} {median_change:+.2f} "
|
||||
f"{statistics.median(paired):+.2f} {min(paired):+.2f}..{max(paired):+.2f}")
|
||||
failed |= len(by_build["l30"]) != 10 or len(by_build["l31"]) != 10
|
||||
print(f"[L31CostCombined] pairs_per_recipe=10 runs={len(rows)} "
|
||||
f"status={'FAIL' if failed else 'PASS'} summary={OUT / 'cost-combined.csv'}")
|
||||
raise SystemExit(1 if failed or len(rows) != 40 else 0)
|
||||
Reference in new issue
Block a user