From 4bd56883e42b6b2258543697dfb5ad515d0e864b Mon Sep 17 00:00:00 2001 From: Yaman Umuroglu <maltanar@gmail.com> Date: Thu, 6 Feb 2020 18:22:16 +0100 Subject: [PATCH] [Util] add a first version of packed_bytearray_to_finnpy --- src/finn/util/data_packing.py | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/finn/util/data_packing.py b/src/finn/util/data_packing.py index ad34399f8..db60e4dba 100644 --- a/src/finn/util/data_packing.py +++ b/src/finn/util/data_packing.py @@ -242,3 +242,24 @@ def finnpy_to_packed_bytearray(ndarray, dtype): return np.asarray(list(map(hexstring2npbytearray, x))) return np.apply_along_axis(fn, packed_hexstring.ndim - 1, packed_hexstring) + + +def packed_bytearray_to_finnpy(packed_bytearray, dtype): + """Given a packed numpy uint8 ndarray, unpack it into a FINN array of + given DataType.""" + # TODO how to handle un-padding here? + packed_dim = packed_bytearray.ndim - 1 + packed_bits = packed_bytearray.shape[packed_dim] * 8 + target_bits = dtype.bitwidth() + assert packed_bits % target_bits == 0 + n_target_elems = packed_bits // target_bits + retshape = packed_bytearray.shape[:-1] + (n_target_elems,) + # convert innermost dim of byte array to hex strings + packed_hexstring = np.apply_along_axis( + npbytearray2hexstring, packed_dim, packed_bytearray + ) + ret = unpack_innermost_dim_from_hex_string( + packed_hexstring, dtype, retshape, packed_bits, target_bits + ) + + return ret -- GitLab