nx_blockmax_wand_gate.nx source
↩ module page · 60 lines · 4126 B
1// nx_blockmax_wand_gate.nx -- proves block-max pruning returns the EXACT top-k as exhaustive scoring while SCORING
2// FEWER docs. Fixture: 3 query terms, per-(term,doc) impacts; k=3. license_tier: ORIGINAL
3import "nx_blockmax_wand.nx"
4import "nx_gate.nx"
5
6func gwf(fd: i64, s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} if fd>=0 { sys_write(fd,s,n) } return 0 }
7func g_sort_desc(a: *i64, n: i64) -> i64 { var i: i64=0; while i<n { var j: i64=0; while j<n-1 { if a[j]<a[j+1] { let t: i64=a[j]; a[j]=a[j+1]; a[j+1]=t } j=j+1 } i=i+1 } return 0 }
8func g_sort_asc(a: *i64, n: i64) -> i64 { var i: i64=0; while i<n { var j: i64=0; while j<n-1 { if a[j]>a[j+1] { let t: i64=a[j]; a[j]=a[j+1]; a[j+1]=t } j=j+1 } i=i+1 } return 0 }
9func g_eq(a: *i64, b: *i64, n: i64) -> i64 { var i: i64=0; while i<n { if a[i]!=b[i] { return 0 } i=i+1 } return 1 }
10
11func main() -> i64 {
12 gw("=== nx_blockmax_wand_gate: block-max top-k pruning (EXACT vs exhaustive + measured skips) ===\n" as *u8)
13 var pass: i64=0; var tot: i64=0
14
15 let d0: *i64=sys_mmap(8*5) as *i64; let i0: *i64=sys_mmap(8*5) as *i64
16 d0[0]=1;d0[1]=3;d0[2]=5;d0[3]=7;d0[4]=9; i0[0]=5;i0[1]=2;i0[2]=8;i0[3]=1;i0[4]=3
17 let d1: *i64=sys_mmap(8*5) as *i64; let i1: *i64=sys_mmap(8*5) as *i64
18 d1[0]=2;d1[1]=3;d1[2]=6;d1[3]=7;d1[4]=10; i1[0]=4;i1[1]=6;i1[2]=2;i1[3]=7;i1[4]=1
19 let d2: *i64=sys_mmap(8*4) as *i64; let i2: *i64=sys_mmap(8*4) as *i64
20 d2[0]=3;d2[1]=5;d2[2]=8;d2[3]=9; i2[0]=9;i2[1]=3;i2[2]=2;i2[3]=4
21
22 let nt: i64=3
23 let td: *i64=sys_mmap(8*3) as *i64; let ti: *i64=sys_mmap(8*3) as *i64; let tc: *i64=sys_mmap(8*3) as *i64; let tbm: *i64=sys_mmap(8*3) as *i64
24 td[0]=d0 as i64; td[1]=d1 as i64; td[2]=d2 as i64
25 ti[0]=i0 as i64; ti[1]=i1 as i64; ti[2]=i2 as i64
26 tc[0]=5; tc[1]=5; tc[2]=4
27 let bm0: *i64=sys_mmap(8*8) as *i64; bmw_block_max(i0,5,bm0)
28 let bm1: *i64=sys_mmap(8*8) as *i64; bmw_block_max(i1,5,bm1)
29 let bm2: *i64=sys_mmap(8*8) as *i64; bmw_block_max(i2,4,bm2)
30 tbm[0]=bm0 as i64; tbm[1]=bm1 as i64; tbm[2]=bm2 as i64
31
32 let ud: *i64=sys_mmap(8*9) as *i64
33 ud[0]=1;ud[1]=2;ud[2]=3;ud[3]=5;ud[4]=6;ud[5]=7;ud[6]=8;ud[7]=9;ud[8]=10
34 let nu: i64=9; let k: i64=3
35
36 let tde: *i64=sys_mmap(8*3) as *i64; let tse: *i64=sys_mmap(8*3) as *i64
37 bmw_exhaustive(td,ti,tc,nt,ud,nu,k,tde,tse)
38 let tdb: *i64=sys_mmap(8*3) as *i64; let tsb: *i64=sys_mmap(8*3) as *i64
39 let scored: i64 = bmw_blockmax(td,ti,tc,tbm,nt,ud,nu,k,tdb,tsb)
40
41 g_sort_desc(tse,3); g_sort_desc(tsb,3)
42 tot=tot+1; if g_eq(tse,tsb,3)==1 { pass=pass+1; gw(" [PASS] " as *u8) } else { gw(" [FAIL] " as *u8) }
43 gw("T1 block-max top-3 scores == exhaustive (bm=[" as *u8); gn(tsb[0]); gw("," as *u8); gn(tsb[1]); gw("," as *u8); gn(tsb[2]); gw("], exhaustive=[" as *u8); gn(tse[0]); gw("," as *u8); gn(tse[1]); gw("," as *u8); gn(tse[2]); gw("])\n" as *u8)
44
45 tot=tot+1; if scored<nu { pass=pass+1; gw(" [PASS] " as *u8) } else { gw(" [FAIL] " as *u8) }
46 gw("T2 pruning SKIPS: scored " as *u8); gn(scored); gw("/" as *u8); gn(nu); gw(" docs (skipped " as *u8); gn(nu-scored); gw(")\n" as *u8)
47
48 tot=tot+1; if tsb[0]==17 { pass=pass+1; gw(" [PASS] " as *u8) } else { gw(" [FAIL] " as *u8) }
49 gw("T3 top score correct (17 = doc3: 2+6+9)\n" as *u8)
50
51 g_sort_asc(tde,3); g_sort_asc(tdb,3)
52 tot=tot+1; if g_eq(tde,tdb,3)==1 { pass=pass+1; gw(" [PASS] " as *u8) } else { gw(" [FAIL] " as *u8) }
53 gw("T4 top-3 doc SET identical (pruning is EXACT, not approximate)\n" as *u8)
54
55 gw("\n=== nx_blockmax_wand_gate " as *u8); gn(pass); gw("/" as *u8); gn(tot); gw(" ===\n" as *u8)
56 let lfd: i64=sys_openat_append("knowledge/status/blockmax_wand_gate.log" as *u8, 420)
57 if pass==tot { gwf(lfd, "BLOCKMAX-WAND-GATE verdict=GREEN exact-topk pruned\n" as *u8); if lfd>=0 { sys_close(lfd) } gw("BLOCKMAX-WAND GREEN -- exact top-k, fewer docs scored; the query-speed lever (composes the 256-doc block maxes)\n" as *u8); sys_exit(0); return 0 }
58 gwf(lfd, "BLOCKMAX-WAND-GATE verdict=RED\n" as *u8); if lfd>=0 { sys_close(lfd) }
59 gw("BLOCKMAX-WAND RED\n" as *u8); sys_exit(1); return 1
60}