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}