bqn-npy/npy.bqn
2023-10-04 13:26:25 +02:00

40 lines
1.4 KiB
BQN
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
}