Source code for numcodecs.astype

import numpy as np

from .abc import Codec
from .compat import ndarray_copy, ensure_ndarray


[docs]class AsType(Codec): """Filter to convert data between different types. Parameters ---------- encode_dtype : dtype Data type to use for encoded data. decode_dtype : dtype, optional Data type to use for decoded data. Notes ----- If `encode_dtype` is of lower precision than `decode_dtype`, please be aware that data loss can occur by writing data to disk using this filter. No checks are made to ensure the casting will work in that direction and data corruption will occur. Examples -------- >>> import numcodecs >>> import numpy as np >>> x = np.arange(100, 120, 2, dtype=np.int8) >>> x array([100, 102, 104, 106, 108, 110, 112, 114, 116, 118], dtype=int8) >>> f = numcodecs.AsType(encode_dtype=x.dtype, decode_dtype=np.int64) >>> y = f.decode(x) >>> y array([100, 102, 104, 106, 108, 110, 112, 114, 116, 118]) >>> z = f.encode(y) >>> z array([100, 102, 104, 106, 108, 110, 112, 114, 116, 118], dtype=int8) """ codec_id = 'astype' def __init__(self, encode_dtype, decode_dtype): self.encode_dtype = np.dtype(encode_dtype) self.decode_dtype = np.dtype(decode_dtype)
[docs] def encode(self, buf): # normalise input arr = ensure_ndarray(buf).view(self.decode_dtype) # convert and copy enc = arr.astype(self.encode_dtype) return enc
[docs] def decode(self, buf, out=None): # normalise input enc = ensure_ndarray(buf).view(self.encode_dtype) # convert and copy dec = enc.astype(self.decode_dtype) # handle output out = ndarray_copy(dec, out) return out
[docs] def get_config(self): config = dict() config['id'] = self.codec_id config['encode_dtype'] = self.encode_dtype.str config['decode_dtype'] = self.decode_dtype.str return config
def __repr__(self): return ( '{}(encode_dtype={!r}, decode_dtype={!r})'.format( type(self).__name__, self.encode_dtype.str, self.decode_dtype.str ) )