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}