From 80a571c17b158f419b5059f04e38818ea327f7a2 Mon Sep 17 00:00:00 2001 From: halehawk Date: Fri, 21 Dec 2018 15:50:57 -0700 Subject: [PATCH 01/69] added zfp compressor --- numcodecs/zfp.pyx | 403 ++++++++++++++++++++++++++++++++++++++++++++++ setup.py | 41 ++++- 2 files changed, 441 insertions(+), 3 deletions(-) create mode 100644 numcodecs/zfp.pyx diff --git a/numcodecs/zfp.pyx b/numcodecs/zfp.pyx new file mode 100644 index 00000000..3ecf1443 --- /dev/null +++ b/numcodecs/zfp.pyx @@ -0,0 +1,403 @@ +from __future__ import absolute_import, print_function, division +#cimport numpy +cimport cython +#from cpython cimport array +import numpy as np +import sys +#import array + +from cpython.buffer cimport PyBUF_ANY_CONTIGUOUS, PyBUF_WRITEABLE +from cpython.bytes cimport PyBytes_FromStringAndSize, PyBytes_AS_STRING + +from .compat_ext cimport Buffer +from .compat_ext import Buffer +from numcodecs.compat import ensure_contiguous_ndarray,ensure_ndarray +from numcodecs.abc import Codec + + +cdef extern from "bitstream.h": + ctypedef struct bitstream: + pass + + bitstream* stream_open(void*,size_t) + bitstream* stream_close(void*) + bitstream* zfp_stream_bit_stream(const zfp_stream*) + +cdef extern from "zfp.h": + + cdef enum: + ZFP_VERSION_STRING + ZFP_HEADER_FULL + ZFP_MIN_BITS + ZFP_MAX_BITS + ZFP_MAX_PREC + ZFP_MIN_EXP + ctypedef enum zfp_type: + zfp_type_none = 0 + zfp_type_int32 = 1 + zfp_type_int64 = 2 + zfp_type_float = 3 + zfp_type_double = 4 + + ctypedef enum zfp_exec_policy: + zfp_exec_serial = 0 + zfp_exec_omp = 1 + zfp_exec_cuda = 2 + + ctypedef struct zfp_exec_params_omp: + unsigned int threads + unsigned int chunk_size + + ctypedef union zfp_exec_params: + zfp_exec_params_omp omp + + ctypedef struct zfp_execution: + zfp_exec_policy policy + zfp_exec_params params + + ctypedef struct zfp_stream: + unsigned int minbits + unsigned int maxbits + unsigned int maxprec + int minexp + bitstream* stream + zfp_execution _exec + + ctypedef struct zfp_field: + zfp_type _type + unsigned int nx,ny,nz,nw + int sx,sy,sz,sw + void* data + + + zfp_stream* zfp_stream_open(zfp_stream*) + void zfp_stream_close(zfp_stream*) + void zfp_stream_rewind(zfp_stream*) + zfp_type zfp_field_set_type(zfp_field*, zfp_type) + void zfp_field_set_pointer(zfp_field*,void*) + void zfp_field_set_size_1d(zfp_field*,unsigned int nx) + void zfp_field_set_size_2d(zfp_field*,unsigned int nx,unsigned int nx) + void zfp_field_set_size_3d(zfp_field*,unsigned int nx,unsigned int nx,unsigned int nz) + void zfp_field_set_size_4d(zfp_field*,unsigned int nx,unsigned int nx,unsigned int nz,unsigned int nw) + zfp_field* zfp_field_alloc() + void zfp_field_free(zfp_field* field) + size_t zfp_stream_maximum_size(const zfp_stream*,const zfp_field*) + void zfp_stream_set_bit_stream(zfp_stream*,bitstream*) + double zfp_stream_set_rate(zfp_stream*,double,zfp_type,unsigned int,int) + unsigned int zfp_stream_set_precision(zfp_stream*,unsigned int) + double zfp_stream_set_accuracy(zfp_stream*,double) + int zfp_stream_set_params(zfp_stream*,unsigned int,unsigned int,unsigned int,int) + size_t zfp_compress(zfp_stream*,const zfp_field*) + int zfp_decompress(zfp_stream*,zfp_field*) + int zfp_stream_set_execution(zfp_stream* stream, zfp_exec_policy policy) + size_t zfp_write_header(zfp_stream* stream, const zfp_field* field, unsigned int mask) + size_t zfp_read_header(zfp_stream* stream, zfp_field* field, unsigned int mask) + +VERSION_STRING = ZFP_VERSION_STRING +__version__ = VERSION_STRING + + +def compress(input_array,method): + '''Compress data. + + Parameters + ---------- + input_array : numpy array + Data to be compressed. zfp can compress data better with arrays that have + larger number of dimensions (1-4). So we want to reserve the dimension of the data + + method : an object has compression mode and its relate compression parameters + + Returns + ------- + dest : bytes + Compressed data + + ''' + cdef zfp_stream* zfp + cdef bitstream* stream + cdef zfp_field* field + cdef size_t bufsize + + cdef: + char *source_ptr + char *dest_ptr + Buffer source_buffer + int dest_size,compressed_size + bytes dest + + # get compression mode + zfpmode = method.zfpmode + + # allocate an object to store all parameters + field = zfp_field_alloc() + + # setup source buffer + source_buffer = Buffer(input_array,PyBUF_ANY_CONTIGUOUS) + source_ptr = source_buffer.ptr + + # determine type + if input_array.dtype == np.float32: + the_type = zfp_type_float + elif input_array.dtype == np.float64: + the_type = zfp_type_double + elif input_array.dtype == np.int32: + the_type = zfp_type_int32 + elif input_array.dtype == np.int64: + the_type = zfp_type_int64 + else: + print("The type of data should be int32, int64, float or double") + zfp_field_set_type(field,the_type) + zfp_field_set_pointer(field,source_ptr) + print(input_array.shape) + + # determine the dimensions + if input_array.ndim == 1: + zfp_field_set_size_1d(field,input_array.shape[0]) + elif input_array.ndim == 2: + zfp_field_set_size_2d(field,input_array.shape[1],input_array.shape[0]) + elif input_array.ndim == 3: + zfp_field_set_size_3d(field,input_array.shape[2],input_array.shape[1],input_array.shape[0]) + elif input_array.ndim == 4: + print(input_array.shape) + zfp_field_set_size_4d(field,input_array.shape[3],input_array.shape[2],input_array.shape[1],input_array.shape[0]) + else: + print("The dimension of data should be equal or less than 4, please reshape") + + # setup compression mode + zfp=zfp_stream_open(NULL) + if zfpmode == 'a': + zfp_stream_set_accuracy(zfp,method.tolerance) + elif zfpmode == 'p': + zfp_stream_set_precision(zfp,method.precision) + elif zfpmode == 'r': + zfp_stream_set_rate(zfp,method.rate,the_type,input_array.ndim,0) + elif zfpmode =='c': + zfp_stream_set_params(zfp,method.minbits,method.maxbits,method.maxprec,method.minexp) + else: + print('Must specify zfp mode') + + # setup destination + dest_size = zfp_stream_maximum_size(zfp,field) + dest = PyBytes_FromStringAndSize(NULL,dest_size) + dest_ptr = PyBytes_AS_STRING(dest) + stream = stream_open(dest_ptr,dest_size) + zfp_stream_set_bit_stream(zfp,stream) + # currently only use serial execution + zfp_stream_set_execution(zfp,zfp_exec_serial) + + # perform compression + ret = zfp_write_header(zfp,field,ZFP_HEADER_FULL) + if not ret: + print("zfp_write_header failed") + compressed_size = zfp_compress(zfp,field) + if not compressed_size: + print("zfp_compress is failed") + + # release buffers + source_buffer.release() + zfp_field_free(field) + zfp_stream_close(zfp) + stream_close(stream) + + return dest[:compressed_size] + +def decompress(source): + '''Decompress data. + + Parameters + ---------- + source : bytes-like + Compressed data, including zfp header. Can be any object supporting the + buffer protocol + + Returns + ------- + dest : array-like + Object containing decompressed data + + ''' + cdef: + zfp_stream* zfp + bitstream* stream + zfp_field* field + Buffer source_buffer + Buffer dest_buffer + char *source_ptr + char *dest_ptr + int source_size + + + # setup source buffer + source_buffer = Buffer(source, PyBUF_ANY_CONTIGUOUS) + source_ptr = source_buffer.ptr + source_size = source_buffer.nbytes + + # setup zfp object + field = zfp_field_alloc() + zfp = zfp_stream_open(NULL) + stream = stream_open(source_ptr,source_size) + zfp_stream_set_bit_stream(zfp,stream) + zfp_stream_rewind(zfp) + print(source_size) + + # read zfp header + ret = zfp_read_header(zfp,field,ZFP_HEADER_FULL); + if not ret: + print("zfp_read_header failed") + + # determine destination data type + if field._type == zfp_type_float: + the_type = np.float32 + type_size = 4 + elif field._type == zfp_type_double: + the_type = np.float64 + type_size = 8 + elif field._type == zfp_type_int32: + the_type = np.int32 + type_size = 4 + else: + the_type = np.int64 + type_size = 8 + + # determine data dimension + nx,ny,nz,nw = field.nx,field.ny,field.nz,field.nw + datashape = (nx if nx != 0 else 1)* (ny if ny != 0 else 1) \ + *(nz if nz != 0 else 1)* (nw if nw != 0 else 1) + + # currently only serial exeution available + zfp_stream_set_execution(zfp,zfp_exec_serial) + + # setup destination buffer + dest = PyBytes_FromStringAndSize(NULL,datashape*type_size) + dest_ptr = PyBytes_AS_STRING(dest) + zfp_field_set_pointer(field,dest_ptr) + + # perform decompression + ret = zfp_decompress(zfp,field) + if not ret: + print("decompress failed") + + # release buffers + source_buffer.release() + zfp_field_free(field) + zfp_stream_close(zfp) + stream_close(stream) + + # reshape the buffer + if not ny: + buf_shape=(nx) + elif ny and not nz: + buf_shape=(ny,nx) + elif ny and nz and not nw: + buf_shape=(nz,ny,nx) + else: + buf_shape=(nw,nz,ny,nx) + print(buf_shape) + dest = ensure_ndarray(dest).view(the_type) + dest = dest.reshape(buf_shape) + + return dest + +class CompressMethod: + ''' + Create a CompressMethod object to store zfp mode and + its parameters in Zfp class + + ''' + + # Initilize with defaults + def __init__(self): + self.zfpmode='a' + self.tolerance=0.01 + + def set_mode(self,mode): + self.zfpmode=mode + def set_tolerance(self,tol): + self.tolerance=tol + def set_precision(self,prec): + self.precision=prec + def set_rate(self,rate): + self.rate=rate + def set_minbits(self,minbits): + self.minbits=minbits + def set_maxbits(self,maxbits): + self.maxbits=maxbits + def set_maxprec(self,maxprec): + self.maxprec=maxprec + def set_minexp(self,minexp): + self.minexp=minexp + +class Zfp(Codec): + '''Codec providing compression using zfp via the Python standard library. + + Parameters + ---------- + mode : a + tolerance : float (absolue error tolerance), default 0.01 + + mode : p + precision : int (uncompressed bits per value), can be 0-64 for double precision + + mode : r + rate : int (compressed bits per floating-point value), can be 0-64 for double precision + + mode : c + minbits : int (min bits per 4^d values in d dimensions) + maxbits : int (max bits per 4^d values in d dimensions), 0 for unlimited + minexp : int (min bit plane : -1074 for all bit planes) + maxprec : int (max bits of precision per value), 0 for full + ''' + codec_id = 'zfp' + + def __init__(self, mode = 'a',tol = 0.01, prec = 32, rate = 16, minbits = ZFP_MIN_BITS, maxbits = ZFP_MAX_BITS, minexp = ZFP_MIN_EXP, maxprec = ZFP_MAX_PREC): + self.mode=mode + the_method=CompressMethod() + + if mode == 'a': + self.tolerance=tol + the_method.set_mode(mode) + the_method.set_tolerance(tol) + elif mode == 'p': + self.maxprec = prec + the_method.set_mode(mode) + the_method.set_precision(prec) + elif mode == 'r': + self.rate = rate + the_method.set_mode(mode) + the_method.set_rate(rate) + elif mode == 'c': + self.minbits = minbits + self.maxbits = maxbits + self.maxprec = maxprec + self.minexp = minexp + the_method.set_mode(mode) + the_method.set_minbits(minbits) + the_method.set_maxbits(maxbits) + the_method.set_minexp(minexp) + the_method.set_maxprec(maxprec) + else: + print("Wrong mode, please set mode to 'a', 'p', 'r' or 'c'") + self.the_method=the_method + + def encode(self,buf): + #buf = ensure_contiguous_ndarray(buf) + return compress(buf,self.the_method) + + def decode(self,buf): + buf=ensure_contiguous_ndarray(buf) + return decompress(buf) + + def __repr__(self): + if self.mode == 'a': + r= '%r(mode=%r,minexp=%s)' % (type(self).__name__, self.mode,self.minexp) + elif self.mode == 'p': + r= '%r(mode=%r,maxprec=%s)' % (type(self).__name__,self.mode,self.maxprec) + elif self.mode == 'r': + r= '%r(mode=%r,rate=%s)' % (type(self).__name__,self.mode,self.rate) + elif self.mode == 'c': + r= '%r(mode=%r,minbits=%s,maxbits=%s,maxprec=%s,minexp=%s)' % (type(self).__name__,self.mode,self.minbits,self.maxbits,self.maxprec,self.minexp) + else: + r="WRONG MODE" + return r + diff --git a/setup.py b/setup.py index 448031eb..2e03f104 100644 --- a/setup.py +++ b/setup.py @@ -9,7 +9,6 @@ from distutils.errors import CCompilerError, DistutilsExecError, \ DistutilsPlatformError - try: from Cython.Build import cythonize except ImportError: @@ -205,6 +204,42 @@ def lz4_extension(): return extensions +def zfp_extension(): + import numpy + info('setting up ZFP extension') + + extra_compile_args = list(base_compile_args) + define_macros = [] + + # setup sources - use ZFP bundled in blosc + zfp_sources = glob('c-blosc/internal-complibs/zfp*/*.c') + include_dirs = [d for d in glob('c-blosc/internal-complibs/zfp*') if os.path.isdir(d)] + include_dirs += ['numcodecs'] + include_dirs += [numpy.get_include()] + # define_macros += [('CYTHON_TRACE', '1')] + extra_compile_args += [ + '-std=c99', + ] + + if have_cython: + sources = ['numcodecs/zfp.pyx'] + else: + sources = ['numcodecs/zfp.c'] + + # define extension module + extensions = [ + Extension('numcodecs.zfp', + sources=sources + zfp_sources, + include_dirs=include_dirs, + define_macros=define_macros, + extra_compile_args=extra_compile_args, + ), + ] + + if have_cython: + extensions = cythonize(extensions) + + return extensions def vlen_extension(): info('setting up vlen extension') @@ -300,8 +335,8 @@ def build_extension(self, ext): def run_setup(with_extensions): if with_extensions: - ext_modules = (blosc_extension() + zstd_extension() + lz4_extension() + - compat_extension() + vlen_extension()) + ext_modules = (blosc_extension() + lz4_extension() + zstd_extension() + + zfp_extension() + compat_extension() + vlen_extension()) cmdclass = dict(build_ext=ve_build_ext) else: ext_modules = [] From 50cfdb5f3c1d9fce62fd66c066b33372b7689a72 Mon Sep 17 00:00:00 2001 From: halehawk Date: Fri, 21 Dec 2018 16:04:38 -0700 Subject: [PATCH 02/69] modified zfp in setup.py for new zfp054 directory --- setup.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/setup.py b/setup.py index 2e03f104..82126dc9 100644 --- a/setup.py +++ b/setup.py @@ -212,8 +212,8 @@ def zfp_extension(): define_macros = [] # setup sources - use ZFP bundled in blosc - zfp_sources = glob('c-blosc/internal-complibs/zfp*/*.c') - include_dirs = [d for d in glob('c-blosc/internal-complibs/zfp*') if os.path.isdir(d)] + zfp_sources = glob('c-blosc/internal-complibs/zfp*/src/*.c') + include_dirs = [d for d in glob('c-blosc/internal-complibs/zfp*/*') if os.path.isdir(d)] include_dirs += ['numcodecs'] include_dirs += [numpy.get_include()] # define_macros += [('CYTHON_TRACE', '1')] @@ -335,7 +335,7 @@ def build_extension(self, ext): def run_setup(with_extensions): if with_extensions: - ext_modules = (blosc_extension() + lz4_extension() + zstd_extension() + + ext_modules = (blosc_extension() + lz4_extension() + # zstd_extension() + zfp_extension() + compat_extension() + vlen_extension()) cmdclass = dict(build_ext=ve_build_ext) else: From 8b40523200e0816595ff0cc7b670fcebd55cad0d Mon Sep 17 00:00:00 2001 From: halehawk Date: Thu, 27 Dec 2018 16:58:33 -0700 Subject: [PATCH 03/69] changed print statement to raise,also changed zfp source path --- numcodecs/zfp.pyx | 18 +++++++++--------- setup.py | 8 +++++--- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/numcodecs/zfp.pyx b/numcodecs/zfp.pyx index 3ecf1443..99f488a4 100644 --- a/numcodecs/zfp.pyx +++ b/numcodecs/zfp.pyx @@ -146,7 +146,7 @@ def compress(input_array,method): elif input_array.dtype == np.int64: the_type = zfp_type_int64 else: - print("The type of data should be int32, int64, float or double") + raise ValueError("The type of data should be int32, int64, float or double") zfp_field_set_type(field,the_type) zfp_field_set_pointer(field,source_ptr) print(input_array.shape) @@ -162,7 +162,7 @@ def compress(input_array,method): print(input_array.shape) zfp_field_set_size_4d(field,input_array.shape[3],input_array.shape[2],input_array.shape[1],input_array.shape[0]) else: - print("The dimension of data should be equal or less than 4, please reshape") + raise ValueError("The dimension of data should be equal or less than 4, please reshape") # setup compression mode zfp=zfp_stream_open(NULL) @@ -175,7 +175,7 @@ def compress(input_array,method): elif zfpmode =='c': zfp_stream_set_params(zfp,method.minbits,method.maxbits,method.maxprec,method.minexp) else: - print('Must specify zfp mode') + raise ValueError('Must specify zfp mode') # setup destination dest_size = zfp_stream_maximum_size(zfp,field) @@ -189,10 +189,10 @@ def compress(input_array,method): # perform compression ret = zfp_write_header(zfp,field,ZFP_HEADER_FULL) if not ret: - print("zfp_write_header failed") + raise RuntimeError("zfp_write_header failed") compressed_size = zfp_compress(zfp,field) if not compressed_size: - print("zfp_compress is failed") + raise RuntimeError("zfp_compress is failed") # release buffers source_buffer.release() @@ -244,7 +244,7 @@ def decompress(source): # read zfp header ret = zfp_read_header(zfp,field,ZFP_HEADER_FULL); if not ret: - print("zfp_read_header failed") + raise RuntimeError("zfp_read_header failed") # determine destination data type if field._type == zfp_type_float: @@ -276,7 +276,7 @@ def decompress(source): # perform decompression ret = zfp_decompress(zfp,field) if not ret: - print("decompress failed") + raise RuntimeError("decompress failed") # release buffers source_buffer.release() @@ -350,7 +350,7 @@ class Zfp(Codec): ''' codec_id = 'zfp' - def __init__(self, mode = 'a',tol = 0.01, prec = 32, rate = 16, minbits = ZFP_MIN_BITS, maxbits = ZFP_MAX_BITS, minexp = ZFP_MIN_EXP, maxprec = ZFP_MAX_PREC): + def __init__(self, mode = 'a',tol = 0.0, prec = ZFP_MAX_PREC, rate = 0, minbits = ZFP_MIN_BITS, maxbits = ZFP_MAX_BITS, minexp = ZFP_MIN_EXP, maxprec = ZFP_MAX_PREC): self.mode=mode the_method=CompressMethod() @@ -377,7 +377,7 @@ class Zfp(Codec): the_method.set_minexp(minexp) the_method.set_maxprec(maxprec) else: - print("Wrong mode, please set mode to 'a', 'p', 'r' or 'c'") + raise ValueError("Wrong mode, please set mode to 'a', 'p', 'r' or 'c'") self.the_method=the_method def encode(self,buf): diff --git a/setup.py b/setup.py index 82126dc9..2592e70f 100644 --- a/setup.py +++ b/setup.py @@ -85,6 +85,8 @@ def blosc_extension(): if os.path.isdir(d)] include_dirs += [d for d in glob('c-blosc/internal-complibs/*/*') if os.path.isdir(d)] + include_dirs += [d for d in glob('c-blosc/internal-complibs/*/*/*') + if os.path.isdir(d)] define_macros += [('HAVE_LZ4', 1), ('HAVE_SNAPPY', 1), ('HAVE_ZLIB', 1), @@ -212,8 +214,8 @@ def zfp_extension(): define_macros = [] # setup sources - use ZFP bundled in blosc - zfp_sources = glob('c-blosc/internal-complibs/zfp*/src/*.c') - include_dirs = [d for d in glob('c-blosc/internal-complibs/zfp*/*') if os.path.isdir(d)] + zfp_sources = glob('zfp*/src/*.c') + include_dirs = [d for d in glob('zfp*/*') if os.path.isdir(d)] include_dirs += ['numcodecs'] include_dirs += [numpy.get_include()] # define_macros += [('CYTHON_TRACE', '1')] @@ -335,7 +337,7 @@ def build_extension(self, ext): def run_setup(with_extensions): if with_extensions: - ext_modules = (blosc_extension() + lz4_extension() + # zstd_extension() + + ext_modules = (blosc_extension() + lz4_extension() + zstd_extension() + zfp_extension() + compat_extension() + vlen_extension()) cmdclass = dict(build_ext=ve_build_ext) else: From 33de949c3c81301a28df5b69667a14ac61a640a0 Mon Sep 17 00:00:00 2001 From: halehawk Date: Wed, 9 Jan 2019 16:17:51 -0700 Subject: [PATCH 04/69] added set_stride, changed zfp source path --- c-blosc | 2 +- numcodecs/__init__.py | 9 +- numcodecs/blosc.c | 622 ++++++++++++++++++------------------ numcodecs/compat_ext.c | 2 +- numcodecs/lz4.c | 6 +- numcodecs/tests/__init__.py | 1 + numcodecs/tests/common.py | 3 +- numcodecs/tests/test_zfp.py | 66 ++++ numcodecs/vlen.c | 2 +- numcodecs/zfp.pyx | 101 +++--- numcodecs/zstd.c | 274 ++++++++-------- 11 files changed, 592 insertions(+), 496 deletions(-) create mode 100644 numcodecs/tests/test_zfp.py diff --git a/c-blosc b/c-blosc index 0d364e7a..eb37eb81 160000 --- a/c-blosc +++ b/c-blosc @@ -1 +1 @@ -Subproject commit 0d364e7a43b81a15245584c09f97943173f7b171 +Subproject commit eb37eb815f75391b6f9663d481441458030262e8 diff --git a/numcodecs/__init__.py b/numcodecs/__init__.py index 5ae6644c..df792c6e 100644 --- a/numcodecs/__init__.py +++ b/numcodecs/__init__.py @@ -17,8 +17,8 @@ `_. """ - from __future__ import absolute_import, print_function, division +import os, sys; sys.path.append(os.path.dirname(os.path.realpath(__file__))) import multiprocessing import atexit @@ -70,6 +70,13 @@ except ImportError: # pragma: no cover pass +try: + from numcodecs import zfp + from numcodecs.zfp import Zfp + register_codec(Zfp) +except ImportError: # pragma: no cover + pass + from numcodecs.astype import AsType register_codec(AsType) diff --git a/numcodecs/blosc.c b/numcodecs/blosc.c index 715abb2a..b5d80bff 100644 --- a/numcodecs/blosc.c +++ b/numcodecs/blosc.c @@ -1,4 +1,4 @@ -/* Generated by Cython 0.29.2 */ +/* Generated by Cython 0.29.1 */ /* BEGIN: Cython Metadata { @@ -26,79 +26,83 @@ ], "extra_compile_args": [ "-msse2", - "-mno-avx2", - "-DSHUFFLE_SSE2_ENABLED" + "-mavx2", + "-DSHUFFLE_SSE2_ENABLED", + "-DSHUFFLE_AVX2_ENABLED" ], "include_dirs": [ "c-blosc/blosc", + "c-blosc/internal-complibs/zstd-1.3.7", "c-blosc/internal-complibs/lz4-1.8.3", - "c-blosc/internal-complibs/snappy-1.1.1", "c-blosc/internal-complibs/zlib-1.2.8", - "c-blosc/internal-complibs/zstd-1.3.7", - "c-blosc/internal-complibs/zstd-1.3.7/common", - "c-blosc/internal-complibs/zstd-1.3.7/compress", - "c-blosc/internal-complibs/zstd-1.3.7/decompress", + "c-blosc/internal-complibs/snappy-1.1.1", "c-blosc/internal-complibs/zstd-1.3.7/deprecated", "c-blosc/internal-complibs/zstd-1.3.7/dictBuilder", + "c-blosc/internal-complibs/zstd-1.3.7/decompress", "c-blosc/internal-complibs/zstd-1.3.7/dll", - "c-blosc/internal-complibs/zstd-1.3.7/legacy" + "c-blosc/internal-complibs/zstd-1.3.7/legacy", + "c-blosc/internal-complibs/zstd-1.3.7/compress", + "c-blosc/internal-complibs/zstd-1.3.7/common", + "c-blosc/internal-complibs/zstd-1.3.7/dll/example" ], "name": "numcodecs.blosc", "sources": [ "numcodecs/blosc.pyx", - "c-blosc/blosc/bitshuffle-generic.c", - "c-blosc/blosc/blosc.c", "c-blosc/blosc/blosclz.c", - "c-blosc/blosc/fastcopy.c", + "c-blosc/blosc/bitshuffle-generic.c", "c-blosc/blosc/shuffle-generic.c", + "c-blosc/blosc/fastcopy.c", "c-blosc/blosc/shuffle.c", - "c-blosc/internal-complibs/lz4-1.8.3/lz4.c", + "c-blosc/blosc/blosc.c", "c-blosc/internal-complibs/lz4-1.8.3/lz4hc.c", + "c-blosc/internal-complibs/lz4-1.8.3/lz4.c", + "c-blosc/internal-complibs/snappy-1.1.1/snappy.cc", "c-blosc/internal-complibs/snappy-1.1.1/snappy-c.cc", "c-blosc/internal-complibs/snappy-1.1.1/snappy-sinksource.cc", "c-blosc/internal-complibs/snappy-1.1.1/snappy-stubs-internal.cc", - "c-blosc/internal-complibs/snappy-1.1.1/snappy.cc", + "c-blosc/internal-complibs/zlib-1.2.8/zutil.c", + "c-blosc/internal-complibs/zlib-1.2.8/crc32.c", + "c-blosc/internal-complibs/zlib-1.2.8/inflate.c", "c-blosc/internal-complibs/zlib-1.2.8/adler32.c", "c-blosc/internal-complibs/zlib-1.2.8/compress.c", - "c-blosc/internal-complibs/zlib-1.2.8/crc32.c", - "c-blosc/internal-complibs/zlib-1.2.8/deflate.c", "c-blosc/internal-complibs/zlib-1.2.8/gzclose.c", - "c-blosc/internal-complibs/zlib-1.2.8/gzlib.c", - "c-blosc/internal-complibs/zlib-1.2.8/gzread.c", - "c-blosc/internal-complibs/zlib-1.2.8/gzwrite.c", - "c-blosc/internal-complibs/zlib-1.2.8/infback.c", + "c-blosc/internal-complibs/zlib-1.2.8/trees.c", "c-blosc/internal-complibs/zlib-1.2.8/inffast.c", - "c-blosc/internal-complibs/zlib-1.2.8/inflate.c", + "c-blosc/internal-complibs/zlib-1.2.8/infback.c", + "c-blosc/internal-complibs/zlib-1.2.8/gzlib.c", "c-blosc/internal-complibs/zlib-1.2.8/inftrees.c", - "c-blosc/internal-complibs/zlib-1.2.8/trees.c", + "c-blosc/internal-complibs/zlib-1.2.8/deflate.c", + "c-blosc/internal-complibs/zlib-1.2.8/gzwrite.c", + "c-blosc/internal-complibs/zlib-1.2.8/gzread.c", "c-blosc/internal-complibs/zlib-1.2.8/uncompr.c", - "c-blosc/internal-complibs/zlib-1.2.8/zutil.c", - "c-blosc/internal-complibs/zstd-1.3.7/common/debug.c", - "c-blosc/internal-complibs/zstd-1.3.7/common/entropy_common.c", + "c-blosc/internal-complibs/zstd-1.3.7/common/zstd_common.c", "c-blosc/internal-complibs/zstd-1.3.7/common/error_private.c", - "c-blosc/internal-complibs/zstd-1.3.7/common/fse_decompress.c", + "c-blosc/internal-complibs/zstd-1.3.7/common/debug.c", "c-blosc/internal-complibs/zstd-1.3.7/common/pool.c", + "c-blosc/internal-complibs/zstd-1.3.7/common/fse_decompress.c", "c-blosc/internal-complibs/zstd-1.3.7/common/threading.c", "c-blosc/internal-complibs/zstd-1.3.7/common/xxhash.c", - "c-blosc/internal-complibs/zstd-1.3.7/common/zstd_common.c", - "c-blosc/internal-complibs/zstd-1.3.7/compress/fse_compress.c", + "c-blosc/internal-complibs/zstd-1.3.7/common/entropy_common.c", "c-blosc/internal-complibs/zstd-1.3.7/compress/hist.c", "c-blosc/internal-complibs/zstd-1.3.7/compress/huf_compress.c", "c-blosc/internal-complibs/zstd-1.3.7/compress/zstd_compress.c", - "c-blosc/internal-complibs/zstd-1.3.7/compress/zstd_double_fast.c", + "c-blosc/internal-complibs/zstd-1.3.7/compress/zstdmt_compress.c", + "c-blosc/internal-complibs/zstd-1.3.7/compress/fse_compress.c", "c-blosc/internal-complibs/zstd-1.3.7/compress/zstd_fast.c", - "c-blosc/internal-complibs/zstd-1.3.7/compress/zstd_lazy.c", "c-blosc/internal-complibs/zstd-1.3.7/compress/zstd_ldm.c", + "c-blosc/internal-complibs/zstd-1.3.7/compress/zstd_double_fast.c", "c-blosc/internal-complibs/zstd-1.3.7/compress/zstd_opt.c", - "c-blosc/internal-complibs/zstd-1.3.7/compress/zstdmt_compress.c", - "c-blosc/internal-complibs/zstd-1.3.7/decompress/huf_decompress.c", + "c-blosc/internal-complibs/zstd-1.3.7/compress/zstd_lazy.c", "c-blosc/internal-complibs/zstd-1.3.7/decompress/zstd_decompress.c", + "c-blosc/internal-complibs/zstd-1.3.7/decompress/huf_decompress.c", + "c-blosc/internal-complibs/zstd-1.3.7/dictBuilder/zdict.c", "c-blosc/internal-complibs/zstd-1.3.7/dictBuilder/cover.c", - "c-blosc/internal-complibs/zstd-1.3.7/dictBuilder/divsufsort.c", "c-blosc/internal-complibs/zstd-1.3.7/dictBuilder/fastcover.c", - "c-blosc/internal-complibs/zstd-1.3.7/dictBuilder/zdict.c", + "c-blosc/internal-complibs/zstd-1.3.7/dictBuilder/divsufsort.c", + "c-blosc/blosc/shuffle-sse2.c", "c-blosc/blosc/bitshuffle-sse2.c", - "c-blosc/blosc/shuffle-sse2.c" + "c-blosc/blosc/shuffle-avx2.c", + "c-blosc/blosc/bitshuffle-avx2.c" ] }, "module_name": "numcodecs.blosc" @@ -112,8 +116,8 @@ END: Cython Metadata */ #elif PY_VERSION_HEX < 0x02060000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03030000) #error Cython requires Python 2.6+ or Python 3.3+. #else -#define CYTHON_ABI "0_29_2" -#define CYTHON_HEX_VERSION 0x001D02F0 +#define CYTHON_ABI "0_29_1" +#define CYTHON_HEX_VERSION 0x001D01F0 #define CYTHON_FUTURE_DIVISION 1 #include #ifndef offsetof @@ -303,7 +307,7 @@ END: Cython Metadata */ #undef BASE #undef MASK #ifdef SIZEOF_VOID_P - enum { __pyx_check_sizeof_voidp = 1 / (int)(SIZEOF_VOID_P == sizeof(void*)) }; + enum { __pyx_check_sizeof_voidp = 1/(SIZEOF_VOID_P == sizeof(void*)) }; #endif #endif #ifndef __has_attribute @@ -952,7 +956,7 @@ struct __pyx_defaults { /* "compat_ext.pxd":4 * * - * cdef class Buffer: # <<<<<<<<<<<<<< + * cdef class Buffer: * cdef: * char *ptr */ @@ -1825,7 +1829,7 @@ static PyObject *__pyx_codeobj__36; /* "numcodecs/blosc.pyx":89 * * - * def init(): # <<<<<<<<<<<<<< + * def init(): * """Initialize the Blosc library environment.""" * blosc_init() */ @@ -1853,7 +1857,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_init(CYTHON_UNUSED PyObject *__pyx_s /* "numcodecs/blosc.pyx":91 * def init(): * """Initialize the Blosc library environment.""" - * blosc_init() # <<<<<<<<<<<<<< + * blosc_init() * * */ @@ -1862,7 +1866,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_init(CYTHON_UNUSED PyObject *__pyx_s /* "numcodecs/blosc.pyx":89 * * - * def init(): # <<<<<<<<<<<<<< + * def init(): * """Initialize the Blosc library environment.""" * blosc_init() */ @@ -1877,7 +1881,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_init(CYTHON_UNUSED PyObject *__pyx_s /* "numcodecs/blosc.pyx":94 * * - * def destroy(): # <<<<<<<<<<<<<< + * def destroy(): * """Destroy the Blosc library environment.""" * blosc_destroy() */ @@ -1905,7 +1909,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_2destroy(CYTHON_UNUSED PyObject *__p /* "numcodecs/blosc.pyx":96 * def destroy(): * """Destroy the Blosc library environment.""" - * blosc_destroy() # <<<<<<<<<<<<<< + * blosc_destroy() * * */ @@ -1914,7 +1918,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_2destroy(CYTHON_UNUSED PyObject *__p /* "numcodecs/blosc.pyx":94 * * - * def destroy(): # <<<<<<<<<<<<<< + * def destroy(): * """Destroy the Blosc library environment.""" * blosc_destroy() */ @@ -1929,7 +1933,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_2destroy(CYTHON_UNUSED PyObject *__p /* "numcodecs/blosc.pyx":99 * * - * def compname_to_compcode(cname): # <<<<<<<<<<<<<< + * def compname_to_compcode(cname): * """Return the compressor code associated with the compressor name. If the compressor * name is not recognized, or there is not support for it in this build, -1 is returned */ @@ -1964,7 +1968,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_4compname_to_compcode(CYTHON_UNUSED /* "numcodecs/blosc.pyx":103 * name is not recognized, or there is not support for it in this build, -1 is returned * instead.""" - * if isinstance(cname, text_type): # <<<<<<<<<<<<<< + * if isinstance(cname, text_type): * cname = cname.encode('ascii') * return blosc_compname_to_compcode(cname) */ @@ -1978,7 +1982,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_4compname_to_compcode(CYTHON_UNUSED /* "numcodecs/blosc.pyx":104 * instead.""" * if isinstance(cname, text_type): - * cname = cname.encode('ascii') # <<<<<<<<<<<<<< + * cname = cname.encode('ascii') * return blosc_compname_to_compcode(cname) * */ @@ -2005,7 +2009,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_4compname_to_compcode(CYTHON_UNUSED /* "numcodecs/blosc.pyx":103 * name is not recognized, or there is not support for it in this build, -1 is returned * instead.""" - * if isinstance(cname, text_type): # <<<<<<<<<<<<<< + * if isinstance(cname, text_type): * cname = cname.encode('ascii') * return blosc_compname_to_compcode(cname) */ @@ -2014,7 +2018,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_4compname_to_compcode(CYTHON_UNUSED /* "numcodecs/blosc.pyx":105 * if isinstance(cname, text_type): * cname = cname.encode('ascii') - * return blosc_compname_to_compcode(cname) # <<<<<<<<<<<<<< + * return blosc_compname_to_compcode(cname) * * */ @@ -2029,7 +2033,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_4compname_to_compcode(CYTHON_UNUSED /* "numcodecs/blosc.pyx":99 * * - * def compname_to_compcode(cname): # <<<<<<<<<<<<<< + * def compname_to_compcode(cname): * """Return the compressor code associated with the compressor name. If the compressor * name is not recognized, or there is not support for it in this build, -1 is returned */ @@ -2051,7 +2055,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_4compname_to_compcode(CYTHON_UNUSED /* "numcodecs/blosc.pyx":108 * * - * def list_compressors(): # <<<<<<<<<<<<<< + * def list_compressors(): * """Get a list of compressors supported in the current build.""" * s = blosc_list_compressors() */ @@ -2085,7 +2089,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_6list_compressors(CYTHON_UNUSED PyOb /* "numcodecs/blosc.pyx":110 * def list_compressors(): * """Get a list of compressors supported in the current build.""" - * s = blosc_list_compressors() # <<<<<<<<<<<<<< + * s = blosc_list_compressors() * if not PY2: * s = s.decode('ascii') */ @@ -2097,7 +2101,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_6list_compressors(CYTHON_UNUSED PyOb /* "numcodecs/blosc.pyx":111 * """Get a list of compressors supported in the current build.""" * s = blosc_list_compressors() - * if not PY2: # <<<<<<<<<<<<<< + * if not PY2: * s = s.decode('ascii') * return s.split(',') */ @@ -2111,7 +2115,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_6list_compressors(CYTHON_UNUSED PyOb /* "numcodecs/blosc.pyx":112 * s = blosc_list_compressors() * if not PY2: - * s = s.decode('ascii') # <<<<<<<<<<<<<< + * s = s.decode('ascii') * return s.split(',') * */ @@ -2138,7 +2142,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_6list_compressors(CYTHON_UNUSED PyOb /* "numcodecs/blosc.pyx":111 * """Get a list of compressors supported in the current build.""" * s = blosc_list_compressors() - * if not PY2: # <<<<<<<<<<<<<< + * if not PY2: * s = s.decode('ascii') * return s.split(',') */ @@ -2147,7 +2151,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_6list_compressors(CYTHON_UNUSED PyOb /* "numcodecs/blosc.pyx":113 * if not PY2: * s = s.decode('ascii') - * return s.split(',') # <<<<<<<<<<<<<< + * return s.split(',') * * */ @@ -2176,7 +2180,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_6list_compressors(CYTHON_UNUSED PyOb /* "numcodecs/blosc.pyx":108 * * - * def list_compressors(): # <<<<<<<<<<<<<< + * def list_compressors(): * """Get a list of compressors supported in the current build.""" * s = blosc_list_compressors() */ @@ -2198,7 +2202,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_6list_compressors(CYTHON_UNUSED PyOb /* "numcodecs/blosc.pyx":116 * * - * def get_nthreads(): # <<<<<<<<<<<<<< + * def get_nthreads(): * """Get the number of threads that Blosc uses internally for compression and * decompression.""" */ @@ -2227,7 +2231,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_8get_nthreads(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":119 * """Get the number of threads that Blosc uses internally for compression and * decompression.""" - * return blosc_get_nthreads() # <<<<<<<<<<<<<< + * return blosc_get_nthreads() * * */ @@ -2241,7 +2245,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_8get_nthreads(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":116 * * - * def get_nthreads(): # <<<<<<<<<<<<<< + * def get_nthreads(): * """Get the number of threads that Blosc uses internally for compression and * decompression.""" */ @@ -2260,7 +2264,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_8get_nthreads(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":122 * * - * def set_nthreads(int nthreads): # <<<<<<<<<<<<<< + * def set_nthreads(int nthreads): * """Set the number of threads that Blosc uses internally for compression and * decompression.""" */ @@ -2299,7 +2303,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_10set_nthreads(CYTHON_UNUSED PyObjec /* "numcodecs/blosc.pyx":125 * """Set the number of threads that Blosc uses internally for compression and * decompression.""" - * return blosc_set_nthreads(nthreads) # <<<<<<<<<<<<<< + * return blosc_set_nthreads(nthreads) * * */ @@ -2313,7 +2317,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_10set_nthreads(CYTHON_UNUSED PyObjec /* "numcodecs/blosc.pyx":122 * * - * def set_nthreads(int nthreads): # <<<<<<<<<<<<<< + * def set_nthreads(int nthreads): * """Set the number of threads that Blosc uses internally for compression and * decompression.""" */ @@ -2332,7 +2336,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_10set_nthreads(CYTHON_UNUSED PyObjec /* "numcodecs/blosc.pyx":128 * * - * def cbuffer_sizes(source): # <<<<<<<<<<<<<< + * def cbuffer_sizes(source): * """Return information about a compressed buffer, namely the number of uncompressed * bytes (`nbytes`) and compressed (`cbytes`). It also returns the `blocksize` (which */ @@ -2368,7 +2372,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_12cbuffer_sizes(CYTHON_UNUSED PyObje /* "numcodecs/blosc.pyx":145 * * # obtain buffer - * buffer = Buffer(source, PyBUF_ANY_CONTIGUOUS) # <<<<<<<<<<<<<< + * buffer = Buffer(source, PyBUF_ANY_CONTIGUOUS) * * # determine buffer size */ @@ -2391,7 +2395,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_12cbuffer_sizes(CYTHON_UNUSED PyObje /* "numcodecs/blosc.pyx":148 * * # determine buffer size - * blosc_cbuffer_sizes(buffer.ptr, &nbytes, &cbytes, &blocksize) # <<<<<<<<<<<<<< + * blosc_cbuffer_sizes(buffer.ptr, &nbytes, &cbytes, &blocksize) * * # release buffers */ @@ -2400,7 +2404,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_12cbuffer_sizes(CYTHON_UNUSED PyObje /* "numcodecs/blosc.pyx":151 * * # release buffers - * buffer.release() # <<<<<<<<<<<<<< + * buffer.release() * * return nbytes, cbytes, blocksize */ @@ -2411,7 +2415,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_12cbuffer_sizes(CYTHON_UNUSED PyObje /* "numcodecs/blosc.pyx":153 * buffer.release() * - * return nbytes, cbytes, blocksize # <<<<<<<<<<<<<< + * return nbytes, cbytes, blocksize * * */ @@ -2440,7 +2444,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_12cbuffer_sizes(CYTHON_UNUSED PyObje /* "numcodecs/blosc.pyx":128 * * - * def cbuffer_sizes(source): # <<<<<<<<<<<<<< + * def cbuffer_sizes(source): * """Return information about a compressed buffer, namely the number of uncompressed * bytes (`nbytes`) and compressed (`cbytes`). It also returns the `blocksize` (which */ @@ -2463,7 +2467,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_12cbuffer_sizes(CYTHON_UNUSED PyObje /* "numcodecs/blosc.pyx":156 * * - * def cbuffer_complib(source): # <<<<<<<<<<<<<< + * def cbuffer_complib(source): * """Return the name of the compression library used to compress `source`.""" * cdef: */ @@ -2498,7 +2502,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_14cbuffer_complib(CYTHON_UNUSED PyOb /* "numcodecs/blosc.pyx":162 * * # obtain buffer - * buffer = Buffer(source, PyBUF_ANY_CONTIGUOUS) # <<<<<<<<<<<<<< + * buffer = Buffer(source, PyBUF_ANY_CONTIGUOUS) * * # determine buffer size */ @@ -2521,7 +2525,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_14cbuffer_complib(CYTHON_UNUSED PyOb /* "numcodecs/blosc.pyx":165 * * # determine buffer size - * complib = blosc_cbuffer_complib(buffer.ptr) # <<<<<<<<<<<<<< + * complib = blosc_cbuffer_complib(buffer.ptr) * * # release buffers */ @@ -2533,7 +2537,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_14cbuffer_complib(CYTHON_UNUSED PyOb /* "numcodecs/blosc.pyx":168 * * # release buffers - * buffer.release() # <<<<<<<<<<<<<< + * buffer.release() * * if not PY2: */ @@ -2544,7 +2548,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_14cbuffer_complib(CYTHON_UNUSED PyOb /* "numcodecs/blosc.pyx":170 * buffer.release() * - * if not PY2: # <<<<<<<<<<<<<< + * if not PY2: * complib = complib.decode('ascii') * */ @@ -2558,7 +2562,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_14cbuffer_complib(CYTHON_UNUSED PyOb /* "numcodecs/blosc.pyx":171 * * if not PY2: - * complib = complib.decode('ascii') # <<<<<<<<<<<<<< + * complib = complib.decode('ascii') * * return complib */ @@ -2585,7 +2589,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_14cbuffer_complib(CYTHON_UNUSED PyOb /* "numcodecs/blosc.pyx":170 * buffer.release() * - * if not PY2: # <<<<<<<<<<<<<< + * if not PY2: * complib = complib.decode('ascii') * */ @@ -2594,7 +2598,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_14cbuffer_complib(CYTHON_UNUSED PyOb /* "numcodecs/blosc.pyx":173 * complib = complib.decode('ascii') * - * return complib # <<<<<<<<<<<<<< + * return complib * * */ @@ -2606,7 +2610,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_14cbuffer_complib(CYTHON_UNUSED PyOb /* "numcodecs/blosc.pyx":156 * * - * def cbuffer_complib(source): # <<<<<<<<<<<<<< + * def cbuffer_complib(source): * """Return the name of the compression library used to compress `source`.""" * cdef: */ @@ -2629,7 +2633,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_14cbuffer_complib(CYTHON_UNUSED PyOb /* "numcodecs/blosc.pyx":176 * * - * def cbuffer_metainfo(source): # <<<<<<<<<<<<<< + * def cbuffer_metainfo(source): * """Return some meta-information about the compressed buffer in `source`, including * the typesize, whether the shuffle or bit-shuffle filters were used, and the */ @@ -2666,7 +2670,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_16cbuffer_metainfo(CYTHON_UNUSED PyO /* "numcodecs/blosc.pyx":194 * * # obtain buffer - * buffer = Buffer(source, PyBUF_ANY_CONTIGUOUS) # <<<<<<<<<<<<<< + * buffer = Buffer(source, PyBUF_ANY_CONTIGUOUS) * * # determine buffer size */ @@ -2689,7 +2693,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_16cbuffer_metainfo(CYTHON_UNUSED PyO /* "numcodecs/blosc.pyx":197 * * # determine buffer size - * blosc_cbuffer_metainfo(buffer.ptr, &typesize, &flags) # <<<<<<<<<<<<<< + * blosc_cbuffer_metainfo(buffer.ptr, &typesize, &flags) * * # release buffers */ @@ -2698,7 +2702,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_16cbuffer_metainfo(CYTHON_UNUSED PyO /* "numcodecs/blosc.pyx":200 * * # release buffers - * buffer.release() # <<<<<<<<<<<<<< + * buffer.release() * * # decompose flags */ @@ -2709,7 +2713,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_16cbuffer_metainfo(CYTHON_UNUSED PyO /* "numcodecs/blosc.pyx":203 * * # decompose flags - * if flags & BLOSC_DOSHUFFLE: # <<<<<<<<<<<<<< + * if flags & BLOSC_DOSHUFFLE: * shuffle = SHUFFLE * elif flags & BLOSC_DOBITSHUFFLE: */ @@ -2719,7 +2723,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_16cbuffer_metainfo(CYTHON_UNUSED PyO /* "numcodecs/blosc.pyx":204 * # decompose flags * if flags & BLOSC_DOSHUFFLE: - * shuffle = SHUFFLE # <<<<<<<<<<<<<< + * shuffle = SHUFFLE * elif flags & BLOSC_DOBITSHUFFLE: * shuffle = BITSHUFFLE */ @@ -2731,7 +2735,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_16cbuffer_metainfo(CYTHON_UNUSED PyO /* "numcodecs/blosc.pyx":203 * * # decompose flags - * if flags & BLOSC_DOSHUFFLE: # <<<<<<<<<<<<<< + * if flags & BLOSC_DOSHUFFLE: * shuffle = SHUFFLE * elif flags & BLOSC_DOBITSHUFFLE: */ @@ -2741,7 +2745,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_16cbuffer_metainfo(CYTHON_UNUSED PyO /* "numcodecs/blosc.pyx":205 * if flags & BLOSC_DOSHUFFLE: * shuffle = SHUFFLE - * elif flags & BLOSC_DOBITSHUFFLE: # <<<<<<<<<<<<<< + * elif flags & BLOSC_DOBITSHUFFLE: * shuffle = BITSHUFFLE * else: */ @@ -2751,7 +2755,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_16cbuffer_metainfo(CYTHON_UNUSED PyO /* "numcodecs/blosc.pyx":206 * shuffle = SHUFFLE * elif flags & BLOSC_DOBITSHUFFLE: - * shuffle = BITSHUFFLE # <<<<<<<<<<<<<< + * shuffle = BITSHUFFLE * else: * shuffle = NOSHUFFLE */ @@ -2763,7 +2767,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_16cbuffer_metainfo(CYTHON_UNUSED PyO /* "numcodecs/blosc.pyx":205 * if flags & BLOSC_DOSHUFFLE: * shuffle = SHUFFLE - * elif flags & BLOSC_DOBITSHUFFLE: # <<<<<<<<<<<<<< + * elif flags & BLOSC_DOBITSHUFFLE: * shuffle = BITSHUFFLE * else: */ @@ -2773,7 +2777,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_16cbuffer_metainfo(CYTHON_UNUSED PyO /* "numcodecs/blosc.pyx":208 * shuffle = BITSHUFFLE * else: - * shuffle = NOSHUFFLE # <<<<<<<<<<<<<< + * shuffle = NOSHUFFLE * memcpyed = flags & BLOSC_MEMCPYED * */ @@ -2788,7 +2792,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_16cbuffer_metainfo(CYTHON_UNUSED PyO /* "numcodecs/blosc.pyx":209 * else: * shuffle = NOSHUFFLE - * memcpyed = flags & BLOSC_MEMCPYED # <<<<<<<<<<<<<< + * memcpyed = flags & BLOSC_MEMCPYED * * return typesize, shuffle, memcpyed */ @@ -2797,7 +2801,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_16cbuffer_metainfo(CYTHON_UNUSED PyO /* "numcodecs/blosc.pyx":211 * memcpyed = flags & BLOSC_MEMCPYED * - * return typesize, shuffle, memcpyed # <<<<<<<<<<<<<< + * return typesize, shuffle, memcpyed * * */ @@ -2824,7 +2828,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_16cbuffer_metainfo(CYTHON_UNUSED PyO /* "numcodecs/blosc.pyx":176 * * - * def cbuffer_metainfo(source): # <<<<<<<<<<<<<< + * def cbuffer_metainfo(source): * """Return some meta-information about the compressed buffer in `source`, including * the typesize, whether the shuffle or bit-shuffle filters were used, and the */ @@ -2847,7 +2851,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_16cbuffer_metainfo(CYTHON_UNUSED PyO /* "numcodecs/blosc.pyx":214 * * - * def err_bad_cname(cname): # <<<<<<<<<<<<<< + * def err_bad_cname(cname): * raise ValueError('bad compressor or compressor not supported: %r; expected one of ' * '%s' % (cname, list_compressors())) */ @@ -2878,7 +2882,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_18err_bad_cname(CYTHON_UNUSED PyObje /* "numcodecs/blosc.pyx":216 * def err_bad_cname(cname): * raise ValueError('bad compressor or compressor not supported: %r; expected one of ' - * '%s' % (cname, list_compressors())) # <<<<<<<<<<<<<< + * '%s' % (cname, list_compressors())) * * */ @@ -2914,7 +2918,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_18err_bad_cname(CYTHON_UNUSED PyObje /* "numcodecs/blosc.pyx":215 * * def err_bad_cname(cname): - * raise ValueError('bad compressor or compressor not supported: %r; expected one of ' # <<<<<<<<<<<<<< + * raise ValueError('bad compressor or compressor not supported: %r; expected one of ' * '%s' % (cname, list_compressors())) * */ @@ -2928,7 +2932,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_18err_bad_cname(CYTHON_UNUSED PyObje /* "numcodecs/blosc.pyx":214 * * - * def err_bad_cname(cname): # <<<<<<<<<<<<<< + * def err_bad_cname(cname): * raise ValueError('bad compressor or compressor not supported: %r; expected one of ' * '%s' % (cname, list_compressors())) */ @@ -2948,7 +2952,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_18err_bad_cname(CYTHON_UNUSED PyObje /* "numcodecs/blosc.pyx":219 * * - * def compress(source, char* cname, int clevel, int shuffle=SHUFFLE, # <<<<<<<<<<<<<< + * def compress(source, char* cname, int clevel, int shuffle=SHUFFLE, * int blocksize=AUTOBLOCKS): * """Compress data. */ @@ -3095,7 +3099,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":256 * * # check valid cname early - * if PY2: # <<<<<<<<<<<<<< + * if PY2: * cname_str = cname * else: */ @@ -3108,7 +3112,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":257 * # check valid cname early * if PY2: - * cname_str = cname # <<<<<<<<<<<<<< + * cname_str = cname * else: * cname_str = cname.decode('ascii') */ @@ -3120,7 +3124,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":256 * * # check valid cname early - * if PY2: # <<<<<<<<<<<<<< + * if PY2: * cname_str = cname * else: */ @@ -3130,7 +3134,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":259 * cname_str = cname * else: - * cname_str = cname.decode('ascii') # <<<<<<<<<<<<<< + * cname_str = cname.decode('ascii') * if cname_str not in list_compressors(): * err_bad_cname(cname_str) */ @@ -3145,7 +3149,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":260 * else: * cname_str = cname.decode('ascii') - * if cname_str not in list_compressors(): # <<<<<<<<<<<<<< + * if cname_str not in list_compressors(): * err_bad_cname(cname_str) * */ @@ -3174,7 +3178,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":261 * cname_str = cname.decode('ascii') * if cname_str not in list_compressors(): - * err_bad_cname(cname_str) # <<<<<<<<<<<<<< + * err_bad_cname(cname_str) * * # setup source buffer */ @@ -3200,7 +3204,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":260 * else: * cname_str = cname.decode('ascii') - * if cname_str not in list_compressors(): # <<<<<<<<<<<<<< + * if cname_str not in list_compressors(): * err_bad_cname(cname_str) * */ @@ -3209,7 +3213,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":264 * * # setup source buffer - * source_buffer = Buffer(source, PyBUF_ANY_CONTIGUOUS) # <<<<<<<<<<<<<< + * source_buffer = Buffer(source, PyBUF_ANY_CONTIGUOUS) * source_ptr = source_buffer.ptr * nbytes = source_buffer.nbytes */ @@ -3232,7 +3236,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":265 * # setup source buffer * source_buffer = Buffer(source, PyBUF_ANY_CONTIGUOUS) - * source_ptr = source_buffer.ptr # <<<<<<<<<<<<<< + * source_ptr = source_buffer.ptr * nbytes = source_buffer.nbytes * itemsize = source_buffer.itemsize */ @@ -3242,7 +3246,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":266 * source_buffer = Buffer(source, PyBUF_ANY_CONTIGUOUS) * source_ptr = source_buffer.ptr - * nbytes = source_buffer.nbytes # <<<<<<<<<<<<<< + * nbytes = source_buffer.nbytes * itemsize = source_buffer.itemsize * */ @@ -3252,7 +3256,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":267 * source_ptr = source_buffer.ptr * nbytes = source_buffer.nbytes - * itemsize = source_buffer.itemsize # <<<<<<<<<<<<<< + * itemsize = source_buffer.itemsize * * # determine shuffle */ @@ -3262,7 +3266,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":270 * * # determine shuffle - * if shuffle == AUTOSHUFFLE: # <<<<<<<<<<<<<< + * if shuffle == AUTOSHUFFLE: * if itemsize == 1: * shuffle = BITSHUFFLE */ @@ -3280,7 +3284,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":271 * # determine shuffle * if shuffle == AUTOSHUFFLE: - * if itemsize == 1: # <<<<<<<<<<<<<< + * if itemsize == 1: * shuffle = BITSHUFFLE * else: */ @@ -3290,7 +3294,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":272 * if shuffle == AUTOSHUFFLE: * if itemsize == 1: - * shuffle = BITSHUFFLE # <<<<<<<<<<<<<< + * shuffle = BITSHUFFLE * else: * shuffle = SHUFFLE */ @@ -3303,7 +3307,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":271 * # determine shuffle * if shuffle == AUTOSHUFFLE: - * if itemsize == 1: # <<<<<<<<<<<<<< + * if itemsize == 1: * shuffle = BITSHUFFLE * else: */ @@ -3313,7 +3317,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":274 * shuffle = BITSHUFFLE * else: - * shuffle = SHUFFLE # <<<<<<<<<<<<<< + * shuffle = SHUFFLE * elif shuffle not in [NOSHUFFLE, SHUFFLE, BITSHUFFLE]: * raise ValueError('invalid shuffle argument; expected -1, 0, 1 or 2, found %r' % */ @@ -3329,7 +3333,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":270 * * # determine shuffle - * if shuffle == AUTOSHUFFLE: # <<<<<<<<<<<<<< + * if shuffle == AUTOSHUFFLE: * if itemsize == 1: * shuffle = BITSHUFFLE */ @@ -3339,7 +3343,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":275 * else: * shuffle = SHUFFLE - * elif shuffle not in [NOSHUFFLE, SHUFFLE, BITSHUFFLE]: # <<<<<<<<<<<<<< + * elif shuffle not in [NOSHUFFLE, SHUFFLE, BITSHUFFLE]: * raise ValueError('invalid shuffle argument; expected -1, 0, 1 or 2, found %r' % * shuffle) */ @@ -3389,7 +3393,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":277 * elif shuffle not in [NOSHUFFLE, SHUFFLE, BITSHUFFLE]: * raise ValueError('invalid shuffle argument; expected -1, 0, 1 or 2, found %r' % - * shuffle) # <<<<<<<<<<<<<< + * shuffle) * * try: */ @@ -3399,7 +3403,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":276 * shuffle = SHUFFLE * elif shuffle not in [NOSHUFFLE, SHUFFLE, BITSHUFFLE]: - * raise ValueError('invalid shuffle argument; expected -1, 0, 1 or 2, found %r' % # <<<<<<<<<<<<<< + * raise ValueError('invalid shuffle argument; expected -1, 0, 1 or 2, found %r' % * shuffle) * */ @@ -3416,7 +3420,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":275 * else: * shuffle = SHUFFLE - * elif shuffle not in [NOSHUFFLE, SHUFFLE, BITSHUFFLE]: # <<<<<<<<<<<<<< + * elif shuffle not in [NOSHUFFLE, SHUFFLE, BITSHUFFLE]: * raise ValueError('invalid shuffle argument; expected -1, 0, 1 or 2, found %r' % * shuffle) */ @@ -3426,7 +3430,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":279 * shuffle) * - * try: # <<<<<<<<<<<<<< + * try: * * # setup destination */ @@ -3435,7 +3439,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":282 * * # setup destination - * dest = PyBytes_FromStringAndSize(NULL, nbytes + BLOSC_MAX_OVERHEAD) # <<<<<<<<<<<<<< + * dest = PyBytes_FromStringAndSize(NULL, nbytes + BLOSC_MAX_OVERHEAD) * dest_ptr = PyBytes_AS_STRING(dest) * */ @@ -3447,7 +3451,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":283 * # setup destination * dest = PyBytes_FromStringAndSize(NULL, nbytes + BLOSC_MAX_OVERHEAD) - * dest_ptr = PyBytes_AS_STRING(dest) # <<<<<<<<<<<<<< + * dest_ptr = PyBytes_AS_STRING(dest) * * # perform compression */ @@ -3456,7 +3460,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":286 * * # perform compression - * if _get_use_threads(): # <<<<<<<<<<<<<< + * if _get_use_threads(): * # allow blosc to use threads internally * */ @@ -3484,7 +3488,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":292 * # to ensure no-one else can modify the global context while we're setting it * # up and using it. - * with mutex: # <<<<<<<<<<<<<< + * with mutex: * * # set compressor */ @@ -3525,7 +3529,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":295 * * # set compressor - * compressor_set = blosc_set_compressor(cname) # <<<<<<<<<<<<<< + * compressor_set = blosc_set_compressor(cname) * if compressor_set < 0: * # shouldn't happen if we checked against list of compressors */ @@ -3534,7 +3538,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":296 * # set compressor * compressor_set = blosc_set_compressor(cname) - * if compressor_set < 0: # <<<<<<<<<<<<<< + * if compressor_set < 0: * # shouldn't happen if we checked against list of compressors * # already, but just in case */ @@ -3544,7 +3548,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":299 * # shouldn't happen if we checked against list of compressors * # already, but just in case - * err_bad_cname(cname_str) # <<<<<<<<<<<<<< + * err_bad_cname(cname_str) * * # set blocksize */ @@ -3570,7 +3574,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":296 * # set compressor * compressor_set = blosc_set_compressor(cname) - * if compressor_set < 0: # <<<<<<<<<<<<<< + * if compressor_set < 0: * # shouldn't happen if we checked against list of compressors * # already, but just in case */ @@ -3579,7 +3583,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":302 * * # set blocksize - * blosc_set_blocksize(blocksize) # <<<<<<<<<<<<<< + * blosc_set_blocksize(blocksize) * * # perform compression */ @@ -3588,7 +3592,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":305 * * # perform compression - * with nogil: # <<<<<<<<<<<<<< + * with nogil: * cbytes = blosc_compress(clevel, shuffle, itemsize, nbytes, source_ptr, * dest_ptr, nbytes + BLOSC_MAX_OVERHEAD) */ @@ -3603,7 +3607,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":306 * # perform compression * with nogil: - * cbytes = blosc_compress(clevel, shuffle, itemsize, nbytes, source_ptr, # <<<<<<<<<<<<<< + * cbytes = blosc_compress(clevel, shuffle, itemsize, nbytes, source_ptr, * dest_ptr, nbytes + BLOSC_MAX_OVERHEAD) * */ @@ -3613,7 +3617,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":305 * * # perform compression - * with nogil: # <<<<<<<<<<<<<< + * with nogil: * cbytes = blosc_compress(clevel, shuffle, itemsize, nbytes, source_ptr, * dest_ptr, nbytes + BLOSC_MAX_OVERHEAD) */ @@ -3632,7 +3636,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":292 * # to ensure no-one else can modify the global context while we're setting it * # up and using it. - * with mutex: # <<<<<<<<<<<<<< + * with mutex: * * # set compressor */ @@ -3713,7 +3717,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":286 * * # perform compression - * if _get_use_threads(): # <<<<<<<<<<<<<< + * if _get_use_threads(): * # allow blosc to use threads internally * */ @@ -3723,7 +3727,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":310 * * else: - * with nogil: # <<<<<<<<<<<<<< + * with nogil: * cbytes = blosc_compress_ctx(clevel, shuffle, itemsize, nbytes, source_ptr, * dest_ptr, nbytes + BLOSC_MAX_OVERHEAD, */ @@ -3739,7 +3743,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":311 * else: * with nogil: - * cbytes = blosc_compress_ctx(clevel, shuffle, itemsize, nbytes, source_ptr, # <<<<<<<<<<<<<< + * cbytes = blosc_compress_ctx(clevel, shuffle, itemsize, nbytes, source_ptr, * dest_ptr, nbytes + BLOSC_MAX_OVERHEAD, * cname, blocksize, 1) */ @@ -3749,7 +3753,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":310 * * else: - * with nogil: # <<<<<<<<<<<<<< + * with nogil: * cbytes = blosc_compress_ctx(clevel, shuffle, itemsize, nbytes, source_ptr, * dest_ptr, nbytes + BLOSC_MAX_OVERHEAD, */ @@ -3771,7 +3775,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":318 * * # release buffers - * source_buffer.release() # <<<<<<<<<<<<<< + * source_buffer.release() * * # check compression was successful */ @@ -3837,7 +3841,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":321 * * # check compression was successful - * if cbytes <= 0: # <<<<<<<<<<<<<< + * if cbytes <= 0: * raise RuntimeError('error during blosc compression: %d' % cbytes) * */ @@ -3847,7 +3851,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":322 * # check compression was successful * if cbytes <= 0: - * raise RuntimeError('error during blosc compression: %d' % cbytes) # <<<<<<<<<<<<<< + * raise RuntimeError('error during blosc compression: %d' % cbytes) * * # resize after compression */ @@ -3866,7 +3870,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":321 * * # check compression was successful - * if cbytes <= 0: # <<<<<<<<<<<<<< + * if cbytes <= 0: * raise RuntimeError('error during blosc compression: %d' % cbytes) * */ @@ -3875,7 +3879,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":325 * * # resize after compression - * dest = dest[:cbytes] # <<<<<<<<<<<<<< + * dest = dest[:cbytes] * * return dest */ @@ -3891,7 +3895,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":327 * dest = dest[:cbytes] * - * return dest # <<<<<<<<<<<<<< + * return dest * * */ @@ -3903,7 +3907,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":219 * * - * def compress(source, char* cname, int clevel, int shuffle=SHUFFLE, # <<<<<<<<<<<<<< + * def compress(source, char* cname, int clevel, int shuffle=SHUFFLE, * int blocksize=AUTOBLOCKS): * """Compress data. */ @@ -3928,7 +3932,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":330 * * - * def decompress(source, dest=None): # <<<<<<<<<<<<<< + * def decompress(source, dest=None): * """Decompress data. * */ @@ -4035,7 +4039,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_22decompress(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":352 * char *dest_ptr * Buffer source_buffer - * Buffer dest_buffer = None # <<<<<<<<<<<<<< + * Buffer dest_buffer = None * size_t nbytes, cbytes, blocksize * */ @@ -4045,7 +4049,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_22decompress(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":356 * * # setup source buffer - * source_buffer = Buffer(source, PyBUF_ANY_CONTIGUOUS) # <<<<<<<<<<<<<< + * source_buffer = Buffer(source, PyBUF_ANY_CONTIGUOUS) * source_ptr = source_buffer.ptr * */ @@ -4068,7 +4072,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_22decompress(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":357 * # setup source buffer * source_buffer = Buffer(source, PyBUF_ANY_CONTIGUOUS) - * source_ptr = source_buffer.ptr # <<<<<<<<<<<<<< + * source_ptr = source_buffer.ptr * * # determine buffer size */ @@ -4078,7 +4082,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_22decompress(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":360 * * # determine buffer size - * blosc_cbuffer_sizes(source_ptr, &nbytes, &cbytes, &blocksize) # <<<<<<<<<<<<<< + * blosc_cbuffer_sizes(source_ptr, &nbytes, &cbytes, &blocksize) * * # setup destination buffer */ @@ -4087,7 +4091,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_22decompress(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":363 * * # setup destination buffer - * if dest is None: # <<<<<<<<<<<<<< + * if dest is None: * # allocate memory * dest = PyBytes_FromStringAndSize(NULL, nbytes) */ @@ -4098,7 +4102,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_22decompress(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":365 * if dest is None: * # allocate memory - * dest = PyBytes_FromStringAndSize(NULL, nbytes) # <<<<<<<<<<<<<< + * dest = PyBytes_FromStringAndSize(NULL, nbytes) * dest_ptr = PyBytes_AS_STRING(dest) * dest_nbytes = nbytes */ @@ -4110,7 +4114,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_22decompress(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":366 * # allocate memory * dest = PyBytes_FromStringAndSize(NULL, nbytes) - * dest_ptr = PyBytes_AS_STRING(dest) # <<<<<<<<<<<<<< + * dest_ptr = PyBytes_AS_STRING(dest) * dest_nbytes = nbytes * else: */ @@ -4119,7 +4123,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_22decompress(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":367 * dest = PyBytes_FromStringAndSize(NULL, nbytes) * dest_ptr = PyBytes_AS_STRING(dest) - * dest_nbytes = nbytes # <<<<<<<<<<<<<< + * dest_nbytes = nbytes * else: * arr = ensure_contiguous_ndarray(dest) */ @@ -4128,7 +4132,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_22decompress(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":363 * * # setup destination buffer - * if dest is None: # <<<<<<<<<<<<<< + * if dest is None: * # allocate memory * dest = PyBytes_FromStringAndSize(NULL, nbytes) */ @@ -4138,7 +4142,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_22decompress(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":369 * dest_nbytes = nbytes * else: - * arr = ensure_contiguous_ndarray(dest) # <<<<<<<<<<<<<< + * arr = ensure_contiguous_ndarray(dest) * dest_buffer = Buffer(arr, PyBUF_ANY_CONTIGUOUS | PyBUF_WRITEABLE) * dest_ptr = dest_buffer.ptr */ @@ -4166,7 +4170,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_22decompress(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":370 * else: * arr = ensure_contiguous_ndarray(dest) - * dest_buffer = Buffer(arr, PyBUF_ANY_CONTIGUOUS | PyBUF_WRITEABLE) # <<<<<<<<<<<<<< + * dest_buffer = Buffer(arr, PyBUF_ANY_CONTIGUOUS | PyBUF_WRITEABLE) * dest_ptr = dest_buffer.ptr * dest_nbytes = dest_buffer.nbytes */ @@ -4189,7 +4193,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_22decompress(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":371 * arr = ensure_contiguous_ndarray(dest) * dest_buffer = Buffer(arr, PyBUF_ANY_CONTIGUOUS | PyBUF_WRITEABLE) - * dest_ptr = dest_buffer.ptr # <<<<<<<<<<<<<< + * dest_ptr = dest_buffer.ptr * dest_nbytes = dest_buffer.nbytes * */ @@ -4199,7 +4203,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_22decompress(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":372 * dest_buffer = Buffer(arr, PyBUF_ANY_CONTIGUOUS | PyBUF_WRITEABLE) * dest_ptr = dest_buffer.ptr - * dest_nbytes = dest_buffer.nbytes # <<<<<<<<<<<<<< + * dest_nbytes = dest_buffer.nbytes * * try: */ @@ -4211,7 +4215,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_22decompress(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":374 * dest_nbytes = dest_buffer.nbytes * - * try: # <<<<<<<<<<<<<< + * try: * * # guard condition */ @@ -4220,7 +4224,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_22decompress(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":377 * * # guard condition - * if dest_nbytes < nbytes: # <<<<<<<<<<<<<< + * if dest_nbytes < nbytes: * raise ValueError('destination buffer too small; expected at least %s, ' * 'got %s' % (nbytes, dest_nbytes)) */ @@ -4230,7 +4234,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_22decompress(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":379 * if dest_nbytes < nbytes: * raise ValueError('destination buffer too small; expected at least %s, ' - * 'got %s' % (nbytes, dest_nbytes)) # <<<<<<<<<<<<<< + * 'got %s' % (nbytes, dest_nbytes)) * * # perform decompression */ @@ -4253,7 +4257,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_22decompress(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":378 * # guard condition * if dest_nbytes < nbytes: - * raise ValueError('destination buffer too small; expected at least %s, ' # <<<<<<<<<<<<<< + * raise ValueError('destination buffer too small; expected at least %s, ' * 'got %s' % (nbytes, dest_nbytes)) * */ @@ -4267,7 +4271,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_22decompress(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":377 * * # guard condition - * if dest_nbytes < nbytes: # <<<<<<<<<<<<<< + * if dest_nbytes < nbytes: * raise ValueError('destination buffer too small; expected at least %s, ' * 'got %s' % (nbytes, dest_nbytes)) */ @@ -4276,7 +4280,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_22decompress(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":382 * * # perform decompression - * if _get_use_threads(): # <<<<<<<<<<<<<< + * if _get_use_threads(): * # allow blosc to use threads internally * with nogil: */ @@ -4304,7 +4308,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_22decompress(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":384 * if _get_use_threads(): * # allow blosc to use threads internally - * with nogil: # <<<<<<<<<<<<<< + * with nogil: * ret = blosc_decompress(source_ptr, dest_ptr, nbytes) * else: */ @@ -4319,7 +4323,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_22decompress(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":385 * # allow blosc to use threads internally * with nogil: - * ret = blosc_decompress(source_ptr, dest_ptr, nbytes) # <<<<<<<<<<<<<< + * ret = blosc_decompress(source_ptr, dest_ptr, nbytes) * else: * with nogil: */ @@ -4329,7 +4333,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_22decompress(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":384 * if _get_use_threads(): * # allow blosc to use threads internally - * with nogil: # <<<<<<<<<<<<<< + * with nogil: * ret = blosc_decompress(source_ptr, dest_ptr, nbytes) * else: */ @@ -4348,7 +4352,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_22decompress(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":382 * * # perform decompression - * if _get_use_threads(): # <<<<<<<<<<<<<< + * if _get_use_threads(): * # allow blosc to use threads internally * with nogil: */ @@ -4358,7 +4362,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_22decompress(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":387 * ret = blosc_decompress(source_ptr, dest_ptr, nbytes) * else: - * with nogil: # <<<<<<<<<<<<<< + * with nogil: * ret = blosc_decompress_ctx(source_ptr, dest_ptr, nbytes, 1) * */ @@ -4374,7 +4378,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_22decompress(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":388 * else: * with nogil: - * ret = blosc_decompress_ctx(source_ptr, dest_ptr, nbytes, 1) # <<<<<<<<<<<<<< + * ret = blosc_decompress_ctx(source_ptr, dest_ptr, nbytes, 1) * * finally: */ @@ -4384,7 +4388,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_22decompress(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":387 * ret = blosc_decompress(source_ptr, dest_ptr, nbytes) * else: - * with nogil: # <<<<<<<<<<<<<< + * with nogil: * ret = blosc_decompress_ctx(source_ptr, dest_ptr, nbytes, 1) * */ @@ -4406,7 +4410,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_22decompress(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":393 * * # release buffers - * source_buffer.release() # <<<<<<<<<<<<<< + * source_buffer.release() * if dest_buffer is not None: * dest_buffer.release() */ @@ -4419,7 +4423,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_22decompress(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":394 * # release buffers * source_buffer.release() - * if dest_buffer is not None: # <<<<<<<<<<<<<< + * if dest_buffer is not None: * dest_buffer.release() * */ @@ -4430,7 +4434,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_22decompress(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":395 * source_buffer.release() * if dest_buffer is not None: - * dest_buffer.release() # <<<<<<<<<<<<<< + * dest_buffer.release() * * # handle errors */ @@ -4441,7 +4445,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_22decompress(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":394 * # release buffers * source_buffer.release() - * if dest_buffer is not None: # <<<<<<<<<<<<<< + * if dest_buffer is not None: * dest_buffer.release() * */ @@ -4470,7 +4474,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_22decompress(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":393 * * # release buffers - * source_buffer.release() # <<<<<<<<<<<<<< + * source_buffer.release() * if dest_buffer is not None: * dest_buffer.release() */ @@ -4481,7 +4485,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_22decompress(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":394 * # release buffers * source_buffer.release() - * if dest_buffer is not None: # <<<<<<<<<<<<<< + * if dest_buffer is not None: * dest_buffer.release() * */ @@ -4492,7 +4496,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_22decompress(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":395 * source_buffer.release() * if dest_buffer is not None: - * dest_buffer.release() # <<<<<<<<<<<<<< + * dest_buffer.release() * * # handle errors */ @@ -4503,7 +4507,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_22decompress(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":394 * # release buffers * source_buffer.release() - * if dest_buffer is not None: # <<<<<<<<<<<<<< + * if dest_buffer is not None: * dest_buffer.release() * */ @@ -4541,7 +4545,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_22decompress(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":398 * * # handle errors - * if ret <= 0: # <<<<<<<<<<<<<< + * if ret <= 0: * raise RuntimeError('error during blosc decompression: %d' % ret) * */ @@ -4551,7 +4555,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_22decompress(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":399 * # handle errors * if ret <= 0: - * raise RuntimeError('error during blosc decompression: %d' % ret) # <<<<<<<<<<<<<< + * raise RuntimeError('error during blosc decompression: %d' % ret) * * return dest */ @@ -4570,7 +4574,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_22decompress(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":398 * * # handle errors - * if ret <= 0: # <<<<<<<<<<<<<< + * if ret <= 0: * raise RuntimeError('error during blosc decompression: %d' % ret) * */ @@ -4579,7 +4583,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_22decompress(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":401 * raise RuntimeError('error during blosc decompression: %d' % ret) * - * return dest # <<<<<<<<<<<<<< + * return dest * * */ @@ -4591,7 +4595,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_22decompress(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":330 * * - * def decompress(source, dest=None): # <<<<<<<<<<<<<< + * def decompress(source, dest=None): * """Decompress data. * */ @@ -4616,7 +4620,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_22decompress(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":409 * * - * def _get_use_threads(): # <<<<<<<<<<<<<< + * def _get_use_threads(): * global use_threads * proc = multiprocessing.current_process() */ @@ -4652,7 +4656,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_24_get_use_threads(CYTHON_UNUSED PyO /* "numcodecs/blosc.pyx":411 * def _get_use_threads(): * global use_threads - * proc = multiprocessing.current_process() # <<<<<<<<<<<<<< + * proc = multiprocessing.current_process() * * # check if locks are available, and if not no threads */ @@ -4682,7 +4686,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_24_get_use_threads(CYTHON_UNUSED PyO /* "numcodecs/blosc.pyx":414 * * # check if locks are available, and if not no threads - * if not mutex: # <<<<<<<<<<<<<< + * if not mutex: * return False * */ @@ -4696,7 +4700,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_24_get_use_threads(CYTHON_UNUSED PyO /* "numcodecs/blosc.pyx":415 * # check if locks are available, and if not no threads * if not mutex: - * return False # <<<<<<<<<<<<<< + * return False * * # check for fork */ @@ -4708,7 +4712,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_24_get_use_threads(CYTHON_UNUSED PyO /* "numcodecs/blosc.pyx":414 * * # check if locks are available, and if not no threads - * if not mutex: # <<<<<<<<<<<<<< + * if not mutex: * return False * */ @@ -4717,7 +4721,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_24_get_use_threads(CYTHON_UNUSED PyO /* "numcodecs/blosc.pyx":418 * * # check for fork - * if proc.pid != _importer_pid: # <<<<<<<<<<<<<< + * if proc.pid != _importer_pid: * # If this module has been imported in the parent process, and the current process * # is a fork, attempting to use blosc in multi-threaded mode will cause a */ @@ -4735,7 +4739,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_24_get_use_threads(CYTHON_UNUSED PyO /* "numcodecs/blosc.pyx":422 * # is a fork, attempting to use blosc in multi-threaded mode will cause a * # program hang, so we force use of blosc ctx functions, i.e., no threads. - * return False # <<<<<<<<<<<<<< + * return False * * if use_threads in [True, False]: */ @@ -4747,7 +4751,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_24_get_use_threads(CYTHON_UNUSED PyO /* "numcodecs/blosc.pyx":418 * * # check for fork - * if proc.pid != _importer_pid: # <<<<<<<<<<<<<< + * if proc.pid != _importer_pid: * # If this module has been imported in the parent process, and the current process * # is a fork, attempting to use blosc in multi-threaded mode will cause a */ @@ -4756,7 +4760,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_24_get_use_threads(CYTHON_UNUSED PyO /* "numcodecs/blosc.pyx":424 * return False * - * if use_threads in [True, False]: # <<<<<<<<<<<<<< + * if use_threads in [True, False]: * # user has manually overridden the default behaviour * _use_threads = use_threads */ @@ -4782,7 +4786,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_24_get_use_threads(CYTHON_UNUSED PyO /* "numcodecs/blosc.pyx":426 * if use_threads in [True, False]: * # user has manually overridden the default behaviour - * _use_threads = use_threads # <<<<<<<<<<<<<< + * _use_threads = use_threads * * else: */ @@ -4794,7 +4798,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_24_get_use_threads(CYTHON_UNUSED PyO /* "numcodecs/blosc.pyx":424 * return False * - * if use_threads in [True, False]: # <<<<<<<<<<<<<< + * if use_threads in [True, False]: * # user has manually overridden the default behaviour * _use_threads = use_threads */ @@ -4804,7 +4808,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_24_get_use_threads(CYTHON_UNUSED PyO /* "numcodecs/blosc.pyx":435 * # program or multi-process program * - * if proc.name != 'MainProcess': # <<<<<<<<<<<<<< + * if proc.name != 'MainProcess': * _use_threads = False * elif hasattr(threading, 'main_thread'): */ @@ -4818,7 +4822,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_24_get_use_threads(CYTHON_UNUSED PyO /* "numcodecs/blosc.pyx":436 * * if proc.name != 'MainProcess': - * _use_threads = False # <<<<<<<<<<<<<< + * _use_threads = False * elif hasattr(threading, 'main_thread'): * _use_threads = (threading.main_thread() == threading.current_thread()) */ @@ -4828,7 +4832,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_24_get_use_threads(CYTHON_UNUSED PyO /* "numcodecs/blosc.pyx":435 * # program or multi-process program * - * if proc.name != 'MainProcess': # <<<<<<<<<<<<<< + * if proc.name != 'MainProcess': * _use_threads = False * elif hasattr(threading, 'main_thread'): */ @@ -4838,7 +4842,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_24_get_use_threads(CYTHON_UNUSED PyO /* "numcodecs/blosc.pyx":437 * if proc.name != 'MainProcess': * _use_threads = False - * elif hasattr(threading, 'main_thread'): # <<<<<<<<<<<<<< + * elif hasattr(threading, 'main_thread'): * _use_threads = (threading.main_thread() == threading.current_thread()) * else: */ @@ -4852,7 +4856,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_24_get_use_threads(CYTHON_UNUSED PyO /* "numcodecs/blosc.pyx":438 * _use_threads = False * elif hasattr(threading, 'main_thread'): - * _use_threads = (threading.main_thread() == threading.current_thread()) # <<<<<<<<<<<<<< + * _use_threads = (threading.main_thread() == threading.current_thread()) * else: * _use_threads = threading.current_thread().name == 'MainThread' */ @@ -4905,7 +4909,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_24_get_use_threads(CYTHON_UNUSED PyO /* "numcodecs/blosc.pyx":437 * if proc.name != 'MainProcess': * _use_threads = False - * elif hasattr(threading, 'main_thread'): # <<<<<<<<<<<<<< + * elif hasattr(threading, 'main_thread'): * _use_threads = (threading.main_thread() == threading.current_thread()) * else: */ @@ -4915,7 +4919,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_24_get_use_threads(CYTHON_UNUSED PyO /* "numcodecs/blosc.pyx":440 * _use_threads = (threading.main_thread() == threading.current_thread()) * else: - * _use_threads = threading.current_thread().name == 'MainThread' # <<<<<<<<<<<<<< + * _use_threads = threading.current_thread().name == 'MainThread' * * return _use_threads */ @@ -4955,7 +4959,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_24_get_use_threads(CYTHON_UNUSED PyO /* "numcodecs/blosc.pyx":442 * _use_threads = threading.current_thread().name == 'MainThread' * - * return _use_threads # <<<<<<<<<<<<<< + * return _use_threads * * */ @@ -4967,7 +4971,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_24_get_use_threads(CYTHON_UNUSED PyO /* "numcodecs/blosc.pyx":409 * * - * def _get_use_threads(): # <<<<<<<<<<<<<< + * def _get_use_threads(): * global use_threads * proc = multiprocessing.current_process() */ @@ -4991,7 +4995,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_24_get_use_threads(CYTHON_UNUSED PyO /* "numcodecs/blosc.pyx":479 * max_buffer_size = 2**31 - 1 * - * def __init__(self, cname='lz4', clevel=5, shuffle=SHUFFLE, blocksize=AUTOBLOCKS): # <<<<<<<<<<<<<< + * def __init__(self, cname='lz4', clevel=5, shuffle=SHUFFLE, blocksize=AUTOBLOCKS): * self.cname = cname * if isinstance(cname, text_type): */ @@ -5161,7 +5165,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_5Blosc___init__(CYTHON_UNUSED PyObje /* "numcodecs/blosc.pyx":480 * * def __init__(self, cname='lz4', clevel=5, shuffle=SHUFFLE, blocksize=AUTOBLOCKS): - * self.cname = cname # <<<<<<<<<<<<<< + * self.cname = cname * if isinstance(cname, text_type): * self._cname_bytes = cname.encode('ascii') */ @@ -5170,7 +5174,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_5Blosc___init__(CYTHON_UNUSED PyObje /* "numcodecs/blosc.pyx":481 * def __init__(self, cname='lz4', clevel=5, shuffle=SHUFFLE, blocksize=AUTOBLOCKS): * self.cname = cname - * if isinstance(cname, text_type): # <<<<<<<<<<<<<< + * if isinstance(cname, text_type): * self._cname_bytes = cname.encode('ascii') * else: */ @@ -5184,7 +5188,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_5Blosc___init__(CYTHON_UNUSED PyObje /* "numcodecs/blosc.pyx":482 * self.cname = cname * if isinstance(cname, text_type): - * self._cname_bytes = cname.encode('ascii') # <<<<<<<<<<<<<< + * self._cname_bytes = cname.encode('ascii') * else: * self._cname_bytes = cname */ @@ -5211,7 +5215,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_5Blosc___init__(CYTHON_UNUSED PyObje /* "numcodecs/blosc.pyx":481 * def __init__(self, cname='lz4', clevel=5, shuffle=SHUFFLE, blocksize=AUTOBLOCKS): * self.cname = cname - * if isinstance(cname, text_type): # <<<<<<<<<<<<<< + * if isinstance(cname, text_type): * self._cname_bytes = cname.encode('ascii') * else: */ @@ -5221,7 +5225,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_5Blosc___init__(CYTHON_UNUSED PyObje /* "numcodecs/blosc.pyx":484 * self._cname_bytes = cname.encode('ascii') * else: - * self._cname_bytes = cname # <<<<<<<<<<<<<< + * self._cname_bytes = cname * self.clevel = clevel * self.shuffle = shuffle */ @@ -5233,7 +5237,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_5Blosc___init__(CYTHON_UNUSED PyObje /* "numcodecs/blosc.pyx":485 * else: * self._cname_bytes = cname - * self.clevel = clevel # <<<<<<<<<<<<<< + * self.clevel = clevel * self.shuffle = shuffle * self.blocksize = blocksize */ @@ -5242,7 +5246,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_5Blosc___init__(CYTHON_UNUSED PyObje /* "numcodecs/blosc.pyx":486 * self._cname_bytes = cname * self.clevel = clevel - * self.shuffle = shuffle # <<<<<<<<<<<<<< + * self.shuffle = shuffle * self.blocksize = blocksize * */ @@ -5251,7 +5255,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_5Blosc___init__(CYTHON_UNUSED PyObje /* "numcodecs/blosc.pyx":487 * self.clevel = clevel * self.shuffle = shuffle - * self.blocksize = blocksize # <<<<<<<<<<<<<< + * self.blocksize = blocksize * * def encode(self, buf): */ @@ -5260,7 +5264,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_5Blosc___init__(CYTHON_UNUSED PyObje /* "numcodecs/blosc.pyx":479 * max_buffer_size = 2**31 - 1 * - * def __init__(self, cname='lz4', clevel=5, shuffle=SHUFFLE, blocksize=AUTOBLOCKS): # <<<<<<<<<<<<<< + * def __init__(self, cname='lz4', clevel=5, shuffle=SHUFFLE, blocksize=AUTOBLOCKS): * self.cname = cname * if isinstance(cname, text_type): */ @@ -5283,7 +5287,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_5Blosc___init__(CYTHON_UNUSED PyObje /* "numcodecs/blosc.pyx":489 * self.blocksize = blocksize * - * def encode(self, buf): # <<<<<<<<<<<<<< + * def encode(self, buf): * buf = ensure_contiguous_ndarray(buf, self.max_buffer_size) * return compress(buf, self._cname_bytes, self.clevel, self.shuffle, self.blocksize) */ @@ -5369,7 +5373,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_5Blosc_2encode(CYTHON_UNUSED PyObjec /* "numcodecs/blosc.pyx":490 * * def encode(self, buf): - * buf = ensure_contiguous_ndarray(buf, self.max_buffer_size) # <<<<<<<<<<<<<< + * buf = ensure_contiguous_ndarray(buf, self.max_buffer_size) * return compress(buf, self._cname_bytes, self.clevel, self.shuffle, self.blocksize) * */ @@ -5430,7 +5434,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_5Blosc_2encode(CYTHON_UNUSED PyObjec /* "numcodecs/blosc.pyx":491 * def encode(self, buf): * buf = ensure_contiguous_ndarray(buf, self.max_buffer_size) - * return compress(buf, self._cname_bytes, self.clevel, self.shuffle, self.blocksize) # <<<<<<<<<<<<<< + * return compress(buf, self._cname_bytes, self.clevel, self.shuffle, self.blocksize) * * def decode(self, buf, out=None): */ @@ -5514,7 +5518,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_5Blosc_2encode(CYTHON_UNUSED PyObjec /* "numcodecs/blosc.pyx":489 * self.blocksize = blocksize * - * def encode(self, buf): # <<<<<<<<<<<<<< + * def encode(self, buf): * buf = ensure_contiguous_ndarray(buf, self.max_buffer_size) * return compress(buf, self._cname_bytes, self.clevel, self.shuffle, self.blocksize) */ @@ -5541,7 +5545,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_5Blosc_2encode(CYTHON_UNUSED PyObjec /* "numcodecs/blosc.pyx":493 * return compress(buf, self._cname_bytes, self.clevel, self.shuffle, self.blocksize) * - * def decode(self, buf, out=None): # <<<<<<<<<<<<<< + * def decode(self, buf, out=None): * buf = ensure_contiguous_ndarray(buf, self.max_buffer_size) * return decompress(buf, out) */ @@ -5639,7 +5643,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_5Blosc_4decode(CYTHON_UNUSED PyObjec /* "numcodecs/blosc.pyx":494 * * def decode(self, buf, out=None): - * buf = ensure_contiguous_ndarray(buf, self.max_buffer_size) # <<<<<<<<<<<<<< + * buf = ensure_contiguous_ndarray(buf, self.max_buffer_size) * return decompress(buf, out) * */ @@ -5700,7 +5704,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_5Blosc_4decode(CYTHON_UNUSED PyObjec /* "numcodecs/blosc.pyx":495 * def decode(self, buf, out=None): * buf = ensure_contiguous_ndarray(buf, self.max_buffer_size) - * return decompress(buf, out) # <<<<<<<<<<<<<< + * return decompress(buf, out) * * def __repr__(self): */ @@ -5759,7 +5763,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_5Blosc_4decode(CYTHON_UNUSED PyObjec /* "numcodecs/blosc.pyx":493 * return compress(buf, self._cname_bytes, self.clevel, self.shuffle, self.blocksize) * - * def decode(self, buf, out=None): # <<<<<<<<<<<<<< + * def decode(self, buf, out=None): * buf = ensure_contiguous_ndarray(buf, self.max_buffer_size) * return decompress(buf, out) */ @@ -5783,7 +5787,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_5Blosc_4decode(CYTHON_UNUSED PyObjec /* "numcodecs/blosc.pyx":497 * return decompress(buf, out) * - * def __repr__(self): # <<<<<<<<<<<<<< + * def __repr__(self): * r = '%s(cname=%r, clevel=%r, shuffle=%s, blocksize=%s)' % \ * (type(self).__name__, */ @@ -5818,7 +5822,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_5Blosc_6__repr__(CYTHON_UNUSED PyObj /* "numcodecs/blosc.pyx":499 * def __repr__(self): * r = '%s(cname=%r, clevel=%r, shuffle=%s, blocksize=%s)' % \ - * (type(self).__name__, # <<<<<<<<<<<<<< + * (type(self).__name__, * self.cname, * self.clevel, */ @@ -5828,7 +5832,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_5Blosc_6__repr__(CYTHON_UNUSED PyObj /* "numcodecs/blosc.pyx":500 * r = '%s(cname=%r, clevel=%r, shuffle=%s, blocksize=%s)' % \ * (type(self).__name__, - * self.cname, # <<<<<<<<<<<<<< + * self.cname, * self.clevel, * _shuffle_repr[self.shuffle + 1], */ @@ -5838,7 +5842,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_5Blosc_6__repr__(CYTHON_UNUSED PyObj /* "numcodecs/blosc.pyx":501 * (type(self).__name__, * self.cname, - * self.clevel, # <<<<<<<<<<<<<< + * self.clevel, * _shuffle_repr[self.shuffle + 1], * self.blocksize) */ @@ -5848,7 +5852,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_5Blosc_6__repr__(CYTHON_UNUSED PyObj /* "numcodecs/blosc.pyx":502 * self.cname, * self.clevel, - * _shuffle_repr[self.shuffle + 1], # <<<<<<<<<<<<<< + * _shuffle_repr[self.shuffle + 1], * self.blocksize) * return r */ @@ -5867,7 +5871,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_5Blosc_6__repr__(CYTHON_UNUSED PyObj /* "numcodecs/blosc.pyx":503 * self.clevel, * _shuffle_repr[self.shuffle + 1], - * self.blocksize) # <<<<<<<<<<<<<< + * self.blocksize) * return r */ __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_blocksize); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 503, __pyx_L1_error) @@ -5876,7 +5880,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_5Blosc_6__repr__(CYTHON_UNUSED PyObj /* "numcodecs/blosc.pyx":499 * def __repr__(self): * r = '%s(cname=%r, clevel=%r, shuffle=%s, blocksize=%s)' % \ - * (type(self).__name__, # <<<<<<<<<<<<<< + * (type(self).__name__, * self.cname, * self.clevel, */ @@ -5901,7 +5905,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_5Blosc_6__repr__(CYTHON_UNUSED PyObj /* "numcodecs/blosc.pyx":498 * * def __repr__(self): - * r = '%s(cname=%r, clevel=%r, shuffle=%s, blocksize=%s)' % \ # <<<<<<<<<<<<<< + * r = '%s(cname=%r, clevel=%r, shuffle=%s, blocksize=%s)' % \ * (type(self).__name__, * self.cname, */ @@ -5914,7 +5918,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_5Blosc_6__repr__(CYTHON_UNUSED PyObj /* "numcodecs/blosc.pyx":504 * _shuffle_repr[self.shuffle + 1], * self.blocksize) - * return r # <<<<<<<<<<<<<< + * return r */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_r); @@ -5924,7 +5928,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_5Blosc_6__repr__(CYTHON_UNUSED PyObj /* "numcodecs/blosc.pyx":497 * return decompress(buf, out) * - * def __repr__(self): # <<<<<<<<<<<<<< + * def __repr__(self): * r = '%s(cname=%r, clevel=%r, shuffle=%s, blocksize=%s)' % \ * (type(self).__name__, */ @@ -6132,7 +6136,7 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { /* "numcodecs/blosc.pyx":292 * # to ensure no-one else can modify the global context while we're setting it * # up and using it. - * with mutex: # <<<<<<<<<<<<<< + * with mutex: * * # set compressor */ @@ -6143,7 +6147,7 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { /* "numcodecs/blosc.pyx":89 * * - * def init(): # <<<<<<<<<<<<<< + * def init(): * """Initialize the Blosc library environment.""" * blosc_init() */ @@ -6152,7 +6156,7 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { /* "numcodecs/blosc.pyx":94 * * - * def destroy(): # <<<<<<<<<<<<<< + * def destroy(): * """Destroy the Blosc library environment.""" * blosc_destroy() */ @@ -6161,7 +6165,7 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { /* "numcodecs/blosc.pyx":99 * * - * def compname_to_compcode(cname): # <<<<<<<<<<<<<< + * def compname_to_compcode(cname): * """Return the compressor code associated with the compressor name. If the compressor * name is not recognized, or there is not support for it in this build, -1 is returned */ @@ -6173,7 +6177,7 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { /* "numcodecs/blosc.pyx":108 * * - * def list_compressors(): # <<<<<<<<<<<<<< + * def list_compressors(): * """Get a list of compressors supported in the current build.""" * s = blosc_list_compressors() */ @@ -6185,7 +6189,7 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { /* "numcodecs/blosc.pyx":116 * * - * def get_nthreads(): # <<<<<<<<<<<<<< + * def get_nthreads(): * """Get the number of threads that Blosc uses internally for compression and * decompression.""" */ @@ -6194,7 +6198,7 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { /* "numcodecs/blosc.pyx":122 * * - * def set_nthreads(int nthreads): # <<<<<<<<<<<<<< + * def set_nthreads(int nthreads): * """Set the number of threads that Blosc uses internally for compression and * decompression.""" */ @@ -6206,7 +6210,7 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { /* "numcodecs/blosc.pyx":128 * * - * def cbuffer_sizes(source): # <<<<<<<<<<<<<< + * def cbuffer_sizes(source): * """Return information about a compressed buffer, namely the number of uncompressed * bytes (`nbytes`) and compressed (`cbytes`). It also returns the `blocksize` (which */ @@ -6218,7 +6222,7 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { /* "numcodecs/blosc.pyx":156 * * - * def cbuffer_complib(source): # <<<<<<<<<<<<<< + * def cbuffer_complib(source): * """Return the name of the compression library used to compress `source`.""" * cdef: */ @@ -6230,7 +6234,7 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { /* "numcodecs/blosc.pyx":176 * * - * def cbuffer_metainfo(source): # <<<<<<<<<<<<<< + * def cbuffer_metainfo(source): * """Return some meta-information about the compressed buffer in `source`, including * the typesize, whether the shuffle or bit-shuffle filters were used, and the */ @@ -6242,7 +6246,7 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { /* "numcodecs/blosc.pyx":214 * * - * def err_bad_cname(cname): # <<<<<<<<<<<<<< + * def err_bad_cname(cname): * raise ValueError('bad compressor or compressor not supported: %r; expected one of ' * '%s' % (cname, list_compressors())) */ @@ -6254,7 +6258,7 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { /* "numcodecs/blosc.pyx":219 * * - * def compress(source, char* cname, int clevel, int shuffle=SHUFFLE, # <<<<<<<<<<<<<< + * def compress(source, char* cname, int clevel, int shuffle=SHUFFLE, * int blocksize=AUTOBLOCKS): * """Compress data. */ @@ -6266,7 +6270,7 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { /* "numcodecs/blosc.pyx":330 * * - * def decompress(source, dest=None): # <<<<<<<<<<<<<< + * def decompress(source, dest=None): * """Decompress data. * */ @@ -6278,7 +6282,7 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { /* "numcodecs/blosc.pyx":409 * * - * def _get_use_threads(): # <<<<<<<<<<<<<< + * def _get_use_threads(): * global use_threads * proc = multiprocessing.current_process() */ @@ -6290,7 +6294,7 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { /* "numcodecs/blosc.pyx":479 * max_buffer_size = 2**31 - 1 * - * def __init__(self, cname='lz4', clevel=5, shuffle=SHUFFLE, blocksize=AUTOBLOCKS): # <<<<<<<<<<<<<< + * def __init__(self, cname='lz4', clevel=5, shuffle=SHUFFLE, blocksize=AUTOBLOCKS): * self.cname = cname * if isinstance(cname, text_type): */ @@ -6302,7 +6306,7 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { /* "numcodecs/blosc.pyx":489 * self.blocksize = blocksize * - * def encode(self, buf): # <<<<<<<<<<<<<< + * def encode(self, buf): * buf = ensure_contiguous_ndarray(buf, self.max_buffer_size) * return compress(buf, self._cname_bytes, self.clevel, self.shuffle, self.blocksize) */ @@ -6314,7 +6318,7 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { /* "numcodecs/blosc.pyx":493 * return compress(buf, self._cname_bytes, self.clevel, self.shuffle, self.blocksize) * - * def decode(self, buf, out=None): # <<<<<<<<<<<<<< + * def decode(self, buf, out=None): * buf = ensure_contiguous_ndarray(buf, self.max_buffer_size) * return decompress(buf, out) */ @@ -6329,7 +6333,7 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { /* "numcodecs/blosc.pyx":497 * return decompress(buf, out) * - * def __repr__(self): # <<<<<<<<<<<<<< + * def __repr__(self): * r = '%s(cname=%r, clevel=%r, shuffle=%s, blocksize=%s)' % \ * (type(self).__name__, */ @@ -6653,7 +6657,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":8 * # cython: language_level=2 * from __future__ import absolute_import, print_function, division - * import threading # <<<<<<<<<<<<<< + * import threading * import multiprocessing * import os */ @@ -6665,7 +6669,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":9 * from __future__ import absolute_import, print_function, division * import threading - * import multiprocessing # <<<<<<<<<<<<<< + * import multiprocessing * import os * */ @@ -6677,7 +6681,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":10 * import threading * import multiprocessing - * import os # <<<<<<<<<<<<<< + * import os * * */ @@ -6689,7 +6693,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":18 * * from .compat_ext cimport Buffer - * from .compat_ext import Buffer # <<<<<<<<<<<<<< + * from .compat_ext import Buffer * from .compat import PY2, text_type, ensure_contiguous_ndarray * from .abc import Codec */ @@ -6706,7 +6710,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":19 * from .compat_ext cimport Buffer * from .compat_ext import Buffer - * from .compat import PY2, text_type, ensure_contiguous_ndarray # <<<<<<<<<<<<<< + * from .compat import PY2, text_type, ensure_contiguous_ndarray * from .abc import Codec * */ @@ -6741,7 +6745,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":20 * from .compat_ext import Buffer * from .compat import PY2, text_type, ensure_contiguous_ndarray - * from .abc import Codec # <<<<<<<<<<<<<< + * from .abc import Codec * * */ @@ -6762,7 +6766,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":61 * * - * MAX_OVERHEAD = BLOSC_MAX_OVERHEAD # <<<<<<<<<<<<<< + * MAX_OVERHEAD = BLOSC_MAX_OVERHEAD * MAX_BUFFERSIZE = BLOSC_MAX_BUFFERSIZE * MAX_THREADS = BLOSC_MAX_THREADS */ @@ -6774,7 +6778,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":62 * * MAX_OVERHEAD = BLOSC_MAX_OVERHEAD - * MAX_BUFFERSIZE = BLOSC_MAX_BUFFERSIZE # <<<<<<<<<<<<<< + * MAX_BUFFERSIZE = BLOSC_MAX_BUFFERSIZE * MAX_THREADS = BLOSC_MAX_THREADS * MAX_TYPESIZE = BLOSC_MAX_TYPESIZE */ @@ -6786,7 +6790,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":63 * MAX_OVERHEAD = BLOSC_MAX_OVERHEAD * MAX_BUFFERSIZE = BLOSC_MAX_BUFFERSIZE - * MAX_THREADS = BLOSC_MAX_THREADS # <<<<<<<<<<<<<< + * MAX_THREADS = BLOSC_MAX_THREADS * MAX_TYPESIZE = BLOSC_MAX_TYPESIZE * VERSION_STRING = BLOSC_VERSION_STRING */ @@ -6798,7 +6802,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":64 * MAX_BUFFERSIZE = BLOSC_MAX_BUFFERSIZE * MAX_THREADS = BLOSC_MAX_THREADS - * MAX_TYPESIZE = BLOSC_MAX_TYPESIZE # <<<<<<<<<<<<<< + * MAX_TYPESIZE = BLOSC_MAX_TYPESIZE * VERSION_STRING = BLOSC_VERSION_STRING * VERSION_DATE = BLOSC_VERSION_DATE */ @@ -6810,7 +6814,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":65 * MAX_THREADS = BLOSC_MAX_THREADS * MAX_TYPESIZE = BLOSC_MAX_TYPESIZE - * VERSION_STRING = BLOSC_VERSION_STRING # <<<<<<<<<<<<<< + * VERSION_STRING = BLOSC_VERSION_STRING * VERSION_DATE = BLOSC_VERSION_DATE * if not PY2: */ @@ -6822,7 +6826,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":66 * MAX_TYPESIZE = BLOSC_MAX_TYPESIZE * VERSION_STRING = BLOSC_VERSION_STRING - * VERSION_DATE = BLOSC_VERSION_DATE # <<<<<<<<<<<<<< + * VERSION_DATE = BLOSC_VERSION_DATE * if not PY2: * VERSION_STRING = VERSION_STRING.decode() */ @@ -6834,7 +6838,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":67 * VERSION_STRING = BLOSC_VERSION_STRING * VERSION_DATE = BLOSC_VERSION_DATE - * if not PY2: # <<<<<<<<<<<<<< + * if not PY2: * VERSION_STRING = VERSION_STRING.decode() * VERSION_DATE = VERSION_DATE.decode() */ @@ -6848,7 +6852,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":68 * VERSION_DATE = BLOSC_VERSION_DATE * if not PY2: - * VERSION_STRING = VERSION_STRING.decode() # <<<<<<<<<<<<<< + * VERSION_STRING = VERSION_STRING.decode() * VERSION_DATE = VERSION_DATE.decode() * __version__ = VERSION_STRING */ @@ -6866,7 +6870,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":69 * if not PY2: * VERSION_STRING = VERSION_STRING.decode() - * VERSION_DATE = VERSION_DATE.decode() # <<<<<<<<<<<<<< + * VERSION_DATE = VERSION_DATE.decode() * __version__ = VERSION_STRING * NOSHUFFLE = BLOSC_NOSHUFFLE */ @@ -6884,7 +6888,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":67 * VERSION_STRING = BLOSC_VERSION_STRING * VERSION_DATE = BLOSC_VERSION_DATE - * if not PY2: # <<<<<<<<<<<<<< + * if not PY2: * VERSION_STRING = VERSION_STRING.decode() * VERSION_DATE = VERSION_DATE.decode() */ @@ -6893,7 +6897,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":70 * VERSION_STRING = VERSION_STRING.decode() * VERSION_DATE = VERSION_DATE.decode() - * __version__ = VERSION_STRING # <<<<<<<<<<<<<< + * __version__ = VERSION_STRING * NOSHUFFLE = BLOSC_NOSHUFFLE * SHUFFLE = BLOSC_SHUFFLE */ @@ -6905,7 +6909,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":71 * VERSION_DATE = VERSION_DATE.decode() * __version__ = VERSION_STRING - * NOSHUFFLE = BLOSC_NOSHUFFLE # <<<<<<<<<<<<<< + * NOSHUFFLE = BLOSC_NOSHUFFLE * SHUFFLE = BLOSC_SHUFFLE * BITSHUFFLE = BLOSC_BITSHUFFLE */ @@ -6917,7 +6921,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":72 * __version__ = VERSION_STRING * NOSHUFFLE = BLOSC_NOSHUFFLE - * SHUFFLE = BLOSC_SHUFFLE # <<<<<<<<<<<<<< + * SHUFFLE = BLOSC_SHUFFLE * BITSHUFFLE = BLOSC_BITSHUFFLE * # automatic shuffle */ @@ -6929,7 +6933,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":73 * NOSHUFFLE = BLOSC_NOSHUFFLE * SHUFFLE = BLOSC_SHUFFLE - * BITSHUFFLE = BLOSC_BITSHUFFLE # <<<<<<<<<<<<<< + * BITSHUFFLE = BLOSC_BITSHUFFLE * # automatic shuffle * AUTOSHUFFLE = -1 */ @@ -6941,7 +6945,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":75 * BITSHUFFLE = BLOSC_BITSHUFFLE * # automatic shuffle - * AUTOSHUFFLE = -1 # <<<<<<<<<<<<<< + * AUTOSHUFFLE = -1 * # automatic block size - let blosc decide * AUTOBLOCKS = 0 */ @@ -6950,7 +6954,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":77 * AUTOSHUFFLE = -1 * # automatic block size - let blosc decide - * AUTOBLOCKS = 0 # <<<<<<<<<<<<<< + * AUTOBLOCKS = 0 * * # synchronization */ @@ -6959,7 +6963,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":80 * * # synchronization - * try: # <<<<<<<<<<<<<< + * try: * mutex = multiprocessing.Lock() * except OSError: */ @@ -6975,7 +6979,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":81 * # synchronization * try: - * mutex = multiprocessing.Lock() # <<<<<<<<<<<<<< + * mutex = multiprocessing.Lock() * except OSError: * mutex = None */ @@ -6993,7 +6997,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":80 * * # synchronization - * try: # <<<<<<<<<<<<<< + * try: * mutex = multiprocessing.Lock() * except OSError: */ @@ -7009,7 +7013,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":82 * try: * mutex = multiprocessing.Lock() - * except OSError: # <<<<<<<<<<<<<< + * except OSError: * mutex = None * */ @@ -7024,7 +7028,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":83 * mutex = multiprocessing.Lock() * except OSError: - * mutex = None # <<<<<<<<<<<<<< + * mutex = None * * # store ID of process that first loads the module, so we can detect a fork later */ @@ -7040,7 +7044,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":80 * * # synchronization - * try: # <<<<<<<<<<<<<< + * try: * mutex = multiprocessing.Lock() * except OSError: */ @@ -7060,7 +7064,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":86 * * # store ID of process that first loads the module, so we can detect a fork later - * _importer_pid = os.getpid() # <<<<<<<<<<<<<< + * _importer_pid = os.getpid() * * */ @@ -7078,7 +7082,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":89 * * - * def init(): # <<<<<<<<<<<<<< + * def init(): * """Initialize the Blosc library environment.""" * blosc_init() */ @@ -7090,7 +7094,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":94 * * - * def destroy(): # <<<<<<<<<<<<<< + * def destroy(): * """Destroy the Blosc library environment.""" * blosc_destroy() */ @@ -7102,7 +7106,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":99 * * - * def compname_to_compcode(cname): # <<<<<<<<<<<<<< + * def compname_to_compcode(cname): * """Return the compressor code associated with the compressor name. If the compressor * name is not recognized, or there is not support for it in this build, -1 is returned */ @@ -7114,7 +7118,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":108 * * - * def list_compressors(): # <<<<<<<<<<<<<< + * def list_compressors(): * """Get a list of compressors supported in the current build.""" * s = blosc_list_compressors() */ @@ -7126,7 +7130,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":116 * * - * def get_nthreads(): # <<<<<<<<<<<<<< + * def get_nthreads(): * """Get the number of threads that Blosc uses internally for compression and * decompression.""" */ @@ -7138,7 +7142,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":122 * * - * def set_nthreads(int nthreads): # <<<<<<<<<<<<<< + * def set_nthreads(int nthreads): * """Set the number of threads that Blosc uses internally for compression and * decompression.""" */ @@ -7150,7 +7154,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":128 * * - * def cbuffer_sizes(source): # <<<<<<<<<<<<<< + * def cbuffer_sizes(source): * """Return information about a compressed buffer, namely the number of uncompressed * bytes (`nbytes`) and compressed (`cbytes`). It also returns the `blocksize` (which */ @@ -7162,7 +7166,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":156 * * - * def cbuffer_complib(source): # <<<<<<<<<<<<<< + * def cbuffer_complib(source): * """Return the name of the compression library used to compress `source`.""" * cdef: */ @@ -7174,7 +7178,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":176 * * - * def cbuffer_metainfo(source): # <<<<<<<<<<<<<< + * def cbuffer_metainfo(source): * """Return some meta-information about the compressed buffer in `source`, including * the typesize, whether the shuffle or bit-shuffle filters were used, and the */ @@ -7186,7 +7190,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":214 * * - * def err_bad_cname(cname): # <<<<<<<<<<<<<< + * def err_bad_cname(cname): * raise ValueError('bad compressor or compressor not supported: %r; expected one of ' * '%s' % (cname, list_compressors())) */ @@ -7198,7 +7202,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":219 * * - * def compress(source, char* cname, int clevel, int shuffle=SHUFFLE, # <<<<<<<<<<<<<< + * def compress(source, char* cname, int clevel, int shuffle=SHUFFLE, * int blocksize=AUTOBLOCKS): * """Compress data. */ @@ -7211,7 +7215,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":220 * * def compress(source, char* cname, int clevel, int shuffle=SHUFFLE, - * int blocksize=AUTOBLOCKS): # <<<<<<<<<<<<<< + * int blocksize=AUTOBLOCKS): * """Compress data. * */ @@ -7224,7 +7228,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":219 * * - * def compress(source, char* cname, int clevel, int shuffle=SHUFFLE, # <<<<<<<<<<<<<< + * def compress(source, char* cname, int clevel, int shuffle=SHUFFLE, * int blocksize=AUTOBLOCKS): * """Compress data. */ @@ -7236,7 +7240,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":330 * * - * def decompress(source, dest=None): # <<<<<<<<<<<<<< + * def decompress(source, dest=None): * """Decompress data. * */ @@ -7248,7 +7252,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":406 * # set the value of this variable to True or False to override the * # default adaptive behaviour - * use_threads = None # <<<<<<<<<<<<<< + * use_threads = None * * */ @@ -7257,7 +7261,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":409 * * - * def _get_use_threads(): # <<<<<<<<<<<<<< + * def _get_use_threads(): * global use_threads * proc = multiprocessing.current_process() */ @@ -7269,7 +7273,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":445 * * - * _shuffle_repr = ['AUTOSHUFFLE', 'NOSHUFFLE', 'SHUFFLE', 'BITSHUFFLE'] # <<<<<<<<<<<<<< + * _shuffle_repr = ['AUTOSHUFFLE', 'NOSHUFFLE', 'SHUFFLE', 'BITSHUFFLE'] * * */ @@ -7293,7 +7297,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":448 * * - * class Blosc(Codec): # <<<<<<<<<<<<<< + * class Blosc(Codec): * """Codec providing compression using the Blosc meta-compressor. * */ @@ -7312,7 +7316,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":472 * """ * - * codec_id = 'blosc' # <<<<<<<<<<<<<< + * codec_id = 'blosc' * NOSHUFFLE = NOSHUFFLE * SHUFFLE = SHUFFLE */ @@ -7321,7 +7325,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":473 * * codec_id = 'blosc' - * NOSHUFFLE = NOSHUFFLE # <<<<<<<<<<<<<< + * NOSHUFFLE = NOSHUFFLE * SHUFFLE = SHUFFLE * BITSHUFFLE = BITSHUFFLE */ @@ -7334,7 +7338,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":474 * codec_id = 'blosc' * NOSHUFFLE = NOSHUFFLE - * SHUFFLE = SHUFFLE # <<<<<<<<<<<<<< + * SHUFFLE = SHUFFLE * BITSHUFFLE = BITSHUFFLE * AUTOSHUFFLE = AUTOSHUFFLE */ @@ -7347,7 +7351,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":475 * NOSHUFFLE = NOSHUFFLE * SHUFFLE = SHUFFLE - * BITSHUFFLE = BITSHUFFLE # <<<<<<<<<<<<<< + * BITSHUFFLE = BITSHUFFLE * AUTOSHUFFLE = AUTOSHUFFLE * max_buffer_size = 2**31 - 1 */ @@ -7360,7 +7364,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":476 * SHUFFLE = SHUFFLE * BITSHUFFLE = BITSHUFFLE - * AUTOSHUFFLE = AUTOSHUFFLE # <<<<<<<<<<<<<< + * AUTOSHUFFLE = AUTOSHUFFLE * max_buffer_size = 2**31 - 1 * */ @@ -7373,7 +7377,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":477 * BITSHUFFLE = BITSHUFFLE * AUTOSHUFFLE = AUTOSHUFFLE - * max_buffer_size = 2**31 - 1 # <<<<<<<<<<<<<< + * max_buffer_size = 2**31 - 1 * * def __init__(self, cname='lz4', clevel=5, shuffle=SHUFFLE, blocksize=AUTOBLOCKS): */ @@ -7382,7 +7386,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":479 * max_buffer_size = 2**31 - 1 * - * def __init__(self, cname='lz4', clevel=5, shuffle=SHUFFLE, blocksize=AUTOBLOCKS): # <<<<<<<<<<<<<< + * def __init__(self, cname='lz4', clevel=5, shuffle=SHUFFLE, blocksize=AUTOBLOCKS): * self.cname = cname * if isinstance(cname, text_type): */ @@ -7411,7 +7415,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":489 * self.blocksize = blocksize * - * def encode(self, buf): # <<<<<<<<<<<<<< + * def encode(self, buf): * buf = ensure_contiguous_ndarray(buf, self.max_buffer_size) * return compress(buf, self._cname_bytes, self.clevel, self.shuffle, self.blocksize) */ @@ -7423,7 +7427,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":493 * return compress(buf, self._cname_bytes, self.clevel, self.shuffle, self.blocksize) * - * def decode(self, buf, out=None): # <<<<<<<<<<<<<< + * def decode(self, buf, out=None): * buf = ensure_contiguous_ndarray(buf, self.max_buffer_size) * return decompress(buf, out) */ @@ -7436,7 +7440,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":497 * return decompress(buf, out) * - * def __repr__(self): # <<<<<<<<<<<<<< + * def __repr__(self): * r = '%s(cname=%r, clevel=%r, shuffle=%s, blocksize=%s)' % \ * (type(self).__name__, */ @@ -7448,7 +7452,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":448 * * - * class Blosc(Codec): # <<<<<<<<<<<<<< + * class Blosc(Codec): * """Codec providing compression using the Blosc meta-compressor. * */ @@ -7461,7 +7465,7 @@ if (!__Pyx_RefNanny) { __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; /* "numcodecs/blosc.pyx":1 - * # -*- coding: utf-8 -*- # <<<<<<<<<<<<<< + * # -*- coding: utf-8 -*- * # cython: embedsignature=True * # cython: profile=False */ diff --git a/numcodecs/compat_ext.c b/numcodecs/compat_ext.c index 39bbd290..9205eefb 100644 --- a/numcodecs/compat_ext.c +++ b/numcodecs/compat_ext.c @@ -6,7 +6,7 @@ "depends": [], "extra_compile_args": [ "-msse2", - "-mno-avx2" + "-mavx2" ], "name": "numcodecs.compat_ext", "sources": [ diff --git a/numcodecs/lz4.c b/numcodecs/lz4.c index b9636b25..1c90f2ee 100644 --- a/numcodecs/lz4.c +++ b/numcodecs/lz4.c @@ -9,7 +9,7 @@ ], "extra_compile_args": [ "-msse2", - "-mno-avx2" + "-mavx2" ], "include_dirs": [ "numcodecs", @@ -18,8 +18,8 @@ "name": "numcodecs.lz4", "sources": [ "numcodecs/lz4.pyx", - "c-blosc/internal-complibs/lz4-1.8.3/lz4.c", - "c-blosc/internal-complibs/lz4-1.8.3/lz4hc.c" + "c-blosc/internal-complibs/lz4-1.8.3/lz4hc.c", + "c-blosc/internal-complibs/lz4-1.8.3/lz4.c" ] }, "module_name": "numcodecs.lz4" diff --git a/numcodecs/tests/__init__.py b/numcodecs/tests/__init__.py index 1ee762b2..83b77183 100644 --- a/numcodecs/tests/__init__.py +++ b/numcodecs/tests/__init__.py @@ -1,2 +1,3 @@ # -*- coding: utf-8 -*- from __future__ import absolute_import, print_function, division +import os, sys; sys.path.append(os.path.dirname(os.path.realpath(__file__))) diff --git a/numcodecs/tests/common.py b/numcodecs/tests/common.py index cd18491b..ba061442 100644 --- a/numcodecs/tests/common.py +++ b/numcodecs/tests/common.py @@ -203,12 +203,11 @@ def check_backwards_compatibility(codec_id, arrays, codecs, precision=None, pref # file with codec configuration information codec_fn = os.path.join(codec_dir, 'config.json') - + # one time save config if not os.path.exists(codec_fn): # pragma: no cover with open(codec_fn, mode='w') as cf: _json.dump(codec.get_config(), cf, sort_keys=True, indent=4) - # load config and compare with expectation with open(codec_fn, mode='r') as cf: config = _json.load(cf) diff --git a/numcodecs/tests/test_zfp.py b/numcodecs/tests/test_zfp.py new file mode 100644 index 00000000..36e5a77a --- /dev/null +++ b/numcodecs/tests/test_zfp.py @@ -0,0 +1,66 @@ +# -*- coding: utf-8 -*- +from __future__ import absolute_import, print_function, division +import itertools + + +import numpy as np + + +from numcodecs.zfp import Zfp +from numcodecs.tests.common import (check_encode_decode_array, check_config, check_repr, + check_backwards_compatibility, + check_err_decode_object_buffer, + check_err_encode_object_buffer, + check_max_buffer_size) + + +codecs = [ + Zfp(), + Zfp(mode='a',tol=0), + Zfp(mode='p',prec=64), + Zfp(mode='r',rate=60), + Zfp(mode='c'), + +] + + +# mix of dtypes: integer, float, bool, string +# mix of shapes: 1D, 2D, 3D +# mix of orders: C, F +arrays = [ + np.linspace(1000, 1001, 1000, dtype='f4'), + np.linspace(1000, 1001, 1000, dtype='f8'), + np.random.normal(loc=1000, scale=1, size=(200, 100, 50)), + np.random.normal(loc=1000, scale=1, size=(200, 100, 50, 10)), + np.asfortranarray(np.random.normal(loc=1000, scale=1, size=(150, 350, 50))), +] + + +def test_encode_decode(): + for arr, codec in itertools.product(arrays, codecs): + check_encode_decode_array(arr, codec) + + +def test_config(): + for codec in codecs: + check_config(codec) + + +def test_repr(): + check_repr("Zfp(mode='a',tol=0)") + check_repr("Zfp(mode='p',prec=64)") + check_repr("Zfp(mode='r',rate=0)") + + +def test_backwards_compatibility(): + check_backwards_compatibility(Zfp.codec_id, arrays, codecs) + + +def test_err_decode_object_buffer(): + check_err_decode_object_buffer(Zfp()) + + +def test_err_encode_object_buffer(): + check_err_encode_object_buffer(Zfp()) + + diff --git a/numcodecs/vlen.c b/numcodecs/vlen.c index 7af43c0c..5ccd2310 100644 --- a/numcodecs/vlen.c +++ b/numcodecs/vlen.c @@ -8,7 +8,7 @@ ], "extra_compile_args": [ "-msse2", - "-mno-avx2" + "-mavx2" ], "include_dirs": [ "numcodecs" diff --git a/numcodecs/zfp.pyx b/numcodecs/zfp.pyx index 99f488a4..9b326be5 100644 --- a/numcodecs/zfp.pyx +++ b/numcodecs/zfp.pyx @@ -79,6 +79,10 @@ cdef extern from "zfp.h": void zfp_field_set_size_2d(zfp_field*,unsigned int nx,unsigned int nx) void zfp_field_set_size_3d(zfp_field*,unsigned int nx,unsigned int nx,unsigned int nz) void zfp_field_set_size_4d(zfp_field*,unsigned int nx,unsigned int nx,unsigned int nz,unsigned int nw) + void zfp_field_set_stride_1d(zfp_field* field, int sx) + void zfp_field_set_stride_2d(zfp_field* field, int sx, int sy) + void zfp_field_set_stride_3d(zfp_field* field, int sx, int sy, int sz) + void zfp_field_set_stride_4d(zfp_field* field, int sx, int sy, int sz, int sw) zfp_field* zfp_field_alloc() void zfp_field_free(zfp_field* field) size_t zfp_stream_maximum_size(const zfp_stream*,const zfp_field*) @@ -106,7 +110,7 @@ def compress(input_array,method): Data to be compressed. zfp can compress data better with arrays that have larger number of dimensions (1-4). So we want to reserve the dimension of the data - method : an object has compression mode and its relate compression parameters + method : a dictionary has compression mode and its relate compression parameters Returns ------- @@ -118,6 +122,7 @@ def compress(input_array,method): cdef bitstream* stream cdef zfp_field* field cdef size_t bufsize + cdef int stride[4] cdef: char *source_ptr @@ -125,9 +130,8 @@ def compress(input_array,method): Buffer source_buffer int dest_size,compressed_size bytes dest - # get compression mode - zfpmode = method.zfpmode + zfpmode = method['mode'] # allocate an object to store all parameters field = zfp_field_alloc() @@ -137,6 +141,9 @@ def compress(input_array,method): source_ptr = source_buffer.ptr # determine type + #if type(input_array) == bytes: + # the_type= + #else: if input_array.dtype == np.float32: the_type = zfp_type_float elif input_array.dtype == np.float64: @@ -146,34 +153,40 @@ def compress(input_array,method): elif input_array.dtype == np.int64: the_type = zfp_type_int64 else: - raise ValueError("The type of data should be int32, int64, float or double") + raise TypeError("The type of data should be int32, int64, float or double") + zfp_field_set_type(field,the_type) zfp_field_set_pointer(field,source_ptr) - print(input_array.shape) - # determine the dimensions + # convert F order array to C order array + if input_array.flags.f_contiguous: + input_array=np.ascontiguousarray(input_array) + + # determine the dimensions and set dimensions of C order array if input_array.ndim == 1: zfp_field_set_size_1d(field,input_array.shape[0]) + zfp_field_set_stride_1d(field,input_array.strides[0]/input_array.itemsize) elif input_array.ndim == 2: zfp_field_set_size_2d(field,input_array.shape[1],input_array.shape[0]) + zfp_field_set_stride_2d(field,input_array.strides[1]/input_array.itemsize,input_array.strides[0]/input_array.itemsize) elif input_array.ndim == 3: zfp_field_set_size_3d(field,input_array.shape[2],input_array.shape[1],input_array.shape[0]) + zfp_field_set_stride_3d(field,input_array.strides[2]/input_array.itemsize,input_array.strides[1]/input_array.itemsize,input_array.strides[0]/input_array.itemsize) elif input_array.ndim == 4: - print(input_array.shape) zfp_field_set_size_4d(field,input_array.shape[3],input_array.shape[2],input_array.shape[1],input_array.shape[0]) + zfp_field_set_stride_4d(field,input_array.strides[3]/input_array.itemsize,input_array.strides[2]/input_array.itemsize,input_array.strides[1]/input_array.itemsize,input_array.strides[0]/input_array.itemsize) else: raise ValueError("The dimension of data should be equal or less than 4, please reshape") - # setup compression mode zfp=zfp_stream_open(NULL) if zfpmode == 'a': - zfp_stream_set_accuracy(zfp,method.tolerance) + zfp_stream_set_accuracy(zfp,method['tol']) elif zfpmode == 'p': - zfp_stream_set_precision(zfp,method.precision) + zfp_stream_set_precision(zfp,method['prec']) elif zfpmode == 'r': - zfp_stream_set_rate(zfp,method.rate,the_type,input_array.ndim,0) + zfp_stream_set_rate(zfp,method['rate'],the_type,input_array.ndim,0) elif zfpmode =='c': - zfp_stream_set_params(zfp,method.minbits,method.maxbits,method.maxprec,method.minexp) + zfp_stream_set_params(zfp,method['minbits'],method['maxbits'],method['maxprec'],method['minexp']) else: raise ValueError('Must specify zfp mode') @@ -202,7 +215,7 @@ def compress(input_array,method): return dest[:compressed_size] -def decompress(source): +def decompress(source,dest=None): '''Decompress data. Parameters @@ -210,6 +223,7 @@ def decompress(source): source : bytes-like Compressed data, including zfp header. Can be any object supporting the buffer protocol + dest : array-like, optional Returns ------- @@ -222,7 +236,7 @@ def decompress(source): bitstream* stream zfp_field* field Buffer source_buffer - Buffer dest_buffer + Buffer dest_buffer = None char *source_ptr char *dest_ptr int source_size @@ -239,7 +253,6 @@ def decompress(source): stream = stream_open(source_ptr,source_size) zfp_stream_set_bit_stream(zfp,stream) zfp_stream_rewind(zfp) - print(source_size) # read zfp header ret = zfp_read_header(zfp,field,ZFP_HEADER_FULL); @@ -269,8 +282,13 @@ def decompress(source): zfp_stream_set_execution(zfp,zfp_exec_serial) # setup destination buffer - dest = PyBytes_FromStringAndSize(NULL,datashape*type_size) - dest_ptr = PyBytes_AS_STRING(dest) + if dest is None: + dest = PyBytes_FromStringAndSize(NULL,datashape*type_size) + dest_ptr = PyBytes_AS_STRING(dest) + else: + arr = ensure_contiguous_ndarray(dest) + dest_buffer = Buffer(arr, PyBUF_ANY_CONTIGUOUS | PyBUF_WRITEABLE) + dest_ptr = dest_buffer.ptr zfp_field_set_pointer(field,dest_ptr) # perform decompression @@ -280,6 +298,8 @@ def decompress(source): # release buffers source_buffer.release() + if dest_buffer is not None: + dest_buffer.release() zfp_field_free(field) zfp_stream_close(zfp) stream_close(stream) @@ -293,10 +313,8 @@ def decompress(source): buf_shape=(nz,ny,nx) else: buf_shape=(nw,nz,ny,nx) - print(buf_shape) dest = ensure_ndarray(dest).view(the_type) dest = dest.reshape(buf_shape) - return dest class CompressMethod: @@ -350,53 +368,54 @@ class Zfp(Codec): ''' codec_id = 'zfp' - def __init__(self, mode = 'a',tol = 0.0, prec = ZFP_MAX_PREC, rate = 0, minbits = ZFP_MIN_BITS, maxbits = ZFP_MAX_BITS, minexp = ZFP_MIN_EXP, maxprec = ZFP_MAX_PREC): + def __init__(self, mode = 'a',tol = 0.0, prec = ZFP_MAX_PREC, rate = 0, minbits = ZFP_MIN_BITS, maxbits = ZFP_MAX_BITS, minexp = ZFP_MIN_EXP, maxprec = ZFP_MAX_PREC,the_method=None): self.mode=mode - the_method=CompressMethod() + #the_method=CompressMethod() + self.the_method={} if mode == 'a': - self.tolerance=tol - the_method.set_mode(mode) - the_method.set_tolerance(tol) + self.tol=tol + self.the_method['mode']=mode + self.the_method['tol']=tol elif mode == 'p': - self.maxprec = prec - the_method.set_mode(mode) - the_method.set_precision(prec) + self.prec = prec + self.the_method['mode']=mode + self.the_method['prec']=prec elif mode == 'r': self.rate = rate - the_method.set_mode(mode) - the_method.set_rate(rate) + self.the_method['mode']=mode + self.the_method['rate']=rate elif mode == 'c': self.minbits = minbits self.maxbits = maxbits self.maxprec = maxprec self.minexp = minexp - the_method.set_mode(mode) - the_method.set_minbits(minbits) - the_method.set_maxbits(maxbits) - the_method.set_minexp(minexp) - the_method.set_maxprec(maxprec) + self.the_method['mode']=mode + self.the_method['minbits']=minbits + self.the_method['maxbits']=maxbits + self.the_method['minexp']=minexp + self.the_method['maxprec']=maxprec else: raise ValueError("Wrong mode, please set mode to 'a', 'p', 'r' or 'c'") - self.the_method=the_method + #self.the_method=the_method def encode(self,buf): #buf = ensure_contiguous_ndarray(buf) return compress(buf,self.the_method) - def decode(self,buf): + def decode(self,buf,out=None): buf=ensure_contiguous_ndarray(buf) - return decompress(buf) + return decompress(buf,out) def __repr__(self): if self.mode == 'a': - r= '%r(mode=%r,minexp=%s)' % (type(self).__name__, self.mode,self.minexp) + r= '%s(mode=%r,tol=%s)' % (type(self).__name__, self.mode,self.tol) elif self.mode == 'p': - r= '%r(mode=%r,maxprec=%s)' % (type(self).__name__,self.mode,self.maxprec) + r= '%s(mode=%r,prec=%s)' % (type(self).__name__,self.mode,self.prec) elif self.mode == 'r': - r= '%r(mode=%r,rate=%s)' % (type(self).__name__,self.mode,self.rate) + r= '%s(mode=%r,rate=%s)' % (type(self).__name__,self.mode,self.rate) elif self.mode == 'c': - r= '%r(mode=%r,minbits=%s,maxbits=%s,maxprec=%s,minexp=%s)' % (type(self).__name__,self.mode,self.minbits,self.maxbits,self.maxprec,self.minexp) + r= '%s(mode=%r,minbits=%s,maxbits=%s,minexp=%s,maxprec=%s)' % (type(self).__name__,self.mode,self.minbits,self.maxbits,self.minexp,self.maxprec) else: r="WRONG MODE" return r diff --git a/numcodecs/zstd.c b/numcodecs/zstd.c index cd8e0029..fe5b0bb3 100644 --- a/numcodecs/zstd.c +++ b/numcodecs/zstd.c @@ -1,4 +1,4 @@ -/* Generated by Cython 0.29.2 */ +/* Generated by Cython 0.29.1 */ /* BEGIN: Cython Metadata { @@ -8,45 +8,45 @@ ], "extra_compile_args": [ "-msse2", - "-mno-avx2" + "-mavx2" ], "include_dirs": [ "c-blosc/internal-complibs/zstd-1.3.7", - "c-blosc/internal-complibs/zstd-1.3.7/common", - "c-blosc/internal-complibs/zstd-1.3.7/compress", - "c-blosc/internal-complibs/zstd-1.3.7/decompress", "c-blosc/internal-complibs/zstd-1.3.7/deprecated", "c-blosc/internal-complibs/zstd-1.3.7/dictBuilder", + "c-blosc/internal-complibs/zstd-1.3.7/decompress", "c-blosc/internal-complibs/zstd-1.3.7/dll", - "c-blosc/internal-complibs/zstd-1.3.7/legacy" + "c-blosc/internal-complibs/zstd-1.3.7/legacy", + "c-blosc/internal-complibs/zstd-1.3.7/compress", + "c-blosc/internal-complibs/zstd-1.3.7/common" ], "name": "numcodecs.zstd", "sources": [ "numcodecs/zstd.pyx", - "c-blosc/internal-complibs/zstd-1.3.7/common/debug.c", - "c-blosc/internal-complibs/zstd-1.3.7/common/entropy_common.c", + "c-blosc/internal-complibs/zstd-1.3.7/common/zstd_common.c", "c-blosc/internal-complibs/zstd-1.3.7/common/error_private.c", - "c-blosc/internal-complibs/zstd-1.3.7/common/fse_decompress.c", + "c-blosc/internal-complibs/zstd-1.3.7/common/debug.c", "c-blosc/internal-complibs/zstd-1.3.7/common/pool.c", + "c-blosc/internal-complibs/zstd-1.3.7/common/fse_decompress.c", "c-blosc/internal-complibs/zstd-1.3.7/common/threading.c", "c-blosc/internal-complibs/zstd-1.3.7/common/xxhash.c", - "c-blosc/internal-complibs/zstd-1.3.7/common/zstd_common.c", - "c-blosc/internal-complibs/zstd-1.3.7/compress/fse_compress.c", + "c-blosc/internal-complibs/zstd-1.3.7/common/entropy_common.c", "c-blosc/internal-complibs/zstd-1.3.7/compress/hist.c", "c-blosc/internal-complibs/zstd-1.3.7/compress/huf_compress.c", "c-blosc/internal-complibs/zstd-1.3.7/compress/zstd_compress.c", - "c-blosc/internal-complibs/zstd-1.3.7/compress/zstd_double_fast.c", + "c-blosc/internal-complibs/zstd-1.3.7/compress/zstdmt_compress.c", + "c-blosc/internal-complibs/zstd-1.3.7/compress/fse_compress.c", "c-blosc/internal-complibs/zstd-1.3.7/compress/zstd_fast.c", - "c-blosc/internal-complibs/zstd-1.3.7/compress/zstd_lazy.c", "c-blosc/internal-complibs/zstd-1.3.7/compress/zstd_ldm.c", + "c-blosc/internal-complibs/zstd-1.3.7/compress/zstd_double_fast.c", "c-blosc/internal-complibs/zstd-1.3.7/compress/zstd_opt.c", - "c-blosc/internal-complibs/zstd-1.3.7/compress/zstdmt_compress.c", - "c-blosc/internal-complibs/zstd-1.3.7/decompress/huf_decompress.c", + "c-blosc/internal-complibs/zstd-1.3.7/compress/zstd_lazy.c", "c-blosc/internal-complibs/zstd-1.3.7/decompress/zstd_decompress.c", + "c-blosc/internal-complibs/zstd-1.3.7/decompress/huf_decompress.c", + "c-blosc/internal-complibs/zstd-1.3.7/dictBuilder/zdict.c", "c-blosc/internal-complibs/zstd-1.3.7/dictBuilder/cover.c", - "c-blosc/internal-complibs/zstd-1.3.7/dictBuilder/divsufsort.c", "c-blosc/internal-complibs/zstd-1.3.7/dictBuilder/fastcover.c", - "c-blosc/internal-complibs/zstd-1.3.7/dictBuilder/zdict.c" + "c-blosc/internal-complibs/zstd-1.3.7/dictBuilder/divsufsort.c" ] }, "module_name": "numcodecs.zstd" @@ -60,8 +60,8 @@ END: Cython Metadata */ #elif PY_VERSION_HEX < 0x02060000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03030000) #error Cython requires Python 2.6+ or Python 3.3+. #else -#define CYTHON_ABI "0_29_2" -#define CYTHON_HEX_VERSION 0x001D02F0 +#define CYTHON_ABI "0_29_1" +#define CYTHON_HEX_VERSION 0x001D01F0 #define CYTHON_FUTURE_DIVISION 1 #include #ifndef offsetof @@ -251,7 +251,7 @@ END: Cython Metadata */ #undef BASE #undef MASK #ifdef SIZEOF_VOID_P - enum { __pyx_check_sizeof_voidp = 1 / (int)(SIZEOF_VOID_P == sizeof(void*)) }; + enum { __pyx_check_sizeof_voidp = 1/(SIZEOF_VOID_P == sizeof(void*)) }; #endif #endif #ifndef __has_attribute @@ -899,7 +899,7 @@ struct __pyx_defaults { /* "compat_ext.pxd":4 * * - * cdef class Buffer: # <<<<<<<<<<<<<< + * cdef class Buffer: * cdef: * char *ptr */ @@ -1511,7 +1511,7 @@ static PyObject *__pyx_codeobj__15; /* "numcodecs/zstd.pyx":60 * * - * def compress(source, int level=DEFAULT_CLEVEL): # <<<<<<<<<<<<<< + * def compress(source, int level=DEFAULT_CLEVEL): * """Compress data. * */ @@ -1617,7 +1617,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_compress(CYTHON_UNUSED PyObject *__py /* "numcodecs/zstd.pyx":85 * * # check level - * if level <= 0: # <<<<<<<<<<<<<< + * if level <= 0: * level = DEFAULT_CLEVEL * if level > MAX_CLEVEL: */ @@ -1627,7 +1627,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_compress(CYTHON_UNUSED PyObject *__py /* "numcodecs/zstd.pyx":86 * # check level * if level <= 0: - * level = DEFAULT_CLEVEL # <<<<<<<<<<<<<< + * level = DEFAULT_CLEVEL * if level > MAX_CLEVEL: * level = MAX_CLEVEL */ @@ -1640,7 +1640,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_compress(CYTHON_UNUSED PyObject *__py /* "numcodecs/zstd.pyx":85 * * # check level - * if level <= 0: # <<<<<<<<<<<<<< + * if level <= 0: * level = DEFAULT_CLEVEL * if level > MAX_CLEVEL: */ @@ -1649,7 +1649,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_compress(CYTHON_UNUSED PyObject *__py /* "numcodecs/zstd.pyx":87 * if level <= 0: * level = DEFAULT_CLEVEL - * if level > MAX_CLEVEL: # <<<<<<<<<<<<<< + * if level > MAX_CLEVEL: * level = MAX_CLEVEL * */ @@ -1667,7 +1667,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_compress(CYTHON_UNUSED PyObject *__py /* "numcodecs/zstd.pyx":88 * level = DEFAULT_CLEVEL * if level > MAX_CLEVEL: - * level = MAX_CLEVEL # <<<<<<<<<<<<<< + * level = MAX_CLEVEL * * # setup source buffer */ @@ -1680,7 +1680,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_compress(CYTHON_UNUSED PyObject *__py /* "numcodecs/zstd.pyx":87 * if level <= 0: * level = DEFAULT_CLEVEL - * if level > MAX_CLEVEL: # <<<<<<<<<<<<<< + * if level > MAX_CLEVEL: * level = MAX_CLEVEL * */ @@ -1689,7 +1689,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_compress(CYTHON_UNUSED PyObject *__py /* "numcodecs/zstd.pyx":91 * * # setup source buffer - * source_buffer = Buffer(source, PyBUF_ANY_CONTIGUOUS) # <<<<<<<<<<<<<< + * source_buffer = Buffer(source, PyBUF_ANY_CONTIGUOUS) * source_ptr = source_buffer.ptr * source_size = source_buffer.nbytes */ @@ -1712,7 +1712,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_compress(CYTHON_UNUSED PyObject *__py /* "numcodecs/zstd.pyx":92 * # setup source buffer * source_buffer = Buffer(source, PyBUF_ANY_CONTIGUOUS) - * source_ptr = source_buffer.ptr # <<<<<<<<<<<<<< + * source_ptr = source_buffer.ptr * source_size = source_buffer.nbytes * */ @@ -1722,7 +1722,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_compress(CYTHON_UNUSED PyObject *__py /* "numcodecs/zstd.pyx":93 * source_buffer = Buffer(source, PyBUF_ANY_CONTIGUOUS) * source_ptr = source_buffer.ptr - * source_size = source_buffer.nbytes # <<<<<<<<<<<<<< + * source_size = source_buffer.nbytes * * try: */ @@ -1732,7 +1732,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_compress(CYTHON_UNUSED PyObject *__py /* "numcodecs/zstd.pyx":95 * source_size = source_buffer.nbytes * - * try: # <<<<<<<<<<<<<< + * try: * * # setup destination */ @@ -1741,7 +1741,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_compress(CYTHON_UNUSED PyObject *__py /* "numcodecs/zstd.pyx":98 * * # setup destination - * dest_size = ZSTD_compressBound(source_size) # <<<<<<<<<<<<<< + * dest_size = ZSTD_compressBound(source_size) * dest = PyBytes_FromStringAndSize(NULL, dest_size) * dest_ptr = PyBytes_AS_STRING(dest) */ @@ -1750,7 +1750,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_compress(CYTHON_UNUSED PyObject *__py /* "numcodecs/zstd.pyx":99 * # setup destination * dest_size = ZSTD_compressBound(source_size) - * dest = PyBytes_FromStringAndSize(NULL, dest_size) # <<<<<<<<<<<<<< + * dest = PyBytes_FromStringAndSize(NULL, dest_size) * dest_ptr = PyBytes_AS_STRING(dest) * */ @@ -1762,7 +1762,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_compress(CYTHON_UNUSED PyObject *__py /* "numcodecs/zstd.pyx":100 * dest_size = ZSTD_compressBound(source_size) * dest = PyBytes_FromStringAndSize(NULL, dest_size) - * dest_ptr = PyBytes_AS_STRING(dest) # <<<<<<<<<<<<<< + * dest_ptr = PyBytes_AS_STRING(dest) * * # perform compression */ @@ -1771,7 +1771,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_compress(CYTHON_UNUSED PyObject *__py /* "numcodecs/zstd.pyx":103 * * # perform compression - * with nogil: # <<<<<<<<<<<<<< + * with nogil: * compressed_size = ZSTD_compress(dest_ptr, dest_size, source_ptr, source_size, level) * */ @@ -1786,7 +1786,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_compress(CYTHON_UNUSED PyObject *__py /* "numcodecs/zstd.pyx":104 * # perform compression * with nogil: - * compressed_size = ZSTD_compress(dest_ptr, dest_size, source_ptr, source_size, level) # <<<<<<<<<<<<<< + * compressed_size = ZSTD_compress(dest_ptr, dest_size, source_ptr, source_size, level) * * finally: */ @@ -1796,7 +1796,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_compress(CYTHON_UNUSED PyObject *__py /* "numcodecs/zstd.pyx":103 * * # perform compression - * with nogil: # <<<<<<<<<<<<<< + * with nogil: * compressed_size = ZSTD_compress(dest_ptr, dest_size, source_ptr, source_size, level) * */ @@ -1816,7 +1816,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_compress(CYTHON_UNUSED PyObject *__py /* "numcodecs/zstd.pyx":109 * * # release buffers - * source_buffer.release() # <<<<<<<<<<<<<< + * source_buffer.release() * * # check compression was successful */ @@ -1881,7 +1881,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_compress(CYTHON_UNUSED PyObject *__py /* "numcodecs/zstd.pyx":112 * * # check compression was successful - * if ZSTD_isError(compressed_size): # <<<<<<<<<<<<<< + * if ZSTD_isError(compressed_size): * error = ZSTD_getErrorName(compressed_size) * raise RuntimeError('Zstd compression error: %s' % error) */ @@ -1891,7 +1891,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_compress(CYTHON_UNUSED PyObject *__py /* "numcodecs/zstd.pyx":113 * # check compression was successful * if ZSTD_isError(compressed_size): - * error = ZSTD_getErrorName(compressed_size) # <<<<<<<<<<<<<< + * error = ZSTD_getErrorName(compressed_size) * raise RuntimeError('Zstd compression error: %s' % error) * */ @@ -1900,7 +1900,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_compress(CYTHON_UNUSED PyObject *__py /* "numcodecs/zstd.pyx":114 * if ZSTD_isError(compressed_size): * error = ZSTD_getErrorName(compressed_size) - * raise RuntimeError('Zstd compression error: %s' % error) # <<<<<<<<<<<<<< + * raise RuntimeError('Zstd compression error: %s' % error) * * # resize after compression */ @@ -1919,7 +1919,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_compress(CYTHON_UNUSED PyObject *__py /* "numcodecs/zstd.pyx":112 * * # check compression was successful - * if ZSTD_isError(compressed_size): # <<<<<<<<<<<<<< + * if ZSTD_isError(compressed_size): * error = ZSTD_getErrorName(compressed_size) * raise RuntimeError('Zstd compression error: %s' % error) */ @@ -1928,7 +1928,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_compress(CYTHON_UNUSED PyObject *__py /* "numcodecs/zstd.pyx":117 * * # resize after compression - * dest = dest[:compressed_size] # <<<<<<<<<<<<<< + * dest = dest[:compressed_size] * * return dest */ @@ -1944,7 +1944,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_compress(CYTHON_UNUSED PyObject *__py /* "numcodecs/zstd.pyx":119 * dest = dest[:compressed_size] * - * return dest # <<<<<<<<<<<<<< + * return dest * * */ @@ -1956,7 +1956,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_compress(CYTHON_UNUSED PyObject *__py /* "numcodecs/zstd.pyx":60 * * - * def compress(source, int level=DEFAULT_CLEVEL): # <<<<<<<<<<<<<< + * def compress(source, int level=DEFAULT_CLEVEL): * """Compress data. * */ @@ -1979,7 +1979,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_compress(CYTHON_UNUSED PyObject *__py /* "numcodecs/zstd.pyx":122 * * - * def decompress(source, dest=None): # <<<<<<<<<<<<<< + * def decompress(source, dest=None): * """Decompress data. * */ @@ -2085,7 +2085,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":142 * char *dest_ptr * Buffer source_buffer - * Buffer dest_buffer = None # <<<<<<<<<<<<<< + * Buffer dest_buffer = None * size_t source_size, dest_size, decompressed_size * */ @@ -2095,7 +2095,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":146 * * # setup source buffer - * source_buffer = Buffer(source, PyBUF_ANY_CONTIGUOUS) # <<<<<<<<<<<<<< + * source_buffer = Buffer(source, PyBUF_ANY_CONTIGUOUS) * source_ptr = source_buffer.ptr * source_size = source_buffer.nbytes */ @@ -2118,7 +2118,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":147 * # setup source buffer * source_buffer = Buffer(source, PyBUF_ANY_CONTIGUOUS) - * source_ptr = source_buffer.ptr # <<<<<<<<<<<<<< + * source_ptr = source_buffer.ptr * source_size = source_buffer.nbytes * */ @@ -2128,7 +2128,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":148 * source_buffer = Buffer(source, PyBUF_ANY_CONTIGUOUS) * source_ptr = source_buffer.ptr - * source_size = source_buffer.nbytes # <<<<<<<<<<<<<< + * source_size = source_buffer.nbytes * * try: */ @@ -2138,7 +2138,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":150 * source_size = source_buffer.nbytes * - * try: # <<<<<<<<<<<<<< + * try: * * # determine uncompressed size */ @@ -2147,7 +2147,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":153 * * # determine uncompressed size - * dest_size = ZSTD_getDecompressedSize(source_ptr, source_size) # <<<<<<<<<<<<<< + * dest_size = ZSTD_getDecompressedSize(source_ptr, source_size) * if dest_size == 0: * raise RuntimeError('Zstd decompression error: invalid input data') */ @@ -2156,7 +2156,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":154 * # determine uncompressed size * dest_size = ZSTD_getDecompressedSize(source_ptr, source_size) - * if dest_size == 0: # <<<<<<<<<<<<<< + * if dest_size == 0: * raise RuntimeError('Zstd decompression error: invalid input data') * */ @@ -2166,7 +2166,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":155 * dest_size = ZSTD_getDecompressedSize(source_ptr, source_size) * if dest_size == 0: - * raise RuntimeError('Zstd decompression error: invalid input data') # <<<<<<<<<<<<<< + * raise RuntimeError('Zstd decompression error: invalid input data') * * # setup destination buffer */ @@ -2179,7 +2179,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":154 * # determine uncompressed size * dest_size = ZSTD_getDecompressedSize(source_ptr, source_size) - * if dest_size == 0: # <<<<<<<<<<<<<< + * if dest_size == 0: * raise RuntimeError('Zstd decompression error: invalid input data') * */ @@ -2188,7 +2188,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":158 * * # setup destination buffer - * if dest is None: # <<<<<<<<<<<<<< + * if dest is None: * # allocate memory * dest = PyBytes_FromStringAndSize(NULL, dest_size) */ @@ -2199,7 +2199,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":160 * if dest is None: * # allocate memory - * dest = PyBytes_FromStringAndSize(NULL, dest_size) # <<<<<<<<<<<<<< + * dest = PyBytes_FromStringAndSize(NULL, dest_size) * dest_ptr = PyBytes_AS_STRING(dest) * else: */ @@ -2211,7 +2211,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":161 * # allocate memory * dest = PyBytes_FromStringAndSize(NULL, dest_size) - * dest_ptr = PyBytes_AS_STRING(dest) # <<<<<<<<<<<<<< + * dest_ptr = PyBytes_AS_STRING(dest) * else: * arr = ensure_contiguous_ndarray(dest) */ @@ -2220,7 +2220,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":158 * * # setup destination buffer - * if dest is None: # <<<<<<<<<<<<<< + * if dest is None: * # allocate memory * dest = PyBytes_FromStringAndSize(NULL, dest_size) */ @@ -2230,7 +2230,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":163 * dest_ptr = PyBytes_AS_STRING(dest) * else: - * arr = ensure_contiguous_ndarray(dest) # <<<<<<<<<<<<<< + * arr = ensure_contiguous_ndarray(dest) * dest_buffer = Buffer(arr, PyBUF_ANY_CONTIGUOUS | PyBUF_WRITEABLE) * dest_ptr = dest_buffer.ptr */ @@ -2258,7 +2258,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":164 * else: * arr = ensure_contiguous_ndarray(dest) - * dest_buffer = Buffer(arr, PyBUF_ANY_CONTIGUOUS | PyBUF_WRITEABLE) # <<<<<<<<<<<<<< + * dest_buffer = Buffer(arr, PyBUF_ANY_CONTIGUOUS | PyBUF_WRITEABLE) * dest_ptr = dest_buffer.ptr * if dest_buffer.nbytes < dest_size: */ @@ -2281,7 +2281,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":165 * arr = ensure_contiguous_ndarray(dest) * dest_buffer = Buffer(arr, PyBUF_ANY_CONTIGUOUS | PyBUF_WRITEABLE) - * dest_ptr = dest_buffer.ptr # <<<<<<<<<<<<<< + * dest_ptr = dest_buffer.ptr * if dest_buffer.nbytes < dest_size: * raise ValueError('destination buffer too small; expected at least %s, ' */ @@ -2291,7 +2291,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":166 * dest_buffer = Buffer(arr, PyBUF_ANY_CONTIGUOUS | PyBUF_WRITEABLE) * dest_ptr = dest_buffer.ptr - * if dest_buffer.nbytes < dest_size: # <<<<<<<<<<<<<< + * if dest_buffer.nbytes < dest_size: * raise ValueError('destination buffer too small; expected at least %s, ' * 'got %s' % (dest_size, dest_buffer.nbytes)) */ @@ -2301,7 +2301,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":168 * if dest_buffer.nbytes < dest_size: * raise ValueError('destination buffer too small; expected at least %s, ' - * 'got %s' % (dest_size, dest_buffer.nbytes)) # <<<<<<<<<<<<<< + * 'got %s' % (dest_size, dest_buffer.nbytes)) * * # perform decompression */ @@ -2324,7 +2324,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":167 * dest_ptr = dest_buffer.ptr * if dest_buffer.nbytes < dest_size: - * raise ValueError('destination buffer too small; expected at least %s, ' # <<<<<<<<<<<<<< + * raise ValueError('destination buffer too small; expected at least %s, ' * 'got %s' % (dest_size, dest_buffer.nbytes)) * */ @@ -2338,7 +2338,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":166 * dest_buffer = Buffer(arr, PyBUF_ANY_CONTIGUOUS | PyBUF_WRITEABLE) * dest_ptr = dest_buffer.ptr - * if dest_buffer.nbytes < dest_size: # <<<<<<<<<<<<<< + * if dest_buffer.nbytes < dest_size: * raise ValueError('destination buffer too small; expected at least %s, ' * 'got %s' % (dest_size, dest_buffer.nbytes)) */ @@ -2349,7 +2349,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":171 * * # perform decompression - * with nogil: # <<<<<<<<<<<<<< + * with nogil: * decompressed_size = ZSTD_decompress(dest_ptr, dest_size, source_ptr, source_size) * */ @@ -2364,7 +2364,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":172 * # perform decompression * with nogil: - * decompressed_size = ZSTD_decompress(dest_ptr, dest_size, source_ptr, source_size) # <<<<<<<<<<<<<< + * decompressed_size = ZSTD_decompress(dest_ptr, dest_size, source_ptr, source_size) * * finally: */ @@ -2374,7 +2374,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":171 * * # perform decompression - * with nogil: # <<<<<<<<<<<<<< + * with nogil: * decompressed_size = ZSTD_decompress(dest_ptr, dest_size, source_ptr, source_size) * */ @@ -2394,7 +2394,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":177 * * # release buffers - * source_buffer.release() # <<<<<<<<<<<<<< + * source_buffer.release() * if dest_buffer is not None: * dest_buffer.release() */ @@ -2407,7 +2407,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":178 * # release buffers * source_buffer.release() - * if dest_buffer is not None: # <<<<<<<<<<<<<< + * if dest_buffer is not None: * dest_buffer.release() * */ @@ -2418,7 +2418,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":179 * source_buffer.release() * if dest_buffer is not None: - * dest_buffer.release() # <<<<<<<<<<<<<< + * dest_buffer.release() * * # check decompression was successful */ @@ -2429,7 +2429,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":178 * # release buffers * source_buffer.release() - * if dest_buffer is not None: # <<<<<<<<<<<<<< + * if dest_buffer is not None: * dest_buffer.release() * */ @@ -2458,7 +2458,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":177 * * # release buffers - * source_buffer.release() # <<<<<<<<<<<<<< + * source_buffer.release() * if dest_buffer is not None: * dest_buffer.release() */ @@ -2469,7 +2469,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":178 * # release buffers * source_buffer.release() - * if dest_buffer is not None: # <<<<<<<<<<<<<< + * if dest_buffer is not None: * dest_buffer.release() * */ @@ -2480,7 +2480,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":179 * source_buffer.release() * if dest_buffer is not None: - * dest_buffer.release() # <<<<<<<<<<<<<< + * dest_buffer.release() * * # check decompression was successful */ @@ -2491,7 +2491,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":178 * # release buffers * source_buffer.release() - * if dest_buffer is not None: # <<<<<<<<<<<<<< + * if dest_buffer is not None: * dest_buffer.release() * */ @@ -2529,7 +2529,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":182 * * # check decompression was successful - * if ZSTD_isError(decompressed_size): # <<<<<<<<<<<<<< + * if ZSTD_isError(decompressed_size): * error = ZSTD_getErrorName(decompressed_size) * raise RuntimeError('Zstd decompression error: %s' % error) */ @@ -2539,7 +2539,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":183 * # check decompression was successful * if ZSTD_isError(decompressed_size): - * error = ZSTD_getErrorName(decompressed_size) # <<<<<<<<<<<<<< + * error = ZSTD_getErrorName(decompressed_size) * raise RuntimeError('Zstd decompression error: %s' % error) * elif decompressed_size != dest_size: */ @@ -2548,7 +2548,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":184 * if ZSTD_isError(decompressed_size): * error = ZSTD_getErrorName(decompressed_size) - * raise RuntimeError('Zstd decompression error: %s' % error) # <<<<<<<<<<<<<< + * raise RuntimeError('Zstd decompression error: %s' % error) * elif decompressed_size != dest_size: * raise RuntimeError('Zstd decompression error: expected to decompress %s, got %s' % */ @@ -2567,7 +2567,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":182 * * # check decompression was successful - * if ZSTD_isError(decompressed_size): # <<<<<<<<<<<<<< + * if ZSTD_isError(decompressed_size): * error = ZSTD_getErrorName(decompressed_size) * raise RuntimeError('Zstd decompression error: %s' % error) */ @@ -2576,7 +2576,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":185 * error = ZSTD_getErrorName(decompressed_size) * raise RuntimeError('Zstd decompression error: %s' % error) - * elif decompressed_size != dest_size: # <<<<<<<<<<<<<< + * elif decompressed_size != dest_size: * raise RuntimeError('Zstd decompression error: expected to decompress %s, got %s' % * (dest_size, decompressed_size)) */ @@ -2586,7 +2586,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":187 * elif decompressed_size != dest_size: * raise RuntimeError('Zstd decompression error: expected to decompress %s, got %s' % - * (dest_size, decompressed_size)) # <<<<<<<<<<<<<< + * (dest_size, decompressed_size)) * * return dest */ @@ -2606,7 +2606,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":186 * raise RuntimeError('Zstd decompression error: %s' % error) * elif decompressed_size != dest_size: - * raise RuntimeError('Zstd decompression error: expected to decompress %s, got %s' % # <<<<<<<<<<<<<< + * raise RuntimeError('Zstd decompression error: expected to decompress %s, got %s' % * (dest_size, decompressed_size)) * */ @@ -2623,7 +2623,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":185 * error = ZSTD_getErrorName(decompressed_size) * raise RuntimeError('Zstd decompression error: %s' % error) - * elif decompressed_size != dest_size: # <<<<<<<<<<<<<< + * elif decompressed_size != dest_size: * raise RuntimeError('Zstd decompression error: expected to decompress %s, got %s' % * (dest_size, decompressed_size)) */ @@ -2632,7 +2632,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":189 * (dest_size, decompressed_size)) * - * return dest # <<<<<<<<<<<<<< + * return dest * * */ @@ -2644,7 +2644,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":122 * * - * def decompress(source, dest=None): # <<<<<<<<<<<<<< + * def decompress(source, dest=None): * """Decompress data. * */ @@ -2669,7 +2669,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":212 * # enforce a max_buffer_size option here. * - * def __init__(self, level=DEFAULT_CLEVEL): # <<<<<<<<<<<<<< + * def __init__(self, level=DEFAULT_CLEVEL): * self.level = level * */ @@ -2786,7 +2786,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_4Zstd___init__(CYTHON_UNUSED PyObject /* "numcodecs/zstd.pyx":213 * * def __init__(self, level=DEFAULT_CLEVEL): - * self.level = level # <<<<<<<<<<<<<< + * self.level = level * * def encode(self, buf): */ @@ -2795,7 +2795,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_4Zstd___init__(CYTHON_UNUSED PyObject /* "numcodecs/zstd.pyx":212 * # enforce a max_buffer_size option here. * - * def __init__(self, level=DEFAULT_CLEVEL): # <<<<<<<<<<<<<< + * def __init__(self, level=DEFAULT_CLEVEL): * self.level = level * */ @@ -2815,7 +2815,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_4Zstd___init__(CYTHON_UNUSED PyObject /* "numcodecs/zstd.pyx":215 * self.level = level * - * def encode(self, buf): # <<<<<<<<<<<<<< + * def encode(self, buf): * buf = ensure_contiguous_ndarray(buf) * return compress(buf, self.level) */ @@ -2898,7 +2898,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_4Zstd_2encode(CYTHON_UNUSED PyObject /* "numcodecs/zstd.pyx":216 * * def encode(self, buf): - * buf = ensure_contiguous_ndarray(buf) # <<<<<<<<<<<<<< + * buf = ensure_contiguous_ndarray(buf) * return compress(buf, self.level) * */ @@ -2925,7 +2925,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_4Zstd_2encode(CYTHON_UNUSED PyObject /* "numcodecs/zstd.pyx":217 * def encode(self, buf): * buf = ensure_contiguous_ndarray(buf) - * return compress(buf, self.level) # <<<<<<<<<<<<<< + * return compress(buf, self.level) * * def decode(self, buf, out=None): */ @@ -2988,7 +2988,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_4Zstd_2encode(CYTHON_UNUSED PyObject /* "numcodecs/zstd.pyx":215 * self.level = level * - * def encode(self, buf): # <<<<<<<<<<<<<< + * def encode(self, buf): * buf = ensure_contiguous_ndarray(buf) * return compress(buf, self.level) */ @@ -3012,7 +3012,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_4Zstd_2encode(CYTHON_UNUSED PyObject /* "numcodecs/zstd.pyx":219 * return compress(buf, self.level) * - * def decode(self, buf, out=None): # <<<<<<<<<<<<<< + * def decode(self, buf, out=None): * buf = ensure_contiguous_ndarray(buf) * return decompress(buf, out) */ @@ -3109,7 +3109,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_4Zstd_4decode(CYTHON_UNUSED PyObject /* "numcodecs/zstd.pyx":220 * * def decode(self, buf, out=None): - * buf = ensure_contiguous_ndarray(buf) # <<<<<<<<<<<<<< + * buf = ensure_contiguous_ndarray(buf) * return decompress(buf, out) * */ @@ -3136,7 +3136,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_4Zstd_4decode(CYTHON_UNUSED PyObject /* "numcodecs/zstd.pyx":221 * def decode(self, buf, out=None): * buf = ensure_contiguous_ndarray(buf) - * return decompress(buf, out) # <<<<<<<<<<<<<< + * return decompress(buf, out) * * def __repr__(self): */ @@ -3195,7 +3195,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_4Zstd_4decode(CYTHON_UNUSED PyObject /* "numcodecs/zstd.pyx":219 * return compress(buf, self.level) * - * def decode(self, buf, out=None): # <<<<<<<<<<<<<< + * def decode(self, buf, out=None): * buf = ensure_contiguous_ndarray(buf) * return decompress(buf, out) */ @@ -3218,7 +3218,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_4Zstd_4decode(CYTHON_UNUSED PyObject /* "numcodecs/zstd.pyx":223 * return decompress(buf, out) * - * def __repr__(self): # <<<<<<<<<<<<<< + * def __repr__(self): * r = '%s(level=%r)' % \ * (type(self).__name__, */ @@ -3250,7 +3250,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_4Zstd_6__repr__(CYTHON_UNUSED PyObjec /* "numcodecs/zstd.pyx":225 * def __repr__(self): * r = '%s(level=%r)' % \ - * (type(self).__name__, # <<<<<<<<<<<<<< + * (type(self).__name__, * self.level) * return r */ @@ -3260,7 +3260,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_4Zstd_6__repr__(CYTHON_UNUSED PyObjec /* "numcodecs/zstd.pyx":226 * r = '%s(level=%r)' % \ * (type(self).__name__, - * self.level) # <<<<<<<<<<<<<< + * self.level) * return r */ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_level); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 226, __pyx_L1_error) @@ -3269,7 +3269,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_4Zstd_6__repr__(CYTHON_UNUSED PyObjec /* "numcodecs/zstd.pyx":225 * def __repr__(self): * r = '%s(level=%r)' % \ - * (type(self).__name__, # <<<<<<<<<<<<<< + * (type(self).__name__, * self.level) * return r */ @@ -3285,7 +3285,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_4Zstd_6__repr__(CYTHON_UNUSED PyObjec /* "numcodecs/zstd.pyx":224 * * def __repr__(self): - * r = '%s(level=%r)' % \ # <<<<<<<<<<<<<< + * r = '%s(level=%r)' % \ * (type(self).__name__, * self.level) */ @@ -3298,7 +3298,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_4Zstd_6__repr__(CYTHON_UNUSED PyObjec /* "numcodecs/zstd.pyx":227 * (type(self).__name__, * self.level) - * return r # <<<<<<<<<<<<<< + * return r */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_r); @@ -3308,7 +3308,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_4Zstd_6__repr__(CYTHON_UNUSED PyObjec /* "numcodecs/zstd.pyx":223 * return decompress(buf, out) * - * def __repr__(self): # <<<<<<<<<<<<<< + * def __repr__(self): * r = '%s(level=%r)' % \ * (type(self).__name__, */ @@ -3456,7 +3456,7 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { /* "numcodecs/zstd.pyx":155 * dest_size = ZSTD_getDecompressedSize(source_ptr, source_size) * if dest_size == 0: - * raise RuntimeError('Zstd decompression error: invalid input data') # <<<<<<<<<<<<<< + * raise RuntimeError('Zstd decompression error: invalid input data') * * # setup destination buffer */ @@ -3467,7 +3467,7 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { /* "numcodecs/zstd.pyx":60 * * - * def compress(source, int level=DEFAULT_CLEVEL): # <<<<<<<<<<<<<< + * def compress(source, int level=DEFAULT_CLEVEL): * """Compress data. * */ @@ -3479,7 +3479,7 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { /* "numcodecs/zstd.pyx":122 * * - * def decompress(source, dest=None): # <<<<<<<<<<<<<< + * def decompress(source, dest=None): * """Decompress data. * */ @@ -3491,7 +3491,7 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { /* "numcodecs/zstd.pyx":212 * # enforce a max_buffer_size option here. * - * def __init__(self, level=DEFAULT_CLEVEL): # <<<<<<<<<<<<<< + * def __init__(self, level=DEFAULT_CLEVEL): * self.level = level * */ @@ -3503,7 +3503,7 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { /* "numcodecs/zstd.pyx":215 * self.level = level * - * def encode(self, buf): # <<<<<<<<<<<<<< + * def encode(self, buf): * buf = ensure_contiguous_ndarray(buf) * return compress(buf, self.level) */ @@ -3515,7 +3515,7 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { /* "numcodecs/zstd.pyx":219 * return compress(buf, self.level) * - * def decode(self, buf, out=None): # <<<<<<<<<<<<<< + * def decode(self, buf, out=None): * buf = ensure_contiguous_ndarray(buf) * return decompress(buf, out) */ @@ -3530,7 +3530,7 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { /* "numcodecs/zstd.pyx":223 * return decompress(buf, out) * - * def __repr__(self): # <<<<<<<<<<<<<< + * def __repr__(self): * r = '%s(level=%r)' % \ * (type(self).__name__, */ @@ -3847,7 +3847,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/zstd.pyx":15 * * from .compat_ext cimport Buffer - * from .compat_ext import Buffer # <<<<<<<<<<<<<< + * from .compat_ext import Buffer * from .compat import ensure_contiguous_ndarray * from .abc import Codec */ @@ -3864,7 +3864,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/zstd.pyx":16 * from .compat_ext cimport Buffer * from .compat_ext import Buffer - * from .compat import ensure_contiguous_ndarray # <<<<<<<<<<<<<< + * from .compat import ensure_contiguous_ndarray * from .abc import Codec * */ @@ -3885,7 +3885,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/zstd.pyx":17 * from .compat_ext import Buffer * from .compat import ensure_contiguous_ndarray - * from .abc import Codec # <<<<<<<<<<<<<< + * from .abc import Codec * * */ @@ -3906,7 +3906,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/zstd.pyx":47 * * - * VERSION_NUMBER = ZSTD_versionNumber() # <<<<<<<<<<<<<< + * VERSION_NUMBER = ZSTD_versionNumber() * MAJOR_VERSION_NUMBER = VERSION_NUMBER // (100 * 100) * MINOR_VERSION_NUMBER = (VERSION_NUMBER - (MAJOR_VERSION_NUMBER * 100 * 100)) // 100 */ @@ -3918,7 +3918,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/zstd.pyx":48 * * VERSION_NUMBER = ZSTD_versionNumber() - * MAJOR_VERSION_NUMBER = VERSION_NUMBER // (100 * 100) # <<<<<<<<<<<<<< + * MAJOR_VERSION_NUMBER = VERSION_NUMBER // (100 * 100) * MINOR_VERSION_NUMBER = (VERSION_NUMBER - (MAJOR_VERSION_NUMBER * 100 * 100)) // 100 * MICRO_VERSION_NUMBER = ( */ @@ -3933,7 +3933,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/zstd.pyx":49 * VERSION_NUMBER = ZSTD_versionNumber() * MAJOR_VERSION_NUMBER = VERSION_NUMBER // (100 * 100) - * MINOR_VERSION_NUMBER = (VERSION_NUMBER - (MAJOR_VERSION_NUMBER * 100 * 100)) // 100 # <<<<<<<<<<<<<< + * MINOR_VERSION_NUMBER = (VERSION_NUMBER - (MAJOR_VERSION_NUMBER * 100 * 100)) // 100 * MICRO_VERSION_NUMBER = ( * VERSION_NUMBER - */ @@ -3960,7 +3960,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/zstd.pyx":51 * MINOR_VERSION_NUMBER = (VERSION_NUMBER - (MAJOR_VERSION_NUMBER * 100 * 100)) // 100 * MICRO_VERSION_NUMBER = ( - * VERSION_NUMBER - # <<<<<<<<<<<<<< + * VERSION_NUMBER - * (MAJOR_VERSION_NUMBER * 100 * 100) - * (MINOR_VERSION_NUMBER * 100) */ @@ -3970,7 +3970,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/zstd.pyx":52 * MICRO_VERSION_NUMBER = ( * VERSION_NUMBER - - * (MAJOR_VERSION_NUMBER * 100 * 100) - # <<<<<<<<<<<<<< + * (MAJOR_VERSION_NUMBER * 100 * 100) - * (MINOR_VERSION_NUMBER * 100) * ) */ @@ -3986,7 +3986,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/zstd.pyx":51 * MINOR_VERSION_NUMBER = (VERSION_NUMBER - (MAJOR_VERSION_NUMBER * 100 * 100)) // 100 * MICRO_VERSION_NUMBER = ( - * VERSION_NUMBER - # <<<<<<<<<<<<<< + * VERSION_NUMBER - * (MAJOR_VERSION_NUMBER * 100 * 100) - * (MINOR_VERSION_NUMBER * 100) */ @@ -3998,7 +3998,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/zstd.pyx":53 * VERSION_NUMBER - * (MAJOR_VERSION_NUMBER * 100 * 100) - - * (MINOR_VERSION_NUMBER * 100) # <<<<<<<<<<<<<< + * (MINOR_VERSION_NUMBER * 100) * ) * __version__ = '%s.%s.%s' % (MAJOR_VERSION_NUMBER, MINOR_VERSION_NUMBER, MICRO_VERSION_NUMBER) */ @@ -4011,7 +4011,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/zstd.pyx":52 * MICRO_VERSION_NUMBER = ( * VERSION_NUMBER - - * (MAJOR_VERSION_NUMBER * 100 * 100) - # <<<<<<<<<<<<<< + * (MAJOR_VERSION_NUMBER * 100 * 100) - * (MINOR_VERSION_NUMBER * 100) * ) */ @@ -4025,7 +4025,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/zstd.pyx":55 * (MINOR_VERSION_NUMBER * 100) * ) - * __version__ = '%s.%s.%s' % (MAJOR_VERSION_NUMBER, MINOR_VERSION_NUMBER, MICRO_VERSION_NUMBER) # <<<<<<<<<<<<<< + * __version__ = '%s.%s.%s' % (MAJOR_VERSION_NUMBER, MINOR_VERSION_NUMBER, MICRO_VERSION_NUMBER) * DEFAULT_CLEVEL = 1 * MAX_CLEVEL = ZSTD_maxCLevel() */ @@ -4055,7 +4055,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/zstd.pyx":56 * ) * __version__ = '%s.%s.%s' % (MAJOR_VERSION_NUMBER, MINOR_VERSION_NUMBER, MICRO_VERSION_NUMBER) - * DEFAULT_CLEVEL = 1 # <<<<<<<<<<<<<< + * DEFAULT_CLEVEL = 1 * MAX_CLEVEL = ZSTD_maxCLevel() * */ @@ -4064,7 +4064,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/zstd.pyx":57 * __version__ = '%s.%s.%s' % (MAJOR_VERSION_NUMBER, MINOR_VERSION_NUMBER, MICRO_VERSION_NUMBER) * DEFAULT_CLEVEL = 1 - * MAX_CLEVEL = ZSTD_maxCLevel() # <<<<<<<<<<<<<< + * MAX_CLEVEL = ZSTD_maxCLevel() * * */ @@ -4076,7 +4076,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/zstd.pyx":60 * * - * def compress(source, int level=DEFAULT_CLEVEL): # <<<<<<<<<<<<<< + * def compress(source, int level=DEFAULT_CLEVEL): * """Compress data. * */ @@ -4093,7 +4093,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/zstd.pyx":122 * * - * def decompress(source, dest=None): # <<<<<<<<<<<<<< + * def decompress(source, dest=None): * """Decompress data. * */ @@ -4105,7 +4105,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/zstd.pyx":192 * * - * class Zstd(Codec): # <<<<<<<<<<<<<< + * class Zstd(Codec): * """Codec providing compression using Zstandard. * */ @@ -4124,7 +4124,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/zstd.pyx":206 * """ * - * codec_id = 'zstd' # <<<<<<<<<<<<<< + * codec_id = 'zstd' * * # Note: unlike the LZ4 and Blosc codecs, there does not appear to be a (currently) */ @@ -4133,7 +4133,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/zstd.pyx":212 * # enforce a max_buffer_size option here. * - * def __init__(self, level=DEFAULT_CLEVEL): # <<<<<<<<<<<<<< + * def __init__(self, level=DEFAULT_CLEVEL): * self.level = level * */ @@ -4152,7 +4152,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/zstd.pyx":215 * self.level = level * - * def encode(self, buf): # <<<<<<<<<<<<<< + * def encode(self, buf): * buf = ensure_contiguous_ndarray(buf) * return compress(buf, self.level) */ @@ -4164,7 +4164,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/zstd.pyx":219 * return compress(buf, self.level) * - * def decode(self, buf, out=None): # <<<<<<<<<<<<<< + * def decode(self, buf, out=None): * buf = ensure_contiguous_ndarray(buf) * return decompress(buf, out) */ @@ -4177,7 +4177,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/zstd.pyx":223 * return decompress(buf, out) * - * def __repr__(self): # <<<<<<<<<<<<<< + * def __repr__(self): * r = '%s(level=%r)' % \ * (type(self).__name__, */ @@ -4189,7 +4189,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/zstd.pyx":192 * * - * class Zstd(Codec): # <<<<<<<<<<<<<< + * class Zstd(Codec): * """Codec providing compression using Zstandard. * */ @@ -4202,7 +4202,7 @@ if (!__Pyx_RefNanny) { __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* "numcodecs/zstd.pyx":1 - * # -*- coding: utf-8 -*- # <<<<<<<<<<<<<< + * # -*- coding: utf-8 -*- * # cython: embedsignature=True * # cython: profile=False */ From 035f90d6dcbe6795a2d92c1394378e702d5d9f84 Mon Sep 17 00:00:00 2001 From: halehawk Date: Wed, 9 Jan 2019 16:24:35 -0700 Subject: [PATCH 05/69] added zfp source as a submodule --- .gitmodules | 3 +++ numcodecs/__init__.py | 1 - numcodecs/tests/__init__.py | 1 - 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.gitmodules b/.gitmodules index 04c71aa1..e014de12 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,6 @@ [submodule "c-blosc"] path = c-blosc url = https://github.com/Blosc/c-blosc.git +[submodule "zfp"] + path = zfp + url = https://github.com/LLNL/zfp.git diff --git a/numcodecs/__init__.py b/numcodecs/__init__.py index df792c6e..1af0b4c3 100644 --- a/numcodecs/__init__.py +++ b/numcodecs/__init__.py @@ -18,7 +18,6 @@ """ from __future__ import absolute_import, print_function, division -import os, sys; sys.path.append(os.path.dirname(os.path.realpath(__file__))) import multiprocessing import atexit diff --git a/numcodecs/tests/__init__.py b/numcodecs/tests/__init__.py index 83b77183..1ee762b2 100644 --- a/numcodecs/tests/__init__.py +++ b/numcodecs/tests/__init__.py @@ -1,3 +1,2 @@ # -*- coding: utf-8 -*- from __future__ import absolute_import, print_function, division -import os, sys; sys.path.append(os.path.dirname(os.path.realpath(__file__))) From 1adcf4be577ed5d6f5aea88645d9a4a5b6248135 Mon Sep 17 00:00:00 2001 From: halehawk Date: Wed, 9 Jan 2019 16:26:35 -0700 Subject: [PATCH 06/69] removed zfp source as a submodule --- .gitmodules | 3 --- 1 file changed, 3 deletions(-) diff --git a/.gitmodules b/.gitmodules index e014de12..04c71aa1 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +1,3 @@ [submodule "c-blosc"] path = c-blosc url = https://github.com/Blosc/c-blosc.git -[submodule "zfp"] - path = zfp - url = https://github.com/LLNL/zfp.git From a33e947be7d45e7d2fc3941790e64f1e8b019370 Mon Sep 17 00:00:00 2001 From: halehawk Date: Wed, 9 Jan 2019 16:28:30 -0700 Subject: [PATCH 07/69] added zfp module --- .gitmodules | 3 +++ zfp | 1 + 2 files changed, 4 insertions(+) create mode 160000 zfp diff --git a/.gitmodules b/.gitmodules index 04c71aa1..e014de12 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,6 @@ [submodule "c-blosc"] path = c-blosc url = https://github.com/Blosc/c-blosc.git +[submodule "zfp"] + path = zfp + url = https://github.com/LLNL/zfp.git diff --git a/zfp b/zfp new file mode 160000 index 00000000..25a554e0 --- /dev/null +++ b/zfp @@ -0,0 +1 @@ +Subproject commit 25a554e061a5323542f0e21fce2ee84e723ae774 From 6acb24dac806059392149a11188951df143be6c4 Mon Sep 17 00:00:00 2001 From: halehawk Date: Wed, 9 Jan 2019 16:54:26 -0700 Subject: [PATCH 08/69] added zfp docs --- docs/index.rst | 1 + docs/zfp.rst | 17 +++++++++++++++++ 2 files changed, 18 insertions(+) create mode 100644 docs/zfp.rst diff --git a/docs/index.rst b/docs/index.rst index 665bbd2f..1bfa8a7a 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -60,6 +60,7 @@ Contents registry blosc lz4 + zfp zstd zlib gzip diff --git a/docs/zfp.rst b/docs/zfp.rst new file mode 100644 index 00000000..670987dd --- /dev/null +++ b/docs/zfp.rst @@ -0,0 +1,17 @@ +Zfp +=== +.. automodule:: numcodecs.zfp + +.. autoclass:: Zfp + + .. autoattribute:: codec_id + .. automethod:: encode + .. automethod:: decode + .. automethod:: get_config + .. automethod:: from_config + +Helper functions +---------------- + +.. autofunction:: compress +.. autofunction:: decompress From 812441ac6f77e097be4dd528ee3ec8794046da02 Mon Sep 17 00:00:00 2001 From: halehawk Date: Wed, 9 Jan 2019 18:57:44 -0700 Subject: [PATCH 09/69] used zfp submodule and define type by _type --- numcodecs/zfp.pyx | 4 ++-- setup.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/numcodecs/zfp.pyx b/numcodecs/zfp.pyx index 9b326be5..d34aded4 100644 --- a/numcodecs/zfp.pyx +++ b/numcodecs/zfp.pyx @@ -61,10 +61,10 @@ cdef extern from "zfp.h": unsigned int maxprec int minexp bitstream* stream - zfp_execution _exec + zfp_execution _exec "exec" ctypedef struct zfp_field: - zfp_type _type + zfp_type _type "type" unsigned int nx,ny,nz,nw int sx,sy,sz,sw void* data diff --git a/setup.py b/setup.py index 2592e70f..b4dec577 100644 --- a/setup.py +++ b/setup.py @@ -214,8 +214,8 @@ def zfp_extension(): define_macros = [] # setup sources - use ZFP bundled in blosc - zfp_sources = glob('zfp*/src/*.c') - include_dirs = [d for d in glob('zfp*/*') if os.path.isdir(d)] + zfp_sources = glob('zfp/src/*.c') + include_dirs = [d for d in glob('zfp/*') if os.path.isdir(d)] include_dirs += ['numcodecs'] include_dirs += [numpy.get_include()] # define_macros += [('CYTHON_TRACE', '1')] From 5972e09f4268388e77430e7eef377cc9d909a29a Mon Sep 17 00:00:00 2001 From: halehawk Date: Thu, 10 Jan 2019 09:47:54 -0700 Subject: [PATCH 10/69] removed blanked lines --- numcodecs/tests/common.py | 1 - numcodecs/tests/test_zfp.py | 12 ++++-------- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/numcodecs/tests/common.py b/numcodecs/tests/common.py index ba061442..bf5471c3 100644 --- a/numcodecs/tests/common.py +++ b/numcodecs/tests/common.py @@ -203,7 +203,6 @@ def check_backwards_compatibility(codec_id, arrays, codecs, precision=None, pref # file with codec configuration information codec_fn = os.path.join(codec_dir, 'config.json') - # one time save config if not os.path.exists(codec_fn): # pragma: no cover with open(codec_fn, mode='w') as cf: diff --git a/numcodecs/tests/test_zfp.py b/numcodecs/tests/test_zfp.py index 36e5a77a..27c8adec 100644 --- a/numcodecs/tests/test_zfp.py +++ b/numcodecs/tests/test_zfp.py @@ -10,17 +10,15 @@ from numcodecs.tests.common import (check_encode_decode_array, check_config, check_repr, check_backwards_compatibility, check_err_decode_object_buffer, - check_err_encode_object_buffer, - check_max_buffer_size) + check_err_encode_object_buffer) codecs = [ Zfp(), - Zfp(mode='a',tol=0), - Zfp(mode='p',prec=64), - Zfp(mode='r',rate=60), + Zfp(mode='a',tol=0), + Zfp(mode='p',prec=64), + Zfp(mode='r',rate=60), Zfp(mode='c'), - ] @@ -62,5 +60,3 @@ def test_err_decode_object_buffer(): def test_err_encode_object_buffer(): check_err_encode_object_buffer(Zfp()) - - From 1a7c1051c335ea3b698f93c163450b2febbe6e4e Mon Sep 17 00:00:00 2001 From: halehawk Date: Thu, 10 Jan 2019 10:00:07 -0700 Subject: [PATCH 11/69] added white space after mode --- numcodecs/tests/test_zfp.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/numcodecs/tests/test_zfp.py b/numcodecs/tests/test_zfp.py index 27c8adec..b7f13efe 100644 --- a/numcodecs/tests/test_zfp.py +++ b/numcodecs/tests/test_zfp.py @@ -15,9 +15,9 @@ codecs = [ Zfp(), - Zfp(mode='a',tol=0), - Zfp(mode='p',prec=64), - Zfp(mode='r',rate=60), + Zfp(mode='a', tol=0), + Zfp(mode='p', prec=64), + Zfp(mode='r', rate=60), Zfp(mode='c'), ] From 161cbca12da41a11a4e32bbf52dd823faf8792e3 Mon Sep 17 00:00:00 2001 From: halehawk Date: Wed, 23 Jan 2019 11:57:36 -0700 Subject: [PATCH 12/69] modified comments to meet numpy docstring --- numcodecs/zfp.pyx | 51 ++++++++++++++++++++++++++++------------------- 1 file changed, 31 insertions(+), 20 deletions(-) diff --git a/numcodecs/zfp.pyx b/numcodecs/zfp.pyx index d34aded4..7de7010b 100644 --- a/numcodecs/zfp.pyx +++ b/numcodecs/zfp.pyx @@ -102,7 +102,7 @@ __version__ = VERSION_STRING def compress(input_array,method): - '''Compress data. + """Compress data. Parameters ---------- @@ -117,7 +117,7 @@ def compress(input_array,method): dest : bytes Compressed data - ''' + """ cdef zfp_stream* zfp cdef bitstream* stream cdef zfp_field* field @@ -216,7 +216,7 @@ def compress(input_array,method): return dest[:compressed_size] def decompress(source,dest=None): - '''Decompress data. + """Decompress data. Parameters ---------- @@ -230,7 +230,7 @@ def decompress(source,dest=None): dest : array-like Object containing decompressed data - ''' + """ cdef: zfp_stream* zfp bitstream* stream @@ -347,25 +347,36 @@ class CompressMethod: self.minexp=minexp class Zfp(Codec): - '''Codec providing compression using zfp via the Python standard library. + """Codec providing compression using zfp via the Python standard library. - Parameters + Attributes ---------- - mode : a - tolerance : float (absolue error tolerance), default 0.01 + mode(mode='a') + Fixed accuracy compression. + tol : float + Absolue error tolerance, default 0.0 - mode : p - precision : int (uncompressed bits per value), can be 0-64 for double precision - - mode : r - rate : int (compressed bits per floating-point value), can be 0-64 for double precision - - mode : c - minbits : int (min bits per 4^d values in d dimensions) - maxbits : int (max bits per 4^d values in d dimensions), 0 for unlimited - minexp : int (min bit plane : -1074 for all bit planes) - maxprec : int (max bits of precision per value), 0 for full - ''' + mode(mode='p') + Fixed precision compression. + prec : int + Uncompressed bits per value, can be 0-64 for double precision + + mode(mode='r') + Fixed rate compression. + rate : int + Compressed bits per floating-point value, can be 0-64 for double precision + + mode(mode='c') + Custom advanced compression. + minbits : int + Min bits per 4^d values in d dimensions + maxbits : int + Max bits per 4^d values in d dimensions, 0 for unlimited + minexp : int + Min bit plane, -1074 for all bit planes + maxprec : int + Max bits of precision per value, 0 for full + """ codec_id = 'zfp' def __init__(self, mode = 'a',tol = 0.0, prec = ZFP_MAX_PREC, rate = 0, minbits = ZFP_MIN_BITS, maxbits = ZFP_MAX_BITS, minexp = ZFP_MIN_EXP, maxprec = ZFP_MAX_PREC,the_method=None): From a1674da32a95a96636d03c7051f2e15b4321ea62 Mon Sep 17 00:00:00 2001 From: halehawk Date: Thu, 5 Mar 2020 13:25:07 -0700 Subject: [PATCH 13/69] format setup.py --- setup.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/setup.py b/setup.py index 2e32544a..89994552 100644 --- a/setup.py +++ b/setup.py @@ -210,6 +210,7 @@ def lz4_extension(): return extensions + def zfp_extension(): import numpy info('setting up ZFP extension') @@ -224,7 +225,7 @@ def zfp_extension(): include_dirs += [numpy.get_include()] # define_macros += [('CYTHON_TRACE', '1')] extra_compile_args += [ - '-std=c99', + '-std=c99', ] if have_cython: @@ -341,7 +342,7 @@ def build_extension(self, ext): def run_setup(with_extensions): if with_extensions: - ext_modules = (blosc_extension() + lz4_extension() + zstd_extension() + + ext_modules = (blosc_extension() + lz4_extension() + zstd_extension() + zfp_extension() + compat_extension() + vlen_extension()) cmdclass = dict(build_ext=ve_build_ext) else: From 27676f43b2d39ef6e6fc469f21b0f6c7345c476f Mon Sep 17 00:00:00 2001 From: halehawk Date: Thu, 5 Mar 2020 13:45:42 -0700 Subject: [PATCH 14/69] added zfp.c --- numcodecs/zfp.c | 10446 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 10446 insertions(+) create mode 100644 numcodecs/zfp.c diff --git a/numcodecs/zfp.c b/numcodecs/zfp.c new file mode 100644 index 00000000..743391d6 --- /dev/null +++ b/numcodecs/zfp.c @@ -0,0 +1,10446 @@ +/* Generated by Cython 0.29.10 */ + +/* BEGIN: Cython Metadata +{ + "distutils": { + "depends": [ + "zfp/include/bitstream.h", + "zfp/include/zfp.h" + ], + "extra_compile_args": [ + "-msse2", + "-mavx2", + "-std=c99" + ], + "include_dirs": [ + "zfp/fortran", + "zfp/include", + "zfp/tests", + "zfp/bin", + "zfp/array", + "zfp/python", + "zfp/utils", + "zfp/cmake", + "zfp/lib", + "zfp/cfp", + "zfp/examples", + "zfp/CMakeFiles", + "zfp/src", + "numcodecs", + "/glade/u/apps/ch/opt/python/2.7.16/gnu/8.3.0/pkg-library/20190627/lib/python2.7/site-packages/numpy/core/include" + ], + "name": "numcodecs.zfp", + "sources": [ + "numcodecs/zfp.pyx", + "zfp/src/decode3l.c", + "zfp/src/encode4l.c", + "zfp/src/encode1d.c", + "zfp/src/decode4d.c", + "zfp/src/encode1i.c", + "zfp/src/encode2f.c", + "zfp/src/decode4l.c", + "zfp/src/encode3l.c", + "zfp/src/encode3f.c", + "zfp/src/decode2i.c", + "zfp/src/decode2d.c", + "zfp/src/decode3f.c", + "zfp/src/decode1d.c", + "zfp/src/encode1f.c", + "zfp/src/encode2l.c", + "zfp/src/encode2i.c", + "zfp/src/encode4f.c", + "zfp/src/decode2l.c", + "zfp/src/decode4i.c", + "zfp/src/encode4i.c", + "zfp/src/encode3d.c", + "zfp/src/decode1l.c", + "zfp/src/decode3d.c", + "zfp/src/encode4d.c", + "zfp/src/encode3i.c", + "zfp/src/decode3i.c", + "zfp/src/zfp.c", + "zfp/src/encode2d.c", + "zfp/src/decode1i.c", + "zfp/src/decode2f.c", + "zfp/src/decode1f.c", + "zfp/src/encode1l.c", + "zfp/src/decode4f.c", + "zfp/src/bitstream.c" + ] + }, + "module_name": "numcodecs.zfp" +} +END: Cython Metadata */ + +#define PY_SSIZE_T_CLEAN +#include "Python.h" +#ifndef Py_PYTHON_H + #error Python headers needed to compile C extensions, please install development version of Python. +#elif PY_VERSION_HEX < 0x02060000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03030000) + #error Cython requires Python 2.6+ or Python 3.3+. +#else +#define CYTHON_ABI "0_29_10" +#define CYTHON_HEX_VERSION 0x001D0AF0 +#define CYTHON_FUTURE_DIVISION 1 +#include +#ifndef offsetof + #define offsetof(type, member) ( (size_t) & ((type*)0) -> member ) +#endif +#if !defined(WIN32) && !defined(MS_WINDOWS) + #ifndef __stdcall + #define __stdcall + #endif + #ifndef __cdecl + #define __cdecl + #endif + #ifndef __fastcall + #define __fastcall + #endif +#endif +#ifndef DL_IMPORT + #define DL_IMPORT(t) t +#endif +#ifndef DL_EXPORT + #define DL_EXPORT(t) t +#endif +#define __PYX_COMMA , +#ifndef HAVE_LONG_LONG + #if PY_VERSION_HEX >= 0x02070000 + #define HAVE_LONG_LONG + #endif +#endif +#ifndef PY_LONG_LONG + #define PY_LONG_LONG LONG_LONG +#endif +#ifndef Py_HUGE_VAL + #define Py_HUGE_VAL HUGE_VAL +#endif +#ifdef PYPY_VERSION + #define CYTHON_COMPILING_IN_PYPY 1 + #define CYTHON_COMPILING_IN_PYSTON 0 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #undef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 0 + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #if PY_VERSION_HEX < 0x03050000 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #elif !defined(CYTHON_USE_ASYNC_SLOTS) + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #undef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 0 + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #undef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 1 + #undef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 0 + #undef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 0 + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 0 + #undef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 0 + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 +#elif defined(PYSTON_VERSION) + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_PYSTON 1 + #define CYTHON_COMPILING_IN_CPYTHON 0 + #ifndef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 1 + #endif + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #undef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 0 + #ifndef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 1 + #endif + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #ifndef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 0 + #endif + #ifndef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 1 + #endif + #ifndef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 1 + #endif + #undef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 0 + #undef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 0 + #undef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT 0 + #undef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE 0 + #undef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS 0 + #undef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK 0 +#else + #define CYTHON_COMPILING_IN_PYPY 0 + #define CYTHON_COMPILING_IN_PYSTON 0 + #define CYTHON_COMPILING_IN_CPYTHON 1 + #ifndef CYTHON_USE_TYPE_SLOTS + #define CYTHON_USE_TYPE_SLOTS 1 + #endif + #if PY_VERSION_HEX < 0x02070000 + #undef CYTHON_USE_PYTYPE_LOOKUP + #define CYTHON_USE_PYTYPE_LOOKUP 0 + #elif !defined(CYTHON_USE_PYTYPE_LOOKUP) + #define CYTHON_USE_PYTYPE_LOOKUP 1 + #endif + #if PY_MAJOR_VERSION < 3 + #undef CYTHON_USE_ASYNC_SLOTS + #define CYTHON_USE_ASYNC_SLOTS 0 + #elif !defined(CYTHON_USE_ASYNC_SLOTS) + #define CYTHON_USE_ASYNC_SLOTS 1 + #endif + #if PY_VERSION_HEX < 0x02070000 + #undef CYTHON_USE_PYLONG_INTERNALS + #define CYTHON_USE_PYLONG_INTERNALS 0 + #elif !defined(CYTHON_USE_PYLONG_INTERNALS) + #define CYTHON_USE_PYLONG_INTERNALS 1 + #endif + #ifndef CYTHON_USE_PYLIST_INTERNALS + #define CYTHON_USE_PYLIST_INTERNALS 1 + #endif + #ifndef CYTHON_USE_UNICODE_INTERNALS + #define CYTHON_USE_UNICODE_INTERNALS 1 + #endif + #if PY_VERSION_HEX < 0x030300F0 + #undef CYTHON_USE_UNICODE_WRITER + #define CYTHON_USE_UNICODE_WRITER 0 + #elif !defined(CYTHON_USE_UNICODE_WRITER) + #define CYTHON_USE_UNICODE_WRITER 1 + #endif + #ifndef CYTHON_AVOID_BORROWED_REFS + #define CYTHON_AVOID_BORROWED_REFS 0 + #endif + #ifndef CYTHON_ASSUME_SAFE_MACROS + #define CYTHON_ASSUME_SAFE_MACROS 1 + #endif + #ifndef CYTHON_UNPACK_METHODS + #define CYTHON_UNPACK_METHODS 1 + #endif + #ifndef CYTHON_FAST_THREAD_STATE + #define CYTHON_FAST_THREAD_STATE 1 + #endif + #ifndef CYTHON_FAST_PYCALL + #define CYTHON_FAST_PYCALL 1 + #endif + #ifndef CYTHON_PEP489_MULTI_PHASE_INIT + #define CYTHON_PEP489_MULTI_PHASE_INIT (PY_VERSION_HEX >= 0x03050000) + #endif + #ifndef CYTHON_USE_TP_FINALIZE + #define CYTHON_USE_TP_FINALIZE (PY_VERSION_HEX >= 0x030400a1) + #endif + #ifndef CYTHON_USE_DICT_VERSIONS + #define CYTHON_USE_DICT_VERSIONS (PY_VERSION_HEX >= 0x030600B1) + #endif + #ifndef CYTHON_USE_EXC_INFO_STACK + #define CYTHON_USE_EXC_INFO_STACK (PY_VERSION_HEX >= 0x030700A3) + #endif +#endif +#if !defined(CYTHON_FAST_PYCCALL) +#define CYTHON_FAST_PYCCALL (CYTHON_FAST_PYCALL && PY_VERSION_HEX >= 0x030600B1) +#endif +#if CYTHON_USE_PYLONG_INTERNALS + #include "longintrepr.h" + #undef SHIFT + #undef BASE + #undef MASK + #ifdef SIZEOF_VOID_P + enum { __pyx_check_sizeof_voidp = 1 / (int)(SIZEOF_VOID_P == sizeof(void*)) }; + #endif +#endif +#ifndef __has_attribute + #define __has_attribute(x) 0 +#endif +#ifndef __has_cpp_attribute + #define __has_cpp_attribute(x) 0 +#endif +#ifndef CYTHON_RESTRICT + #if defined(__GNUC__) + #define CYTHON_RESTRICT __restrict__ + #elif defined(_MSC_VER) && _MSC_VER >= 1400 + #define CYTHON_RESTRICT __restrict + #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define CYTHON_RESTRICT restrict + #else + #define CYTHON_RESTRICT + #endif +#endif +#ifndef CYTHON_UNUSED +# if defined(__GNUC__) +# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) +# define CYTHON_UNUSED __attribute__ ((__unused__)) +# else +# define CYTHON_UNUSED +# endif +# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER)) +# define CYTHON_UNUSED __attribute__ ((__unused__)) +# else +# define CYTHON_UNUSED +# endif +#endif +#ifndef CYTHON_MAYBE_UNUSED_VAR +# if defined(__cplusplus) + template void CYTHON_MAYBE_UNUSED_VAR( const T& ) { } +# else +# define CYTHON_MAYBE_UNUSED_VAR(x) (void)(x) +# endif +#endif +#ifndef CYTHON_NCP_UNUSED +# if CYTHON_COMPILING_IN_CPYTHON +# define CYTHON_NCP_UNUSED +# else +# define CYTHON_NCP_UNUSED CYTHON_UNUSED +# endif +#endif +#define __Pyx_void_to_None(void_result) ((void)(void_result), Py_INCREF(Py_None), Py_None) +#ifdef _MSC_VER + #ifndef _MSC_STDINT_H_ + #if _MSC_VER < 1300 + typedef unsigned char uint8_t; + typedef unsigned int uint32_t; + #else + typedef unsigned __int8 uint8_t; + typedef unsigned __int32 uint32_t; + #endif + #endif +#else + #include +#endif +#ifndef CYTHON_FALLTHROUGH + #if defined(__cplusplus) && __cplusplus >= 201103L + #if __has_cpp_attribute(fallthrough) + #define CYTHON_FALLTHROUGH [[fallthrough]] + #elif __has_cpp_attribute(clang::fallthrough) + #define CYTHON_FALLTHROUGH [[clang::fallthrough]] + #elif __has_cpp_attribute(gnu::fallthrough) + #define CYTHON_FALLTHROUGH [[gnu::fallthrough]] + #endif + #endif + #ifndef CYTHON_FALLTHROUGH + #if __has_attribute(fallthrough) + #define CYTHON_FALLTHROUGH __attribute__((fallthrough)) + #else + #define CYTHON_FALLTHROUGH + #endif + #endif + #if defined(__clang__ ) && defined(__apple_build_version__) + #if __apple_build_version__ < 7000000 + #undef CYTHON_FALLTHROUGH + #define CYTHON_FALLTHROUGH + #endif + #endif +#endif + +#ifndef CYTHON_INLINE + #if defined(__clang__) + #define CYTHON_INLINE __inline__ __attribute__ ((__unused__)) + #elif defined(__GNUC__) + #define CYTHON_INLINE __inline__ + #elif defined(_MSC_VER) + #define CYTHON_INLINE __inline + #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define CYTHON_INLINE inline + #else + #define CYTHON_INLINE + #endif +#endif + +#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x02070600 && !defined(Py_OptimizeFlag) + #define Py_OptimizeFlag 0 +#endif +#define __PYX_BUILD_PY_SSIZE_T "n" +#define CYTHON_FORMAT_SSIZE_T "z" +#if PY_MAJOR_VERSION < 3 + #define __Pyx_BUILTIN_MODULE_NAME "__builtin__" + #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) + #define __Pyx_DefaultClassType PyClass_Type +#else + #define __Pyx_BUILTIN_MODULE_NAME "builtins" +#if PY_VERSION_HEX < 0x030800A4 + #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) +#else + #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ + PyCode_New(a, 0, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) +#endif + #define __Pyx_DefaultClassType PyType_Type +#endif +#ifndef Py_TPFLAGS_CHECKTYPES + #define Py_TPFLAGS_CHECKTYPES 0 +#endif +#ifndef Py_TPFLAGS_HAVE_INDEX + #define Py_TPFLAGS_HAVE_INDEX 0 +#endif +#ifndef Py_TPFLAGS_HAVE_NEWBUFFER + #define Py_TPFLAGS_HAVE_NEWBUFFER 0 +#endif +#ifndef Py_TPFLAGS_HAVE_FINALIZE + #define Py_TPFLAGS_HAVE_FINALIZE 0 +#endif +#ifndef METH_STACKLESS + #define METH_STACKLESS 0 +#endif +#if PY_VERSION_HEX <= 0x030700A3 || !defined(METH_FASTCALL) + #ifndef METH_FASTCALL + #define METH_FASTCALL 0x80 + #endif + typedef PyObject *(*__Pyx_PyCFunctionFast) (PyObject *self, PyObject *const *args, Py_ssize_t nargs); + typedef PyObject *(*__Pyx_PyCFunctionFastWithKeywords) (PyObject *self, PyObject *const *args, + Py_ssize_t nargs, PyObject *kwnames); +#else + #define __Pyx_PyCFunctionFast _PyCFunctionFast + #define __Pyx_PyCFunctionFastWithKeywords _PyCFunctionFastWithKeywords +#endif +#if CYTHON_FAST_PYCCALL +#define __Pyx_PyFastCFunction_Check(func)\ + ((PyCFunction_Check(func) && (METH_FASTCALL == (PyCFunction_GET_FLAGS(func) & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_KEYWORDS | METH_STACKLESS))))) +#else +#define __Pyx_PyFastCFunction_Check(func) 0 +#endif +#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Malloc) + #define PyObject_Malloc(s) PyMem_Malloc(s) + #define PyObject_Free(p) PyMem_Free(p) + #define PyObject_Realloc(p) PyMem_Realloc(p) +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030400A1 + #define PyMem_RawMalloc(n) PyMem_Malloc(n) + #define PyMem_RawRealloc(p, n) PyMem_Realloc(p, n) + #define PyMem_RawFree(p) PyMem_Free(p) +#endif +#if CYTHON_COMPILING_IN_PYSTON + #define __Pyx_PyCode_HasFreeVars(co) PyCode_HasFreeVars(co) + #define __Pyx_PyFrame_SetLineNumber(frame, lineno) PyFrame_SetLineNumber(frame, lineno) +#else + #define __Pyx_PyCode_HasFreeVars(co) (PyCode_GetNumFree(co) > 0) + #define __Pyx_PyFrame_SetLineNumber(frame, lineno) (frame)->f_lineno = (lineno) +#endif +#if !CYTHON_FAST_THREAD_STATE || PY_VERSION_HEX < 0x02070000 + #define __Pyx_PyThreadState_Current PyThreadState_GET() +#elif PY_VERSION_HEX >= 0x03060000 + #define __Pyx_PyThreadState_Current _PyThreadState_UncheckedGet() +#elif PY_VERSION_HEX >= 0x03000000 + #define __Pyx_PyThreadState_Current PyThreadState_GET() +#else + #define __Pyx_PyThreadState_Current _PyThreadState_Current +#endif +#if PY_VERSION_HEX < 0x030700A2 && !defined(PyThread_tss_create) && !defined(Py_tss_NEEDS_INIT) +#include "pythread.h" +#define Py_tss_NEEDS_INIT 0 +typedef int Py_tss_t; +static CYTHON_INLINE int PyThread_tss_create(Py_tss_t *key) { + *key = PyThread_create_key(); + return 0; +} +static CYTHON_INLINE Py_tss_t * PyThread_tss_alloc(void) { + Py_tss_t *key = (Py_tss_t *)PyObject_Malloc(sizeof(Py_tss_t)); + *key = Py_tss_NEEDS_INIT; + return key; +} +static CYTHON_INLINE void PyThread_tss_free(Py_tss_t *key) { + PyObject_Free(key); +} +static CYTHON_INLINE int PyThread_tss_is_created(Py_tss_t *key) { + return *key != Py_tss_NEEDS_INIT; +} +static CYTHON_INLINE void PyThread_tss_delete(Py_tss_t *key) { + PyThread_delete_key(*key); + *key = Py_tss_NEEDS_INIT; +} +static CYTHON_INLINE int PyThread_tss_set(Py_tss_t *key, void *value) { + return PyThread_set_key_value(*key, value); +} +static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) { + return PyThread_get_key_value(*key); +} +#endif +#if CYTHON_COMPILING_IN_CPYTHON || defined(_PyDict_NewPresized) +#define __Pyx_PyDict_NewPresized(n) ((n <= 8) ? PyDict_New() : _PyDict_NewPresized(n)) +#else +#define __Pyx_PyDict_NewPresized(n) PyDict_New() +#endif +#if PY_MAJOR_VERSION >= 3 || CYTHON_FUTURE_DIVISION + #define __Pyx_PyNumber_Divide(x,y) PyNumber_TrueDivide(x,y) + #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceTrueDivide(x,y) +#else + #define __Pyx_PyNumber_Divide(x,y) PyNumber_Divide(x,y) + #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceDivide(x,y) +#endif +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 && CYTHON_USE_UNICODE_INTERNALS +#define __Pyx_PyDict_GetItemStr(dict, name) _PyDict_GetItem_KnownHash(dict, name, ((PyASCIIObject *) name)->hash) +#else +#define __Pyx_PyDict_GetItemStr(dict, name) PyDict_GetItem(dict, name) +#endif +#if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND) + #define CYTHON_PEP393_ENABLED 1 + #define __Pyx_PyUnicode_READY(op) (likely(PyUnicode_IS_READY(op)) ?\ + 0 : _PyUnicode_Ready((PyObject *)(op))) + #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_LENGTH(u) + #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i) + #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) PyUnicode_MAX_CHAR_VALUE(u) + #define __Pyx_PyUnicode_KIND(u) PyUnicode_KIND(u) + #define __Pyx_PyUnicode_DATA(u) PyUnicode_DATA(u) + #define __Pyx_PyUnicode_READ(k, d, i) PyUnicode_READ(k, d, i) + #define __Pyx_PyUnicode_WRITE(k, d, i, ch) PyUnicode_WRITE(k, d, i, ch) + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : PyUnicode_GET_SIZE(u))) +#else + #define CYTHON_PEP393_ENABLED 0 + #define PyUnicode_1BYTE_KIND 1 + #define PyUnicode_2BYTE_KIND 2 + #define PyUnicode_4BYTE_KIND 4 + #define __Pyx_PyUnicode_READY(op) (0) + #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_SIZE(u) + #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i])) + #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) ((sizeof(Py_UNICODE) == 2) ? 65535 : 1114111) + #define __Pyx_PyUnicode_KIND(u) (sizeof(Py_UNICODE)) + #define __Pyx_PyUnicode_DATA(u) ((void*)PyUnicode_AS_UNICODE(u)) + #define __Pyx_PyUnicode_READ(k, d, i) ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i])) + #define __Pyx_PyUnicode_WRITE(k, d, i, ch) (((void)(k)), ((Py_UNICODE*)d)[i] = ch) + #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_SIZE(u)) +#endif +#if CYTHON_COMPILING_IN_PYPY + #define __Pyx_PyUnicode_Concat(a, b) PyNumber_Add(a, b) + #define __Pyx_PyUnicode_ConcatSafe(a, b) PyNumber_Add(a, b) +#else + #define __Pyx_PyUnicode_Concat(a, b) PyUnicode_Concat(a, b) + #define __Pyx_PyUnicode_ConcatSafe(a, b) ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ?\ + PyNumber_Add(a, b) : __Pyx_PyUnicode_Concat(a, b)) +#endif +#if CYTHON_COMPILING_IN_PYPY && !defined(PyUnicode_Contains) + #define PyUnicode_Contains(u, s) PySequence_Contains(u, s) +#endif +#if CYTHON_COMPILING_IN_PYPY && !defined(PyByteArray_Check) + #define PyByteArray_Check(obj) PyObject_TypeCheck(obj, &PyByteArray_Type) +#endif +#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Format) + #define PyObject_Format(obj, fmt) PyObject_CallMethod(obj, "__format__", "O", fmt) +#endif +#define __Pyx_PyString_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyString_Check(b) && !PyString_CheckExact(b)))) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b)) +#define __Pyx_PyUnicode_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyUnicode_Check(b) && !PyUnicode_CheckExact(b)))) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b)) +#if PY_MAJOR_VERSION >= 3 + #define __Pyx_PyString_Format(a, b) PyUnicode_Format(a, b) +#else + #define __Pyx_PyString_Format(a, b) PyString_Format(a, b) +#endif +#if PY_MAJOR_VERSION < 3 && !defined(PyObject_ASCII) + #define PyObject_ASCII(o) PyObject_Repr(o) +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyBaseString_Type PyUnicode_Type + #define PyStringObject PyUnicodeObject + #define PyString_Type PyUnicode_Type + #define PyString_Check PyUnicode_Check + #define PyString_CheckExact PyUnicode_CheckExact + #define PyObject_Unicode PyObject_Str +#endif +#if PY_MAJOR_VERSION >= 3 + #define __Pyx_PyBaseString_Check(obj) PyUnicode_Check(obj) + #define __Pyx_PyBaseString_CheckExact(obj) PyUnicode_CheckExact(obj) +#else + #define __Pyx_PyBaseString_Check(obj) (PyString_Check(obj) || PyUnicode_Check(obj)) + #define __Pyx_PyBaseString_CheckExact(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj)) +#endif +#ifndef PySet_CheckExact + #define PySet_CheckExact(obj) (Py_TYPE(obj) == &PySet_Type) +#endif +#if CYTHON_ASSUME_SAFE_MACROS + #define __Pyx_PySequence_SIZE(seq) Py_SIZE(seq) +#else + #define __Pyx_PySequence_SIZE(seq) PySequence_Size(seq) +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyIntObject PyLongObject + #define PyInt_Type PyLong_Type + #define PyInt_Check(op) PyLong_Check(op) + #define PyInt_CheckExact(op) PyLong_CheckExact(op) + #define PyInt_FromString PyLong_FromString + #define PyInt_FromUnicode PyLong_FromUnicode + #define PyInt_FromLong PyLong_FromLong + #define PyInt_FromSize_t PyLong_FromSize_t + #define PyInt_FromSsize_t PyLong_FromSsize_t + #define PyInt_AsLong PyLong_AsLong + #define PyInt_AS_LONG PyLong_AS_LONG + #define PyInt_AsSsize_t PyLong_AsSsize_t + #define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask + #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask + #define PyNumber_Int PyNumber_Long +#endif +#if PY_MAJOR_VERSION >= 3 + #define PyBoolObject PyLongObject +#endif +#if PY_MAJOR_VERSION >= 3 && CYTHON_COMPILING_IN_PYPY + #ifndef PyUnicode_InternFromString + #define PyUnicode_InternFromString(s) PyUnicode_FromString(s) + #endif +#endif +#if PY_VERSION_HEX < 0x030200A4 + typedef long Py_hash_t; + #define __Pyx_PyInt_FromHash_t PyInt_FromLong + #define __Pyx_PyInt_AsHash_t PyInt_AsLong +#else + #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t + #define __Pyx_PyInt_AsHash_t PyInt_AsSsize_t +#endif +#if PY_MAJOR_VERSION >= 3 + #define __Pyx_PyMethod_New(func, self, klass) ((self) ? PyMethod_New(func, self) : (Py_INCREF(func), func)) +#else + #define __Pyx_PyMethod_New(func, self, klass) PyMethod_New(func, self, klass) +#endif +#if CYTHON_USE_ASYNC_SLOTS + #if PY_VERSION_HEX >= 0x030500B1 + #define __Pyx_PyAsyncMethodsStruct PyAsyncMethods + #define __Pyx_PyType_AsAsync(obj) (Py_TYPE(obj)->tp_as_async) + #else + #define __Pyx_PyType_AsAsync(obj) ((__Pyx_PyAsyncMethodsStruct*) (Py_TYPE(obj)->tp_reserved)) + #endif +#else + #define __Pyx_PyType_AsAsync(obj) NULL +#endif +#ifndef __Pyx_PyAsyncMethodsStruct + typedef struct { + unaryfunc am_await; + unaryfunc am_aiter; + unaryfunc am_anext; + } __Pyx_PyAsyncMethodsStruct; +#endif + +#if defined(WIN32) || defined(MS_WINDOWS) + #define _USE_MATH_DEFINES +#endif +#include +#ifdef NAN +#define __PYX_NAN() ((float) NAN) +#else +static CYTHON_INLINE float __PYX_NAN() { + float value; + memset(&value, 0xFF, sizeof(value)); + return value; +} +#endif +#if defined(__CYGWIN__) && defined(_LDBL_EQ_DBL) +#define __Pyx_truncl trunc +#else +#define __Pyx_truncl truncl +#endif + + +#define __PYX_ERR(f_index, lineno, Ln_error) \ +{ \ + __pyx_filename = __pyx_f[f_index]; __pyx_lineno = lineno; __pyx_clineno = __LINE__; goto Ln_error; \ +} + +#ifndef __PYX_EXTERN_C + #ifdef __cplusplus + #define __PYX_EXTERN_C extern "C" + #else + #define __PYX_EXTERN_C extern + #endif +#endif + +#define __PYX_HAVE__numcodecs__zfp +#define __PYX_HAVE_API__numcodecs__zfp +/* Early includes */ +#include +#include +#include "bitstream.h" +#include "zfp.h" +#ifdef _OPENMP +#include +#endif /* _OPENMP */ + +#if defined(PYREX_WITHOUT_ASSERTIONS) && !defined(CYTHON_WITHOUT_ASSERTIONS) +#define CYTHON_WITHOUT_ASSERTIONS +#endif + +typedef struct {PyObject **p; const char *s; const Py_ssize_t n; const char* encoding; + const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; + +#define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII 0 +#define __PYX_DEFAULT_STRING_ENCODING_IS_UTF8 0 +#define __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT (PY_MAJOR_VERSION >= 3 && __PYX_DEFAULT_STRING_ENCODING_IS_UTF8) +#define __PYX_DEFAULT_STRING_ENCODING "" +#define __Pyx_PyObject_FromString __Pyx_PyBytes_FromString +#define __Pyx_PyObject_FromStringAndSize __Pyx_PyBytes_FromStringAndSize +#define __Pyx_uchar_cast(c) ((unsigned char)c) +#define __Pyx_long_cast(x) ((long)x) +#define __Pyx_fits_Py_ssize_t(v, type, is_signed) (\ + (sizeof(type) < sizeof(Py_ssize_t)) ||\ + (sizeof(type) > sizeof(Py_ssize_t) &&\ + likely(v < (type)PY_SSIZE_T_MAX ||\ + v == (type)PY_SSIZE_T_MAX) &&\ + (!is_signed || likely(v > (type)PY_SSIZE_T_MIN ||\ + v == (type)PY_SSIZE_T_MIN))) ||\ + (sizeof(type) == sizeof(Py_ssize_t) &&\ + (is_signed || likely(v < (type)PY_SSIZE_T_MAX ||\ + v == (type)PY_SSIZE_T_MAX))) ) +static CYTHON_INLINE int __Pyx_is_valid_index(Py_ssize_t i, Py_ssize_t limit) { + return (size_t) i < (size_t) limit; +} +#if defined (__cplusplus) && __cplusplus >= 201103L + #include + #define __Pyx_sst_abs(value) std::abs(value) +#elif SIZEOF_INT >= SIZEOF_SIZE_T + #define __Pyx_sst_abs(value) abs(value) +#elif SIZEOF_LONG >= SIZEOF_SIZE_T + #define __Pyx_sst_abs(value) labs(value) +#elif defined (_MSC_VER) + #define __Pyx_sst_abs(value) ((Py_ssize_t)_abs64(value)) +#elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L + #define __Pyx_sst_abs(value) llabs(value) +#elif defined (__GNUC__) + #define __Pyx_sst_abs(value) __builtin_llabs(value) +#else + #define __Pyx_sst_abs(value) ((value<0) ? -value : value) +#endif +static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject*); +static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length); +#define __Pyx_PyByteArray_FromString(s) PyByteArray_FromStringAndSize((const char*)s, strlen((const char*)s)) +#define __Pyx_PyByteArray_FromStringAndSize(s, l) PyByteArray_FromStringAndSize((const char*)s, l) +#define __Pyx_PyBytes_FromString PyBytes_FromString +#define __Pyx_PyBytes_FromStringAndSize PyBytes_FromStringAndSize +static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char*); +#if PY_MAJOR_VERSION < 3 + #define __Pyx_PyStr_FromString __Pyx_PyBytes_FromString + #define __Pyx_PyStr_FromStringAndSize __Pyx_PyBytes_FromStringAndSize +#else + #define __Pyx_PyStr_FromString __Pyx_PyUnicode_FromString + #define __Pyx_PyStr_FromStringAndSize __Pyx_PyUnicode_FromStringAndSize +#endif +#define __Pyx_PyBytes_AsWritableString(s) ((char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsWritableSString(s) ((signed char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsWritableUString(s) ((unsigned char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsString(s) ((const char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsSString(s) ((const signed char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyBytes_AsUString(s) ((const unsigned char*) PyBytes_AS_STRING(s)) +#define __Pyx_PyObject_AsWritableString(s) ((char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsWritableSString(s) ((signed char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsWritableUString(s) ((unsigned char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsSString(s) ((const signed char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_AsUString(s) ((const unsigned char*) __Pyx_PyObject_AsString(s)) +#define __Pyx_PyObject_FromCString(s) __Pyx_PyObject_FromString((const char*)s) +#define __Pyx_PyBytes_FromCString(s) __Pyx_PyBytes_FromString((const char*)s) +#define __Pyx_PyByteArray_FromCString(s) __Pyx_PyByteArray_FromString((const char*)s) +#define __Pyx_PyStr_FromCString(s) __Pyx_PyStr_FromString((const char*)s) +#define __Pyx_PyUnicode_FromCString(s) __Pyx_PyUnicode_FromString((const char*)s) +static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const Py_UNICODE *u) { + const Py_UNICODE *u_end = u; + while (*u_end++) ; + return (size_t)(u_end - u - 1); +} +#define __Pyx_PyUnicode_FromUnicode(u) PyUnicode_FromUnicode(u, __Pyx_Py_UNICODE_strlen(u)) +#define __Pyx_PyUnicode_FromUnicodeAndLength PyUnicode_FromUnicode +#define __Pyx_PyUnicode_AsUnicode PyUnicode_AsUnicode +#define __Pyx_NewRef(obj) (Py_INCREF(obj), obj) +#define __Pyx_Owned_Py_None(b) __Pyx_NewRef(Py_None) +static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b); +static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*); +static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject*); +static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x); +#define __Pyx_PySequence_Tuple(obj)\ + (likely(PyTuple_CheckExact(obj)) ? __Pyx_NewRef(obj) : PySequence_Tuple(obj)) +static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*); +static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t); +#if CYTHON_ASSUME_SAFE_MACROS +#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x)) +#else +#define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x) +#endif +#define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x)) +#if PY_MAJOR_VERSION >= 3 +#define __Pyx_PyNumber_Int(x) (PyLong_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Long(x)) +#else +#define __Pyx_PyNumber_Int(x) (PyInt_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Int(x)) +#endif +#define __Pyx_PyNumber_Float(x) (PyFloat_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Float(x)) +#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII +static int __Pyx_sys_getdefaultencoding_not_ascii; +static int __Pyx_init_sys_getdefaultencoding_params(void) { + PyObject* sys; + PyObject* default_encoding = NULL; + PyObject* ascii_chars_u = NULL; + PyObject* ascii_chars_b = NULL; + const char* default_encoding_c; + sys = PyImport_ImportModule("sys"); + if (!sys) goto bad; + default_encoding = PyObject_CallMethod(sys, (char*) "getdefaultencoding", NULL); + Py_DECREF(sys); + if (!default_encoding) goto bad; + default_encoding_c = PyBytes_AsString(default_encoding); + if (!default_encoding_c) goto bad; + if (strcmp(default_encoding_c, "ascii") == 0) { + __Pyx_sys_getdefaultencoding_not_ascii = 0; + } else { + char ascii_chars[128]; + int c; + for (c = 0; c < 128; c++) { + ascii_chars[c] = c; + } + __Pyx_sys_getdefaultencoding_not_ascii = 1; + ascii_chars_u = PyUnicode_DecodeASCII(ascii_chars, 128, NULL); + if (!ascii_chars_u) goto bad; + ascii_chars_b = PyUnicode_AsEncodedString(ascii_chars_u, default_encoding_c, NULL); + if (!ascii_chars_b || !PyBytes_Check(ascii_chars_b) || memcmp(ascii_chars, PyBytes_AS_STRING(ascii_chars_b), 128) != 0) { + PyErr_Format( + PyExc_ValueError, + "This module compiled with c_string_encoding=ascii, but default encoding '%.200s' is not a superset of ascii.", + default_encoding_c); + goto bad; + } + Py_DECREF(ascii_chars_u); + Py_DECREF(ascii_chars_b); + } + Py_DECREF(default_encoding); + return 0; +bad: + Py_XDECREF(default_encoding); + Py_XDECREF(ascii_chars_u); + Py_XDECREF(ascii_chars_b); + return -1; +} +#endif +#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT && PY_MAJOR_VERSION >= 3 +#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_DecodeUTF8(c_str, size, NULL) +#else +#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_Decode(c_str, size, __PYX_DEFAULT_STRING_ENCODING, NULL) +#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT +static char* __PYX_DEFAULT_STRING_ENCODING; +static int __Pyx_init_sys_getdefaultencoding_params(void) { + PyObject* sys; + PyObject* default_encoding = NULL; + char* default_encoding_c; + sys = PyImport_ImportModule("sys"); + if (!sys) goto bad; + default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL); + Py_DECREF(sys); + if (!default_encoding) goto bad; + default_encoding_c = PyBytes_AsString(default_encoding); + if (!default_encoding_c) goto bad; + __PYX_DEFAULT_STRING_ENCODING = (char*) malloc(strlen(default_encoding_c) + 1); + if (!__PYX_DEFAULT_STRING_ENCODING) goto bad; + strcpy(__PYX_DEFAULT_STRING_ENCODING, default_encoding_c); + Py_DECREF(default_encoding); + return 0; +bad: + Py_XDECREF(default_encoding); + return -1; +} +#endif +#endif + + +/* Test for GCC > 2.95 */ +#if defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))) + #define likely(x) __builtin_expect(!!(x), 1) + #define unlikely(x) __builtin_expect(!!(x), 0) +#else /* !__GNUC__ or GCC < 2.95 */ + #define likely(x) (x) + #define unlikely(x) (x) +#endif /* __GNUC__ */ +static CYTHON_INLINE void __Pyx_pretend_to_initialize(void* ptr) { (void)ptr; } + +static PyObject *__pyx_m = NULL; +static PyObject *__pyx_d; +static PyObject *__pyx_b; +static PyObject *__pyx_cython_runtime = NULL; +static PyObject *__pyx_empty_tuple; +static PyObject *__pyx_empty_bytes; +static PyObject *__pyx_empty_unicode; +static int __pyx_lineno; +static int __pyx_clineno = 0; +static const char * __pyx_cfilenm= __FILE__; +static const char *__pyx_filename; + + +static const char *__pyx_f[] = { + "numcodecs/zfp.pyx", + "type.pxd", + "numcodecs/compat_ext.pxd", +}; + +/*--- Type declarations ---*/ +struct __pyx_obj_9numcodecs_10compat_ext_Buffer; +struct __pyx_defaults; +typedef struct __pyx_defaults __pyx_defaults; +struct __pyx_defaults { + PyObject *__pyx_arg_prec; + PyObject *__pyx_arg_minbits; + PyObject *__pyx_arg_maxbits; + PyObject *__pyx_arg_minexp; + PyObject *__pyx_arg_maxprec; +}; + +/* "compat_ext.pxd":4 + * + * + * cdef class Buffer: # <<<<<<<<<<<<<< + * cdef: + * char *ptr + */ +struct __pyx_obj_9numcodecs_10compat_ext_Buffer { + PyObject_HEAD + struct __pyx_vtabstruct_9numcodecs_10compat_ext_Buffer *__pyx_vtab; + char *ptr; + Py_buffer buffer; + size_t nbytes; + size_t itemsize; + int acquired; +}; + + + +struct __pyx_vtabstruct_9numcodecs_10compat_ext_Buffer { + PyObject *(*release)(struct __pyx_obj_9numcodecs_10compat_ext_Buffer *, int __pyx_skip_dispatch); +}; +static struct __pyx_vtabstruct_9numcodecs_10compat_ext_Buffer *__pyx_vtabptr_9numcodecs_10compat_ext_Buffer; + +/* --- Runtime support code (head) --- */ +/* Refnanny.proto */ +#ifndef CYTHON_REFNANNY + #define CYTHON_REFNANNY 0 +#endif +#if CYTHON_REFNANNY + typedef struct { + void (*INCREF)(void*, PyObject*, int); + void (*DECREF)(void*, PyObject*, int); + void (*GOTREF)(void*, PyObject*, int); + void (*GIVEREF)(void*, PyObject*, int); + void* (*SetupContext)(const char*, int, const char*); + void (*FinishContext)(void**); + } __Pyx_RefNannyAPIStruct; + static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL; + static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname); + #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL; +#ifdef WITH_THREAD + #define __Pyx_RefNannySetupContext(name, acquire_gil)\ + if (acquire_gil) {\ + PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__);\ + PyGILState_Release(__pyx_gilstate_save);\ + } else {\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__);\ + } +#else + #define __Pyx_RefNannySetupContext(name, acquire_gil)\ + __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__) +#endif + #define __Pyx_RefNannyFinishContext()\ + __Pyx_RefNanny->FinishContext(&__pyx_refnanny) + #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__) + #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__) + #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), __LINE__) + #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), __LINE__) + #define __Pyx_XINCREF(r) do { if((r) != NULL) {__Pyx_INCREF(r); }} while(0) + #define __Pyx_XDECREF(r) do { if((r) != NULL) {__Pyx_DECREF(r); }} while(0) + #define __Pyx_XGOTREF(r) do { if((r) != NULL) {__Pyx_GOTREF(r); }} while(0) + #define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);}} while(0) +#else + #define __Pyx_RefNannyDeclarations + #define __Pyx_RefNannySetupContext(name, acquire_gil) + #define __Pyx_RefNannyFinishContext() + #define __Pyx_INCREF(r) Py_INCREF(r) + #define __Pyx_DECREF(r) Py_DECREF(r) + #define __Pyx_GOTREF(r) + #define __Pyx_GIVEREF(r) + #define __Pyx_XINCREF(r) Py_XINCREF(r) + #define __Pyx_XDECREF(r) Py_XDECREF(r) + #define __Pyx_XGOTREF(r) + #define __Pyx_XGIVEREF(r) +#endif +#define __Pyx_XDECREF_SET(r, v) do {\ + PyObject *tmp = (PyObject *) r;\ + r = v; __Pyx_XDECREF(tmp);\ + } while (0) +#define __Pyx_DECREF_SET(r, v) do {\ + PyObject *tmp = (PyObject *) r;\ + r = v; __Pyx_DECREF(tmp);\ + } while (0) +#define __Pyx_CLEAR(r) do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0) +#define __Pyx_XCLEAR(r) do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0) + +/* PyObjectGetAttrStr.proto */ +#if CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name); +#else +#define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n) +#endif + +/* GetBuiltinName.proto */ +static PyObject *__Pyx_GetBuiltinName(PyObject *name); + +/* RaiseArgTupleInvalid.proto */ +static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact, + Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); + +/* RaiseDoubleKeywords.proto */ +static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name); + +/* ParseKeywords.proto */ +static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[],\ + PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args,\ + const char* function_name); + +/* DictGetItem.proto */ +#if PY_MAJOR_VERSION >= 3 && !CYTHON_COMPILING_IN_PYPY +static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key); +#define __Pyx_PyObject_Dict_GetItem(obj, name)\ + (likely(PyDict_CheckExact(obj)) ?\ + __Pyx_PyDict_GetItem(obj, name) : PyObject_GetItem(obj, name)) +#else +#define __Pyx_PyDict_GetItem(d, key) PyObject_GetItem(d, key) +#define __Pyx_PyObject_Dict_GetItem(obj, name) PyObject_GetItem(obj, name) +#endif + +/* PyObjectCall.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw); +#else +#define __Pyx_PyObject_Call(func, arg, kw) PyObject_Call(func, arg, kw) +#endif + +/* PyDictVersioning.proto */ +#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS +#define __PYX_DICT_VERSION_INIT ((PY_UINT64_T) -1) +#define __PYX_GET_DICT_VERSION(dict) (((PyDictObject*)(dict))->ma_version_tag) +#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var)\ + (version_var) = __PYX_GET_DICT_VERSION(dict);\ + (cache_var) = (value); +#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) {\ + static PY_UINT64_T __pyx_dict_version = 0;\ + static PyObject *__pyx_dict_cached_value = NULL;\ + if (likely(__PYX_GET_DICT_VERSION(DICT) == __pyx_dict_version)) {\ + (VAR) = __pyx_dict_cached_value;\ + } else {\ + (VAR) = __pyx_dict_cached_value = (LOOKUP);\ + __pyx_dict_version = __PYX_GET_DICT_VERSION(DICT);\ + }\ +} +static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj); +static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj); +static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version); +#else +#define __PYX_GET_DICT_VERSION(dict) (0) +#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var) +#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) (VAR) = (LOOKUP); +#endif + +/* GetModuleGlobalName.proto */ +#if CYTHON_USE_DICT_VERSIONS +#define __Pyx_GetModuleGlobalName(var, name) {\ + static PY_UINT64_T __pyx_dict_version = 0;\ + static PyObject *__pyx_dict_cached_value = NULL;\ + (var) = (likely(__pyx_dict_version == __PYX_GET_DICT_VERSION(__pyx_d))) ?\ + (likely(__pyx_dict_cached_value) ? __Pyx_NewRef(__pyx_dict_cached_value) : __Pyx_GetBuiltinName(name)) :\ + __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\ +} +#define __Pyx_GetModuleGlobalNameUncached(var, name) {\ + PY_UINT64_T __pyx_dict_version;\ + PyObject *__pyx_dict_cached_value;\ + (var) = __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\ +} +static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value); +#else +#define __Pyx_GetModuleGlobalName(var, name) (var) = __Pyx__GetModuleGlobalName(name) +#define __Pyx_GetModuleGlobalNameUncached(var, name) (var) = __Pyx__GetModuleGlobalName(name) +static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name); +#endif + +/* PyThreadStateGet.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyThreadState_declare PyThreadState *__pyx_tstate; +#define __Pyx_PyThreadState_assign __pyx_tstate = __Pyx_PyThreadState_Current; +#define __Pyx_PyErr_Occurred() __pyx_tstate->curexc_type +#else +#define __Pyx_PyThreadState_declare +#define __Pyx_PyThreadState_assign +#define __Pyx_PyErr_Occurred() PyErr_Occurred() +#endif + +/* PyErrFetchRestore.proto */ +#if CYTHON_FAST_THREAD_STATE +#define __Pyx_PyErr_Clear() __Pyx_ErrRestore(NULL, NULL, NULL) +#define __Pyx_ErrRestoreWithState(type, value, tb) __Pyx_ErrRestoreInState(PyThreadState_GET(), type, value, tb) +#define __Pyx_ErrFetchWithState(type, value, tb) __Pyx_ErrFetchInState(PyThreadState_GET(), type, value, tb) +#define __Pyx_ErrRestore(type, value, tb) __Pyx_ErrRestoreInState(__pyx_tstate, type, value, tb) +#define __Pyx_ErrFetch(type, value, tb) __Pyx_ErrFetchInState(__pyx_tstate, type, value, tb) +static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb); +static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); +#if CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_PyErr_SetNone(exc) (Py_INCREF(exc), __Pyx_ErrRestore((exc), NULL, NULL)) +#else +#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) +#endif +#else +#define __Pyx_PyErr_Clear() PyErr_Clear() +#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) +#define __Pyx_ErrRestoreWithState(type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetchWithState(type, value, tb) PyErr_Fetch(type, value, tb) +#define __Pyx_ErrRestoreInState(tstate, type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetchInState(tstate, type, value, tb) PyErr_Fetch(type, value, tb) +#define __Pyx_ErrRestore(type, value, tb) PyErr_Restore(type, value, tb) +#define __Pyx_ErrFetch(type, value, tb) PyErr_Fetch(type, value, tb) +#endif + +/* RaiseException.proto */ +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); + +/* PyCFunctionFastCall.proto */ +#if CYTHON_FAST_PYCCALL +static CYTHON_INLINE PyObject *__Pyx_PyCFunction_FastCall(PyObject *func, PyObject **args, Py_ssize_t nargs); +#else +#define __Pyx_PyCFunction_FastCall(func, args, nargs) (assert(0), NULL) +#endif + +/* PyFunctionFastCall.proto */ +#if CYTHON_FAST_PYCALL +#define __Pyx_PyFunction_FastCall(func, args, nargs)\ + __Pyx_PyFunction_FastCallDict((func), (args), (nargs), NULL) +#if 1 || PY_VERSION_HEX < 0x030600B1 +static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, int nargs, PyObject *kwargs); +#else +#define __Pyx_PyFunction_FastCallDict(func, args, nargs, kwargs) _PyFunction_FastCallDict(func, args, nargs, kwargs) +#endif +#define __Pyx_BUILD_ASSERT_EXPR(cond)\ + (sizeof(char [1 - 2*!(cond)]) - 1) +#ifndef Py_MEMBER_SIZE +#define Py_MEMBER_SIZE(type, member) sizeof(((type *)0)->member) +#endif + static size_t __pyx_pyframe_localsplus_offset = 0; + #include "frameobject.h" + #define __Pxy_PyFrame_Initialize_Offsets()\ + ((void)__Pyx_BUILD_ASSERT_EXPR(sizeof(PyFrameObject) == offsetof(PyFrameObject, f_localsplus) + Py_MEMBER_SIZE(PyFrameObject, f_localsplus)),\ + (void)(__pyx_pyframe_localsplus_offset = ((size_t)PyFrame_Type.tp_basicsize) - Py_MEMBER_SIZE(PyFrameObject, f_localsplus))) + #define __Pyx_PyFrame_GetLocalsplus(frame)\ + (assert(__pyx_pyframe_localsplus_offset), (PyObject **)(((char *)(frame)) + __pyx_pyframe_localsplus_offset)) +#endif + +/* PyObjectCall2Args.proto */ +static CYTHON_UNUSED PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2); + +/* PyObjectCallMethO.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg); +#endif + +/* PyObjectCallOneArg.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg); + +/* PyIntCompare.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_EqObjC(PyObject *op1, PyObject *op2, long intval, long inplace); + +/* GetItemInt.proto */ +#define __Pyx_GetItemInt(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ + (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ + __Pyx_GetItemInt_Fast(o, (Py_ssize_t)i, is_list, wraparound, boundscheck) :\ + (is_list ? (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL) :\ + __Pyx_GetItemInt_Generic(o, to_py_func(i)))) +#define __Pyx_GetItemInt_List(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ + (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ + __Pyx_GetItemInt_List_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\ + (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL)) +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, + int wraparound, int boundscheck); +#define __Pyx_GetItemInt_Tuple(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ + (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ + __Pyx_GetItemInt_Tuple_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\ + (PyErr_SetString(PyExc_IndexError, "tuple index out of range"), (PyObject*)NULL)) +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, + int wraparound, int boundscheck); +static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j); +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, + int is_list, int wraparound, int boundscheck); + +/* IncludeStringH.proto */ +#include + +/* BytesEquals.proto */ +static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals); + +/* UnicodeEquals.proto */ +static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals); + +/* StrEquals.proto */ +#if PY_MAJOR_VERSION >= 3 +#define __Pyx_PyString_Equals __Pyx_PyUnicode_Equals +#else +#define __Pyx_PyString_Equals __Pyx_PyBytes_Equals +#endif + +/* PyObjectSetAttrStr.proto */ +#if CYTHON_USE_TYPE_SLOTS +#define __Pyx_PyObject_DelAttrStr(o,n) __Pyx_PyObject_SetAttrStr(o, n, NULL) +static CYTHON_INLINE int __Pyx_PyObject_SetAttrStr(PyObject* obj, PyObject* attr_name, PyObject* value); +#else +#define __Pyx_PyObject_DelAttrStr(o,n) PyObject_DelAttr(o,n) +#define __Pyx_PyObject_SetAttrStr(o,n,v) PyObject_SetAttr(o,n,v) +#endif + +/* TypeImport.proto */ +#ifndef __PYX_HAVE_RT_ImportType_proto +#define __PYX_HAVE_RT_ImportType_proto +enum __Pyx_ImportType_CheckSize { + __Pyx_ImportType_CheckSize_Error = 0, + __Pyx_ImportType_CheckSize_Warn = 1, + __Pyx_ImportType_CheckSize_Ignore = 2 +}; +static PyTypeObject *__Pyx_ImportType(PyObject* module, const char *module_name, const char *class_name, size_t size, enum __Pyx_ImportType_CheckSize check_size); +#endif + +/* GetVTable.proto */ +static void* __Pyx_GetVtable(PyObject *dict); + +/* Import.proto */ +static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level); + +/* ImportFrom.proto */ +static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name); + +/* FetchCommonType.proto */ +static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type); + +/* CythonFunction.proto */ +#define __Pyx_CyFunction_USED 1 +#define __Pyx_CYFUNCTION_STATICMETHOD 0x01 +#define __Pyx_CYFUNCTION_CLASSMETHOD 0x02 +#define __Pyx_CYFUNCTION_CCLASS 0x04 +#define __Pyx_CyFunction_GetClosure(f)\ + (((__pyx_CyFunctionObject *) (f))->func_closure) +#define __Pyx_CyFunction_GetClassObj(f)\ + (((__pyx_CyFunctionObject *) (f))->func_classobj) +#define __Pyx_CyFunction_Defaults(type, f)\ + ((type *)(((__pyx_CyFunctionObject *) (f))->defaults)) +#define __Pyx_CyFunction_SetDefaultsGetter(f, g)\ + ((__pyx_CyFunctionObject *) (f))->defaults_getter = (g) +typedef struct { + PyCFunctionObject func; +#if PY_VERSION_HEX < 0x030500A0 + PyObject *func_weakreflist; +#endif + PyObject *func_dict; + PyObject *func_name; + PyObject *func_qualname; + PyObject *func_doc; + PyObject *func_globals; + PyObject *func_code; + PyObject *func_closure; + PyObject *func_classobj; + void *defaults; + int defaults_pyobjects; + int flags; + PyObject *defaults_tuple; + PyObject *defaults_kwdict; + PyObject *(*defaults_getter)(PyObject *); + PyObject *func_annotations; +} __pyx_CyFunctionObject; +static PyTypeObject *__pyx_CyFunctionType = 0; +#define __Pyx_CyFunction_Check(obj) (__Pyx_TypeCheck(obj, __pyx_CyFunctionType)) +#define __Pyx_CyFunction_NewEx(ml, flags, qualname, self, module, globals, code)\ + __Pyx_CyFunction_New(__pyx_CyFunctionType, ml, flags, qualname, self, module, globals, code) +static PyObject *__Pyx_CyFunction_New(PyTypeObject *, PyMethodDef *ml, + int flags, PyObject* qualname, + PyObject *self, + PyObject *module, PyObject *globals, + PyObject* code); +static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *m, + size_t size, + int pyobjects); +static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *m, + PyObject *tuple); +static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *m, + PyObject *dict); +static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *m, + PyObject *dict); +static int __pyx_CyFunction_init(void); + +/* SetNameInClass.proto */ +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 +#define __Pyx_SetNameInClass(ns, name, value)\ + (likely(PyDict_CheckExact(ns)) ? _PyDict_SetItem_KnownHash(ns, name, value, ((PyASCIIObject *) name)->hash) : PyObject_SetItem(ns, name, value)) +#elif CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_SetNameInClass(ns, name, value)\ + (likely(PyDict_CheckExact(ns)) ? PyDict_SetItem(ns, name, value) : PyObject_SetItem(ns, name, value)) +#else +#define __Pyx_SetNameInClass(ns, name, value) PyObject_SetItem(ns, name, value) +#endif + +/* CalculateMetaclass.proto */ +static PyObject *__Pyx_CalculateMetaclass(PyTypeObject *metaclass, PyObject *bases); + +/* Py3ClassCreate.proto */ +static PyObject *__Pyx_Py3MetaclassPrepare(PyObject *metaclass, PyObject *bases, PyObject *name, PyObject *qualname, + PyObject *mkw, PyObject *modname, PyObject *doc); +static PyObject *__Pyx_Py3ClassCreate(PyObject *metaclass, PyObject *name, PyObject *bases, PyObject *dict, + PyObject *mkw, int calculate_metaclass, int allow_py2_metaclass); + +/* CLineInTraceback.proto */ +#ifdef CYTHON_CLINE_IN_TRACEBACK +#define __Pyx_CLineForTraceback(tstate, c_line) (((CYTHON_CLINE_IN_TRACEBACK)) ? c_line : 0) +#else +static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line); +#endif + +/* CodeObjectCache.proto */ +typedef struct { + PyCodeObject* code_object; + int code_line; +} __Pyx_CodeObjectCacheEntry; +struct __Pyx_CodeObjectCache { + int count; + int max_count; + __Pyx_CodeObjectCacheEntry* entries; +}; +static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL}; +static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line); +static PyCodeObject *__pyx_find_code_object(int code_line); +static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object); + +/* AddTraceback.proto */ +static void __Pyx_AddTraceback(const char *funcname, int c_line, + int py_line, const char *filename); + +/* CIntToPy.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value); + +/* CIntToPy.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value); + +/* CIntToPy.proto */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_unsigned_int(unsigned int value); + +/* CIntFromPy.proto */ +static CYTHON_INLINE unsigned int __Pyx_PyInt_As_unsigned_int(PyObject *); + +/* CIntFromPy.proto */ +static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *); + +/* CIntFromPy.proto */ +static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *); + +/* FastTypeChecks.proto */ +#if CYTHON_COMPILING_IN_CPYTHON +#define __Pyx_TypeCheck(obj, type) __Pyx_IsSubtype(Py_TYPE(obj), (PyTypeObject *)type) +static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b); +static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches(PyObject *err, PyObject *type); +static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *type1, PyObject *type2); +#else +#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type) +#define __Pyx_PyErr_GivenExceptionMatches(err, type) PyErr_GivenExceptionMatches(err, type) +#define __Pyx_PyErr_GivenExceptionMatches2(err, type1, type2) (PyErr_GivenExceptionMatches(err, type1) || PyErr_GivenExceptionMatches(err, type2)) +#endif +#define __Pyx_PyException_Check(obj) __Pyx_TypeCheck(obj, PyExc_Exception) + +/* CheckBinaryVersion.proto */ +static int __Pyx_check_binary_version(void); + +/* InitStrings.proto */ +static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); + + +/* Module declarations from 'cython' */ + +/* Module declarations from 'cpython.buffer' */ + +/* Module declarations from 'libc.string' */ + +/* Module declarations from 'libc.stdio' */ + +/* Module declarations from '__builtin__' */ + +/* Module declarations from 'cpython.type' */ +static PyTypeObject *__pyx_ptype_7cpython_4type_type = 0; + +/* Module declarations from 'cpython' */ + +/* Module declarations from 'cpython.object' */ + +/* Module declarations from 'cpython.bytes' */ + +/* Module declarations from 'numcodecs.compat_ext' */ +static PyTypeObject *__pyx_ptype_9numcodecs_10compat_ext_Buffer = 0; + +/* Module declarations from 'numcodecs.zfp' */ +#define __Pyx_MODULE_NAME "numcodecs.zfp" +extern int __pyx_module_is_main_numcodecs__zfp; +int __pyx_module_is_main_numcodecs__zfp = 0; + +/* Implementation of 'numcodecs.zfp' */ +static PyObject *__pyx_builtin_TypeError; +static PyObject *__pyx_builtin_ValueError; +static PyObject *__pyx_builtin_RuntimeError; +static const char __pyx_k_a[] = "a"; +static const char __pyx_k_c[] = "c"; +static const char __pyx_k_p[] = "p"; +static const char __pyx_k_r[] = "r"; +static const char __pyx_k_np[] = "np"; +static const char __pyx_k_nw[] = "nw"; +static const char __pyx_k_nx[] = "nx"; +static const char __pyx_k_ny[] = "ny"; +static const char __pyx_k_nz[] = "nz"; +static const char __pyx_k_Zfp[] = "Zfp"; +static const char __pyx_k_arr[] = "arr"; +static const char __pyx_k_buf[] = "buf"; +static const char __pyx_k_doc[] = "__doc__"; +static const char __pyx_k_out[] = "out"; +static const char __pyx_k_ret[] = "ret"; +static const char __pyx_k_sys[] = "sys"; +static const char __pyx_k_tol[] = "tol"; +static const char __pyx_k_zfp[] = "zfp"; +static const char __pyx_k_dest[] = "dest"; +static const char __pyx_k_init[] = "__init__"; +static const char __pyx_k_main[] = "__main__"; +static const char __pyx_k_mode[] = "mode"; +static const char __pyx_k_name[] = "__name__"; +static const char __pyx_k_ndim[] = "ndim"; +static const char __pyx_k_prec[] = "prec"; +static const char __pyx_k_rate[] = "rate"; +static const char __pyx_k_repr[] = "__repr__"; +static const char __pyx_k_self[] = "self"; +static const char __pyx_k_test[] = "__test__"; +static const char __pyx_k_view[] = "view"; +static const char __pyx_k_Codec[] = "Codec"; +static const char __pyx_k_dtype[] = "dtype"; +static const char __pyx_k_field[] = "field"; +static const char __pyx_k_flags[] = "flags"; +static const char __pyx_k_int32[] = "int32"; +static const char __pyx_k_int64[] = "int64"; +static const char __pyx_k_numpy[] = "numpy"; +static const char __pyx_k_shape[] = "shape"; +static const char __pyx_k_Buffer[] = "Buffer"; +static const char __pyx_k_decode[] = "decode"; +static const char __pyx_k_encode[] = "encode"; +static const char __pyx_k_import[] = "__import__"; +static const char __pyx_k_method[] = "method"; +static const char __pyx_k_minexp[] = "minexp"; +static const char __pyx_k_module[] = "__module__"; +static const char __pyx_k_source[] = "source"; +static const char __pyx_k_stream[] = "stream"; +static const char __pyx_k_stride[] = "stride"; +static const char __pyx_k_bufsize[] = "bufsize"; +static const char __pyx_k_float32[] = "float32"; +static const char __pyx_k_float64[] = "float64"; +static const char __pyx_k_maxbits[] = "maxbits"; +static const char __pyx_k_maxprec[] = "maxprec"; +static const char __pyx_k_minbits[] = "minbits"; +static const char __pyx_k_prepare[] = "__prepare__"; +static const char __pyx_k_reshape[] = "reshape"; +static const char __pyx_k_strides[] = "strides"; +static const char __pyx_k_version[] = "__version__"; +static const char __pyx_k_zfpmode[] = "zfpmode"; +static const char __pyx_k_codec_id[] = "codec_id"; +static const char __pyx_k_compress[] = "compress"; +static const char __pyx_k_dest_ptr[] = "dest_ptr"; +static const char __pyx_k_itemsize[] = "itemsize"; +static const char __pyx_k_qualname[] = "__qualname__"; +static const char __pyx_k_set_mode[] = "set_mode"; +static const char __pyx_k_set_rate[] = "set_rate"; +static const char __pyx_k_the_type[] = "the_type"; +static const char __pyx_k_TypeError[] = "TypeError"; +static const char __pyx_k_buf_shape[] = "buf_shape"; +static const char __pyx_k_datashape[] = "datashape"; +static const char __pyx_k_dest_size[] = "dest_size"; +static const char __pyx_k_metaclass[] = "__metaclass__"; +static const char __pyx_k_precision[] = "precision"; +static const char __pyx_k_tolerance[] = "tolerance"; +static const char __pyx_k_type_size[] = "type_size"; +static const char __pyx_k_ValueError[] = "ValueError"; +static const char __pyx_k_WRONG_MODE[] = "WRONG MODE"; +static const char __pyx_k_Zfp___init[] = "Zfp.__init__"; +static const char __pyx_k_Zfp___repr[] = "Zfp.__repr__"; +static const char __pyx_k_Zfp_decode[] = "Zfp.decode"; +static const char __pyx_k_Zfp_encode[] = "Zfp.encode"; +static const char __pyx_k_compat_ext[] = "compat_ext"; +static const char __pyx_k_decompress[] = "decompress"; +static const char __pyx_k_pyx_vtable[] = "__pyx_vtable__"; +static const char __pyx_k_set_minexp[] = "set_minexp"; +static const char __pyx_k_source_ptr[] = "source_ptr"; +static const char __pyx_k_the_method[] = "the_method"; +static const char __pyx_k_dest_buffer[] = "dest_buffer"; +static const char __pyx_k_input_array[] = "input_array"; +static const char __pyx_k_set_maxbits[] = "set_maxbits"; +static const char __pyx_k_set_maxprec[] = "set_maxprec"; +static const char __pyx_k_set_minbits[] = "set_minbits"; +static const char __pyx_k_source_size[] = "source_size"; +static const char __pyx_k_RuntimeError[] = "RuntimeError"; +static const char __pyx_k_f_contiguous[] = "f_contiguous"; +static const char __pyx_k_numcodecs_abc[] = "numcodecs.abc"; +static const char __pyx_k_numcodecs_zfp[] = "numcodecs.zfp"; +static const char __pyx_k_set_precision[] = "set_precision"; +static const char __pyx_k_set_tolerance[] = "set_tolerance"; +static const char __pyx_k_source_buffer[] = "source_buffer"; +static const char __pyx_k_CompressMethod[] = "CompressMethod"; +static const char __pyx_k_VERSION_STRING[] = "VERSION_STRING"; +static const char __pyx_k_ensure_ndarray[] = "ensure_ndarray"; +static const char __pyx_k_s_mode_r_tol_s[] = "%s(mode=%r,tol=%s)"; +static const char __pyx_k_compressed_size[] = "compressed_size"; +static const char __pyx_k_s_mode_r_prec_s[] = "%s(mode=%r,prec=%s)"; +static const char __pyx_k_s_mode_r_rate_s[] = "%s(mode=%r,rate=%s)"; +static const char __pyx_k_numcodecs_compat[] = "numcodecs.compat"; +static const char __pyx_k_ascontiguousarray[] = "ascontiguousarray"; +static const char __pyx_k_decompress_failed[] = "decompress failed"; +static const char __pyx_k_numcodecs_zfp_pyx[] = "numcodecs/zfp.pyx"; +static const char __pyx_k_cline_in_traceback[] = "cline_in_traceback"; +static const char __pyx_k_CompressMethod___init[] = "CompressMethod.__init__"; +static const char __pyx_k_Must_specify_zfp_mode[] = "Must specify zfp mode"; +static const char __pyx_k_zfp_compress_is_failed[] = "zfp_compress is failed"; +static const char __pyx_k_zfp_read_header_failed[] = "zfp_read_header failed"; +static const char __pyx_k_CompressMethod_set_mode[] = "CompressMethod.set_mode"; +static const char __pyx_k_CompressMethod_set_rate[] = "CompressMethod.set_rate"; +static const char __pyx_k_zfp_write_header_failed[] = "zfp_write_header failed"; +static const char __pyx_k_CompressMethod_set_minexp[] = "CompressMethod.set_minexp"; +static const char __pyx_k_ensure_contiguous_ndarray[] = "ensure_contiguous_ndarray"; +static const char __pyx_k_CompressMethod_set_maxbits[] = "CompressMethod.set_maxbits"; +static const char __pyx_k_CompressMethod_set_maxprec[] = "CompressMethod.set_maxprec"; +static const char __pyx_k_CompressMethod_set_minbits[] = "CompressMethod.set_minbits"; +static const char __pyx_k_CompressMethod_set_precision[] = "CompressMethod.set_precision"; +static const char __pyx_k_CompressMethod_set_tolerance[] = "CompressMethod.set_tolerance"; +static const char __pyx_k_Create_a_CompressMethod_object[] = "\n Create a CompressMethod object to store zfp mode and \n its parameters in Zfp class\n \n "; +static const char __pyx_k_The_dimension_of_data_should_be[] = "The dimension of data should be equal or less than 4, please reshape"; +static const char __pyx_k_Wrong_mode_please_set_mode_to_a[] = "Wrong mode, please set mode to 'a', 'p', 'r' or 'c'"; +static const char __pyx_k_s_mode_r_minbits_s_maxbits_s_mi[] = "%s(mode=%r,minbits=%s,maxbits=%s,minexp=%s,maxprec=%s)"; +static const char __pyx_k_Codec_providing_compression_usin[] = "Codec providing compression using zfp via the Python standard library.\n \n Attributes\n ----------\n mode(mode='a')\n Fixed accuracy compression.\n tol : float \n Absolue error tolerance, default 0.0\n \n mode(mode='p')\n Fixed precision compression.\n prec : int \n Uncompressed bits per value, can be 0-64 for double precision\n\n mode(mode='r')\n Fixed rate compression.\n rate : int \n Compressed bits per floating-point value, can be 0-64 for double precision\n\n mode(mode='c')\n Custom advanced compression.\n minbits : int\n Min bits per 4^d values in d dimensions\n maxbits : int\n Max bits per 4^d values in d dimensions, 0 for unlimited\n minexp : int\n Min bit plane, -1074 for all bit planes\n maxprec : int\n Max bits of precision per value, 0 for full \n "; +static const char __pyx_k_The_type_of_data_should_be_int32[] = "The type of data should be int32, int64, float or double"; +static PyObject *__pyx_n_s_Buffer; +static PyObject *__pyx_n_s_Codec; +static PyObject *__pyx_kp_s_Codec_providing_compression_usin; +static PyObject *__pyx_n_s_CompressMethod; +static PyObject *__pyx_n_s_CompressMethod___init; +static PyObject *__pyx_n_s_CompressMethod_set_maxbits; +static PyObject *__pyx_n_s_CompressMethod_set_maxprec; +static PyObject *__pyx_n_s_CompressMethod_set_minbits; +static PyObject *__pyx_n_s_CompressMethod_set_minexp; +static PyObject *__pyx_n_s_CompressMethod_set_mode; +static PyObject *__pyx_n_s_CompressMethod_set_precision; +static PyObject *__pyx_n_s_CompressMethod_set_rate; +static PyObject *__pyx_n_s_CompressMethod_set_tolerance; +static PyObject *__pyx_kp_s_Create_a_CompressMethod_object; +static PyObject *__pyx_kp_s_Must_specify_zfp_mode; +static PyObject *__pyx_n_s_RuntimeError; +static PyObject *__pyx_kp_s_The_dimension_of_data_should_be; +static PyObject *__pyx_kp_s_The_type_of_data_should_be_int32; +static PyObject *__pyx_n_s_TypeError; +static PyObject *__pyx_n_s_VERSION_STRING; +static PyObject *__pyx_n_s_ValueError; +static PyObject *__pyx_kp_s_WRONG_MODE; +static PyObject *__pyx_kp_s_Wrong_mode_please_set_mode_to_a; +static PyObject *__pyx_n_s_Zfp; +static PyObject *__pyx_n_s_Zfp___init; +static PyObject *__pyx_n_s_Zfp___repr; +static PyObject *__pyx_n_s_Zfp_decode; +static PyObject *__pyx_n_s_Zfp_encode; +static PyObject *__pyx_n_s_a; +static PyObject *__pyx_n_s_arr; +static PyObject *__pyx_n_s_ascontiguousarray; +static PyObject *__pyx_n_s_buf; +static PyObject *__pyx_n_s_buf_shape; +static PyObject *__pyx_n_s_bufsize; +static PyObject *__pyx_n_s_c; +static PyObject *__pyx_n_s_cline_in_traceback; +static PyObject *__pyx_n_s_codec_id; +static PyObject *__pyx_n_s_compat_ext; +static PyObject *__pyx_n_s_compress; +static PyObject *__pyx_n_s_compressed_size; +static PyObject *__pyx_n_s_datashape; +static PyObject *__pyx_n_s_decode; +static PyObject *__pyx_n_s_decompress; +static PyObject *__pyx_kp_s_decompress_failed; +static PyObject *__pyx_n_s_dest; +static PyObject *__pyx_n_s_dest_buffer; +static PyObject *__pyx_n_s_dest_ptr; +static PyObject *__pyx_n_s_dest_size; +static PyObject *__pyx_n_s_doc; +static PyObject *__pyx_n_s_dtype; +static PyObject *__pyx_n_s_encode; +static PyObject *__pyx_n_s_ensure_contiguous_ndarray; +static PyObject *__pyx_n_s_ensure_ndarray; +static PyObject *__pyx_n_s_f_contiguous; +static PyObject *__pyx_n_s_field; +static PyObject *__pyx_n_s_flags; +static PyObject *__pyx_n_s_float32; +static PyObject *__pyx_n_s_float64; +static PyObject *__pyx_n_s_import; +static PyObject *__pyx_n_s_init; +static PyObject *__pyx_n_s_input_array; +static PyObject *__pyx_n_s_int32; +static PyObject *__pyx_n_s_int64; +static PyObject *__pyx_n_s_itemsize; +static PyObject *__pyx_n_s_main; +static PyObject *__pyx_n_s_maxbits; +static PyObject *__pyx_n_s_maxprec; +static PyObject *__pyx_n_s_metaclass; +static PyObject *__pyx_n_s_method; +static PyObject *__pyx_n_s_minbits; +static PyObject *__pyx_n_s_minexp; +static PyObject *__pyx_n_s_mode; +static PyObject *__pyx_n_s_module; +static PyObject *__pyx_n_s_name; +static PyObject *__pyx_n_s_ndim; +static PyObject *__pyx_n_s_np; +static PyObject *__pyx_n_s_numcodecs_abc; +static PyObject *__pyx_n_s_numcodecs_compat; +static PyObject *__pyx_n_s_numcodecs_zfp; +static PyObject *__pyx_kp_s_numcodecs_zfp_pyx; +static PyObject *__pyx_n_s_numpy; +static PyObject *__pyx_n_s_nw; +static PyObject *__pyx_n_s_nx; +static PyObject *__pyx_n_s_ny; +static PyObject *__pyx_n_s_nz; +static PyObject *__pyx_n_s_out; +static PyObject *__pyx_n_s_p; +static PyObject *__pyx_n_s_prec; +static PyObject *__pyx_n_s_precision; +static PyObject *__pyx_n_s_prepare; +static PyObject *__pyx_n_s_pyx_vtable; +static PyObject *__pyx_n_s_qualname; +static PyObject *__pyx_n_s_r; +static PyObject *__pyx_n_s_rate; +static PyObject *__pyx_n_s_repr; +static PyObject *__pyx_n_s_reshape; +static PyObject *__pyx_n_s_ret; +static PyObject *__pyx_kp_s_s_mode_r_minbits_s_maxbits_s_mi; +static PyObject *__pyx_kp_s_s_mode_r_prec_s; +static PyObject *__pyx_kp_s_s_mode_r_rate_s; +static PyObject *__pyx_kp_s_s_mode_r_tol_s; +static PyObject *__pyx_n_s_self; +static PyObject *__pyx_n_s_set_maxbits; +static PyObject *__pyx_n_s_set_maxprec; +static PyObject *__pyx_n_s_set_minbits; +static PyObject *__pyx_n_s_set_minexp; +static PyObject *__pyx_n_s_set_mode; +static PyObject *__pyx_n_s_set_precision; +static PyObject *__pyx_n_s_set_rate; +static PyObject *__pyx_n_s_set_tolerance; +static PyObject *__pyx_n_s_shape; +static PyObject *__pyx_n_s_source; +static PyObject *__pyx_n_s_source_buffer; +static PyObject *__pyx_n_s_source_ptr; +static PyObject *__pyx_n_s_source_size; +static PyObject *__pyx_n_s_stream; +static PyObject *__pyx_n_s_stride; +static PyObject *__pyx_n_s_strides; +static PyObject *__pyx_n_s_sys; +static PyObject *__pyx_n_s_test; +static PyObject *__pyx_n_s_the_method; +static PyObject *__pyx_n_s_the_type; +static PyObject *__pyx_n_s_tol; +static PyObject *__pyx_n_s_tolerance; +static PyObject *__pyx_n_s_type_size; +static PyObject *__pyx_n_s_version; +static PyObject *__pyx_n_s_view; +static PyObject *__pyx_n_s_zfp; +static PyObject *__pyx_kp_s_zfp_compress_is_failed; +static PyObject *__pyx_kp_s_zfp_read_header_failed; +static PyObject *__pyx_kp_s_zfp_write_header_failed; +static PyObject *__pyx_n_s_zfpmode; +static PyObject *__pyx_pf_9numcodecs_3zfp_compress(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_input_array, PyObject *__pyx_v_method); /* proto */ +static PyObject *__pyx_pf_9numcodecs_3zfp_2decompress(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_source, PyObject *__pyx_v_dest); /* proto */ +static PyObject *__pyx_pf_9numcodecs_3zfp_14CompressMethod___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ +static PyObject *__pyx_pf_9numcodecs_3zfp_14CompressMethod_2set_mode(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_mode); /* proto */ +static PyObject *__pyx_pf_9numcodecs_3zfp_14CompressMethod_4set_tolerance(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_tol); /* proto */ +static PyObject *__pyx_pf_9numcodecs_3zfp_14CompressMethod_6set_precision(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_prec); /* proto */ +static PyObject *__pyx_pf_9numcodecs_3zfp_14CompressMethod_8set_rate(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_rate); /* proto */ +static PyObject *__pyx_pf_9numcodecs_3zfp_14CompressMethod_10set_minbits(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_minbits); /* proto */ +static PyObject *__pyx_pf_9numcodecs_3zfp_14CompressMethod_12set_maxbits(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_maxbits); /* proto */ +static PyObject *__pyx_pf_9numcodecs_3zfp_14CompressMethod_14set_maxprec(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_maxprec); /* proto */ +static PyObject *__pyx_pf_9numcodecs_3zfp_14CompressMethod_16set_minexp(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_minexp); /* proto */ +static PyObject *__pyx_pf_9numcodecs_3zfp_4__defaults__(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ +static PyObject *__pyx_pf_9numcodecs_3zfp_3Zfp___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_mode, PyObject *__pyx_v_tol, PyObject *__pyx_v_prec, PyObject *__pyx_v_rate, PyObject *__pyx_v_minbits, PyObject *__pyx_v_maxbits, PyObject *__pyx_v_minexp, PyObject *__pyx_v_maxprec, CYTHON_UNUSED PyObject *__pyx_v_the_method); /* proto */ +static PyObject *__pyx_pf_9numcodecs_3zfp_3Zfp_2encode(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_buf); /* proto */ +static PyObject *__pyx_pf_9numcodecs_3zfp_3Zfp_4decode(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, PyObject *__pyx_v_buf, PyObject *__pyx_v_out); /* proto */ +static PyObject *__pyx_pf_9numcodecs_3zfp_3Zfp_6__repr__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ +static PyObject *__pyx_float_0_0; +static PyObject *__pyx_float_0_01; +static PyObject *__pyx_int_0; +static PyObject *__pyx_int_1; +static PyObject *__pyx_int_2; +static PyObject *__pyx_int_3; +static PyObject *__pyx_int_4; +static PyObject *__pyx_int_8; +static PyObject *__pyx_tuple_; +static PyObject *__pyx_tuple__2; +static PyObject *__pyx_tuple__3; +static PyObject *__pyx_tuple__4; +static PyObject *__pyx_tuple__5; +static PyObject *__pyx_tuple__6; +static PyObject *__pyx_tuple__7; +static PyObject *__pyx_tuple__8; +static PyObject *__pyx_tuple__9; +static PyObject *__pyx_tuple__11; +static PyObject *__pyx_tuple__13; +static PyObject *__pyx_tuple__15; +static PyObject *__pyx_tuple__17; +static PyObject *__pyx_tuple__19; +static PyObject *__pyx_tuple__21; +static PyObject *__pyx_tuple__23; +static PyObject *__pyx_tuple__25; +static PyObject *__pyx_tuple__27; +static PyObject *__pyx_tuple__29; +static PyObject *__pyx_tuple__31; +static PyObject *__pyx_tuple__33; +static PyObject *__pyx_tuple__35; +static PyObject *__pyx_tuple__37; +static PyObject *__pyx_tuple__38; +static PyObject *__pyx_codeobj__10; +static PyObject *__pyx_codeobj__12; +static PyObject *__pyx_codeobj__14; +static PyObject *__pyx_codeobj__16; +static PyObject *__pyx_codeobj__18; +static PyObject *__pyx_codeobj__20; +static PyObject *__pyx_codeobj__22; +static PyObject *__pyx_codeobj__24; +static PyObject *__pyx_codeobj__26; +static PyObject *__pyx_codeobj__28; +static PyObject *__pyx_codeobj__30; +static PyObject *__pyx_codeobj__32; +static PyObject *__pyx_codeobj__34; +static PyObject *__pyx_codeobj__36; +static PyObject *__pyx_codeobj__39; +/* Late includes */ + +/* "numcodecs/zfp.pyx":104 + * + * + * def compress(input_array,method): # <<<<<<<<<<<<<< + * """Compress data. + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_9numcodecs_3zfp_1compress(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_9numcodecs_3zfp_compress[] = "Compress data. \n \n Parameters\n ----------\n input_array : numpy array\n Data to be compressed. zfp can compress data better with arrays that have\n larger number of dimensions (1-4). So we want to reserve the dimension of the data\n\n method : a dictionary has compression mode and its relate compression parameters\n \n Returns\n -------\n dest : bytes\n Compressed data\n\n "; +static PyMethodDef __pyx_mdef_9numcodecs_3zfp_1compress = {"compress", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_9numcodecs_3zfp_1compress, METH_VARARGS|METH_KEYWORDS, __pyx_doc_9numcodecs_3zfp_compress}; +static PyObject *__pyx_pw_9numcodecs_3zfp_1compress(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_input_array = 0; + PyObject *__pyx_v_method = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("compress (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_input_array,&__pyx_n_s_method,0}; + PyObject* values[2] = {0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_input_array)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_method)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("compress", 1, 2, 2, 1); __PYX_ERR(0, 104, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "compress") < 0)) __PYX_ERR(0, 104, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + } + __pyx_v_input_array = values[0]; + __pyx_v_method = values[1]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("compress", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 104, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("numcodecs.zfp.compress", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_9numcodecs_3zfp_compress(__pyx_self, __pyx_v_input_array, __pyx_v_method); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_9numcodecs_3zfp_compress(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_input_array, PyObject *__pyx_v_method) { + zfp_stream *__pyx_v_zfp; + bitstream *__pyx_v_stream; + zfp_field *__pyx_v_field; + char *__pyx_v_source_ptr; + char *__pyx_v_dest_ptr; + struct __pyx_obj_9numcodecs_10compat_ext_Buffer *__pyx_v_source_buffer = 0; + int __pyx_v_dest_size; + int __pyx_v_compressed_size; + PyObject *__pyx_v_dest = 0; + PyObject *__pyx_v_zfpmode = NULL; + zfp_type __pyx_v_the_type; + size_t __pyx_v_ret; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + char *__pyx_t_3; + PyObject *__pyx_t_4 = NULL; + int __pyx_t_5; + unsigned int __pyx_t_6; + int __pyx_t_7; + unsigned int __pyx_t_8; + int __pyx_t_9; + unsigned int __pyx_t_10; + int __pyx_t_11; + unsigned int __pyx_t_12; + int __pyx_t_13; + double __pyx_t_14; + __Pyx_RefNannySetupContext("compress", 0); + __Pyx_INCREF(__pyx_v_input_array); + + /* "numcodecs/zfp.pyx":134 + * bytes dest + * # get compression mode + * zfpmode = method['mode'] # <<<<<<<<<<<<<< + * + * # allocate an object to store all parameters + */ + __pyx_t_1 = __Pyx_PyObject_Dict_GetItem(__pyx_v_method, __pyx_n_s_mode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 134, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_zfpmode = __pyx_t_1; + __pyx_t_1 = 0; + + /* "numcodecs/zfp.pyx":137 + * + * # allocate an object to store all parameters + * field = zfp_field_alloc() # <<<<<<<<<<<<<< + * + * # setup source buffer + */ + __pyx_v_field = zfp_field_alloc(); + + /* "numcodecs/zfp.pyx":140 + * + * # setup source buffer + * source_buffer = Buffer(input_array,PyBUF_ANY_CONTIGUOUS) # <<<<<<<<<<<<<< + * source_ptr = source_buffer.ptr + * + */ + __pyx_t_1 = __Pyx_PyInt_From_int(PyBUF_ANY_CONTIGUOUS); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 140, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 140, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_v_input_array); + __Pyx_GIVEREF(__pyx_v_input_array); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_input_array); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1); + __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_9numcodecs_10compat_ext_Buffer), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 140, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v_source_buffer = ((struct __pyx_obj_9numcodecs_10compat_ext_Buffer *)__pyx_t_1); + __pyx_t_1 = 0; + + /* "numcodecs/zfp.pyx":141 + * # setup source buffer + * source_buffer = Buffer(input_array,PyBUF_ANY_CONTIGUOUS) + * source_ptr = source_buffer.ptr # <<<<<<<<<<<<<< + * + * # determine type + */ + __pyx_t_3 = __pyx_v_source_buffer->ptr; + __pyx_v_source_ptr = __pyx_t_3; + + /* "numcodecs/zfp.pyx":147 + * # the_type= + * #else: + * if input_array.dtype == np.float32: # <<<<<<<<<<<<<< + * the_type = zfp_type_float + * elif input_array.dtype == np.float64: + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_array, __pyx_n_s_dtype); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 147, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 147, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_float32); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 147, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = PyObject_RichCompare(__pyx_t_1, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 147, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 147, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (__pyx_t_5) { + + /* "numcodecs/zfp.pyx":148 + * #else: + * if input_array.dtype == np.float32: + * the_type = zfp_type_float # <<<<<<<<<<<<<< + * elif input_array.dtype == np.float64: + * the_type = zfp_type_double + */ + __pyx_v_the_type = zfp_type_float; + + /* "numcodecs/zfp.pyx":147 + * # the_type= + * #else: + * if input_array.dtype == np.float32: # <<<<<<<<<<<<<< + * the_type = zfp_type_float + * elif input_array.dtype == np.float64: + */ + goto __pyx_L3; + } + + /* "numcodecs/zfp.pyx":149 + * if input_array.dtype == np.float32: + * the_type = zfp_type_float + * elif input_array.dtype == np.float64: # <<<<<<<<<<<<<< + * the_type = zfp_type_double + * elif input_array.dtype == np.int32: + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_array, __pyx_n_s_dtype); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 149, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 149, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_float64); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 149, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = PyObject_RichCompare(__pyx_t_2, __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 149, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 149, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_5) { + + /* "numcodecs/zfp.pyx":150 + * the_type = zfp_type_float + * elif input_array.dtype == np.float64: + * the_type = zfp_type_double # <<<<<<<<<<<<<< + * elif input_array.dtype == np.int32: + * the_type = zfp_type_int32 + */ + __pyx_v_the_type = zfp_type_double; + + /* "numcodecs/zfp.pyx":149 + * if input_array.dtype == np.float32: + * the_type = zfp_type_float + * elif input_array.dtype == np.float64: # <<<<<<<<<<<<<< + * the_type = zfp_type_double + * elif input_array.dtype == np.int32: + */ + goto __pyx_L3; + } + + /* "numcodecs/zfp.pyx":151 + * elif input_array.dtype == np.float64: + * the_type = zfp_type_double + * elif input_array.dtype == np.int32: # <<<<<<<<<<<<<< + * the_type = zfp_type_int32 + * elif input_array.dtype == np.int64: + */ + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_array, __pyx_n_s_dtype); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 151, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 151, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_int32); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 151, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = PyObject_RichCompare(__pyx_t_4, __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 151, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 151, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__pyx_t_5) { + + /* "numcodecs/zfp.pyx":152 + * the_type = zfp_type_double + * elif input_array.dtype == np.int32: + * the_type = zfp_type_int32 # <<<<<<<<<<<<<< + * elif input_array.dtype == np.int64: + * the_type = zfp_type_int64 + */ + __pyx_v_the_type = zfp_type_int32; + + /* "numcodecs/zfp.pyx":151 + * elif input_array.dtype == np.float64: + * the_type = zfp_type_double + * elif input_array.dtype == np.int32: # <<<<<<<<<<<<<< + * the_type = zfp_type_int32 + * elif input_array.dtype == np.int64: + */ + goto __pyx_L3; + } + + /* "numcodecs/zfp.pyx":153 + * elif input_array.dtype == np.int32: + * the_type = zfp_type_int32 + * elif input_array.dtype == np.int64: # <<<<<<<<<<<<<< + * the_type = zfp_type_int64 + * else: + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_array, __pyx_n_s_dtype); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 153, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 153, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_int64); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 153, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = PyObject_RichCompare(__pyx_t_1, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 153, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 153, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + if (likely(__pyx_t_5)) { + + /* "numcodecs/zfp.pyx":154 + * the_type = zfp_type_int32 + * elif input_array.dtype == np.int64: + * the_type = zfp_type_int64 # <<<<<<<<<<<<<< + * else: + * raise TypeError("The type of data should be int32, int64, float or double") + */ + __pyx_v_the_type = zfp_type_int64; + + /* "numcodecs/zfp.pyx":153 + * elif input_array.dtype == np.int32: + * the_type = zfp_type_int32 + * elif input_array.dtype == np.int64: # <<<<<<<<<<<<<< + * the_type = zfp_type_int64 + * else: + */ + goto __pyx_L3; + } + + /* "numcodecs/zfp.pyx":156 + * the_type = zfp_type_int64 + * else: + * raise TypeError("The type of data should be int32, int64, float or double") # <<<<<<<<<<<<<< + * + * zfp_field_set_type(field,the_type) + */ + /*else*/ { + __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple_, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 156, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_Raise(__pyx_t_2, 0, 0, 0); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __PYX_ERR(0, 156, __pyx_L1_error) + } + __pyx_L3:; + + /* "numcodecs/zfp.pyx":158 + * raise TypeError("The type of data should be int32, int64, float or double") + * + * zfp_field_set_type(field,the_type) # <<<<<<<<<<<<<< + * zfp_field_set_pointer(field,source_ptr) + * + */ + (void)(zfp_field_set_type(__pyx_v_field, __pyx_v_the_type)); + + /* "numcodecs/zfp.pyx":159 + * + * zfp_field_set_type(field,the_type) + * zfp_field_set_pointer(field,source_ptr) # <<<<<<<<<<<<<< + * + * # convert F order array to C order array + */ + zfp_field_set_pointer(__pyx_v_field, __pyx_v_source_ptr); + + /* "numcodecs/zfp.pyx":162 + * + * # convert F order array to C order array + * if input_array.flags.f_contiguous: # <<<<<<<<<<<<<< + * input_array=np.ascontiguousarray(input_array) + * + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_array, __pyx_n_s_flags); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 162, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_f_contiguous); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 162, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 162, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_5) { + + /* "numcodecs/zfp.pyx":163 + * # convert F order array to C order array + * if input_array.flags.f_contiguous: + * input_array=np.ascontiguousarray(input_array) # <<<<<<<<<<<<<< + * + * # determine the dimensions and set dimensions of C order array + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 163, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_ascontiguousarray); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 163, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = NULL; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) { + __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1); + if (likely(__pyx_t_2)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); + __Pyx_INCREF(__pyx_t_2); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_1, function); + } + } + __pyx_t_4 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_2, __pyx_v_input_array) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_input_array); + __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; + if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 163, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF_SET(__pyx_v_input_array, __pyx_t_4); + __pyx_t_4 = 0; + + /* "numcodecs/zfp.pyx":162 + * + * # convert F order array to C order array + * if input_array.flags.f_contiguous: # <<<<<<<<<<<<<< + * input_array=np.ascontiguousarray(input_array) + * + */ + } + + /* "numcodecs/zfp.pyx":166 + * + * # determine the dimensions and set dimensions of C order array + * if input_array.ndim == 1: # <<<<<<<<<<<<<< + * zfp_field_set_size_1d(field,input_array.shape[0]) + * zfp_field_set_stride_1d(field,input_array.strides[0]/input_array.itemsize) + */ + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_array, __pyx_n_s_ndim); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 166, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_1 = __Pyx_PyInt_EqObjC(__pyx_t_4, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 166, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 166, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__pyx_t_5) { + + /* "numcodecs/zfp.pyx":167 + * # determine the dimensions and set dimensions of C order array + * if input_array.ndim == 1: + * zfp_field_set_size_1d(field,input_array.shape[0]) # <<<<<<<<<<<<<< + * zfp_field_set_stride_1d(field,input_array.strides[0]/input_array.itemsize) + * elif input_array.ndim == 2: + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_array, __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 167, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 167, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_6 = __Pyx_PyInt_As_unsigned_int(__pyx_t_4); if (unlikely((__pyx_t_6 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 167, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + zfp_field_set_size_1d(__pyx_v_field, __pyx_t_6); + + /* "numcodecs/zfp.pyx":168 + * if input_array.ndim == 1: + * zfp_field_set_size_1d(field,input_array.shape[0]) + * zfp_field_set_stride_1d(field,input_array.strides[0]/input_array.itemsize) # <<<<<<<<<<<<<< + * elif input_array.ndim == 2: + * zfp_field_set_size_2d(field,input_array.shape[1],input_array.shape[0]) + */ + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_array, __pyx_n_s_strides); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 168, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_1 = __Pyx_GetItemInt(__pyx_t_4, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 168, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_array, __pyx_n_s_itemsize); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 168, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_2 = __Pyx_PyNumber_Divide(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 168, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 168, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + zfp_field_set_stride_1d(__pyx_v_field, __pyx_t_7); + + /* "numcodecs/zfp.pyx":166 + * + * # determine the dimensions and set dimensions of C order array + * if input_array.ndim == 1: # <<<<<<<<<<<<<< + * zfp_field_set_size_1d(field,input_array.shape[0]) + * zfp_field_set_stride_1d(field,input_array.strides[0]/input_array.itemsize) + */ + goto __pyx_L5; + } + + /* "numcodecs/zfp.pyx":169 + * zfp_field_set_size_1d(field,input_array.shape[0]) + * zfp_field_set_stride_1d(field,input_array.strides[0]/input_array.itemsize) + * elif input_array.ndim == 2: # <<<<<<<<<<<<<< + * zfp_field_set_size_2d(field,input_array.shape[1],input_array.shape[0]) + * zfp_field_set_stride_2d(field,input_array.strides[1]/input_array.itemsize,input_array.strides[0]/input_array.itemsize) + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_array, __pyx_n_s_ndim); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 169, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = __Pyx_PyInt_EqObjC(__pyx_t_2, __pyx_int_2, 2, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 169, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 169, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_5) { + + /* "numcodecs/zfp.pyx":170 + * zfp_field_set_stride_1d(field,input_array.strides[0]/input_array.itemsize) + * elif input_array.ndim == 2: + * zfp_field_set_size_2d(field,input_array.shape[1],input_array.shape[0]) # <<<<<<<<<<<<<< + * zfp_field_set_stride_2d(field,input_array.strides[1]/input_array.itemsize,input_array.strides[0]/input_array.itemsize) + * elif input_array.ndim == 3: + */ + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_array, __pyx_n_s_shape); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 170, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_4, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 170, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_6 = __Pyx_PyInt_As_unsigned_int(__pyx_t_2); if (unlikely((__pyx_t_6 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 170, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_array, __pyx_n_s_shape); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 170, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_2, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 170, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_8 = __Pyx_PyInt_As_unsigned_int(__pyx_t_4); if (unlikely((__pyx_t_8 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 170, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + zfp_field_set_size_2d(__pyx_v_field, __pyx_t_6, __pyx_t_8); + + /* "numcodecs/zfp.pyx":171 + * elif input_array.ndim == 2: + * zfp_field_set_size_2d(field,input_array.shape[1],input_array.shape[0]) + * zfp_field_set_stride_2d(field,input_array.strides[1]/input_array.itemsize,input_array.strides[0]/input_array.itemsize) # <<<<<<<<<<<<<< + * elif input_array.ndim == 3: + * zfp_field_set_size_3d(field,input_array.shape[2],input_array.shape[1],input_array.shape[0]) + */ + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_array, __pyx_n_s_strides); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 171, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_4, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 171, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_array, __pyx_n_s_itemsize); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 171, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_1 = __Pyx_PyNumber_Divide(__pyx_t_2, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 171, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 171, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_array, __pyx_n_s_strides); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 171, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 171, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_array, __pyx_n_s_itemsize); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 171, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyNumber_Divide(__pyx_t_4, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 171, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 171, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + zfp_field_set_stride_2d(__pyx_v_field, __pyx_t_7, __pyx_t_9); + + /* "numcodecs/zfp.pyx":169 + * zfp_field_set_size_1d(field,input_array.shape[0]) + * zfp_field_set_stride_1d(field,input_array.strides[0]/input_array.itemsize) + * elif input_array.ndim == 2: # <<<<<<<<<<<<<< + * zfp_field_set_size_2d(field,input_array.shape[1],input_array.shape[0]) + * zfp_field_set_stride_2d(field,input_array.strides[1]/input_array.itemsize,input_array.strides[0]/input_array.itemsize) + */ + goto __pyx_L5; + } + + /* "numcodecs/zfp.pyx":172 + * zfp_field_set_size_2d(field,input_array.shape[1],input_array.shape[0]) + * zfp_field_set_stride_2d(field,input_array.strides[1]/input_array.itemsize,input_array.strides[0]/input_array.itemsize) + * elif input_array.ndim == 3: # <<<<<<<<<<<<<< + * zfp_field_set_size_3d(field,input_array.shape[2],input_array.shape[1],input_array.shape[0]) + * zfp_field_set_stride_3d(field,input_array.strides[2]/input_array.itemsize,input_array.strides[1]/input_array.itemsize,input_array.strides[0]/input_array.itemsize) + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_array, __pyx_n_s_ndim); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 172, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = __Pyx_PyInt_EqObjC(__pyx_t_2, __pyx_int_3, 3, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 172, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 172, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__pyx_t_5) { + + /* "numcodecs/zfp.pyx":173 + * zfp_field_set_stride_2d(field,input_array.strides[1]/input_array.itemsize,input_array.strides[0]/input_array.itemsize) + * elif input_array.ndim == 3: + * zfp_field_set_size_3d(field,input_array.shape[2],input_array.shape[1],input_array.shape[0]) # <<<<<<<<<<<<<< + * zfp_field_set_stride_3d(field,input_array.strides[2]/input_array.itemsize,input_array.strides[1]/input_array.itemsize,input_array.strides[0]/input_array.itemsize) + * elif input_array.ndim == 4: + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_array, __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 173, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 173, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_8 = __Pyx_PyInt_As_unsigned_int(__pyx_t_2); if (unlikely((__pyx_t_8 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 173, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_array, __pyx_n_s_shape); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 173, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = __Pyx_GetItemInt(__pyx_t_2, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 173, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_6 = __Pyx_PyInt_As_unsigned_int(__pyx_t_1); if (unlikely((__pyx_t_6 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 173, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_array, __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 173, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 173, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_10 = __Pyx_PyInt_As_unsigned_int(__pyx_t_2); if (unlikely((__pyx_t_10 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 173, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + zfp_field_set_size_3d(__pyx_v_field, __pyx_t_8, __pyx_t_6, __pyx_t_10); + + /* "numcodecs/zfp.pyx":174 + * elif input_array.ndim == 3: + * zfp_field_set_size_3d(field,input_array.shape[2],input_array.shape[1],input_array.shape[0]) + * zfp_field_set_stride_3d(field,input_array.strides[2]/input_array.itemsize,input_array.strides[1]/input_array.itemsize,input_array.strides[0]/input_array.itemsize) # <<<<<<<<<<<<<< + * elif input_array.ndim == 4: + * zfp_field_set_size_4d(field,input_array.shape[3],input_array.shape[2],input_array.shape[1],input_array.shape[0]) + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_array, __pyx_n_s_strides); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 174, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = __Pyx_GetItemInt(__pyx_t_2, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 174, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_array, __pyx_n_s_itemsize); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 174, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = __Pyx_PyNumber_Divide(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 174, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_t_4); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 174, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_array, __pyx_n_s_strides); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 174, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_4, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 174, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_array, __pyx_n_s_itemsize); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 174, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_1 = __Pyx_PyNumber_Divide(__pyx_t_2, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 174, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 174, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_array, __pyx_n_s_strides); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 174, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 174, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_array, __pyx_n_s_itemsize); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 174, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyNumber_Divide(__pyx_t_4, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 174, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_11 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_11 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 174, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + zfp_field_set_stride_3d(__pyx_v_field, __pyx_t_9, __pyx_t_7, __pyx_t_11); + + /* "numcodecs/zfp.pyx":172 + * zfp_field_set_size_2d(field,input_array.shape[1],input_array.shape[0]) + * zfp_field_set_stride_2d(field,input_array.strides[1]/input_array.itemsize,input_array.strides[0]/input_array.itemsize) + * elif input_array.ndim == 3: # <<<<<<<<<<<<<< + * zfp_field_set_size_3d(field,input_array.shape[2],input_array.shape[1],input_array.shape[0]) + * zfp_field_set_stride_3d(field,input_array.strides[2]/input_array.itemsize,input_array.strides[1]/input_array.itemsize,input_array.strides[0]/input_array.itemsize) + */ + goto __pyx_L5; + } + + /* "numcodecs/zfp.pyx":175 + * zfp_field_set_size_3d(field,input_array.shape[2],input_array.shape[1],input_array.shape[0]) + * zfp_field_set_stride_3d(field,input_array.strides[2]/input_array.itemsize,input_array.strides[1]/input_array.itemsize,input_array.strides[0]/input_array.itemsize) + * elif input_array.ndim == 4: # <<<<<<<<<<<<<< + * zfp_field_set_size_4d(field,input_array.shape[3],input_array.shape[2],input_array.shape[1],input_array.shape[0]) + * zfp_field_set_stride_4d(field,input_array.strides[3]/input_array.itemsize,input_array.strides[2]/input_array.itemsize,input_array.strides[1]/input_array.itemsize,input_array.strides[0]/input_array.itemsize) + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_array, __pyx_n_s_ndim); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 175, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = __Pyx_PyInt_EqObjC(__pyx_t_2, __pyx_int_4, 4, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 175, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 175, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (likely(__pyx_t_5)) { + + /* "numcodecs/zfp.pyx":176 + * zfp_field_set_stride_3d(field,input_array.strides[2]/input_array.itemsize,input_array.strides[1]/input_array.itemsize,input_array.strides[0]/input_array.itemsize) + * elif input_array.ndim == 4: + * zfp_field_set_size_4d(field,input_array.shape[3],input_array.shape[2],input_array.shape[1],input_array.shape[0]) # <<<<<<<<<<<<<< + * zfp_field_set_stride_4d(field,input_array.strides[3]/input_array.itemsize,input_array.strides[2]/input_array.itemsize,input_array.strides[1]/input_array.itemsize,input_array.strides[0]/input_array.itemsize) + * else: + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_array, __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 176, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, 3, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 176, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_10 = __Pyx_PyInt_As_unsigned_int(__pyx_t_2); if (unlikely((__pyx_t_10 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 176, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_array, __pyx_n_s_shape); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 176, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = __Pyx_GetItemInt(__pyx_t_2, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 176, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_6 = __Pyx_PyInt_As_unsigned_int(__pyx_t_1); if (unlikely((__pyx_t_6 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 176, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_array, __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 176, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 176, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_8 = __Pyx_PyInt_As_unsigned_int(__pyx_t_2); if (unlikely((__pyx_t_8 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 176, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_array, __pyx_n_s_shape); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 176, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = __Pyx_GetItemInt(__pyx_t_2, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 176, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_12 = __Pyx_PyInt_As_unsigned_int(__pyx_t_1); if (unlikely((__pyx_t_12 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 176, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + zfp_field_set_size_4d(__pyx_v_field, __pyx_t_10, __pyx_t_6, __pyx_t_8, __pyx_t_12); + + /* "numcodecs/zfp.pyx":177 + * elif input_array.ndim == 4: + * zfp_field_set_size_4d(field,input_array.shape[3],input_array.shape[2],input_array.shape[1],input_array.shape[0]) + * zfp_field_set_stride_4d(field,input_array.strides[3]/input_array.itemsize,input_array.strides[2]/input_array.itemsize,input_array.strides[1]/input_array.itemsize,input_array.strides[0]/input_array.itemsize) # <<<<<<<<<<<<<< + * else: + * raise ValueError("The dimension of data should be equal or less than 4, please reshape") + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_array, __pyx_n_s_strides); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 177, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, 3, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 177, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_array, __pyx_n_s_itemsize); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 177, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = __Pyx_PyNumber_Divide(__pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 177, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_11 = __Pyx_PyInt_As_int(__pyx_t_4); if (unlikely((__pyx_t_11 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 177, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_array, __pyx_n_s_strides); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 177, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_1 = __Pyx_GetItemInt(__pyx_t_4, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 177, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_array, __pyx_n_s_itemsize); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 177, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_2 = __Pyx_PyNumber_Divide(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 177, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 177, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_array, __pyx_n_s_strides); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 177, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_2, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 177, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_array, __pyx_n_s_itemsize); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 177, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = __Pyx_PyNumber_Divide(__pyx_t_4, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 177, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 177, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_array, __pyx_n_s_strides); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 177, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 177, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_array, __pyx_n_s_itemsize); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 177, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_4 = __Pyx_PyNumber_Divide(__pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 177, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_13 = __Pyx_PyInt_As_int(__pyx_t_4); if (unlikely((__pyx_t_13 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 177, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + zfp_field_set_stride_4d(__pyx_v_field, __pyx_t_11, __pyx_t_7, __pyx_t_9, __pyx_t_13); + + /* "numcodecs/zfp.pyx":175 + * zfp_field_set_size_3d(field,input_array.shape[2],input_array.shape[1],input_array.shape[0]) + * zfp_field_set_stride_3d(field,input_array.strides[2]/input_array.itemsize,input_array.strides[1]/input_array.itemsize,input_array.strides[0]/input_array.itemsize) + * elif input_array.ndim == 4: # <<<<<<<<<<<<<< + * zfp_field_set_size_4d(field,input_array.shape[3],input_array.shape[2],input_array.shape[1],input_array.shape[0]) + * zfp_field_set_stride_4d(field,input_array.strides[3]/input_array.itemsize,input_array.strides[2]/input_array.itemsize,input_array.strides[1]/input_array.itemsize,input_array.strides[0]/input_array.itemsize) + */ + goto __pyx_L5; + } + + /* "numcodecs/zfp.pyx":179 + * zfp_field_set_stride_4d(field,input_array.strides[3]/input_array.itemsize,input_array.strides[2]/input_array.itemsize,input_array.strides[1]/input_array.itemsize,input_array.strides[0]/input_array.itemsize) + * else: + * raise ValueError("The dimension of data should be equal or less than 4, please reshape") # <<<<<<<<<<<<<< + * # setup compression mode + * zfp=zfp_stream_open(NULL) + */ + /*else*/ { + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 179, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_Raise(__pyx_t_4, 0, 0, 0); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __PYX_ERR(0, 179, __pyx_L1_error) + } + __pyx_L5:; + + /* "numcodecs/zfp.pyx":181 + * raise ValueError("The dimension of data should be equal or less than 4, please reshape") + * # setup compression mode + * zfp=zfp_stream_open(NULL) # <<<<<<<<<<<<<< + * if zfpmode == 'a': + * zfp_stream_set_accuracy(zfp,method['tol']) + */ + __pyx_v_zfp = zfp_stream_open(NULL); + + /* "numcodecs/zfp.pyx":182 + * # setup compression mode + * zfp=zfp_stream_open(NULL) + * if zfpmode == 'a': # <<<<<<<<<<<<<< + * zfp_stream_set_accuracy(zfp,method['tol']) + * elif zfpmode == 'p': + */ + __pyx_t_5 = (__Pyx_PyString_Equals(__pyx_v_zfpmode, __pyx_n_s_a, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 182, __pyx_L1_error) + if (__pyx_t_5) { + + /* "numcodecs/zfp.pyx":183 + * zfp=zfp_stream_open(NULL) + * if zfpmode == 'a': + * zfp_stream_set_accuracy(zfp,method['tol']) # <<<<<<<<<<<<<< + * elif zfpmode == 'p': + * zfp_stream_set_precision(zfp,method['prec']) + */ + __pyx_t_4 = __Pyx_PyObject_Dict_GetItem(__pyx_v_method, __pyx_n_s_tol); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 183, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_14 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_14 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 183, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + (void)(zfp_stream_set_accuracy(__pyx_v_zfp, __pyx_t_14)); + + /* "numcodecs/zfp.pyx":182 + * # setup compression mode + * zfp=zfp_stream_open(NULL) + * if zfpmode == 'a': # <<<<<<<<<<<<<< + * zfp_stream_set_accuracy(zfp,method['tol']) + * elif zfpmode == 'p': + */ + goto __pyx_L6; + } + + /* "numcodecs/zfp.pyx":184 + * if zfpmode == 'a': + * zfp_stream_set_accuracy(zfp,method['tol']) + * elif zfpmode == 'p': # <<<<<<<<<<<<<< + * zfp_stream_set_precision(zfp,method['prec']) + * elif zfpmode == 'r': + */ + __pyx_t_5 = (__Pyx_PyString_Equals(__pyx_v_zfpmode, __pyx_n_s_p, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 184, __pyx_L1_error) + if (__pyx_t_5) { + + /* "numcodecs/zfp.pyx":185 + * zfp_stream_set_accuracy(zfp,method['tol']) + * elif zfpmode == 'p': + * zfp_stream_set_precision(zfp,method['prec']) # <<<<<<<<<<<<<< + * elif zfpmode == 'r': + * zfp_stream_set_rate(zfp,method['rate'],the_type,input_array.ndim,0) + */ + __pyx_t_4 = __Pyx_PyObject_Dict_GetItem(__pyx_v_method, __pyx_n_s_prec); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 185, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_12 = __Pyx_PyInt_As_unsigned_int(__pyx_t_4); if (unlikely((__pyx_t_12 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 185, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + (void)(zfp_stream_set_precision(__pyx_v_zfp, __pyx_t_12)); + + /* "numcodecs/zfp.pyx":184 + * if zfpmode == 'a': + * zfp_stream_set_accuracy(zfp,method['tol']) + * elif zfpmode == 'p': # <<<<<<<<<<<<<< + * zfp_stream_set_precision(zfp,method['prec']) + * elif zfpmode == 'r': + */ + goto __pyx_L6; + } + + /* "numcodecs/zfp.pyx":186 + * elif zfpmode == 'p': + * zfp_stream_set_precision(zfp,method['prec']) + * elif zfpmode == 'r': # <<<<<<<<<<<<<< + * zfp_stream_set_rate(zfp,method['rate'],the_type,input_array.ndim,0) + * elif zfpmode =='c': + */ + __pyx_t_5 = (__Pyx_PyString_Equals(__pyx_v_zfpmode, __pyx_n_s_r, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 186, __pyx_L1_error) + if (__pyx_t_5) { + + /* "numcodecs/zfp.pyx":187 + * zfp_stream_set_precision(zfp,method['prec']) + * elif zfpmode == 'r': + * zfp_stream_set_rate(zfp,method['rate'],the_type,input_array.ndim,0) # <<<<<<<<<<<<<< + * elif zfpmode =='c': + * zfp_stream_set_params(zfp,method['minbits'],method['maxbits'],method['maxprec'],method['minexp']) + */ + __pyx_t_4 = __Pyx_PyObject_Dict_GetItem(__pyx_v_method, __pyx_n_s_rate); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 187, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_14 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_14 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 187, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_array, __pyx_n_s_ndim); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 187, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_12 = __Pyx_PyInt_As_unsigned_int(__pyx_t_4); if (unlikely((__pyx_t_12 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 187, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + (void)(zfp_stream_set_rate(__pyx_v_zfp, __pyx_t_14, __pyx_v_the_type, __pyx_t_12, 0)); + + /* "numcodecs/zfp.pyx":186 + * elif zfpmode == 'p': + * zfp_stream_set_precision(zfp,method['prec']) + * elif zfpmode == 'r': # <<<<<<<<<<<<<< + * zfp_stream_set_rate(zfp,method['rate'],the_type,input_array.ndim,0) + * elif zfpmode =='c': + */ + goto __pyx_L6; + } + + /* "numcodecs/zfp.pyx":188 + * elif zfpmode == 'r': + * zfp_stream_set_rate(zfp,method['rate'],the_type,input_array.ndim,0) + * elif zfpmode =='c': # <<<<<<<<<<<<<< + * zfp_stream_set_params(zfp,method['minbits'],method['maxbits'],method['maxprec'],method['minexp']) + * else: + */ + __pyx_t_5 = (__Pyx_PyString_Equals(__pyx_v_zfpmode, __pyx_n_s_c, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 188, __pyx_L1_error) + if (likely(__pyx_t_5)) { + + /* "numcodecs/zfp.pyx":189 + * zfp_stream_set_rate(zfp,method['rate'],the_type,input_array.ndim,0) + * elif zfpmode =='c': + * zfp_stream_set_params(zfp,method['minbits'],method['maxbits'],method['maxprec'],method['minexp']) # <<<<<<<<<<<<<< + * else: + * raise ValueError('Must specify zfp mode') + */ + __pyx_t_4 = __Pyx_PyObject_Dict_GetItem(__pyx_v_method, __pyx_n_s_minbits); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 189, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_12 = __Pyx_PyInt_As_unsigned_int(__pyx_t_4); if (unlikely((__pyx_t_12 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 189, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_Dict_GetItem(__pyx_v_method, __pyx_n_s_maxbits); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 189, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_8 = __Pyx_PyInt_As_unsigned_int(__pyx_t_4); if (unlikely((__pyx_t_8 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 189, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_Dict_GetItem(__pyx_v_method, __pyx_n_s_maxprec); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 189, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_6 = __Pyx_PyInt_As_unsigned_int(__pyx_t_4); if (unlikely((__pyx_t_6 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 189, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyObject_Dict_GetItem(__pyx_v_method, __pyx_n_s_minexp); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 189, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_13 = __Pyx_PyInt_As_int(__pyx_t_4); if (unlikely((__pyx_t_13 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 189, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + (void)(zfp_stream_set_params(__pyx_v_zfp, __pyx_t_12, __pyx_t_8, __pyx_t_6, __pyx_t_13)); + + /* "numcodecs/zfp.pyx":188 + * elif zfpmode == 'r': + * zfp_stream_set_rate(zfp,method['rate'],the_type,input_array.ndim,0) + * elif zfpmode =='c': # <<<<<<<<<<<<<< + * zfp_stream_set_params(zfp,method['minbits'],method['maxbits'],method['maxprec'],method['minexp']) + * else: + */ + goto __pyx_L6; + } + + /* "numcodecs/zfp.pyx":191 + * zfp_stream_set_params(zfp,method['minbits'],method['maxbits'],method['maxprec'],method['minexp']) + * else: + * raise ValueError('Must specify zfp mode') # <<<<<<<<<<<<<< + * + * # setup destination + */ + /*else*/ { + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__3, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 191, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_Raise(__pyx_t_4, 0, 0, 0); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __PYX_ERR(0, 191, __pyx_L1_error) + } + __pyx_L6:; + + /* "numcodecs/zfp.pyx":194 + * + * # setup destination + * dest_size = zfp_stream_maximum_size(zfp,field) # <<<<<<<<<<<<<< + * dest = PyBytes_FromStringAndSize(NULL,dest_size) + * dest_ptr = PyBytes_AS_STRING(dest) + */ + __pyx_v_dest_size = zfp_stream_maximum_size(__pyx_v_zfp, __pyx_v_field); + + /* "numcodecs/zfp.pyx":195 + * # setup destination + * dest_size = zfp_stream_maximum_size(zfp,field) + * dest = PyBytes_FromStringAndSize(NULL,dest_size) # <<<<<<<<<<<<<< + * dest_ptr = PyBytes_AS_STRING(dest) + * stream = stream_open(dest_ptr,dest_size) + */ + __pyx_t_4 = PyBytes_FromStringAndSize(NULL, __pyx_v_dest_size); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 195, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_v_dest = ((PyObject*)__pyx_t_4); + __pyx_t_4 = 0; + + /* "numcodecs/zfp.pyx":196 + * dest_size = zfp_stream_maximum_size(zfp,field) + * dest = PyBytes_FromStringAndSize(NULL,dest_size) + * dest_ptr = PyBytes_AS_STRING(dest) # <<<<<<<<<<<<<< + * stream = stream_open(dest_ptr,dest_size) + * zfp_stream_set_bit_stream(zfp,stream) + */ + __pyx_v_dest_ptr = PyBytes_AS_STRING(__pyx_v_dest); + + /* "numcodecs/zfp.pyx":197 + * dest = PyBytes_FromStringAndSize(NULL,dest_size) + * dest_ptr = PyBytes_AS_STRING(dest) + * stream = stream_open(dest_ptr,dest_size) # <<<<<<<<<<<<<< + * zfp_stream_set_bit_stream(zfp,stream) + * # currently only use serial execution + */ + __pyx_v_stream = stream_open(__pyx_v_dest_ptr, __pyx_v_dest_size); + + /* "numcodecs/zfp.pyx":198 + * dest_ptr = PyBytes_AS_STRING(dest) + * stream = stream_open(dest_ptr,dest_size) + * zfp_stream_set_bit_stream(zfp,stream) # <<<<<<<<<<<<<< + * # currently only use serial execution + * zfp_stream_set_execution(zfp,zfp_exec_serial) + */ + zfp_stream_set_bit_stream(__pyx_v_zfp, __pyx_v_stream); + + /* "numcodecs/zfp.pyx":200 + * zfp_stream_set_bit_stream(zfp,stream) + * # currently only use serial execution + * zfp_stream_set_execution(zfp,zfp_exec_serial) # <<<<<<<<<<<<<< + * + * # perform compression + */ + (void)(zfp_stream_set_execution(__pyx_v_zfp, zfp_exec_serial)); + + /* "numcodecs/zfp.pyx":203 + * + * # perform compression + * ret = zfp_write_header(zfp,field,ZFP_HEADER_FULL) # <<<<<<<<<<<<<< + * if not ret: + * raise RuntimeError("zfp_write_header failed") + */ + __pyx_v_ret = zfp_write_header(__pyx_v_zfp, __pyx_v_field, ZFP_HEADER_FULL); + + /* "numcodecs/zfp.pyx":204 + * # perform compression + * ret = zfp_write_header(zfp,field,ZFP_HEADER_FULL) + * if not ret: # <<<<<<<<<<<<<< + * raise RuntimeError("zfp_write_header failed") + * compressed_size = zfp_compress(zfp,field) + */ + __pyx_t_5 = ((!(__pyx_v_ret != 0)) != 0); + if (unlikely(__pyx_t_5)) { + + /* "numcodecs/zfp.pyx":205 + * ret = zfp_write_header(zfp,field,ZFP_HEADER_FULL) + * if not ret: + * raise RuntimeError("zfp_write_header failed") # <<<<<<<<<<<<<< + * compressed_size = zfp_compress(zfp,field) + * if not compressed_size: + */ + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_RuntimeError, __pyx_tuple__4, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 205, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_Raise(__pyx_t_4, 0, 0, 0); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __PYX_ERR(0, 205, __pyx_L1_error) + + /* "numcodecs/zfp.pyx":204 + * # perform compression + * ret = zfp_write_header(zfp,field,ZFP_HEADER_FULL) + * if not ret: # <<<<<<<<<<<<<< + * raise RuntimeError("zfp_write_header failed") + * compressed_size = zfp_compress(zfp,field) + */ + } + + /* "numcodecs/zfp.pyx":206 + * if not ret: + * raise RuntimeError("zfp_write_header failed") + * compressed_size = zfp_compress(zfp,field) # <<<<<<<<<<<<<< + * if not compressed_size: + * raise RuntimeError("zfp_compress is failed") + */ + __pyx_v_compressed_size = zfp_compress(__pyx_v_zfp, __pyx_v_field); + + /* "numcodecs/zfp.pyx":207 + * raise RuntimeError("zfp_write_header failed") + * compressed_size = zfp_compress(zfp,field) + * if not compressed_size: # <<<<<<<<<<<<<< + * raise RuntimeError("zfp_compress is failed") + * + */ + __pyx_t_5 = ((!(__pyx_v_compressed_size != 0)) != 0); + if (unlikely(__pyx_t_5)) { + + /* "numcodecs/zfp.pyx":208 + * compressed_size = zfp_compress(zfp,field) + * if not compressed_size: + * raise RuntimeError("zfp_compress is failed") # <<<<<<<<<<<<<< + * + * # release buffers + */ + __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_RuntimeError, __pyx_tuple__5, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 208, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_Raise(__pyx_t_4, 0, 0, 0); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __PYX_ERR(0, 208, __pyx_L1_error) + + /* "numcodecs/zfp.pyx":207 + * raise RuntimeError("zfp_write_header failed") + * compressed_size = zfp_compress(zfp,field) + * if not compressed_size: # <<<<<<<<<<<<<< + * raise RuntimeError("zfp_compress is failed") + * + */ + } + + /* "numcodecs/zfp.pyx":211 + * + * # release buffers + * source_buffer.release() # <<<<<<<<<<<<<< + * zfp_field_free(field) + * zfp_stream_close(zfp) + */ + __pyx_t_4 = ((struct __pyx_vtabstruct_9numcodecs_10compat_ext_Buffer *)__pyx_v_source_buffer->__pyx_vtab)->release(__pyx_v_source_buffer, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 211, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "numcodecs/zfp.pyx":212 + * # release buffers + * source_buffer.release() + * zfp_field_free(field) # <<<<<<<<<<<<<< + * zfp_stream_close(zfp) + * stream_close(stream) + */ + zfp_field_free(__pyx_v_field); + + /* "numcodecs/zfp.pyx":213 + * source_buffer.release() + * zfp_field_free(field) + * zfp_stream_close(zfp) # <<<<<<<<<<<<<< + * stream_close(stream) + * + */ + zfp_stream_close(__pyx_v_zfp); + + /* "numcodecs/zfp.pyx":214 + * zfp_field_free(field) + * zfp_stream_close(zfp) + * stream_close(stream) # <<<<<<<<<<<<<< + * + * return dest[:compressed_size] + */ + (void)(stream_close(__pyx_v_stream)); + + /* "numcodecs/zfp.pyx":216 + * stream_close(stream) + * + * return dest[:compressed_size] # <<<<<<<<<<<<<< + * + * def decompress(source,dest=None): + */ + __Pyx_XDECREF(__pyx_r); + if (unlikely(__pyx_v_dest == Py_None)) { + PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); + __PYX_ERR(0, 216, __pyx_L1_error) + } + __pyx_t_4 = PySequence_GetSlice(__pyx_v_dest, 0, __pyx_v_compressed_size); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 216, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_r = __pyx_t_4; + __pyx_t_4 = 0; + goto __pyx_L0; + + /* "numcodecs/zfp.pyx":104 + * + * + * def compress(input_array,method): # <<<<<<<<<<<<<< + * """Compress data. + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_AddTraceback("numcodecs.zfp.compress", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_source_buffer); + __Pyx_XDECREF(__pyx_v_dest); + __Pyx_XDECREF(__pyx_v_zfpmode); + __Pyx_XDECREF(__pyx_v_input_array); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "numcodecs/zfp.pyx":218 + * return dest[:compressed_size] + * + * def decompress(source,dest=None): # <<<<<<<<<<<<<< + * """Decompress data. + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_9numcodecs_3zfp_3decompress(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static char __pyx_doc_9numcodecs_3zfp_2decompress[] = "Decompress data.\n\n Parameters\n ----------\n source : bytes-like\n Compressed data, including zfp header. Can be any object supporting the\n buffer protocol\n dest : array-like, optional\n \n Returns \n -------\n dest : array-like\n Object containing decompressed data\n \n "; +static PyMethodDef __pyx_mdef_9numcodecs_3zfp_3decompress = {"decompress", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_9numcodecs_3zfp_3decompress, METH_VARARGS|METH_KEYWORDS, __pyx_doc_9numcodecs_3zfp_2decompress}; +static PyObject *__pyx_pw_9numcodecs_3zfp_3decompress(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_source = 0; + PyObject *__pyx_v_dest = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("decompress (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_source,&__pyx_n_s_dest,0}; + PyObject* values[2] = {0,0}; + values[1] = ((PyObject *)Py_None); + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_source)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dest); + if (value) { values[1] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "decompress") < 0)) __PYX_ERR(0, 218, __pyx_L3_error) + } + } else { + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_source = values[0]; + __pyx_v_dest = values[1]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("decompress", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 218, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("numcodecs.zfp.decompress", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_9numcodecs_3zfp_2decompress(__pyx_self, __pyx_v_source, __pyx_v_dest); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_9numcodecs_3zfp_2decompress(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_source, PyObject *__pyx_v_dest) { + zfp_stream *__pyx_v_zfp; + bitstream *__pyx_v_stream; + zfp_field *__pyx_v_field; + struct __pyx_obj_9numcodecs_10compat_ext_Buffer *__pyx_v_source_buffer = 0; + struct __pyx_obj_9numcodecs_10compat_ext_Buffer *__pyx_v_dest_buffer = 0; + char *__pyx_v_source_ptr; + char *__pyx_v_dest_ptr; + int __pyx_v_source_size; + size_t __pyx_v_ret; + PyObject *__pyx_v_the_type = NULL; + PyObject *__pyx_v_type_size = NULL; + unsigned int __pyx_v_nx; + unsigned int __pyx_v_ny; + unsigned int __pyx_v_nz; + unsigned int __pyx_v_nw; + PyObject *__pyx_v_datashape = NULL; + PyObject *__pyx_v_arr = NULL; + PyObject *__pyx_v_buf_shape = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + char *__pyx_t_3; + size_t __pyx_t_4; + int __pyx_t_5; + unsigned int __pyx_t_6; + unsigned int __pyx_t_7; + unsigned int __pyx_t_8; + unsigned int __pyx_t_9; + long __pyx_t_10; + long __pyx_t_11; + long __pyx_t_12; + long __pyx_t_13; + int __pyx_t_14; + Py_ssize_t __pyx_t_15; + PyObject *__pyx_t_16 = NULL; + PyObject *__pyx_t_17 = NULL; + PyObject *__pyx_t_18 = NULL; + __Pyx_RefNannySetupContext("decompress", 0); + __Pyx_INCREF(__pyx_v_dest); + + /* "numcodecs/zfp.pyx":239 + * zfp_field* field + * Buffer source_buffer + * Buffer dest_buffer = None # <<<<<<<<<<<<<< + * char *source_ptr + * char *dest_ptr + */ + __Pyx_INCREF(Py_None); + __pyx_v_dest_buffer = ((struct __pyx_obj_9numcodecs_10compat_ext_Buffer *)Py_None); + + /* "numcodecs/zfp.pyx":246 + * + * # setup source buffer + * source_buffer = Buffer(source, PyBUF_ANY_CONTIGUOUS) # <<<<<<<<<<<<<< + * source_ptr = source_buffer.ptr + * source_size = source_buffer.nbytes + */ + __pyx_t_1 = __Pyx_PyInt_From_int(PyBUF_ANY_CONTIGUOUS); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 246, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 246, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_v_source); + __Pyx_GIVEREF(__pyx_v_source); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_source); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1); + __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_9numcodecs_10compat_ext_Buffer), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 246, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v_source_buffer = ((struct __pyx_obj_9numcodecs_10compat_ext_Buffer *)__pyx_t_1); + __pyx_t_1 = 0; + + /* "numcodecs/zfp.pyx":247 + * # setup source buffer + * source_buffer = Buffer(source, PyBUF_ANY_CONTIGUOUS) + * source_ptr = source_buffer.ptr # <<<<<<<<<<<<<< + * source_size = source_buffer.nbytes + * + */ + __pyx_t_3 = __pyx_v_source_buffer->ptr; + __pyx_v_source_ptr = __pyx_t_3; + + /* "numcodecs/zfp.pyx":248 + * source_buffer = Buffer(source, PyBUF_ANY_CONTIGUOUS) + * source_ptr = source_buffer.ptr + * source_size = source_buffer.nbytes # <<<<<<<<<<<<<< + * + * # setup zfp object + */ + __pyx_t_4 = __pyx_v_source_buffer->nbytes; + __pyx_v_source_size = __pyx_t_4; + + /* "numcodecs/zfp.pyx":251 + * + * # setup zfp object + * field = zfp_field_alloc() # <<<<<<<<<<<<<< + * zfp = zfp_stream_open(NULL) + * stream = stream_open(source_ptr,source_size) + */ + __pyx_v_field = zfp_field_alloc(); + + /* "numcodecs/zfp.pyx":252 + * # setup zfp object + * field = zfp_field_alloc() + * zfp = zfp_stream_open(NULL) # <<<<<<<<<<<<<< + * stream = stream_open(source_ptr,source_size) + * zfp_stream_set_bit_stream(zfp,stream) + */ + __pyx_v_zfp = zfp_stream_open(NULL); + + /* "numcodecs/zfp.pyx":253 + * field = zfp_field_alloc() + * zfp = zfp_stream_open(NULL) + * stream = stream_open(source_ptr,source_size) # <<<<<<<<<<<<<< + * zfp_stream_set_bit_stream(zfp,stream) + * zfp_stream_rewind(zfp) + */ + __pyx_v_stream = stream_open(__pyx_v_source_ptr, __pyx_v_source_size); + + /* "numcodecs/zfp.pyx":254 + * zfp = zfp_stream_open(NULL) + * stream = stream_open(source_ptr,source_size) + * zfp_stream_set_bit_stream(zfp,stream) # <<<<<<<<<<<<<< + * zfp_stream_rewind(zfp) + * + */ + zfp_stream_set_bit_stream(__pyx_v_zfp, __pyx_v_stream); + + /* "numcodecs/zfp.pyx":255 + * stream = stream_open(source_ptr,source_size) + * zfp_stream_set_bit_stream(zfp,stream) + * zfp_stream_rewind(zfp) # <<<<<<<<<<<<<< + * + * # read zfp header + */ + zfp_stream_rewind(__pyx_v_zfp); + + /* "numcodecs/zfp.pyx":258 + * + * # read zfp header + * ret = zfp_read_header(zfp,field,ZFP_HEADER_FULL); # <<<<<<<<<<<<<< + * if not ret: + * raise RuntimeError("zfp_read_header failed") + */ + __pyx_v_ret = zfp_read_header(__pyx_v_zfp, __pyx_v_field, ZFP_HEADER_FULL); + + /* "numcodecs/zfp.pyx":259 + * # read zfp header + * ret = zfp_read_header(zfp,field,ZFP_HEADER_FULL); + * if not ret: # <<<<<<<<<<<<<< + * raise RuntimeError("zfp_read_header failed") + * + */ + __pyx_t_5 = ((!(__pyx_v_ret != 0)) != 0); + if (unlikely(__pyx_t_5)) { + + /* "numcodecs/zfp.pyx":260 + * ret = zfp_read_header(zfp,field,ZFP_HEADER_FULL); + * if not ret: + * raise RuntimeError("zfp_read_header failed") # <<<<<<<<<<<<<< + * + * # determine destination data type + */ + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_RuntimeError, __pyx_tuple__6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 260, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(0, 260, __pyx_L1_error) + + /* "numcodecs/zfp.pyx":259 + * # read zfp header + * ret = zfp_read_header(zfp,field,ZFP_HEADER_FULL); + * if not ret: # <<<<<<<<<<<<<< + * raise RuntimeError("zfp_read_header failed") + * + */ + } + + /* "numcodecs/zfp.pyx":263 + * + * # determine destination data type + * if field._type == zfp_type_float: # <<<<<<<<<<<<<< + * the_type = np.float32 + * type_size = 4 + */ + switch (__pyx_v_field->type) { + case zfp_type_float: + + /* "numcodecs/zfp.pyx":264 + * # determine destination data type + * if field._type == zfp_type_float: + * the_type = np.float32 # <<<<<<<<<<<<<< + * type_size = 4 + * elif field._type == zfp_type_double: + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 264, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 264, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_the_type = __pyx_t_2; + __pyx_t_2 = 0; + + /* "numcodecs/zfp.pyx":265 + * if field._type == zfp_type_float: + * the_type = np.float32 + * type_size = 4 # <<<<<<<<<<<<<< + * elif field._type == zfp_type_double: + * the_type = np.float64 + */ + __Pyx_INCREF(__pyx_int_4); + __pyx_v_type_size = __pyx_int_4; + + /* "numcodecs/zfp.pyx":263 + * + * # determine destination data type + * if field._type == zfp_type_float: # <<<<<<<<<<<<<< + * the_type = np.float32 + * type_size = 4 + */ + break; + case zfp_type_double: + + /* "numcodecs/zfp.pyx":267 + * type_size = 4 + * elif field._type == zfp_type_double: + * the_type = np.float64 # <<<<<<<<<<<<<< + * type_size = 8 + * elif field._type == zfp_type_int32: + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 267, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_float64); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 267, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v_the_type = __pyx_t_1; + __pyx_t_1 = 0; + + /* "numcodecs/zfp.pyx":268 + * elif field._type == zfp_type_double: + * the_type = np.float64 + * type_size = 8 # <<<<<<<<<<<<<< + * elif field._type == zfp_type_int32: + * the_type = np.int32 + */ + __Pyx_INCREF(__pyx_int_8); + __pyx_v_type_size = __pyx_int_8; + + /* "numcodecs/zfp.pyx":266 + * the_type = np.float32 + * type_size = 4 + * elif field._type == zfp_type_double: # <<<<<<<<<<<<<< + * the_type = np.float64 + * type_size = 8 + */ + break; + case zfp_type_int32: + + /* "numcodecs/zfp.pyx":270 + * type_size = 8 + * elif field._type == zfp_type_int32: + * the_type = np.int32 # <<<<<<<<<<<<<< + * type_size = 4 + * else: + */ + __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 270, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_int32); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 270, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_the_type = __pyx_t_2; + __pyx_t_2 = 0; + + /* "numcodecs/zfp.pyx":271 + * elif field._type == zfp_type_int32: + * the_type = np.int32 + * type_size = 4 # <<<<<<<<<<<<<< + * else: + * the_type = np.int64 + */ + __Pyx_INCREF(__pyx_int_4); + __pyx_v_type_size = __pyx_int_4; + + /* "numcodecs/zfp.pyx":269 + * the_type = np.float64 + * type_size = 8 + * elif field._type == zfp_type_int32: # <<<<<<<<<<<<<< + * the_type = np.int32 + * type_size = 4 + */ + break; + default: + + /* "numcodecs/zfp.pyx":273 + * type_size = 4 + * else: + * the_type = np.int64 # <<<<<<<<<<<<<< + * type_size = 8 + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 273, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_int64); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 273, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v_the_type = __pyx_t_1; + __pyx_t_1 = 0; + + /* "numcodecs/zfp.pyx":274 + * else: + * the_type = np.int64 + * type_size = 8 # <<<<<<<<<<<<<< + * + * # determine data dimension + */ + __Pyx_INCREF(__pyx_int_8); + __pyx_v_type_size = __pyx_int_8; + break; + } + + /* "numcodecs/zfp.pyx":277 + * + * # determine data dimension + * nx,ny,nz,nw = field.nx,field.ny,field.nz,field.nw # <<<<<<<<<<<<<< + * datashape = (nx if nx != 0 else 1)* (ny if ny != 0 else 1) \ + * *(nz if nz != 0 else 1)* (nw if nw != 0 else 1) + */ + __pyx_t_6 = __pyx_v_field->nx; + __pyx_t_7 = __pyx_v_field->ny; + __pyx_t_8 = __pyx_v_field->nz; + __pyx_t_9 = __pyx_v_field->nw; + __pyx_v_nx = __pyx_t_6; + __pyx_v_ny = __pyx_t_7; + __pyx_v_nz = __pyx_t_8; + __pyx_v_nw = __pyx_t_9; + + /* "numcodecs/zfp.pyx":278 + * # determine data dimension + * nx,ny,nz,nw = field.nx,field.ny,field.nz,field.nw + * datashape = (nx if nx != 0 else 1)* (ny if ny != 0 else 1) \ # <<<<<<<<<<<<<< + * *(nz if nz != 0 else 1)* (nw if nw != 0 else 1) + * + */ + if (((__pyx_v_nx != 0) != 0)) { + __pyx_t_10 = __pyx_v_nx; + } else { + __pyx_t_10 = 1; + } + if (((__pyx_v_ny != 0) != 0)) { + __pyx_t_11 = __pyx_v_ny; + } else { + __pyx_t_11 = 1; + } + + /* "numcodecs/zfp.pyx":279 + * nx,ny,nz,nw = field.nx,field.ny,field.nz,field.nw + * datashape = (nx if nx != 0 else 1)* (ny if ny != 0 else 1) \ + * *(nz if nz != 0 else 1)* (nw if nw != 0 else 1) # <<<<<<<<<<<<<< + * + * # currently only serial exeution available + */ + if (((__pyx_v_nz != 0) != 0)) { + __pyx_t_12 = __pyx_v_nz; + } else { + __pyx_t_12 = 1; + } + if (((__pyx_v_nw != 0) != 0)) { + __pyx_t_13 = __pyx_v_nw; + } else { + __pyx_t_13 = 1; + } + __pyx_t_1 = __Pyx_PyInt_From_long((((__pyx_t_10 * __pyx_t_11) * __pyx_t_12) * __pyx_t_13)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 279, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_datashape = __pyx_t_1; + __pyx_t_1 = 0; + + /* "numcodecs/zfp.pyx":282 + * + * # currently only serial exeution available + * zfp_stream_set_execution(zfp,zfp_exec_serial) # <<<<<<<<<<<<<< + * + * # setup destination buffer + */ + (void)(zfp_stream_set_execution(__pyx_v_zfp, zfp_exec_serial)); + + /* "numcodecs/zfp.pyx":285 + * + * # setup destination buffer + * if dest is None: # <<<<<<<<<<<<<< + * dest = PyBytes_FromStringAndSize(NULL,datashape*type_size) + * dest_ptr = PyBytes_AS_STRING(dest) + */ + __pyx_t_5 = (__pyx_v_dest == Py_None); + __pyx_t_14 = (__pyx_t_5 != 0); + if (__pyx_t_14) { + + /* "numcodecs/zfp.pyx":286 + * # setup destination buffer + * if dest is None: + * dest = PyBytes_FromStringAndSize(NULL,datashape*type_size) # <<<<<<<<<<<<<< + * dest_ptr = PyBytes_AS_STRING(dest) + * else: + */ + __pyx_t_1 = PyNumber_Multiply(__pyx_v_datashape, __pyx_v_type_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 286, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_15 = __Pyx_PyIndex_AsSsize_t(__pyx_t_1); if (unlikely((__pyx_t_15 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 286, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = PyBytes_FromStringAndSize(NULL, __pyx_t_15); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 286, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF_SET(__pyx_v_dest, __pyx_t_1); + __pyx_t_1 = 0; + + /* "numcodecs/zfp.pyx":287 + * if dest is None: + * dest = PyBytes_FromStringAndSize(NULL,datashape*type_size) + * dest_ptr = PyBytes_AS_STRING(dest) # <<<<<<<<<<<<<< + * else: + * arr = ensure_contiguous_ndarray(dest) + */ + __pyx_v_dest_ptr = PyBytes_AS_STRING(__pyx_v_dest); + + /* "numcodecs/zfp.pyx":285 + * + * # setup destination buffer + * if dest is None: # <<<<<<<<<<<<<< + * dest = PyBytes_FromStringAndSize(NULL,datashape*type_size) + * dest_ptr = PyBytes_AS_STRING(dest) + */ + goto __pyx_L4; + } + + /* "numcodecs/zfp.pyx":289 + * dest_ptr = PyBytes_AS_STRING(dest) + * else: + * arr = ensure_contiguous_ndarray(dest) # <<<<<<<<<<<<<< + * dest_buffer = Buffer(arr, PyBUF_ANY_CONTIGUOUS | PyBUF_WRITEABLE) + * dest_ptr = dest_buffer.ptr + */ + /*else*/ { + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_ensure_contiguous_ndarray); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 289, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_16 = NULL; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_16 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_16)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_16); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + } + } + __pyx_t_1 = (__pyx_t_16) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_16, __pyx_v_dest) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_dest); + __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 289, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_v_arr = __pyx_t_1; + __pyx_t_1 = 0; + + /* "numcodecs/zfp.pyx":290 + * else: + * arr = ensure_contiguous_ndarray(dest) + * dest_buffer = Buffer(arr, PyBUF_ANY_CONTIGUOUS | PyBUF_WRITEABLE) # <<<<<<<<<<<<<< + * dest_ptr = dest_buffer.ptr + * zfp_field_set_pointer(field,dest_ptr) + */ + __pyx_t_1 = __Pyx_PyInt_From_int((PyBUF_ANY_CONTIGUOUS | PyBUF_WRITEABLE)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 290, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 290, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_v_arr); + __Pyx_GIVEREF(__pyx_v_arr); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_arr); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1); + __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_9numcodecs_10compat_ext_Buffer), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 290, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF_SET(__pyx_v_dest_buffer, ((struct __pyx_obj_9numcodecs_10compat_ext_Buffer *)__pyx_t_1)); + __pyx_t_1 = 0; + + /* "numcodecs/zfp.pyx":291 + * arr = ensure_contiguous_ndarray(dest) + * dest_buffer = Buffer(arr, PyBUF_ANY_CONTIGUOUS | PyBUF_WRITEABLE) + * dest_ptr = dest_buffer.ptr # <<<<<<<<<<<<<< + * zfp_field_set_pointer(field,dest_ptr) + * + */ + __pyx_t_3 = __pyx_v_dest_buffer->ptr; + __pyx_v_dest_ptr = __pyx_t_3; + } + __pyx_L4:; + + /* "numcodecs/zfp.pyx":292 + * dest_buffer = Buffer(arr, PyBUF_ANY_CONTIGUOUS | PyBUF_WRITEABLE) + * dest_ptr = dest_buffer.ptr + * zfp_field_set_pointer(field,dest_ptr) # <<<<<<<<<<<<<< + * + * # perform decompression + */ + zfp_field_set_pointer(__pyx_v_field, __pyx_v_dest_ptr); + + /* "numcodecs/zfp.pyx":295 + * + * # perform decompression + * ret = zfp_decompress(zfp,field) # <<<<<<<<<<<<<< + * if not ret: + * raise RuntimeError("decompress failed") + */ + __pyx_v_ret = zfp_decompress(__pyx_v_zfp, __pyx_v_field); + + /* "numcodecs/zfp.pyx":296 + * # perform decompression + * ret = zfp_decompress(zfp,field) + * if not ret: # <<<<<<<<<<<<<< + * raise RuntimeError("decompress failed") + * + */ + __pyx_t_14 = ((!(__pyx_v_ret != 0)) != 0); + if (unlikely(__pyx_t_14)) { + + /* "numcodecs/zfp.pyx":297 + * ret = zfp_decompress(zfp,field) + * if not ret: + * raise RuntimeError("decompress failed") # <<<<<<<<<<<<<< + * + * # release buffers + */ + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_RuntimeError, __pyx_tuple__7, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 297, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(0, 297, __pyx_L1_error) + + /* "numcodecs/zfp.pyx":296 + * # perform decompression + * ret = zfp_decompress(zfp,field) + * if not ret: # <<<<<<<<<<<<<< + * raise RuntimeError("decompress failed") + * + */ + } + + /* "numcodecs/zfp.pyx":300 + * + * # release buffers + * source_buffer.release() # <<<<<<<<<<<<<< + * if dest_buffer is not None: + * dest_buffer.release() + */ + __pyx_t_1 = ((struct __pyx_vtabstruct_9numcodecs_10compat_ext_Buffer *)__pyx_v_source_buffer->__pyx_vtab)->release(__pyx_v_source_buffer, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 300, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "numcodecs/zfp.pyx":301 + * # release buffers + * source_buffer.release() + * if dest_buffer is not None: # <<<<<<<<<<<<<< + * dest_buffer.release() + * zfp_field_free(field) + */ + __pyx_t_14 = (((PyObject *)__pyx_v_dest_buffer) != Py_None); + __pyx_t_5 = (__pyx_t_14 != 0); + if (__pyx_t_5) { + + /* "numcodecs/zfp.pyx":302 + * source_buffer.release() + * if dest_buffer is not None: + * dest_buffer.release() # <<<<<<<<<<<<<< + * zfp_field_free(field) + * zfp_stream_close(zfp) + */ + __pyx_t_1 = ((struct __pyx_vtabstruct_9numcodecs_10compat_ext_Buffer *)__pyx_v_dest_buffer->__pyx_vtab)->release(__pyx_v_dest_buffer, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 302, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "numcodecs/zfp.pyx":301 + * # release buffers + * source_buffer.release() + * if dest_buffer is not None: # <<<<<<<<<<<<<< + * dest_buffer.release() + * zfp_field_free(field) + */ + } + + /* "numcodecs/zfp.pyx":303 + * if dest_buffer is not None: + * dest_buffer.release() + * zfp_field_free(field) # <<<<<<<<<<<<<< + * zfp_stream_close(zfp) + * stream_close(stream) + */ + zfp_field_free(__pyx_v_field); + + /* "numcodecs/zfp.pyx":304 + * dest_buffer.release() + * zfp_field_free(field) + * zfp_stream_close(zfp) # <<<<<<<<<<<<<< + * stream_close(stream) + * + */ + zfp_stream_close(__pyx_v_zfp); + + /* "numcodecs/zfp.pyx":305 + * zfp_field_free(field) + * zfp_stream_close(zfp) + * stream_close(stream) # <<<<<<<<<<<<<< + * + * # reshape the buffer + */ + (void)(stream_close(__pyx_v_stream)); + + /* "numcodecs/zfp.pyx":308 + * + * # reshape the buffer + * if not ny: # <<<<<<<<<<<<<< + * buf_shape=(nx) + * elif ny and not nz: + */ + __pyx_t_5 = ((!(__pyx_v_ny != 0)) != 0); + if (__pyx_t_5) { + + /* "numcodecs/zfp.pyx":309 + * # reshape the buffer + * if not ny: + * buf_shape=(nx) # <<<<<<<<<<<<<< + * elif ny and not nz: + * buf_shape=(ny,nx) + */ + __pyx_t_1 = __Pyx_PyInt_From_unsigned_int(__pyx_v_nx); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 309, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_v_buf_shape = __pyx_t_1; + __pyx_t_1 = 0; + + /* "numcodecs/zfp.pyx":308 + * + * # reshape the buffer + * if not ny: # <<<<<<<<<<<<<< + * buf_shape=(nx) + * elif ny and not nz: + */ + goto __pyx_L7; + } + + /* "numcodecs/zfp.pyx":310 + * if not ny: + * buf_shape=(nx) + * elif ny and not nz: # <<<<<<<<<<<<<< + * buf_shape=(ny,nx) + * elif ny and nz and not nw: + */ + __pyx_t_14 = (__pyx_v_ny != 0); + if (__pyx_t_14) { + } else { + __pyx_t_5 = __pyx_t_14; + goto __pyx_L8_bool_binop_done; + } + __pyx_t_14 = ((!(__pyx_v_nz != 0)) != 0); + __pyx_t_5 = __pyx_t_14; + __pyx_L8_bool_binop_done:; + if (__pyx_t_5) { + + /* "numcodecs/zfp.pyx":311 + * buf_shape=(nx) + * elif ny and not nz: + * buf_shape=(ny,nx) # <<<<<<<<<<<<<< + * elif ny and nz and not nw: + * buf_shape=(nz,ny,nx) + */ + __pyx_t_1 = __Pyx_PyInt_From_unsigned_int(__pyx_v_ny); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 311, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyInt_From_unsigned_int(__pyx_v_nx); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 311, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_16 = PyTuple_New(2); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 311, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_16); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_16, 0, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_16, 1, __pyx_t_2); + __pyx_t_1 = 0; + __pyx_t_2 = 0; + __pyx_v_buf_shape = __pyx_t_16; + __pyx_t_16 = 0; + + /* "numcodecs/zfp.pyx":310 + * if not ny: + * buf_shape=(nx) + * elif ny and not nz: # <<<<<<<<<<<<<< + * buf_shape=(ny,nx) + * elif ny and nz and not nw: + */ + goto __pyx_L7; + } + + /* "numcodecs/zfp.pyx":312 + * elif ny and not nz: + * buf_shape=(ny,nx) + * elif ny and nz and not nw: # <<<<<<<<<<<<<< + * buf_shape=(nz,ny,nx) + * else: + */ + __pyx_t_14 = (__pyx_v_ny != 0); + if (__pyx_t_14) { + } else { + __pyx_t_5 = __pyx_t_14; + goto __pyx_L10_bool_binop_done; + } + __pyx_t_14 = (__pyx_v_nz != 0); + if (__pyx_t_14) { + } else { + __pyx_t_5 = __pyx_t_14; + goto __pyx_L10_bool_binop_done; + } + __pyx_t_14 = ((!(__pyx_v_nw != 0)) != 0); + __pyx_t_5 = __pyx_t_14; + __pyx_L10_bool_binop_done:; + if (__pyx_t_5) { + + /* "numcodecs/zfp.pyx":313 + * buf_shape=(ny,nx) + * elif ny and nz and not nw: + * buf_shape=(nz,ny,nx) # <<<<<<<<<<<<<< + * else: + * buf_shape=(nw,nz,ny,nx) + */ + __pyx_t_16 = __Pyx_PyInt_From_unsigned_int(__pyx_v_nz); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 313, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_16); + __pyx_t_2 = __Pyx_PyInt_From_unsigned_int(__pyx_v_ny); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 313, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = __Pyx_PyInt_From_unsigned_int(__pyx_v_nx); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 313, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_17 = PyTuple_New(3); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 313, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_17); + __Pyx_GIVEREF(__pyx_t_16); + PyTuple_SET_ITEM(__pyx_t_17, 0, __pyx_t_16); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_17, 1, __pyx_t_2); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_17, 2, __pyx_t_1); + __pyx_t_16 = 0; + __pyx_t_2 = 0; + __pyx_t_1 = 0; + __pyx_v_buf_shape = __pyx_t_17; + __pyx_t_17 = 0; + + /* "numcodecs/zfp.pyx":312 + * elif ny and not nz: + * buf_shape=(ny,nx) + * elif ny and nz and not nw: # <<<<<<<<<<<<<< + * buf_shape=(nz,ny,nx) + * else: + */ + goto __pyx_L7; + } + + /* "numcodecs/zfp.pyx":315 + * buf_shape=(nz,ny,nx) + * else: + * buf_shape=(nw,nz,ny,nx) # <<<<<<<<<<<<<< + * dest = ensure_ndarray(dest).view(the_type) + * dest = dest.reshape(buf_shape) + */ + /*else*/ { + __pyx_t_17 = __Pyx_PyInt_From_unsigned_int(__pyx_v_nw); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 315, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_17); + __pyx_t_1 = __Pyx_PyInt_From_unsigned_int(__pyx_v_nz); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 315, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = __Pyx_PyInt_From_unsigned_int(__pyx_v_ny); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 315, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_16 = __Pyx_PyInt_From_unsigned_int(__pyx_v_nx); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 315, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_16); + __pyx_t_18 = PyTuple_New(4); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 315, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_18); + __Pyx_GIVEREF(__pyx_t_17); + PyTuple_SET_ITEM(__pyx_t_18, 0, __pyx_t_17); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_18, 1, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_18, 2, __pyx_t_2); + __Pyx_GIVEREF(__pyx_t_16); + PyTuple_SET_ITEM(__pyx_t_18, 3, __pyx_t_16); + __pyx_t_17 = 0; + __pyx_t_1 = 0; + __pyx_t_2 = 0; + __pyx_t_16 = 0; + __pyx_v_buf_shape = __pyx_t_18; + __pyx_t_18 = 0; + } + __pyx_L7:; + + /* "numcodecs/zfp.pyx":316 + * else: + * buf_shape=(nw,nz,ny,nx) + * dest = ensure_ndarray(dest).view(the_type) # <<<<<<<<<<<<<< + * dest = dest.reshape(buf_shape) + * return dest + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_ensure_ndarray); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 316, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = NULL; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_1)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_1); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + } + } + __pyx_t_16 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_1, __pyx_v_dest) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_dest); + __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; + if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 316, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_16); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_16, __pyx_n_s_view); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 316, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; + __pyx_t_16 = NULL; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_16 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_16)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_16); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + } + } + __pyx_t_18 = (__pyx_t_16) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_16, __pyx_v_the_type) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_the_type); + __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0; + if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 316, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_18); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF_SET(__pyx_v_dest, __pyx_t_18); + __pyx_t_18 = 0; + + /* "numcodecs/zfp.pyx":317 + * buf_shape=(nw,nz,ny,nx) + * dest = ensure_ndarray(dest).view(the_type) + * dest = dest.reshape(buf_shape) # <<<<<<<<<<<<<< + * return dest + * + */ + __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_dest, __pyx_n_s_reshape); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 317, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_16 = NULL; + if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_16 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_16)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_16); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + } + } + __pyx_t_18 = (__pyx_t_16) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_16, __pyx_v_buf_shape) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_buf_shape); + __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0; + if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 317, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_18); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF_SET(__pyx_v_dest, __pyx_t_18); + __pyx_t_18 = 0; + + /* "numcodecs/zfp.pyx":318 + * dest = ensure_ndarray(dest).view(the_type) + * dest = dest.reshape(buf_shape) + * return dest # <<<<<<<<<<<<<< + * + * class CompressMethod: + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_dest); + __pyx_r = __pyx_v_dest; + goto __pyx_L0; + + /* "numcodecs/zfp.pyx":218 + * return dest[:compressed_size] + * + * def decompress(source,dest=None): # <<<<<<<<<<<<<< + * """Decompress data. + * + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_16); + __Pyx_XDECREF(__pyx_t_17); + __Pyx_XDECREF(__pyx_t_18); + __Pyx_AddTraceback("numcodecs.zfp.decompress", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF((PyObject *)__pyx_v_source_buffer); + __Pyx_XDECREF((PyObject *)__pyx_v_dest_buffer); + __Pyx_XDECREF(__pyx_v_the_type); + __Pyx_XDECREF(__pyx_v_type_size); + __Pyx_XDECREF(__pyx_v_datashape); + __Pyx_XDECREF(__pyx_v_arr); + __Pyx_XDECREF(__pyx_v_buf_shape); + __Pyx_XDECREF(__pyx_v_dest); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "numcodecs/zfp.pyx":328 + * + * # Initilize with defaults + * def __init__(self): # <<<<<<<<<<<<<< + * self.zfpmode='a' + * self.tolerance=0.01 + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_9numcodecs_3zfp_14CompressMethod_1__init__(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ +static PyMethodDef __pyx_mdef_9numcodecs_3zfp_14CompressMethod_1__init__ = {"__init__", (PyCFunction)__pyx_pw_9numcodecs_3zfp_14CompressMethod_1__init__, METH_O, 0}; +static PyObject *__pyx_pw_9numcodecs_3zfp_14CompressMethod_1__init__(PyObject *__pyx_self, PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); + __pyx_r = __pyx_pf_9numcodecs_3zfp_14CompressMethod___init__(__pyx_self, ((PyObject *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_9numcodecs_3zfp_14CompressMethod___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__init__", 0); + + /* "numcodecs/zfp.pyx":329 + * # Initilize with defaults + * def __init__(self): + * self.zfpmode='a' # <<<<<<<<<<<<<< + * self.tolerance=0.01 + * + */ + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_zfpmode, __pyx_n_s_a) < 0) __PYX_ERR(0, 329, __pyx_L1_error) + + /* "numcodecs/zfp.pyx":330 + * def __init__(self): + * self.zfpmode='a' + * self.tolerance=0.01 # <<<<<<<<<<<<<< + * + * def set_mode(self,mode): + */ + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_tolerance, __pyx_float_0_01) < 0) __PYX_ERR(0, 330, __pyx_L1_error) + + /* "numcodecs/zfp.pyx":328 + * + * # Initilize with defaults + * def __init__(self): # <<<<<<<<<<<<<< + * self.zfpmode='a' + * self.tolerance=0.01 + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_AddTraceback("numcodecs.zfp.CompressMethod.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "numcodecs/zfp.pyx":332 + * self.tolerance=0.01 + * + * def set_mode(self,mode): # <<<<<<<<<<<<<< + * self.zfpmode=mode + * def set_tolerance(self,tol): + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_9numcodecs_3zfp_14CompressMethod_3set_mode(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyMethodDef __pyx_mdef_9numcodecs_3zfp_14CompressMethod_3set_mode = {"set_mode", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_9numcodecs_3zfp_14CompressMethod_3set_mode, METH_VARARGS|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_9numcodecs_3zfp_14CompressMethod_3set_mode(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_self = 0; + PyObject *__pyx_v_mode = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("set_mode (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_mode,0}; + PyObject* values[2] = {0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_mode)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("set_mode", 1, 2, 2, 1); __PYX_ERR(0, 332, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_mode") < 0)) __PYX_ERR(0, 332, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + } + __pyx_v_self = values[0]; + __pyx_v_mode = values[1]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("set_mode", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 332, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("numcodecs.zfp.CompressMethod.set_mode", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_9numcodecs_3zfp_14CompressMethod_2set_mode(__pyx_self, __pyx_v_self, __pyx_v_mode); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_9numcodecs_3zfp_14CompressMethod_2set_mode(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_mode) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("set_mode", 0); + + /* "numcodecs/zfp.pyx":333 + * + * def set_mode(self,mode): + * self.zfpmode=mode # <<<<<<<<<<<<<< + * def set_tolerance(self,tol): + * self.tolerance=tol + */ + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_zfpmode, __pyx_v_mode) < 0) __PYX_ERR(0, 333, __pyx_L1_error) + + /* "numcodecs/zfp.pyx":332 + * self.tolerance=0.01 + * + * def set_mode(self,mode): # <<<<<<<<<<<<<< + * self.zfpmode=mode + * def set_tolerance(self,tol): + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_AddTraceback("numcodecs.zfp.CompressMethod.set_mode", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "numcodecs/zfp.pyx":334 + * def set_mode(self,mode): + * self.zfpmode=mode + * def set_tolerance(self,tol): # <<<<<<<<<<<<<< + * self.tolerance=tol + * def set_precision(self,prec): + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_9numcodecs_3zfp_14CompressMethod_5set_tolerance(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyMethodDef __pyx_mdef_9numcodecs_3zfp_14CompressMethod_5set_tolerance = {"set_tolerance", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_9numcodecs_3zfp_14CompressMethod_5set_tolerance, METH_VARARGS|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_9numcodecs_3zfp_14CompressMethod_5set_tolerance(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_self = 0; + PyObject *__pyx_v_tol = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("set_tolerance (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_tol,0}; + PyObject* values[2] = {0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_tol)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("set_tolerance", 1, 2, 2, 1); __PYX_ERR(0, 334, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_tolerance") < 0)) __PYX_ERR(0, 334, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + } + __pyx_v_self = values[0]; + __pyx_v_tol = values[1]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("set_tolerance", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 334, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("numcodecs.zfp.CompressMethod.set_tolerance", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_9numcodecs_3zfp_14CompressMethod_4set_tolerance(__pyx_self, __pyx_v_self, __pyx_v_tol); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_9numcodecs_3zfp_14CompressMethod_4set_tolerance(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_tol) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("set_tolerance", 0); + + /* "numcodecs/zfp.pyx":335 + * self.zfpmode=mode + * def set_tolerance(self,tol): + * self.tolerance=tol # <<<<<<<<<<<<<< + * def set_precision(self,prec): + * self.precision=prec + */ + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_tolerance, __pyx_v_tol) < 0) __PYX_ERR(0, 335, __pyx_L1_error) + + /* "numcodecs/zfp.pyx":334 + * def set_mode(self,mode): + * self.zfpmode=mode + * def set_tolerance(self,tol): # <<<<<<<<<<<<<< + * self.tolerance=tol + * def set_precision(self,prec): + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_AddTraceback("numcodecs.zfp.CompressMethod.set_tolerance", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "numcodecs/zfp.pyx":336 + * def set_tolerance(self,tol): + * self.tolerance=tol + * def set_precision(self,prec): # <<<<<<<<<<<<<< + * self.precision=prec + * def set_rate(self,rate): + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_9numcodecs_3zfp_14CompressMethod_7set_precision(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyMethodDef __pyx_mdef_9numcodecs_3zfp_14CompressMethod_7set_precision = {"set_precision", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_9numcodecs_3zfp_14CompressMethod_7set_precision, METH_VARARGS|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_9numcodecs_3zfp_14CompressMethod_7set_precision(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_self = 0; + PyObject *__pyx_v_prec = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("set_precision (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_prec,0}; + PyObject* values[2] = {0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_prec)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("set_precision", 1, 2, 2, 1); __PYX_ERR(0, 336, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_precision") < 0)) __PYX_ERR(0, 336, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + } + __pyx_v_self = values[0]; + __pyx_v_prec = values[1]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("set_precision", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 336, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("numcodecs.zfp.CompressMethod.set_precision", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_9numcodecs_3zfp_14CompressMethod_6set_precision(__pyx_self, __pyx_v_self, __pyx_v_prec); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_9numcodecs_3zfp_14CompressMethod_6set_precision(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_prec) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("set_precision", 0); + + /* "numcodecs/zfp.pyx":337 + * self.tolerance=tol + * def set_precision(self,prec): + * self.precision=prec # <<<<<<<<<<<<<< + * def set_rate(self,rate): + * self.rate=rate + */ + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_precision, __pyx_v_prec) < 0) __PYX_ERR(0, 337, __pyx_L1_error) + + /* "numcodecs/zfp.pyx":336 + * def set_tolerance(self,tol): + * self.tolerance=tol + * def set_precision(self,prec): # <<<<<<<<<<<<<< + * self.precision=prec + * def set_rate(self,rate): + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_AddTraceback("numcodecs.zfp.CompressMethod.set_precision", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "numcodecs/zfp.pyx":338 + * def set_precision(self,prec): + * self.precision=prec + * def set_rate(self,rate): # <<<<<<<<<<<<<< + * self.rate=rate + * def set_minbits(self,minbits): + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_9numcodecs_3zfp_14CompressMethod_9set_rate(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyMethodDef __pyx_mdef_9numcodecs_3zfp_14CompressMethod_9set_rate = {"set_rate", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_9numcodecs_3zfp_14CompressMethod_9set_rate, METH_VARARGS|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_9numcodecs_3zfp_14CompressMethod_9set_rate(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_self = 0; + PyObject *__pyx_v_rate = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("set_rate (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_rate,0}; + PyObject* values[2] = {0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rate)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("set_rate", 1, 2, 2, 1); __PYX_ERR(0, 338, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_rate") < 0)) __PYX_ERR(0, 338, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + } + __pyx_v_self = values[0]; + __pyx_v_rate = values[1]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("set_rate", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 338, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("numcodecs.zfp.CompressMethod.set_rate", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_9numcodecs_3zfp_14CompressMethod_8set_rate(__pyx_self, __pyx_v_self, __pyx_v_rate); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_9numcodecs_3zfp_14CompressMethod_8set_rate(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_rate) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("set_rate", 0); + + /* "numcodecs/zfp.pyx":339 + * self.precision=prec + * def set_rate(self,rate): + * self.rate=rate # <<<<<<<<<<<<<< + * def set_minbits(self,minbits): + * self.minbits=minbits + */ + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_rate, __pyx_v_rate) < 0) __PYX_ERR(0, 339, __pyx_L1_error) + + /* "numcodecs/zfp.pyx":338 + * def set_precision(self,prec): + * self.precision=prec + * def set_rate(self,rate): # <<<<<<<<<<<<<< + * self.rate=rate + * def set_minbits(self,minbits): + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_AddTraceback("numcodecs.zfp.CompressMethod.set_rate", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "numcodecs/zfp.pyx":340 + * def set_rate(self,rate): + * self.rate=rate + * def set_minbits(self,minbits): # <<<<<<<<<<<<<< + * self.minbits=minbits + * def set_maxbits(self,maxbits): + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_9numcodecs_3zfp_14CompressMethod_11set_minbits(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyMethodDef __pyx_mdef_9numcodecs_3zfp_14CompressMethod_11set_minbits = {"set_minbits", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_9numcodecs_3zfp_14CompressMethod_11set_minbits, METH_VARARGS|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_9numcodecs_3zfp_14CompressMethod_11set_minbits(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_self = 0; + PyObject *__pyx_v_minbits = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("set_minbits (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_minbits,0}; + PyObject* values[2] = {0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_minbits)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("set_minbits", 1, 2, 2, 1); __PYX_ERR(0, 340, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_minbits") < 0)) __PYX_ERR(0, 340, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + } + __pyx_v_self = values[0]; + __pyx_v_minbits = values[1]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("set_minbits", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 340, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("numcodecs.zfp.CompressMethod.set_minbits", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_9numcodecs_3zfp_14CompressMethod_10set_minbits(__pyx_self, __pyx_v_self, __pyx_v_minbits); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_9numcodecs_3zfp_14CompressMethod_10set_minbits(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_minbits) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("set_minbits", 0); + + /* "numcodecs/zfp.pyx":341 + * self.rate=rate + * def set_minbits(self,minbits): + * self.minbits=minbits # <<<<<<<<<<<<<< + * def set_maxbits(self,maxbits): + * self.maxbits=maxbits + */ + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_minbits, __pyx_v_minbits) < 0) __PYX_ERR(0, 341, __pyx_L1_error) + + /* "numcodecs/zfp.pyx":340 + * def set_rate(self,rate): + * self.rate=rate + * def set_minbits(self,minbits): # <<<<<<<<<<<<<< + * self.minbits=minbits + * def set_maxbits(self,maxbits): + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_AddTraceback("numcodecs.zfp.CompressMethod.set_minbits", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "numcodecs/zfp.pyx":342 + * def set_minbits(self,minbits): + * self.minbits=minbits + * def set_maxbits(self,maxbits): # <<<<<<<<<<<<<< + * self.maxbits=maxbits + * def set_maxprec(self,maxprec): + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_9numcodecs_3zfp_14CompressMethod_13set_maxbits(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyMethodDef __pyx_mdef_9numcodecs_3zfp_14CompressMethod_13set_maxbits = {"set_maxbits", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_9numcodecs_3zfp_14CompressMethod_13set_maxbits, METH_VARARGS|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_9numcodecs_3zfp_14CompressMethod_13set_maxbits(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_self = 0; + PyObject *__pyx_v_maxbits = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("set_maxbits (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_maxbits,0}; + PyObject* values[2] = {0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_maxbits)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("set_maxbits", 1, 2, 2, 1); __PYX_ERR(0, 342, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_maxbits") < 0)) __PYX_ERR(0, 342, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + } + __pyx_v_self = values[0]; + __pyx_v_maxbits = values[1]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("set_maxbits", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 342, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("numcodecs.zfp.CompressMethod.set_maxbits", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_9numcodecs_3zfp_14CompressMethod_12set_maxbits(__pyx_self, __pyx_v_self, __pyx_v_maxbits); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_9numcodecs_3zfp_14CompressMethod_12set_maxbits(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_maxbits) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("set_maxbits", 0); + + /* "numcodecs/zfp.pyx":343 + * self.minbits=minbits + * def set_maxbits(self,maxbits): + * self.maxbits=maxbits # <<<<<<<<<<<<<< + * def set_maxprec(self,maxprec): + * self.maxprec=maxprec + */ + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_maxbits, __pyx_v_maxbits) < 0) __PYX_ERR(0, 343, __pyx_L1_error) + + /* "numcodecs/zfp.pyx":342 + * def set_minbits(self,minbits): + * self.minbits=minbits + * def set_maxbits(self,maxbits): # <<<<<<<<<<<<<< + * self.maxbits=maxbits + * def set_maxprec(self,maxprec): + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_AddTraceback("numcodecs.zfp.CompressMethod.set_maxbits", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "numcodecs/zfp.pyx":344 + * def set_maxbits(self,maxbits): + * self.maxbits=maxbits + * def set_maxprec(self,maxprec): # <<<<<<<<<<<<<< + * self.maxprec=maxprec + * def set_minexp(self,minexp): + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_9numcodecs_3zfp_14CompressMethod_15set_maxprec(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyMethodDef __pyx_mdef_9numcodecs_3zfp_14CompressMethod_15set_maxprec = {"set_maxprec", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_9numcodecs_3zfp_14CompressMethod_15set_maxprec, METH_VARARGS|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_9numcodecs_3zfp_14CompressMethod_15set_maxprec(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_self = 0; + PyObject *__pyx_v_maxprec = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("set_maxprec (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_maxprec,0}; + PyObject* values[2] = {0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_maxprec)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("set_maxprec", 1, 2, 2, 1); __PYX_ERR(0, 344, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_maxprec") < 0)) __PYX_ERR(0, 344, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + } + __pyx_v_self = values[0]; + __pyx_v_maxprec = values[1]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("set_maxprec", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 344, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("numcodecs.zfp.CompressMethod.set_maxprec", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_9numcodecs_3zfp_14CompressMethod_14set_maxprec(__pyx_self, __pyx_v_self, __pyx_v_maxprec); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_9numcodecs_3zfp_14CompressMethod_14set_maxprec(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_maxprec) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("set_maxprec", 0); + + /* "numcodecs/zfp.pyx":345 + * self.maxbits=maxbits + * def set_maxprec(self,maxprec): + * self.maxprec=maxprec # <<<<<<<<<<<<<< + * def set_minexp(self,minexp): + * self.minexp=minexp + */ + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_maxprec, __pyx_v_maxprec) < 0) __PYX_ERR(0, 345, __pyx_L1_error) + + /* "numcodecs/zfp.pyx":344 + * def set_maxbits(self,maxbits): + * self.maxbits=maxbits + * def set_maxprec(self,maxprec): # <<<<<<<<<<<<<< + * self.maxprec=maxprec + * def set_minexp(self,minexp): + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_AddTraceback("numcodecs.zfp.CompressMethod.set_maxprec", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "numcodecs/zfp.pyx":346 + * def set_maxprec(self,maxprec): + * self.maxprec=maxprec + * def set_minexp(self,minexp): # <<<<<<<<<<<<<< + * self.minexp=minexp + * + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_9numcodecs_3zfp_14CompressMethod_17set_minexp(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyMethodDef __pyx_mdef_9numcodecs_3zfp_14CompressMethod_17set_minexp = {"set_minexp", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_9numcodecs_3zfp_14CompressMethod_17set_minexp, METH_VARARGS|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_9numcodecs_3zfp_14CompressMethod_17set_minexp(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_self = 0; + PyObject *__pyx_v_minexp = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("set_minexp (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_minexp,0}; + PyObject* values[2] = {0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_minexp)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("set_minexp", 1, 2, 2, 1); __PYX_ERR(0, 346, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_minexp") < 0)) __PYX_ERR(0, 346, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + } + __pyx_v_self = values[0]; + __pyx_v_minexp = values[1]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("set_minexp", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 346, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("numcodecs.zfp.CompressMethod.set_minexp", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_9numcodecs_3zfp_14CompressMethod_16set_minexp(__pyx_self, __pyx_v_self, __pyx_v_minexp); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_9numcodecs_3zfp_14CompressMethod_16set_minexp(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_minexp) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("set_minexp", 0); + + /* "numcodecs/zfp.pyx":347 + * self.maxprec=maxprec + * def set_minexp(self,minexp): + * self.minexp=minexp # <<<<<<<<<<<<<< + * + * class Zfp(Codec): + */ + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_minexp, __pyx_v_minexp) < 0) __PYX_ERR(0, 347, __pyx_L1_error) + + /* "numcodecs/zfp.pyx":346 + * def set_maxprec(self,maxprec): + * self.maxprec=maxprec + * def set_minexp(self,minexp): # <<<<<<<<<<<<<< + * self.minexp=minexp + * + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_AddTraceback("numcodecs.zfp.CompressMethod.set_minexp", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "numcodecs/zfp.pyx":382 + * codec_id = 'zfp' + * + * def __init__(self, mode = 'a',tol = 0.0, prec = ZFP_MAX_PREC, rate = 0, minbits = ZFP_MIN_BITS, maxbits = ZFP_MAX_BITS, minexp = ZFP_MIN_EXP, maxprec = ZFP_MAX_PREC,the_method=None): # <<<<<<<<<<<<<< + * self.mode=mode + * #the_method=CompressMethod() + */ + +static PyObject *__pyx_pf_9numcodecs_3zfp_4__defaults__(CYTHON_UNUSED PyObject *__pyx_self) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + __Pyx_RefNannySetupContext("__defaults__", 0); + __Pyx_XDECREF(__pyx_r); + __pyx_t_1 = PyTuple_New(9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 382, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(((PyObject*)__pyx_n_s_a)); + __Pyx_GIVEREF(((PyObject*)__pyx_n_s_a)); + PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject*)__pyx_n_s_a)); + __Pyx_INCREF(((PyObject*)__pyx_float_0_0)); + __Pyx_GIVEREF(((PyObject*)__pyx_float_0_0)); + PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject*)__pyx_float_0_0)); + __Pyx_INCREF(__Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_self)->__pyx_arg_prec); + __Pyx_GIVEREF(__Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_self)->__pyx_arg_prec); + PyTuple_SET_ITEM(__pyx_t_1, 2, __Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_self)->__pyx_arg_prec); + __Pyx_INCREF(((PyObject *)__pyx_int_0)); + __Pyx_GIVEREF(((PyObject *)__pyx_int_0)); + PyTuple_SET_ITEM(__pyx_t_1, 3, ((PyObject *)__pyx_int_0)); + __Pyx_INCREF(__Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_self)->__pyx_arg_minbits); + __Pyx_GIVEREF(__Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_self)->__pyx_arg_minbits); + PyTuple_SET_ITEM(__pyx_t_1, 4, __Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_self)->__pyx_arg_minbits); + __Pyx_INCREF(__Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_self)->__pyx_arg_maxbits); + __Pyx_GIVEREF(__Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_self)->__pyx_arg_maxbits); + PyTuple_SET_ITEM(__pyx_t_1, 5, __Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_self)->__pyx_arg_maxbits); + __Pyx_INCREF(__Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_self)->__pyx_arg_minexp); + __Pyx_GIVEREF(__Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_self)->__pyx_arg_minexp); + PyTuple_SET_ITEM(__pyx_t_1, 6, __Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_self)->__pyx_arg_minexp); + __Pyx_INCREF(__Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_self)->__pyx_arg_maxprec); + __Pyx_GIVEREF(__Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_self)->__pyx_arg_maxprec); + PyTuple_SET_ITEM(__pyx_t_1, 7, __Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_self)->__pyx_arg_maxprec); + __Pyx_INCREF(((PyObject *)Py_None)); + __Pyx_GIVEREF(((PyObject *)Py_None)); + PyTuple_SET_ITEM(__pyx_t_1, 8, ((PyObject *)Py_None)); + __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 382, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1); + __Pyx_INCREF(Py_None); + __Pyx_GIVEREF(Py_None); + PyTuple_SET_ITEM(__pyx_t_2, 1, Py_None); + __pyx_t_1 = 0; + __pyx_r = __pyx_t_2; + __pyx_t_2 = 0; + goto __pyx_L0; + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_AddTraceback("numcodecs.zfp.__defaults__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* Python wrapper */ +static PyObject *__pyx_pw_9numcodecs_3zfp_3Zfp_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyMethodDef __pyx_mdef_9numcodecs_3zfp_3Zfp_1__init__ = {"__init__", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_9numcodecs_3zfp_3Zfp_1__init__, METH_VARARGS|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_9numcodecs_3zfp_3Zfp_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_self = 0; + PyObject *__pyx_v_mode = 0; + PyObject *__pyx_v_tol = 0; + PyObject *__pyx_v_prec = 0; + PyObject *__pyx_v_rate = 0; + PyObject *__pyx_v_minbits = 0; + PyObject *__pyx_v_maxbits = 0; + PyObject *__pyx_v_minexp = 0; + PyObject *__pyx_v_maxprec = 0; + CYTHON_UNUSED PyObject *__pyx_v_the_method = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_mode,&__pyx_n_s_tol,&__pyx_n_s_prec,&__pyx_n_s_rate,&__pyx_n_s_minbits,&__pyx_n_s_maxbits,&__pyx_n_s_minexp,&__pyx_n_s_maxprec,&__pyx_n_s_the_method,0}; + PyObject* values[10] = {0,0,0,0,0,0,0,0,0,0}; + __pyx_defaults *__pyx_dynamic_args = __Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_self); + values[1] = ((PyObject *)((PyObject*)__pyx_n_s_a)); + values[2] = ((PyObject *)((PyObject*)__pyx_float_0_0)); + values[3] = __pyx_dynamic_args->__pyx_arg_prec; + values[4] = ((PyObject *)((PyObject *)__pyx_int_0)); + values[5] = __pyx_dynamic_args->__pyx_arg_minbits; + values[6] = __pyx_dynamic_args->__pyx_arg_maxbits; + values[7] = __pyx_dynamic_args->__pyx_arg_minexp; + values[8] = __pyx_dynamic_args->__pyx_arg_maxprec; + values[9] = ((PyObject *)((PyObject *)Py_None)); + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9); + CYTHON_FALLTHROUGH; + case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); + CYTHON_FALLTHROUGH; + case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); + CYTHON_FALLTHROUGH; + case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_mode); + if (value) { values[1] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 2: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_tol); + if (value) { values[2] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 3: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_prec); + if (value) { values[3] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 4: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rate); + if (value) { values[4] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 5: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_minbits); + if (value) { values[5] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 6: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_maxbits); + if (value) { values[6] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 7: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_minexp); + if (value) { values[7] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 8: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_maxprec); + if (value) { values[8] = value; kw_args--; } + } + CYTHON_FALLTHROUGH; + case 9: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_the_method); + if (value) { values[9] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 382, __pyx_L3_error) + } + } else { + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9); + CYTHON_FALLTHROUGH; + case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); + CYTHON_FALLTHROUGH; + case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); + CYTHON_FALLTHROUGH; + case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); + CYTHON_FALLTHROUGH; + case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); + CYTHON_FALLTHROUGH; + case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); + CYTHON_FALLTHROUGH; + case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); + CYTHON_FALLTHROUGH; + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_self = values[0]; + __pyx_v_mode = values[1]; + __pyx_v_tol = values[2]; + __pyx_v_prec = values[3]; + __pyx_v_rate = values[4]; + __pyx_v_minbits = values[5]; + __pyx_v_maxbits = values[6]; + __pyx_v_minexp = values[7]; + __pyx_v_maxprec = values[8]; + __pyx_v_the_method = values[9]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("__init__", 0, 1, 10, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 382, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("numcodecs.zfp.Zfp.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_9numcodecs_3zfp_3Zfp___init__(__pyx_self, __pyx_v_self, __pyx_v_mode, __pyx_v_tol, __pyx_v_prec, __pyx_v_rate, __pyx_v_minbits, __pyx_v_maxbits, __pyx_v_minexp, __pyx_v_maxprec, __pyx_v_the_method); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_9numcodecs_3zfp_3Zfp___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_mode, PyObject *__pyx_v_tol, PyObject *__pyx_v_prec, PyObject *__pyx_v_rate, PyObject *__pyx_v_minbits, PyObject *__pyx_v_maxbits, PyObject *__pyx_v_minexp, PyObject *__pyx_v_maxprec, CYTHON_UNUSED PyObject *__pyx_v_the_method) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + __Pyx_RefNannySetupContext("__init__", 0); + + /* "numcodecs/zfp.pyx":383 + * + * def __init__(self, mode = 'a',tol = 0.0, prec = ZFP_MAX_PREC, rate = 0, minbits = ZFP_MIN_BITS, maxbits = ZFP_MAX_BITS, minexp = ZFP_MIN_EXP, maxprec = ZFP_MAX_PREC,the_method=None): + * self.mode=mode # <<<<<<<<<<<<<< + * #the_method=CompressMethod() + * self.the_method={} + */ + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_mode, __pyx_v_mode) < 0) __PYX_ERR(0, 383, __pyx_L1_error) + + /* "numcodecs/zfp.pyx":385 + * self.mode=mode + * #the_method=CompressMethod() + * self.the_method={} # <<<<<<<<<<<<<< + * + * if mode == 'a': + */ + __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 385, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_the_method, __pyx_t_1) < 0) __PYX_ERR(0, 385, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "numcodecs/zfp.pyx":387 + * self.the_method={} + * + * if mode == 'a': # <<<<<<<<<<<<<< + * self.tol=tol + * self.the_method['mode']=mode + */ + __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_v_mode, __pyx_n_s_a, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 387, __pyx_L1_error) + if (__pyx_t_2) { + + /* "numcodecs/zfp.pyx":388 + * + * if mode == 'a': + * self.tol=tol # <<<<<<<<<<<<<< + * self.the_method['mode']=mode + * self.the_method['tol']=tol + */ + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_tol, __pyx_v_tol) < 0) __PYX_ERR(0, 388, __pyx_L1_error) + + /* "numcodecs/zfp.pyx":389 + * if mode == 'a': + * self.tol=tol + * self.the_method['mode']=mode # <<<<<<<<<<<<<< + * self.the_method['tol']=tol + * elif mode == 'p': + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_the_method); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 389, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (unlikely(PyObject_SetItem(__pyx_t_1, __pyx_n_s_mode, __pyx_v_mode) < 0)) __PYX_ERR(0, 389, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "numcodecs/zfp.pyx":390 + * self.tol=tol + * self.the_method['mode']=mode + * self.the_method['tol']=tol # <<<<<<<<<<<<<< + * elif mode == 'p': + * self.prec = prec + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_the_method); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 390, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (unlikely(PyObject_SetItem(__pyx_t_1, __pyx_n_s_tol, __pyx_v_tol) < 0)) __PYX_ERR(0, 390, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "numcodecs/zfp.pyx":387 + * self.the_method={} + * + * if mode == 'a': # <<<<<<<<<<<<<< + * self.tol=tol + * self.the_method['mode']=mode + */ + goto __pyx_L3; + } + + /* "numcodecs/zfp.pyx":391 + * self.the_method['mode']=mode + * self.the_method['tol']=tol + * elif mode == 'p': # <<<<<<<<<<<<<< + * self.prec = prec + * self.the_method['mode']=mode + */ + __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_v_mode, __pyx_n_s_p, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 391, __pyx_L1_error) + if (__pyx_t_2) { + + /* "numcodecs/zfp.pyx":392 + * self.the_method['tol']=tol + * elif mode == 'p': + * self.prec = prec # <<<<<<<<<<<<<< + * self.the_method['mode']=mode + * self.the_method['prec']=prec + */ + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_prec, __pyx_v_prec) < 0) __PYX_ERR(0, 392, __pyx_L1_error) + + /* "numcodecs/zfp.pyx":393 + * elif mode == 'p': + * self.prec = prec + * self.the_method['mode']=mode # <<<<<<<<<<<<<< + * self.the_method['prec']=prec + * elif mode == 'r': + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_the_method); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 393, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (unlikely(PyObject_SetItem(__pyx_t_1, __pyx_n_s_mode, __pyx_v_mode) < 0)) __PYX_ERR(0, 393, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "numcodecs/zfp.pyx":394 + * self.prec = prec + * self.the_method['mode']=mode + * self.the_method['prec']=prec # <<<<<<<<<<<<<< + * elif mode == 'r': + * self.rate = rate + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_the_method); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 394, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (unlikely(PyObject_SetItem(__pyx_t_1, __pyx_n_s_prec, __pyx_v_prec) < 0)) __PYX_ERR(0, 394, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "numcodecs/zfp.pyx":391 + * self.the_method['mode']=mode + * self.the_method['tol']=tol + * elif mode == 'p': # <<<<<<<<<<<<<< + * self.prec = prec + * self.the_method['mode']=mode + */ + goto __pyx_L3; + } + + /* "numcodecs/zfp.pyx":395 + * self.the_method['mode']=mode + * self.the_method['prec']=prec + * elif mode == 'r': # <<<<<<<<<<<<<< + * self.rate = rate + * self.the_method['mode']=mode + */ + __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_v_mode, __pyx_n_s_r, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 395, __pyx_L1_error) + if (__pyx_t_2) { + + /* "numcodecs/zfp.pyx":396 + * self.the_method['prec']=prec + * elif mode == 'r': + * self.rate = rate # <<<<<<<<<<<<<< + * self.the_method['mode']=mode + * self.the_method['rate']=rate + */ + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_rate, __pyx_v_rate) < 0) __PYX_ERR(0, 396, __pyx_L1_error) + + /* "numcodecs/zfp.pyx":397 + * elif mode == 'r': + * self.rate = rate + * self.the_method['mode']=mode # <<<<<<<<<<<<<< + * self.the_method['rate']=rate + * elif mode == 'c': + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_the_method); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 397, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (unlikely(PyObject_SetItem(__pyx_t_1, __pyx_n_s_mode, __pyx_v_mode) < 0)) __PYX_ERR(0, 397, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "numcodecs/zfp.pyx":398 + * self.rate = rate + * self.the_method['mode']=mode + * self.the_method['rate']=rate # <<<<<<<<<<<<<< + * elif mode == 'c': + * self.minbits = minbits + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_the_method); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 398, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (unlikely(PyObject_SetItem(__pyx_t_1, __pyx_n_s_rate, __pyx_v_rate) < 0)) __PYX_ERR(0, 398, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "numcodecs/zfp.pyx":395 + * self.the_method['mode']=mode + * self.the_method['prec']=prec + * elif mode == 'r': # <<<<<<<<<<<<<< + * self.rate = rate + * self.the_method['mode']=mode + */ + goto __pyx_L3; + } + + /* "numcodecs/zfp.pyx":399 + * self.the_method['mode']=mode + * self.the_method['rate']=rate + * elif mode == 'c': # <<<<<<<<<<<<<< + * self.minbits = minbits + * self.maxbits = maxbits + */ + __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_v_mode, __pyx_n_s_c, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 399, __pyx_L1_error) + if (likely(__pyx_t_2)) { + + /* "numcodecs/zfp.pyx":400 + * self.the_method['rate']=rate + * elif mode == 'c': + * self.minbits = minbits # <<<<<<<<<<<<<< + * self.maxbits = maxbits + * self.maxprec = maxprec + */ + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_minbits, __pyx_v_minbits) < 0) __PYX_ERR(0, 400, __pyx_L1_error) + + /* "numcodecs/zfp.pyx":401 + * elif mode == 'c': + * self.minbits = minbits + * self.maxbits = maxbits # <<<<<<<<<<<<<< + * self.maxprec = maxprec + * self.minexp = minexp + */ + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_maxbits, __pyx_v_maxbits) < 0) __PYX_ERR(0, 401, __pyx_L1_error) + + /* "numcodecs/zfp.pyx":402 + * self.minbits = minbits + * self.maxbits = maxbits + * self.maxprec = maxprec # <<<<<<<<<<<<<< + * self.minexp = minexp + * self.the_method['mode']=mode + */ + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_maxprec, __pyx_v_maxprec) < 0) __PYX_ERR(0, 402, __pyx_L1_error) + + /* "numcodecs/zfp.pyx":403 + * self.maxbits = maxbits + * self.maxprec = maxprec + * self.minexp = minexp # <<<<<<<<<<<<<< + * self.the_method['mode']=mode + * self.the_method['minbits']=minbits + */ + if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_minexp, __pyx_v_minexp) < 0) __PYX_ERR(0, 403, __pyx_L1_error) + + /* "numcodecs/zfp.pyx":404 + * self.maxprec = maxprec + * self.minexp = minexp + * self.the_method['mode']=mode # <<<<<<<<<<<<<< + * self.the_method['minbits']=minbits + * self.the_method['maxbits']=maxbits + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_the_method); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 404, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (unlikely(PyObject_SetItem(__pyx_t_1, __pyx_n_s_mode, __pyx_v_mode) < 0)) __PYX_ERR(0, 404, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "numcodecs/zfp.pyx":405 + * self.minexp = minexp + * self.the_method['mode']=mode + * self.the_method['minbits']=minbits # <<<<<<<<<<<<<< + * self.the_method['maxbits']=maxbits + * self.the_method['minexp']=minexp + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_the_method); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 405, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (unlikely(PyObject_SetItem(__pyx_t_1, __pyx_n_s_minbits, __pyx_v_minbits) < 0)) __PYX_ERR(0, 405, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "numcodecs/zfp.pyx":406 + * self.the_method['mode']=mode + * self.the_method['minbits']=minbits + * self.the_method['maxbits']=maxbits # <<<<<<<<<<<<<< + * self.the_method['minexp']=minexp + * self.the_method['maxprec']=maxprec + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_the_method); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 406, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (unlikely(PyObject_SetItem(__pyx_t_1, __pyx_n_s_maxbits, __pyx_v_maxbits) < 0)) __PYX_ERR(0, 406, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "numcodecs/zfp.pyx":407 + * self.the_method['minbits']=minbits + * self.the_method['maxbits']=maxbits + * self.the_method['minexp']=minexp # <<<<<<<<<<<<<< + * self.the_method['maxprec']=maxprec + * else: + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_the_method); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 407, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (unlikely(PyObject_SetItem(__pyx_t_1, __pyx_n_s_minexp, __pyx_v_minexp) < 0)) __PYX_ERR(0, 407, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "numcodecs/zfp.pyx":408 + * self.the_method['maxbits']=maxbits + * self.the_method['minexp']=minexp + * self.the_method['maxprec']=maxprec # <<<<<<<<<<<<<< + * else: + * raise ValueError("Wrong mode, please set mode to 'a', 'p', 'r' or 'c'") + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_the_method); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 408, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (unlikely(PyObject_SetItem(__pyx_t_1, __pyx_n_s_maxprec, __pyx_v_maxprec) < 0)) __PYX_ERR(0, 408, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "numcodecs/zfp.pyx":399 + * self.the_method['mode']=mode + * self.the_method['rate']=rate + * elif mode == 'c': # <<<<<<<<<<<<<< + * self.minbits = minbits + * self.maxbits = maxbits + */ + goto __pyx_L3; + } + + /* "numcodecs/zfp.pyx":410 + * self.the_method['maxprec']=maxprec + * else: + * raise ValueError("Wrong mode, please set mode to 'a', 'p', 'r' or 'c'") # <<<<<<<<<<<<<< + * #self.the_method=the_method + * + */ + /*else*/ { + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__8, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 410, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_Raise(__pyx_t_1, 0, 0, 0); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __PYX_ERR(0, 410, __pyx_L1_error) + } + __pyx_L3:; + + /* "numcodecs/zfp.pyx":382 + * codec_id = 'zfp' + * + * def __init__(self, mode = 'a',tol = 0.0, prec = ZFP_MAX_PREC, rate = 0, minbits = ZFP_MIN_BITS, maxbits = ZFP_MAX_BITS, minexp = ZFP_MIN_EXP, maxprec = ZFP_MAX_PREC,the_method=None): # <<<<<<<<<<<<<< + * self.mode=mode + * #the_method=CompressMethod() + */ + + /* function exit code */ + __pyx_r = Py_None; __Pyx_INCREF(Py_None); + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_AddTraceback("numcodecs.zfp.Zfp.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "numcodecs/zfp.pyx":413 + * #self.the_method=the_method + * + * def encode(self,buf): # <<<<<<<<<<<<<< + * #buf = ensure_contiguous_ndarray(buf) + * return compress(buf,self.the_method) + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_9numcodecs_3zfp_3Zfp_3encode(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyMethodDef __pyx_mdef_9numcodecs_3zfp_3Zfp_3encode = {"encode", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_9numcodecs_3zfp_3Zfp_3encode, METH_VARARGS|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_9numcodecs_3zfp_3Zfp_3encode(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + PyObject *__pyx_v_self = 0; + PyObject *__pyx_v_buf = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("encode (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_buf,0}; + PyObject* values[2] = {0,0}; + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_buf)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("encode", 1, 2, 2, 1); __PYX_ERR(0, 413, __pyx_L3_error) + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "encode") < 0)) __PYX_ERR(0, 413, __pyx_L3_error) + } + } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { + goto __pyx_L5_argtuple_error; + } else { + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + } + __pyx_v_self = values[0]; + __pyx_v_buf = values[1]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("encode", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 413, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("numcodecs.zfp.Zfp.encode", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_9numcodecs_3zfp_3Zfp_2encode(__pyx_self, __pyx_v_self, __pyx_v_buf); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_9numcodecs_3zfp_3Zfp_2encode(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_buf) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + int __pyx_t_5; + PyObject *__pyx_t_6 = NULL; + __Pyx_RefNannySetupContext("encode", 0); + + /* "numcodecs/zfp.pyx":415 + * def encode(self,buf): + * #buf = ensure_contiguous_ndarray(buf) + * return compress(buf,self.the_method) # <<<<<<<<<<<<<< + * + * def decode(self,buf,out=None): + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_compress); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 415, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_the_method); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 415, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = NULL; + __pyx_t_5 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_4)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_4); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_5 = 1; + } + } + #if CYTHON_FAST_PYCALL + if (PyFunction_Check(__pyx_t_2)) { + PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_v_buf, __pyx_t_3}; + __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 415, __pyx_L1_error) + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } else + #endif + #if CYTHON_FAST_PYCCALL + if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) { + PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_v_buf, __pyx_t_3}; + __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 415, __pyx_L1_error) + __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + } else + #endif + { + __pyx_t_6 = PyTuple_New(2+__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 415, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + if (__pyx_t_4) { + __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); __pyx_t_4 = NULL; + } + __Pyx_INCREF(__pyx_v_buf); + __Pyx_GIVEREF(__pyx_v_buf); + PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_5, __pyx_v_buf); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_5, __pyx_t_3); + __pyx_t_3 = 0; + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 415, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "numcodecs/zfp.pyx":413 + * #self.the_method=the_method + * + * def encode(self,buf): # <<<<<<<<<<<<<< + * #buf = ensure_contiguous_ndarray(buf) + * return compress(buf,self.the_method) + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_AddTraceback("numcodecs.zfp.Zfp.encode", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "numcodecs/zfp.pyx":417 + * return compress(buf,self.the_method) + * + * def decode(self,buf,out=None): # <<<<<<<<<<<<<< + * buf=ensure_contiguous_ndarray(buf) + * return decompress(buf,out) + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_9numcodecs_3zfp_3Zfp_5decode(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ +static PyMethodDef __pyx_mdef_9numcodecs_3zfp_3Zfp_5decode = {"decode", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_9numcodecs_3zfp_3Zfp_5decode, METH_VARARGS|METH_KEYWORDS, 0}; +static PyObject *__pyx_pw_9numcodecs_3zfp_3Zfp_5decode(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { + CYTHON_UNUSED PyObject *__pyx_v_self = 0; + PyObject *__pyx_v_buf = 0; + PyObject *__pyx_v_out = 0; + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("decode (wrapper)", 0); + { + static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_buf,&__pyx_n_s_out,0}; + PyObject* values[3] = {0,0,0}; + values[2] = ((PyObject *)((PyObject *)Py_None)); + if (unlikely(__pyx_kwds)) { + Py_ssize_t kw_args; + const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); + switch (pos_args) { + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + CYTHON_FALLTHROUGH; + case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + CYTHON_FALLTHROUGH; + case 0: break; + default: goto __pyx_L5_argtuple_error; + } + kw_args = PyDict_Size(__pyx_kwds); + switch (pos_args) { + case 0: + if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; + else goto __pyx_L5_argtuple_error; + CYTHON_FALLTHROUGH; + case 1: + if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_buf)) != 0)) kw_args--; + else { + __Pyx_RaiseArgtupleInvalid("decode", 0, 2, 3, 1); __PYX_ERR(0, 417, __pyx_L3_error) + } + CYTHON_FALLTHROUGH; + case 2: + if (kw_args > 0) { + PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_out); + if (value) { values[2] = value; kw_args--; } + } + } + if (unlikely(kw_args > 0)) { + if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "decode") < 0)) __PYX_ERR(0, 417, __pyx_L3_error) + } + } else { + switch (PyTuple_GET_SIZE(__pyx_args)) { + case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); + CYTHON_FALLTHROUGH; + case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); + values[0] = PyTuple_GET_ITEM(__pyx_args, 0); + break; + default: goto __pyx_L5_argtuple_error; + } + } + __pyx_v_self = values[0]; + __pyx_v_buf = values[1]; + __pyx_v_out = values[2]; + } + goto __pyx_L4_argument_unpacking_done; + __pyx_L5_argtuple_error:; + __Pyx_RaiseArgtupleInvalid("decode", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 417, __pyx_L3_error) + __pyx_L3_error:; + __Pyx_AddTraceback("numcodecs.zfp.Zfp.decode", __pyx_clineno, __pyx_lineno, __pyx_filename); + __Pyx_RefNannyFinishContext(); + return NULL; + __pyx_L4_argument_unpacking_done:; + __pyx_r = __pyx_pf_9numcodecs_3zfp_3Zfp_4decode(__pyx_self, __pyx_v_self, __pyx_v_buf, __pyx_v_out); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_9numcodecs_3zfp_3Zfp_4decode(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, PyObject *__pyx_v_buf, PyObject *__pyx_v_out) { + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + int __pyx_t_4; + PyObject *__pyx_t_5 = NULL; + __Pyx_RefNannySetupContext("decode", 0); + __Pyx_INCREF(__pyx_v_buf); + + /* "numcodecs/zfp.pyx":418 + * + * def decode(self,buf,out=None): + * buf=ensure_contiguous_ndarray(buf) # <<<<<<<<<<<<<< + * return decompress(buf,out) + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_ensure_contiguous_ndarray); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 418, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = NULL; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + } + } + __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_v_buf) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_buf); + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 418, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF_SET(__pyx_v_buf, __pyx_t_1); + __pyx_t_1 = 0; + + /* "numcodecs/zfp.pyx":419 + * def decode(self,buf,out=None): + * buf=ensure_contiguous_ndarray(buf) + * return decompress(buf,out) # <<<<<<<<<<<<<< + * + * def __repr__(self): + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_decompress); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 419, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = NULL; + __pyx_t_4 = 0; + if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) { + __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); + if (likely(__pyx_t_3)) { + PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); + __Pyx_INCREF(__pyx_t_3); + __Pyx_INCREF(function); + __Pyx_DECREF_SET(__pyx_t_2, function); + __pyx_t_4 = 1; + } + } + #if CYTHON_FAST_PYCALL + if (PyFunction_Check(__pyx_t_2)) { + PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_v_buf, __pyx_v_out}; + __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 419, __pyx_L1_error) + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_GOTREF(__pyx_t_1); + } else + #endif + #if CYTHON_FAST_PYCCALL + if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) { + PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_v_buf, __pyx_v_out}; + __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 419, __pyx_L1_error) + __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_GOTREF(__pyx_t_1); + } else + #endif + { + __pyx_t_5 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 419, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + if (__pyx_t_3) { + __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); __pyx_t_3 = NULL; + } + __Pyx_INCREF(__pyx_v_buf); + __Pyx_GIVEREF(__pyx_v_buf); + PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_4, __pyx_v_buf); + __Pyx_INCREF(__pyx_v_out); + __Pyx_GIVEREF(__pyx_v_out); + PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_4, __pyx_v_out); + __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 419, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + } + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_r = __pyx_t_1; + __pyx_t_1 = 0; + goto __pyx_L0; + + /* "numcodecs/zfp.pyx":417 + * return compress(buf,self.the_method) + * + * def decode(self,buf,out=None): # <<<<<<<<<<<<<< + * buf=ensure_contiguous_ndarray(buf) + * return decompress(buf,out) + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_AddTraceback("numcodecs.zfp.Zfp.decode", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_buf); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +/* "numcodecs/zfp.pyx":421 + * return decompress(buf,out) + * + * def __repr__(self): # <<<<<<<<<<<<<< + * if self.mode == 'a': + * r= '%s(mode=%r,tol=%s)' % (type(self).__name__, self.mode,self.tol) + */ + +/* Python wrapper */ +static PyObject *__pyx_pw_9numcodecs_3zfp_3Zfp_7__repr__(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ +static PyMethodDef __pyx_mdef_9numcodecs_3zfp_3Zfp_7__repr__ = {"__repr__", (PyCFunction)__pyx_pw_9numcodecs_3zfp_3Zfp_7__repr__, METH_O, 0}; +static PyObject *__pyx_pw_9numcodecs_3zfp_3Zfp_7__repr__(PyObject *__pyx_self, PyObject *__pyx_v_self) { + PyObject *__pyx_r = 0; + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0); + __pyx_r = __pyx_pf_9numcodecs_3zfp_3Zfp_6__repr__(__pyx_self, ((PyObject *)__pyx_v_self)); + + /* function exit code */ + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyObject *__pyx_pf_9numcodecs_3zfp_3Zfp_6__repr__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { + PyObject *__pyx_v_r = NULL; + PyObject *__pyx_r = NULL; + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + int __pyx_t_2; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + PyObject *__pyx_t_6 = NULL; + PyObject *__pyx_t_7 = NULL; + PyObject *__pyx_t_8 = NULL; + __Pyx_RefNannySetupContext("__repr__", 0); + + /* "numcodecs/zfp.pyx":422 + * + * def __repr__(self): + * if self.mode == 'a': # <<<<<<<<<<<<<< + * r= '%s(mode=%r,tol=%s)' % (type(self).__name__, self.mode,self.tol) + * elif self.mode == 'p': + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_mode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 422, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_t_1, __pyx_n_s_a, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 422, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + if (__pyx_t_2) { + + /* "numcodecs/zfp.pyx":423 + * def __repr__(self): + * if self.mode == 'a': + * r= '%s(mode=%r,tol=%s)' % (type(self).__name__, self.mode,self.tol) # <<<<<<<<<<<<<< + * elif self.mode == 'p': + * r= '%s(mode=%r,prec=%s)' % (type(self).__name__,self.mode,self.prec) + */ + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(__pyx_v_self)), __pyx_n_s_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 423, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_mode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 423, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_tol); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 423, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 423, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_3); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_4); + __pyx_t_1 = 0; + __pyx_t_3 = 0; + __pyx_t_4 = 0; + __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_s_mode_r_tol_s, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 423, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + __pyx_v_r = __pyx_t_4; + __pyx_t_4 = 0; + + /* "numcodecs/zfp.pyx":422 + * + * def __repr__(self): + * if self.mode == 'a': # <<<<<<<<<<<<<< + * r= '%s(mode=%r,tol=%s)' % (type(self).__name__, self.mode,self.tol) + * elif self.mode == 'p': + */ + goto __pyx_L3; + } + + /* "numcodecs/zfp.pyx":424 + * if self.mode == 'a': + * r= '%s(mode=%r,tol=%s)' % (type(self).__name__, self.mode,self.tol) + * elif self.mode == 'p': # <<<<<<<<<<<<<< + * r= '%s(mode=%r,prec=%s)' % (type(self).__name__,self.mode,self.prec) + * elif self.mode == 'r': + */ + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_mode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 424, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_t_4, __pyx_n_s_p, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 424, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + if (__pyx_t_2) { + + /* "numcodecs/zfp.pyx":425 + * r= '%s(mode=%r,tol=%s)' % (type(self).__name__, self.mode,self.tol) + * elif self.mode == 'p': + * r= '%s(mode=%r,prec=%s)' % (type(self).__name__,self.mode,self.prec) # <<<<<<<<<<<<<< + * elif self.mode == 'r': + * r= '%s(mode=%r,rate=%s)' % (type(self).__name__,self.mode,self.rate) + */ + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(__pyx_v_self)), __pyx_n_s_name); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 425, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_mode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 425, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_prec); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 425, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 425, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_4); + __Pyx_GIVEREF(__pyx_t_5); + PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_5); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_t_3); + __pyx_t_4 = 0; + __pyx_t_5 = 0; + __pyx_t_3 = 0; + __pyx_t_3 = __Pyx_PyString_Format(__pyx_kp_s_s_mode_r_prec_s, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 425, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_v_r = __pyx_t_3; + __pyx_t_3 = 0; + + /* "numcodecs/zfp.pyx":424 + * if self.mode == 'a': + * r= '%s(mode=%r,tol=%s)' % (type(self).__name__, self.mode,self.tol) + * elif self.mode == 'p': # <<<<<<<<<<<<<< + * r= '%s(mode=%r,prec=%s)' % (type(self).__name__,self.mode,self.prec) + * elif self.mode == 'r': + */ + goto __pyx_L3; + } + + /* "numcodecs/zfp.pyx":426 + * elif self.mode == 'p': + * r= '%s(mode=%r,prec=%s)' % (type(self).__name__,self.mode,self.prec) + * elif self.mode == 'r': # <<<<<<<<<<<<<< + * r= '%s(mode=%r,rate=%s)' % (type(self).__name__,self.mode,self.rate) + * elif self.mode == 'c': + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_mode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 426, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_t_3, __pyx_n_s_r, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 426, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + if (__pyx_t_2) { + + /* "numcodecs/zfp.pyx":427 + * r= '%s(mode=%r,prec=%s)' % (type(self).__name__,self.mode,self.prec) + * elif self.mode == 'r': + * r= '%s(mode=%r,rate=%s)' % (type(self).__name__,self.mode,self.rate) # <<<<<<<<<<<<<< + * elif self.mode == 'c': + * r= '%s(mode=%r,minbits=%s,maxbits=%s,minexp=%s,maxprec=%s)' % (type(self).__name__,self.mode,self.minbits,self.maxbits,self.minexp,self.maxprec) + */ + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(__pyx_v_self)), __pyx_n_s_name); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 427, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_mode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 427, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_rate); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 427, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 427, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_5); + PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_5); + __pyx_t_3 = 0; + __pyx_t_1 = 0; + __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyString_Format(__pyx_kp_s_s_mode_r_rate_s, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 427, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __pyx_v_r = __pyx_t_5; + __pyx_t_5 = 0; + + /* "numcodecs/zfp.pyx":426 + * elif self.mode == 'p': + * r= '%s(mode=%r,prec=%s)' % (type(self).__name__,self.mode,self.prec) + * elif self.mode == 'r': # <<<<<<<<<<<<<< + * r= '%s(mode=%r,rate=%s)' % (type(self).__name__,self.mode,self.rate) + * elif self.mode == 'c': + */ + goto __pyx_L3; + } + + /* "numcodecs/zfp.pyx":428 + * elif self.mode == 'r': + * r= '%s(mode=%r,rate=%s)' % (type(self).__name__,self.mode,self.rate) + * elif self.mode == 'c': # <<<<<<<<<<<<<< + * r= '%s(mode=%r,minbits=%s,maxbits=%s,minexp=%s,maxprec=%s)' % (type(self).__name__,self.mode,self.minbits,self.maxbits,self.minexp,self.maxprec) + * else: + */ + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_mode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 428, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_t_5, __pyx_n_s_c, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 428, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; + if (__pyx_t_2) { + + /* "numcodecs/zfp.pyx":429 + * r= '%s(mode=%r,rate=%s)' % (type(self).__name__,self.mode,self.rate) + * elif self.mode == 'c': + * r= '%s(mode=%r,minbits=%s,maxbits=%s,minexp=%s,maxprec=%s)' % (type(self).__name__,self.mode,self.minbits,self.maxbits,self.minexp,self.maxprec) # <<<<<<<<<<<<<< + * else: + * r="WRONG MODE" + */ + __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(__pyx_v_self)), __pyx_n_s_name); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 429, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_mode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 429, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_minbits); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 429, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_maxbits); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 429, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_minexp); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 429, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_6); + __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_maxprec); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 429, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __pyx_t_8 = PyTuple_New(6); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 429, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_8); + __Pyx_GIVEREF(__pyx_t_5); + PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_5); + __Pyx_GIVEREF(__pyx_t_4); + PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_4); + __Pyx_GIVEREF(__pyx_t_1); + PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_t_1); + __Pyx_GIVEREF(__pyx_t_3); + PyTuple_SET_ITEM(__pyx_t_8, 3, __pyx_t_3); + __Pyx_GIVEREF(__pyx_t_6); + PyTuple_SET_ITEM(__pyx_t_8, 4, __pyx_t_6); + __Pyx_GIVEREF(__pyx_t_7); + PyTuple_SET_ITEM(__pyx_t_8, 5, __pyx_t_7); + __pyx_t_5 = 0; + __pyx_t_4 = 0; + __pyx_t_1 = 0; + __pyx_t_3 = 0; + __pyx_t_6 = 0; + __pyx_t_7 = 0; + __pyx_t_7 = __Pyx_PyString_Format(__pyx_kp_s_s_mode_r_minbits_s_maxbits_s_mi, __pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 429, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_7); + __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; + __pyx_v_r = __pyx_t_7; + __pyx_t_7 = 0; + + /* "numcodecs/zfp.pyx":428 + * elif self.mode == 'r': + * r= '%s(mode=%r,rate=%s)' % (type(self).__name__,self.mode,self.rate) + * elif self.mode == 'c': # <<<<<<<<<<<<<< + * r= '%s(mode=%r,minbits=%s,maxbits=%s,minexp=%s,maxprec=%s)' % (type(self).__name__,self.mode,self.minbits,self.maxbits,self.minexp,self.maxprec) + * else: + */ + goto __pyx_L3; + } + + /* "numcodecs/zfp.pyx":431 + * r= '%s(mode=%r,minbits=%s,maxbits=%s,minexp=%s,maxprec=%s)' % (type(self).__name__,self.mode,self.minbits,self.maxbits,self.minexp,self.maxprec) + * else: + * r="WRONG MODE" # <<<<<<<<<<<<<< + * return r + * + */ + /*else*/ { + __Pyx_INCREF(__pyx_kp_s_WRONG_MODE); + __pyx_v_r = __pyx_kp_s_WRONG_MODE; + } + __pyx_L3:; + + /* "numcodecs/zfp.pyx":432 + * else: + * r="WRONG MODE" + * return r # <<<<<<<<<<<<<< + * + */ + __Pyx_XDECREF(__pyx_r); + __Pyx_INCREF(__pyx_v_r); + __pyx_r = __pyx_v_r; + goto __pyx_L0; + + /* "numcodecs/zfp.pyx":421 + * return decompress(buf,out) + * + * def __repr__(self): # <<<<<<<<<<<<<< + * if self.mode == 'a': + * r= '%s(mode=%r,tol=%s)' % (type(self).__name__, self.mode,self.tol) + */ + + /* function exit code */ + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + __Pyx_XDECREF(__pyx_t_6); + __Pyx_XDECREF(__pyx_t_7); + __Pyx_XDECREF(__pyx_t_8); + __Pyx_AddTraceback("numcodecs.zfp.Zfp.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename); + __pyx_r = NULL; + __pyx_L0:; + __Pyx_XDECREF(__pyx_v_r); + __Pyx_XGIVEREF(__pyx_r); + __Pyx_RefNannyFinishContext(); + return __pyx_r; +} + +static PyMethodDef __pyx_methods[] = { + {0, 0, 0, 0} +}; + +#if PY_MAJOR_VERSION >= 3 +#if CYTHON_PEP489_MULTI_PHASE_INIT +static PyObject* __pyx_pymod_create(PyObject *spec, PyModuleDef *def); /*proto*/ +static int __pyx_pymod_exec_zfp(PyObject* module); /*proto*/ +static PyModuleDef_Slot __pyx_moduledef_slots[] = { + {Py_mod_create, (void*)__pyx_pymod_create}, + {Py_mod_exec, (void*)__pyx_pymod_exec_zfp}, + {0, NULL} +}; +#endif + +static struct PyModuleDef __pyx_moduledef = { + PyModuleDef_HEAD_INIT, + "zfp", + 0, /* m_doc */ + #if CYTHON_PEP489_MULTI_PHASE_INIT + 0, /* m_size */ + #else + -1, /* m_size */ + #endif + __pyx_methods /* m_methods */, + #if CYTHON_PEP489_MULTI_PHASE_INIT + __pyx_moduledef_slots, /* m_slots */ + #else + NULL, /* m_reload */ + #endif + NULL, /* m_traverse */ + NULL, /* m_clear */ + NULL /* m_free */ +}; +#endif +#ifndef CYTHON_SMALL_CODE +#if defined(__clang__) + #define CYTHON_SMALL_CODE +#elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) + #define CYTHON_SMALL_CODE __attribute__((cold)) +#else + #define CYTHON_SMALL_CODE +#endif +#endif + +static __Pyx_StringTabEntry __pyx_string_tab[] = { + {&__pyx_n_s_Buffer, __pyx_k_Buffer, sizeof(__pyx_k_Buffer), 0, 0, 1, 1}, + {&__pyx_n_s_Codec, __pyx_k_Codec, sizeof(__pyx_k_Codec), 0, 0, 1, 1}, + {&__pyx_kp_s_Codec_providing_compression_usin, __pyx_k_Codec_providing_compression_usin, sizeof(__pyx_k_Codec_providing_compression_usin), 0, 0, 1, 0}, + {&__pyx_n_s_CompressMethod, __pyx_k_CompressMethod, sizeof(__pyx_k_CompressMethod), 0, 0, 1, 1}, + {&__pyx_n_s_CompressMethod___init, __pyx_k_CompressMethod___init, sizeof(__pyx_k_CompressMethod___init), 0, 0, 1, 1}, + {&__pyx_n_s_CompressMethod_set_maxbits, __pyx_k_CompressMethod_set_maxbits, sizeof(__pyx_k_CompressMethod_set_maxbits), 0, 0, 1, 1}, + {&__pyx_n_s_CompressMethod_set_maxprec, __pyx_k_CompressMethod_set_maxprec, sizeof(__pyx_k_CompressMethod_set_maxprec), 0, 0, 1, 1}, + {&__pyx_n_s_CompressMethod_set_minbits, __pyx_k_CompressMethod_set_minbits, sizeof(__pyx_k_CompressMethod_set_minbits), 0, 0, 1, 1}, + {&__pyx_n_s_CompressMethod_set_minexp, __pyx_k_CompressMethod_set_minexp, sizeof(__pyx_k_CompressMethod_set_minexp), 0, 0, 1, 1}, + {&__pyx_n_s_CompressMethod_set_mode, __pyx_k_CompressMethod_set_mode, sizeof(__pyx_k_CompressMethod_set_mode), 0, 0, 1, 1}, + {&__pyx_n_s_CompressMethod_set_precision, __pyx_k_CompressMethod_set_precision, sizeof(__pyx_k_CompressMethod_set_precision), 0, 0, 1, 1}, + {&__pyx_n_s_CompressMethod_set_rate, __pyx_k_CompressMethod_set_rate, sizeof(__pyx_k_CompressMethod_set_rate), 0, 0, 1, 1}, + {&__pyx_n_s_CompressMethod_set_tolerance, __pyx_k_CompressMethod_set_tolerance, sizeof(__pyx_k_CompressMethod_set_tolerance), 0, 0, 1, 1}, + {&__pyx_kp_s_Create_a_CompressMethod_object, __pyx_k_Create_a_CompressMethod_object, sizeof(__pyx_k_Create_a_CompressMethod_object), 0, 0, 1, 0}, + {&__pyx_kp_s_Must_specify_zfp_mode, __pyx_k_Must_specify_zfp_mode, sizeof(__pyx_k_Must_specify_zfp_mode), 0, 0, 1, 0}, + {&__pyx_n_s_RuntimeError, __pyx_k_RuntimeError, sizeof(__pyx_k_RuntimeError), 0, 0, 1, 1}, + {&__pyx_kp_s_The_dimension_of_data_should_be, __pyx_k_The_dimension_of_data_should_be, sizeof(__pyx_k_The_dimension_of_data_should_be), 0, 0, 1, 0}, + {&__pyx_kp_s_The_type_of_data_should_be_int32, __pyx_k_The_type_of_data_should_be_int32, sizeof(__pyx_k_The_type_of_data_should_be_int32), 0, 0, 1, 0}, + {&__pyx_n_s_TypeError, __pyx_k_TypeError, sizeof(__pyx_k_TypeError), 0, 0, 1, 1}, + {&__pyx_n_s_VERSION_STRING, __pyx_k_VERSION_STRING, sizeof(__pyx_k_VERSION_STRING), 0, 0, 1, 1}, + {&__pyx_n_s_ValueError, __pyx_k_ValueError, sizeof(__pyx_k_ValueError), 0, 0, 1, 1}, + {&__pyx_kp_s_WRONG_MODE, __pyx_k_WRONG_MODE, sizeof(__pyx_k_WRONG_MODE), 0, 0, 1, 0}, + {&__pyx_kp_s_Wrong_mode_please_set_mode_to_a, __pyx_k_Wrong_mode_please_set_mode_to_a, sizeof(__pyx_k_Wrong_mode_please_set_mode_to_a), 0, 0, 1, 0}, + {&__pyx_n_s_Zfp, __pyx_k_Zfp, sizeof(__pyx_k_Zfp), 0, 0, 1, 1}, + {&__pyx_n_s_Zfp___init, __pyx_k_Zfp___init, sizeof(__pyx_k_Zfp___init), 0, 0, 1, 1}, + {&__pyx_n_s_Zfp___repr, __pyx_k_Zfp___repr, sizeof(__pyx_k_Zfp___repr), 0, 0, 1, 1}, + {&__pyx_n_s_Zfp_decode, __pyx_k_Zfp_decode, sizeof(__pyx_k_Zfp_decode), 0, 0, 1, 1}, + {&__pyx_n_s_Zfp_encode, __pyx_k_Zfp_encode, sizeof(__pyx_k_Zfp_encode), 0, 0, 1, 1}, + {&__pyx_n_s_a, __pyx_k_a, sizeof(__pyx_k_a), 0, 0, 1, 1}, + {&__pyx_n_s_arr, __pyx_k_arr, sizeof(__pyx_k_arr), 0, 0, 1, 1}, + {&__pyx_n_s_ascontiguousarray, __pyx_k_ascontiguousarray, sizeof(__pyx_k_ascontiguousarray), 0, 0, 1, 1}, + {&__pyx_n_s_buf, __pyx_k_buf, sizeof(__pyx_k_buf), 0, 0, 1, 1}, + {&__pyx_n_s_buf_shape, __pyx_k_buf_shape, sizeof(__pyx_k_buf_shape), 0, 0, 1, 1}, + {&__pyx_n_s_bufsize, __pyx_k_bufsize, sizeof(__pyx_k_bufsize), 0, 0, 1, 1}, + {&__pyx_n_s_c, __pyx_k_c, sizeof(__pyx_k_c), 0, 0, 1, 1}, + {&__pyx_n_s_cline_in_traceback, __pyx_k_cline_in_traceback, sizeof(__pyx_k_cline_in_traceback), 0, 0, 1, 1}, + {&__pyx_n_s_codec_id, __pyx_k_codec_id, sizeof(__pyx_k_codec_id), 0, 0, 1, 1}, + {&__pyx_n_s_compat_ext, __pyx_k_compat_ext, sizeof(__pyx_k_compat_ext), 0, 0, 1, 1}, + {&__pyx_n_s_compress, __pyx_k_compress, sizeof(__pyx_k_compress), 0, 0, 1, 1}, + {&__pyx_n_s_compressed_size, __pyx_k_compressed_size, sizeof(__pyx_k_compressed_size), 0, 0, 1, 1}, + {&__pyx_n_s_datashape, __pyx_k_datashape, sizeof(__pyx_k_datashape), 0, 0, 1, 1}, + {&__pyx_n_s_decode, __pyx_k_decode, sizeof(__pyx_k_decode), 0, 0, 1, 1}, + {&__pyx_n_s_decompress, __pyx_k_decompress, sizeof(__pyx_k_decompress), 0, 0, 1, 1}, + {&__pyx_kp_s_decompress_failed, __pyx_k_decompress_failed, sizeof(__pyx_k_decompress_failed), 0, 0, 1, 0}, + {&__pyx_n_s_dest, __pyx_k_dest, sizeof(__pyx_k_dest), 0, 0, 1, 1}, + {&__pyx_n_s_dest_buffer, __pyx_k_dest_buffer, sizeof(__pyx_k_dest_buffer), 0, 0, 1, 1}, + {&__pyx_n_s_dest_ptr, __pyx_k_dest_ptr, sizeof(__pyx_k_dest_ptr), 0, 0, 1, 1}, + {&__pyx_n_s_dest_size, __pyx_k_dest_size, sizeof(__pyx_k_dest_size), 0, 0, 1, 1}, + {&__pyx_n_s_doc, __pyx_k_doc, sizeof(__pyx_k_doc), 0, 0, 1, 1}, + {&__pyx_n_s_dtype, __pyx_k_dtype, sizeof(__pyx_k_dtype), 0, 0, 1, 1}, + {&__pyx_n_s_encode, __pyx_k_encode, sizeof(__pyx_k_encode), 0, 0, 1, 1}, + {&__pyx_n_s_ensure_contiguous_ndarray, __pyx_k_ensure_contiguous_ndarray, sizeof(__pyx_k_ensure_contiguous_ndarray), 0, 0, 1, 1}, + {&__pyx_n_s_ensure_ndarray, __pyx_k_ensure_ndarray, sizeof(__pyx_k_ensure_ndarray), 0, 0, 1, 1}, + {&__pyx_n_s_f_contiguous, __pyx_k_f_contiguous, sizeof(__pyx_k_f_contiguous), 0, 0, 1, 1}, + {&__pyx_n_s_field, __pyx_k_field, sizeof(__pyx_k_field), 0, 0, 1, 1}, + {&__pyx_n_s_flags, __pyx_k_flags, sizeof(__pyx_k_flags), 0, 0, 1, 1}, + {&__pyx_n_s_float32, __pyx_k_float32, sizeof(__pyx_k_float32), 0, 0, 1, 1}, + {&__pyx_n_s_float64, __pyx_k_float64, sizeof(__pyx_k_float64), 0, 0, 1, 1}, + {&__pyx_n_s_import, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1}, + {&__pyx_n_s_init, __pyx_k_init, sizeof(__pyx_k_init), 0, 0, 1, 1}, + {&__pyx_n_s_input_array, __pyx_k_input_array, sizeof(__pyx_k_input_array), 0, 0, 1, 1}, + {&__pyx_n_s_int32, __pyx_k_int32, sizeof(__pyx_k_int32), 0, 0, 1, 1}, + {&__pyx_n_s_int64, __pyx_k_int64, sizeof(__pyx_k_int64), 0, 0, 1, 1}, + {&__pyx_n_s_itemsize, __pyx_k_itemsize, sizeof(__pyx_k_itemsize), 0, 0, 1, 1}, + {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1}, + {&__pyx_n_s_maxbits, __pyx_k_maxbits, sizeof(__pyx_k_maxbits), 0, 0, 1, 1}, + {&__pyx_n_s_maxprec, __pyx_k_maxprec, sizeof(__pyx_k_maxprec), 0, 0, 1, 1}, + {&__pyx_n_s_metaclass, __pyx_k_metaclass, sizeof(__pyx_k_metaclass), 0, 0, 1, 1}, + {&__pyx_n_s_method, __pyx_k_method, sizeof(__pyx_k_method), 0, 0, 1, 1}, + {&__pyx_n_s_minbits, __pyx_k_minbits, sizeof(__pyx_k_minbits), 0, 0, 1, 1}, + {&__pyx_n_s_minexp, __pyx_k_minexp, sizeof(__pyx_k_minexp), 0, 0, 1, 1}, + {&__pyx_n_s_mode, __pyx_k_mode, sizeof(__pyx_k_mode), 0, 0, 1, 1}, + {&__pyx_n_s_module, __pyx_k_module, sizeof(__pyx_k_module), 0, 0, 1, 1}, + {&__pyx_n_s_name, __pyx_k_name, sizeof(__pyx_k_name), 0, 0, 1, 1}, + {&__pyx_n_s_ndim, __pyx_k_ndim, sizeof(__pyx_k_ndim), 0, 0, 1, 1}, + {&__pyx_n_s_np, __pyx_k_np, sizeof(__pyx_k_np), 0, 0, 1, 1}, + {&__pyx_n_s_numcodecs_abc, __pyx_k_numcodecs_abc, sizeof(__pyx_k_numcodecs_abc), 0, 0, 1, 1}, + {&__pyx_n_s_numcodecs_compat, __pyx_k_numcodecs_compat, sizeof(__pyx_k_numcodecs_compat), 0, 0, 1, 1}, + {&__pyx_n_s_numcodecs_zfp, __pyx_k_numcodecs_zfp, sizeof(__pyx_k_numcodecs_zfp), 0, 0, 1, 1}, + {&__pyx_kp_s_numcodecs_zfp_pyx, __pyx_k_numcodecs_zfp_pyx, sizeof(__pyx_k_numcodecs_zfp_pyx), 0, 0, 1, 0}, + {&__pyx_n_s_numpy, __pyx_k_numpy, sizeof(__pyx_k_numpy), 0, 0, 1, 1}, + {&__pyx_n_s_nw, __pyx_k_nw, sizeof(__pyx_k_nw), 0, 0, 1, 1}, + {&__pyx_n_s_nx, __pyx_k_nx, sizeof(__pyx_k_nx), 0, 0, 1, 1}, + {&__pyx_n_s_ny, __pyx_k_ny, sizeof(__pyx_k_ny), 0, 0, 1, 1}, + {&__pyx_n_s_nz, __pyx_k_nz, sizeof(__pyx_k_nz), 0, 0, 1, 1}, + {&__pyx_n_s_out, __pyx_k_out, sizeof(__pyx_k_out), 0, 0, 1, 1}, + {&__pyx_n_s_p, __pyx_k_p, sizeof(__pyx_k_p), 0, 0, 1, 1}, + {&__pyx_n_s_prec, __pyx_k_prec, sizeof(__pyx_k_prec), 0, 0, 1, 1}, + {&__pyx_n_s_precision, __pyx_k_precision, sizeof(__pyx_k_precision), 0, 0, 1, 1}, + {&__pyx_n_s_prepare, __pyx_k_prepare, sizeof(__pyx_k_prepare), 0, 0, 1, 1}, + {&__pyx_n_s_pyx_vtable, __pyx_k_pyx_vtable, sizeof(__pyx_k_pyx_vtable), 0, 0, 1, 1}, + {&__pyx_n_s_qualname, __pyx_k_qualname, sizeof(__pyx_k_qualname), 0, 0, 1, 1}, + {&__pyx_n_s_r, __pyx_k_r, sizeof(__pyx_k_r), 0, 0, 1, 1}, + {&__pyx_n_s_rate, __pyx_k_rate, sizeof(__pyx_k_rate), 0, 0, 1, 1}, + {&__pyx_n_s_repr, __pyx_k_repr, sizeof(__pyx_k_repr), 0, 0, 1, 1}, + {&__pyx_n_s_reshape, __pyx_k_reshape, sizeof(__pyx_k_reshape), 0, 0, 1, 1}, + {&__pyx_n_s_ret, __pyx_k_ret, sizeof(__pyx_k_ret), 0, 0, 1, 1}, + {&__pyx_kp_s_s_mode_r_minbits_s_maxbits_s_mi, __pyx_k_s_mode_r_minbits_s_maxbits_s_mi, sizeof(__pyx_k_s_mode_r_minbits_s_maxbits_s_mi), 0, 0, 1, 0}, + {&__pyx_kp_s_s_mode_r_prec_s, __pyx_k_s_mode_r_prec_s, sizeof(__pyx_k_s_mode_r_prec_s), 0, 0, 1, 0}, + {&__pyx_kp_s_s_mode_r_rate_s, __pyx_k_s_mode_r_rate_s, sizeof(__pyx_k_s_mode_r_rate_s), 0, 0, 1, 0}, + {&__pyx_kp_s_s_mode_r_tol_s, __pyx_k_s_mode_r_tol_s, sizeof(__pyx_k_s_mode_r_tol_s), 0, 0, 1, 0}, + {&__pyx_n_s_self, __pyx_k_self, sizeof(__pyx_k_self), 0, 0, 1, 1}, + {&__pyx_n_s_set_maxbits, __pyx_k_set_maxbits, sizeof(__pyx_k_set_maxbits), 0, 0, 1, 1}, + {&__pyx_n_s_set_maxprec, __pyx_k_set_maxprec, sizeof(__pyx_k_set_maxprec), 0, 0, 1, 1}, + {&__pyx_n_s_set_minbits, __pyx_k_set_minbits, sizeof(__pyx_k_set_minbits), 0, 0, 1, 1}, + {&__pyx_n_s_set_minexp, __pyx_k_set_minexp, sizeof(__pyx_k_set_minexp), 0, 0, 1, 1}, + {&__pyx_n_s_set_mode, __pyx_k_set_mode, sizeof(__pyx_k_set_mode), 0, 0, 1, 1}, + {&__pyx_n_s_set_precision, __pyx_k_set_precision, sizeof(__pyx_k_set_precision), 0, 0, 1, 1}, + {&__pyx_n_s_set_rate, __pyx_k_set_rate, sizeof(__pyx_k_set_rate), 0, 0, 1, 1}, + {&__pyx_n_s_set_tolerance, __pyx_k_set_tolerance, sizeof(__pyx_k_set_tolerance), 0, 0, 1, 1}, + {&__pyx_n_s_shape, __pyx_k_shape, sizeof(__pyx_k_shape), 0, 0, 1, 1}, + {&__pyx_n_s_source, __pyx_k_source, sizeof(__pyx_k_source), 0, 0, 1, 1}, + {&__pyx_n_s_source_buffer, __pyx_k_source_buffer, sizeof(__pyx_k_source_buffer), 0, 0, 1, 1}, + {&__pyx_n_s_source_ptr, __pyx_k_source_ptr, sizeof(__pyx_k_source_ptr), 0, 0, 1, 1}, + {&__pyx_n_s_source_size, __pyx_k_source_size, sizeof(__pyx_k_source_size), 0, 0, 1, 1}, + {&__pyx_n_s_stream, __pyx_k_stream, sizeof(__pyx_k_stream), 0, 0, 1, 1}, + {&__pyx_n_s_stride, __pyx_k_stride, sizeof(__pyx_k_stride), 0, 0, 1, 1}, + {&__pyx_n_s_strides, __pyx_k_strides, sizeof(__pyx_k_strides), 0, 0, 1, 1}, + {&__pyx_n_s_sys, __pyx_k_sys, sizeof(__pyx_k_sys), 0, 0, 1, 1}, + {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1}, + {&__pyx_n_s_the_method, __pyx_k_the_method, sizeof(__pyx_k_the_method), 0, 0, 1, 1}, + {&__pyx_n_s_the_type, __pyx_k_the_type, sizeof(__pyx_k_the_type), 0, 0, 1, 1}, + {&__pyx_n_s_tol, __pyx_k_tol, sizeof(__pyx_k_tol), 0, 0, 1, 1}, + {&__pyx_n_s_tolerance, __pyx_k_tolerance, sizeof(__pyx_k_tolerance), 0, 0, 1, 1}, + {&__pyx_n_s_type_size, __pyx_k_type_size, sizeof(__pyx_k_type_size), 0, 0, 1, 1}, + {&__pyx_n_s_version, __pyx_k_version, sizeof(__pyx_k_version), 0, 0, 1, 1}, + {&__pyx_n_s_view, __pyx_k_view, sizeof(__pyx_k_view), 0, 0, 1, 1}, + {&__pyx_n_s_zfp, __pyx_k_zfp, sizeof(__pyx_k_zfp), 0, 0, 1, 1}, + {&__pyx_kp_s_zfp_compress_is_failed, __pyx_k_zfp_compress_is_failed, sizeof(__pyx_k_zfp_compress_is_failed), 0, 0, 1, 0}, + {&__pyx_kp_s_zfp_read_header_failed, __pyx_k_zfp_read_header_failed, sizeof(__pyx_k_zfp_read_header_failed), 0, 0, 1, 0}, + {&__pyx_kp_s_zfp_write_header_failed, __pyx_k_zfp_write_header_failed, sizeof(__pyx_k_zfp_write_header_failed), 0, 0, 1, 0}, + {&__pyx_n_s_zfpmode, __pyx_k_zfpmode, sizeof(__pyx_k_zfpmode), 0, 0, 1, 1}, + {0, 0, 0, 0, 0, 0, 0} +}; +static CYTHON_SMALL_CODE int __Pyx_InitCachedBuiltins(void) { + __pyx_builtin_TypeError = __Pyx_GetBuiltinName(__pyx_n_s_TypeError); if (!__pyx_builtin_TypeError) __PYX_ERR(0, 156, __pyx_L1_error) + __pyx_builtin_ValueError = __Pyx_GetBuiltinName(__pyx_n_s_ValueError); if (!__pyx_builtin_ValueError) __PYX_ERR(0, 179, __pyx_L1_error) + __pyx_builtin_RuntimeError = __Pyx_GetBuiltinName(__pyx_n_s_RuntimeError); if (!__pyx_builtin_RuntimeError) __PYX_ERR(0, 205, __pyx_L1_error) + return 0; + __pyx_L1_error:; + return -1; +} + +static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0); + + /* "numcodecs/zfp.pyx":156 + * the_type = zfp_type_int64 + * else: + * raise TypeError("The type of data should be int32, int64, float or double") # <<<<<<<<<<<<<< + * + * zfp_field_set_type(field,the_type) + */ + __pyx_tuple_ = PyTuple_Pack(1, __pyx_kp_s_The_type_of_data_should_be_int32); if (unlikely(!__pyx_tuple_)) __PYX_ERR(0, 156, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple_); + __Pyx_GIVEREF(__pyx_tuple_); + + /* "numcodecs/zfp.pyx":179 + * zfp_field_set_stride_4d(field,input_array.strides[3]/input_array.itemsize,input_array.strides[2]/input_array.itemsize,input_array.strides[1]/input_array.itemsize,input_array.strides[0]/input_array.itemsize) + * else: + * raise ValueError("The dimension of data should be equal or less than 4, please reshape") # <<<<<<<<<<<<<< + * # setup compression mode + * zfp=zfp_stream_open(NULL) + */ + __pyx_tuple__2 = PyTuple_Pack(1, __pyx_kp_s_The_dimension_of_data_should_be); if (unlikely(!__pyx_tuple__2)) __PYX_ERR(0, 179, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__2); + __Pyx_GIVEREF(__pyx_tuple__2); + + /* "numcodecs/zfp.pyx":191 + * zfp_stream_set_params(zfp,method['minbits'],method['maxbits'],method['maxprec'],method['minexp']) + * else: + * raise ValueError('Must specify zfp mode') # <<<<<<<<<<<<<< + * + * # setup destination + */ + __pyx_tuple__3 = PyTuple_Pack(1, __pyx_kp_s_Must_specify_zfp_mode); if (unlikely(!__pyx_tuple__3)) __PYX_ERR(0, 191, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__3); + __Pyx_GIVEREF(__pyx_tuple__3); + + /* "numcodecs/zfp.pyx":205 + * ret = zfp_write_header(zfp,field,ZFP_HEADER_FULL) + * if not ret: + * raise RuntimeError("zfp_write_header failed") # <<<<<<<<<<<<<< + * compressed_size = zfp_compress(zfp,field) + * if not compressed_size: + */ + __pyx_tuple__4 = PyTuple_Pack(1, __pyx_kp_s_zfp_write_header_failed); if (unlikely(!__pyx_tuple__4)) __PYX_ERR(0, 205, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__4); + __Pyx_GIVEREF(__pyx_tuple__4); + + /* "numcodecs/zfp.pyx":208 + * compressed_size = zfp_compress(zfp,field) + * if not compressed_size: + * raise RuntimeError("zfp_compress is failed") # <<<<<<<<<<<<<< + * + * # release buffers + */ + __pyx_tuple__5 = PyTuple_Pack(1, __pyx_kp_s_zfp_compress_is_failed); if (unlikely(!__pyx_tuple__5)) __PYX_ERR(0, 208, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__5); + __Pyx_GIVEREF(__pyx_tuple__5); + + /* "numcodecs/zfp.pyx":260 + * ret = zfp_read_header(zfp,field,ZFP_HEADER_FULL); + * if not ret: + * raise RuntimeError("zfp_read_header failed") # <<<<<<<<<<<<<< + * + * # determine destination data type + */ + __pyx_tuple__6 = PyTuple_Pack(1, __pyx_kp_s_zfp_read_header_failed); if (unlikely(!__pyx_tuple__6)) __PYX_ERR(0, 260, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__6); + __Pyx_GIVEREF(__pyx_tuple__6); + + /* "numcodecs/zfp.pyx":297 + * ret = zfp_decompress(zfp,field) + * if not ret: + * raise RuntimeError("decompress failed") # <<<<<<<<<<<<<< + * + * # release buffers + */ + __pyx_tuple__7 = PyTuple_Pack(1, __pyx_kp_s_decompress_failed); if (unlikely(!__pyx_tuple__7)) __PYX_ERR(0, 297, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__7); + __Pyx_GIVEREF(__pyx_tuple__7); + + /* "numcodecs/zfp.pyx":410 + * self.the_method['maxprec']=maxprec + * else: + * raise ValueError("Wrong mode, please set mode to 'a', 'p', 'r' or 'c'") # <<<<<<<<<<<<<< + * #self.the_method=the_method + * + */ + __pyx_tuple__8 = PyTuple_Pack(1, __pyx_kp_s_Wrong_mode_please_set_mode_to_a); if (unlikely(!__pyx_tuple__8)) __PYX_ERR(0, 410, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__8); + __Pyx_GIVEREF(__pyx_tuple__8); + + /* "numcodecs/zfp.pyx":104 + * + * + * def compress(input_array,method): # <<<<<<<<<<<<<< + * """Compress data. + * + */ + __pyx_tuple__9 = PyTuple_Pack(16, __pyx_n_s_input_array, __pyx_n_s_method, __pyx_n_s_zfp, __pyx_n_s_stream, __pyx_n_s_field, __pyx_n_s_bufsize, __pyx_n_s_stride, __pyx_n_s_source_ptr, __pyx_n_s_dest_ptr, __pyx_n_s_source_buffer, __pyx_n_s_dest_size, __pyx_n_s_compressed_size, __pyx_n_s_dest, __pyx_n_s_zfpmode, __pyx_n_s_the_type, __pyx_n_s_ret); if (unlikely(!__pyx_tuple__9)) __PYX_ERR(0, 104, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__9); + __Pyx_GIVEREF(__pyx_tuple__9); + __pyx_codeobj__10 = (PyObject*)__Pyx_PyCode_New(2, 0, 16, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__9, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_numcodecs_zfp_pyx, __pyx_n_s_compress, 104, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__10)) __PYX_ERR(0, 104, __pyx_L1_error) + + /* "numcodecs/zfp.pyx":218 + * return dest[:compressed_size] + * + * def decompress(source,dest=None): # <<<<<<<<<<<<<< + * """Decompress data. + * + */ + __pyx_tuple__11 = PyTuple_Pack(20, __pyx_n_s_source, __pyx_n_s_dest, __pyx_n_s_zfp, __pyx_n_s_stream, __pyx_n_s_field, __pyx_n_s_source_buffer, __pyx_n_s_dest_buffer, __pyx_n_s_source_ptr, __pyx_n_s_dest_ptr, __pyx_n_s_source_size, __pyx_n_s_ret, __pyx_n_s_the_type, __pyx_n_s_type_size, __pyx_n_s_nx, __pyx_n_s_ny, __pyx_n_s_nz, __pyx_n_s_nw, __pyx_n_s_datashape, __pyx_n_s_arr, __pyx_n_s_buf_shape); if (unlikely(!__pyx_tuple__11)) __PYX_ERR(0, 218, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__11); + __Pyx_GIVEREF(__pyx_tuple__11); + __pyx_codeobj__12 = (PyObject*)__Pyx_PyCode_New(2, 0, 20, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__11, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_numcodecs_zfp_pyx, __pyx_n_s_decompress, 218, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__12)) __PYX_ERR(0, 218, __pyx_L1_error) + + /* "numcodecs/zfp.pyx":328 + * + * # Initilize with defaults + * def __init__(self): # <<<<<<<<<<<<<< + * self.zfpmode='a' + * self.tolerance=0.01 + */ + __pyx_tuple__13 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__13)) __PYX_ERR(0, 328, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__13); + __Pyx_GIVEREF(__pyx_tuple__13); + __pyx_codeobj__14 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__13, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_numcodecs_zfp_pyx, __pyx_n_s_init, 328, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__14)) __PYX_ERR(0, 328, __pyx_L1_error) + + /* "numcodecs/zfp.pyx":332 + * self.tolerance=0.01 + * + * def set_mode(self,mode): # <<<<<<<<<<<<<< + * self.zfpmode=mode + * def set_tolerance(self,tol): + */ + __pyx_tuple__15 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_mode); if (unlikely(!__pyx_tuple__15)) __PYX_ERR(0, 332, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__15); + __Pyx_GIVEREF(__pyx_tuple__15); + __pyx_codeobj__16 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__15, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_numcodecs_zfp_pyx, __pyx_n_s_set_mode, 332, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__16)) __PYX_ERR(0, 332, __pyx_L1_error) + + /* "numcodecs/zfp.pyx":334 + * def set_mode(self,mode): + * self.zfpmode=mode + * def set_tolerance(self,tol): # <<<<<<<<<<<<<< + * self.tolerance=tol + * def set_precision(self,prec): + */ + __pyx_tuple__17 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_tol); if (unlikely(!__pyx_tuple__17)) __PYX_ERR(0, 334, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__17); + __Pyx_GIVEREF(__pyx_tuple__17); + __pyx_codeobj__18 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__17, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_numcodecs_zfp_pyx, __pyx_n_s_set_tolerance, 334, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__18)) __PYX_ERR(0, 334, __pyx_L1_error) + + /* "numcodecs/zfp.pyx":336 + * def set_tolerance(self,tol): + * self.tolerance=tol + * def set_precision(self,prec): # <<<<<<<<<<<<<< + * self.precision=prec + * def set_rate(self,rate): + */ + __pyx_tuple__19 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_prec); if (unlikely(!__pyx_tuple__19)) __PYX_ERR(0, 336, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__19); + __Pyx_GIVEREF(__pyx_tuple__19); + __pyx_codeobj__20 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__19, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_numcodecs_zfp_pyx, __pyx_n_s_set_precision, 336, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__20)) __PYX_ERR(0, 336, __pyx_L1_error) + + /* "numcodecs/zfp.pyx":338 + * def set_precision(self,prec): + * self.precision=prec + * def set_rate(self,rate): # <<<<<<<<<<<<<< + * self.rate=rate + * def set_minbits(self,minbits): + */ + __pyx_tuple__21 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_rate); if (unlikely(!__pyx_tuple__21)) __PYX_ERR(0, 338, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__21); + __Pyx_GIVEREF(__pyx_tuple__21); + __pyx_codeobj__22 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__21, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_numcodecs_zfp_pyx, __pyx_n_s_set_rate, 338, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__22)) __PYX_ERR(0, 338, __pyx_L1_error) + + /* "numcodecs/zfp.pyx":340 + * def set_rate(self,rate): + * self.rate=rate + * def set_minbits(self,minbits): # <<<<<<<<<<<<<< + * self.minbits=minbits + * def set_maxbits(self,maxbits): + */ + __pyx_tuple__23 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_minbits); if (unlikely(!__pyx_tuple__23)) __PYX_ERR(0, 340, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__23); + __Pyx_GIVEREF(__pyx_tuple__23); + __pyx_codeobj__24 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__23, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_numcodecs_zfp_pyx, __pyx_n_s_set_minbits, 340, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__24)) __PYX_ERR(0, 340, __pyx_L1_error) + + /* "numcodecs/zfp.pyx":342 + * def set_minbits(self,minbits): + * self.minbits=minbits + * def set_maxbits(self,maxbits): # <<<<<<<<<<<<<< + * self.maxbits=maxbits + * def set_maxprec(self,maxprec): + */ + __pyx_tuple__25 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_maxbits); if (unlikely(!__pyx_tuple__25)) __PYX_ERR(0, 342, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__25); + __Pyx_GIVEREF(__pyx_tuple__25); + __pyx_codeobj__26 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__25, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_numcodecs_zfp_pyx, __pyx_n_s_set_maxbits, 342, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__26)) __PYX_ERR(0, 342, __pyx_L1_error) + + /* "numcodecs/zfp.pyx":344 + * def set_maxbits(self,maxbits): + * self.maxbits=maxbits + * def set_maxprec(self,maxprec): # <<<<<<<<<<<<<< + * self.maxprec=maxprec + * def set_minexp(self,minexp): + */ + __pyx_tuple__27 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_maxprec); if (unlikely(!__pyx_tuple__27)) __PYX_ERR(0, 344, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__27); + __Pyx_GIVEREF(__pyx_tuple__27); + __pyx_codeobj__28 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__27, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_numcodecs_zfp_pyx, __pyx_n_s_set_maxprec, 344, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__28)) __PYX_ERR(0, 344, __pyx_L1_error) + + /* "numcodecs/zfp.pyx":346 + * def set_maxprec(self,maxprec): + * self.maxprec=maxprec + * def set_minexp(self,minexp): # <<<<<<<<<<<<<< + * self.minexp=minexp + * + */ + __pyx_tuple__29 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_minexp); if (unlikely(!__pyx_tuple__29)) __PYX_ERR(0, 346, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__29); + __Pyx_GIVEREF(__pyx_tuple__29); + __pyx_codeobj__30 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__29, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_numcodecs_zfp_pyx, __pyx_n_s_set_minexp, 346, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__30)) __PYX_ERR(0, 346, __pyx_L1_error) + + /* "numcodecs/zfp.pyx":382 + * codec_id = 'zfp' + * + * def __init__(self, mode = 'a',tol = 0.0, prec = ZFP_MAX_PREC, rate = 0, minbits = ZFP_MIN_BITS, maxbits = ZFP_MAX_BITS, minexp = ZFP_MIN_EXP, maxprec = ZFP_MAX_PREC,the_method=None): # <<<<<<<<<<<<<< + * self.mode=mode + * #the_method=CompressMethod() + */ + __pyx_tuple__31 = PyTuple_Pack(10, __pyx_n_s_self, __pyx_n_s_mode, __pyx_n_s_tol, __pyx_n_s_prec, __pyx_n_s_rate, __pyx_n_s_minbits, __pyx_n_s_maxbits, __pyx_n_s_minexp, __pyx_n_s_maxprec, __pyx_n_s_the_method); if (unlikely(!__pyx_tuple__31)) __PYX_ERR(0, 382, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__31); + __Pyx_GIVEREF(__pyx_tuple__31); + __pyx_codeobj__32 = (PyObject*)__Pyx_PyCode_New(10, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__31, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_numcodecs_zfp_pyx, __pyx_n_s_init, 382, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__32)) __PYX_ERR(0, 382, __pyx_L1_error) + + /* "numcodecs/zfp.pyx":413 + * #self.the_method=the_method + * + * def encode(self,buf): # <<<<<<<<<<<<<< + * #buf = ensure_contiguous_ndarray(buf) + * return compress(buf,self.the_method) + */ + __pyx_tuple__33 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_buf); if (unlikely(!__pyx_tuple__33)) __PYX_ERR(0, 413, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__33); + __Pyx_GIVEREF(__pyx_tuple__33); + __pyx_codeobj__34 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__33, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_numcodecs_zfp_pyx, __pyx_n_s_encode, 413, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__34)) __PYX_ERR(0, 413, __pyx_L1_error) + + /* "numcodecs/zfp.pyx":417 + * return compress(buf,self.the_method) + * + * def decode(self,buf,out=None): # <<<<<<<<<<<<<< + * buf=ensure_contiguous_ndarray(buf) + * return decompress(buf,out) + */ + __pyx_tuple__35 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_buf, __pyx_n_s_out); if (unlikely(!__pyx_tuple__35)) __PYX_ERR(0, 417, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__35); + __Pyx_GIVEREF(__pyx_tuple__35); + __pyx_codeobj__36 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__35, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_numcodecs_zfp_pyx, __pyx_n_s_decode, 417, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__36)) __PYX_ERR(0, 417, __pyx_L1_error) + __pyx_tuple__37 = PyTuple_Pack(1, ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__37)) __PYX_ERR(0, 417, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__37); + __Pyx_GIVEREF(__pyx_tuple__37); + + /* "numcodecs/zfp.pyx":421 + * return decompress(buf,out) + * + * def __repr__(self): # <<<<<<<<<<<<<< + * if self.mode == 'a': + * r= '%s(mode=%r,tol=%s)' % (type(self).__name__, self.mode,self.tol) + */ + __pyx_tuple__38 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_r); if (unlikely(!__pyx_tuple__38)) __PYX_ERR(0, 421, __pyx_L1_error) + __Pyx_GOTREF(__pyx_tuple__38); + __Pyx_GIVEREF(__pyx_tuple__38); + __pyx_codeobj__39 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__38, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_numcodecs_zfp_pyx, __pyx_n_s_repr, 421, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__39)) __PYX_ERR(0, 421, __pyx_L1_error) + __Pyx_RefNannyFinishContext(); + return 0; + __pyx_L1_error:; + __Pyx_RefNannyFinishContext(); + return -1; +} + +static CYTHON_SMALL_CODE int __Pyx_InitGlobals(void) { + if (__Pyx_InitStrings(__pyx_string_tab) < 0) __PYX_ERR(0, 1, __pyx_L1_error); + __pyx_float_0_0 = PyFloat_FromDouble(0.0); if (unlikely(!__pyx_float_0_0)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_float_0_01 = PyFloat_FromDouble(0.01); if (unlikely(!__pyx_float_0_01)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_0 = PyInt_FromLong(0); if (unlikely(!__pyx_int_0)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_1 = PyInt_FromLong(1); if (unlikely(!__pyx_int_1)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_2 = PyInt_FromLong(2); if (unlikely(!__pyx_int_2)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_3 = PyInt_FromLong(3); if (unlikely(!__pyx_int_3)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_4 = PyInt_FromLong(4); if (unlikely(!__pyx_int_4)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_int_8 = PyInt_FromLong(8); if (unlikely(!__pyx_int_8)) __PYX_ERR(0, 1, __pyx_L1_error) + return 0; + __pyx_L1_error:; + return -1; +} + +static CYTHON_SMALL_CODE int __Pyx_modinit_global_init_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_variable_export_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_function_export_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_type_init_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_type_import_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_variable_import_code(void); /*proto*/ +static CYTHON_SMALL_CODE int __Pyx_modinit_function_import_code(void); /*proto*/ + +static int __Pyx_modinit_global_init_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_global_init_code", 0); + /*--- Global init code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_variable_export_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_variable_export_code", 0); + /*--- Variable export code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_function_export_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_function_export_code", 0); + /*--- Function export code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_type_init_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_type_init_code", 0); + /*--- Type init code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_type_import_code(void) { + __Pyx_RefNannyDeclarations + PyObject *__pyx_t_1 = NULL; + __Pyx_RefNannySetupContext("__Pyx_modinit_type_import_code", 0); + /*--- Type import code ---*/ + __pyx_t_1 = PyImport_ImportModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 9, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_ptype_7cpython_4type_type = __Pyx_ImportType(__pyx_t_1, __Pyx_BUILTIN_MODULE_NAME, "type", + #if defined(PYPY_VERSION_NUM) && PYPY_VERSION_NUM < 0x050B0000 + sizeof(PyTypeObject), + #else + sizeof(PyHeapTypeObject), + #endif + __Pyx_ImportType_CheckSize_Warn); + if (!__pyx_ptype_7cpython_4type_type) __PYX_ERR(1, 9, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = PyImport_ImportModule("numcodecs.compat_ext"); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __pyx_ptype_9numcodecs_10compat_ext_Buffer = __Pyx_ImportType(__pyx_t_1, "numcodecs.compat_ext", "Buffer", sizeof(struct __pyx_obj_9numcodecs_10compat_ext_Buffer), __Pyx_ImportType_CheckSize_Warn); + if (!__pyx_ptype_9numcodecs_10compat_ext_Buffer) __PYX_ERR(2, 4, __pyx_L1_error) + __pyx_vtabptr_9numcodecs_10compat_ext_Buffer = (struct __pyx_vtabstruct_9numcodecs_10compat_ext_Buffer*)__Pyx_GetVtable(__pyx_ptype_9numcodecs_10compat_ext_Buffer->tp_dict); if (unlikely(!__pyx_vtabptr_9numcodecs_10compat_ext_Buffer)) __PYX_ERR(2, 4, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_RefNannyFinishContext(); + return 0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_RefNannyFinishContext(); + return -1; +} + +static int __Pyx_modinit_variable_import_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_variable_import_code", 0); + /*--- Variable import code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + +static int __Pyx_modinit_function_import_code(void) { + __Pyx_RefNannyDeclarations + __Pyx_RefNannySetupContext("__Pyx_modinit_function_import_code", 0); + /*--- Function import code ---*/ + __Pyx_RefNannyFinishContext(); + return 0; +} + + +#if PY_MAJOR_VERSION < 3 +#ifdef CYTHON_NO_PYINIT_EXPORT +#define __Pyx_PyMODINIT_FUNC void +#else +#define __Pyx_PyMODINIT_FUNC PyMODINIT_FUNC +#endif +#else +#ifdef CYTHON_NO_PYINIT_EXPORT +#define __Pyx_PyMODINIT_FUNC PyObject * +#else +#define __Pyx_PyMODINIT_FUNC PyMODINIT_FUNC +#endif +#endif + + +#if PY_MAJOR_VERSION < 3 +__Pyx_PyMODINIT_FUNC initzfp(void) CYTHON_SMALL_CODE; /*proto*/ +__Pyx_PyMODINIT_FUNC initzfp(void) +#else +__Pyx_PyMODINIT_FUNC PyInit_zfp(void) CYTHON_SMALL_CODE; /*proto*/ +__Pyx_PyMODINIT_FUNC PyInit_zfp(void) +#if CYTHON_PEP489_MULTI_PHASE_INIT +{ + return PyModuleDef_Init(&__pyx_moduledef); +} +static CYTHON_SMALL_CODE int __Pyx_check_single_interpreter(void) { + #if PY_VERSION_HEX >= 0x030700A1 + static PY_INT64_T main_interpreter_id = -1; + PY_INT64_T current_id = PyInterpreterState_GetID(PyThreadState_Get()->interp); + if (main_interpreter_id == -1) { + main_interpreter_id = current_id; + return (unlikely(current_id == -1)) ? -1 : 0; + } else if (unlikely(main_interpreter_id != current_id)) + #else + static PyInterpreterState *main_interpreter = NULL; + PyInterpreterState *current_interpreter = PyThreadState_Get()->interp; + if (!main_interpreter) { + main_interpreter = current_interpreter; + } else if (unlikely(main_interpreter != current_interpreter)) + #endif + { + PyErr_SetString( + PyExc_ImportError, + "Interpreter change detected - this module can only be loaded into one interpreter per process."); + return -1; + } + return 0; +} +static CYTHON_SMALL_CODE int __Pyx_copy_spec_to_module(PyObject *spec, PyObject *moddict, const char* from_name, const char* to_name, int allow_none) { + PyObject *value = PyObject_GetAttrString(spec, from_name); + int result = 0; + if (likely(value)) { + if (allow_none || value != Py_None) { + result = PyDict_SetItemString(moddict, to_name, value); + } + Py_DECREF(value); + } else if (PyErr_ExceptionMatches(PyExc_AttributeError)) { + PyErr_Clear(); + } else { + result = -1; + } + return result; +} +static CYTHON_SMALL_CODE PyObject* __pyx_pymod_create(PyObject *spec, CYTHON_UNUSED PyModuleDef *def) { + PyObject *module = NULL, *moddict, *modname; + if (__Pyx_check_single_interpreter()) + return NULL; + if (__pyx_m) + return __Pyx_NewRef(__pyx_m); + modname = PyObject_GetAttrString(spec, "name"); + if (unlikely(!modname)) goto bad; + module = PyModule_NewObject(modname); + Py_DECREF(modname); + if (unlikely(!module)) goto bad; + moddict = PyModule_GetDict(module); + if (unlikely(!moddict)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "loader", "__loader__", 1) < 0)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "origin", "__file__", 1) < 0)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "parent", "__package__", 1) < 0)) goto bad; + if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "submodule_search_locations", "__path__", 0) < 0)) goto bad; + return module; +bad: + Py_XDECREF(module); + return NULL; +} + + +static CYTHON_SMALL_CODE int __pyx_pymod_exec_zfp(PyObject *__pyx_pyinit_module) +#endif +#endif +{ + PyObject *__pyx_t_1 = NULL; + PyObject *__pyx_t_2 = NULL; + PyObject *__pyx_t_3 = NULL; + PyObject *__pyx_t_4 = NULL; + PyObject *__pyx_t_5 = NULL; + __Pyx_RefNannyDeclarations + #if CYTHON_PEP489_MULTI_PHASE_INIT + if (__pyx_m) { + if (__pyx_m == __pyx_pyinit_module) return 0; + PyErr_SetString(PyExc_RuntimeError, "Module 'zfp' has already been imported. Re-initialisation is not supported."); + return -1; + } + #elif PY_MAJOR_VERSION >= 3 + if (__pyx_m) return __Pyx_NewRef(__pyx_m); + #endif + #if CYTHON_REFNANNY +__Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny"); +if (!__Pyx_RefNanny) { + PyErr_Clear(); + __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny"); + if (!__Pyx_RefNanny) + Py_FatalError("failed to import 'refnanny' module"); +} +#endif + __Pyx_RefNannySetupContext("__Pyx_PyMODINIT_FUNC PyInit_zfp(void)", 0); + if (__Pyx_check_binary_version() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #ifdef __Pxy_PyFrame_Initialize_Offsets + __Pxy_PyFrame_Initialize_Offsets(); + #endif + __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) __PYX_ERR(0, 1, __pyx_L1_error) + __pyx_empty_unicode = PyUnicode_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_unicode)) __PYX_ERR(0, 1, __pyx_L1_error) + #ifdef __Pyx_CyFunction_USED + if (__pyx_CyFunction_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_FusedFunction_USED + if (__pyx_FusedFunction_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_Coroutine_USED + if (__pyx_Coroutine_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_Generator_USED + if (__pyx_Generator_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_AsyncGen_USED + if (__pyx_AsyncGen_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + #ifdef __Pyx_StopAsyncIteration_USED + if (__pyx_StopAsyncIteration_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + /*--- Library function declarations ---*/ + /*--- Threads initialization code ---*/ + #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS + #ifdef WITH_THREAD /* Python build with threading support? */ + PyEval_InitThreads(); + #endif + #endif + /*--- Module creation code ---*/ + #if CYTHON_PEP489_MULTI_PHASE_INIT + __pyx_m = __pyx_pyinit_module; + Py_INCREF(__pyx_m); + #else + #if PY_MAJOR_VERSION < 3 + __pyx_m = Py_InitModule4("zfp", __pyx_methods, 0, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m); + #else + __pyx_m = PyModule_Create(&__pyx_moduledef); + #endif + if (unlikely(!__pyx_m)) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) __PYX_ERR(0, 1, __pyx_L1_error) + Py_INCREF(__pyx_d); + __pyx_b = PyImport_AddModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_b)) __PYX_ERR(0, 1, __pyx_L1_error) + Py_INCREF(__pyx_b); + __pyx_cython_runtime = PyImport_AddModule((char *) "cython_runtime"); if (unlikely(!__pyx_cython_runtime)) __PYX_ERR(0, 1, __pyx_L1_error) + Py_INCREF(__pyx_cython_runtime); + if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) __PYX_ERR(0, 1, __pyx_L1_error); + /*--- Initialize various global constants etc. ---*/ + if (__Pyx_InitGlobals() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT) + if (__Pyx_init_sys_getdefaultencoding_params() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + if (__pyx_module_is_main_numcodecs__zfp) { + if (PyObject_SetAttr(__pyx_m, __pyx_n_s_name, __pyx_n_s_main) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + } + #if PY_MAJOR_VERSION >= 3 + { + PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) __PYX_ERR(0, 1, __pyx_L1_error) + if (!PyDict_GetItemString(modules, "numcodecs.zfp")) { + if (unlikely(PyDict_SetItemString(modules, "numcodecs.zfp", __pyx_m) < 0)) __PYX_ERR(0, 1, __pyx_L1_error) + } + } + #endif + /*--- Builtin init code ---*/ + if (__Pyx_InitCachedBuiltins() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + /*--- Constants init code ---*/ + if (__Pyx_InitCachedConstants() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + /*--- Global type/function init code ---*/ + (void)__Pyx_modinit_global_init_code(); + (void)__Pyx_modinit_variable_export_code(); + (void)__Pyx_modinit_function_export_code(); + (void)__Pyx_modinit_type_init_code(); + if (unlikely(__Pyx_modinit_type_import_code() != 0)) goto __pyx_L1_error; + (void)__Pyx_modinit_variable_import_code(); + (void)__Pyx_modinit_function_import_code(); + /*--- Execution code ---*/ + #if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED) + if (__Pyx_patch_abc() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + #endif + + /* "numcodecs/zfp.pyx":5 + * cimport cython + * #from cpython cimport array + * import numpy as np # <<<<<<<<<<<<<< + * import sys + * #import array + */ + __pyx_t_1 = __Pyx_Import(__pyx_n_s_numpy, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_np, __pyx_t_1) < 0) __PYX_ERR(0, 5, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "numcodecs/zfp.pyx":6 + * #from cpython cimport array + * import numpy as np + * import sys # <<<<<<<<<<<<<< + * #import array + * + */ + __pyx_t_1 = __Pyx_Import(__pyx_n_s_sys, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_sys, __pyx_t_1) < 0) __PYX_ERR(0, 6, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "numcodecs/zfp.pyx":13 + * + * from .compat_ext cimport Buffer + * from .compat_ext import Buffer # <<<<<<<<<<<<<< + * from numcodecs.compat import ensure_contiguous_ndarray,ensure_ndarray + * from numcodecs.abc import Codec + */ + __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_n_s_Buffer); + __Pyx_GIVEREF(__pyx_n_s_Buffer); + PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_Buffer); + __pyx_t_2 = __Pyx_Import(__pyx_n_s_compat_ext, __pyx_t_1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 13, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "numcodecs/zfp.pyx":14 + * from .compat_ext cimport Buffer + * from .compat_ext import Buffer + * from numcodecs.compat import ensure_contiguous_ndarray,ensure_ndarray # <<<<<<<<<<<<<< + * from numcodecs.abc import Codec + * + */ + __pyx_t_2 = PyList_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_INCREF(__pyx_n_s_ensure_contiguous_ndarray); + __Pyx_GIVEREF(__pyx_n_s_ensure_contiguous_ndarray); + PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_ensure_contiguous_ndarray); + __Pyx_INCREF(__pyx_n_s_ensure_ndarray); + __Pyx_GIVEREF(__pyx_n_s_ensure_ndarray); + PyList_SET_ITEM(__pyx_t_2, 1, __pyx_n_s_ensure_ndarray); + __pyx_t_1 = __Pyx_Import(__pyx_n_s_numcodecs_compat, __pyx_t_2, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_ensure_contiguous_ndarray); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_ensure_contiguous_ndarray, __pyx_t_2) < 0) __PYX_ERR(0, 14, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_ensure_ndarray); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 14, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_ensure_ndarray, __pyx_t_2) < 0) __PYX_ERR(0, 14, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "numcodecs/zfp.pyx":15 + * from .compat_ext import Buffer + * from numcodecs.compat import ensure_contiguous_ndarray,ensure_ndarray + * from numcodecs.abc import Codec # <<<<<<<<<<<<<< + * + * + */ + __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_INCREF(__pyx_n_s_Codec); + __Pyx_GIVEREF(__pyx_n_s_Codec); + PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_Codec); + __pyx_t_2 = __Pyx_Import(__pyx_n_s_numcodecs_abc, __pyx_t_1, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_Codec); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 15, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_Codec, __pyx_t_1) < 0) __PYX_ERR(0, 15, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "numcodecs/zfp.pyx":100 + * size_t zfp_read_header(zfp_stream* stream, zfp_field* field, unsigned int mask) + * + * VERSION_STRING = ZFP_VERSION_STRING # <<<<<<<<<<<<<< + * __version__ = VERSION_STRING + * + */ + __pyx_t_2 = __Pyx_PyBytes_FromString(((char *)ZFP_VERSION_STRING)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 100, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_VERSION_STRING, __pyx_t_2) < 0) __PYX_ERR(0, 100, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "numcodecs/zfp.pyx":101 + * + * VERSION_STRING = ZFP_VERSION_STRING + * __version__ = VERSION_STRING # <<<<<<<<<<<<<< + * + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_VERSION_STRING); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 101, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_version, __pyx_t_2) < 0) __PYX_ERR(0, 101, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "numcodecs/zfp.pyx":104 + * + * + * def compress(input_array,method): # <<<<<<<<<<<<<< + * """Compress data. + * + */ + __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_9numcodecs_3zfp_1compress, NULL, __pyx_n_s_numcodecs_zfp); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 104, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_compress, __pyx_t_2) < 0) __PYX_ERR(0, 104, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "numcodecs/zfp.pyx":218 + * return dest[:compressed_size] + * + * def decompress(source,dest=None): # <<<<<<<<<<<<<< + * """Decompress data. + * + */ + __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_9numcodecs_3zfp_3decompress, NULL, __pyx_n_s_numcodecs_zfp); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 218, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_decompress, __pyx_t_2) < 0) __PYX_ERR(0, 218, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "numcodecs/zfp.pyx":320 + * return dest + * + * class CompressMethod: # <<<<<<<<<<<<<< + * ''' + * Create a CompressMethod object to store zfp mode and + */ + __pyx_t_2 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_empty_tuple, __pyx_n_s_CompressMethod, __pyx_n_s_CompressMethod, (PyObject *) NULL, __pyx_n_s_numcodecs_zfp, __pyx_kp_s_Create_a_CompressMethod_object); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 320, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + + /* "numcodecs/zfp.pyx":328 + * + * # Initilize with defaults + * def __init__(self): # <<<<<<<<<<<<<< + * self.zfpmode='a' + * self.tolerance=0.01 + */ + __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_9numcodecs_3zfp_14CompressMethod_1__init__, 0, __pyx_n_s_CompressMethod___init, NULL, __pyx_n_s_numcodecs_zfp, __pyx_d, ((PyObject *)__pyx_codeobj__14)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 328, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_init, __pyx_t_1) < 0) __PYX_ERR(0, 328, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "numcodecs/zfp.pyx":332 + * self.tolerance=0.01 + * + * def set_mode(self,mode): # <<<<<<<<<<<<<< + * self.zfpmode=mode + * def set_tolerance(self,tol): + */ + __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_9numcodecs_3zfp_14CompressMethod_3set_mode, 0, __pyx_n_s_CompressMethod_set_mode, NULL, __pyx_n_s_numcodecs_zfp, __pyx_d, ((PyObject *)__pyx_codeobj__16)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 332, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_set_mode, __pyx_t_1) < 0) __PYX_ERR(0, 332, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "numcodecs/zfp.pyx":334 + * def set_mode(self,mode): + * self.zfpmode=mode + * def set_tolerance(self,tol): # <<<<<<<<<<<<<< + * self.tolerance=tol + * def set_precision(self,prec): + */ + __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_9numcodecs_3zfp_14CompressMethod_5set_tolerance, 0, __pyx_n_s_CompressMethod_set_tolerance, NULL, __pyx_n_s_numcodecs_zfp, __pyx_d, ((PyObject *)__pyx_codeobj__18)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 334, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_set_tolerance, __pyx_t_1) < 0) __PYX_ERR(0, 334, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "numcodecs/zfp.pyx":336 + * def set_tolerance(self,tol): + * self.tolerance=tol + * def set_precision(self,prec): # <<<<<<<<<<<<<< + * self.precision=prec + * def set_rate(self,rate): + */ + __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_9numcodecs_3zfp_14CompressMethod_7set_precision, 0, __pyx_n_s_CompressMethod_set_precision, NULL, __pyx_n_s_numcodecs_zfp, __pyx_d, ((PyObject *)__pyx_codeobj__20)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 336, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_set_precision, __pyx_t_1) < 0) __PYX_ERR(0, 336, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "numcodecs/zfp.pyx":338 + * def set_precision(self,prec): + * self.precision=prec + * def set_rate(self,rate): # <<<<<<<<<<<<<< + * self.rate=rate + * def set_minbits(self,minbits): + */ + __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_9numcodecs_3zfp_14CompressMethod_9set_rate, 0, __pyx_n_s_CompressMethod_set_rate, NULL, __pyx_n_s_numcodecs_zfp, __pyx_d, ((PyObject *)__pyx_codeobj__22)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 338, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_set_rate, __pyx_t_1) < 0) __PYX_ERR(0, 338, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "numcodecs/zfp.pyx":340 + * def set_rate(self,rate): + * self.rate=rate + * def set_minbits(self,minbits): # <<<<<<<<<<<<<< + * self.minbits=minbits + * def set_maxbits(self,maxbits): + */ + __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_9numcodecs_3zfp_14CompressMethod_11set_minbits, 0, __pyx_n_s_CompressMethod_set_minbits, NULL, __pyx_n_s_numcodecs_zfp, __pyx_d, ((PyObject *)__pyx_codeobj__24)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 340, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_set_minbits, __pyx_t_1) < 0) __PYX_ERR(0, 340, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "numcodecs/zfp.pyx":342 + * def set_minbits(self,minbits): + * self.minbits=minbits + * def set_maxbits(self,maxbits): # <<<<<<<<<<<<<< + * self.maxbits=maxbits + * def set_maxprec(self,maxprec): + */ + __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_9numcodecs_3zfp_14CompressMethod_13set_maxbits, 0, __pyx_n_s_CompressMethod_set_maxbits, NULL, __pyx_n_s_numcodecs_zfp, __pyx_d, ((PyObject *)__pyx_codeobj__26)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 342, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_set_maxbits, __pyx_t_1) < 0) __PYX_ERR(0, 342, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "numcodecs/zfp.pyx":344 + * def set_maxbits(self,maxbits): + * self.maxbits=maxbits + * def set_maxprec(self,maxprec): # <<<<<<<<<<<<<< + * self.maxprec=maxprec + * def set_minexp(self,minexp): + */ + __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_9numcodecs_3zfp_14CompressMethod_15set_maxprec, 0, __pyx_n_s_CompressMethod_set_maxprec, NULL, __pyx_n_s_numcodecs_zfp, __pyx_d, ((PyObject *)__pyx_codeobj__28)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 344, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_set_maxprec, __pyx_t_1) < 0) __PYX_ERR(0, 344, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "numcodecs/zfp.pyx":346 + * def set_maxprec(self,maxprec): + * self.maxprec=maxprec + * def set_minexp(self,minexp): # <<<<<<<<<<<<<< + * self.minexp=minexp + * + */ + __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_9numcodecs_3zfp_14CompressMethod_17set_minexp, 0, __pyx_n_s_CompressMethod_set_minexp, NULL, __pyx_n_s_numcodecs_zfp, __pyx_d, ((PyObject *)__pyx_codeobj__30)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 346, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_set_minexp, __pyx_t_1) < 0) __PYX_ERR(0, 346, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "numcodecs/zfp.pyx":320 + * return dest + * + * class CompressMethod: # <<<<<<<<<<<<<< + * ''' + * Create a CompressMethod object to store zfp mode and + */ + __pyx_t_1 = __Pyx_Py3ClassCreate(((PyObject*)&__Pyx_DefaultClassType), __pyx_n_s_CompressMethod, __pyx_empty_tuple, __pyx_t_2, NULL, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 320, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_CompressMethod, __pyx_t_1) < 0) __PYX_ERR(0, 320, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + + /* "numcodecs/zfp.pyx":349 + * self.minexp=minexp + * + * class Zfp(Codec): # <<<<<<<<<<<<<< + * """Codec providing compression using zfp via the Python standard library. + * + */ + __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_Codec); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 349, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 349, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + __Pyx_GIVEREF(__pyx_t_2); + PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2); + __pyx_t_2 = 0; + __pyx_t_2 = __Pyx_CalculateMetaclass(NULL, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 349, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_2); + __pyx_t_3 = __Pyx_Py3MetaclassPrepare(__pyx_t_2, __pyx_t_1, __pyx_n_s_Zfp, __pyx_n_s_Zfp, (PyObject *) NULL, __pyx_n_s_numcodecs_zfp, __pyx_kp_s_Codec_providing_compression_usin); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 349, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_3); + + /* "numcodecs/zfp.pyx":380 + * Max bits of precision per value, 0 for full + * """ + * codec_id = 'zfp' # <<<<<<<<<<<<<< + * + * def __init__(self, mode = 'a',tol = 0.0, prec = ZFP_MAX_PREC, rate = 0, minbits = ZFP_MIN_BITS, maxbits = ZFP_MAX_BITS, minexp = ZFP_MIN_EXP, maxprec = ZFP_MAX_PREC,the_method=None): + */ + if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_codec_id, __pyx_n_s_zfp) < 0) __PYX_ERR(0, 380, __pyx_L1_error) + + /* "numcodecs/zfp.pyx":382 + * codec_id = 'zfp' + * + * def __init__(self, mode = 'a',tol = 0.0, prec = ZFP_MAX_PREC, rate = 0, minbits = ZFP_MIN_BITS, maxbits = ZFP_MAX_BITS, minexp = ZFP_MIN_EXP, maxprec = ZFP_MAX_PREC,the_method=None): # <<<<<<<<<<<<<< + * self.mode=mode + * #the_method=CompressMethod() + */ + __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_9numcodecs_3zfp_3Zfp_1__init__, 0, __pyx_n_s_Zfp___init, NULL, __pyx_n_s_numcodecs_zfp, __pyx_d, ((PyObject *)__pyx_codeobj__32)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 382, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (!__Pyx_CyFunction_InitDefaults(__pyx_t_4, sizeof(__pyx_defaults), 5)) __PYX_ERR(0, 382, __pyx_L1_error) + __pyx_t_5 = __Pyx_PyInt_From_int(ZFP_MAX_PREC); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 382, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_t_4)->__pyx_arg_prec = __pyx_t_5; + __Pyx_GIVEREF(__pyx_t_5); + __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyInt_From_int(ZFP_MIN_BITS); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 382, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_t_4)->__pyx_arg_minbits = __pyx_t_5; + __Pyx_GIVEREF(__pyx_t_5); + __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyInt_From_int(ZFP_MAX_BITS); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 382, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_t_4)->__pyx_arg_maxbits = __pyx_t_5; + __Pyx_GIVEREF(__pyx_t_5); + __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyInt_From_int(ZFP_MIN_EXP); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 382, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_t_4)->__pyx_arg_minexp = __pyx_t_5; + __Pyx_GIVEREF(__pyx_t_5); + __pyx_t_5 = 0; + __pyx_t_5 = __Pyx_PyInt_From_int(ZFP_MAX_PREC); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 382, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_5); + __Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_t_4)->__pyx_arg_maxprec = __pyx_t_5; + __Pyx_GIVEREF(__pyx_t_5); + __pyx_t_5 = 0; + __Pyx_CyFunction_SetDefaultsGetter(__pyx_t_4, __pyx_pf_9numcodecs_3zfp_4__defaults__); + if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_init, __pyx_t_4) < 0) __PYX_ERR(0, 382, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "numcodecs/zfp.pyx":413 + * #self.the_method=the_method + * + * def encode(self,buf): # <<<<<<<<<<<<<< + * #buf = ensure_contiguous_ndarray(buf) + * return compress(buf,self.the_method) + */ + __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_9numcodecs_3zfp_3Zfp_3encode, 0, __pyx_n_s_Zfp_encode, NULL, __pyx_n_s_numcodecs_zfp, __pyx_d, ((PyObject *)__pyx_codeobj__34)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 413, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_encode, __pyx_t_4) < 0) __PYX_ERR(0, 413, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "numcodecs/zfp.pyx":417 + * return compress(buf,self.the_method) + * + * def decode(self,buf,out=None): # <<<<<<<<<<<<<< + * buf=ensure_contiguous_ndarray(buf) + * return decompress(buf,out) + */ + __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_9numcodecs_3zfp_3Zfp_5decode, 0, __pyx_n_s_Zfp_decode, NULL, __pyx_n_s_numcodecs_zfp, __pyx_d, ((PyObject *)__pyx_codeobj__36)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 417, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, __pyx_tuple__37); + if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_decode, __pyx_t_4) < 0) __PYX_ERR(0, 417, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "numcodecs/zfp.pyx":421 + * return decompress(buf,out) + * + * def __repr__(self): # <<<<<<<<<<<<<< + * if self.mode == 'a': + * r= '%s(mode=%r,tol=%s)' % (type(self).__name__, self.mode,self.tol) + */ + __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_9numcodecs_3zfp_3Zfp_7__repr__, 0, __pyx_n_s_Zfp___repr, NULL, __pyx_n_s_numcodecs_zfp, __pyx_d, ((PyObject *)__pyx_codeobj__39)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 421, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_repr, __pyx_t_4) < 0) __PYX_ERR(0, 421, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + + /* "numcodecs/zfp.pyx":349 + * self.minexp=minexp + * + * class Zfp(Codec): # <<<<<<<<<<<<<< + * """Codec providing compression using zfp via the Python standard library. + * + */ + __pyx_t_4 = __Pyx_Py3ClassCreate(__pyx_t_2, __pyx_n_s_Zfp, __pyx_t_1, __pyx_t_3, NULL, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 349, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_4); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_Zfp, __pyx_t_4) < 0) __PYX_ERR(0, 349, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; + __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; + __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /* "numcodecs/zfp.pyx":1 + * from __future__ import absolute_import, print_function, division # <<<<<<<<<<<<<< + * #cimport numpy + * cimport cython + */ + __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_GOTREF(__pyx_t_1); + if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_1) < 0) __PYX_ERR(0, 1, __pyx_L1_error) + __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; + + /*--- Wrapped vars code ---*/ + + goto __pyx_L0; + __pyx_L1_error:; + __Pyx_XDECREF(__pyx_t_1); + __Pyx_XDECREF(__pyx_t_2); + __Pyx_XDECREF(__pyx_t_3); + __Pyx_XDECREF(__pyx_t_4); + __Pyx_XDECREF(__pyx_t_5); + if (__pyx_m) { + if (__pyx_d) { + __Pyx_AddTraceback("init numcodecs.zfp", __pyx_clineno, __pyx_lineno, __pyx_filename); + } + Py_CLEAR(__pyx_m); + } else if (!PyErr_Occurred()) { + PyErr_SetString(PyExc_ImportError, "init numcodecs.zfp"); + } + __pyx_L0:; + __Pyx_RefNannyFinishContext(); + #if CYTHON_PEP489_MULTI_PHASE_INIT + return (__pyx_m != NULL) ? 0 : -1; + #elif PY_MAJOR_VERSION >= 3 + return __pyx_m; + #else + return; + #endif +} + +/* --- Runtime support code --- */ +/* Refnanny */ +#if CYTHON_REFNANNY +static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) { + PyObject *m = NULL, *p = NULL; + void *r = NULL; + m = PyImport_ImportModule(modname); + if (!m) goto end; + p = PyObject_GetAttrString(m, "RefNannyAPI"); + if (!p) goto end; + r = PyLong_AsVoidPtr(p); +end: + Py_XDECREF(p); + Py_XDECREF(m); + return (__Pyx_RefNannyAPIStruct *)r; +} +#endif + +/* PyObjectGetAttrStr */ +#if CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) { + PyTypeObject* tp = Py_TYPE(obj); + if (likely(tp->tp_getattro)) + return tp->tp_getattro(obj, attr_name); +#if PY_MAJOR_VERSION < 3 + if (likely(tp->tp_getattr)) + return tp->tp_getattr(obj, PyString_AS_STRING(attr_name)); +#endif + return PyObject_GetAttr(obj, attr_name); +} +#endif + +/* GetBuiltinName */ +static PyObject *__Pyx_GetBuiltinName(PyObject *name) { + PyObject* result = __Pyx_PyObject_GetAttrStr(__pyx_b, name); + if (unlikely(!result)) { + PyErr_Format(PyExc_NameError, +#if PY_MAJOR_VERSION >= 3 + "name '%U' is not defined", name); +#else + "name '%.200s' is not defined", PyString_AS_STRING(name)); +#endif + } + return result; +} + +/* RaiseArgTupleInvalid */ +static void __Pyx_RaiseArgtupleInvalid( + const char* func_name, + int exact, + Py_ssize_t num_min, + Py_ssize_t num_max, + Py_ssize_t num_found) +{ + Py_ssize_t num_expected; + const char *more_or_less; + if (num_found < num_min) { + num_expected = num_min; + more_or_less = "at least"; + } else { + num_expected = num_max; + more_or_less = "at most"; + } + if (exact) { + more_or_less = "exactly"; + } + PyErr_Format(PyExc_TypeError, + "%.200s() takes %.8s %" CYTHON_FORMAT_SSIZE_T "d positional argument%.1s (%" CYTHON_FORMAT_SSIZE_T "d given)", + func_name, more_or_less, num_expected, + (num_expected == 1) ? "" : "s", num_found); +} + +/* RaiseDoubleKeywords */ +static void __Pyx_RaiseDoubleKeywordsError( + const char* func_name, + PyObject* kw_name) +{ + PyErr_Format(PyExc_TypeError, + #if PY_MAJOR_VERSION >= 3 + "%s() got multiple values for keyword argument '%U'", func_name, kw_name); + #else + "%s() got multiple values for keyword argument '%s'", func_name, + PyString_AsString(kw_name)); + #endif +} + +/* ParseKeywords */ +static int __Pyx_ParseOptionalKeywords( + PyObject *kwds, + PyObject **argnames[], + PyObject *kwds2, + PyObject *values[], + Py_ssize_t num_pos_args, + const char* function_name) +{ + PyObject *key = 0, *value = 0; + Py_ssize_t pos = 0; + PyObject*** name; + PyObject*** first_kw_arg = argnames + num_pos_args; + while (PyDict_Next(kwds, &pos, &key, &value)) { + name = first_kw_arg; + while (*name && (**name != key)) name++; + if (*name) { + values[name-argnames] = value; + continue; + } + name = first_kw_arg; + #if PY_MAJOR_VERSION < 3 + if (likely(PyString_CheckExact(key)) || likely(PyString_Check(key))) { + while (*name) { + if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key)) + && _PyString_Eq(**name, key)) { + values[name-argnames] = value; + break; + } + name++; + } + if (*name) continue; + else { + PyObject*** argname = argnames; + while (argname != first_kw_arg) { + if ((**argname == key) || ( + (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key)) + && _PyString_Eq(**argname, key))) { + goto arg_passed_twice; + } + argname++; + } + } + } else + #endif + if (likely(PyUnicode_Check(key))) { + while (*name) { + int cmp = (**name == key) ? 0 : + #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 + (PyUnicode_GET_SIZE(**name) != PyUnicode_GET_SIZE(key)) ? 1 : + #endif + PyUnicode_Compare(**name, key); + if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; + if (cmp == 0) { + values[name-argnames] = value; + break; + } + name++; + } + if (*name) continue; + else { + PyObject*** argname = argnames; + while (argname != first_kw_arg) { + int cmp = (**argname == key) ? 0 : + #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 + (PyUnicode_GET_SIZE(**argname) != PyUnicode_GET_SIZE(key)) ? 1 : + #endif + PyUnicode_Compare(**argname, key); + if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; + if (cmp == 0) goto arg_passed_twice; + argname++; + } + } + } else + goto invalid_keyword_type; + if (kwds2) { + if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad; + } else { + goto invalid_keyword; + } + } + return 0; +arg_passed_twice: + __Pyx_RaiseDoubleKeywordsError(function_name, key); + goto bad; +invalid_keyword_type: + PyErr_Format(PyExc_TypeError, + "%.200s() keywords must be strings", function_name); + goto bad; +invalid_keyword: + PyErr_Format(PyExc_TypeError, + #if PY_MAJOR_VERSION < 3 + "%.200s() got an unexpected keyword argument '%.200s'", + function_name, PyString_AsString(key)); + #else + "%s() got an unexpected keyword argument '%U'", + function_name, key); + #endif +bad: + return -1; +} + +/* DictGetItem */ +#if PY_MAJOR_VERSION >= 3 && !CYTHON_COMPILING_IN_PYPY +static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key) { + PyObject *value; + value = PyDict_GetItemWithError(d, key); + if (unlikely(!value)) { + if (!PyErr_Occurred()) { + if (unlikely(PyTuple_Check(key))) { + PyObject* args = PyTuple_Pack(1, key); + if (likely(args)) { + PyErr_SetObject(PyExc_KeyError, args); + Py_DECREF(args); + } + } else { + PyErr_SetObject(PyExc_KeyError, key); + } + } + return NULL; + } + Py_INCREF(value); + return value; +} +#endif + +/* PyObjectCall */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) { + PyObject *result; + ternaryfunc call = func->ob_type->tp_call; + if (unlikely(!call)) + return PyObject_Call(func, arg, kw); + if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) + return NULL; + result = (*call)(func, arg, kw); + Py_LeaveRecursiveCall(); + if (unlikely(!result) && unlikely(!PyErr_Occurred())) { + PyErr_SetString( + PyExc_SystemError, + "NULL result without error in PyObject_Call"); + } + return result; +} +#endif + +/* PyDictVersioning */ +#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj) { + PyObject *dict = Py_TYPE(obj)->tp_dict; + return likely(dict) ? __PYX_GET_DICT_VERSION(dict) : 0; +} +static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj) { + PyObject **dictptr = NULL; + Py_ssize_t offset = Py_TYPE(obj)->tp_dictoffset; + if (offset) { +#if CYTHON_COMPILING_IN_CPYTHON + dictptr = (likely(offset > 0)) ? (PyObject **) ((char *)obj + offset) : _PyObject_GetDictPtr(obj); +#else + dictptr = _PyObject_GetDictPtr(obj); +#endif + } + return (dictptr && *dictptr) ? __PYX_GET_DICT_VERSION(*dictptr) : 0; +} +static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version) { + PyObject *dict = Py_TYPE(obj)->tp_dict; + if (unlikely(!dict) || unlikely(tp_dict_version != __PYX_GET_DICT_VERSION(dict))) + return 0; + return obj_dict_version == __Pyx_get_object_dict_version(obj); +} +#endif + +/* GetModuleGlobalName */ +#if CYTHON_USE_DICT_VERSIONS +static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value) +#else +static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name) +#endif +{ + PyObject *result; +#if !CYTHON_AVOID_BORROWED_REFS +#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 + result = _PyDict_GetItem_KnownHash(__pyx_d, name, ((PyASCIIObject *) name)->hash); + __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) + if (likely(result)) { + return __Pyx_NewRef(result); + } else if (unlikely(PyErr_Occurred())) { + return NULL; + } +#else + result = PyDict_GetItem(__pyx_d, name); + __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) + if (likely(result)) { + return __Pyx_NewRef(result); + } +#endif +#else + result = PyObject_GetItem(__pyx_d, name); + __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) + if (likely(result)) { + return __Pyx_NewRef(result); + } + PyErr_Clear(); +#endif + return __Pyx_GetBuiltinName(name); +} + +/* PyErrFetchRestore */ +#if CYTHON_FAST_THREAD_STATE +static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) { + PyObject *tmp_type, *tmp_value, *tmp_tb; + tmp_type = tstate->curexc_type; + tmp_value = tstate->curexc_value; + tmp_tb = tstate->curexc_traceback; + tstate->curexc_type = type; + tstate->curexc_value = value; + tstate->curexc_traceback = tb; + Py_XDECREF(tmp_type); + Py_XDECREF(tmp_value); + Py_XDECREF(tmp_tb); +} +static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { + *type = tstate->curexc_type; + *value = tstate->curexc_value; + *tb = tstate->curexc_traceback; + tstate->curexc_type = 0; + tstate->curexc_value = 0; + tstate->curexc_traceback = 0; +} +#endif + +/* RaiseException */ +#if PY_MAJOR_VERSION < 3 +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, + CYTHON_UNUSED PyObject *cause) { + __Pyx_PyThreadState_declare + Py_XINCREF(type); + if (!value || value == Py_None) + value = NULL; + else + Py_INCREF(value); + if (!tb || tb == Py_None) + tb = NULL; + else { + Py_INCREF(tb); + if (!PyTraceBack_Check(tb)) { + PyErr_SetString(PyExc_TypeError, + "raise: arg 3 must be a traceback or None"); + goto raise_error; + } + } + if (PyType_Check(type)) { +#if CYTHON_COMPILING_IN_PYPY + if (!value) { + Py_INCREF(Py_None); + value = Py_None; + } +#endif + PyErr_NormalizeException(&type, &value, &tb); + } else { + if (value) { + PyErr_SetString(PyExc_TypeError, + "instance exception may not have a separate value"); + goto raise_error; + } + value = type; + type = (PyObject*) Py_TYPE(type); + Py_INCREF(type); + if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) { + PyErr_SetString(PyExc_TypeError, + "raise: exception class must be a subclass of BaseException"); + goto raise_error; + } + } + __Pyx_PyThreadState_assign + __Pyx_ErrRestore(type, value, tb); + return; +raise_error: + Py_XDECREF(value); + Py_XDECREF(type); + Py_XDECREF(tb); + return; +} +#else +static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) { + PyObject* owned_instance = NULL; + if (tb == Py_None) { + tb = 0; + } else if (tb && !PyTraceBack_Check(tb)) { + PyErr_SetString(PyExc_TypeError, + "raise: arg 3 must be a traceback or None"); + goto bad; + } + if (value == Py_None) + value = 0; + if (PyExceptionInstance_Check(type)) { + if (value) { + PyErr_SetString(PyExc_TypeError, + "instance exception may not have a separate value"); + goto bad; + } + value = type; + type = (PyObject*) Py_TYPE(value); + } else if (PyExceptionClass_Check(type)) { + PyObject *instance_class = NULL; + if (value && PyExceptionInstance_Check(value)) { + instance_class = (PyObject*) Py_TYPE(value); + if (instance_class != type) { + int is_subclass = PyObject_IsSubclass(instance_class, type); + if (!is_subclass) { + instance_class = NULL; + } else if (unlikely(is_subclass == -1)) { + goto bad; + } else { + type = instance_class; + } + } + } + if (!instance_class) { + PyObject *args; + if (!value) + args = PyTuple_New(0); + else if (PyTuple_Check(value)) { + Py_INCREF(value); + args = value; + } else + args = PyTuple_Pack(1, value); + if (!args) + goto bad; + owned_instance = PyObject_Call(type, args, NULL); + Py_DECREF(args); + if (!owned_instance) + goto bad; + value = owned_instance; + if (!PyExceptionInstance_Check(value)) { + PyErr_Format(PyExc_TypeError, + "calling %R should have returned an instance of " + "BaseException, not %R", + type, Py_TYPE(value)); + goto bad; + } + } + } else { + PyErr_SetString(PyExc_TypeError, + "raise: exception class must be a subclass of BaseException"); + goto bad; + } + if (cause) { + PyObject *fixed_cause; + if (cause == Py_None) { + fixed_cause = NULL; + } else if (PyExceptionClass_Check(cause)) { + fixed_cause = PyObject_CallObject(cause, NULL); + if (fixed_cause == NULL) + goto bad; + } else if (PyExceptionInstance_Check(cause)) { + fixed_cause = cause; + Py_INCREF(fixed_cause); + } else { + PyErr_SetString(PyExc_TypeError, + "exception causes must derive from " + "BaseException"); + goto bad; + } + PyException_SetCause(value, fixed_cause); + } + PyErr_SetObject(type, value); + if (tb) { +#if CYTHON_COMPILING_IN_PYPY + PyObject *tmp_type, *tmp_value, *tmp_tb; + PyErr_Fetch(&tmp_type, &tmp_value, &tmp_tb); + Py_INCREF(tb); + PyErr_Restore(tmp_type, tmp_value, tb); + Py_XDECREF(tmp_tb); +#else + PyThreadState *tstate = __Pyx_PyThreadState_Current; + PyObject* tmp_tb = tstate->curexc_traceback; + if (tb != tmp_tb) { + Py_INCREF(tb); + tstate->curexc_traceback = tb; + Py_XDECREF(tmp_tb); + } +#endif + } +bad: + Py_XDECREF(owned_instance); + return; +} +#endif + +/* PyCFunctionFastCall */ +#if CYTHON_FAST_PYCCALL +static CYTHON_INLINE PyObject * __Pyx_PyCFunction_FastCall(PyObject *func_obj, PyObject **args, Py_ssize_t nargs) { + PyCFunctionObject *func = (PyCFunctionObject*)func_obj; + PyCFunction meth = PyCFunction_GET_FUNCTION(func); + PyObject *self = PyCFunction_GET_SELF(func); + int flags = PyCFunction_GET_FLAGS(func); + assert(PyCFunction_Check(func)); + assert(METH_FASTCALL == (flags & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_KEYWORDS | METH_STACKLESS))); + assert(nargs >= 0); + assert(nargs == 0 || args != NULL); + /* _PyCFunction_FastCallDict() must not be called with an exception set, + because it may clear it (directly or indirectly) and so the + caller loses its exception */ + assert(!PyErr_Occurred()); + if ((PY_VERSION_HEX < 0x030700A0) || unlikely(flags & METH_KEYWORDS)) { + return (*((__Pyx_PyCFunctionFastWithKeywords)(void*)meth)) (self, args, nargs, NULL); + } else { + return (*((__Pyx_PyCFunctionFast)(void*)meth)) (self, args, nargs); + } +} +#endif + +/* PyFunctionFastCall */ +#if CYTHON_FAST_PYCALL +static PyObject* __Pyx_PyFunction_FastCallNoKw(PyCodeObject *co, PyObject **args, Py_ssize_t na, + PyObject *globals) { + PyFrameObject *f; + PyThreadState *tstate = __Pyx_PyThreadState_Current; + PyObject **fastlocals; + Py_ssize_t i; + PyObject *result; + assert(globals != NULL); + /* XXX Perhaps we should create a specialized + PyFrame_New() that doesn't take locals, but does + take builtins without sanity checking them. + */ + assert(tstate != NULL); + f = PyFrame_New(tstate, co, globals, NULL); + if (f == NULL) { + return NULL; + } + fastlocals = __Pyx_PyFrame_GetLocalsplus(f); + for (i = 0; i < na; i++) { + Py_INCREF(*args); + fastlocals[i] = *args++; + } + result = PyEval_EvalFrameEx(f,0); + ++tstate->recursion_depth; + Py_DECREF(f); + --tstate->recursion_depth; + return result; +} +#if 1 || PY_VERSION_HEX < 0x030600B1 +static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, int nargs, PyObject *kwargs) { + PyCodeObject *co = (PyCodeObject *)PyFunction_GET_CODE(func); + PyObject *globals = PyFunction_GET_GLOBALS(func); + PyObject *argdefs = PyFunction_GET_DEFAULTS(func); + PyObject *closure; +#if PY_MAJOR_VERSION >= 3 + PyObject *kwdefs; +#endif + PyObject *kwtuple, **k; + PyObject **d; + Py_ssize_t nd; + Py_ssize_t nk; + PyObject *result; + assert(kwargs == NULL || PyDict_Check(kwargs)); + nk = kwargs ? PyDict_Size(kwargs) : 0; + if (Py_EnterRecursiveCall((char*)" while calling a Python object")) { + return NULL; + } + if ( +#if PY_MAJOR_VERSION >= 3 + co->co_kwonlyargcount == 0 && +#endif + likely(kwargs == NULL || nk == 0) && + co->co_flags == (CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE)) { + if (argdefs == NULL && co->co_argcount == nargs) { + result = __Pyx_PyFunction_FastCallNoKw(co, args, nargs, globals); + goto done; + } + else if (nargs == 0 && argdefs != NULL + && co->co_argcount == Py_SIZE(argdefs)) { + /* function called with no arguments, but all parameters have + a default value: use default values as arguments .*/ + args = &PyTuple_GET_ITEM(argdefs, 0); + result =__Pyx_PyFunction_FastCallNoKw(co, args, Py_SIZE(argdefs), globals); + goto done; + } + } + if (kwargs != NULL) { + Py_ssize_t pos, i; + kwtuple = PyTuple_New(2 * nk); + if (kwtuple == NULL) { + result = NULL; + goto done; + } + k = &PyTuple_GET_ITEM(kwtuple, 0); + pos = i = 0; + while (PyDict_Next(kwargs, &pos, &k[i], &k[i+1])) { + Py_INCREF(k[i]); + Py_INCREF(k[i+1]); + i += 2; + } + nk = i / 2; + } + else { + kwtuple = NULL; + k = NULL; + } + closure = PyFunction_GET_CLOSURE(func); +#if PY_MAJOR_VERSION >= 3 + kwdefs = PyFunction_GET_KW_DEFAULTS(func); +#endif + if (argdefs != NULL) { + d = &PyTuple_GET_ITEM(argdefs, 0); + nd = Py_SIZE(argdefs); + } + else { + d = NULL; + nd = 0; + } +#if PY_MAJOR_VERSION >= 3 + result = PyEval_EvalCodeEx((PyObject*)co, globals, (PyObject *)NULL, + args, nargs, + k, (int)nk, + d, (int)nd, kwdefs, closure); +#else + result = PyEval_EvalCodeEx(co, globals, (PyObject *)NULL, + args, nargs, + k, (int)nk, + d, (int)nd, closure); +#endif + Py_XDECREF(kwtuple); +done: + Py_LeaveRecursiveCall(); + return result; +} +#endif +#endif + +/* PyObjectCall2Args */ +static CYTHON_UNUSED PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2) { + PyObject *args, *result = NULL; + #if CYTHON_FAST_PYCALL + if (PyFunction_Check(function)) { + PyObject *args[2] = {arg1, arg2}; + return __Pyx_PyFunction_FastCall(function, args, 2); + } + #endif + #if CYTHON_FAST_PYCCALL + if (__Pyx_PyFastCFunction_Check(function)) { + PyObject *args[2] = {arg1, arg2}; + return __Pyx_PyCFunction_FastCall(function, args, 2); + } + #endif + args = PyTuple_New(2); + if (unlikely(!args)) goto done; + Py_INCREF(arg1); + PyTuple_SET_ITEM(args, 0, arg1); + Py_INCREF(arg2); + PyTuple_SET_ITEM(args, 1, arg2); + Py_INCREF(function); + result = __Pyx_PyObject_Call(function, args, NULL); + Py_DECREF(args); + Py_DECREF(function); +done: + return result; +} + +/* PyObjectCallMethO */ +#if CYTHON_COMPILING_IN_CPYTHON +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg) { + PyObject *self, *result; + PyCFunction cfunc; + cfunc = PyCFunction_GET_FUNCTION(func); + self = PyCFunction_GET_SELF(func); + if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) + return NULL; + result = cfunc(self, arg); + Py_LeaveRecursiveCall(); + if (unlikely(!result) && unlikely(!PyErr_Occurred())) { + PyErr_SetString( + PyExc_SystemError, + "NULL result without error in PyObject_Call"); + } + return result; +} +#endif + +/* PyObjectCallOneArg */ +#if CYTHON_COMPILING_IN_CPYTHON +static PyObject* __Pyx__PyObject_CallOneArg(PyObject *func, PyObject *arg) { + PyObject *result; + PyObject *args = PyTuple_New(1); + if (unlikely(!args)) return NULL; + Py_INCREF(arg); + PyTuple_SET_ITEM(args, 0, arg); + result = __Pyx_PyObject_Call(func, args, NULL); + Py_DECREF(args); + return result; +} +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) { +#if CYTHON_FAST_PYCALL + if (PyFunction_Check(func)) { + return __Pyx_PyFunction_FastCall(func, &arg, 1); + } +#endif + if (likely(PyCFunction_Check(func))) { + if (likely(PyCFunction_GET_FLAGS(func) & METH_O)) { + return __Pyx_PyObject_CallMethO(func, arg); +#if CYTHON_FAST_PYCCALL + } else if (PyCFunction_GET_FLAGS(func) & METH_FASTCALL) { + return __Pyx_PyCFunction_FastCall(func, &arg, 1); +#endif + } + } + return __Pyx__PyObject_CallOneArg(func, arg); +} +#else +static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) { + PyObject *result; + PyObject *args = PyTuple_Pack(1, arg); + if (unlikely(!args)) return NULL; + result = __Pyx_PyObject_Call(func, args, NULL); + Py_DECREF(args); + return result; +} +#endif + +/* PyIntCompare */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_EqObjC(PyObject *op1, PyObject *op2, CYTHON_UNUSED long intval, CYTHON_UNUSED long inplace) { + if (op1 == op2) { + Py_RETURN_TRUE; + } + #if PY_MAJOR_VERSION < 3 + if (likely(PyInt_CheckExact(op1))) { + const long b = intval; + long a = PyInt_AS_LONG(op1); + if (a == b) Py_RETURN_TRUE; else Py_RETURN_FALSE; + } + #endif + #if CYTHON_USE_PYLONG_INTERNALS + if (likely(PyLong_CheckExact(op1))) { + int unequal; + unsigned long uintval; + Py_ssize_t size = Py_SIZE(op1); + const digit* digits = ((PyLongObject*)op1)->ob_digit; + if (intval == 0) { + if (size == 0) Py_RETURN_TRUE; else Py_RETURN_FALSE; + } else if (intval < 0) { + if (size >= 0) + Py_RETURN_FALSE; + intval = -intval; + size = -size; + } else { + if (size <= 0) + Py_RETURN_FALSE; + } + uintval = (unsigned long) intval; +#if PyLong_SHIFT * 4 < SIZEOF_LONG*8 + if (uintval >> (PyLong_SHIFT * 4)) { + unequal = (size != 5) || (digits[0] != (uintval & (unsigned long) PyLong_MASK)) + | (digits[1] != ((uintval >> (1 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[2] != ((uintval >> (2 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[3] != ((uintval >> (3 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[4] != ((uintval >> (4 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)); + } else +#endif +#if PyLong_SHIFT * 3 < SIZEOF_LONG*8 + if (uintval >> (PyLong_SHIFT * 3)) { + unequal = (size != 4) || (digits[0] != (uintval & (unsigned long) PyLong_MASK)) + | (digits[1] != ((uintval >> (1 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[2] != ((uintval >> (2 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[3] != ((uintval >> (3 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)); + } else +#endif +#if PyLong_SHIFT * 2 < SIZEOF_LONG*8 + if (uintval >> (PyLong_SHIFT * 2)) { + unequal = (size != 3) || (digits[0] != (uintval & (unsigned long) PyLong_MASK)) + | (digits[1] != ((uintval >> (1 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[2] != ((uintval >> (2 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)); + } else +#endif +#if PyLong_SHIFT * 1 < SIZEOF_LONG*8 + if (uintval >> (PyLong_SHIFT * 1)) { + unequal = (size != 2) || (digits[0] != (uintval & (unsigned long) PyLong_MASK)) + | (digits[1] != ((uintval >> (1 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)); + } else +#endif + unequal = (size != 1) || (((unsigned long) digits[0]) != (uintval & (unsigned long) PyLong_MASK)); + if (unequal == 0) Py_RETURN_TRUE; else Py_RETURN_FALSE; + } + #endif + if (PyFloat_CheckExact(op1)) { + const long b = intval; + double a = PyFloat_AS_DOUBLE(op1); + if ((double)a == (double)b) Py_RETURN_TRUE; else Py_RETURN_FALSE; + } + return ( + PyObject_RichCompare(op1, op2, Py_EQ)); +} + +/* GetItemInt */ +static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) { + PyObject *r; + if (!j) return NULL; + r = PyObject_GetItem(o, j); + Py_DECREF(j); + return r; +} +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, + CYTHON_NCP_UNUSED int wraparound, + CYTHON_NCP_UNUSED int boundscheck) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + Py_ssize_t wrapped_i = i; + if (wraparound & unlikely(i < 0)) { + wrapped_i += PyList_GET_SIZE(o); + } + if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyList_GET_SIZE(o)))) { + PyObject *r = PyList_GET_ITEM(o, wrapped_i); + Py_INCREF(r); + return r; + } + return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); +#else + return PySequence_GetItem(o, i); +#endif +} +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, + CYTHON_NCP_UNUSED int wraparound, + CYTHON_NCP_UNUSED int boundscheck) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + Py_ssize_t wrapped_i = i; + if (wraparound & unlikely(i < 0)) { + wrapped_i += PyTuple_GET_SIZE(o); + } + if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyTuple_GET_SIZE(o)))) { + PyObject *r = PyTuple_GET_ITEM(o, wrapped_i); + Py_INCREF(r); + return r; + } + return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); +#else + return PySequence_GetItem(o, i); +#endif +} +static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, int is_list, + CYTHON_NCP_UNUSED int wraparound, + CYTHON_NCP_UNUSED int boundscheck) { +#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS && CYTHON_USE_TYPE_SLOTS + if (is_list || PyList_CheckExact(o)) { + Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyList_GET_SIZE(o); + if ((!boundscheck) || (likely(__Pyx_is_valid_index(n, PyList_GET_SIZE(o))))) { + PyObject *r = PyList_GET_ITEM(o, n); + Py_INCREF(r); + return r; + } + } + else if (PyTuple_CheckExact(o)) { + Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyTuple_GET_SIZE(o); + if ((!boundscheck) || likely(__Pyx_is_valid_index(n, PyTuple_GET_SIZE(o)))) { + PyObject *r = PyTuple_GET_ITEM(o, n); + Py_INCREF(r); + return r; + } + } else { + PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence; + if (likely(m && m->sq_item)) { + if (wraparound && unlikely(i < 0) && likely(m->sq_length)) { + Py_ssize_t l = m->sq_length(o); + if (likely(l >= 0)) { + i += l; + } else { + if (!PyErr_ExceptionMatches(PyExc_OverflowError)) + return NULL; + PyErr_Clear(); + } + } + return m->sq_item(o, i); + } + } +#else + if (is_list || PySequence_Check(o)) { + return PySequence_GetItem(o, i); + } +#endif + return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); +} + +/* BytesEquals */ +static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals) { +#if CYTHON_COMPILING_IN_PYPY + return PyObject_RichCompareBool(s1, s2, equals); +#else + if (s1 == s2) { + return (equals == Py_EQ); + } else if (PyBytes_CheckExact(s1) & PyBytes_CheckExact(s2)) { + const char *ps1, *ps2; + Py_ssize_t length = PyBytes_GET_SIZE(s1); + if (length != PyBytes_GET_SIZE(s2)) + return (equals == Py_NE); + ps1 = PyBytes_AS_STRING(s1); + ps2 = PyBytes_AS_STRING(s2); + if (ps1[0] != ps2[0]) { + return (equals == Py_NE); + } else if (length == 1) { + return (equals == Py_EQ); + } else { + int result; +#if CYTHON_USE_UNICODE_INTERNALS + Py_hash_t hash1, hash2; + hash1 = ((PyBytesObject*)s1)->ob_shash; + hash2 = ((PyBytesObject*)s2)->ob_shash; + if (hash1 != hash2 && hash1 != -1 && hash2 != -1) { + return (equals == Py_NE); + } +#endif + result = memcmp(ps1, ps2, (size_t)length); + return (equals == Py_EQ) ? (result == 0) : (result != 0); + } + } else if ((s1 == Py_None) & PyBytes_CheckExact(s2)) { + return (equals == Py_NE); + } else if ((s2 == Py_None) & PyBytes_CheckExact(s1)) { + return (equals == Py_NE); + } else { + int result; + PyObject* py_result = PyObject_RichCompare(s1, s2, equals); + if (!py_result) + return -1; + result = __Pyx_PyObject_IsTrue(py_result); + Py_DECREF(py_result); + return result; + } +#endif +} + +/* UnicodeEquals */ +static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals) { +#if CYTHON_COMPILING_IN_PYPY + return PyObject_RichCompareBool(s1, s2, equals); +#else +#if PY_MAJOR_VERSION < 3 + PyObject* owned_ref = NULL; +#endif + int s1_is_unicode, s2_is_unicode; + if (s1 == s2) { + goto return_eq; + } + s1_is_unicode = PyUnicode_CheckExact(s1); + s2_is_unicode = PyUnicode_CheckExact(s2); +#if PY_MAJOR_VERSION < 3 + if ((s1_is_unicode & (!s2_is_unicode)) && PyString_CheckExact(s2)) { + owned_ref = PyUnicode_FromObject(s2); + if (unlikely(!owned_ref)) + return -1; + s2 = owned_ref; + s2_is_unicode = 1; + } else if ((s2_is_unicode & (!s1_is_unicode)) && PyString_CheckExact(s1)) { + owned_ref = PyUnicode_FromObject(s1); + if (unlikely(!owned_ref)) + return -1; + s1 = owned_ref; + s1_is_unicode = 1; + } else if (((!s2_is_unicode) & (!s1_is_unicode))) { + return __Pyx_PyBytes_Equals(s1, s2, equals); + } +#endif + if (s1_is_unicode & s2_is_unicode) { + Py_ssize_t length; + int kind; + void *data1, *data2; + if (unlikely(__Pyx_PyUnicode_READY(s1) < 0) || unlikely(__Pyx_PyUnicode_READY(s2) < 0)) + return -1; + length = __Pyx_PyUnicode_GET_LENGTH(s1); + if (length != __Pyx_PyUnicode_GET_LENGTH(s2)) { + goto return_ne; + } +#if CYTHON_USE_UNICODE_INTERNALS + { + Py_hash_t hash1, hash2; + #if CYTHON_PEP393_ENABLED + hash1 = ((PyASCIIObject*)s1)->hash; + hash2 = ((PyASCIIObject*)s2)->hash; + #else + hash1 = ((PyUnicodeObject*)s1)->hash; + hash2 = ((PyUnicodeObject*)s2)->hash; + #endif + if (hash1 != hash2 && hash1 != -1 && hash2 != -1) { + goto return_ne; + } + } +#endif + kind = __Pyx_PyUnicode_KIND(s1); + if (kind != __Pyx_PyUnicode_KIND(s2)) { + goto return_ne; + } + data1 = __Pyx_PyUnicode_DATA(s1); + data2 = __Pyx_PyUnicode_DATA(s2); + if (__Pyx_PyUnicode_READ(kind, data1, 0) != __Pyx_PyUnicode_READ(kind, data2, 0)) { + goto return_ne; + } else if (length == 1) { + goto return_eq; + } else { + int result = memcmp(data1, data2, (size_t)(length * kind)); + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + return (equals == Py_EQ) ? (result == 0) : (result != 0); + } + } else if ((s1 == Py_None) & s2_is_unicode) { + goto return_ne; + } else if ((s2 == Py_None) & s1_is_unicode) { + goto return_ne; + } else { + int result; + PyObject* py_result = PyObject_RichCompare(s1, s2, equals); + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + if (!py_result) + return -1; + result = __Pyx_PyObject_IsTrue(py_result); + Py_DECREF(py_result); + return result; + } +return_eq: + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + return (equals == Py_EQ); +return_ne: + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(owned_ref); + #endif + return (equals == Py_NE); +#endif +} + +/* PyObjectSetAttrStr */ +#if CYTHON_USE_TYPE_SLOTS +static CYTHON_INLINE int __Pyx_PyObject_SetAttrStr(PyObject* obj, PyObject* attr_name, PyObject* value) { + PyTypeObject* tp = Py_TYPE(obj); + if (likely(tp->tp_setattro)) + return tp->tp_setattro(obj, attr_name, value); +#if PY_MAJOR_VERSION < 3 + if (likely(tp->tp_setattr)) + return tp->tp_setattr(obj, PyString_AS_STRING(attr_name), value); +#endif + return PyObject_SetAttr(obj, attr_name, value); +} +#endif + +/* TypeImport */ +#ifndef __PYX_HAVE_RT_ImportType +#define __PYX_HAVE_RT_ImportType +static PyTypeObject *__Pyx_ImportType(PyObject *module, const char *module_name, const char *class_name, + size_t size, enum __Pyx_ImportType_CheckSize check_size) +{ + PyObject *result = 0; + char warning[200]; + Py_ssize_t basicsize; +#ifdef Py_LIMITED_API + PyObject *py_basicsize; +#endif + result = PyObject_GetAttrString(module, class_name); + if (!result) + goto bad; + if (!PyType_Check(result)) { + PyErr_Format(PyExc_TypeError, + "%.200s.%.200s is not a type object", + module_name, class_name); + goto bad; + } +#ifndef Py_LIMITED_API + basicsize = ((PyTypeObject *)result)->tp_basicsize; +#else + py_basicsize = PyObject_GetAttrString(result, "__basicsize__"); + if (!py_basicsize) + goto bad; + basicsize = PyLong_AsSsize_t(py_basicsize); + Py_DECREF(py_basicsize); + py_basicsize = 0; + if (basicsize == (Py_ssize_t)-1 && PyErr_Occurred()) + goto bad; +#endif + if ((size_t)basicsize < size) { + PyErr_Format(PyExc_ValueError, + "%.200s.%.200s size changed, may indicate binary incompatibility. " + "Expected %zd from C header, got %zd from PyObject", + module_name, class_name, size, basicsize); + goto bad; + } + if (check_size == __Pyx_ImportType_CheckSize_Error && (size_t)basicsize != size) { + PyErr_Format(PyExc_ValueError, + "%.200s.%.200s size changed, may indicate binary incompatibility. " + "Expected %zd from C header, got %zd from PyObject", + module_name, class_name, size, basicsize); + goto bad; + } + else if (check_size == __Pyx_ImportType_CheckSize_Warn && (size_t)basicsize > size) { + PyOS_snprintf(warning, sizeof(warning), + "%s.%s size changed, may indicate binary incompatibility. " + "Expected %zd from C header, got %zd from PyObject", + module_name, class_name, size, basicsize); + if (PyErr_WarnEx(NULL, warning, 0) < 0) goto bad; + } + return (PyTypeObject *)result; +bad: + Py_XDECREF(result); + return NULL; +} +#endif + +/* GetVTable */ +static void* __Pyx_GetVtable(PyObject *dict) { + void* ptr; + PyObject *ob = PyObject_GetItem(dict, __pyx_n_s_pyx_vtable); + if (!ob) + goto bad; +#if PY_VERSION_HEX >= 0x02070000 + ptr = PyCapsule_GetPointer(ob, 0); +#else + ptr = PyCObject_AsVoidPtr(ob); +#endif + if (!ptr && !PyErr_Occurred()) + PyErr_SetString(PyExc_RuntimeError, "invalid vtable found for imported type"); + Py_DECREF(ob); + return ptr; +bad: + Py_XDECREF(ob); + return NULL; +} + +/* Import */ +static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) { + PyObject *empty_list = 0; + PyObject *module = 0; + PyObject *global_dict = 0; + PyObject *empty_dict = 0; + PyObject *list; + #if PY_MAJOR_VERSION < 3 + PyObject *py_import; + py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s_import); + if (!py_import) + goto bad; + #endif + if (from_list) + list = from_list; + else { + empty_list = PyList_New(0); + if (!empty_list) + goto bad; + list = empty_list; + } + global_dict = PyModule_GetDict(__pyx_m); + if (!global_dict) + goto bad; + empty_dict = PyDict_New(); + if (!empty_dict) + goto bad; + { + #if PY_MAJOR_VERSION >= 3 + if (level == -1) { + if (strchr(__Pyx_MODULE_NAME, '.')) { + module = PyImport_ImportModuleLevelObject( + name, global_dict, empty_dict, list, 1); + if (!module) { + if (!PyErr_ExceptionMatches(PyExc_ImportError)) + goto bad; + PyErr_Clear(); + } + } + level = 0; + } + #endif + if (!module) { + #if PY_MAJOR_VERSION < 3 + PyObject *py_level = PyInt_FromLong(level); + if (!py_level) + goto bad; + module = PyObject_CallFunctionObjArgs(py_import, + name, global_dict, empty_dict, list, py_level, (PyObject *)NULL); + Py_DECREF(py_level); + #else + module = PyImport_ImportModuleLevelObject( + name, global_dict, empty_dict, list, level); + #endif + } + } +bad: + #if PY_MAJOR_VERSION < 3 + Py_XDECREF(py_import); + #endif + Py_XDECREF(empty_list); + Py_XDECREF(empty_dict); + return module; +} + +/* ImportFrom */ +static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) { + PyObject* value = __Pyx_PyObject_GetAttrStr(module, name); + if (unlikely(!value) && PyErr_ExceptionMatches(PyExc_AttributeError)) { + PyErr_Format(PyExc_ImportError, + #if PY_MAJOR_VERSION < 3 + "cannot import name %.230s", PyString_AS_STRING(name)); + #else + "cannot import name %S", name); + #endif + } + return value; +} + +/* FetchCommonType */ +static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type) { + PyObject* fake_module; + PyTypeObject* cached_type = NULL; + fake_module = PyImport_AddModule((char*) "_cython_" CYTHON_ABI); + if (!fake_module) return NULL; + Py_INCREF(fake_module); + cached_type = (PyTypeObject*) PyObject_GetAttrString(fake_module, type->tp_name); + if (cached_type) { + if (!PyType_Check((PyObject*)cached_type)) { + PyErr_Format(PyExc_TypeError, + "Shared Cython type %.200s is not a type object", + type->tp_name); + goto bad; + } + if (cached_type->tp_basicsize != type->tp_basicsize) { + PyErr_Format(PyExc_TypeError, + "Shared Cython type %.200s has the wrong size, try recompiling", + type->tp_name); + goto bad; + } + } else { + if (!PyErr_ExceptionMatches(PyExc_AttributeError)) goto bad; + PyErr_Clear(); + if (PyType_Ready(type) < 0) goto bad; + if (PyObject_SetAttrString(fake_module, type->tp_name, (PyObject*) type) < 0) + goto bad; + Py_INCREF(type); + cached_type = type; + } +done: + Py_DECREF(fake_module); + return cached_type; +bad: + Py_XDECREF(cached_type); + cached_type = NULL; + goto done; +} + +/* CythonFunction */ +#include +static PyObject * +__Pyx_CyFunction_get_doc(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *closure) +{ + if (unlikely(op->func_doc == NULL)) { + if (op->func.m_ml->ml_doc) { +#if PY_MAJOR_VERSION >= 3 + op->func_doc = PyUnicode_FromString(op->func.m_ml->ml_doc); +#else + op->func_doc = PyString_FromString(op->func.m_ml->ml_doc); +#endif + if (unlikely(op->func_doc == NULL)) + return NULL; + } else { + Py_INCREF(Py_None); + return Py_None; + } + } + Py_INCREF(op->func_doc); + return op->func_doc; +} +static int +__Pyx_CyFunction_set_doc(__pyx_CyFunctionObject *op, PyObject *value, CYTHON_UNUSED void *context) +{ + PyObject *tmp = op->func_doc; + if (value == NULL) { + value = Py_None; + } + Py_INCREF(value); + op->func_doc = value; + Py_XDECREF(tmp); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_name(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context) +{ + if (unlikely(op->func_name == NULL)) { +#if PY_MAJOR_VERSION >= 3 + op->func_name = PyUnicode_InternFromString(op->func.m_ml->ml_name); +#else + op->func_name = PyString_InternFromString(op->func.m_ml->ml_name); +#endif + if (unlikely(op->func_name == NULL)) + return NULL; + } + Py_INCREF(op->func_name); + return op->func_name; +} +static int +__Pyx_CyFunction_set_name(__pyx_CyFunctionObject *op, PyObject *value, CYTHON_UNUSED void *context) +{ + PyObject *tmp; +#if PY_MAJOR_VERSION >= 3 + if (unlikely(value == NULL || !PyUnicode_Check(value))) +#else + if (unlikely(value == NULL || !PyString_Check(value))) +#endif + { + PyErr_SetString(PyExc_TypeError, + "__name__ must be set to a string object"); + return -1; + } + tmp = op->func_name; + Py_INCREF(value); + op->func_name = value; + Py_XDECREF(tmp); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_qualname(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context) +{ + Py_INCREF(op->func_qualname); + return op->func_qualname; +} +static int +__Pyx_CyFunction_set_qualname(__pyx_CyFunctionObject *op, PyObject *value, CYTHON_UNUSED void *context) +{ + PyObject *tmp; +#if PY_MAJOR_VERSION >= 3 + if (unlikely(value == NULL || !PyUnicode_Check(value))) +#else + if (unlikely(value == NULL || !PyString_Check(value))) +#endif + { + PyErr_SetString(PyExc_TypeError, + "__qualname__ must be set to a string object"); + return -1; + } + tmp = op->func_qualname; + Py_INCREF(value); + op->func_qualname = value; + Py_XDECREF(tmp); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_self(__pyx_CyFunctionObject *m, CYTHON_UNUSED void *closure) +{ + PyObject *self; + self = m->func_closure; + if (self == NULL) + self = Py_None; + Py_INCREF(self); + return self; +} +static PyObject * +__Pyx_CyFunction_get_dict(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context) +{ + if (unlikely(op->func_dict == NULL)) { + op->func_dict = PyDict_New(); + if (unlikely(op->func_dict == NULL)) + return NULL; + } + Py_INCREF(op->func_dict); + return op->func_dict; +} +static int +__Pyx_CyFunction_set_dict(__pyx_CyFunctionObject *op, PyObject *value, CYTHON_UNUSED void *context) +{ + PyObject *tmp; + if (unlikely(value == NULL)) { + PyErr_SetString(PyExc_TypeError, + "function's dictionary may not be deleted"); + return -1; + } + if (unlikely(!PyDict_Check(value))) { + PyErr_SetString(PyExc_TypeError, + "setting function's dictionary to a non-dict"); + return -1; + } + tmp = op->func_dict; + Py_INCREF(value); + op->func_dict = value; + Py_XDECREF(tmp); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_globals(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context) +{ + Py_INCREF(op->func_globals); + return op->func_globals; +} +static PyObject * +__Pyx_CyFunction_get_closure(CYTHON_UNUSED __pyx_CyFunctionObject *op, CYTHON_UNUSED void *context) +{ + Py_INCREF(Py_None); + return Py_None; +} +static PyObject * +__Pyx_CyFunction_get_code(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context) +{ + PyObject* result = (op->func_code) ? op->func_code : Py_None; + Py_INCREF(result); + return result; +} +static int +__Pyx_CyFunction_init_defaults(__pyx_CyFunctionObject *op) { + int result = 0; + PyObject *res = op->defaults_getter((PyObject *) op); + if (unlikely(!res)) + return -1; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + op->defaults_tuple = PyTuple_GET_ITEM(res, 0); + Py_INCREF(op->defaults_tuple); + op->defaults_kwdict = PyTuple_GET_ITEM(res, 1); + Py_INCREF(op->defaults_kwdict); + #else + op->defaults_tuple = PySequence_ITEM(res, 0); + if (unlikely(!op->defaults_tuple)) result = -1; + else { + op->defaults_kwdict = PySequence_ITEM(res, 1); + if (unlikely(!op->defaults_kwdict)) result = -1; + } + #endif + Py_DECREF(res); + return result; +} +static int +__Pyx_CyFunction_set_defaults(__pyx_CyFunctionObject *op, PyObject* value, CYTHON_UNUSED void *context) { + PyObject* tmp; + if (!value) { + value = Py_None; + } else if (value != Py_None && !PyTuple_Check(value)) { + PyErr_SetString(PyExc_TypeError, + "__defaults__ must be set to a tuple object"); + return -1; + } + Py_INCREF(value); + tmp = op->defaults_tuple; + op->defaults_tuple = value; + Py_XDECREF(tmp); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_defaults(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context) { + PyObject* result = op->defaults_tuple; + if (unlikely(!result)) { + if (op->defaults_getter) { + if (__Pyx_CyFunction_init_defaults(op) < 0) return NULL; + result = op->defaults_tuple; + } else { + result = Py_None; + } + } + Py_INCREF(result); + return result; +} +static int +__Pyx_CyFunction_set_kwdefaults(__pyx_CyFunctionObject *op, PyObject* value, CYTHON_UNUSED void *context) { + PyObject* tmp; + if (!value) { + value = Py_None; + } else if (value != Py_None && !PyDict_Check(value)) { + PyErr_SetString(PyExc_TypeError, + "__kwdefaults__ must be set to a dict object"); + return -1; + } + Py_INCREF(value); + tmp = op->defaults_kwdict; + op->defaults_kwdict = value; + Py_XDECREF(tmp); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_kwdefaults(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context) { + PyObject* result = op->defaults_kwdict; + if (unlikely(!result)) { + if (op->defaults_getter) { + if (__Pyx_CyFunction_init_defaults(op) < 0) return NULL; + result = op->defaults_kwdict; + } else { + result = Py_None; + } + } + Py_INCREF(result); + return result; +} +static int +__Pyx_CyFunction_set_annotations(__pyx_CyFunctionObject *op, PyObject* value, CYTHON_UNUSED void *context) { + PyObject* tmp; + if (!value || value == Py_None) { + value = NULL; + } else if (!PyDict_Check(value)) { + PyErr_SetString(PyExc_TypeError, + "__annotations__ must be set to a dict object"); + return -1; + } + Py_XINCREF(value); + tmp = op->func_annotations; + op->func_annotations = value; + Py_XDECREF(tmp); + return 0; +} +static PyObject * +__Pyx_CyFunction_get_annotations(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context) { + PyObject* result = op->func_annotations; + if (unlikely(!result)) { + result = PyDict_New(); + if (unlikely(!result)) return NULL; + op->func_annotations = result; + } + Py_INCREF(result); + return result; +} +static PyGetSetDef __pyx_CyFunction_getsets[] = { + {(char *) "func_doc", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0}, + {(char *) "__doc__", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0}, + {(char *) "func_name", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0}, + {(char *) "__name__", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0}, + {(char *) "__qualname__", (getter)__Pyx_CyFunction_get_qualname, (setter)__Pyx_CyFunction_set_qualname, 0, 0}, + {(char *) "__self__", (getter)__Pyx_CyFunction_get_self, 0, 0, 0}, + {(char *) "func_dict", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0}, + {(char *) "__dict__", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0}, + {(char *) "func_globals", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0}, + {(char *) "__globals__", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0}, + {(char *) "func_closure", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0}, + {(char *) "__closure__", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0}, + {(char *) "func_code", (getter)__Pyx_CyFunction_get_code, 0, 0, 0}, + {(char *) "__code__", (getter)__Pyx_CyFunction_get_code, 0, 0, 0}, + {(char *) "func_defaults", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0}, + {(char *) "__defaults__", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0}, + {(char *) "__kwdefaults__", (getter)__Pyx_CyFunction_get_kwdefaults, (setter)__Pyx_CyFunction_set_kwdefaults, 0, 0}, + {(char *) "__annotations__", (getter)__Pyx_CyFunction_get_annotations, (setter)__Pyx_CyFunction_set_annotations, 0, 0}, + {0, 0, 0, 0, 0} +}; +static PyMemberDef __pyx_CyFunction_members[] = { + {(char *) "__module__", T_OBJECT, offsetof(PyCFunctionObject, m_module), PY_WRITE_RESTRICTED, 0}, + {0, 0, 0, 0, 0} +}; +static PyObject * +__Pyx_CyFunction_reduce(__pyx_CyFunctionObject *m, CYTHON_UNUSED PyObject *args) +{ +#if PY_MAJOR_VERSION >= 3 + return PyUnicode_FromString(m->func.m_ml->ml_name); +#else + return PyString_FromString(m->func.m_ml->ml_name); +#endif +} +static PyMethodDef __pyx_CyFunction_methods[] = { + {"__reduce__", (PyCFunction)__Pyx_CyFunction_reduce, METH_VARARGS, 0}, + {0, 0, 0, 0} +}; +#if PY_VERSION_HEX < 0x030500A0 +#define __Pyx_CyFunction_weakreflist(cyfunc) ((cyfunc)->func_weakreflist) +#else +#define __Pyx_CyFunction_weakreflist(cyfunc) ((cyfunc)->func.m_weakreflist) +#endif +static PyObject *__Pyx_CyFunction_New(PyTypeObject *type, PyMethodDef *ml, int flags, PyObject* qualname, + PyObject *closure, PyObject *module, PyObject* globals, PyObject* code) { + __pyx_CyFunctionObject *op = PyObject_GC_New(__pyx_CyFunctionObject, type); + if (op == NULL) + return NULL; + op->flags = flags; + __Pyx_CyFunction_weakreflist(op) = NULL; + op->func.m_ml = ml; + op->func.m_self = (PyObject *) op; + Py_XINCREF(closure); + op->func_closure = closure; + Py_XINCREF(module); + op->func.m_module = module; + op->func_dict = NULL; + op->func_name = NULL; + Py_INCREF(qualname); + op->func_qualname = qualname; + op->func_doc = NULL; + op->func_classobj = NULL; + op->func_globals = globals; + Py_INCREF(op->func_globals); + Py_XINCREF(code); + op->func_code = code; + op->defaults_pyobjects = 0; + op->defaults = NULL; + op->defaults_tuple = NULL; + op->defaults_kwdict = NULL; + op->defaults_getter = NULL; + op->func_annotations = NULL; + PyObject_GC_Track(op); + return (PyObject *) op; +} +static int +__Pyx_CyFunction_clear(__pyx_CyFunctionObject *m) +{ + Py_CLEAR(m->func_closure); + Py_CLEAR(m->func.m_module); + Py_CLEAR(m->func_dict); + Py_CLEAR(m->func_name); + Py_CLEAR(m->func_qualname); + Py_CLEAR(m->func_doc); + Py_CLEAR(m->func_globals); + Py_CLEAR(m->func_code); + Py_CLEAR(m->func_classobj); + Py_CLEAR(m->defaults_tuple); + Py_CLEAR(m->defaults_kwdict); + Py_CLEAR(m->func_annotations); + if (m->defaults) { + PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m); + int i; + for (i = 0; i < m->defaults_pyobjects; i++) + Py_XDECREF(pydefaults[i]); + PyObject_Free(m->defaults); + m->defaults = NULL; + } + return 0; +} +static void __Pyx__CyFunction_dealloc(__pyx_CyFunctionObject *m) +{ + if (__Pyx_CyFunction_weakreflist(m) != NULL) + PyObject_ClearWeakRefs((PyObject *) m); + __Pyx_CyFunction_clear(m); + PyObject_GC_Del(m); +} +static void __Pyx_CyFunction_dealloc(__pyx_CyFunctionObject *m) +{ + PyObject_GC_UnTrack(m); + __Pyx__CyFunction_dealloc(m); +} +static int __Pyx_CyFunction_traverse(__pyx_CyFunctionObject *m, visitproc visit, void *arg) +{ + Py_VISIT(m->func_closure); + Py_VISIT(m->func.m_module); + Py_VISIT(m->func_dict); + Py_VISIT(m->func_name); + Py_VISIT(m->func_qualname); + Py_VISIT(m->func_doc); + Py_VISIT(m->func_globals); + Py_VISIT(m->func_code); + Py_VISIT(m->func_classobj); + Py_VISIT(m->defaults_tuple); + Py_VISIT(m->defaults_kwdict); + if (m->defaults) { + PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m); + int i; + for (i = 0; i < m->defaults_pyobjects; i++) + Py_VISIT(pydefaults[i]); + } + return 0; +} +static PyObject *__Pyx_CyFunction_descr_get(PyObject *func, PyObject *obj, PyObject *type) +{ + __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; + if (m->flags & __Pyx_CYFUNCTION_STATICMETHOD) { + Py_INCREF(func); + return func; + } + if (m->flags & __Pyx_CYFUNCTION_CLASSMETHOD) { + if (type == NULL) + type = (PyObject *)(Py_TYPE(obj)); + return __Pyx_PyMethod_New(func, type, (PyObject *)(Py_TYPE(type))); + } + if (obj == Py_None) + obj = NULL; + return __Pyx_PyMethod_New(func, obj, type); +} +static PyObject* +__Pyx_CyFunction_repr(__pyx_CyFunctionObject *op) +{ +#if PY_MAJOR_VERSION >= 3 + return PyUnicode_FromFormat("", + op->func_qualname, (void *)op); +#else + return PyString_FromFormat("", + PyString_AsString(op->func_qualname), (void *)op); +#endif +} +static PyObject * __Pyx_CyFunction_CallMethod(PyObject *func, PyObject *self, PyObject *arg, PyObject *kw) { + PyCFunctionObject* f = (PyCFunctionObject*)func; + PyCFunction meth = f->m_ml->ml_meth; + Py_ssize_t size; + switch (f->m_ml->ml_flags & (METH_VARARGS | METH_KEYWORDS | METH_NOARGS | METH_O)) { + case METH_VARARGS: + if (likely(kw == NULL || PyDict_Size(kw) == 0)) + return (*meth)(self, arg); + break; + case METH_VARARGS | METH_KEYWORDS: + return (*(PyCFunctionWithKeywords)(void*)meth)(self, arg, kw); + case METH_NOARGS: + if (likely(kw == NULL || PyDict_Size(kw) == 0)) { + size = PyTuple_GET_SIZE(arg); + if (likely(size == 0)) + return (*meth)(self, NULL); + PyErr_Format(PyExc_TypeError, + "%.200s() takes no arguments (%" CYTHON_FORMAT_SSIZE_T "d given)", + f->m_ml->ml_name, size); + return NULL; + } + break; + case METH_O: + if (likely(kw == NULL || PyDict_Size(kw) == 0)) { + size = PyTuple_GET_SIZE(arg); + if (likely(size == 1)) { + PyObject *result, *arg0; + #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS + arg0 = PyTuple_GET_ITEM(arg, 0); + #else + arg0 = PySequence_ITEM(arg, 0); if (unlikely(!arg0)) return NULL; + #endif + result = (*meth)(self, arg0); + #if !(CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS) + Py_DECREF(arg0); + #endif + return result; + } + PyErr_Format(PyExc_TypeError, + "%.200s() takes exactly one argument (%" CYTHON_FORMAT_SSIZE_T "d given)", + f->m_ml->ml_name, size); + return NULL; + } + break; + default: + PyErr_SetString(PyExc_SystemError, "Bad call flags in " + "__Pyx_CyFunction_Call. METH_OLDARGS is no " + "longer supported!"); + return NULL; + } + PyErr_Format(PyExc_TypeError, "%.200s() takes no keyword arguments", + f->m_ml->ml_name); + return NULL; +} +static CYTHON_INLINE PyObject *__Pyx_CyFunction_Call(PyObject *func, PyObject *arg, PyObject *kw) { + return __Pyx_CyFunction_CallMethod(func, ((PyCFunctionObject*)func)->m_self, arg, kw); +} +static PyObject *__Pyx_CyFunction_CallAsMethod(PyObject *func, PyObject *args, PyObject *kw) { + PyObject *result; + __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *) func; + if ((cyfunc->flags & __Pyx_CYFUNCTION_CCLASS) && !(cyfunc->flags & __Pyx_CYFUNCTION_STATICMETHOD)) { + Py_ssize_t argc; + PyObject *new_args; + PyObject *self; + argc = PyTuple_GET_SIZE(args); + new_args = PyTuple_GetSlice(args, 1, argc); + if (unlikely(!new_args)) + return NULL; + self = PyTuple_GetItem(args, 0); + if (unlikely(!self)) { + Py_DECREF(new_args); + return NULL; + } + result = __Pyx_CyFunction_CallMethod(func, self, new_args, kw); + Py_DECREF(new_args); + } else { + result = __Pyx_CyFunction_Call(func, args, kw); + } + return result; +} +static PyTypeObject __pyx_CyFunctionType_type = { + PyVarObject_HEAD_INIT(0, 0) + "cython_function_or_method", + sizeof(__pyx_CyFunctionObject), + 0, + (destructor) __Pyx_CyFunction_dealloc, + 0, + 0, + 0, +#if PY_MAJOR_VERSION < 3 + 0, +#else + 0, +#endif + (reprfunc) __Pyx_CyFunction_repr, + 0, + 0, + 0, + 0, + __Pyx_CyFunction_CallAsMethod, + 0, + 0, + 0, + 0, + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, + 0, + (traverseproc) __Pyx_CyFunction_traverse, + (inquiry) __Pyx_CyFunction_clear, + 0, +#if PY_VERSION_HEX < 0x030500A0 + offsetof(__pyx_CyFunctionObject, func_weakreflist), +#else + offsetof(PyCFunctionObject, m_weakreflist), +#endif + 0, + 0, + __pyx_CyFunction_methods, + __pyx_CyFunction_members, + __pyx_CyFunction_getsets, + 0, + 0, + __Pyx_CyFunction_descr_get, + 0, + offsetof(__pyx_CyFunctionObject, func_dict), + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, +#if PY_VERSION_HEX >= 0x030400a1 + 0, +#endif +#if PY_VERSION_HEX >= 0x030800b1 + 0, +#endif +}; +static int __pyx_CyFunction_init(void) { + __pyx_CyFunctionType = __Pyx_FetchCommonType(&__pyx_CyFunctionType_type); + if (unlikely(__pyx_CyFunctionType == NULL)) { + return -1; + } + return 0; +} +static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *func, size_t size, int pyobjects) { + __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; + m->defaults = PyObject_Malloc(size); + if (unlikely(!m->defaults)) + return PyErr_NoMemory(); + memset(m->defaults, 0, size); + m->defaults_pyobjects = pyobjects; + return m->defaults; +} +static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *func, PyObject *tuple) { + __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; + m->defaults_tuple = tuple; + Py_INCREF(tuple); +} +static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *func, PyObject *dict) { + __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; + m->defaults_kwdict = dict; + Py_INCREF(dict); +} +static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *func, PyObject *dict) { + __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; + m->func_annotations = dict; + Py_INCREF(dict); +} + +/* CalculateMetaclass */ +static PyObject *__Pyx_CalculateMetaclass(PyTypeObject *metaclass, PyObject *bases) { + Py_ssize_t i, nbases = PyTuple_GET_SIZE(bases); + for (i=0; i < nbases; i++) { + PyTypeObject *tmptype; + PyObject *tmp = PyTuple_GET_ITEM(bases, i); + tmptype = Py_TYPE(tmp); +#if PY_MAJOR_VERSION < 3 + if (tmptype == &PyClass_Type) + continue; +#endif + if (!metaclass) { + metaclass = tmptype; + continue; + } + if (PyType_IsSubtype(metaclass, tmptype)) + continue; + if (PyType_IsSubtype(tmptype, metaclass)) { + metaclass = tmptype; + continue; + } + PyErr_SetString(PyExc_TypeError, + "metaclass conflict: " + "the metaclass of a derived class " + "must be a (non-strict) subclass " + "of the metaclasses of all its bases"); + return NULL; + } + if (!metaclass) { +#if PY_MAJOR_VERSION < 3 + metaclass = &PyClass_Type; +#else + metaclass = &PyType_Type; +#endif + } + Py_INCREF((PyObject*) metaclass); + return (PyObject*) metaclass; +} + +/* Py3ClassCreate */ +static PyObject *__Pyx_Py3MetaclassPrepare(PyObject *metaclass, PyObject *bases, PyObject *name, + PyObject *qualname, PyObject *mkw, PyObject *modname, PyObject *doc) { + PyObject *ns; + if (metaclass) { + PyObject *prep = __Pyx_PyObject_GetAttrStr(metaclass, __pyx_n_s_prepare); + if (prep) { + PyObject *pargs = PyTuple_Pack(2, name, bases); + if (unlikely(!pargs)) { + Py_DECREF(prep); + return NULL; + } + ns = PyObject_Call(prep, pargs, mkw); + Py_DECREF(prep); + Py_DECREF(pargs); + } else { + if (unlikely(!PyErr_ExceptionMatches(PyExc_AttributeError))) + return NULL; + PyErr_Clear(); + ns = PyDict_New(); + } + } else { + ns = PyDict_New(); + } + if (unlikely(!ns)) + return NULL; + if (unlikely(PyObject_SetItem(ns, __pyx_n_s_module, modname) < 0)) goto bad; + if (unlikely(PyObject_SetItem(ns, __pyx_n_s_qualname, qualname) < 0)) goto bad; + if (unlikely(doc && PyObject_SetItem(ns, __pyx_n_s_doc, doc) < 0)) goto bad; + return ns; +bad: + Py_DECREF(ns); + return NULL; +} +static PyObject *__Pyx_Py3ClassCreate(PyObject *metaclass, PyObject *name, PyObject *bases, + PyObject *dict, PyObject *mkw, + int calculate_metaclass, int allow_py2_metaclass) { + PyObject *result, *margs; + PyObject *owned_metaclass = NULL; + if (allow_py2_metaclass) { + owned_metaclass = PyObject_GetItem(dict, __pyx_n_s_metaclass); + if (owned_metaclass) { + metaclass = owned_metaclass; + } else if (likely(PyErr_ExceptionMatches(PyExc_KeyError))) { + PyErr_Clear(); + } else { + return NULL; + } + } + if (calculate_metaclass && (!metaclass || PyType_Check(metaclass))) { + metaclass = __Pyx_CalculateMetaclass((PyTypeObject*) metaclass, bases); + Py_XDECREF(owned_metaclass); + if (unlikely(!metaclass)) + return NULL; + owned_metaclass = metaclass; + } + margs = PyTuple_Pack(3, name, bases, dict); + if (unlikely(!margs)) { + result = NULL; + } else { + result = PyObject_Call(metaclass, margs, mkw); + Py_DECREF(margs); + } + Py_XDECREF(owned_metaclass); + return result; +} + +/* CLineInTraceback */ +#ifndef CYTHON_CLINE_IN_TRACEBACK +static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line) { + PyObject *use_cline; + PyObject *ptype, *pvalue, *ptraceback; +#if CYTHON_COMPILING_IN_CPYTHON + PyObject **cython_runtime_dict; +#endif + if (unlikely(!__pyx_cython_runtime)) { + return c_line; + } + __Pyx_ErrFetchInState(tstate, &ptype, &pvalue, &ptraceback); +#if CYTHON_COMPILING_IN_CPYTHON + cython_runtime_dict = _PyObject_GetDictPtr(__pyx_cython_runtime); + if (likely(cython_runtime_dict)) { + __PYX_PY_DICT_LOOKUP_IF_MODIFIED( + use_cline, *cython_runtime_dict, + __Pyx_PyDict_GetItemStr(*cython_runtime_dict, __pyx_n_s_cline_in_traceback)) + } else +#endif + { + PyObject *use_cline_obj = __Pyx_PyObject_GetAttrStr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback); + if (use_cline_obj) { + use_cline = PyObject_Not(use_cline_obj) ? Py_False : Py_True; + Py_DECREF(use_cline_obj); + } else { + PyErr_Clear(); + use_cline = NULL; + } + } + if (!use_cline) { + c_line = 0; + PyObject_SetAttr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback, Py_False); + } + else if (use_cline == Py_False || (use_cline != Py_True && PyObject_Not(use_cline) != 0)) { + c_line = 0; + } + __Pyx_ErrRestoreInState(tstate, ptype, pvalue, ptraceback); + return c_line; +} +#endif + +/* CodeObjectCache */ +static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) { + int start = 0, mid = 0, end = count - 1; + if (end >= 0 && code_line > entries[end].code_line) { + return count; + } + while (start < end) { + mid = start + (end - start) / 2; + if (code_line < entries[mid].code_line) { + end = mid; + } else if (code_line > entries[mid].code_line) { + start = mid + 1; + } else { + return mid; + } + } + if (code_line <= entries[mid].code_line) { + return mid; + } else { + return mid + 1; + } +} +static PyCodeObject *__pyx_find_code_object(int code_line) { + PyCodeObject* code_object; + int pos; + if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) { + return NULL; + } + pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); + if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) { + return NULL; + } + code_object = __pyx_code_cache.entries[pos].code_object; + Py_INCREF(code_object); + return code_object; +} +static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) { + int pos, i; + __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries; + if (unlikely(!code_line)) { + return; + } + if (unlikely(!entries)) { + entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry)); + if (likely(entries)) { + __pyx_code_cache.entries = entries; + __pyx_code_cache.max_count = 64; + __pyx_code_cache.count = 1; + entries[0].code_line = code_line; + entries[0].code_object = code_object; + Py_INCREF(code_object); + } + return; + } + pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); + if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) { + PyCodeObject* tmp = entries[pos].code_object; + entries[pos].code_object = code_object; + Py_DECREF(tmp); + return; + } + if (__pyx_code_cache.count == __pyx_code_cache.max_count) { + int new_max = __pyx_code_cache.max_count + 64; + entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc( + __pyx_code_cache.entries, (size_t)new_max*sizeof(__Pyx_CodeObjectCacheEntry)); + if (unlikely(!entries)) { + return; + } + __pyx_code_cache.entries = entries; + __pyx_code_cache.max_count = new_max; + } + for (i=__pyx_code_cache.count; i>pos; i--) { + entries[i] = entries[i-1]; + } + entries[pos].code_line = code_line; + entries[pos].code_object = code_object; + __pyx_code_cache.count++; + Py_INCREF(code_object); +} + +/* AddTraceback */ +#include "compile.h" +#include "frameobject.h" +#include "traceback.h" +static PyCodeObject* __Pyx_CreateCodeObjectForTraceback( + const char *funcname, int c_line, + int py_line, const char *filename) { + PyCodeObject *py_code = 0; + PyObject *py_srcfile = 0; + PyObject *py_funcname = 0; + #if PY_MAJOR_VERSION < 3 + py_srcfile = PyString_FromString(filename); + #else + py_srcfile = PyUnicode_FromString(filename); + #endif + if (!py_srcfile) goto bad; + if (c_line) { + #if PY_MAJOR_VERSION < 3 + py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); + #else + py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); + #endif + } + else { + #if PY_MAJOR_VERSION < 3 + py_funcname = PyString_FromString(funcname); + #else + py_funcname = PyUnicode_FromString(funcname); + #endif + } + if (!py_funcname) goto bad; + py_code = __Pyx_PyCode_New( + 0, + 0, + 0, + 0, + 0, + __pyx_empty_bytes, /*PyObject *code,*/ + __pyx_empty_tuple, /*PyObject *consts,*/ + __pyx_empty_tuple, /*PyObject *names,*/ + __pyx_empty_tuple, /*PyObject *varnames,*/ + __pyx_empty_tuple, /*PyObject *freevars,*/ + __pyx_empty_tuple, /*PyObject *cellvars,*/ + py_srcfile, /*PyObject *filename,*/ + py_funcname, /*PyObject *name,*/ + py_line, + __pyx_empty_bytes /*PyObject *lnotab*/ + ); + Py_DECREF(py_srcfile); + Py_DECREF(py_funcname); + return py_code; +bad: + Py_XDECREF(py_srcfile); + Py_XDECREF(py_funcname); + return NULL; +} +static void __Pyx_AddTraceback(const char *funcname, int c_line, + int py_line, const char *filename) { + PyCodeObject *py_code = 0; + PyFrameObject *py_frame = 0; + PyThreadState *tstate = __Pyx_PyThreadState_Current; + if (c_line) { + c_line = __Pyx_CLineForTraceback(tstate, c_line); + } + py_code = __pyx_find_code_object(c_line ? -c_line : py_line); + if (!py_code) { + py_code = __Pyx_CreateCodeObjectForTraceback( + funcname, c_line, py_line, filename); + if (!py_code) goto bad; + __pyx_insert_code_object(c_line ? -c_line : py_line, py_code); + } + py_frame = PyFrame_New( + tstate, /*PyThreadState *tstate,*/ + py_code, /*PyCodeObject *code,*/ + __pyx_d, /*PyObject *globals,*/ + 0 /*PyObject *locals*/ + ); + if (!py_frame) goto bad; + __Pyx_PyFrame_SetLineNumber(py_frame, py_line); + PyTraceBack_Here(py_frame); +bad: + Py_XDECREF(py_code); + Py_XDECREF(py_frame); +} + +/* CIntToPy */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value) { + const int neg_one = (int) ((int) 0 - (int) 1), const_zero = (int) 0; + const int is_unsigned = neg_one > const_zero; + if (is_unsigned) { + if (sizeof(int) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(int) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) { + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); +#endif + } + } else { + if (sizeof(int) <= sizeof(long)) { + return PyInt_FromLong((long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) { + return PyLong_FromLongLong((PY_LONG_LONG) value); +#endif + } + } + { + int one = 1; int little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&value; + return _PyLong_FromByteArray(bytes, sizeof(int), + little, !is_unsigned); + } +} + +/* CIntToPy */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) { + const long neg_one = (long) ((long) 0 - (long) 1), const_zero = (long) 0; + const int is_unsigned = neg_one > const_zero; + if (is_unsigned) { + if (sizeof(long) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(long) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) { + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); +#endif + } + } else { + if (sizeof(long) <= sizeof(long)) { + return PyInt_FromLong((long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) { + return PyLong_FromLongLong((PY_LONG_LONG) value); +#endif + } + } + { + int one = 1; int little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&value; + return _PyLong_FromByteArray(bytes, sizeof(long), + little, !is_unsigned); + } +} + +/* CIntFromPyVerify */ +#define __PYX_VERIFY_RETURN_INT(target_type, func_type, func_value)\ + __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 0) +#define __PYX_VERIFY_RETURN_INT_EXC(target_type, func_type, func_value)\ + __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 1) +#define __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, exc)\ + {\ + func_type value = func_value;\ + if (sizeof(target_type) < sizeof(func_type)) {\ + if (unlikely(value != (func_type) (target_type) value)) {\ + func_type zero = 0;\ + if (exc && unlikely(value == (func_type)-1 && PyErr_Occurred()))\ + return (target_type) -1;\ + if (is_unsigned && unlikely(value < zero))\ + goto raise_neg_overflow;\ + else\ + goto raise_overflow;\ + }\ + }\ + return (target_type) value;\ + } + +/* CIntToPy */ +static CYTHON_INLINE PyObject* __Pyx_PyInt_From_unsigned_int(unsigned int value) { + const unsigned int neg_one = (unsigned int) ((unsigned int) 0 - (unsigned int) 1), const_zero = (unsigned int) 0; + const int is_unsigned = neg_one > const_zero; + if (is_unsigned) { + if (sizeof(unsigned int) < sizeof(long)) { + return PyInt_FromLong((long) value); + } else if (sizeof(unsigned int) <= sizeof(unsigned long)) { + return PyLong_FromUnsignedLong((unsigned long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(unsigned int) <= sizeof(unsigned PY_LONG_LONG)) { + return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); +#endif + } + } else { + if (sizeof(unsigned int) <= sizeof(long)) { + return PyInt_FromLong((long) value); +#ifdef HAVE_LONG_LONG + } else if (sizeof(unsigned int) <= sizeof(PY_LONG_LONG)) { + return PyLong_FromLongLong((PY_LONG_LONG) value); +#endif + } + } + { + int one = 1; int little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&value; + return _PyLong_FromByteArray(bytes, sizeof(unsigned int), + little, !is_unsigned); + } +} + +/* CIntFromPy */ +static CYTHON_INLINE unsigned int __Pyx_PyInt_As_unsigned_int(PyObject *x) { + const unsigned int neg_one = (unsigned int) ((unsigned int) 0 - (unsigned int) 1), const_zero = (unsigned int) 0; + const int is_unsigned = neg_one > const_zero; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x))) { + if (sizeof(unsigned int) < sizeof(long)) { + __PYX_VERIFY_RETURN_INT(unsigned int, long, PyInt_AS_LONG(x)) + } else { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + goto raise_neg_overflow; + } + return (unsigned int) val; + } + } else +#endif + if (likely(PyLong_Check(x))) { + if (is_unsigned) { +#if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (unsigned int) 0; + case 1: __PYX_VERIFY_RETURN_INT(unsigned int, digit, digits[0]) + case 2: + if (8 * sizeof(unsigned int) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(unsigned int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(unsigned int) >= 2 * PyLong_SHIFT) { + return (unsigned int) (((((unsigned int)digits[1]) << PyLong_SHIFT) | (unsigned int)digits[0])); + } + } + break; + case 3: + if (8 * sizeof(unsigned int) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(unsigned int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(unsigned int) >= 3 * PyLong_SHIFT) { + return (unsigned int) (((((((unsigned int)digits[2]) << PyLong_SHIFT) | (unsigned int)digits[1]) << PyLong_SHIFT) | (unsigned int)digits[0])); + } + } + break; + case 4: + if (8 * sizeof(unsigned int) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(unsigned int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(unsigned int) >= 4 * PyLong_SHIFT) { + return (unsigned int) (((((((((unsigned int)digits[3]) << PyLong_SHIFT) | (unsigned int)digits[2]) << PyLong_SHIFT) | (unsigned int)digits[1]) << PyLong_SHIFT) | (unsigned int)digits[0])); + } + } + break; + } +#endif +#if CYTHON_COMPILING_IN_CPYTHON + if (unlikely(Py_SIZE(x) < 0)) { + goto raise_neg_overflow; + } +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (unsigned int) -1; + if (unlikely(result == 1)) + goto raise_neg_overflow; + } +#endif + if (sizeof(unsigned int) <= sizeof(unsigned long)) { + __PYX_VERIFY_RETURN_INT_EXC(unsigned int, unsigned long, PyLong_AsUnsignedLong(x)) +#ifdef HAVE_LONG_LONG + } else if (sizeof(unsigned int) <= sizeof(unsigned PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(unsigned int, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) +#endif + } + } else { +#if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (unsigned int) 0; + case -1: __PYX_VERIFY_RETURN_INT(unsigned int, sdigit, (sdigit) (-(sdigit)digits[0])) + case 1: __PYX_VERIFY_RETURN_INT(unsigned int, digit, +digits[0]) + case -2: + if (8 * sizeof(unsigned int) - 1 > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(unsigned int, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(unsigned int) - 1 > 2 * PyLong_SHIFT) { + return (unsigned int) (((unsigned int)-1)*(((((unsigned int)digits[1]) << PyLong_SHIFT) | (unsigned int)digits[0]))); + } + } + break; + case 2: + if (8 * sizeof(unsigned int) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(unsigned int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(unsigned int) - 1 > 2 * PyLong_SHIFT) { + return (unsigned int) ((((((unsigned int)digits[1]) << PyLong_SHIFT) | (unsigned int)digits[0]))); + } + } + break; + case -3: + if (8 * sizeof(unsigned int) - 1 > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(unsigned int, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(unsigned int) - 1 > 3 * PyLong_SHIFT) { + return (unsigned int) (((unsigned int)-1)*(((((((unsigned int)digits[2]) << PyLong_SHIFT) | (unsigned int)digits[1]) << PyLong_SHIFT) | (unsigned int)digits[0]))); + } + } + break; + case 3: + if (8 * sizeof(unsigned int) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(unsigned int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(unsigned int) - 1 > 3 * PyLong_SHIFT) { + return (unsigned int) ((((((((unsigned int)digits[2]) << PyLong_SHIFT) | (unsigned int)digits[1]) << PyLong_SHIFT) | (unsigned int)digits[0]))); + } + } + break; + case -4: + if (8 * sizeof(unsigned int) - 1 > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(unsigned int, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(unsigned int) - 1 > 4 * PyLong_SHIFT) { + return (unsigned int) (((unsigned int)-1)*(((((((((unsigned int)digits[3]) << PyLong_SHIFT) | (unsigned int)digits[2]) << PyLong_SHIFT) | (unsigned int)digits[1]) << PyLong_SHIFT) | (unsigned int)digits[0]))); + } + } + break; + case 4: + if (8 * sizeof(unsigned int) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(unsigned int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(unsigned int) - 1 > 4 * PyLong_SHIFT) { + return (unsigned int) ((((((((((unsigned int)digits[3]) << PyLong_SHIFT) | (unsigned int)digits[2]) << PyLong_SHIFT) | (unsigned int)digits[1]) << PyLong_SHIFT) | (unsigned int)digits[0]))); + } + } + break; + } +#endif + if (sizeof(unsigned int) <= sizeof(long)) { + __PYX_VERIFY_RETURN_INT_EXC(unsigned int, long, PyLong_AsLong(x)) +#ifdef HAVE_LONG_LONG + } else if (sizeof(unsigned int) <= sizeof(PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(unsigned int, PY_LONG_LONG, PyLong_AsLongLong(x)) +#endif + } + } + { +#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) + PyErr_SetString(PyExc_RuntimeError, + "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); +#else + unsigned int val; + PyObject *v = __Pyx_PyNumber_IntOrLong(x); + #if PY_MAJOR_VERSION < 3 + if (likely(v) && !PyLong_Check(v)) { + PyObject *tmp = v; + v = PyNumber_Long(tmp); + Py_DECREF(tmp); + } + #endif + if (likely(v)) { + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + int ret = _PyLong_AsByteArray((PyLongObject *)v, + bytes, sizeof(val), + is_little, !is_unsigned); + Py_DECREF(v); + if (likely(!ret)) + return val; + } +#endif + return (unsigned int) -1; + } + } else { + unsigned int val; + PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); + if (!tmp) return (unsigned int) -1; + val = __Pyx_PyInt_As_unsigned_int(tmp); + Py_DECREF(tmp); + return val; + } +raise_overflow: + PyErr_SetString(PyExc_OverflowError, + "value too large to convert to unsigned int"); + return (unsigned int) -1; +raise_neg_overflow: + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to unsigned int"); + return (unsigned int) -1; +} + +/* CIntFromPy */ +static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) { + const int neg_one = (int) ((int) 0 - (int) 1), const_zero = (int) 0; + const int is_unsigned = neg_one > const_zero; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x))) { + if (sizeof(int) < sizeof(long)) { + __PYX_VERIFY_RETURN_INT(int, long, PyInt_AS_LONG(x)) + } else { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + goto raise_neg_overflow; + } + return (int) val; + } + } else +#endif + if (likely(PyLong_Check(x))) { + if (is_unsigned) { +#if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (int) 0; + case 1: __PYX_VERIFY_RETURN_INT(int, digit, digits[0]) + case 2: + if (8 * sizeof(int) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) >= 2 * PyLong_SHIFT) { + return (int) (((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } + } + break; + case 3: + if (8 * sizeof(int) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) >= 3 * PyLong_SHIFT) { + return (int) (((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } + } + break; + case 4: + if (8 * sizeof(int) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) >= 4 * PyLong_SHIFT) { + return (int) (((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); + } + } + break; + } +#endif +#if CYTHON_COMPILING_IN_CPYTHON + if (unlikely(Py_SIZE(x) < 0)) { + goto raise_neg_overflow; + } +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (int) -1; + if (unlikely(result == 1)) + goto raise_neg_overflow; + } +#endif + if (sizeof(int) <= sizeof(unsigned long)) { + __PYX_VERIFY_RETURN_INT_EXC(int, unsigned long, PyLong_AsUnsignedLong(x)) +#ifdef HAVE_LONG_LONG + } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(int, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) +#endif + } + } else { +#if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (int) 0; + case -1: __PYX_VERIFY_RETURN_INT(int, sdigit, (sdigit) (-(sdigit)digits[0])) + case 1: __PYX_VERIFY_RETURN_INT(int, digit, +digits[0]) + case -2: + if (8 * sizeof(int) - 1 > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) { + return (int) (((int)-1)*(((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case 2: + if (8 * sizeof(int) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) { + return (int) ((((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case -3: + if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) { + return (int) (((int)-1)*(((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case 3: + if (8 * sizeof(int) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) { + return (int) ((((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case -4: + if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 4 * PyLong_SHIFT) { + return (int) (((int)-1)*(((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + case 4: + if (8 * sizeof(int) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(int) - 1 > 4 * PyLong_SHIFT) { + return (int) ((((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); + } + } + break; + } +#endif + if (sizeof(int) <= sizeof(long)) { + __PYX_VERIFY_RETURN_INT_EXC(int, long, PyLong_AsLong(x)) +#ifdef HAVE_LONG_LONG + } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(int, PY_LONG_LONG, PyLong_AsLongLong(x)) +#endif + } + } + { +#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) + PyErr_SetString(PyExc_RuntimeError, + "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); +#else + int val; + PyObject *v = __Pyx_PyNumber_IntOrLong(x); + #if PY_MAJOR_VERSION < 3 + if (likely(v) && !PyLong_Check(v)) { + PyObject *tmp = v; + v = PyNumber_Long(tmp); + Py_DECREF(tmp); + } + #endif + if (likely(v)) { + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + int ret = _PyLong_AsByteArray((PyLongObject *)v, + bytes, sizeof(val), + is_little, !is_unsigned); + Py_DECREF(v); + if (likely(!ret)) + return val; + } +#endif + return (int) -1; + } + } else { + int val; + PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); + if (!tmp) return (int) -1; + val = __Pyx_PyInt_As_int(tmp); + Py_DECREF(tmp); + return val; + } +raise_overflow: + PyErr_SetString(PyExc_OverflowError, + "value too large to convert to int"); + return (int) -1; +raise_neg_overflow: + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to int"); + return (int) -1; +} + +/* CIntFromPy */ +static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) { + const long neg_one = (long) ((long) 0 - (long) 1), const_zero = (long) 0; + const int is_unsigned = neg_one > const_zero; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x))) { + if (sizeof(long) < sizeof(long)) { + __PYX_VERIFY_RETURN_INT(long, long, PyInt_AS_LONG(x)) + } else { + long val = PyInt_AS_LONG(x); + if (is_unsigned && unlikely(val < 0)) { + goto raise_neg_overflow; + } + return (long) val; + } + } else +#endif + if (likely(PyLong_Check(x))) { + if (is_unsigned) { +#if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (long) 0; + case 1: __PYX_VERIFY_RETURN_INT(long, digit, digits[0]) + case 2: + if (8 * sizeof(long) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) >= 2 * PyLong_SHIFT) { + return (long) (((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } + } + break; + case 3: + if (8 * sizeof(long) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) >= 3 * PyLong_SHIFT) { + return (long) (((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } + } + break; + case 4: + if (8 * sizeof(long) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) >= 4 * PyLong_SHIFT) { + return (long) (((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); + } + } + break; + } +#endif +#if CYTHON_COMPILING_IN_CPYTHON + if (unlikely(Py_SIZE(x) < 0)) { + goto raise_neg_overflow; + } +#else + { + int result = PyObject_RichCompareBool(x, Py_False, Py_LT); + if (unlikely(result < 0)) + return (long) -1; + if (unlikely(result == 1)) + goto raise_neg_overflow; + } +#endif + if (sizeof(long) <= sizeof(unsigned long)) { + __PYX_VERIFY_RETURN_INT_EXC(long, unsigned long, PyLong_AsUnsignedLong(x)) +#ifdef HAVE_LONG_LONG + } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(long, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) +#endif + } + } else { +#if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)x)->ob_digit; + switch (Py_SIZE(x)) { + case 0: return (long) 0; + case -1: __PYX_VERIFY_RETURN_INT(long, sdigit, (sdigit) (-(sdigit)digits[0])) + case 1: __PYX_VERIFY_RETURN_INT(long, digit, +digits[0]) + case -2: + if (8 * sizeof(long) - 1 > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { + return (long) (((long)-1)*(((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case 2: + if (8 * sizeof(long) > 1 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { + return (long) ((((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case -3: + if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { + return (long) (((long)-1)*(((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case 3: + if (8 * sizeof(long) > 2 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { + return (long) ((((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case -4: + if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { + return (long) (((long)-1)*(((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + case 4: + if (8 * sizeof(long) > 3 * PyLong_SHIFT) { + if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { + __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) + } else if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { + return (long) ((((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); + } + } + break; + } +#endif + if (sizeof(long) <= sizeof(long)) { + __PYX_VERIFY_RETURN_INT_EXC(long, long, PyLong_AsLong(x)) +#ifdef HAVE_LONG_LONG + } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) { + __PYX_VERIFY_RETURN_INT_EXC(long, PY_LONG_LONG, PyLong_AsLongLong(x)) +#endif + } + } + { +#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) + PyErr_SetString(PyExc_RuntimeError, + "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); +#else + long val; + PyObject *v = __Pyx_PyNumber_IntOrLong(x); + #if PY_MAJOR_VERSION < 3 + if (likely(v) && !PyLong_Check(v)) { + PyObject *tmp = v; + v = PyNumber_Long(tmp); + Py_DECREF(tmp); + } + #endif + if (likely(v)) { + int one = 1; int is_little = (int)*(unsigned char *)&one; + unsigned char *bytes = (unsigned char *)&val; + int ret = _PyLong_AsByteArray((PyLongObject *)v, + bytes, sizeof(val), + is_little, !is_unsigned); + Py_DECREF(v); + if (likely(!ret)) + return val; + } +#endif + return (long) -1; + } + } else { + long val; + PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); + if (!tmp) return (long) -1; + val = __Pyx_PyInt_As_long(tmp); + Py_DECREF(tmp); + return val; + } +raise_overflow: + PyErr_SetString(PyExc_OverflowError, + "value too large to convert to long"); + return (long) -1; +raise_neg_overflow: + PyErr_SetString(PyExc_OverflowError, + "can't convert negative value to long"); + return (long) -1; +} + +/* FastTypeChecks */ +#if CYTHON_COMPILING_IN_CPYTHON +static int __Pyx_InBases(PyTypeObject *a, PyTypeObject *b) { + while (a) { + a = a->tp_base; + if (a == b) + return 1; + } + return b == &PyBaseObject_Type; +} +static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b) { + PyObject *mro; + if (a == b) return 1; + mro = a->tp_mro; + if (likely(mro)) { + Py_ssize_t i, n; + n = PyTuple_GET_SIZE(mro); + for (i = 0; i < n; i++) { + if (PyTuple_GET_ITEM(mro, i) == (PyObject *)b) + return 1; + } + return 0; + } + return __Pyx_InBases(a, b); +} +#if PY_MAJOR_VERSION == 2 +static int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject* exc_type2) { + PyObject *exception, *value, *tb; + int res; + __Pyx_PyThreadState_declare + __Pyx_PyThreadState_assign + __Pyx_ErrFetch(&exception, &value, &tb); + res = exc_type1 ? PyObject_IsSubclass(err, exc_type1) : 0; + if (unlikely(res == -1)) { + PyErr_WriteUnraisable(err); + res = 0; + } + if (!res) { + res = PyObject_IsSubclass(err, exc_type2); + if (unlikely(res == -1)) { + PyErr_WriteUnraisable(err); + res = 0; + } + } + __Pyx_ErrRestore(exception, value, tb); + return res; +} +#else +static CYTHON_INLINE int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject *exc_type2) { + int res = exc_type1 ? __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type1) : 0; + if (!res) { + res = __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type2); + } + return res; +} +#endif +static int __Pyx_PyErr_GivenExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) { + Py_ssize_t i, n; + assert(PyExceptionClass_Check(exc_type)); + n = PyTuple_GET_SIZE(tuple); +#if PY_MAJOR_VERSION >= 3 + for (i=0; ip) { + #if PY_MAJOR_VERSION < 3 + if (t->is_unicode) { + *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL); + } else if (t->intern) { + *t->p = PyString_InternFromString(t->s); + } else { + *t->p = PyString_FromStringAndSize(t->s, t->n - 1); + } + #else + if (t->is_unicode | t->is_str) { + if (t->intern) { + *t->p = PyUnicode_InternFromString(t->s); + } else if (t->encoding) { + *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL); + } else { + *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1); + } + } else { + *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1); + } + #endif + if (!*t->p) + return -1; + if (PyObject_Hash(*t->p) == -1) + return -1; + ++t; + } + return 0; +} + +static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char* c_str) { + return __Pyx_PyUnicode_FromStringAndSize(c_str, (Py_ssize_t)strlen(c_str)); +} +static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject* o) { + Py_ssize_t ignore; + return __Pyx_PyObject_AsStringAndSize(o, &ignore); +} +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT +#if !CYTHON_PEP393_ENABLED +static const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) { + char* defenc_c; + PyObject* defenc = _PyUnicode_AsDefaultEncodedString(o, NULL); + if (!defenc) return NULL; + defenc_c = PyBytes_AS_STRING(defenc); +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + { + char* end = defenc_c + PyBytes_GET_SIZE(defenc); + char* c; + for (c = defenc_c; c < end; c++) { + if ((unsigned char) (*c) >= 128) { + PyUnicode_AsASCIIString(o); + return NULL; + } + } + } +#endif + *length = PyBytes_GET_SIZE(defenc); + return defenc_c; +} +#else +static CYTHON_INLINE const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) { + if (unlikely(__Pyx_PyUnicode_READY(o) == -1)) return NULL; +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + if (likely(PyUnicode_IS_ASCII(o))) { + *length = PyUnicode_GET_LENGTH(o); + return PyUnicode_AsUTF8(o); + } else { + PyUnicode_AsASCIIString(o); + return NULL; + } +#else + return PyUnicode_AsUTF8AndSize(o, length); +#endif +} +#endif +#endif +static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_t *length) { +#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT + if ( +#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII + __Pyx_sys_getdefaultencoding_not_ascii && +#endif + PyUnicode_Check(o)) { + return __Pyx_PyUnicode_AsStringAndSize(o, length); + } else +#endif +#if (!CYTHON_COMPILING_IN_PYPY) || (defined(PyByteArray_AS_STRING) && defined(PyByteArray_GET_SIZE)) + if (PyByteArray_Check(o)) { + *length = PyByteArray_GET_SIZE(o); + return PyByteArray_AS_STRING(o); + } else +#endif + { + char* result; + int r = PyBytes_AsStringAndSize(o, &result, length); + if (unlikely(r < 0)) { + return NULL; + } else { + return result; + } + } +} +static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) { + int is_true = x == Py_True; + if (is_true | (x == Py_False) | (x == Py_None)) return is_true; + else return PyObject_IsTrue(x); +} +static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject* x) { + int retval; + if (unlikely(!x)) return -1; + retval = __Pyx_PyObject_IsTrue(x); + Py_DECREF(x); + return retval; +} +static PyObject* __Pyx_PyNumber_IntOrLongWrongResultType(PyObject* result, const char* type_name) { +#if PY_MAJOR_VERSION >= 3 + if (PyLong_Check(result)) { + if (PyErr_WarnFormat(PyExc_DeprecationWarning, 1, + "__int__ returned non-int (type %.200s). " + "The ability to return an instance of a strict subclass of int " + "is deprecated, and may be removed in a future version of Python.", + Py_TYPE(result)->tp_name)) { + Py_DECREF(result); + return NULL; + } + return result; + } +#endif + PyErr_Format(PyExc_TypeError, + "__%.4s__ returned non-%.4s (type %.200s)", + type_name, type_name, Py_TYPE(result)->tp_name); + Py_DECREF(result); + return NULL; +} +static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x) { +#if CYTHON_USE_TYPE_SLOTS + PyNumberMethods *m; +#endif + const char *name = NULL; + PyObject *res = NULL; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_Check(x) || PyLong_Check(x))) +#else + if (likely(PyLong_Check(x))) +#endif + return __Pyx_NewRef(x); +#if CYTHON_USE_TYPE_SLOTS + m = Py_TYPE(x)->tp_as_number; + #if PY_MAJOR_VERSION < 3 + if (m && m->nb_int) { + name = "int"; + res = m->nb_int(x); + } + else if (m && m->nb_long) { + name = "long"; + res = m->nb_long(x); + } + #else + if (likely(m && m->nb_int)) { + name = "int"; + res = m->nb_int(x); + } + #endif +#else + if (!PyBytes_CheckExact(x) && !PyUnicode_CheckExact(x)) { + res = PyNumber_Int(x); + } +#endif + if (likely(res)) { +#if PY_MAJOR_VERSION < 3 + if (unlikely(!PyInt_Check(res) && !PyLong_Check(res))) { +#else + if (unlikely(!PyLong_CheckExact(res))) { +#endif + return __Pyx_PyNumber_IntOrLongWrongResultType(res, name); + } + } + else if (!PyErr_Occurred()) { + PyErr_SetString(PyExc_TypeError, + "an integer is required"); + } + return res; +} +static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) { + Py_ssize_t ival; + PyObject *x; +#if PY_MAJOR_VERSION < 3 + if (likely(PyInt_CheckExact(b))) { + if (sizeof(Py_ssize_t) >= sizeof(long)) + return PyInt_AS_LONG(b); + else + return PyInt_AsSsize_t(b); + } +#endif + if (likely(PyLong_CheckExact(b))) { + #if CYTHON_USE_PYLONG_INTERNALS + const digit* digits = ((PyLongObject*)b)->ob_digit; + const Py_ssize_t size = Py_SIZE(b); + if (likely(__Pyx_sst_abs(size) <= 1)) { + ival = likely(size) ? digits[0] : 0; + if (size == -1) ival = -ival; + return ival; + } else { + switch (size) { + case 2: + if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) { + return (Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -2: + if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case 3: + if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) { + return (Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -3: + if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case 4: + if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) { + return (Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + case -4: + if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) { + return -(Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); + } + break; + } + } + #endif + return PyLong_AsSsize_t(b); + } + x = PyNumber_Index(b); + if (!x) return -1; + ival = PyInt_AsSsize_t(x); + Py_DECREF(x); + return ival; +} +static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b) { + return b ? __Pyx_NewRef(Py_True) : __Pyx_NewRef(Py_False); +} +static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) { + return PyInt_FromSize_t(ival); +} + + +#endif /* Py_PYTHON_H */ From 785547f4124895e322722859748eb4bd76da5a49 Mon Sep 17 00:00:00 2001 From: halehawk Date: Thu, 5 Mar 2020 13:59:20 -0700 Subject: [PATCH 15/69] add path to bitstream.h --- setup.py | 1 + 1 file changed, 1 insertion(+) diff --git a/setup.py b/setup.py index 89994552..01a61a09 100644 --- a/setup.py +++ b/setup.py @@ -221,6 +221,7 @@ def zfp_extension(): # setup sources - use ZFP bundled in blosc zfp_sources = glob('zfp/src/*.c') include_dirs = [d for d in glob('zfp/*') if os.path.isdir(d)] + include_dirs = [d for d in glob('zfp/*/*') if os.path.isdir(d)] include_dirs += ['numcodecs'] include_dirs += [numpy.get_include()] # define_macros += [('CYTHON_TRACE', '1')] From f0361cbb7baace996a7c2aee6d0943c84ffd9f46 Mon Sep 17 00:00:00 2001 From: halehawk Date: Thu, 5 Mar 2020 14:05:12 -0700 Subject: [PATCH 16/69] updated include path --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 01a61a09..cb1c04b2 100644 --- a/setup.py +++ b/setup.py @@ -221,7 +221,7 @@ def zfp_extension(): # setup sources - use ZFP bundled in blosc zfp_sources = glob('zfp/src/*.c') include_dirs = [d for d in glob('zfp/*') if os.path.isdir(d)] - include_dirs = [d for d in glob('zfp/*/*') if os.path.isdir(d)] + include_dirs += [d for d in glob('zfp/*/*') if os.path.isdir(d)] include_dirs += ['numcodecs'] include_dirs += [numpy.get_include()] # define_macros += [('CYTHON_TRACE', '1')] From 8cfad3e25ef479205225afa6bc6264773121764f Mon Sep 17 00:00:00 2001 From: halehawk Date: Thu, 5 Mar 2020 14:19:01 -0700 Subject: [PATCH 17/69] update zfp.c with include path --- numcodecs/zfp.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/numcodecs/zfp.c b/numcodecs/zfp.c index 743391d6..f50d032e 100644 --- a/numcodecs/zfp.c +++ b/numcodecs/zfp.c @@ -26,6 +26,16 @@ "zfp/examples", "zfp/CMakeFiles", "zfp/src", + "zfp/include/zfp", + "zfp/array/zfp", + "zfp/python/eyescale-cmake", + "zfp/python/scikit-build-cmake", + "zfp/cfp/include", + "zfp/cfp/src", + "zfp/src/inline", + "zfp/src/share", + "zfp/src/template", + "zfp/src/cuda_zfp", "numcodecs", "/glade/u/apps/ch/opt/python/2.7.16/gnu/8.3.0/pkg-library/20190627/lib/python2.7/site-packages/numpy/core/include" ], From e20538119a7f323b7e2f0e118c1d04964b493d95 Mon Sep 17 00:00:00 2001 From: halehawk Date: Thu, 5 Mar 2020 15:17:30 -0700 Subject: [PATCH 18/69] changed include path again --- numcodecs/zfp.c | 141 +++++++++++++++++++++--------------------------- setup.py | 4 +- 2 files changed, 63 insertions(+), 82 deletions(-) diff --git a/numcodecs/zfp.c b/numcodecs/zfp.c index f50d032e..f72824f0 100644 --- a/numcodecs/zfp.c +++ b/numcodecs/zfp.c @@ -1,83 +1,61 @@ -/* Generated by Cython 0.29.10 */ +/* Generated by Cython 0.29.14 */ /* BEGIN: Cython Metadata { "distutils": { "depends": [ - "zfp/include/bitstream.h", + "zfp/include/bitstream.h", "zfp/include/zfp.h" - ], + ], "extra_compile_args": [ - "-msse2", - "-mavx2", + "-msse2", + "-mavx2", "-std=c99" - ], + ], "include_dirs": [ - "zfp/fortran", - "zfp/include", - "zfp/tests", - "zfp/bin", - "zfp/array", - "zfp/python", - "zfp/utils", - "zfp/cmake", - "zfp/lib", - "zfp/cfp", - "zfp/examples", - "zfp/CMakeFiles", - "zfp/src", - "zfp/include/zfp", - "zfp/array/zfp", - "zfp/python/eyescale-cmake", - "zfp/python/scikit-build-cmake", - "zfp/cfp/include", - "zfp/cfp/src", - "zfp/src/inline", - "zfp/src/share", - "zfp/src/template", - "zfp/src/cuda_zfp", - "numcodecs", - "/glade/u/apps/ch/opt/python/2.7.16/gnu/8.3.0/pkg-library/20190627/lib/python2.7/site-packages/numpy/core/include" - ], - "name": "numcodecs.zfp", + "zfp/include", + "numcodecs", + "/glade/u/apps/ch/opt/python/3.7.5/gnu/8.3.0/pkg-library/20191211/lib/python3.7/site-packages/numpy/core/include" + ], + "name": "numcodecs.zfp", "sources": [ - "numcodecs/zfp.pyx", - "zfp/src/decode3l.c", - "zfp/src/encode4l.c", - "zfp/src/encode1d.c", - "zfp/src/decode4d.c", - "zfp/src/encode1i.c", - "zfp/src/encode2f.c", - "zfp/src/decode4l.c", - "zfp/src/encode3l.c", - "zfp/src/encode3f.c", - "zfp/src/decode2i.c", - "zfp/src/decode2d.c", - "zfp/src/decode3f.c", - "zfp/src/decode1d.c", - "zfp/src/encode1f.c", - "zfp/src/encode2l.c", - "zfp/src/encode2i.c", - "zfp/src/encode4f.c", - "zfp/src/decode2l.c", - "zfp/src/decode4i.c", - "zfp/src/encode4i.c", - "zfp/src/encode3d.c", - "zfp/src/decode1l.c", - "zfp/src/decode3d.c", - "zfp/src/encode4d.c", - "zfp/src/encode3i.c", - "zfp/src/decode3i.c", - "zfp/src/zfp.c", - "zfp/src/encode2d.c", - "zfp/src/decode1i.c", - "zfp/src/decode2f.c", - "zfp/src/decode1f.c", - "zfp/src/encode1l.c", - "zfp/src/decode4f.c", + "numcodecs/zfp.pyx", + "zfp/src/decode3l.c", + "zfp/src/encode4l.c", + "zfp/src/encode1d.c", + "zfp/src/decode4d.c", + "zfp/src/encode1i.c", + "zfp/src/encode2f.c", + "zfp/src/decode4l.c", + "zfp/src/encode3l.c", + "zfp/src/encode3f.c", + "zfp/src/decode2i.c", + "zfp/src/decode2d.c", + "zfp/src/decode3f.c", + "zfp/src/decode1d.c", + "zfp/src/encode1f.c", + "zfp/src/encode2l.c", + "zfp/src/encode2i.c", + "zfp/src/encode4f.c", + "zfp/src/decode2l.c", + "zfp/src/decode4i.c", + "zfp/src/encode4i.c", + "zfp/src/encode3d.c", + "zfp/src/decode1l.c", + "zfp/src/decode3d.c", + "zfp/src/encode4d.c", + "zfp/src/encode3i.c", + "zfp/src/decode3i.c", + "zfp/src/zfp.c", + "zfp/src/encode2d.c", + "zfp/src/decode1i.c", + "zfp/src/decode2f.c", + "zfp/src/decode1f.c", + "zfp/src/encode1l.c", + "zfp/src/decode4f.c", "zfp/src/bitstream.c" ] - }, + }, "module_name": "numcodecs.zfp" } END: Cython Metadata */ @@ -89,9 +67,9 @@ END: Cython Metadata */ #elif PY_VERSION_HEX < 0x02060000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03030000) #error Cython requires Python 2.6+ or Python 3.3+. #else -#define CYTHON_ABI "0_29_10" -#define CYTHON_HEX_VERSION 0x001D0AF0 -#define CYTHON_FUTURE_DIVISION 1 +#define CYTHON_ABI "0_29_14" +#define CYTHON_HEX_VERSION 0x001D0EF0 +#define CYTHON_FUTURE_DIVISION 0 #include #ifndef offsetof #define offsetof(type, member) ( (size_t) & ((type*)0) -> member ) @@ -392,12 +370,12 @@ END: Cython Metadata */ #define __Pyx_DefaultClassType PyClass_Type #else #define __Pyx_BUILTIN_MODULE_NAME "builtins" -#if PY_VERSION_HEX < 0x030800A4 +#if PY_VERSION_HEX >= 0x030800A4 && PY_VERSION_HEX < 0x030800B2 #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ - PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) + PyCode_New(a, 0, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) #else #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ - PyCode_New(a, 0, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) + PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) #endif #define __Pyx_DefaultClassType PyType_Type #endif @@ -1130,7 +1108,7 @@ static CYTHON_INLINE PyObject *__Pyx_PyCFunction_FastCall(PyObject *func, PyObje #define __Pyx_PyFunction_FastCall(func, args, nargs)\ __Pyx_PyFunction_FastCallDict((func), (args), (nargs), NULL) #if 1 || PY_VERSION_HEX < 0x030600B1 -static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, int nargs, PyObject *kwargs); +static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs); #else #define __Pyx_PyFunction_FastCallDict(func, args, nargs, kwargs) _PyFunction_FastCallDict(func, args, nargs, kwargs) #endif @@ -6822,9 +6800,9 @@ if (!__Pyx_RefNanny) { } #endif /*--- Builtin init code ---*/ - if (__Pyx_InitCachedBuiltins() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + if (__Pyx_InitCachedBuiltins() < 0) goto __pyx_L1_error; /*--- Constants init code ---*/ - if (__Pyx_InitCachedConstants() < 0) __PYX_ERR(0, 1, __pyx_L1_error) + if (__Pyx_InitCachedConstants() < 0) goto __pyx_L1_error; /*--- Global type/function init code ---*/ (void)__Pyx_modinit_global_init_code(); (void)__Pyx_modinit_variable_export_code(); @@ -7794,7 +7772,7 @@ static PyObject* __Pyx_PyFunction_FastCallNoKw(PyCodeObject *co, PyObject **args return result; } #if 1 || PY_VERSION_HEX < 0x030600B1 -static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, int nargs, PyObject *kwargs) { +static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs) { PyCodeObject *co = (PyCodeObject *)PyFunction_GET_CODE(func); PyObject *globals = PyFunction_GET_GLOBALS(func); PyObject *argdefs = PyFunction_GET_DEFAULTS(func); @@ -7865,12 +7843,12 @@ static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, } #if PY_MAJOR_VERSION >= 3 result = PyEval_EvalCodeEx((PyObject*)co, globals, (PyObject *)NULL, - args, nargs, + args, (int)nargs, k, (int)nk, d, (int)nd, kwdefs, closure); #else result = PyEval_EvalCodeEx(co, globals, (PyObject *)NULL, - args, nargs, + args, (int)nargs, k, (int)nk, d, (int)nd, closure); #endif @@ -9053,6 +9031,9 @@ static PyTypeObject __pyx_CyFunctionType_type = { #if PY_VERSION_HEX >= 0x030800b1 0, #endif +#if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 + 0, +#endif }; static int __pyx_CyFunction_init(void) { __pyx_CyFunctionType = __Pyx_FetchCommonType(&__pyx_CyFunctionType_type); diff --git a/setup.py b/setup.py index cb1c04b2..62067e8e 100644 --- a/setup.py +++ b/setup.py @@ -220,8 +220,8 @@ def zfp_extension(): # setup sources - use ZFP bundled in blosc zfp_sources = glob('zfp/src/*.c') - include_dirs = [d for d in glob('zfp/*') if os.path.isdir(d)] - include_dirs += [d for d in glob('zfp/*/*') if os.path.isdir(d)] + include_dirs = [d for d in glob('zfp/include') if os.path.isdir(d)] + include_dirs += [d for d in glob('zfp/include/zfp/*') if os.path.isdir(d)] include_dirs += ['numcodecs'] include_dirs += [numpy.get_include()] # define_macros += [('CYTHON_TRACE', '1')] From 4f9093355ac71886f07c32305ff6039c60ef858c Mon Sep 17 00:00:00 2001 From: halehawk Date: Thu, 16 Apr 2020 15:12:48 -0600 Subject: [PATCH 19/69] Removed zfp submodule --- .gitmodules | 3 --- zfp | 1 - 2 files changed, 4 deletions(-) delete mode 160000 zfp diff --git a/.gitmodules b/.gitmodules index e014de12..04c71aa1 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,6 +1,3 @@ [submodule "c-blosc"] path = c-blosc url = https://github.com/Blosc/c-blosc.git -[submodule "zfp"] - path = zfp - url = https://github.com/LLNL/zfp.git diff --git a/zfp b/zfp deleted file mode 160000 index 25a554e0..00000000 --- a/zfp +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 25a554e061a5323542f0e21fce2ee84e723ae774 From dc37e5d540841c1c684cdaf48a7beb6567c63ef1 Mon Sep 17 00:00:00 2001 From: halehawk Date: Thu, 16 Apr 2020 15:21:33 -0600 Subject: [PATCH 20/69] Removed zfp_extension --- setup.py | 40 +--------------------------------------- 1 file changed, 1 insertion(+), 39 deletions(-) diff --git a/setup.py b/setup.py index 8cdbd066..3415be47 100644 --- a/setup.py +++ b/setup.py @@ -198,44 +198,6 @@ def lz4_extension(): return extensions -def zfp_extension(): - import numpy - info('setting up ZFP extension') - - extra_compile_args = list(base_compile_args) - define_macros = [] - - # setup sources - use ZFP bundled in blosc - zfp_sources = glob('zfp/src/*.c') - include_dirs = [d for d in glob('zfp/include') if os.path.isdir(d)] - include_dirs += [d for d in glob('zfp/include/zfp/*') if os.path.isdir(d)] - include_dirs += ['numcodecs'] - include_dirs += [numpy.get_include()] - # define_macros += [('CYTHON_TRACE', '1')] - extra_compile_args += [ - '-std=c99', - ] - - if have_cython: - sources = ['numcodecs/zfp.pyx'] - else: - sources = ['numcodecs/zfp.c'] - - # define extension module - extensions = [ - Extension('numcodecs.zfp', - sources=sources + zfp_sources, - include_dirs=include_dirs, - define_macros=define_macros, - extra_compile_args=extra_compile_args, - ), - ] - - if have_cython: - extensions = cythonize(extensions) - - return extensions - def vlen_extension(): info('setting up vlen extension') @@ -331,7 +293,7 @@ def run_setup(with_extensions): if with_extensions: ext_modules = (blosc_extension() + lz4_extension() + zstd_extension() + - zfp_extension() + compat_extension() + vlen_extension()) + compat_extension() + vlen_extension()) cmdclass = dict(build_ext=ve_build_ext) else: ext_modules = [] From 6ef6096f9ca29ba735de9864581dbe6176bbdf47 Mon Sep 17 00:00:00 2001 From: halehawk Date: Thu, 16 Apr 2020 15:30:30 -0600 Subject: [PATCH 21/69] Remove test_zfp.py --- numcodecs/tests/test_zfp.py | 62 ------------------------------------- 1 file changed, 62 deletions(-) delete mode 100644 numcodecs/tests/test_zfp.py diff --git a/numcodecs/tests/test_zfp.py b/numcodecs/tests/test_zfp.py deleted file mode 100644 index b7f13efe..00000000 --- a/numcodecs/tests/test_zfp.py +++ /dev/null @@ -1,62 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import absolute_import, print_function, division -import itertools - - -import numpy as np - - -from numcodecs.zfp import Zfp -from numcodecs.tests.common import (check_encode_decode_array, check_config, check_repr, - check_backwards_compatibility, - check_err_decode_object_buffer, - check_err_encode_object_buffer) - - -codecs = [ - Zfp(), - Zfp(mode='a', tol=0), - Zfp(mode='p', prec=64), - Zfp(mode='r', rate=60), - Zfp(mode='c'), -] - - -# mix of dtypes: integer, float, bool, string -# mix of shapes: 1D, 2D, 3D -# mix of orders: C, F -arrays = [ - np.linspace(1000, 1001, 1000, dtype='f4'), - np.linspace(1000, 1001, 1000, dtype='f8'), - np.random.normal(loc=1000, scale=1, size=(200, 100, 50)), - np.random.normal(loc=1000, scale=1, size=(200, 100, 50, 10)), - np.asfortranarray(np.random.normal(loc=1000, scale=1, size=(150, 350, 50))), -] - - -def test_encode_decode(): - for arr, codec in itertools.product(arrays, codecs): - check_encode_decode_array(arr, codec) - - -def test_config(): - for codec in codecs: - check_config(codec) - - -def test_repr(): - check_repr("Zfp(mode='a',tol=0)") - check_repr("Zfp(mode='p',prec=64)") - check_repr("Zfp(mode='r',rate=0)") - - -def test_backwards_compatibility(): - check_backwards_compatibility(Zfp.codec_id, arrays, codecs) - - -def test_err_decode_object_buffer(): - check_err_decode_object_buffer(Zfp()) - - -def test_err_encode_object_buffer(): - check_err_encode_object_buffer(Zfp()) From fffc75771a936d11c7fd7fdf049c24f3f26e91a3 Mon Sep 17 00:00:00 2001 From: halehawk Date: Fri, 17 Apr 2020 19:10:27 -0600 Subject: [PATCH 22/69] added zfp.py --- numcodecs/zfp.py | 84 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 numcodecs/zfp.py diff --git a/numcodecs/zfp.py b/numcodecs/zfp.py new file mode 100644 index 00000000..85764721 --- /dev/null +++ b/numcodecs/zfp.py @@ -0,0 +1,84 @@ +_zfpy = None +try: + import zfpy as _zfpy +except ImportError: # pragma: no cover + pass + + +if _zfpy: + + from .abc import Codec + from .compat import ndarray_copy, ensure_contiguous_ndarray + + # noinspection PyShadowingBuiltins + class ZFPY(Codec): + """Codec providing compression using zfpy via the Python standard + library. + + Parameters + ---------- + mode : integer + One of the zfpy mode choice, e.g., ``zfpy.FORMAT_XZ``. + tolerance : double, optional + A double-precision number, specifying the compression accuracy needed. + preset : integer, optional + An integer between 0 and 9 inclusive, specifying the compression + level. + filters : list, optional + A list of dictionaries specifying compression filters. If + filters are provided, 'preset' must be None. + + """ + + codec_id = 'zfpy' + + def __init__(self, mode=2, tolerance=-1, rate=-1, precision=-1) + self.mode = mode + if mode == _zfpy.mode_fixed_accuracy: + self.compression_kwargs = { + "tolerance" : tolerance + } + elif mode == _zfpy.mode_fixed_rate: + self.compression_kwargs = { + "rate" : rate + } + elif mode == _zfpy.mode_fixed_precision: + self.compression_kwargs = { + "precision" : precision + } + self.tolerance = tolerance + self.rate = rate + self.precision = precision + + def encode(self, buf): + + # normalise inputs + buf = ensure_contiguous_ndarray(buf) + + # do compression + return _zfpy.compress_numpy(buf, write_head=False, **self.compression_kwargs)) + + def decode(self, buf, out=None): + + # normalise inputs + buf = ensure_contiguous_ndarray(buf) + if out is not None: + out = ensure_contiguous_ndarray(out) + + # do decompression + dec = _zfpy._decompress(buf, _zfpy.dtype_to_ztype(out.dtype), + out.shape, out=out) + + # handle destination + return ndarray_copy(dec, out) + + def __repr__(self): + if self.mode == _zfpy.mode_fixed_accuracy: + r = '%s(mode=%r, tolerance=%s)' % (type(self).__name__, self.mode, self.tolerance) + elif self.mode == _zfpy.mode_fixed_rate: + r = '%s(mode=%r, rate=%s)' % (type(self).__name__, self.mode, self.rate) + elif self.mode == _zfpy.mode_fixed_precision: + r = '%s(mode=%r, precision=%s)' % (type(self).__name__, self.mode, self.precision) + else: + r="WRONG MODE" + return r From fcf92fa7a9520d951d98a25514dfe13d9827c955 Mon Sep 17 00:00:00 2001 From: halehawk Date: Fri, 17 Apr 2020 19:17:11 -0600 Subject: [PATCH 23/69] removed zfp.py --- numcodecs/zfp.py | 84 ------------------------------------------------ 1 file changed, 84 deletions(-) delete mode 100644 numcodecs/zfp.py diff --git a/numcodecs/zfp.py b/numcodecs/zfp.py deleted file mode 100644 index 85764721..00000000 --- a/numcodecs/zfp.py +++ /dev/null @@ -1,84 +0,0 @@ -_zfpy = None -try: - import zfpy as _zfpy -except ImportError: # pragma: no cover - pass - - -if _zfpy: - - from .abc import Codec - from .compat import ndarray_copy, ensure_contiguous_ndarray - - # noinspection PyShadowingBuiltins - class ZFPY(Codec): - """Codec providing compression using zfpy via the Python standard - library. - - Parameters - ---------- - mode : integer - One of the zfpy mode choice, e.g., ``zfpy.FORMAT_XZ``. - tolerance : double, optional - A double-precision number, specifying the compression accuracy needed. - preset : integer, optional - An integer between 0 and 9 inclusive, specifying the compression - level. - filters : list, optional - A list of dictionaries specifying compression filters. If - filters are provided, 'preset' must be None. - - """ - - codec_id = 'zfpy' - - def __init__(self, mode=2, tolerance=-1, rate=-1, precision=-1) - self.mode = mode - if mode == _zfpy.mode_fixed_accuracy: - self.compression_kwargs = { - "tolerance" : tolerance - } - elif mode == _zfpy.mode_fixed_rate: - self.compression_kwargs = { - "rate" : rate - } - elif mode == _zfpy.mode_fixed_precision: - self.compression_kwargs = { - "precision" : precision - } - self.tolerance = tolerance - self.rate = rate - self.precision = precision - - def encode(self, buf): - - # normalise inputs - buf = ensure_contiguous_ndarray(buf) - - # do compression - return _zfpy.compress_numpy(buf, write_head=False, **self.compression_kwargs)) - - def decode(self, buf, out=None): - - # normalise inputs - buf = ensure_contiguous_ndarray(buf) - if out is not None: - out = ensure_contiguous_ndarray(out) - - # do decompression - dec = _zfpy._decompress(buf, _zfpy.dtype_to_ztype(out.dtype), - out.shape, out=out) - - # handle destination - return ndarray_copy(dec, out) - - def __repr__(self): - if self.mode == _zfpy.mode_fixed_accuracy: - r = '%s(mode=%r, tolerance=%s)' % (type(self).__name__, self.mode, self.tolerance) - elif self.mode == _zfpy.mode_fixed_rate: - r = '%s(mode=%r, rate=%s)' % (type(self).__name__, self.mode, self.rate) - elif self.mode == _zfpy.mode_fixed_precision: - r = '%s(mode=%r, precision=%s)' % (type(self).__name__, self.mode, self.precision) - else: - r="WRONG MODE" - return r From e896edfbdedec9044d118169bb381fa702c3f0d4 Mon Sep 17 00:00:00 2001 From: halehawk Date: Fri, 17 Apr 2020 20:30:21 -0600 Subject: [PATCH 24/69] added zfpy.py --- numcodecs/__init__.py | 5 +-- numcodecs/tests/test_zfpy.py | 69 +++++++++++++++++++++++++++++ numcodecs/zfpy.py | 84 ++++++++++++++++++++++++++++++++++++ 3 files changed, 155 insertions(+), 3 deletions(-) create mode 100644 numcodecs/tests/test_zfpy.py create mode 100644 numcodecs/zfpy.py diff --git a/numcodecs/__init__.py b/numcodecs/__init__.py index 588b134a..f0946499 100644 --- a/numcodecs/__init__.py +++ b/numcodecs/__init__.py @@ -68,9 +68,8 @@ pass try: - from numcodecs import zfp - from numcodecs.zfp import Zfp - register_codec(Zfp) + from numcodecs.zfpy import ZFPY + register_codec(ZFPY) except ImportError: # pragma: no cover pass diff --git a/numcodecs/tests/test_zfpy.py b/numcodecs/tests/test_zfpy.py new file mode 100644 index 00000000..6ad26e8c --- /dev/null +++ b/numcodecs/tests/test_zfpy.py @@ -0,0 +1,69 @@ +# -*- coding: utf-8 -*- +from __future__ import absolute_import, print_function, division +import itertools +import unittest + + +import numpy as np + + +try: + # noinspection PyProtectedMember + from numcodecs.zfpy import ZFPY, _zfpy +except ImportError: # pragma: no cover + raise unittest.SkipTest("ZFPY not available") + + +from numcodecs.tests.common import (check_encode_decode_array, check_config, check_repr, + check_backwards_compatibility, + check_err_decode_object_buffer, + check_err_encode_object_buffer) + + +codecs = [ + ZFPY(), + ZFPY(mode=_zfpy.mode_fixed_accuracy, tolerance=0.1), + ZFPY(mode=_zfpy.mode_fixed_precision, precision=64), + ZFPY(mode=_zfpy.mode_fixed_rate, rate=60), + ZFPY(mode='c'), +] + + +# mix of dtypes: integer, float, bool, string +# mix of shapes: 1D, 2D, 3D +# mix of orders: C, F +arrays = [ + np.linspace(1000, 1001, 1000, dtype='f4'), + np.linspace(1000, 1001, 1000, dtype='f8'), + np.random.normal(loc=1000, scale=1, size=(200, 100, 50)), + np.random.normal(loc=1000, scale=1, size=(200, 100, 50, 10)), + np.asfortranarray(np.random.normal(loc=1000, scale=1, size=(150, 350, 50))), +] + + +def test_encode_decode(): + for arr, codec in itertools.product(arrays, codecs): + check_encode_decode_array(arr, codec) + + +def test_config(): + for codec in codecs: + check_config(codec) + + +def test_repr(): + check_repr("ZFPY(mode=_zfpy.mode_fixed_accuracy,tolerance=0.1)") + check_repr("ZFPY(mode=zfpy.mode_fixed_precision,precision=64)") + check_repr("ZFPY(mode=_zfpy.mode_fixed_rate,rate=0)") + + +def test_backwards_compatibility(): + check_backwards_compatibility(ZFPY.codec_id, arrays, codecs) + + +def test_err_decode_object_buffer(): + check_err_decode_object_buffer(ZFPY()) + + +def test_err_encode_object_buffer(): + check_err_encode_object_buffer(ZFPY()) diff --git a/numcodecs/zfpy.py b/numcodecs/zfpy.py new file mode 100644 index 00000000..5b6fe328 --- /dev/null +++ b/numcodecs/zfpy.py @@ -0,0 +1,84 @@ +_zfpy = None +try: + import zfpy as _zfpy +except ImportError: # pragma: no cover + pass + + +if _zfpy: + + from .abc import Codec + from .compat import ndarray_copy, ensure_contiguous_ndarray + + # noinspection PyShadowingBuiltins + class ZFPY(Codec): + """Codec providing compression using zfpy via the Python standard + library. + + Parameters + ---------- + mode : integer + One of the zfpy mode choice, e.g., ``zfpy.FORMAT_XZ``. + tolerance : double, optional + A double-precision number, specifying the compression accuracy needed. + preset : integer, optional + An integer between 0 and 9 inclusive, specifying the compression + level. + filters : list, optional + A list of dictionaries specifying compression filters. If + filters are provided, 'preset' must be None. + + """ + + codec_id = 'zfpy' + + def __init__(self, mode=_zfpy.mode_fixed_accuracy, tolerance=-1, rate=-1, precision=-1): + self.mode = mode + if mode == _zfpy.mode_fixed_accuracy: + self.compression_kwargs = { + "tolerance" : tolerance + } + elif mode == _zfpy.mode_fixed_rate: + self.compression_kwargs = { + "rate" : rate + } + elif mode == _zfpy.mode_fixed_precision: + self.compression_kwargs = { + "precision" : precision + } + self.tolerance = tolerance + self.rate = rate + self.precision = precision + + def encode(self, buf): + + # normalise inputs + buf = ensure_contiguous_ndarray(buf) + + # do compression + return _zfpy.compress_numpy(buf, write_head=False, **self.compression_kwargs) + + def decode(self, buf, out=None): + + # normalise inputs + buf = ensure_contiguous_ndarray(buf) + if out is not None: + out = ensure_contiguous_ndarray(out) + + # do decompression + dec = _zfpy._decompress(buf, _zfpy.dtype_to_ztype(out.dtype), + out.shape, out=out) + + # handle destination + return ndarray_copy(dec, out) + + def __repr__(self): + if self.mode == _zfpy.mode_fixed_accuracy: + r = '%s(mode=%r, tolerance=%s)' % (type(self).__name__, self.mode, self.tolerance) + elif self.mode == _zfpy.mode_fixed_rate: + r = '%s(mode=%r, rate=%s)' % (type(self).__name__, self.mode, self.rate) + elif self.mode == _zfpy.mode_fixed_precision: + r = '%s(mode=%r, precision=%s)' % (type(self).__name__, self.mode, self.precision) + else: + r="WRONG MODE" + return r From ec6363221b8110f5fbc42c1bb6daf6317b4c0f7d Mon Sep 17 00:00:00 2001 From: halehawk Date: Mon, 20 Apr 2020 14:12:06 -0600 Subject: [PATCH 25/69] add pip install zfpy --- .github/workflows/ci-osx.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci-osx.yaml b/.github/workflows/ci-osx.yaml index 545d5412..21e54b19 100644 --- a/.github/workflows/ci-osx.yaml +++ b/.github/workflows/ci-osx.yaml @@ -24,10 +24,11 @@ jobs: - name: Install numcodecs run: | python -m pip install -U pip setuptools wheel pytest + python -m pip install --index-url https://test.pypi.org/simple/ zfpy==0.5.5rc1 python -m pip install -v -e . - name: List installed packages run: python -m pip list - name: Run tests - run: pytest -v --pyargs numcodecs \ No newline at end of file + run: pytest -v --pyargs numcodecs From 1bd37da1634ea5bfca5ad5b4abf0a25b78c44ea4 Mon Sep 17 00:00:00 2001 From: halehawk Date: Mon, 20 Apr 2020 14:16:24 -0600 Subject: [PATCH 26/69] add pip install modified --- .github/workflows/ci-osx.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci-osx.yaml b/.github/workflows/ci-osx.yaml index 21e54b19..27aabbe7 100644 --- a/.github/workflows/ci-osx.yaml +++ b/.github/workflows/ci-osx.yaml @@ -24,7 +24,7 @@ jobs: - name: Install numcodecs run: | python -m pip install -U pip setuptools wheel pytest - python -m pip install --index-url https://test.pypi.org/simple/ zfpy==0.5.5rc1 + python -m pip install -i https://test.pypi.org/simple/ zfpy python -m pip install -v -e . - name: List installed packages From ec3b5484236cf1f9803300cd20871667f62509ae Mon Sep 17 00:00:00 2001 From: halehawk Date: Mon, 20 Apr 2020 14:18:56 -0600 Subject: [PATCH 27/69] add pip install modified 2 --- .github/workflows/ci-osx.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci-osx.yaml b/.github/workflows/ci-osx.yaml index 27aabbe7..acaafec2 100644 --- a/.github/workflows/ci-osx.yaml +++ b/.github/workflows/ci-osx.yaml @@ -24,7 +24,7 @@ jobs: - name: Install numcodecs run: | python -m pip install -U pip setuptools wheel pytest - python -m pip install -i https://test.pypi.org/simple/ zfpy + pip install -i https://test.pypi.org/simple/ zfpy python -m pip install -v -e . - name: List installed packages From 58337ff7023ca81fcacfdbda0df31017e36bc4e8 Mon Sep 17 00:00:00 2001 From: halehawk Date: Mon, 20 Apr 2020 14:21:36 -0600 Subject: [PATCH 28/69] add pip install modified 3 --- .github/workflows/ci-osx.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci-osx.yaml b/.github/workflows/ci-osx.yaml index acaafec2..566ae6b0 100644 --- a/.github/workflows/ci-osx.yaml +++ b/.github/workflows/ci-osx.yaml @@ -24,7 +24,7 @@ jobs: - name: Install numcodecs run: | python -m pip install -U pip setuptools wheel pytest - pip install -i https://test.pypi.org/simple/ zfpy + pip install -i https://test.pypi.org/simple/ zfpy==0.5.5rc1 python -m pip install -v -e . - name: List installed packages From eab0541937f533dfaadbf960c6cc54b0a6963de1 Mon Sep 17 00:00:00 2001 From: halehawk Date: Mon, 20 Apr 2020 15:29:11 -0600 Subject: [PATCH 29/69] add zfpy.py --- numcodecs/tests/test_zfpy.py | 46 +++++++++++++++++++++++------------- numcodecs/zfpy.py | 36 ++++++++++++++++------------ 2 files changed, 51 insertions(+), 31 deletions(-) diff --git a/numcodecs/tests/test_zfpy.py b/numcodecs/tests/test_zfpy.py index 6ad26e8c..83788cd4 100644 --- a/numcodecs/tests/test_zfpy.py +++ b/numcodecs/tests/test_zfpy.py @@ -1,5 +1,3 @@ -# -*- coding: utf-8 -*- -from __future__ import absolute_import, print_function, division import itertools import unittest @@ -21,11 +19,11 @@ codecs = [ - ZFPY(), - ZFPY(mode=_zfpy.mode_fixed_accuracy, tolerance=0.1), - ZFPY(mode=_zfpy.mode_fixed_precision, precision=64), - ZFPY(mode=_zfpy.mode_fixed_rate, rate=60), - ZFPY(mode='c'), + #ZFPY(), + #ZFPY(mode=_zfpy.mode_fixed_accuracy, tolerance=-1), + #ZFPY(mode=_zfpy.mode_fixed_precision, precision=-1), + ZFPY(mode=_zfpy.mode_fixed_rate, rate=-1), + #ZFPY(mode='c'), ] @@ -35,15 +33,24 @@ arrays = [ np.linspace(1000, 1001, 1000, dtype='f4'), np.linspace(1000, 1001, 1000, dtype='f8'), - np.random.normal(loc=1000, scale=1, size=(200, 100, 50)), - np.random.normal(loc=1000, scale=1, size=(200, 100, 50, 10)), - np.asfortranarray(np.random.normal(loc=1000, scale=1, size=(150, 350, 50))), + np.random.normal(loc=1000, scale=1, size=(100, 10)), + np.random.normal(loc=1000, scale=1, size=(10, 10, 10)), + np.random.normal(loc=1000, scale=1, size=(2, 5, 10, 10)), + np.asfortranarray(np.random.normal(loc=1000, scale=1, size=(5, 10, 20))), + np.random.randint(-2**31, -2**31 + 20, size=1000, dtype='i4').reshape(100,10), + #np.random.randint(-2**63, -2**63 + 20, size=1000, dtype='i8').reshape(10,10,10), ] def test_encode_decode(): - for arr, codec in itertools.product(arrays, codecs): - check_encode_decode_array(arr, codec) + for arr in arrays: + if arr.dtype == np.int32 or arr.dtype == np.int64: + codec = [codecs[-1]] + else: + codec = codecs + for code in codec: + check_encode_decode_array(arr, code) + def test_config(): @@ -52,13 +59,20 @@ def test_config(): def test_repr(): - check_repr("ZFPY(mode=_zfpy.mode_fixed_accuracy,tolerance=0.1)") - check_repr("ZFPY(mode=zfpy.mode_fixed_precision,precision=64)") - check_repr("ZFPY(mode=_zfpy.mode_fixed_rate,rate=0)") + check_repr("ZFPY(mode=4, tolerance=-1)") + check_repr("ZFPY(mode=3, precision=-1)") + check_repr("ZFPY(mode=2, rate=-1)") def test_backwards_compatibility(): - check_backwards_compatibility(ZFPY.codec_id, arrays, codecs) + for i, code in enumerate(codecs): + if code.mode == _zfpy.mode_fixed_rate : + codec = [code] + check_backwards_compatibility(ZFPY.codec_id, arrays, codec) + else: + codec = codecs + array = arrays[:len(arrays)-2] + check_backwards_compatibility(ZFPY.codec_id, array, codec) def test_err_decode_object_buffer(): diff --git a/numcodecs/zfpy.py b/numcodecs/zfpy.py index 5b6fe328..913c4b04 100644 --- a/numcodecs/zfpy.py +++ b/numcodecs/zfpy.py @@ -8,7 +8,7 @@ if _zfpy: from .abc import Codec - from .compat import ndarray_copy, ensure_contiguous_ndarray + from .compat import ndarray_copy, ensure_contiguous_ndarray, ensure_bytes # noinspection PyShadowingBuiltins class ZFPY(Codec): @@ -18,21 +18,20 @@ class ZFPY(Codec): Parameters ---------- mode : integer - One of the zfpy mode choice, e.g., ``zfpy.FORMAT_XZ``. + One of the zfpy mode choice, e.g., ``zfpy.mode_fixed_accuracy``. tolerance : double, optional A double-precision number, specifying the compression accuracy needed. - preset : integer, optional - An integer between 0 and 9 inclusive, specifying the compression - level. - filters : list, optional - A list of dictionaries specifying compression filters. If - filters are provided, 'preset' must be None. + rate : double, optional + A double-precision number, specifying the compression rate needed. + precision : int, optional + A integer number, specifying the compression precision needed. """ codec_id = 'zfpy' - def __init__(self, mode=_zfpy.mode_fixed_accuracy, tolerance=-1, rate=-1, precision=-1): + def __init__(self, mode=_zfpy.mode_fixed_accuracy, tolerance=-1, + rate=-1, precision=-1, compression_kwargs=None): self.mode = mode if mode == _zfpy.mode_fixed_accuracy: self.compression_kwargs = { @@ -46,6 +45,9 @@ def __init__(self, mode=_zfpy.mode_fixed_accuracy, tolerance=-1, rate=-1, precis self.compression_kwargs = { "precision" : precision } + else: + raise ValueError('Wrong mode, please set mode 2 - rate, % \ + 3 - precision, 4 - tolerance') self.tolerance = tolerance self.rate = rate self.precision = precision @@ -56,21 +58,25 @@ def encode(self, buf): buf = ensure_contiguous_ndarray(buf) # do compression - return _zfpy.compress_numpy(buf, write_head=False, **self.compression_kwargs) + comp_arr = _zfpy.compress_numpy(buf, write_header=True, **self.compression_kwargs) + + return comp_arr def decode(self, buf, out=None): # normalise inputs - buf = ensure_contiguous_ndarray(buf) + buf = ensure_bytes(buf) if out is not None: out = ensure_contiguous_ndarray(out) # do decompression - dec = _zfpy._decompress(buf, _zfpy.dtype_to_ztype(out.dtype), - out.shape, out=out) + dec = _zfpy.decompress_numpy(buf) # handle destination - return ndarray_copy(dec, out) + if out is not None: + return ndarray_copy(dec, out) + else: + return dec def __repr__(self): if self.mode == _zfpy.mode_fixed_accuracy: @@ -80,5 +86,5 @@ def __repr__(self): elif self.mode == _zfpy.mode_fixed_precision: r = '%s(mode=%r, precision=%s)' % (type(self).__name__, self.mode, self.precision) else: - r="WRONG MODE" + r="Wrong mode" return r From 9f508f19017b59077451293992e43c7406978bf7 Mon Sep 17 00:00:00 2001 From: halehawk Date: Mon, 20 Apr 2020 16:29:48 -0600 Subject: [PATCH 30/69] add zfpy in requirements_dev --- docs/index.rst | 2 +- docs/zfpy.rst | 11 +++++++++++ numcodecs/__init__.py | 2 +- requirements_dev.txt | 1 + tox.ini | 2 ++ 5 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 docs/zfpy.rst diff --git a/docs/index.rst b/docs/index.rst index 1bfa8a7a..bcf3424d 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -60,7 +60,7 @@ Contents registry blosc lz4 - zfp + zfpy zstd zlib gzip diff --git a/docs/zfpy.rst b/docs/zfpy.rst new file mode 100644 index 00000000..28bf1638 --- /dev/null +++ b/docs/zfpy.rst @@ -0,0 +1,11 @@ +ZFPY +==== +.. automodule:: numcodecs.zfpy + +.. autoclass:: ZFPY + + .. autoattribute:: codec_id + .. automethod:: encode + .. automethod:: decode + .. automethod:: get_config + .. automethod:: from_config diff --git a/numcodecs/__init__.py b/numcodecs/__init__.py index f0946499..5bcff0b0 100644 --- a/numcodecs/__init__.py +++ b/numcodecs/__init__.py @@ -3,7 +3,7 @@ transformation codecs for use in data storage and communication applications. These include: -* Compression codecs, e.g., Zlib, BZ2, LZMA and Blosc. +* Compression codecs, e.g., Zlib, BZ2, LZMA, ZFPY and Blosc. * Pre-compression filters, e.g., Delta, Quantize, FixedScaleOffset, PackBits, Categorize. * Integrity checks, e.g., CRC32, Adler32. diff --git a/requirements_dev.txt b/requirements_dev.txt index 256f0949..47b6ba88 100644 --- a/requirements_dev.txt +++ b/requirements_dev.txt @@ -1,3 +1,4 @@ Cython==0.29.6 msgpack==0.6.1 numpy==1.16.2 +zfpy==0.5.5rc1 diff --git a/tox.ini b/tox.ini index 8d5e6531..5042c5b8 100644 --- a/tox.ini +++ b/tox.ini @@ -21,6 +21,8 @@ commands = deps = -rrequirements_dev.txt -rrequirements_test.txt +install_command = + pip install --pre --extra-index-url={env:extra_index_url:https://test.pypi.org/simple} {opts} {packages} [testenv:docs] basepython = python3.7 From eba81c60badb033f1099901b6e7f15d81dcd2c4a Mon Sep 17 00:00:00 2001 From: halehawk Date: Mon, 20 Apr 2020 16:32:08 -0600 Subject: [PATCH 31/69] add zfpy finxture --- fixture/zfpy/array.00.npy | Bin 0 -> 4128 bytes fixture/zfpy/array.01.npy | Bin 0 -> 8128 bytes fixture/zfpy/array.02.npy | Bin 0 -> 8128 bytes fixture/zfpy/array.03.npy | Bin 0 -> 8128 bytes fixture/zfpy/array.04.npy | Bin 0 -> 8128 bytes fixture/zfpy/array.05.npy | Bin 0 -> 8128 bytes fixture/zfpy/array.06.npy | Bin 0 -> 4128 bytes fixture/zfpy/codec.00/config.json | 10 ++++++++++ fixture/zfpy/codec.00/encoded.00.dat | Bin 0 -> 2368 bytes fixture/zfpy/codec.00/encoded.01.dat | Bin 0 -> 5104 bytes fixture/zfpy/codec.00/encoded.02.dat | Bin 0 -> 6944 bytes fixture/zfpy/codec.00/encoded.03.dat | Bin 0 -> 6936 bytes fixture/zfpy/codec.00/encoded.04.dat | Bin 0 -> 6936 bytes fixture/zfpy/codec.00/encoded.05.dat | Bin 0 -> 6936 bytes fixture/zfpy/codec.00/encoded.06.dat | Bin 0 -> 2576 bytes 15 files changed, 10 insertions(+) create mode 100644 fixture/zfpy/array.00.npy create mode 100644 fixture/zfpy/array.01.npy create mode 100644 fixture/zfpy/array.02.npy create mode 100644 fixture/zfpy/array.03.npy create mode 100644 fixture/zfpy/array.04.npy create mode 100644 fixture/zfpy/array.05.npy create mode 100644 fixture/zfpy/array.06.npy create mode 100644 fixture/zfpy/codec.00/config.json create mode 100644 fixture/zfpy/codec.00/encoded.00.dat create mode 100644 fixture/zfpy/codec.00/encoded.01.dat create mode 100644 fixture/zfpy/codec.00/encoded.02.dat create mode 100644 fixture/zfpy/codec.00/encoded.03.dat create mode 100644 fixture/zfpy/codec.00/encoded.04.dat create mode 100644 fixture/zfpy/codec.00/encoded.05.dat create mode 100644 fixture/zfpy/codec.00/encoded.06.dat diff --git a/fixture/zfpy/array.00.npy b/fixture/zfpy/array.00.npy new file mode 100644 index 0000000000000000000000000000000000000000..df3f85bb889d40e9964f297fcfc77bc82e778dd3 GIT binary patch literal 4128 zcmbW%<-ZShAII^dJJ!AFBMy%4{$ZMFCJv6Sog;s`+jLAb%{0?7%{0?Y$28OIdHoC5 z_wjh%_6`DUqXu+mAL&H*pHf+!(>YXM~cM@2N!#x-yhsSj0vSaGrm7Lz0-mz&B)}FcoP)J9;yUnXF(t$GE~{ zV#NvuJ|Yb{2~eF#Ix&z5%x4{YIn6Czk|1_4@Ff|^PdVz+n(ho|8cW&2AujTO_au)K z45T2OVpO3KQS@ajb6CwzPH>%P#Elyad`dd7;N zw4xisnaUD2^CuU%&pVPO3~B-Lq3Ck8Q*`TWja&TyNTB>Yrk$V36k@guG2!3d`D z8(TQcB_0s+nZ}TkY!u@M8WBxD#_}tx*~Lk&^Dl8fw;Q44;d^S)g02kV7Z$OR1DxX@ z-jL)AZ6-5?sYnCb(Th>cWChzf$`u|H>q~7WH8}}Tok%(|kO|CZ9eX&Lq%wsKk z_=}soAbtwFk%4@ar4Fs=#xSO`gw6cP1@7~XWGS_otQ4g(5&T3S#xR>z{K0Xq@sv2J zG={X~rW7@4MrQ^yiG{3ZA7{D4YZ9f_7{Vw>1?tg;o{VG$%h<{hF7t>OX*7mZWTymG zX-o(DGoHDuVK=9^$#deR)n?L@k22JzB|(NUg~e>*AQ!mDTau>J7_w4?N;ITBeHhIw zRHNl44s(fz zgk-QADal50exNbY^kW>qvW8upRk91evv&j1-_8b!km^ zMlg+~Y~c`>c))v-XVDn4QH&}yB8q;DWe%&^$w{vBjJR1fhEVcQnp!lcD?^yfA~tY< zbKK<(iNoziW(rf0`n01LqnOEZwsVv#JSJu~yOEll1gJ(N9T~_3=CO`FoaPoUNRVA) z$Vh(5QkPbAXE;+?%4QC6k^8(SSq{4qPEo25K@@!%!yHzzlM`Iy8F6yjjdbLuG&N~X z7X~w#g=}CyXSvI366exp!YD)q>eH5<{LBoNvyCJC%_Cyw)@D+XgA!Du2^|=~c;>N| z-TcK(UJyTz#*l%0l%)BcaovV=|i$p!B7j-+|DnXDA0G7b5OK8#^DEBS-tT;nOR z^Jz0_$xSJ0(2ULuW)cfn&pys_hgT%ZuQ7yCkn+@{4Lupjbe6G|BV6VoF$!o5smM-o zs?wMa^k*D%S;KBlaf9c?D`+>;lb15orX@j!GKIx#;vna_$6JyX(q^(ygi17|J-r#t zELO6EV_fA4u?uT6X~;!MYS5HU3}PY+_?^9+;Wn>GSVUvUL;=e4BdzJd2&VHJTR6-m K9uiVC82Ar>0&fuj literal 0 HcmV?d00001 diff --git a/fixture/zfpy/array.01.npy b/fixture/zfpy/array.01.npy new file mode 100644 index 0000000000000000000000000000000000000000..0ca9a6cd277fb5ab170bd3bbf50cf8e1433fbd78 GIT binary patch literal 8128 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 P7z;k_#;5&PJ|y6O9Z3S% literal 0 HcmV?d00001 diff --git a/fixture/zfpy/array.02.npy b/fixture/zfpy/array.02.npy new file mode 100644 index 0000000000000000000000000000000000000000..c8ce01fb7aba3ce3678a1e7be9b680c8ce066598 GIT binary patch literal 8128 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 literal 0 HcmV?d00001 diff --git a/fixture/zfpy/array.03.npy b/fixture/zfpy/array.03.npy new file mode 100644 index 0000000000000000000000000000000000000000..5f58365724ac12131f003715f42021795b5de686 GIT binary patch literal 8128 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 literal 0 HcmV?d00001 diff --git a/fixture/zfpy/array.05.npy b/fixture/zfpy/array.05.npy new file mode 100644 index 0000000000000000000000000000000000000000..4a147c4a31a7d5198491cd92f049f729a8f409a3 GIT binary patch literal 8128 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 QYCNUTnN=gbaS;3d2WY$bMgRZ+ literal 0 HcmV?d00001 diff --git a/fixture/zfpy/array.06.npy b/fixture/zfpy/array.06.npy new file mode 100644 index 0000000000000000000000000000000000000000..8628913579f03a401c8e71ed423878bde47bfeb1 GIT binary patch literal 4128 zcmbW$yNXmn5XSMdy582izQANhVS-sO5@R#P#K1@fcSJ#4nGq8ad8ZPDjW;KHl$+^U(ssf4@Tg+KLX#CW58WI#_e%lA3*~rZaO%Gw_YcWlM(PR`J;&kjvgF7J+Qnx z;nn$2hr?$EA?MW7jC%OeXC551-0`Z*H4{zx=2dgr1x|aw1D{`SH8_3Vc=eixk8*r8 zBaAup(U(ulJ-BD*b|5FrpdXH&xp`H?s~6UO>3hq&(}exky!^x2 z7616@)4+wl8S$v$#igHjb$V)jFSUH>#ls69eKY>yVC3lOrDI2Y3GZe}M=y^!aN?!` zuSX5mJzn+RYW34Me_Zj>G@GCy?>p!h-QnOxzcur_TG3GYr%k3I0V{Qu(7Tc`>1@M>0gv+)s!I?V(#M}Z9_8KnGGn{v2hRTV;S8(RE}VMW8I0f$Cl7k?@=05-yWaqPIdwkV;q)}4 z8qK~1EI<6}NrNuDe4I4omzwqnkC%7;;-;h5%yP|;H#PnGVB3A)#ym86Xa-*7@yWaM z3iewee8o5r_j%<2!|V&um{=#Ck|&EG;o+-ubI^3g||q< ztnT{d?TSvn9d9*y{IwHze7u=ik2?v!NS^zr5tuy|>?tHJT-#OYhml5^)3 z7cY9`nu9i8{qpeUp`msF%usBbop3%g3Wupv~ZY{J`Vom znpLkpZ~W$P=e>F9Eq8%~K3*8}!W209_SS1w(G0KxPT)|Z!HW}~m-c8@eeDBYueW@= z&Wk$#yyK1!4_|hmM;#_jr%)GgW}pFw)0tm8=ffMH{^mDxGsxkkuLq|6;pah*9G*Pm zm)Gyx^W?;hOATI~M|!Z{&DYFMSb4ne&5lQyjX!65=-bi34};$>-0|SU%Y!?tH@|e# zhSvit@X%^k`e1RGLyt2*X?f>?Z+LHh@T)u1_WQu8&I4ci&8kN)Zl^wH-+&+Zc8i0i P-wqym^}NZ^cgp<*wAVDg literal 0 HcmV?d00001 diff --git a/fixture/zfpy/codec.00/config.json b/fixture/zfpy/codec.00/config.json new file mode 100644 index 00000000..a61a6d71 --- /dev/null +++ b/fixture/zfpy/codec.00/config.json @@ -0,0 +1,10 @@ +{ + "compression_kwargs": { + "rate": -1 + }, + "id": "zfpy", + "mode": 2, + "precision": -1, + "rate": -1, + "tolerance": -1 +} \ No newline at end of file diff --git a/fixture/zfpy/codec.00/encoded.00.dat b/fixture/zfpy/codec.00/encoded.00.dat new file mode 100644 index 0000000000000000000000000000000000000000..64638bfec9a03447048ec969d6c133bf8dd07006 GIT binary patch literal 2368 zcmXxm&x_n-9LMn|X(HjVmP8V0v4t2Y451YDAmTwXB?JDrWZ)TTp#>{#PYPSni>GYZ z)tJ++Y;BJ*D1@9uFXBOFhh10}54+GkcpLV#Ecg$2(&_Vl_Oh1`FTT8a*zDJj*4!`N z6RV&4`lAc||GzKB>6@=*t`PU%@Ap0vk;v9x|L3E>UMei1F5jAc`gSQryu9_fo+me% zPu4!r^Kk#Vo@drw=JGVt^HyGBK6{L==IGhvD)Z_PJuYuBw;rPB+eTM+m?sD5amVdN z{y^(l@B}@yuIPE|oufAmw-@Rwt!L9C^l);Id3lB|du}hpm+01Wqled+w+nP>b9>?6 zM~~Lg)$}%VIY%F2bNlQQ^w}o5a_Qctr|79?ZXZ8JcjrdW=-zfq^fWcM2W#k)J#;6a zd+Z&cS1q^u>H&K31l@7z9*+*u?V8*D>>;|?`tjcnS8vA2=pMIcmHO^)k(TA~^0TMU zUTJO5`{SnK;8! z=&phj^vI(7;PKx3u0u};x~u6CdNiT?Q1ae;TN+)^U0EAO59vO%y!XBmMz86vqILAy zlPe;7>UUcZPHQmLL(X)GtKUZHjl^t8N)u*hrhf8}OufA?+e74oS z`kSQ+Yx-@u`YSe`1lO2{o35UB;s$fM_+HPa?hnjox0$OFy-O}Kujc4M_ziP$nYpuv zp2(ZbyHoVQddfV%tLILztM#}ZaeL)0weIIWxBJmm=F=^$$92c;Re7Lw-%;G|i#yD% z9dxhZ_NqNZcgEcA=U13V$LM{}?Ug)3R|U5h5#62H33^|d+tYLOFz5E7pu6Li=%d)& z-p$d&h}#Q??#^Tbz4W-8HUi{A_{sUP~ BJ0k!9 literal 0 HcmV?d00001 diff --git a/fixture/zfpy/codec.00/encoded.01.dat b/fixture/zfpy/codec.00/encoded.01.dat new file mode 100644 index 0000000000000000000000000000000000000000..09ccfa92e192b7fba169f3e16ea063cfacca7f0b GIT binary patch literal 5104 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 literal 0 HcmV?d00001 diff --git a/fixture/zfpy/codec.00/encoded.02.dat b/fixture/zfpy/codec.00/encoded.02.dat new file mode 100644 index 0000000000000000000000000000000000000000..2d366d3dc7a65edc65acf2cc76e6439082e75044 GIT binary patch literal 6944 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 literal 0 HcmV?d00001 diff --git a/fixture/zfpy/codec.00/encoded.04.dat b/fixture/zfpy/codec.00/encoded.04.dat new file mode 100644 index 0000000000000000000000000000000000000000..83b154404559f4c59d59cb057af4e682a4723467 GIT binary patch literal 6936 zcmX9?cOaGj7ryrD5+P)Ztn7 z&qLDLP?BFp@ygA7#OGfP**AzZ6m%m05+WCfQ}cT&3iVoivSXbbaF4g#yK1){HHIViwSmm~k#tE%j^MM*Y1_~2 zmR+mPL7l!f#{8%Tu2dkd47V3fkAK=&cac=av`p8R!0@LkHcP*S3n(w(t+oPQO8+c2 z%_L`J8kF%h_V*T;xDJ>~8ZIGM4C$kjhA%t#&dZ3y?&+JKGhr|O{SvlMpOgF}?L%@i zZY6g|(v<+d>~>2g%fI&c94V=ZMZxGn#WUFKhIrfcc2o|iMvSt#~yR{)=`n#d2 z3F5`! zA13GxAkCVcz%H$M8wnmaf5EQjWwiguQNP2T--S4p>p_@yXPF#9DKwi*OAq@vB*J{Z zu228UCOJ27@%2+b=T;zWQy?L^oaDges6rUYppJZD%H zHEd#xV)r5@D6WGP&Hd2@fL@il7bPk=RkS|rrWiSw{p97bJ9-VJ&kX?GN#RQDFG}Ro zapL}=c?er#e`9IKT&o6D%YQ= zR8G^fB}gnwk(2PgcMFgT!BunAVXQhV&j_)i2FVy5+?1Zy^gKA~JbLW5Y6iJ!lnVA3;yq@qCm|egcn%9gA zWzE5T=yYCIN!)V6`!8&=(nrV1rpY8$is@`L1r1q6UZ}Z1Vvd00Y`s@F9*gyxlxrJgM2?2k2=z~c@lCz1$|oG$c{3H|%Q z;Yq!W6fvAK1;BBvUyM9uG=F8yKN=ao;+5~!A|F7*?4RoasCd(VzP9}(@x|Y@Zpkgi zb(5YuWM#5+8~A0v__E=Lsf$N11G`hniKM#rC6z*YCvmj_W#YE?9E+QXi4fr8)}$&V za;LIkE0#6LfuN{bhv#x`pnkk{#p}sPyj5*}#Vi*&5e3RYL#l_U&#=2+hsA&0vg1ZS z03-8RaDEd=d5z>_u20AE7i#0^GiqyBB>Yd$ zJEcLUL)~hyxSLy?PA$tut1F7bn|JNsJnwC6eR;?H3NV%Q-+Jbf8@NN;^v9;b@mLv& z3$22;&7Zj!>WPS)o>uQ7;3HvrT<{uMNBca{=2`A50gBOopX3^dn6+rKo_fCmKP#BHg}Uv95=qoqjQ(T z?>UwwMkD?~hDsda!TQD1!W@H>lxtvmV_QMAS#j{j6MzNtDvrvMGN~6~y6;*hvnDsz z>ph7tI0dRN{)Wf-PwJN^3|Ws4U6)Vyw?BEv?jAP+1mW0@VhB9YP*`@b$51mL3e%)@ ziWj`30!X01CpdPq(qB+dndP{7Y+;oX8G9utHIN7v$9PSCi*@G&yh#-3vq1r}5Z|X3(e-hr0S{-xSi^6i6suuMUUjLmy5v ziE;yT%l3Xlq!JZxw)NH?nJJ%ec$~8h-6}Wg7EDDeov(j(X9oH=dEy1C(Ox;inGGc{ z1v*FNR(Y8C#EJDZ&Jp5g`M!+{6@6mvO)5}$0fBIlxO8pQ1nW$Im)`;N9VERk|E-A8 z3&wxdDgD@EqrizCvuyBhpw!WP05$%&cmg)^s#LX6P3=bSJ}bFDnt+fb>SLd&vUVK+ z7xewG1IOsp6S~LrZapd${HAPcxOXgKx}ak&;^i>XiI(a$5R$7NOp|D5nxhThJ}(Ev z7qNdcObTN=*ut7x)w||XcFvgPSLqK0ER2&0lGk@Z_!&o@kC(8k@Ys#_a|-qzM>}|2 z#Ch*z!`wXo;b~%?=N*Y(NuW5)2oC`qC;R65d6*2k&m`Be0mo;y@->mg_7SuXfD1Or zn8u-K5+jV6+T)%iZnbINWu`MCuH?221zt!80z}mG;7(G8VUcwLojuFx+fKQq>_d+t0!fK&)~GIQEa z=fx7Z;^3$@^n#VuAC9ul6mV3`yj^p(bSZlBb7!Q~f#$;4WcQ1GxqBg)<+P;9l*#?Y zE35aYjw0;`wMwIe>f0l4Kn_GkgX#-y1tk7QxapLP^r}{yC_gg&p7$?HK5A~KhK6~G z#?X-S2Ma|?8icN`hqsE2pqmmd;3YW-`dRh_Fr>u(-7v*r)b$yA^ApfzdR@jLq}8`5 zfI4|?^Vo;cs# z`1H3CDyCtWkFPVkZ(Bh*2bsInxxa)V_})g#VG_Kr4QjUH9e8H|Sc+U&@e-tVln$d% zs{O)>a7V44-BN+y6AWXlR5Ex=>L6`y@zr2C%U>6J1XC@Mnlasp?u6=5Z{L%COt}vumXQXT1KV2(Yw=K7&;Jmo+JC2{68vt;{i!o5bS8BW)%@xER z-IDk;4>hwBOznUSj4OKi)ADb#V$VD3jmIKO=vaDDZ%L^@4f!`HC6X^|d4-pk4LCR@ z&ZWESKhBB*kDCxarrI>6@F$^+5Qa`wEu9LXk~1vh^}x7$dVka0&ChMKYT^)RmQ^n` zueQA>FIvg;|Bb=$cr;_{(3S$-2QrmSHrs)DPbp!&b|9?Z#6e}F_F?xT?Qr=^Ldw2% z@d&}w6GJbMaNm;Gd(=vE?0u_H?z2^^7UmTDp*KDafGh*|rEk;X)vew>&R8WH^z)uu zeP@4{1*%z=GkiB$DSdrG;4@`EH|OgvIOJOa*E%pEb++a&M~OxGvP3(M`&N zTqSFQZ5-?plJ-O`q%}|^MSx>$t$2by@-ilJ2bevm_p6nP*3i%$&MFo2s~$0#O!)@M zpdBi0OdBkeOl5Lxgk=)>;*+ys_2v_STG9by;>SGy+)}$=amKz?^PUUoSNagcEv5mj z>8%|e!9XCBq{;*7VN>;@Pc@$(=AqFl8oM5-)?YG8K-~q)8AE!H8W?EKW-2Sa*Z6Xq z*jK$MB*1ngU`@yJqP5L{Er>3j@4_%h5?ZY1kz$tcB?Wtc&3QfUPZT0OpKVb_pjibTWIO46 z6fF;2Foo1A5k80VOeMXq@^3|<9*G$gh|$0|?%)Mxzwdsh-A4Z@ZqZr6|3*-+jGeVr z+c;Z*8N&H@AFG79yiUi|zhRCX<2|c&i$bKtObWob%FIXJ;LUzTvxt&Z*2Put%jNfH zxonJJb%FN3cF$&iR1J=gx0XQF%z_Bf0WtqsVm#uT9gm!jprro1$*r83#Glyim%2yu z;LWYlbiCI2-4cuG;kn7jd0ea)(M-eire#1T#khFMB?{d+zT-D*{4P=k@nMfRH7^>$ zhZd6x({E}|s=1}*>H+5UJ^mtvQy|GmO03eS#n;c8I>bvXo*u-K@>^U-T*v@; zaqcJ(tm|ZL?%wso^3-9-bM69qV*H7bK{D&S6jb^T z3tS|(j3U7Z-u5cB1w0_X=nAtFl-M|50=L@$yljk~IuKX*6e7hOTb5@s%gR6DM*$v{WG0b1!Gj!{Wip89fU?7tYs^WDcE@eOUS0Gw zKaZPs4SC7~E#ejDU&@ww|0(ZVE>J=6=sKqaykmb$!L6%hdA!$xf-NMs>yJLrSs@%5 zFzA86fR@OOSC!S4DILeXcQ@~dwSKuV=I9Sw1icyM-(#uB zCe?E2RY9-6${`r0d?6_LrUNXzc)N5b-VI`b!8RD-!TmH}tgt6kIoA~&hwgcd9*ZI_EJ8m0Dx}h#|a8HpKJG{Al{jl7> zF!FbHM`CjY)#{p~+!d(w*LscoXai13p;Xw}WW_vT*%t{Z_Lf9Y4YSHgJBkUfHiaOi ze4TPXu}2e+98=#L19*{n43P|Lu8-n=s5v;G5_YrdgfighTpMoUs(6-_u8~-q?f1P86hvk#AECA8Yi9x}mo6 zw|4GmCU!JUCj_KNOEN?Dp2&)m)@Ja}^Pj!BJafhhmm=5TOJ2ro7w(wPB}nxKN2D^Q zEahTVd-8n49nMUQ5nH6ko_hwg2;t_=-BMC{=QrpVMk_?R zZrSkD$7Z_DngFXzuOD5u(FEWuSkCkI=P{dcXDiHLyLNyag!={j7_&~V`k~TOFT+yB zHVI>7-V_Io4=JZ+FAu>nbL6$`>I~7P*b<}Bh#wUI?YWDh6e67xWck(-=gBRGcdg02 zBZ1>_Z1Cp!de6M9D^=I?E3KHq0?ixsu2=_#XC;iF2P-io+}XtsGL5^Vzhd=X`KLfL zeHGB)YXdoSz(DbnJV9}^z(v6-4z4$u?N5k!R>gX3;=@ z08a`?YYE-Onqq~&F8%<`&6fW5TJR)|0B?XfK&xvOIx34oF-87T+3ET99s@M62wv}5 zWD0=d9OK8kW4vG89Q9{mrynPVo7!rMpWP0?l7@M$h$|$hWfmb*;`nr}a4X#!Gb=$q z5g4A(PX;=3ERH_~tU6qqOccLzWIa6_G{OSaFe9upEf6^jEsDe-FF_12tU+OZOv43$ z8onASVb0O^*)fTH2o@Y-u5jovCwBx%B;|Z=P3}Awc_TI8xPsW&N6G(Q zrM8zGtfz}1=i9;cp(t@x%an&hwIy~(;8Sp*5Qcg5DBDc1W#{XxPaEOz0owB4VyG1~ zqN-Gm*Li6Iq7*#Z!NkN)VamTbn?^eS>jG5Mx2*=+$w+&};BVUl#pvzRW&^(O;Cx}c zuLb`w{;05e1RE)|x~;U68C5EJlLq#GNaT7T0=D!gG~i;QJ<>2wCncSyJ)sdej>-Om zd07wyzdN>(e%>wkEPG!{sD6qIBs@e+-N)p!bWJD=Jo-?^IghV6ng03uIH<3n42#W2 z%|uNWUlA*0n~Jsso;>b!C+?ta2+OX1K3RYBS=~%HV18yGf~}Etlw2S5#G1N%&Qk@^ zHrlPta--k2avz+#s~iyXV6Xn=H`EnCctg9{+}H-$Bm#5hUPVD7fz7A&T;ipz*O(f~ z_l3I=o z;e5%`vn#D4(FZZaqu==mI@s@g`;rbL!s9K)i9!l{i|Xx`<1pqmaMmGVSanH@Lv8DN zL`=3dMx4)V)Hl3fJx$nC|8`c)DGt&*L%-LVRWIbZU7}VDzKBhnTL6H`2H9FDb(W{^ z4W=j7$?nI ziw{+SZCz`zsFl(O??4jR1p8x$vrlO!r3zOdI9p|bAa`bR+?LLyfv zQrZhgZ4-{{B0vEude$4N(5?CWib(1nrjE7^fs3GQZ2L$9;H8s{a~{_uC&kubP>OW- z9*q?kLb;agqdO?f{6ka7GH3nz!n7XID}#Z!XQdv8_s76K;NOy4)LcI2>~^<4#~pzr z;kjAhK}3teB#%Y6tEyf_FUC%FCi@pQirV&{2+&Lbn-tVSp7{(Wydn3H<;R`BPnQFl z#B+`s@f*Apxrsi;Ku(YCeT0-6(h<6b=5z?|={skDzYM8RA1<`=S+~XxtH=ILuI&L^ zIdk&`3HQ;mE{C&R@>RD#O#k+gBF3Sy87sb|3J_7KM2o=_v@`_^7u%%A9MO_;q|Ca? zLCk-1e2nP1Tl4y|&h!Ibre@O&)xh?arVcx>L+XN5fdzujEW=L9HUI4l z#t#Iey_Nlp%Vox-1W5kZXCYaw@eU1!dBA$uqMoZ+7*qW=wsWUC^p1a*faCyO+?N(J}?RH2us;%M?G>!HtbS%+pkf;#TL>->LlbUvNM|CEkm! z=IlU-zdh}=LM`mP9Pc;^#RR9B>@M~JVdOJh7#ZaK3Y|y}D>c=Eo5~p2Jo$@-G;a=0 zaHm<~CL&sh5brF5&^epjT?oWGzW_ zFRI>S2MbK+aU%IQ(GJPr)&r@Q)7T(+DMLcbB3nEz*AJJJ7w&-nDX{c wtt^YL1k$KpkfMFiosv(ESQIOx$;f41xx<)b05}IE-CmFGcP(UF62Ph50i2wiq literal 0 HcmV?d00001 diff --git a/fixture/zfpy/codec.00/encoded.05.dat b/fixture/zfpy/codec.00/encoded.05.dat new file mode 100644 index 0000000000000000000000000000000000000000..7e2038ed7cfdfa2709d0956232fadf064a234c0b GIT binary patch literal 6936 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 literal 0 HcmV?d00001 From 9d7ce659efbfc8b5467f7deda85804062990b130 Mon Sep 17 00:00:00 2001 From: halehawk Date: Mon, 20 Apr 2020 19:19:42 -0600 Subject: [PATCH 32/69] add zfpy with index-url --- requirements_dev.txt | 1 + requirements_rtfd.txt | 2 ++ tox.ini | 2 -- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/requirements_dev.txt b/requirements_dev.txt index 47b6ba88..181ab749 100644 --- a/requirements_dev.txt +++ b/requirements_dev.txt @@ -1,4 +1,5 @@ Cython==0.29.6 msgpack==0.6.1 numpy==1.16.2 +--extra-index-url https://test.pypi.org/simple/ zfpy==0.5.5rc1 diff --git a/requirements_rtfd.txt b/requirements_rtfd.txt index b5d89e1e..188d5823 100644 --- a/requirements_rtfd.txt +++ b/requirements_rtfd.txt @@ -6,3 +6,5 @@ numpydoc mock numpy cython +--extra-index-url https://test.pypi.org/simple/ +zfpy==0.5.5rc1 diff --git a/tox.ini b/tox.ini index 5042c5b8..8d5e6531 100644 --- a/tox.ini +++ b/tox.ini @@ -21,8 +21,6 @@ commands = deps = -rrequirements_dev.txt -rrequirements_test.txt -install_command = - pip install --pre --extra-index-url={env:extra_index_url:https://test.pypi.org/simple} {opts} {packages} [testenv:docs] basepython = python3.7 From 92826fc887526420db6883e73f416794d3a4a006 Mon Sep 17 00:00:00 2001 From: halehawk Date: Mon, 20 Apr 2020 19:24:11 -0600 Subject: [PATCH 33/69] remove zfp.rst --- docs/zfp.rst | 17 ----------------- 1 file changed, 17 deletions(-) delete mode 100644 docs/zfp.rst diff --git a/docs/zfp.rst b/docs/zfp.rst deleted file mode 100644 index 670987dd..00000000 --- a/docs/zfp.rst +++ /dev/null @@ -1,17 +0,0 @@ -Zfp -=== -.. automodule:: numcodecs.zfp - -.. autoclass:: Zfp - - .. autoattribute:: codec_id - .. automethod:: encode - .. automethod:: decode - .. automethod:: get_config - .. automethod:: from_config - -Helper functions ----------------- - -.. autofunction:: compress -.. autofunction:: decompress From 2dd10db6ddc2f1c1c327dde077dbc154ab3b29de Mon Sep 17 00:00:00 2001 From: halehawk Date: Mon, 20 Apr 2020 20:46:52 -0600 Subject: [PATCH 34/69] get 100% coverage --- docs/release.rst | 2 ++ fixture/zfpy/array.02.npy | Bin 8128 -> 8128 bytes fixture/zfpy/array.03.npy | Bin 8128 -> 8128 bytes fixture/zfpy/array.04.npy | Bin 8128 -> 8128 bytes fixture/zfpy/array.05.npy | Bin 8128 -> 8128 bytes fixture/zfpy/array.06.npy | Bin 4128 -> 4128 bytes fixture/zfpy/array.07.npy | Bin 0 -> 8128 bytes fixture/zfpy/codec.00/encoded.02.dat | Bin 6944 -> 6944 bytes fixture/zfpy/codec.00/encoded.03.dat | Bin 6936 -> 6936 bytes fixture/zfpy/codec.00/encoded.04.dat | Bin 6936 -> 6936 bytes fixture/zfpy/codec.00/encoded.05.dat | Bin 6936 -> 6936 bytes fixture/zfpy/codec.00/encoded.06.dat | Bin 2576 -> 2568 bytes fixture/zfpy/codec.00/encoded.07.dat | Bin 0 -> 4592 bytes fixture/zfpy/codec.01/config.json | 10 ++++++++++ fixture/zfpy/codec.01/encoded.00.dat | Bin 0 -> 2368 bytes fixture/zfpy/codec.01/encoded.01.dat | Bin 0 -> 5104 bytes fixture/zfpy/codec.01/encoded.02.dat | Bin 0 -> 6944 bytes fixture/zfpy/codec.01/encoded.03.dat | Bin 0 -> 6936 bytes fixture/zfpy/codec.01/encoded.04.dat | Bin 0 -> 6936 bytes fixture/zfpy/codec.01/encoded.05.dat | Bin 0 -> 6936 bytes fixture/zfpy/codec.01/encoded.06.dat | Bin 0 -> 2568 bytes fixture/zfpy/codec.01/encoded.07.dat | Bin 0 -> 4592 bytes fixture/zfpy/codec.02/config.json | 10 ++++++++++ fixture/zfpy/codec.02/encoded.00.dat | Bin 0 -> 2368 bytes fixture/zfpy/codec.02/encoded.01.dat | Bin 0 -> 5104 bytes fixture/zfpy/codec.02/encoded.02.dat | Bin 0 -> 6944 bytes fixture/zfpy/codec.02/encoded.03.dat | Bin 0 -> 6936 bytes fixture/zfpy/codec.02/encoded.04.dat | Bin 0 -> 6936 bytes fixture/zfpy/codec.02/encoded.05.dat | Bin 0 -> 6936 bytes fixture/zfpy/codec.02/encoded.06.dat | Bin 0 -> 2568 bytes fixture/zfpy/codec.02/encoded.07.dat | Bin 0 -> 4592 bytes fixture/zfpy/codec.03/config.json | 10 ++++++++++ fixture/zfpy/codec.03/encoded.00.dat | Bin 0 -> 2368 bytes fixture/zfpy/codec.03/encoded.01.dat | Bin 0 -> 5104 bytes fixture/zfpy/codec.03/encoded.02.dat | Bin 0 -> 6944 bytes fixture/zfpy/codec.03/encoded.03.dat | Bin 0 -> 6936 bytes fixture/zfpy/codec.03/encoded.04.dat | Bin 0 -> 6936 bytes fixture/zfpy/codec.03/encoded.05.dat | Bin 0 -> 6936 bytes fixture/zfpy/codec.03/encoded.06.dat | Bin 0 -> 2568 bytes fixture/zfpy/codec.03/encoded.07.dat | Bin 0 -> 4592 bytes numcodecs/zfpy.py | 6 +++--- 41 files changed, 35 insertions(+), 3 deletions(-) create mode 100644 fixture/zfpy/array.07.npy create mode 100644 fixture/zfpy/codec.00/encoded.07.dat create mode 100644 fixture/zfpy/codec.01/config.json create mode 100644 fixture/zfpy/codec.01/encoded.00.dat create mode 100644 fixture/zfpy/codec.01/encoded.01.dat create mode 100644 fixture/zfpy/codec.01/encoded.02.dat create mode 100644 fixture/zfpy/codec.01/encoded.03.dat create mode 100644 fixture/zfpy/codec.01/encoded.04.dat create mode 100644 fixture/zfpy/codec.01/encoded.05.dat create mode 100644 fixture/zfpy/codec.01/encoded.06.dat create mode 100644 fixture/zfpy/codec.01/encoded.07.dat create mode 100644 fixture/zfpy/codec.02/config.json create mode 100644 fixture/zfpy/codec.02/encoded.00.dat create mode 100644 fixture/zfpy/codec.02/encoded.01.dat create mode 100644 fixture/zfpy/codec.02/encoded.02.dat create mode 100644 fixture/zfpy/codec.02/encoded.03.dat create mode 100644 fixture/zfpy/codec.02/encoded.04.dat create mode 100644 fixture/zfpy/codec.02/encoded.05.dat create mode 100644 fixture/zfpy/codec.02/encoded.06.dat create mode 100644 fixture/zfpy/codec.02/encoded.07.dat create mode 100644 fixture/zfpy/codec.03/config.json create mode 100644 fixture/zfpy/codec.03/encoded.00.dat create mode 100644 fixture/zfpy/codec.03/encoded.01.dat create mode 100644 fixture/zfpy/codec.03/encoded.02.dat create mode 100644 fixture/zfpy/codec.03/encoded.03.dat create mode 100644 fixture/zfpy/codec.03/encoded.04.dat create mode 100644 fixture/zfpy/codec.03/encoded.05.dat create mode 100644 fixture/zfpy/codec.03/encoded.06.dat create mode 100644 fixture/zfpy/codec.03/encoded.07.dat diff --git a/docs/release.rst b/docs/release.rst index e7b123d6..86735d83 100644 --- a/docs/release.rst +++ b/docs/release.rst @@ -3,6 +3,8 @@ Release notes Upcoming Release ---------------- +* The :class:`numcodecs.zfpy.ZFPY` codec is now supported on Python 3.7 if + `zfpy==0.5.5rc1 `_ is installed * Remove LegacyJSON codec. By :user:`James Bourbeau `, :issue:`226`. diff --git a/fixture/zfpy/array.02.npy b/fixture/zfpy/array.02.npy index c8ce01fb7aba3ce3678a1e7be9b680c8ce066598..aa6cf93fa08cf5b1c1f410bd5ec3cf1a72535be2 100644 GIT binary patch literal 8128 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 diff --git a/fixture/zfpy/array.03.npy b/fixture/zfpy/array.03.npy index 5f58365724ac12131f003715f42021795b5de686..8994304bfc17176d77e89fc8a2d842ce964d46de 100644 GIT binary patch literal 8128 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 diff --git a/fixture/zfpy/array.05.npy b/fixture/zfpy/array.05.npy index 4a147c4a31a7d5198491cd92f049f729a8f409a3..c3579059a1d1d68fdd708ce9e5eece6b090d77c6 100644 GIT binary patch literal 8128 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 TuB?l67bBrd=&^FE0r31kWQ!J8 literal 8128 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 QYCNUTnN=gbaS;3d2WY$bMgRZ+ diff --git a/fixture/zfpy/array.06.npy b/fixture/zfpy/array.06.npy index 8628913579f03a401c8e71ed423878bde47bfeb1..76e40598f289ead603fc9fd7f53e0f4dec224c23 100644 GIT binary patch literal 4128 zcmbW#&5Dyj5QX84j(_97-avLy$RY!-#I-xcjSE*2oQQ%rl874-ya#XCejqP2E)5jj zU3Kc5Q}yM~>$k7oygOO^So~aF><%CHtLMwri_gzi>*ea><^KDA`}O_h{$eNpa{J}5 z8~MYh?YG@{KRMrQ*30wF)AjP#^8bEkr;Ek!M=@KOFvRBb<3~ zrw@Z49v|NP@LJ#%@bu`y>J@o`SBu}jf<6v@yam7JvQu-=@pc!u=DW9`58IoT z93K7ckzW|OeCCM{cyB)V6!c~u+&JLFHoHCIHH$kQ0qd<-*h~ER)^upl4&kKL<^vm0k+&nKVZu^lp zlU>)Nzgg+4=4rz7y`*C)@9JDj_kdwp_trH`gOUOo2D zGakO&<(+1g(`!!s@I2s<6EHMzs=3RhVQ)C`sq^41a5sxS^V8PTe>p$H1PQz&E>@3{|i^z_+izWOHIUO|9#iKGb~>7 zs?#@r{|_^YF!DH^=4nsr&Bp`H`d|gE{JEQ-AE$3kd)|ea@WX_2np?l{y>XhyUGO2y zgBy>)&r`nC_@s@)TsUFnc}|Ou@baf4^wCrErbm}YeBN=Z^T-1oI664t&D|V&c*HBG zuHPGndi%_;{`|C;cGJ%2;hFX1^6xI1&kp$Gg=h10<_nj8-(R#NbE@f0m$rR6&EM|% z#erL0&6|H-%;w&ImJj@}^xA8^@G#zZ@Cmx@-mdb~-2B$(Zblq}-aH2lT(r&Tglp$= zwDsr}%?D>!^l8jq^m&_0op1L%sP*5Z$%h>kdBm$v9o{@V^oDDvYQ6z~dh9^ZH-mmY z=+SBB?s#y+$T|Bz@NFi3@burLMHiL^T$;FGdF6Ay(`rXfSXwx6(!r_LTy`e^uW$Tj zgwrcv<;~%an+KS*`gVGGRugt7=<{h-n09Lpy}j|N(}LH>r(L+uv-8G(Ug*LIc>4Hp z@nC*EG@Raa>BHL>tQ<}_{Ow8(hCdp1fr^Jv93Nz?ub~2R*(QE^l|eH1dz5es}$0aqE%i z1rJ>_sL>HPaR~E@c~*Bgx_O{sUMDVRyQN1<4}2$n{^Ii;%$WcD(T6jmoxnNi`~{B& BGhP4y literal 4128 zcmbW$yNXmn5XSMdy582izQANhVS-sO5@R#P#K1@fcSJ#4nGq8ad8ZPDjW;KHl$+^U(ssf4@Tg+KLX#CW58WI#_e%lA3*~rZaO%Gw_YcWlM(PR`J;&kjvgF7J+Qnx z;nn$2hr?$EA?MW7jC%OeXC551-0`Z*H4{zx=2dgr1x|aw1D{`SH8_3Vc=eixk8*r8 zBaAup(U(ulJ-BD*b|5FrpdXH&xp`H?s~6UO>3hq&(}exky!^x2 z7616@)4+wl8S$v$#igHjb$V)jFSUH>#ls69eKY>yVC3lOrDI2Y3GZe}M=y^!aN?!` zuSX5mJzn+RYW34Me_Zj>G@GCy?>p!h-QnOxzcur_TG3GYr%k3I0V{Qu(7Tc`>1@M>0gv+)s!I?V(#M}Z9_8KnGGn{v2hRTV;S8(RE}VMW8I0f$Cl7k?@=05-yWaqPIdwkV;q)}4 z8qK~1EI<6}NrNuDe4I4omzwqnkC%7;;-;h5%yP|;H#PnGVB3A)#ym86Xa-*7@yWaM z3iewee8o5r_j%<2!|V&um{=#Ck|&EG;o+-ubI^3g||q< ztnT{d?TSvn9d9*y{IwHze7u=ik2?v!NS^zr5tuy|>?tHJT-#OYhml5^)3 z7cY9`nu9i8{qpeUp`msF%usBbop3%g3Wupv~ZY{J`Vom znpLkpZ~W$P=e>F9Eq8%~K3*8}!W209_SS1w(G0KxPT)|Z!HW}~m-c8@eeDBYueW@= z&Wk$#yyK1!4_|hmM;#_jr%)GgW}pFw)0tm8=ffMH{^mDxGsxkkuLq|6;pah*9G*Pm zm)Gyx^W?;hOATI~M|!Z{&DYFMSb4ne&5lQyjX!65=-bi34};$>-0|SU%Y!?tH@|e# zhSvit@X%^k`e1RGLyt2*X?f>?Z+LHh@T)u1_WQu8&I4ci&8kN)Zl^wH-+&+Zc8i0i P-wqym^}NZ^cgp<*wAVDg diff --git a/fixture/zfpy/array.07.npy b/fixture/zfpy/array.07.npy new file mode 100644 index 0000000000000000000000000000000000000000..6895a35cca1e1ede377587c9d36e61c5afe407db GIT binary patch literal 8128 zcmbW%yGjF55C-6lcjH}OV7paFp`D1eonm8QCBdvHh>?xhh>&;ig^hZ?=7%%}WSBWK z^Iy(czpidBuWx(Rd-c(b+R1&_oYl?w(`hrPn}>1t)(v0o#@(p>sb37AC+)00c^tmB zv;6Sncu@cS9S!Qw`X9gkdiDF8?w7byVn5ZohMN zIUVYB@Btsb>!Ztl{+d(QPY1v374@0N0}j3F?vJ1LitzBV$DDWLoIcUKId%PTybpcO zMgHoCpYPkf(l64B58nKM&u=_@FZ_XLFCN}O?ltFL+!I`T%;688ez0s`{ee)caQ4$^2svAU*4GG7-2I69>EVMpxaxGO!}sp^m*@2H#r>G$2VQ)G zM{nw~$6h#iIk(S#dPIBmdl&YK&hg?CTs(6xU+ggl$DHUs_#<~;^x5NF9Z&BSzJ1<< zI=<%l!8bVgn|IIf-6Nj#sl&I&eee$tedhEfFZ|qxemOt!aZWcL{F3XVTZBh1KKS#G z@AiuJ@J+97|ckq*4v5B~gcj<-4QLxiW_ zd&3Ve`rzruGwXDTaQF(JKk(eQI^FibrPrK3{Pn}-znm}T`I9=-MSJ0>n@e8a3;*ci z8$NutUv!^&PLDo3=&=_r-|cgrIbY!E6Y0j^JYDX=J&Jgm9N=MmeG5`TR&dzn@{-2 z-KV|I`QhI9U@x8c(hE;Chaa5G;qr$L`kdn{dVhGDOaJV(hwq{~J#@-N{ORHY{dup> z>A+JRUwC+CzrE=zouWC>UVhQ39}m3vVct1?e85{D-tI#kZ@%Fn>a!odJ?825Zt+ST zc;RV}+@5(j`uPFJdsXMFz4}roJl_+&csqydoNhkR1xL;|Jlq4HoWnQg9jL=MM=u_D z;cZ^ObGbQwz~wvL_Bf}P9((bmUmv}`N0A#)UbyZBzWt&;`r+hW_2j8;kLW$|YhFFi@zqa{KJSf> z?$w-}KDl#q_R8_4TR-2tNBH>p|Ds>+-RO6Y55Mij$9uxx9=`K|@A~23rH>vu6PIrL O&ErdtbGZ8W1MeFZ+BJ3n literal 0 HcmV?d00001 diff --git a/fixture/zfpy/codec.00/encoded.02.dat b/fixture/zfpy/codec.00/encoded.02.dat index 2d366d3dc7a65edc65acf2cc76e6439082e75044..bd7632f8f26be46d70fb326931a598eb82498034 100644 GIT binary patch literal 6944 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 literal 6944 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 diff --git a/fixture/zfpy/codec.00/encoded.04.dat b/fixture/zfpy/codec.00/encoded.04.dat index 83b154404559f4c59d59cb057af4e682a4723467..47f7d12070ccf107e6c2f861fa95cf8d595939b2 100644 GIT binary patch literal 6936 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 literal 6936 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 diff --git a/fixture/zfpy/codec.00/encoded.05.dat b/fixture/zfpy/codec.00/encoded.05.dat index 7e2038ed7cfdfa2709d0956232fadf064a234c0b..095e4afe4819603aa1b28a92025bda2d72f3f1a5 100644 GIT binary patch literal 6936 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 BzOVoQ literal 6936 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 diff --git a/fixture/zfpy/codec.00/encoded.07.dat b/fixture/zfpy/codec.00/encoded.07.dat new file mode 100644 index 0000000000000000000000000000000000000000..4a8c1f62f1ee1f6d80a7c3b737e8ea6f1b75d25a GIT binary patch literal 4592 zcmZWtZA?>V6n>p7bY`13{#ce6y?1I1)5$s|!sf8ok2s9NfHAC@#CAbemqOTwa|5MU zXb|UA<_Lo5M82|CT*zb!D9fcV`4GFVFlGd_Oc7CG6$%texy$@vavu2s<>Yyv^PKaZ zj~CLCQlI~9E&Kl~M|tw&={NJg1vC89-=2JkofrTRyEvpF7?IN+eMFB*Bl_LGK!RfS z^g9&9s!xxBCHCZp3O%JO$WdkylU%S_nN2KWj%pH!RQdNb1jAVKnQ`5IOu7ljC8{VNL;8i)R)jlIAWaXV^;UamCw<`i)IYbXzqwQXrH?hWf9@Cv5`v5fQiSg4=xYYrX;BNhd6Wp!SC3XYI zw)6qEMN;H_p2}?7Bci6lfN83U<<9X#F6{>%0MXX%%^FJG;2wl4kkad_Kx9qU9{?&2 z`*9x>vnuq#RUq%*;2Qyz`JZ5?nuFXBoK)h)mizTIcndnS_Bg1FSThJUAg-)?%#(N} zogofD+^N9#fJv%`+ZDB41C&TGEVWe!q}f^kdy81*K4k1Yd{ za*hF*xOpu;bZ0LGO_DEh2Dm3Z(ZD2GlCa=68v!G(yn-9<%HhAke^B#pleBZB^roYd&y59ID$QmaW0~5WG1f4=L0?mzjv`JpIO>CJM6c zwZdLxNk!N;&iDr4&b_z*msf75hEkvX_yw3YLeGxvKxDrD$`DV_g-krN1>XsSW5Q?} zSahA)khV;jxd3FoKGy->Vprk3&mY8xQD678mlm>M97ai8Kqx+g3g5>I@O*=NLaT`a zk+~@;(0|gWspm~JN$M3naIC6vE_NGNJFcO}`kpI9k=Nex@&qKMUI>IyE~eeZcWC>I zPT;QLeIUt|&;t!9-b{w;7L2oNN9jyr6Zh+YDfO5Yx4GrD5fjnPY7Xv)3U+d$kg5j|{(DI@+9xTF;4fk8C0jHwv$PR1*E55pH za~Mt&OENrzB*D{zv!iU&Y>?zy_)9yDM5?;ns-dx|cSb-0ShgQdIl^c_yMzL^Zpw z`|n`kQYwc`)S1l`0?!iGwQ52`K?XBEjK8zuFzs(_!_vN*aSvpNyxIga!2+$#>br5f z7~`=*&C1jOGRHvoiQb(hP!G(g(CDSAm;4ThwXetvOMz`zhLO3Npw;BKZCGk?nfUL6 zw({k8tU3USM!IzZh$OoU;!uV99)W88-VQfiWvXr`{%Ky8au%56pds+azPJF@Cu(Pn ifoyT{QiWDXaVM@ML)bGLVaryWz7?K+o)Xzk?fVb$Dry`6 literal 0 HcmV?d00001 diff --git a/fixture/zfpy/codec.01/config.json b/fixture/zfpy/codec.01/config.json new file mode 100644 index 00000000..ee798f71 --- /dev/null +++ b/fixture/zfpy/codec.01/config.json @@ -0,0 +1,10 @@ +{ + "compression_kwargs": { + "tolerance": -1 + }, + "id": "zfpy", + "mode": 4, + "precision": -1, + "rate": -1, + "tolerance": -1 +} \ No newline at end of file diff --git a/fixture/zfpy/codec.01/encoded.00.dat b/fixture/zfpy/codec.01/encoded.00.dat new file mode 100644 index 0000000000000000000000000000000000000000..64638bfec9a03447048ec969d6c133bf8dd07006 GIT binary patch literal 2368 zcmXxm&x_n-9LMn|X(HjVmP8V0v4t2Y451YDAmTwXB?JDrWZ)TTp#>{#PYPSni>GYZ z)tJ++Y;BJ*D1@9uFXBOFhh10}54+GkcpLV#Ecg$2(&_Vl_Oh1`FTT8a*zDJj*4!`N z6RV&4`lAc||GzKB>6@=*t`PU%@Ap0vk;v9x|L3E>UMei1F5jAc`gSQryu9_fo+me% zPu4!r^Kk#Vo@drw=JGVt^HyGBK6{L==IGhvD)Z_PJuYuBw;rPB+eTM+m?sD5amVdN z{y^(l@B}@yuIPE|oufAmw-@Rwt!L9C^l);Id3lB|du}hpm+01Wqled+w+nP>b9>?6 zM~~Lg)$}%VIY%F2bNlQQ^w}o5a_Qctr|79?ZXZ8JcjrdW=-zfq^fWcM2W#k)J#;6a zd+Z&cS1q^u>H&K31l@7z9*+*u?V8*D>>;|?`tjcnS8vA2=pMIcmHO^)k(TA~^0TMU zUTJO5`{SnK;8! z=&phj^vI(7;PKx3u0u};x~u6CdNiT?Q1ae;TN+)^U0EAO59vO%y!XBmMz86vqILAy zlPe;7>UUcZPHQmLL(X)GtKUZHjl^t8N)u*hrhf8}OufA?+e74oS z`kSQ+Yx-@u`YSe`1lO2{o35UB;s$fM_+HPa?hnjox0$OFy-O}Kujc4M_ziP$nYpuv zp2(ZbyHoVQddfV%tLILztM#}ZaeL)0weIIWxBJmm=F=^$$92c;Re7Lw-%;G|i#yD% z9dxhZ_NqNZcgEcA=U13V$LM{}?Ug)3R|U5h5#62H33^|d+tYLOFz5E7pu6Li=%d)& z-p$d&h}#Q??#^Tbz4W-8HUi{A_{sUP~ BJ0k!9 literal 0 HcmV?d00001 diff --git a/fixture/zfpy/codec.01/encoded.01.dat b/fixture/zfpy/codec.01/encoded.01.dat new file mode 100644 index 0000000000000000000000000000000000000000..09ccfa92e192b7fba169f3e16ea063cfacca7f0b GIT binary patch literal 5104 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 literal 0 HcmV?d00001 diff --git a/fixture/zfpy/codec.01/encoded.02.dat b/fixture/zfpy/codec.01/encoded.02.dat new file mode 100644 index 0000000000000000000000000000000000000000..bd7632f8f26be46d70fb326931a598eb82498034 GIT binary patch literal 6944 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 literal 0 HcmV?d00001 diff --git a/fixture/zfpy/codec.01/encoded.03.dat b/fixture/zfpy/codec.01/encoded.03.dat new file mode 100644 index 0000000000000000000000000000000000000000..55c7772328a1a1f75e4387dfe79e2c0ac54e5ae3 GIT binary patch literal 6936 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 literal 0 HcmV?d00001 diff --git a/fixture/zfpy/codec.01/encoded.05.dat b/fixture/zfpy/codec.01/encoded.05.dat new file mode 100644 index 0000000000000000000000000000000000000000..095e4afe4819603aa1b28a92025bda2d72f3f1a5 GIT binary patch literal 6936 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 BzOVoQ literal 0 HcmV?d00001 diff --git a/fixture/zfpy/codec.01/encoded.06.dat b/fixture/zfpy/codec.01/encoded.06.dat new file mode 100644 index 0000000000000000000000000000000000000000..01e86c7956494666d3f707cc064d53d62822a3ae GIT binary patch literal 2568 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 literal 0 HcmV?d00001 diff --git a/fixture/zfpy/codec.02/config.json b/fixture/zfpy/codec.02/config.json new file mode 100644 index 00000000..ee798f71 --- /dev/null +++ b/fixture/zfpy/codec.02/config.json @@ -0,0 +1,10 @@ +{ + "compression_kwargs": { + "tolerance": -1 + }, + "id": "zfpy", + "mode": 4, + "precision": -1, + "rate": -1, + "tolerance": -1 +} \ No newline at end of file diff --git a/fixture/zfpy/codec.02/encoded.00.dat b/fixture/zfpy/codec.02/encoded.00.dat new file mode 100644 index 0000000000000000000000000000000000000000..64638bfec9a03447048ec969d6c133bf8dd07006 GIT binary patch literal 2368 zcmXxm&x_n-9LMn|X(HjVmP8V0v4t2Y451YDAmTwXB?JDrWZ)TTp#>{#PYPSni>GYZ z)tJ++Y;BJ*D1@9uFXBOFhh10}54+GkcpLV#Ecg$2(&_Vl_Oh1`FTT8a*zDJj*4!`N z6RV&4`lAc||GzKB>6@=*t`PU%@Ap0vk;v9x|L3E>UMei1F5jAc`gSQryu9_fo+me% zPu4!r^Kk#Vo@drw=JGVt^HyGBK6{L==IGhvD)Z_PJuYuBw;rPB+eTM+m?sD5amVdN z{y^(l@B}@yuIPE|oufAmw-@Rwt!L9C^l);Id3lB|du}hpm+01Wqled+w+nP>b9>?6 zM~~Lg)$}%VIY%F2bNlQQ^w}o5a_Qctr|79?ZXZ8JcjrdW=-zfq^fWcM2W#k)J#;6a zd+Z&cS1q^u>H&K31l@7z9*+*u?V8*D>>;|?`tjcnS8vA2=pMIcmHO^)k(TA~^0TMU zUTJO5`{SnK;8! z=&phj^vI(7;PKx3u0u};x~u6CdNiT?Q1ae;TN+)^U0EAO59vO%y!XBmMz86vqILAy zlPe;7>UUcZPHQmLL(X)GtKUZHjl^t8N)u*hrhf8}OufA?+e74oS z`kSQ+Yx-@u`YSe`1lO2{o35UB;s$fM_+HPa?hnjox0$OFy-O}Kujc4M_ziP$nYpuv zp2(ZbyHoVQddfV%tLILztM#}ZaeL)0weIIWxBJmm=F=^$$92c;Re7Lw-%;G|i#yD% z9dxhZ_NqNZcgEcA=U13V$LM{}?Ug)3R|U5h5#62H33^|d+tYLOFz5E7pu6Li=%d)& z-p$d&h}#Q??#^Tbz4W-8HUi{A_{sUP~ BJ0k!9 literal 0 HcmV?d00001 diff --git a/fixture/zfpy/codec.02/encoded.01.dat b/fixture/zfpy/codec.02/encoded.01.dat new file mode 100644 index 0000000000000000000000000000000000000000..09ccfa92e192b7fba169f3e16ea063cfacca7f0b GIT binary patch literal 5104 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 literal 0 HcmV?d00001 diff --git a/fixture/zfpy/codec.02/encoded.02.dat b/fixture/zfpy/codec.02/encoded.02.dat new file mode 100644 index 0000000000000000000000000000000000000000..bd7632f8f26be46d70fb326931a598eb82498034 GIT binary patch literal 6944 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 literal 0 HcmV?d00001 diff --git a/fixture/zfpy/codec.02/encoded.03.dat b/fixture/zfpy/codec.02/encoded.03.dat new file mode 100644 index 0000000000000000000000000000000000000000..55c7772328a1a1f75e4387dfe79e2c0ac54e5ae3 GIT binary patch literal 6936 zcmX9@bzD?U6s1e)2BjONK|nxy5h)4DrDG`p2@#}IK)Smdq`O1u?v!p8kdXd-@7sUh zZ|2@}?z!jA%(|J|qdJNq0KZ_yF#+$8W6W`z?$21klc)?=X@wvBN7EuUzwjrBFCwt5 zX|!>24fcHhL%AVUNyMBggMNZ$Mm0?UqZG$Z`J6u%qr6f^O{2fqA2*q6&VrI%!tw>P z20OFr3AI;63HPXEzT`NvlXLq(D$JcJor%+@4pCh-wE76&1?emH2)yUx@0S`wh{{Ol z^Q?>&0^T|thlw8))VlxN5#m-2lE4#Ay!Z%gs5Fplkzor=+x)npgh5T?vV%>3qHM$& z>Q61IBwJAy&{Vo9I;6(k)*DGKc`7drX!6#5EzVoUT<8TL*po++_Asy?jXTmLe$Z7y zu+~h^HlY(w1CR$mX@qlHl~!QpF=OmbyYAd>b0e&tDwj*N^#iz*%VpZSn1LhvItEEQVS6T}w~tPo*LzhV)w&tRpU>duO+%M~+PKjH0;qx9?j-HpnU8AJzEf?# z6pFHAUoV$d1!y)Dm38z-CUf3T+P2~(--N1;bTG+}=>k*+Y9%0-hxN#qxVbvB_29-W zi?dSC6~CwfD(7>pEn+}&U_ce7y_==>H1eR%;NB)K2Z;7EgAVf`&#${#0^bzc|2Rlo ziFl(!WlH%W7}moKQSxEdWySbC{`sS0PJ1FcWRe_9J^Z znphLu9+rV*BFtj&LXnCP_V5VYR(7}MDLal<6e|Fs!0v0}Q^yc2Fn3B1P^B9PotFu! zB|H5f<^a)_T_b2Zt9;*&kZ|6*+`8Ye zomprBqKjm4PbcWl^hfCKEPnfTL4-8{Ih)cU1z0wj&&59RaTATqv27vO+{`T_h(zB* ztGOO*pT^wrN1<0QDDhXE1F(>->Nz1l<2e!)fmD1kTR0zIoxe^xXHVOlHl18XEQb5} zod8=-H&WiIJ4sME<>%Yw(k*O}?fD;&k_xf;)FP@Q&?&#>BZc|+3d8}_N!#h)qfx86aJ<&Tv+HZHuPVH%cWDW!ic9Rj)G(&SGIKS}eb05@ z0NObD5}UoxxxA0Jd8U}mQ6u5=6%pguNlw z2PmP~K35z?e8Up#!}Oj|c@k;7(FxT+hjRzSz3yi8dY@rdb#ax)G4JU{xD6TJ}O}!iPuC^O+>IP1P|Q`7m4vQ_VQe!fN1@O zjR>=<2GWFYPp7qNg%h!Di0u-ndrw~eLq0{bJEW9V7>Av3r@Q%XJo?GYy%r)4)Ye#F z_zbD#mRw^aT|UDPbja8|q~wsG$VA+K2k5IS)w6+C6cI7AOJ?_hg|yn)QbDMTLmIT; zn-=n;RXG8OXn${L`2-U(fxNbr+r7Vydy6Y-GCAn-mNlX<3}QgOnz)nF?r&tw6Q9384=sMBvej|2uauPyY>7$O zwrO~SBv!FmqMsv32-%cXa>tF#0W#6SP9H7QOc}KCBvB3NxQ}qhnzQFed{6_MPQrA# zfmB`sFaPaX_nAX5ZU0rTU5rm6sIVFv*aS1Z_4eN!r^k+O^VZgSh@ptspo8VaJh?RA zN%HqyrCz~L#5^pRIR8;Kx1$Gm1Az{n6H$_o*<+r&-R^$eWPjO|yQwKfE|_LQI8o(C z`WZ=+a@+<7jmJ5f`@PkDk$8Y-Bh8vwVlwr|R)I8$wNuw3fhtAHmu)`*(aK1@s}?}~ zZRb?m#MR1z=BhB)+1T@a4Kj#ls-@%0tB>|rJl8H zBgC>JTyFvp1>pxyY2E0c)@dd?2hejok2Tw9B=7R6^xo1GKCVnlv9R)({pRlh{z$bHx#Sn zNd5hZ@)C4MCA`o0|M~B)Wv0AmqJ?+A=vUq}VIR|7!J;Wv)eVkFNl7~P$*k#9ydh-? zyZ6hpOU(06HvDywERhTSofSSA+R7j=d3xHhZbc_{z_;)tOu<#rU*rx3y3gFV?P|S| zZ#_D;YNmn$Q$YZ+)}*MEN#9u~;5VyoE94i?QhTSE;y!~`ghB#A=ygh$>442C^QJ0z zQ}hr-h|nm%0Q$d`U8gG?{&FErvOrH}aZwkmd}P$hsvf8S_M*3v?AV0E-wy+{&ya=N z>)r-sST!<#251h*HLzt>!rDr`iDC3?x^Z4pwIPF9 zg(d377@{sv9y|oKY|_V%y3yGJs+7c^X=A6Bi}%0Gf*#!D@zdV1hDEc};^|+Rbo#$B z0-s&1DgkhOwz{_D+zH?L>^E8ruDv+jcBJrb_i7Y$K*_pYm%D{oC%2GL!jK*hqFZ+U zWiGS4tJ4!M9Gzf`lRhr;3y0w83Ec;`z z$un(y1xtrFK$CXq>p&|ffkV2sg!VpFd*%?WJq!RhS!e4(SMzR+JZ8a$=X100lbv^0 z5QC_nU>9hg$w76FITo-9T8*s>&{!E<&(EOku3&i>O*OUKrH|hSTql#U^n+&IHfM{Lm&KDj$?`Dly<1_s6QFSklH51hBp+JXQ z%@N;?L8RdDu}`|v1Jvoow4Fj*xvuTtoL~q>*z!J5o6QvWYtFbtc;j#zp|X@j1cakV z{uVcCM$s|^3(?q)7g%_Hsze9xkUApJ0*+?`*@n+Vhw*S}+3IO<$AiOeybfpA!^ z;lJFdgcE3^Yx(oVV^e9o9AKL&bs)`h%~+|e_U=4z2h~4~)GhH5JM8JGi+Mm*Svlo- zNpX-FXS);w*2o`eYAzWiktZ}jDqRZm4cCKUmHniLwLrxgt2Az>K4s3w-hN){7+*8N@&5J!knF-kZPdEG zV6AwvR9UsRxU1qzLFL;o2aP}~gWC}f?tIm4rIiz{`e?eG!R`0=-~0+Hfp6V;AHo>( zf(H=oRwFU~${@EzMe6*;90410*QVaL4F%s@q;9*B`jS#D?kUIgmKSLF-Onrpk>Mg_ zW2tM>O;vYe_YTaDtcx>Hpdk^ae^~s8&P=JeFx1x@_sB?}<35*+0?$i$*<-O+AH;e1 zQ_iRL`cSJs9zWJ+M79Cow)Dxpeu@m58^N`Ow)2vt>?|b&aCJs%fh7I4cHTVJ|W>sM^2SR z0@0fA3ZLGqpr_8GK<*RR2AHzE&6lL2Yt_H&s?QoH47=$?jvs2ku{3`WaW-nXSBTH= z&evqNFw$)ole4iX%RF2$7>%|96vuuV~#;B2}s=$9GBpU$at#jf)_&4tKv6 zYD9X3oD76@TeeOffmBent!IDp`6hERRu5)rP(5KHaQfG_!N8}`@1hF1K4pyS3mCAWo>Mp9!{bX-xZk7}!4<#z3o&O;)Y&r=Ix@9vi%FR@kNjgZWPhWB}4p zbYwq}PyeL0{Sdr#WAQd{TB>`B$g5TbaK#r3JK-E@cMlJNH;S(M^^#;;70uxkZjEaX z+pG*hN6w%x?m(9Lwk4CrZ*>yX7>X-r>R#tV#G}m2rHzunt6QJ=gYDaIFA=}L*Ve9R zi)H_mIrQUx$pxr^YPyd2b!iooO0jj6E|nd!f(CYrIgu2oq6Xy%3&Dnf32q18lO`;h z03;f#VO18B|9hltnm>9ylo>7kY9DQwclbqnkwjQ}DnMqQNcQ|;^kl~lag=sNNE3B( z@yy++>0$!_d{X(shx0c0SMFmiOJDSm@UbG{9RJc17*1FX6Oto}<6A$^QN>U-tvBiG zNcDiy0Bl)?)1L5Rj%E6_4E~~$1IpH1-@yD5GZ$DpM*r)-x#5CE^fy@zJXV`O=I@G{ zC6-5l!2}~9qZy5B3dGr_C;7vxy8Fd?N4YXK<}n9IrBNB1_Wn@p#?roPiBQdZ%2S@* zgGSyO9J|Lkb-UXZ%g3riT8Y~jkHeYR8|C}*QJ^gnIne92mC*8ra!y7G-;&B2%%jYs zV2}c=$kV)`FVoSP@GGMfLPXiYS8sd@MLW#^Pnd68A#ZC%yp4Tq=JfalZQJP9>!+DG zM!@sz77};zpC(Hd0X(cHjbx9ndY)=^=SY--TQ<>77Fr9CUoy!yR+G{<+=kIQo2Vxg zpiH2tIDfpu^VArb_ysA^8^TZwy{=h>%@D_J)UH@uYnxM_0jbI;KV< z+Wx;^(&V_tU8FIzNV{nCepCL&zdL?rY!3(QCQ;1n2c>LnqOf7sYFlk<*>41mQ0_TZ z&lRvoT;4?9i@M%DS45edSM8q3`ILMTk_Ba@-Y>IcUf(N-NxHB(YiDPw@YKi_Q#Gl zL7oqphNZ2VpH2k2-3c9jUEX=~cHX-J%?u0|%}RuV`2E0_#im=zL6U#-D<4l?5+CT$ z0X)}(OZX#ydC4!u&*ppLXm(5k;H9PD@!6$wvvrUBZ+{g6ZBxCEEcX2f4gCw{UdBiu zm6v5S0Z+NIgPE=^;`N2tWb#ACr!T?wsj%&WVmUSlH1awd58nO|tb~1@AWL)u+NbK5 zuD-m5BlqGsY1d(ISO03H0QpS(!~ciR$%X34fwE@)_`S3wD+|OgjYSX*SzpkFXR5oR z5%D%Z!R`u1FqLbsyB7c0>QmN%YOsLW)4!#}`cxBqf|wA5G%I4*(Z9IN004Kxf$XJ* zlX*cIp4A6#DPf^@joW;*I|Y@3)obsSkw&~FwwZ@k(Z+pnsnW(c$eIt15r51>^?|UV z&3FzdTbu9NnRYH-wEkKLXj5q$9COz<=TgWoqCW&E?2iUSXN)Wmf+Kkd3zq5XF8;80 zZ=vJqr>Nk4QH9d*QyKtHkl(^K*uTK{>e*b8?-j>GKN_3qb@nx=@xsO%_k%F8EmBa$T&ejf?t z`IQ9EMn}q+X313O1AU|0C7=@}kd&-LY!nSmY^tW6X7RcwarL@2H|;roZ~@x>qL02_DK72#;&pb4AO@wD-X=~;h@oo=bIU*97~{(_Yt)N}FgB{= zegokYQzov1cKd5K2FxG0 zCazuTd3=eVJLyBg;VMzVS%+%;<3i#0n=|G)33RG=EJx8NV*t7U4-y@@m`n%njScOu zZ;~oyb?7t8PGto4gU8=iK;aZIat{{IzIO^!g-y}Gn%pXuvv zDf-1ZD-qKE&j`?P9_01IG0ly;5rqo(JcTY^ocZ?*LuA%~2Vn|<=fv-Q+&WphV+(^T znw6Z0-3dC93&C()Mzc9B&SNTXGe?5hLKh3PiU#A?=u<&kHRD7|` zifw!q3S#Ra<~@K<@t0sD$iGX75AC2*7)U%9jJNjq5^56$@GRe;8xM;fH>p=?#_LC8 zMwpK63U0vKC<4Yv=M9B+mKT@m7vmg7k4F@RSGa1W2nq23fS8W1`?!aLk4Ub~pZ+S4 zS?12jSRGRJ8UkBdeVF3oYxblJ$Z}$9_bG4{7Y<~}!a&deUtyXj-EpdVGLh9vn<OAjJc@TbleO5UUOsIR;=Nbq7%cDo} zf`<(>;b0W#y=X@)`PT-&B>zS=lU3T#7hSJr00daKBC_5~gDt+hEgc=QL~KWe7W-E- zw)$X~2bhg&p`2Wl-b7<^3`$WPDOjgg1s}T( zFXT#o?(Foho7GEGBKQrq_3Wruy8+$#Tdvg^+{0!e1fqWVH zx?Ar$9$50Toz6FiGyPJTdi&@l0K7P=JKdFk*zBZGa*`w0K;6C48;gDo{f+}XgpV<( z%%L(YRhT@T#?ndWM=)(u!X{dLI93I+^mTI6wI-DPu0^`d6L##FOl;m(Y004ueCm33 zQ=^F0Qx${~W+>JEP{q}qT-81*@N z(TXP7w}drxlXyWFvIuF~Nl{X%F~F8)oV^(Ak%cusryQ!-I!r>EF!@_)aHl37`Vz{6HqN7O6O>mhQYrcXyXcHzEy6mvn=4mvjgSNM8^TiA#5bKF@jlJ>R-} z*36nUvp0UW?$6$c!vTL$4ATN3q;WgPmPtK%GUmObQZYs@yl7SUTZ2|Jc=lwHHYoR0 z68aUL?o(P#Oufbhj67RCmx?L62rh`_+ZPgifmFu7&ZO!YLXl)tOxcJLH5+U6fp2?7 zS*>@Sf(3E0C`6D0u_T{~zMko^PL9wPc$wv16|H4+qAorZXw13D7z_pOO}!je6U>p`tSaNlVF zfT8bw@ttJ(;VP+D?Sy^PK6W&jf*N4A#|FgM-`q`^uPvLVWnA>j{!0rMN5o*ZuZSs7 z0rRfyc|j&Drvo_t(FT-vs_G0}dM~-N&rYm#-vjvY-m@ExBK9*JwuA*wO}I z7GEo^Qh%+D+P^TN;%sN*d0I9tGWBm|{l|?DvQc_A5VV=sf@AB?|Af`j?fi&nmhu8T zPF+9&EoDO3R*pHg;V15Rm2d8k%@Y^ph3>6mvwvT^MSHo01neA1hLzauk&ersHXJRLoXr;|7|?SraGV$qHq)| zy?b`^v~nwfX1e1G&APAQassybZ99(JJ(tYk?fuA&zm48GBmhc%)g{V%gErfx^gHF%e)10SO3mZ+VXquWk8$bK z2->Q$8o8K?n6sk1_SxdFZ;{MtpklM6~e?yiPZ9VY_gtE;^HRB)( z!-#tu5@qTW%kQ?@CDSk|4>m&IX^_e?lg{TS_}xF6oYs#YoY~u1S#7|!%feY!h*KNB z6vn>82!px?mLw1>KBMIXBKd*o_HNZMeW~@%W8|GyEA2i>L{ReIJ+OA-h6A$;PmDzD zJR^?+ZZ0s^d}cJvqirA(2JKJs&}lqOU!l-#B2Sj@*zClC_zWS$bTdRl6v z)wQH|nh_FLz26d6k_(m~u2jnsA=4^n?MP%mq)2 zNT4phKu$N$ZWL_S>xr4?IoZciR@w`m)yqmvvzl_M0b^0%IG{&O``eM8a$WOnRSIg5 z=*m%&vB(XR1lTe5#Sxybvt7`)XfwbrUQj8nUSTR}%!d7sYlztL$RY5MJr9jBL&vc? zRKzfc!b1UEjIdq~5Ba&=`CyB=sn6AxNYnLd;Gr{E)+qM1@X#d@#81knUmVx!5Un(r z-ZNw914&6^D>-OmH9=?;|8`}hu#TP}Ui5@j=H&={Q-bYv9w<6(xTCKY?cOrAoGIT_ zCD1W00Evz`E#`MSSyv9O)BnCMRKH7v&%KL+U3Q%0LOXeA;78WS~(?s%9yYnNO;x6;0X;X&ajIwL8^^8A$~QN@5LZvCusYu-k8Ps-amT+kccgnLIiy${){C~ zU4c00M11={X5F{fU2;QC{RA1k@`TNtD+uv2KoL^Sy9|DhtN$u8u4N|W42AQIME|6* zXr>HMz)P~;_lGrK<{#jA5Kn&I@=r958GYZ*3CuK9?9Oc3-%NC6Jk-}EJr<|*mZfPM zGk`6!?#=2*`YObx%X^X2kDsXtc(#8g2=poiJK4F!Xss;uB`F@!uLmC#PXJ^C|+X3)*>f~n1)873c@fFt< z&6np+foyyq9nuaFUZ@lQ%%A_N4T`8R?(YuP&5xf>hzn|L_~re%_8N}c;$V3ytzePc z$qk+A!MK7CLk$w&y~qQu+15aFID~jJ6?U2x%Nf#MleI5)*A|i3my&COmN~IrEl@`K z{M(4H?h6EKYoU6huwrhyN+6V>YI5Gu19sTGnlsTxETUqz;2g?honz`hrR9W{XJ_?8Cb6Tc1$zA^;V!Zrh9y?ZnQZI6phCg)y0mhTcv8HCw3#jzd3h%BxD| z^*svCm7MJfRM^;F-xR%|1U)~>^qrFvqYn#jTvJbtkXj1mL_&!`hZg`-j&g_#2&oPG z*ru4^8;V;doZ2$~CD!l@(Bv$6??_F%<0^d)vvT>R4@A%L(ND~-Jwc~MokI5WhFw_H zEW^Chn;`b4qZLbs2Ub8XrJEYo&-^ijHLHSie%5PB&qpS(v0xwnzi`N%cjCzjzeiXW z^&>39^)mDxjDfiefCPTklQhhRMZv94%$%DRzi5jcId=tR?5Q@I)q58F; z;tBt^;C!D3ldvYxJ^7IiL#WI0xaI91Dh6|8j+X`t{1$vcODRx|kThp8&*_rZBr+)u z=Q#GjkX=Sr2k$quc1oL@$Xf>5=stcia&>~~m+Y#48KQxFmHxC|^1@FaTUbj*B0~Ov zA5Wt z#;y@+f7$_oEgP*n5YB10wLPSH_40UMw#;}qoY(4t^$F{}Qc1E9Cs-oFM0>9^js}|- z#bLgc2Q~Yytr$+=m42k#Q6r)OR?j&6i%LS-U@w3{pW$r>KyM+w z#0U_#hn5C>t}_>A*^m!PUbwfj$Fqrb<+9=YpFwQzcfKUeqQXbnulLEbVRH@K=$Sfi zKn8V`d=$&WS!asdR<@A^D%2i#Sz{t~<>2@<=E^(UiHOxv5mT_^sJYa!5>CHjaxw&z zQtD9U92rCrDHFreda-Hh{{|;rH2uaOC>;c0k+2*pTO|y+sWYO~z%Y;f>oYVs91jjO zZmdKD`{c?Cq+}_2#xF8Wn3PM8C<8_aPKf1wOFP7oE$uMnk1g8Pve)Meof zuLx$Ymm?W!_;ywB(&d943@fWP5UkD;L%g{>pPnAX5RLpMd9u+b-^)4#qZZ&jUhoQd#uX-sgyKtlj6z)S)orakRv-frg^A#trSSXVq`77Ih?F^hI)xwqB zO@m`VT&Y{>?ei*ewz~Zc`v};q%Pr8dPWC=aiDv4&V@$3LJ(3eTTg%^d05><%>E-aOdx!M43=>EUy+2)=c*U?9h#nx5=7T(fLjmdO^<2VK1#W^Ee zUNcl%6(Jo9iJlm1n7R6AFSwl%3~=C|;^i(L>l8eFxX$|G=6MHg60!pbNDr2$^}PvK zal^A%)oy%EZHXuh4OIyP-SSZ4j{{30u_L2A22RRrjS&@RF>xo~ve*1q}M=hZ#BT31tHj$O2?ABANV8$e~&VSYgw1IdqA!NgjfjkMx= zGH8Y48*C{f5%3|$B|T&Dp>maF!9OpHm`QjgM#h?bTj0PM!tboin2ubB;Q(sZZNnyiNI^o|1?@LIOj1gY zKnGi3lb{aB^YTeOnn-i*i}9j+2{ zd`Q?|qd=%(}Ih;m-<_Nu3kz%%pNM+FT!$>0DEZx?nF-nWl9$ijc&yB8?Zla6z-yB@A`{{eL|&v|^sLMQnv*M?x~eeX0MM?xr4kBNO{I5vogRdM#>n<9kU7 zJs>HDHRK(5xm1`+0c$E6<_^Qov?YCmWL4V0w^B3{`USdbIvd#1+O<$y{$8&8<002# zA!rZ9$^Op=rtF(l#A`ee5sY%^`tU0WP%;3Va+{q2qdH_$lwU36ID01INW%ktS?CYg z%Cl3>mWU=&OAOd~r$5@N?2S`q#mGv`H2}-svx>mdlI>|YV{Ve0>1IGg!=6&#%gP4V zXCoV0l%Z^C&Q~FCKc&zAlvdhdwzz|UQptJ~_wIqaP=wiJ(yGtPXi!gyNRF3a{(t7A zG4f*M7)6%}IS6yh6Iqy*gl>(V31F1%*G9-Vocq%H9~s>Vr90JMPduGN1xxY{N`}fIz3@+ASZZboXetkUl|yv0t!AEAu*UXq# z>s7pACmh&}4~Y;Q#!}8H8Y)*n?4D}a5(o{n!r{wSD(9Go5c7<~NWAb!Z3KsZLtbF_ z!HL{#rU?NJZkn`E8D{gLi6|XxNhOK`b8*FC{Jf%5DV621<9(K*M8Wb_aJkuS)5%%) zO5bZ1GaS()uTmXXAebn%md$c%h&lWQLsx@ zp-M#d`q;GvOGz#teG@>-tjmnZ_jsi7UsrB-HEl_HF_Lvl?&PZgUN?*aMki%)7^miB zxs28ib!+x1toFt!41iop8$`o!GLzAjx8^_KI+v%G9XrJQGBpOfbvsF!-AG)veMd=c zj-ipopJ7`ErljT!R=m7qva-+Tg_pK+H1b#9#z=Et*_;OcdeBp9<5h3zzqWH-<1&pF z%Y{)o+5B6xMnS1N8{yBQs9@A-GK{OMU|pa7c1(-JL!<qcSXqO;kk*^YApSAE19EdM>Bqw!M#MrB40`@ijA`@`LrP2XLNNkFsX`>7 zutR!}wFe+RAmCz7jcOv_VIq$~pu3dTQ(0ss`lt!sH{OSFq+UgIy5n>0oQW#H%j|s? zAr&FN0ix8IV!E%%*sb2Jblqir(_6e&|C^<3n-YBb{Gt$|r7crsc*dp1C|LDd@K@Tj z=JYEfpyExY`W9Q)Z*B|zDyo+s5K0W!zMgkz(eUp9+!Rd@`A?9Hp-&W3>X4W|v+&BC z>wFTn8NdL+kf+Skq1_8XD3>Ypd4+n!a7Np%7kJMKc`z*c6Dw1H(mJZQ46lSB>`T*w zSp#lGyKhg0WU(h)1ZqZGzwb@rHkGn52CHs^cOr}a1g;n_>z9Tp2*xGT#i<0IwMwNE zRIK33%>$1H&USrxH_8*WPC5^gNiF=|=W$S8upXMnPnNXrT%V{)WokPQcYaxZ``Qb( zqj?_m`b&}zqSRcU1AmbUzj8Tc2e&8q0E6^Bt#3&$GSH%d4PKRwoK&WvGxCXx3>-a| zQZxTgtl&!6{NbeL%Vmg#Y)?u>Sy+B+nfH literal 0 HcmV?d00001 diff --git a/fixture/zfpy/codec.02/encoded.05.dat b/fixture/zfpy/codec.02/encoded.05.dat new file mode 100644 index 0000000000000000000000000000000000000000..095e4afe4819603aa1b28a92025bda2d72f3f1a5 GIT binary patch literal 6936 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 BzOVoQ literal 0 HcmV?d00001 diff --git a/fixture/zfpy/codec.02/encoded.06.dat b/fixture/zfpy/codec.02/encoded.06.dat new file mode 100644 index 0000000000000000000000000000000000000000..01e86c7956494666d3f707cc064d53d62822a3ae GIT binary patch literal 2568 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 literal 0 HcmV?d00001 diff --git a/fixture/zfpy/codec.03/config.json b/fixture/zfpy/codec.03/config.json new file mode 100644 index 00000000..dc0bb843 --- /dev/null +++ b/fixture/zfpy/codec.03/config.json @@ -0,0 +1,10 @@ +{ + "compression_kwargs": { + "precision": -1 + }, + "id": "zfpy", + "mode": 3, + "precision": -1, + "rate": -1, + "tolerance": -1 +} \ No newline at end of file diff --git a/fixture/zfpy/codec.03/encoded.00.dat b/fixture/zfpy/codec.03/encoded.00.dat new file mode 100644 index 0000000000000000000000000000000000000000..64638bfec9a03447048ec969d6c133bf8dd07006 GIT binary patch literal 2368 zcmXxm&x_n-9LMn|X(HjVmP8V0v4t2Y451YDAmTwXB?JDrWZ)TTp#>{#PYPSni>GYZ z)tJ++Y;BJ*D1@9uFXBOFhh10}54+GkcpLV#Ecg$2(&_Vl_Oh1`FTT8a*zDJj*4!`N z6RV&4`lAc||GzKB>6@=*t`PU%@Ap0vk;v9x|L3E>UMei1F5jAc`gSQryu9_fo+me% zPu4!r^Kk#Vo@drw=JGVt^HyGBK6{L==IGhvD)Z_PJuYuBw;rPB+eTM+m?sD5amVdN z{y^(l@B}@yuIPE|oufAmw-@Rwt!L9C^l);Id3lB|du}hpm+01Wqled+w+nP>b9>?6 zM~~Lg)$}%VIY%F2bNlQQ^w}o5a_Qctr|79?ZXZ8JcjrdW=-zfq^fWcM2W#k)J#;6a zd+Z&cS1q^u>H&K31l@7z9*+*u?V8*D>>;|?`tjcnS8vA2=pMIcmHO^)k(TA~^0TMU zUTJO5`{SnK;8! z=&phj^vI(7;PKx3u0u};x~u6CdNiT?Q1ae;TN+)^U0EAO59vO%y!XBmMz86vqILAy zlPe;7>UUcZPHQmLL(X)GtKUZHjl^t8N)u*hrhf8}OufA?+e74oS z`kSQ+Yx-@u`YSe`1lO2{o35UB;s$fM_+HPa?hnjox0$OFy-O}Kujc4M_ziP$nYpuv zp2(ZbyHoVQddfV%tLILztM#}ZaeL)0weIIWxBJmm=F=^$$92c;Re7Lw-%;G|i#yD% z9dxhZ_NqNZcgEcA=U13V$LM{}?Ug)3R|U5h5#62H33^|d+tYLOFz5E7pu6Li=%d)& z-p$d&h}#Q??#^Tbz4W-8HUi{A_{sUP~ BJ0k!9 literal 0 HcmV?d00001 diff --git a/fixture/zfpy/codec.03/encoded.01.dat b/fixture/zfpy/codec.03/encoded.01.dat new file mode 100644 index 0000000000000000000000000000000000000000..09ccfa92e192b7fba169f3e16ea063cfacca7f0b GIT binary patch literal 5104 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 literal 0 HcmV?d00001 diff --git a/fixture/zfpy/codec.03/encoded.02.dat b/fixture/zfpy/codec.03/encoded.02.dat new file mode 100644 index 0000000000000000000000000000000000000000..bd7632f8f26be46d70fb326931a598eb82498034 GIT binary patch literal 6944 zcmX9?Wmr{R6Q$u&k`mJ0C5?c@r8}g%1Vlhe5GhG%5TpczOGtNvq)2ynT=Ig_CGfrH zeCO|eX3xx;HS5f5KYKTH4=E(zi)0=b4x-eF(@y<}-$a5Qj)tPbPtsDlBsZgJT}Jf! z*-JS7vWaFJ+Wq)ECS$FpZ`Bkpp$ zKbIfDP#O;X`EMmY{9_t)Ol5QAWAn>aoinq3e!BIzbS{1Us}~CFt$mUWeNzGN{>fK^VvpQvSS{M7nx%j z*-$>PY#VS_V%s@fN~4j$P#3QSm9Oh|GgvZ|F$n>q9G>=EUqQ0w5Nh1=(+ME`RirF& zge+VNVtF~@h`ETn=pOe1v55tVtLLZR_0e1X3SbG{Ey6{0zu`UiUi!W$hR&-nErrN- z&H=7eC-z&-hgIqv2IB61`oivhI%m(=L9r#4`d^e8ENmZbrF5uD99dWh5eybL$jEm3 zS!JHwKz3CYa$Zg{r~7mE4&vNz-Oi+)2^c)(JHGyB=QKY$;J-FR#Ddgq+7U_5p^0Y- zy>asvQw9As_?f3H?fpI=+HsVC;NRAF%jI3X_5kcMgbP%6uVyhKd`W#eXN77f9hQwB zIJuyl!F9-bN-PD^a0nHiWVbuCfJ+z^+9U(Hl?Q5o(iM<+-S+BlW9cV%!j!CA{XnyE z-nA?saqcIA+464_EwJ8|e-S@D-@NOAGaPH2_X1~lWD{@S`|yvMnJLoeXQO1N+%rJT zg|!`lEAzIYaeE(@C^c_&k8pKqN}%wgQYMoEpbdJi3fo#LlLgv!ysZKnQJE`RO7-L2 z9}Q4kP>Yuv^9%6|v@z@l5yz^IP{iB_KP4W_3&4^CE-%|oBl^+XIqbrBmY}n)@fX6# zyuukIm@QVqpcJQxF8TQrnuex*7`6;Z*mjt(Q6)0E{h))Z5K zD@hA985PKe3*P=2m9z@+DK*Z_4Rn3r1h^p7b_n^pZ(bW^u6U2*SCv~X%!bmGR22wf zQv6uj#kikg7{!dZEc%Jt+t|34)gayuB*&kx|15MW_Hu7hm3ab(-wQE#Wp{Ml2bdZ2 zc)k_QvJ5ZlR^51u)vt(;TwEslS&bYxb27{3MGsB*O=)oV4~2cqnU)}GhcbBv3ik0L z^v$W-S`apKg<}Z*$u4nWR{ZmLLO^Zw5d9diEQw?O$ z)z;{mRJ7>j@upvgg7~SOKM7xlUWx?}Np@H5er4q9>Eh+r3-31pSjy}iX5HxD9Dp-N z4~ey!5d3@$G!RSFy2!R!Ro z=Y~oQyx7;MmA}3=^MlnS(y4YGbAo-W;Jdz6|0Hq>yFkqR4PTXfJJ-oC3~8|c(NfWb zwdDe=u(uC&yAl}#9t;OA)qEyFRM<>LTtwj}navyfrxJPtt4bjlYK8lt+!VZ!yO@n@ znza_bUrNkQNuDJW8|5xU?f^3Hxg_(+VHhx+KnOc8ACuSp&0^oAwqDf-SVW-1DWVAD zB{;5aQDMkW2s_Oe8aqmV0JAe0;=1*bPqY-vXz+ti-SFiJc}wn)Xn?46%knDbV2)Q) z68xO~>fI)V6p*0wTi^&RknPW+6m-tT-+wWg=?v=J^Y>b5H0EXX0C!f8sT*IqFGQ%- zo~6IX&#+OB7^#dJI_CgtK3JOcU=hW}khc1Kw48wSLZwRZUH)F#R zGlX+L{Buv42!VmHqTK~jn2I>S+Cj-4uSo7;@sE~PayNcQHa&j3_fpoaLHzJBYH9AcWkL4bnAS;-4qUEl6u_s$k3Gc z3fY09N^n%j&{N59fSScST$?$)L$SRZ0+yrG?b<)6?ca)_6IcQ5IwSrX?uK+*BW-79 zW?(1wUg$LHP@u+n9xOuZz5-+D?iRHaM^--iq4>|Jm*sOpFSUVCWE};4Gq%}q%RdFM zhN-A((R?_^qJGN^>eQFMmOo9-`HgvtSd*CCs5mXd1|3v|;rgH+!k8u)BCJVye(?lLvzbna z)B;g5*I#q31|6UEWt;Z8|CwyN=#3$kS1m9ENR;N0X4xW6x}}tr+rC=b0blVatj2ji z43;NHVy8~|dvg)#ZO-Qk>7GwbHv^H+2v&i!Fx%JPJ^TDD-lchX<4CEnbvm_e{xEn4 zPDO48lEI<~N)|a=?FH1h%E?X>og_MbLD+0xHl_#da z8NwBAMkSOXK4>VXHJa&!5?8nM*&0a~xYB9<4U5G{iC6sEhr7I)ucj7}{Hgb5aH?Etc;jyzLe7kCkWjnDitD|LX8w4HZzX4PL2I16`q zj)p}5|?;qUkRe-R_B!tfr=}dJk~r)B`EwU67}a*srARa$^9^&PcMa?*Uw%HP`F6njMDFgmv`quaAEzaG( zv$rBAdN-^48gxzzXA{Jj06c>08tQrEkQ`Ft#72{+AN}dJ7bw_2D*3+zcqfe6c-tVI zVAN$UOS>-xam>Bs^3VbKU|X1~IoXlXBKi9J_c?Pd)y_a`%x%$DkVoo-`|$3@u|6BD zQkI-_nbU~bzl!fTv;aHO?zufnNo<{i-q^Wv!c(S(3O*D_84nmH{Y5G2wq2-(_0cy! za-XfLarcH>#=9;y;Af$P=P5YnvN$HmgBCM-;QJXJNtLKPG2s7HQ9OV3kfN@TDbg&v zG*&~F6<;`r7ufWlJdD@5{Fq*BGFN6DbwWGD851=R3XUs^)-nQQ*wJA9K}xY=+d?Y` z{Sp^j>@`&$Rv29nIOr!_V+0yOT@AmF%d+u84}WksX*2Iv=Yurbh}l8qhjQRg20P`x zM2az6)4_U0iVtc4v-n`v4pZ60PmF1O+$Ip*Wp46X*>fSgb| zj4ZQ3onRg`v${IYp-4_+dop-1Iq)F39bf*IUNdorEw~o=~fKk2jXYNOcw&dwT6}I zi67;FM#vCm7P*r?$QyjsR4q>T!NyO#r=}#03=ddO^#)1#BYY%ZAsRVC<*8$y__tK$ zF4v}L17W5lP-N^Eh=t2{*AL?DxM!gy2iX3al(YpXh7o*MdZE52&X-q6uQzp?lXjZP zULtV_40i-sv{)g(|2-#6w!@d6X8)x=tZK}|{hb_`s05Ez&0=h@;rpLy)6eREgk-xX z5vRv}Dgyanh!Z|uB)vCN`~AYW?d>}~LO8NsFb_K@4;bGFDjowh>0#p8>s`bQD-P#g zqyZIRlzS++ir57C;=+&*CG>nXZSpsv1N|CceH;gO4WxOT{^eeb4yOrzBrik63RTS8 zCIM>1O-4x=h3YyUAY~JX#@v(1k*AQ>;UcyLoS|<~dXU^JW$>&=I7*_;pH;ZR5Af~4 zy&QXB;k=cs;!8kG;FR0(*r);W8vgxA5I98BY4O1Ke9HdC=hRUg;Va8@@}2uQvrhm+ zbfIPyq5LR0n;r~3%YFw&sNf`!qvWGl-w6D&zqe6x51ql3*sP0EM`E$@OO}RYXdhR> z!Ge4(d^_lwT5f55N=WY%PU*=NmU?vA4gd!$!6Ibk+assY}`jxQY+jYz@^aY zn=!Em(T#i%K?Zs5s)rGN+nJ*M1JJG0Rr*a~)v`M$SDmPH*yFke81MPv+<^?>HauV{ znru&CREo0ozL=GoInr~2oAw8b{iVCzMSbRlDc@MC>c1ge2>?$H^cm` zqYk99J$Katw+^mdXX1x_!!3b370?wh4OB#geuc;tu5nAJ?+~7xD+ix}+qay@mmCFD zjkd=h_FW=lwTBccG^0LU5uiF4S`;1mOzSC{YjOHksbEiw<-@v|%BjH`>~6<6Js4$I z;3H-aUgmiUDAKZ0KpTL6QyOk+Z1u;$%oxWlzAs;!+;NT`@fH}!c)(Wrix}t&@vjUa_n7;&4P2&OC{OgD{EGh z+@7o%jW-lxy+~9V0z2gZF{7SVRFt=1tbS3xD17Wyf2{oUk|z*v0+=NaB==TM)`(9L zpPSAJKJ>}+;K!?&zsOhw>$7YbDSE6^2O_CygUV)5Be=L@l6@hU>~s2X6Ah<93>z4 z>=007kf&ZWu>v8DtOms)W@KHL6$>^Nz0}@l<8U{#(FzWJ1ftt3oUG79)BH&T ztVAND-QKuS%9oY^Ri+x9?XFBx9!Z}(Qx&T!F?j`qLNJ+q-0!7!$x1Ab zWx2?&Hcwj@P(TbmNpjQr)OdWoa~pxrqug8Jnp(UG#vf{Q2Dc781D4g{^CCJ(0NN0D z^HWdw5U~gvk-jpJc_EpJC~YwNLUjPk6a=wyb%xa58v3>noTwl;Zc+;EpZ03!!qd0FZ!bL3jLV}O~)(##sC2Zq%{=Yfn$yMu;q zF+>qA;^yzcSFephfvxKDL9wWM&d&o(LYB%4bbMAj_~1(|U7h`6JRzml>w=2Fq+;KA zftBiu%AqBo2u|}4p9(e~gJjK9cumB2;$^M=h%<-bG=P#bUdCtDIlOwAc)6eByH1ih zrkZ~@+hYxaDRjuSJQ!9w?X)vO+t=&H$GWM-A(+typu&&bk33U5}Jxd zr%9!A4KSM0o~wcIrvKyKp5&>vau9WPj-8eyz8mx1m;x?q@wDx1P#@&7 z0Gu;~yR4=UDxy$7@6Kb6^#+|jgjs%9_xT8xZVe zu$5sPrm3Fa)ZE8^BsUwB1kx1s41F!MLBrn*2iW=yme5M-eQywPlet^TH9>>|mRTBD)X;?WI~>IcNi53JG~01`G^rFyp4b5$FgT`X%x!?Ob|bFU7H4ca96pit|Slj z41QO*PnACViZxebV1S|Q#5&NoLU@Q zRG%UrQeBb#BB3d5m;*3Nv940;ZT=__ll?jcCcf0sB!;sbYqysV5GA=&FON*+Ffnzf uPqDbYH@7R_nLUq=vKH(RL&i3--a$-mYOb>TDuD=+g@FK>LRM5Hr2hey$KmS$ literal 0 HcmV?d00001 diff --git a/fixture/zfpy/codec.03/encoded.03.dat b/fixture/zfpy/codec.03/encoded.03.dat new file mode 100644 index 0000000000000000000000000000000000000000..55c7772328a1a1f75e4387dfe79e2c0ac54e5ae3 GIT binary patch literal 6936 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 literal 0 HcmV?d00001 diff --git a/fixture/zfpy/codec.03/encoded.05.dat b/fixture/zfpy/codec.03/encoded.05.dat new file mode 100644 index 0000000000000000000000000000000000000000..095e4afe4819603aa1b28a92025bda2d72f3f1a5 GIT binary patch literal 6936 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 BzOVoQ literal 0 HcmV?d00001 diff --git a/fixture/zfpy/codec.03/encoded.06.dat b/fixture/zfpy/codec.03/encoded.06.dat new file mode 100644 index 0000000000000000000000000000000000000000..01e86c7956494666d3f707cc064d53d62822a3ae GIT binary patch literal 2568 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 literal 0 HcmV?d00001 diff --git a/numcodecs/zfpy.py b/numcodecs/zfpy.py index 913c4b04..66ffa83c 100644 --- a/numcodecs/zfpy.py +++ b/numcodecs/zfpy.py @@ -46,8 +46,8 @@ def __init__(self, mode=_zfpy.mode_fixed_accuracy, tolerance=-1, "precision" : precision } else: - raise ValueError('Wrong mode, please set mode 2 - rate, % \ - 3 - precision, 4 - tolerance') + pass + self.tolerance = tolerance self.rate = rate self.precision = precision @@ -86,5 +86,5 @@ def __repr__(self): elif self.mode == _zfpy.mode_fixed_precision: r = '%s(mode=%r, precision=%s)' % (type(self).__name__, self.mode, self.precision) else: - r="Wrong mode" + pass return r From 7e1fc71992ca763f5ff1b86532bb13602e1f7374 Mon Sep 17 00:00:00 2001 From: halehawk Date: Mon, 20 Apr 2020 21:47:47 -0600 Subject: [PATCH 35/69] change for coverage --- numcodecs/tests/test_zfpy.py | 16 ++++++---------- numcodecs/zfpy.py | 22 +++++++++++----------- 2 files changed, 17 insertions(+), 21 deletions(-) diff --git a/numcodecs/tests/test_zfpy.py b/numcodecs/tests/test_zfpy.py index 83788cd4..6ab37c38 100644 --- a/numcodecs/tests/test_zfpy.py +++ b/numcodecs/tests/test_zfpy.py @@ -19,11 +19,10 @@ codecs = [ - #ZFPY(), - #ZFPY(mode=_zfpy.mode_fixed_accuracy, tolerance=-1), - #ZFPY(mode=_zfpy.mode_fixed_precision, precision=-1), ZFPY(mode=_zfpy.mode_fixed_rate, rate=-1), - #ZFPY(mode='c'), + ZFPY(), + ZFPY(mode=_zfpy.mode_fixed_accuracy, tolerance=-1), + ZFPY(mode=_zfpy.mode_fixed_precision, precision=-1), ] @@ -38,7 +37,7 @@ np.random.normal(loc=1000, scale=1, size=(2, 5, 10, 10)), np.asfortranarray(np.random.normal(loc=1000, scale=1, size=(5, 10, 20))), np.random.randint(-2**31, -2**31 + 20, size=1000, dtype='i4').reshape(100,10), - #np.random.randint(-2**63, -2**63 + 20, size=1000, dtype='i8').reshape(10,10,10), + np.random.randint(-2**63, -2**63 + 20, size=1000, dtype='i8').reshape(10,10,10), ] @@ -52,7 +51,6 @@ def test_encode_decode(): check_encode_decode_array(arr, code) - def test_config(): for codec in codecs: check_config(codec) @@ -66,13 +64,11 @@ def test_repr(): def test_backwards_compatibility(): for i, code in enumerate(codecs): - if code.mode == _zfpy.mode_fixed_rate : + if code.mode == _zfpy.mode_fixed_rate: codec = [code] check_backwards_compatibility(ZFPY.codec_id, arrays, codec) else: - codec = codecs - array = arrays[:len(arrays)-2] - check_backwards_compatibility(ZFPY.codec_id, array, codec) + check_backwards_compatibility(ZFPY.codec_id, arrays[:len(arrays)-2], codecs) def test_err_decode_object_buffer(): diff --git a/numcodecs/zfpy.py b/numcodecs/zfpy.py index 66ffa83c..3bac1528 100644 --- a/numcodecs/zfpy.py +++ b/numcodecs/zfpy.py @@ -30,23 +30,23 @@ class ZFPY(Codec): codec_id = 'zfpy' - def __init__(self, mode=_zfpy.mode_fixed_accuracy, tolerance=-1, + def __init__(self, mode=_zfpy.mode_fixed_accuracy, tolerance=-1, rate=-1, precision=-1, compression_kwargs=None): self.mode = mode if mode == _zfpy.mode_fixed_accuracy: - self.compression_kwargs = { - "tolerance" : tolerance - } + self.compression_kwargs = { + "tolerance" : tolerance + } elif mode == _zfpy.mode_fixed_rate: - self.compression_kwargs = { - "rate" : rate - } + self.compression_kwargs = { + "rate" : rate + } elif mode == _zfpy.mode_fixed_precision: - self.compression_kwargs = { - "precision" : precision - } + self.compression_kwargs = { + "precision" : precision + } else: - pass + pass self.tolerance = tolerance self.rate = rate From 0ba8be0e152348f42860088b59c1fae7f3699744 Mon Sep 17 00:00:00 2001 From: halehawk Date: Mon, 20 Apr 2020 21:56:07 -0600 Subject: [PATCH 36/69] change for PEP 8 --- numcodecs/tests/test_zfpy.py | 4 ++-- numcodecs/zfpy.py | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/numcodecs/tests/test_zfpy.py b/numcodecs/tests/test_zfpy.py index 6ab37c38..de87172c 100644 --- a/numcodecs/tests/test_zfpy.py +++ b/numcodecs/tests/test_zfpy.py @@ -36,8 +36,8 @@ np.random.normal(loc=1000, scale=1, size=(10, 10, 10)), np.random.normal(loc=1000, scale=1, size=(2, 5, 10, 10)), np.asfortranarray(np.random.normal(loc=1000, scale=1, size=(5, 10, 20))), - np.random.randint(-2**31, -2**31 + 20, size=1000, dtype='i4').reshape(100,10), - np.random.randint(-2**63, -2**63 + 20, size=1000, dtype='i8').reshape(10,10,10), + np.random.randint(-2**31, -2**31 + 20, size=1000, dtype='i4').reshape(100, 10), + np.random.randint(-2**63, -2**63 + 20, size=1000, dtype='i8').reshape(10, 10, 10), ] diff --git a/numcodecs/zfpy.py b/numcodecs/zfpy.py index 3bac1528..7dc92bce 100644 --- a/numcodecs/zfpy.py +++ b/numcodecs/zfpy.py @@ -35,15 +35,15 @@ def __init__(self, mode=_zfpy.mode_fixed_accuracy, tolerance=-1, self.mode = mode if mode == _zfpy.mode_fixed_accuracy: self.compression_kwargs = { - "tolerance" : tolerance + "tolerance": tolerance } elif mode == _zfpy.mode_fixed_rate: self.compression_kwargs = { - "rate" : rate + "rate": rate } elif mode == _zfpy.mode_fixed_precision: self.compression_kwargs = { - "precision" : precision + "precision": precision } else: pass From 5c4029ca09219d1e65c06259700a9c8002235617 Mon Sep 17 00:00:00 2001 From: halehawk Date: Thu, 23 Apr 2020 20:56:50 -0600 Subject: [PATCH 37/69] add ensure_contiguous_ndarray(buf) --- numcodecs/zfpy.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/numcodecs/zfpy.py b/numcodecs/zfpy.py index 7dc92bce..e0c3c528 100644 --- a/numcodecs/zfpy.py +++ b/numcodecs/zfpy.py @@ -7,8 +7,10 @@ if _zfpy: + from .abc import Codec from .compat import ndarray_copy, ensure_contiguous_ndarray, ensure_bytes + from .compat_ext import Buffer # noinspection PyShadowingBuiltins class ZFPY(Codec): @@ -65,7 +67,7 @@ def encode(self, buf): def decode(self, buf, out=None): # normalise inputs - buf = ensure_bytes(buf) + buf = ensure_contiguous_ndarray(buf) if out is not None: out = ensure_contiguous_ndarray(out) From baa2821a306fd52825cab4f4b71492233cbaac74 Mon Sep 17 00:00:00 2001 From: halehawk Date: Fri, 24 Apr 2020 10:48:48 -0600 Subject: [PATCH 38/69] skip tests at py38 and osx --- numcodecs/tests/test_zfpy.py | 5 ++++- numcodecs/zfpy.py | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/numcodecs/tests/test_zfpy.py b/numcodecs/tests/test_zfpy.py index de87172c..b7fb10d4 100644 --- a/numcodecs/tests/test_zfpy.py +++ b/numcodecs/tests/test_zfpy.py @@ -1,5 +1,7 @@ import itertools import unittest +import sys +import pytest import numpy as np @@ -17,6 +19,8 @@ check_err_decode_object_buffer, check_err_encode_object_buffer) +if sys.platform.startswith("osx") or sys.version_info >= (3, 8): + pytest.skip("skipping osx-only tests", allow_module_level=True) codecs = [ ZFPY(mode=_zfpy.mode_fixed_rate, rate=-1), @@ -40,7 +44,6 @@ np.random.randint(-2**63, -2**63 + 20, size=1000, dtype='i8').reshape(10, 10, 10), ] - def test_encode_decode(): for arr in arrays: if arr.dtype == np.int32 or arr.dtype == np.int64: diff --git a/numcodecs/zfpy.py b/numcodecs/zfpy.py index e0c3c528..a5463d26 100644 --- a/numcodecs/zfpy.py +++ b/numcodecs/zfpy.py @@ -67,7 +67,7 @@ def encode(self, buf): def decode(self, buf, out=None): # normalise inputs - buf = ensure_contiguous_ndarray(buf) + buf = ensure_bytes(buf) if out is not None: out = ensure_contiguous_ndarray(out) From 548bad8831049eca218489e57fd5b8a55e20376f Mon Sep 17 00:00:00 2001 From: halehawk Date: Fri, 24 Apr 2020 11:06:30 -0600 Subject: [PATCH 39/69] fixed format issue --- numcodecs/tests/test_zfpy.py | 7 +++++-- numcodecs/zfpy.py | 2 -- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/numcodecs/tests/test_zfpy.py b/numcodecs/tests/test_zfpy.py index b7fb10d4..6ae10803 100644 --- a/numcodecs/tests/test_zfpy.py +++ b/numcodecs/tests/test_zfpy.py @@ -1,10 +1,10 @@ import itertools import unittest import sys -import pytest import numpy as np +import pytest try: @@ -19,9 +19,11 @@ check_err_decode_object_buffer, check_err_encode_object_buffer) -if sys.platform.startswith("osx") or sys.version_info >= (3, 8): + +if not sys.platform.startswith("darwin") or sys.version_info <= (3, 7): pytest.skip("skipping osx-only tests", allow_module_level=True) + codecs = [ ZFPY(mode=_zfpy.mode_fixed_rate, rate=-1), ZFPY(), @@ -44,6 +46,7 @@ np.random.randint(-2**63, -2**63 + 20, size=1000, dtype='i8').reshape(10, 10, 10), ] + def test_encode_decode(): for arr in arrays: if arr.dtype == np.int32 or arr.dtype == np.int64: diff --git a/numcodecs/zfpy.py b/numcodecs/zfpy.py index a5463d26..7dc92bce 100644 --- a/numcodecs/zfpy.py +++ b/numcodecs/zfpy.py @@ -7,10 +7,8 @@ if _zfpy: - from .abc import Codec from .compat import ndarray_copy, ensure_contiguous_ndarray, ensure_bytes - from .compat_ext import Buffer # noinspection PyShadowingBuiltins class ZFPY(Codec): From 995dab5c252f68bc617b7d71c895c758d7e0920b Mon Sep 17 00:00:00 2001 From: halehawk Date: Fri, 24 Apr 2020 11:35:37 -0600 Subject: [PATCH 40/69] skip tests at py38 --- numcodecs/tests/test_zfpy.py | 6 ++---- numcodecs/zfpy.py | 2 +- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/numcodecs/tests/test_zfpy.py b/numcodecs/tests/test_zfpy.py index 6ae10803..0ad78d6a 100644 --- a/numcodecs/tests/test_zfpy.py +++ b/numcodecs/tests/test_zfpy.py @@ -1,4 +1,3 @@ -import itertools import unittest import sys @@ -19,9 +18,8 @@ check_err_decode_object_buffer, check_err_encode_object_buffer) - -if not sys.platform.startswith("darwin") or sys.version_info <= (3, 7): - pytest.skip("skipping osx-only tests", allow_module_level=True) +@pytest.mark.skipif(sys.version_info >= (3, 8), + reason="requires python3.7 and lower") codecs = [ diff --git a/numcodecs/zfpy.py b/numcodecs/zfpy.py index 7dc92bce..e79bd8aa 100644 --- a/numcodecs/zfpy.py +++ b/numcodecs/zfpy.py @@ -5,7 +5,7 @@ pass -if _zfpy: +if _zfpy and sys.version_info < (3, 8): from .abc import Codec from .compat import ndarray_copy, ensure_contiguous_ndarray, ensure_bytes From b99da106bc2ec813cb10caabb4b3e1943ea4fa28 Mon Sep 17 00:00:00 2001 From: halehawk Date: Fri, 24 Apr 2020 12:48:04 -0600 Subject: [PATCH 41/69] remove variable comp_arr --- numcodecs/tests/test_zfpy.py | 3 --- numcodecs/zfpy.py | 9 ++++++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/numcodecs/tests/test_zfpy.py b/numcodecs/tests/test_zfpy.py index 0ad78d6a..9c9d3db7 100644 --- a/numcodecs/tests/test_zfpy.py +++ b/numcodecs/tests/test_zfpy.py @@ -18,9 +18,6 @@ check_err_decode_object_buffer, check_err_encode_object_buffer) -@pytest.mark.skipif(sys.version_info >= (3, 8), - reason="requires python3.7 and lower") - codecs = [ ZFPY(mode=_zfpy.mode_fixed_rate, rate=-1), diff --git a/numcodecs/zfpy.py b/numcodecs/zfpy.py index e79bd8aa..c292e5cb 100644 --- a/numcodecs/zfpy.py +++ b/numcodecs/zfpy.py @@ -1,3 +1,6 @@ +import sys + + _zfpy = None try: import zfpy as _zfpy @@ -58,14 +61,14 @@ def encode(self, buf): buf = ensure_contiguous_ndarray(buf) # do compression - comp_arr = _zfpy.compress_numpy(buf, write_header=True, **self.compression_kwargs) + return _zfpy.compress_numpy(buf, write_header=True, **self.compression_kwargs) - return comp_arr def decode(self, buf, out=None): # normalise inputs - buf = ensure_bytes(buf) + #buf = ensure_bytes(buf) + buf = ensure_contiguous_ndarray(buf) if out is not None: out = ensure_contiguous_ndarray(out) From a96ae56416cc85bfbf0d8d24d2172e2e45891997 Mon Sep 17 00:00:00 2001 From: halehawk Date: Fri, 24 Apr 2020 13:07:25 -0600 Subject: [PATCH 42/69] skip test on darwin --- numcodecs/tests/test_zfpy.py | 1 - numcodecs/zfpy.py | 5 ++--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/numcodecs/tests/test_zfpy.py b/numcodecs/tests/test_zfpy.py index 9c9d3db7..7144fee3 100644 --- a/numcodecs/tests/test_zfpy.py +++ b/numcodecs/tests/test_zfpy.py @@ -3,7 +3,6 @@ import numpy as np -import pytest try: diff --git a/numcodecs/zfpy.py b/numcodecs/zfpy.py index c292e5cb..29ba3cc7 100644 --- a/numcodecs/zfpy.py +++ b/numcodecs/zfpy.py @@ -8,7 +8,7 @@ pass -if _zfpy and sys.version_info < (3, 8): +if _zfpy and not sys.platform.startswith("darwin"): from .abc import Codec from .compat import ndarray_copy, ensure_contiguous_ndarray, ensure_bytes @@ -67,8 +67,7 @@ def encode(self, buf): def decode(self, buf, out=None): # normalise inputs - #buf = ensure_bytes(buf) - buf = ensure_contiguous_ndarray(buf) + buf = ensure_bytes(buf) if out is not None: out = ensure_contiguous_ndarray(out) From dca2c58dfedbfaa758530b1d9c924ec736a199b0 Mon Sep 17 00:00:00 2001 From: halehawk Date: Fri, 24 Apr 2020 13:54:40 -0600 Subject: [PATCH 43/69] remove extra blank line --- .github/workflows/ci-osx.yaml | 1 - numcodecs/tests/test_zfpy.py | 1 - numcodecs/zfpy.py | 6 +++--- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci-osx.yaml b/.github/workflows/ci-osx.yaml index 566ae6b0..a4fbab64 100644 --- a/.github/workflows/ci-osx.yaml +++ b/.github/workflows/ci-osx.yaml @@ -24,7 +24,6 @@ jobs: - name: Install numcodecs run: | python -m pip install -U pip setuptools wheel pytest - pip install -i https://test.pypi.org/simple/ zfpy==0.5.5rc1 python -m pip install -v -e . - name: List installed packages diff --git a/numcodecs/tests/test_zfpy.py b/numcodecs/tests/test_zfpy.py index 7144fee3..701eeeba 100644 --- a/numcodecs/tests/test_zfpy.py +++ b/numcodecs/tests/test_zfpy.py @@ -1,5 +1,4 @@ import unittest -import sys import numpy as np diff --git a/numcodecs/zfpy.py b/numcodecs/zfpy.py index 29ba3cc7..9d906892 100644 --- a/numcodecs/zfpy.py +++ b/numcodecs/zfpy.py @@ -8,7 +8,7 @@ pass -if _zfpy and not sys.platform.startswith("darwin"): +if _zfpy: from .abc import Codec from .compat import ndarray_copy, ensure_contiguous_ndarray, ensure_bytes @@ -61,8 +61,8 @@ def encode(self, buf): buf = ensure_contiguous_ndarray(buf) # do compression - return _zfpy.compress_numpy(buf, write_header=True, **self.compression_kwargs) - + return _zfpy.compress_numpy(buf, write_header=True, + **self.compression_kwargs) def decode(self, buf, out=None): From 01b0870217f274a39f8af3c95904ec0decaeea53 Mon Sep 17 00:00:00 2001 From: halehawk Date: Fri, 24 Apr 2020 14:05:16 -0600 Subject: [PATCH 44/69] removed import sys --- numcodecs/zfpy.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/numcodecs/zfpy.py b/numcodecs/zfpy.py index 9d906892..34f5ef4e 100644 --- a/numcodecs/zfpy.py +++ b/numcodecs/zfpy.py @@ -1,6 +1,3 @@ -import sys - - _zfpy = None try: import zfpy as _zfpy From fbe0778c583185635673b9a59b74c171e5f1fa66 Mon Sep 17 00:00:00 2001 From: halehawk Date: Thu, 30 Apr 2020 13:52:42 -0600 Subject: [PATCH 45/69] removed zfp.pyx --- numcodecs/zfp.c | 10437 -------------------------------------------- numcodecs/zfp.pyx | 433 -- 2 files changed, 10870 deletions(-) delete mode 100644 numcodecs/zfp.c delete mode 100644 numcodecs/zfp.pyx diff --git a/numcodecs/zfp.c b/numcodecs/zfp.c deleted file mode 100644 index f72824f0..00000000 --- a/numcodecs/zfp.c +++ /dev/null @@ -1,10437 +0,0 @@ -/* Generated by Cython 0.29.14 */ - -/* BEGIN: Cython Metadata -{ - "distutils": { - "depends": [ - "zfp/include/bitstream.h", - "zfp/include/zfp.h" - ], - "extra_compile_args": [ - "-msse2", - "-mavx2", - "-std=c99" - ], - "include_dirs": [ - "zfp/include", - "numcodecs", - "/glade/u/apps/ch/opt/python/3.7.5/gnu/8.3.0/pkg-library/20191211/lib/python3.7/site-packages/numpy/core/include" - ], - "name": "numcodecs.zfp", - "sources": [ - "numcodecs/zfp.pyx", - "zfp/src/decode3l.c", - "zfp/src/encode4l.c", - "zfp/src/encode1d.c", - "zfp/src/decode4d.c", - "zfp/src/encode1i.c", - "zfp/src/encode2f.c", - "zfp/src/decode4l.c", - "zfp/src/encode3l.c", - "zfp/src/encode3f.c", - "zfp/src/decode2i.c", - "zfp/src/decode2d.c", - "zfp/src/decode3f.c", - "zfp/src/decode1d.c", - "zfp/src/encode1f.c", - "zfp/src/encode2l.c", - "zfp/src/encode2i.c", - "zfp/src/encode4f.c", - "zfp/src/decode2l.c", - "zfp/src/decode4i.c", - "zfp/src/encode4i.c", - "zfp/src/encode3d.c", - "zfp/src/decode1l.c", - "zfp/src/decode3d.c", - "zfp/src/encode4d.c", - "zfp/src/encode3i.c", - "zfp/src/decode3i.c", - "zfp/src/zfp.c", - "zfp/src/encode2d.c", - "zfp/src/decode1i.c", - "zfp/src/decode2f.c", - "zfp/src/decode1f.c", - "zfp/src/encode1l.c", - "zfp/src/decode4f.c", - "zfp/src/bitstream.c" - ] - }, - "module_name": "numcodecs.zfp" -} -END: Cython Metadata */ - -#define PY_SSIZE_T_CLEAN -#include "Python.h" -#ifndef Py_PYTHON_H - #error Python headers needed to compile C extensions, please install development version of Python. -#elif PY_VERSION_HEX < 0x02060000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03030000) - #error Cython requires Python 2.6+ or Python 3.3+. -#else -#define CYTHON_ABI "0_29_14" -#define CYTHON_HEX_VERSION 0x001D0EF0 -#define CYTHON_FUTURE_DIVISION 0 -#include -#ifndef offsetof - #define offsetof(type, member) ( (size_t) & ((type*)0) -> member ) -#endif -#if !defined(WIN32) && !defined(MS_WINDOWS) - #ifndef __stdcall - #define __stdcall - #endif - #ifndef __cdecl - #define __cdecl - #endif - #ifndef __fastcall - #define __fastcall - #endif -#endif -#ifndef DL_IMPORT - #define DL_IMPORT(t) t -#endif -#ifndef DL_EXPORT - #define DL_EXPORT(t) t -#endif -#define __PYX_COMMA , -#ifndef HAVE_LONG_LONG - #if PY_VERSION_HEX >= 0x02070000 - #define HAVE_LONG_LONG - #endif -#endif -#ifndef PY_LONG_LONG - #define PY_LONG_LONG LONG_LONG -#endif -#ifndef Py_HUGE_VAL - #define Py_HUGE_VAL HUGE_VAL -#endif -#ifdef PYPY_VERSION - #define CYTHON_COMPILING_IN_PYPY 1 - #define CYTHON_COMPILING_IN_PYSTON 0 - #define CYTHON_COMPILING_IN_CPYTHON 0 - #undef CYTHON_USE_TYPE_SLOTS - #define CYTHON_USE_TYPE_SLOTS 0 - #undef CYTHON_USE_PYTYPE_LOOKUP - #define CYTHON_USE_PYTYPE_LOOKUP 0 - #if PY_VERSION_HEX < 0x03050000 - #undef CYTHON_USE_ASYNC_SLOTS - #define CYTHON_USE_ASYNC_SLOTS 0 - #elif !defined(CYTHON_USE_ASYNC_SLOTS) - #define CYTHON_USE_ASYNC_SLOTS 1 - #endif - #undef CYTHON_USE_PYLIST_INTERNALS - #define CYTHON_USE_PYLIST_INTERNALS 0 - #undef CYTHON_USE_UNICODE_INTERNALS - #define CYTHON_USE_UNICODE_INTERNALS 0 - #undef CYTHON_USE_UNICODE_WRITER - #define CYTHON_USE_UNICODE_WRITER 0 - #undef CYTHON_USE_PYLONG_INTERNALS - #define CYTHON_USE_PYLONG_INTERNALS 0 - #undef CYTHON_AVOID_BORROWED_REFS - #define CYTHON_AVOID_BORROWED_REFS 1 - #undef CYTHON_ASSUME_SAFE_MACROS - #define CYTHON_ASSUME_SAFE_MACROS 0 - #undef CYTHON_UNPACK_METHODS - #define CYTHON_UNPACK_METHODS 0 - #undef CYTHON_FAST_THREAD_STATE - #define CYTHON_FAST_THREAD_STATE 0 - #undef CYTHON_FAST_PYCALL - #define CYTHON_FAST_PYCALL 0 - #undef CYTHON_PEP489_MULTI_PHASE_INIT - #define CYTHON_PEP489_MULTI_PHASE_INIT 0 - #undef CYTHON_USE_TP_FINALIZE - #define CYTHON_USE_TP_FINALIZE 0 - #undef CYTHON_USE_DICT_VERSIONS - #define CYTHON_USE_DICT_VERSIONS 0 - #undef CYTHON_USE_EXC_INFO_STACK - #define CYTHON_USE_EXC_INFO_STACK 0 -#elif defined(PYSTON_VERSION) - #define CYTHON_COMPILING_IN_PYPY 0 - #define CYTHON_COMPILING_IN_PYSTON 1 - #define CYTHON_COMPILING_IN_CPYTHON 0 - #ifndef CYTHON_USE_TYPE_SLOTS - #define CYTHON_USE_TYPE_SLOTS 1 - #endif - #undef CYTHON_USE_PYTYPE_LOOKUP - #define CYTHON_USE_PYTYPE_LOOKUP 0 - #undef CYTHON_USE_ASYNC_SLOTS - #define CYTHON_USE_ASYNC_SLOTS 0 - #undef CYTHON_USE_PYLIST_INTERNALS - #define CYTHON_USE_PYLIST_INTERNALS 0 - #ifndef CYTHON_USE_UNICODE_INTERNALS - #define CYTHON_USE_UNICODE_INTERNALS 1 - #endif - #undef CYTHON_USE_UNICODE_WRITER - #define CYTHON_USE_UNICODE_WRITER 0 - #undef CYTHON_USE_PYLONG_INTERNALS - #define CYTHON_USE_PYLONG_INTERNALS 0 - #ifndef CYTHON_AVOID_BORROWED_REFS - #define CYTHON_AVOID_BORROWED_REFS 0 - #endif - #ifndef CYTHON_ASSUME_SAFE_MACROS - #define CYTHON_ASSUME_SAFE_MACROS 1 - #endif - #ifndef CYTHON_UNPACK_METHODS - #define CYTHON_UNPACK_METHODS 1 - #endif - #undef CYTHON_FAST_THREAD_STATE - #define CYTHON_FAST_THREAD_STATE 0 - #undef CYTHON_FAST_PYCALL - #define CYTHON_FAST_PYCALL 0 - #undef CYTHON_PEP489_MULTI_PHASE_INIT - #define CYTHON_PEP489_MULTI_PHASE_INIT 0 - #undef CYTHON_USE_TP_FINALIZE - #define CYTHON_USE_TP_FINALIZE 0 - #undef CYTHON_USE_DICT_VERSIONS - #define CYTHON_USE_DICT_VERSIONS 0 - #undef CYTHON_USE_EXC_INFO_STACK - #define CYTHON_USE_EXC_INFO_STACK 0 -#else - #define CYTHON_COMPILING_IN_PYPY 0 - #define CYTHON_COMPILING_IN_PYSTON 0 - #define CYTHON_COMPILING_IN_CPYTHON 1 - #ifndef CYTHON_USE_TYPE_SLOTS - #define CYTHON_USE_TYPE_SLOTS 1 - #endif - #if PY_VERSION_HEX < 0x02070000 - #undef CYTHON_USE_PYTYPE_LOOKUP - #define CYTHON_USE_PYTYPE_LOOKUP 0 - #elif !defined(CYTHON_USE_PYTYPE_LOOKUP) - #define CYTHON_USE_PYTYPE_LOOKUP 1 - #endif - #if PY_MAJOR_VERSION < 3 - #undef CYTHON_USE_ASYNC_SLOTS - #define CYTHON_USE_ASYNC_SLOTS 0 - #elif !defined(CYTHON_USE_ASYNC_SLOTS) - #define CYTHON_USE_ASYNC_SLOTS 1 - #endif - #if PY_VERSION_HEX < 0x02070000 - #undef CYTHON_USE_PYLONG_INTERNALS - #define CYTHON_USE_PYLONG_INTERNALS 0 - #elif !defined(CYTHON_USE_PYLONG_INTERNALS) - #define CYTHON_USE_PYLONG_INTERNALS 1 - #endif - #ifndef CYTHON_USE_PYLIST_INTERNALS - #define CYTHON_USE_PYLIST_INTERNALS 1 - #endif - #ifndef CYTHON_USE_UNICODE_INTERNALS - #define CYTHON_USE_UNICODE_INTERNALS 1 - #endif - #if PY_VERSION_HEX < 0x030300F0 - #undef CYTHON_USE_UNICODE_WRITER - #define CYTHON_USE_UNICODE_WRITER 0 - #elif !defined(CYTHON_USE_UNICODE_WRITER) - #define CYTHON_USE_UNICODE_WRITER 1 - #endif - #ifndef CYTHON_AVOID_BORROWED_REFS - #define CYTHON_AVOID_BORROWED_REFS 0 - #endif - #ifndef CYTHON_ASSUME_SAFE_MACROS - #define CYTHON_ASSUME_SAFE_MACROS 1 - #endif - #ifndef CYTHON_UNPACK_METHODS - #define CYTHON_UNPACK_METHODS 1 - #endif - #ifndef CYTHON_FAST_THREAD_STATE - #define CYTHON_FAST_THREAD_STATE 1 - #endif - #ifndef CYTHON_FAST_PYCALL - #define CYTHON_FAST_PYCALL 1 - #endif - #ifndef CYTHON_PEP489_MULTI_PHASE_INIT - #define CYTHON_PEP489_MULTI_PHASE_INIT (PY_VERSION_HEX >= 0x03050000) - #endif - #ifndef CYTHON_USE_TP_FINALIZE - #define CYTHON_USE_TP_FINALIZE (PY_VERSION_HEX >= 0x030400a1) - #endif - #ifndef CYTHON_USE_DICT_VERSIONS - #define CYTHON_USE_DICT_VERSIONS (PY_VERSION_HEX >= 0x030600B1) - #endif - #ifndef CYTHON_USE_EXC_INFO_STACK - #define CYTHON_USE_EXC_INFO_STACK (PY_VERSION_HEX >= 0x030700A3) - #endif -#endif -#if !defined(CYTHON_FAST_PYCCALL) -#define CYTHON_FAST_PYCCALL (CYTHON_FAST_PYCALL && PY_VERSION_HEX >= 0x030600B1) -#endif -#if CYTHON_USE_PYLONG_INTERNALS - #include "longintrepr.h" - #undef SHIFT - #undef BASE - #undef MASK - #ifdef SIZEOF_VOID_P - enum { __pyx_check_sizeof_voidp = 1 / (int)(SIZEOF_VOID_P == sizeof(void*)) }; - #endif -#endif -#ifndef __has_attribute - #define __has_attribute(x) 0 -#endif -#ifndef __has_cpp_attribute - #define __has_cpp_attribute(x) 0 -#endif -#ifndef CYTHON_RESTRICT - #if defined(__GNUC__) - #define CYTHON_RESTRICT __restrict__ - #elif defined(_MSC_VER) && _MSC_VER >= 1400 - #define CYTHON_RESTRICT __restrict - #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L - #define CYTHON_RESTRICT restrict - #else - #define CYTHON_RESTRICT - #endif -#endif -#ifndef CYTHON_UNUSED -# if defined(__GNUC__) -# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) -# define CYTHON_UNUSED __attribute__ ((__unused__)) -# else -# define CYTHON_UNUSED -# endif -# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER)) -# define CYTHON_UNUSED __attribute__ ((__unused__)) -# else -# define CYTHON_UNUSED -# endif -#endif -#ifndef CYTHON_MAYBE_UNUSED_VAR -# if defined(__cplusplus) - template void CYTHON_MAYBE_UNUSED_VAR( const T& ) { } -# else -# define CYTHON_MAYBE_UNUSED_VAR(x) (void)(x) -# endif -#endif -#ifndef CYTHON_NCP_UNUSED -# if CYTHON_COMPILING_IN_CPYTHON -# define CYTHON_NCP_UNUSED -# else -# define CYTHON_NCP_UNUSED CYTHON_UNUSED -# endif -#endif -#define __Pyx_void_to_None(void_result) ((void)(void_result), Py_INCREF(Py_None), Py_None) -#ifdef _MSC_VER - #ifndef _MSC_STDINT_H_ - #if _MSC_VER < 1300 - typedef unsigned char uint8_t; - typedef unsigned int uint32_t; - #else - typedef unsigned __int8 uint8_t; - typedef unsigned __int32 uint32_t; - #endif - #endif -#else - #include -#endif -#ifndef CYTHON_FALLTHROUGH - #if defined(__cplusplus) && __cplusplus >= 201103L - #if __has_cpp_attribute(fallthrough) - #define CYTHON_FALLTHROUGH [[fallthrough]] - #elif __has_cpp_attribute(clang::fallthrough) - #define CYTHON_FALLTHROUGH [[clang::fallthrough]] - #elif __has_cpp_attribute(gnu::fallthrough) - #define CYTHON_FALLTHROUGH [[gnu::fallthrough]] - #endif - #endif - #ifndef CYTHON_FALLTHROUGH - #if __has_attribute(fallthrough) - #define CYTHON_FALLTHROUGH __attribute__((fallthrough)) - #else - #define CYTHON_FALLTHROUGH - #endif - #endif - #if defined(__clang__ ) && defined(__apple_build_version__) - #if __apple_build_version__ < 7000000 - #undef CYTHON_FALLTHROUGH - #define CYTHON_FALLTHROUGH - #endif - #endif -#endif - -#ifndef CYTHON_INLINE - #if defined(__clang__) - #define CYTHON_INLINE __inline__ __attribute__ ((__unused__)) - #elif defined(__GNUC__) - #define CYTHON_INLINE __inline__ - #elif defined(_MSC_VER) - #define CYTHON_INLINE __inline - #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L - #define CYTHON_INLINE inline - #else - #define CYTHON_INLINE - #endif -#endif - -#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x02070600 && !defined(Py_OptimizeFlag) - #define Py_OptimizeFlag 0 -#endif -#define __PYX_BUILD_PY_SSIZE_T "n" -#define CYTHON_FORMAT_SSIZE_T "z" -#if PY_MAJOR_VERSION < 3 - #define __Pyx_BUILTIN_MODULE_NAME "__builtin__" - #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ - PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) - #define __Pyx_DefaultClassType PyClass_Type -#else - #define __Pyx_BUILTIN_MODULE_NAME "builtins" -#if PY_VERSION_HEX >= 0x030800A4 && PY_VERSION_HEX < 0x030800B2 - #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ - PyCode_New(a, 0, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) -#else - #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\ - PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) -#endif - #define __Pyx_DefaultClassType PyType_Type -#endif -#ifndef Py_TPFLAGS_CHECKTYPES - #define Py_TPFLAGS_CHECKTYPES 0 -#endif -#ifndef Py_TPFLAGS_HAVE_INDEX - #define Py_TPFLAGS_HAVE_INDEX 0 -#endif -#ifndef Py_TPFLAGS_HAVE_NEWBUFFER - #define Py_TPFLAGS_HAVE_NEWBUFFER 0 -#endif -#ifndef Py_TPFLAGS_HAVE_FINALIZE - #define Py_TPFLAGS_HAVE_FINALIZE 0 -#endif -#ifndef METH_STACKLESS - #define METH_STACKLESS 0 -#endif -#if PY_VERSION_HEX <= 0x030700A3 || !defined(METH_FASTCALL) - #ifndef METH_FASTCALL - #define METH_FASTCALL 0x80 - #endif - typedef PyObject *(*__Pyx_PyCFunctionFast) (PyObject *self, PyObject *const *args, Py_ssize_t nargs); - typedef PyObject *(*__Pyx_PyCFunctionFastWithKeywords) (PyObject *self, PyObject *const *args, - Py_ssize_t nargs, PyObject *kwnames); -#else - #define __Pyx_PyCFunctionFast _PyCFunctionFast - #define __Pyx_PyCFunctionFastWithKeywords _PyCFunctionFastWithKeywords -#endif -#if CYTHON_FAST_PYCCALL -#define __Pyx_PyFastCFunction_Check(func)\ - ((PyCFunction_Check(func) && (METH_FASTCALL == (PyCFunction_GET_FLAGS(func) & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_KEYWORDS | METH_STACKLESS))))) -#else -#define __Pyx_PyFastCFunction_Check(func) 0 -#endif -#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Malloc) - #define PyObject_Malloc(s) PyMem_Malloc(s) - #define PyObject_Free(p) PyMem_Free(p) - #define PyObject_Realloc(p) PyMem_Realloc(p) -#endif -#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030400A1 - #define PyMem_RawMalloc(n) PyMem_Malloc(n) - #define PyMem_RawRealloc(p, n) PyMem_Realloc(p, n) - #define PyMem_RawFree(p) PyMem_Free(p) -#endif -#if CYTHON_COMPILING_IN_PYSTON - #define __Pyx_PyCode_HasFreeVars(co) PyCode_HasFreeVars(co) - #define __Pyx_PyFrame_SetLineNumber(frame, lineno) PyFrame_SetLineNumber(frame, lineno) -#else - #define __Pyx_PyCode_HasFreeVars(co) (PyCode_GetNumFree(co) > 0) - #define __Pyx_PyFrame_SetLineNumber(frame, lineno) (frame)->f_lineno = (lineno) -#endif -#if !CYTHON_FAST_THREAD_STATE || PY_VERSION_HEX < 0x02070000 - #define __Pyx_PyThreadState_Current PyThreadState_GET() -#elif PY_VERSION_HEX >= 0x03060000 - #define __Pyx_PyThreadState_Current _PyThreadState_UncheckedGet() -#elif PY_VERSION_HEX >= 0x03000000 - #define __Pyx_PyThreadState_Current PyThreadState_GET() -#else - #define __Pyx_PyThreadState_Current _PyThreadState_Current -#endif -#if PY_VERSION_HEX < 0x030700A2 && !defined(PyThread_tss_create) && !defined(Py_tss_NEEDS_INIT) -#include "pythread.h" -#define Py_tss_NEEDS_INIT 0 -typedef int Py_tss_t; -static CYTHON_INLINE int PyThread_tss_create(Py_tss_t *key) { - *key = PyThread_create_key(); - return 0; -} -static CYTHON_INLINE Py_tss_t * PyThread_tss_alloc(void) { - Py_tss_t *key = (Py_tss_t *)PyObject_Malloc(sizeof(Py_tss_t)); - *key = Py_tss_NEEDS_INIT; - return key; -} -static CYTHON_INLINE void PyThread_tss_free(Py_tss_t *key) { - PyObject_Free(key); -} -static CYTHON_INLINE int PyThread_tss_is_created(Py_tss_t *key) { - return *key != Py_tss_NEEDS_INIT; -} -static CYTHON_INLINE void PyThread_tss_delete(Py_tss_t *key) { - PyThread_delete_key(*key); - *key = Py_tss_NEEDS_INIT; -} -static CYTHON_INLINE int PyThread_tss_set(Py_tss_t *key, void *value) { - return PyThread_set_key_value(*key, value); -} -static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) { - return PyThread_get_key_value(*key); -} -#endif -#if CYTHON_COMPILING_IN_CPYTHON || defined(_PyDict_NewPresized) -#define __Pyx_PyDict_NewPresized(n) ((n <= 8) ? PyDict_New() : _PyDict_NewPresized(n)) -#else -#define __Pyx_PyDict_NewPresized(n) PyDict_New() -#endif -#if PY_MAJOR_VERSION >= 3 || CYTHON_FUTURE_DIVISION - #define __Pyx_PyNumber_Divide(x,y) PyNumber_TrueDivide(x,y) - #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceTrueDivide(x,y) -#else - #define __Pyx_PyNumber_Divide(x,y) PyNumber_Divide(x,y) - #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceDivide(x,y) -#endif -#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 && CYTHON_USE_UNICODE_INTERNALS -#define __Pyx_PyDict_GetItemStr(dict, name) _PyDict_GetItem_KnownHash(dict, name, ((PyASCIIObject *) name)->hash) -#else -#define __Pyx_PyDict_GetItemStr(dict, name) PyDict_GetItem(dict, name) -#endif -#if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND) - #define CYTHON_PEP393_ENABLED 1 - #define __Pyx_PyUnicode_READY(op) (likely(PyUnicode_IS_READY(op)) ?\ - 0 : _PyUnicode_Ready((PyObject *)(op))) - #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_LENGTH(u) - #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i) - #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) PyUnicode_MAX_CHAR_VALUE(u) - #define __Pyx_PyUnicode_KIND(u) PyUnicode_KIND(u) - #define __Pyx_PyUnicode_DATA(u) PyUnicode_DATA(u) - #define __Pyx_PyUnicode_READ(k, d, i) PyUnicode_READ(k, d, i) - #define __Pyx_PyUnicode_WRITE(k, d, i, ch) PyUnicode_WRITE(k, d, i, ch) - #define __Pyx_PyUnicode_IS_TRUE(u) (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : PyUnicode_GET_SIZE(u))) -#else - #define CYTHON_PEP393_ENABLED 0 - #define PyUnicode_1BYTE_KIND 1 - #define PyUnicode_2BYTE_KIND 2 - #define PyUnicode_4BYTE_KIND 4 - #define __Pyx_PyUnicode_READY(op) (0) - #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_SIZE(u) - #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i])) - #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) ((sizeof(Py_UNICODE) == 2) ? 65535 : 1114111) - #define __Pyx_PyUnicode_KIND(u) (sizeof(Py_UNICODE)) - #define __Pyx_PyUnicode_DATA(u) ((void*)PyUnicode_AS_UNICODE(u)) - #define __Pyx_PyUnicode_READ(k, d, i) ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i])) - #define __Pyx_PyUnicode_WRITE(k, d, i, ch) (((void)(k)), ((Py_UNICODE*)d)[i] = ch) - #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_SIZE(u)) -#endif -#if CYTHON_COMPILING_IN_PYPY - #define __Pyx_PyUnicode_Concat(a, b) PyNumber_Add(a, b) - #define __Pyx_PyUnicode_ConcatSafe(a, b) PyNumber_Add(a, b) -#else - #define __Pyx_PyUnicode_Concat(a, b) PyUnicode_Concat(a, b) - #define __Pyx_PyUnicode_ConcatSafe(a, b) ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ?\ - PyNumber_Add(a, b) : __Pyx_PyUnicode_Concat(a, b)) -#endif -#if CYTHON_COMPILING_IN_PYPY && !defined(PyUnicode_Contains) - #define PyUnicode_Contains(u, s) PySequence_Contains(u, s) -#endif -#if CYTHON_COMPILING_IN_PYPY && !defined(PyByteArray_Check) - #define PyByteArray_Check(obj) PyObject_TypeCheck(obj, &PyByteArray_Type) -#endif -#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Format) - #define PyObject_Format(obj, fmt) PyObject_CallMethod(obj, "__format__", "O", fmt) -#endif -#define __Pyx_PyString_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyString_Check(b) && !PyString_CheckExact(b)))) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b)) -#define __Pyx_PyUnicode_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyUnicode_Check(b) && !PyUnicode_CheckExact(b)))) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b)) -#if PY_MAJOR_VERSION >= 3 - #define __Pyx_PyString_Format(a, b) PyUnicode_Format(a, b) -#else - #define __Pyx_PyString_Format(a, b) PyString_Format(a, b) -#endif -#if PY_MAJOR_VERSION < 3 && !defined(PyObject_ASCII) - #define PyObject_ASCII(o) PyObject_Repr(o) -#endif -#if PY_MAJOR_VERSION >= 3 - #define PyBaseString_Type PyUnicode_Type - #define PyStringObject PyUnicodeObject - #define PyString_Type PyUnicode_Type - #define PyString_Check PyUnicode_Check - #define PyString_CheckExact PyUnicode_CheckExact - #define PyObject_Unicode PyObject_Str -#endif -#if PY_MAJOR_VERSION >= 3 - #define __Pyx_PyBaseString_Check(obj) PyUnicode_Check(obj) - #define __Pyx_PyBaseString_CheckExact(obj) PyUnicode_CheckExact(obj) -#else - #define __Pyx_PyBaseString_Check(obj) (PyString_Check(obj) || PyUnicode_Check(obj)) - #define __Pyx_PyBaseString_CheckExact(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj)) -#endif -#ifndef PySet_CheckExact - #define PySet_CheckExact(obj) (Py_TYPE(obj) == &PySet_Type) -#endif -#if CYTHON_ASSUME_SAFE_MACROS - #define __Pyx_PySequence_SIZE(seq) Py_SIZE(seq) -#else - #define __Pyx_PySequence_SIZE(seq) PySequence_Size(seq) -#endif -#if PY_MAJOR_VERSION >= 3 - #define PyIntObject PyLongObject - #define PyInt_Type PyLong_Type - #define PyInt_Check(op) PyLong_Check(op) - #define PyInt_CheckExact(op) PyLong_CheckExact(op) - #define PyInt_FromString PyLong_FromString - #define PyInt_FromUnicode PyLong_FromUnicode - #define PyInt_FromLong PyLong_FromLong - #define PyInt_FromSize_t PyLong_FromSize_t - #define PyInt_FromSsize_t PyLong_FromSsize_t - #define PyInt_AsLong PyLong_AsLong - #define PyInt_AS_LONG PyLong_AS_LONG - #define PyInt_AsSsize_t PyLong_AsSsize_t - #define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask - #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask - #define PyNumber_Int PyNumber_Long -#endif -#if PY_MAJOR_VERSION >= 3 - #define PyBoolObject PyLongObject -#endif -#if PY_MAJOR_VERSION >= 3 && CYTHON_COMPILING_IN_PYPY - #ifndef PyUnicode_InternFromString - #define PyUnicode_InternFromString(s) PyUnicode_FromString(s) - #endif -#endif -#if PY_VERSION_HEX < 0x030200A4 - typedef long Py_hash_t; - #define __Pyx_PyInt_FromHash_t PyInt_FromLong - #define __Pyx_PyInt_AsHash_t PyInt_AsLong -#else - #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t - #define __Pyx_PyInt_AsHash_t PyInt_AsSsize_t -#endif -#if PY_MAJOR_VERSION >= 3 - #define __Pyx_PyMethod_New(func, self, klass) ((self) ? PyMethod_New(func, self) : (Py_INCREF(func), func)) -#else - #define __Pyx_PyMethod_New(func, self, klass) PyMethod_New(func, self, klass) -#endif -#if CYTHON_USE_ASYNC_SLOTS - #if PY_VERSION_HEX >= 0x030500B1 - #define __Pyx_PyAsyncMethodsStruct PyAsyncMethods - #define __Pyx_PyType_AsAsync(obj) (Py_TYPE(obj)->tp_as_async) - #else - #define __Pyx_PyType_AsAsync(obj) ((__Pyx_PyAsyncMethodsStruct*) (Py_TYPE(obj)->tp_reserved)) - #endif -#else - #define __Pyx_PyType_AsAsync(obj) NULL -#endif -#ifndef __Pyx_PyAsyncMethodsStruct - typedef struct { - unaryfunc am_await; - unaryfunc am_aiter; - unaryfunc am_anext; - } __Pyx_PyAsyncMethodsStruct; -#endif - -#if defined(WIN32) || defined(MS_WINDOWS) - #define _USE_MATH_DEFINES -#endif -#include -#ifdef NAN -#define __PYX_NAN() ((float) NAN) -#else -static CYTHON_INLINE float __PYX_NAN() { - float value; - memset(&value, 0xFF, sizeof(value)); - return value; -} -#endif -#if defined(__CYGWIN__) && defined(_LDBL_EQ_DBL) -#define __Pyx_truncl trunc -#else -#define __Pyx_truncl truncl -#endif - - -#define __PYX_ERR(f_index, lineno, Ln_error) \ -{ \ - __pyx_filename = __pyx_f[f_index]; __pyx_lineno = lineno; __pyx_clineno = __LINE__; goto Ln_error; \ -} - -#ifndef __PYX_EXTERN_C - #ifdef __cplusplus - #define __PYX_EXTERN_C extern "C" - #else - #define __PYX_EXTERN_C extern - #endif -#endif - -#define __PYX_HAVE__numcodecs__zfp -#define __PYX_HAVE_API__numcodecs__zfp -/* Early includes */ -#include -#include -#include "bitstream.h" -#include "zfp.h" -#ifdef _OPENMP -#include -#endif /* _OPENMP */ - -#if defined(PYREX_WITHOUT_ASSERTIONS) && !defined(CYTHON_WITHOUT_ASSERTIONS) -#define CYTHON_WITHOUT_ASSERTIONS -#endif - -typedef struct {PyObject **p; const char *s; const Py_ssize_t n; const char* encoding; - const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry; - -#define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII 0 -#define __PYX_DEFAULT_STRING_ENCODING_IS_UTF8 0 -#define __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT (PY_MAJOR_VERSION >= 3 && __PYX_DEFAULT_STRING_ENCODING_IS_UTF8) -#define __PYX_DEFAULT_STRING_ENCODING "" -#define __Pyx_PyObject_FromString __Pyx_PyBytes_FromString -#define __Pyx_PyObject_FromStringAndSize __Pyx_PyBytes_FromStringAndSize -#define __Pyx_uchar_cast(c) ((unsigned char)c) -#define __Pyx_long_cast(x) ((long)x) -#define __Pyx_fits_Py_ssize_t(v, type, is_signed) (\ - (sizeof(type) < sizeof(Py_ssize_t)) ||\ - (sizeof(type) > sizeof(Py_ssize_t) &&\ - likely(v < (type)PY_SSIZE_T_MAX ||\ - v == (type)PY_SSIZE_T_MAX) &&\ - (!is_signed || likely(v > (type)PY_SSIZE_T_MIN ||\ - v == (type)PY_SSIZE_T_MIN))) ||\ - (sizeof(type) == sizeof(Py_ssize_t) &&\ - (is_signed || likely(v < (type)PY_SSIZE_T_MAX ||\ - v == (type)PY_SSIZE_T_MAX))) ) -static CYTHON_INLINE int __Pyx_is_valid_index(Py_ssize_t i, Py_ssize_t limit) { - return (size_t) i < (size_t) limit; -} -#if defined (__cplusplus) && __cplusplus >= 201103L - #include - #define __Pyx_sst_abs(value) std::abs(value) -#elif SIZEOF_INT >= SIZEOF_SIZE_T - #define __Pyx_sst_abs(value) abs(value) -#elif SIZEOF_LONG >= SIZEOF_SIZE_T - #define __Pyx_sst_abs(value) labs(value) -#elif defined (_MSC_VER) - #define __Pyx_sst_abs(value) ((Py_ssize_t)_abs64(value)) -#elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L - #define __Pyx_sst_abs(value) llabs(value) -#elif defined (__GNUC__) - #define __Pyx_sst_abs(value) __builtin_llabs(value) -#else - #define __Pyx_sst_abs(value) ((value<0) ? -value : value) -#endif -static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject*); -static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length); -#define __Pyx_PyByteArray_FromString(s) PyByteArray_FromStringAndSize((const char*)s, strlen((const char*)s)) -#define __Pyx_PyByteArray_FromStringAndSize(s, l) PyByteArray_FromStringAndSize((const char*)s, l) -#define __Pyx_PyBytes_FromString PyBytes_FromString -#define __Pyx_PyBytes_FromStringAndSize PyBytes_FromStringAndSize -static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char*); -#if PY_MAJOR_VERSION < 3 - #define __Pyx_PyStr_FromString __Pyx_PyBytes_FromString - #define __Pyx_PyStr_FromStringAndSize __Pyx_PyBytes_FromStringAndSize -#else - #define __Pyx_PyStr_FromString __Pyx_PyUnicode_FromString - #define __Pyx_PyStr_FromStringAndSize __Pyx_PyUnicode_FromStringAndSize -#endif -#define __Pyx_PyBytes_AsWritableString(s) ((char*) PyBytes_AS_STRING(s)) -#define __Pyx_PyBytes_AsWritableSString(s) ((signed char*) PyBytes_AS_STRING(s)) -#define __Pyx_PyBytes_AsWritableUString(s) ((unsigned char*) PyBytes_AS_STRING(s)) -#define __Pyx_PyBytes_AsString(s) ((const char*) PyBytes_AS_STRING(s)) -#define __Pyx_PyBytes_AsSString(s) ((const signed char*) PyBytes_AS_STRING(s)) -#define __Pyx_PyBytes_AsUString(s) ((const unsigned char*) PyBytes_AS_STRING(s)) -#define __Pyx_PyObject_AsWritableString(s) ((char*) __Pyx_PyObject_AsString(s)) -#define __Pyx_PyObject_AsWritableSString(s) ((signed char*) __Pyx_PyObject_AsString(s)) -#define __Pyx_PyObject_AsWritableUString(s) ((unsigned char*) __Pyx_PyObject_AsString(s)) -#define __Pyx_PyObject_AsSString(s) ((const signed char*) __Pyx_PyObject_AsString(s)) -#define __Pyx_PyObject_AsUString(s) ((const unsigned char*) __Pyx_PyObject_AsString(s)) -#define __Pyx_PyObject_FromCString(s) __Pyx_PyObject_FromString((const char*)s) -#define __Pyx_PyBytes_FromCString(s) __Pyx_PyBytes_FromString((const char*)s) -#define __Pyx_PyByteArray_FromCString(s) __Pyx_PyByteArray_FromString((const char*)s) -#define __Pyx_PyStr_FromCString(s) __Pyx_PyStr_FromString((const char*)s) -#define __Pyx_PyUnicode_FromCString(s) __Pyx_PyUnicode_FromString((const char*)s) -static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const Py_UNICODE *u) { - const Py_UNICODE *u_end = u; - while (*u_end++) ; - return (size_t)(u_end - u - 1); -} -#define __Pyx_PyUnicode_FromUnicode(u) PyUnicode_FromUnicode(u, __Pyx_Py_UNICODE_strlen(u)) -#define __Pyx_PyUnicode_FromUnicodeAndLength PyUnicode_FromUnicode -#define __Pyx_PyUnicode_AsUnicode PyUnicode_AsUnicode -#define __Pyx_NewRef(obj) (Py_INCREF(obj), obj) -#define __Pyx_Owned_Py_None(b) __Pyx_NewRef(Py_None) -static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b); -static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*); -static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject*); -static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x); -#define __Pyx_PySequence_Tuple(obj)\ - (likely(PyTuple_CheckExact(obj)) ? __Pyx_NewRef(obj) : PySequence_Tuple(obj)) -static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*); -static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t); -#if CYTHON_ASSUME_SAFE_MACROS -#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x)) -#else -#define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x) -#endif -#define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x)) -#if PY_MAJOR_VERSION >= 3 -#define __Pyx_PyNumber_Int(x) (PyLong_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Long(x)) -#else -#define __Pyx_PyNumber_Int(x) (PyInt_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Int(x)) -#endif -#define __Pyx_PyNumber_Float(x) (PyFloat_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Float(x)) -#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII -static int __Pyx_sys_getdefaultencoding_not_ascii; -static int __Pyx_init_sys_getdefaultencoding_params(void) { - PyObject* sys; - PyObject* default_encoding = NULL; - PyObject* ascii_chars_u = NULL; - PyObject* ascii_chars_b = NULL; - const char* default_encoding_c; - sys = PyImport_ImportModule("sys"); - if (!sys) goto bad; - default_encoding = PyObject_CallMethod(sys, (char*) "getdefaultencoding", NULL); - Py_DECREF(sys); - if (!default_encoding) goto bad; - default_encoding_c = PyBytes_AsString(default_encoding); - if (!default_encoding_c) goto bad; - if (strcmp(default_encoding_c, "ascii") == 0) { - __Pyx_sys_getdefaultencoding_not_ascii = 0; - } else { - char ascii_chars[128]; - int c; - for (c = 0; c < 128; c++) { - ascii_chars[c] = c; - } - __Pyx_sys_getdefaultencoding_not_ascii = 1; - ascii_chars_u = PyUnicode_DecodeASCII(ascii_chars, 128, NULL); - if (!ascii_chars_u) goto bad; - ascii_chars_b = PyUnicode_AsEncodedString(ascii_chars_u, default_encoding_c, NULL); - if (!ascii_chars_b || !PyBytes_Check(ascii_chars_b) || memcmp(ascii_chars, PyBytes_AS_STRING(ascii_chars_b), 128) != 0) { - PyErr_Format( - PyExc_ValueError, - "This module compiled with c_string_encoding=ascii, but default encoding '%.200s' is not a superset of ascii.", - default_encoding_c); - goto bad; - } - Py_DECREF(ascii_chars_u); - Py_DECREF(ascii_chars_b); - } - Py_DECREF(default_encoding); - return 0; -bad: - Py_XDECREF(default_encoding); - Py_XDECREF(ascii_chars_u); - Py_XDECREF(ascii_chars_b); - return -1; -} -#endif -#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT && PY_MAJOR_VERSION >= 3 -#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_DecodeUTF8(c_str, size, NULL) -#else -#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_Decode(c_str, size, __PYX_DEFAULT_STRING_ENCODING, NULL) -#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT -static char* __PYX_DEFAULT_STRING_ENCODING; -static int __Pyx_init_sys_getdefaultencoding_params(void) { - PyObject* sys; - PyObject* default_encoding = NULL; - char* default_encoding_c; - sys = PyImport_ImportModule("sys"); - if (!sys) goto bad; - default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL); - Py_DECREF(sys); - if (!default_encoding) goto bad; - default_encoding_c = PyBytes_AsString(default_encoding); - if (!default_encoding_c) goto bad; - __PYX_DEFAULT_STRING_ENCODING = (char*) malloc(strlen(default_encoding_c) + 1); - if (!__PYX_DEFAULT_STRING_ENCODING) goto bad; - strcpy(__PYX_DEFAULT_STRING_ENCODING, default_encoding_c); - Py_DECREF(default_encoding); - return 0; -bad: - Py_XDECREF(default_encoding); - return -1; -} -#endif -#endif - - -/* Test for GCC > 2.95 */ -#if defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95))) - #define likely(x) __builtin_expect(!!(x), 1) - #define unlikely(x) __builtin_expect(!!(x), 0) -#else /* !__GNUC__ or GCC < 2.95 */ - #define likely(x) (x) - #define unlikely(x) (x) -#endif /* __GNUC__ */ -static CYTHON_INLINE void __Pyx_pretend_to_initialize(void* ptr) { (void)ptr; } - -static PyObject *__pyx_m = NULL; -static PyObject *__pyx_d; -static PyObject *__pyx_b; -static PyObject *__pyx_cython_runtime = NULL; -static PyObject *__pyx_empty_tuple; -static PyObject *__pyx_empty_bytes; -static PyObject *__pyx_empty_unicode; -static int __pyx_lineno; -static int __pyx_clineno = 0; -static const char * __pyx_cfilenm= __FILE__; -static const char *__pyx_filename; - - -static const char *__pyx_f[] = { - "numcodecs/zfp.pyx", - "type.pxd", - "numcodecs/compat_ext.pxd", -}; - -/*--- Type declarations ---*/ -struct __pyx_obj_9numcodecs_10compat_ext_Buffer; -struct __pyx_defaults; -typedef struct __pyx_defaults __pyx_defaults; -struct __pyx_defaults { - PyObject *__pyx_arg_prec; - PyObject *__pyx_arg_minbits; - PyObject *__pyx_arg_maxbits; - PyObject *__pyx_arg_minexp; - PyObject *__pyx_arg_maxprec; -}; - -/* "compat_ext.pxd":4 - * - * - * cdef class Buffer: # <<<<<<<<<<<<<< - * cdef: - * char *ptr - */ -struct __pyx_obj_9numcodecs_10compat_ext_Buffer { - PyObject_HEAD - struct __pyx_vtabstruct_9numcodecs_10compat_ext_Buffer *__pyx_vtab; - char *ptr; - Py_buffer buffer; - size_t nbytes; - size_t itemsize; - int acquired; -}; - - - -struct __pyx_vtabstruct_9numcodecs_10compat_ext_Buffer { - PyObject *(*release)(struct __pyx_obj_9numcodecs_10compat_ext_Buffer *, int __pyx_skip_dispatch); -}; -static struct __pyx_vtabstruct_9numcodecs_10compat_ext_Buffer *__pyx_vtabptr_9numcodecs_10compat_ext_Buffer; - -/* --- Runtime support code (head) --- */ -/* Refnanny.proto */ -#ifndef CYTHON_REFNANNY - #define CYTHON_REFNANNY 0 -#endif -#if CYTHON_REFNANNY - typedef struct { - void (*INCREF)(void*, PyObject*, int); - void (*DECREF)(void*, PyObject*, int); - void (*GOTREF)(void*, PyObject*, int); - void (*GIVEREF)(void*, PyObject*, int); - void* (*SetupContext)(const char*, int, const char*); - void (*FinishContext)(void**); - } __Pyx_RefNannyAPIStruct; - static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL; - static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname); - #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL; -#ifdef WITH_THREAD - #define __Pyx_RefNannySetupContext(name, acquire_gil)\ - if (acquire_gil) {\ - PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\ - __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__);\ - PyGILState_Release(__pyx_gilstate_save);\ - } else {\ - __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__);\ - } -#else - #define __Pyx_RefNannySetupContext(name, acquire_gil)\ - __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__) -#endif - #define __Pyx_RefNannyFinishContext()\ - __Pyx_RefNanny->FinishContext(&__pyx_refnanny) - #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), __LINE__) - #define __Pyx_XINCREF(r) do { if((r) != NULL) {__Pyx_INCREF(r); }} while(0) - #define __Pyx_XDECREF(r) do { if((r) != NULL) {__Pyx_DECREF(r); }} while(0) - #define __Pyx_XGOTREF(r) do { if((r) != NULL) {__Pyx_GOTREF(r); }} while(0) - #define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);}} while(0) -#else - #define __Pyx_RefNannyDeclarations - #define __Pyx_RefNannySetupContext(name, acquire_gil) - #define __Pyx_RefNannyFinishContext() - #define __Pyx_INCREF(r) Py_INCREF(r) - #define __Pyx_DECREF(r) Py_DECREF(r) - #define __Pyx_GOTREF(r) - #define __Pyx_GIVEREF(r) - #define __Pyx_XINCREF(r) Py_XINCREF(r) - #define __Pyx_XDECREF(r) Py_XDECREF(r) - #define __Pyx_XGOTREF(r) - #define __Pyx_XGIVEREF(r) -#endif -#define __Pyx_XDECREF_SET(r, v) do {\ - PyObject *tmp = (PyObject *) r;\ - r = v; __Pyx_XDECREF(tmp);\ - } while (0) -#define __Pyx_DECREF_SET(r, v) do {\ - PyObject *tmp = (PyObject *) r;\ - r = v; __Pyx_DECREF(tmp);\ - } while (0) -#define __Pyx_CLEAR(r) do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0) -#define __Pyx_XCLEAR(r) do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0) - -/* PyObjectGetAttrStr.proto */ -#if CYTHON_USE_TYPE_SLOTS -static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name); -#else -#define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n) -#endif - -/* GetBuiltinName.proto */ -static PyObject *__Pyx_GetBuiltinName(PyObject *name); - -/* RaiseArgTupleInvalid.proto */ -static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact, - Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found); - -/* RaiseDoubleKeywords.proto */ -static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name); - -/* ParseKeywords.proto */ -static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[],\ - PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args,\ - const char* function_name); - -/* DictGetItem.proto */ -#if PY_MAJOR_VERSION >= 3 && !CYTHON_COMPILING_IN_PYPY -static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key); -#define __Pyx_PyObject_Dict_GetItem(obj, name)\ - (likely(PyDict_CheckExact(obj)) ?\ - __Pyx_PyDict_GetItem(obj, name) : PyObject_GetItem(obj, name)) -#else -#define __Pyx_PyDict_GetItem(d, key) PyObject_GetItem(d, key) -#define __Pyx_PyObject_Dict_GetItem(obj, name) PyObject_GetItem(obj, name) -#endif - -/* PyObjectCall.proto */ -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw); -#else -#define __Pyx_PyObject_Call(func, arg, kw) PyObject_Call(func, arg, kw) -#endif - -/* PyDictVersioning.proto */ -#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS -#define __PYX_DICT_VERSION_INIT ((PY_UINT64_T) -1) -#define __PYX_GET_DICT_VERSION(dict) (((PyDictObject*)(dict))->ma_version_tag) -#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var)\ - (version_var) = __PYX_GET_DICT_VERSION(dict);\ - (cache_var) = (value); -#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) {\ - static PY_UINT64_T __pyx_dict_version = 0;\ - static PyObject *__pyx_dict_cached_value = NULL;\ - if (likely(__PYX_GET_DICT_VERSION(DICT) == __pyx_dict_version)) {\ - (VAR) = __pyx_dict_cached_value;\ - } else {\ - (VAR) = __pyx_dict_cached_value = (LOOKUP);\ - __pyx_dict_version = __PYX_GET_DICT_VERSION(DICT);\ - }\ -} -static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj); -static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj); -static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version); -#else -#define __PYX_GET_DICT_VERSION(dict) (0) -#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var) -#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) (VAR) = (LOOKUP); -#endif - -/* GetModuleGlobalName.proto */ -#if CYTHON_USE_DICT_VERSIONS -#define __Pyx_GetModuleGlobalName(var, name) {\ - static PY_UINT64_T __pyx_dict_version = 0;\ - static PyObject *__pyx_dict_cached_value = NULL;\ - (var) = (likely(__pyx_dict_version == __PYX_GET_DICT_VERSION(__pyx_d))) ?\ - (likely(__pyx_dict_cached_value) ? __Pyx_NewRef(__pyx_dict_cached_value) : __Pyx_GetBuiltinName(name)) :\ - __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\ -} -#define __Pyx_GetModuleGlobalNameUncached(var, name) {\ - PY_UINT64_T __pyx_dict_version;\ - PyObject *__pyx_dict_cached_value;\ - (var) = __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\ -} -static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value); -#else -#define __Pyx_GetModuleGlobalName(var, name) (var) = __Pyx__GetModuleGlobalName(name) -#define __Pyx_GetModuleGlobalNameUncached(var, name) (var) = __Pyx__GetModuleGlobalName(name) -static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name); -#endif - -/* PyThreadStateGet.proto */ -#if CYTHON_FAST_THREAD_STATE -#define __Pyx_PyThreadState_declare PyThreadState *__pyx_tstate; -#define __Pyx_PyThreadState_assign __pyx_tstate = __Pyx_PyThreadState_Current; -#define __Pyx_PyErr_Occurred() __pyx_tstate->curexc_type -#else -#define __Pyx_PyThreadState_declare -#define __Pyx_PyThreadState_assign -#define __Pyx_PyErr_Occurred() PyErr_Occurred() -#endif - -/* PyErrFetchRestore.proto */ -#if CYTHON_FAST_THREAD_STATE -#define __Pyx_PyErr_Clear() __Pyx_ErrRestore(NULL, NULL, NULL) -#define __Pyx_ErrRestoreWithState(type, value, tb) __Pyx_ErrRestoreInState(PyThreadState_GET(), type, value, tb) -#define __Pyx_ErrFetchWithState(type, value, tb) __Pyx_ErrFetchInState(PyThreadState_GET(), type, value, tb) -#define __Pyx_ErrRestore(type, value, tb) __Pyx_ErrRestoreInState(__pyx_tstate, type, value, tb) -#define __Pyx_ErrFetch(type, value, tb) __Pyx_ErrFetchInState(__pyx_tstate, type, value, tb) -static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb); -static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); -#if CYTHON_COMPILING_IN_CPYTHON -#define __Pyx_PyErr_SetNone(exc) (Py_INCREF(exc), __Pyx_ErrRestore((exc), NULL, NULL)) -#else -#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) -#endif -#else -#define __Pyx_PyErr_Clear() PyErr_Clear() -#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) -#define __Pyx_ErrRestoreWithState(type, value, tb) PyErr_Restore(type, value, tb) -#define __Pyx_ErrFetchWithState(type, value, tb) PyErr_Fetch(type, value, tb) -#define __Pyx_ErrRestoreInState(tstate, type, value, tb) PyErr_Restore(type, value, tb) -#define __Pyx_ErrFetchInState(tstate, type, value, tb) PyErr_Fetch(type, value, tb) -#define __Pyx_ErrRestore(type, value, tb) PyErr_Restore(type, value, tb) -#define __Pyx_ErrFetch(type, value, tb) PyErr_Fetch(type, value, tb) -#endif - -/* RaiseException.proto */ -static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); - -/* PyCFunctionFastCall.proto */ -#if CYTHON_FAST_PYCCALL -static CYTHON_INLINE PyObject *__Pyx_PyCFunction_FastCall(PyObject *func, PyObject **args, Py_ssize_t nargs); -#else -#define __Pyx_PyCFunction_FastCall(func, args, nargs) (assert(0), NULL) -#endif - -/* PyFunctionFastCall.proto */ -#if CYTHON_FAST_PYCALL -#define __Pyx_PyFunction_FastCall(func, args, nargs)\ - __Pyx_PyFunction_FastCallDict((func), (args), (nargs), NULL) -#if 1 || PY_VERSION_HEX < 0x030600B1 -static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs); -#else -#define __Pyx_PyFunction_FastCallDict(func, args, nargs, kwargs) _PyFunction_FastCallDict(func, args, nargs, kwargs) -#endif -#define __Pyx_BUILD_ASSERT_EXPR(cond)\ - (sizeof(char [1 - 2*!(cond)]) - 1) -#ifndef Py_MEMBER_SIZE -#define Py_MEMBER_SIZE(type, member) sizeof(((type *)0)->member) -#endif - static size_t __pyx_pyframe_localsplus_offset = 0; - #include "frameobject.h" - #define __Pxy_PyFrame_Initialize_Offsets()\ - ((void)__Pyx_BUILD_ASSERT_EXPR(sizeof(PyFrameObject) == offsetof(PyFrameObject, f_localsplus) + Py_MEMBER_SIZE(PyFrameObject, f_localsplus)),\ - (void)(__pyx_pyframe_localsplus_offset = ((size_t)PyFrame_Type.tp_basicsize) - Py_MEMBER_SIZE(PyFrameObject, f_localsplus))) - #define __Pyx_PyFrame_GetLocalsplus(frame)\ - (assert(__pyx_pyframe_localsplus_offset), (PyObject **)(((char *)(frame)) + __pyx_pyframe_localsplus_offset)) -#endif - -/* PyObjectCall2Args.proto */ -static CYTHON_UNUSED PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2); - -/* PyObjectCallMethO.proto */ -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg); -#endif - -/* PyObjectCallOneArg.proto */ -static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg); - -/* PyIntCompare.proto */ -static CYTHON_INLINE PyObject* __Pyx_PyInt_EqObjC(PyObject *op1, PyObject *op2, long intval, long inplace); - -/* GetItemInt.proto */ -#define __Pyx_GetItemInt(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ - (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ - __Pyx_GetItemInt_Fast(o, (Py_ssize_t)i, is_list, wraparound, boundscheck) :\ - (is_list ? (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL) :\ - __Pyx_GetItemInt_Generic(o, to_py_func(i)))) -#define __Pyx_GetItemInt_List(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ - (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ - __Pyx_GetItemInt_List_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\ - (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL)) -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, - int wraparound, int boundscheck); -#define __Pyx_GetItemInt_Tuple(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\ - (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\ - __Pyx_GetItemInt_Tuple_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\ - (PyErr_SetString(PyExc_IndexError, "tuple index out of range"), (PyObject*)NULL)) -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, - int wraparound, int boundscheck); -static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j); -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, - int is_list, int wraparound, int boundscheck); - -/* IncludeStringH.proto */ -#include - -/* BytesEquals.proto */ -static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals); - -/* UnicodeEquals.proto */ -static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals); - -/* StrEquals.proto */ -#if PY_MAJOR_VERSION >= 3 -#define __Pyx_PyString_Equals __Pyx_PyUnicode_Equals -#else -#define __Pyx_PyString_Equals __Pyx_PyBytes_Equals -#endif - -/* PyObjectSetAttrStr.proto */ -#if CYTHON_USE_TYPE_SLOTS -#define __Pyx_PyObject_DelAttrStr(o,n) __Pyx_PyObject_SetAttrStr(o, n, NULL) -static CYTHON_INLINE int __Pyx_PyObject_SetAttrStr(PyObject* obj, PyObject* attr_name, PyObject* value); -#else -#define __Pyx_PyObject_DelAttrStr(o,n) PyObject_DelAttr(o,n) -#define __Pyx_PyObject_SetAttrStr(o,n,v) PyObject_SetAttr(o,n,v) -#endif - -/* TypeImport.proto */ -#ifndef __PYX_HAVE_RT_ImportType_proto -#define __PYX_HAVE_RT_ImportType_proto -enum __Pyx_ImportType_CheckSize { - __Pyx_ImportType_CheckSize_Error = 0, - __Pyx_ImportType_CheckSize_Warn = 1, - __Pyx_ImportType_CheckSize_Ignore = 2 -}; -static PyTypeObject *__Pyx_ImportType(PyObject* module, const char *module_name, const char *class_name, size_t size, enum __Pyx_ImportType_CheckSize check_size); -#endif - -/* GetVTable.proto */ -static void* __Pyx_GetVtable(PyObject *dict); - -/* Import.proto */ -static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level); - -/* ImportFrom.proto */ -static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name); - -/* FetchCommonType.proto */ -static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type); - -/* CythonFunction.proto */ -#define __Pyx_CyFunction_USED 1 -#define __Pyx_CYFUNCTION_STATICMETHOD 0x01 -#define __Pyx_CYFUNCTION_CLASSMETHOD 0x02 -#define __Pyx_CYFUNCTION_CCLASS 0x04 -#define __Pyx_CyFunction_GetClosure(f)\ - (((__pyx_CyFunctionObject *) (f))->func_closure) -#define __Pyx_CyFunction_GetClassObj(f)\ - (((__pyx_CyFunctionObject *) (f))->func_classobj) -#define __Pyx_CyFunction_Defaults(type, f)\ - ((type *)(((__pyx_CyFunctionObject *) (f))->defaults)) -#define __Pyx_CyFunction_SetDefaultsGetter(f, g)\ - ((__pyx_CyFunctionObject *) (f))->defaults_getter = (g) -typedef struct { - PyCFunctionObject func; -#if PY_VERSION_HEX < 0x030500A0 - PyObject *func_weakreflist; -#endif - PyObject *func_dict; - PyObject *func_name; - PyObject *func_qualname; - PyObject *func_doc; - PyObject *func_globals; - PyObject *func_code; - PyObject *func_closure; - PyObject *func_classobj; - void *defaults; - int defaults_pyobjects; - int flags; - PyObject *defaults_tuple; - PyObject *defaults_kwdict; - PyObject *(*defaults_getter)(PyObject *); - PyObject *func_annotations; -} __pyx_CyFunctionObject; -static PyTypeObject *__pyx_CyFunctionType = 0; -#define __Pyx_CyFunction_Check(obj) (__Pyx_TypeCheck(obj, __pyx_CyFunctionType)) -#define __Pyx_CyFunction_NewEx(ml, flags, qualname, self, module, globals, code)\ - __Pyx_CyFunction_New(__pyx_CyFunctionType, ml, flags, qualname, self, module, globals, code) -static PyObject *__Pyx_CyFunction_New(PyTypeObject *, PyMethodDef *ml, - int flags, PyObject* qualname, - PyObject *self, - PyObject *module, PyObject *globals, - PyObject* code); -static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *m, - size_t size, - int pyobjects); -static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *m, - PyObject *tuple); -static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *m, - PyObject *dict); -static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *m, - PyObject *dict); -static int __pyx_CyFunction_init(void); - -/* SetNameInClass.proto */ -#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 -#define __Pyx_SetNameInClass(ns, name, value)\ - (likely(PyDict_CheckExact(ns)) ? _PyDict_SetItem_KnownHash(ns, name, value, ((PyASCIIObject *) name)->hash) : PyObject_SetItem(ns, name, value)) -#elif CYTHON_COMPILING_IN_CPYTHON -#define __Pyx_SetNameInClass(ns, name, value)\ - (likely(PyDict_CheckExact(ns)) ? PyDict_SetItem(ns, name, value) : PyObject_SetItem(ns, name, value)) -#else -#define __Pyx_SetNameInClass(ns, name, value) PyObject_SetItem(ns, name, value) -#endif - -/* CalculateMetaclass.proto */ -static PyObject *__Pyx_CalculateMetaclass(PyTypeObject *metaclass, PyObject *bases); - -/* Py3ClassCreate.proto */ -static PyObject *__Pyx_Py3MetaclassPrepare(PyObject *metaclass, PyObject *bases, PyObject *name, PyObject *qualname, - PyObject *mkw, PyObject *modname, PyObject *doc); -static PyObject *__Pyx_Py3ClassCreate(PyObject *metaclass, PyObject *name, PyObject *bases, PyObject *dict, - PyObject *mkw, int calculate_metaclass, int allow_py2_metaclass); - -/* CLineInTraceback.proto */ -#ifdef CYTHON_CLINE_IN_TRACEBACK -#define __Pyx_CLineForTraceback(tstate, c_line) (((CYTHON_CLINE_IN_TRACEBACK)) ? c_line : 0) -#else -static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line); -#endif - -/* CodeObjectCache.proto */ -typedef struct { - PyCodeObject* code_object; - int code_line; -} __Pyx_CodeObjectCacheEntry; -struct __Pyx_CodeObjectCache { - int count; - int max_count; - __Pyx_CodeObjectCacheEntry* entries; -}; -static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL}; -static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line); -static PyCodeObject *__pyx_find_code_object(int code_line); -static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object); - -/* AddTraceback.proto */ -static void __Pyx_AddTraceback(const char *funcname, int c_line, - int py_line, const char *filename); - -/* CIntToPy.proto */ -static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value); - -/* CIntToPy.proto */ -static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value); - -/* CIntToPy.proto */ -static CYTHON_INLINE PyObject* __Pyx_PyInt_From_unsigned_int(unsigned int value); - -/* CIntFromPy.proto */ -static CYTHON_INLINE unsigned int __Pyx_PyInt_As_unsigned_int(PyObject *); - -/* CIntFromPy.proto */ -static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *); - -/* CIntFromPy.proto */ -static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *); - -/* FastTypeChecks.proto */ -#if CYTHON_COMPILING_IN_CPYTHON -#define __Pyx_TypeCheck(obj, type) __Pyx_IsSubtype(Py_TYPE(obj), (PyTypeObject *)type) -static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b); -static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches(PyObject *err, PyObject *type); -static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *type1, PyObject *type2); -#else -#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type) -#define __Pyx_PyErr_GivenExceptionMatches(err, type) PyErr_GivenExceptionMatches(err, type) -#define __Pyx_PyErr_GivenExceptionMatches2(err, type1, type2) (PyErr_GivenExceptionMatches(err, type1) || PyErr_GivenExceptionMatches(err, type2)) -#endif -#define __Pyx_PyException_Check(obj) __Pyx_TypeCheck(obj, PyExc_Exception) - -/* CheckBinaryVersion.proto */ -static int __Pyx_check_binary_version(void); - -/* InitStrings.proto */ -static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); - - -/* Module declarations from 'cython' */ - -/* Module declarations from 'cpython.buffer' */ - -/* Module declarations from 'libc.string' */ - -/* Module declarations from 'libc.stdio' */ - -/* Module declarations from '__builtin__' */ - -/* Module declarations from 'cpython.type' */ -static PyTypeObject *__pyx_ptype_7cpython_4type_type = 0; - -/* Module declarations from 'cpython' */ - -/* Module declarations from 'cpython.object' */ - -/* Module declarations from 'cpython.bytes' */ - -/* Module declarations from 'numcodecs.compat_ext' */ -static PyTypeObject *__pyx_ptype_9numcodecs_10compat_ext_Buffer = 0; - -/* Module declarations from 'numcodecs.zfp' */ -#define __Pyx_MODULE_NAME "numcodecs.zfp" -extern int __pyx_module_is_main_numcodecs__zfp; -int __pyx_module_is_main_numcodecs__zfp = 0; - -/* Implementation of 'numcodecs.zfp' */ -static PyObject *__pyx_builtin_TypeError; -static PyObject *__pyx_builtin_ValueError; -static PyObject *__pyx_builtin_RuntimeError; -static const char __pyx_k_a[] = "a"; -static const char __pyx_k_c[] = "c"; -static const char __pyx_k_p[] = "p"; -static const char __pyx_k_r[] = "r"; -static const char __pyx_k_np[] = "np"; -static const char __pyx_k_nw[] = "nw"; -static const char __pyx_k_nx[] = "nx"; -static const char __pyx_k_ny[] = "ny"; -static const char __pyx_k_nz[] = "nz"; -static const char __pyx_k_Zfp[] = "Zfp"; -static const char __pyx_k_arr[] = "arr"; -static const char __pyx_k_buf[] = "buf"; -static const char __pyx_k_doc[] = "__doc__"; -static const char __pyx_k_out[] = "out"; -static const char __pyx_k_ret[] = "ret"; -static const char __pyx_k_sys[] = "sys"; -static const char __pyx_k_tol[] = "tol"; -static const char __pyx_k_zfp[] = "zfp"; -static const char __pyx_k_dest[] = "dest"; -static const char __pyx_k_init[] = "__init__"; -static const char __pyx_k_main[] = "__main__"; -static const char __pyx_k_mode[] = "mode"; -static const char __pyx_k_name[] = "__name__"; -static const char __pyx_k_ndim[] = "ndim"; -static const char __pyx_k_prec[] = "prec"; -static const char __pyx_k_rate[] = "rate"; -static const char __pyx_k_repr[] = "__repr__"; -static const char __pyx_k_self[] = "self"; -static const char __pyx_k_test[] = "__test__"; -static const char __pyx_k_view[] = "view"; -static const char __pyx_k_Codec[] = "Codec"; -static const char __pyx_k_dtype[] = "dtype"; -static const char __pyx_k_field[] = "field"; -static const char __pyx_k_flags[] = "flags"; -static const char __pyx_k_int32[] = "int32"; -static const char __pyx_k_int64[] = "int64"; -static const char __pyx_k_numpy[] = "numpy"; -static const char __pyx_k_shape[] = "shape"; -static const char __pyx_k_Buffer[] = "Buffer"; -static const char __pyx_k_decode[] = "decode"; -static const char __pyx_k_encode[] = "encode"; -static const char __pyx_k_import[] = "__import__"; -static const char __pyx_k_method[] = "method"; -static const char __pyx_k_minexp[] = "minexp"; -static const char __pyx_k_module[] = "__module__"; -static const char __pyx_k_source[] = "source"; -static const char __pyx_k_stream[] = "stream"; -static const char __pyx_k_stride[] = "stride"; -static const char __pyx_k_bufsize[] = "bufsize"; -static const char __pyx_k_float32[] = "float32"; -static const char __pyx_k_float64[] = "float64"; -static const char __pyx_k_maxbits[] = "maxbits"; -static const char __pyx_k_maxprec[] = "maxprec"; -static const char __pyx_k_minbits[] = "minbits"; -static const char __pyx_k_prepare[] = "__prepare__"; -static const char __pyx_k_reshape[] = "reshape"; -static const char __pyx_k_strides[] = "strides"; -static const char __pyx_k_version[] = "__version__"; -static const char __pyx_k_zfpmode[] = "zfpmode"; -static const char __pyx_k_codec_id[] = "codec_id"; -static const char __pyx_k_compress[] = "compress"; -static const char __pyx_k_dest_ptr[] = "dest_ptr"; -static const char __pyx_k_itemsize[] = "itemsize"; -static const char __pyx_k_qualname[] = "__qualname__"; -static const char __pyx_k_set_mode[] = "set_mode"; -static const char __pyx_k_set_rate[] = "set_rate"; -static const char __pyx_k_the_type[] = "the_type"; -static const char __pyx_k_TypeError[] = "TypeError"; -static const char __pyx_k_buf_shape[] = "buf_shape"; -static const char __pyx_k_datashape[] = "datashape"; -static const char __pyx_k_dest_size[] = "dest_size"; -static const char __pyx_k_metaclass[] = "__metaclass__"; -static const char __pyx_k_precision[] = "precision"; -static const char __pyx_k_tolerance[] = "tolerance"; -static const char __pyx_k_type_size[] = "type_size"; -static const char __pyx_k_ValueError[] = "ValueError"; -static const char __pyx_k_WRONG_MODE[] = "WRONG MODE"; -static const char __pyx_k_Zfp___init[] = "Zfp.__init__"; -static const char __pyx_k_Zfp___repr[] = "Zfp.__repr__"; -static const char __pyx_k_Zfp_decode[] = "Zfp.decode"; -static const char __pyx_k_Zfp_encode[] = "Zfp.encode"; -static const char __pyx_k_compat_ext[] = "compat_ext"; -static const char __pyx_k_decompress[] = "decompress"; -static const char __pyx_k_pyx_vtable[] = "__pyx_vtable__"; -static const char __pyx_k_set_minexp[] = "set_minexp"; -static const char __pyx_k_source_ptr[] = "source_ptr"; -static const char __pyx_k_the_method[] = "the_method"; -static const char __pyx_k_dest_buffer[] = "dest_buffer"; -static const char __pyx_k_input_array[] = "input_array"; -static const char __pyx_k_set_maxbits[] = "set_maxbits"; -static const char __pyx_k_set_maxprec[] = "set_maxprec"; -static const char __pyx_k_set_minbits[] = "set_minbits"; -static const char __pyx_k_source_size[] = "source_size"; -static const char __pyx_k_RuntimeError[] = "RuntimeError"; -static const char __pyx_k_f_contiguous[] = "f_contiguous"; -static const char __pyx_k_numcodecs_abc[] = "numcodecs.abc"; -static const char __pyx_k_numcodecs_zfp[] = "numcodecs.zfp"; -static const char __pyx_k_set_precision[] = "set_precision"; -static const char __pyx_k_set_tolerance[] = "set_tolerance"; -static const char __pyx_k_source_buffer[] = "source_buffer"; -static const char __pyx_k_CompressMethod[] = "CompressMethod"; -static const char __pyx_k_VERSION_STRING[] = "VERSION_STRING"; -static const char __pyx_k_ensure_ndarray[] = "ensure_ndarray"; -static const char __pyx_k_s_mode_r_tol_s[] = "%s(mode=%r,tol=%s)"; -static const char __pyx_k_compressed_size[] = "compressed_size"; -static const char __pyx_k_s_mode_r_prec_s[] = "%s(mode=%r,prec=%s)"; -static const char __pyx_k_s_mode_r_rate_s[] = "%s(mode=%r,rate=%s)"; -static const char __pyx_k_numcodecs_compat[] = "numcodecs.compat"; -static const char __pyx_k_ascontiguousarray[] = "ascontiguousarray"; -static const char __pyx_k_decompress_failed[] = "decompress failed"; -static const char __pyx_k_numcodecs_zfp_pyx[] = "numcodecs/zfp.pyx"; -static const char __pyx_k_cline_in_traceback[] = "cline_in_traceback"; -static const char __pyx_k_CompressMethod___init[] = "CompressMethod.__init__"; -static const char __pyx_k_Must_specify_zfp_mode[] = "Must specify zfp mode"; -static const char __pyx_k_zfp_compress_is_failed[] = "zfp_compress is failed"; -static const char __pyx_k_zfp_read_header_failed[] = "zfp_read_header failed"; -static const char __pyx_k_CompressMethod_set_mode[] = "CompressMethod.set_mode"; -static const char __pyx_k_CompressMethod_set_rate[] = "CompressMethod.set_rate"; -static const char __pyx_k_zfp_write_header_failed[] = "zfp_write_header failed"; -static const char __pyx_k_CompressMethod_set_minexp[] = "CompressMethod.set_minexp"; -static const char __pyx_k_ensure_contiguous_ndarray[] = "ensure_contiguous_ndarray"; -static const char __pyx_k_CompressMethod_set_maxbits[] = "CompressMethod.set_maxbits"; -static const char __pyx_k_CompressMethod_set_maxprec[] = "CompressMethod.set_maxprec"; -static const char __pyx_k_CompressMethod_set_minbits[] = "CompressMethod.set_minbits"; -static const char __pyx_k_CompressMethod_set_precision[] = "CompressMethod.set_precision"; -static const char __pyx_k_CompressMethod_set_tolerance[] = "CompressMethod.set_tolerance"; -static const char __pyx_k_Create_a_CompressMethod_object[] = "\n Create a CompressMethod object to store zfp mode and \n its parameters in Zfp class\n \n "; -static const char __pyx_k_The_dimension_of_data_should_be[] = "The dimension of data should be equal or less than 4, please reshape"; -static const char __pyx_k_Wrong_mode_please_set_mode_to_a[] = "Wrong mode, please set mode to 'a', 'p', 'r' or 'c'"; -static const char __pyx_k_s_mode_r_minbits_s_maxbits_s_mi[] = "%s(mode=%r,minbits=%s,maxbits=%s,minexp=%s,maxprec=%s)"; -static const char __pyx_k_Codec_providing_compression_usin[] = "Codec providing compression using zfp via the Python standard library.\n \n Attributes\n ----------\n mode(mode='a')\n Fixed accuracy compression.\n tol : float \n Absolue error tolerance, default 0.0\n \n mode(mode='p')\n Fixed precision compression.\n prec : int \n Uncompressed bits per value, can be 0-64 for double precision\n\n mode(mode='r')\n Fixed rate compression.\n rate : int \n Compressed bits per floating-point value, can be 0-64 for double precision\n\n mode(mode='c')\n Custom advanced compression.\n minbits : int\n Min bits per 4^d values in d dimensions\n maxbits : int\n Max bits per 4^d values in d dimensions, 0 for unlimited\n minexp : int\n Min bit plane, -1074 for all bit planes\n maxprec : int\n Max bits of precision per value, 0 for full \n "; -static const char __pyx_k_The_type_of_data_should_be_int32[] = "The type of data should be int32, int64, float or double"; -static PyObject *__pyx_n_s_Buffer; -static PyObject *__pyx_n_s_Codec; -static PyObject *__pyx_kp_s_Codec_providing_compression_usin; -static PyObject *__pyx_n_s_CompressMethod; -static PyObject *__pyx_n_s_CompressMethod___init; -static PyObject *__pyx_n_s_CompressMethod_set_maxbits; -static PyObject *__pyx_n_s_CompressMethod_set_maxprec; -static PyObject *__pyx_n_s_CompressMethod_set_minbits; -static PyObject *__pyx_n_s_CompressMethod_set_minexp; -static PyObject *__pyx_n_s_CompressMethod_set_mode; -static PyObject *__pyx_n_s_CompressMethod_set_precision; -static PyObject *__pyx_n_s_CompressMethod_set_rate; -static PyObject *__pyx_n_s_CompressMethod_set_tolerance; -static PyObject *__pyx_kp_s_Create_a_CompressMethod_object; -static PyObject *__pyx_kp_s_Must_specify_zfp_mode; -static PyObject *__pyx_n_s_RuntimeError; -static PyObject *__pyx_kp_s_The_dimension_of_data_should_be; -static PyObject *__pyx_kp_s_The_type_of_data_should_be_int32; -static PyObject *__pyx_n_s_TypeError; -static PyObject *__pyx_n_s_VERSION_STRING; -static PyObject *__pyx_n_s_ValueError; -static PyObject *__pyx_kp_s_WRONG_MODE; -static PyObject *__pyx_kp_s_Wrong_mode_please_set_mode_to_a; -static PyObject *__pyx_n_s_Zfp; -static PyObject *__pyx_n_s_Zfp___init; -static PyObject *__pyx_n_s_Zfp___repr; -static PyObject *__pyx_n_s_Zfp_decode; -static PyObject *__pyx_n_s_Zfp_encode; -static PyObject *__pyx_n_s_a; -static PyObject *__pyx_n_s_arr; -static PyObject *__pyx_n_s_ascontiguousarray; -static PyObject *__pyx_n_s_buf; -static PyObject *__pyx_n_s_buf_shape; -static PyObject *__pyx_n_s_bufsize; -static PyObject *__pyx_n_s_c; -static PyObject *__pyx_n_s_cline_in_traceback; -static PyObject *__pyx_n_s_codec_id; -static PyObject *__pyx_n_s_compat_ext; -static PyObject *__pyx_n_s_compress; -static PyObject *__pyx_n_s_compressed_size; -static PyObject *__pyx_n_s_datashape; -static PyObject *__pyx_n_s_decode; -static PyObject *__pyx_n_s_decompress; -static PyObject *__pyx_kp_s_decompress_failed; -static PyObject *__pyx_n_s_dest; -static PyObject *__pyx_n_s_dest_buffer; -static PyObject *__pyx_n_s_dest_ptr; -static PyObject *__pyx_n_s_dest_size; -static PyObject *__pyx_n_s_doc; -static PyObject *__pyx_n_s_dtype; -static PyObject *__pyx_n_s_encode; -static PyObject *__pyx_n_s_ensure_contiguous_ndarray; -static PyObject *__pyx_n_s_ensure_ndarray; -static PyObject *__pyx_n_s_f_contiguous; -static PyObject *__pyx_n_s_field; -static PyObject *__pyx_n_s_flags; -static PyObject *__pyx_n_s_float32; -static PyObject *__pyx_n_s_float64; -static PyObject *__pyx_n_s_import; -static PyObject *__pyx_n_s_init; -static PyObject *__pyx_n_s_input_array; -static PyObject *__pyx_n_s_int32; -static PyObject *__pyx_n_s_int64; -static PyObject *__pyx_n_s_itemsize; -static PyObject *__pyx_n_s_main; -static PyObject *__pyx_n_s_maxbits; -static PyObject *__pyx_n_s_maxprec; -static PyObject *__pyx_n_s_metaclass; -static PyObject *__pyx_n_s_method; -static PyObject *__pyx_n_s_minbits; -static PyObject *__pyx_n_s_minexp; -static PyObject *__pyx_n_s_mode; -static PyObject *__pyx_n_s_module; -static PyObject *__pyx_n_s_name; -static PyObject *__pyx_n_s_ndim; -static PyObject *__pyx_n_s_np; -static PyObject *__pyx_n_s_numcodecs_abc; -static PyObject *__pyx_n_s_numcodecs_compat; -static PyObject *__pyx_n_s_numcodecs_zfp; -static PyObject *__pyx_kp_s_numcodecs_zfp_pyx; -static PyObject *__pyx_n_s_numpy; -static PyObject *__pyx_n_s_nw; -static PyObject *__pyx_n_s_nx; -static PyObject *__pyx_n_s_ny; -static PyObject *__pyx_n_s_nz; -static PyObject *__pyx_n_s_out; -static PyObject *__pyx_n_s_p; -static PyObject *__pyx_n_s_prec; -static PyObject *__pyx_n_s_precision; -static PyObject *__pyx_n_s_prepare; -static PyObject *__pyx_n_s_pyx_vtable; -static PyObject *__pyx_n_s_qualname; -static PyObject *__pyx_n_s_r; -static PyObject *__pyx_n_s_rate; -static PyObject *__pyx_n_s_repr; -static PyObject *__pyx_n_s_reshape; -static PyObject *__pyx_n_s_ret; -static PyObject *__pyx_kp_s_s_mode_r_minbits_s_maxbits_s_mi; -static PyObject *__pyx_kp_s_s_mode_r_prec_s; -static PyObject *__pyx_kp_s_s_mode_r_rate_s; -static PyObject *__pyx_kp_s_s_mode_r_tol_s; -static PyObject *__pyx_n_s_self; -static PyObject *__pyx_n_s_set_maxbits; -static PyObject *__pyx_n_s_set_maxprec; -static PyObject *__pyx_n_s_set_minbits; -static PyObject *__pyx_n_s_set_minexp; -static PyObject *__pyx_n_s_set_mode; -static PyObject *__pyx_n_s_set_precision; -static PyObject *__pyx_n_s_set_rate; -static PyObject *__pyx_n_s_set_tolerance; -static PyObject *__pyx_n_s_shape; -static PyObject *__pyx_n_s_source; -static PyObject *__pyx_n_s_source_buffer; -static PyObject *__pyx_n_s_source_ptr; -static PyObject *__pyx_n_s_source_size; -static PyObject *__pyx_n_s_stream; -static PyObject *__pyx_n_s_stride; -static PyObject *__pyx_n_s_strides; -static PyObject *__pyx_n_s_sys; -static PyObject *__pyx_n_s_test; -static PyObject *__pyx_n_s_the_method; -static PyObject *__pyx_n_s_the_type; -static PyObject *__pyx_n_s_tol; -static PyObject *__pyx_n_s_tolerance; -static PyObject *__pyx_n_s_type_size; -static PyObject *__pyx_n_s_version; -static PyObject *__pyx_n_s_view; -static PyObject *__pyx_n_s_zfp; -static PyObject *__pyx_kp_s_zfp_compress_is_failed; -static PyObject *__pyx_kp_s_zfp_read_header_failed; -static PyObject *__pyx_kp_s_zfp_write_header_failed; -static PyObject *__pyx_n_s_zfpmode; -static PyObject *__pyx_pf_9numcodecs_3zfp_compress(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_input_array, PyObject *__pyx_v_method); /* proto */ -static PyObject *__pyx_pf_9numcodecs_3zfp_2decompress(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_source, PyObject *__pyx_v_dest); /* proto */ -static PyObject *__pyx_pf_9numcodecs_3zfp_14CompressMethod___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ -static PyObject *__pyx_pf_9numcodecs_3zfp_14CompressMethod_2set_mode(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_mode); /* proto */ -static PyObject *__pyx_pf_9numcodecs_3zfp_14CompressMethod_4set_tolerance(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_tol); /* proto */ -static PyObject *__pyx_pf_9numcodecs_3zfp_14CompressMethod_6set_precision(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_prec); /* proto */ -static PyObject *__pyx_pf_9numcodecs_3zfp_14CompressMethod_8set_rate(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_rate); /* proto */ -static PyObject *__pyx_pf_9numcodecs_3zfp_14CompressMethod_10set_minbits(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_minbits); /* proto */ -static PyObject *__pyx_pf_9numcodecs_3zfp_14CompressMethod_12set_maxbits(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_maxbits); /* proto */ -static PyObject *__pyx_pf_9numcodecs_3zfp_14CompressMethod_14set_maxprec(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_maxprec); /* proto */ -static PyObject *__pyx_pf_9numcodecs_3zfp_14CompressMethod_16set_minexp(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_minexp); /* proto */ -static PyObject *__pyx_pf_9numcodecs_3zfp_4__defaults__(CYTHON_UNUSED PyObject *__pyx_self); /* proto */ -static PyObject *__pyx_pf_9numcodecs_3zfp_3Zfp___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_mode, PyObject *__pyx_v_tol, PyObject *__pyx_v_prec, PyObject *__pyx_v_rate, PyObject *__pyx_v_minbits, PyObject *__pyx_v_maxbits, PyObject *__pyx_v_minexp, PyObject *__pyx_v_maxprec, CYTHON_UNUSED PyObject *__pyx_v_the_method); /* proto */ -static PyObject *__pyx_pf_9numcodecs_3zfp_3Zfp_2encode(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_buf); /* proto */ -static PyObject *__pyx_pf_9numcodecs_3zfp_3Zfp_4decode(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, PyObject *__pyx_v_buf, PyObject *__pyx_v_out); /* proto */ -static PyObject *__pyx_pf_9numcodecs_3zfp_3Zfp_6__repr__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */ -static PyObject *__pyx_float_0_0; -static PyObject *__pyx_float_0_01; -static PyObject *__pyx_int_0; -static PyObject *__pyx_int_1; -static PyObject *__pyx_int_2; -static PyObject *__pyx_int_3; -static PyObject *__pyx_int_4; -static PyObject *__pyx_int_8; -static PyObject *__pyx_tuple_; -static PyObject *__pyx_tuple__2; -static PyObject *__pyx_tuple__3; -static PyObject *__pyx_tuple__4; -static PyObject *__pyx_tuple__5; -static PyObject *__pyx_tuple__6; -static PyObject *__pyx_tuple__7; -static PyObject *__pyx_tuple__8; -static PyObject *__pyx_tuple__9; -static PyObject *__pyx_tuple__11; -static PyObject *__pyx_tuple__13; -static PyObject *__pyx_tuple__15; -static PyObject *__pyx_tuple__17; -static PyObject *__pyx_tuple__19; -static PyObject *__pyx_tuple__21; -static PyObject *__pyx_tuple__23; -static PyObject *__pyx_tuple__25; -static PyObject *__pyx_tuple__27; -static PyObject *__pyx_tuple__29; -static PyObject *__pyx_tuple__31; -static PyObject *__pyx_tuple__33; -static PyObject *__pyx_tuple__35; -static PyObject *__pyx_tuple__37; -static PyObject *__pyx_tuple__38; -static PyObject *__pyx_codeobj__10; -static PyObject *__pyx_codeobj__12; -static PyObject *__pyx_codeobj__14; -static PyObject *__pyx_codeobj__16; -static PyObject *__pyx_codeobj__18; -static PyObject *__pyx_codeobj__20; -static PyObject *__pyx_codeobj__22; -static PyObject *__pyx_codeobj__24; -static PyObject *__pyx_codeobj__26; -static PyObject *__pyx_codeobj__28; -static PyObject *__pyx_codeobj__30; -static PyObject *__pyx_codeobj__32; -static PyObject *__pyx_codeobj__34; -static PyObject *__pyx_codeobj__36; -static PyObject *__pyx_codeobj__39; -/* Late includes */ - -/* "numcodecs/zfp.pyx":104 - * - * - * def compress(input_array,method): # <<<<<<<<<<<<<< - * """Compress data. - * - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_9numcodecs_3zfp_1compress(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static char __pyx_doc_9numcodecs_3zfp_compress[] = "Compress data. \n \n Parameters\n ----------\n input_array : numpy array\n Data to be compressed. zfp can compress data better with arrays that have\n larger number of dimensions (1-4). So we want to reserve the dimension of the data\n\n method : a dictionary has compression mode and its relate compression parameters\n \n Returns\n -------\n dest : bytes\n Compressed data\n\n "; -static PyMethodDef __pyx_mdef_9numcodecs_3zfp_1compress = {"compress", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_9numcodecs_3zfp_1compress, METH_VARARGS|METH_KEYWORDS, __pyx_doc_9numcodecs_3zfp_compress}; -static PyObject *__pyx_pw_9numcodecs_3zfp_1compress(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_input_array = 0; - PyObject *__pyx_v_method = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("compress (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_input_array,&__pyx_n_s_method,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - CYTHON_FALLTHROUGH; - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_input_array)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - CYTHON_FALLTHROUGH; - case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_method)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("compress", 1, 2, 2, 1); __PYX_ERR(0, 104, __pyx_L3_error) - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "compress") < 0)) __PYX_ERR(0, 104, __pyx_L3_error) - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - } - __pyx_v_input_array = values[0]; - __pyx_v_method = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("compress", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 104, __pyx_L3_error) - __pyx_L3_error:; - __Pyx_AddTraceback("numcodecs.zfp.compress", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_9numcodecs_3zfp_compress(__pyx_self, __pyx_v_input_array, __pyx_v_method); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_9numcodecs_3zfp_compress(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_input_array, PyObject *__pyx_v_method) { - zfp_stream *__pyx_v_zfp; - bitstream *__pyx_v_stream; - zfp_field *__pyx_v_field; - char *__pyx_v_source_ptr; - char *__pyx_v_dest_ptr; - struct __pyx_obj_9numcodecs_10compat_ext_Buffer *__pyx_v_source_buffer = 0; - int __pyx_v_dest_size; - int __pyx_v_compressed_size; - PyObject *__pyx_v_dest = 0; - PyObject *__pyx_v_zfpmode = NULL; - zfp_type __pyx_v_the_type; - size_t __pyx_v_ret; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - char *__pyx_t_3; - PyObject *__pyx_t_4 = NULL; - int __pyx_t_5; - unsigned int __pyx_t_6; - int __pyx_t_7; - unsigned int __pyx_t_8; - int __pyx_t_9; - unsigned int __pyx_t_10; - int __pyx_t_11; - unsigned int __pyx_t_12; - int __pyx_t_13; - double __pyx_t_14; - __Pyx_RefNannySetupContext("compress", 0); - __Pyx_INCREF(__pyx_v_input_array); - - /* "numcodecs/zfp.pyx":134 - * bytes dest - * # get compression mode - * zfpmode = method['mode'] # <<<<<<<<<<<<<< - * - * # allocate an object to store all parameters - */ - __pyx_t_1 = __Pyx_PyObject_Dict_GetItem(__pyx_v_method, __pyx_n_s_mode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 134, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_v_zfpmode = __pyx_t_1; - __pyx_t_1 = 0; - - /* "numcodecs/zfp.pyx":137 - * - * # allocate an object to store all parameters - * field = zfp_field_alloc() # <<<<<<<<<<<<<< - * - * # setup source buffer - */ - __pyx_v_field = zfp_field_alloc(); - - /* "numcodecs/zfp.pyx":140 - * - * # setup source buffer - * source_buffer = Buffer(input_array,PyBUF_ANY_CONTIGUOUS) # <<<<<<<<<<<<<< - * source_ptr = source_buffer.ptr - * - */ - __pyx_t_1 = __Pyx_PyInt_From_int(PyBUF_ANY_CONTIGUOUS); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 140, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 140, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_v_input_array); - __Pyx_GIVEREF(__pyx_v_input_array); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_input_array); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1); - __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_9numcodecs_10compat_ext_Buffer), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 140, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_v_source_buffer = ((struct __pyx_obj_9numcodecs_10compat_ext_Buffer *)__pyx_t_1); - __pyx_t_1 = 0; - - /* "numcodecs/zfp.pyx":141 - * # setup source buffer - * source_buffer = Buffer(input_array,PyBUF_ANY_CONTIGUOUS) - * source_ptr = source_buffer.ptr # <<<<<<<<<<<<<< - * - * # determine type - */ - __pyx_t_3 = __pyx_v_source_buffer->ptr; - __pyx_v_source_ptr = __pyx_t_3; - - /* "numcodecs/zfp.pyx":147 - * # the_type= - * #else: - * if input_array.dtype == np.float32: # <<<<<<<<<<<<<< - * the_type = zfp_type_float - * elif input_array.dtype == np.float64: - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_array, __pyx_n_s_dtype); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 147, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 147, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_float32); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 147, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyObject_RichCompare(__pyx_t_1, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 147, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 147, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (__pyx_t_5) { - - /* "numcodecs/zfp.pyx":148 - * #else: - * if input_array.dtype == np.float32: - * the_type = zfp_type_float # <<<<<<<<<<<<<< - * elif input_array.dtype == np.float64: - * the_type = zfp_type_double - */ - __pyx_v_the_type = zfp_type_float; - - /* "numcodecs/zfp.pyx":147 - * # the_type= - * #else: - * if input_array.dtype == np.float32: # <<<<<<<<<<<<<< - * the_type = zfp_type_float - * elif input_array.dtype == np.float64: - */ - goto __pyx_L3; - } - - /* "numcodecs/zfp.pyx":149 - * if input_array.dtype == np.float32: - * the_type = zfp_type_float - * elif input_array.dtype == np.float64: # <<<<<<<<<<<<<< - * the_type = zfp_type_double - * elif input_array.dtype == np.int32: - */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_array, __pyx_n_s_dtype); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 149, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_np); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 149, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_float64); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 149, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = PyObject_RichCompare(__pyx_t_2, __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 149, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 149, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (__pyx_t_5) { - - /* "numcodecs/zfp.pyx":150 - * the_type = zfp_type_float - * elif input_array.dtype == np.float64: - * the_type = zfp_type_double # <<<<<<<<<<<<<< - * elif input_array.dtype == np.int32: - * the_type = zfp_type_int32 - */ - __pyx_v_the_type = zfp_type_double; - - /* "numcodecs/zfp.pyx":149 - * if input_array.dtype == np.float32: - * the_type = zfp_type_float - * elif input_array.dtype == np.float64: # <<<<<<<<<<<<<< - * the_type = zfp_type_double - * elif input_array.dtype == np.int32: - */ - goto __pyx_L3; - } - - /* "numcodecs/zfp.pyx":151 - * elif input_array.dtype == np.float64: - * the_type = zfp_type_double - * elif input_array.dtype == np.int32: # <<<<<<<<<<<<<< - * the_type = zfp_type_int32 - * elif input_array.dtype == np.int64: - */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_array, __pyx_n_s_dtype); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 151, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 151, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_int32); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 151, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyObject_RichCompare(__pyx_t_4, __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 151, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 151, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (__pyx_t_5) { - - /* "numcodecs/zfp.pyx":152 - * the_type = zfp_type_double - * elif input_array.dtype == np.int32: - * the_type = zfp_type_int32 # <<<<<<<<<<<<<< - * elif input_array.dtype == np.int64: - * the_type = zfp_type_int64 - */ - __pyx_v_the_type = zfp_type_int32; - - /* "numcodecs/zfp.pyx":151 - * elif input_array.dtype == np.float64: - * the_type = zfp_type_double - * elif input_array.dtype == np.int32: # <<<<<<<<<<<<<< - * the_type = zfp_type_int32 - * elif input_array.dtype == np.int64: - */ - goto __pyx_L3; - } - - /* "numcodecs/zfp.pyx":153 - * elif input_array.dtype == np.int32: - * the_type = zfp_type_int32 - * elif input_array.dtype == np.int64: # <<<<<<<<<<<<<< - * the_type = zfp_type_int64 - * else: - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_array, __pyx_n_s_dtype); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 153, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 153, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_int64); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 153, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = PyObject_RichCompare(__pyx_t_1, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 153, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 153, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - if (likely(__pyx_t_5)) { - - /* "numcodecs/zfp.pyx":154 - * the_type = zfp_type_int32 - * elif input_array.dtype == np.int64: - * the_type = zfp_type_int64 # <<<<<<<<<<<<<< - * else: - * raise TypeError("The type of data should be int32, int64, float or double") - */ - __pyx_v_the_type = zfp_type_int64; - - /* "numcodecs/zfp.pyx":153 - * elif input_array.dtype == np.int32: - * the_type = zfp_type_int32 - * elif input_array.dtype == np.int64: # <<<<<<<<<<<<<< - * the_type = zfp_type_int64 - * else: - */ - goto __pyx_L3; - } - - /* "numcodecs/zfp.pyx":156 - * the_type = zfp_type_int64 - * else: - * raise TypeError("The type of data should be int32, int64, float or double") # <<<<<<<<<<<<<< - * - * zfp_field_set_type(field,the_type) - */ - /*else*/ { - __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple_, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 156, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_Raise(__pyx_t_2, 0, 0, 0); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __PYX_ERR(0, 156, __pyx_L1_error) - } - __pyx_L3:; - - /* "numcodecs/zfp.pyx":158 - * raise TypeError("The type of data should be int32, int64, float or double") - * - * zfp_field_set_type(field,the_type) # <<<<<<<<<<<<<< - * zfp_field_set_pointer(field,source_ptr) - * - */ - (void)(zfp_field_set_type(__pyx_v_field, __pyx_v_the_type)); - - /* "numcodecs/zfp.pyx":159 - * - * zfp_field_set_type(field,the_type) - * zfp_field_set_pointer(field,source_ptr) # <<<<<<<<<<<<<< - * - * # convert F order array to C order array - */ - zfp_field_set_pointer(__pyx_v_field, __pyx_v_source_ptr); - - /* "numcodecs/zfp.pyx":162 - * - * # convert F order array to C order array - * if input_array.flags.f_contiguous: # <<<<<<<<<<<<<< - * input_array=np.ascontiguousarray(input_array) - * - */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_array, __pyx_n_s_flags); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 162, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_f_contiguous); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 162, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 162, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (__pyx_t_5) { - - /* "numcodecs/zfp.pyx":163 - * # convert F order array to C order array - * if input_array.flags.f_contiguous: - * input_array=np.ascontiguousarray(input_array) # <<<<<<<<<<<<<< - * - * # determine the dimensions and set dimensions of C order array - */ - __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 163, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_ascontiguousarray); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 163, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) { - __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1); - if (likely(__pyx_t_2)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); - __Pyx_INCREF(__pyx_t_2); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_1, function); - } - } - __pyx_t_4 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_2, __pyx_v_input_array) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_input_array); - __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0; - if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 163, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF_SET(__pyx_v_input_array, __pyx_t_4); - __pyx_t_4 = 0; - - /* "numcodecs/zfp.pyx":162 - * - * # convert F order array to C order array - * if input_array.flags.f_contiguous: # <<<<<<<<<<<<<< - * input_array=np.ascontiguousarray(input_array) - * - */ - } - - /* "numcodecs/zfp.pyx":166 - * - * # determine the dimensions and set dimensions of C order array - * if input_array.ndim == 1: # <<<<<<<<<<<<<< - * zfp_field_set_size_1d(field,input_array.shape[0]) - * zfp_field_set_stride_1d(field,input_array.strides[0]/input_array.itemsize) - */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_array, __pyx_n_s_ndim); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 166, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_1 = __Pyx_PyInt_EqObjC(__pyx_t_4, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 166, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 166, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (__pyx_t_5) { - - /* "numcodecs/zfp.pyx":167 - * # determine the dimensions and set dimensions of C order array - * if input_array.ndim == 1: - * zfp_field_set_size_1d(field,input_array.shape[0]) # <<<<<<<<<<<<<< - * zfp_field_set_stride_1d(field,input_array.strides[0]/input_array.itemsize) - * elif input_array.ndim == 2: - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_array, __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 167, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 167, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_6 = __Pyx_PyInt_As_unsigned_int(__pyx_t_4); if (unlikely((__pyx_t_6 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 167, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - zfp_field_set_size_1d(__pyx_v_field, __pyx_t_6); - - /* "numcodecs/zfp.pyx":168 - * if input_array.ndim == 1: - * zfp_field_set_size_1d(field,input_array.shape[0]) - * zfp_field_set_stride_1d(field,input_array.strides[0]/input_array.itemsize) # <<<<<<<<<<<<<< - * elif input_array.ndim == 2: - * zfp_field_set_size_2d(field,input_array.shape[1],input_array.shape[0]) - */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_array, __pyx_n_s_strides); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 168, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_1 = __Pyx_GetItemInt(__pyx_t_4, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 168, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_array, __pyx_n_s_itemsize); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 168, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_2 = __Pyx_PyNumber_Divide(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 168, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 168, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - zfp_field_set_stride_1d(__pyx_v_field, __pyx_t_7); - - /* "numcodecs/zfp.pyx":166 - * - * # determine the dimensions and set dimensions of C order array - * if input_array.ndim == 1: # <<<<<<<<<<<<<< - * zfp_field_set_size_1d(field,input_array.shape[0]) - * zfp_field_set_stride_1d(field,input_array.strides[0]/input_array.itemsize) - */ - goto __pyx_L5; - } - - /* "numcodecs/zfp.pyx":169 - * zfp_field_set_size_1d(field,input_array.shape[0]) - * zfp_field_set_stride_1d(field,input_array.strides[0]/input_array.itemsize) - * elif input_array.ndim == 2: # <<<<<<<<<<<<<< - * zfp_field_set_size_2d(field,input_array.shape[1],input_array.shape[0]) - * zfp_field_set_stride_2d(field,input_array.strides[1]/input_array.itemsize,input_array.strides[0]/input_array.itemsize) - */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_array, __pyx_n_s_ndim); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 169, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_4 = __Pyx_PyInt_EqObjC(__pyx_t_2, __pyx_int_2, 2, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 169, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 169, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (__pyx_t_5) { - - /* "numcodecs/zfp.pyx":170 - * zfp_field_set_stride_1d(field,input_array.strides[0]/input_array.itemsize) - * elif input_array.ndim == 2: - * zfp_field_set_size_2d(field,input_array.shape[1],input_array.shape[0]) # <<<<<<<<<<<<<< - * zfp_field_set_stride_2d(field,input_array.strides[1]/input_array.itemsize,input_array.strides[0]/input_array.itemsize) - * elif input_array.ndim == 3: - */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_array, __pyx_n_s_shape); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 170, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_4, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 170, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_6 = __Pyx_PyInt_As_unsigned_int(__pyx_t_2); if (unlikely((__pyx_t_6 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 170, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_array, __pyx_n_s_shape); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 170, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_2, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 170, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_8 = __Pyx_PyInt_As_unsigned_int(__pyx_t_4); if (unlikely((__pyx_t_8 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 170, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - zfp_field_set_size_2d(__pyx_v_field, __pyx_t_6, __pyx_t_8); - - /* "numcodecs/zfp.pyx":171 - * elif input_array.ndim == 2: - * zfp_field_set_size_2d(field,input_array.shape[1],input_array.shape[0]) - * zfp_field_set_stride_2d(field,input_array.strides[1]/input_array.itemsize,input_array.strides[0]/input_array.itemsize) # <<<<<<<<<<<<<< - * elif input_array.ndim == 3: - * zfp_field_set_size_3d(field,input_array.shape[2],input_array.shape[1],input_array.shape[0]) - */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_array, __pyx_n_s_strides); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 171, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_4, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 171, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_array, __pyx_n_s_itemsize); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 171, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_1 = __Pyx_PyNumber_Divide(__pyx_t_2, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 171, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 171, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_array, __pyx_n_s_strides); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 171, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 171, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_array, __pyx_n_s_itemsize); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 171, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyNumber_Divide(__pyx_t_4, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 171, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 171, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - zfp_field_set_stride_2d(__pyx_v_field, __pyx_t_7, __pyx_t_9); - - /* "numcodecs/zfp.pyx":169 - * zfp_field_set_size_1d(field,input_array.shape[0]) - * zfp_field_set_stride_1d(field,input_array.strides[0]/input_array.itemsize) - * elif input_array.ndim == 2: # <<<<<<<<<<<<<< - * zfp_field_set_size_2d(field,input_array.shape[1],input_array.shape[0]) - * zfp_field_set_stride_2d(field,input_array.strides[1]/input_array.itemsize,input_array.strides[0]/input_array.itemsize) - */ - goto __pyx_L5; - } - - /* "numcodecs/zfp.pyx":172 - * zfp_field_set_size_2d(field,input_array.shape[1],input_array.shape[0]) - * zfp_field_set_stride_2d(field,input_array.strides[1]/input_array.itemsize,input_array.strides[0]/input_array.itemsize) - * elif input_array.ndim == 3: # <<<<<<<<<<<<<< - * zfp_field_set_size_3d(field,input_array.shape[2],input_array.shape[1],input_array.shape[0]) - * zfp_field_set_stride_3d(field,input_array.strides[2]/input_array.itemsize,input_array.strides[1]/input_array.itemsize,input_array.strides[0]/input_array.itemsize) - */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_array, __pyx_n_s_ndim); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 172, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = __Pyx_PyInt_EqObjC(__pyx_t_2, __pyx_int_3, 3, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 172, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 172, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (__pyx_t_5) { - - /* "numcodecs/zfp.pyx":173 - * zfp_field_set_stride_2d(field,input_array.strides[1]/input_array.itemsize,input_array.strides[0]/input_array.itemsize) - * elif input_array.ndim == 3: - * zfp_field_set_size_3d(field,input_array.shape[2],input_array.shape[1],input_array.shape[0]) # <<<<<<<<<<<<<< - * zfp_field_set_stride_3d(field,input_array.strides[2]/input_array.itemsize,input_array.strides[1]/input_array.itemsize,input_array.strides[0]/input_array.itemsize) - * elif input_array.ndim == 4: - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_array, __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 173, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 173, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_8 = __Pyx_PyInt_As_unsigned_int(__pyx_t_2); if (unlikely((__pyx_t_8 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 173, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_array, __pyx_n_s_shape); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 173, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = __Pyx_GetItemInt(__pyx_t_2, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 173, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_6 = __Pyx_PyInt_As_unsigned_int(__pyx_t_1); if (unlikely((__pyx_t_6 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 173, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_array, __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 173, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 173, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_10 = __Pyx_PyInt_As_unsigned_int(__pyx_t_2); if (unlikely((__pyx_t_10 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 173, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - zfp_field_set_size_3d(__pyx_v_field, __pyx_t_8, __pyx_t_6, __pyx_t_10); - - /* "numcodecs/zfp.pyx":174 - * elif input_array.ndim == 3: - * zfp_field_set_size_3d(field,input_array.shape[2],input_array.shape[1],input_array.shape[0]) - * zfp_field_set_stride_3d(field,input_array.strides[2]/input_array.itemsize,input_array.strides[1]/input_array.itemsize,input_array.strides[0]/input_array.itemsize) # <<<<<<<<<<<<<< - * elif input_array.ndim == 4: - * zfp_field_set_size_4d(field,input_array.shape[3],input_array.shape[2],input_array.shape[1],input_array.shape[0]) - */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_array, __pyx_n_s_strides); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 174, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = __Pyx_GetItemInt(__pyx_t_2, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 174, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_array, __pyx_n_s_itemsize); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 174, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_4 = __Pyx_PyNumber_Divide(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 174, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_t_4); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 174, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_array, __pyx_n_s_strides); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 174, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_4, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 174, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_array, __pyx_n_s_itemsize); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 174, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_1 = __Pyx_PyNumber_Divide(__pyx_t_2, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 174, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 174, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_array, __pyx_n_s_strides); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 174, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 174, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_array, __pyx_n_s_itemsize); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 174, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyNumber_Divide(__pyx_t_4, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 174, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_11 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_11 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 174, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - zfp_field_set_stride_3d(__pyx_v_field, __pyx_t_9, __pyx_t_7, __pyx_t_11); - - /* "numcodecs/zfp.pyx":172 - * zfp_field_set_size_2d(field,input_array.shape[1],input_array.shape[0]) - * zfp_field_set_stride_2d(field,input_array.strides[1]/input_array.itemsize,input_array.strides[0]/input_array.itemsize) - * elif input_array.ndim == 3: # <<<<<<<<<<<<<< - * zfp_field_set_size_3d(field,input_array.shape[2],input_array.shape[1],input_array.shape[0]) - * zfp_field_set_stride_3d(field,input_array.strides[2]/input_array.itemsize,input_array.strides[1]/input_array.itemsize,input_array.strides[0]/input_array.itemsize) - */ - goto __pyx_L5; - } - - /* "numcodecs/zfp.pyx":175 - * zfp_field_set_size_3d(field,input_array.shape[2],input_array.shape[1],input_array.shape[0]) - * zfp_field_set_stride_3d(field,input_array.strides[2]/input_array.itemsize,input_array.strides[1]/input_array.itemsize,input_array.strides[0]/input_array.itemsize) - * elif input_array.ndim == 4: # <<<<<<<<<<<<<< - * zfp_field_set_size_4d(field,input_array.shape[3],input_array.shape[2],input_array.shape[1],input_array.shape[0]) - * zfp_field_set_stride_4d(field,input_array.strides[3]/input_array.itemsize,input_array.strides[2]/input_array.itemsize,input_array.strides[1]/input_array.itemsize,input_array.strides[0]/input_array.itemsize) - */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_array, __pyx_n_s_ndim); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 175, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = __Pyx_PyInt_EqObjC(__pyx_t_2, __pyx_int_4, 4, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 175, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 175, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (likely(__pyx_t_5)) { - - /* "numcodecs/zfp.pyx":176 - * zfp_field_set_stride_3d(field,input_array.strides[2]/input_array.itemsize,input_array.strides[1]/input_array.itemsize,input_array.strides[0]/input_array.itemsize) - * elif input_array.ndim == 4: - * zfp_field_set_size_4d(field,input_array.shape[3],input_array.shape[2],input_array.shape[1],input_array.shape[0]) # <<<<<<<<<<<<<< - * zfp_field_set_stride_4d(field,input_array.strides[3]/input_array.itemsize,input_array.strides[2]/input_array.itemsize,input_array.strides[1]/input_array.itemsize,input_array.strides[0]/input_array.itemsize) - * else: - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_array, __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 176, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, 3, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 176, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_10 = __Pyx_PyInt_As_unsigned_int(__pyx_t_2); if (unlikely((__pyx_t_10 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 176, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_array, __pyx_n_s_shape); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 176, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = __Pyx_GetItemInt(__pyx_t_2, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 176, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_6 = __Pyx_PyInt_As_unsigned_int(__pyx_t_1); if (unlikely((__pyx_t_6 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 176, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_array, __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 176, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 176, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_8 = __Pyx_PyInt_As_unsigned_int(__pyx_t_2); if (unlikely((__pyx_t_8 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 176, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_array, __pyx_n_s_shape); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 176, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = __Pyx_GetItemInt(__pyx_t_2, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 176, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_12 = __Pyx_PyInt_As_unsigned_int(__pyx_t_1); if (unlikely((__pyx_t_12 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 176, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - zfp_field_set_size_4d(__pyx_v_field, __pyx_t_10, __pyx_t_6, __pyx_t_8, __pyx_t_12); - - /* "numcodecs/zfp.pyx":177 - * elif input_array.ndim == 4: - * zfp_field_set_size_4d(field,input_array.shape[3],input_array.shape[2],input_array.shape[1],input_array.shape[0]) - * zfp_field_set_stride_4d(field,input_array.strides[3]/input_array.itemsize,input_array.strides[2]/input_array.itemsize,input_array.strides[1]/input_array.itemsize,input_array.strides[0]/input_array.itemsize) # <<<<<<<<<<<<<< - * else: - * raise ValueError("The dimension of data should be equal or less than 4, please reshape") - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_array, __pyx_n_s_strides); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 177, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, 3, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 177, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_array, __pyx_n_s_itemsize); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 177, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = __Pyx_PyNumber_Divide(__pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 177, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_11 = __Pyx_PyInt_As_int(__pyx_t_4); if (unlikely((__pyx_t_11 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 177, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_array, __pyx_n_s_strides); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 177, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_1 = __Pyx_GetItemInt(__pyx_t_4, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 177, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_array, __pyx_n_s_itemsize); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 177, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_2 = __Pyx_PyNumber_Divide(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 177, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 177, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_array, __pyx_n_s_strides); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 177, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_2, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 177, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_array, __pyx_n_s_itemsize); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 177, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = __Pyx_PyNumber_Divide(__pyx_t_4, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 177, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 177, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_array, __pyx_n_s_strides); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 177, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 177, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_array, __pyx_n_s_itemsize); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 177, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_4 = __Pyx_PyNumber_Divide(__pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 177, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_13 = __Pyx_PyInt_As_int(__pyx_t_4); if (unlikely((__pyx_t_13 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 177, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - zfp_field_set_stride_4d(__pyx_v_field, __pyx_t_11, __pyx_t_7, __pyx_t_9, __pyx_t_13); - - /* "numcodecs/zfp.pyx":175 - * zfp_field_set_size_3d(field,input_array.shape[2],input_array.shape[1],input_array.shape[0]) - * zfp_field_set_stride_3d(field,input_array.strides[2]/input_array.itemsize,input_array.strides[1]/input_array.itemsize,input_array.strides[0]/input_array.itemsize) - * elif input_array.ndim == 4: # <<<<<<<<<<<<<< - * zfp_field_set_size_4d(field,input_array.shape[3],input_array.shape[2],input_array.shape[1],input_array.shape[0]) - * zfp_field_set_stride_4d(field,input_array.strides[3]/input_array.itemsize,input_array.strides[2]/input_array.itemsize,input_array.strides[1]/input_array.itemsize,input_array.strides[0]/input_array.itemsize) - */ - goto __pyx_L5; - } - - /* "numcodecs/zfp.pyx":179 - * zfp_field_set_stride_4d(field,input_array.strides[3]/input_array.itemsize,input_array.strides[2]/input_array.itemsize,input_array.strides[1]/input_array.itemsize,input_array.strides[0]/input_array.itemsize) - * else: - * raise ValueError("The dimension of data should be equal or less than 4, please reshape") # <<<<<<<<<<<<<< - * # setup compression mode - * zfp=zfp_stream_open(NULL) - */ - /*else*/ { - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 179, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_Raise(__pyx_t_4, 0, 0, 0); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __PYX_ERR(0, 179, __pyx_L1_error) - } - __pyx_L5:; - - /* "numcodecs/zfp.pyx":181 - * raise ValueError("The dimension of data should be equal or less than 4, please reshape") - * # setup compression mode - * zfp=zfp_stream_open(NULL) # <<<<<<<<<<<<<< - * if zfpmode == 'a': - * zfp_stream_set_accuracy(zfp,method['tol']) - */ - __pyx_v_zfp = zfp_stream_open(NULL); - - /* "numcodecs/zfp.pyx":182 - * # setup compression mode - * zfp=zfp_stream_open(NULL) - * if zfpmode == 'a': # <<<<<<<<<<<<<< - * zfp_stream_set_accuracy(zfp,method['tol']) - * elif zfpmode == 'p': - */ - __pyx_t_5 = (__Pyx_PyString_Equals(__pyx_v_zfpmode, __pyx_n_s_a, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 182, __pyx_L1_error) - if (__pyx_t_5) { - - /* "numcodecs/zfp.pyx":183 - * zfp=zfp_stream_open(NULL) - * if zfpmode == 'a': - * zfp_stream_set_accuracy(zfp,method['tol']) # <<<<<<<<<<<<<< - * elif zfpmode == 'p': - * zfp_stream_set_precision(zfp,method['prec']) - */ - __pyx_t_4 = __Pyx_PyObject_Dict_GetItem(__pyx_v_method, __pyx_n_s_tol); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 183, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_14 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_14 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 183, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - (void)(zfp_stream_set_accuracy(__pyx_v_zfp, __pyx_t_14)); - - /* "numcodecs/zfp.pyx":182 - * # setup compression mode - * zfp=zfp_stream_open(NULL) - * if zfpmode == 'a': # <<<<<<<<<<<<<< - * zfp_stream_set_accuracy(zfp,method['tol']) - * elif zfpmode == 'p': - */ - goto __pyx_L6; - } - - /* "numcodecs/zfp.pyx":184 - * if zfpmode == 'a': - * zfp_stream_set_accuracy(zfp,method['tol']) - * elif zfpmode == 'p': # <<<<<<<<<<<<<< - * zfp_stream_set_precision(zfp,method['prec']) - * elif zfpmode == 'r': - */ - __pyx_t_5 = (__Pyx_PyString_Equals(__pyx_v_zfpmode, __pyx_n_s_p, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 184, __pyx_L1_error) - if (__pyx_t_5) { - - /* "numcodecs/zfp.pyx":185 - * zfp_stream_set_accuracy(zfp,method['tol']) - * elif zfpmode == 'p': - * zfp_stream_set_precision(zfp,method['prec']) # <<<<<<<<<<<<<< - * elif zfpmode == 'r': - * zfp_stream_set_rate(zfp,method['rate'],the_type,input_array.ndim,0) - */ - __pyx_t_4 = __Pyx_PyObject_Dict_GetItem(__pyx_v_method, __pyx_n_s_prec); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 185, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_12 = __Pyx_PyInt_As_unsigned_int(__pyx_t_4); if (unlikely((__pyx_t_12 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 185, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - (void)(zfp_stream_set_precision(__pyx_v_zfp, __pyx_t_12)); - - /* "numcodecs/zfp.pyx":184 - * if zfpmode == 'a': - * zfp_stream_set_accuracy(zfp,method['tol']) - * elif zfpmode == 'p': # <<<<<<<<<<<<<< - * zfp_stream_set_precision(zfp,method['prec']) - * elif zfpmode == 'r': - */ - goto __pyx_L6; - } - - /* "numcodecs/zfp.pyx":186 - * elif zfpmode == 'p': - * zfp_stream_set_precision(zfp,method['prec']) - * elif zfpmode == 'r': # <<<<<<<<<<<<<< - * zfp_stream_set_rate(zfp,method['rate'],the_type,input_array.ndim,0) - * elif zfpmode =='c': - */ - __pyx_t_5 = (__Pyx_PyString_Equals(__pyx_v_zfpmode, __pyx_n_s_r, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 186, __pyx_L1_error) - if (__pyx_t_5) { - - /* "numcodecs/zfp.pyx":187 - * zfp_stream_set_precision(zfp,method['prec']) - * elif zfpmode == 'r': - * zfp_stream_set_rate(zfp,method['rate'],the_type,input_array.ndim,0) # <<<<<<<<<<<<<< - * elif zfpmode =='c': - * zfp_stream_set_params(zfp,method['minbits'],method['maxbits'],method['maxprec'],method['minexp']) - */ - __pyx_t_4 = __Pyx_PyObject_Dict_GetItem(__pyx_v_method, __pyx_n_s_rate); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 187, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_14 = __pyx_PyFloat_AsDouble(__pyx_t_4); if (unlikely((__pyx_t_14 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 187, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_input_array, __pyx_n_s_ndim); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 187, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_12 = __Pyx_PyInt_As_unsigned_int(__pyx_t_4); if (unlikely((__pyx_t_12 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 187, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - (void)(zfp_stream_set_rate(__pyx_v_zfp, __pyx_t_14, __pyx_v_the_type, __pyx_t_12, 0)); - - /* "numcodecs/zfp.pyx":186 - * elif zfpmode == 'p': - * zfp_stream_set_precision(zfp,method['prec']) - * elif zfpmode == 'r': # <<<<<<<<<<<<<< - * zfp_stream_set_rate(zfp,method['rate'],the_type,input_array.ndim,0) - * elif zfpmode =='c': - */ - goto __pyx_L6; - } - - /* "numcodecs/zfp.pyx":188 - * elif zfpmode == 'r': - * zfp_stream_set_rate(zfp,method['rate'],the_type,input_array.ndim,0) - * elif zfpmode =='c': # <<<<<<<<<<<<<< - * zfp_stream_set_params(zfp,method['minbits'],method['maxbits'],method['maxprec'],method['minexp']) - * else: - */ - __pyx_t_5 = (__Pyx_PyString_Equals(__pyx_v_zfpmode, __pyx_n_s_c, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 188, __pyx_L1_error) - if (likely(__pyx_t_5)) { - - /* "numcodecs/zfp.pyx":189 - * zfp_stream_set_rate(zfp,method['rate'],the_type,input_array.ndim,0) - * elif zfpmode =='c': - * zfp_stream_set_params(zfp,method['minbits'],method['maxbits'],method['maxprec'],method['minexp']) # <<<<<<<<<<<<<< - * else: - * raise ValueError('Must specify zfp mode') - */ - __pyx_t_4 = __Pyx_PyObject_Dict_GetItem(__pyx_v_method, __pyx_n_s_minbits); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 189, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_12 = __Pyx_PyInt_As_unsigned_int(__pyx_t_4); if (unlikely((__pyx_t_12 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 189, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Dict_GetItem(__pyx_v_method, __pyx_n_s_maxbits); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 189, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_8 = __Pyx_PyInt_As_unsigned_int(__pyx_t_4); if (unlikely((__pyx_t_8 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 189, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Dict_GetItem(__pyx_v_method, __pyx_n_s_maxprec); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 189, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_6 = __Pyx_PyInt_As_unsigned_int(__pyx_t_4); if (unlikely((__pyx_t_6 == (unsigned int)-1) && PyErr_Occurred())) __PYX_ERR(0, 189, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyObject_Dict_GetItem(__pyx_v_method, __pyx_n_s_minexp); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 189, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_13 = __Pyx_PyInt_As_int(__pyx_t_4); if (unlikely((__pyx_t_13 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 189, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - (void)(zfp_stream_set_params(__pyx_v_zfp, __pyx_t_12, __pyx_t_8, __pyx_t_6, __pyx_t_13)); - - /* "numcodecs/zfp.pyx":188 - * elif zfpmode == 'r': - * zfp_stream_set_rate(zfp,method['rate'],the_type,input_array.ndim,0) - * elif zfpmode =='c': # <<<<<<<<<<<<<< - * zfp_stream_set_params(zfp,method['minbits'],method['maxbits'],method['maxprec'],method['minexp']) - * else: - */ - goto __pyx_L6; - } - - /* "numcodecs/zfp.pyx":191 - * zfp_stream_set_params(zfp,method['minbits'],method['maxbits'],method['maxprec'],method['minexp']) - * else: - * raise ValueError('Must specify zfp mode') # <<<<<<<<<<<<<< - * - * # setup destination - */ - /*else*/ { - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__3, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 191, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_Raise(__pyx_t_4, 0, 0, 0); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __PYX_ERR(0, 191, __pyx_L1_error) - } - __pyx_L6:; - - /* "numcodecs/zfp.pyx":194 - * - * # setup destination - * dest_size = zfp_stream_maximum_size(zfp,field) # <<<<<<<<<<<<<< - * dest = PyBytes_FromStringAndSize(NULL,dest_size) - * dest_ptr = PyBytes_AS_STRING(dest) - */ - __pyx_v_dest_size = zfp_stream_maximum_size(__pyx_v_zfp, __pyx_v_field); - - /* "numcodecs/zfp.pyx":195 - * # setup destination - * dest_size = zfp_stream_maximum_size(zfp,field) - * dest = PyBytes_FromStringAndSize(NULL,dest_size) # <<<<<<<<<<<<<< - * dest_ptr = PyBytes_AS_STRING(dest) - * stream = stream_open(dest_ptr,dest_size) - */ - __pyx_t_4 = PyBytes_FromStringAndSize(NULL, __pyx_v_dest_size); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 195, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_v_dest = ((PyObject*)__pyx_t_4); - __pyx_t_4 = 0; - - /* "numcodecs/zfp.pyx":196 - * dest_size = zfp_stream_maximum_size(zfp,field) - * dest = PyBytes_FromStringAndSize(NULL,dest_size) - * dest_ptr = PyBytes_AS_STRING(dest) # <<<<<<<<<<<<<< - * stream = stream_open(dest_ptr,dest_size) - * zfp_stream_set_bit_stream(zfp,stream) - */ - __pyx_v_dest_ptr = PyBytes_AS_STRING(__pyx_v_dest); - - /* "numcodecs/zfp.pyx":197 - * dest = PyBytes_FromStringAndSize(NULL,dest_size) - * dest_ptr = PyBytes_AS_STRING(dest) - * stream = stream_open(dest_ptr,dest_size) # <<<<<<<<<<<<<< - * zfp_stream_set_bit_stream(zfp,stream) - * # currently only use serial execution - */ - __pyx_v_stream = stream_open(__pyx_v_dest_ptr, __pyx_v_dest_size); - - /* "numcodecs/zfp.pyx":198 - * dest_ptr = PyBytes_AS_STRING(dest) - * stream = stream_open(dest_ptr,dest_size) - * zfp_stream_set_bit_stream(zfp,stream) # <<<<<<<<<<<<<< - * # currently only use serial execution - * zfp_stream_set_execution(zfp,zfp_exec_serial) - */ - zfp_stream_set_bit_stream(__pyx_v_zfp, __pyx_v_stream); - - /* "numcodecs/zfp.pyx":200 - * zfp_stream_set_bit_stream(zfp,stream) - * # currently only use serial execution - * zfp_stream_set_execution(zfp,zfp_exec_serial) # <<<<<<<<<<<<<< - * - * # perform compression - */ - (void)(zfp_stream_set_execution(__pyx_v_zfp, zfp_exec_serial)); - - /* "numcodecs/zfp.pyx":203 - * - * # perform compression - * ret = zfp_write_header(zfp,field,ZFP_HEADER_FULL) # <<<<<<<<<<<<<< - * if not ret: - * raise RuntimeError("zfp_write_header failed") - */ - __pyx_v_ret = zfp_write_header(__pyx_v_zfp, __pyx_v_field, ZFP_HEADER_FULL); - - /* "numcodecs/zfp.pyx":204 - * # perform compression - * ret = zfp_write_header(zfp,field,ZFP_HEADER_FULL) - * if not ret: # <<<<<<<<<<<<<< - * raise RuntimeError("zfp_write_header failed") - * compressed_size = zfp_compress(zfp,field) - */ - __pyx_t_5 = ((!(__pyx_v_ret != 0)) != 0); - if (unlikely(__pyx_t_5)) { - - /* "numcodecs/zfp.pyx":205 - * ret = zfp_write_header(zfp,field,ZFP_HEADER_FULL) - * if not ret: - * raise RuntimeError("zfp_write_header failed") # <<<<<<<<<<<<<< - * compressed_size = zfp_compress(zfp,field) - * if not compressed_size: - */ - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_RuntimeError, __pyx_tuple__4, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 205, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_Raise(__pyx_t_4, 0, 0, 0); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __PYX_ERR(0, 205, __pyx_L1_error) - - /* "numcodecs/zfp.pyx":204 - * # perform compression - * ret = zfp_write_header(zfp,field,ZFP_HEADER_FULL) - * if not ret: # <<<<<<<<<<<<<< - * raise RuntimeError("zfp_write_header failed") - * compressed_size = zfp_compress(zfp,field) - */ - } - - /* "numcodecs/zfp.pyx":206 - * if not ret: - * raise RuntimeError("zfp_write_header failed") - * compressed_size = zfp_compress(zfp,field) # <<<<<<<<<<<<<< - * if not compressed_size: - * raise RuntimeError("zfp_compress is failed") - */ - __pyx_v_compressed_size = zfp_compress(__pyx_v_zfp, __pyx_v_field); - - /* "numcodecs/zfp.pyx":207 - * raise RuntimeError("zfp_write_header failed") - * compressed_size = zfp_compress(zfp,field) - * if not compressed_size: # <<<<<<<<<<<<<< - * raise RuntimeError("zfp_compress is failed") - * - */ - __pyx_t_5 = ((!(__pyx_v_compressed_size != 0)) != 0); - if (unlikely(__pyx_t_5)) { - - /* "numcodecs/zfp.pyx":208 - * compressed_size = zfp_compress(zfp,field) - * if not compressed_size: - * raise RuntimeError("zfp_compress is failed") # <<<<<<<<<<<<<< - * - * # release buffers - */ - __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_RuntimeError, __pyx_tuple__5, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 208, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_Raise(__pyx_t_4, 0, 0, 0); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __PYX_ERR(0, 208, __pyx_L1_error) - - /* "numcodecs/zfp.pyx":207 - * raise RuntimeError("zfp_write_header failed") - * compressed_size = zfp_compress(zfp,field) - * if not compressed_size: # <<<<<<<<<<<<<< - * raise RuntimeError("zfp_compress is failed") - * - */ - } - - /* "numcodecs/zfp.pyx":211 - * - * # release buffers - * source_buffer.release() # <<<<<<<<<<<<<< - * zfp_field_free(field) - * zfp_stream_close(zfp) - */ - __pyx_t_4 = ((struct __pyx_vtabstruct_9numcodecs_10compat_ext_Buffer *)__pyx_v_source_buffer->__pyx_vtab)->release(__pyx_v_source_buffer, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 211, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "numcodecs/zfp.pyx":212 - * # release buffers - * source_buffer.release() - * zfp_field_free(field) # <<<<<<<<<<<<<< - * zfp_stream_close(zfp) - * stream_close(stream) - */ - zfp_field_free(__pyx_v_field); - - /* "numcodecs/zfp.pyx":213 - * source_buffer.release() - * zfp_field_free(field) - * zfp_stream_close(zfp) # <<<<<<<<<<<<<< - * stream_close(stream) - * - */ - zfp_stream_close(__pyx_v_zfp); - - /* "numcodecs/zfp.pyx":214 - * zfp_field_free(field) - * zfp_stream_close(zfp) - * stream_close(stream) # <<<<<<<<<<<<<< - * - * return dest[:compressed_size] - */ - (void)(stream_close(__pyx_v_stream)); - - /* "numcodecs/zfp.pyx":216 - * stream_close(stream) - * - * return dest[:compressed_size] # <<<<<<<<<<<<<< - * - * def decompress(source,dest=None): - */ - __Pyx_XDECREF(__pyx_r); - if (unlikely(__pyx_v_dest == Py_None)) { - PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable"); - __PYX_ERR(0, 216, __pyx_L1_error) - } - __pyx_t_4 = PySequence_GetSlice(__pyx_v_dest, 0, __pyx_v_compressed_size); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 216, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_r = __pyx_t_4; - __pyx_t_4 = 0; - goto __pyx_L0; - - /* "numcodecs/zfp.pyx":104 - * - * - * def compress(input_array,method): # <<<<<<<<<<<<<< - * """Compress data. - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_AddTraceback("numcodecs.zfp.compress", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF((PyObject *)__pyx_v_source_buffer); - __Pyx_XDECREF(__pyx_v_dest); - __Pyx_XDECREF(__pyx_v_zfpmode); - __Pyx_XDECREF(__pyx_v_input_array); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "numcodecs/zfp.pyx":218 - * return dest[:compressed_size] - * - * def decompress(source,dest=None): # <<<<<<<<<<<<<< - * """Decompress data. - * - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_9numcodecs_3zfp_3decompress(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static char __pyx_doc_9numcodecs_3zfp_2decompress[] = "Decompress data.\n\n Parameters\n ----------\n source : bytes-like\n Compressed data, including zfp header. Can be any object supporting the\n buffer protocol\n dest : array-like, optional\n \n Returns \n -------\n dest : array-like\n Object containing decompressed data\n \n "; -static PyMethodDef __pyx_mdef_9numcodecs_3zfp_3decompress = {"decompress", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_9numcodecs_3zfp_3decompress, METH_VARARGS|METH_KEYWORDS, __pyx_doc_9numcodecs_3zfp_2decompress}; -static PyObject *__pyx_pw_9numcodecs_3zfp_3decompress(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_source = 0; - PyObject *__pyx_v_dest = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("decompress (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_source,&__pyx_n_s_dest,0}; - PyObject* values[2] = {0,0}; - values[1] = ((PyObject *)Py_None); - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - CYTHON_FALLTHROUGH; - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_source)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - CYTHON_FALLTHROUGH; - case 1: - if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dest); - if (value) { values[1] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "decompress") < 0)) __PYX_ERR(0, 218, __pyx_L3_error) - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - break; - default: goto __pyx_L5_argtuple_error; - } - } - __pyx_v_source = values[0]; - __pyx_v_dest = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("decompress", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 218, __pyx_L3_error) - __pyx_L3_error:; - __Pyx_AddTraceback("numcodecs.zfp.decompress", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_9numcodecs_3zfp_2decompress(__pyx_self, __pyx_v_source, __pyx_v_dest); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_9numcodecs_3zfp_2decompress(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_source, PyObject *__pyx_v_dest) { - zfp_stream *__pyx_v_zfp; - bitstream *__pyx_v_stream; - zfp_field *__pyx_v_field; - struct __pyx_obj_9numcodecs_10compat_ext_Buffer *__pyx_v_source_buffer = 0; - struct __pyx_obj_9numcodecs_10compat_ext_Buffer *__pyx_v_dest_buffer = 0; - char *__pyx_v_source_ptr; - char *__pyx_v_dest_ptr; - int __pyx_v_source_size; - size_t __pyx_v_ret; - PyObject *__pyx_v_the_type = NULL; - PyObject *__pyx_v_type_size = NULL; - unsigned int __pyx_v_nx; - unsigned int __pyx_v_ny; - unsigned int __pyx_v_nz; - unsigned int __pyx_v_nw; - PyObject *__pyx_v_datashape = NULL; - PyObject *__pyx_v_arr = NULL; - PyObject *__pyx_v_buf_shape = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - char *__pyx_t_3; - size_t __pyx_t_4; - int __pyx_t_5; - unsigned int __pyx_t_6; - unsigned int __pyx_t_7; - unsigned int __pyx_t_8; - unsigned int __pyx_t_9; - long __pyx_t_10; - long __pyx_t_11; - long __pyx_t_12; - long __pyx_t_13; - int __pyx_t_14; - Py_ssize_t __pyx_t_15; - PyObject *__pyx_t_16 = NULL; - PyObject *__pyx_t_17 = NULL; - PyObject *__pyx_t_18 = NULL; - __Pyx_RefNannySetupContext("decompress", 0); - __Pyx_INCREF(__pyx_v_dest); - - /* "numcodecs/zfp.pyx":239 - * zfp_field* field - * Buffer source_buffer - * Buffer dest_buffer = None # <<<<<<<<<<<<<< - * char *source_ptr - * char *dest_ptr - */ - __Pyx_INCREF(Py_None); - __pyx_v_dest_buffer = ((struct __pyx_obj_9numcodecs_10compat_ext_Buffer *)Py_None); - - /* "numcodecs/zfp.pyx":246 - * - * # setup source buffer - * source_buffer = Buffer(source, PyBUF_ANY_CONTIGUOUS) # <<<<<<<<<<<<<< - * source_ptr = source_buffer.ptr - * source_size = source_buffer.nbytes - */ - __pyx_t_1 = __Pyx_PyInt_From_int(PyBUF_ANY_CONTIGUOUS); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 246, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 246, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_v_source); - __Pyx_GIVEREF(__pyx_v_source); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_source); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1); - __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_9numcodecs_10compat_ext_Buffer), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 246, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_v_source_buffer = ((struct __pyx_obj_9numcodecs_10compat_ext_Buffer *)__pyx_t_1); - __pyx_t_1 = 0; - - /* "numcodecs/zfp.pyx":247 - * # setup source buffer - * source_buffer = Buffer(source, PyBUF_ANY_CONTIGUOUS) - * source_ptr = source_buffer.ptr # <<<<<<<<<<<<<< - * source_size = source_buffer.nbytes - * - */ - __pyx_t_3 = __pyx_v_source_buffer->ptr; - __pyx_v_source_ptr = __pyx_t_3; - - /* "numcodecs/zfp.pyx":248 - * source_buffer = Buffer(source, PyBUF_ANY_CONTIGUOUS) - * source_ptr = source_buffer.ptr - * source_size = source_buffer.nbytes # <<<<<<<<<<<<<< - * - * # setup zfp object - */ - __pyx_t_4 = __pyx_v_source_buffer->nbytes; - __pyx_v_source_size = __pyx_t_4; - - /* "numcodecs/zfp.pyx":251 - * - * # setup zfp object - * field = zfp_field_alloc() # <<<<<<<<<<<<<< - * zfp = zfp_stream_open(NULL) - * stream = stream_open(source_ptr,source_size) - */ - __pyx_v_field = zfp_field_alloc(); - - /* "numcodecs/zfp.pyx":252 - * # setup zfp object - * field = zfp_field_alloc() - * zfp = zfp_stream_open(NULL) # <<<<<<<<<<<<<< - * stream = stream_open(source_ptr,source_size) - * zfp_stream_set_bit_stream(zfp,stream) - */ - __pyx_v_zfp = zfp_stream_open(NULL); - - /* "numcodecs/zfp.pyx":253 - * field = zfp_field_alloc() - * zfp = zfp_stream_open(NULL) - * stream = stream_open(source_ptr,source_size) # <<<<<<<<<<<<<< - * zfp_stream_set_bit_stream(zfp,stream) - * zfp_stream_rewind(zfp) - */ - __pyx_v_stream = stream_open(__pyx_v_source_ptr, __pyx_v_source_size); - - /* "numcodecs/zfp.pyx":254 - * zfp = zfp_stream_open(NULL) - * stream = stream_open(source_ptr,source_size) - * zfp_stream_set_bit_stream(zfp,stream) # <<<<<<<<<<<<<< - * zfp_stream_rewind(zfp) - * - */ - zfp_stream_set_bit_stream(__pyx_v_zfp, __pyx_v_stream); - - /* "numcodecs/zfp.pyx":255 - * stream = stream_open(source_ptr,source_size) - * zfp_stream_set_bit_stream(zfp,stream) - * zfp_stream_rewind(zfp) # <<<<<<<<<<<<<< - * - * # read zfp header - */ - zfp_stream_rewind(__pyx_v_zfp); - - /* "numcodecs/zfp.pyx":258 - * - * # read zfp header - * ret = zfp_read_header(zfp,field,ZFP_HEADER_FULL); # <<<<<<<<<<<<<< - * if not ret: - * raise RuntimeError("zfp_read_header failed") - */ - __pyx_v_ret = zfp_read_header(__pyx_v_zfp, __pyx_v_field, ZFP_HEADER_FULL); - - /* "numcodecs/zfp.pyx":259 - * # read zfp header - * ret = zfp_read_header(zfp,field,ZFP_HEADER_FULL); - * if not ret: # <<<<<<<<<<<<<< - * raise RuntimeError("zfp_read_header failed") - * - */ - __pyx_t_5 = ((!(__pyx_v_ret != 0)) != 0); - if (unlikely(__pyx_t_5)) { - - /* "numcodecs/zfp.pyx":260 - * ret = zfp_read_header(zfp,field,ZFP_HEADER_FULL); - * if not ret: - * raise RuntimeError("zfp_read_header failed") # <<<<<<<<<<<<<< - * - * # determine destination data type - */ - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_RuntimeError, __pyx_tuple__6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 260, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_Raise(__pyx_t_1, 0, 0, 0); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __PYX_ERR(0, 260, __pyx_L1_error) - - /* "numcodecs/zfp.pyx":259 - * # read zfp header - * ret = zfp_read_header(zfp,field,ZFP_HEADER_FULL); - * if not ret: # <<<<<<<<<<<<<< - * raise RuntimeError("zfp_read_header failed") - * - */ - } - - /* "numcodecs/zfp.pyx":263 - * - * # determine destination data type - * if field._type == zfp_type_float: # <<<<<<<<<<<<<< - * the_type = np.float32 - * type_size = 4 - */ - switch (__pyx_v_field->type) { - case zfp_type_float: - - /* "numcodecs/zfp.pyx":264 - * # determine destination data type - * if field._type == zfp_type_float: - * the_type = np.float32 # <<<<<<<<<<<<<< - * type_size = 4 - * elif field._type == zfp_type_double: - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 264, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_float32); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 264, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_the_type = __pyx_t_2; - __pyx_t_2 = 0; - - /* "numcodecs/zfp.pyx":265 - * if field._type == zfp_type_float: - * the_type = np.float32 - * type_size = 4 # <<<<<<<<<<<<<< - * elif field._type == zfp_type_double: - * the_type = np.float64 - */ - __Pyx_INCREF(__pyx_int_4); - __pyx_v_type_size = __pyx_int_4; - - /* "numcodecs/zfp.pyx":263 - * - * # determine destination data type - * if field._type == zfp_type_float: # <<<<<<<<<<<<<< - * the_type = np.float32 - * type_size = 4 - */ - break; - case zfp_type_double: - - /* "numcodecs/zfp.pyx":267 - * type_size = 4 - * elif field._type == zfp_type_double: - * the_type = np.float64 # <<<<<<<<<<<<<< - * type_size = 8 - * elif field._type == zfp_type_int32: - */ - __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 267, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_float64); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 267, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_v_the_type = __pyx_t_1; - __pyx_t_1 = 0; - - /* "numcodecs/zfp.pyx":268 - * elif field._type == zfp_type_double: - * the_type = np.float64 - * type_size = 8 # <<<<<<<<<<<<<< - * elif field._type == zfp_type_int32: - * the_type = np.int32 - */ - __Pyx_INCREF(__pyx_int_8); - __pyx_v_type_size = __pyx_int_8; - - /* "numcodecs/zfp.pyx":266 - * the_type = np.float32 - * type_size = 4 - * elif field._type == zfp_type_double: # <<<<<<<<<<<<<< - * the_type = np.float64 - * type_size = 8 - */ - break; - case zfp_type_int32: - - /* "numcodecs/zfp.pyx":270 - * type_size = 8 - * elif field._type == zfp_type_int32: - * the_type = np.int32 # <<<<<<<<<<<<<< - * type_size = 4 - * else: - */ - __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_np); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 270, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_int32); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 270, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_the_type = __pyx_t_2; - __pyx_t_2 = 0; - - /* "numcodecs/zfp.pyx":271 - * elif field._type == zfp_type_int32: - * the_type = np.int32 - * type_size = 4 # <<<<<<<<<<<<<< - * else: - * the_type = np.int64 - */ - __Pyx_INCREF(__pyx_int_4); - __pyx_v_type_size = __pyx_int_4; - - /* "numcodecs/zfp.pyx":269 - * the_type = np.float64 - * type_size = 8 - * elif field._type == zfp_type_int32: # <<<<<<<<<<<<<< - * the_type = np.int32 - * type_size = 4 - */ - break; - default: - - /* "numcodecs/zfp.pyx":273 - * type_size = 4 - * else: - * the_type = np.int64 # <<<<<<<<<<<<<< - * type_size = 8 - * - */ - __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_np); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 273, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_int64); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 273, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_v_the_type = __pyx_t_1; - __pyx_t_1 = 0; - - /* "numcodecs/zfp.pyx":274 - * else: - * the_type = np.int64 - * type_size = 8 # <<<<<<<<<<<<<< - * - * # determine data dimension - */ - __Pyx_INCREF(__pyx_int_8); - __pyx_v_type_size = __pyx_int_8; - break; - } - - /* "numcodecs/zfp.pyx":277 - * - * # determine data dimension - * nx,ny,nz,nw = field.nx,field.ny,field.nz,field.nw # <<<<<<<<<<<<<< - * datashape = (nx if nx != 0 else 1)* (ny if ny != 0 else 1) \ - * *(nz if nz != 0 else 1)* (nw if nw != 0 else 1) - */ - __pyx_t_6 = __pyx_v_field->nx; - __pyx_t_7 = __pyx_v_field->ny; - __pyx_t_8 = __pyx_v_field->nz; - __pyx_t_9 = __pyx_v_field->nw; - __pyx_v_nx = __pyx_t_6; - __pyx_v_ny = __pyx_t_7; - __pyx_v_nz = __pyx_t_8; - __pyx_v_nw = __pyx_t_9; - - /* "numcodecs/zfp.pyx":278 - * # determine data dimension - * nx,ny,nz,nw = field.nx,field.ny,field.nz,field.nw - * datashape = (nx if nx != 0 else 1)* (ny if ny != 0 else 1) \ # <<<<<<<<<<<<<< - * *(nz if nz != 0 else 1)* (nw if nw != 0 else 1) - * - */ - if (((__pyx_v_nx != 0) != 0)) { - __pyx_t_10 = __pyx_v_nx; - } else { - __pyx_t_10 = 1; - } - if (((__pyx_v_ny != 0) != 0)) { - __pyx_t_11 = __pyx_v_ny; - } else { - __pyx_t_11 = 1; - } - - /* "numcodecs/zfp.pyx":279 - * nx,ny,nz,nw = field.nx,field.ny,field.nz,field.nw - * datashape = (nx if nx != 0 else 1)* (ny if ny != 0 else 1) \ - * *(nz if nz != 0 else 1)* (nw if nw != 0 else 1) # <<<<<<<<<<<<<< - * - * # currently only serial exeution available - */ - if (((__pyx_v_nz != 0) != 0)) { - __pyx_t_12 = __pyx_v_nz; - } else { - __pyx_t_12 = 1; - } - if (((__pyx_v_nw != 0) != 0)) { - __pyx_t_13 = __pyx_v_nw; - } else { - __pyx_t_13 = 1; - } - __pyx_t_1 = __Pyx_PyInt_From_long((((__pyx_t_10 * __pyx_t_11) * __pyx_t_12) * __pyx_t_13)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 279, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_v_datashape = __pyx_t_1; - __pyx_t_1 = 0; - - /* "numcodecs/zfp.pyx":282 - * - * # currently only serial exeution available - * zfp_stream_set_execution(zfp,zfp_exec_serial) # <<<<<<<<<<<<<< - * - * # setup destination buffer - */ - (void)(zfp_stream_set_execution(__pyx_v_zfp, zfp_exec_serial)); - - /* "numcodecs/zfp.pyx":285 - * - * # setup destination buffer - * if dest is None: # <<<<<<<<<<<<<< - * dest = PyBytes_FromStringAndSize(NULL,datashape*type_size) - * dest_ptr = PyBytes_AS_STRING(dest) - */ - __pyx_t_5 = (__pyx_v_dest == Py_None); - __pyx_t_14 = (__pyx_t_5 != 0); - if (__pyx_t_14) { - - /* "numcodecs/zfp.pyx":286 - * # setup destination buffer - * if dest is None: - * dest = PyBytes_FromStringAndSize(NULL,datashape*type_size) # <<<<<<<<<<<<<< - * dest_ptr = PyBytes_AS_STRING(dest) - * else: - */ - __pyx_t_1 = PyNumber_Multiply(__pyx_v_datashape, __pyx_v_type_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 286, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_15 = __Pyx_PyIndex_AsSsize_t(__pyx_t_1); if (unlikely((__pyx_t_15 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 286, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyBytes_FromStringAndSize(NULL, __pyx_t_15); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 286, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF_SET(__pyx_v_dest, __pyx_t_1); - __pyx_t_1 = 0; - - /* "numcodecs/zfp.pyx":287 - * if dest is None: - * dest = PyBytes_FromStringAndSize(NULL,datashape*type_size) - * dest_ptr = PyBytes_AS_STRING(dest) # <<<<<<<<<<<<<< - * else: - * arr = ensure_contiguous_ndarray(dest) - */ - __pyx_v_dest_ptr = PyBytes_AS_STRING(__pyx_v_dest); - - /* "numcodecs/zfp.pyx":285 - * - * # setup destination buffer - * if dest is None: # <<<<<<<<<<<<<< - * dest = PyBytes_FromStringAndSize(NULL,datashape*type_size) - * dest_ptr = PyBytes_AS_STRING(dest) - */ - goto __pyx_L4; - } - - /* "numcodecs/zfp.pyx":289 - * dest_ptr = PyBytes_AS_STRING(dest) - * else: - * arr = ensure_contiguous_ndarray(dest) # <<<<<<<<<<<<<< - * dest_buffer = Buffer(arr, PyBUF_ANY_CONTIGUOUS | PyBUF_WRITEABLE) - * dest_ptr = dest_buffer.ptr - */ - /*else*/ { - __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_ensure_contiguous_ndarray); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 289, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_16 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_16 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_16)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_16); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } - } - __pyx_t_1 = (__pyx_t_16) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_16, __pyx_v_dest) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_dest); - __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 289, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_v_arr = __pyx_t_1; - __pyx_t_1 = 0; - - /* "numcodecs/zfp.pyx":290 - * else: - * arr = ensure_contiguous_ndarray(dest) - * dest_buffer = Buffer(arr, PyBUF_ANY_CONTIGUOUS | PyBUF_WRITEABLE) # <<<<<<<<<<<<<< - * dest_ptr = dest_buffer.ptr - * zfp_field_set_pointer(field,dest_ptr) - */ - __pyx_t_1 = __Pyx_PyInt_From_int((PyBUF_ANY_CONTIGUOUS | PyBUF_WRITEABLE)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 290, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 290, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_v_arr); - __Pyx_GIVEREF(__pyx_v_arr); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_arr); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1); - __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_9numcodecs_10compat_ext_Buffer), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 290, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF_SET(__pyx_v_dest_buffer, ((struct __pyx_obj_9numcodecs_10compat_ext_Buffer *)__pyx_t_1)); - __pyx_t_1 = 0; - - /* "numcodecs/zfp.pyx":291 - * arr = ensure_contiguous_ndarray(dest) - * dest_buffer = Buffer(arr, PyBUF_ANY_CONTIGUOUS | PyBUF_WRITEABLE) - * dest_ptr = dest_buffer.ptr # <<<<<<<<<<<<<< - * zfp_field_set_pointer(field,dest_ptr) - * - */ - __pyx_t_3 = __pyx_v_dest_buffer->ptr; - __pyx_v_dest_ptr = __pyx_t_3; - } - __pyx_L4:; - - /* "numcodecs/zfp.pyx":292 - * dest_buffer = Buffer(arr, PyBUF_ANY_CONTIGUOUS | PyBUF_WRITEABLE) - * dest_ptr = dest_buffer.ptr - * zfp_field_set_pointer(field,dest_ptr) # <<<<<<<<<<<<<< - * - * # perform decompression - */ - zfp_field_set_pointer(__pyx_v_field, __pyx_v_dest_ptr); - - /* "numcodecs/zfp.pyx":295 - * - * # perform decompression - * ret = zfp_decompress(zfp,field) # <<<<<<<<<<<<<< - * if not ret: - * raise RuntimeError("decompress failed") - */ - __pyx_v_ret = zfp_decompress(__pyx_v_zfp, __pyx_v_field); - - /* "numcodecs/zfp.pyx":296 - * # perform decompression - * ret = zfp_decompress(zfp,field) - * if not ret: # <<<<<<<<<<<<<< - * raise RuntimeError("decompress failed") - * - */ - __pyx_t_14 = ((!(__pyx_v_ret != 0)) != 0); - if (unlikely(__pyx_t_14)) { - - /* "numcodecs/zfp.pyx":297 - * ret = zfp_decompress(zfp,field) - * if not ret: - * raise RuntimeError("decompress failed") # <<<<<<<<<<<<<< - * - * # release buffers - */ - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_RuntimeError, __pyx_tuple__7, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 297, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_Raise(__pyx_t_1, 0, 0, 0); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __PYX_ERR(0, 297, __pyx_L1_error) - - /* "numcodecs/zfp.pyx":296 - * # perform decompression - * ret = zfp_decompress(zfp,field) - * if not ret: # <<<<<<<<<<<<<< - * raise RuntimeError("decompress failed") - * - */ - } - - /* "numcodecs/zfp.pyx":300 - * - * # release buffers - * source_buffer.release() # <<<<<<<<<<<<<< - * if dest_buffer is not None: - * dest_buffer.release() - */ - __pyx_t_1 = ((struct __pyx_vtabstruct_9numcodecs_10compat_ext_Buffer *)__pyx_v_source_buffer->__pyx_vtab)->release(__pyx_v_source_buffer, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 300, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "numcodecs/zfp.pyx":301 - * # release buffers - * source_buffer.release() - * if dest_buffer is not None: # <<<<<<<<<<<<<< - * dest_buffer.release() - * zfp_field_free(field) - */ - __pyx_t_14 = (((PyObject *)__pyx_v_dest_buffer) != Py_None); - __pyx_t_5 = (__pyx_t_14 != 0); - if (__pyx_t_5) { - - /* "numcodecs/zfp.pyx":302 - * source_buffer.release() - * if dest_buffer is not None: - * dest_buffer.release() # <<<<<<<<<<<<<< - * zfp_field_free(field) - * zfp_stream_close(zfp) - */ - __pyx_t_1 = ((struct __pyx_vtabstruct_9numcodecs_10compat_ext_Buffer *)__pyx_v_dest_buffer->__pyx_vtab)->release(__pyx_v_dest_buffer, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 302, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "numcodecs/zfp.pyx":301 - * # release buffers - * source_buffer.release() - * if dest_buffer is not None: # <<<<<<<<<<<<<< - * dest_buffer.release() - * zfp_field_free(field) - */ - } - - /* "numcodecs/zfp.pyx":303 - * if dest_buffer is not None: - * dest_buffer.release() - * zfp_field_free(field) # <<<<<<<<<<<<<< - * zfp_stream_close(zfp) - * stream_close(stream) - */ - zfp_field_free(__pyx_v_field); - - /* "numcodecs/zfp.pyx":304 - * dest_buffer.release() - * zfp_field_free(field) - * zfp_stream_close(zfp) # <<<<<<<<<<<<<< - * stream_close(stream) - * - */ - zfp_stream_close(__pyx_v_zfp); - - /* "numcodecs/zfp.pyx":305 - * zfp_field_free(field) - * zfp_stream_close(zfp) - * stream_close(stream) # <<<<<<<<<<<<<< - * - * # reshape the buffer - */ - (void)(stream_close(__pyx_v_stream)); - - /* "numcodecs/zfp.pyx":308 - * - * # reshape the buffer - * if not ny: # <<<<<<<<<<<<<< - * buf_shape=(nx) - * elif ny and not nz: - */ - __pyx_t_5 = ((!(__pyx_v_ny != 0)) != 0); - if (__pyx_t_5) { - - /* "numcodecs/zfp.pyx":309 - * # reshape the buffer - * if not ny: - * buf_shape=(nx) # <<<<<<<<<<<<<< - * elif ny and not nz: - * buf_shape=(ny,nx) - */ - __pyx_t_1 = __Pyx_PyInt_From_unsigned_int(__pyx_v_nx); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 309, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_v_buf_shape = __pyx_t_1; - __pyx_t_1 = 0; - - /* "numcodecs/zfp.pyx":308 - * - * # reshape the buffer - * if not ny: # <<<<<<<<<<<<<< - * buf_shape=(nx) - * elif ny and not nz: - */ - goto __pyx_L7; - } - - /* "numcodecs/zfp.pyx":310 - * if not ny: - * buf_shape=(nx) - * elif ny and not nz: # <<<<<<<<<<<<<< - * buf_shape=(ny,nx) - * elif ny and nz and not nw: - */ - __pyx_t_14 = (__pyx_v_ny != 0); - if (__pyx_t_14) { - } else { - __pyx_t_5 = __pyx_t_14; - goto __pyx_L8_bool_binop_done; - } - __pyx_t_14 = ((!(__pyx_v_nz != 0)) != 0); - __pyx_t_5 = __pyx_t_14; - __pyx_L8_bool_binop_done:; - if (__pyx_t_5) { - - /* "numcodecs/zfp.pyx":311 - * buf_shape=(nx) - * elif ny and not nz: - * buf_shape=(ny,nx) # <<<<<<<<<<<<<< - * elif ny and nz and not nw: - * buf_shape=(nz,ny,nx) - */ - __pyx_t_1 = __Pyx_PyInt_From_unsigned_int(__pyx_v_ny); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 311, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyInt_From_unsigned_int(__pyx_v_nx); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 311, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_16 = PyTuple_New(2); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 311, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_16); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_16, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_16, 1, __pyx_t_2); - __pyx_t_1 = 0; - __pyx_t_2 = 0; - __pyx_v_buf_shape = __pyx_t_16; - __pyx_t_16 = 0; - - /* "numcodecs/zfp.pyx":310 - * if not ny: - * buf_shape=(nx) - * elif ny and not nz: # <<<<<<<<<<<<<< - * buf_shape=(ny,nx) - * elif ny and nz and not nw: - */ - goto __pyx_L7; - } - - /* "numcodecs/zfp.pyx":312 - * elif ny and not nz: - * buf_shape=(ny,nx) - * elif ny and nz and not nw: # <<<<<<<<<<<<<< - * buf_shape=(nz,ny,nx) - * else: - */ - __pyx_t_14 = (__pyx_v_ny != 0); - if (__pyx_t_14) { - } else { - __pyx_t_5 = __pyx_t_14; - goto __pyx_L10_bool_binop_done; - } - __pyx_t_14 = (__pyx_v_nz != 0); - if (__pyx_t_14) { - } else { - __pyx_t_5 = __pyx_t_14; - goto __pyx_L10_bool_binop_done; - } - __pyx_t_14 = ((!(__pyx_v_nw != 0)) != 0); - __pyx_t_5 = __pyx_t_14; - __pyx_L10_bool_binop_done:; - if (__pyx_t_5) { - - /* "numcodecs/zfp.pyx":313 - * buf_shape=(ny,nx) - * elif ny and nz and not nw: - * buf_shape=(nz,ny,nx) # <<<<<<<<<<<<<< - * else: - * buf_shape=(nw,nz,ny,nx) - */ - __pyx_t_16 = __Pyx_PyInt_From_unsigned_int(__pyx_v_nz); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 313, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_16); - __pyx_t_2 = __Pyx_PyInt_From_unsigned_int(__pyx_v_ny); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 313, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = __Pyx_PyInt_From_unsigned_int(__pyx_v_nx); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 313, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_17 = PyTuple_New(3); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 313, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_17); - __Pyx_GIVEREF(__pyx_t_16); - PyTuple_SET_ITEM(__pyx_t_17, 0, __pyx_t_16); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_17, 1, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_17, 2, __pyx_t_1); - __pyx_t_16 = 0; - __pyx_t_2 = 0; - __pyx_t_1 = 0; - __pyx_v_buf_shape = __pyx_t_17; - __pyx_t_17 = 0; - - /* "numcodecs/zfp.pyx":312 - * elif ny and not nz: - * buf_shape=(ny,nx) - * elif ny and nz and not nw: # <<<<<<<<<<<<<< - * buf_shape=(nz,ny,nx) - * else: - */ - goto __pyx_L7; - } - - /* "numcodecs/zfp.pyx":315 - * buf_shape=(nz,ny,nx) - * else: - * buf_shape=(nw,nz,ny,nx) # <<<<<<<<<<<<<< - * dest = ensure_ndarray(dest).view(the_type) - * dest = dest.reshape(buf_shape) - */ - /*else*/ { - __pyx_t_17 = __Pyx_PyInt_From_unsigned_int(__pyx_v_nw); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 315, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_17); - __pyx_t_1 = __Pyx_PyInt_From_unsigned_int(__pyx_v_nz); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 315, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = __Pyx_PyInt_From_unsigned_int(__pyx_v_ny); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 315, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_16 = __Pyx_PyInt_From_unsigned_int(__pyx_v_nx); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 315, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_16); - __pyx_t_18 = PyTuple_New(4); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 315, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_18); - __Pyx_GIVEREF(__pyx_t_17); - PyTuple_SET_ITEM(__pyx_t_18, 0, __pyx_t_17); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_18, 1, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_18, 2, __pyx_t_2); - __Pyx_GIVEREF(__pyx_t_16); - PyTuple_SET_ITEM(__pyx_t_18, 3, __pyx_t_16); - __pyx_t_17 = 0; - __pyx_t_1 = 0; - __pyx_t_2 = 0; - __pyx_t_16 = 0; - __pyx_v_buf_shape = __pyx_t_18; - __pyx_t_18 = 0; - } - __pyx_L7:; - - /* "numcodecs/zfp.pyx":316 - * else: - * buf_shape=(nw,nz,ny,nx) - * dest = ensure_ndarray(dest).view(the_type) # <<<<<<<<<<<<<< - * dest = dest.reshape(buf_shape) - * return dest - */ - __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_ensure_ndarray); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 316, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_1)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_1); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } - } - __pyx_t_16 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_1, __pyx_v_dest) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_dest); - __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0; - if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 316, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_16); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_16, __pyx_n_s_view); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 316, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0; - __pyx_t_16 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_16 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_16)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_16); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } - } - __pyx_t_18 = (__pyx_t_16) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_16, __pyx_v_the_type) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_the_type); - __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0; - if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 316, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_18); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF_SET(__pyx_v_dest, __pyx_t_18); - __pyx_t_18 = 0; - - /* "numcodecs/zfp.pyx":317 - * buf_shape=(nw,nz,ny,nx) - * dest = ensure_ndarray(dest).view(the_type) - * dest = dest.reshape(buf_shape) # <<<<<<<<<<<<<< - * return dest - * - */ - __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_dest, __pyx_n_s_reshape); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 317, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_16 = NULL; - if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_16 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_16)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_16); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } - } - __pyx_t_18 = (__pyx_t_16) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_16, __pyx_v_buf_shape) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_buf_shape); - __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0; - if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 317, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_18); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF_SET(__pyx_v_dest, __pyx_t_18); - __pyx_t_18 = 0; - - /* "numcodecs/zfp.pyx":318 - * dest = ensure_ndarray(dest).view(the_type) - * dest = dest.reshape(buf_shape) - * return dest # <<<<<<<<<<<<<< - * - * class CompressMethod: - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_dest); - __pyx_r = __pyx_v_dest; - goto __pyx_L0; - - /* "numcodecs/zfp.pyx":218 - * return dest[:compressed_size] - * - * def decompress(source,dest=None): # <<<<<<<<<<<<<< - * """Decompress data. - * - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_16); - __Pyx_XDECREF(__pyx_t_17); - __Pyx_XDECREF(__pyx_t_18); - __Pyx_AddTraceback("numcodecs.zfp.decompress", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF((PyObject *)__pyx_v_source_buffer); - __Pyx_XDECREF((PyObject *)__pyx_v_dest_buffer); - __Pyx_XDECREF(__pyx_v_the_type); - __Pyx_XDECREF(__pyx_v_type_size); - __Pyx_XDECREF(__pyx_v_datashape); - __Pyx_XDECREF(__pyx_v_arr); - __Pyx_XDECREF(__pyx_v_buf_shape); - __Pyx_XDECREF(__pyx_v_dest); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "numcodecs/zfp.pyx":328 - * - * # Initilize with defaults - * def __init__(self): # <<<<<<<<<<<<<< - * self.zfpmode='a' - * self.tolerance=0.01 - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_9numcodecs_3zfp_14CompressMethod_1__init__(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ -static PyMethodDef __pyx_mdef_9numcodecs_3zfp_14CompressMethod_1__init__ = {"__init__", (PyCFunction)__pyx_pw_9numcodecs_3zfp_14CompressMethod_1__init__, METH_O, 0}; -static PyObject *__pyx_pw_9numcodecs_3zfp_14CompressMethod_1__init__(PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); - __pyx_r = __pyx_pf_9numcodecs_3zfp_14CompressMethod___init__(__pyx_self, ((PyObject *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_9numcodecs_3zfp_14CompressMethod___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__init__", 0); - - /* "numcodecs/zfp.pyx":329 - * # Initilize with defaults - * def __init__(self): - * self.zfpmode='a' # <<<<<<<<<<<<<< - * self.tolerance=0.01 - * - */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_zfpmode, __pyx_n_s_a) < 0) __PYX_ERR(0, 329, __pyx_L1_error) - - /* "numcodecs/zfp.pyx":330 - * def __init__(self): - * self.zfpmode='a' - * self.tolerance=0.01 # <<<<<<<<<<<<<< - * - * def set_mode(self,mode): - */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_tolerance, __pyx_float_0_01) < 0) __PYX_ERR(0, 330, __pyx_L1_error) - - /* "numcodecs/zfp.pyx":328 - * - * # Initilize with defaults - * def __init__(self): # <<<<<<<<<<<<<< - * self.zfpmode='a' - * self.tolerance=0.01 - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_AddTraceback("numcodecs.zfp.CompressMethod.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "numcodecs/zfp.pyx":332 - * self.tolerance=0.01 - * - * def set_mode(self,mode): # <<<<<<<<<<<<<< - * self.zfpmode=mode - * def set_tolerance(self,tol): - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_9numcodecs_3zfp_14CompressMethod_3set_mode(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_9numcodecs_3zfp_14CompressMethod_3set_mode = {"set_mode", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_9numcodecs_3zfp_14CompressMethod_3set_mode, METH_VARARGS|METH_KEYWORDS, 0}; -static PyObject *__pyx_pw_9numcodecs_3zfp_14CompressMethod_3set_mode(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_mode = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("set_mode (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_mode,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - CYTHON_FALLTHROUGH; - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - CYTHON_FALLTHROUGH; - case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_mode)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("set_mode", 1, 2, 2, 1); __PYX_ERR(0, 332, __pyx_L3_error) - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_mode") < 0)) __PYX_ERR(0, 332, __pyx_L3_error) - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - } - __pyx_v_self = values[0]; - __pyx_v_mode = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("set_mode", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 332, __pyx_L3_error) - __pyx_L3_error:; - __Pyx_AddTraceback("numcodecs.zfp.CompressMethod.set_mode", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_9numcodecs_3zfp_14CompressMethod_2set_mode(__pyx_self, __pyx_v_self, __pyx_v_mode); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_9numcodecs_3zfp_14CompressMethod_2set_mode(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_mode) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("set_mode", 0); - - /* "numcodecs/zfp.pyx":333 - * - * def set_mode(self,mode): - * self.zfpmode=mode # <<<<<<<<<<<<<< - * def set_tolerance(self,tol): - * self.tolerance=tol - */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_zfpmode, __pyx_v_mode) < 0) __PYX_ERR(0, 333, __pyx_L1_error) - - /* "numcodecs/zfp.pyx":332 - * self.tolerance=0.01 - * - * def set_mode(self,mode): # <<<<<<<<<<<<<< - * self.zfpmode=mode - * def set_tolerance(self,tol): - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_AddTraceback("numcodecs.zfp.CompressMethod.set_mode", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "numcodecs/zfp.pyx":334 - * def set_mode(self,mode): - * self.zfpmode=mode - * def set_tolerance(self,tol): # <<<<<<<<<<<<<< - * self.tolerance=tol - * def set_precision(self,prec): - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_9numcodecs_3zfp_14CompressMethod_5set_tolerance(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_9numcodecs_3zfp_14CompressMethod_5set_tolerance = {"set_tolerance", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_9numcodecs_3zfp_14CompressMethod_5set_tolerance, METH_VARARGS|METH_KEYWORDS, 0}; -static PyObject *__pyx_pw_9numcodecs_3zfp_14CompressMethod_5set_tolerance(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_tol = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("set_tolerance (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_tol,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - CYTHON_FALLTHROUGH; - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - CYTHON_FALLTHROUGH; - case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_tol)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("set_tolerance", 1, 2, 2, 1); __PYX_ERR(0, 334, __pyx_L3_error) - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_tolerance") < 0)) __PYX_ERR(0, 334, __pyx_L3_error) - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - } - __pyx_v_self = values[0]; - __pyx_v_tol = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("set_tolerance", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 334, __pyx_L3_error) - __pyx_L3_error:; - __Pyx_AddTraceback("numcodecs.zfp.CompressMethod.set_tolerance", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_9numcodecs_3zfp_14CompressMethod_4set_tolerance(__pyx_self, __pyx_v_self, __pyx_v_tol); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_9numcodecs_3zfp_14CompressMethod_4set_tolerance(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_tol) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("set_tolerance", 0); - - /* "numcodecs/zfp.pyx":335 - * self.zfpmode=mode - * def set_tolerance(self,tol): - * self.tolerance=tol # <<<<<<<<<<<<<< - * def set_precision(self,prec): - * self.precision=prec - */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_tolerance, __pyx_v_tol) < 0) __PYX_ERR(0, 335, __pyx_L1_error) - - /* "numcodecs/zfp.pyx":334 - * def set_mode(self,mode): - * self.zfpmode=mode - * def set_tolerance(self,tol): # <<<<<<<<<<<<<< - * self.tolerance=tol - * def set_precision(self,prec): - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_AddTraceback("numcodecs.zfp.CompressMethod.set_tolerance", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "numcodecs/zfp.pyx":336 - * def set_tolerance(self,tol): - * self.tolerance=tol - * def set_precision(self,prec): # <<<<<<<<<<<<<< - * self.precision=prec - * def set_rate(self,rate): - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_9numcodecs_3zfp_14CompressMethod_7set_precision(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_9numcodecs_3zfp_14CompressMethod_7set_precision = {"set_precision", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_9numcodecs_3zfp_14CompressMethod_7set_precision, METH_VARARGS|METH_KEYWORDS, 0}; -static PyObject *__pyx_pw_9numcodecs_3zfp_14CompressMethod_7set_precision(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_prec = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("set_precision (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_prec,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - CYTHON_FALLTHROUGH; - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - CYTHON_FALLTHROUGH; - case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_prec)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("set_precision", 1, 2, 2, 1); __PYX_ERR(0, 336, __pyx_L3_error) - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_precision") < 0)) __PYX_ERR(0, 336, __pyx_L3_error) - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - } - __pyx_v_self = values[0]; - __pyx_v_prec = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("set_precision", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 336, __pyx_L3_error) - __pyx_L3_error:; - __Pyx_AddTraceback("numcodecs.zfp.CompressMethod.set_precision", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_9numcodecs_3zfp_14CompressMethod_6set_precision(__pyx_self, __pyx_v_self, __pyx_v_prec); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_9numcodecs_3zfp_14CompressMethod_6set_precision(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_prec) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("set_precision", 0); - - /* "numcodecs/zfp.pyx":337 - * self.tolerance=tol - * def set_precision(self,prec): - * self.precision=prec # <<<<<<<<<<<<<< - * def set_rate(self,rate): - * self.rate=rate - */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_precision, __pyx_v_prec) < 0) __PYX_ERR(0, 337, __pyx_L1_error) - - /* "numcodecs/zfp.pyx":336 - * def set_tolerance(self,tol): - * self.tolerance=tol - * def set_precision(self,prec): # <<<<<<<<<<<<<< - * self.precision=prec - * def set_rate(self,rate): - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_AddTraceback("numcodecs.zfp.CompressMethod.set_precision", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "numcodecs/zfp.pyx":338 - * def set_precision(self,prec): - * self.precision=prec - * def set_rate(self,rate): # <<<<<<<<<<<<<< - * self.rate=rate - * def set_minbits(self,minbits): - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_9numcodecs_3zfp_14CompressMethod_9set_rate(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_9numcodecs_3zfp_14CompressMethod_9set_rate = {"set_rate", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_9numcodecs_3zfp_14CompressMethod_9set_rate, METH_VARARGS|METH_KEYWORDS, 0}; -static PyObject *__pyx_pw_9numcodecs_3zfp_14CompressMethod_9set_rate(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_rate = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("set_rate (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_rate,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - CYTHON_FALLTHROUGH; - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - CYTHON_FALLTHROUGH; - case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rate)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("set_rate", 1, 2, 2, 1); __PYX_ERR(0, 338, __pyx_L3_error) - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_rate") < 0)) __PYX_ERR(0, 338, __pyx_L3_error) - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - } - __pyx_v_self = values[0]; - __pyx_v_rate = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("set_rate", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 338, __pyx_L3_error) - __pyx_L3_error:; - __Pyx_AddTraceback("numcodecs.zfp.CompressMethod.set_rate", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_9numcodecs_3zfp_14CompressMethod_8set_rate(__pyx_self, __pyx_v_self, __pyx_v_rate); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_9numcodecs_3zfp_14CompressMethod_8set_rate(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_rate) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("set_rate", 0); - - /* "numcodecs/zfp.pyx":339 - * self.precision=prec - * def set_rate(self,rate): - * self.rate=rate # <<<<<<<<<<<<<< - * def set_minbits(self,minbits): - * self.minbits=minbits - */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_rate, __pyx_v_rate) < 0) __PYX_ERR(0, 339, __pyx_L1_error) - - /* "numcodecs/zfp.pyx":338 - * def set_precision(self,prec): - * self.precision=prec - * def set_rate(self,rate): # <<<<<<<<<<<<<< - * self.rate=rate - * def set_minbits(self,minbits): - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_AddTraceback("numcodecs.zfp.CompressMethod.set_rate", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "numcodecs/zfp.pyx":340 - * def set_rate(self,rate): - * self.rate=rate - * def set_minbits(self,minbits): # <<<<<<<<<<<<<< - * self.minbits=minbits - * def set_maxbits(self,maxbits): - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_9numcodecs_3zfp_14CompressMethod_11set_minbits(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_9numcodecs_3zfp_14CompressMethod_11set_minbits = {"set_minbits", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_9numcodecs_3zfp_14CompressMethod_11set_minbits, METH_VARARGS|METH_KEYWORDS, 0}; -static PyObject *__pyx_pw_9numcodecs_3zfp_14CompressMethod_11set_minbits(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_minbits = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("set_minbits (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_minbits,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - CYTHON_FALLTHROUGH; - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - CYTHON_FALLTHROUGH; - case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_minbits)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("set_minbits", 1, 2, 2, 1); __PYX_ERR(0, 340, __pyx_L3_error) - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_minbits") < 0)) __PYX_ERR(0, 340, __pyx_L3_error) - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - } - __pyx_v_self = values[0]; - __pyx_v_minbits = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("set_minbits", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 340, __pyx_L3_error) - __pyx_L3_error:; - __Pyx_AddTraceback("numcodecs.zfp.CompressMethod.set_minbits", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_9numcodecs_3zfp_14CompressMethod_10set_minbits(__pyx_self, __pyx_v_self, __pyx_v_minbits); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_9numcodecs_3zfp_14CompressMethod_10set_minbits(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_minbits) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("set_minbits", 0); - - /* "numcodecs/zfp.pyx":341 - * self.rate=rate - * def set_minbits(self,minbits): - * self.minbits=minbits # <<<<<<<<<<<<<< - * def set_maxbits(self,maxbits): - * self.maxbits=maxbits - */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_minbits, __pyx_v_minbits) < 0) __PYX_ERR(0, 341, __pyx_L1_error) - - /* "numcodecs/zfp.pyx":340 - * def set_rate(self,rate): - * self.rate=rate - * def set_minbits(self,minbits): # <<<<<<<<<<<<<< - * self.minbits=minbits - * def set_maxbits(self,maxbits): - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_AddTraceback("numcodecs.zfp.CompressMethod.set_minbits", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "numcodecs/zfp.pyx":342 - * def set_minbits(self,minbits): - * self.minbits=minbits - * def set_maxbits(self,maxbits): # <<<<<<<<<<<<<< - * self.maxbits=maxbits - * def set_maxprec(self,maxprec): - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_9numcodecs_3zfp_14CompressMethod_13set_maxbits(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_9numcodecs_3zfp_14CompressMethod_13set_maxbits = {"set_maxbits", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_9numcodecs_3zfp_14CompressMethod_13set_maxbits, METH_VARARGS|METH_KEYWORDS, 0}; -static PyObject *__pyx_pw_9numcodecs_3zfp_14CompressMethod_13set_maxbits(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_maxbits = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("set_maxbits (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_maxbits,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - CYTHON_FALLTHROUGH; - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - CYTHON_FALLTHROUGH; - case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_maxbits)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("set_maxbits", 1, 2, 2, 1); __PYX_ERR(0, 342, __pyx_L3_error) - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_maxbits") < 0)) __PYX_ERR(0, 342, __pyx_L3_error) - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - } - __pyx_v_self = values[0]; - __pyx_v_maxbits = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("set_maxbits", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 342, __pyx_L3_error) - __pyx_L3_error:; - __Pyx_AddTraceback("numcodecs.zfp.CompressMethod.set_maxbits", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_9numcodecs_3zfp_14CompressMethod_12set_maxbits(__pyx_self, __pyx_v_self, __pyx_v_maxbits); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_9numcodecs_3zfp_14CompressMethod_12set_maxbits(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_maxbits) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("set_maxbits", 0); - - /* "numcodecs/zfp.pyx":343 - * self.minbits=minbits - * def set_maxbits(self,maxbits): - * self.maxbits=maxbits # <<<<<<<<<<<<<< - * def set_maxprec(self,maxprec): - * self.maxprec=maxprec - */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_maxbits, __pyx_v_maxbits) < 0) __PYX_ERR(0, 343, __pyx_L1_error) - - /* "numcodecs/zfp.pyx":342 - * def set_minbits(self,minbits): - * self.minbits=minbits - * def set_maxbits(self,maxbits): # <<<<<<<<<<<<<< - * self.maxbits=maxbits - * def set_maxprec(self,maxprec): - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_AddTraceback("numcodecs.zfp.CompressMethod.set_maxbits", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "numcodecs/zfp.pyx":344 - * def set_maxbits(self,maxbits): - * self.maxbits=maxbits - * def set_maxprec(self,maxprec): # <<<<<<<<<<<<<< - * self.maxprec=maxprec - * def set_minexp(self,minexp): - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_9numcodecs_3zfp_14CompressMethod_15set_maxprec(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_9numcodecs_3zfp_14CompressMethod_15set_maxprec = {"set_maxprec", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_9numcodecs_3zfp_14CompressMethod_15set_maxprec, METH_VARARGS|METH_KEYWORDS, 0}; -static PyObject *__pyx_pw_9numcodecs_3zfp_14CompressMethod_15set_maxprec(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_maxprec = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("set_maxprec (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_maxprec,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - CYTHON_FALLTHROUGH; - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - CYTHON_FALLTHROUGH; - case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_maxprec)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("set_maxprec", 1, 2, 2, 1); __PYX_ERR(0, 344, __pyx_L3_error) - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_maxprec") < 0)) __PYX_ERR(0, 344, __pyx_L3_error) - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - } - __pyx_v_self = values[0]; - __pyx_v_maxprec = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("set_maxprec", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 344, __pyx_L3_error) - __pyx_L3_error:; - __Pyx_AddTraceback("numcodecs.zfp.CompressMethod.set_maxprec", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_9numcodecs_3zfp_14CompressMethod_14set_maxprec(__pyx_self, __pyx_v_self, __pyx_v_maxprec); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_9numcodecs_3zfp_14CompressMethod_14set_maxprec(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_maxprec) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("set_maxprec", 0); - - /* "numcodecs/zfp.pyx":345 - * self.maxbits=maxbits - * def set_maxprec(self,maxprec): - * self.maxprec=maxprec # <<<<<<<<<<<<<< - * def set_minexp(self,minexp): - * self.minexp=minexp - */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_maxprec, __pyx_v_maxprec) < 0) __PYX_ERR(0, 345, __pyx_L1_error) - - /* "numcodecs/zfp.pyx":344 - * def set_maxbits(self,maxbits): - * self.maxbits=maxbits - * def set_maxprec(self,maxprec): # <<<<<<<<<<<<<< - * self.maxprec=maxprec - * def set_minexp(self,minexp): - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_AddTraceback("numcodecs.zfp.CompressMethod.set_maxprec", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "numcodecs/zfp.pyx":346 - * def set_maxprec(self,maxprec): - * self.maxprec=maxprec - * def set_minexp(self,minexp): # <<<<<<<<<<<<<< - * self.minexp=minexp - * - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_9numcodecs_3zfp_14CompressMethod_17set_minexp(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_9numcodecs_3zfp_14CompressMethod_17set_minexp = {"set_minexp", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_9numcodecs_3zfp_14CompressMethod_17set_minexp, METH_VARARGS|METH_KEYWORDS, 0}; -static PyObject *__pyx_pw_9numcodecs_3zfp_14CompressMethod_17set_minexp(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_minexp = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("set_minexp (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_minexp,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - CYTHON_FALLTHROUGH; - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - CYTHON_FALLTHROUGH; - case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_minexp)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("set_minexp", 1, 2, 2, 1); __PYX_ERR(0, 346, __pyx_L3_error) - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_minexp") < 0)) __PYX_ERR(0, 346, __pyx_L3_error) - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - } - __pyx_v_self = values[0]; - __pyx_v_minexp = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("set_minexp", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 346, __pyx_L3_error) - __pyx_L3_error:; - __Pyx_AddTraceback("numcodecs.zfp.CompressMethod.set_minexp", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_9numcodecs_3zfp_14CompressMethod_16set_minexp(__pyx_self, __pyx_v_self, __pyx_v_minexp); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_9numcodecs_3zfp_14CompressMethod_16set_minexp(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_minexp) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("set_minexp", 0); - - /* "numcodecs/zfp.pyx":347 - * self.maxprec=maxprec - * def set_minexp(self,minexp): - * self.minexp=minexp # <<<<<<<<<<<<<< - * - * class Zfp(Codec): - */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_minexp, __pyx_v_minexp) < 0) __PYX_ERR(0, 347, __pyx_L1_error) - - /* "numcodecs/zfp.pyx":346 - * def set_maxprec(self,maxprec): - * self.maxprec=maxprec - * def set_minexp(self,minexp): # <<<<<<<<<<<<<< - * self.minexp=minexp - * - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_AddTraceback("numcodecs.zfp.CompressMethod.set_minexp", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "numcodecs/zfp.pyx":382 - * codec_id = 'zfp' - * - * def __init__(self, mode = 'a',tol = 0.0, prec = ZFP_MAX_PREC, rate = 0, minbits = ZFP_MIN_BITS, maxbits = ZFP_MAX_BITS, minexp = ZFP_MIN_EXP, maxprec = ZFP_MAX_PREC,the_method=None): # <<<<<<<<<<<<<< - * self.mode=mode - * #the_method=CompressMethod() - */ - -static PyObject *__pyx_pf_9numcodecs_3zfp_4__defaults__(CYTHON_UNUSED PyObject *__pyx_self) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - __Pyx_RefNannySetupContext("__defaults__", 0); - __Pyx_XDECREF(__pyx_r); - __pyx_t_1 = PyTuple_New(9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 382, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(((PyObject*)__pyx_n_s_a)); - __Pyx_GIVEREF(((PyObject*)__pyx_n_s_a)); - PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject*)__pyx_n_s_a)); - __Pyx_INCREF(((PyObject*)__pyx_float_0_0)); - __Pyx_GIVEREF(((PyObject*)__pyx_float_0_0)); - PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject*)__pyx_float_0_0)); - __Pyx_INCREF(__Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_self)->__pyx_arg_prec); - __Pyx_GIVEREF(__Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_self)->__pyx_arg_prec); - PyTuple_SET_ITEM(__pyx_t_1, 2, __Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_self)->__pyx_arg_prec); - __Pyx_INCREF(((PyObject *)__pyx_int_0)); - __Pyx_GIVEREF(((PyObject *)__pyx_int_0)); - PyTuple_SET_ITEM(__pyx_t_1, 3, ((PyObject *)__pyx_int_0)); - __Pyx_INCREF(__Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_self)->__pyx_arg_minbits); - __Pyx_GIVEREF(__Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_self)->__pyx_arg_minbits); - PyTuple_SET_ITEM(__pyx_t_1, 4, __Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_self)->__pyx_arg_minbits); - __Pyx_INCREF(__Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_self)->__pyx_arg_maxbits); - __Pyx_GIVEREF(__Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_self)->__pyx_arg_maxbits); - PyTuple_SET_ITEM(__pyx_t_1, 5, __Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_self)->__pyx_arg_maxbits); - __Pyx_INCREF(__Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_self)->__pyx_arg_minexp); - __Pyx_GIVEREF(__Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_self)->__pyx_arg_minexp); - PyTuple_SET_ITEM(__pyx_t_1, 6, __Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_self)->__pyx_arg_minexp); - __Pyx_INCREF(__Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_self)->__pyx_arg_maxprec); - __Pyx_GIVEREF(__Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_self)->__pyx_arg_maxprec); - PyTuple_SET_ITEM(__pyx_t_1, 7, __Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_self)->__pyx_arg_maxprec); - __Pyx_INCREF(((PyObject *)Py_None)); - __Pyx_GIVEREF(((PyObject *)Py_None)); - PyTuple_SET_ITEM(__pyx_t_1, 8, ((PyObject *)Py_None)); - __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 382, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1); - __Pyx_INCREF(Py_None); - __Pyx_GIVEREF(Py_None); - PyTuple_SET_ITEM(__pyx_t_2, 1, Py_None); - __pyx_t_1 = 0; - __pyx_r = __pyx_t_2; - __pyx_t_2 = 0; - goto __pyx_L0; - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_AddTraceback("numcodecs.zfp.__defaults__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* Python wrapper */ -static PyObject *__pyx_pw_9numcodecs_3zfp_3Zfp_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_9numcodecs_3zfp_3Zfp_1__init__ = {"__init__", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_9numcodecs_3zfp_3Zfp_1__init__, METH_VARARGS|METH_KEYWORDS, 0}; -static PyObject *__pyx_pw_9numcodecs_3zfp_3Zfp_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_mode = 0; - PyObject *__pyx_v_tol = 0; - PyObject *__pyx_v_prec = 0; - PyObject *__pyx_v_rate = 0; - PyObject *__pyx_v_minbits = 0; - PyObject *__pyx_v_maxbits = 0; - PyObject *__pyx_v_minexp = 0; - PyObject *__pyx_v_maxprec = 0; - CYTHON_UNUSED PyObject *__pyx_v_the_method = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__init__ (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_mode,&__pyx_n_s_tol,&__pyx_n_s_prec,&__pyx_n_s_rate,&__pyx_n_s_minbits,&__pyx_n_s_maxbits,&__pyx_n_s_minexp,&__pyx_n_s_maxprec,&__pyx_n_s_the_method,0}; - PyObject* values[10] = {0,0,0,0,0,0,0,0,0,0}; - __pyx_defaults *__pyx_dynamic_args = __Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_self); - values[1] = ((PyObject *)((PyObject*)__pyx_n_s_a)); - values[2] = ((PyObject *)((PyObject*)__pyx_float_0_0)); - values[3] = __pyx_dynamic_args->__pyx_arg_prec; - values[4] = ((PyObject *)((PyObject *)__pyx_int_0)); - values[5] = __pyx_dynamic_args->__pyx_arg_minbits; - values[6] = __pyx_dynamic_args->__pyx_arg_maxbits; - values[7] = __pyx_dynamic_args->__pyx_arg_minexp; - values[8] = __pyx_dynamic_args->__pyx_arg_maxprec; - values[9] = ((PyObject *)((PyObject *)Py_None)); - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9); - CYTHON_FALLTHROUGH; - case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); - CYTHON_FALLTHROUGH; - case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); - CYTHON_FALLTHROUGH; - case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); - CYTHON_FALLTHROUGH; - case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); - CYTHON_FALLTHROUGH; - case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); - CYTHON_FALLTHROUGH; - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - CYTHON_FALLTHROUGH; - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - CYTHON_FALLTHROUGH; - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - CYTHON_FALLTHROUGH; - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - CYTHON_FALLTHROUGH; - case 1: - if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_mode); - if (value) { values[1] = value; kw_args--; } - } - CYTHON_FALLTHROUGH; - case 2: - if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_tol); - if (value) { values[2] = value; kw_args--; } - } - CYTHON_FALLTHROUGH; - case 3: - if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_prec); - if (value) { values[3] = value; kw_args--; } - } - CYTHON_FALLTHROUGH; - case 4: - if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_rate); - if (value) { values[4] = value; kw_args--; } - } - CYTHON_FALLTHROUGH; - case 5: - if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_minbits); - if (value) { values[5] = value; kw_args--; } - } - CYTHON_FALLTHROUGH; - case 6: - if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_maxbits); - if (value) { values[6] = value; kw_args--; } - } - CYTHON_FALLTHROUGH; - case 7: - if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_minexp); - if (value) { values[7] = value; kw_args--; } - } - CYTHON_FALLTHROUGH; - case 8: - if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_maxprec); - if (value) { values[8] = value; kw_args--; } - } - CYTHON_FALLTHROUGH; - case 9: - if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_the_method); - if (value) { values[9] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 382, __pyx_L3_error) - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9); - CYTHON_FALLTHROUGH; - case 9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8); - CYTHON_FALLTHROUGH; - case 8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7); - CYTHON_FALLTHROUGH; - case 7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6); - CYTHON_FALLTHROUGH; - case 6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5); - CYTHON_FALLTHROUGH; - case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4); - CYTHON_FALLTHROUGH; - case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3); - CYTHON_FALLTHROUGH; - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - CYTHON_FALLTHROUGH; - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - break; - default: goto __pyx_L5_argtuple_error; - } - } - __pyx_v_self = values[0]; - __pyx_v_mode = values[1]; - __pyx_v_tol = values[2]; - __pyx_v_prec = values[3]; - __pyx_v_rate = values[4]; - __pyx_v_minbits = values[5]; - __pyx_v_maxbits = values[6]; - __pyx_v_minexp = values[7]; - __pyx_v_maxprec = values[8]; - __pyx_v_the_method = values[9]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("__init__", 0, 1, 10, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 382, __pyx_L3_error) - __pyx_L3_error:; - __Pyx_AddTraceback("numcodecs.zfp.Zfp.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_9numcodecs_3zfp_3Zfp___init__(__pyx_self, __pyx_v_self, __pyx_v_mode, __pyx_v_tol, __pyx_v_prec, __pyx_v_rate, __pyx_v_minbits, __pyx_v_maxbits, __pyx_v_minexp, __pyx_v_maxprec, __pyx_v_the_method); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_9numcodecs_3zfp_3Zfp___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_mode, PyObject *__pyx_v_tol, PyObject *__pyx_v_prec, PyObject *__pyx_v_rate, PyObject *__pyx_v_minbits, PyObject *__pyx_v_maxbits, PyObject *__pyx_v_minexp, PyObject *__pyx_v_maxprec, CYTHON_UNUSED PyObject *__pyx_v_the_method) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_t_2; - __Pyx_RefNannySetupContext("__init__", 0); - - /* "numcodecs/zfp.pyx":383 - * - * def __init__(self, mode = 'a',tol = 0.0, prec = ZFP_MAX_PREC, rate = 0, minbits = ZFP_MIN_BITS, maxbits = ZFP_MAX_BITS, minexp = ZFP_MIN_EXP, maxprec = ZFP_MAX_PREC,the_method=None): - * self.mode=mode # <<<<<<<<<<<<<< - * #the_method=CompressMethod() - * self.the_method={} - */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_mode, __pyx_v_mode) < 0) __PYX_ERR(0, 383, __pyx_L1_error) - - /* "numcodecs/zfp.pyx":385 - * self.mode=mode - * #the_method=CompressMethod() - * self.the_method={} # <<<<<<<<<<<<<< - * - * if mode == 'a': - */ - __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 385, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_the_method, __pyx_t_1) < 0) __PYX_ERR(0, 385, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "numcodecs/zfp.pyx":387 - * self.the_method={} - * - * if mode == 'a': # <<<<<<<<<<<<<< - * self.tol=tol - * self.the_method['mode']=mode - */ - __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_v_mode, __pyx_n_s_a, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 387, __pyx_L1_error) - if (__pyx_t_2) { - - /* "numcodecs/zfp.pyx":388 - * - * if mode == 'a': - * self.tol=tol # <<<<<<<<<<<<<< - * self.the_method['mode']=mode - * self.the_method['tol']=tol - */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_tol, __pyx_v_tol) < 0) __PYX_ERR(0, 388, __pyx_L1_error) - - /* "numcodecs/zfp.pyx":389 - * if mode == 'a': - * self.tol=tol - * self.the_method['mode']=mode # <<<<<<<<<<<<<< - * self.the_method['tol']=tol - * elif mode == 'p': - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_the_method); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 389, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (unlikely(PyObject_SetItem(__pyx_t_1, __pyx_n_s_mode, __pyx_v_mode) < 0)) __PYX_ERR(0, 389, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "numcodecs/zfp.pyx":390 - * self.tol=tol - * self.the_method['mode']=mode - * self.the_method['tol']=tol # <<<<<<<<<<<<<< - * elif mode == 'p': - * self.prec = prec - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_the_method); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 390, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (unlikely(PyObject_SetItem(__pyx_t_1, __pyx_n_s_tol, __pyx_v_tol) < 0)) __PYX_ERR(0, 390, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "numcodecs/zfp.pyx":387 - * self.the_method={} - * - * if mode == 'a': # <<<<<<<<<<<<<< - * self.tol=tol - * self.the_method['mode']=mode - */ - goto __pyx_L3; - } - - /* "numcodecs/zfp.pyx":391 - * self.the_method['mode']=mode - * self.the_method['tol']=tol - * elif mode == 'p': # <<<<<<<<<<<<<< - * self.prec = prec - * self.the_method['mode']=mode - */ - __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_v_mode, __pyx_n_s_p, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 391, __pyx_L1_error) - if (__pyx_t_2) { - - /* "numcodecs/zfp.pyx":392 - * self.the_method['tol']=tol - * elif mode == 'p': - * self.prec = prec # <<<<<<<<<<<<<< - * self.the_method['mode']=mode - * self.the_method['prec']=prec - */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_prec, __pyx_v_prec) < 0) __PYX_ERR(0, 392, __pyx_L1_error) - - /* "numcodecs/zfp.pyx":393 - * elif mode == 'p': - * self.prec = prec - * self.the_method['mode']=mode # <<<<<<<<<<<<<< - * self.the_method['prec']=prec - * elif mode == 'r': - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_the_method); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 393, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (unlikely(PyObject_SetItem(__pyx_t_1, __pyx_n_s_mode, __pyx_v_mode) < 0)) __PYX_ERR(0, 393, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "numcodecs/zfp.pyx":394 - * self.prec = prec - * self.the_method['mode']=mode - * self.the_method['prec']=prec # <<<<<<<<<<<<<< - * elif mode == 'r': - * self.rate = rate - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_the_method); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 394, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (unlikely(PyObject_SetItem(__pyx_t_1, __pyx_n_s_prec, __pyx_v_prec) < 0)) __PYX_ERR(0, 394, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "numcodecs/zfp.pyx":391 - * self.the_method['mode']=mode - * self.the_method['tol']=tol - * elif mode == 'p': # <<<<<<<<<<<<<< - * self.prec = prec - * self.the_method['mode']=mode - */ - goto __pyx_L3; - } - - /* "numcodecs/zfp.pyx":395 - * self.the_method['mode']=mode - * self.the_method['prec']=prec - * elif mode == 'r': # <<<<<<<<<<<<<< - * self.rate = rate - * self.the_method['mode']=mode - */ - __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_v_mode, __pyx_n_s_r, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 395, __pyx_L1_error) - if (__pyx_t_2) { - - /* "numcodecs/zfp.pyx":396 - * self.the_method['prec']=prec - * elif mode == 'r': - * self.rate = rate # <<<<<<<<<<<<<< - * self.the_method['mode']=mode - * self.the_method['rate']=rate - */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_rate, __pyx_v_rate) < 0) __PYX_ERR(0, 396, __pyx_L1_error) - - /* "numcodecs/zfp.pyx":397 - * elif mode == 'r': - * self.rate = rate - * self.the_method['mode']=mode # <<<<<<<<<<<<<< - * self.the_method['rate']=rate - * elif mode == 'c': - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_the_method); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 397, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (unlikely(PyObject_SetItem(__pyx_t_1, __pyx_n_s_mode, __pyx_v_mode) < 0)) __PYX_ERR(0, 397, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "numcodecs/zfp.pyx":398 - * self.rate = rate - * self.the_method['mode']=mode - * self.the_method['rate']=rate # <<<<<<<<<<<<<< - * elif mode == 'c': - * self.minbits = minbits - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_the_method); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 398, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (unlikely(PyObject_SetItem(__pyx_t_1, __pyx_n_s_rate, __pyx_v_rate) < 0)) __PYX_ERR(0, 398, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "numcodecs/zfp.pyx":395 - * self.the_method['mode']=mode - * self.the_method['prec']=prec - * elif mode == 'r': # <<<<<<<<<<<<<< - * self.rate = rate - * self.the_method['mode']=mode - */ - goto __pyx_L3; - } - - /* "numcodecs/zfp.pyx":399 - * self.the_method['mode']=mode - * self.the_method['rate']=rate - * elif mode == 'c': # <<<<<<<<<<<<<< - * self.minbits = minbits - * self.maxbits = maxbits - */ - __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_v_mode, __pyx_n_s_c, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 399, __pyx_L1_error) - if (likely(__pyx_t_2)) { - - /* "numcodecs/zfp.pyx":400 - * self.the_method['rate']=rate - * elif mode == 'c': - * self.minbits = minbits # <<<<<<<<<<<<<< - * self.maxbits = maxbits - * self.maxprec = maxprec - */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_minbits, __pyx_v_minbits) < 0) __PYX_ERR(0, 400, __pyx_L1_error) - - /* "numcodecs/zfp.pyx":401 - * elif mode == 'c': - * self.minbits = minbits - * self.maxbits = maxbits # <<<<<<<<<<<<<< - * self.maxprec = maxprec - * self.minexp = minexp - */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_maxbits, __pyx_v_maxbits) < 0) __PYX_ERR(0, 401, __pyx_L1_error) - - /* "numcodecs/zfp.pyx":402 - * self.minbits = minbits - * self.maxbits = maxbits - * self.maxprec = maxprec # <<<<<<<<<<<<<< - * self.minexp = minexp - * self.the_method['mode']=mode - */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_maxprec, __pyx_v_maxprec) < 0) __PYX_ERR(0, 402, __pyx_L1_error) - - /* "numcodecs/zfp.pyx":403 - * self.maxbits = maxbits - * self.maxprec = maxprec - * self.minexp = minexp # <<<<<<<<<<<<<< - * self.the_method['mode']=mode - * self.the_method['minbits']=minbits - */ - if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_minexp, __pyx_v_minexp) < 0) __PYX_ERR(0, 403, __pyx_L1_error) - - /* "numcodecs/zfp.pyx":404 - * self.maxprec = maxprec - * self.minexp = minexp - * self.the_method['mode']=mode # <<<<<<<<<<<<<< - * self.the_method['minbits']=minbits - * self.the_method['maxbits']=maxbits - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_the_method); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 404, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (unlikely(PyObject_SetItem(__pyx_t_1, __pyx_n_s_mode, __pyx_v_mode) < 0)) __PYX_ERR(0, 404, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "numcodecs/zfp.pyx":405 - * self.minexp = minexp - * self.the_method['mode']=mode - * self.the_method['minbits']=minbits # <<<<<<<<<<<<<< - * self.the_method['maxbits']=maxbits - * self.the_method['minexp']=minexp - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_the_method); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 405, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (unlikely(PyObject_SetItem(__pyx_t_1, __pyx_n_s_minbits, __pyx_v_minbits) < 0)) __PYX_ERR(0, 405, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "numcodecs/zfp.pyx":406 - * self.the_method['mode']=mode - * self.the_method['minbits']=minbits - * self.the_method['maxbits']=maxbits # <<<<<<<<<<<<<< - * self.the_method['minexp']=minexp - * self.the_method['maxprec']=maxprec - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_the_method); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 406, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (unlikely(PyObject_SetItem(__pyx_t_1, __pyx_n_s_maxbits, __pyx_v_maxbits) < 0)) __PYX_ERR(0, 406, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "numcodecs/zfp.pyx":407 - * self.the_method['minbits']=minbits - * self.the_method['maxbits']=maxbits - * self.the_method['minexp']=minexp # <<<<<<<<<<<<<< - * self.the_method['maxprec']=maxprec - * else: - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_the_method); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 407, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (unlikely(PyObject_SetItem(__pyx_t_1, __pyx_n_s_minexp, __pyx_v_minexp) < 0)) __PYX_ERR(0, 407, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "numcodecs/zfp.pyx":408 - * self.the_method['maxbits']=maxbits - * self.the_method['minexp']=minexp - * self.the_method['maxprec']=maxprec # <<<<<<<<<<<<<< - * else: - * raise ValueError("Wrong mode, please set mode to 'a', 'p', 'r' or 'c'") - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_the_method); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 408, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (unlikely(PyObject_SetItem(__pyx_t_1, __pyx_n_s_maxprec, __pyx_v_maxprec) < 0)) __PYX_ERR(0, 408, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "numcodecs/zfp.pyx":399 - * self.the_method['mode']=mode - * self.the_method['rate']=rate - * elif mode == 'c': # <<<<<<<<<<<<<< - * self.minbits = minbits - * self.maxbits = maxbits - */ - goto __pyx_L3; - } - - /* "numcodecs/zfp.pyx":410 - * self.the_method['maxprec']=maxprec - * else: - * raise ValueError("Wrong mode, please set mode to 'a', 'p', 'r' or 'c'") # <<<<<<<<<<<<<< - * #self.the_method=the_method - * - */ - /*else*/ { - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__8, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 410, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_Raise(__pyx_t_1, 0, 0, 0); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __PYX_ERR(0, 410, __pyx_L1_error) - } - __pyx_L3:; - - /* "numcodecs/zfp.pyx":382 - * codec_id = 'zfp' - * - * def __init__(self, mode = 'a',tol = 0.0, prec = ZFP_MAX_PREC, rate = 0, minbits = ZFP_MIN_BITS, maxbits = ZFP_MAX_BITS, minexp = ZFP_MIN_EXP, maxprec = ZFP_MAX_PREC,the_method=None): # <<<<<<<<<<<<<< - * self.mode=mode - * #the_method=CompressMethod() - */ - - /* function exit code */ - __pyx_r = Py_None; __Pyx_INCREF(Py_None); - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_AddTraceback("numcodecs.zfp.Zfp.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "numcodecs/zfp.pyx":413 - * #self.the_method=the_method - * - * def encode(self,buf): # <<<<<<<<<<<<<< - * #buf = ensure_contiguous_ndarray(buf) - * return compress(buf,self.the_method) - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_9numcodecs_3zfp_3Zfp_3encode(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_9numcodecs_3zfp_3Zfp_3encode = {"encode", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_9numcodecs_3zfp_3Zfp_3encode, METH_VARARGS|METH_KEYWORDS, 0}; -static PyObject *__pyx_pw_9numcodecs_3zfp_3Zfp_3encode(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_buf = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("encode (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_buf,0}; - PyObject* values[2] = {0,0}; - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - CYTHON_FALLTHROUGH; - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - CYTHON_FALLTHROUGH; - case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_buf)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("encode", 1, 2, 2, 1); __PYX_ERR(0, 413, __pyx_L3_error) - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "encode") < 0)) __PYX_ERR(0, 413, __pyx_L3_error) - } - } else if (PyTuple_GET_SIZE(__pyx_args) != 2) { - goto __pyx_L5_argtuple_error; - } else { - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - } - __pyx_v_self = values[0]; - __pyx_v_buf = values[1]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("encode", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 413, __pyx_L3_error) - __pyx_L3_error:; - __Pyx_AddTraceback("numcodecs.zfp.Zfp.encode", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_9numcodecs_3zfp_3Zfp_2encode(__pyx_self, __pyx_v_self, __pyx_v_buf); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_9numcodecs_3zfp_3Zfp_2encode(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_buf) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - int __pyx_t_5; - PyObject *__pyx_t_6 = NULL; - __Pyx_RefNannySetupContext("encode", 0); - - /* "numcodecs/zfp.pyx":415 - * def encode(self,buf): - * #buf = ensure_contiguous_ndarray(buf) - * return compress(buf,self.the_method) # <<<<<<<<<<<<<< - * - * def decode(self,buf,out=None): - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_compress); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 415, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_the_method); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 415, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = NULL; - __pyx_t_5 = 0; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_4)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_4); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - __pyx_t_5 = 1; - } - } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_2)) { - PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_v_buf, __pyx_t_3}; - __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 415, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) { - PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_v_buf, __pyx_t_3}; - __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 415, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - } else - #endif - { - __pyx_t_6 = PyTuple_New(2+__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 415, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - if (__pyx_t_4) { - __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); __pyx_t_4 = NULL; - } - __Pyx_INCREF(__pyx_v_buf); - __Pyx_GIVEREF(__pyx_v_buf); - PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_5, __pyx_v_buf); - __Pyx_GIVEREF(__pyx_t_3); - PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_5, __pyx_t_3); - __pyx_t_3 = 0; - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 415, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; - } - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* "numcodecs/zfp.pyx":413 - * #self.the_method=the_method - * - * def encode(self,buf): # <<<<<<<<<<<<<< - * #buf = ensure_contiguous_ndarray(buf) - * return compress(buf,self.the_method) - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_AddTraceback("numcodecs.zfp.Zfp.encode", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "numcodecs/zfp.pyx":417 - * return compress(buf,self.the_method) - * - * def decode(self,buf,out=None): # <<<<<<<<<<<<<< - * buf=ensure_contiguous_ndarray(buf) - * return decompress(buf,out) - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_9numcodecs_3zfp_3Zfp_5decode(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/ -static PyMethodDef __pyx_mdef_9numcodecs_3zfp_3Zfp_5decode = {"decode", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_9numcodecs_3zfp_3Zfp_5decode, METH_VARARGS|METH_KEYWORDS, 0}; -static PyObject *__pyx_pw_9numcodecs_3zfp_3Zfp_5decode(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) { - CYTHON_UNUSED PyObject *__pyx_v_self = 0; - PyObject *__pyx_v_buf = 0; - PyObject *__pyx_v_out = 0; - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("decode (wrapper)", 0); - { - static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_buf,&__pyx_n_s_out,0}; - PyObject* values[3] = {0,0,0}; - values[2] = ((PyObject *)((PyObject *)Py_None)); - if (unlikely(__pyx_kwds)) { - Py_ssize_t kw_args; - const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args); - switch (pos_args) { - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - CYTHON_FALLTHROUGH; - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - CYTHON_FALLTHROUGH; - case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - CYTHON_FALLTHROUGH; - case 0: break; - default: goto __pyx_L5_argtuple_error; - } - kw_args = PyDict_Size(__pyx_kwds); - switch (pos_args) { - case 0: - if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--; - else goto __pyx_L5_argtuple_error; - CYTHON_FALLTHROUGH; - case 1: - if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_buf)) != 0)) kw_args--; - else { - __Pyx_RaiseArgtupleInvalid("decode", 0, 2, 3, 1); __PYX_ERR(0, 417, __pyx_L3_error) - } - CYTHON_FALLTHROUGH; - case 2: - if (kw_args > 0) { - PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_out); - if (value) { values[2] = value; kw_args--; } - } - } - if (unlikely(kw_args > 0)) { - if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "decode") < 0)) __PYX_ERR(0, 417, __pyx_L3_error) - } - } else { - switch (PyTuple_GET_SIZE(__pyx_args)) { - case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2); - CYTHON_FALLTHROUGH; - case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1); - values[0] = PyTuple_GET_ITEM(__pyx_args, 0); - break; - default: goto __pyx_L5_argtuple_error; - } - } - __pyx_v_self = values[0]; - __pyx_v_buf = values[1]; - __pyx_v_out = values[2]; - } - goto __pyx_L4_argument_unpacking_done; - __pyx_L5_argtuple_error:; - __Pyx_RaiseArgtupleInvalid("decode", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 417, __pyx_L3_error) - __pyx_L3_error:; - __Pyx_AddTraceback("numcodecs.zfp.Zfp.decode", __pyx_clineno, __pyx_lineno, __pyx_filename); - __Pyx_RefNannyFinishContext(); - return NULL; - __pyx_L4_argument_unpacking_done:; - __pyx_r = __pyx_pf_9numcodecs_3zfp_3Zfp_4decode(__pyx_self, __pyx_v_self, __pyx_v_buf, __pyx_v_out); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_9numcodecs_3zfp_3Zfp_4decode(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_self, PyObject *__pyx_v_buf, PyObject *__pyx_v_out) { - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - int __pyx_t_4; - PyObject *__pyx_t_5 = NULL; - __Pyx_RefNannySetupContext("decode", 0); - __Pyx_INCREF(__pyx_v_buf); - - /* "numcodecs/zfp.pyx":418 - * - * def decode(self,buf,out=None): - * buf=ensure_contiguous_ndarray(buf) # <<<<<<<<<<<<<< - * return decompress(buf,out) - * - */ - __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_ensure_contiguous_ndarray); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 418, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = NULL; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_3)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - } - } - __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_v_buf) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_buf); - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 418, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF_SET(__pyx_v_buf, __pyx_t_1); - __pyx_t_1 = 0; - - /* "numcodecs/zfp.pyx":419 - * def decode(self,buf,out=None): - * buf=ensure_contiguous_ndarray(buf) - * return decompress(buf,out) # <<<<<<<<<<<<<< - * - * def __repr__(self): - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_decompress); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 419, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = NULL; - __pyx_t_4 = 0; - if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) { - __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); - if (likely(__pyx_t_3)) { - PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); - __Pyx_INCREF(__pyx_t_3); - __Pyx_INCREF(function); - __Pyx_DECREF_SET(__pyx_t_2, function); - __pyx_t_4 = 1; - } - } - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(__pyx_t_2)) { - PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_v_buf, __pyx_v_out}; - __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 419, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_GOTREF(__pyx_t_1); - } else - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) { - PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_v_buf, __pyx_v_out}; - __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 419, __pyx_L1_error) - __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_GOTREF(__pyx_t_1); - } else - #endif - { - __pyx_t_5 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 419, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - if (__pyx_t_3) { - __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); __pyx_t_3 = NULL; - } - __Pyx_INCREF(__pyx_v_buf); - __Pyx_GIVEREF(__pyx_v_buf); - PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_4, __pyx_v_buf); - __Pyx_INCREF(__pyx_v_out); - __Pyx_GIVEREF(__pyx_v_out); - PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_4, __pyx_v_out); - __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 419, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - } - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_r = __pyx_t_1; - __pyx_t_1 = 0; - goto __pyx_L0; - - /* "numcodecs/zfp.pyx":417 - * return compress(buf,self.the_method) - * - * def decode(self,buf,out=None): # <<<<<<<<<<<<<< - * buf=ensure_contiguous_ndarray(buf) - * return decompress(buf,out) - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_AddTraceback("numcodecs.zfp.Zfp.decode", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_buf); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -/* "numcodecs/zfp.pyx":421 - * return decompress(buf,out) - * - * def __repr__(self): # <<<<<<<<<<<<<< - * if self.mode == 'a': - * r= '%s(mode=%r,tol=%s)' % (type(self).__name__, self.mode,self.tol) - */ - -/* Python wrapper */ -static PyObject *__pyx_pw_9numcodecs_3zfp_3Zfp_7__repr__(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/ -static PyMethodDef __pyx_mdef_9numcodecs_3zfp_3Zfp_7__repr__ = {"__repr__", (PyCFunction)__pyx_pw_9numcodecs_3zfp_3Zfp_7__repr__, METH_O, 0}; -static PyObject *__pyx_pw_9numcodecs_3zfp_3Zfp_7__repr__(PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_r = 0; - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0); - __pyx_r = __pyx_pf_9numcodecs_3zfp_3Zfp_6__repr__(__pyx_self, ((PyObject *)__pyx_v_self)); - - /* function exit code */ - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyObject *__pyx_pf_9numcodecs_3zfp_3Zfp_6__repr__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) { - PyObject *__pyx_v_r = NULL; - PyObject *__pyx_r = NULL; - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - int __pyx_t_2; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - PyObject *__pyx_t_6 = NULL; - PyObject *__pyx_t_7 = NULL; - PyObject *__pyx_t_8 = NULL; - __Pyx_RefNannySetupContext("__repr__", 0); - - /* "numcodecs/zfp.pyx":422 - * - * def __repr__(self): - * if self.mode == 'a': # <<<<<<<<<<<<<< - * r= '%s(mode=%r,tol=%s)' % (type(self).__name__, self.mode,self.tol) - * elif self.mode == 'p': - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_mode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 422, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_t_1, __pyx_n_s_a, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 422, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - if (__pyx_t_2) { - - /* "numcodecs/zfp.pyx":423 - * def __repr__(self): - * if self.mode == 'a': - * r= '%s(mode=%r,tol=%s)' % (type(self).__name__, self.mode,self.tol) # <<<<<<<<<<<<<< - * elif self.mode == 'p': - * r= '%s(mode=%r,prec=%s)' % (type(self).__name__,self.mode,self.prec) - */ - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(__pyx_v_self)), __pyx_n_s_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 423, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_mode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 423, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_tol); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 423, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 423, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_3); - PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_3); - __Pyx_GIVEREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_4); - __pyx_t_1 = 0; - __pyx_t_3 = 0; - __pyx_t_4 = 0; - __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_s_mode_r_tol_s, __pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 423, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - __pyx_v_r = __pyx_t_4; - __pyx_t_4 = 0; - - /* "numcodecs/zfp.pyx":422 - * - * def __repr__(self): - * if self.mode == 'a': # <<<<<<<<<<<<<< - * r= '%s(mode=%r,tol=%s)' % (type(self).__name__, self.mode,self.tol) - * elif self.mode == 'p': - */ - goto __pyx_L3; - } - - /* "numcodecs/zfp.pyx":424 - * if self.mode == 'a': - * r= '%s(mode=%r,tol=%s)' % (type(self).__name__, self.mode,self.tol) - * elif self.mode == 'p': # <<<<<<<<<<<<<< - * r= '%s(mode=%r,prec=%s)' % (type(self).__name__,self.mode,self.prec) - * elif self.mode == 'r': - */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_mode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 424, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_t_4, __pyx_n_s_p, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 424, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - if (__pyx_t_2) { - - /* "numcodecs/zfp.pyx":425 - * r= '%s(mode=%r,tol=%s)' % (type(self).__name__, self.mode,self.tol) - * elif self.mode == 'p': - * r= '%s(mode=%r,prec=%s)' % (type(self).__name__,self.mode,self.prec) # <<<<<<<<<<<<<< - * elif self.mode == 'r': - * r= '%s(mode=%r,rate=%s)' % (type(self).__name__,self.mode,self.rate) - */ - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(__pyx_v_self)), __pyx_n_s_name); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 425, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_mode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 425, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_prec); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 425, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 425, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GIVEREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_4); - __Pyx_GIVEREF(__pyx_t_5); - PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_5); - __Pyx_GIVEREF(__pyx_t_3); - PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_t_3); - __pyx_t_4 = 0; - __pyx_t_5 = 0; - __pyx_t_3 = 0; - __pyx_t_3 = __Pyx_PyString_Format(__pyx_kp_s_s_mode_r_prec_s, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 425, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_v_r = __pyx_t_3; - __pyx_t_3 = 0; - - /* "numcodecs/zfp.pyx":424 - * if self.mode == 'a': - * r= '%s(mode=%r,tol=%s)' % (type(self).__name__, self.mode,self.tol) - * elif self.mode == 'p': # <<<<<<<<<<<<<< - * r= '%s(mode=%r,prec=%s)' % (type(self).__name__,self.mode,self.prec) - * elif self.mode == 'r': - */ - goto __pyx_L3; - } - - /* "numcodecs/zfp.pyx":426 - * elif self.mode == 'p': - * r= '%s(mode=%r,prec=%s)' % (type(self).__name__,self.mode,self.prec) - * elif self.mode == 'r': # <<<<<<<<<<<<<< - * r= '%s(mode=%r,rate=%s)' % (type(self).__name__,self.mode,self.rate) - * elif self.mode == 'c': - */ - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_mode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 426, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_t_3, __pyx_n_s_r, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 426, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - if (__pyx_t_2) { - - /* "numcodecs/zfp.pyx":427 - * r= '%s(mode=%r,prec=%s)' % (type(self).__name__,self.mode,self.prec) - * elif self.mode == 'r': - * r= '%s(mode=%r,rate=%s)' % (type(self).__name__,self.mode,self.rate) # <<<<<<<<<<<<<< - * elif self.mode == 'c': - * r= '%s(mode=%r,minbits=%s,maxbits=%s,minexp=%s,maxprec=%s)' % (type(self).__name__,self.mode,self.minbits,self.maxbits,self.minexp,self.maxprec) - */ - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(__pyx_v_self)), __pyx_n_s_name); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 427, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_mode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 427, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_rate); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 427, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 427, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_GIVEREF(__pyx_t_3); - PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_5); - PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_5); - __pyx_t_3 = 0; - __pyx_t_1 = 0; - __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyString_Format(__pyx_kp_s_s_mode_r_rate_s, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 427, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __pyx_v_r = __pyx_t_5; - __pyx_t_5 = 0; - - /* "numcodecs/zfp.pyx":426 - * elif self.mode == 'p': - * r= '%s(mode=%r,prec=%s)' % (type(self).__name__,self.mode,self.prec) - * elif self.mode == 'r': # <<<<<<<<<<<<<< - * r= '%s(mode=%r,rate=%s)' % (type(self).__name__,self.mode,self.rate) - * elif self.mode == 'c': - */ - goto __pyx_L3; - } - - /* "numcodecs/zfp.pyx":428 - * elif self.mode == 'r': - * r= '%s(mode=%r,rate=%s)' % (type(self).__name__,self.mode,self.rate) - * elif self.mode == 'c': # <<<<<<<<<<<<<< - * r= '%s(mode=%r,minbits=%s,maxbits=%s,minexp=%s,maxprec=%s)' % (type(self).__name__,self.mode,self.minbits,self.maxbits,self.minexp,self.maxprec) - * else: - */ - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_mode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 428, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_t_5, __pyx_n_s_c, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 428, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; - if (__pyx_t_2) { - - /* "numcodecs/zfp.pyx":429 - * r= '%s(mode=%r,rate=%s)' % (type(self).__name__,self.mode,self.rate) - * elif self.mode == 'c': - * r= '%s(mode=%r,minbits=%s,maxbits=%s,minexp=%s,maxprec=%s)' % (type(self).__name__,self.mode,self.minbits,self.maxbits,self.minexp,self.maxprec) # <<<<<<<<<<<<<< - * else: - * r="WRONG MODE" - */ - __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(__pyx_v_self)), __pyx_n_s_name); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 429, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_mode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 429, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_minbits); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 429, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_maxbits); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 429, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_minexp); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 429, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_6); - __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_maxprec); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 429, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __pyx_t_8 = PyTuple_New(6); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 429, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_8); - __Pyx_GIVEREF(__pyx_t_5); - PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_5); - __Pyx_GIVEREF(__pyx_t_4); - PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_4); - __Pyx_GIVEREF(__pyx_t_1); - PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_t_1); - __Pyx_GIVEREF(__pyx_t_3); - PyTuple_SET_ITEM(__pyx_t_8, 3, __pyx_t_3); - __Pyx_GIVEREF(__pyx_t_6); - PyTuple_SET_ITEM(__pyx_t_8, 4, __pyx_t_6); - __Pyx_GIVEREF(__pyx_t_7); - PyTuple_SET_ITEM(__pyx_t_8, 5, __pyx_t_7); - __pyx_t_5 = 0; - __pyx_t_4 = 0; - __pyx_t_1 = 0; - __pyx_t_3 = 0; - __pyx_t_6 = 0; - __pyx_t_7 = 0; - __pyx_t_7 = __Pyx_PyString_Format(__pyx_kp_s_s_mode_r_minbits_s_maxbits_s_mi, __pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 429, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_7); - __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; - __pyx_v_r = __pyx_t_7; - __pyx_t_7 = 0; - - /* "numcodecs/zfp.pyx":428 - * elif self.mode == 'r': - * r= '%s(mode=%r,rate=%s)' % (type(self).__name__,self.mode,self.rate) - * elif self.mode == 'c': # <<<<<<<<<<<<<< - * r= '%s(mode=%r,minbits=%s,maxbits=%s,minexp=%s,maxprec=%s)' % (type(self).__name__,self.mode,self.minbits,self.maxbits,self.minexp,self.maxprec) - * else: - */ - goto __pyx_L3; - } - - /* "numcodecs/zfp.pyx":431 - * r= '%s(mode=%r,minbits=%s,maxbits=%s,minexp=%s,maxprec=%s)' % (type(self).__name__,self.mode,self.minbits,self.maxbits,self.minexp,self.maxprec) - * else: - * r="WRONG MODE" # <<<<<<<<<<<<<< - * return r - * - */ - /*else*/ { - __Pyx_INCREF(__pyx_kp_s_WRONG_MODE); - __pyx_v_r = __pyx_kp_s_WRONG_MODE; - } - __pyx_L3:; - - /* "numcodecs/zfp.pyx":432 - * else: - * r="WRONG MODE" - * return r # <<<<<<<<<<<<<< - * - */ - __Pyx_XDECREF(__pyx_r); - __Pyx_INCREF(__pyx_v_r); - __pyx_r = __pyx_v_r; - goto __pyx_L0; - - /* "numcodecs/zfp.pyx":421 - * return decompress(buf,out) - * - * def __repr__(self): # <<<<<<<<<<<<<< - * if self.mode == 'a': - * r= '%s(mode=%r,tol=%s)' % (type(self).__name__, self.mode,self.tol) - */ - - /* function exit code */ - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - __Pyx_XDECREF(__pyx_t_6); - __Pyx_XDECREF(__pyx_t_7); - __Pyx_XDECREF(__pyx_t_8); - __Pyx_AddTraceback("numcodecs.zfp.Zfp.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename); - __pyx_r = NULL; - __pyx_L0:; - __Pyx_XDECREF(__pyx_v_r); - __Pyx_XGIVEREF(__pyx_r); - __Pyx_RefNannyFinishContext(); - return __pyx_r; -} - -static PyMethodDef __pyx_methods[] = { - {0, 0, 0, 0} -}; - -#if PY_MAJOR_VERSION >= 3 -#if CYTHON_PEP489_MULTI_PHASE_INIT -static PyObject* __pyx_pymod_create(PyObject *spec, PyModuleDef *def); /*proto*/ -static int __pyx_pymod_exec_zfp(PyObject* module); /*proto*/ -static PyModuleDef_Slot __pyx_moduledef_slots[] = { - {Py_mod_create, (void*)__pyx_pymod_create}, - {Py_mod_exec, (void*)__pyx_pymod_exec_zfp}, - {0, NULL} -}; -#endif - -static struct PyModuleDef __pyx_moduledef = { - PyModuleDef_HEAD_INIT, - "zfp", - 0, /* m_doc */ - #if CYTHON_PEP489_MULTI_PHASE_INIT - 0, /* m_size */ - #else - -1, /* m_size */ - #endif - __pyx_methods /* m_methods */, - #if CYTHON_PEP489_MULTI_PHASE_INIT - __pyx_moduledef_slots, /* m_slots */ - #else - NULL, /* m_reload */ - #endif - NULL, /* m_traverse */ - NULL, /* m_clear */ - NULL /* m_free */ -}; -#endif -#ifndef CYTHON_SMALL_CODE -#if defined(__clang__) - #define CYTHON_SMALL_CODE -#elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)) - #define CYTHON_SMALL_CODE __attribute__((cold)) -#else - #define CYTHON_SMALL_CODE -#endif -#endif - -static __Pyx_StringTabEntry __pyx_string_tab[] = { - {&__pyx_n_s_Buffer, __pyx_k_Buffer, sizeof(__pyx_k_Buffer), 0, 0, 1, 1}, - {&__pyx_n_s_Codec, __pyx_k_Codec, sizeof(__pyx_k_Codec), 0, 0, 1, 1}, - {&__pyx_kp_s_Codec_providing_compression_usin, __pyx_k_Codec_providing_compression_usin, sizeof(__pyx_k_Codec_providing_compression_usin), 0, 0, 1, 0}, - {&__pyx_n_s_CompressMethod, __pyx_k_CompressMethod, sizeof(__pyx_k_CompressMethod), 0, 0, 1, 1}, - {&__pyx_n_s_CompressMethod___init, __pyx_k_CompressMethod___init, sizeof(__pyx_k_CompressMethod___init), 0, 0, 1, 1}, - {&__pyx_n_s_CompressMethod_set_maxbits, __pyx_k_CompressMethod_set_maxbits, sizeof(__pyx_k_CompressMethod_set_maxbits), 0, 0, 1, 1}, - {&__pyx_n_s_CompressMethod_set_maxprec, __pyx_k_CompressMethod_set_maxprec, sizeof(__pyx_k_CompressMethod_set_maxprec), 0, 0, 1, 1}, - {&__pyx_n_s_CompressMethod_set_minbits, __pyx_k_CompressMethod_set_minbits, sizeof(__pyx_k_CompressMethod_set_minbits), 0, 0, 1, 1}, - {&__pyx_n_s_CompressMethod_set_minexp, __pyx_k_CompressMethod_set_minexp, sizeof(__pyx_k_CompressMethod_set_minexp), 0, 0, 1, 1}, - {&__pyx_n_s_CompressMethod_set_mode, __pyx_k_CompressMethod_set_mode, sizeof(__pyx_k_CompressMethod_set_mode), 0, 0, 1, 1}, - {&__pyx_n_s_CompressMethod_set_precision, __pyx_k_CompressMethod_set_precision, sizeof(__pyx_k_CompressMethod_set_precision), 0, 0, 1, 1}, - {&__pyx_n_s_CompressMethod_set_rate, __pyx_k_CompressMethod_set_rate, sizeof(__pyx_k_CompressMethod_set_rate), 0, 0, 1, 1}, - {&__pyx_n_s_CompressMethod_set_tolerance, __pyx_k_CompressMethod_set_tolerance, sizeof(__pyx_k_CompressMethod_set_tolerance), 0, 0, 1, 1}, - {&__pyx_kp_s_Create_a_CompressMethod_object, __pyx_k_Create_a_CompressMethod_object, sizeof(__pyx_k_Create_a_CompressMethod_object), 0, 0, 1, 0}, - {&__pyx_kp_s_Must_specify_zfp_mode, __pyx_k_Must_specify_zfp_mode, sizeof(__pyx_k_Must_specify_zfp_mode), 0, 0, 1, 0}, - {&__pyx_n_s_RuntimeError, __pyx_k_RuntimeError, sizeof(__pyx_k_RuntimeError), 0, 0, 1, 1}, - {&__pyx_kp_s_The_dimension_of_data_should_be, __pyx_k_The_dimension_of_data_should_be, sizeof(__pyx_k_The_dimension_of_data_should_be), 0, 0, 1, 0}, - {&__pyx_kp_s_The_type_of_data_should_be_int32, __pyx_k_The_type_of_data_should_be_int32, sizeof(__pyx_k_The_type_of_data_should_be_int32), 0, 0, 1, 0}, - {&__pyx_n_s_TypeError, __pyx_k_TypeError, sizeof(__pyx_k_TypeError), 0, 0, 1, 1}, - {&__pyx_n_s_VERSION_STRING, __pyx_k_VERSION_STRING, sizeof(__pyx_k_VERSION_STRING), 0, 0, 1, 1}, - {&__pyx_n_s_ValueError, __pyx_k_ValueError, sizeof(__pyx_k_ValueError), 0, 0, 1, 1}, - {&__pyx_kp_s_WRONG_MODE, __pyx_k_WRONG_MODE, sizeof(__pyx_k_WRONG_MODE), 0, 0, 1, 0}, - {&__pyx_kp_s_Wrong_mode_please_set_mode_to_a, __pyx_k_Wrong_mode_please_set_mode_to_a, sizeof(__pyx_k_Wrong_mode_please_set_mode_to_a), 0, 0, 1, 0}, - {&__pyx_n_s_Zfp, __pyx_k_Zfp, sizeof(__pyx_k_Zfp), 0, 0, 1, 1}, - {&__pyx_n_s_Zfp___init, __pyx_k_Zfp___init, sizeof(__pyx_k_Zfp___init), 0, 0, 1, 1}, - {&__pyx_n_s_Zfp___repr, __pyx_k_Zfp___repr, sizeof(__pyx_k_Zfp___repr), 0, 0, 1, 1}, - {&__pyx_n_s_Zfp_decode, __pyx_k_Zfp_decode, sizeof(__pyx_k_Zfp_decode), 0, 0, 1, 1}, - {&__pyx_n_s_Zfp_encode, __pyx_k_Zfp_encode, sizeof(__pyx_k_Zfp_encode), 0, 0, 1, 1}, - {&__pyx_n_s_a, __pyx_k_a, sizeof(__pyx_k_a), 0, 0, 1, 1}, - {&__pyx_n_s_arr, __pyx_k_arr, sizeof(__pyx_k_arr), 0, 0, 1, 1}, - {&__pyx_n_s_ascontiguousarray, __pyx_k_ascontiguousarray, sizeof(__pyx_k_ascontiguousarray), 0, 0, 1, 1}, - {&__pyx_n_s_buf, __pyx_k_buf, sizeof(__pyx_k_buf), 0, 0, 1, 1}, - {&__pyx_n_s_buf_shape, __pyx_k_buf_shape, sizeof(__pyx_k_buf_shape), 0, 0, 1, 1}, - {&__pyx_n_s_bufsize, __pyx_k_bufsize, sizeof(__pyx_k_bufsize), 0, 0, 1, 1}, - {&__pyx_n_s_c, __pyx_k_c, sizeof(__pyx_k_c), 0, 0, 1, 1}, - {&__pyx_n_s_cline_in_traceback, __pyx_k_cline_in_traceback, sizeof(__pyx_k_cline_in_traceback), 0, 0, 1, 1}, - {&__pyx_n_s_codec_id, __pyx_k_codec_id, sizeof(__pyx_k_codec_id), 0, 0, 1, 1}, - {&__pyx_n_s_compat_ext, __pyx_k_compat_ext, sizeof(__pyx_k_compat_ext), 0, 0, 1, 1}, - {&__pyx_n_s_compress, __pyx_k_compress, sizeof(__pyx_k_compress), 0, 0, 1, 1}, - {&__pyx_n_s_compressed_size, __pyx_k_compressed_size, sizeof(__pyx_k_compressed_size), 0, 0, 1, 1}, - {&__pyx_n_s_datashape, __pyx_k_datashape, sizeof(__pyx_k_datashape), 0, 0, 1, 1}, - {&__pyx_n_s_decode, __pyx_k_decode, sizeof(__pyx_k_decode), 0, 0, 1, 1}, - {&__pyx_n_s_decompress, __pyx_k_decompress, sizeof(__pyx_k_decompress), 0, 0, 1, 1}, - {&__pyx_kp_s_decompress_failed, __pyx_k_decompress_failed, sizeof(__pyx_k_decompress_failed), 0, 0, 1, 0}, - {&__pyx_n_s_dest, __pyx_k_dest, sizeof(__pyx_k_dest), 0, 0, 1, 1}, - {&__pyx_n_s_dest_buffer, __pyx_k_dest_buffer, sizeof(__pyx_k_dest_buffer), 0, 0, 1, 1}, - {&__pyx_n_s_dest_ptr, __pyx_k_dest_ptr, sizeof(__pyx_k_dest_ptr), 0, 0, 1, 1}, - {&__pyx_n_s_dest_size, __pyx_k_dest_size, sizeof(__pyx_k_dest_size), 0, 0, 1, 1}, - {&__pyx_n_s_doc, __pyx_k_doc, sizeof(__pyx_k_doc), 0, 0, 1, 1}, - {&__pyx_n_s_dtype, __pyx_k_dtype, sizeof(__pyx_k_dtype), 0, 0, 1, 1}, - {&__pyx_n_s_encode, __pyx_k_encode, sizeof(__pyx_k_encode), 0, 0, 1, 1}, - {&__pyx_n_s_ensure_contiguous_ndarray, __pyx_k_ensure_contiguous_ndarray, sizeof(__pyx_k_ensure_contiguous_ndarray), 0, 0, 1, 1}, - {&__pyx_n_s_ensure_ndarray, __pyx_k_ensure_ndarray, sizeof(__pyx_k_ensure_ndarray), 0, 0, 1, 1}, - {&__pyx_n_s_f_contiguous, __pyx_k_f_contiguous, sizeof(__pyx_k_f_contiguous), 0, 0, 1, 1}, - {&__pyx_n_s_field, __pyx_k_field, sizeof(__pyx_k_field), 0, 0, 1, 1}, - {&__pyx_n_s_flags, __pyx_k_flags, sizeof(__pyx_k_flags), 0, 0, 1, 1}, - {&__pyx_n_s_float32, __pyx_k_float32, sizeof(__pyx_k_float32), 0, 0, 1, 1}, - {&__pyx_n_s_float64, __pyx_k_float64, sizeof(__pyx_k_float64), 0, 0, 1, 1}, - {&__pyx_n_s_import, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1}, - {&__pyx_n_s_init, __pyx_k_init, sizeof(__pyx_k_init), 0, 0, 1, 1}, - {&__pyx_n_s_input_array, __pyx_k_input_array, sizeof(__pyx_k_input_array), 0, 0, 1, 1}, - {&__pyx_n_s_int32, __pyx_k_int32, sizeof(__pyx_k_int32), 0, 0, 1, 1}, - {&__pyx_n_s_int64, __pyx_k_int64, sizeof(__pyx_k_int64), 0, 0, 1, 1}, - {&__pyx_n_s_itemsize, __pyx_k_itemsize, sizeof(__pyx_k_itemsize), 0, 0, 1, 1}, - {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1}, - {&__pyx_n_s_maxbits, __pyx_k_maxbits, sizeof(__pyx_k_maxbits), 0, 0, 1, 1}, - {&__pyx_n_s_maxprec, __pyx_k_maxprec, sizeof(__pyx_k_maxprec), 0, 0, 1, 1}, - {&__pyx_n_s_metaclass, __pyx_k_metaclass, sizeof(__pyx_k_metaclass), 0, 0, 1, 1}, - {&__pyx_n_s_method, __pyx_k_method, sizeof(__pyx_k_method), 0, 0, 1, 1}, - {&__pyx_n_s_minbits, __pyx_k_minbits, sizeof(__pyx_k_minbits), 0, 0, 1, 1}, - {&__pyx_n_s_minexp, __pyx_k_minexp, sizeof(__pyx_k_minexp), 0, 0, 1, 1}, - {&__pyx_n_s_mode, __pyx_k_mode, sizeof(__pyx_k_mode), 0, 0, 1, 1}, - {&__pyx_n_s_module, __pyx_k_module, sizeof(__pyx_k_module), 0, 0, 1, 1}, - {&__pyx_n_s_name, __pyx_k_name, sizeof(__pyx_k_name), 0, 0, 1, 1}, - {&__pyx_n_s_ndim, __pyx_k_ndim, sizeof(__pyx_k_ndim), 0, 0, 1, 1}, - {&__pyx_n_s_np, __pyx_k_np, sizeof(__pyx_k_np), 0, 0, 1, 1}, - {&__pyx_n_s_numcodecs_abc, __pyx_k_numcodecs_abc, sizeof(__pyx_k_numcodecs_abc), 0, 0, 1, 1}, - {&__pyx_n_s_numcodecs_compat, __pyx_k_numcodecs_compat, sizeof(__pyx_k_numcodecs_compat), 0, 0, 1, 1}, - {&__pyx_n_s_numcodecs_zfp, __pyx_k_numcodecs_zfp, sizeof(__pyx_k_numcodecs_zfp), 0, 0, 1, 1}, - {&__pyx_kp_s_numcodecs_zfp_pyx, __pyx_k_numcodecs_zfp_pyx, sizeof(__pyx_k_numcodecs_zfp_pyx), 0, 0, 1, 0}, - {&__pyx_n_s_numpy, __pyx_k_numpy, sizeof(__pyx_k_numpy), 0, 0, 1, 1}, - {&__pyx_n_s_nw, __pyx_k_nw, sizeof(__pyx_k_nw), 0, 0, 1, 1}, - {&__pyx_n_s_nx, __pyx_k_nx, sizeof(__pyx_k_nx), 0, 0, 1, 1}, - {&__pyx_n_s_ny, __pyx_k_ny, sizeof(__pyx_k_ny), 0, 0, 1, 1}, - {&__pyx_n_s_nz, __pyx_k_nz, sizeof(__pyx_k_nz), 0, 0, 1, 1}, - {&__pyx_n_s_out, __pyx_k_out, sizeof(__pyx_k_out), 0, 0, 1, 1}, - {&__pyx_n_s_p, __pyx_k_p, sizeof(__pyx_k_p), 0, 0, 1, 1}, - {&__pyx_n_s_prec, __pyx_k_prec, sizeof(__pyx_k_prec), 0, 0, 1, 1}, - {&__pyx_n_s_precision, __pyx_k_precision, sizeof(__pyx_k_precision), 0, 0, 1, 1}, - {&__pyx_n_s_prepare, __pyx_k_prepare, sizeof(__pyx_k_prepare), 0, 0, 1, 1}, - {&__pyx_n_s_pyx_vtable, __pyx_k_pyx_vtable, sizeof(__pyx_k_pyx_vtable), 0, 0, 1, 1}, - {&__pyx_n_s_qualname, __pyx_k_qualname, sizeof(__pyx_k_qualname), 0, 0, 1, 1}, - {&__pyx_n_s_r, __pyx_k_r, sizeof(__pyx_k_r), 0, 0, 1, 1}, - {&__pyx_n_s_rate, __pyx_k_rate, sizeof(__pyx_k_rate), 0, 0, 1, 1}, - {&__pyx_n_s_repr, __pyx_k_repr, sizeof(__pyx_k_repr), 0, 0, 1, 1}, - {&__pyx_n_s_reshape, __pyx_k_reshape, sizeof(__pyx_k_reshape), 0, 0, 1, 1}, - {&__pyx_n_s_ret, __pyx_k_ret, sizeof(__pyx_k_ret), 0, 0, 1, 1}, - {&__pyx_kp_s_s_mode_r_minbits_s_maxbits_s_mi, __pyx_k_s_mode_r_minbits_s_maxbits_s_mi, sizeof(__pyx_k_s_mode_r_minbits_s_maxbits_s_mi), 0, 0, 1, 0}, - {&__pyx_kp_s_s_mode_r_prec_s, __pyx_k_s_mode_r_prec_s, sizeof(__pyx_k_s_mode_r_prec_s), 0, 0, 1, 0}, - {&__pyx_kp_s_s_mode_r_rate_s, __pyx_k_s_mode_r_rate_s, sizeof(__pyx_k_s_mode_r_rate_s), 0, 0, 1, 0}, - {&__pyx_kp_s_s_mode_r_tol_s, __pyx_k_s_mode_r_tol_s, sizeof(__pyx_k_s_mode_r_tol_s), 0, 0, 1, 0}, - {&__pyx_n_s_self, __pyx_k_self, sizeof(__pyx_k_self), 0, 0, 1, 1}, - {&__pyx_n_s_set_maxbits, __pyx_k_set_maxbits, sizeof(__pyx_k_set_maxbits), 0, 0, 1, 1}, - {&__pyx_n_s_set_maxprec, __pyx_k_set_maxprec, sizeof(__pyx_k_set_maxprec), 0, 0, 1, 1}, - {&__pyx_n_s_set_minbits, __pyx_k_set_minbits, sizeof(__pyx_k_set_minbits), 0, 0, 1, 1}, - {&__pyx_n_s_set_minexp, __pyx_k_set_minexp, sizeof(__pyx_k_set_minexp), 0, 0, 1, 1}, - {&__pyx_n_s_set_mode, __pyx_k_set_mode, sizeof(__pyx_k_set_mode), 0, 0, 1, 1}, - {&__pyx_n_s_set_precision, __pyx_k_set_precision, sizeof(__pyx_k_set_precision), 0, 0, 1, 1}, - {&__pyx_n_s_set_rate, __pyx_k_set_rate, sizeof(__pyx_k_set_rate), 0, 0, 1, 1}, - {&__pyx_n_s_set_tolerance, __pyx_k_set_tolerance, sizeof(__pyx_k_set_tolerance), 0, 0, 1, 1}, - {&__pyx_n_s_shape, __pyx_k_shape, sizeof(__pyx_k_shape), 0, 0, 1, 1}, - {&__pyx_n_s_source, __pyx_k_source, sizeof(__pyx_k_source), 0, 0, 1, 1}, - {&__pyx_n_s_source_buffer, __pyx_k_source_buffer, sizeof(__pyx_k_source_buffer), 0, 0, 1, 1}, - {&__pyx_n_s_source_ptr, __pyx_k_source_ptr, sizeof(__pyx_k_source_ptr), 0, 0, 1, 1}, - {&__pyx_n_s_source_size, __pyx_k_source_size, sizeof(__pyx_k_source_size), 0, 0, 1, 1}, - {&__pyx_n_s_stream, __pyx_k_stream, sizeof(__pyx_k_stream), 0, 0, 1, 1}, - {&__pyx_n_s_stride, __pyx_k_stride, sizeof(__pyx_k_stride), 0, 0, 1, 1}, - {&__pyx_n_s_strides, __pyx_k_strides, sizeof(__pyx_k_strides), 0, 0, 1, 1}, - {&__pyx_n_s_sys, __pyx_k_sys, sizeof(__pyx_k_sys), 0, 0, 1, 1}, - {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1}, - {&__pyx_n_s_the_method, __pyx_k_the_method, sizeof(__pyx_k_the_method), 0, 0, 1, 1}, - {&__pyx_n_s_the_type, __pyx_k_the_type, sizeof(__pyx_k_the_type), 0, 0, 1, 1}, - {&__pyx_n_s_tol, __pyx_k_tol, sizeof(__pyx_k_tol), 0, 0, 1, 1}, - {&__pyx_n_s_tolerance, __pyx_k_tolerance, sizeof(__pyx_k_tolerance), 0, 0, 1, 1}, - {&__pyx_n_s_type_size, __pyx_k_type_size, sizeof(__pyx_k_type_size), 0, 0, 1, 1}, - {&__pyx_n_s_version, __pyx_k_version, sizeof(__pyx_k_version), 0, 0, 1, 1}, - {&__pyx_n_s_view, __pyx_k_view, sizeof(__pyx_k_view), 0, 0, 1, 1}, - {&__pyx_n_s_zfp, __pyx_k_zfp, sizeof(__pyx_k_zfp), 0, 0, 1, 1}, - {&__pyx_kp_s_zfp_compress_is_failed, __pyx_k_zfp_compress_is_failed, sizeof(__pyx_k_zfp_compress_is_failed), 0, 0, 1, 0}, - {&__pyx_kp_s_zfp_read_header_failed, __pyx_k_zfp_read_header_failed, sizeof(__pyx_k_zfp_read_header_failed), 0, 0, 1, 0}, - {&__pyx_kp_s_zfp_write_header_failed, __pyx_k_zfp_write_header_failed, sizeof(__pyx_k_zfp_write_header_failed), 0, 0, 1, 0}, - {&__pyx_n_s_zfpmode, __pyx_k_zfpmode, sizeof(__pyx_k_zfpmode), 0, 0, 1, 1}, - {0, 0, 0, 0, 0, 0, 0} -}; -static CYTHON_SMALL_CODE int __Pyx_InitCachedBuiltins(void) { - __pyx_builtin_TypeError = __Pyx_GetBuiltinName(__pyx_n_s_TypeError); if (!__pyx_builtin_TypeError) __PYX_ERR(0, 156, __pyx_L1_error) - __pyx_builtin_ValueError = __Pyx_GetBuiltinName(__pyx_n_s_ValueError); if (!__pyx_builtin_ValueError) __PYX_ERR(0, 179, __pyx_L1_error) - __pyx_builtin_RuntimeError = __Pyx_GetBuiltinName(__pyx_n_s_RuntimeError); if (!__pyx_builtin_RuntimeError) __PYX_ERR(0, 205, __pyx_L1_error) - return 0; - __pyx_L1_error:; - return -1; -} - -static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0); - - /* "numcodecs/zfp.pyx":156 - * the_type = zfp_type_int64 - * else: - * raise TypeError("The type of data should be int32, int64, float or double") # <<<<<<<<<<<<<< - * - * zfp_field_set_type(field,the_type) - */ - __pyx_tuple_ = PyTuple_Pack(1, __pyx_kp_s_The_type_of_data_should_be_int32); if (unlikely(!__pyx_tuple_)) __PYX_ERR(0, 156, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple_); - __Pyx_GIVEREF(__pyx_tuple_); - - /* "numcodecs/zfp.pyx":179 - * zfp_field_set_stride_4d(field,input_array.strides[3]/input_array.itemsize,input_array.strides[2]/input_array.itemsize,input_array.strides[1]/input_array.itemsize,input_array.strides[0]/input_array.itemsize) - * else: - * raise ValueError("The dimension of data should be equal or less than 4, please reshape") # <<<<<<<<<<<<<< - * # setup compression mode - * zfp=zfp_stream_open(NULL) - */ - __pyx_tuple__2 = PyTuple_Pack(1, __pyx_kp_s_The_dimension_of_data_should_be); if (unlikely(!__pyx_tuple__2)) __PYX_ERR(0, 179, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__2); - __Pyx_GIVEREF(__pyx_tuple__2); - - /* "numcodecs/zfp.pyx":191 - * zfp_stream_set_params(zfp,method['minbits'],method['maxbits'],method['maxprec'],method['minexp']) - * else: - * raise ValueError('Must specify zfp mode') # <<<<<<<<<<<<<< - * - * # setup destination - */ - __pyx_tuple__3 = PyTuple_Pack(1, __pyx_kp_s_Must_specify_zfp_mode); if (unlikely(!__pyx_tuple__3)) __PYX_ERR(0, 191, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__3); - __Pyx_GIVEREF(__pyx_tuple__3); - - /* "numcodecs/zfp.pyx":205 - * ret = zfp_write_header(zfp,field,ZFP_HEADER_FULL) - * if not ret: - * raise RuntimeError("zfp_write_header failed") # <<<<<<<<<<<<<< - * compressed_size = zfp_compress(zfp,field) - * if not compressed_size: - */ - __pyx_tuple__4 = PyTuple_Pack(1, __pyx_kp_s_zfp_write_header_failed); if (unlikely(!__pyx_tuple__4)) __PYX_ERR(0, 205, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__4); - __Pyx_GIVEREF(__pyx_tuple__4); - - /* "numcodecs/zfp.pyx":208 - * compressed_size = zfp_compress(zfp,field) - * if not compressed_size: - * raise RuntimeError("zfp_compress is failed") # <<<<<<<<<<<<<< - * - * # release buffers - */ - __pyx_tuple__5 = PyTuple_Pack(1, __pyx_kp_s_zfp_compress_is_failed); if (unlikely(!__pyx_tuple__5)) __PYX_ERR(0, 208, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__5); - __Pyx_GIVEREF(__pyx_tuple__5); - - /* "numcodecs/zfp.pyx":260 - * ret = zfp_read_header(zfp,field,ZFP_HEADER_FULL); - * if not ret: - * raise RuntimeError("zfp_read_header failed") # <<<<<<<<<<<<<< - * - * # determine destination data type - */ - __pyx_tuple__6 = PyTuple_Pack(1, __pyx_kp_s_zfp_read_header_failed); if (unlikely(!__pyx_tuple__6)) __PYX_ERR(0, 260, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__6); - __Pyx_GIVEREF(__pyx_tuple__6); - - /* "numcodecs/zfp.pyx":297 - * ret = zfp_decompress(zfp,field) - * if not ret: - * raise RuntimeError("decompress failed") # <<<<<<<<<<<<<< - * - * # release buffers - */ - __pyx_tuple__7 = PyTuple_Pack(1, __pyx_kp_s_decompress_failed); if (unlikely(!__pyx_tuple__7)) __PYX_ERR(0, 297, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__7); - __Pyx_GIVEREF(__pyx_tuple__7); - - /* "numcodecs/zfp.pyx":410 - * self.the_method['maxprec']=maxprec - * else: - * raise ValueError("Wrong mode, please set mode to 'a', 'p', 'r' or 'c'") # <<<<<<<<<<<<<< - * #self.the_method=the_method - * - */ - __pyx_tuple__8 = PyTuple_Pack(1, __pyx_kp_s_Wrong_mode_please_set_mode_to_a); if (unlikely(!__pyx_tuple__8)) __PYX_ERR(0, 410, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__8); - __Pyx_GIVEREF(__pyx_tuple__8); - - /* "numcodecs/zfp.pyx":104 - * - * - * def compress(input_array,method): # <<<<<<<<<<<<<< - * """Compress data. - * - */ - __pyx_tuple__9 = PyTuple_Pack(16, __pyx_n_s_input_array, __pyx_n_s_method, __pyx_n_s_zfp, __pyx_n_s_stream, __pyx_n_s_field, __pyx_n_s_bufsize, __pyx_n_s_stride, __pyx_n_s_source_ptr, __pyx_n_s_dest_ptr, __pyx_n_s_source_buffer, __pyx_n_s_dest_size, __pyx_n_s_compressed_size, __pyx_n_s_dest, __pyx_n_s_zfpmode, __pyx_n_s_the_type, __pyx_n_s_ret); if (unlikely(!__pyx_tuple__9)) __PYX_ERR(0, 104, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__9); - __Pyx_GIVEREF(__pyx_tuple__9); - __pyx_codeobj__10 = (PyObject*)__Pyx_PyCode_New(2, 0, 16, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__9, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_numcodecs_zfp_pyx, __pyx_n_s_compress, 104, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__10)) __PYX_ERR(0, 104, __pyx_L1_error) - - /* "numcodecs/zfp.pyx":218 - * return dest[:compressed_size] - * - * def decompress(source,dest=None): # <<<<<<<<<<<<<< - * """Decompress data. - * - */ - __pyx_tuple__11 = PyTuple_Pack(20, __pyx_n_s_source, __pyx_n_s_dest, __pyx_n_s_zfp, __pyx_n_s_stream, __pyx_n_s_field, __pyx_n_s_source_buffer, __pyx_n_s_dest_buffer, __pyx_n_s_source_ptr, __pyx_n_s_dest_ptr, __pyx_n_s_source_size, __pyx_n_s_ret, __pyx_n_s_the_type, __pyx_n_s_type_size, __pyx_n_s_nx, __pyx_n_s_ny, __pyx_n_s_nz, __pyx_n_s_nw, __pyx_n_s_datashape, __pyx_n_s_arr, __pyx_n_s_buf_shape); if (unlikely(!__pyx_tuple__11)) __PYX_ERR(0, 218, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__11); - __Pyx_GIVEREF(__pyx_tuple__11); - __pyx_codeobj__12 = (PyObject*)__Pyx_PyCode_New(2, 0, 20, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__11, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_numcodecs_zfp_pyx, __pyx_n_s_decompress, 218, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__12)) __PYX_ERR(0, 218, __pyx_L1_error) - - /* "numcodecs/zfp.pyx":328 - * - * # Initilize with defaults - * def __init__(self): # <<<<<<<<<<<<<< - * self.zfpmode='a' - * self.tolerance=0.01 - */ - __pyx_tuple__13 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__13)) __PYX_ERR(0, 328, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__13); - __Pyx_GIVEREF(__pyx_tuple__13); - __pyx_codeobj__14 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__13, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_numcodecs_zfp_pyx, __pyx_n_s_init, 328, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__14)) __PYX_ERR(0, 328, __pyx_L1_error) - - /* "numcodecs/zfp.pyx":332 - * self.tolerance=0.01 - * - * def set_mode(self,mode): # <<<<<<<<<<<<<< - * self.zfpmode=mode - * def set_tolerance(self,tol): - */ - __pyx_tuple__15 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_mode); if (unlikely(!__pyx_tuple__15)) __PYX_ERR(0, 332, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__15); - __Pyx_GIVEREF(__pyx_tuple__15); - __pyx_codeobj__16 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__15, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_numcodecs_zfp_pyx, __pyx_n_s_set_mode, 332, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__16)) __PYX_ERR(0, 332, __pyx_L1_error) - - /* "numcodecs/zfp.pyx":334 - * def set_mode(self,mode): - * self.zfpmode=mode - * def set_tolerance(self,tol): # <<<<<<<<<<<<<< - * self.tolerance=tol - * def set_precision(self,prec): - */ - __pyx_tuple__17 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_tol); if (unlikely(!__pyx_tuple__17)) __PYX_ERR(0, 334, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__17); - __Pyx_GIVEREF(__pyx_tuple__17); - __pyx_codeobj__18 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__17, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_numcodecs_zfp_pyx, __pyx_n_s_set_tolerance, 334, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__18)) __PYX_ERR(0, 334, __pyx_L1_error) - - /* "numcodecs/zfp.pyx":336 - * def set_tolerance(self,tol): - * self.tolerance=tol - * def set_precision(self,prec): # <<<<<<<<<<<<<< - * self.precision=prec - * def set_rate(self,rate): - */ - __pyx_tuple__19 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_prec); if (unlikely(!__pyx_tuple__19)) __PYX_ERR(0, 336, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__19); - __Pyx_GIVEREF(__pyx_tuple__19); - __pyx_codeobj__20 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__19, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_numcodecs_zfp_pyx, __pyx_n_s_set_precision, 336, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__20)) __PYX_ERR(0, 336, __pyx_L1_error) - - /* "numcodecs/zfp.pyx":338 - * def set_precision(self,prec): - * self.precision=prec - * def set_rate(self,rate): # <<<<<<<<<<<<<< - * self.rate=rate - * def set_minbits(self,minbits): - */ - __pyx_tuple__21 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_rate); if (unlikely(!__pyx_tuple__21)) __PYX_ERR(0, 338, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__21); - __Pyx_GIVEREF(__pyx_tuple__21); - __pyx_codeobj__22 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__21, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_numcodecs_zfp_pyx, __pyx_n_s_set_rate, 338, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__22)) __PYX_ERR(0, 338, __pyx_L1_error) - - /* "numcodecs/zfp.pyx":340 - * def set_rate(self,rate): - * self.rate=rate - * def set_minbits(self,minbits): # <<<<<<<<<<<<<< - * self.minbits=minbits - * def set_maxbits(self,maxbits): - */ - __pyx_tuple__23 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_minbits); if (unlikely(!__pyx_tuple__23)) __PYX_ERR(0, 340, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__23); - __Pyx_GIVEREF(__pyx_tuple__23); - __pyx_codeobj__24 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__23, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_numcodecs_zfp_pyx, __pyx_n_s_set_minbits, 340, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__24)) __PYX_ERR(0, 340, __pyx_L1_error) - - /* "numcodecs/zfp.pyx":342 - * def set_minbits(self,minbits): - * self.minbits=minbits - * def set_maxbits(self,maxbits): # <<<<<<<<<<<<<< - * self.maxbits=maxbits - * def set_maxprec(self,maxprec): - */ - __pyx_tuple__25 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_maxbits); if (unlikely(!__pyx_tuple__25)) __PYX_ERR(0, 342, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__25); - __Pyx_GIVEREF(__pyx_tuple__25); - __pyx_codeobj__26 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__25, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_numcodecs_zfp_pyx, __pyx_n_s_set_maxbits, 342, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__26)) __PYX_ERR(0, 342, __pyx_L1_error) - - /* "numcodecs/zfp.pyx":344 - * def set_maxbits(self,maxbits): - * self.maxbits=maxbits - * def set_maxprec(self,maxprec): # <<<<<<<<<<<<<< - * self.maxprec=maxprec - * def set_minexp(self,minexp): - */ - __pyx_tuple__27 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_maxprec); if (unlikely(!__pyx_tuple__27)) __PYX_ERR(0, 344, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__27); - __Pyx_GIVEREF(__pyx_tuple__27); - __pyx_codeobj__28 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__27, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_numcodecs_zfp_pyx, __pyx_n_s_set_maxprec, 344, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__28)) __PYX_ERR(0, 344, __pyx_L1_error) - - /* "numcodecs/zfp.pyx":346 - * def set_maxprec(self,maxprec): - * self.maxprec=maxprec - * def set_minexp(self,minexp): # <<<<<<<<<<<<<< - * self.minexp=minexp - * - */ - __pyx_tuple__29 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_minexp); if (unlikely(!__pyx_tuple__29)) __PYX_ERR(0, 346, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__29); - __Pyx_GIVEREF(__pyx_tuple__29); - __pyx_codeobj__30 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__29, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_numcodecs_zfp_pyx, __pyx_n_s_set_minexp, 346, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__30)) __PYX_ERR(0, 346, __pyx_L1_error) - - /* "numcodecs/zfp.pyx":382 - * codec_id = 'zfp' - * - * def __init__(self, mode = 'a',tol = 0.0, prec = ZFP_MAX_PREC, rate = 0, minbits = ZFP_MIN_BITS, maxbits = ZFP_MAX_BITS, minexp = ZFP_MIN_EXP, maxprec = ZFP_MAX_PREC,the_method=None): # <<<<<<<<<<<<<< - * self.mode=mode - * #the_method=CompressMethod() - */ - __pyx_tuple__31 = PyTuple_Pack(10, __pyx_n_s_self, __pyx_n_s_mode, __pyx_n_s_tol, __pyx_n_s_prec, __pyx_n_s_rate, __pyx_n_s_minbits, __pyx_n_s_maxbits, __pyx_n_s_minexp, __pyx_n_s_maxprec, __pyx_n_s_the_method); if (unlikely(!__pyx_tuple__31)) __PYX_ERR(0, 382, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__31); - __Pyx_GIVEREF(__pyx_tuple__31); - __pyx_codeobj__32 = (PyObject*)__Pyx_PyCode_New(10, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__31, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_numcodecs_zfp_pyx, __pyx_n_s_init, 382, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__32)) __PYX_ERR(0, 382, __pyx_L1_error) - - /* "numcodecs/zfp.pyx":413 - * #self.the_method=the_method - * - * def encode(self,buf): # <<<<<<<<<<<<<< - * #buf = ensure_contiguous_ndarray(buf) - * return compress(buf,self.the_method) - */ - __pyx_tuple__33 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_buf); if (unlikely(!__pyx_tuple__33)) __PYX_ERR(0, 413, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__33); - __Pyx_GIVEREF(__pyx_tuple__33); - __pyx_codeobj__34 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__33, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_numcodecs_zfp_pyx, __pyx_n_s_encode, 413, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__34)) __PYX_ERR(0, 413, __pyx_L1_error) - - /* "numcodecs/zfp.pyx":417 - * return compress(buf,self.the_method) - * - * def decode(self,buf,out=None): # <<<<<<<<<<<<<< - * buf=ensure_contiguous_ndarray(buf) - * return decompress(buf,out) - */ - __pyx_tuple__35 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_buf, __pyx_n_s_out); if (unlikely(!__pyx_tuple__35)) __PYX_ERR(0, 417, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__35); - __Pyx_GIVEREF(__pyx_tuple__35); - __pyx_codeobj__36 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__35, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_numcodecs_zfp_pyx, __pyx_n_s_decode, 417, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__36)) __PYX_ERR(0, 417, __pyx_L1_error) - __pyx_tuple__37 = PyTuple_Pack(1, ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__37)) __PYX_ERR(0, 417, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__37); - __Pyx_GIVEREF(__pyx_tuple__37); - - /* "numcodecs/zfp.pyx":421 - * return decompress(buf,out) - * - * def __repr__(self): # <<<<<<<<<<<<<< - * if self.mode == 'a': - * r= '%s(mode=%r,tol=%s)' % (type(self).__name__, self.mode,self.tol) - */ - __pyx_tuple__38 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_r); if (unlikely(!__pyx_tuple__38)) __PYX_ERR(0, 421, __pyx_L1_error) - __Pyx_GOTREF(__pyx_tuple__38); - __Pyx_GIVEREF(__pyx_tuple__38); - __pyx_codeobj__39 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__38, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_numcodecs_zfp_pyx, __pyx_n_s_repr, 421, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__39)) __PYX_ERR(0, 421, __pyx_L1_error) - __Pyx_RefNannyFinishContext(); - return 0; - __pyx_L1_error:; - __Pyx_RefNannyFinishContext(); - return -1; -} - -static CYTHON_SMALL_CODE int __Pyx_InitGlobals(void) { - if (__Pyx_InitStrings(__pyx_string_tab) < 0) __PYX_ERR(0, 1, __pyx_L1_error); - __pyx_float_0_0 = PyFloat_FromDouble(0.0); if (unlikely(!__pyx_float_0_0)) __PYX_ERR(0, 1, __pyx_L1_error) - __pyx_float_0_01 = PyFloat_FromDouble(0.01); if (unlikely(!__pyx_float_0_01)) __PYX_ERR(0, 1, __pyx_L1_error) - __pyx_int_0 = PyInt_FromLong(0); if (unlikely(!__pyx_int_0)) __PYX_ERR(0, 1, __pyx_L1_error) - __pyx_int_1 = PyInt_FromLong(1); if (unlikely(!__pyx_int_1)) __PYX_ERR(0, 1, __pyx_L1_error) - __pyx_int_2 = PyInt_FromLong(2); if (unlikely(!__pyx_int_2)) __PYX_ERR(0, 1, __pyx_L1_error) - __pyx_int_3 = PyInt_FromLong(3); if (unlikely(!__pyx_int_3)) __PYX_ERR(0, 1, __pyx_L1_error) - __pyx_int_4 = PyInt_FromLong(4); if (unlikely(!__pyx_int_4)) __PYX_ERR(0, 1, __pyx_L1_error) - __pyx_int_8 = PyInt_FromLong(8); if (unlikely(!__pyx_int_8)) __PYX_ERR(0, 1, __pyx_L1_error) - return 0; - __pyx_L1_error:; - return -1; -} - -static CYTHON_SMALL_CODE int __Pyx_modinit_global_init_code(void); /*proto*/ -static CYTHON_SMALL_CODE int __Pyx_modinit_variable_export_code(void); /*proto*/ -static CYTHON_SMALL_CODE int __Pyx_modinit_function_export_code(void); /*proto*/ -static CYTHON_SMALL_CODE int __Pyx_modinit_type_init_code(void); /*proto*/ -static CYTHON_SMALL_CODE int __Pyx_modinit_type_import_code(void); /*proto*/ -static CYTHON_SMALL_CODE int __Pyx_modinit_variable_import_code(void); /*proto*/ -static CYTHON_SMALL_CODE int __Pyx_modinit_function_import_code(void); /*proto*/ - -static int __Pyx_modinit_global_init_code(void) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__Pyx_modinit_global_init_code", 0); - /*--- Global init code ---*/ - __Pyx_RefNannyFinishContext(); - return 0; -} - -static int __Pyx_modinit_variable_export_code(void) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__Pyx_modinit_variable_export_code", 0); - /*--- Variable export code ---*/ - __Pyx_RefNannyFinishContext(); - return 0; -} - -static int __Pyx_modinit_function_export_code(void) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__Pyx_modinit_function_export_code", 0); - /*--- Function export code ---*/ - __Pyx_RefNannyFinishContext(); - return 0; -} - -static int __Pyx_modinit_type_init_code(void) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__Pyx_modinit_type_init_code", 0); - /*--- Type init code ---*/ - __Pyx_RefNannyFinishContext(); - return 0; -} - -static int __Pyx_modinit_type_import_code(void) { - __Pyx_RefNannyDeclarations - PyObject *__pyx_t_1 = NULL; - __Pyx_RefNannySetupContext("__Pyx_modinit_type_import_code", 0); - /*--- Type import code ---*/ - __pyx_t_1 = PyImport_ImportModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 9, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_ptype_7cpython_4type_type = __Pyx_ImportType(__pyx_t_1, __Pyx_BUILTIN_MODULE_NAME, "type", - #if defined(PYPY_VERSION_NUM) && PYPY_VERSION_NUM < 0x050B0000 - sizeof(PyTypeObject), - #else - sizeof(PyHeapTypeObject), - #endif - __Pyx_ImportType_CheckSize_Warn); - if (!__pyx_ptype_7cpython_4type_type) __PYX_ERR(1, 9, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = PyImport_ImportModule("numcodecs.compat_ext"); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 4, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __pyx_ptype_9numcodecs_10compat_ext_Buffer = __Pyx_ImportType(__pyx_t_1, "numcodecs.compat_ext", "Buffer", sizeof(struct __pyx_obj_9numcodecs_10compat_ext_Buffer), __Pyx_ImportType_CheckSize_Warn); - if (!__pyx_ptype_9numcodecs_10compat_ext_Buffer) __PYX_ERR(2, 4, __pyx_L1_error) - __pyx_vtabptr_9numcodecs_10compat_ext_Buffer = (struct __pyx_vtabstruct_9numcodecs_10compat_ext_Buffer*)__Pyx_GetVtable(__pyx_ptype_9numcodecs_10compat_ext_Buffer->tp_dict); if (unlikely(!__pyx_vtabptr_9numcodecs_10compat_ext_Buffer)) __PYX_ERR(2, 4, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_RefNannyFinishContext(); - return 0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_RefNannyFinishContext(); - return -1; -} - -static int __Pyx_modinit_variable_import_code(void) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__Pyx_modinit_variable_import_code", 0); - /*--- Variable import code ---*/ - __Pyx_RefNannyFinishContext(); - return 0; -} - -static int __Pyx_modinit_function_import_code(void) { - __Pyx_RefNannyDeclarations - __Pyx_RefNannySetupContext("__Pyx_modinit_function_import_code", 0); - /*--- Function import code ---*/ - __Pyx_RefNannyFinishContext(); - return 0; -} - - -#if PY_MAJOR_VERSION < 3 -#ifdef CYTHON_NO_PYINIT_EXPORT -#define __Pyx_PyMODINIT_FUNC void -#else -#define __Pyx_PyMODINIT_FUNC PyMODINIT_FUNC -#endif -#else -#ifdef CYTHON_NO_PYINIT_EXPORT -#define __Pyx_PyMODINIT_FUNC PyObject * -#else -#define __Pyx_PyMODINIT_FUNC PyMODINIT_FUNC -#endif -#endif - - -#if PY_MAJOR_VERSION < 3 -__Pyx_PyMODINIT_FUNC initzfp(void) CYTHON_SMALL_CODE; /*proto*/ -__Pyx_PyMODINIT_FUNC initzfp(void) -#else -__Pyx_PyMODINIT_FUNC PyInit_zfp(void) CYTHON_SMALL_CODE; /*proto*/ -__Pyx_PyMODINIT_FUNC PyInit_zfp(void) -#if CYTHON_PEP489_MULTI_PHASE_INIT -{ - return PyModuleDef_Init(&__pyx_moduledef); -} -static CYTHON_SMALL_CODE int __Pyx_check_single_interpreter(void) { - #if PY_VERSION_HEX >= 0x030700A1 - static PY_INT64_T main_interpreter_id = -1; - PY_INT64_T current_id = PyInterpreterState_GetID(PyThreadState_Get()->interp); - if (main_interpreter_id == -1) { - main_interpreter_id = current_id; - return (unlikely(current_id == -1)) ? -1 : 0; - } else if (unlikely(main_interpreter_id != current_id)) - #else - static PyInterpreterState *main_interpreter = NULL; - PyInterpreterState *current_interpreter = PyThreadState_Get()->interp; - if (!main_interpreter) { - main_interpreter = current_interpreter; - } else if (unlikely(main_interpreter != current_interpreter)) - #endif - { - PyErr_SetString( - PyExc_ImportError, - "Interpreter change detected - this module can only be loaded into one interpreter per process."); - return -1; - } - return 0; -} -static CYTHON_SMALL_CODE int __Pyx_copy_spec_to_module(PyObject *spec, PyObject *moddict, const char* from_name, const char* to_name, int allow_none) { - PyObject *value = PyObject_GetAttrString(spec, from_name); - int result = 0; - if (likely(value)) { - if (allow_none || value != Py_None) { - result = PyDict_SetItemString(moddict, to_name, value); - } - Py_DECREF(value); - } else if (PyErr_ExceptionMatches(PyExc_AttributeError)) { - PyErr_Clear(); - } else { - result = -1; - } - return result; -} -static CYTHON_SMALL_CODE PyObject* __pyx_pymod_create(PyObject *spec, CYTHON_UNUSED PyModuleDef *def) { - PyObject *module = NULL, *moddict, *modname; - if (__Pyx_check_single_interpreter()) - return NULL; - if (__pyx_m) - return __Pyx_NewRef(__pyx_m); - modname = PyObject_GetAttrString(spec, "name"); - if (unlikely(!modname)) goto bad; - module = PyModule_NewObject(modname); - Py_DECREF(modname); - if (unlikely(!module)) goto bad; - moddict = PyModule_GetDict(module); - if (unlikely(!moddict)) goto bad; - if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "loader", "__loader__", 1) < 0)) goto bad; - if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "origin", "__file__", 1) < 0)) goto bad; - if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "parent", "__package__", 1) < 0)) goto bad; - if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "submodule_search_locations", "__path__", 0) < 0)) goto bad; - return module; -bad: - Py_XDECREF(module); - return NULL; -} - - -static CYTHON_SMALL_CODE int __pyx_pymod_exec_zfp(PyObject *__pyx_pyinit_module) -#endif -#endif -{ - PyObject *__pyx_t_1 = NULL; - PyObject *__pyx_t_2 = NULL; - PyObject *__pyx_t_3 = NULL; - PyObject *__pyx_t_4 = NULL; - PyObject *__pyx_t_5 = NULL; - __Pyx_RefNannyDeclarations - #if CYTHON_PEP489_MULTI_PHASE_INIT - if (__pyx_m) { - if (__pyx_m == __pyx_pyinit_module) return 0; - PyErr_SetString(PyExc_RuntimeError, "Module 'zfp' has already been imported. Re-initialisation is not supported."); - return -1; - } - #elif PY_MAJOR_VERSION >= 3 - if (__pyx_m) return __Pyx_NewRef(__pyx_m); - #endif - #if CYTHON_REFNANNY -__Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny"); -if (!__Pyx_RefNanny) { - PyErr_Clear(); - __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny"); - if (!__Pyx_RefNanny) - Py_FatalError("failed to import 'refnanny' module"); -} -#endif - __Pyx_RefNannySetupContext("__Pyx_PyMODINIT_FUNC PyInit_zfp(void)", 0); - if (__Pyx_check_binary_version() < 0) __PYX_ERR(0, 1, __pyx_L1_error) - #ifdef __Pxy_PyFrame_Initialize_Offsets - __Pxy_PyFrame_Initialize_Offsets(); - #endif - __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) __PYX_ERR(0, 1, __pyx_L1_error) - __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) __PYX_ERR(0, 1, __pyx_L1_error) - __pyx_empty_unicode = PyUnicode_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_unicode)) __PYX_ERR(0, 1, __pyx_L1_error) - #ifdef __Pyx_CyFunction_USED - if (__pyx_CyFunction_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) - #endif - #ifdef __Pyx_FusedFunction_USED - if (__pyx_FusedFunction_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) - #endif - #ifdef __Pyx_Coroutine_USED - if (__pyx_Coroutine_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) - #endif - #ifdef __Pyx_Generator_USED - if (__pyx_Generator_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) - #endif - #ifdef __Pyx_AsyncGen_USED - if (__pyx_AsyncGen_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) - #endif - #ifdef __Pyx_StopAsyncIteration_USED - if (__pyx_StopAsyncIteration_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error) - #endif - /*--- Library function declarations ---*/ - /*--- Threads initialization code ---*/ - #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS - #ifdef WITH_THREAD /* Python build with threading support? */ - PyEval_InitThreads(); - #endif - #endif - /*--- Module creation code ---*/ - #if CYTHON_PEP489_MULTI_PHASE_INIT - __pyx_m = __pyx_pyinit_module; - Py_INCREF(__pyx_m); - #else - #if PY_MAJOR_VERSION < 3 - __pyx_m = Py_InitModule4("zfp", __pyx_methods, 0, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m); - #else - __pyx_m = PyModule_Create(&__pyx_moduledef); - #endif - if (unlikely(!__pyx_m)) __PYX_ERR(0, 1, __pyx_L1_error) - #endif - __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) __PYX_ERR(0, 1, __pyx_L1_error) - Py_INCREF(__pyx_d); - __pyx_b = PyImport_AddModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_b)) __PYX_ERR(0, 1, __pyx_L1_error) - Py_INCREF(__pyx_b); - __pyx_cython_runtime = PyImport_AddModule((char *) "cython_runtime"); if (unlikely(!__pyx_cython_runtime)) __PYX_ERR(0, 1, __pyx_L1_error) - Py_INCREF(__pyx_cython_runtime); - if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) __PYX_ERR(0, 1, __pyx_L1_error); - /*--- Initialize various global constants etc. ---*/ - if (__Pyx_InitGlobals() < 0) __PYX_ERR(0, 1, __pyx_L1_error) - #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT) - if (__Pyx_init_sys_getdefaultencoding_params() < 0) __PYX_ERR(0, 1, __pyx_L1_error) - #endif - if (__pyx_module_is_main_numcodecs__zfp) { - if (PyObject_SetAttr(__pyx_m, __pyx_n_s_name, __pyx_n_s_main) < 0) __PYX_ERR(0, 1, __pyx_L1_error) - } - #if PY_MAJOR_VERSION >= 3 - { - PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) __PYX_ERR(0, 1, __pyx_L1_error) - if (!PyDict_GetItemString(modules, "numcodecs.zfp")) { - if (unlikely(PyDict_SetItemString(modules, "numcodecs.zfp", __pyx_m) < 0)) __PYX_ERR(0, 1, __pyx_L1_error) - } - } - #endif - /*--- Builtin init code ---*/ - if (__Pyx_InitCachedBuiltins() < 0) goto __pyx_L1_error; - /*--- Constants init code ---*/ - if (__Pyx_InitCachedConstants() < 0) goto __pyx_L1_error; - /*--- Global type/function init code ---*/ - (void)__Pyx_modinit_global_init_code(); - (void)__Pyx_modinit_variable_export_code(); - (void)__Pyx_modinit_function_export_code(); - (void)__Pyx_modinit_type_init_code(); - if (unlikely(__Pyx_modinit_type_import_code() != 0)) goto __pyx_L1_error; - (void)__Pyx_modinit_variable_import_code(); - (void)__Pyx_modinit_function_import_code(); - /*--- Execution code ---*/ - #if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED) - if (__Pyx_patch_abc() < 0) __PYX_ERR(0, 1, __pyx_L1_error) - #endif - - /* "numcodecs/zfp.pyx":5 - * cimport cython - * #from cpython cimport array - * import numpy as np # <<<<<<<<<<<<<< - * import sys - * #import array - */ - __pyx_t_1 = __Pyx_Import(__pyx_n_s_numpy, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_np, __pyx_t_1) < 0) __PYX_ERR(0, 5, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "numcodecs/zfp.pyx":6 - * #from cpython cimport array - * import numpy as np - * import sys # <<<<<<<<<<<<<< - * #import array - * - */ - __pyx_t_1 = __Pyx_Import(__pyx_n_s_sys, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_sys, __pyx_t_1) < 0) __PYX_ERR(0, 6, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "numcodecs/zfp.pyx":13 - * - * from .compat_ext cimport Buffer - * from .compat_ext import Buffer # <<<<<<<<<<<<<< - * from numcodecs.compat import ensure_contiguous_ndarray,ensure_ndarray - * from numcodecs.abc import Codec - */ - __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 13, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_n_s_Buffer); - __Pyx_GIVEREF(__pyx_n_s_Buffer); - PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_Buffer); - __pyx_t_2 = __Pyx_Import(__pyx_n_s_compat_ext, __pyx_t_1, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 13, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "numcodecs/zfp.pyx":14 - * from .compat_ext cimport Buffer - * from .compat_ext import Buffer - * from numcodecs.compat import ensure_contiguous_ndarray,ensure_ndarray # <<<<<<<<<<<<<< - * from numcodecs.abc import Codec - * - */ - __pyx_t_2 = PyList_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 14, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_INCREF(__pyx_n_s_ensure_contiguous_ndarray); - __Pyx_GIVEREF(__pyx_n_s_ensure_contiguous_ndarray); - PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_ensure_contiguous_ndarray); - __Pyx_INCREF(__pyx_n_s_ensure_ndarray); - __Pyx_GIVEREF(__pyx_n_s_ensure_ndarray); - PyList_SET_ITEM(__pyx_t_2, 1, __pyx_n_s_ensure_ndarray); - __pyx_t_1 = __Pyx_Import(__pyx_n_s_numcodecs_compat, __pyx_t_2, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 14, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_ensure_contiguous_ndarray); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 14, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_ensure_contiguous_ndarray, __pyx_t_2) < 0) __PYX_ERR(0, 14, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_ensure_ndarray); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 14, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_ensure_ndarray, __pyx_t_2) < 0) __PYX_ERR(0, 14, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "numcodecs/zfp.pyx":15 - * from .compat_ext import Buffer - * from numcodecs.compat import ensure_contiguous_ndarray,ensure_ndarray - * from numcodecs.abc import Codec # <<<<<<<<<<<<<< - * - * - */ - __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 15, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_INCREF(__pyx_n_s_Codec); - __Pyx_GIVEREF(__pyx_n_s_Codec); - PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_Codec); - __pyx_t_2 = __Pyx_Import(__pyx_n_s_numcodecs_abc, __pyx_t_1, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 15, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_Codec); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 15, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_Codec, __pyx_t_1) < 0) __PYX_ERR(0, 15, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "numcodecs/zfp.pyx":100 - * size_t zfp_read_header(zfp_stream* stream, zfp_field* field, unsigned int mask) - * - * VERSION_STRING = ZFP_VERSION_STRING # <<<<<<<<<<<<<< - * __version__ = VERSION_STRING - * - */ - __pyx_t_2 = __Pyx_PyBytes_FromString(((char *)ZFP_VERSION_STRING)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 100, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_VERSION_STRING, __pyx_t_2) < 0) __PYX_ERR(0, 100, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "numcodecs/zfp.pyx":101 - * - * VERSION_STRING = ZFP_VERSION_STRING - * __version__ = VERSION_STRING # <<<<<<<<<<<<<< - * - * - */ - __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_VERSION_STRING); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 101, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_version, __pyx_t_2) < 0) __PYX_ERR(0, 101, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "numcodecs/zfp.pyx":104 - * - * - * def compress(input_array,method): # <<<<<<<<<<<<<< - * """Compress data. - * - */ - __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_9numcodecs_3zfp_1compress, NULL, __pyx_n_s_numcodecs_zfp); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 104, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_compress, __pyx_t_2) < 0) __PYX_ERR(0, 104, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "numcodecs/zfp.pyx":218 - * return dest[:compressed_size] - * - * def decompress(source,dest=None): # <<<<<<<<<<<<<< - * """Decompress data. - * - */ - __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_9numcodecs_3zfp_3decompress, NULL, __pyx_n_s_numcodecs_zfp); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 218, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_decompress, __pyx_t_2) < 0) __PYX_ERR(0, 218, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "numcodecs/zfp.pyx":320 - * return dest - * - * class CompressMethod: # <<<<<<<<<<<<<< - * ''' - * Create a CompressMethod object to store zfp mode and - */ - __pyx_t_2 = __Pyx_Py3MetaclassPrepare((PyObject *) NULL, __pyx_empty_tuple, __pyx_n_s_CompressMethod, __pyx_n_s_CompressMethod, (PyObject *) NULL, __pyx_n_s_numcodecs_zfp, __pyx_kp_s_Create_a_CompressMethod_object); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 320, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - - /* "numcodecs/zfp.pyx":328 - * - * # Initilize with defaults - * def __init__(self): # <<<<<<<<<<<<<< - * self.zfpmode='a' - * self.tolerance=0.01 - */ - __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_9numcodecs_3zfp_14CompressMethod_1__init__, 0, __pyx_n_s_CompressMethod___init, NULL, __pyx_n_s_numcodecs_zfp, __pyx_d, ((PyObject *)__pyx_codeobj__14)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 328, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_init, __pyx_t_1) < 0) __PYX_ERR(0, 328, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "numcodecs/zfp.pyx":332 - * self.tolerance=0.01 - * - * def set_mode(self,mode): # <<<<<<<<<<<<<< - * self.zfpmode=mode - * def set_tolerance(self,tol): - */ - __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_9numcodecs_3zfp_14CompressMethod_3set_mode, 0, __pyx_n_s_CompressMethod_set_mode, NULL, __pyx_n_s_numcodecs_zfp, __pyx_d, ((PyObject *)__pyx_codeobj__16)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 332, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_set_mode, __pyx_t_1) < 0) __PYX_ERR(0, 332, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "numcodecs/zfp.pyx":334 - * def set_mode(self,mode): - * self.zfpmode=mode - * def set_tolerance(self,tol): # <<<<<<<<<<<<<< - * self.tolerance=tol - * def set_precision(self,prec): - */ - __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_9numcodecs_3zfp_14CompressMethod_5set_tolerance, 0, __pyx_n_s_CompressMethod_set_tolerance, NULL, __pyx_n_s_numcodecs_zfp, __pyx_d, ((PyObject *)__pyx_codeobj__18)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 334, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_set_tolerance, __pyx_t_1) < 0) __PYX_ERR(0, 334, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "numcodecs/zfp.pyx":336 - * def set_tolerance(self,tol): - * self.tolerance=tol - * def set_precision(self,prec): # <<<<<<<<<<<<<< - * self.precision=prec - * def set_rate(self,rate): - */ - __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_9numcodecs_3zfp_14CompressMethod_7set_precision, 0, __pyx_n_s_CompressMethod_set_precision, NULL, __pyx_n_s_numcodecs_zfp, __pyx_d, ((PyObject *)__pyx_codeobj__20)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 336, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_set_precision, __pyx_t_1) < 0) __PYX_ERR(0, 336, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "numcodecs/zfp.pyx":338 - * def set_precision(self,prec): - * self.precision=prec - * def set_rate(self,rate): # <<<<<<<<<<<<<< - * self.rate=rate - * def set_minbits(self,minbits): - */ - __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_9numcodecs_3zfp_14CompressMethod_9set_rate, 0, __pyx_n_s_CompressMethod_set_rate, NULL, __pyx_n_s_numcodecs_zfp, __pyx_d, ((PyObject *)__pyx_codeobj__22)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 338, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_set_rate, __pyx_t_1) < 0) __PYX_ERR(0, 338, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "numcodecs/zfp.pyx":340 - * def set_rate(self,rate): - * self.rate=rate - * def set_minbits(self,minbits): # <<<<<<<<<<<<<< - * self.minbits=minbits - * def set_maxbits(self,maxbits): - */ - __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_9numcodecs_3zfp_14CompressMethod_11set_minbits, 0, __pyx_n_s_CompressMethod_set_minbits, NULL, __pyx_n_s_numcodecs_zfp, __pyx_d, ((PyObject *)__pyx_codeobj__24)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 340, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_set_minbits, __pyx_t_1) < 0) __PYX_ERR(0, 340, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "numcodecs/zfp.pyx":342 - * def set_minbits(self,minbits): - * self.minbits=minbits - * def set_maxbits(self,maxbits): # <<<<<<<<<<<<<< - * self.maxbits=maxbits - * def set_maxprec(self,maxprec): - */ - __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_9numcodecs_3zfp_14CompressMethod_13set_maxbits, 0, __pyx_n_s_CompressMethod_set_maxbits, NULL, __pyx_n_s_numcodecs_zfp, __pyx_d, ((PyObject *)__pyx_codeobj__26)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 342, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_set_maxbits, __pyx_t_1) < 0) __PYX_ERR(0, 342, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "numcodecs/zfp.pyx":344 - * def set_maxbits(self,maxbits): - * self.maxbits=maxbits - * def set_maxprec(self,maxprec): # <<<<<<<<<<<<<< - * self.maxprec=maxprec - * def set_minexp(self,minexp): - */ - __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_9numcodecs_3zfp_14CompressMethod_15set_maxprec, 0, __pyx_n_s_CompressMethod_set_maxprec, NULL, __pyx_n_s_numcodecs_zfp, __pyx_d, ((PyObject *)__pyx_codeobj__28)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 344, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_set_maxprec, __pyx_t_1) < 0) __PYX_ERR(0, 344, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "numcodecs/zfp.pyx":346 - * def set_maxprec(self,maxprec): - * self.maxprec=maxprec - * def set_minexp(self,minexp): # <<<<<<<<<<<<<< - * self.minexp=minexp - * - */ - __pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_9numcodecs_3zfp_14CompressMethod_17set_minexp, 0, __pyx_n_s_CompressMethod_set_minexp, NULL, __pyx_n_s_numcodecs_zfp, __pyx_d, ((PyObject *)__pyx_codeobj__30)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 346, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (__Pyx_SetNameInClass(__pyx_t_2, __pyx_n_s_set_minexp, __pyx_t_1) < 0) __PYX_ERR(0, 346, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "numcodecs/zfp.pyx":320 - * return dest - * - * class CompressMethod: # <<<<<<<<<<<<<< - * ''' - * Create a CompressMethod object to store zfp mode and - */ - __pyx_t_1 = __Pyx_Py3ClassCreate(((PyObject*)&__Pyx_DefaultClassType), __pyx_n_s_CompressMethod, __pyx_empty_tuple, __pyx_t_2, NULL, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 320, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_CompressMethod, __pyx_t_1) < 0) __PYX_ERR(0, 320, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - - /* "numcodecs/zfp.pyx":349 - * self.minexp=minexp - * - * class Zfp(Codec): # <<<<<<<<<<<<<< - * """Codec providing compression using zfp via the Python standard library. - * - */ - __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_Codec); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 349, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 349, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - __Pyx_GIVEREF(__pyx_t_2); - PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2); - __pyx_t_2 = 0; - __pyx_t_2 = __Pyx_CalculateMetaclass(NULL, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 349, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_2); - __pyx_t_3 = __Pyx_Py3MetaclassPrepare(__pyx_t_2, __pyx_t_1, __pyx_n_s_Zfp, __pyx_n_s_Zfp, (PyObject *) NULL, __pyx_n_s_numcodecs_zfp, __pyx_kp_s_Codec_providing_compression_usin); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 349, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_3); - - /* "numcodecs/zfp.pyx":380 - * Max bits of precision per value, 0 for full - * """ - * codec_id = 'zfp' # <<<<<<<<<<<<<< - * - * def __init__(self, mode = 'a',tol = 0.0, prec = ZFP_MAX_PREC, rate = 0, minbits = ZFP_MIN_BITS, maxbits = ZFP_MAX_BITS, minexp = ZFP_MIN_EXP, maxprec = ZFP_MAX_PREC,the_method=None): - */ - if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_codec_id, __pyx_n_s_zfp) < 0) __PYX_ERR(0, 380, __pyx_L1_error) - - /* "numcodecs/zfp.pyx":382 - * codec_id = 'zfp' - * - * def __init__(self, mode = 'a',tol = 0.0, prec = ZFP_MAX_PREC, rate = 0, minbits = ZFP_MIN_BITS, maxbits = ZFP_MAX_BITS, minexp = ZFP_MIN_EXP, maxprec = ZFP_MAX_PREC,the_method=None): # <<<<<<<<<<<<<< - * self.mode=mode - * #the_method=CompressMethod() - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_9numcodecs_3zfp_3Zfp_1__init__, 0, __pyx_n_s_Zfp___init, NULL, __pyx_n_s_numcodecs_zfp, __pyx_d, ((PyObject *)__pyx_codeobj__32)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 382, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - if (!__Pyx_CyFunction_InitDefaults(__pyx_t_4, sizeof(__pyx_defaults), 5)) __PYX_ERR(0, 382, __pyx_L1_error) - __pyx_t_5 = __Pyx_PyInt_From_int(ZFP_MAX_PREC); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 382, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_t_4)->__pyx_arg_prec = __pyx_t_5; - __Pyx_GIVEREF(__pyx_t_5); - __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyInt_From_int(ZFP_MIN_BITS); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 382, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_t_4)->__pyx_arg_minbits = __pyx_t_5; - __Pyx_GIVEREF(__pyx_t_5); - __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyInt_From_int(ZFP_MAX_BITS); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 382, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_t_4)->__pyx_arg_maxbits = __pyx_t_5; - __Pyx_GIVEREF(__pyx_t_5); - __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyInt_From_int(ZFP_MIN_EXP); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 382, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_t_4)->__pyx_arg_minexp = __pyx_t_5; - __Pyx_GIVEREF(__pyx_t_5); - __pyx_t_5 = 0; - __pyx_t_5 = __Pyx_PyInt_From_int(ZFP_MAX_PREC); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 382, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_5); - __Pyx_CyFunction_Defaults(__pyx_defaults, __pyx_t_4)->__pyx_arg_maxprec = __pyx_t_5; - __Pyx_GIVEREF(__pyx_t_5); - __pyx_t_5 = 0; - __Pyx_CyFunction_SetDefaultsGetter(__pyx_t_4, __pyx_pf_9numcodecs_3zfp_4__defaults__); - if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_init, __pyx_t_4) < 0) __PYX_ERR(0, 382, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "numcodecs/zfp.pyx":413 - * #self.the_method=the_method - * - * def encode(self,buf): # <<<<<<<<<<<<<< - * #buf = ensure_contiguous_ndarray(buf) - * return compress(buf,self.the_method) - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_9numcodecs_3zfp_3Zfp_3encode, 0, __pyx_n_s_Zfp_encode, NULL, __pyx_n_s_numcodecs_zfp, __pyx_d, ((PyObject *)__pyx_codeobj__34)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 413, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_encode, __pyx_t_4) < 0) __PYX_ERR(0, 413, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "numcodecs/zfp.pyx":417 - * return compress(buf,self.the_method) - * - * def decode(self,buf,out=None): # <<<<<<<<<<<<<< - * buf=ensure_contiguous_ndarray(buf) - * return decompress(buf,out) - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_9numcodecs_3zfp_3Zfp_5decode, 0, __pyx_n_s_Zfp_decode, NULL, __pyx_n_s_numcodecs_zfp, __pyx_d, ((PyObject *)__pyx_codeobj__36)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 417, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, __pyx_tuple__37); - if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_decode, __pyx_t_4) < 0) __PYX_ERR(0, 417, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "numcodecs/zfp.pyx":421 - * return decompress(buf,out) - * - * def __repr__(self): # <<<<<<<<<<<<<< - * if self.mode == 'a': - * r= '%s(mode=%r,tol=%s)' % (type(self).__name__, self.mode,self.tol) - */ - __pyx_t_4 = __Pyx_CyFunction_NewEx(&__pyx_mdef_9numcodecs_3zfp_3Zfp_7__repr__, 0, __pyx_n_s_Zfp___repr, NULL, __pyx_n_s_numcodecs_zfp, __pyx_d, ((PyObject *)__pyx_codeobj__39)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 421, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - if (__Pyx_SetNameInClass(__pyx_t_3, __pyx_n_s_repr, __pyx_t_4) < 0) __PYX_ERR(0, 421, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - - /* "numcodecs/zfp.pyx":349 - * self.minexp=minexp - * - * class Zfp(Codec): # <<<<<<<<<<<<<< - * """Codec providing compression using zfp via the Python standard library. - * - */ - __pyx_t_4 = __Pyx_Py3ClassCreate(__pyx_t_2, __pyx_n_s_Zfp, __pyx_t_1, __pyx_t_3, NULL, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 349, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_4); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_Zfp, __pyx_t_4) < 0) __PYX_ERR(0, 349, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; - __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; - __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /* "numcodecs/zfp.pyx":1 - * from __future__ import absolute_import, print_function, division # <<<<<<<<<<<<<< - * #cimport numpy - * cimport cython - */ - __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1, __pyx_L1_error) - __Pyx_GOTREF(__pyx_t_1); - if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_1) < 0) __PYX_ERR(0, 1, __pyx_L1_error) - __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; - - /*--- Wrapped vars code ---*/ - - goto __pyx_L0; - __pyx_L1_error:; - __Pyx_XDECREF(__pyx_t_1); - __Pyx_XDECREF(__pyx_t_2); - __Pyx_XDECREF(__pyx_t_3); - __Pyx_XDECREF(__pyx_t_4); - __Pyx_XDECREF(__pyx_t_5); - if (__pyx_m) { - if (__pyx_d) { - __Pyx_AddTraceback("init numcodecs.zfp", __pyx_clineno, __pyx_lineno, __pyx_filename); - } - Py_CLEAR(__pyx_m); - } else if (!PyErr_Occurred()) { - PyErr_SetString(PyExc_ImportError, "init numcodecs.zfp"); - } - __pyx_L0:; - __Pyx_RefNannyFinishContext(); - #if CYTHON_PEP489_MULTI_PHASE_INIT - return (__pyx_m != NULL) ? 0 : -1; - #elif PY_MAJOR_VERSION >= 3 - return __pyx_m; - #else - return; - #endif -} - -/* --- Runtime support code --- */ -/* Refnanny */ -#if CYTHON_REFNANNY -static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) { - PyObject *m = NULL, *p = NULL; - void *r = NULL; - m = PyImport_ImportModule(modname); - if (!m) goto end; - p = PyObject_GetAttrString(m, "RefNannyAPI"); - if (!p) goto end; - r = PyLong_AsVoidPtr(p); -end: - Py_XDECREF(p); - Py_XDECREF(m); - return (__Pyx_RefNannyAPIStruct *)r; -} -#endif - -/* PyObjectGetAttrStr */ -#if CYTHON_USE_TYPE_SLOTS -static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) { - PyTypeObject* tp = Py_TYPE(obj); - if (likely(tp->tp_getattro)) - return tp->tp_getattro(obj, attr_name); -#if PY_MAJOR_VERSION < 3 - if (likely(tp->tp_getattr)) - return tp->tp_getattr(obj, PyString_AS_STRING(attr_name)); -#endif - return PyObject_GetAttr(obj, attr_name); -} -#endif - -/* GetBuiltinName */ -static PyObject *__Pyx_GetBuiltinName(PyObject *name) { - PyObject* result = __Pyx_PyObject_GetAttrStr(__pyx_b, name); - if (unlikely(!result)) { - PyErr_Format(PyExc_NameError, -#if PY_MAJOR_VERSION >= 3 - "name '%U' is not defined", name); -#else - "name '%.200s' is not defined", PyString_AS_STRING(name)); -#endif - } - return result; -} - -/* RaiseArgTupleInvalid */ -static void __Pyx_RaiseArgtupleInvalid( - const char* func_name, - int exact, - Py_ssize_t num_min, - Py_ssize_t num_max, - Py_ssize_t num_found) -{ - Py_ssize_t num_expected; - const char *more_or_less; - if (num_found < num_min) { - num_expected = num_min; - more_or_less = "at least"; - } else { - num_expected = num_max; - more_or_less = "at most"; - } - if (exact) { - more_or_less = "exactly"; - } - PyErr_Format(PyExc_TypeError, - "%.200s() takes %.8s %" CYTHON_FORMAT_SSIZE_T "d positional argument%.1s (%" CYTHON_FORMAT_SSIZE_T "d given)", - func_name, more_or_less, num_expected, - (num_expected == 1) ? "" : "s", num_found); -} - -/* RaiseDoubleKeywords */ -static void __Pyx_RaiseDoubleKeywordsError( - const char* func_name, - PyObject* kw_name) -{ - PyErr_Format(PyExc_TypeError, - #if PY_MAJOR_VERSION >= 3 - "%s() got multiple values for keyword argument '%U'", func_name, kw_name); - #else - "%s() got multiple values for keyword argument '%s'", func_name, - PyString_AsString(kw_name)); - #endif -} - -/* ParseKeywords */ -static int __Pyx_ParseOptionalKeywords( - PyObject *kwds, - PyObject **argnames[], - PyObject *kwds2, - PyObject *values[], - Py_ssize_t num_pos_args, - const char* function_name) -{ - PyObject *key = 0, *value = 0; - Py_ssize_t pos = 0; - PyObject*** name; - PyObject*** first_kw_arg = argnames + num_pos_args; - while (PyDict_Next(kwds, &pos, &key, &value)) { - name = first_kw_arg; - while (*name && (**name != key)) name++; - if (*name) { - values[name-argnames] = value; - continue; - } - name = first_kw_arg; - #if PY_MAJOR_VERSION < 3 - if (likely(PyString_CheckExact(key)) || likely(PyString_Check(key))) { - while (*name) { - if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key)) - && _PyString_Eq(**name, key)) { - values[name-argnames] = value; - break; - } - name++; - } - if (*name) continue; - else { - PyObject*** argname = argnames; - while (argname != first_kw_arg) { - if ((**argname == key) || ( - (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key)) - && _PyString_Eq(**argname, key))) { - goto arg_passed_twice; - } - argname++; - } - } - } else - #endif - if (likely(PyUnicode_Check(key))) { - while (*name) { - int cmp = (**name == key) ? 0 : - #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 - (PyUnicode_GET_SIZE(**name) != PyUnicode_GET_SIZE(key)) ? 1 : - #endif - PyUnicode_Compare(**name, key); - if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; - if (cmp == 0) { - values[name-argnames] = value; - break; - } - name++; - } - if (*name) continue; - else { - PyObject*** argname = argnames; - while (argname != first_kw_arg) { - int cmp = (**argname == key) ? 0 : - #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3 - (PyUnicode_GET_SIZE(**argname) != PyUnicode_GET_SIZE(key)) ? 1 : - #endif - PyUnicode_Compare(**argname, key); - if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad; - if (cmp == 0) goto arg_passed_twice; - argname++; - } - } - } else - goto invalid_keyword_type; - if (kwds2) { - if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad; - } else { - goto invalid_keyword; - } - } - return 0; -arg_passed_twice: - __Pyx_RaiseDoubleKeywordsError(function_name, key); - goto bad; -invalid_keyword_type: - PyErr_Format(PyExc_TypeError, - "%.200s() keywords must be strings", function_name); - goto bad; -invalid_keyword: - PyErr_Format(PyExc_TypeError, - #if PY_MAJOR_VERSION < 3 - "%.200s() got an unexpected keyword argument '%.200s'", - function_name, PyString_AsString(key)); - #else - "%s() got an unexpected keyword argument '%U'", - function_name, key); - #endif -bad: - return -1; -} - -/* DictGetItem */ -#if PY_MAJOR_VERSION >= 3 && !CYTHON_COMPILING_IN_PYPY -static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key) { - PyObject *value; - value = PyDict_GetItemWithError(d, key); - if (unlikely(!value)) { - if (!PyErr_Occurred()) { - if (unlikely(PyTuple_Check(key))) { - PyObject* args = PyTuple_Pack(1, key); - if (likely(args)) { - PyErr_SetObject(PyExc_KeyError, args); - Py_DECREF(args); - } - } else { - PyErr_SetObject(PyExc_KeyError, key); - } - } - return NULL; - } - Py_INCREF(value); - return value; -} -#endif - -/* PyObjectCall */ -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) { - PyObject *result; - ternaryfunc call = func->ob_type->tp_call; - if (unlikely(!call)) - return PyObject_Call(func, arg, kw); - if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) - return NULL; - result = (*call)(func, arg, kw); - Py_LeaveRecursiveCall(); - if (unlikely(!result) && unlikely(!PyErr_Occurred())) { - PyErr_SetString( - PyExc_SystemError, - "NULL result without error in PyObject_Call"); - } - return result; -} -#endif - -/* PyDictVersioning */ -#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS -static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj) { - PyObject *dict = Py_TYPE(obj)->tp_dict; - return likely(dict) ? __PYX_GET_DICT_VERSION(dict) : 0; -} -static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj) { - PyObject **dictptr = NULL; - Py_ssize_t offset = Py_TYPE(obj)->tp_dictoffset; - if (offset) { -#if CYTHON_COMPILING_IN_CPYTHON - dictptr = (likely(offset > 0)) ? (PyObject **) ((char *)obj + offset) : _PyObject_GetDictPtr(obj); -#else - dictptr = _PyObject_GetDictPtr(obj); -#endif - } - return (dictptr && *dictptr) ? __PYX_GET_DICT_VERSION(*dictptr) : 0; -} -static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version) { - PyObject *dict = Py_TYPE(obj)->tp_dict; - if (unlikely(!dict) || unlikely(tp_dict_version != __PYX_GET_DICT_VERSION(dict))) - return 0; - return obj_dict_version == __Pyx_get_object_dict_version(obj); -} -#endif - -/* GetModuleGlobalName */ -#if CYTHON_USE_DICT_VERSIONS -static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value) -#else -static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name) -#endif -{ - PyObject *result; -#if !CYTHON_AVOID_BORROWED_REFS -#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 - result = _PyDict_GetItem_KnownHash(__pyx_d, name, ((PyASCIIObject *) name)->hash); - __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) - if (likely(result)) { - return __Pyx_NewRef(result); - } else if (unlikely(PyErr_Occurred())) { - return NULL; - } -#else - result = PyDict_GetItem(__pyx_d, name); - __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) - if (likely(result)) { - return __Pyx_NewRef(result); - } -#endif -#else - result = PyObject_GetItem(__pyx_d, name); - __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version) - if (likely(result)) { - return __Pyx_NewRef(result); - } - PyErr_Clear(); -#endif - return __Pyx_GetBuiltinName(name); -} - -/* PyErrFetchRestore */ -#if CYTHON_FAST_THREAD_STATE -static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) { - PyObject *tmp_type, *tmp_value, *tmp_tb; - tmp_type = tstate->curexc_type; - tmp_value = tstate->curexc_value; - tmp_tb = tstate->curexc_traceback; - tstate->curexc_type = type; - tstate->curexc_value = value; - tstate->curexc_traceback = tb; - Py_XDECREF(tmp_type); - Py_XDECREF(tmp_value); - Py_XDECREF(tmp_tb); -} -static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { - *type = tstate->curexc_type; - *value = tstate->curexc_value; - *tb = tstate->curexc_traceback; - tstate->curexc_type = 0; - tstate->curexc_value = 0; - tstate->curexc_traceback = 0; -} -#endif - -/* RaiseException */ -#if PY_MAJOR_VERSION < 3 -static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, - CYTHON_UNUSED PyObject *cause) { - __Pyx_PyThreadState_declare - Py_XINCREF(type); - if (!value || value == Py_None) - value = NULL; - else - Py_INCREF(value); - if (!tb || tb == Py_None) - tb = NULL; - else { - Py_INCREF(tb); - if (!PyTraceBack_Check(tb)) { - PyErr_SetString(PyExc_TypeError, - "raise: arg 3 must be a traceback or None"); - goto raise_error; - } - } - if (PyType_Check(type)) { -#if CYTHON_COMPILING_IN_PYPY - if (!value) { - Py_INCREF(Py_None); - value = Py_None; - } -#endif - PyErr_NormalizeException(&type, &value, &tb); - } else { - if (value) { - PyErr_SetString(PyExc_TypeError, - "instance exception may not have a separate value"); - goto raise_error; - } - value = type; - type = (PyObject*) Py_TYPE(type); - Py_INCREF(type); - if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) { - PyErr_SetString(PyExc_TypeError, - "raise: exception class must be a subclass of BaseException"); - goto raise_error; - } - } - __Pyx_PyThreadState_assign - __Pyx_ErrRestore(type, value, tb); - return; -raise_error: - Py_XDECREF(value); - Py_XDECREF(type); - Py_XDECREF(tb); - return; -} -#else -static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) { - PyObject* owned_instance = NULL; - if (tb == Py_None) { - tb = 0; - } else if (tb && !PyTraceBack_Check(tb)) { - PyErr_SetString(PyExc_TypeError, - "raise: arg 3 must be a traceback or None"); - goto bad; - } - if (value == Py_None) - value = 0; - if (PyExceptionInstance_Check(type)) { - if (value) { - PyErr_SetString(PyExc_TypeError, - "instance exception may not have a separate value"); - goto bad; - } - value = type; - type = (PyObject*) Py_TYPE(value); - } else if (PyExceptionClass_Check(type)) { - PyObject *instance_class = NULL; - if (value && PyExceptionInstance_Check(value)) { - instance_class = (PyObject*) Py_TYPE(value); - if (instance_class != type) { - int is_subclass = PyObject_IsSubclass(instance_class, type); - if (!is_subclass) { - instance_class = NULL; - } else if (unlikely(is_subclass == -1)) { - goto bad; - } else { - type = instance_class; - } - } - } - if (!instance_class) { - PyObject *args; - if (!value) - args = PyTuple_New(0); - else if (PyTuple_Check(value)) { - Py_INCREF(value); - args = value; - } else - args = PyTuple_Pack(1, value); - if (!args) - goto bad; - owned_instance = PyObject_Call(type, args, NULL); - Py_DECREF(args); - if (!owned_instance) - goto bad; - value = owned_instance; - if (!PyExceptionInstance_Check(value)) { - PyErr_Format(PyExc_TypeError, - "calling %R should have returned an instance of " - "BaseException, not %R", - type, Py_TYPE(value)); - goto bad; - } - } - } else { - PyErr_SetString(PyExc_TypeError, - "raise: exception class must be a subclass of BaseException"); - goto bad; - } - if (cause) { - PyObject *fixed_cause; - if (cause == Py_None) { - fixed_cause = NULL; - } else if (PyExceptionClass_Check(cause)) { - fixed_cause = PyObject_CallObject(cause, NULL); - if (fixed_cause == NULL) - goto bad; - } else if (PyExceptionInstance_Check(cause)) { - fixed_cause = cause; - Py_INCREF(fixed_cause); - } else { - PyErr_SetString(PyExc_TypeError, - "exception causes must derive from " - "BaseException"); - goto bad; - } - PyException_SetCause(value, fixed_cause); - } - PyErr_SetObject(type, value); - if (tb) { -#if CYTHON_COMPILING_IN_PYPY - PyObject *tmp_type, *tmp_value, *tmp_tb; - PyErr_Fetch(&tmp_type, &tmp_value, &tmp_tb); - Py_INCREF(tb); - PyErr_Restore(tmp_type, tmp_value, tb); - Py_XDECREF(tmp_tb); -#else - PyThreadState *tstate = __Pyx_PyThreadState_Current; - PyObject* tmp_tb = tstate->curexc_traceback; - if (tb != tmp_tb) { - Py_INCREF(tb); - tstate->curexc_traceback = tb; - Py_XDECREF(tmp_tb); - } -#endif - } -bad: - Py_XDECREF(owned_instance); - return; -} -#endif - -/* PyCFunctionFastCall */ -#if CYTHON_FAST_PYCCALL -static CYTHON_INLINE PyObject * __Pyx_PyCFunction_FastCall(PyObject *func_obj, PyObject **args, Py_ssize_t nargs) { - PyCFunctionObject *func = (PyCFunctionObject*)func_obj; - PyCFunction meth = PyCFunction_GET_FUNCTION(func); - PyObject *self = PyCFunction_GET_SELF(func); - int flags = PyCFunction_GET_FLAGS(func); - assert(PyCFunction_Check(func)); - assert(METH_FASTCALL == (flags & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_KEYWORDS | METH_STACKLESS))); - assert(nargs >= 0); - assert(nargs == 0 || args != NULL); - /* _PyCFunction_FastCallDict() must not be called with an exception set, - because it may clear it (directly or indirectly) and so the - caller loses its exception */ - assert(!PyErr_Occurred()); - if ((PY_VERSION_HEX < 0x030700A0) || unlikely(flags & METH_KEYWORDS)) { - return (*((__Pyx_PyCFunctionFastWithKeywords)(void*)meth)) (self, args, nargs, NULL); - } else { - return (*((__Pyx_PyCFunctionFast)(void*)meth)) (self, args, nargs); - } -} -#endif - -/* PyFunctionFastCall */ -#if CYTHON_FAST_PYCALL -static PyObject* __Pyx_PyFunction_FastCallNoKw(PyCodeObject *co, PyObject **args, Py_ssize_t na, - PyObject *globals) { - PyFrameObject *f; - PyThreadState *tstate = __Pyx_PyThreadState_Current; - PyObject **fastlocals; - Py_ssize_t i; - PyObject *result; - assert(globals != NULL); - /* XXX Perhaps we should create a specialized - PyFrame_New() that doesn't take locals, but does - take builtins without sanity checking them. - */ - assert(tstate != NULL); - f = PyFrame_New(tstate, co, globals, NULL); - if (f == NULL) { - return NULL; - } - fastlocals = __Pyx_PyFrame_GetLocalsplus(f); - for (i = 0; i < na; i++) { - Py_INCREF(*args); - fastlocals[i] = *args++; - } - result = PyEval_EvalFrameEx(f,0); - ++tstate->recursion_depth; - Py_DECREF(f); - --tstate->recursion_depth; - return result; -} -#if 1 || PY_VERSION_HEX < 0x030600B1 -static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs) { - PyCodeObject *co = (PyCodeObject *)PyFunction_GET_CODE(func); - PyObject *globals = PyFunction_GET_GLOBALS(func); - PyObject *argdefs = PyFunction_GET_DEFAULTS(func); - PyObject *closure; -#if PY_MAJOR_VERSION >= 3 - PyObject *kwdefs; -#endif - PyObject *kwtuple, **k; - PyObject **d; - Py_ssize_t nd; - Py_ssize_t nk; - PyObject *result; - assert(kwargs == NULL || PyDict_Check(kwargs)); - nk = kwargs ? PyDict_Size(kwargs) : 0; - if (Py_EnterRecursiveCall((char*)" while calling a Python object")) { - return NULL; - } - if ( -#if PY_MAJOR_VERSION >= 3 - co->co_kwonlyargcount == 0 && -#endif - likely(kwargs == NULL || nk == 0) && - co->co_flags == (CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE)) { - if (argdefs == NULL && co->co_argcount == nargs) { - result = __Pyx_PyFunction_FastCallNoKw(co, args, nargs, globals); - goto done; - } - else if (nargs == 0 && argdefs != NULL - && co->co_argcount == Py_SIZE(argdefs)) { - /* function called with no arguments, but all parameters have - a default value: use default values as arguments .*/ - args = &PyTuple_GET_ITEM(argdefs, 0); - result =__Pyx_PyFunction_FastCallNoKw(co, args, Py_SIZE(argdefs), globals); - goto done; - } - } - if (kwargs != NULL) { - Py_ssize_t pos, i; - kwtuple = PyTuple_New(2 * nk); - if (kwtuple == NULL) { - result = NULL; - goto done; - } - k = &PyTuple_GET_ITEM(kwtuple, 0); - pos = i = 0; - while (PyDict_Next(kwargs, &pos, &k[i], &k[i+1])) { - Py_INCREF(k[i]); - Py_INCREF(k[i+1]); - i += 2; - } - nk = i / 2; - } - else { - kwtuple = NULL; - k = NULL; - } - closure = PyFunction_GET_CLOSURE(func); -#if PY_MAJOR_VERSION >= 3 - kwdefs = PyFunction_GET_KW_DEFAULTS(func); -#endif - if (argdefs != NULL) { - d = &PyTuple_GET_ITEM(argdefs, 0); - nd = Py_SIZE(argdefs); - } - else { - d = NULL; - nd = 0; - } -#if PY_MAJOR_VERSION >= 3 - result = PyEval_EvalCodeEx((PyObject*)co, globals, (PyObject *)NULL, - args, (int)nargs, - k, (int)nk, - d, (int)nd, kwdefs, closure); -#else - result = PyEval_EvalCodeEx(co, globals, (PyObject *)NULL, - args, (int)nargs, - k, (int)nk, - d, (int)nd, closure); -#endif - Py_XDECREF(kwtuple); -done: - Py_LeaveRecursiveCall(); - return result; -} -#endif -#endif - -/* PyObjectCall2Args */ -static CYTHON_UNUSED PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2) { - PyObject *args, *result = NULL; - #if CYTHON_FAST_PYCALL - if (PyFunction_Check(function)) { - PyObject *args[2] = {arg1, arg2}; - return __Pyx_PyFunction_FastCall(function, args, 2); - } - #endif - #if CYTHON_FAST_PYCCALL - if (__Pyx_PyFastCFunction_Check(function)) { - PyObject *args[2] = {arg1, arg2}; - return __Pyx_PyCFunction_FastCall(function, args, 2); - } - #endif - args = PyTuple_New(2); - if (unlikely(!args)) goto done; - Py_INCREF(arg1); - PyTuple_SET_ITEM(args, 0, arg1); - Py_INCREF(arg2); - PyTuple_SET_ITEM(args, 1, arg2); - Py_INCREF(function); - result = __Pyx_PyObject_Call(function, args, NULL); - Py_DECREF(args); - Py_DECREF(function); -done: - return result; -} - -/* PyObjectCallMethO */ -#if CYTHON_COMPILING_IN_CPYTHON -static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg) { - PyObject *self, *result; - PyCFunction cfunc; - cfunc = PyCFunction_GET_FUNCTION(func); - self = PyCFunction_GET_SELF(func); - if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object"))) - return NULL; - result = cfunc(self, arg); - Py_LeaveRecursiveCall(); - if (unlikely(!result) && unlikely(!PyErr_Occurred())) { - PyErr_SetString( - PyExc_SystemError, - "NULL result without error in PyObject_Call"); - } - return result; -} -#endif - -/* PyObjectCallOneArg */ -#if CYTHON_COMPILING_IN_CPYTHON -static PyObject* __Pyx__PyObject_CallOneArg(PyObject *func, PyObject *arg) { - PyObject *result; - PyObject *args = PyTuple_New(1); - if (unlikely(!args)) return NULL; - Py_INCREF(arg); - PyTuple_SET_ITEM(args, 0, arg); - result = __Pyx_PyObject_Call(func, args, NULL); - Py_DECREF(args); - return result; -} -static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) { -#if CYTHON_FAST_PYCALL - if (PyFunction_Check(func)) { - return __Pyx_PyFunction_FastCall(func, &arg, 1); - } -#endif - if (likely(PyCFunction_Check(func))) { - if (likely(PyCFunction_GET_FLAGS(func) & METH_O)) { - return __Pyx_PyObject_CallMethO(func, arg); -#if CYTHON_FAST_PYCCALL - } else if (PyCFunction_GET_FLAGS(func) & METH_FASTCALL) { - return __Pyx_PyCFunction_FastCall(func, &arg, 1); -#endif - } - } - return __Pyx__PyObject_CallOneArg(func, arg); -} -#else -static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) { - PyObject *result; - PyObject *args = PyTuple_Pack(1, arg); - if (unlikely(!args)) return NULL; - result = __Pyx_PyObject_Call(func, args, NULL); - Py_DECREF(args); - return result; -} -#endif - -/* PyIntCompare */ -static CYTHON_INLINE PyObject* __Pyx_PyInt_EqObjC(PyObject *op1, PyObject *op2, CYTHON_UNUSED long intval, CYTHON_UNUSED long inplace) { - if (op1 == op2) { - Py_RETURN_TRUE; - } - #if PY_MAJOR_VERSION < 3 - if (likely(PyInt_CheckExact(op1))) { - const long b = intval; - long a = PyInt_AS_LONG(op1); - if (a == b) Py_RETURN_TRUE; else Py_RETURN_FALSE; - } - #endif - #if CYTHON_USE_PYLONG_INTERNALS - if (likely(PyLong_CheckExact(op1))) { - int unequal; - unsigned long uintval; - Py_ssize_t size = Py_SIZE(op1); - const digit* digits = ((PyLongObject*)op1)->ob_digit; - if (intval == 0) { - if (size == 0) Py_RETURN_TRUE; else Py_RETURN_FALSE; - } else if (intval < 0) { - if (size >= 0) - Py_RETURN_FALSE; - intval = -intval; - size = -size; - } else { - if (size <= 0) - Py_RETURN_FALSE; - } - uintval = (unsigned long) intval; -#if PyLong_SHIFT * 4 < SIZEOF_LONG*8 - if (uintval >> (PyLong_SHIFT * 4)) { - unequal = (size != 5) || (digits[0] != (uintval & (unsigned long) PyLong_MASK)) - | (digits[1] != ((uintval >> (1 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[2] != ((uintval >> (2 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[3] != ((uintval >> (3 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[4] != ((uintval >> (4 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)); - } else -#endif -#if PyLong_SHIFT * 3 < SIZEOF_LONG*8 - if (uintval >> (PyLong_SHIFT * 3)) { - unequal = (size != 4) || (digits[0] != (uintval & (unsigned long) PyLong_MASK)) - | (digits[1] != ((uintval >> (1 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[2] != ((uintval >> (2 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[3] != ((uintval >> (3 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)); - } else -#endif -#if PyLong_SHIFT * 2 < SIZEOF_LONG*8 - if (uintval >> (PyLong_SHIFT * 2)) { - unequal = (size != 3) || (digits[0] != (uintval & (unsigned long) PyLong_MASK)) - | (digits[1] != ((uintval >> (1 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)) | (digits[2] != ((uintval >> (2 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)); - } else -#endif -#if PyLong_SHIFT * 1 < SIZEOF_LONG*8 - if (uintval >> (PyLong_SHIFT * 1)) { - unequal = (size != 2) || (digits[0] != (uintval & (unsigned long) PyLong_MASK)) - | (digits[1] != ((uintval >> (1 * PyLong_SHIFT)) & (unsigned long) PyLong_MASK)); - } else -#endif - unequal = (size != 1) || (((unsigned long) digits[0]) != (uintval & (unsigned long) PyLong_MASK)); - if (unequal == 0) Py_RETURN_TRUE; else Py_RETURN_FALSE; - } - #endif - if (PyFloat_CheckExact(op1)) { - const long b = intval; - double a = PyFloat_AS_DOUBLE(op1); - if ((double)a == (double)b) Py_RETURN_TRUE; else Py_RETURN_FALSE; - } - return ( - PyObject_RichCompare(op1, op2, Py_EQ)); -} - -/* GetItemInt */ -static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) { - PyObject *r; - if (!j) return NULL; - r = PyObject_GetItem(o, j); - Py_DECREF(j); - return r; -} -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i, - CYTHON_NCP_UNUSED int wraparound, - CYTHON_NCP_UNUSED int boundscheck) { -#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - Py_ssize_t wrapped_i = i; - if (wraparound & unlikely(i < 0)) { - wrapped_i += PyList_GET_SIZE(o); - } - if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyList_GET_SIZE(o)))) { - PyObject *r = PyList_GET_ITEM(o, wrapped_i); - Py_INCREF(r); - return r; - } - return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); -#else - return PySequence_GetItem(o, i); -#endif -} -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i, - CYTHON_NCP_UNUSED int wraparound, - CYTHON_NCP_UNUSED int boundscheck) { -#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - Py_ssize_t wrapped_i = i; - if (wraparound & unlikely(i < 0)) { - wrapped_i += PyTuple_GET_SIZE(o); - } - if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyTuple_GET_SIZE(o)))) { - PyObject *r = PyTuple_GET_ITEM(o, wrapped_i); - Py_INCREF(r); - return r; - } - return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); -#else - return PySequence_GetItem(o, i); -#endif -} -static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, int is_list, - CYTHON_NCP_UNUSED int wraparound, - CYTHON_NCP_UNUSED int boundscheck) { -#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS && CYTHON_USE_TYPE_SLOTS - if (is_list || PyList_CheckExact(o)) { - Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyList_GET_SIZE(o); - if ((!boundscheck) || (likely(__Pyx_is_valid_index(n, PyList_GET_SIZE(o))))) { - PyObject *r = PyList_GET_ITEM(o, n); - Py_INCREF(r); - return r; - } - } - else if (PyTuple_CheckExact(o)) { - Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyTuple_GET_SIZE(o); - if ((!boundscheck) || likely(__Pyx_is_valid_index(n, PyTuple_GET_SIZE(o)))) { - PyObject *r = PyTuple_GET_ITEM(o, n); - Py_INCREF(r); - return r; - } - } else { - PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence; - if (likely(m && m->sq_item)) { - if (wraparound && unlikely(i < 0) && likely(m->sq_length)) { - Py_ssize_t l = m->sq_length(o); - if (likely(l >= 0)) { - i += l; - } else { - if (!PyErr_ExceptionMatches(PyExc_OverflowError)) - return NULL; - PyErr_Clear(); - } - } - return m->sq_item(o, i); - } - } -#else - if (is_list || PySequence_Check(o)) { - return PySequence_GetItem(o, i); - } -#endif - return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i)); -} - -/* BytesEquals */ -static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals) { -#if CYTHON_COMPILING_IN_PYPY - return PyObject_RichCompareBool(s1, s2, equals); -#else - if (s1 == s2) { - return (equals == Py_EQ); - } else if (PyBytes_CheckExact(s1) & PyBytes_CheckExact(s2)) { - const char *ps1, *ps2; - Py_ssize_t length = PyBytes_GET_SIZE(s1); - if (length != PyBytes_GET_SIZE(s2)) - return (equals == Py_NE); - ps1 = PyBytes_AS_STRING(s1); - ps2 = PyBytes_AS_STRING(s2); - if (ps1[0] != ps2[0]) { - return (equals == Py_NE); - } else if (length == 1) { - return (equals == Py_EQ); - } else { - int result; -#if CYTHON_USE_UNICODE_INTERNALS - Py_hash_t hash1, hash2; - hash1 = ((PyBytesObject*)s1)->ob_shash; - hash2 = ((PyBytesObject*)s2)->ob_shash; - if (hash1 != hash2 && hash1 != -1 && hash2 != -1) { - return (equals == Py_NE); - } -#endif - result = memcmp(ps1, ps2, (size_t)length); - return (equals == Py_EQ) ? (result == 0) : (result != 0); - } - } else if ((s1 == Py_None) & PyBytes_CheckExact(s2)) { - return (equals == Py_NE); - } else if ((s2 == Py_None) & PyBytes_CheckExact(s1)) { - return (equals == Py_NE); - } else { - int result; - PyObject* py_result = PyObject_RichCompare(s1, s2, equals); - if (!py_result) - return -1; - result = __Pyx_PyObject_IsTrue(py_result); - Py_DECREF(py_result); - return result; - } -#endif -} - -/* UnicodeEquals */ -static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals) { -#if CYTHON_COMPILING_IN_PYPY - return PyObject_RichCompareBool(s1, s2, equals); -#else -#if PY_MAJOR_VERSION < 3 - PyObject* owned_ref = NULL; -#endif - int s1_is_unicode, s2_is_unicode; - if (s1 == s2) { - goto return_eq; - } - s1_is_unicode = PyUnicode_CheckExact(s1); - s2_is_unicode = PyUnicode_CheckExact(s2); -#if PY_MAJOR_VERSION < 3 - if ((s1_is_unicode & (!s2_is_unicode)) && PyString_CheckExact(s2)) { - owned_ref = PyUnicode_FromObject(s2); - if (unlikely(!owned_ref)) - return -1; - s2 = owned_ref; - s2_is_unicode = 1; - } else if ((s2_is_unicode & (!s1_is_unicode)) && PyString_CheckExact(s1)) { - owned_ref = PyUnicode_FromObject(s1); - if (unlikely(!owned_ref)) - return -1; - s1 = owned_ref; - s1_is_unicode = 1; - } else if (((!s2_is_unicode) & (!s1_is_unicode))) { - return __Pyx_PyBytes_Equals(s1, s2, equals); - } -#endif - if (s1_is_unicode & s2_is_unicode) { - Py_ssize_t length; - int kind; - void *data1, *data2; - if (unlikely(__Pyx_PyUnicode_READY(s1) < 0) || unlikely(__Pyx_PyUnicode_READY(s2) < 0)) - return -1; - length = __Pyx_PyUnicode_GET_LENGTH(s1); - if (length != __Pyx_PyUnicode_GET_LENGTH(s2)) { - goto return_ne; - } -#if CYTHON_USE_UNICODE_INTERNALS - { - Py_hash_t hash1, hash2; - #if CYTHON_PEP393_ENABLED - hash1 = ((PyASCIIObject*)s1)->hash; - hash2 = ((PyASCIIObject*)s2)->hash; - #else - hash1 = ((PyUnicodeObject*)s1)->hash; - hash2 = ((PyUnicodeObject*)s2)->hash; - #endif - if (hash1 != hash2 && hash1 != -1 && hash2 != -1) { - goto return_ne; - } - } -#endif - kind = __Pyx_PyUnicode_KIND(s1); - if (kind != __Pyx_PyUnicode_KIND(s2)) { - goto return_ne; - } - data1 = __Pyx_PyUnicode_DATA(s1); - data2 = __Pyx_PyUnicode_DATA(s2); - if (__Pyx_PyUnicode_READ(kind, data1, 0) != __Pyx_PyUnicode_READ(kind, data2, 0)) { - goto return_ne; - } else if (length == 1) { - goto return_eq; - } else { - int result = memcmp(data1, data2, (size_t)(length * kind)); - #if PY_MAJOR_VERSION < 3 - Py_XDECREF(owned_ref); - #endif - return (equals == Py_EQ) ? (result == 0) : (result != 0); - } - } else if ((s1 == Py_None) & s2_is_unicode) { - goto return_ne; - } else if ((s2 == Py_None) & s1_is_unicode) { - goto return_ne; - } else { - int result; - PyObject* py_result = PyObject_RichCompare(s1, s2, equals); - #if PY_MAJOR_VERSION < 3 - Py_XDECREF(owned_ref); - #endif - if (!py_result) - return -1; - result = __Pyx_PyObject_IsTrue(py_result); - Py_DECREF(py_result); - return result; - } -return_eq: - #if PY_MAJOR_VERSION < 3 - Py_XDECREF(owned_ref); - #endif - return (equals == Py_EQ); -return_ne: - #if PY_MAJOR_VERSION < 3 - Py_XDECREF(owned_ref); - #endif - return (equals == Py_NE); -#endif -} - -/* PyObjectSetAttrStr */ -#if CYTHON_USE_TYPE_SLOTS -static CYTHON_INLINE int __Pyx_PyObject_SetAttrStr(PyObject* obj, PyObject* attr_name, PyObject* value) { - PyTypeObject* tp = Py_TYPE(obj); - if (likely(tp->tp_setattro)) - return tp->tp_setattro(obj, attr_name, value); -#if PY_MAJOR_VERSION < 3 - if (likely(tp->tp_setattr)) - return tp->tp_setattr(obj, PyString_AS_STRING(attr_name), value); -#endif - return PyObject_SetAttr(obj, attr_name, value); -} -#endif - -/* TypeImport */ -#ifndef __PYX_HAVE_RT_ImportType -#define __PYX_HAVE_RT_ImportType -static PyTypeObject *__Pyx_ImportType(PyObject *module, const char *module_name, const char *class_name, - size_t size, enum __Pyx_ImportType_CheckSize check_size) -{ - PyObject *result = 0; - char warning[200]; - Py_ssize_t basicsize; -#ifdef Py_LIMITED_API - PyObject *py_basicsize; -#endif - result = PyObject_GetAttrString(module, class_name); - if (!result) - goto bad; - if (!PyType_Check(result)) { - PyErr_Format(PyExc_TypeError, - "%.200s.%.200s is not a type object", - module_name, class_name); - goto bad; - } -#ifndef Py_LIMITED_API - basicsize = ((PyTypeObject *)result)->tp_basicsize; -#else - py_basicsize = PyObject_GetAttrString(result, "__basicsize__"); - if (!py_basicsize) - goto bad; - basicsize = PyLong_AsSsize_t(py_basicsize); - Py_DECREF(py_basicsize); - py_basicsize = 0; - if (basicsize == (Py_ssize_t)-1 && PyErr_Occurred()) - goto bad; -#endif - if ((size_t)basicsize < size) { - PyErr_Format(PyExc_ValueError, - "%.200s.%.200s size changed, may indicate binary incompatibility. " - "Expected %zd from C header, got %zd from PyObject", - module_name, class_name, size, basicsize); - goto bad; - } - if (check_size == __Pyx_ImportType_CheckSize_Error && (size_t)basicsize != size) { - PyErr_Format(PyExc_ValueError, - "%.200s.%.200s size changed, may indicate binary incompatibility. " - "Expected %zd from C header, got %zd from PyObject", - module_name, class_name, size, basicsize); - goto bad; - } - else if (check_size == __Pyx_ImportType_CheckSize_Warn && (size_t)basicsize > size) { - PyOS_snprintf(warning, sizeof(warning), - "%s.%s size changed, may indicate binary incompatibility. " - "Expected %zd from C header, got %zd from PyObject", - module_name, class_name, size, basicsize); - if (PyErr_WarnEx(NULL, warning, 0) < 0) goto bad; - } - return (PyTypeObject *)result; -bad: - Py_XDECREF(result); - return NULL; -} -#endif - -/* GetVTable */ -static void* __Pyx_GetVtable(PyObject *dict) { - void* ptr; - PyObject *ob = PyObject_GetItem(dict, __pyx_n_s_pyx_vtable); - if (!ob) - goto bad; -#if PY_VERSION_HEX >= 0x02070000 - ptr = PyCapsule_GetPointer(ob, 0); -#else - ptr = PyCObject_AsVoidPtr(ob); -#endif - if (!ptr && !PyErr_Occurred()) - PyErr_SetString(PyExc_RuntimeError, "invalid vtable found for imported type"); - Py_DECREF(ob); - return ptr; -bad: - Py_XDECREF(ob); - return NULL; -} - -/* Import */ -static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) { - PyObject *empty_list = 0; - PyObject *module = 0; - PyObject *global_dict = 0; - PyObject *empty_dict = 0; - PyObject *list; - #if PY_MAJOR_VERSION < 3 - PyObject *py_import; - py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s_import); - if (!py_import) - goto bad; - #endif - if (from_list) - list = from_list; - else { - empty_list = PyList_New(0); - if (!empty_list) - goto bad; - list = empty_list; - } - global_dict = PyModule_GetDict(__pyx_m); - if (!global_dict) - goto bad; - empty_dict = PyDict_New(); - if (!empty_dict) - goto bad; - { - #if PY_MAJOR_VERSION >= 3 - if (level == -1) { - if (strchr(__Pyx_MODULE_NAME, '.')) { - module = PyImport_ImportModuleLevelObject( - name, global_dict, empty_dict, list, 1); - if (!module) { - if (!PyErr_ExceptionMatches(PyExc_ImportError)) - goto bad; - PyErr_Clear(); - } - } - level = 0; - } - #endif - if (!module) { - #if PY_MAJOR_VERSION < 3 - PyObject *py_level = PyInt_FromLong(level); - if (!py_level) - goto bad; - module = PyObject_CallFunctionObjArgs(py_import, - name, global_dict, empty_dict, list, py_level, (PyObject *)NULL); - Py_DECREF(py_level); - #else - module = PyImport_ImportModuleLevelObject( - name, global_dict, empty_dict, list, level); - #endif - } - } -bad: - #if PY_MAJOR_VERSION < 3 - Py_XDECREF(py_import); - #endif - Py_XDECREF(empty_list); - Py_XDECREF(empty_dict); - return module; -} - -/* ImportFrom */ -static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) { - PyObject* value = __Pyx_PyObject_GetAttrStr(module, name); - if (unlikely(!value) && PyErr_ExceptionMatches(PyExc_AttributeError)) { - PyErr_Format(PyExc_ImportError, - #if PY_MAJOR_VERSION < 3 - "cannot import name %.230s", PyString_AS_STRING(name)); - #else - "cannot import name %S", name); - #endif - } - return value; -} - -/* FetchCommonType */ -static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type) { - PyObject* fake_module; - PyTypeObject* cached_type = NULL; - fake_module = PyImport_AddModule((char*) "_cython_" CYTHON_ABI); - if (!fake_module) return NULL; - Py_INCREF(fake_module); - cached_type = (PyTypeObject*) PyObject_GetAttrString(fake_module, type->tp_name); - if (cached_type) { - if (!PyType_Check((PyObject*)cached_type)) { - PyErr_Format(PyExc_TypeError, - "Shared Cython type %.200s is not a type object", - type->tp_name); - goto bad; - } - if (cached_type->tp_basicsize != type->tp_basicsize) { - PyErr_Format(PyExc_TypeError, - "Shared Cython type %.200s has the wrong size, try recompiling", - type->tp_name); - goto bad; - } - } else { - if (!PyErr_ExceptionMatches(PyExc_AttributeError)) goto bad; - PyErr_Clear(); - if (PyType_Ready(type) < 0) goto bad; - if (PyObject_SetAttrString(fake_module, type->tp_name, (PyObject*) type) < 0) - goto bad; - Py_INCREF(type); - cached_type = type; - } -done: - Py_DECREF(fake_module); - return cached_type; -bad: - Py_XDECREF(cached_type); - cached_type = NULL; - goto done; -} - -/* CythonFunction */ -#include -static PyObject * -__Pyx_CyFunction_get_doc(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *closure) -{ - if (unlikely(op->func_doc == NULL)) { - if (op->func.m_ml->ml_doc) { -#if PY_MAJOR_VERSION >= 3 - op->func_doc = PyUnicode_FromString(op->func.m_ml->ml_doc); -#else - op->func_doc = PyString_FromString(op->func.m_ml->ml_doc); -#endif - if (unlikely(op->func_doc == NULL)) - return NULL; - } else { - Py_INCREF(Py_None); - return Py_None; - } - } - Py_INCREF(op->func_doc); - return op->func_doc; -} -static int -__Pyx_CyFunction_set_doc(__pyx_CyFunctionObject *op, PyObject *value, CYTHON_UNUSED void *context) -{ - PyObject *tmp = op->func_doc; - if (value == NULL) { - value = Py_None; - } - Py_INCREF(value); - op->func_doc = value; - Py_XDECREF(tmp); - return 0; -} -static PyObject * -__Pyx_CyFunction_get_name(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context) -{ - if (unlikely(op->func_name == NULL)) { -#if PY_MAJOR_VERSION >= 3 - op->func_name = PyUnicode_InternFromString(op->func.m_ml->ml_name); -#else - op->func_name = PyString_InternFromString(op->func.m_ml->ml_name); -#endif - if (unlikely(op->func_name == NULL)) - return NULL; - } - Py_INCREF(op->func_name); - return op->func_name; -} -static int -__Pyx_CyFunction_set_name(__pyx_CyFunctionObject *op, PyObject *value, CYTHON_UNUSED void *context) -{ - PyObject *tmp; -#if PY_MAJOR_VERSION >= 3 - if (unlikely(value == NULL || !PyUnicode_Check(value))) -#else - if (unlikely(value == NULL || !PyString_Check(value))) -#endif - { - PyErr_SetString(PyExc_TypeError, - "__name__ must be set to a string object"); - return -1; - } - tmp = op->func_name; - Py_INCREF(value); - op->func_name = value; - Py_XDECREF(tmp); - return 0; -} -static PyObject * -__Pyx_CyFunction_get_qualname(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context) -{ - Py_INCREF(op->func_qualname); - return op->func_qualname; -} -static int -__Pyx_CyFunction_set_qualname(__pyx_CyFunctionObject *op, PyObject *value, CYTHON_UNUSED void *context) -{ - PyObject *tmp; -#if PY_MAJOR_VERSION >= 3 - if (unlikely(value == NULL || !PyUnicode_Check(value))) -#else - if (unlikely(value == NULL || !PyString_Check(value))) -#endif - { - PyErr_SetString(PyExc_TypeError, - "__qualname__ must be set to a string object"); - return -1; - } - tmp = op->func_qualname; - Py_INCREF(value); - op->func_qualname = value; - Py_XDECREF(tmp); - return 0; -} -static PyObject * -__Pyx_CyFunction_get_self(__pyx_CyFunctionObject *m, CYTHON_UNUSED void *closure) -{ - PyObject *self; - self = m->func_closure; - if (self == NULL) - self = Py_None; - Py_INCREF(self); - return self; -} -static PyObject * -__Pyx_CyFunction_get_dict(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context) -{ - if (unlikely(op->func_dict == NULL)) { - op->func_dict = PyDict_New(); - if (unlikely(op->func_dict == NULL)) - return NULL; - } - Py_INCREF(op->func_dict); - return op->func_dict; -} -static int -__Pyx_CyFunction_set_dict(__pyx_CyFunctionObject *op, PyObject *value, CYTHON_UNUSED void *context) -{ - PyObject *tmp; - if (unlikely(value == NULL)) { - PyErr_SetString(PyExc_TypeError, - "function's dictionary may not be deleted"); - return -1; - } - if (unlikely(!PyDict_Check(value))) { - PyErr_SetString(PyExc_TypeError, - "setting function's dictionary to a non-dict"); - return -1; - } - tmp = op->func_dict; - Py_INCREF(value); - op->func_dict = value; - Py_XDECREF(tmp); - return 0; -} -static PyObject * -__Pyx_CyFunction_get_globals(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context) -{ - Py_INCREF(op->func_globals); - return op->func_globals; -} -static PyObject * -__Pyx_CyFunction_get_closure(CYTHON_UNUSED __pyx_CyFunctionObject *op, CYTHON_UNUSED void *context) -{ - Py_INCREF(Py_None); - return Py_None; -} -static PyObject * -__Pyx_CyFunction_get_code(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context) -{ - PyObject* result = (op->func_code) ? op->func_code : Py_None; - Py_INCREF(result); - return result; -} -static int -__Pyx_CyFunction_init_defaults(__pyx_CyFunctionObject *op) { - int result = 0; - PyObject *res = op->defaults_getter((PyObject *) op); - if (unlikely(!res)) - return -1; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - op->defaults_tuple = PyTuple_GET_ITEM(res, 0); - Py_INCREF(op->defaults_tuple); - op->defaults_kwdict = PyTuple_GET_ITEM(res, 1); - Py_INCREF(op->defaults_kwdict); - #else - op->defaults_tuple = PySequence_ITEM(res, 0); - if (unlikely(!op->defaults_tuple)) result = -1; - else { - op->defaults_kwdict = PySequence_ITEM(res, 1); - if (unlikely(!op->defaults_kwdict)) result = -1; - } - #endif - Py_DECREF(res); - return result; -} -static int -__Pyx_CyFunction_set_defaults(__pyx_CyFunctionObject *op, PyObject* value, CYTHON_UNUSED void *context) { - PyObject* tmp; - if (!value) { - value = Py_None; - } else if (value != Py_None && !PyTuple_Check(value)) { - PyErr_SetString(PyExc_TypeError, - "__defaults__ must be set to a tuple object"); - return -1; - } - Py_INCREF(value); - tmp = op->defaults_tuple; - op->defaults_tuple = value; - Py_XDECREF(tmp); - return 0; -} -static PyObject * -__Pyx_CyFunction_get_defaults(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context) { - PyObject* result = op->defaults_tuple; - if (unlikely(!result)) { - if (op->defaults_getter) { - if (__Pyx_CyFunction_init_defaults(op) < 0) return NULL; - result = op->defaults_tuple; - } else { - result = Py_None; - } - } - Py_INCREF(result); - return result; -} -static int -__Pyx_CyFunction_set_kwdefaults(__pyx_CyFunctionObject *op, PyObject* value, CYTHON_UNUSED void *context) { - PyObject* tmp; - if (!value) { - value = Py_None; - } else if (value != Py_None && !PyDict_Check(value)) { - PyErr_SetString(PyExc_TypeError, - "__kwdefaults__ must be set to a dict object"); - return -1; - } - Py_INCREF(value); - tmp = op->defaults_kwdict; - op->defaults_kwdict = value; - Py_XDECREF(tmp); - return 0; -} -static PyObject * -__Pyx_CyFunction_get_kwdefaults(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context) { - PyObject* result = op->defaults_kwdict; - if (unlikely(!result)) { - if (op->defaults_getter) { - if (__Pyx_CyFunction_init_defaults(op) < 0) return NULL; - result = op->defaults_kwdict; - } else { - result = Py_None; - } - } - Py_INCREF(result); - return result; -} -static int -__Pyx_CyFunction_set_annotations(__pyx_CyFunctionObject *op, PyObject* value, CYTHON_UNUSED void *context) { - PyObject* tmp; - if (!value || value == Py_None) { - value = NULL; - } else if (!PyDict_Check(value)) { - PyErr_SetString(PyExc_TypeError, - "__annotations__ must be set to a dict object"); - return -1; - } - Py_XINCREF(value); - tmp = op->func_annotations; - op->func_annotations = value; - Py_XDECREF(tmp); - return 0; -} -static PyObject * -__Pyx_CyFunction_get_annotations(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *context) { - PyObject* result = op->func_annotations; - if (unlikely(!result)) { - result = PyDict_New(); - if (unlikely(!result)) return NULL; - op->func_annotations = result; - } - Py_INCREF(result); - return result; -} -static PyGetSetDef __pyx_CyFunction_getsets[] = { - {(char *) "func_doc", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0}, - {(char *) "__doc__", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0}, - {(char *) "func_name", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0}, - {(char *) "__name__", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0}, - {(char *) "__qualname__", (getter)__Pyx_CyFunction_get_qualname, (setter)__Pyx_CyFunction_set_qualname, 0, 0}, - {(char *) "__self__", (getter)__Pyx_CyFunction_get_self, 0, 0, 0}, - {(char *) "func_dict", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0}, - {(char *) "__dict__", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0}, - {(char *) "func_globals", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0}, - {(char *) "__globals__", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0}, - {(char *) "func_closure", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0}, - {(char *) "__closure__", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0}, - {(char *) "func_code", (getter)__Pyx_CyFunction_get_code, 0, 0, 0}, - {(char *) "__code__", (getter)__Pyx_CyFunction_get_code, 0, 0, 0}, - {(char *) "func_defaults", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0}, - {(char *) "__defaults__", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0}, - {(char *) "__kwdefaults__", (getter)__Pyx_CyFunction_get_kwdefaults, (setter)__Pyx_CyFunction_set_kwdefaults, 0, 0}, - {(char *) "__annotations__", (getter)__Pyx_CyFunction_get_annotations, (setter)__Pyx_CyFunction_set_annotations, 0, 0}, - {0, 0, 0, 0, 0} -}; -static PyMemberDef __pyx_CyFunction_members[] = { - {(char *) "__module__", T_OBJECT, offsetof(PyCFunctionObject, m_module), PY_WRITE_RESTRICTED, 0}, - {0, 0, 0, 0, 0} -}; -static PyObject * -__Pyx_CyFunction_reduce(__pyx_CyFunctionObject *m, CYTHON_UNUSED PyObject *args) -{ -#if PY_MAJOR_VERSION >= 3 - return PyUnicode_FromString(m->func.m_ml->ml_name); -#else - return PyString_FromString(m->func.m_ml->ml_name); -#endif -} -static PyMethodDef __pyx_CyFunction_methods[] = { - {"__reduce__", (PyCFunction)__Pyx_CyFunction_reduce, METH_VARARGS, 0}, - {0, 0, 0, 0} -}; -#if PY_VERSION_HEX < 0x030500A0 -#define __Pyx_CyFunction_weakreflist(cyfunc) ((cyfunc)->func_weakreflist) -#else -#define __Pyx_CyFunction_weakreflist(cyfunc) ((cyfunc)->func.m_weakreflist) -#endif -static PyObject *__Pyx_CyFunction_New(PyTypeObject *type, PyMethodDef *ml, int flags, PyObject* qualname, - PyObject *closure, PyObject *module, PyObject* globals, PyObject* code) { - __pyx_CyFunctionObject *op = PyObject_GC_New(__pyx_CyFunctionObject, type); - if (op == NULL) - return NULL; - op->flags = flags; - __Pyx_CyFunction_weakreflist(op) = NULL; - op->func.m_ml = ml; - op->func.m_self = (PyObject *) op; - Py_XINCREF(closure); - op->func_closure = closure; - Py_XINCREF(module); - op->func.m_module = module; - op->func_dict = NULL; - op->func_name = NULL; - Py_INCREF(qualname); - op->func_qualname = qualname; - op->func_doc = NULL; - op->func_classobj = NULL; - op->func_globals = globals; - Py_INCREF(op->func_globals); - Py_XINCREF(code); - op->func_code = code; - op->defaults_pyobjects = 0; - op->defaults = NULL; - op->defaults_tuple = NULL; - op->defaults_kwdict = NULL; - op->defaults_getter = NULL; - op->func_annotations = NULL; - PyObject_GC_Track(op); - return (PyObject *) op; -} -static int -__Pyx_CyFunction_clear(__pyx_CyFunctionObject *m) -{ - Py_CLEAR(m->func_closure); - Py_CLEAR(m->func.m_module); - Py_CLEAR(m->func_dict); - Py_CLEAR(m->func_name); - Py_CLEAR(m->func_qualname); - Py_CLEAR(m->func_doc); - Py_CLEAR(m->func_globals); - Py_CLEAR(m->func_code); - Py_CLEAR(m->func_classobj); - Py_CLEAR(m->defaults_tuple); - Py_CLEAR(m->defaults_kwdict); - Py_CLEAR(m->func_annotations); - if (m->defaults) { - PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m); - int i; - for (i = 0; i < m->defaults_pyobjects; i++) - Py_XDECREF(pydefaults[i]); - PyObject_Free(m->defaults); - m->defaults = NULL; - } - return 0; -} -static void __Pyx__CyFunction_dealloc(__pyx_CyFunctionObject *m) -{ - if (__Pyx_CyFunction_weakreflist(m) != NULL) - PyObject_ClearWeakRefs((PyObject *) m); - __Pyx_CyFunction_clear(m); - PyObject_GC_Del(m); -} -static void __Pyx_CyFunction_dealloc(__pyx_CyFunctionObject *m) -{ - PyObject_GC_UnTrack(m); - __Pyx__CyFunction_dealloc(m); -} -static int __Pyx_CyFunction_traverse(__pyx_CyFunctionObject *m, visitproc visit, void *arg) -{ - Py_VISIT(m->func_closure); - Py_VISIT(m->func.m_module); - Py_VISIT(m->func_dict); - Py_VISIT(m->func_name); - Py_VISIT(m->func_qualname); - Py_VISIT(m->func_doc); - Py_VISIT(m->func_globals); - Py_VISIT(m->func_code); - Py_VISIT(m->func_classobj); - Py_VISIT(m->defaults_tuple); - Py_VISIT(m->defaults_kwdict); - if (m->defaults) { - PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m); - int i; - for (i = 0; i < m->defaults_pyobjects; i++) - Py_VISIT(pydefaults[i]); - } - return 0; -} -static PyObject *__Pyx_CyFunction_descr_get(PyObject *func, PyObject *obj, PyObject *type) -{ - __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; - if (m->flags & __Pyx_CYFUNCTION_STATICMETHOD) { - Py_INCREF(func); - return func; - } - if (m->flags & __Pyx_CYFUNCTION_CLASSMETHOD) { - if (type == NULL) - type = (PyObject *)(Py_TYPE(obj)); - return __Pyx_PyMethod_New(func, type, (PyObject *)(Py_TYPE(type))); - } - if (obj == Py_None) - obj = NULL; - return __Pyx_PyMethod_New(func, obj, type); -} -static PyObject* -__Pyx_CyFunction_repr(__pyx_CyFunctionObject *op) -{ -#if PY_MAJOR_VERSION >= 3 - return PyUnicode_FromFormat("", - op->func_qualname, (void *)op); -#else - return PyString_FromFormat("", - PyString_AsString(op->func_qualname), (void *)op); -#endif -} -static PyObject * __Pyx_CyFunction_CallMethod(PyObject *func, PyObject *self, PyObject *arg, PyObject *kw) { - PyCFunctionObject* f = (PyCFunctionObject*)func; - PyCFunction meth = f->m_ml->ml_meth; - Py_ssize_t size; - switch (f->m_ml->ml_flags & (METH_VARARGS | METH_KEYWORDS | METH_NOARGS | METH_O)) { - case METH_VARARGS: - if (likely(kw == NULL || PyDict_Size(kw) == 0)) - return (*meth)(self, arg); - break; - case METH_VARARGS | METH_KEYWORDS: - return (*(PyCFunctionWithKeywords)(void*)meth)(self, arg, kw); - case METH_NOARGS: - if (likely(kw == NULL || PyDict_Size(kw) == 0)) { - size = PyTuple_GET_SIZE(arg); - if (likely(size == 0)) - return (*meth)(self, NULL); - PyErr_Format(PyExc_TypeError, - "%.200s() takes no arguments (%" CYTHON_FORMAT_SSIZE_T "d given)", - f->m_ml->ml_name, size); - return NULL; - } - break; - case METH_O: - if (likely(kw == NULL || PyDict_Size(kw) == 0)) { - size = PyTuple_GET_SIZE(arg); - if (likely(size == 1)) { - PyObject *result, *arg0; - #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS - arg0 = PyTuple_GET_ITEM(arg, 0); - #else - arg0 = PySequence_ITEM(arg, 0); if (unlikely(!arg0)) return NULL; - #endif - result = (*meth)(self, arg0); - #if !(CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS) - Py_DECREF(arg0); - #endif - return result; - } - PyErr_Format(PyExc_TypeError, - "%.200s() takes exactly one argument (%" CYTHON_FORMAT_SSIZE_T "d given)", - f->m_ml->ml_name, size); - return NULL; - } - break; - default: - PyErr_SetString(PyExc_SystemError, "Bad call flags in " - "__Pyx_CyFunction_Call. METH_OLDARGS is no " - "longer supported!"); - return NULL; - } - PyErr_Format(PyExc_TypeError, "%.200s() takes no keyword arguments", - f->m_ml->ml_name); - return NULL; -} -static CYTHON_INLINE PyObject *__Pyx_CyFunction_Call(PyObject *func, PyObject *arg, PyObject *kw) { - return __Pyx_CyFunction_CallMethod(func, ((PyCFunctionObject*)func)->m_self, arg, kw); -} -static PyObject *__Pyx_CyFunction_CallAsMethod(PyObject *func, PyObject *args, PyObject *kw) { - PyObject *result; - __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *) func; - if ((cyfunc->flags & __Pyx_CYFUNCTION_CCLASS) && !(cyfunc->flags & __Pyx_CYFUNCTION_STATICMETHOD)) { - Py_ssize_t argc; - PyObject *new_args; - PyObject *self; - argc = PyTuple_GET_SIZE(args); - new_args = PyTuple_GetSlice(args, 1, argc); - if (unlikely(!new_args)) - return NULL; - self = PyTuple_GetItem(args, 0); - if (unlikely(!self)) { - Py_DECREF(new_args); - return NULL; - } - result = __Pyx_CyFunction_CallMethod(func, self, new_args, kw); - Py_DECREF(new_args); - } else { - result = __Pyx_CyFunction_Call(func, args, kw); - } - return result; -} -static PyTypeObject __pyx_CyFunctionType_type = { - PyVarObject_HEAD_INIT(0, 0) - "cython_function_or_method", - sizeof(__pyx_CyFunctionObject), - 0, - (destructor) __Pyx_CyFunction_dealloc, - 0, - 0, - 0, -#if PY_MAJOR_VERSION < 3 - 0, -#else - 0, -#endif - (reprfunc) __Pyx_CyFunction_repr, - 0, - 0, - 0, - 0, - __Pyx_CyFunction_CallAsMethod, - 0, - 0, - 0, - 0, - Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, - 0, - (traverseproc) __Pyx_CyFunction_traverse, - (inquiry) __Pyx_CyFunction_clear, - 0, -#if PY_VERSION_HEX < 0x030500A0 - offsetof(__pyx_CyFunctionObject, func_weakreflist), -#else - offsetof(PyCFunctionObject, m_weakreflist), -#endif - 0, - 0, - __pyx_CyFunction_methods, - __pyx_CyFunction_members, - __pyx_CyFunction_getsets, - 0, - 0, - __Pyx_CyFunction_descr_get, - 0, - offsetof(__pyx_CyFunctionObject, func_dict), - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, -#if PY_VERSION_HEX >= 0x030400a1 - 0, -#endif -#if PY_VERSION_HEX >= 0x030800b1 - 0, -#endif -#if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000 - 0, -#endif -}; -static int __pyx_CyFunction_init(void) { - __pyx_CyFunctionType = __Pyx_FetchCommonType(&__pyx_CyFunctionType_type); - if (unlikely(__pyx_CyFunctionType == NULL)) { - return -1; - } - return 0; -} -static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *func, size_t size, int pyobjects) { - __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; - m->defaults = PyObject_Malloc(size); - if (unlikely(!m->defaults)) - return PyErr_NoMemory(); - memset(m->defaults, 0, size); - m->defaults_pyobjects = pyobjects; - return m->defaults; -} -static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *func, PyObject *tuple) { - __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; - m->defaults_tuple = tuple; - Py_INCREF(tuple); -} -static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *func, PyObject *dict) { - __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; - m->defaults_kwdict = dict; - Py_INCREF(dict); -} -static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *func, PyObject *dict) { - __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func; - m->func_annotations = dict; - Py_INCREF(dict); -} - -/* CalculateMetaclass */ -static PyObject *__Pyx_CalculateMetaclass(PyTypeObject *metaclass, PyObject *bases) { - Py_ssize_t i, nbases = PyTuple_GET_SIZE(bases); - for (i=0; i < nbases; i++) { - PyTypeObject *tmptype; - PyObject *tmp = PyTuple_GET_ITEM(bases, i); - tmptype = Py_TYPE(tmp); -#if PY_MAJOR_VERSION < 3 - if (tmptype == &PyClass_Type) - continue; -#endif - if (!metaclass) { - metaclass = tmptype; - continue; - } - if (PyType_IsSubtype(metaclass, tmptype)) - continue; - if (PyType_IsSubtype(tmptype, metaclass)) { - metaclass = tmptype; - continue; - } - PyErr_SetString(PyExc_TypeError, - "metaclass conflict: " - "the metaclass of a derived class " - "must be a (non-strict) subclass " - "of the metaclasses of all its bases"); - return NULL; - } - if (!metaclass) { -#if PY_MAJOR_VERSION < 3 - metaclass = &PyClass_Type; -#else - metaclass = &PyType_Type; -#endif - } - Py_INCREF((PyObject*) metaclass); - return (PyObject*) metaclass; -} - -/* Py3ClassCreate */ -static PyObject *__Pyx_Py3MetaclassPrepare(PyObject *metaclass, PyObject *bases, PyObject *name, - PyObject *qualname, PyObject *mkw, PyObject *modname, PyObject *doc) { - PyObject *ns; - if (metaclass) { - PyObject *prep = __Pyx_PyObject_GetAttrStr(metaclass, __pyx_n_s_prepare); - if (prep) { - PyObject *pargs = PyTuple_Pack(2, name, bases); - if (unlikely(!pargs)) { - Py_DECREF(prep); - return NULL; - } - ns = PyObject_Call(prep, pargs, mkw); - Py_DECREF(prep); - Py_DECREF(pargs); - } else { - if (unlikely(!PyErr_ExceptionMatches(PyExc_AttributeError))) - return NULL; - PyErr_Clear(); - ns = PyDict_New(); - } - } else { - ns = PyDict_New(); - } - if (unlikely(!ns)) - return NULL; - if (unlikely(PyObject_SetItem(ns, __pyx_n_s_module, modname) < 0)) goto bad; - if (unlikely(PyObject_SetItem(ns, __pyx_n_s_qualname, qualname) < 0)) goto bad; - if (unlikely(doc && PyObject_SetItem(ns, __pyx_n_s_doc, doc) < 0)) goto bad; - return ns; -bad: - Py_DECREF(ns); - return NULL; -} -static PyObject *__Pyx_Py3ClassCreate(PyObject *metaclass, PyObject *name, PyObject *bases, - PyObject *dict, PyObject *mkw, - int calculate_metaclass, int allow_py2_metaclass) { - PyObject *result, *margs; - PyObject *owned_metaclass = NULL; - if (allow_py2_metaclass) { - owned_metaclass = PyObject_GetItem(dict, __pyx_n_s_metaclass); - if (owned_metaclass) { - metaclass = owned_metaclass; - } else if (likely(PyErr_ExceptionMatches(PyExc_KeyError))) { - PyErr_Clear(); - } else { - return NULL; - } - } - if (calculate_metaclass && (!metaclass || PyType_Check(metaclass))) { - metaclass = __Pyx_CalculateMetaclass((PyTypeObject*) metaclass, bases); - Py_XDECREF(owned_metaclass); - if (unlikely(!metaclass)) - return NULL; - owned_metaclass = metaclass; - } - margs = PyTuple_Pack(3, name, bases, dict); - if (unlikely(!margs)) { - result = NULL; - } else { - result = PyObject_Call(metaclass, margs, mkw); - Py_DECREF(margs); - } - Py_XDECREF(owned_metaclass); - return result; -} - -/* CLineInTraceback */ -#ifndef CYTHON_CLINE_IN_TRACEBACK -static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line) { - PyObject *use_cline; - PyObject *ptype, *pvalue, *ptraceback; -#if CYTHON_COMPILING_IN_CPYTHON - PyObject **cython_runtime_dict; -#endif - if (unlikely(!__pyx_cython_runtime)) { - return c_line; - } - __Pyx_ErrFetchInState(tstate, &ptype, &pvalue, &ptraceback); -#if CYTHON_COMPILING_IN_CPYTHON - cython_runtime_dict = _PyObject_GetDictPtr(__pyx_cython_runtime); - if (likely(cython_runtime_dict)) { - __PYX_PY_DICT_LOOKUP_IF_MODIFIED( - use_cline, *cython_runtime_dict, - __Pyx_PyDict_GetItemStr(*cython_runtime_dict, __pyx_n_s_cline_in_traceback)) - } else -#endif - { - PyObject *use_cline_obj = __Pyx_PyObject_GetAttrStr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback); - if (use_cline_obj) { - use_cline = PyObject_Not(use_cline_obj) ? Py_False : Py_True; - Py_DECREF(use_cline_obj); - } else { - PyErr_Clear(); - use_cline = NULL; - } - } - if (!use_cline) { - c_line = 0; - PyObject_SetAttr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback, Py_False); - } - else if (use_cline == Py_False || (use_cline != Py_True && PyObject_Not(use_cline) != 0)) { - c_line = 0; - } - __Pyx_ErrRestoreInState(tstate, ptype, pvalue, ptraceback); - return c_line; -} -#endif - -/* CodeObjectCache */ -static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) { - int start = 0, mid = 0, end = count - 1; - if (end >= 0 && code_line > entries[end].code_line) { - return count; - } - while (start < end) { - mid = start + (end - start) / 2; - if (code_line < entries[mid].code_line) { - end = mid; - } else if (code_line > entries[mid].code_line) { - start = mid + 1; - } else { - return mid; - } - } - if (code_line <= entries[mid].code_line) { - return mid; - } else { - return mid + 1; - } -} -static PyCodeObject *__pyx_find_code_object(int code_line) { - PyCodeObject* code_object; - int pos; - if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) { - return NULL; - } - pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); - if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) { - return NULL; - } - code_object = __pyx_code_cache.entries[pos].code_object; - Py_INCREF(code_object); - return code_object; -} -static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) { - int pos, i; - __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries; - if (unlikely(!code_line)) { - return; - } - if (unlikely(!entries)) { - entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry)); - if (likely(entries)) { - __pyx_code_cache.entries = entries; - __pyx_code_cache.max_count = 64; - __pyx_code_cache.count = 1; - entries[0].code_line = code_line; - entries[0].code_object = code_object; - Py_INCREF(code_object); - } - return; - } - pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line); - if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) { - PyCodeObject* tmp = entries[pos].code_object; - entries[pos].code_object = code_object; - Py_DECREF(tmp); - return; - } - if (__pyx_code_cache.count == __pyx_code_cache.max_count) { - int new_max = __pyx_code_cache.max_count + 64; - entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc( - __pyx_code_cache.entries, (size_t)new_max*sizeof(__Pyx_CodeObjectCacheEntry)); - if (unlikely(!entries)) { - return; - } - __pyx_code_cache.entries = entries; - __pyx_code_cache.max_count = new_max; - } - for (i=__pyx_code_cache.count; i>pos; i--) { - entries[i] = entries[i-1]; - } - entries[pos].code_line = code_line; - entries[pos].code_object = code_object; - __pyx_code_cache.count++; - Py_INCREF(code_object); -} - -/* AddTraceback */ -#include "compile.h" -#include "frameobject.h" -#include "traceback.h" -static PyCodeObject* __Pyx_CreateCodeObjectForTraceback( - const char *funcname, int c_line, - int py_line, const char *filename) { - PyCodeObject *py_code = 0; - PyObject *py_srcfile = 0; - PyObject *py_funcname = 0; - #if PY_MAJOR_VERSION < 3 - py_srcfile = PyString_FromString(filename); - #else - py_srcfile = PyUnicode_FromString(filename); - #endif - if (!py_srcfile) goto bad; - if (c_line) { - #if PY_MAJOR_VERSION < 3 - py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); - #else - py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line); - #endif - } - else { - #if PY_MAJOR_VERSION < 3 - py_funcname = PyString_FromString(funcname); - #else - py_funcname = PyUnicode_FromString(funcname); - #endif - } - if (!py_funcname) goto bad; - py_code = __Pyx_PyCode_New( - 0, - 0, - 0, - 0, - 0, - __pyx_empty_bytes, /*PyObject *code,*/ - __pyx_empty_tuple, /*PyObject *consts,*/ - __pyx_empty_tuple, /*PyObject *names,*/ - __pyx_empty_tuple, /*PyObject *varnames,*/ - __pyx_empty_tuple, /*PyObject *freevars,*/ - __pyx_empty_tuple, /*PyObject *cellvars,*/ - py_srcfile, /*PyObject *filename,*/ - py_funcname, /*PyObject *name,*/ - py_line, - __pyx_empty_bytes /*PyObject *lnotab*/ - ); - Py_DECREF(py_srcfile); - Py_DECREF(py_funcname); - return py_code; -bad: - Py_XDECREF(py_srcfile); - Py_XDECREF(py_funcname); - return NULL; -} -static void __Pyx_AddTraceback(const char *funcname, int c_line, - int py_line, const char *filename) { - PyCodeObject *py_code = 0; - PyFrameObject *py_frame = 0; - PyThreadState *tstate = __Pyx_PyThreadState_Current; - if (c_line) { - c_line = __Pyx_CLineForTraceback(tstate, c_line); - } - py_code = __pyx_find_code_object(c_line ? -c_line : py_line); - if (!py_code) { - py_code = __Pyx_CreateCodeObjectForTraceback( - funcname, c_line, py_line, filename); - if (!py_code) goto bad; - __pyx_insert_code_object(c_line ? -c_line : py_line, py_code); - } - py_frame = PyFrame_New( - tstate, /*PyThreadState *tstate,*/ - py_code, /*PyCodeObject *code,*/ - __pyx_d, /*PyObject *globals,*/ - 0 /*PyObject *locals*/ - ); - if (!py_frame) goto bad; - __Pyx_PyFrame_SetLineNumber(py_frame, py_line); - PyTraceBack_Here(py_frame); -bad: - Py_XDECREF(py_code); - Py_XDECREF(py_frame); -} - -/* CIntToPy */ -static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value) { - const int neg_one = (int) ((int) 0 - (int) 1), const_zero = (int) 0; - const int is_unsigned = neg_one > const_zero; - if (is_unsigned) { - if (sizeof(int) < sizeof(long)) { - return PyInt_FromLong((long) value); - } else if (sizeof(int) <= sizeof(unsigned long)) { - return PyLong_FromUnsignedLong((unsigned long) value); -#ifdef HAVE_LONG_LONG - } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) { - return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); -#endif - } - } else { - if (sizeof(int) <= sizeof(long)) { - return PyInt_FromLong((long) value); -#ifdef HAVE_LONG_LONG - } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) { - return PyLong_FromLongLong((PY_LONG_LONG) value); -#endif - } - } - { - int one = 1; int little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&value; - return _PyLong_FromByteArray(bytes, sizeof(int), - little, !is_unsigned); - } -} - -/* CIntToPy */ -static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) { - const long neg_one = (long) ((long) 0 - (long) 1), const_zero = (long) 0; - const int is_unsigned = neg_one > const_zero; - if (is_unsigned) { - if (sizeof(long) < sizeof(long)) { - return PyInt_FromLong((long) value); - } else if (sizeof(long) <= sizeof(unsigned long)) { - return PyLong_FromUnsignedLong((unsigned long) value); -#ifdef HAVE_LONG_LONG - } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) { - return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); -#endif - } - } else { - if (sizeof(long) <= sizeof(long)) { - return PyInt_FromLong((long) value); -#ifdef HAVE_LONG_LONG - } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) { - return PyLong_FromLongLong((PY_LONG_LONG) value); -#endif - } - } - { - int one = 1; int little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&value; - return _PyLong_FromByteArray(bytes, sizeof(long), - little, !is_unsigned); - } -} - -/* CIntFromPyVerify */ -#define __PYX_VERIFY_RETURN_INT(target_type, func_type, func_value)\ - __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 0) -#define __PYX_VERIFY_RETURN_INT_EXC(target_type, func_type, func_value)\ - __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 1) -#define __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, exc)\ - {\ - func_type value = func_value;\ - if (sizeof(target_type) < sizeof(func_type)) {\ - if (unlikely(value != (func_type) (target_type) value)) {\ - func_type zero = 0;\ - if (exc && unlikely(value == (func_type)-1 && PyErr_Occurred()))\ - return (target_type) -1;\ - if (is_unsigned && unlikely(value < zero))\ - goto raise_neg_overflow;\ - else\ - goto raise_overflow;\ - }\ - }\ - return (target_type) value;\ - } - -/* CIntToPy */ -static CYTHON_INLINE PyObject* __Pyx_PyInt_From_unsigned_int(unsigned int value) { - const unsigned int neg_one = (unsigned int) ((unsigned int) 0 - (unsigned int) 1), const_zero = (unsigned int) 0; - const int is_unsigned = neg_one > const_zero; - if (is_unsigned) { - if (sizeof(unsigned int) < sizeof(long)) { - return PyInt_FromLong((long) value); - } else if (sizeof(unsigned int) <= sizeof(unsigned long)) { - return PyLong_FromUnsignedLong((unsigned long) value); -#ifdef HAVE_LONG_LONG - } else if (sizeof(unsigned int) <= sizeof(unsigned PY_LONG_LONG)) { - return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value); -#endif - } - } else { - if (sizeof(unsigned int) <= sizeof(long)) { - return PyInt_FromLong((long) value); -#ifdef HAVE_LONG_LONG - } else if (sizeof(unsigned int) <= sizeof(PY_LONG_LONG)) { - return PyLong_FromLongLong((PY_LONG_LONG) value); -#endif - } - } - { - int one = 1; int little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&value; - return _PyLong_FromByteArray(bytes, sizeof(unsigned int), - little, !is_unsigned); - } -} - -/* CIntFromPy */ -static CYTHON_INLINE unsigned int __Pyx_PyInt_As_unsigned_int(PyObject *x) { - const unsigned int neg_one = (unsigned int) ((unsigned int) 0 - (unsigned int) 1), const_zero = (unsigned int) 0; - const int is_unsigned = neg_one > const_zero; -#if PY_MAJOR_VERSION < 3 - if (likely(PyInt_Check(x))) { - if (sizeof(unsigned int) < sizeof(long)) { - __PYX_VERIFY_RETURN_INT(unsigned int, long, PyInt_AS_LONG(x)) - } else { - long val = PyInt_AS_LONG(x); - if (is_unsigned && unlikely(val < 0)) { - goto raise_neg_overflow; - } - return (unsigned int) val; - } - } else -#endif - if (likely(PyLong_Check(x))) { - if (is_unsigned) { -#if CYTHON_USE_PYLONG_INTERNALS - const digit* digits = ((PyLongObject*)x)->ob_digit; - switch (Py_SIZE(x)) { - case 0: return (unsigned int) 0; - case 1: __PYX_VERIFY_RETURN_INT(unsigned int, digit, digits[0]) - case 2: - if (8 * sizeof(unsigned int) > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(unsigned int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(unsigned int) >= 2 * PyLong_SHIFT) { - return (unsigned int) (((((unsigned int)digits[1]) << PyLong_SHIFT) | (unsigned int)digits[0])); - } - } - break; - case 3: - if (8 * sizeof(unsigned int) > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(unsigned int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(unsigned int) >= 3 * PyLong_SHIFT) { - return (unsigned int) (((((((unsigned int)digits[2]) << PyLong_SHIFT) | (unsigned int)digits[1]) << PyLong_SHIFT) | (unsigned int)digits[0])); - } - } - break; - case 4: - if (8 * sizeof(unsigned int) > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(unsigned int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(unsigned int) >= 4 * PyLong_SHIFT) { - return (unsigned int) (((((((((unsigned int)digits[3]) << PyLong_SHIFT) | (unsigned int)digits[2]) << PyLong_SHIFT) | (unsigned int)digits[1]) << PyLong_SHIFT) | (unsigned int)digits[0])); - } - } - break; - } -#endif -#if CYTHON_COMPILING_IN_CPYTHON - if (unlikely(Py_SIZE(x) < 0)) { - goto raise_neg_overflow; - } -#else - { - int result = PyObject_RichCompareBool(x, Py_False, Py_LT); - if (unlikely(result < 0)) - return (unsigned int) -1; - if (unlikely(result == 1)) - goto raise_neg_overflow; - } -#endif - if (sizeof(unsigned int) <= sizeof(unsigned long)) { - __PYX_VERIFY_RETURN_INT_EXC(unsigned int, unsigned long, PyLong_AsUnsignedLong(x)) -#ifdef HAVE_LONG_LONG - } else if (sizeof(unsigned int) <= sizeof(unsigned PY_LONG_LONG)) { - __PYX_VERIFY_RETURN_INT_EXC(unsigned int, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) -#endif - } - } else { -#if CYTHON_USE_PYLONG_INTERNALS - const digit* digits = ((PyLongObject*)x)->ob_digit; - switch (Py_SIZE(x)) { - case 0: return (unsigned int) 0; - case -1: __PYX_VERIFY_RETURN_INT(unsigned int, sdigit, (sdigit) (-(sdigit)digits[0])) - case 1: __PYX_VERIFY_RETURN_INT(unsigned int, digit, +digits[0]) - case -2: - if (8 * sizeof(unsigned int) - 1 > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(unsigned int, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(unsigned int) - 1 > 2 * PyLong_SHIFT) { - return (unsigned int) (((unsigned int)-1)*(((((unsigned int)digits[1]) << PyLong_SHIFT) | (unsigned int)digits[0]))); - } - } - break; - case 2: - if (8 * sizeof(unsigned int) > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(unsigned int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(unsigned int) - 1 > 2 * PyLong_SHIFT) { - return (unsigned int) ((((((unsigned int)digits[1]) << PyLong_SHIFT) | (unsigned int)digits[0]))); - } - } - break; - case -3: - if (8 * sizeof(unsigned int) - 1 > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(unsigned int, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(unsigned int) - 1 > 3 * PyLong_SHIFT) { - return (unsigned int) (((unsigned int)-1)*(((((((unsigned int)digits[2]) << PyLong_SHIFT) | (unsigned int)digits[1]) << PyLong_SHIFT) | (unsigned int)digits[0]))); - } - } - break; - case 3: - if (8 * sizeof(unsigned int) > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(unsigned int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(unsigned int) - 1 > 3 * PyLong_SHIFT) { - return (unsigned int) ((((((((unsigned int)digits[2]) << PyLong_SHIFT) | (unsigned int)digits[1]) << PyLong_SHIFT) | (unsigned int)digits[0]))); - } - } - break; - case -4: - if (8 * sizeof(unsigned int) - 1 > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(unsigned int, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(unsigned int) - 1 > 4 * PyLong_SHIFT) { - return (unsigned int) (((unsigned int)-1)*(((((((((unsigned int)digits[3]) << PyLong_SHIFT) | (unsigned int)digits[2]) << PyLong_SHIFT) | (unsigned int)digits[1]) << PyLong_SHIFT) | (unsigned int)digits[0]))); - } - } - break; - case 4: - if (8 * sizeof(unsigned int) > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(unsigned int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(unsigned int) - 1 > 4 * PyLong_SHIFT) { - return (unsigned int) ((((((((((unsigned int)digits[3]) << PyLong_SHIFT) | (unsigned int)digits[2]) << PyLong_SHIFT) | (unsigned int)digits[1]) << PyLong_SHIFT) | (unsigned int)digits[0]))); - } - } - break; - } -#endif - if (sizeof(unsigned int) <= sizeof(long)) { - __PYX_VERIFY_RETURN_INT_EXC(unsigned int, long, PyLong_AsLong(x)) -#ifdef HAVE_LONG_LONG - } else if (sizeof(unsigned int) <= sizeof(PY_LONG_LONG)) { - __PYX_VERIFY_RETURN_INT_EXC(unsigned int, PY_LONG_LONG, PyLong_AsLongLong(x)) -#endif - } - } - { -#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) - PyErr_SetString(PyExc_RuntimeError, - "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); -#else - unsigned int val; - PyObject *v = __Pyx_PyNumber_IntOrLong(x); - #if PY_MAJOR_VERSION < 3 - if (likely(v) && !PyLong_Check(v)) { - PyObject *tmp = v; - v = PyNumber_Long(tmp); - Py_DECREF(tmp); - } - #endif - if (likely(v)) { - int one = 1; int is_little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&val; - int ret = _PyLong_AsByteArray((PyLongObject *)v, - bytes, sizeof(val), - is_little, !is_unsigned); - Py_DECREF(v); - if (likely(!ret)) - return val; - } -#endif - return (unsigned int) -1; - } - } else { - unsigned int val; - PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); - if (!tmp) return (unsigned int) -1; - val = __Pyx_PyInt_As_unsigned_int(tmp); - Py_DECREF(tmp); - return val; - } -raise_overflow: - PyErr_SetString(PyExc_OverflowError, - "value too large to convert to unsigned int"); - return (unsigned int) -1; -raise_neg_overflow: - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to unsigned int"); - return (unsigned int) -1; -} - -/* CIntFromPy */ -static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) { - const int neg_one = (int) ((int) 0 - (int) 1), const_zero = (int) 0; - const int is_unsigned = neg_one > const_zero; -#if PY_MAJOR_VERSION < 3 - if (likely(PyInt_Check(x))) { - if (sizeof(int) < sizeof(long)) { - __PYX_VERIFY_RETURN_INT(int, long, PyInt_AS_LONG(x)) - } else { - long val = PyInt_AS_LONG(x); - if (is_unsigned && unlikely(val < 0)) { - goto raise_neg_overflow; - } - return (int) val; - } - } else -#endif - if (likely(PyLong_Check(x))) { - if (is_unsigned) { -#if CYTHON_USE_PYLONG_INTERNALS - const digit* digits = ((PyLongObject*)x)->ob_digit; - switch (Py_SIZE(x)) { - case 0: return (int) 0; - case 1: __PYX_VERIFY_RETURN_INT(int, digit, digits[0]) - case 2: - if (8 * sizeof(int) > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) >= 2 * PyLong_SHIFT) { - return (int) (((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); - } - } - break; - case 3: - if (8 * sizeof(int) > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) >= 3 * PyLong_SHIFT) { - return (int) (((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); - } - } - break; - case 4: - if (8 * sizeof(int) > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) >= 4 * PyLong_SHIFT) { - return (int) (((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])); - } - } - break; - } -#endif -#if CYTHON_COMPILING_IN_CPYTHON - if (unlikely(Py_SIZE(x) < 0)) { - goto raise_neg_overflow; - } -#else - { - int result = PyObject_RichCompareBool(x, Py_False, Py_LT); - if (unlikely(result < 0)) - return (int) -1; - if (unlikely(result == 1)) - goto raise_neg_overflow; - } -#endif - if (sizeof(int) <= sizeof(unsigned long)) { - __PYX_VERIFY_RETURN_INT_EXC(int, unsigned long, PyLong_AsUnsignedLong(x)) -#ifdef HAVE_LONG_LONG - } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) { - __PYX_VERIFY_RETURN_INT_EXC(int, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) -#endif - } - } else { -#if CYTHON_USE_PYLONG_INTERNALS - const digit* digits = ((PyLongObject*)x)->ob_digit; - switch (Py_SIZE(x)) { - case 0: return (int) 0; - case -1: __PYX_VERIFY_RETURN_INT(int, sdigit, (sdigit) (-(sdigit)digits[0])) - case 1: __PYX_VERIFY_RETURN_INT(int, digit, +digits[0]) - case -2: - if (8 * sizeof(int) - 1 > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) { - return (int) (((int)-1)*(((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); - } - } - break; - case 2: - if (8 * sizeof(int) > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) { - return (int) ((((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); - } - } - break; - case -3: - if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) { - return (int) (((int)-1)*(((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); - } - } - break; - case 3: - if (8 * sizeof(int) > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) { - return (int) ((((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); - } - } - break; - case -4: - if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) - 1 > 4 * PyLong_SHIFT) { - return (int) (((int)-1)*(((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); - } - } - break; - case 4: - if (8 * sizeof(int) > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(int) - 1 > 4 * PyLong_SHIFT) { - return (int) ((((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]))); - } - } - break; - } -#endif - if (sizeof(int) <= sizeof(long)) { - __PYX_VERIFY_RETURN_INT_EXC(int, long, PyLong_AsLong(x)) -#ifdef HAVE_LONG_LONG - } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) { - __PYX_VERIFY_RETURN_INT_EXC(int, PY_LONG_LONG, PyLong_AsLongLong(x)) -#endif - } - } - { -#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) - PyErr_SetString(PyExc_RuntimeError, - "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); -#else - int val; - PyObject *v = __Pyx_PyNumber_IntOrLong(x); - #if PY_MAJOR_VERSION < 3 - if (likely(v) && !PyLong_Check(v)) { - PyObject *tmp = v; - v = PyNumber_Long(tmp); - Py_DECREF(tmp); - } - #endif - if (likely(v)) { - int one = 1; int is_little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&val; - int ret = _PyLong_AsByteArray((PyLongObject *)v, - bytes, sizeof(val), - is_little, !is_unsigned); - Py_DECREF(v); - if (likely(!ret)) - return val; - } -#endif - return (int) -1; - } - } else { - int val; - PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); - if (!tmp) return (int) -1; - val = __Pyx_PyInt_As_int(tmp); - Py_DECREF(tmp); - return val; - } -raise_overflow: - PyErr_SetString(PyExc_OverflowError, - "value too large to convert to int"); - return (int) -1; -raise_neg_overflow: - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to int"); - return (int) -1; -} - -/* CIntFromPy */ -static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) { - const long neg_one = (long) ((long) 0 - (long) 1), const_zero = (long) 0; - const int is_unsigned = neg_one > const_zero; -#if PY_MAJOR_VERSION < 3 - if (likely(PyInt_Check(x))) { - if (sizeof(long) < sizeof(long)) { - __PYX_VERIFY_RETURN_INT(long, long, PyInt_AS_LONG(x)) - } else { - long val = PyInt_AS_LONG(x); - if (is_unsigned && unlikely(val < 0)) { - goto raise_neg_overflow; - } - return (long) val; - } - } else -#endif - if (likely(PyLong_Check(x))) { - if (is_unsigned) { -#if CYTHON_USE_PYLONG_INTERNALS - const digit* digits = ((PyLongObject*)x)->ob_digit; - switch (Py_SIZE(x)) { - case 0: return (long) 0; - case 1: __PYX_VERIFY_RETURN_INT(long, digit, digits[0]) - case 2: - if (8 * sizeof(long) > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) >= 2 * PyLong_SHIFT) { - return (long) (((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); - } - } - break; - case 3: - if (8 * sizeof(long) > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) >= 3 * PyLong_SHIFT) { - return (long) (((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); - } - } - break; - case 4: - if (8 * sizeof(long) > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) >= 4 * PyLong_SHIFT) { - return (long) (((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])); - } - } - break; - } -#endif -#if CYTHON_COMPILING_IN_CPYTHON - if (unlikely(Py_SIZE(x) < 0)) { - goto raise_neg_overflow; - } -#else - { - int result = PyObject_RichCompareBool(x, Py_False, Py_LT); - if (unlikely(result < 0)) - return (long) -1; - if (unlikely(result == 1)) - goto raise_neg_overflow; - } -#endif - if (sizeof(long) <= sizeof(unsigned long)) { - __PYX_VERIFY_RETURN_INT_EXC(long, unsigned long, PyLong_AsUnsignedLong(x)) -#ifdef HAVE_LONG_LONG - } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) { - __PYX_VERIFY_RETURN_INT_EXC(long, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x)) -#endif - } - } else { -#if CYTHON_USE_PYLONG_INTERNALS - const digit* digits = ((PyLongObject*)x)->ob_digit; - switch (Py_SIZE(x)) { - case 0: return (long) 0; - case -1: __PYX_VERIFY_RETURN_INT(long, sdigit, (sdigit) (-(sdigit)digits[0])) - case 1: __PYX_VERIFY_RETURN_INT(long, digit, +digits[0]) - case -2: - if (8 * sizeof(long) - 1 > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { - return (long) (((long)-1)*(((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); - } - } - break; - case 2: - if (8 * sizeof(long) > 1 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { - return (long) ((((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); - } - } - break; - case -3: - if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { - return (long) (((long)-1)*(((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); - } - } - break; - case 3: - if (8 * sizeof(long) > 2 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { - return (long) ((((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); - } - } - break; - case -4: - if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { - return (long) (((long)-1)*(((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); - } - } - break; - case 4: - if (8 * sizeof(long) > 3 * PyLong_SHIFT) { - if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) { - __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]))) - } else if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) { - return (long) ((((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]))); - } - } - break; - } -#endif - if (sizeof(long) <= sizeof(long)) { - __PYX_VERIFY_RETURN_INT_EXC(long, long, PyLong_AsLong(x)) -#ifdef HAVE_LONG_LONG - } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) { - __PYX_VERIFY_RETURN_INT_EXC(long, PY_LONG_LONG, PyLong_AsLongLong(x)) -#endif - } - } - { -#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray) - PyErr_SetString(PyExc_RuntimeError, - "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers"); -#else - long val; - PyObject *v = __Pyx_PyNumber_IntOrLong(x); - #if PY_MAJOR_VERSION < 3 - if (likely(v) && !PyLong_Check(v)) { - PyObject *tmp = v; - v = PyNumber_Long(tmp); - Py_DECREF(tmp); - } - #endif - if (likely(v)) { - int one = 1; int is_little = (int)*(unsigned char *)&one; - unsigned char *bytes = (unsigned char *)&val; - int ret = _PyLong_AsByteArray((PyLongObject *)v, - bytes, sizeof(val), - is_little, !is_unsigned); - Py_DECREF(v); - if (likely(!ret)) - return val; - } -#endif - return (long) -1; - } - } else { - long val; - PyObject *tmp = __Pyx_PyNumber_IntOrLong(x); - if (!tmp) return (long) -1; - val = __Pyx_PyInt_As_long(tmp); - Py_DECREF(tmp); - return val; - } -raise_overflow: - PyErr_SetString(PyExc_OverflowError, - "value too large to convert to long"); - return (long) -1; -raise_neg_overflow: - PyErr_SetString(PyExc_OverflowError, - "can't convert negative value to long"); - return (long) -1; -} - -/* FastTypeChecks */ -#if CYTHON_COMPILING_IN_CPYTHON -static int __Pyx_InBases(PyTypeObject *a, PyTypeObject *b) { - while (a) { - a = a->tp_base; - if (a == b) - return 1; - } - return b == &PyBaseObject_Type; -} -static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b) { - PyObject *mro; - if (a == b) return 1; - mro = a->tp_mro; - if (likely(mro)) { - Py_ssize_t i, n; - n = PyTuple_GET_SIZE(mro); - for (i = 0; i < n; i++) { - if (PyTuple_GET_ITEM(mro, i) == (PyObject *)b) - return 1; - } - return 0; - } - return __Pyx_InBases(a, b); -} -#if PY_MAJOR_VERSION == 2 -static int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject* exc_type2) { - PyObject *exception, *value, *tb; - int res; - __Pyx_PyThreadState_declare - __Pyx_PyThreadState_assign - __Pyx_ErrFetch(&exception, &value, &tb); - res = exc_type1 ? PyObject_IsSubclass(err, exc_type1) : 0; - if (unlikely(res == -1)) { - PyErr_WriteUnraisable(err); - res = 0; - } - if (!res) { - res = PyObject_IsSubclass(err, exc_type2); - if (unlikely(res == -1)) { - PyErr_WriteUnraisable(err); - res = 0; - } - } - __Pyx_ErrRestore(exception, value, tb); - return res; -} -#else -static CYTHON_INLINE int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject *exc_type2) { - int res = exc_type1 ? __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type1) : 0; - if (!res) { - res = __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type2); - } - return res; -} -#endif -static int __Pyx_PyErr_GivenExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) { - Py_ssize_t i, n; - assert(PyExceptionClass_Check(exc_type)); - n = PyTuple_GET_SIZE(tuple); -#if PY_MAJOR_VERSION >= 3 - for (i=0; ip) { - #if PY_MAJOR_VERSION < 3 - if (t->is_unicode) { - *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL); - } else if (t->intern) { - *t->p = PyString_InternFromString(t->s); - } else { - *t->p = PyString_FromStringAndSize(t->s, t->n - 1); - } - #else - if (t->is_unicode | t->is_str) { - if (t->intern) { - *t->p = PyUnicode_InternFromString(t->s); - } else if (t->encoding) { - *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL); - } else { - *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1); - } - } else { - *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1); - } - #endif - if (!*t->p) - return -1; - if (PyObject_Hash(*t->p) == -1) - return -1; - ++t; - } - return 0; -} - -static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char* c_str) { - return __Pyx_PyUnicode_FromStringAndSize(c_str, (Py_ssize_t)strlen(c_str)); -} -static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject* o) { - Py_ssize_t ignore; - return __Pyx_PyObject_AsStringAndSize(o, &ignore); -} -#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT -#if !CYTHON_PEP393_ENABLED -static const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) { - char* defenc_c; - PyObject* defenc = _PyUnicode_AsDefaultEncodedString(o, NULL); - if (!defenc) return NULL; - defenc_c = PyBytes_AS_STRING(defenc); -#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII - { - char* end = defenc_c + PyBytes_GET_SIZE(defenc); - char* c; - for (c = defenc_c; c < end; c++) { - if ((unsigned char) (*c) >= 128) { - PyUnicode_AsASCIIString(o); - return NULL; - } - } - } -#endif - *length = PyBytes_GET_SIZE(defenc); - return defenc_c; -} -#else -static CYTHON_INLINE const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) { - if (unlikely(__Pyx_PyUnicode_READY(o) == -1)) return NULL; -#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII - if (likely(PyUnicode_IS_ASCII(o))) { - *length = PyUnicode_GET_LENGTH(o); - return PyUnicode_AsUTF8(o); - } else { - PyUnicode_AsASCIIString(o); - return NULL; - } -#else - return PyUnicode_AsUTF8AndSize(o, length); -#endif -} -#endif -#endif -static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_t *length) { -#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT - if ( -#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII - __Pyx_sys_getdefaultencoding_not_ascii && -#endif - PyUnicode_Check(o)) { - return __Pyx_PyUnicode_AsStringAndSize(o, length); - } else -#endif -#if (!CYTHON_COMPILING_IN_PYPY) || (defined(PyByteArray_AS_STRING) && defined(PyByteArray_GET_SIZE)) - if (PyByteArray_Check(o)) { - *length = PyByteArray_GET_SIZE(o); - return PyByteArray_AS_STRING(o); - } else -#endif - { - char* result; - int r = PyBytes_AsStringAndSize(o, &result, length); - if (unlikely(r < 0)) { - return NULL; - } else { - return result; - } - } -} -static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) { - int is_true = x == Py_True; - if (is_true | (x == Py_False) | (x == Py_None)) return is_true; - else return PyObject_IsTrue(x); -} -static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject* x) { - int retval; - if (unlikely(!x)) return -1; - retval = __Pyx_PyObject_IsTrue(x); - Py_DECREF(x); - return retval; -} -static PyObject* __Pyx_PyNumber_IntOrLongWrongResultType(PyObject* result, const char* type_name) { -#if PY_MAJOR_VERSION >= 3 - if (PyLong_Check(result)) { - if (PyErr_WarnFormat(PyExc_DeprecationWarning, 1, - "__int__ returned non-int (type %.200s). " - "The ability to return an instance of a strict subclass of int " - "is deprecated, and may be removed in a future version of Python.", - Py_TYPE(result)->tp_name)) { - Py_DECREF(result); - return NULL; - } - return result; - } -#endif - PyErr_Format(PyExc_TypeError, - "__%.4s__ returned non-%.4s (type %.200s)", - type_name, type_name, Py_TYPE(result)->tp_name); - Py_DECREF(result); - return NULL; -} -static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x) { -#if CYTHON_USE_TYPE_SLOTS - PyNumberMethods *m; -#endif - const char *name = NULL; - PyObject *res = NULL; -#if PY_MAJOR_VERSION < 3 - if (likely(PyInt_Check(x) || PyLong_Check(x))) -#else - if (likely(PyLong_Check(x))) -#endif - return __Pyx_NewRef(x); -#if CYTHON_USE_TYPE_SLOTS - m = Py_TYPE(x)->tp_as_number; - #if PY_MAJOR_VERSION < 3 - if (m && m->nb_int) { - name = "int"; - res = m->nb_int(x); - } - else if (m && m->nb_long) { - name = "long"; - res = m->nb_long(x); - } - #else - if (likely(m && m->nb_int)) { - name = "int"; - res = m->nb_int(x); - } - #endif -#else - if (!PyBytes_CheckExact(x) && !PyUnicode_CheckExact(x)) { - res = PyNumber_Int(x); - } -#endif - if (likely(res)) { -#if PY_MAJOR_VERSION < 3 - if (unlikely(!PyInt_Check(res) && !PyLong_Check(res))) { -#else - if (unlikely(!PyLong_CheckExact(res))) { -#endif - return __Pyx_PyNumber_IntOrLongWrongResultType(res, name); - } - } - else if (!PyErr_Occurred()) { - PyErr_SetString(PyExc_TypeError, - "an integer is required"); - } - return res; -} -static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) { - Py_ssize_t ival; - PyObject *x; -#if PY_MAJOR_VERSION < 3 - if (likely(PyInt_CheckExact(b))) { - if (sizeof(Py_ssize_t) >= sizeof(long)) - return PyInt_AS_LONG(b); - else - return PyInt_AsSsize_t(b); - } -#endif - if (likely(PyLong_CheckExact(b))) { - #if CYTHON_USE_PYLONG_INTERNALS - const digit* digits = ((PyLongObject*)b)->ob_digit; - const Py_ssize_t size = Py_SIZE(b); - if (likely(__Pyx_sst_abs(size) <= 1)) { - ival = likely(size) ? digits[0] : 0; - if (size == -1) ival = -ival; - return ival; - } else { - switch (size) { - case 2: - if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) { - return (Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); - } - break; - case -2: - if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) { - return -(Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); - } - break; - case 3: - if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) { - return (Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); - } - break; - case -3: - if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) { - return -(Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); - } - break; - case 4: - if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) { - return (Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); - } - break; - case -4: - if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) { - return -(Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0])); - } - break; - } - } - #endif - return PyLong_AsSsize_t(b); - } - x = PyNumber_Index(b); - if (!x) return -1; - ival = PyInt_AsSsize_t(x); - Py_DECREF(x); - return ival; -} -static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b) { - return b ? __Pyx_NewRef(Py_True) : __Pyx_NewRef(Py_False); -} -static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) { - return PyInt_FromSize_t(ival); -} - - -#endif /* Py_PYTHON_H */ diff --git a/numcodecs/zfp.pyx b/numcodecs/zfp.pyx deleted file mode 100644 index 7de7010b..00000000 --- a/numcodecs/zfp.pyx +++ /dev/null @@ -1,433 +0,0 @@ -from __future__ import absolute_import, print_function, division -#cimport numpy -cimport cython -#from cpython cimport array -import numpy as np -import sys -#import array - -from cpython.buffer cimport PyBUF_ANY_CONTIGUOUS, PyBUF_WRITEABLE -from cpython.bytes cimport PyBytes_FromStringAndSize, PyBytes_AS_STRING - -from .compat_ext cimport Buffer -from .compat_ext import Buffer -from numcodecs.compat import ensure_contiguous_ndarray,ensure_ndarray -from numcodecs.abc import Codec - - -cdef extern from "bitstream.h": - ctypedef struct bitstream: - pass - - bitstream* stream_open(void*,size_t) - bitstream* stream_close(void*) - bitstream* zfp_stream_bit_stream(const zfp_stream*) - -cdef extern from "zfp.h": - - cdef enum: - ZFP_VERSION_STRING - ZFP_HEADER_FULL - ZFP_MIN_BITS - ZFP_MAX_BITS - ZFP_MAX_PREC - ZFP_MIN_EXP - ctypedef enum zfp_type: - zfp_type_none = 0 - zfp_type_int32 = 1 - zfp_type_int64 = 2 - zfp_type_float = 3 - zfp_type_double = 4 - - ctypedef enum zfp_exec_policy: - zfp_exec_serial = 0 - zfp_exec_omp = 1 - zfp_exec_cuda = 2 - - ctypedef struct zfp_exec_params_omp: - unsigned int threads - unsigned int chunk_size - - ctypedef union zfp_exec_params: - zfp_exec_params_omp omp - - ctypedef struct zfp_execution: - zfp_exec_policy policy - zfp_exec_params params - - ctypedef struct zfp_stream: - unsigned int minbits - unsigned int maxbits - unsigned int maxprec - int minexp - bitstream* stream - zfp_execution _exec "exec" - - ctypedef struct zfp_field: - zfp_type _type "type" - unsigned int nx,ny,nz,nw - int sx,sy,sz,sw - void* data - - - zfp_stream* zfp_stream_open(zfp_stream*) - void zfp_stream_close(zfp_stream*) - void zfp_stream_rewind(zfp_stream*) - zfp_type zfp_field_set_type(zfp_field*, zfp_type) - void zfp_field_set_pointer(zfp_field*,void*) - void zfp_field_set_size_1d(zfp_field*,unsigned int nx) - void zfp_field_set_size_2d(zfp_field*,unsigned int nx,unsigned int nx) - void zfp_field_set_size_3d(zfp_field*,unsigned int nx,unsigned int nx,unsigned int nz) - void zfp_field_set_size_4d(zfp_field*,unsigned int nx,unsigned int nx,unsigned int nz,unsigned int nw) - void zfp_field_set_stride_1d(zfp_field* field, int sx) - void zfp_field_set_stride_2d(zfp_field* field, int sx, int sy) - void zfp_field_set_stride_3d(zfp_field* field, int sx, int sy, int sz) - void zfp_field_set_stride_4d(zfp_field* field, int sx, int sy, int sz, int sw) - zfp_field* zfp_field_alloc() - void zfp_field_free(zfp_field* field) - size_t zfp_stream_maximum_size(const zfp_stream*,const zfp_field*) - void zfp_stream_set_bit_stream(zfp_stream*,bitstream*) - double zfp_stream_set_rate(zfp_stream*,double,zfp_type,unsigned int,int) - unsigned int zfp_stream_set_precision(zfp_stream*,unsigned int) - double zfp_stream_set_accuracy(zfp_stream*,double) - int zfp_stream_set_params(zfp_stream*,unsigned int,unsigned int,unsigned int,int) - size_t zfp_compress(zfp_stream*,const zfp_field*) - int zfp_decompress(zfp_stream*,zfp_field*) - int zfp_stream_set_execution(zfp_stream* stream, zfp_exec_policy policy) - size_t zfp_write_header(zfp_stream* stream, const zfp_field* field, unsigned int mask) - size_t zfp_read_header(zfp_stream* stream, zfp_field* field, unsigned int mask) - -VERSION_STRING = ZFP_VERSION_STRING -__version__ = VERSION_STRING - - -def compress(input_array,method): - """Compress data. - - Parameters - ---------- - input_array : numpy array - Data to be compressed. zfp can compress data better with arrays that have - larger number of dimensions (1-4). So we want to reserve the dimension of the data - - method : a dictionary has compression mode and its relate compression parameters - - Returns - ------- - dest : bytes - Compressed data - - """ - cdef zfp_stream* zfp - cdef bitstream* stream - cdef zfp_field* field - cdef size_t bufsize - cdef int stride[4] - - cdef: - char *source_ptr - char *dest_ptr - Buffer source_buffer - int dest_size,compressed_size - bytes dest - # get compression mode - zfpmode = method['mode'] - - # allocate an object to store all parameters - field = zfp_field_alloc() - - # setup source buffer - source_buffer = Buffer(input_array,PyBUF_ANY_CONTIGUOUS) - source_ptr = source_buffer.ptr - - # determine type - #if type(input_array) == bytes: - # the_type= - #else: - if input_array.dtype == np.float32: - the_type = zfp_type_float - elif input_array.dtype == np.float64: - the_type = zfp_type_double - elif input_array.dtype == np.int32: - the_type = zfp_type_int32 - elif input_array.dtype == np.int64: - the_type = zfp_type_int64 - else: - raise TypeError("The type of data should be int32, int64, float or double") - - zfp_field_set_type(field,the_type) - zfp_field_set_pointer(field,source_ptr) - - # convert F order array to C order array - if input_array.flags.f_contiguous: - input_array=np.ascontiguousarray(input_array) - - # determine the dimensions and set dimensions of C order array - if input_array.ndim == 1: - zfp_field_set_size_1d(field,input_array.shape[0]) - zfp_field_set_stride_1d(field,input_array.strides[0]/input_array.itemsize) - elif input_array.ndim == 2: - zfp_field_set_size_2d(field,input_array.shape[1],input_array.shape[0]) - zfp_field_set_stride_2d(field,input_array.strides[1]/input_array.itemsize,input_array.strides[0]/input_array.itemsize) - elif input_array.ndim == 3: - zfp_field_set_size_3d(field,input_array.shape[2],input_array.shape[1],input_array.shape[0]) - zfp_field_set_stride_3d(field,input_array.strides[2]/input_array.itemsize,input_array.strides[1]/input_array.itemsize,input_array.strides[0]/input_array.itemsize) - elif input_array.ndim == 4: - zfp_field_set_size_4d(field,input_array.shape[3],input_array.shape[2],input_array.shape[1],input_array.shape[0]) - zfp_field_set_stride_4d(field,input_array.strides[3]/input_array.itemsize,input_array.strides[2]/input_array.itemsize,input_array.strides[1]/input_array.itemsize,input_array.strides[0]/input_array.itemsize) - else: - raise ValueError("The dimension of data should be equal or less than 4, please reshape") - # setup compression mode - zfp=zfp_stream_open(NULL) - if zfpmode == 'a': - zfp_stream_set_accuracy(zfp,method['tol']) - elif zfpmode == 'p': - zfp_stream_set_precision(zfp,method['prec']) - elif zfpmode == 'r': - zfp_stream_set_rate(zfp,method['rate'],the_type,input_array.ndim,0) - elif zfpmode =='c': - zfp_stream_set_params(zfp,method['minbits'],method['maxbits'],method['maxprec'],method['minexp']) - else: - raise ValueError('Must specify zfp mode') - - # setup destination - dest_size = zfp_stream_maximum_size(zfp,field) - dest = PyBytes_FromStringAndSize(NULL,dest_size) - dest_ptr = PyBytes_AS_STRING(dest) - stream = stream_open(dest_ptr,dest_size) - zfp_stream_set_bit_stream(zfp,stream) - # currently only use serial execution - zfp_stream_set_execution(zfp,zfp_exec_serial) - - # perform compression - ret = zfp_write_header(zfp,field,ZFP_HEADER_FULL) - if not ret: - raise RuntimeError("zfp_write_header failed") - compressed_size = zfp_compress(zfp,field) - if not compressed_size: - raise RuntimeError("zfp_compress is failed") - - # release buffers - source_buffer.release() - zfp_field_free(field) - zfp_stream_close(zfp) - stream_close(stream) - - return dest[:compressed_size] - -def decompress(source,dest=None): - """Decompress data. - - Parameters - ---------- - source : bytes-like - Compressed data, including zfp header. Can be any object supporting the - buffer protocol - dest : array-like, optional - - Returns - ------- - dest : array-like - Object containing decompressed data - - """ - cdef: - zfp_stream* zfp - bitstream* stream - zfp_field* field - Buffer source_buffer - Buffer dest_buffer = None - char *source_ptr - char *dest_ptr - int source_size - - - # setup source buffer - source_buffer = Buffer(source, PyBUF_ANY_CONTIGUOUS) - source_ptr = source_buffer.ptr - source_size = source_buffer.nbytes - - # setup zfp object - field = zfp_field_alloc() - zfp = zfp_stream_open(NULL) - stream = stream_open(source_ptr,source_size) - zfp_stream_set_bit_stream(zfp,stream) - zfp_stream_rewind(zfp) - - # read zfp header - ret = zfp_read_header(zfp,field,ZFP_HEADER_FULL); - if not ret: - raise RuntimeError("zfp_read_header failed") - - # determine destination data type - if field._type == zfp_type_float: - the_type = np.float32 - type_size = 4 - elif field._type == zfp_type_double: - the_type = np.float64 - type_size = 8 - elif field._type == zfp_type_int32: - the_type = np.int32 - type_size = 4 - else: - the_type = np.int64 - type_size = 8 - - # determine data dimension - nx,ny,nz,nw = field.nx,field.ny,field.nz,field.nw - datashape = (nx if nx != 0 else 1)* (ny if ny != 0 else 1) \ - *(nz if nz != 0 else 1)* (nw if nw != 0 else 1) - - # currently only serial exeution available - zfp_stream_set_execution(zfp,zfp_exec_serial) - - # setup destination buffer - if dest is None: - dest = PyBytes_FromStringAndSize(NULL,datashape*type_size) - dest_ptr = PyBytes_AS_STRING(dest) - else: - arr = ensure_contiguous_ndarray(dest) - dest_buffer = Buffer(arr, PyBUF_ANY_CONTIGUOUS | PyBUF_WRITEABLE) - dest_ptr = dest_buffer.ptr - zfp_field_set_pointer(field,dest_ptr) - - # perform decompression - ret = zfp_decompress(zfp,field) - if not ret: - raise RuntimeError("decompress failed") - - # release buffers - source_buffer.release() - if dest_buffer is not None: - dest_buffer.release() - zfp_field_free(field) - zfp_stream_close(zfp) - stream_close(stream) - - # reshape the buffer - if not ny: - buf_shape=(nx) - elif ny and not nz: - buf_shape=(ny,nx) - elif ny and nz and not nw: - buf_shape=(nz,ny,nx) - else: - buf_shape=(nw,nz,ny,nx) - dest = ensure_ndarray(dest).view(the_type) - dest = dest.reshape(buf_shape) - return dest - -class CompressMethod: - ''' - Create a CompressMethod object to store zfp mode and - its parameters in Zfp class - - ''' - - # Initilize with defaults - def __init__(self): - self.zfpmode='a' - self.tolerance=0.01 - - def set_mode(self,mode): - self.zfpmode=mode - def set_tolerance(self,tol): - self.tolerance=tol - def set_precision(self,prec): - self.precision=prec - def set_rate(self,rate): - self.rate=rate - def set_minbits(self,minbits): - self.minbits=minbits - def set_maxbits(self,maxbits): - self.maxbits=maxbits - def set_maxprec(self,maxprec): - self.maxprec=maxprec - def set_minexp(self,minexp): - self.minexp=minexp - -class Zfp(Codec): - """Codec providing compression using zfp via the Python standard library. - - Attributes - ---------- - mode(mode='a') - Fixed accuracy compression. - tol : float - Absolue error tolerance, default 0.0 - - mode(mode='p') - Fixed precision compression. - prec : int - Uncompressed bits per value, can be 0-64 for double precision - - mode(mode='r') - Fixed rate compression. - rate : int - Compressed bits per floating-point value, can be 0-64 for double precision - - mode(mode='c') - Custom advanced compression. - minbits : int - Min bits per 4^d values in d dimensions - maxbits : int - Max bits per 4^d values in d dimensions, 0 for unlimited - minexp : int - Min bit plane, -1074 for all bit planes - maxprec : int - Max bits of precision per value, 0 for full - """ - codec_id = 'zfp' - - def __init__(self, mode = 'a',tol = 0.0, prec = ZFP_MAX_PREC, rate = 0, minbits = ZFP_MIN_BITS, maxbits = ZFP_MAX_BITS, minexp = ZFP_MIN_EXP, maxprec = ZFP_MAX_PREC,the_method=None): - self.mode=mode - #the_method=CompressMethod() - self.the_method={} - - if mode == 'a': - self.tol=tol - self.the_method['mode']=mode - self.the_method['tol']=tol - elif mode == 'p': - self.prec = prec - self.the_method['mode']=mode - self.the_method['prec']=prec - elif mode == 'r': - self.rate = rate - self.the_method['mode']=mode - self.the_method['rate']=rate - elif mode == 'c': - self.minbits = minbits - self.maxbits = maxbits - self.maxprec = maxprec - self.minexp = minexp - self.the_method['mode']=mode - self.the_method['minbits']=minbits - self.the_method['maxbits']=maxbits - self.the_method['minexp']=minexp - self.the_method['maxprec']=maxprec - else: - raise ValueError("Wrong mode, please set mode to 'a', 'p', 'r' or 'c'") - #self.the_method=the_method - - def encode(self,buf): - #buf = ensure_contiguous_ndarray(buf) - return compress(buf,self.the_method) - - def decode(self,buf,out=None): - buf=ensure_contiguous_ndarray(buf) - return decompress(buf,out) - - def __repr__(self): - if self.mode == 'a': - r= '%s(mode=%r,tol=%s)' % (type(self).__name__, self.mode,self.tol) - elif self.mode == 'p': - r= '%s(mode=%r,prec=%s)' % (type(self).__name__,self.mode,self.prec) - elif self.mode == 'r': - r= '%s(mode=%r,rate=%s)' % (type(self).__name__,self.mode,self.rate) - elif self.mode == 'c': - r= '%s(mode=%r,minbits=%s,maxbits=%s,minexp=%s,maxprec=%s)' % (type(self).__name__,self.mode,self.minbits,self.maxbits,self.minexp,self.maxprec) - else: - r="WRONG MODE" - return r - From 0cd7622214d3fb72be0a97d237ac432a49d05ace Mon Sep 17 00:00:00 2001 From: halehawk Date: Fri, 1 May 2020 10:45:09 -0600 Subject: [PATCH 46/69] change zfpy repr --- fixture/zfpy/array.02.npy | Bin 8128 -> 8128 bytes fixture/zfpy/array.03.npy | Bin 8128 -> 8128 bytes fixture/zfpy/array.04.npy | Bin 8128 -> 8128 bytes fixture/zfpy/array.05.npy | Bin 8128 -> 8128 bytes fixture/zfpy/array.06.npy | Bin 4128 -> 4128 bytes fixture/zfpy/array.07.npy | Bin 8128 -> 8128 bytes fixture/zfpy/codec.00/encoded.02.dat | Bin 6944 -> 6936 bytes fixture/zfpy/codec.00/encoded.03.dat | Bin 6936 -> 6944 bytes fixture/zfpy/codec.00/encoded.04.dat | Bin 6936 -> 6944 bytes fixture/zfpy/codec.00/encoded.05.dat | Bin 6936 -> 6936 bytes fixture/zfpy/codec.00/encoded.06.dat | Bin 2568 -> 2568 bytes fixture/zfpy/codec.00/encoded.07.dat | Bin 4592 -> 4600 bytes fixture/zfpy/codec.01/encoded.02.dat | Bin 6944 -> 6936 bytes fixture/zfpy/codec.01/encoded.03.dat | Bin 6936 -> 6944 bytes fixture/zfpy/codec.01/encoded.04.dat | Bin 6936 -> 6944 bytes fixture/zfpy/codec.01/encoded.05.dat | Bin 6936 -> 6936 bytes fixture/zfpy/codec.01/encoded.06.dat | Bin 2568 -> 2568 bytes fixture/zfpy/codec.01/encoded.07.dat | Bin 4592 -> 4600 bytes fixture/zfpy/codec.02/encoded.02.dat | Bin 6944 -> 6936 bytes fixture/zfpy/codec.02/encoded.03.dat | Bin 6936 -> 6944 bytes fixture/zfpy/codec.02/encoded.04.dat | Bin 6936 -> 6944 bytes fixture/zfpy/codec.02/encoded.05.dat | Bin 6936 -> 6936 bytes fixture/zfpy/codec.02/encoded.06.dat | Bin 2568 -> 2568 bytes fixture/zfpy/codec.02/encoded.07.dat | Bin 4592 -> 4600 bytes fixture/zfpy/codec.03/encoded.02.dat | Bin 6944 -> 6936 bytes fixture/zfpy/codec.03/encoded.03.dat | Bin 6936 -> 6944 bytes fixture/zfpy/codec.03/encoded.04.dat | Bin 6936 -> 6944 bytes fixture/zfpy/codec.03/encoded.05.dat | Bin 6936 -> 6936 bytes fixture/zfpy/codec.03/encoded.06.dat | Bin 2568 -> 2568 bytes fixture/zfpy/codec.03/encoded.07.dat | Bin 4592 -> 4600 bytes numcodecs/tests/test_zfpy.py | 4 +--- numcodecs/zfpy.py | 11 +++-------- 32 files changed, 4 insertions(+), 11 deletions(-) diff --git a/fixture/zfpy/array.02.npy b/fixture/zfpy/array.02.npy index aa6cf93fa08cf5b1c1f410bd5ec3cf1a72535be2..9415c0a6109dbda9ead235e1721dd7e8d52967d1 100644 GIT binary patch literal 8128 zcmbVR_dl24|0Y|qRnjot_R7lUWtJ^MGE#QPtYnppig+a=QFdfxRAi=7WQMGaN@Y|M z5`}!P`|~G!{c;}XoaeZ%>-jwAzF)UwQ!5j5TS|(v6rsW{u7S=0!YaJNYHmux61>80 zz5zi2Cr%&t4RCQK*7Z+#2fAWC(Bp)kE9N3H`}a%m%Ip`F;0@>f|NSvawl&!(sF6u+ z%}&$B(qz(<`h(>+_ReHuP1=q$BHFY`L|`q^^-R_O}Pgq@h@UEqX;V zX(RSm)J+vK>GA0xwi=9A`#bf81hsY$V=*nxp zMr0COiOA1H5}8zf?QsB)E}8VlO2S-Pk4&1If0O8pu}j(6n_7oVx@IeGVT*awZ6Wm; zE#MTB-V&-wCK)@o3Tb2gsaYYN_F*!q`0iXn3h-r+O!h7SS9STQOtC(2@UFXkL7e2C z`3DEV=SGX+dKdVxAFE^=#(uwPgUY-Tne^;x|Dq1!|86d77sk5%hi^@*!1a+aC?Q%H z_}p&jXd;he=T-T1Ar=yZecur8<^9%AGcdTybvXZ=4;TyTFaclO2IpmccqE#J-4(*w-l;W5RT#+p3fgTZk_k*7RH)9X?wdcsw7+tj0AO0L| z9U-6PfM@E?91HX+T6@`N5Br0B+AP8bWKuRiW7jv-D`oq=2FYdi30WwZ#0w2 zpihqjTb-dgnPjx?_014E1TSCih(sJiyUf*}@??_M*;>&o>gvlMyrC* z)9;Xu&IQC_wMZ23gnh(UmI+%VMe z*ps5A7gdmVw_B$rJ^FRXqM2(I_yg^761mW4v`zlflc<-MID7Ft{G=xj~@f;MbJ58_)*OU^vh#g4;jb)(1Jue4eBJeVdnS*^W$v4!Y>f| z?EI3Mi1in*yLpVE=M7=<-Fft(FsZ$m0esH9w@LGYeQ9#ag;U6SW zlq2}iC23Lf!vFr%=Qpm<>FCxqr6;K8Ns||xe8|gRIVd9x9M24o9P)#mt9Zo982Z4k zKA4IXbNjB}ln(G4&F^IPBkluM&W$Ye*NCO(Y&&>tycBsPhjs1iV^j((_D>zBC= zJnv)Z6-2OpypB4X=x2T9ca{m@eNhC%P53umX}R2vx#k@+!w%GsqH7># z6X!cxxzF1a_@1zO?s*73eJD--7Qx;jscEqfI3wLh>Pvx}na6_bs{omlB(ZhpD)bf- z+ExDt{_VMydP=z8`yF&y4g$AY(y??I zp3?lE)RFISaEjbF_<48BUJC%v?w6{!|LG-~v;M96dcc=^YeK~7|*_em+nEsnY zon(AnDMnG}_h!nAyP&sAo9gR-h~sPQ#n}eD$yOS_oRHT;BRc6U?CIMm8rRS-b(cBX zmQYvA>3|Gt#M_yBf0sGtJTLuK{@hb%MSLT3rZ{Qv{ZhZgoQZjREp4L&`tjjxNj?pD$eWIjpMyW8Ny4x_;$5X0 zj`PCY$uvH#5PHOCg!OV^{ZRT|2PK@Fu{_D@+sI>XAiI){K9O5sKbwMeQ_;}fmobV@ z6<(|d&f#}#8{x3?`ssJ77x`Kjj;)&k_jalJ-gVefj7fEtfS0vg#ZI z$d6B-1|h%Y4;_ocm}}fz$~cO=o!`yh`d~aXR-#x9+(psJ?(V3swOqW+Ip|DX_b)~j zeYJ4!X@w5X3*Vw-0a=Djvbq&j{1Q66;@(uVL;V&UpSM1MJ?&K4oxg<6Y2gC%xHn24 zcJ4^VTu-p~VIg?6otY_;N4}1`lkVa0ciDU#C<6W8g}t+iMBWj@O7$DSA#dmtMT7be zE1l2>%aER5F3U8MmY8!WGoT z{j==HO4uJbaD{A(b=tRi_D7-9(U>k4cbq%kOy21(*T|oStbLk_8fb#Q2?hMID;4Qt)cAXA- z+xmZZ_kcZ{*)RP-=wjBzTyBB6a+zGx2I?0%(_U~4x<#t-33H;qkKH+G)d{ruI%7aK@!~nTp}u7#-4N|A+my`W+s^c<;=A8?3H@xZ)!gU%r7C zO|iEZg8<$`j`F1K0A9z}q=h}eXTC4vhd%0A{o>Xq;#Pg|`?KlK~4YucZ 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 Z;1XC*e7{HQx&Kl^A3WtcN-99S{{!A@|4aY? literal 8128 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 literal 8128 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 TuB?l67bBrd=&^FE0r31kWQ!J8 diff --git a/fixture/zfpy/array.06.npy b/fixture/zfpy/array.06.npy index 76e40598f289ead603fc9fd7f53e0f4dec224c23..47235a0983088eb3832415cb20357b7b24b6c293 100644 GIT binary patch literal 4128 zcmbW#y^2&(5XAAjy1Kf4t@;9!U4;o|!AOkFR!j_xWN=3m#FZH_5y5xxg*`vmKit@X z=A6@AT~*z8{=Rv4@%H`E^mF<(U+xYc_w&ou{OZe#dA*uHUG0DDx8FWo?JsxoueVXm;=zcs5w}J>93gi);&{Z<5jRK3 z-5a3?Mvs_A;JUv!^*$M)@AmbH|HcS7T(n@k@zQeY!JEIk*Eu!1@xlu^p7^9o52o7D zxU2WZpMN-aUIZ*}a=6UKvo~HCe!TJV#3xR{gF64PYVNpjH)s2ivzJFBXwksot-oE^ z5ng!OJmPkyXGZ-nJbR1whLdi+YWU^h`RwiuOGB=GxbwwhyWve<4!1rt$@9XWpe3&k z8;?AXdBNqapN2iB-yZlfD{OQ2|Kg!NxaR?`@8-^jnQ`KyNiS_41@EwZPj5YN?F=7H zH9pKjOC6{G8H}1ctdQf+9Und1`UD;r!J{|4lc&B@{?aq|vZhCW`?pi`- znmomg!yN}KoE*>cuzJjgo5$vc)dMF_FC460;iAhMp7xEuUF6q^FTHkVZaKBS53Jd7 zyW=;598JCE_SPfhVCCTjzx{t;%mU|b*J{lt#|Is~W}t;n&AT1pXisUX$5}6aIT&~+ z4s$u}h=#lz{c?6L@~f_9PfonN(yA|CIN|DXnp2LJ&?~1#$6MVUU;4-64x>)j>6)8Ehlbx zntJi}-{p~(Hw>))=E$>oc;T zYB<#N*$=P0nU@YcU+qL)Pdsq=^~>SK&sX114yOpK&o1%d=9dpAO#7!T2ZzVoNl)Gk za?9`C4%Ovh(#LB~n)TtPnP2n8t-pOb&Bmu5oP5y3Da_^M5iVVP`sMjq1|RkX)3?A2 zeO9PBY_`qbFdUeDTLyfg9HDc%mz3CV4&l z%Gn_v74{ta0`AOGXk233K}Hbl~yv z!8e`0X&NxN>=RG_F?GQ=|7v*gH#$k7oygOO^So~aF><%CHtLMwri_gzi>*ea><^KDA`}O_h{$eNpa{J}5 z8~MYh?YG@{KRMrQ*30wF)AjP#^8bEkr;Ek!M=@KOFvRBb<3~ zrw@Z49v|NP@LJ#%@bu`y>J@o`SBu}jf<6v@yam7JvQu-=@pc!u=DW9`58IoT z93K7ckzW|OeCCM{cyB)V6!c~u+&JLFHoHCIHH$kQ0qd<-*h~ER)^upl4&kKL<^vm0k+&nKVZu^lp zlU>)Nzgg+4=4rz7y`*C)@9JDj_kdwp_trH`gOUOo2D zGakO&<(+1g(`!!s@I2s<6EHMzs=3RhVQ)C`sq^41a5sxS^V8PTe>p$H1PQz&E>@3{|i^z_+izWOHIUO|9#iKGb~>7 zs?#@r{|_^YF!DH^=4nsr&Bp`H`d|gE{JEQ-AE$3kd)|ea@WX_2np?l{y>XhyUGO2y zgBy>)&r`nC_@s@)TsUFnc}|Ou@baf4^wCrErbm}YeBN=Z^T-1oI664t&D|V&c*HBG zuHPGndi%_;{`|C;cGJ%2;hFX1^6xI1&kp$Gg=h10<_nj8-(R#NbE@f0m$rR6&EM|% z#erL0&6|H-%;w&ImJj@}^xA8^@G#zZ@Cmx@-mdb~-2B$(Zblq}-aH2lT(r&Tglp$= zwDsr}%?D>!^l8jq^m&_0op1L%sP*5Z$%h>kdBm$v9o{@V^oDDvYQ6z~dh9^ZH-mmY z=+SBB?s#y+$T|Bz@NFi3@burLMHiL^T$;FGdF6Ay(`rXfSXwx6(!r_LTy`e^uW$Tj zgwrcv<;~%an+KS*`gVGGRugt7=<{h-n09Lpy}j|N(}LH>r(L+uv-8G(Ug*LIc>4Hp z@nC*EG@Raa>BHL>tQ<}_{Ow8(hCdp1fr^Jv93Nz?ub~2R*(QE^l|eH1dz5es}$0aqE%i z1rJ>_sL>HPaR~E@c~*Bgx_O{sUMDVRyQN1<4}2$n{^Ii;%$WcD(T6jmoxnNi`~{B& BGhP4y diff --git a/fixture/zfpy/array.07.npy b/fixture/zfpy/array.07.npy index 6895a35cca1e1ede377587c9d36e61c5afe407db..3d99a6c8ee2df75e41f7e1563461d957e4045d24 100644 GIT binary patch literal 8128 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 O&ErdtbGZ8W1MeFZ+BJ3n diff --git a/fixture/zfpy/codec.00/encoded.02.dat b/fixture/zfpy/codec.00/encoded.02.dat index bd7632f8f26be46d70fb326931a598eb82498034..8a75035e2632789b736cdde683c354cadc7be6d2 100644 GIT binary patch literal 6936 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 literal 6944 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 diff --git a/fixture/zfpy/codec.00/encoded.03.dat b/fixture/zfpy/codec.00/encoded.03.dat index 55c7772328a1a1f75e4387dfe79e2c0ac54e5ae3..6d02317a1749e17f3f7aac9f59bd90b6e887c40c 100644 GIT binary patch literal 6944 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 literal 6936 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 do1QV3NK{RL;rmz)FT`U6Y~-^n!4Ki2 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 diff --git a/fixture/zfpy/codec.00/encoded.05.dat b/fixture/zfpy/codec.00/encoded.05.dat index 095e4afe4819603aa1b28a92025bda2d72f3f1a5..ce50cc23a1226dbcf09e7a45597137ebc86dffea 100644 GIT binary patch literal 6936 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 literal 6936 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 BzOVoQ diff --git a/fixture/zfpy/codec.00/encoded.06.dat b/fixture/zfpy/codec.00/encoded.06.dat index 01e86c7956494666d3f707cc064d53d62822a3ae..0867acf3632f1c1a01699c5a627570a953d3c7b2 100644 GIT binary patch literal 2568 zcmX|DZA?>V6uvs9jYGW=HklfF1)?q!(`94)kkA`OTt%56BAYl5NPkVzR!U_JUQom&N=UM-g9n` z?$y1j3+4X*%htR9ahhPeYmOV*d>1}h>_)tyTRHWL8%oimKz#X{0X5^4Jl`oZq|1#R zneT?Cbj|B98k!alu|Q&5Ks}76V{Kpur1sA+HgE5P&F7gDC}ASj#ZvR1>-%BcAK0a2 zl(3`5Ooq(m<17ic%y*hG#Olja?3`py-8RFnB`7LhvJ!=4zg>DaSuzLK-$cZ|MH`rr zQ>1Q$6he@P6P$E^CETh=3sAFa804+?KVj39op-W?in#I?xUF&`+?Mb2Tr8rb%CW)i zIrb1}sPC4{u4QNneGc(7<`5S%MwKt^1^eoX8Fa>xMxCkovPJDaD7JkYIZ13@fXs%2 zB7&O^`|DZ6#&bX0Az#+-BS5xo@HXGEE7`ekl89kBd1Zjrz)j?!E^S0EA{!3+Pa}#W zvQ*8;Pt%VhjCJ`i^c-yM)HAPk-4c+a)J7TC6GA3H8OVx(+mz@BO7^lxG85TyIYSGh z#@Rs1uWyhUThg7K52H3$KZwfsRv8Z^ySopz=$s@qtEVKM6nQXALZ~v9B8z2J{S<0^ z(KybsaFrpDPMmzB44Qbs0w_=I)ifXGhD+3S+_eC7_Rc>JUeB zrUb*Im>cI*GImQfMXWh_m&l(z2I_23L2qGmBks!Wea8XG_SB$nwnYnPpia_i7sx)N ztw84!$Dr86;ZdA(6y2e8zV|6zZ4(9beSv^t+o5h5LbR_1(kUNKpoYq%Vx`+HB!4xc zX9vHi{SEtzyB`iD@!`}B>+)b6v@8gCg34k7VN-b@0n*mIO%w6vI_wZr=34`}!Pur# z6lTNONrZX#2wnBAKS^?{z^-P6l?>I%xXX@XKnab1SHL}ZEFEbSachT^?4wy1Rri^Zpl0ygDH|m_dsRou2E)5wBfWmjje0ZBC#Nh zs!8dF$XuA$G;5nM=zUJl$juqEqvO1%X10>9JP08?q8F;UmWMHsv;&yW>qgHhd>Mm2 zMLbnm2#{v|ZZQ7)jM3;@_r;L=%oe)ny!+3U?#x1R{9+oSIx7uP%Pe~!|27IUhSoy| z-gWO6HLJTfVm`gl{vhl$&R$B>U+6&pqCz`2p$hIJ`t-MMdBTd|PEBJyiR~%WDt;gJ z{;!Tn%tP315Vp?w0O2e{Hz2l<98m?M*0mZ{8(vF%hTdz9u-SHH(9etS{=kx#Dobgs zw5kB8czyp39K4<>V*5%dt(olZZ9f&M8LHj?BP!(I*VC_}go{f_nu|OJTHKcQ64hL= fKLFccu8~bh%Sp|e zl@%%c|92pF>YuRuY_pc6q~sW%|CA`bb8$pT%ELo;NPVH#=aa6~{S0=lcrU5MeeE97 z$vdTy*;7h+`zjBhL-yvuP`|Md($S7npc5PgljJO{-U%4#z$*_yr}uh@Bzm4~ASo&! z&gVBJDuRzcLV%;8PdLC$CqZ22aC#9<>z;csY}Q2qN1yo?Cs5MpLJX&GL6SP$P9To! z@54o%VTTlzQ0t)}R1r=WSVk+K5{sPm^JkNIPJ81yJqs;e6EIZ!J%iy;!93vDQrf-b zB0ZY)QL4tSAP<5Vd%p_Q>OB=Kt=XJQhC+#!gyO)xT5s>f{}+$$K&qHcRR5UQfs3RH9k4pNrpmI{T47s9eEdRQF*p{ zXqp6f@)%sw4BXS;8R)5OnF!+k<$l-;!yDaJL}n@}hm?O~7P6Ontb7DD86$YUvaJ+* zENX)Dp>$kc&X$?2w^*4FhP*^gDv$SIWdaXWdMppReSj}#c>$jR(=sRFNMhXlzY*_O zLm39DefyKM{E2i`bE$NnOp>9bew$B+UYCuM>uYsPXb!)xB%GMCJ|ITf(~-9#FMu!E zbEnHkhGNkiPEq66swHK9*+D?cJz;2_aBd8D;GAw4EDdcddDJ7S`;p9@0$gR;vgl73 zez2hjQn~pbCRyr6=Y-Jb&?PM`=2PtY6zNM7(L0bq_u{!c|0R=;!Ivju$)xr{55lqR z--Kf%)E?*0;Fm|PF?E>@)V9$R$h0tb4KM4mreR<=o?nN!i%JYsn}+Xudhlwj9wbSM zd*J7zXDRwHB)zE~k}+r%yBt&S!SJj{ab!zn4S(BSlcs-Z9O_n1AMXZbW%u8g@wE3)ZTCh z8B5(J3>au4kw)c1zzxA^a>J2OM3^EVK;=Vr6i`86VOe%>8M<-&Dz6w}eN3J^W=Pr(JoBgsg_^E)NpnZ%iCBk_ZbqCc9}w zb)XD@ICaN0ElnDTEOIkNOBx!b&1qnnSZ2uCjIAlo#f&SIB>~c?-a;zBInJ`0(NJp0>f#1ZWu`! zGwYin$264+0$BI2bW;JuwWB)~3MB5&fQTvX0Gi@T&2KL1B{BURl<~F^aF=|twhc&X zT8oXezrHF3XmdrelTg+-PzD!Oj?RZN>z840BpW{jKwOa)x5xiIbc^X1S@>a;^do@@r+veu0Y969L#*W|32q{Fg`?;b#V zZtEEUlEO;*wRDi-4I{8iSklHrfTVkM4v^$c289Bd^G2QEzqFocNaBw#QD~CPFK+@$ znmY;5-*7<@Xt(U@GJuZQHK0J*Nntf;D_a8o)Ka9rh+(|91@=*B7pyJi6pEsDjav&d!8t6ce)pf>%DDQ zphy*^J%DW<$%9Bxj2ZR>YdJdvK*yiEs!(Xts?B3GNlbf6LdR`Ab&0l<#i?CAS_(Cs z(1MTC9sVGbJY&VD%EITW?n)(?f?t!;PYJM))jsg1W_54}c<-Dap-Ojn86-)WmuCbr zh+G}&n5R2PYRKz_X`8D$Xc;>_gr6P3_y2(YjfZ~$2e8X&S25|_ZP*mjtWW|rk^9%6 zwxi6;yd)8(chteAPN&+@o`66j`nGCc)Oj$0aP0s`Gy6d)rx9VkWIZdhfc!in?vk6vm6-ZD+xRzWv2qPDehyqB&?w5B5>4I`k`tCe`8r}oJ&gw z(OhZ=pn8usu%A5Dgb#z2r9MF0x@S3*m1J#O3HB4O=Hg>5;H5br&^|T{BnPs+;XNU4 ImtJQ70;W+{`~Uy| literal 4592 zcmZWtZA?>V6n>p7bY`13{#ce6y?1I1)5$s|!sf8ok2s9NfHAC@#CAbemqOTwa|5MU zXb|UA<_Lo5M82|CT*zb!D9fcV`4GFVFlGd_Oc7CG6$%texy$@vavu2s<>Yyv^PKaZ zj~CLCQlI~9E&Kl~M|tw&={NJg1vC89-=2JkofrTRyEvpF7?IN+eMFB*Bl_LGK!RfS z^g9&9s!xxBCHCZp3O%JO$WdkylU%S_nN2KWj%pH!RQdNb1jAVKnQ`5IOu7ljC8{VNL;8i)R)jlIAWaXV^;UamCw<`i)IYbXzqwQXrH?hWf9@Cv5`v5fQiSg4=xYYrX;BNhd6Wp!SC3XYI zw)6qEMN;H_p2}?7Bci6lfN83U<<9X#F6{>%0MXX%%^FJG;2wl4kkad_Kx9qU9{?&2 z`*9x>vnuq#RUq%*;2Qyz`JZ5?nuFXBoK)h)mizTIcndnS_Bg1FSThJUAg-)?%#(N} zogofD+^N9#fJv%`+ZDB41C&TGEVWe!q}f^kdy81*K4k1Yd{ za*hF*xOpu;bZ0LGO_DEh2Dm3Z(ZD2GlCa=68v!G(yn-9<%HhAke^B#pleBZB^roYd&y59ID$QmaW0~5WG1f4=L0?mzjv`JpIO>CJM6c zwZdLxNk!N;&iDr4&b_z*msf75hEkvX_yw3YLeGxvKxDrD$`DV_g-krN1>XsSW5Q?} zSahA)khV;jxd3FoKGy->Vprk3&mY8xQD678mlm>M97ai8Kqx+g3g5>I@O*=NLaT`a zk+~@;(0|gWspm~JN$M3naIC6vE_NGNJFcO}`kpI9k=Nex@&qKMUI>IyE~eeZcWC>I zPT;QLeIUt|&;t!9-b{w;7L2oNN9jyr6Zh+YDfO5Yx4GrD5fjnPY7Xv)3U+d$kg5j|{(DI@+9xTF;4fk8C0jHwv$PR1*E55pH za~Mt&OENrzB*D{zv!iU&Y>?zy_)9yDM5?;ns-dx|cSb-0ShgQdIl^c_yMzL^Zpw z`|n`kQYwc`)S1l`0?!iGwQ52`K?XBEjK8zuFzs(_!_vN*aSvpNyxIga!2+$#>br5f z7~`=*&C1jOGRHvoiQb(hP!G(g(CDSAm;4ThwXetvOMz`zhLO3Npw;BKZCGk?nfUL6 zw({k8tU3USM!IzZh$OoU;!uV99)W88-VQfiWvXr`{%Ky8au%56pds+azPJF@Cu(Pn ifoyT{QiWDXaVM@ML)bGLVaryWz7?K+o)Xzk?fVb$Dry`6 diff --git a/fixture/zfpy/codec.01/encoded.02.dat b/fixture/zfpy/codec.01/encoded.02.dat index bd7632f8f26be46d70fb326931a598eb82498034..8a75035e2632789b736cdde683c354cadc7be6d2 100644 GIT binary patch literal 6936 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 literal 6944 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 diff --git a/fixture/zfpy/codec.01/encoded.03.dat b/fixture/zfpy/codec.01/encoded.03.dat index 55c7772328a1a1f75e4387dfe79e2c0ac54e5ae3..6d02317a1749e17f3f7aac9f59bd90b6e887c40c 100644 GIT binary patch literal 6944 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 literal 6936 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 do1QV3NK{RL;rmz)FT`U6Y~-^n!4Ki2 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 diff --git a/fixture/zfpy/codec.01/encoded.05.dat b/fixture/zfpy/codec.01/encoded.05.dat index 095e4afe4819603aa1b28a92025bda2d72f3f1a5..ce50cc23a1226dbcf09e7a45597137ebc86dffea 100644 GIT binary patch literal 6936 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 literal 6936 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 BzOVoQ diff --git a/fixture/zfpy/codec.01/encoded.06.dat b/fixture/zfpy/codec.01/encoded.06.dat index 01e86c7956494666d3f707cc064d53d62822a3ae..0867acf3632f1c1a01699c5a627570a953d3c7b2 100644 GIT binary patch literal 2568 zcmX|DZA?>V6uvs9jYGW=HklfF1)?q!(`94)kkA`OTt%56BAYl5NPkVzR!U_JUQom&N=UM-g9n` z?$y1j3+4X*%htR9ahhPeYmOV*d>1}h>_)tyTRHWL8%oimKz#X{0X5^4Jl`oZq|1#R zneT?Cbj|B98k!alu|Q&5Ks}76V{Kpur1sA+HgE5P&F7gDC}ASj#ZvR1>-%BcAK0a2 zl(3`5Ooq(m<17ic%y*hG#Olja?3`py-8RFnB`7LhvJ!=4zg>DaSuzLK-$cZ|MH`rr zQ>1Q$6he@P6P$E^CETh=3sAFa804+?KVj39op-W?in#I?xUF&`+?Mb2Tr8rb%CW)i zIrb1}sPC4{u4QNneGc(7<`5S%MwKt^1^eoX8Fa>xMxCkovPJDaD7JkYIZ13@fXs%2 zB7&O^`|DZ6#&bX0Az#+-BS5xo@HXGEE7`ekl89kBd1Zjrz)j?!E^S0EA{!3+Pa}#W zvQ*8;Pt%VhjCJ`i^c-yM)HAPk-4c+a)J7TC6GA3H8OVx(+mz@BO7^lxG85TyIYSGh z#@Rs1uWyhUThg7K52H3$KZwfsRv8Z^ySopz=$s@qtEVKM6nQXALZ~v9B8z2J{S<0^ z(KybsaFrpDPMmzB44Qbs0w_=I)ifXGhD+3S+_eC7_Rc>JUeB zrUb*Im>cI*GImQfMXWh_m&l(z2I_23L2qGmBks!Wea8XG_SB$nwnYnPpia_i7sx)N ztw84!$Dr86;ZdA(6y2e8zV|6zZ4(9beSv^t+o5h5LbR_1(kUNKpoYq%Vx`+HB!4xc zX9vHi{SEtzyB`iD@!`}B>+)b6v@8gCg34k7VN-b@0n*mIO%w6vI_wZr=34`}!Pur# z6lTNONrZX#2wnBAKS^?{z^-P6l?>I%xXX@XKnab1SHL}ZEFEbSachT^?4wy1Rri^Zpl0ygDH|m_dsRou2E)5wBfWmjje0ZBC#Nh zs!8dF$XuA$G;5nM=zUJl$juqEqvO1%X10>9JP08?q8F;UmWMHsv;&yW>qgHhd>Mm2 zMLbnm2#{v|ZZQ7)jM3;@_r;L=%oe)ny!+3U?#x1R{9+oSIx7uP%Pe~!|27IUhSoy| z-gWO6HLJTfVm`gl{vhl$&R$B>U+6&pqCz`2p$hIJ`t-MMdBTd|PEBJyiR~%WDt;gJ z{;!Tn%tP315Vp?w0O2e{Hz2l<98m?M*0mZ{8(vF%hTdz9u-SHH(9etS{=kx#Dobgs zw5kB8czyp39K4<>V*5%dt(olZZ9f&M8LHj?BP!(I*VC_}go{f_nu|OJTHKcQ64hL= fKLFccu8~bh%Sp|e zl@%%c|92pF>YuRuY_pc6q~sW%|CA`bb8$pT%ELo;NPVH#=aa6~{S0=lcrU5MeeE97 z$vdTy*;7h+`zjBhL-yvuP`|Md($S7npc5PgljJO{-U%4#z$*_yr}uh@Bzm4~ASo&! z&gVBJDuRzcLV%;8PdLC$CqZ22aC#9<>z;csY}Q2qN1yo?Cs5MpLJX&GL6SP$P9To! z@54o%VTTlzQ0t)}R1r=WSVk+K5{sPm^JkNIPJ81yJqs;e6EIZ!J%iy;!93vDQrf-b zB0ZY)QL4tSAP<5Vd%p_Q>OB=Kt=XJQhC+#!gyO)xT5s>f{}+$$K&qHcRR5UQfs3RH9k4pNrpmI{T47s9eEdRQF*p{ zXqp6f@)%sw4BXS;8R)5OnF!+k<$l-;!yDaJL}n@}hm?O~7P6Ontb7DD86$YUvaJ+* zENX)Dp>$kc&X$?2w^*4FhP*^gDv$SIWdaXWdMppReSj}#c>$jR(=sRFNMhXlzY*_O zLm39DefyKM{E2i`bE$NnOp>9bew$B+UYCuM>uYsPXb!)xB%GMCJ|ITf(~-9#FMu!E zbEnHkhGNkiPEq66swHK9*+D?cJz;2_aBd8D;GAw4EDdcddDJ7S`;p9@0$gR;vgl73 zez2hjQn~pbCRyr6=Y-Jb&?PM`=2PtY6zNM7(L0bq_u{!c|0R=;!Ivju$)xr{55lqR z--Kf%)E?*0;Fm|PF?E>@)V9$R$h0tb4KM4mreR<=o?nN!i%JYsn}+Xudhlwj9wbSM zd*J7zXDRwHB)zE~k}+r%yBt&S!SJj{ab!zn4S(BSlcs-Z9O_n1AMXZbW%u8g@wE3)ZTCh z8B5(J3>au4kw)c1zzxA^a>J2OM3^EVK;=Vr6i`86VOe%>8M<-&Dz6w}eN3J^W=Pr(JoBgsg_^E)NpnZ%iCBk_ZbqCc9}w zb)XD@ICaN0ElnDTEOIkNOBx!b&1qnnSZ2uCjIAlo#f&SIB>~c?-a;zBInJ`0(NJp0>f#1ZWu`! zGwYin$264+0$BI2bW;JuwWB)~3MB5&fQTvX0Gi@T&2KL1B{BURl<~F^aF=|twhc&X zT8oXezrHF3XmdrelTg+-PzD!Oj?RZN>z840BpW{jKwOa)x5xiIbc^X1S@>a;^do@@r+veu0Y969L#*W|32q{Fg`?;b#V zZtEEUlEO;*wRDi-4I{8iSklHrfTVkM4v^$c289Bd^G2QEzqFocNaBw#QD~CPFK+@$ znmY;5-*7<@Xt(U@GJuZQHK0J*Nntf;D_a8o)Ka9rh+(|91@=*B7pyJi6pEsDjav&d!8t6ce)pf>%DDQ zphy*^J%DW<$%9Bxj2ZR>YdJdvK*yiEs!(Xts?B3GNlbf6LdR`Ab&0l<#i?CAS_(Cs z(1MTC9sVGbJY&VD%EITW?n)(?f?t!;PYJM))jsg1W_54}c<-Dap-Ojn86-)WmuCbr zh+G}&n5R2PYRKz_X`8D$Xc;>_gr6P3_y2(YjfZ~$2e8X&S25|_ZP*mjtWW|rk^9%6 zwxi6;yd)8(chteAPN&+@o`66j`nGCc)Oj$0aP0s`Gy6d)rx9VkWIZdhfc!in?vk6vm6-ZD+xRzWv2qPDehyqB&?w5B5>4I`k`tCe`8r}oJ&gw z(OhZ=pn8usu%A5Dgb#z2r9MF0x@S3*m1J#O3HB4O=Hg>5;H5br&^|T{BnPs+;XNU4 ImtJQ70;W+{`~Uy| literal 4592 zcmZWtZA?>V6n>p7bY`13{#ce6y?1I1)5$s|!sf8ok2s9NfHAC@#CAbemqOTwa|5MU zXb|UA<_Lo5M82|CT*zb!D9fcV`4GFVFlGd_Oc7CG6$%texy$@vavu2s<>Yyv^PKaZ zj~CLCQlI~9E&Kl~M|tw&={NJg1vC89-=2JkofrTRyEvpF7?IN+eMFB*Bl_LGK!RfS z^g9&9s!xxBCHCZp3O%JO$WdkylU%S_nN2KWj%pH!RQdNb1jAVKnQ`5IOu7ljC8{VNL;8i)R)jlIAWaXV^;UamCw<`i)IYbXzqwQXrH?hWf9@Cv5`v5fQiSg4=xYYrX;BNhd6Wp!SC3XYI zw)6qEMN;H_p2}?7Bci6lfN83U<<9X#F6{>%0MXX%%^FJG;2wl4kkad_Kx9qU9{?&2 z`*9x>vnuq#RUq%*;2Qyz`JZ5?nuFXBoK)h)mizTIcndnS_Bg1FSThJUAg-)?%#(N} zogofD+^N9#fJv%`+ZDB41C&TGEVWe!q}f^kdy81*K4k1Yd{ za*hF*xOpu;bZ0LGO_DEh2Dm3Z(ZD2GlCa=68v!G(yn-9<%HhAke^B#pleBZB^roYd&y59ID$QmaW0~5WG1f4=L0?mzjv`JpIO>CJM6c zwZdLxNk!N;&iDr4&b_z*msf75hEkvX_yw3YLeGxvKxDrD$`DV_g-krN1>XsSW5Q?} zSahA)khV;jxd3FoKGy->Vprk3&mY8xQD678mlm>M97ai8Kqx+g3g5>I@O*=NLaT`a zk+~@;(0|gWspm~JN$M3naIC6vE_NGNJFcO}`kpI9k=Nex@&qKMUI>IyE~eeZcWC>I zPT;QLeIUt|&;t!9-b{w;7L2oNN9jyr6Zh+YDfO5Yx4GrD5fjnPY7Xv)3U+d$kg5j|{(DI@+9xTF;4fk8C0jHwv$PR1*E55pH za~Mt&OENrzB*D{zv!iU&Y>?zy_)9yDM5?;ns-dx|cSb-0ShgQdIl^c_yMzL^Zpw z`|n`kQYwc`)S1l`0?!iGwQ52`K?XBEjK8zuFzs(_!_vN*aSvpNyxIga!2+$#>br5f z7~`=*&C1jOGRHvoiQb(hP!G(g(CDSAm;4ThwXetvOMz`zhLO3Npw;BKZCGk?nfUL6 zw({k8tU3USM!IzZh$OoU;!uV99)W88-VQfiWvXr`{%Ky8au%56pds+azPJF@Cu(Pn ifoyT{QiWDXaVM@ML)bGLVaryWz7?K+o)Xzk?fVb$Dry`6 diff --git a/fixture/zfpy/codec.02/encoded.02.dat b/fixture/zfpy/codec.02/encoded.02.dat index bd7632f8f26be46d70fb326931a598eb82498034..8a75035e2632789b736cdde683c354cadc7be6d2 100644 GIT binary patch literal 6936 zcmXX~Wmr`079F~gMp8g(kVd4DQlz`PTN){q8jz5Zk{pm!V(9Mf97Gya5QdPH_I~Gh z&)@x=ch_3G0_{Dpyrm()_l|AqNr-Z@)B@Jc^6j~+U|HJ38Y-+`;6-wIWBm3@R>}K6Vl-y|F|>o?}|{qEF3YL zBC`bH+T%z(kVp2pc9Bw($MTT`agnQp1&%oZb`*U7Sox+PP=GZ#W2!)#RVZnle@;xw z7;rlRhq&Gt&t_`G`e$)?n{&3Vh+|XPDy&rnu+d{xqr;$}jRP9*ETmuk20C%WdN>jR zh|YK`n+C(bexg*A*^VW^JAMrzc*4u~;}0O4O~p|R@y>T#lNP6|#Z!AAhFxdr_#}JO z0No9vbk8f)*Tj05c-kjm=b)5?XOTpP&x0NOK^02>eFCx79 z&9xGUmps>LQ-s!!oWf%BgU8#`3B64b-A%|~L*PjT#S1BN{sP4W)!#R%mG8cGCjJ>u zD4ha5fTf8T!qZ+u?a#P&*{*BUkAt#tP0($O|NGBz5tDVW11pAKF8_)9nY%Re;QDKx zEIAc0KjCn86v5KH*fUQjZ*A&)LU!3!R7S!VQ$SyrX?r6ncP`saCCa{|{pj_iS;NSQ zzafZ|06rSp6luuB9}}-0QB<;eEU!+U+rxAqt-}gM)G0gCzf>AGx6`vbgI~(OYA;6X zCUc~dAqq3`AS+6l(rC>ikgvkyfckPwus70yDc3gdZ}WBPHEhCibcp7(a30emGt2r# zXo2qXp9d5M`~zZFCV{xtbGMNzDc2W;&53Bm04yu0o%K&{a;;_951Hb!`k5ckec6u* zS5KwTUCl?J zX&tZafDxOIS`IBy7biyE-$0o?VqgneN$OMogIMNyXMId?(jkTynv~5nUHxYJN&GEwq5VJa zTm&pgvWk7)T*t$q+cf+k)V&8?HP@iJxK!_}(sPwpb?22-twBfBVy-hxy18qBIy*j> z1m=QyCO55<)X7>YikIa-v7;%F?LeS=Dfes>Ul}n{RYs~hpZ`JOt>~IR<&Llb$z^XE zpxv_UP&rq7@L22cE+GD?VF@-z1Mna75V5wa|I>_Y9^Q-wf2t54q_ttwF$-7&Yz6xR z(?j_D5s=Aap9>w|%#7S^%8`HS?4?SV&5jy^pV0HOCLptPh?ry@E{Opym)fJPVIF(! zbnFW!tr@p;eXJ&@*zd?l1q*bWq7^ZpGJL`e!Mm=NdZim`ziyI&UBA{$!Zb*KT z8CGIu+icPnCHJZyjSK~%Z)0d?eWM@GvL!TR)ObRIL$7$m-v3|>1bdk;Cb@l0^YJ!; zXfHR1D_dOs#b)QOIe<)U-o(?q=X&CwYdUfUBrUmZly5y@G5y+rmEHFp*+~3aIj&7V z_Qw@Y-ykxJ2d~J}!TjW)2vr0W#Ksk~{qhN?g7y2DhL|QHGoU*3!OpDp9>ZE0l>vcY z&-ToFo+h$9@v;Kcp`VS)1U=)xTbN;0M8i_0qD-Bna3)Fl2in(~oesau(jWvwjPD17 z+*)K+QJpt z(J~A%_79CfK)2R3l9)ZgS&OsgO+AT=y>6bf^U9hxNwN? z{-u8<{|GPzpV_E-tNz-^9VxKgU~I7dUgX#F9O+e%2TdA51&_N-3#!!;>_c}e7(cV1 z{Q7cE0V~bGk z<-fK?`9V`|LODr3)uxFx^dNRxel$q6MoJ2Jk-a-lRg80JQf?$<0peNQ@!WB__v5AH z6QIYW9z(56zE=bWqs_|ZTIky+7{^y4a5Fjp2e9Pie;Qv-FK!a{n9Eqdpg1gl3biM+ z0EdH9$jOO)=kgRa$-1FR*b81`fn_=zPY^;3bkz=vqwi!njEmIdKA-uKVVB^KrT__W z%IlO{Uz6_;y*Ro`N~k!4@!7 zI5&N*&Qc|Pb0u9&@cT{f$jF>WWtl{>Hb9UM-6#3vQ*%Z7#f*C|^8WpG4S7|V z|I;V<}}fJlF~>OS_-XI{GG@1Z7V$Tz2ygYokU`G=g%n{)c{NUFb^pk-rP;GR5@`n5J zyE*IzAko1D?N9BH7!RU|&D#J=MoXS|kE6XT@l-E&Ht{1^I*H_zfo*l)8-NC*za` z)^RUM{gTm%w*$ge76=au01w0xp0Ax@dY@>;J~eHftq2e-{;*;At@cr9J=z@8>9rI5 zI&a}_Klc_+4YgfV3;)n0W`kEw1n+6jKy}sopJ6U-t@mcRzI2;#Nq(mD8gM{v(NoGN z53z@-0eQ3Dg{gGRSx*__`WJwguq)+$_@j@1e$9QZ{UE|RgsuA6In=J20?1DB%C%-B z+QIH=o)1@jE*0uHUsb?j*YF|mpW4z7Kiu|>Db^J`_|jg*(3y_hF#qPx2G|V7K1iE9 z+bXpcB}7s*84qx(Wjma`jROmQ@*BUukMDSjWL#zzmy)YfI?DdgLq9eAYq~*=E6<5u zliHA+4z&tx%E^~n1eAri0;bS5R36sy$WGBV6DqxP@xelkv`|_P5$yu0`$>NL)kJXy;%5(6%Z8X%Up$2>o`vC zT;VqLyxG*|A|Gc8i{lxf-egwR=?>@-n%~ei_o7rf3wvl*oY8FFoPiZzt~UL0Q&HN= z)uxS*WyD1-&5=;p<*O)2A1~2_tJIk7mMB_g)-Kx3< zc!w&%#zdQ(x@8SfUCuLjNw^)p&pvl&8?z{22+m7$HE%V;A(onn-|X&X(iD|y+(BuV@tUTj*07Cw^PWWN{SnLwDY_X7?g#^4R;f-us`A zfQ+QYJV~Ty-5OpUJmXEc!6gz}jC{AkJl+X9M`Fu{9*NLfb_^Z;!;u!5Lik%GZXXrfbUG`rb->=yl%wP6r? z2b;_)ML{&1Zk%g3HAhi%mo6S?6q}x8pBVJ#8iAk;JR zSuXM;1p<8j1VA~@#N>+6`lM9g=0M7Y$7IM(7L*^}JEvx99;I8~eHVjG>v3uZV0MIF z+}*_;>!#_bH-Jy@x;wYkEsV#wToC|fm+W)FJ%2~X%NR*|Z=8zAsYbQBDU0Z7bxiuYCJo@;9HN3m z3d7R-S+D&)Nc^#12xl6cMyLY>GD85hVYaZ7WfKS3K-*`H+zI)j-F;o%GqC#{%=~!x zGW~lG(W?iyvwo$U^v00)F!b<9_O zi_Dg&O&9fgm!wDgyW=ZdwKEDo|CN7z@VgdGq&~-h*?zHer;sgQ&rw z<92$xKGeeOC)rnJdl7^_P`iyo2^p`4Q=wr$$=FxCNKQ!@n36ry?U$08f8j(E4S%hI24O40{VYGSK-bKtke@S zdP-EAsegQtpXbi7_5pkn_h8m5i?-8RjA8n7qheI<-CB=K^{N*5B*{w3ROSG9BxFK*FZwp<3&q4^!MZ=U_f9bRDW7;Z05O@x;7jP!G+d)!;%lpB za88d$|8ZtXk+mR;I6*$pl>oUr~e81)jUgn4`EVJ-hU5t0^awMmp!h zX5t+_84m(YYmNz#7J;*xXwm%UtlG-vOyiId*U)Vg4wn2B2j!&b9pi!&T_AXOGZv_f(&gD8v%t zIeTly1O_uhiIkjd6FD)db2@m=bf*3%xhAIH5%ge`Evm38FWU;?-_)Hmid8aYO@FTt z%cvCaPU&fES9HOB`_uxWaszgB7K%T#KGY}%z{*`3`X`jpB^*r2L^T6z>I0cJutkp7hP+q-DBM(Vo5~*T{;MKk5=X@uq@JxgVqjU?1kMsJp+xaVN^x%AX42k<2o8( zU6JHvY2%nas~vZkofVg!%GhvNLW%rUC*U}gdg1-GKXW;Y^%-X2N-_hwY#=+6bQL%U zBb>Ka+D7k~<;lPReel4>$q=4^~TZ&ZMz7w7rd}92)EW?KwglZSNlZ^af;+ zf6HPX$)G!$!?m_*zYoq^8fT5b`0)S5na{N^R?Hs*9s0RrHm1?y)M3EXHxms+!E47K+t1GtJky4sS)O04sZQPIY4^3un7_ex*4ih{p)l{tY=It^h8Mr9XR2 zFxDMWu^puZrKV5bv*Akzl_ffx188t&@KYsss^zaI+-RiC{)zAQ_b=HLEg!fIp7p3q zZ1~VdSG_D~SXD26Nawj;%xru#0Q`r)(SmL1ms&f6mKu4&p%fH!FGY#)TLdpKguR#_ z#8nr)XqlFFXWOR>_*-%`rIM-~063neqG$V;MdS;~`+zDnhoyiWvWBce$pte&mT8B3 zh;TUe|21k#M?w8;Me8u?S9@;@nAYQc!&?OXOH^^W0@2`1Jl09{@`wk7_TPfW>%Gxq zk(f#whMYUEY3HrrWob2M1q&l%~4V z9r;dV{kxci1^O*^{Hgju4twt8=I9%r6FUfRG6R~H+EV+k6`fd&qYez`-*eX^#{2{7 zFqcJLaPz@TV;~W0L?!k3qdS6H;)slmm89j(INi>)FtP< literal 6944 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 diff --git a/fixture/zfpy/codec.02/encoded.03.dat b/fixture/zfpy/codec.02/encoded.03.dat index 55c7772328a1a1f75e4387dfe79e2c0ac54e5ae3..6d02317a1749e17f3f7aac9f59bd90b6e887c40c 100644 GIT binary patch literal 6944 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 literal 6936 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 do1QV3NK{RL;rmz)FT`U6Y~-^n!4Ki2 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 diff --git a/fixture/zfpy/codec.02/encoded.05.dat b/fixture/zfpy/codec.02/encoded.05.dat index 095e4afe4819603aa1b28a92025bda2d72f3f1a5..ce50cc23a1226dbcf09e7a45597137ebc86dffea 100644 GIT binary patch literal 6936 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 literal 6936 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 BzOVoQ diff --git a/fixture/zfpy/codec.02/encoded.06.dat b/fixture/zfpy/codec.02/encoded.06.dat index 01e86c7956494666d3f707cc064d53d62822a3ae..0867acf3632f1c1a01699c5a627570a953d3c7b2 100644 GIT binary patch literal 2568 zcmX|DZA?>V6uvs9jYGW=HklfF1)?q!(`94)kkA`OTt%56BAYl5NPkVzR!U_JUQom&N=UM-g9n` z?$y1j3+4X*%htR9ahhPeYmOV*d>1}h>_)tyTRHWL8%oimKz#X{0X5^4Jl`oZq|1#R zneT?Cbj|B98k!alu|Q&5Ks}76V{Kpur1sA+HgE5P&F7gDC}ASj#ZvR1>-%BcAK0a2 zl(3`5Ooq(m<17ic%y*hG#Olja?3`py-8RFnB`7LhvJ!=4zg>DaSuzLK-$cZ|MH`rr zQ>1Q$6he@P6P$E^CETh=3sAFa804+?KVj39op-W?in#I?xUF&`+?Mb2Tr8rb%CW)i zIrb1}sPC4{u4QNneGc(7<`5S%MwKt^1^eoX8Fa>xMxCkovPJDaD7JkYIZ13@fXs%2 zB7&O^`|DZ6#&bX0Az#+-BS5xo@HXGEE7`ekl89kBd1Zjrz)j?!E^S0EA{!3+Pa}#W zvQ*8;Pt%VhjCJ`i^c-yM)HAPk-4c+a)J7TC6GA3H8OVx(+mz@BO7^lxG85TyIYSGh z#@Rs1uWyhUThg7K52H3$KZwfsRv8Z^ySopz=$s@qtEVKM6nQXALZ~v9B8z2J{S<0^ z(KybsaFrpDPMmzB44Qbs0w_=I)ifXGhD+3S+_eC7_Rc>JUeB zrUb*Im>cI*GImQfMXWh_m&l(z2I_23L2qGmBks!Wea8XG_SB$nwnYnPpia_i7sx)N ztw84!$Dr86;ZdA(6y2e8zV|6zZ4(9beSv^t+o5h5LbR_1(kUNKpoYq%Vx`+HB!4xc zX9vHi{SEtzyB`iD@!`}B>+)b6v@8gCg34k7VN-b@0n*mIO%w6vI_wZr=34`}!Pur# z6lTNONrZX#2wnBAKS^?{z^-P6l?>I%xXX@XKnab1SHL}ZEFEbSachT^?4wy1Rri^Zpl0ygDH|m_dsRou2E)5wBfWmjje0ZBC#Nh zs!8dF$XuA$G;5nM=zUJl$juqEqvO1%X10>9JP08?q8F;UmWMHsv;&yW>qgHhd>Mm2 zMLbnm2#{v|ZZQ7)jM3;@_r;L=%oe)ny!+3U?#x1R{9+oSIx7uP%Pe~!|27IUhSoy| z-gWO6HLJTfVm`gl{vhl$&R$B>U+6&pqCz`2p$hIJ`t-MMdBTd|PEBJyiR~%WDt;gJ z{;!Tn%tP315Vp?w0O2e{Hz2l<98m?M*0mZ{8(vF%hTdz9u-SHH(9etS{=kx#Dobgs zw5kB8czyp39K4<>V*5%dt(olZZ9f&M8LHj?BP!(I*VC_}go{f_nu|OJTHKcQ64hL= fKLFccu8~bh%Sp|e zl@%%c|92pF>YuRuY_pc6q~sW%|CA`bb8$pT%ELo;NPVH#=aa6~{S0=lcrU5MeeE97 z$vdTy*;7h+`zjBhL-yvuP`|Md($S7npc5PgljJO{-U%4#z$*_yr}uh@Bzm4~ASo&! z&gVBJDuRzcLV%;8PdLC$CqZ22aC#9<>z;csY}Q2qN1yo?Cs5MpLJX&GL6SP$P9To! z@54o%VTTlzQ0t)}R1r=WSVk+K5{sPm^JkNIPJ81yJqs;e6EIZ!J%iy;!93vDQrf-b zB0ZY)QL4tSAP<5Vd%p_Q>OB=Kt=XJQhC+#!gyO)xT5s>f{}+$$K&qHcRR5UQfs3RH9k4pNrpmI{T47s9eEdRQF*p{ zXqp6f@)%sw4BXS;8R)5OnF!+k<$l-;!yDaJL}n@}hm?O~7P6Ontb7DD86$YUvaJ+* zENX)Dp>$kc&X$?2w^*4FhP*^gDv$SIWdaXWdMppReSj}#c>$jR(=sRFNMhXlzY*_O zLm39DefyKM{E2i`bE$NnOp>9bew$B+UYCuM>uYsPXb!)xB%GMCJ|ITf(~-9#FMu!E zbEnHkhGNkiPEq66swHK9*+D?cJz;2_aBd8D;GAw4EDdcddDJ7S`;p9@0$gR;vgl73 zez2hjQn~pbCRyr6=Y-Jb&?PM`=2PtY6zNM7(L0bq_u{!c|0R=;!Ivju$)xr{55lqR z--Kf%)E?*0;Fm|PF?E>@)V9$R$h0tb4KM4mreR<=o?nN!i%JYsn}+Xudhlwj9wbSM zd*J7zXDRwHB)zE~k}+r%yBt&S!SJj{ab!zn4S(BSlcs-Z9O_n1AMXZbW%u8g@wE3)ZTCh z8B5(J3>au4kw)c1zzxA^a>J2OM3^EVK;=Vr6i`86VOe%>8M<-&Dz6w}eN3J^W=Pr(JoBgsg_^E)NpnZ%iCBk_ZbqCc9}w zb)XD@ICaN0ElnDTEOIkNOBx!b&1qnnSZ2uCjIAlo#f&SIB>~c?-a;zBInJ`0(NJp0>f#1ZWu`! zGwYin$264+0$BI2bW;JuwWB)~3MB5&fQTvX0Gi@T&2KL1B{BURl<~F^aF=|twhc&X zT8oXezrHF3XmdrelTg+-PzD!Oj?RZN>z840BpW{jKwOa)x5xiIbc^X1S@>a;^do@@r+veu0Y969L#*W|32q{Fg`?;b#V zZtEEUlEO;*wRDi-4I{8iSklHrfTVkM4v^$c289Bd^G2QEzqFocNaBw#QD~CPFK+@$ znmY;5-*7<@Xt(U@GJuZQHK0J*Nntf;D_a8o)Ka9rh+(|91@=*B7pyJi6pEsDjav&d!8t6ce)pf>%DDQ zphy*^J%DW<$%9Bxj2ZR>YdJdvK*yiEs!(Xts?B3GNlbf6LdR`Ab&0l<#i?CAS_(Cs z(1MTC9sVGbJY&VD%EITW?n)(?f?t!;PYJM))jsg1W_54}c<-Dap-Ojn86-)WmuCbr zh+G}&n5R2PYRKz_X`8D$Xc;>_gr6P3_y2(YjfZ~$2e8X&S25|_ZP*mjtWW|rk^9%6 zwxi6;yd)8(chteAPN&+@o`66j`nGCc)Oj$0aP0s`Gy6d)rx9VkWIZdhfc!in?vk6vm6-ZD+xRzWv2qPDehyqB&?w5B5>4I`k`tCe`8r}oJ&gw z(OhZ=pn8usu%A5Dgb#z2r9MF0x@S3*m1J#O3HB4O=Hg>5;H5br&^|T{BnPs+;XNU4 ImtJQ70;W+{`~Uy| literal 4592 zcmZWtZA?>V6n>p7bY`13{#ce6y?1I1)5$s|!sf8ok2s9NfHAC@#CAbemqOTwa|5MU zXb|UA<_Lo5M82|CT*zb!D9fcV`4GFVFlGd_Oc7CG6$%texy$@vavu2s<>Yyv^PKaZ zj~CLCQlI~9E&Kl~M|tw&={NJg1vC89-=2JkofrTRyEvpF7?IN+eMFB*Bl_LGK!RfS z^g9&9s!xxBCHCZp3O%JO$WdkylU%S_nN2KWj%pH!RQdNb1jAVKnQ`5IOu7ljC8{VNL;8i)R)jlIAWaXV^;UamCw<`i)IYbXzqwQXrH?hWf9@Cv5`v5fQiSg4=xYYrX;BNhd6Wp!SC3XYI zw)6qEMN;H_p2}?7Bci6lfN83U<<9X#F6{>%0MXX%%^FJG;2wl4kkad_Kx9qU9{?&2 z`*9x>vnuq#RUq%*;2Qyz`JZ5?nuFXBoK)h)mizTIcndnS_Bg1FSThJUAg-)?%#(N} zogofD+^N9#fJv%`+ZDB41C&TGEVWe!q}f^kdy81*K4k1Yd{ za*hF*xOpu;bZ0LGO_DEh2Dm3Z(ZD2GlCa=68v!G(yn-9<%HhAke^B#pleBZB^roYd&y59ID$QmaW0~5WG1f4=L0?mzjv`JpIO>CJM6c zwZdLxNk!N;&iDr4&b_z*msf75hEkvX_yw3YLeGxvKxDrD$`DV_g-krN1>XsSW5Q?} zSahA)khV;jxd3FoKGy->Vprk3&mY8xQD678mlm>M97ai8Kqx+g3g5>I@O*=NLaT`a zk+~@;(0|gWspm~JN$M3naIC6vE_NGNJFcO}`kpI9k=Nex@&qKMUI>IyE~eeZcWC>I zPT;QLeIUt|&;t!9-b{w;7L2oNN9jyr6Zh+YDfO5Yx4GrD5fjnPY7Xv)3U+d$kg5j|{(DI@+9xTF;4fk8C0jHwv$PR1*E55pH za~Mt&OENrzB*D{zv!iU&Y>?zy_)9yDM5?;ns-dx|cSb-0ShgQdIl^c_yMzL^Zpw z`|n`kQYwc`)S1l`0?!iGwQ52`K?XBEjK8zuFzs(_!_vN*aSvpNyxIga!2+$#>br5f z7~`=*&C1jOGRHvoiQb(hP!G(g(CDSAm;4ThwXetvOMz`zhLO3Npw;BKZCGk?nfUL6 zw({k8tU3USM!IzZh$OoU;!uV99)W88-VQfiWvXr`{%Ky8au%56pds+azPJF@Cu(Pn ifoyT{QiWDXaVM@ML)bGLVaryWz7?K+o)Xzk?fVb$Dry`6 diff --git a/fixture/zfpy/codec.03/encoded.02.dat b/fixture/zfpy/codec.03/encoded.02.dat index bd7632f8f26be46d70fb326931a598eb82498034..8a75035e2632789b736cdde683c354cadc7be6d2 100644 GIT binary patch literal 6936 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 literal 6944 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 diff --git a/fixture/zfpy/codec.03/encoded.03.dat b/fixture/zfpy/codec.03/encoded.03.dat index 55c7772328a1a1f75e4387dfe79e2c0ac54e5ae3..6d02317a1749e17f3f7aac9f59bd90b6e887c40c 100644 GIT binary patch literal 6944 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 literal 6936 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 do1QV3NK{RL;rmz)FT`U6Y~-^n!4Ki2 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 diff --git a/fixture/zfpy/codec.03/encoded.05.dat b/fixture/zfpy/codec.03/encoded.05.dat index 095e4afe4819603aa1b28a92025bda2d72f3f1a5..ce50cc23a1226dbcf09e7a45597137ebc86dffea 100644 GIT binary patch literal 6936 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 literal 6936 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 BzOVoQ diff --git a/fixture/zfpy/codec.03/encoded.06.dat b/fixture/zfpy/codec.03/encoded.06.dat index 01e86c7956494666d3f707cc064d53d62822a3ae..0867acf3632f1c1a01699c5a627570a953d3c7b2 100644 GIT binary patch literal 2568 zcmX|DZA?>V6uvs9jYGW=HklfF1)?q!(`94)kkA`OTt%56BAYl5NPkVzR!U_JUQom&N=UM-g9n` z?$y1j3+4X*%htR9ahhPeYmOV*d>1}h>_)tyTRHWL8%oimKz#X{0X5^4Jl`oZq|1#R zneT?Cbj|B98k!alu|Q&5Ks}76V{Kpur1sA+HgE5P&F7gDC}ASj#ZvR1>-%BcAK0a2 zl(3`5Ooq(m<17ic%y*hG#Olja?3`py-8RFnB`7LhvJ!=4zg>DaSuzLK-$cZ|MH`rr zQ>1Q$6he@P6P$E^CETh=3sAFa804+?KVj39op-W?in#I?xUF&`+?Mb2Tr8rb%CW)i zIrb1}sPC4{u4QNneGc(7<`5S%MwKt^1^eoX8Fa>xMxCkovPJDaD7JkYIZ13@fXs%2 zB7&O^`|DZ6#&bX0Az#+-BS5xo@HXGEE7`ekl89kBd1Zjrz)j?!E^S0EA{!3+Pa}#W zvQ*8;Pt%VhjCJ`i^c-yM)HAPk-4c+a)J7TC6GA3H8OVx(+mz@BO7^lxG85TyIYSGh z#@Rs1uWyhUThg7K52H3$KZwfsRv8Z^ySopz=$s@qtEVKM6nQXALZ~v9B8z2J{S<0^ z(KybsaFrpDPMmzB44Qbs0w_=I)ifXGhD+3S+_eC7_Rc>JUeB zrUb*Im>cI*GImQfMXWh_m&l(z2I_23L2qGmBks!Wea8XG_SB$nwnYnPpia_i7sx)N ztw84!$Dr86;ZdA(6y2e8zV|6zZ4(9beSv^t+o5h5LbR_1(kUNKpoYq%Vx`+HB!4xc zX9vHi{SEtzyB`iD@!`}B>+)b6v@8gCg34k7VN-b@0n*mIO%w6vI_wZr=34`}!Pur# z6lTNONrZX#2wnBAKS^?{z^-P6l?>I%xXX@XKnab1SHL}ZEFEbSachT^?4wy1Rri^Zpl0ygDH|m_dsRou2E)5wBfWmjje0ZBC#Nh zs!8dF$XuA$G;5nM=zUJl$juqEqvO1%X10>9JP08?q8F;UmWMHsv;&yW>qgHhd>Mm2 zMLbnm2#{v|ZZQ7)jM3;@_r;L=%oe)ny!+3U?#x1R{9+oSIx7uP%Pe~!|27IUhSoy| z-gWO6HLJTfVm`gl{vhl$&R$B>U+6&pqCz`2p$hIJ`t-MMdBTd|PEBJyiR~%WDt;gJ z{;!Tn%tP315Vp?w0O2e{Hz2l<98m?M*0mZ{8(vF%hTdz9u-SHH(9etS{=kx#Dobgs zw5kB8czyp39K4<>V*5%dt(olZZ9f&M8LHj?BP!(I*VC_}go{f_nu|OJTHKcQ64hL= fKLFccu8~bh%Sp|e zl@%%c|92pF>YuRuY_pc6q~sW%|CA`bb8$pT%ELo;NPVH#=aa6~{S0=lcrU5MeeE97 z$vdTy*;7h+`zjBhL-yvuP`|Md($S7npc5PgljJO{-U%4#z$*_yr}uh@Bzm4~ASo&! z&gVBJDuRzcLV%;8PdLC$CqZ22aC#9<>z;csY}Q2qN1yo?Cs5MpLJX&GL6SP$P9To! z@54o%VTTlzQ0t)}R1r=WSVk+K5{sPm^JkNIPJ81yJqs;e6EIZ!J%iy;!93vDQrf-b zB0ZY)QL4tSAP<5Vd%p_Q>OB=Kt=XJQhC+#!gyO)xT5s>f{}+$$K&qHcRR5UQfs3RH9k4pNrpmI{T47s9eEdRQF*p{ zXqp6f@)%sw4BXS;8R)5OnF!+k<$l-;!yDaJL}n@}hm?O~7P6Ontb7DD86$YUvaJ+* zENX)Dp>$kc&X$?2w^*4FhP*^gDv$SIWdaXWdMppReSj}#c>$jR(=sRFNMhXlzY*_O zLm39DefyKM{E2i`bE$NnOp>9bew$B+UYCuM>uYsPXb!)xB%GMCJ|ITf(~-9#FMu!E zbEnHkhGNkiPEq66swHK9*+D?cJz;2_aBd8D;GAw4EDdcddDJ7S`;p9@0$gR;vgl73 zez2hjQn~pbCRyr6=Y-Jb&?PM`=2PtY6zNM7(L0bq_u{!c|0R=;!Ivju$)xr{55lqR z--Kf%)E?*0;Fm|PF?E>@)V9$R$h0tb4KM4mreR<=o?nN!i%JYsn}+Xudhlwj9wbSM zd*J7zXDRwHB)zE~k}+r%yBt&S!SJj{ab!zn4S(BSlcs-Z9O_n1AMXZbW%u8g@wE3)ZTCh z8B5(J3>au4kw)c1zzxA^a>J2OM3^EVK;=Vr6i`86VOe%>8M<-&Dz6w}eN3J^W=Pr(JoBgsg_^E)NpnZ%iCBk_ZbqCc9}w zb)XD@ICaN0ElnDTEOIkNOBx!b&1qnnSZ2uCjIAlo#f&SIB>~c?-a;zBInJ`0(NJp0>f#1ZWu`! zGwYin$264+0$BI2bW;JuwWB)~3MB5&fQTvX0Gi@T&2KL1B{BURl<~F^aF=|twhc&X zT8oXezrHF3XmdrelTg+-PzD!Oj?RZN>z840BpW{jKwOa)x5xiIbc^X1S@>a;^do@@r+veu0Y969L#*W|32q{Fg`?;b#V zZtEEUlEO;*wRDi-4I{8iSklHrfTVkM4v^$c289Bd^G2QEzqFocNaBw#QD~CPFK+@$ znmY;5-*7<@Xt(U@GJuZQHK0J*Nntf;D_a8o)Ka9rh+(|91@=*B7pyJi6pEsDjav&d!8t6ce)pf>%DDQ zphy*^J%DW<$%9Bxj2ZR>YdJdvK*yiEs!(Xts?B3GNlbf6LdR`Ab&0l<#i?CAS_(Cs z(1MTC9sVGbJY&VD%EITW?n)(?f?t!;PYJM))jsg1W_54}c<-Dap-Ojn86-)WmuCbr zh+G}&n5R2PYRKz_X`8D$Xc;>_gr6P3_y2(YjfZ~$2e8X&S25|_ZP*mjtWW|rk^9%6 zwxi6;yd)8(chteAPN&+@o`66j`nGCc)Oj$0aP0s`Gy6d)rx9VkWIZdhfc!in?vk6vm6-ZD+xRzWv2qPDehyqB&?w5B5>4I`k`tCe`8r}oJ&gw z(OhZ=pn8usu%A5Dgb#z2r9MF0x@S3*m1J#O3HB4O=Hg>5;H5br&^|T{BnPs+;XNU4 ImtJQ70;W+{`~Uy| literal 4592 zcmZWtZA?>V6n>p7bY`13{#ce6y?1I1)5$s|!sf8ok2s9NfHAC@#CAbemqOTwa|5MU zXb|UA<_Lo5M82|CT*zb!D9fcV`4GFVFlGd_Oc7CG6$%texy$@vavu2s<>Yyv^PKaZ zj~CLCQlI~9E&Kl~M|tw&={NJg1vC89-=2JkofrTRyEvpF7?IN+eMFB*Bl_LGK!RfS z^g9&9s!xxBCHCZp3O%JO$WdkylU%S_nN2KWj%pH!RQdNb1jAVKnQ`5IOu7ljC8{VNL;8i)R)jlIAWaXV^;UamCw<`i)IYbXzqwQXrH?hWf9@Cv5`v5fQiSg4=xYYrX;BNhd6Wp!SC3XYI zw)6qEMN;H_p2}?7Bci6lfN83U<<9X#F6{>%0MXX%%^FJG;2wl4kkad_Kx9qU9{?&2 z`*9x>vnuq#RUq%*;2Qyz`JZ5?nuFXBoK)h)mizTIcndnS_Bg1FSThJUAg-)?%#(N} zogofD+^N9#fJv%`+ZDB41C&TGEVWe!q}f^kdy81*K4k1Yd{ za*hF*xOpu;bZ0LGO_DEh2Dm3Z(ZD2GlCa=68v!G(yn-9<%HhAke^B#pleBZB^roYd&y59ID$QmaW0~5WG1f4=L0?mzjv`JpIO>CJM6c zwZdLxNk!N;&iDr4&b_z*msf75hEkvX_yw3YLeGxvKxDrD$`DV_g-krN1>XsSW5Q?} zSahA)khV;jxd3FoKGy->Vprk3&mY8xQD678mlm>M97ai8Kqx+g3g5>I@O*=NLaT`a zk+~@;(0|gWspm~JN$M3naIC6vE_NGNJFcO}`kpI9k=Nex@&qKMUI>IyE~eeZcWC>I zPT;QLeIUt|&;t!9-b{w;7L2oNN9jyr6Zh+YDfO5Yx4GrD5fjnPY7Xv)3U+d$kg5j|{(DI@+9xTF;4fk8C0jHwv$PR1*E55pH za~Mt&OENrzB*D{zv!iU&Y>?zy_)9yDM5?;ns-dx|cSb-0ShgQdIl^c_yMzL^Zpw z`|n`kQYwc`)S1l`0?!iGwQ52`K?XBEjK8zuFzs(_!_vN*aSvpNyxIga!2+$#>br5f z7~`=*&C1jOGRHvoiQb(hP!G(g(CDSAm;4ThwXetvOMz`zhLO3Npw;BKZCGk?nfUL6 zw({k8tU3USM!IzZh$OoU;!uV99)W88-VQfiWvXr`{%Ky8au%56pds+azPJF@Cu(Pn ifoyT{QiWDXaVM@ML)bGLVaryWz7?K+o)Xzk?fVb$Dry`6 diff --git a/numcodecs/tests/test_zfpy.py b/numcodecs/tests/test_zfpy.py index 701eeeba..5def743c 100644 --- a/numcodecs/tests/test_zfpy.py +++ b/numcodecs/tests/test_zfpy.py @@ -56,9 +56,7 @@ def test_config(): def test_repr(): - check_repr("ZFPY(mode=4, tolerance=-1)") - check_repr("ZFPY(mode=3, precision=-1)") - check_repr("ZFPY(mode=2, rate=-1)") + check_repr("ZFPY(mode=4, tolerance=-1, rate=-1, precision=-1)") def test_backwards_compatibility(): diff --git a/numcodecs/zfpy.py b/numcodecs/zfpy.py index 34f5ef4e..dda33536 100644 --- a/numcodecs/zfpy.py +++ b/numcodecs/zfpy.py @@ -78,12 +78,7 @@ def decode(self, buf, out=None): return dec def __repr__(self): - if self.mode == _zfpy.mode_fixed_accuracy: - r = '%s(mode=%r, tolerance=%s)' % (type(self).__name__, self.mode, self.tolerance) - elif self.mode == _zfpy.mode_fixed_rate: - r = '%s(mode=%r, rate=%s)' % (type(self).__name__, self.mode, self.rate) - elif self.mode == _zfpy.mode_fixed_precision: - r = '%s(mode=%r, precision=%s)' % (type(self).__name__, self.mode, self.precision) - else: - pass + r = '%s(mode=%r, tolerance=%s, rate=%s, precision=%s)' % \ + (type(self).__name__, self.mode, self.tolerance, self.rate, + self.precision) return r From 80249e05d785dd4a70226cf6a6d34b8bd8a3a79f Mon Sep 17 00:00:00 2001 From: halehawk Date: Fri, 1 May 2020 10:56:45 -0600 Subject: [PATCH 47/69] change the zfpy repr test --- numcodecs/tests/test_zfpy.py | 2 +- numcodecs/zfpy.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/numcodecs/tests/test_zfpy.py b/numcodecs/tests/test_zfpy.py index 5def743c..7f142157 100644 --- a/numcodecs/tests/test_zfpy.py +++ b/numcodecs/tests/test_zfpy.py @@ -56,7 +56,7 @@ def test_config(): def test_repr(): - check_repr("ZFPY(mode=4, tolerance=-1, rate=-1, precision=-1)") + check_repr("ZFPY(mode=4, tolerance=0.001, rate=-1, precision=-1)") def test_backwards_compatibility(): diff --git a/numcodecs/zfpy.py b/numcodecs/zfpy.py index dda33536..35489728 100644 --- a/numcodecs/zfpy.py +++ b/numcodecs/zfpy.py @@ -79,6 +79,6 @@ def decode(self, buf, out=None): def __repr__(self): r = '%s(mode=%r, tolerance=%s, rate=%s, precision=%s)' % \ - (type(self).__name__, self.mode, self.tolerance, self.rate, + (type(self).__name__, self.mode, self.tolerance, self.rate, self.precision) return r From b2bbc4e775524f578ed61feb6297951d1527aef1 Mon Sep 17 00:00:00 2001 From: halehawk Date: Tue, 2 Jun 2020 11:33:40 -0600 Subject: [PATCH 48/69] use zfpy at PyPI --- requirements_dev.txt | 3 +-- requirements_rtfd.txt | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/requirements_dev.txt b/requirements_dev.txt index 181ab749..df549cf1 100644 --- a/requirements_dev.txt +++ b/requirements_dev.txt @@ -1,5 +1,4 @@ Cython==0.29.6 msgpack==0.6.1 numpy==1.16.2 ---extra-index-url https://test.pypi.org/simple/ -zfpy==0.5.5rc1 +zfpy==0.5.5 diff --git a/requirements_rtfd.txt b/requirements_rtfd.txt index 188d5823..8854bded 100644 --- a/requirements_rtfd.txt +++ b/requirements_rtfd.txt @@ -6,5 +6,4 @@ numpydoc mock numpy cython ---extra-index-url https://test.pypi.org/simple/ -zfpy==0.5.5rc1 +zfpy==0.5.5 From dea4fdfd0132c421eb4c71e37179c0d94b780145 Mon Sep 17 00:00:00 2001 From: halehawk Date: Tue, 2 Jun 2020 12:02:53 -0600 Subject: [PATCH 49/69] update zfpy in release.rst --- docs/release.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/release.rst b/docs/release.rst index 86735d83..35b27474 100644 --- a/docs/release.rst +++ b/docs/release.rst @@ -3,8 +3,8 @@ Release notes Upcoming Release ---------------- -* The :class:`numcodecs.zfpy.ZFPY` codec is now supported on Python 3.7 if - `zfpy==0.5.5rc1 `_ is installed +* The :class:`numcodecs.zfpy.ZFPY` codec is now supported on Python 3.8 if + `zfpy==0.5.5 `_ is installed * Remove LegacyJSON codec. By :user:`James Bourbeau `, :issue:`226`. From 0d5e32019ff75bc74dc76212d23285020858b99f Mon Sep 17 00:00:00 2001 From: halehawk Date: Wed, 9 Sep 2020 15:54:46 -0600 Subject: [PATCH 50/69] updating submodule to latest --- c-blosc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/c-blosc b/c-blosc index 0eb03dba..5352508a 160000 --- a/c-blosc +++ b/c-blosc @@ -1 +1 @@ -Subproject commit 0eb03dba6d89f626360268ad270e623a454bc76b +Subproject commit 5352508a420bec865c57cda116a5e5303df898d2 From 0eab0ffa4ee7bef21a2de35f7776aaca94e3ef77 Mon Sep 17 00:00:00 2001 From: halehawk Date: Wed, 9 Sep 2020 16:08:59 -0600 Subject: [PATCH 51/69] Revert "updating submodule to latest" This reverts commit 0d5e32019ff75bc74dc76212d23285020858b99f. --- c-blosc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/c-blosc b/c-blosc index 5352508a..0eb03dba 160000 --- a/c-blosc +++ b/c-blosc @@ -1 +1 @@ -Subproject commit 5352508a420bec865c57cda116a5e5303df898d2 +Subproject commit 0eb03dba6d89f626360268ad270e623a454bc76b From 2f4fe41ab90570966abd021918ebce4990f6132c Mon Sep 17 00:00:00 2001 From: halehawk Date: Wed, 9 Sep 2020 16:28:13 -0600 Subject: [PATCH 52/69] Revert "Revert "updating submodule to latest"" This reverts commit 0eab0ffa4ee7bef21a2de35f7776aaca94e3ef77. --- c-blosc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/c-blosc b/c-blosc index 0eb03dba..5352508a 160000 --- a/c-blosc +++ b/c-blosc @@ -1 +1 @@ -Subproject commit 0eb03dba6d89f626360268ad270e623a454bc76b +Subproject commit 5352508a420bec865c57cda116a5e5303df898d2 From 032b0dc585f4b5622e20adbdab9f339a3141b5c8 Mon Sep 17 00:00:00 2001 From: halehawk Date: Wed, 9 Sep 2020 16:28:42 -0600 Subject: [PATCH 53/69] Revert "Revert "Revert "updating submodule to latest""" This reverts commit 2f4fe41ab90570966abd021918ebce4990f6132c. --- c-blosc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/c-blosc b/c-blosc index 5352508a..0eb03dba 160000 --- a/c-blosc +++ b/c-blosc @@ -1 +1 @@ -Subproject commit 5352508a420bec865c57cda116a5e5303df898d2 +Subproject commit 0eb03dba6d89f626360268ad270e623a454bc76b From 0321bf177e20b26a3fe93a6b9684d20709ba6365 Mon Sep 17 00:00:00 2001 From: halehawk Date: Wed, 9 Sep 2020 16:39:51 -0600 Subject: [PATCH 54/69] update c-blosc to 1.18.1 --- c-blosc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/c-blosc b/c-blosc index 0eb03dba..9fae1c9a 160000 --- a/c-blosc +++ b/c-blosc @@ -1 +1 @@ -Subproject commit 0eb03dba6d89f626360268ad270e623a454bc76b +Subproject commit 9fae1c9acb659159321aca69aefcdbce663e2374 From 12108a002725227da427f9ef6091131b3bee251f Mon Sep 17 00:00:00 2001 From: haiying xu Date: Thu, 10 Sep 2020 20:45:27 -0600 Subject: [PATCH 55/69] Update release.rst --- docs/release.rst | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/docs/release.rst b/docs/release.rst index 38a68370..db2490c0 100644 --- a/docs/release.rst +++ b/docs/release.rst @@ -1,6 +1,12 @@ Release notes ============= +Upcoming Release +---------------- + +* The :class:`numcodecs.zfpy.ZFPY` codec is now supported on Python 3.8 if + `zfpy==0.5.5 `_ is installed + .. _release_0.7.1: 0.7.1 @@ -13,9 +19,7 @@ Release notes 0.7.0 ----- -* The :class:`numcodecs.zfpy.ZFPY` codec is now supported on Python 3.8 if - `zfpy==0.5.5 `_ is installed - + * Automatically release to PyPI. By :user:`Josh Moore `, :issue:`241`. From 2e6757f4f1f19517f59fcad3dc9dc89d7fdb5813 Mon Sep 17 00:00:00 2001 From: John Kirkham Date: Thu, 10 Sep 2020 20:12:57 -0700 Subject: [PATCH 56/69] Revert unrelated C file changes --- numcodecs/blosc.c | 467 +++++++++++++++++++++++----------------------- numcodecs/zstd.c | 230 +++++++++++------------ 2 files changed, 348 insertions(+), 349 deletions(-) diff --git a/numcodecs/blosc.c b/numcodecs/blosc.c index 52204c2c..c9e13dbe 100644 --- a/numcodecs/blosc.c +++ b/numcodecs/blosc.c @@ -310,7 +310,7 @@ END: Cython Metadata */ #undef BASE #undef MASK #ifdef SIZEOF_VOID_P - enum { __pyx_check_sizeof_voidp = 1/(SIZEOF_VOID_P == sizeof(void*)) }; + enum { __pyx_check_sizeof_voidp = 1 / (int)(SIZEOF_VOID_P == sizeof(void*)) }; #endif #endif #ifndef __has_attribute @@ -940,7 +940,7 @@ struct __pyx_defaults { /* "compat_ext.pxd":4 * * - * cdef class Buffer: + * cdef class Buffer: # <<<<<<<<<<<<<< * cdef: * char *ptr */ @@ -1888,7 +1888,7 @@ static PyObject *__pyx_codeobj__42; /* "numcodecs/blosc.pyx":87 * * - * def init(): + * def init(): # <<<<<<<<<<<<<< * """Initialize the Blosc library environment.""" * blosc_init() */ @@ -1916,7 +1916,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_init(CYTHON_UNUSED PyObject *__pyx_s /* "numcodecs/blosc.pyx":89 * def init(): * """Initialize the Blosc library environment.""" - * blosc_init() + * blosc_init() # <<<<<<<<<<<<<< * * */ @@ -1925,7 +1925,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_init(CYTHON_UNUSED PyObject *__pyx_s /* "numcodecs/blosc.pyx":87 * * - * def init(): + * def init(): # <<<<<<<<<<<<<< * """Initialize the Blosc library environment.""" * blosc_init() */ @@ -1940,7 +1940,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_init(CYTHON_UNUSED PyObject *__pyx_s /* "numcodecs/blosc.pyx":92 * * - * def destroy(): + * def destroy(): # <<<<<<<<<<<<<< * """Destroy the Blosc library environment.""" * blosc_destroy() */ @@ -1968,7 +1968,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_2destroy(CYTHON_UNUSED PyObject *__p /* "numcodecs/blosc.pyx":94 * def destroy(): * """Destroy the Blosc library environment.""" - * blosc_destroy() + * blosc_destroy() # <<<<<<<<<<<<<< * * */ @@ -1977,7 +1977,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_2destroy(CYTHON_UNUSED PyObject *__p /* "numcodecs/blosc.pyx":92 * * - * def destroy(): + * def destroy(): # <<<<<<<<<<<<<< * """Destroy the Blosc library environment.""" * blosc_destroy() */ @@ -1992,7 +1992,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_2destroy(CYTHON_UNUSED PyObject *__p /* "numcodecs/blosc.pyx":97 * * - * def compname_to_compcode(cname): + * def compname_to_compcode(cname): # <<<<<<<<<<<<<< * """Return the compressor code associated with the compressor name. If the compressor * name is not recognized, or there is not support for it in this build, -1 is returned */ @@ -2074,7 +2074,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_4compname_to_compcode(CYTHON_UNUSED /* "numcodecs/blosc.pyx":103 * if isinstance(cname, str): * cname = cname.encode('ascii') - * return blosc_compname_to_compcode(cname) + * return blosc_compname_to_compcode(cname) # <<<<<<<<<<<<<< * * */ @@ -2089,7 +2089,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_4compname_to_compcode(CYTHON_UNUSED /* "numcodecs/blosc.pyx":97 * * - * def compname_to_compcode(cname): + * def compname_to_compcode(cname): # <<<<<<<<<<<<<< * """Return the compressor code associated with the compressor name. If the compressor * name is not recognized, or there is not support for it in this build, -1 is returned */ @@ -2111,7 +2111,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_4compname_to_compcode(CYTHON_UNUSED /* "numcodecs/blosc.pyx":106 * * - * def list_compressors(): + * def list_compressors(): # <<<<<<<<<<<<<< * """Get a list of compressors supported in the current build.""" * s = blosc_list_compressors() */ @@ -2211,7 +2211,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_6list_compressors(CYTHON_UNUSED PyOb /* "numcodecs/blosc.pyx":106 * * - * def list_compressors(): + * def list_compressors(): # <<<<<<<<<<<<<< * """Get a list of compressors supported in the current build.""" * s = blosc_list_compressors() */ @@ -2233,7 +2233,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_6list_compressors(CYTHON_UNUSED PyOb /* "numcodecs/blosc.pyx":113 * * - * def get_nthreads(): + * def get_nthreads(): # <<<<<<<<<<<<<< * """Get the number of threads that Blosc uses internally for compression and * decompression.""" */ @@ -2262,7 +2262,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_8get_nthreads(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":116 * """Get the number of threads that Blosc uses internally for compression and * decompression.""" - * return blosc_get_nthreads() + * return blosc_get_nthreads() # <<<<<<<<<<<<<< * * */ @@ -2276,7 +2276,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_8get_nthreads(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":113 * * - * def get_nthreads(): + * def get_nthreads(): # <<<<<<<<<<<<<< * """Get the number of threads that Blosc uses internally for compression and * decompression.""" */ @@ -2295,7 +2295,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_8get_nthreads(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":119 * * - * def set_nthreads(int nthreads): + * def set_nthreads(int nthreads): # <<<<<<<<<<<<<< * """Set the number of threads that Blosc uses internally for compression and * decompression.""" */ @@ -2334,7 +2334,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_10set_nthreads(CYTHON_UNUSED PyObjec /* "numcodecs/blosc.pyx":122 * """Set the number of threads that Blosc uses internally for compression and * decompression.""" - * return blosc_set_nthreads(nthreads) + * return blosc_set_nthreads(nthreads) # <<<<<<<<<<<<<< * * */ @@ -2348,7 +2348,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_10set_nthreads(CYTHON_UNUSED PyObjec /* "numcodecs/blosc.pyx":119 * * - * def set_nthreads(int nthreads): + * def set_nthreads(int nthreads): # <<<<<<<<<<<<<< * """Set the number of threads that Blosc uses internally for compression and * decompression.""" */ @@ -2367,7 +2367,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_10set_nthreads(CYTHON_UNUSED PyObjec /* "numcodecs/blosc.pyx":125 * * - * def cbuffer_sizes(source): + * def cbuffer_sizes(source): # <<<<<<<<<<<<<< * """Return information about a compressed buffer, namely the number of uncompressed * bytes (`nbytes`) and compressed (`cbytes`). It also returns the `blocksize` (which */ @@ -2403,7 +2403,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_12cbuffer_sizes(CYTHON_UNUSED PyObje /* "numcodecs/blosc.pyx":142 * * # obtain buffer - * buffer = Buffer(source, PyBUF_ANY_CONTIGUOUS) + * buffer = Buffer(source, PyBUF_ANY_CONTIGUOUS) # <<<<<<<<<<<<<< * * # determine buffer size */ @@ -2426,7 +2426,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_12cbuffer_sizes(CYTHON_UNUSED PyObje /* "numcodecs/blosc.pyx":145 * * # determine buffer size - * blosc_cbuffer_sizes(buffer.ptr, &nbytes, &cbytes, &blocksize) + * blosc_cbuffer_sizes(buffer.ptr, &nbytes, &cbytes, &blocksize) # <<<<<<<<<<<<<< * * # release buffers */ @@ -2435,7 +2435,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_12cbuffer_sizes(CYTHON_UNUSED PyObje /* "numcodecs/blosc.pyx":148 * * # release buffers - * buffer.release() + * buffer.release() # <<<<<<<<<<<<<< * * return nbytes, cbytes, blocksize */ @@ -2446,7 +2446,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_12cbuffer_sizes(CYTHON_UNUSED PyObje /* "numcodecs/blosc.pyx":150 * buffer.release() * - * return nbytes, cbytes, blocksize + * return nbytes, cbytes, blocksize # <<<<<<<<<<<<<< * * */ @@ -2475,7 +2475,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_12cbuffer_sizes(CYTHON_UNUSED PyObje /* "numcodecs/blosc.pyx":125 * * - * def cbuffer_sizes(source): + * def cbuffer_sizes(source): # <<<<<<<<<<<<<< * """Return information about a compressed buffer, namely the number of uncompressed * bytes (`nbytes`) and compressed (`cbytes`). It also returns the `blocksize` (which */ @@ -2498,7 +2498,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_12cbuffer_sizes(CYTHON_UNUSED PyObje /* "numcodecs/blosc.pyx":153 * * - * def cbuffer_complib(source): + * def cbuffer_complib(source): # <<<<<<<<<<<<<< * """Return the name of the compression library used to compress `source`.""" * cdef: */ @@ -2531,7 +2531,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_14cbuffer_complib(CYTHON_UNUSED PyOb /* "numcodecs/blosc.pyx":159 * * # obtain buffer - * buffer = Buffer(source, PyBUF_ANY_CONTIGUOUS) + * buffer = Buffer(source, PyBUF_ANY_CONTIGUOUS) # <<<<<<<<<<<<<< * * # determine buffer size */ @@ -2554,7 +2554,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_14cbuffer_complib(CYTHON_UNUSED PyOb /* "numcodecs/blosc.pyx":162 * * # determine buffer size - * complib = blosc_cbuffer_complib(buffer.ptr) + * complib = blosc_cbuffer_complib(buffer.ptr) # <<<<<<<<<<<<<< * * # release buffers */ @@ -2566,7 +2566,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_14cbuffer_complib(CYTHON_UNUSED PyOb /* "numcodecs/blosc.pyx":165 * * # release buffers - * buffer.release() + * buffer.release() # <<<<<<<<<<<<<< * * complib = complib.decode('ascii') */ @@ -2604,7 +2604,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_14cbuffer_complib(CYTHON_UNUSED PyOb /* "numcodecs/blosc.pyx":169 * complib = complib.decode('ascii') * - * return complib + * return complib # <<<<<<<<<<<<<< * * */ @@ -2616,7 +2616,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_14cbuffer_complib(CYTHON_UNUSED PyOb /* "numcodecs/blosc.pyx":153 * * - * def cbuffer_complib(source): + * def cbuffer_complib(source): # <<<<<<<<<<<<<< * """Return the name of the compression library used to compress `source`.""" * cdef: */ @@ -2639,7 +2639,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_14cbuffer_complib(CYTHON_UNUSED PyOb /* "numcodecs/blosc.pyx":172 * * - * def cbuffer_metainfo(source): + * def cbuffer_metainfo(source): # <<<<<<<<<<<<<< * """Return some meta-information about the compressed buffer in `source`, including * the typesize, whether the shuffle or bit-shuffle filters were used, and the */ @@ -2676,7 +2676,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_16cbuffer_metainfo(CYTHON_UNUSED PyO /* "numcodecs/blosc.pyx":190 * * # obtain buffer - * buffer = Buffer(source, PyBUF_ANY_CONTIGUOUS) + * buffer = Buffer(source, PyBUF_ANY_CONTIGUOUS) # <<<<<<<<<<<<<< * * # determine buffer size */ @@ -2699,7 +2699,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_16cbuffer_metainfo(CYTHON_UNUSED PyO /* "numcodecs/blosc.pyx":193 * * # determine buffer size - * blosc_cbuffer_metainfo(buffer.ptr, &typesize, &flags) + * blosc_cbuffer_metainfo(buffer.ptr, &typesize, &flags) # <<<<<<<<<<<<<< * * # release buffers */ @@ -2708,7 +2708,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_16cbuffer_metainfo(CYTHON_UNUSED PyO /* "numcodecs/blosc.pyx":196 * * # release buffers - * buffer.release() + * buffer.release() # <<<<<<<<<<<<<< * * # decompose flags */ @@ -2719,7 +2719,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_16cbuffer_metainfo(CYTHON_UNUSED PyO /* "numcodecs/blosc.pyx":199 * * # decompose flags - * if flags & BLOSC_DOSHUFFLE: + * if flags & BLOSC_DOSHUFFLE: # <<<<<<<<<<<<<< * shuffle = SHUFFLE * elif flags & BLOSC_DOBITSHUFFLE: */ @@ -2729,7 +2729,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_16cbuffer_metainfo(CYTHON_UNUSED PyO /* "numcodecs/blosc.pyx":200 * # decompose flags * if flags & BLOSC_DOSHUFFLE: - * shuffle = SHUFFLE + * shuffle = SHUFFLE # <<<<<<<<<<<<<< * elif flags & BLOSC_DOBITSHUFFLE: * shuffle = BITSHUFFLE */ @@ -2741,7 +2741,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_16cbuffer_metainfo(CYTHON_UNUSED PyO /* "numcodecs/blosc.pyx":199 * * # decompose flags - * if flags & BLOSC_DOSHUFFLE: + * if flags & BLOSC_DOSHUFFLE: # <<<<<<<<<<<<<< * shuffle = SHUFFLE * elif flags & BLOSC_DOBITSHUFFLE: */ @@ -2751,7 +2751,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_16cbuffer_metainfo(CYTHON_UNUSED PyO /* "numcodecs/blosc.pyx":201 * if flags & BLOSC_DOSHUFFLE: * shuffle = SHUFFLE - * elif flags & BLOSC_DOBITSHUFFLE: + * elif flags & BLOSC_DOBITSHUFFLE: # <<<<<<<<<<<<<< * shuffle = BITSHUFFLE * else: */ @@ -2761,7 +2761,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_16cbuffer_metainfo(CYTHON_UNUSED PyO /* "numcodecs/blosc.pyx":202 * shuffle = SHUFFLE * elif flags & BLOSC_DOBITSHUFFLE: - * shuffle = BITSHUFFLE + * shuffle = BITSHUFFLE # <<<<<<<<<<<<<< * else: * shuffle = NOSHUFFLE */ @@ -2773,7 +2773,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_16cbuffer_metainfo(CYTHON_UNUSED PyO /* "numcodecs/blosc.pyx":201 * if flags & BLOSC_DOSHUFFLE: * shuffle = SHUFFLE - * elif flags & BLOSC_DOBITSHUFFLE: + * elif flags & BLOSC_DOBITSHUFFLE: # <<<<<<<<<<<<<< * shuffle = BITSHUFFLE * else: */ @@ -2783,7 +2783,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_16cbuffer_metainfo(CYTHON_UNUSED PyO /* "numcodecs/blosc.pyx":204 * shuffle = BITSHUFFLE * else: - * shuffle = NOSHUFFLE + * shuffle = NOSHUFFLE # <<<<<<<<<<<<<< * memcpyed = flags & BLOSC_MEMCPYED * */ @@ -2798,7 +2798,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_16cbuffer_metainfo(CYTHON_UNUSED PyO /* "numcodecs/blosc.pyx":205 * else: * shuffle = NOSHUFFLE - * memcpyed = flags & BLOSC_MEMCPYED + * memcpyed = flags & BLOSC_MEMCPYED # <<<<<<<<<<<<<< * * return typesize, shuffle, memcpyed */ @@ -2807,7 +2807,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_16cbuffer_metainfo(CYTHON_UNUSED PyO /* "numcodecs/blosc.pyx":207 * memcpyed = flags & BLOSC_MEMCPYED * - * return typesize, shuffle, memcpyed + * return typesize, shuffle, memcpyed # <<<<<<<<<<<<<< * * */ @@ -2834,7 +2834,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_16cbuffer_metainfo(CYTHON_UNUSED PyO /* "numcodecs/blosc.pyx":172 * * - * def cbuffer_metainfo(source): + * def cbuffer_metainfo(source): # <<<<<<<<<<<<<< * """Return some meta-information about the compressed buffer in `source`, including * the typesize, whether the shuffle or bit-shuffle filters were used, and the */ @@ -2857,7 +2857,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_16cbuffer_metainfo(CYTHON_UNUSED PyO /* "numcodecs/blosc.pyx":210 * * - * def err_bad_cname(cname): + * def err_bad_cname(cname): # <<<<<<<<<<<<<< * raise ValueError('bad compressor or compressor not supported: %r; expected one of ' * '%s' % (cname, list_compressors())) */ @@ -2951,7 +2951,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_18err_bad_cname(CYTHON_UNUSED PyObje /* "numcodecs/blosc.pyx":211 * * def err_bad_cname(cname): - * raise ValueError('bad compressor or compressor not supported: %r; expected one of ' + * raise ValueError('bad compressor or compressor not supported: %r; expected one of ' # <<<<<<<<<<<<<< * '%s' % (cname, list_compressors())) * */ @@ -2968,7 +2968,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_18err_bad_cname(CYTHON_UNUSED PyObje /* "numcodecs/blosc.pyx":210 * * - * def err_bad_cname(cname): + * def err_bad_cname(cname): # <<<<<<<<<<<<<< * raise ValueError('bad compressor or compressor not supported: %r; expected one of ' * '%s' % (cname, list_compressors())) */ @@ -2989,7 +2989,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_18err_bad_cname(CYTHON_UNUSED PyObje /* "numcodecs/blosc.pyx":215 * * - * def compress(source, char* cname, int clevel, int shuffle=SHUFFLE, + * def compress(source, char* cname, int clevel, int shuffle=SHUFFLE, # <<<<<<<<<<<<<< * int blocksize=AUTOBLOCKS): * """Compress data. */ @@ -3177,7 +3177,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":254 * cname_str = cname.decode('ascii') * if cname_str not in list_compressors(): - * err_bad_cname(cname_str) + * err_bad_cname(cname_str) # <<<<<<<<<<<<<< * * # setup source buffer */ @@ -3212,7 +3212,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":257 * * # setup source buffer - * source_buffer = Buffer(source, PyBUF_ANY_CONTIGUOUS) + * source_buffer = Buffer(source, PyBUF_ANY_CONTIGUOUS) # <<<<<<<<<<<<<< * source_ptr = source_buffer.ptr * nbytes = source_buffer.nbytes */ @@ -3235,7 +3235,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":258 * # setup source buffer * source_buffer = Buffer(source, PyBUF_ANY_CONTIGUOUS) - * source_ptr = source_buffer.ptr + * source_ptr = source_buffer.ptr # <<<<<<<<<<<<<< * nbytes = source_buffer.nbytes * itemsize = source_buffer.itemsize */ @@ -3245,7 +3245,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":259 * source_buffer = Buffer(source, PyBUF_ANY_CONTIGUOUS) * source_ptr = source_buffer.ptr - * nbytes = source_buffer.nbytes + * nbytes = source_buffer.nbytes # <<<<<<<<<<<<<< * itemsize = source_buffer.itemsize * */ @@ -3255,7 +3255,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":260 * source_ptr = source_buffer.ptr * nbytes = source_buffer.nbytes - * itemsize = source_buffer.itemsize + * itemsize = source_buffer.itemsize # <<<<<<<<<<<<<< * * # determine shuffle */ @@ -3265,7 +3265,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":263 * * # determine shuffle - * if shuffle == AUTOSHUFFLE: + * if shuffle == AUTOSHUFFLE: # <<<<<<<<<<<<<< * if itemsize == 1: * shuffle = BITSHUFFLE */ @@ -3283,7 +3283,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":264 * # determine shuffle * if shuffle == AUTOSHUFFLE: - * if itemsize == 1: + * if itemsize == 1: # <<<<<<<<<<<<<< * shuffle = BITSHUFFLE * else: */ @@ -3293,7 +3293,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":265 * if shuffle == AUTOSHUFFLE: * if itemsize == 1: - * shuffle = BITSHUFFLE + * shuffle = BITSHUFFLE # <<<<<<<<<<<<<< * else: * shuffle = SHUFFLE */ @@ -3306,7 +3306,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":264 * # determine shuffle * if shuffle == AUTOSHUFFLE: - * if itemsize == 1: + * if itemsize == 1: # <<<<<<<<<<<<<< * shuffle = BITSHUFFLE * else: */ @@ -3316,7 +3316,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":267 * shuffle = BITSHUFFLE * else: - * shuffle = SHUFFLE + * shuffle = SHUFFLE # <<<<<<<<<<<<<< * elif shuffle not in [NOSHUFFLE, SHUFFLE, BITSHUFFLE]: * raise ValueError('invalid shuffle argument; expected -1, 0, 1 or 2, found %r' % */ @@ -3332,7 +3332,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":263 * * # determine shuffle - * if shuffle == AUTOSHUFFLE: + * if shuffle == AUTOSHUFFLE: # <<<<<<<<<<<<<< * if itemsize == 1: * shuffle = BITSHUFFLE */ @@ -3342,7 +3342,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":268 * else: * shuffle = SHUFFLE - * elif shuffle not in [NOSHUFFLE, SHUFFLE, BITSHUFFLE]: + * elif shuffle not in [NOSHUFFLE, SHUFFLE, BITSHUFFLE]: # <<<<<<<<<<<<<< * raise ValueError('invalid shuffle argument; expected -1, 0, 1 or 2, found %r' % * shuffle) */ @@ -3392,7 +3392,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":270 * elif shuffle not in [NOSHUFFLE, SHUFFLE, BITSHUFFLE]: * raise ValueError('invalid shuffle argument; expected -1, 0, 1 or 2, found %r' % - * shuffle) + * shuffle) # <<<<<<<<<<<<<< * * try: */ @@ -3402,7 +3402,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":269 * shuffle = SHUFFLE * elif shuffle not in [NOSHUFFLE, SHUFFLE, BITSHUFFLE]: - * raise ValueError('invalid shuffle argument; expected -1, 0, 1 or 2, found %r' % + * raise ValueError('invalid shuffle argument; expected -1, 0, 1 or 2, found %r' % # <<<<<<<<<<<<<< * shuffle) * */ @@ -3419,7 +3419,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":268 * else: * shuffle = SHUFFLE - * elif shuffle not in [NOSHUFFLE, SHUFFLE, BITSHUFFLE]: + * elif shuffle not in [NOSHUFFLE, SHUFFLE, BITSHUFFLE]: # <<<<<<<<<<<<<< * raise ValueError('invalid shuffle argument; expected -1, 0, 1 or 2, found %r' % * shuffle) */ @@ -3429,7 +3429,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":272 * shuffle) * - * try: + * try: # <<<<<<<<<<<<<< * * # setup destination */ @@ -3438,7 +3438,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":275 * * # setup destination - * dest = PyBytes_FromStringAndSize(NULL, nbytes + BLOSC_MAX_OVERHEAD) + * dest = PyBytes_FromStringAndSize(NULL, nbytes + BLOSC_MAX_OVERHEAD) # <<<<<<<<<<<<<< * dest_ptr = PyBytes_AS_STRING(dest) * */ @@ -3450,7 +3450,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":276 * # setup destination * dest = PyBytes_FromStringAndSize(NULL, nbytes + BLOSC_MAX_OVERHEAD) - * dest_ptr = PyBytes_AS_STRING(dest) + * dest_ptr = PyBytes_AS_STRING(dest) # <<<<<<<<<<<<<< * * # perform compression */ @@ -3459,7 +3459,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":279 * * # perform compression - * if _get_use_threads(): + * if _get_use_threads(): # <<<<<<<<<<<<<< * # allow blosc to use threads internally * */ @@ -3487,7 +3487,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":285 * # to ensure no-one else can modify the global context while we're setting it * # up and using it. - * with mutex: + * with mutex: # <<<<<<<<<<<<<< * * # set compressor */ @@ -3528,7 +3528,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":288 * * # set compressor - * compressor_set = blosc_set_compressor(cname) + * compressor_set = blosc_set_compressor(cname) # <<<<<<<<<<<<<< * if compressor_set < 0: * # shouldn't happen if we checked against list of compressors */ @@ -3537,7 +3537,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":289 * # set compressor * compressor_set = blosc_set_compressor(cname) - * if compressor_set < 0: + * if compressor_set < 0: # <<<<<<<<<<<<<< * # shouldn't happen if we checked against list of compressors * # already, but just in case */ @@ -3547,7 +3547,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":292 * # shouldn't happen if we checked against list of compressors * # already, but just in case - * err_bad_cname(cname_str) + * err_bad_cname(cname_str) # <<<<<<<<<<<<<< * * # set blocksize */ @@ -3573,7 +3573,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":289 * # set compressor * compressor_set = blosc_set_compressor(cname) - * if compressor_set < 0: + * if compressor_set < 0: # <<<<<<<<<<<<<< * # shouldn't happen if we checked against list of compressors * # already, but just in case */ @@ -3582,7 +3582,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":295 * * # set blocksize - * blosc_set_blocksize(blocksize) + * blosc_set_blocksize(blocksize) # <<<<<<<<<<<<<< * * # perform compression */ @@ -3591,7 +3591,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":298 * * # perform compression - * with nogil: + * with nogil: # <<<<<<<<<<<<<< * cbytes = blosc_compress(clevel, shuffle, itemsize, nbytes, source_ptr, * dest_ptr, nbytes + BLOSC_MAX_OVERHEAD) */ @@ -3606,7 +3606,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":299 * # perform compression * with nogil: - * cbytes = blosc_compress(clevel, shuffle, itemsize, nbytes, source_ptr, + * cbytes = blosc_compress(clevel, shuffle, itemsize, nbytes, source_ptr, # <<<<<<<<<<<<<< * dest_ptr, nbytes + BLOSC_MAX_OVERHEAD) * */ @@ -3616,7 +3616,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":298 * * # perform compression - * with nogil: + * with nogil: # <<<<<<<<<<<<<< * cbytes = blosc_compress(clevel, shuffle, itemsize, nbytes, source_ptr, * dest_ptr, nbytes + BLOSC_MAX_OVERHEAD) */ @@ -3635,7 +3635,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":285 * # to ensure no-one else can modify the global context while we're setting it * # up and using it. - * with mutex: + * with mutex: # <<<<<<<<<<<<<< * * # set compressor */ @@ -3716,7 +3716,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":279 * * # perform compression - * if _get_use_threads(): + * if _get_use_threads(): # <<<<<<<<<<<<<< * # allow blosc to use threads internally * */ @@ -3726,7 +3726,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":303 * * else: - * with nogil: + * with nogil: # <<<<<<<<<<<<<< * cbytes = blosc_compress_ctx(clevel, shuffle, itemsize, nbytes, source_ptr, * dest_ptr, nbytes + BLOSC_MAX_OVERHEAD, */ @@ -3742,7 +3742,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":304 * else: * with nogil: - * cbytes = blosc_compress_ctx(clevel, shuffle, itemsize, nbytes, source_ptr, + * cbytes = blosc_compress_ctx(clevel, shuffle, itemsize, nbytes, source_ptr, # <<<<<<<<<<<<<< * dest_ptr, nbytes + BLOSC_MAX_OVERHEAD, * cname, blocksize, 1) */ @@ -3752,7 +3752,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":303 * * else: - * with nogil: + * with nogil: # <<<<<<<<<<<<<< * cbytes = blosc_compress_ctx(clevel, shuffle, itemsize, nbytes, source_ptr, * dest_ptr, nbytes + BLOSC_MAX_OVERHEAD, */ @@ -3774,7 +3774,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":311 * * # release buffers - * source_buffer.release() + * source_buffer.release() # <<<<<<<<<<<<<< * * # check compression was successful */ @@ -3840,7 +3840,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":314 * * # check compression was successful - * if cbytes <= 0: + * if cbytes <= 0: # <<<<<<<<<<<<<< * raise RuntimeError('error during blosc compression: %d' % cbytes) * */ @@ -3850,7 +3850,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":315 * # check compression was successful * if cbytes <= 0: - * raise RuntimeError('error during blosc compression: %d' % cbytes) + * raise RuntimeError('error during blosc compression: %d' % cbytes) # <<<<<<<<<<<<<< * * # resize after compression */ @@ -3869,7 +3869,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":314 * * # check compression was successful - * if cbytes <= 0: + * if cbytes <= 0: # <<<<<<<<<<<<<< * raise RuntimeError('error during blosc compression: %d' % cbytes) * */ @@ -3878,7 +3878,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":318 * * # resize after compression - * dest = dest[:cbytes] + * dest = dest[:cbytes] # <<<<<<<<<<<<<< * * return dest */ @@ -3894,7 +3894,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":320 * dest = dest[:cbytes] * - * return dest + * return dest # <<<<<<<<<<<<<< * * */ @@ -3906,7 +3906,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":215 * * - * def compress(source, char* cname, int clevel, int shuffle=SHUFFLE, + * def compress(source, char* cname, int clevel, int shuffle=SHUFFLE, # <<<<<<<<<<<<<< * int blocksize=AUTOBLOCKS): * """Compress data. */ @@ -3931,7 +3931,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_20compress(CYTHON_UNUSED PyObject *_ /* "numcodecs/blosc.pyx":323 * * - * def decompress(source, dest=None): + * def decompress(source, dest=None): # <<<<<<<<<<<<<< * """Decompress data. * */ @@ -4040,7 +4040,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_22decompress(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":345 * char *dest_ptr * Buffer source_buffer - * Buffer dest_buffer = None + * Buffer dest_buffer = None # <<<<<<<<<<<<<< * size_t nbytes, cbytes, blocksize * */ @@ -4050,7 +4050,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_22decompress(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":349 * * # setup source buffer - * source_buffer = Buffer(source, PyBUF_ANY_CONTIGUOUS) + * source_buffer = Buffer(source, PyBUF_ANY_CONTIGUOUS) # <<<<<<<<<<<<<< * source_ptr = source_buffer.ptr * */ @@ -4073,7 +4073,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_22decompress(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":350 * # setup source buffer * source_buffer = Buffer(source, PyBUF_ANY_CONTIGUOUS) - * source_ptr = source_buffer.ptr + * source_ptr = source_buffer.ptr # <<<<<<<<<<<<<< * * # determine buffer size */ @@ -4083,7 +4083,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_22decompress(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":353 * * # determine buffer size - * blosc_cbuffer_sizes(source_ptr, &nbytes, &cbytes, &blocksize) + * blosc_cbuffer_sizes(source_ptr, &nbytes, &cbytes, &blocksize) # <<<<<<<<<<<<<< * * # setup destination buffer */ @@ -4092,7 +4092,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_22decompress(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":356 * * # setup destination buffer - * if dest is None: + * if dest is None: # <<<<<<<<<<<<<< * # allocate memory * dest = PyBytes_FromStringAndSize(NULL, nbytes) */ @@ -4103,7 +4103,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_22decompress(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":358 * if dest is None: * # allocate memory - * dest = PyBytes_FromStringAndSize(NULL, nbytes) + * dest = PyBytes_FromStringAndSize(NULL, nbytes) # <<<<<<<<<<<<<< * dest_ptr = PyBytes_AS_STRING(dest) * dest_nbytes = nbytes */ @@ -4115,7 +4115,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_22decompress(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":359 * # allocate memory * dest = PyBytes_FromStringAndSize(NULL, nbytes) - * dest_ptr = PyBytes_AS_STRING(dest) + * dest_ptr = PyBytes_AS_STRING(dest) # <<<<<<<<<<<<<< * dest_nbytes = nbytes * else: */ @@ -4124,7 +4124,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_22decompress(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":360 * dest = PyBytes_FromStringAndSize(NULL, nbytes) * dest_ptr = PyBytes_AS_STRING(dest) - * dest_nbytes = nbytes + * dest_nbytes = nbytes # <<<<<<<<<<<<<< * else: * arr = ensure_contiguous_ndarray(dest) */ @@ -4133,7 +4133,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_22decompress(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":356 * * # setup destination buffer - * if dest is None: + * if dest is None: # <<<<<<<<<<<<<< * # allocate memory * dest = PyBytes_FromStringAndSize(NULL, nbytes) */ @@ -4143,7 +4143,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_22decompress(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":362 * dest_nbytes = nbytes * else: - * arr = ensure_contiguous_ndarray(dest) + * arr = ensure_contiguous_ndarray(dest) # <<<<<<<<<<<<<< * dest_buffer = Buffer(arr, PyBUF_ANY_CONTIGUOUS | PyBUF_WRITEABLE) * dest_ptr = dest_buffer.ptr */ @@ -4171,7 +4171,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_22decompress(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":363 * else: * arr = ensure_contiguous_ndarray(dest) - * dest_buffer = Buffer(arr, PyBUF_ANY_CONTIGUOUS | PyBUF_WRITEABLE) + * dest_buffer = Buffer(arr, PyBUF_ANY_CONTIGUOUS | PyBUF_WRITEABLE) # <<<<<<<<<<<<<< * dest_ptr = dest_buffer.ptr * dest_nbytes = dest_buffer.nbytes */ @@ -4194,7 +4194,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_22decompress(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":364 * arr = ensure_contiguous_ndarray(dest) * dest_buffer = Buffer(arr, PyBUF_ANY_CONTIGUOUS | PyBUF_WRITEABLE) - * dest_ptr = dest_buffer.ptr + * dest_ptr = dest_buffer.ptr # <<<<<<<<<<<<<< * dest_nbytes = dest_buffer.nbytes * */ @@ -4204,7 +4204,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_22decompress(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":365 * dest_buffer = Buffer(arr, PyBUF_ANY_CONTIGUOUS | PyBUF_WRITEABLE) * dest_ptr = dest_buffer.ptr - * dest_nbytes = dest_buffer.nbytes + * dest_nbytes = dest_buffer.nbytes # <<<<<<<<<<<<<< * * try: */ @@ -4216,7 +4216,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_22decompress(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":367 * dest_nbytes = dest_buffer.nbytes * - * try: + * try: # <<<<<<<<<<<<<< * * # guard condition */ @@ -4225,7 +4225,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_22decompress(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":370 * * # guard condition - * if dest_nbytes < nbytes: + * if dest_nbytes < nbytes: # <<<<<<<<<<<<<< * raise ValueError('destination buffer too small; expected at least %s, ' * 'got %s' % (nbytes, dest_nbytes)) */ @@ -4251,7 +4251,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_22decompress(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":372 * if dest_nbytes < nbytes: * raise ValueError('destination buffer too small; expected at least %s, ' - * 'got %s' % (nbytes, dest_nbytes)) + * 'got %s' % (nbytes, dest_nbytes)) # <<<<<<<<<<<<<< * * # perform decompression */ @@ -4275,7 +4275,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_22decompress(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":371 * # guard condition * if dest_nbytes < nbytes: - * raise ValueError('destination buffer too small; expected at least %s, ' + * raise ValueError('destination buffer too small; expected at least %s, ' # <<<<<<<<<<<<<< * 'got %s' % (nbytes, dest_nbytes)) * */ @@ -4292,7 +4292,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_22decompress(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":370 * * # guard condition - * if dest_nbytes < nbytes: + * if dest_nbytes < nbytes: # <<<<<<<<<<<<<< * raise ValueError('destination buffer too small; expected at least %s, ' * 'got %s' % (nbytes, dest_nbytes)) */ @@ -4301,7 +4301,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_22decompress(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":375 * * # perform decompression - * if _get_use_threads(): + * if _get_use_threads(): # <<<<<<<<<<<<<< * # allow blosc to use threads internally * with nogil: */ @@ -4329,7 +4329,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_22decompress(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":377 * if _get_use_threads(): * # allow blosc to use threads internally - * with nogil: + * with nogil: # <<<<<<<<<<<<<< * ret = blosc_decompress(source_ptr, dest_ptr, nbytes) * else: */ @@ -4344,7 +4344,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_22decompress(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":378 * # allow blosc to use threads internally * with nogil: - * ret = blosc_decompress(source_ptr, dest_ptr, nbytes) + * ret = blosc_decompress(source_ptr, dest_ptr, nbytes) # <<<<<<<<<<<<<< * else: * with nogil: */ @@ -4354,7 +4354,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_22decompress(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":377 * if _get_use_threads(): * # allow blosc to use threads internally - * with nogil: + * with nogil: # <<<<<<<<<<<<<< * ret = blosc_decompress(source_ptr, dest_ptr, nbytes) * else: */ @@ -4373,7 +4373,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_22decompress(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":375 * * # perform decompression - * if _get_use_threads(): + * if _get_use_threads(): # <<<<<<<<<<<<<< * # allow blosc to use threads internally * with nogil: */ @@ -4383,7 +4383,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_22decompress(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":380 * ret = blosc_decompress(source_ptr, dest_ptr, nbytes) * else: - * with nogil: + * with nogil: # <<<<<<<<<<<<<< * ret = blosc_decompress_ctx(source_ptr, dest_ptr, nbytes, 1) * */ @@ -4399,7 +4399,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_22decompress(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":381 * else: * with nogil: - * ret = blosc_decompress_ctx(source_ptr, dest_ptr, nbytes, 1) + * ret = blosc_decompress_ctx(source_ptr, dest_ptr, nbytes, 1) # <<<<<<<<<<<<<< * * finally: */ @@ -4409,7 +4409,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_22decompress(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":380 * ret = blosc_decompress(source_ptr, dest_ptr, nbytes) * else: - * with nogil: + * with nogil: # <<<<<<<<<<<<<< * ret = blosc_decompress_ctx(source_ptr, dest_ptr, nbytes, 1) * */ @@ -4431,7 +4431,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_22decompress(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":386 * * # release buffers - * source_buffer.release() + * source_buffer.release() # <<<<<<<<<<<<<< * if dest_buffer is not None: * dest_buffer.release() */ @@ -4444,7 +4444,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_22decompress(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":387 * # release buffers * source_buffer.release() - * if dest_buffer is not None: + * if dest_buffer is not None: # <<<<<<<<<<<<<< * dest_buffer.release() * */ @@ -4455,7 +4455,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_22decompress(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":388 * source_buffer.release() * if dest_buffer is not None: - * dest_buffer.release() + * dest_buffer.release() # <<<<<<<<<<<<<< * * # handle errors */ @@ -4466,7 +4466,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_22decompress(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":387 * # release buffers * source_buffer.release() - * if dest_buffer is not None: + * if dest_buffer is not None: # <<<<<<<<<<<<<< * dest_buffer.release() * */ @@ -4495,7 +4495,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_22decompress(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":386 * * # release buffers - * source_buffer.release() + * source_buffer.release() # <<<<<<<<<<<<<< * if dest_buffer is not None: * dest_buffer.release() */ @@ -4506,7 +4506,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_22decompress(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":387 * # release buffers * source_buffer.release() - * if dest_buffer is not None: + * if dest_buffer is not None: # <<<<<<<<<<<<<< * dest_buffer.release() * */ @@ -4517,7 +4517,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_22decompress(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":388 * source_buffer.release() * if dest_buffer is not None: - * dest_buffer.release() + * dest_buffer.release() # <<<<<<<<<<<<<< * * # handle errors */ @@ -4528,7 +4528,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_22decompress(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":387 * # release buffers * source_buffer.release() - * if dest_buffer is not None: + * if dest_buffer is not None: # <<<<<<<<<<<<<< * dest_buffer.release() * */ @@ -4566,7 +4566,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_22decompress(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":391 * * # handle errors - * if ret <= 0: + * if ret <= 0: # <<<<<<<<<<<<<< * raise RuntimeError('error during blosc decompression: %d' % ret) * */ @@ -4576,7 +4576,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_22decompress(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":392 * # handle errors * if ret <= 0: - * raise RuntimeError('error during blosc decompression: %d' % ret) + * raise RuntimeError('error during blosc decompression: %d' % ret) # <<<<<<<<<<<<<< * * return dest */ @@ -4595,7 +4595,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_22decompress(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":391 * * # handle errors - * if ret <= 0: + * if ret <= 0: # <<<<<<<<<<<<<< * raise RuntimeError('error during blosc decompression: %d' % ret) * */ @@ -4604,7 +4604,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_22decompress(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":394 * raise RuntimeError('error during blosc decompression: %d' % ret) * - * return dest + * return dest # <<<<<<<<<<<<<< * * */ @@ -4616,7 +4616,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_22decompress(CYTHON_UNUSED PyObject /* "numcodecs/blosc.pyx":323 * * - * def decompress(source, dest=None): + * def decompress(source, dest=None): # <<<<<<<<<<<<<< * """Decompress data. * */ @@ -4769,7 +4769,6 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_24decompress_partial(CYTHON_UNUSED P __Pyx_RefNannySetupContext("decompress_partial", 0); __Pyx_INCREF(__pyx_v_dest); - /* "numcodecs/blosc.pyx":428 * char *dest_ptr * Buffer source_buffer @@ -5363,7 +5362,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_26_get_use_threads(CYTHON_UNUSED PyO /* "numcodecs/blosc.pyx":481 * * # check if locks are available, and if not no threads - * if not mutex: + * if not mutex: # <<<<<<<<<<<<<< * return False * */ @@ -5377,7 +5376,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_26_get_use_threads(CYTHON_UNUSED PyO /* "numcodecs/blosc.pyx":482 * # check if locks are available, and if not no threads * if not mutex: - * return False + * return False # <<<<<<<<<<<<<< * * # check for fork */ @@ -5389,7 +5388,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_26_get_use_threads(CYTHON_UNUSED PyO /* "numcodecs/blosc.pyx":481 * * # check if locks are available, and if not no threads - * if not mutex: + * if not mutex: # <<<<<<<<<<<<<< * return False * */ @@ -5398,7 +5397,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_26_get_use_threads(CYTHON_UNUSED PyO /* "numcodecs/blosc.pyx":485 * * # check for fork - * if proc.pid != _importer_pid: + * if proc.pid != _importer_pid: # <<<<<<<<<<<<<< * # If this module has been imported in the parent process, and the current process * # is a fork, attempting to use blosc in multi-threaded mode will cause a */ @@ -5416,7 +5415,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_26_get_use_threads(CYTHON_UNUSED PyO /* "numcodecs/blosc.pyx":489 * # is a fork, attempting to use blosc in multi-threaded mode will cause a * # program hang, so we force use of blosc ctx functions, i.e., no threads. - * return False + * return False # <<<<<<<<<<<<<< * * if use_threads in [True, False]: */ @@ -5428,7 +5427,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_26_get_use_threads(CYTHON_UNUSED PyO /* "numcodecs/blosc.pyx":485 * * # check for fork - * if proc.pid != _importer_pid: + * if proc.pid != _importer_pid: # <<<<<<<<<<<<<< * # If this module has been imported in the parent process, and the current process * # is a fork, attempting to use blosc in multi-threaded mode will cause a */ @@ -5437,7 +5436,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_26_get_use_threads(CYTHON_UNUSED PyO /* "numcodecs/blosc.pyx":491 * return False * - * if use_threads in [True, False]: + * if use_threads in [True, False]: # <<<<<<<<<<<<<< * # user has manually overridden the default behaviour * _use_threads = use_threads */ @@ -5463,7 +5462,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_26_get_use_threads(CYTHON_UNUSED PyO /* "numcodecs/blosc.pyx":493 * if use_threads in [True, False]: * # user has manually overridden the default behaviour - * _use_threads = use_threads + * _use_threads = use_threads # <<<<<<<<<<<<<< * * else: */ @@ -5475,7 +5474,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_26_get_use_threads(CYTHON_UNUSED PyO /* "numcodecs/blosc.pyx":491 * return False * - * if use_threads in [True, False]: + * if use_threads in [True, False]: # <<<<<<<<<<<<<< * # user has manually overridden the default behaviour * _use_threads = use_threads */ @@ -5485,7 +5484,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_26_get_use_threads(CYTHON_UNUSED PyO /* "numcodecs/blosc.pyx":502 * # program or multi-process program * - * if proc.name != 'MainProcess': + * if proc.name != 'MainProcess': # <<<<<<<<<<<<<< * _use_threads = False * elif hasattr(threading, 'main_thread'): */ @@ -5499,7 +5498,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_26_get_use_threads(CYTHON_UNUSED PyO /* "numcodecs/blosc.pyx":503 * * if proc.name != 'MainProcess': - * _use_threads = False + * _use_threads = False # <<<<<<<<<<<<<< * elif hasattr(threading, 'main_thread'): * _use_threads = (threading.main_thread() == threading.current_thread()) */ @@ -5509,7 +5508,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_26_get_use_threads(CYTHON_UNUSED PyO /* "numcodecs/blosc.pyx":502 * # program or multi-process program * - * if proc.name != 'MainProcess': + * if proc.name != 'MainProcess': # <<<<<<<<<<<<<< * _use_threads = False * elif hasattr(threading, 'main_thread'): */ @@ -5519,7 +5518,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_26_get_use_threads(CYTHON_UNUSED PyO /* "numcodecs/blosc.pyx":504 * if proc.name != 'MainProcess': * _use_threads = False - * elif hasattr(threading, 'main_thread'): + * elif hasattr(threading, 'main_thread'): # <<<<<<<<<<<<<< * _use_threads = (threading.main_thread() == threading.current_thread()) * else: */ @@ -5533,7 +5532,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_26_get_use_threads(CYTHON_UNUSED PyO /* "numcodecs/blosc.pyx":505 * _use_threads = False * elif hasattr(threading, 'main_thread'): - * _use_threads = (threading.main_thread() == threading.current_thread()) + * _use_threads = (threading.main_thread() == threading.current_thread()) # <<<<<<<<<<<<<< * else: * _use_threads = threading.current_thread().name == 'MainThread' */ @@ -5586,7 +5585,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_26_get_use_threads(CYTHON_UNUSED PyO /* "numcodecs/blosc.pyx":504 * if proc.name != 'MainProcess': * _use_threads = False - * elif hasattr(threading, 'main_thread'): + * elif hasattr(threading, 'main_thread'): # <<<<<<<<<<<<<< * _use_threads = (threading.main_thread() == threading.current_thread()) * else: */ @@ -5596,7 +5595,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_26_get_use_threads(CYTHON_UNUSED PyO /* "numcodecs/blosc.pyx":507 * _use_threads = (threading.main_thread() == threading.current_thread()) * else: - * _use_threads = threading.current_thread().name == 'MainThread' + * _use_threads = threading.current_thread().name == 'MainThread' # <<<<<<<<<<<<<< * * return _use_threads */ @@ -5636,7 +5635,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_26_get_use_threads(CYTHON_UNUSED PyO /* "numcodecs/blosc.pyx":509 * _use_threads = threading.current_thread().name == 'MainThread' * - * return _use_threads + * return _use_threads # <<<<<<<<<<<<<< * * */ @@ -5648,7 +5647,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_26_get_use_threads(CYTHON_UNUSED PyO /* "numcodecs/blosc.pyx":476 * * - * def _get_use_threads(): + * def _get_use_threads(): # <<<<<<<<<<<<<< * global use_threads * proc = multiprocessing.current_process() */ @@ -5672,7 +5671,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_26_get_use_threads(CYTHON_UNUSED PyO /* "numcodecs/blosc.pyx":546 * max_buffer_size = 2**31 - 1 * - * def __init__(self, cname='lz4', clevel=5, shuffle=SHUFFLE, blocksize=AUTOBLOCKS): + * def __init__(self, cname='lz4', clevel=5, shuffle=SHUFFLE, blocksize=AUTOBLOCKS): # <<<<<<<<<<<<<< * self.cname = cname * if isinstance(cname, str): */ @@ -5899,7 +5898,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_5Blosc___init__(CYTHON_UNUSED PyObje /* "numcodecs/blosc.pyx":551 * self._cname_bytes = cname.encode('ascii') * else: - * self._cname_bytes = cname + * self._cname_bytes = cname # <<<<<<<<<<<<<< * self.clevel = clevel * self.shuffle = shuffle */ @@ -5911,7 +5910,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_5Blosc___init__(CYTHON_UNUSED PyObje /* "numcodecs/blosc.pyx":552 * else: * self._cname_bytes = cname - * self.clevel = clevel + * self.clevel = clevel # <<<<<<<<<<<<<< * self.shuffle = shuffle * self.blocksize = blocksize */ @@ -5920,7 +5919,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_5Blosc___init__(CYTHON_UNUSED PyObje /* "numcodecs/blosc.pyx":553 * self._cname_bytes = cname * self.clevel = clevel - * self.shuffle = shuffle + * self.shuffle = shuffle # <<<<<<<<<<<<<< * self.blocksize = blocksize * */ @@ -5929,7 +5928,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_5Blosc___init__(CYTHON_UNUSED PyObje /* "numcodecs/blosc.pyx":554 * self.clevel = clevel * self.shuffle = shuffle - * self.blocksize = blocksize + * self.blocksize = blocksize # <<<<<<<<<<<<<< * * def encode(self, buf): */ @@ -5938,7 +5937,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_5Blosc___init__(CYTHON_UNUSED PyObje /* "numcodecs/blosc.pyx":546 * max_buffer_size = 2**31 - 1 * - * def __init__(self, cname='lz4', clevel=5, shuffle=SHUFFLE, blocksize=AUTOBLOCKS): + * def __init__(self, cname='lz4', clevel=5, shuffle=SHUFFLE, blocksize=AUTOBLOCKS): # <<<<<<<<<<<<<< * self.cname = cname * if isinstance(cname, str): */ @@ -5961,7 +5960,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_5Blosc___init__(CYTHON_UNUSED PyObje /* "numcodecs/blosc.pyx":556 * self.blocksize = blocksize * - * def encode(self, buf): + * def encode(self, buf): # <<<<<<<<<<<<<< * buf = ensure_contiguous_ndarray(buf, self.max_buffer_size) * return compress(buf, self._cname_bytes, self.clevel, self.shuffle, self.blocksize) */ @@ -6047,7 +6046,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_5Blosc_2encode(CYTHON_UNUSED PyObjec /* "numcodecs/blosc.pyx":557 * * def encode(self, buf): - * buf = ensure_contiguous_ndarray(buf, self.max_buffer_size) + * buf = ensure_contiguous_ndarray(buf, self.max_buffer_size) # <<<<<<<<<<<<<< * return compress(buf, self._cname_bytes, self.clevel, self.shuffle, self.blocksize) * */ @@ -6108,7 +6107,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_5Blosc_2encode(CYTHON_UNUSED PyObjec /* "numcodecs/blosc.pyx":558 * def encode(self, buf): * buf = ensure_contiguous_ndarray(buf, self.max_buffer_size) - * return compress(buf, self._cname_bytes, self.clevel, self.shuffle, self.blocksize) + * return compress(buf, self._cname_bytes, self.clevel, self.shuffle, self.blocksize) # <<<<<<<<<<<<<< * * def decode(self, buf, out=None): */ @@ -6192,7 +6191,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_5Blosc_2encode(CYTHON_UNUSED PyObjec /* "numcodecs/blosc.pyx":556 * self.blocksize = blocksize * - * def encode(self, buf): + * def encode(self, buf): # <<<<<<<<<<<<<< * buf = ensure_contiguous_ndarray(buf, self.max_buffer_size) * return compress(buf, self._cname_bytes, self.clevel, self.shuffle, self.blocksize) */ @@ -6219,7 +6218,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_5Blosc_2encode(CYTHON_UNUSED PyObjec /* "numcodecs/blosc.pyx":560 * return compress(buf, self._cname_bytes, self.clevel, self.shuffle, self.blocksize) * - * def decode(self, buf, out=None): + * def decode(self, buf, out=None): # <<<<<<<<<<<<<< * buf = ensure_contiguous_ndarray(buf, self.max_buffer_size) * return decompress(buf, out) */ @@ -6317,7 +6316,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_5Blosc_4decode(CYTHON_UNUSED PyObjec /* "numcodecs/blosc.pyx":561 * * def decode(self, buf, out=None): - * buf = ensure_contiguous_ndarray(buf, self.max_buffer_size) + * buf = ensure_contiguous_ndarray(buf, self.max_buffer_size) # <<<<<<<<<<<<<< * return decompress(buf, out) * */ @@ -6378,7 +6377,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_5Blosc_4decode(CYTHON_UNUSED PyObjec /* "numcodecs/blosc.pyx":562 * def decode(self, buf, out=None): * buf = ensure_contiguous_ndarray(buf, self.max_buffer_size) - * return decompress(buf, out) + * return decompress(buf, out) # <<<<<<<<<<<<<< * * def decode_partial(self, buf, int start, int nitems, out=None): */ @@ -6703,7 +6702,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_5Blosc_6decode_partial(CYTHON_UNUSED /* "numcodecs/blosc.pyx":569 * return decompress_partial(buf, start, nitems, dest=out) * - * def __repr__(self): + * def __repr__(self): # <<<<<<<<<<<<<< * r = '%s(cname=%r, clevel=%r, shuffle=%s, blocksize=%s)' % \ * (type(self).__name__, */ @@ -6750,7 +6749,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_5Blosc_8__repr__(CYTHON_UNUSED PyObj /* "numcodecs/blosc.pyx":571 * def __repr__(self): * r = '%s(cname=%r, clevel=%r, shuffle=%s, blocksize=%s)' % \ - * (type(self).__name__, + * (type(self).__name__, # <<<<<<<<<<<<<< * self.cname, * self.clevel, */ @@ -6772,7 +6771,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_5Blosc_8__repr__(CYTHON_UNUSED PyObj /* "numcodecs/blosc.pyx":572 * r = '%s(cname=%r, clevel=%r, shuffle=%s, blocksize=%s)' % \ * (type(self).__name__, - * self.cname, + * self.cname, # <<<<<<<<<<<<<< * self.clevel, * _shuffle_repr[self.shuffle + 1], */ @@ -6794,7 +6793,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_5Blosc_8__repr__(CYTHON_UNUSED PyObj /* "numcodecs/blosc.pyx":573 * (type(self).__name__, * self.cname, - * self.clevel, + * self.clevel, # <<<<<<<<<<<<<< * _shuffle_repr[self.shuffle + 1], * self.blocksize) */ @@ -6816,7 +6815,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_5Blosc_8__repr__(CYTHON_UNUSED PyObj /* "numcodecs/blosc.pyx":574 * self.cname, * self.clevel, - * _shuffle_repr[self.shuffle + 1], + * _shuffle_repr[self.shuffle + 1], # <<<<<<<<<<<<<< * self.blocksize) * return r */ @@ -6847,7 +6846,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_5Blosc_8__repr__(CYTHON_UNUSED PyObj /* "numcodecs/blosc.pyx":575 * self.clevel, * _shuffle_repr[self.shuffle + 1], - * self.blocksize) + * self.blocksize) # <<<<<<<<<<<<<< * return r */ __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_blocksize); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 575, __pyx_L1_error) @@ -6868,7 +6867,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_5Blosc_8__repr__(CYTHON_UNUSED PyObj /* "numcodecs/blosc.pyx":570 * * def __repr__(self): - * r = '%s(cname=%r, clevel=%r, shuffle=%s, blocksize=%s)' % \ + * r = '%s(cname=%r, clevel=%r, shuffle=%s, blocksize=%s)' % \ # <<<<<<<<<<<<<< * (type(self).__name__, * self.cname, */ @@ -6881,7 +6880,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_5Blosc_8__repr__(CYTHON_UNUSED PyObj /* "numcodecs/blosc.pyx":576 * _shuffle_repr[self.shuffle + 1], * self.blocksize) - * return r + * return r # <<<<<<<<<<<<<< */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_r); @@ -6891,7 +6890,7 @@ static PyObject *__pyx_pf_9numcodecs_5blosc_5Blosc_8__repr__(CYTHON_UNUSED PyObj /* "numcodecs/blosc.pyx":569 * return decompress_partial(buf, start, nitems, dest=out) * - * def __repr__(self): + * def __repr__(self): # <<<<<<<<<<<<<< * r = '%s(cname=%r, clevel=%r, shuffle=%s, blocksize=%s)' % \ * (type(self).__name__, */ @@ -7115,7 +7114,7 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { /* "numcodecs/blosc.pyx":285 * # to ensure no-one else can modify the global context while we're setting it * # up and using it. - * with mutex: + * with mutex: # <<<<<<<<<<<<<< * * # set compressor */ @@ -7126,7 +7125,7 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { /* "numcodecs/blosc.pyx":87 * * - * def init(): + * def init(): # <<<<<<<<<<<<<< * """Initialize the Blosc library environment.""" * blosc_init() */ @@ -7135,7 +7134,7 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { /* "numcodecs/blosc.pyx":92 * * - * def destroy(): + * def destroy(): # <<<<<<<<<<<<<< * """Destroy the Blosc library environment.""" * blosc_destroy() */ @@ -7144,7 +7143,7 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { /* "numcodecs/blosc.pyx":97 * * - * def compname_to_compcode(cname): + * def compname_to_compcode(cname): # <<<<<<<<<<<<<< * """Return the compressor code associated with the compressor name. If the compressor * name is not recognized, or there is not support for it in this build, -1 is returned */ @@ -7156,7 +7155,7 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { /* "numcodecs/blosc.pyx":106 * * - * def list_compressors(): + * def list_compressors(): # <<<<<<<<<<<<<< * """Get a list of compressors supported in the current build.""" * s = blosc_list_compressors() */ @@ -7168,7 +7167,7 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { /* "numcodecs/blosc.pyx":113 * * - * def get_nthreads(): + * def get_nthreads(): # <<<<<<<<<<<<<< * """Get the number of threads that Blosc uses internally for compression and * decompression.""" */ @@ -7177,7 +7176,7 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { /* "numcodecs/blosc.pyx":119 * * - * def set_nthreads(int nthreads): + * def set_nthreads(int nthreads): # <<<<<<<<<<<<<< * """Set the number of threads that Blosc uses internally for compression and * decompression.""" */ @@ -7189,7 +7188,7 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { /* "numcodecs/blosc.pyx":125 * * - * def cbuffer_sizes(source): + * def cbuffer_sizes(source): # <<<<<<<<<<<<<< * """Return information about a compressed buffer, namely the number of uncompressed * bytes (`nbytes`) and compressed (`cbytes`). It also returns the `blocksize` (which */ @@ -7201,7 +7200,7 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { /* "numcodecs/blosc.pyx":153 * * - * def cbuffer_complib(source): + * def cbuffer_complib(source): # <<<<<<<<<<<<<< * """Return the name of the compression library used to compress `source`.""" * cdef: */ @@ -7213,7 +7212,7 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { /* "numcodecs/blosc.pyx":172 * * - * def cbuffer_metainfo(source): + * def cbuffer_metainfo(source): # <<<<<<<<<<<<<< * """Return some meta-information about the compressed buffer in `source`, including * the typesize, whether the shuffle or bit-shuffle filters were used, and the */ @@ -7225,7 +7224,7 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { /* "numcodecs/blosc.pyx":210 * * - * def err_bad_cname(cname): + * def err_bad_cname(cname): # <<<<<<<<<<<<<< * raise ValueError('bad compressor or compressor not supported: %r; expected one of ' * '%s' % (cname, list_compressors())) */ @@ -7237,7 +7236,7 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { /* "numcodecs/blosc.pyx":215 * * - * def compress(source, char* cname, int clevel, int shuffle=SHUFFLE, + * def compress(source, char* cname, int clevel, int shuffle=SHUFFLE, # <<<<<<<<<<<<<< * int blocksize=AUTOBLOCKS): * """Compress data. */ @@ -7249,7 +7248,7 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { /* "numcodecs/blosc.pyx":323 * * - * def decompress(source, dest=None): + * def decompress(source, dest=None): # <<<<<<<<<<<<<< * """Decompress data. * */ @@ -7273,7 +7272,7 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { /* "numcodecs/blosc.pyx":476 * * - * def _get_use_threads(): + * def _get_use_threads(): # <<<<<<<<<<<<<< * global use_threads * proc = multiprocessing.current_process() */ @@ -7285,7 +7284,7 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { /* "numcodecs/blosc.pyx":546 * max_buffer_size = 2**31 - 1 * - * def __init__(self, cname='lz4', clevel=5, shuffle=SHUFFLE, blocksize=AUTOBLOCKS): + * def __init__(self, cname='lz4', clevel=5, shuffle=SHUFFLE, blocksize=AUTOBLOCKS): # <<<<<<<<<<<<<< * self.cname = cname * if isinstance(cname, str): */ @@ -7297,7 +7296,7 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { /* "numcodecs/blosc.pyx":556 * self.blocksize = blocksize * - * def encode(self, buf): + * def encode(self, buf): # <<<<<<<<<<<<<< * buf = ensure_contiguous_ndarray(buf, self.max_buffer_size) * return compress(buf, self._cname_bytes, self.clevel, self.shuffle, self.blocksize) */ @@ -7309,7 +7308,7 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { /* "numcodecs/blosc.pyx":560 * return compress(buf, self._cname_bytes, self.clevel, self.shuffle, self.blocksize) * - * def decode(self, buf, out=None): + * def decode(self, buf, out=None): # <<<<<<<<<<<<<< * buf = ensure_contiguous_ndarray(buf, self.max_buffer_size) * return decompress(buf, out) */ @@ -7673,7 +7672,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":7 * # cython: language_level=3 * import threading - * import multiprocessing + * import multiprocessing # <<<<<<<<<<<<<< * import os * */ @@ -7685,7 +7684,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":8 * import threading * import multiprocessing - * import os + * import os # <<<<<<<<<<<<<< * * */ @@ -7756,7 +7755,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":60 * * - * MAX_OVERHEAD = BLOSC_MAX_OVERHEAD + * MAX_OVERHEAD = BLOSC_MAX_OVERHEAD # <<<<<<<<<<<<<< * MAX_BUFFERSIZE = BLOSC_MAX_BUFFERSIZE * MAX_THREADS = BLOSC_MAX_THREADS */ @@ -7768,7 +7767,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":61 * * MAX_OVERHEAD = BLOSC_MAX_OVERHEAD - * MAX_BUFFERSIZE = BLOSC_MAX_BUFFERSIZE + * MAX_BUFFERSIZE = BLOSC_MAX_BUFFERSIZE # <<<<<<<<<<<<<< * MAX_THREADS = BLOSC_MAX_THREADS * MAX_TYPESIZE = BLOSC_MAX_TYPESIZE */ @@ -7780,7 +7779,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":62 * MAX_OVERHEAD = BLOSC_MAX_OVERHEAD * MAX_BUFFERSIZE = BLOSC_MAX_BUFFERSIZE - * MAX_THREADS = BLOSC_MAX_THREADS + * MAX_THREADS = BLOSC_MAX_THREADS # <<<<<<<<<<<<<< * MAX_TYPESIZE = BLOSC_MAX_TYPESIZE * VERSION_STRING = BLOSC_VERSION_STRING */ @@ -7792,7 +7791,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":63 * MAX_BUFFERSIZE = BLOSC_MAX_BUFFERSIZE * MAX_THREADS = BLOSC_MAX_THREADS - * MAX_TYPESIZE = BLOSC_MAX_TYPESIZE + * MAX_TYPESIZE = BLOSC_MAX_TYPESIZE # <<<<<<<<<<<<<< * VERSION_STRING = BLOSC_VERSION_STRING * VERSION_DATE = BLOSC_VERSION_DATE */ @@ -7804,7 +7803,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":64 * MAX_THREADS = BLOSC_MAX_THREADS * MAX_TYPESIZE = BLOSC_MAX_TYPESIZE - * VERSION_STRING = BLOSC_VERSION_STRING + * VERSION_STRING = BLOSC_VERSION_STRING # <<<<<<<<<<<<<< * VERSION_DATE = BLOSC_VERSION_DATE * VERSION_STRING = VERSION_STRING.decode() */ @@ -7876,7 +7875,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":69 * VERSION_DATE = VERSION_DATE.decode() * __version__ = VERSION_STRING - * NOSHUFFLE = BLOSC_NOSHUFFLE + * NOSHUFFLE = BLOSC_NOSHUFFLE # <<<<<<<<<<<<<< * SHUFFLE = BLOSC_SHUFFLE * BITSHUFFLE = BLOSC_BITSHUFFLE */ @@ -7888,7 +7887,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":70 * __version__ = VERSION_STRING * NOSHUFFLE = BLOSC_NOSHUFFLE - * SHUFFLE = BLOSC_SHUFFLE + * SHUFFLE = BLOSC_SHUFFLE # <<<<<<<<<<<<<< * BITSHUFFLE = BLOSC_BITSHUFFLE * # automatic shuffle */ @@ -7900,7 +7899,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":71 * NOSHUFFLE = BLOSC_NOSHUFFLE * SHUFFLE = BLOSC_SHUFFLE - * BITSHUFFLE = BLOSC_BITSHUFFLE + * BITSHUFFLE = BLOSC_BITSHUFFLE # <<<<<<<<<<<<<< * # automatic shuffle * AUTOSHUFFLE = -1 */ @@ -7912,7 +7911,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":73 * BITSHUFFLE = BLOSC_BITSHUFFLE * # automatic shuffle - * AUTOSHUFFLE = -1 + * AUTOSHUFFLE = -1 # <<<<<<<<<<<<<< * # automatic block size - let blosc decide * AUTOBLOCKS = 0 */ @@ -7921,7 +7920,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":75 * AUTOSHUFFLE = -1 * # automatic block size - let blosc decide - * AUTOBLOCKS = 0 + * AUTOBLOCKS = 0 # <<<<<<<<<<<<<< * * # synchronization */ @@ -7930,7 +7929,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":78 * * # synchronization - * try: + * try: # <<<<<<<<<<<<<< * mutex = multiprocessing.Lock() * except OSError: */ @@ -7946,7 +7945,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":79 * # synchronization * try: - * mutex = multiprocessing.Lock() + * mutex = multiprocessing.Lock() # <<<<<<<<<<<<<< * except OSError: * mutex = None */ @@ -7964,7 +7963,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":78 * * # synchronization - * try: + * try: # <<<<<<<<<<<<<< * mutex = multiprocessing.Lock() * except OSError: */ @@ -7980,7 +7979,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":80 * try: * mutex = multiprocessing.Lock() - * except OSError: + * except OSError: # <<<<<<<<<<<<<< * mutex = None * */ @@ -7995,7 +7994,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":81 * mutex = multiprocessing.Lock() * except OSError: - * mutex = None + * mutex = None # <<<<<<<<<<<<<< * * # store ID of process that first loads the module, so we can detect a fork later */ @@ -8011,7 +8010,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":78 * * # synchronization - * try: + * try: # <<<<<<<<<<<<<< * mutex = multiprocessing.Lock() * except OSError: */ @@ -8031,7 +8030,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":84 * * # store ID of process that first loads the module, so we can detect a fork later - * _importer_pid = os.getpid() + * _importer_pid = os.getpid() # <<<<<<<<<<<<<< * * */ @@ -8049,7 +8048,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":87 * * - * def init(): + * def init(): # <<<<<<<<<<<<<< * """Initialize the Blosc library environment.""" * blosc_init() */ @@ -8061,7 +8060,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":92 * * - * def destroy(): + * def destroy(): # <<<<<<<<<<<<<< * """Destroy the Blosc library environment.""" * blosc_destroy() */ @@ -8073,7 +8072,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":97 * * - * def compname_to_compcode(cname): + * def compname_to_compcode(cname): # <<<<<<<<<<<<<< * """Return the compressor code associated with the compressor name. If the compressor * name is not recognized, or there is not support for it in this build, -1 is returned */ @@ -8085,7 +8084,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":106 * * - * def list_compressors(): + * def list_compressors(): # <<<<<<<<<<<<<< * """Get a list of compressors supported in the current build.""" * s = blosc_list_compressors() */ @@ -8097,7 +8096,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":113 * * - * def get_nthreads(): + * def get_nthreads(): # <<<<<<<<<<<<<< * """Get the number of threads that Blosc uses internally for compression and * decompression.""" */ @@ -8109,7 +8108,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":119 * * - * def set_nthreads(int nthreads): + * def set_nthreads(int nthreads): # <<<<<<<<<<<<<< * """Set the number of threads that Blosc uses internally for compression and * decompression.""" */ @@ -8121,7 +8120,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":125 * * - * def cbuffer_sizes(source): + * def cbuffer_sizes(source): # <<<<<<<<<<<<<< * """Return information about a compressed buffer, namely the number of uncompressed * bytes (`nbytes`) and compressed (`cbytes`). It also returns the `blocksize` (which */ @@ -8133,7 +8132,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":153 * * - * def cbuffer_complib(source): + * def cbuffer_complib(source): # <<<<<<<<<<<<<< * """Return the name of the compression library used to compress `source`.""" * cdef: */ @@ -8145,7 +8144,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":172 * * - * def cbuffer_metainfo(source): + * def cbuffer_metainfo(source): # <<<<<<<<<<<<<< * """Return some meta-information about the compressed buffer in `source`, including * the typesize, whether the shuffle or bit-shuffle filters were used, and the */ @@ -8157,7 +8156,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":210 * * - * def err_bad_cname(cname): + * def err_bad_cname(cname): # <<<<<<<<<<<<<< * raise ValueError('bad compressor or compressor not supported: %r; expected one of ' * '%s' % (cname, list_compressors())) */ @@ -8169,7 +8168,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":215 * * - * def compress(source, char* cname, int clevel, int shuffle=SHUFFLE, + * def compress(source, char* cname, int clevel, int shuffle=SHUFFLE, # <<<<<<<<<<<<<< * int blocksize=AUTOBLOCKS): * """Compress data. */ @@ -8182,7 +8181,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":216 * * def compress(source, char* cname, int clevel, int shuffle=SHUFFLE, - * int blocksize=AUTOBLOCKS): + * int blocksize=AUTOBLOCKS): # <<<<<<<<<<<<<< * """Compress data. * */ @@ -8195,7 +8194,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":215 * * - * def compress(source, char* cname, int clevel, int shuffle=SHUFFLE, + * def compress(source, char* cname, int clevel, int shuffle=SHUFFLE, # <<<<<<<<<<<<<< * int blocksize=AUTOBLOCKS): * """Compress data. */ @@ -8207,7 +8206,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":323 * * - * def decompress(source, dest=None): + * def decompress(source, dest=None): # <<<<<<<<<<<<<< * """Decompress data. * */ @@ -8231,7 +8230,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":473 * # set the value of this variable to True or False to override the * # default adaptive behaviour - * use_threads = None + * use_threads = None # <<<<<<<<<<<<<< * * */ @@ -8240,7 +8239,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":476 * * - * def _get_use_threads(): + * def _get_use_threads(): # <<<<<<<<<<<<<< * global use_threads * proc = multiprocessing.current_process() */ @@ -8252,7 +8251,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":512 * * - * _shuffle_repr = ['AUTOSHUFFLE', 'NOSHUFFLE', 'SHUFFLE', 'BITSHUFFLE'] + * _shuffle_repr = ['AUTOSHUFFLE', 'NOSHUFFLE', 'SHUFFLE', 'BITSHUFFLE'] # <<<<<<<<<<<<<< * * */ @@ -8276,7 +8275,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":515 * * - * class Blosc(Codec): + * class Blosc(Codec): # <<<<<<<<<<<<<< * """Codec providing compression using the Blosc meta-compressor. * */ @@ -8295,7 +8294,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":539 * """ * - * codec_id = 'blosc' + * codec_id = 'blosc' # <<<<<<<<<<<<<< * NOSHUFFLE = NOSHUFFLE * SHUFFLE = SHUFFLE */ @@ -8304,7 +8303,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":540 * * codec_id = 'blosc' - * NOSHUFFLE = NOSHUFFLE + * NOSHUFFLE = NOSHUFFLE # <<<<<<<<<<<<<< * SHUFFLE = SHUFFLE * BITSHUFFLE = BITSHUFFLE */ @@ -8317,7 +8316,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":541 * codec_id = 'blosc' * NOSHUFFLE = NOSHUFFLE - * SHUFFLE = SHUFFLE + * SHUFFLE = SHUFFLE # <<<<<<<<<<<<<< * BITSHUFFLE = BITSHUFFLE * AUTOSHUFFLE = AUTOSHUFFLE */ @@ -8330,7 +8329,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":542 * NOSHUFFLE = NOSHUFFLE * SHUFFLE = SHUFFLE - * BITSHUFFLE = BITSHUFFLE + * BITSHUFFLE = BITSHUFFLE # <<<<<<<<<<<<<< * AUTOSHUFFLE = AUTOSHUFFLE * max_buffer_size = 2**31 - 1 */ @@ -8343,7 +8342,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":543 * SHUFFLE = SHUFFLE * BITSHUFFLE = BITSHUFFLE - * AUTOSHUFFLE = AUTOSHUFFLE + * AUTOSHUFFLE = AUTOSHUFFLE # <<<<<<<<<<<<<< * max_buffer_size = 2**31 - 1 * */ @@ -8356,7 +8355,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":544 * BITSHUFFLE = BITSHUFFLE * AUTOSHUFFLE = AUTOSHUFFLE - * max_buffer_size = 2**31 - 1 + * max_buffer_size = 2**31 - 1 # <<<<<<<<<<<<<< * * def __init__(self, cname='lz4', clevel=5, shuffle=SHUFFLE, blocksize=AUTOBLOCKS): */ @@ -8365,7 +8364,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":546 * max_buffer_size = 2**31 - 1 * - * def __init__(self, cname='lz4', clevel=5, shuffle=SHUFFLE, blocksize=AUTOBLOCKS): + * def __init__(self, cname='lz4', clevel=5, shuffle=SHUFFLE, blocksize=AUTOBLOCKS): # <<<<<<<<<<<<<< * self.cname = cname * if isinstance(cname, str): */ @@ -8394,7 +8393,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":556 * self.blocksize = blocksize * - * def encode(self, buf): + * def encode(self, buf): # <<<<<<<<<<<<<< * buf = ensure_contiguous_ndarray(buf, self.max_buffer_size) * return compress(buf, self._cname_bytes, self.clevel, self.shuffle, self.blocksize) */ @@ -8406,7 +8405,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":560 * return compress(buf, self._cname_bytes, self.clevel, self.shuffle, self.blocksize) * - * def decode(self, buf, out=None): + * def decode(self, buf, out=None): # <<<<<<<<<<<<<< * buf = ensure_contiguous_ndarray(buf, self.max_buffer_size) * return decompress(buf, out) */ @@ -8444,7 +8443,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/blosc.pyx":515 * * - * class Blosc(Codec): + * class Blosc(Codec): # <<<<<<<<<<<<<< * """Codec providing compression using the Blosc meta-compressor. * */ diff --git a/numcodecs/zstd.c b/numcodecs/zstd.c index 56acab40..522e5516 100644 --- a/numcodecs/zstd.c +++ b/numcodecs/zstd.c @@ -252,7 +252,7 @@ END: Cython Metadata */ #undef BASE #undef MASK #ifdef SIZEOF_VOID_P - enum { __pyx_check_sizeof_voidp = 1/(SIZEOF_VOID_P == sizeof(void*)) }; + enum { __pyx_check_sizeof_voidp = 1 / (int)(SIZEOF_VOID_P == sizeof(void*)) }; #endif #endif #ifndef __has_attribute @@ -881,7 +881,7 @@ struct __pyx_defaults { /* "compat_ext.pxd":4 * * - * cdef class Buffer: + * cdef class Buffer: # <<<<<<<<<<<<<< * cdef: * char *ptr */ @@ -1541,7 +1541,7 @@ static PyObject *__pyx_codeobj__17; /* "numcodecs/zstd.pyx":58 * * - * def compress(source, int level=DEFAULT_CLEVEL): + * def compress(source, int level=DEFAULT_CLEVEL): # <<<<<<<<<<<<<< * """Compress data. * */ @@ -1647,7 +1647,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_compress(CYTHON_UNUSED PyObject *__py /* "numcodecs/zstd.pyx":83 * * # check level - * if level <= 0: + * if level <= 0: # <<<<<<<<<<<<<< * level = DEFAULT_CLEVEL * if level > MAX_CLEVEL: */ @@ -1657,7 +1657,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_compress(CYTHON_UNUSED PyObject *__py /* "numcodecs/zstd.pyx":84 * # check level * if level <= 0: - * level = DEFAULT_CLEVEL + * level = DEFAULT_CLEVEL # <<<<<<<<<<<<<< * if level > MAX_CLEVEL: * level = MAX_CLEVEL */ @@ -1670,7 +1670,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_compress(CYTHON_UNUSED PyObject *__py /* "numcodecs/zstd.pyx":83 * * # check level - * if level <= 0: + * if level <= 0: # <<<<<<<<<<<<<< * level = DEFAULT_CLEVEL * if level > MAX_CLEVEL: */ @@ -1679,7 +1679,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_compress(CYTHON_UNUSED PyObject *__py /* "numcodecs/zstd.pyx":85 * if level <= 0: * level = DEFAULT_CLEVEL - * if level > MAX_CLEVEL: + * if level > MAX_CLEVEL: # <<<<<<<<<<<<<< * level = MAX_CLEVEL * */ @@ -1697,7 +1697,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_compress(CYTHON_UNUSED PyObject *__py /* "numcodecs/zstd.pyx":86 * level = DEFAULT_CLEVEL * if level > MAX_CLEVEL: - * level = MAX_CLEVEL + * level = MAX_CLEVEL # <<<<<<<<<<<<<< * * # setup source buffer */ @@ -1710,7 +1710,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_compress(CYTHON_UNUSED PyObject *__py /* "numcodecs/zstd.pyx":85 * if level <= 0: * level = DEFAULT_CLEVEL - * if level > MAX_CLEVEL: + * if level > MAX_CLEVEL: # <<<<<<<<<<<<<< * level = MAX_CLEVEL * */ @@ -1719,7 +1719,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_compress(CYTHON_UNUSED PyObject *__py /* "numcodecs/zstd.pyx":89 * * # setup source buffer - * source_buffer = Buffer(source, PyBUF_ANY_CONTIGUOUS) + * source_buffer = Buffer(source, PyBUF_ANY_CONTIGUOUS) # <<<<<<<<<<<<<< * source_ptr = source_buffer.ptr * source_size = source_buffer.nbytes */ @@ -1742,7 +1742,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_compress(CYTHON_UNUSED PyObject *__py /* "numcodecs/zstd.pyx":90 * # setup source buffer * source_buffer = Buffer(source, PyBUF_ANY_CONTIGUOUS) - * source_ptr = source_buffer.ptr + * source_ptr = source_buffer.ptr # <<<<<<<<<<<<<< * source_size = source_buffer.nbytes * */ @@ -1752,7 +1752,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_compress(CYTHON_UNUSED PyObject *__py /* "numcodecs/zstd.pyx":91 * source_buffer = Buffer(source, PyBUF_ANY_CONTIGUOUS) * source_ptr = source_buffer.ptr - * source_size = source_buffer.nbytes + * source_size = source_buffer.nbytes # <<<<<<<<<<<<<< * * try: */ @@ -1762,7 +1762,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_compress(CYTHON_UNUSED PyObject *__py /* "numcodecs/zstd.pyx":93 * source_size = source_buffer.nbytes * - * try: + * try: # <<<<<<<<<<<<<< * * # setup destination */ @@ -1771,7 +1771,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_compress(CYTHON_UNUSED PyObject *__py /* "numcodecs/zstd.pyx":96 * * # setup destination - * dest_size = ZSTD_compressBound(source_size) + * dest_size = ZSTD_compressBound(source_size) # <<<<<<<<<<<<<< * dest = PyBytes_FromStringAndSize(NULL, dest_size) * dest_ptr = PyBytes_AS_STRING(dest) */ @@ -1780,7 +1780,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_compress(CYTHON_UNUSED PyObject *__py /* "numcodecs/zstd.pyx":97 * # setup destination * dest_size = ZSTD_compressBound(source_size) - * dest = PyBytes_FromStringAndSize(NULL, dest_size) + * dest = PyBytes_FromStringAndSize(NULL, dest_size) # <<<<<<<<<<<<<< * dest_ptr = PyBytes_AS_STRING(dest) * */ @@ -1792,7 +1792,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_compress(CYTHON_UNUSED PyObject *__py /* "numcodecs/zstd.pyx":98 * dest_size = ZSTD_compressBound(source_size) * dest = PyBytes_FromStringAndSize(NULL, dest_size) - * dest_ptr = PyBytes_AS_STRING(dest) + * dest_ptr = PyBytes_AS_STRING(dest) # <<<<<<<<<<<<<< * * # perform compression */ @@ -1801,7 +1801,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_compress(CYTHON_UNUSED PyObject *__py /* "numcodecs/zstd.pyx":101 * * # perform compression - * with nogil: + * with nogil: # <<<<<<<<<<<<<< * compressed_size = ZSTD_compress(dest_ptr, dest_size, source_ptr, source_size, level) * */ @@ -1816,7 +1816,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_compress(CYTHON_UNUSED PyObject *__py /* "numcodecs/zstd.pyx":102 * # perform compression * with nogil: - * compressed_size = ZSTD_compress(dest_ptr, dest_size, source_ptr, source_size, level) + * compressed_size = ZSTD_compress(dest_ptr, dest_size, source_ptr, source_size, level) # <<<<<<<<<<<<<< * * finally: */ @@ -1826,7 +1826,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_compress(CYTHON_UNUSED PyObject *__py /* "numcodecs/zstd.pyx":101 * * # perform compression - * with nogil: + * with nogil: # <<<<<<<<<<<<<< * compressed_size = ZSTD_compress(dest_ptr, dest_size, source_ptr, source_size, level) * */ @@ -1846,7 +1846,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_compress(CYTHON_UNUSED PyObject *__py /* "numcodecs/zstd.pyx":107 * * # release buffers - * source_buffer.release() + * source_buffer.release() # <<<<<<<<<<<<<< * * # check compression was successful */ @@ -1911,7 +1911,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_compress(CYTHON_UNUSED PyObject *__py /* "numcodecs/zstd.pyx":110 * * # check compression was successful - * if ZSTD_isError(compressed_size): + * if ZSTD_isError(compressed_size): # <<<<<<<<<<<<<< * error = ZSTD_getErrorName(compressed_size) * raise RuntimeError('Zstd compression error: %s' % error) */ @@ -1921,7 +1921,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_compress(CYTHON_UNUSED PyObject *__py /* "numcodecs/zstd.pyx":111 * # check compression was successful * if ZSTD_isError(compressed_size): - * error = ZSTD_getErrorName(compressed_size) + * error = ZSTD_getErrorName(compressed_size) # <<<<<<<<<<<<<< * raise RuntimeError('Zstd compression error: %s' % error) * */ @@ -1930,7 +1930,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_compress(CYTHON_UNUSED PyObject *__py /* "numcodecs/zstd.pyx":112 * if ZSTD_isError(compressed_size): * error = ZSTD_getErrorName(compressed_size) - * raise RuntimeError('Zstd compression error: %s' % error) + * raise RuntimeError('Zstd compression error: %s' % error) # <<<<<<<<<<<<<< * * # resize after compression */ @@ -1949,7 +1949,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_compress(CYTHON_UNUSED PyObject *__py /* "numcodecs/zstd.pyx":110 * * # check compression was successful - * if ZSTD_isError(compressed_size): + * if ZSTD_isError(compressed_size): # <<<<<<<<<<<<<< * error = ZSTD_getErrorName(compressed_size) * raise RuntimeError('Zstd compression error: %s' % error) */ @@ -1958,7 +1958,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_compress(CYTHON_UNUSED PyObject *__py /* "numcodecs/zstd.pyx":115 * * # resize after compression - * dest = dest[:compressed_size] + * dest = dest[:compressed_size] # <<<<<<<<<<<<<< * * return dest */ @@ -1974,7 +1974,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_compress(CYTHON_UNUSED PyObject *__py /* "numcodecs/zstd.pyx":117 * dest = dest[:compressed_size] * - * return dest + * return dest # <<<<<<<<<<<<<< * * */ @@ -1986,7 +1986,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_compress(CYTHON_UNUSED PyObject *__py /* "numcodecs/zstd.pyx":58 * * - * def compress(source, int level=DEFAULT_CLEVEL): + * def compress(source, int level=DEFAULT_CLEVEL): # <<<<<<<<<<<<<< * """Compress data. * */ @@ -2009,7 +2009,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_compress(CYTHON_UNUSED PyObject *__py /* "numcodecs/zstd.pyx":120 * * - * def decompress(source, dest=None): + * def decompress(source, dest=None): # <<<<<<<<<<<<<< * """Decompress data. * */ @@ -2117,7 +2117,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":140 * char *dest_ptr * Buffer source_buffer - * Buffer dest_buffer = None + * Buffer dest_buffer = None # <<<<<<<<<<<<<< * size_t source_size, dest_size, decompressed_size * */ @@ -2127,7 +2127,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":144 * * # setup source buffer - * source_buffer = Buffer(source, PyBUF_ANY_CONTIGUOUS) + * source_buffer = Buffer(source, PyBUF_ANY_CONTIGUOUS) # <<<<<<<<<<<<<< * source_ptr = source_buffer.ptr * source_size = source_buffer.nbytes */ @@ -2150,7 +2150,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":145 * # setup source buffer * source_buffer = Buffer(source, PyBUF_ANY_CONTIGUOUS) - * source_ptr = source_buffer.ptr + * source_ptr = source_buffer.ptr # <<<<<<<<<<<<<< * source_size = source_buffer.nbytes * */ @@ -2160,7 +2160,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":146 * source_buffer = Buffer(source, PyBUF_ANY_CONTIGUOUS) * source_ptr = source_buffer.ptr - * source_size = source_buffer.nbytes + * source_size = source_buffer.nbytes # <<<<<<<<<<<<<< * * try: */ @@ -2170,7 +2170,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":148 * source_size = source_buffer.nbytes * - * try: + * try: # <<<<<<<<<<<<<< * * # determine uncompressed size */ @@ -2179,7 +2179,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":151 * * # determine uncompressed size - * dest_size = ZSTD_getDecompressedSize(source_ptr, source_size) + * dest_size = ZSTD_getDecompressedSize(source_ptr, source_size) # <<<<<<<<<<<<<< * if dest_size == 0: * raise RuntimeError('Zstd decompression error: invalid input data') */ @@ -2188,7 +2188,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":152 * # determine uncompressed size * dest_size = ZSTD_getDecompressedSize(source_ptr, source_size) - * if dest_size == 0: + * if dest_size == 0: # <<<<<<<<<<<<<< * raise RuntimeError('Zstd decompression error: invalid input data') * */ @@ -2198,7 +2198,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":153 * dest_size = ZSTD_getDecompressedSize(source_ptr, source_size) * if dest_size == 0: - * raise RuntimeError('Zstd decompression error: invalid input data') + * raise RuntimeError('Zstd decompression error: invalid input data') # <<<<<<<<<<<<<< * * # setup destination buffer */ @@ -2211,7 +2211,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":152 * # determine uncompressed size * dest_size = ZSTD_getDecompressedSize(source_ptr, source_size) - * if dest_size == 0: + * if dest_size == 0: # <<<<<<<<<<<<<< * raise RuntimeError('Zstd decompression error: invalid input data') * */ @@ -2220,7 +2220,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":156 * * # setup destination buffer - * if dest is None: + * if dest is None: # <<<<<<<<<<<<<< * # allocate memory * dest = PyBytes_FromStringAndSize(NULL, dest_size) */ @@ -2231,7 +2231,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":158 * if dest is None: * # allocate memory - * dest = PyBytes_FromStringAndSize(NULL, dest_size) + * dest = PyBytes_FromStringAndSize(NULL, dest_size) # <<<<<<<<<<<<<< * dest_ptr = PyBytes_AS_STRING(dest) * else: */ @@ -2243,7 +2243,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":159 * # allocate memory * dest = PyBytes_FromStringAndSize(NULL, dest_size) - * dest_ptr = PyBytes_AS_STRING(dest) + * dest_ptr = PyBytes_AS_STRING(dest) # <<<<<<<<<<<<<< * else: * arr = ensure_contiguous_ndarray(dest) */ @@ -2252,7 +2252,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":156 * * # setup destination buffer - * if dest is None: + * if dest is None: # <<<<<<<<<<<<<< * # allocate memory * dest = PyBytes_FromStringAndSize(NULL, dest_size) */ @@ -2262,7 +2262,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":161 * dest_ptr = PyBytes_AS_STRING(dest) * else: - * arr = ensure_contiguous_ndarray(dest) + * arr = ensure_contiguous_ndarray(dest) # <<<<<<<<<<<<<< * dest_buffer = Buffer(arr, PyBUF_ANY_CONTIGUOUS | PyBUF_WRITEABLE) * dest_ptr = dest_buffer.ptr */ @@ -2290,7 +2290,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":162 * else: * arr = ensure_contiguous_ndarray(dest) - * dest_buffer = Buffer(arr, PyBUF_ANY_CONTIGUOUS | PyBUF_WRITEABLE) + * dest_buffer = Buffer(arr, PyBUF_ANY_CONTIGUOUS | PyBUF_WRITEABLE) # <<<<<<<<<<<<<< * dest_ptr = dest_buffer.ptr * if dest_buffer.nbytes < dest_size: */ @@ -2313,7 +2313,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":163 * arr = ensure_contiguous_ndarray(dest) * dest_buffer = Buffer(arr, PyBUF_ANY_CONTIGUOUS | PyBUF_WRITEABLE) - * dest_ptr = dest_buffer.ptr + * dest_ptr = dest_buffer.ptr # <<<<<<<<<<<<<< * if dest_buffer.nbytes < dest_size: * raise ValueError('destination buffer too small; expected at least %s, ' */ @@ -2323,7 +2323,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":164 * dest_buffer = Buffer(arr, PyBUF_ANY_CONTIGUOUS | PyBUF_WRITEABLE) * dest_ptr = dest_buffer.ptr - * if dest_buffer.nbytes < dest_size: + * if dest_buffer.nbytes < dest_size: # <<<<<<<<<<<<<< * raise ValueError('destination buffer too small; expected at least %s, ' * 'got %s' % (dest_size, dest_buffer.nbytes)) */ @@ -2349,7 +2349,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":166 * if dest_buffer.nbytes < dest_size: * raise ValueError('destination buffer too small; expected at least %s, ' - * 'got %s' % (dest_size, dest_buffer.nbytes)) + * 'got %s' % (dest_size, dest_buffer.nbytes)) # <<<<<<<<<<<<<< * * # perform decompression */ @@ -2373,7 +2373,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":165 * dest_ptr = dest_buffer.ptr * if dest_buffer.nbytes < dest_size: - * raise ValueError('destination buffer too small; expected at least %s, ' + * raise ValueError('destination buffer too small; expected at least %s, ' # <<<<<<<<<<<<<< * 'got %s' % (dest_size, dest_buffer.nbytes)) * */ @@ -2390,7 +2390,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":164 * dest_buffer = Buffer(arr, PyBUF_ANY_CONTIGUOUS | PyBUF_WRITEABLE) * dest_ptr = dest_buffer.ptr - * if dest_buffer.nbytes < dest_size: + * if dest_buffer.nbytes < dest_size: # <<<<<<<<<<<<<< * raise ValueError('destination buffer too small; expected at least %s, ' * 'got %s' % (dest_size, dest_buffer.nbytes)) */ @@ -2401,7 +2401,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":169 * * # perform decompression - * with nogil: + * with nogil: # <<<<<<<<<<<<<< * decompressed_size = ZSTD_decompress(dest_ptr, dest_size, source_ptr, source_size) * */ @@ -2416,7 +2416,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":170 * # perform decompression * with nogil: - * decompressed_size = ZSTD_decompress(dest_ptr, dest_size, source_ptr, source_size) + * decompressed_size = ZSTD_decompress(dest_ptr, dest_size, source_ptr, source_size) # <<<<<<<<<<<<<< * * finally: */ @@ -2426,7 +2426,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":169 * * # perform decompression - * with nogil: + * with nogil: # <<<<<<<<<<<<<< * decompressed_size = ZSTD_decompress(dest_ptr, dest_size, source_ptr, source_size) * */ @@ -2446,7 +2446,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":175 * * # release buffers - * source_buffer.release() + * source_buffer.release() # <<<<<<<<<<<<<< * if dest_buffer is not None: * dest_buffer.release() */ @@ -2459,7 +2459,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":176 * # release buffers * source_buffer.release() - * if dest_buffer is not None: + * if dest_buffer is not None: # <<<<<<<<<<<<<< * dest_buffer.release() * */ @@ -2470,7 +2470,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":177 * source_buffer.release() * if dest_buffer is not None: - * dest_buffer.release() + * dest_buffer.release() # <<<<<<<<<<<<<< * * # check decompression was successful */ @@ -2481,7 +2481,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":176 * # release buffers * source_buffer.release() - * if dest_buffer is not None: + * if dest_buffer is not None: # <<<<<<<<<<<<<< * dest_buffer.release() * */ @@ -2510,7 +2510,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":175 * * # release buffers - * source_buffer.release() + * source_buffer.release() # <<<<<<<<<<<<<< * if dest_buffer is not None: * dest_buffer.release() */ @@ -2521,7 +2521,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":176 * # release buffers * source_buffer.release() - * if dest_buffer is not None: + * if dest_buffer is not None: # <<<<<<<<<<<<<< * dest_buffer.release() * */ @@ -2532,7 +2532,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":177 * source_buffer.release() * if dest_buffer is not None: - * dest_buffer.release() + * dest_buffer.release() # <<<<<<<<<<<<<< * * # check decompression was successful */ @@ -2543,7 +2543,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":176 * # release buffers * source_buffer.release() - * if dest_buffer is not None: + * if dest_buffer is not None: # <<<<<<<<<<<<<< * dest_buffer.release() * */ @@ -2581,7 +2581,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":180 * * # check decompression was successful - * if ZSTD_isError(decompressed_size): + * if ZSTD_isError(decompressed_size): # <<<<<<<<<<<<<< * error = ZSTD_getErrorName(decompressed_size) * raise RuntimeError('Zstd decompression error: %s' % error) */ @@ -2591,7 +2591,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":181 * # check decompression was successful * if ZSTD_isError(decompressed_size): - * error = ZSTD_getErrorName(decompressed_size) + * error = ZSTD_getErrorName(decompressed_size) # <<<<<<<<<<<<<< * raise RuntimeError('Zstd decompression error: %s' % error) * elif decompressed_size != dest_size: */ @@ -2600,7 +2600,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":182 * if ZSTD_isError(decompressed_size): * error = ZSTD_getErrorName(decompressed_size) - * raise RuntimeError('Zstd decompression error: %s' % error) + * raise RuntimeError('Zstd decompression error: %s' % error) # <<<<<<<<<<<<<< * elif decompressed_size != dest_size: * raise RuntimeError('Zstd decompression error: expected to decompress %s, got %s' % */ @@ -2619,7 +2619,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":180 * * # check decompression was successful - * if ZSTD_isError(decompressed_size): + * if ZSTD_isError(decompressed_size): # <<<<<<<<<<<<<< * error = ZSTD_getErrorName(decompressed_size) * raise RuntimeError('Zstd decompression error: %s' % error) */ @@ -2628,7 +2628,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":183 * error = ZSTD_getErrorName(decompressed_size) * raise RuntimeError('Zstd decompression error: %s' % error) - * elif decompressed_size != dest_size: + * elif decompressed_size != dest_size: # <<<<<<<<<<<<<< * raise RuntimeError('Zstd decompression error: expected to decompress %s, got %s' % * (dest_size, decompressed_size)) */ @@ -2654,7 +2654,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":185 * elif decompressed_size != dest_size: * raise RuntimeError('Zstd decompression error: expected to decompress %s, got %s' % - * (dest_size, decompressed_size)) + * (dest_size, decompressed_size)) # <<<<<<<<<<<<<< * * return dest */ @@ -2678,7 +2678,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":184 * raise RuntimeError('Zstd decompression error: %s' % error) * elif decompressed_size != dest_size: - * raise RuntimeError('Zstd decompression error: expected to decompress %s, got %s' % + * raise RuntimeError('Zstd decompression error: expected to decompress %s, got %s' % # <<<<<<<<<<<<<< * (dest_size, decompressed_size)) * */ @@ -2695,7 +2695,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":183 * error = ZSTD_getErrorName(decompressed_size) * raise RuntimeError('Zstd decompression error: %s' % error) - * elif decompressed_size != dest_size: + * elif decompressed_size != dest_size: # <<<<<<<<<<<<<< * raise RuntimeError('Zstd decompression error: expected to decompress %s, got %s' % * (dest_size, decompressed_size)) */ @@ -2704,7 +2704,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":187 * (dest_size, decompressed_size)) * - * return dest + * return dest # <<<<<<<<<<<<<< * * */ @@ -2716,7 +2716,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":120 * * - * def decompress(source, dest=None): + * def decompress(source, dest=None): # <<<<<<<<<<<<<< * """Decompress data. * */ @@ -2741,7 +2741,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_2decompress(CYTHON_UNUSED PyObject *_ /* "numcodecs/zstd.pyx":210 * # enforce a max_buffer_size option here. * - * def __init__(self, level=DEFAULT_CLEVEL): + * def __init__(self, level=DEFAULT_CLEVEL): # <<<<<<<<<<<<<< * self.level = level * */ @@ -2858,7 +2858,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_4Zstd___init__(CYTHON_UNUSED PyObject /* "numcodecs/zstd.pyx":211 * * def __init__(self, level=DEFAULT_CLEVEL): - * self.level = level + * self.level = level # <<<<<<<<<<<<<< * * def encode(self, buf): */ @@ -2867,7 +2867,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_4Zstd___init__(CYTHON_UNUSED PyObject /* "numcodecs/zstd.pyx":210 * # enforce a max_buffer_size option here. * - * def __init__(self, level=DEFAULT_CLEVEL): + * def __init__(self, level=DEFAULT_CLEVEL): # <<<<<<<<<<<<<< * self.level = level * */ @@ -2887,7 +2887,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_4Zstd___init__(CYTHON_UNUSED PyObject /* "numcodecs/zstd.pyx":213 * self.level = level * - * def encode(self, buf): + * def encode(self, buf): # <<<<<<<<<<<<<< * buf = ensure_contiguous_ndarray(buf) * return compress(buf, self.level) */ @@ -2970,7 +2970,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_4Zstd_2encode(CYTHON_UNUSED PyObject /* "numcodecs/zstd.pyx":214 * * def encode(self, buf): - * buf = ensure_contiguous_ndarray(buf) + * buf = ensure_contiguous_ndarray(buf) # <<<<<<<<<<<<<< * return compress(buf, self.level) * */ @@ -2997,7 +2997,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_4Zstd_2encode(CYTHON_UNUSED PyObject /* "numcodecs/zstd.pyx":215 * def encode(self, buf): * buf = ensure_contiguous_ndarray(buf) - * return compress(buf, self.level) + * return compress(buf, self.level) # <<<<<<<<<<<<<< * * def decode(self, buf, out=None): */ @@ -3060,7 +3060,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_4Zstd_2encode(CYTHON_UNUSED PyObject /* "numcodecs/zstd.pyx":213 * self.level = level * - * def encode(self, buf): + * def encode(self, buf): # <<<<<<<<<<<<<< * buf = ensure_contiguous_ndarray(buf) * return compress(buf, self.level) */ @@ -3084,7 +3084,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_4Zstd_2encode(CYTHON_UNUSED PyObject /* "numcodecs/zstd.pyx":217 * return compress(buf, self.level) * - * def decode(self, buf, out=None): + * def decode(self, buf, out=None): # <<<<<<<<<<<<<< * buf = ensure_contiguous_ndarray(buf) * return decompress(buf, out) */ @@ -3181,7 +3181,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_4Zstd_4decode(CYTHON_UNUSED PyObject /* "numcodecs/zstd.pyx":218 * * def decode(self, buf, out=None): - * buf = ensure_contiguous_ndarray(buf) + * buf = ensure_contiguous_ndarray(buf) # <<<<<<<<<<<<<< * return decompress(buf, out) * */ @@ -3208,7 +3208,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_4Zstd_4decode(CYTHON_UNUSED PyObject /* "numcodecs/zstd.pyx":219 * def decode(self, buf, out=None): * buf = ensure_contiguous_ndarray(buf) - * return decompress(buf, out) + * return decompress(buf, out) # <<<<<<<<<<<<<< * * def __repr__(self): */ @@ -3267,7 +3267,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_4Zstd_4decode(CYTHON_UNUSED PyObject /* "numcodecs/zstd.pyx":217 * return compress(buf, self.level) * - * def decode(self, buf, out=None): + * def decode(self, buf, out=None): # <<<<<<<<<<<<<< * buf = ensure_contiguous_ndarray(buf) * return decompress(buf, out) */ @@ -3290,7 +3290,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_4Zstd_4decode(CYTHON_UNUSED PyObject /* "numcodecs/zstd.pyx":221 * return decompress(buf, out) * - * def __repr__(self): + * def __repr__(self): # <<<<<<<<<<<<<< * r = '%s(level=%r)' % \ * (type(self).__name__, */ @@ -3336,7 +3336,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_4Zstd_6__repr__(CYTHON_UNUSED PyObjec /* "numcodecs/zstd.pyx":223 * def __repr__(self): * r = '%s(level=%r)' % \ - * (type(self).__name__, + * (type(self).__name__, # <<<<<<<<<<<<<< * self.level) * return r */ @@ -3379,7 +3379,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_4Zstd_6__repr__(CYTHON_UNUSED PyObjec /* "numcodecs/zstd.pyx":222 * * def __repr__(self): - * r = '%s(level=%r)' % \ + * r = '%s(level=%r)' % \ # <<<<<<<<<<<<<< * (type(self).__name__, * self.level) */ @@ -3392,7 +3392,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_4Zstd_6__repr__(CYTHON_UNUSED PyObjec /* "numcodecs/zstd.pyx":225 * (type(self).__name__, * self.level) - * return r + * return r # <<<<<<<<<<<<<< */ __Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_r); @@ -3402,7 +3402,7 @@ static PyObject *__pyx_pf_9numcodecs_4zstd_4Zstd_6__repr__(CYTHON_UNUSED PyObjec /* "numcodecs/zstd.pyx":221 * return decompress(buf, out) * - * def __repr__(self): + * def __repr__(self): # <<<<<<<<<<<<<< * r = '%s(level=%r)' % \ * (type(self).__name__, */ @@ -3552,7 +3552,7 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { /* "numcodecs/zstd.pyx":153 * dest_size = ZSTD_getDecompressedSize(source_ptr, source_size) * if dest_size == 0: - * raise RuntimeError('Zstd decompression error: invalid input data') + * raise RuntimeError('Zstd decompression error: invalid input data') # <<<<<<<<<<<<<< * * # setup destination buffer */ @@ -3563,7 +3563,7 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { /* "numcodecs/zstd.pyx":58 * * - * def compress(source, int level=DEFAULT_CLEVEL): + * def compress(source, int level=DEFAULT_CLEVEL): # <<<<<<<<<<<<<< * """Compress data. * */ @@ -3575,7 +3575,7 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { /* "numcodecs/zstd.pyx":120 * * - * def decompress(source, dest=None): + * def decompress(source, dest=None): # <<<<<<<<<<<<<< * """Decompress data. * */ @@ -3587,7 +3587,7 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { /* "numcodecs/zstd.pyx":210 * # enforce a max_buffer_size option here. * - * def __init__(self, level=DEFAULT_CLEVEL): + * def __init__(self, level=DEFAULT_CLEVEL): # <<<<<<<<<<<<<< * self.level = level * */ @@ -3599,7 +3599,7 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { /* "numcodecs/zstd.pyx":213 * self.level = level * - * def encode(self, buf): + * def encode(self, buf): # <<<<<<<<<<<<<< * buf = ensure_contiguous_ndarray(buf) * return compress(buf, self.level) */ @@ -3611,7 +3611,7 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { /* "numcodecs/zstd.pyx":217 * return compress(buf, self.level) * - * def decode(self, buf, out=None): + * def decode(self, buf, out=None): # <<<<<<<<<<<<<< * buf = ensure_contiguous_ndarray(buf) * return decompress(buf, out) */ @@ -3626,7 +3626,7 @@ static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) { /* "numcodecs/zstd.pyx":221 * return decompress(buf, out) * - * def __repr__(self): + * def __repr__(self): # <<<<<<<<<<<<<< * r = '%s(level=%r)' % \ * (type(self).__name__, */ @@ -3945,7 +3945,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/zstd.pyx":13 * * from .compat_ext cimport Buffer - * from .compat_ext import Buffer + * from .compat_ext import Buffer # <<<<<<<<<<<<<< * from .compat import ensure_contiguous_ndarray * from .abc import Codec */ @@ -3962,7 +3962,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/zstd.pyx":14 * from .compat_ext cimport Buffer * from .compat_ext import Buffer - * from .compat import ensure_contiguous_ndarray + * from .compat import ensure_contiguous_ndarray # <<<<<<<<<<<<<< * from .abc import Codec * */ @@ -3983,7 +3983,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/zstd.pyx":15 * from .compat_ext import Buffer * from .compat import ensure_contiguous_ndarray - * from .abc import Codec + * from .abc import Codec # <<<<<<<<<<<<<< * * */ @@ -4004,7 +4004,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/zstd.pyx":45 * * - * VERSION_NUMBER = ZSTD_versionNumber() + * VERSION_NUMBER = ZSTD_versionNumber() # <<<<<<<<<<<<<< * MAJOR_VERSION_NUMBER = VERSION_NUMBER // (100 * 100) * MINOR_VERSION_NUMBER = (VERSION_NUMBER - (MAJOR_VERSION_NUMBER * 100 * 100)) // 100 */ @@ -4016,7 +4016,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/zstd.pyx":46 * * VERSION_NUMBER = ZSTD_versionNumber() - * MAJOR_VERSION_NUMBER = VERSION_NUMBER // (100 * 100) + * MAJOR_VERSION_NUMBER = VERSION_NUMBER // (100 * 100) # <<<<<<<<<<<<<< * MINOR_VERSION_NUMBER = (VERSION_NUMBER - (MAJOR_VERSION_NUMBER * 100 * 100)) // 100 * MICRO_VERSION_NUMBER = ( */ @@ -4031,7 +4031,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/zstd.pyx":47 * VERSION_NUMBER = ZSTD_versionNumber() * MAJOR_VERSION_NUMBER = VERSION_NUMBER // (100 * 100) - * MINOR_VERSION_NUMBER = (VERSION_NUMBER - (MAJOR_VERSION_NUMBER * 100 * 100)) // 100 + * MINOR_VERSION_NUMBER = (VERSION_NUMBER - (MAJOR_VERSION_NUMBER * 100 * 100)) // 100 # <<<<<<<<<<<<<< * MICRO_VERSION_NUMBER = ( * VERSION_NUMBER - */ @@ -4058,7 +4058,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/zstd.pyx":49 * MINOR_VERSION_NUMBER = (VERSION_NUMBER - (MAJOR_VERSION_NUMBER * 100 * 100)) // 100 * MICRO_VERSION_NUMBER = ( - * VERSION_NUMBER - + * VERSION_NUMBER - # <<<<<<<<<<<<<< * (MAJOR_VERSION_NUMBER * 100 * 100) - * (MINOR_VERSION_NUMBER * 100) */ @@ -4068,7 +4068,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/zstd.pyx":50 * MICRO_VERSION_NUMBER = ( * VERSION_NUMBER - - * (MAJOR_VERSION_NUMBER * 100 * 100) - + * (MAJOR_VERSION_NUMBER * 100 * 100) - # <<<<<<<<<<<<<< * (MINOR_VERSION_NUMBER * 100) * ) */ @@ -4084,7 +4084,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/zstd.pyx":49 * MINOR_VERSION_NUMBER = (VERSION_NUMBER - (MAJOR_VERSION_NUMBER * 100 * 100)) // 100 * MICRO_VERSION_NUMBER = ( - * VERSION_NUMBER - + * VERSION_NUMBER - # <<<<<<<<<<<<<< * (MAJOR_VERSION_NUMBER * 100 * 100) - * (MINOR_VERSION_NUMBER * 100) */ @@ -4096,7 +4096,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/zstd.pyx":51 * VERSION_NUMBER - * (MAJOR_VERSION_NUMBER * 100 * 100) - - * (MINOR_VERSION_NUMBER * 100) + * (MINOR_VERSION_NUMBER * 100) # <<<<<<<<<<<<<< * ) * __version__ = '%s.%s.%s' % (MAJOR_VERSION_NUMBER, MINOR_VERSION_NUMBER, MICRO_VERSION_NUMBER) */ @@ -4109,7 +4109,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/zstd.pyx":50 * MICRO_VERSION_NUMBER = ( * VERSION_NUMBER - - * (MAJOR_VERSION_NUMBER * 100 * 100) - + * (MAJOR_VERSION_NUMBER * 100 * 100) - # <<<<<<<<<<<<<< * (MINOR_VERSION_NUMBER * 100) * ) */ @@ -4123,7 +4123,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/zstd.pyx":53 * (MINOR_VERSION_NUMBER * 100) * ) - * __version__ = '%s.%s.%s' % (MAJOR_VERSION_NUMBER, MINOR_VERSION_NUMBER, MICRO_VERSION_NUMBER) + * __version__ = '%s.%s.%s' % (MAJOR_VERSION_NUMBER, MINOR_VERSION_NUMBER, MICRO_VERSION_NUMBER) # <<<<<<<<<<<<<< * DEFAULT_CLEVEL = 1 * MAX_CLEVEL = ZSTD_maxCLevel() */ @@ -4178,7 +4178,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/zstd.pyx":54 * ) * __version__ = '%s.%s.%s' % (MAJOR_VERSION_NUMBER, MINOR_VERSION_NUMBER, MICRO_VERSION_NUMBER) - * DEFAULT_CLEVEL = 1 + * DEFAULT_CLEVEL = 1 # <<<<<<<<<<<<<< * MAX_CLEVEL = ZSTD_maxCLevel() * */ @@ -4187,7 +4187,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/zstd.pyx":55 * __version__ = '%s.%s.%s' % (MAJOR_VERSION_NUMBER, MINOR_VERSION_NUMBER, MICRO_VERSION_NUMBER) * DEFAULT_CLEVEL = 1 - * MAX_CLEVEL = ZSTD_maxCLevel() + * MAX_CLEVEL = ZSTD_maxCLevel() # <<<<<<<<<<<<<< * * */ @@ -4199,7 +4199,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/zstd.pyx":58 * * - * def compress(source, int level=DEFAULT_CLEVEL): + * def compress(source, int level=DEFAULT_CLEVEL): # <<<<<<<<<<<<<< * """Compress data. * */ @@ -4216,7 +4216,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/zstd.pyx":120 * * - * def decompress(source, dest=None): + * def decompress(source, dest=None): # <<<<<<<<<<<<<< * """Decompress data. * */ @@ -4228,7 +4228,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/zstd.pyx":190 * * - * class Zstd(Codec): + * class Zstd(Codec): # <<<<<<<<<<<<<< * """Codec providing compression using Zstandard. * */ @@ -4247,7 +4247,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/zstd.pyx":204 * """ * - * codec_id = 'zstd' + * codec_id = 'zstd' # <<<<<<<<<<<<<< * * # Note: unlike the LZ4 and Blosc codecs, there does not appear to be a (currently) */ @@ -4256,7 +4256,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/zstd.pyx":210 * # enforce a max_buffer_size option here. * - * def __init__(self, level=DEFAULT_CLEVEL): + * def __init__(self, level=DEFAULT_CLEVEL): # <<<<<<<<<<<<<< * self.level = level * */ @@ -4275,7 +4275,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/zstd.pyx":213 * self.level = level * - * def encode(self, buf): + * def encode(self, buf): # <<<<<<<<<<<<<< * buf = ensure_contiguous_ndarray(buf) * return compress(buf, self.level) */ @@ -4287,7 +4287,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/zstd.pyx":217 * return compress(buf, self.level) * - * def decode(self, buf, out=None): + * def decode(self, buf, out=None): # <<<<<<<<<<<<<< * buf = ensure_contiguous_ndarray(buf) * return decompress(buf, out) */ @@ -4300,7 +4300,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/zstd.pyx":221 * return decompress(buf, out) * - * def __repr__(self): + * def __repr__(self): # <<<<<<<<<<<<<< * r = '%s(level=%r)' % \ * (type(self).__name__, */ @@ -4312,7 +4312,7 @@ if (!__Pyx_RefNanny) { /* "numcodecs/zstd.pyx":190 * * - * class Zstd(Codec): + * class Zstd(Codec): # <<<<<<<<<<<<<< * """Codec providing compression using Zstandard. * */ From 7b45cf68207854e61faaf644cf88c45a0ed0b56a Mon Sep 17 00:00:00 2001 From: John Kirkham Date: Thu, 10 Sep 2020 20:16:39 -0700 Subject: [PATCH 57/69] Use `pytest.skip` to skip testing --- numcodecs/tests/test_zfpy.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/numcodecs/tests/test_zfpy.py b/numcodecs/tests/test_zfpy.py index 7f142157..0ab54e0b 100644 --- a/numcodecs/tests/test_zfpy.py +++ b/numcodecs/tests/test_zfpy.py @@ -1,4 +1,4 @@ -import unittest +import pytest import numpy as np @@ -8,7 +8,7 @@ # noinspection PyProtectedMember from numcodecs.zfpy import ZFPY, _zfpy except ImportError: # pragma: no cover - raise unittest.SkipTest("ZFPY not available") + pytest.skip("ZFPY not available", allow_module_level=True) from numcodecs.tests.common import (check_encode_decode_array, check_config, check_repr, From 5c1cbcb51fc2b2faf2ae4a0e17d2166c613d8f64 Mon Sep 17 00:00:00 2001 From: John Kirkham Date: Thu, 10 Sep 2020 20:18:35 -0700 Subject: [PATCH 58/69] Run `black` on zfpy --- numcodecs/tests/test_zfpy.py | 28 ++++++++++++++++-------- numcodecs/zfpy.py | 41 ++++++++++++++++++++---------------- 2 files changed, 42 insertions(+), 27 deletions(-) diff --git a/numcodecs/tests/test_zfpy.py b/numcodecs/tests/test_zfpy.py index 0ab54e0b..b6954dc9 100644 --- a/numcodecs/tests/test_zfpy.py +++ b/numcodecs/tests/test_zfpy.py @@ -11,10 +11,14 @@ pytest.skip("ZFPY not available", allow_module_level=True) -from numcodecs.tests.common import (check_encode_decode_array, check_config, check_repr, - check_backwards_compatibility, - check_err_decode_object_buffer, - check_err_encode_object_buffer) +from numcodecs.tests.common import ( + check_encode_decode_array, + check_config, + check_repr, + check_backwards_compatibility, + check_err_decode_object_buffer, + check_err_encode_object_buffer, +) codecs = [ @@ -29,14 +33,18 @@ # mix of shapes: 1D, 2D, 3D # mix of orders: C, F arrays = [ - np.linspace(1000, 1001, 1000, dtype='f4'), - np.linspace(1000, 1001, 1000, dtype='f8'), + np.linspace(1000, 1001, 1000, dtype="f4"), + np.linspace(1000, 1001, 1000, dtype="f8"), np.random.normal(loc=1000, scale=1, size=(100, 10)), np.random.normal(loc=1000, scale=1, size=(10, 10, 10)), np.random.normal(loc=1000, scale=1, size=(2, 5, 10, 10)), np.asfortranarray(np.random.normal(loc=1000, scale=1, size=(5, 10, 20))), - np.random.randint(-2**31, -2**31 + 20, size=1000, dtype='i4').reshape(100, 10), - np.random.randint(-2**63, -2**63 + 20, size=1000, dtype='i8').reshape(10, 10, 10), + np.random.randint(-(2 ** 31), -(2 ** 31) + 20, size=1000, dtype="i4").reshape( + 100, 10 + ), + np.random.randint(-(2 ** 63), -(2 ** 63) + 20, size=1000, dtype="i8").reshape( + 10, 10, 10 + ), ] @@ -65,7 +73,9 @@ def test_backwards_compatibility(): codec = [code] check_backwards_compatibility(ZFPY.codec_id, arrays, codec) else: - check_backwards_compatibility(ZFPY.codec_id, arrays[:len(arrays)-2], codecs) + check_backwards_compatibility( + ZFPY.codec_id, arrays[: len(arrays) - 2], codecs + ) def test_err_decode_object_buffer(): diff --git a/numcodecs/zfpy.py b/numcodecs/zfpy.py index 35489728..51940399 100644 --- a/numcodecs/zfpy.py +++ b/numcodecs/zfpy.py @@ -28,23 +28,23 @@ class ZFPY(Codec): """ - codec_id = 'zfpy' - - def __init__(self, mode=_zfpy.mode_fixed_accuracy, tolerance=-1, - rate=-1, precision=-1, compression_kwargs=None): + codec_id = "zfpy" + + def __init__( + self, + mode=_zfpy.mode_fixed_accuracy, + tolerance=-1, + rate=-1, + precision=-1, + compression_kwargs=None, + ): self.mode = mode if mode == _zfpy.mode_fixed_accuracy: - self.compression_kwargs = { - "tolerance": tolerance - } + self.compression_kwargs = {"tolerance": tolerance} elif mode == _zfpy.mode_fixed_rate: - self.compression_kwargs = { - "rate": rate - } + self.compression_kwargs = {"rate": rate} elif mode == _zfpy.mode_fixed_precision: - self.compression_kwargs = { - "precision": precision - } + self.compression_kwargs = {"precision": precision} else: pass @@ -58,8 +58,9 @@ def encode(self, buf): buf = ensure_contiguous_ndarray(buf) # do compression - return _zfpy.compress_numpy(buf, write_header=True, - **self.compression_kwargs) + return _zfpy.compress_numpy( + buf, write_header=True, **self.compression_kwargs + ) def decode(self, buf, out=None): @@ -78,7 +79,11 @@ def decode(self, buf, out=None): return dec def __repr__(self): - r = '%s(mode=%r, tolerance=%s, rate=%s, precision=%s)' % \ - (type(self).__name__, self.mode, self.tolerance, self.rate, - self.precision) + r = "%s(mode=%r, tolerance=%s, rate=%s, precision=%s)" % ( + type(self).__name__, + self.mode, + self.tolerance, + self.rate, + self.precision, + ) return r From ce4be10207f56c6cb442a51b8e5f08a164e8d080 Mon Sep 17 00:00:00 2001 From: haiying xu Date: Wed, 17 Mar 2021 16:19:10 -0600 Subject: [PATCH 59/69] Update requirements_rtfd.txt --- requirements_rtfd.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/requirements_rtfd.txt b/requirements_rtfd.txt index 8854bded..7ad663e3 100644 --- a/requirements_rtfd.txt +++ b/requirements_rtfd.txt @@ -6,4 +6,5 @@ numpydoc mock numpy cython +python<=3.8 zfpy==0.5.5 From 3e6bd3865d81d35a9aa37f4679c17190c2dc1c79 Mon Sep 17 00:00:00 2001 From: haiying xu Date: Wed, 17 Mar 2021 16:20:25 -0600 Subject: [PATCH 60/69] Update requirements_dev.txt --- requirements_dev.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/requirements_dev.txt b/requirements_dev.txt index 92a3672b..d2041356 100644 --- a/requirements_dev.txt +++ b/requirements_dev.txt @@ -1,5 +1,6 @@ Cython==0.29.21 msgpack==1.0.2 numpy==1.19.0 +python<=3.8 zfpy==0.5.5 From 97abde3f9f7b72d36d436702e4d872e6548d6607 Mon Sep 17 00:00:00 2001 From: haiying xu Date: Wed, 17 Mar 2021 16:58:37 -0600 Subject: [PATCH 61/69] Update requirements_dev.txt --- requirements_dev.txt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/requirements_dev.txt b/requirements_dev.txt index d2041356..a18128c2 100644 --- a/requirements_dev.txt +++ b/requirements_dev.txt @@ -1,6 +1,5 @@ Cython==0.29.21 msgpack==1.0.2 numpy==1.19.0 -python<=3.8 -zfpy==0.5.5 +zfpy==0.5.5;python_version<'3.9' From 3669bd513bbbc6e648c7c897f5bef48c5cc2b383 Mon Sep 17 00:00:00 2001 From: haiying xu Date: Wed, 17 Mar 2021 16:59:32 -0600 Subject: [PATCH 62/69] Update requirements_rtfd.txt --- requirements_rtfd.txt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/requirements_rtfd.txt b/requirements_rtfd.txt index 7ad663e3..b16be15e 100644 --- a/requirements_rtfd.txt +++ b/requirements_rtfd.txt @@ -6,5 +6,4 @@ numpydoc mock numpy cython -python<=3.8 -zfpy==0.5.5 +zfpy==0.5.5;python_version<'3.9' From d5615878304f21dc20e6c5a24344b0c3440a85f2 Mon Sep 17 00:00:00 2001 From: haiying xu Date: Wed, 17 Mar 2021 17:16:55 -0600 Subject: [PATCH 63/69] Update requirements_rtfd.txt --- requirements_rtfd.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements_rtfd.txt b/requirements_rtfd.txt index b16be15e..72bb7fe5 100644 --- a/requirements_rtfd.txt +++ b/requirements_rtfd.txt @@ -6,4 +6,4 @@ numpydoc mock numpy cython -zfpy==0.5.5;python_version<'3.9' +zfpy==0.5.5; python_version < '3.9' From c7b699a7b6396d9f9e9fd426e728b4f71017cd3f Mon Sep 17 00:00:00 2001 From: haiying xu Date: Wed, 17 Mar 2021 17:17:22 -0600 Subject: [PATCH 64/69] Update requirements_dev.txt --- requirements_dev.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements_dev.txt b/requirements_dev.txt index a18128c2..c0d43923 100644 --- a/requirements_dev.txt +++ b/requirements_dev.txt @@ -1,5 +1,5 @@ Cython==0.29.21 msgpack==1.0.2 numpy==1.19.0 -zfpy==0.5.5;python_version<'3.9' +zfpy==0.5.5; python_version < '3.9' From 97848a039d1eb2763d22e24b16b218bdbbfa7593 Mon Sep 17 00:00:00 2001 From: haiying xu Date: Wed, 17 Mar 2021 19:36:07 -0600 Subject: [PATCH 65/69] Update conf.py --- docs/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/conf.py b/docs/conf.py index b2a89606..d2df870c 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -24,7 +24,7 @@ def __getattr__(cls, name): return Mock() -MOCK_MODULES = ['msgpack'] +MOCK_MODULES = ['msgpack','zfpy'] sys.modules.update((mod_name, Mock()) for mod_name in MOCK_MODULES) From bd5d835e8a382daee1c38b768d39900629488f28 Mon Sep 17 00:00:00 2001 From: haiying xu Date: Wed, 17 Mar 2021 19:50:10 -0600 Subject: [PATCH 66/69] Update conf.py --- docs/conf.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/conf.py b/docs/conf.py index d2df870c..77dbdef8 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -24,9 +24,9 @@ def __getattr__(cls, name): return Mock() -MOCK_MODULES = ['msgpack','zfpy'] +MOCK_MODULES = ['msgpack'] sys.modules.update((mod_name, Mock()) for mod_name in MOCK_MODULES) - +autodoc_mock_imports = ['zfpy'] # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the From fa34826f44ec7fc03918caab884e847be5a06720 Mon Sep 17 00:00:00 2001 From: haiying xu Date: Wed, 17 Mar 2021 20:14:14 -0600 Subject: [PATCH 67/69] Update conf.py --- docs/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/conf.py b/docs/conf.py index 77dbdef8..d0b0eab0 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -26,7 +26,7 @@ def __getattr__(cls, name): MOCK_MODULES = ['msgpack'] sys.modules.update((mod_name, Mock()) for mod_name in MOCK_MODULES) -autodoc_mock_imports = ['zfpy'] +autodoc_mock_imports = ['zfpy','ZFPY'] # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the From 0c44788f487d35583d19f47fae687a3ac6872b4a Mon Sep 17 00:00:00 2001 From: haiying xu Date: Thu, 18 Mar 2021 10:38:25 -0600 Subject: [PATCH 68/69] Update conf.py --- docs/conf.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/conf.py b/docs/conf.py index d0b0eab0..2d66daad 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -26,7 +26,7 @@ def __getattr__(cls, name): MOCK_MODULES = ['msgpack'] sys.modules.update((mod_name, Mock()) for mod_name in MOCK_MODULES) -autodoc_mock_imports = ['zfpy','ZFPY'] + # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the @@ -99,7 +99,7 @@ def __getattr__(cls, name): # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. # This patterns also effect to html_static_path and html_extra_path -exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] +exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store', 'zfpy.rst'] # The reST default role (used for this markup: `text`) to use for all # documents. From 44dde116b10d53e974bf6dfedb6bdc1ddfc32474 Mon Sep 17 00:00:00 2001 From: haiying xu Date: Thu, 18 Mar 2021 11:11:40 -0600 Subject: [PATCH 69/69] Update conf.py --- docs/conf.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/conf.py b/docs/conf.py index 2d66daad..0c978ac2 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -24,7 +24,7 @@ def __getattr__(cls, name): return Mock() -MOCK_MODULES = ['msgpack'] +MOCK_MODULES = ['msgpack', 'zfpy'] sys.modules.update((mod_name, Mock()) for mod_name in MOCK_MODULES) @@ -99,7 +99,7 @@ def __getattr__(cls, name): # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. # This patterns also effect to html_static_path and html_extra_path -exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store', 'zfpy.rst'] +exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] # The reST default role (used for this markup: `text`) to use for all # documents.