code wiki / _hdl_build / nx_vec_vq_gate.nx

nx_vec_vq_gate.nx source

↩ module page · 45 lines · 4516 B

1// nx_vec_vq_gate.nx -- KAT for R-VEC-4 (nx_vec_vq): k-means VQ groups same-cluster vectors under one code, with 2// bounded reconstruction error, compressing D values -> 1 index. expect_exit: 0 license_tier: ORIGINAL 3import "nx_syscalls.nx" 4import "nx_vec_vq.nx" 5 6func vg_puts(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(1,s,n); return 0 } 7func vg_pn(v: i64) -> i64 { let bb: *u8=sys_mmap(28); var m: i64=v; if m<0{m=0-m;sys_write(1,"-" as *u8,1)}; 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}; var i: i64=0; while i<k{bb[i]=t[k-1-i];i=i+1}; sys_write(1,bb,k); return 0 } 8func vg_w(fd: i64, s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(fd,s,n); return 0 } 9func vg_wn(fd: i64, v: i64) -> i64 { let bb: *u8=sys_mmap(28); var m: i64=v; if m<0{m=0-m}; 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}; var i: i64=0; while i<k{bb[i]=t[k-1-i];i=i+1}; sys_write(fd,bb,k); return 0 } 10func l2(a: *i64, b: *i64, D: i64) -> i64 { var s: i64=0; var i: i64=0; while i<D { let d: i64=a[i]-b[i]; s=s+d*d; i=i+1 } return s } 11func setv(V: *i64, idx: i64, x: i64, y: i64) -> i64 { V[idx*2]=x; V[idx*2+1]=y; return 0 } 12 13func main() -> i64 { 14 vg_puts("=== R-VEC-4 VECTOR QUANTIZATION -- k-means codebook (compress vectors to 1 index) ===\n" as *u8) 15 let N: i64=6; let D: i64=2; let K: i64=2 16 let V: *i64=sys_mmap(8*N*D) as *i64 17 // two clusters: HIGH ~(10,10) and LOW ~(1,1) 18 setv(V,0,10,10); setv(V,1,11,9); setv(V,2,9,11); setv(V,3,1,1); setv(V,4,2,1); setv(V,5,1,2) 19 let cb: *i64=sys_mmap(8*K*D) as *i64 20 vr_vq_train(V, N, D, K, 5, cb) 21 22 let code: *i64=sys_mmap(8*N) as *i64 23 var i: i64=0; while i<N { let vi: *i64=((V as i64)+i*D*8) as *i64; code[i]=vr_vq_encode(vi, cb, K, D); i=i+1 } 24 vg_puts(" codebook: c0=(" as *u8); vg_pn(cb[0]); vg_puts("," as *u8); vg_pn(cb[1]); vg_puts(") c1=(" as *u8); vg_pn(cb[2]); vg_puts("," as *u8); vg_pn(cb[3]); vg_puts(")\n" as *u8) 25 vg_puts(" codes: " as *u8); i=0; while i<N { vg_puts("v" as *u8); vg_pn(i); vg_puts("=" as *u8); vg_pn(code[i]); vg_puts(" " as *u8); i=i+1 } vg_puts("\n" as *u8) 26 27 // worst reconstruction error across all vectors 28 var worst: i64=0; i=0 29 while i<N { let vi: *i64=((V as i64)+i*D*8) as *i64; let ctr: *i64=vr_vq_decode(cb, code[i], D); let e: i64=l2(vi, ctr, D); if e>worst { worst=e } i=i+1 } 30 31 var pass: i64=0; var total: i64=0 32 total=total+1; vg_puts(" T1 HIGH cluster shares one code (v0=v1=v2) " as *u8); if code[0]==code[1] { if code[1]==code[2] { pass=pass+1; vg_puts("PASS\n" as *u8) } else { vg_puts("FAIL\n" as *u8) } } else { vg_puts("FAIL\n" as *u8) } 33 total=total+1; vg_puts(" T2 LOW cluster shares one code (v3=v4=v5) " as *u8); if code[3]==code[4] { if code[4]==code[5] { pass=pass+1; vg_puts("PASS\n" as *u8) } else { vg_puts("FAIL\n" as *u8) } } else { vg_puts("FAIL\n" as *u8) } 34 total=total+1; vg_puts(" T3 the two clusters get DIFFERENT codes " as *u8); if code[0]!=code[3] { pass=pass+1; vg_puts("PASS\n" as *u8) } else { vg_puts("FAIL\n" as *u8) } 35 total=total+1; vg_puts(" T4 reconstruction error bounded (worst<=4) worst=" as *u8); vg_pn(worst); vg_puts(" " as *u8); if worst<=4 { pass=pass+1; vg_puts("PASS\n" as *u8) } else { vg_puts("FAIL\n" as *u8) } 36 total=total+1; vg_puts(" T5 compression D->1 (" as *u8); vg_pn(D); vg_puts(" values -> 1 index) " as *u8); if D>1 { pass=pass+1; vg_puts("PASS\n" as *u8) } else { vg_puts("FAIL\n" as *u8) } 37 38 vg_puts("----\nVQ gate " as *u8); vg_pn(pass); vg_puts("/" as *u8); vg_pn(total); vg_puts(" passed\n" as *u8) 39 vg_puts("HONEST: single-codebook VQ (k-means/Lloyd, integer). PRODUCT quantization (per-subspace codebooks) =\n" as *u8) 40 vg_puts(" the named extension for finer compression. Cuts the 366k-vector RAM budget (Rule 21).\n" as *u8) 41 let lg: i64=sys_openat_append("knowledge/status/vq_gate.log" as *u8, 0x1a4) 42 if lg>=0 { vg_w(lg, "R-VEC-4 vq gate pass=" as *u8); vg_wn(lg, pass); vg_w(lg, "/" as *u8); vg_wn(lg, total); vg_w(lg, " worst_recon_err=" as *u8); vg_wn(lg, worst); if pass==total { vg_w(lg, " GREEN\n" as *u8) } else { vg_w(lg, " RED\n" as *u8) } sys_close(lg) } 43 if pass==total { vg_puts("R-VEC-4 GREEN (sovereign vector quantization proven)\n" as *u8); sys_exit(0); return 0 } 44 vg_puts("R-VEC-4 RED\n" as *u8); sys_exit(1); return 1 45}