code wiki / _hdl_build / nx_bio_sequence.nx

nx_bio_sequence.nx source

↩ module page · 205 lines · 7738 B

1// nx_bio_sequence.nx -- SOVEREIGN EXACT molecular-biology sequence engine (science-exceed arc, rung 2// BIO-SEQUENCE; lifts the weakest domain). Exact, DETERMINISTIC DNA/RNA/protein transforms -- no float, 3// no cloud, no license: 4// transcribe DNA -> RNA (T -> U) 5// translate RNA -> protein (codon table = knowledge/registry/sci_codon_table.tsv, stop-aware) 6// revcomp DNA -> reverse complement (A<->T, C<->G, reversed) 7// gc_count exact integer G+C count 8// 9// EXCEED vs Mathematica GenomeData/SequenceAlignment (cloud-tethered, proprietary): Nishi does the core 10// transforms sovereign + offline + exact (the universal genetic code is a DATA table, not a service call). 11// Honest scope: not GenomeData's breadth -- the exact deterministic primitives every downstream bio rung 12// builds on (hardware-rung-up). 13// 14// BAKED GATE proves each transform on known sequences + a negative control (unknown codon rejected) before 15// verdict=GREEN. 16// 17// module: nishi-core.science.bio_sequence 18// depends: nishi-core.sys.syscalls 19// capability: EXACT_DETERMINISTIC_BIOSEQUENCE 20// license_tier: ORIGINAL 21import "nx_syscalls.nx" 22import "nx_itoa_lib.nx" // shared MSB-first emitter (zero-alloc) 23const BS_MAGIC_16384: i64 = 16384 24 25const BS_TABLE: *u8 = "knowledge/registry/sci_codon_table.tsv" 26const BS_LOG: *u8 = "knowledge/status/bio_sequence.log" 27 28func bs_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 } 29// MIGRATED to the shared emitter (debt 1785563586). The old body mmapped a scratch buffer 30// per call and never freed it. At PAGE granularity that is 4096B leaked PER CALL -- the 31// defect that took 28.5GB of a 36GB host in nx_ts_lumadiff (2MB input, ~3.66M calls). 32// nxi_* is MSB-first, allocates NOTHING, and emits identical bytes including the sign. 33func bs_wn(fd: i64, v: i64) -> i64 { nxi_fd(fd, v); return 0 } 34 35func bs_read(path: *u8, buf: *u8, cap: i64) -> i64 { 36 let fd: i64 = sys_openat_rd(path) 37 if fd < 0 { return 0 } 38 var n: i64 = 0 39 var r: i64 = sys_read(fd, buf, cap - 1) 40 while r > 0 { n = n + r; if n >= cap - 1 { r = 0 } else { r = sys_read(fd, buf + n, cap - 1 - n) } } 41 sys_close(fd) 42 return n 43} 44 45func bs_field(buf: *u8, ls: i64, le: i64, f: i64, dst: *u8, cap: i64) -> i64 { 46 var col: i64 = 0 47 var p: i64 = ls 48 var k: i64 = 0 49 while p < le { 50 if buf[p] == (9 as u8) { if col == f { dst[k] = 0 as u8; return k } col = col + 1; if col == f { k = 0 } } 51 else { if col == f { if k < cap - 1 { dst[k] = buf[p]; k = k + 1 } } } 52 p = p + 1 53 } 54 dst[k] = 0 as u8 55 return k 56} 57 58func bs_streq(a: *u8, b: *u8) -> i64 { 59 var i: i64 = 0 60 while a[i] != (0 as u8) { if a[i] != b[i] { return 0 } i = i + 1 } 61 if b[i] != (0 as u8) { return 0 } 62 return 1 63} 64 65// DNA -> RNA: T->U (and t->u), else copy. 66func bs_transcribe(dna: *u8, dlen: i64, out: *u8) -> i64 { 67 var i: i64 = 0 68 while i < dlen { 69 if dna[i] == (84 as u8) { out[i] = 85 as u8 } 70 else { if dna[i] == (116 as u8) { out[i] = 117 as u8 } else { out[i] = dna[i] } } 71 i = i + 1 72 } 73 out[dlen] = 0 as u8 74 return dlen 75} 76 77// DNA -> reverse complement: A<->T, C<->G, reversed. 78func bs_revcomp(dna: *u8, dlen: i64, out: *u8) -> i64 { 79 var i: i64 = 0 80 while i < dlen { 81 let s: i64 = dlen - 1 - i 82 if dna[s] == (65 as u8) { out[i] = 84 as u8 } 83 else { if dna[s] == (84 as u8) { out[i] = 65 as u8 } 84 else { if dna[s] == (67 as u8) { out[i] = 71 as u8 } 85 else { if dna[s] == (71 as u8) { out[i] = 67 as u8 } 86 else { out[i] = dna[s] } } } } 87 i = i + 1 88 } 89 out[dlen] = 0 as u8 90 return dlen 91} 92 93// exact integer G+C count. 94func bs_gc_count(seq: *u8, slen: i64) -> i64 { 95 var n: i64 = 0 96 var i: i64 = 0 97 while i < slen { 98 if seq[i] == (71 as u8) { n = n + 1 } 99 else { if seq[i] == (67 as u8) { n = n + 1 } } 100 i = i + 1 101 } 102 return n 103} 104 105// codon (3 RNA nt) -> amino-acid 1-letter into aa[0]. 1 found / 0 not. 106func bs_codon_lookup(tbuf: *u8, tn: i64, codon: *u8, aa: *u8) -> i64 { 107 let fld: *u8 = sys_mmap(16) 108 var ls: i64 = 0 109 var i: i64 = 0 110 while i <= tn { 111 var eol: i64 = 0 112 if i == tn { eol = 1 } else { if tbuf[i] == (10 as u8) { eol = 1 } } 113 if eol == 1 { 114 if i > ls { if tbuf[ls] != (35 as u8) { 115 bs_field(tbuf, ls, i, 0, fld, 16) 116 if bs_streq(fld, codon) == 1 { bs_field(tbuf, ls, i, 1, aa, 8); return 1 } 117 } } 118 ls = i + 1 119 } 120 i = i + 1 121 } 122 return 0 123} 124 125// RNA -> protein (1-letter), stop at '*' or unknown codon. 126func bs_translate(rna: *u8, rlen: i64, tbuf: *u8, tn: i64, out: *u8) -> i64 { 127 let codon: *u8 = sys_mmap(8) 128 let aa: *u8 = sys_mmap(8) 129 var oi: i64 = 0 130 var i: i64 = 0 131 while i + 3 <= rlen { 132 codon[0] = rna[i]; codon[1] = rna[i + 1]; codon[2] = rna[i + 2]; codon[3] = 0 as u8 133 let f: i64 = bs_codon_lookup(tbuf, tn, codon, aa) 134 if f == 0 { out[oi] = 0 as u8; return oi } 135 if aa[0] == (42 as u8) { out[oi] = 0 as u8; return oi } // '*' stop 136 out[oi] = aa[0]; oi = oi + 1 137 i = i + 3 138 } 139 out[oi] = 0 as u8 140 return oi 141} 142 143func main() -> i64 { 144 let tbuf: *u8 = sys_mmap(BS_MAGIC_16384) 145 let tn: i64 = bs_read(BS_TABLE, tbuf, BS_MAGIC_16384) 146 if tn <= 0 { bs_w(1, "BIOSEQ-GATE verdict=RED reason=no-table\n" as *u8); sys_exit(11); return 11 } 147 148 let rna: *u8 = sys_mmap(256) 149 let prot: *u8 = sys_mmap(256) 150 let rcv: *u8 = sys_mmap(256) 151 let aa: *u8 = sys_mmap(8) 152 153 // c1: transcribe ATGGCC -> AUGGCC 154 bs_transcribe("ATGGCC" as *u8, 6, rna) 155 let c1: i64 = bs_streq(rna, "AUGGCC" as *u8) 156 // c2: translate AUGGCCUAA -> MA (AUG=M, GCC=A, UAA=stop) 157 bs_translate("AUGGCCUAA" as *u8, 9, tbuf, tn, prot) 158 let c2: i64 = bs_streq(prot, "MA" as *u8) 159 // c3: revcomp ATGC -> GCAT 160 bs_revcomp("ATGC" as *u8, 4, rcv) 161 let c3: i64 = bs_streq(rcv, "GCAT" as *u8) 162 // c4: GC content of ATGC == 2 163 var c4: i64 = 0 164 if bs_gc_count("ATGC" as *u8, 4) == 2 { c4 = 1 } 165 // c5: codon lookups AUG->M, UAA->*, unknown ZZZ rejected 166 var c5: i64 = 0 167 let f1: i64 = bs_codon_lookup(tbuf, tn, "AUG" as *u8, aa) 168 var m_ok: i64 = 0 169 if f1 == 1 { if aa[0] == (77 as u8) { m_ok = 1 } } 170 let f2: i64 = bs_codon_lookup(tbuf, tn, "UAA" as *u8, aa) 171 var stop_ok: i64 = 0 172 if f2 == 1 { if aa[0] == (42 as u8) { stop_ok = 1 } } 173 let f3: i64 = bs_codon_lookup(tbuf, tn, "ZZZ" as *u8, aa) 174 var unk_ok: i64 = 0 175 if f3 == 0 { unk_ok = 1 } 176 if m_ok == 1 { if stop_ok == 1 { if unk_ok == 1 { c5 = 1 } } } 177 178 var passes: i64 = 0 179 if c1 == 1 { passes = passes + 1 } 180 if c2 == 1 { passes = passes + 1 } 181 if c3 == 1 { passes = passes + 1 } 182 if c4 == 1 { passes = passes + 1 } 183 if c5 == 1 { passes = passes + 1 } 184 var ok: i64 = 0 185 if c1 == 1 { if c2 == 1 { if c3 == 1 { if c4 == 1 { if c5 == 1 { ok = 1 } } } } } 186 187 var p2: i64 = 0 188 while p2 < 2 { 189 var fd: i64 = 1 190 if p2 == 1 { fd = sys_openat_append(BS_LOG, 0x1a4) } 191 if fd >= 0 { 192 bs_w(fd, "BIOSEQ-GATE checks=" as *u8); bs_wn(fd, passes); bs_w(fd, "/5" as *u8) 193 bs_w(fd, " transcribe=" as *u8); bs_wn(fd, c1) 194 bs_w(fd, " translate=" as *u8); bs_wn(fd, c2) 195 bs_w(fd, " revcomp=" as *u8); bs_wn(fd, c3) 196 bs_w(fd, " model=exact-deterministic" as *u8) 197 if ok == 1 { bs_w(fd, " verdict=GREEN\n" as *u8) } else { bs_w(fd, " verdict=RED\n" as *u8) } 198 if p2 == 1 { sys_close(fd) } 199 } 200 p2 = p2 + 1 201 } 202 if ok == 1 { sys_exit(0); return 0 } 203 sys_exit(1) 204 return 1 205}