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}