code wiki / _hdl_build / _eval_triangle_authored.nx

_eval_triangle_authored.nx source

↩ module page · 134 lines · 6040 B

1// AUTHORED BY THE NISHI BUILDER (nx_module_author_data eval-triangle template) -- ELDERMIG EVAL rung 1. 2// Triangulation: M(math) + V(local model) + O(operator flag) -> pattern verdicts; append-only Nishi log. 3// argv: [1]=lanes file (default knowledge/status/eval_lanes.log) [2]=good-threshold permil (default 700) 4// [3]=triangle log (default knowledge/status/eval_triangle.log) 5import "nx_syscalls.nx" 6func _ev_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 } 7func _ev_wn(fd: i64, v: i64) -> i64 { let bb: *u8=sys_mmap(28); var m: i64=v; if m<0{m=0-m; sys_write(fd,"-" as *u8,1)}; let t: *u8=sys_mmap(28); var k: i64=0; if m==0{t[0]=48;k=1}; while m>0{t[k]=48+(m%10);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 } 8func _ev_atoi(s: *u8) -> i64 { var v: i64=0; var i: i64=0; while s[i]!=(0 as u8) { let c: i64=s[i]; if c<48 { return v } if c>57 { return v } v=v*10+(c-48); i=i+1 } return v } 9func _ev_eol(buf: *u8, p: i64, L: i64) -> i64 { var e: i64=p; while e<L { if buf[e]==(10 as u8) { return e } e=e+1 } return L } 10// find pat inside [p,e); return index after pat or 0-1 11func _ev_find(buf: *u8, p: i64, e: i64, pat: *u8) -> i64 { 12 var pl: i64=0 13 while pat[pl]!=(0 as u8) { pl=pl+1 } 14 var i: i64=p 15 while i+pl<=e { 16 var j: i64=0 17 var hit: i64=1 18 while j<pl { if buf[i+j]!=pat[j] { hit=0; j=pl } j=j+1 } 19 if hit==1 { return i+pl } 20 i=i+1 21 } 22 return 0-1 23} 24// id equality: ids[off..] (0-term) vs buf[p..p+n) 25func _ev_ideq(ids: *u8, off: i64, buf: *u8, p: i64, n: i64) -> i64 { 26 var i: i64=0 27 while i<n { if ids[off+i]!=buf[p+i] { return 0 } if ids[off+i]==(0 as u8) { return 0 } i=i+1 } 28 if ids[off+n]==(0 as u8) { return 1 } 29 return 0 30} 31func main(argc: i64, argv: *i64) -> i64 { 32 var lanes: *u8 = "knowledge/status/eval_lanes.log" as *u8 33 var thr: i64 = 700 34 var logp: *u8 = "knowledge/status/eval_triangle.log" as *u8 35 if argc>=2 { lanes = argv[1] as *u8 } 36 if argc>=3 { thr = _ev_atoi(argv[2] as *u8) } 37 if argc>=4 { logp = argv[3] as *u8 } 38 let lenp: *i64 = sys_mmap(8) as *i64 39 let buf: *u8 = sys_read_file(lanes, lenp) 40 let L: i64 = lenp[0] 41 if L < 5 { _ev_w(1, "TRI-GATE FAIL lanes-unreadable\n" as *u8); sys_exit(1); return 1 } 42 let ids: *u8 = sys_mmap(262144) 43 let ioff: *i64 = sys_mmap(65536) as *i64 44 let ms: *i64 = sys_mmap(65536) as *i64 45 let vs: *i64 = sys_mmap(65536) as *i64 46 let os: *i64 = sys_mmap(65536) as *i64 47 var cnt: i64=0 48 var ipos: i64=0 49 var p: i64=0 50 while p < L { 51 let e: i64 = _ev_eol(buf, p, L) 52 let ip: i64 = _ev_find(buf, p, e, "img=" as *u8) 53 let lp2: i64 = _ev_find(buf, p, e, "lane=" as *u8) 54 let sp: i64 = _ev_find(buf, p, e, "score=" as *u8) 55 if ip>=0 { if lp2>=0 { if sp>=0 { 56 var ie: i64 = ip 57 var going: i64 = 1 58 while going==1 { if ie>=e { going=0 } if going==1 { let c: i64=buf[ie]; if c==32 { going=0 } if c!=32 { ie=ie+1 } } } 59 let iln: i64 = ie - ip 60 var k: i64 = 0-1 61 var s2: i64 = 0 62 while s2<cnt { if _ev_ideq(ids, ioff[s2], buf, ip, iln)==1 { k=s2; s2=cnt } s2=s2+1 } 63 if k<0 { 64 k=cnt 65 ioff[k]=ipos 66 var ci: i64=0 67 while ci<iln { ids[ipos+ci]=buf[ip+ci]; ci=ci+1 } 68 ids[ipos+iln]=0 69 ipos=ipos+iln+1 70 ms[k]=0-1; vs[k]=0-1; os[k]=0-1 71 cnt=cnt+1 72 } 73 let sc: i64 = _ev_atoi((buf as i64 + sp) as *u8) 74 let lc: i64 = buf[lp2] 75 if lc==77 { ms[k]=sc } 76 if lc==86 { vs[k]=sc } 77 if lc==79 { os[k]=sc } 78 } } } 79 p = e + 1 80 } 81 let logfd: i64 = sys_openat_append(logp, 0x1a4) 82 var ngood: i64=0; var nbad: i64=0; var nover: i64=0; var nsm: i64=0; var nsme: i64=0; var ninc: i64=0 83 var t: i64=0 84 while t<cnt { 85 var verd: *u8 = "TRI-INCOMPLETE" as *u8 86 let m: i64=ms[t]; let v: i64=vs[t]; let o: i64=os[t] 87 var have: i64=1 88 if m<0 { have=0 } if v<0 { have=0 } if o<0 { have=0 } 89 if have==0 { ninc=ninc+1 } 90 if have==1 { 91 var mg: i64=0; if m>=thr { mg=1 } 92 var vg: i64=0; if v>=thr { vg=1 } 93 var og: i64=0; if o>=thr { og=1 } 94 let g: i64 = mg+vg+og 95 if g==3 { verd="TRI-GOOD" as *u8; ngood=ngood+1 } 96 if g==0 { verd="TRI-BAD" as *u8; nbad=nbad+1 } 97 if g>0 { if g<3 { 98 if mg==vg { verd="TRI-OPERATOR-OVERRIDE" as *u8; nover=nover+1 } 99 if mg!=vg { if og==mg { verd="TRI-SPLIT-MODEL" as *u8; nsm=nsm+1 } if og==vg { verd="TRI-SPLIT-MEASURED" as *u8; nsme=nsme+1 } } 100 } } 101 } 102 var fdi: i64=1 103 while fdi>=0 { 104 var ofd: i64=1 105 if fdi==0 { ofd=logfd } 106 _ev_w(ofd, "TRIANGLE img=" as *u8) 107 _ev_w(ofd, (ids as i64 + ioff[t]) as *u8) 108 _ev_w(ofd, " m=" as *u8); _ev_wn(ofd, m) 109 _ev_w(ofd, " v=" as *u8); _ev_wn(ofd, v) 110 _ev_w(ofd, " o=" as *u8); _ev_wn(ofd, o) 111 _ev_w(ofd, " verdict=" as *u8); _ev_w(ofd, verd); _ev_w(ofd, "\n" as *u8) 112 fdi=fdi-1 113 } 114 t=t+1 115 } 116 var fdj: i64=1 117 while fdj>=0 { 118 var ofd2: i64=1 119 if fdj==0 { ofd2=logfd } 120 _ev_w(ofd2, "TRI-SUMMARY total=" as *u8); _ev_wn(ofd2, cnt) 121 _ev_w(ofd2, " good=" as *u8); _ev_wn(ofd2, ngood) 122 _ev_w(ofd2, " bad=" as *u8); _ev_wn(ofd2, nbad) 123 _ev_w(ofd2, " override=" as *u8); _ev_wn(ofd2, nover) 124 _ev_w(ofd2, " split-model=" as *u8); _ev_wn(ofd2, nsm) 125 _ev_w(ofd2, " split-measured=" as *u8); _ev_wn(ofd2, nsme) 126 _ev_w(ofd2, " incomplete=" as *u8); _ev_wn(ofd2, ninc) 127 _ev_w(ofd2, " thr=" as *u8); _ev_wn(ofd2, thr) 128 _ev_w(ofd2, "\n" as *u8) 129 fdj=fdj-1 130 } 131 sys_close(logfd) 132 sys_exit(0) 133 return 0 134}