code wiki / (root) / nx_zip_read.nx

nx_zip_read.nx source

↩ module page · 101 lines · 6108 B

1// nx_zip_read.nx -- SOVEREIGN ZIP reader (the first half of the PyTorch .bin loader). A PyTorch .bin is a ZIP 2// archive of STORED (uncompressed) members: archive/data.pkl (the pickle describing the state_dict) + archive/ 3// data/0, data/1, ... (raw tensor blobs) + archive/version. This finds the End-Of-Central-Directory record, 4// walks the central directory, and lists every member (name / method / size / local-header offset), plus locates 5// a member's raw data (STORED = data begins right after the local header). Tested on the REAL 50.7MB HiFi-GAN 6// pytorch_model.bin just downloaded. Next: a minimal pickle-VM over data.pkl. license_tier: ORIGINAL expect_exit: 0 7import "nx_syscalls.nx" 8const K_MAGIC_67108864: i64 = 67108864 9 10func p(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(1,s,n); return 0 } 11func pn(v: i64) -> i64 { if v==0 { sys_write(1,"0" as *u8,1); return 0 } var m: i64=v; if m<0{sys_write(1,"-" as *u8,1);m=0-m} let d: *u8=sys_mmap(24); var k: i64=0; while m>0 {d[k]=(48+(m%10)) as u8; m=m/10; k=k+1} var i: i64=k-1; while i>=0 {let o: *u8=sys_mmap(1); o[0]=d[i]; sys_write(1,o,1); i=i-1} return 0 } 12func pc(c: i64) -> i64 { let o: *u8=sys_mmap(1); o[0]=c as u8; sys_write(1,o,1); return 0 } 13 14func u16le(b: *u8, o: i64) -> i64 { return (b[o]&0xff) | ((b[o+1]&0xff)<<8) } 15func u32le(b: *u8, o: i64) -> i64 { return (b[o]&0xff) | ((b[o+1]&0xff)<<8) | ((b[o+2]&0xff)<<16) | ((b[o+3]&0xff)<<24) } 16 17// find End-Of-Central-Directory (sig 0x06054b50 = PK\5\6), scanning backward from the end. 18func find_eocd(b: *u8, n: i64) -> i64 { 19 var i: i64 = n - 22 20 while i >= 0 { 21 if b[i]==0x50 as u8 { if b[i+1]==0x4B as u8 { if b[i+2]==0x05 as u8 { if b[i+3]==0x06 as u8 { return i } } } } 22 i = i - 1 23 } 24 return 0 - 1 25} 26// raw data offset of a STORED member given its local-header offset: skip local header (30) + fname + extra. 27func member_data_off(b: *u8, lho: i64) -> i64 { 28 let fnl: i64 = u16le(b, lho + 26) 29 let exl: i64 = u16le(b, lho + 28) 30 return lho + 30 + fnl + exl 31} 32 33func main() -> i64 { 34 p("=== nx_zip_read -- sovereign ZIP reader over the REAL HiFi-GAN pytorch_model.bin ===\n" as *u8) 35 let path: *u8 = "/home/elderwesto/nx_stage/hifigan_pytorch_model.bin" as *u8 36 let fd: i64 = sys_openat_rd(path) 37 if fd < 0 { p("open failed (download the weights first)\n" as *u8); sys_exit(1); return 1 } 38 let cap: i64 = K_MAGIC_67108864 39 let buf: *u8 = sys_mmap(cap) 40 var n: i64 = 0 41 var go: i64 = 1 42 while go == 1 { 43 let r: i64 = sys_read(fd, (buf as i64 + n) as *u8, cap - n) 44 if r <= 0 { go = 0 } else { n = n + r; if n >= cap { go = 0 } } 45 } 46 sys_close(fd) 47 p("read "); pn(n); p(" bytes\n" as *u8) 48 49 let eocd: i64 = find_eocd(buf, n) 50 if eocd < 0 { p("verdict=FAIL (no EOCD -- not a ZIP)\n" as *u8); sys_exit(1); return 1 } 51 let n_entries: i64 = u16le(buf, eocd + 10) 52 let cd_size: i64 = u32le(buf, eocd + 12) 53 let cd_off: i64 = u32le(buf, eocd + 16) 54 p("EOCD @"); pn(eocd); p(": entries="); pn(n_entries); p(" cd_off="); pn(cd_off); p(" cd_size="); pn(cd_size); p("\n" as *u8) 55 56 // walk the central directory 57 var off: i64 = cd_off 58 var e: i64 = 0 59 var have_pkl: i64 = 0 60 var have_data0: i64 = 0 61 var stored_all: i64 = 1 62 var pkl_lho: i64 = 0 63 while e < n_entries { 64 if buf[off]!=0x50 as u8 { p(" (bad CD sig at "); pn(off); p(")\n" as *u8); e = n_entries } 65 else { 66 let method: i64 = u16le(buf, off + 10) 67 let usize: i64 = u32le(buf, off + 24) 68 let fnl: i64 = u16le(buf, off + 28) 69 let exl: i64 = u16le(buf, off + 30) 70 let cml: i64 = u16le(buf, off + 32) 71 let lho: i64 = u32le(buf, off + 42) 72 // print filename 73 p(" ["); pn(e); p("] "); var j: i64=0; while j<fnl { pc(buf[off+46+j] as i64); j=j+1 } 74 p(" method="); pn(method); p(" size="); pn(usize); p(" lho="); pn(lho); p("\n" as *u8) 75 if method != 0 { stored_all = 0 } 76 // detect data.pkl (ends with "data.pkl") and data/0 77 if fnl >= 8 { var m: i64=1; var q: i64=0; let suf: *u8 = "data.pkl" as *u8; while q<8 { if buf[off+46+fnl-8+q]!=suf[q] { m=0 } q=q+1 } if m==1 { have_pkl=1; pkl_lho=lho } } 78 if fnl >= 6 { var m2: i64=1; var q2: i64=0; let suf2: *u8 = "data/0" as *u8; while q2<6 { if buf[off+46+fnl-6+q2]!=suf2[q2] { m2=0 } q2=q2+1 } if m2==1 { have_data0=1 } } 79 off = off + 46 + fnl + exl + cml 80 e = e + 1 81 } 82 } 83 84 // extract data.pkl start (should begin with pickle PROTO opcode 0x80) 85 var pkl_ok: i64 = 0 86 if have_pkl == 1 { 87 let dof: i64 = member_data_off(buf, pkl_lho) 88 p("data.pkl raw @"); pn(dof); p(" first bytes: "); var j: i64=0; while j<4 { let bb: *u8=sys_mmap(4); var nib: i64=(buf[dof+j]>>4)&0xF; if nib<10 {bb[0]=(48+nib) as u8} else {bb[0]=(87+nib) as u8} nib=buf[dof+j]&0xF; if nib<10 {bb[1]=(48+nib) as u8} else {bb[1]=(87+nib) as u8} bb[2]=32 as u8; sys_write(1,bb,3); j=j+1 } p("\n" as *u8) 89 if buf[dof]==0x80 as u8 { pkl_ok = 1 } // pickle PROTO opcode 90 } 91 92 var pass: i64=0; var tot: i64=4 93 if n_entries > 0 { pass=pass+1; p("PASS ZIP central directory parsed ("); pn(n_entries); p(" members)\n" as *u8) } else { p("FAIL no entries\n" as *u8) } 94 if have_pkl == 1 { pass=pass+1; p("PASS archive/data.pkl located (the state_dict pickle)\n" as *u8) } else { p("FAIL no data.pkl\n" as *u8) } 95 if have_data0 == 1 { pass=pass+1; p("PASS archive/data/0 located (a raw tensor blob)\n" as *u8) } else { p("FAIL no data/0\n" as *u8) } 96 if pkl_ok == 1 { pass=pass+1; p("PASS data.pkl begins with pickle PROTO (0x80) -> ready for the pickle-VM\n" as *u8) } else { p("FAIL data.pkl not a pickle\n" as *u8) } 97 98 p("nx_zip_read pass="); pn(pass); p("/"); pn(tot) 99 if pass==tot { p(" GREEN -- ZIP reader works on the real weights; members + tensor blobs + pickle located. Next: minimal pickle-VM over data.pkl -> state_dict.\n" as *u8); sys_exit(0); return 0 } 100 p(" RED\n" as *u8); sys_exit(1); return 1 101}