code wiki / _hdl_build / nx_bd_calc_gate.nx
nx_bd_calc_gate.nx source
↩ module page · 122 lines · 6803 B
1// nx_bd_calc_gate.nx -- known-answer gate for the sovereign BD organ (2026-07-29).
2// THE DOCTRINE INVERSION: the python cubic Bjontegaard (numpy polyfit) is now the ORACLE inside this
3// gate and nothing else -- the lane instrument is nx_bd_calc (sovereign f64 PWL). Oracle values below
4// were generated 2026-07-29 from the BANKED 4-seq curves (bd_rdoq.txt PRE vs bd_lam.txt LAM4 @2593,
5// kbps_milli = total*5 exactly, psnr_milli from sseY/npix): foreman -148.4 akiyo -101.9 bus -28.8
6// mobile -12.9 permille. MEASURED estimator delta PWL-vs-cubic on these pairs: max 2.1 permille =>
7// TOLERANCE = +/-5 permille (derived from measurement + margin, never taste).
8// Teeth: T1-T4 the four oracle pairs in-band; T5 identity == 0 exactly; T6 reverse comparison equals
9// the EXACT algebraic inverse 1/(1+bd)-1 within +/-2 permille (self-consistency, catches sign bugs).
10// The organ is forked as the INSTALLED artifact (_offc) -- the gate tests the shipped path.
11// license: ORIGINAL
12import "nx_tool_run.nx"
13
14const BDG_TOL: i64 = 5
15const BDG_TOL_INV: i64 = 2
16
17func gw(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(1,s,n); return 0 }
18func gn(v: i64) -> i64 {
19 let b: *u8=sys_mmap(28); var m: i64=v; if m<0{sys_write(1,"-" as *u8,1);m=0-m}
20 let t: *u8=sys_mmap(28); var k: i64=0; if m==0{t[0]=48 as u8;k=1} while m>0{t[k]=(48+(m%10)) as u8;m=m/10;k=k+1}
21 var i: i64=0; while i<k{b[i]=t[k-1-i];i=i+1} sys_write(1,b,k); return 0 }
22
23func wnum(fd: i64, v: i64) -> i64 {
24 let b: *u8=sys_mmap(28); var m: i64=v
25 let t: *u8=sys_mmap(28); var k: i64=0; if m==0{t[0]=48 as u8;k=1} while m>0{t[k]=(48+(m%10)) as u8;m=m/10;k=k+1}
26 var i: i64=0; while i<k{b[i]=t[k-1-i];i=i+1} sys_write(fd,b,k); return 0 }
27
28// write a .pts file from parallel arrays
29func wpts(path: *u8, km: *i64, pm: *i64, n: i64) -> i64 {
30 let fd: i64 = sys_openat_wr(path, 0x1a4)
31 if fd < 0 { return 1 }
32 var i: i64 = 0
33 while i < n { wnum(fd, km[i]); sys_write(fd, " " as *u8, 1); wnum(fd, pm[i]); sys_write(fd, "\n" as *u8, 1); i = i + 1 }
34 sys_close(fd)
35 return 0 }
36
37// run nx_bd_calc, parse BD_PWL_PERMILLE=<signed int>; returns value or -999999 on fail
38func run_bd(a: *u8, t: *u8) -> i64 {
39 let av: *i64 = sys_mmap(8*6) as *i64
40 let out: *u8 = sys_mmap(65536)
41 let ol: *i64 = sys_mmap(16) as *i64
42 av[0] = "_offc/nx_bd_calc.elf" as *u8 as i64
43 av[1] = a as i64; av[2] = t as i64; av[3] = 0
44 tr_run_capture("_offc/nx_bd_calc.elf" as *u8, av, out, 65536, ol)
45 let mk: *u8 = "BD_PWL_PERMILLE=" as *u8
46 var ml: i64 = 0; while mk[ml] != (0 as u8) { ml = ml + 1 }
47 var i: i64 = 0
48 while i + ml <= ol[0] {
49 var k: i64 = 0
50 while k < ml { if out[i+k] != mk[k] { k = ml + 9 } else { k = k + 1 } }
51 if k == ml {
52 var p: i64 = i + ml
53 var neg: i64 = 0
54 if out[p] == (45 as u8) { neg = 1; p = p + 1 }
55 var v: i64 = 0
56 while p < ol[0] { let c: i64 = out[p] & 0xff
57 if c < 48 { break } if c > 57 { break }
58 v = v*10 + (c-48); p = p + 1 }
59 if neg == 1 { return 0 - v }
60 return v
61 }
62 i = i + 1 }
63 return 0 - 999999 }
64
65func chk(name: *u8, got: i64, want: i64, tol: i64, pass: *i64, fail: *i64) -> i64 {
66 var d: i64 = got - want
67 if d < 0 { d = 0 - d }
68 gw(" " as *u8); gw(name); gw(": got=" as *u8); gn(got); gw(" oracle=" as *u8); gn(want)
69 gw(" |d|=" as *u8); gn(d)
70 if d <= tol { pass[0] = pass[0] + 1; gw(" PASS\n" as *u8) } else { fail[0] = fail[0] + 1; gw(" FAIL\n" as *u8) }
71 return 0 }
72
73func main() -> i64 {
74 gw("=== nx_bd_calc_gate: sovereign BD-PWL vs the (retired-to-oracle) python cubic ===\n" as *u8)
75 let ctr: *i64 = sys_mmap(32) as *i64 // [0]=pass [1]=fail
76 let pass: *i64 = ctr
77 let fail: *i64 = ((ctr as i64) + 8) as *i64
78 let km: *i64 = sys_mmap(16*8) as *i64
79 let pm: *i64 = sys_mmap(16*8) as *i64
80 // foreman PRE (anchor)
81 km[0]=7307720; pm[0]=47295; km[1]=3327105; pm[1]=42051; km[2]=1975775; pm[2]=39200
82 km[3]=1350370; pm[3]=37199; km[4]=893455; pm[4]=34854
83 wpts("_build/_bdg_fa.pts" as *u8, km, pm, 5)
84 // foreman LAM4 (test)
85 km[0]=5725155; pm[0]=46026; km[1]=2421400; pm[1]=41120; km[2]=1444215; pm[2]=38537
86 km[3]=970430; pm[3]=36575; km[4]=647200; pm[4]=34361
87 wpts("_build/_bdg_ft.pts" as *u8, km, pm, 5)
88 // akiyo
89 km[0]=1305685; pm[0]=47381; km[1]=615510; pm[1]=43805; km[2]=382230; pm[2]=41466
90 km[3]=272815; pm[3]=39636; km[4]=184065; pm[4]=37659
91 wpts("_build/_bdg_aa.pts" as *u8, km, pm, 5)
92 km[0]=1079355; pm[0]=46896; km[1]=493305; pm[1]=43288; km[2]=309815; pm[2]=40943
93 km[3]=219105; pm[3]=39071; km[4]=150605; pm[4]=37104
94 wpts("_build/_bdg_at.pts" as *u8, km, pm, 5)
95 // bus
96 km[0]=12471810; pm[0]=48230; km[1]=7650540; pm[1]=42397; km[2]=5551950; pm[2]=39140
97 km[3]=4350990; pm[3]=36872; km[4]=3277735; pm[4]=34263
98 wpts("_build/_bdg_ba.pts" as *u8, km, pm, 5)
99 km[0]=10836025; pm[0]=46392; km[1]=6287645; pm[1]=40584; km[2]=4460840; pm[2]=37443
100 km[3]=3394150; pm[3]=35254; km[4]=2487455; pm[4]=32909
101 wpts("_build/_bdg_bt.pts" as *u8, km, pm, 5)
102 // mobile
103 km[0]=14474955; pm[0]=48446; km[1]=9520400; pm[1]=42527; km[2]=7098550; pm[2]=38940
104 km[3]=5689975; pm[3]=36380; km[4]=4345180; pm[4]=33543
105 wpts("_build/_bdg_ma.pts" as *u8, km, pm, 5)
106 km[0]=13153750; pm[0]=46760; km[1]=8172935; pm[1]=40621; km[2]=5897515; pm[2]=37116
107 km[3]=4530170; pm[3]=34603; km[4]=3316090; pm[4]=31957
108 wpts("_build/_bdg_mt.pts" as *u8, km, pm, 5)
109
110 let bf: i64 = run_bd("_build/_bdg_fa.pts" as *u8, "_build/_bdg_ft.pts" as *u8)
111 chk("T1 foreman" as *u8, bf, 0-148, BDG_TOL, pass, fail)
112 chk("T2 akiyo" as *u8, run_bd("_build/_bdg_aa.pts" as *u8, "_build/_bdg_at.pts" as *u8), 0-102, BDG_TOL, pass, fail)
113 chk("T3 bus" as *u8, run_bd("_build/_bdg_ba.pts" as *u8, "_build/_bdg_bt.pts" as *u8), 0-29, BDG_TOL, pass, fail)
114 chk("T4 mobile" as *u8, run_bd("_build/_bdg_ma.pts" as *u8, "_build/_bdg_mt.pts" as *u8), 0-13, BDG_TOL, pass, fail)
115 chk("T5 identity" as *u8, run_bd("_build/_bdg_fa.pts" as *u8, "_build/_bdg_fa.pts" as *u8), 0, 0, pass, fail)
116 // T6 reverse == exact algebraic inverse of the forward: inv_permille = -bd*1000/(1000+bd)
117 let rev: i64 = run_bd("_build/_bdg_ft.pts" as *u8, "_build/_bdg_fa.pts" as *u8)
118 let inv: i64 = (0 - bf) * 1000 / (1000 + bf)
119 chk("T6 reverse=algebraic-inverse" as *u8, rev, inv, BDG_TOL_INV, pass, fail)
120 gw("NX-BD-CALC-GATE passed " as *u8); gn(pass[0]); gw("/" as *u8); gn(pass[0]+fail[0])
121 if fail[0] == 0 { gw(" verdict=GREEN (tolerance derived: max measured delta 2.1 permille + margin)\n" as *u8); sys_exit(0); return 0 }
122 gw(" verdict=RED\n" as *u8); sys_exit(1); return 1 }