byte_offset: Byte Offset compression/decompression

This module provides a class for CBF byte offset compression/decompression.

class ByteOffset(raw_size=None, dec_size=None, ctx=None, devicetype='all', platformid=None, deviceid=None, block_size=None, profile=False)[source]

Bases: silx.opencl.processing.OpenclProcessing

Perform the byte offset compression/decompression on the GPU

See OpenclProcessing for optional arguments description.

Parameters:
  • raw_size (int) – Size of the raw stream for decompression. It can be (slightly) larger than the array.
  • dec_size (int) – Size of the decompression output array (mandatory for decompression)
decode(raw, as_float=False, out=None)[source]

This function actually performs the decompression by calling the kernels

Parameters:
  • raw (numpy.ndarray) – The compressed data as a 1D numpy array of char.
  • as_float (bool) – True to decompress as float32, False (default) to decompress as int32
  • out (pyopencl.array) – pyopencl array in which to place the result.
Returns:

The decompressed image as an pyopencl array.

Return type:

pyopencl.array

encode(data, out=None)[source]

Compress data to CBF.

Parameters:
  • data (Union[numpy.ndarray, pyopencl.array.Array]) – The data to compress as a numpy array (or a pyopencl Array) of int32.
  • out (pyopencl.array) – pyopencl array of int8 in which to store the result. The array should be large enough to store the compressed data.
Returns:

The compressed data as a pyopencl array. If out is provided, this array shares the backing buffer, but has the exact size of the compressed data and the queue of the ByteOffset instance.

Return type:

pyopencl.array

Raises:

ValueError – if out array is not large enough

encode_to_bytes(data)[source]

Compresses data to CBF and returns compressed data as bytes.

Usage:

Provided an image (image) stored as a numpy array of int32, first, create a byte offset compression/decompression object:

>>> from silx.opencl.codec.byte_offset import ByteOffset
>>> byte_offset_codec = ByteOffset()

Then, compress an image into bytes:

>>> compressed = byte_offset_codec.encode_to_bytes(image)
Parameters:data (Union[numpy.ndarray, pyopencl.array.Array]) – The data to compress as a numpy array (or a pyopencl Array) of int32.
Returns:The compressed data as bytes.
Return type:bytes