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 }