code wiki / _hdl_build / _eval_factor_authored.nx

_eval_factor_authored.nx source

↩ module page · 160 lines · 7088 B

1// AUTHORED BY THE NISHI BUILDER (nx_module_author_data eval-factor template) -- EVAL rung 3. 2// argv: [1]=triangle log [2]=genrec log [3]=factor out (default knowledge/status/eval_factor.log) 3import "nx_syscalls.nx" 4func _ef_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 } 5func _ef_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 } 6func _ef_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 } 7func _ef_find(buf: *u8, p: i64, e: i64, pat: *u8) -> i64 { 8 var pl: i64=0 9 while pat[pl]!=(0 as u8) { pl=pl+1 } 10 var i: i64=p 11 while i+pl<=e { 12 var j: i64=0 13 var hit: i64=1 14 while j<pl { if buf[i+j]!=pat[j] { hit=0; j=pl } j=j+1 } 15 if hit==1 { return i+pl } 16 i=i+1 17 } 18 return 0-1 19} 20func _ef_poolfind(pool: *u8, poff: *i64, cnt: i64, buf: *u8, p: i64, n: i64) -> i64 { 21 var s: i64=0 22 while s<cnt { 23 var i: i64=0 24 var ok: i64=1 25 while i<n { if pool[poff[s]+i]!=buf[p+i] { ok=0; i=n } if ok==1 { if pool[poff[s]+i]==(0 as u8) { ok=0; i=n } } i=i+1 } 26 if ok==1 { if pool[poff[s]+n]==(0 as u8) { return s } } 27 s=s+1 28 } 29 return 0-1 30} 31func _ef_pooladd(pool: *u8, poff: *i64, ppos: *i64, cnt: i64, buf: *u8, p: i64, n: i64) -> i64 { 32 poff[cnt]=ppos[0] 33 var i: i64=0 34 while i<n { pool[ppos[0]+i]=buf[p+i]; i=i+1 } 35 pool[ppos[0]+n]=0 36 ppos[0]=ppos[0]+n+1 37 return cnt 38} 39func main(argc: i64, argv: *i64) -> i64 { 40 var trip: *u8 = "knowledge/status/eval_triangle.log" as *u8 41 var genp: *u8 = "knowledge/status/eval_genrec.log" as *u8 42 var outp: *u8 = "knowledge/status/eval_factor.log" as *u8 43 if argc>=2 { trip = argv[1] as *u8 } 44 if argc>=3 { genp = argv[2] as *u8 } 45 if argc>=4 { outp = argv[3] as *u8 } 46 let tl: *i64 = sys_mmap(8) as *i64 47 let tb: *u8 = sys_read_file(trip, tl) 48 if tl[0] < 5 { _ef_w(1, "FACTOR-GATE FAIL triangle-unreadable\n" as *u8); sys_exit(1); return 1 } 49 let gl: *i64 = sys_mmap(8) as *i64 50 let gb: *u8 = sys_read_file(genp, gl) 51 if gl[0] < 5 { _ef_w(1, "FACTOR-GATE FAIL genrec-unreadable\n" as *u8); sys_exit(1); return 1 } 52 let ipool: *u8 = sys_mmap(262144) 53 let ioff: *i64 = sys_mmap(131072) as *i64 54 let ipos: *i64 = sys_mmap(8) as *i64 55 let icls: *i64 = sys_mmap(131072) as *i64 56 var icnt: i64=0 57 var p: i64=0 58 while p < tl[0] { 59 let e: i64 = _ef_eol(tb, p, tl[0]) 60 let ip: i64 = _ef_find(tb, p, e, "img=" as *u8) 61 let vp: i64 = _ef_find(tb, p, e, "verdict=" as *u8) 62 if ip>=0 { if vp>=0 { 63 var ie: i64 = ip 64 var go1: i64=1 65 while go1==1 { if ie>=e { go1=0 } if go1==1 { if tb[ie]==(32 as u8) { go1=0 } if tb[ie]!=(32 as u8) { ie=ie+1 } } } 66 var cls: i64 = 0 67 let vlen: i64 = e - vp 68 if vlen==8 { if tb[vp+4]==(71 as u8) { cls=1 } } 69 if vlen==7 { if tb[vp+4]==(66 as u8) { cls=2 } } 70 var k: i64 = _ef_poolfind(ipool, ioff, icnt, tb, ip, ie-ip) 71 if k<0 { k=_ef_pooladd(ipool, ioff, ipos, icnt, tb, ip, ie-ip); icnt=icnt+1 } 72 icls[k]=cls 73 } } 74 p = e + 1 75 } 76 let fpool: *u8 = sys_mmap(1048576) 77 let foff: *i64 = sys_mmap(262144) as *i64 78 let fpos: *i64 = sys_mmap(8) as *i64 79 let fgood: *i64 = sys_mmap(262144) as *i64 80 let fbad: *i64 = sys_mmap(262144) as *i64 81 var fcnt: i64=0 82 var ngood: i64=0; var nbad: i64=0; var nign: i64=0; var nun: i64=0 83 var q: i64=0 84 while q < gl[0] { 85 let e2: i64 = _ef_eol(gb, q, gl[0]) 86 let ip2: i64 = _ef_find(gb, q, e2, "img=" as *u8) 87 if ip2>=0 { 88 var ie2: i64 = ip2 89 var go2: i64=1 90 while go2==1 { if ie2>=e2 { go2=0 } if go2==1 { if gb[ie2]==(32 as u8) { go2=0 } if gb[ie2]!=(32 as u8) { ie2=ie2+1 } } } 91 let k2: i64 = _ef_poolfind(ipool, ioff, icnt, gb, ip2, ie2-ip2) 92 var cls2: i64 = 0-1 93 if k2>=0 { cls2=icls[k2] } 94 if k2<0 { nun=nun+1 } 95 if cls2==0 { nign=nign+1 } 96 if cls2==1 { ngood=ngood+1 } 97 if cls2==2 { nbad=nbad+1 } 98 if cls2>=1 { 99 var tp: i64 = q 100 while tp < e2 { 101 var sk: i64=1 102 while sk==1 { if tp>=e2 { sk=0 } if sk==1 { if gb[tp]!=(32 as u8) { sk=0 } if gb[tp]==(32 as u8) { tp=tp+1 } } } 103 if tp < e2 { 104 let ts: i64 = tp 105 var sc2: i64=1 106 while sc2==1 { if tp>=e2 { sc2=0 } if sc2==1 { if gb[tp]==(32 as u8) { sc2=0 } if gb[tp]!=(32 as u8) { tp=tp+1 } } } 107 let tn: i64 = tp - ts 108 var haseq: i64=0 109 var hi: i64=0 110 while hi<tn { if gb[ts+hi]==(61 as u8) { haseq=1 } hi=hi+1 } 111 var isimg: i64=0 112 if tn>=4 { if gb[ts]==(105 as u8) { if gb[ts+1]==(109 as u8) { if gb[ts+2]==(103 as u8) { if gb[ts+3]==(61 as u8) { isimg=1 } } } } } 113 if haseq==1 { if isimg==0 { 114 var fk: i64 = _ef_poolfind(fpool, foff, fcnt, gb, ts, tn) 115 if fk<0 { fk=_ef_pooladd(fpool, foff, fpos, fcnt, gb, ts, tn); fgood[fk]=0; fbad[fk]=0; fcnt=fcnt+1 } 116 if cls2==1 { fgood[fk]=fgood[fk]+1 } 117 if cls2==2 { fbad[fk]=fbad[fk]+1 } 118 } } 119 } 120 } 121 } 122 } 123 q = e2 + 1 124 } 125 let logfd: i64 = sys_openat_append(outp, 0x1a4) 126 var fi: i64=0 127 while fi<fcnt { 128 var fdi: i64=1 129 while fdi>=0 { 130 var ofd: i64=1 131 if fdi==0 { ofd=logfd } 132 _ef_w(ofd, "FACTOR " as *u8) 133 _ef_w(ofd, (fpool as i64 + foff[fi]) as *u8) 134 _ef_w(ofd, " good=" as *u8); _ef_wn(ofd, fgood[fi]) 135 _ef_w(ofd, " bad=" as *u8); _ef_wn(ofd, fbad[fi]) 136 let tot: i64 = fgood[fi]+fbad[fi] 137 var pm2: i64 = 0 138 if tot>0 { pm2 = (fgood[fi]*1000)/tot } 139 _ef_w(ofd, " permil=" as *u8); _ef_wn(ofd, pm2) 140 _ef_w(ofd, "\n" as *u8) 141 fdi=fdi-1 142 } 143 fi=fi+1 144 } 145 var fdj: i64=1 146 while fdj>=0 { 147 var ofd2: i64=1 148 if fdj==0 { ofd2=logfd } 149 _ef_w(ofd2, "FACTOR-SUMMARY factors=" as *u8); _ef_wn(ofd2, fcnt) 150 _ef_w(ofd2, " imgs-good=" as *u8); _ef_wn(ofd2, ngood) 151 _ef_w(ofd2, " imgs-bad=" as *u8); _ef_wn(ofd2, nbad) 152 _ef_w(ofd2, " imgs-ignored=" as *u8); _ef_wn(ofd2, nign) 153 _ef_w(ofd2, " imgs-unmatched=" as *u8); _ef_wn(ofd2, nun) 154 _ef_w(ofd2, "\n" as *u8) 155 fdj=fdj-1 156 } 157 sys_close(logfd) 158 sys_exit(0) 159 return 0 160}