@@ -235,7 +235,7 @@ def _err_bad_cname(cname):
235
235
err_bad_cname = deprecated(_err_bad_cname)
236
236
237
237
def compress (source , char* cname , int clevel , int shuffle = SHUFFLE,
238
- int blocksize = AUTOBLOCKS):
238
+ int blocksize = AUTOBLOCKS, typesize = None ):
239
239
""" Compress data.
240
240
241
241
Parameters
@@ -279,7 +279,12 @@ def compress(source, char* cname, int clevel, int shuffle=SHUFFLE,
279
279
source_buffer = Buffer(source, PyBUF_ANY_CONTIGUOUS)
280
280
source_ptr = source_buffer.ptr
281
281
nbytes = source_buffer.nbytes
282
- itemsize = source_buffer.itemsize
282
+ if isinstance (typesize, int ):
283
+ if typesize < 1 :
284
+ raise ValueError (f" Cannot use typesize {typesize} less than 1." )
285
+ itemsize = typesize
286
+ else :
287
+ itemsize = source_buffer.itemsize
283
288
284
289
# determine shuffle
285
290
if shuffle == AUTOSHUFFLE:
@@ -552,6 +557,8 @@ class Blosc(Codec):
552
557
blocksize : int
553
558
The requested size of the compressed blocks. If 0 (default), an automatic
554
559
blocksize will be used.
560
+ typesize : int, optional
561
+ The size in bytes of uncompressed array elements.
555
562
556
563
See Also
557
564
--------
@@ -566,7 +573,9 @@ class Blosc(Codec):
566
573
AUTOSHUFFLE = AUTOSHUFFLE
567
574
max_buffer_size = 2 ** 31 - 1
568
575
569
- def __init__ (self , cname = ' lz4' , clevel = 5 , shuffle = SHUFFLE, blocksize = AUTOBLOCKS):
576
+ def __init__ (self , cname = ' lz4' , clevel = 5 , shuffle = SHUFFLE, blocksize = AUTOBLOCKS, typesize = None ):
577
+ if isinstance (typesize, int ) and typesize < 1 :
578
+ raise ValueError (f" Cannot use typesize {typesize} less than 1." )
570
579
self .cname = cname
571
580
if isinstance (cname, str ):
572
581
self ._cname_bytes = cname.encode(' ascii' )
@@ -575,10 +584,11 @@ class Blosc(Codec):
575
584
self .clevel = clevel
576
585
self .shuffle = shuffle
577
586
self .blocksize = blocksize
587
+ self .typesize = typesize
578
588
579
589
def encode (self , buf ):
580
590
buf = ensure_contiguous_ndarray(buf, self .max_buffer_size)
581
- return compress(buf, self ._cname_bytes, self .clevel, self .shuffle, self .blocksize)
591
+ return compress(buf, self ._cname_bytes, self .clevel, self .shuffle, self .blocksize, self .typesize )
582
592
583
593
def decode (self , buf , out = None ):
584
594
buf = ensure_contiguous_ndarray(buf, self .max_buffer_size)
0 commit comments