def info(self, key): self._check_handle() self._check_key(key) is_array, offset = self._index[key] self._handle.seek(offset) if is_array: meta = read_json(self._handle) return { 'type': 'array', 'shape': tuple(meta['shape']), 'dtype': restore_dtype(meta['dtype']), 'compression': tuple(meta['comp']) } else: return {'type': 'json'}
def read_blosc(stream, out=None): meta = read_json(stream) shape = tuple(meta['shape']) dtype = restore_dtype(meta['dtype']) if out is None: out = np.empty(shape, dtype) elif not isinstance(out, np.ndarray): raise TypeError('expected ndarray, got {}'.format(type(out).__name__)) elif out.shape != shape: raise ValueError('incompatible shape: expected {}, got {}'.format(shape, out.shape)) elif out.dtype != dtype: raise ValueError('incompatible dtype: expected {}, got {}'.format(dtype, out.dtype)) elif not out.flags.contiguous: raise ValueError('expected contiguous array') blosc.decompress_ptr( stream.read(meta['length']), out.__array_interface__['data'][0] ) if out.dtype.type is np.record: out = out.view(np.recarray) return out
def test_flatten_restore_dtype(dtype, flattened): dtype = np.dtype(dtype) assert flatten_dtype(dtype) == flattened assert restore_dtype(flatten_dtype(dtype)) == dtype assert restore_dtype(json.loads(json.dumps(flatten_dtype(dtype)))) == dtype