Initial commit

This commit is contained in:
Dimitri Lozeve 2023-10-04 13:26:25 +02:00
commit 9b2e9b184f
3 changed files with 48 additions and 0 deletions

1
.gitignore vendored Normal file
View file

@ -0,0 +1 @@
*.npy

40
npy.bqn Normal file
View file

@ -0,0 +1,40 @@
SaveNpy,LoadNpy
lf@+10
magicString(@+147)"NUMPY" # "\x93NUMPY"
To_i16le{@+256(|÷˜)𝕩}
# To_i16le←⟨16,8‿'c'⟩•bit._cast∘≍ # assumes the platform is little-endian
FloatToBytes64,8'c'•bit._cast
FormatShape{'('(1','˘•Fmt¨𝕩)')'}
BuildHeader{𝕊𝕩:
version10
# Hypothesis: BQN arrays are C-contiguous
headerData"{'descr': '<f8', 'fortran_order': False, 'shape': "(FormatShape 𝕩)", }"
padding' '˜64-64|(magicString)+2+2+(headerData)+1
! 0=64|(magicString)+2+2+(padding)+(headerData)+1
headerDataPaddedheaderDatapaddinglf
magicString(@+version)(To_i16le headerDataPadded)headerDataPadded
}
EncodeNpyBuildHeaderFloatToBytes
SaveNpy•file.BytesEncodeNpy
ParseHeader{𝕊𝕩:
"Not a valid NPY file"! magicString(magicString)𝕩
version@-˜(01+magicString)𝕩
headerlen+´1256×@-˜(23+magicString)𝕩
header(¬(' 'lf))/headerlen(4+magicString)𝕩
shapestr(')') (1+'(') (("shape"header)1)header
shape•BQN¨','((-˜+`׬)=)shapestr
version,shape,headerlen+2+2+magicString
}
LoadNpy{𝕊𝕩:
bytes•file.Bytes 𝕩
versionshapedatastartParseHeader bytes
shape8'c',64'f'•bit._cast datastartbytes
}

7
tests.bqn Normal file
View file

@ -0,0 +1,7 @@
SaveNpy,LoadNpy•Import"npy.bqn"
a345•rand.Range 0
"testbqn.npy"SaveNpy a
bLoadNpy"testbqn.npy"
! ab
! ab