code wiki / _hdl_build / nx_analyst_store_gate.nx

nx_analyst_store_gate.nx source

↩ module page · 124 lines · 5984 B

1// nx_analyst_store_gate.nx -- GATE proving the analytics run on REAL STORED DATA (round-trip through the 2// sovereign seg_store). Writes a known dataset (rows "size<TAB>age<TAB>price", price=5*size-2*age+noise) into 3// a FRESH per-run store, reads it back via ss_scan, extracts columns, and analyzes them -- the report must 4// (a) profile every stored column, (b) name size as the strongest ASSOCIATION with price. Also asserts field-parse 5// correctness + row-count round-trip. expect_exit: 0 license_tier: ORIGINAL 6import "nx_syscalls.nx" 7import "_hdl_build/nx_analyst_store.nx" 8 9func sp(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(1,s,n); return 0 } 10func snn(v: i64) -> i64 { var m: i64=v; if m<0{sp("-" as *u8);m=0-m} let t:*u8=sys_mmap(24); 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} let o:*u8=sys_mmap(24); var i:i64=0; while i<k{o[i]=t[k-1-i];i=i+1} sys_write(1,o,k); return 0 } 11func shas(hay: *u8, n: i64, needle: *u8) -> i64 { 12 var nl: i64 = 0 13 while needle[nl] != (0 as u8) { nl = nl + 1 } 14 var i: i64 = 0 15 while i + nl <= n { var j: i64 = 0; var eq: i64 = 1; while j < nl { if hay[i+j] != needle[j] { eq = 0; break } j = j + 1 } if eq == 1 { return 1 } i = i + 1 } 16 return 0 17} 18func lcg(s: i64) -> i64 { return (s * 1103515245 + 12345) & 0x7fffffff } 19// append decimal v to buf at o; return new o 20func scatn(buf: *u8, o: i64, v: i64) -> i64 { 21 var oo: i64 = o 22 var m: i64 = v 23 if m < 0 { buf[oo] = 45 as u8; oo = oo + 1; m = 0 - m } 24 let t: *u8 = sys_mmap(24) 25 var k: i64 = 0 26 if m == 0 { t[0] = 48 as u8; k = 1 } 27 while m > 0 { t[k] = (48 + (m % 10)) as u8; m = m / 10; k = k + 1 } 28 var i: i64 = k - 1 29 while i >= 0 { buf[oo] = t[i]; oo = oo + 1; i = i - 1 } 30 return oo 31} 32 33func main() -> i64 { 34 sp("=== nx_analyst_store_gate (analytics on REAL stored data) ===\n" as *u8) 35 var pass: i64 = 0 36 var fail: i64 = 0 37 38 // T0 field-parse correctness (independent of the store) 39 let sample: *u8 = "125\t18\t-609" as *u8 40 var t0: i64 = 1 41 if asr_field_i64(sample, 11, 0) != 125 { t0 = 0 } 42 if asr_field_i64(sample, 11, 1) != 18 { t0 = 0 } 43 if asr_field_i64(sample, 11, 2) != (0 - 609) { t0 = 0 } 44 if t0 == 1 { pass = pass + 1 } else { fail = fail + 1; sp("T0 FAIL field parse\n" as *u8) } 45 46 // build a FRESH per-run store prefix: /tmp/anstore_<now_us> 47 let prefix: *u8 = sys_mmap(128) 48 var po: i64 = 0 49 let pfx: *u8 = "/tmp/anstore_" as *u8 50 while pfx[po] != (0 as u8) { prefix[po] = pfx[po]; po = po + 1 } 51 let now: i64 = sys_now_us() 52 po = scatn(prefix, po, now) 53 prefix[po] = 0 as u8 54 55 // write N rows under key "dsrow". N<=256: the seg_store scan hard-caps at 256 results/key (documented 56 // in asr_load_field) -- 250 proves a CLEAN full round-trip within the store contract; sharded-load for 57 // >256 is the named scale follow-on. 58 let n: i64 = 250 59 let w: *i64 = ss_begin() 60 let row: *u8 = sys_mmap(64) 61 var s: i64 = 11 62 var i: i64 = 0 63 while i < n { 64 s = lcg(s) 65 let size: i64 = 50 + (s % 150) 66 s = lcg(s) 67 let age: i64 = s % 40 68 s = lcg(s) 69 let price: i64 = 5 * size - 2 * age + (s % 20) 70 var ro: i64 = 0 71 ro = scatn(row, ro, size) 72 row[ro] = 9 as u8; ro = ro + 1 73 ro = scatn(row, ro, age) 74 row[ro] = 9 as u8; ro = ro + 1 75 ro = scatn(row, ro, price) 76 ss_add(w, 1, "dsrow" as *u8, row, ro) 77 i = i + 1 78 } 79 let cr: i64 = ss_commit(prefix, w, now) 80 sp("committed rc=" as *u8); snn(cr); sp(" prefix="); sp(prefix); sp("\n" as *u8) 81 82 // T1 row-count round-trip: load field 0 -> exactly n rows back 83 let col: *i64 = sys_mmap(8 * (n + 16)) as *i64 84 let got: i64 = asr_load_field(prefix, "dsrow" as *u8, 0, col, n + 8) 85 sp("rows read back=" as *u8); snn(got); sp("\n" as *u8) 86 if got == n { pass = pass + 1 } else { fail = fail + 1; sp("T1 FAIL row-count round-trip\n" as *u8) } 87 88 // T2 a stored value parsed correctly: first row's size is in [50,199] 89 var t2: i64 = 1 90 if col[0] < 50 { t2 = 0 } 91 if col[0] > 199 { t2 = 0 } 92 if t2 == 1 { pass = pass + 1 } else { fail = fail + 1; sp("T2 FAIL stored value range\n" as *u8) } 93 94 // T3 FULL analyze on stored data -> report names size as the key driver of price 95 let names: *i64 = sys_mmap(8 * 3) as *i64 96 names[0] = "size" as *u8 as i64 97 names[1] = "age" as *u8 as i64 98 names[2] = "price" as *u8 as i64 99 let out: *u8 = sys_mmap(16384) 100 let rw: i64 = asr_analyze_stored(prefix, "dsrow" as *u8, names, 3, 2, n + 8, out, 16384) 101 sp(out); sp("\n---\n" as *u8) 102 var t3: i64 = 1 103 if rw <= 0 { t3 = 0 } 104 if shas(out, rw, "DATASET ANALYSIS" as *u8) == 0 { t3 = 0 } 105 if shas(out, rw, "DATA PROFILE: size" as *u8) == 0 { t3 = 0 } 106 if shas(out, rw, "DATA PROFILE: price" as *u8) == 0 { t3 = 0 } 107 if shas(out, rw, "size has the strongest association" as *u8) == 0 { t3 = 0 } 108 if t3 == 1 { pass = pass + 1 } else { fail = fail + 1; sp("T3 FAIL analyze-stored\n" as *u8) } 109 110 sp("pass=" as *u8); snn(pass); sp(" fail=" as *u8); snn(fail); sp("\n" as *u8) 111 let log: *u8 = sys_mmap(128) 112 var lo: i64 = 0 113 let pre: *u8 = "ANALYSTSTORE authored=organ verdict=" as *u8 114 var pi: i64 = 0 115 while pre[pi] != (0 as u8) { log[lo] = pre[pi]; lo = lo + 1; pi = pi + 1 } 116 if fail == 0 { let g: *u8 = "GREEN\n" as *u8; var gi: i64 = 0; while g[gi] != (0 as u8) { log[lo] = g[gi]; lo = lo + 1; gi = gi + 1 } } else { let r: *u8 = "RED\n" as *u8; var ri: i64 = 0; while r[ri] != (0 as u8) { log[lo] = r[ri]; lo = lo + 1; ri = ri + 1 } } 117 let fd: i64 = sys_openat_wr("knowledge/status/analyst_store.log" as *u8, 0x1A4) 118 if fd >= 0 { sys_write(fd, log, lo); sys_close(fd) } 119 120 if fail == 0 { sp("=== ANALYST-STORE-GATE verdict=GREEN ===\n" as *u8); sys_exit(0); return 0 } 121 sp("=== ANALYST-STORE-GATE verdict=RED ===\n" as *u8) 122 sys_exit(1) 123 return 1 124}